ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKaW5kZXggNDYxNDgxZC4uN2RjMDY5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKQEAgLTE2LDYgKzE2LDggQEAKIAktIExpc3Qgb2YgUkNVIHBhcGVycyAoYmlibGlvZ3JhcGh5KSBnb2luZyBiYWNrIHRvIDE5ODAuCiB0b3J0dXJlLnR4dAogCS0gUkNVIFRvcnR1cmUgVGVzdCBPcGVyYXRpb24gKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKQordHJhY2UudHh0CisJLSBDT05GSUdfUkNVX1RSQUNFIGRlYnVnZnMgZmlsZXMgYW5kIGZvcm1hdHMKIFVQLnR4dAogCS0gUkNVIG9uIFVuaXByb2Nlc3NvciBTeXN0ZW1zCiB3aGF0aXNSQ1UudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4ODQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dApAQCAtMCwwICsxLDQxMyBAQAorQ09ORklHX1JDVV9UUkFDRSBkZWJ1Z2ZzIEZpbGVzIGFuZCBGb3JtYXRzCisKKworVGhlIHJjdXByZWVtcHQgYW5kIHJjdXRyZWUgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlIGRlYnVnZnMgdHJhY2UKK291dHB1dCB0aGF0IHN1bW1hcml6ZXMgY291bnRlcnMgYW5kIHN0YXRlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yCitkZWJ1Z2dpbmcgUkNVIGl0c2VsZiwgYW5kIGNhbiBzb21ldGltZXMgYWxzbyBoZWxwIHRvIGRlYnVnIGFidXNlcyBvZiBSQ1UuCitOb3RlIHRoYXQgdGhlIHJjdWNsYXNzaWMgaW1wbGVtZW50YXRpb24gb2YgUkNVIGRvZXMgbm90IHByb3ZpZGUgZGVidWdmcwordHJhY2Ugb3V0cHV0LgorCitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBkZWJ1Z2ZzIGZpbGVzIGFuZCBmb3JtYXRzIGZvcgorcHJlZW1wdGFibGUgUkNVIChyY3VwcmVlbXB0KSBhbmQgaGllcmFyY2hpY2FsIFJDVSAocmN1dHJlZSkuCisKKworUHJlZW1wdGFibGUgUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKKworVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgcHJvdmlkZXMgdGhyZWUgZGVidWdmcyBmaWxlcyB1bmRlciB0aGUKK3RvcC1sZXZlbCBkaXJlY3RvcnkgUkNVOiByY3UvcmN1Y3RycyAod2hpY2ggZGlzcGxheXMgdGhlIHBlci1DUFUKK2NvdW50ZXJzIHVzZWQgYnkgcHJlZW1wdGFibGUgUkNVKSByY3UvcmN1Z3AgKHdoaWNoIGRpc3BsYXlzIGdyYWNlLXBlcmlvZAorY291bnRlcnMpLCBhbmQgcmN1L3JjdXN0YXRzICh3aGljaCBpbnRlcm5hbCBjb3VudGVycyBmb3IgZGVidWdnaW5nIFJDVSkuCisKK1RoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1Y3RycyIgbG9va3MgYXMgZm9sbG93czoKKworQ1BVIGxhc3QgY3VyIEYgTQorICAwICAgIDUgIC01IDAgMAorICAxICAgLTEgICAwIDAgMAorICAyICAgIDAgICAxIDAgMAorICAzICAgIDAgICAxIDAgMAorICA0ICAgIDAgICAxIDAgMAorICA1ICAgIDAgICAxIDAgMAorICA2ICAgIDAgICAyIDAgMAorICA3ICAgIDAgIC0xIDAgMAorICA4ICAgIDAgICAxIDAgMAorZ2dwID0gMjYyMjYsIHN0YXRlID0gd2FpdHplcm8KKworVGhlIHBlci1DUFUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgorCitvCSJDUFUiIGdpdmVzIHRoZSBDUFUgbnVtYmVyLiAgT2ZmbGluZSBDUFVzIGFyZSBub3QgZGlzcGxheWVkLgorCitvCSJsYXN0IiBnaXZlcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdCBpcyBiZWluZyBkZWNyZW1lbnRlZAorCWZvciB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgcGhhc2UuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwKKwl0aGUgY291bnRlcnMgc3VtIHRvIDQsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgc3RpbGwgZm91cgorCVJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgc3RpbGwgcnVubmluZyB0aGF0IHN0YXJ0ZWQKKwliZWZvcmUgdGhlIGxhc3QgY291bnRlciBmbGlwLgorCitvCSJjdXIiIGdpdmVzIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZworCWJvdGggaW5jcmVtZW50ZWQgKGJ5IHJjdV9yZWFkX2xvY2soKSkgYW5kIGRlY3JlbWVudGVkIChieQorCXJjdV9yZWFkX3VubG9jaygpKS4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgY291bnRlcnMgc3VtIHRvCisJMSwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgorCXN0aWxsIHJ1bm5pbmcgdGhhdCBzdGFydGVkIGFmdGVyIHRoZSBsYXN0IGNvdW50ZXIgZmxpcC4KKworbwkiRiIgaW5kaWNhdGVzIHdoZXRoZXIgUkNVIGlzIHdhaXRpbmcgZm9yIHRoaXMgQ1BVIHRvIGFja25vd2xlZGdlCisJYSBjb3VudGVyIGZsaXAuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgUkNVIGlzIG5vdCB3YWl0aW5nIG9uIGFueSwKKwl3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHN0YXRlIGJlaW5nICJ3YWl0emVybyIgcmF0aGVyIHRoYW4KKwkid2FpdGFjayIuCisKK28JIk0iIGluZGljYXRlcyB3aGV0aGVyIFJDVSBpcyB3YWl0aW5nIGZvciB0aGlzIENQVSB0byBleGVjdXRlIGEKKwltZW1vcnkgYmFycmllci4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCBSQ1UgaXMgbm90IHdhaXRpbmcgb24gYW55LAorCXdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc3RhdGUgYmVpbmcgIndhaXR6ZXJvIiByYXRoZXIgdGhhbgorCSJ3YWl0bWIiLgorCitvCSJnZ3AiIGlzIHRoZSBnbG9iYWwgZ3JhY2UtcGVyaW9kIGNvdW50ZXIuCisKK28JInN0YXRlIiBpcyB0aGUgUkNVIHN0YXRlLCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKwlvCSJpZGxlIjogdGhlcmUgaXMgbm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLgorCisJbwkid2FpdGFjayI6IFJDVSBqdXN0IGluY3JlbWVudGVkIHRoZSBnbG9iYWwgZ3JhY2UtcGVyaW9kCisJCWNvdW50ZXIsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHJldmVyc2luZyB0aGUgcm9sZXMgb2YKKwkJdGhlICJsYXN0IiBhbmQgImN1ciIgY291bnRlcnMgYWJvdmUsIGFuZCBpcyB3YWl0aW5nIGZvcgorCQlhbGwgdGhlIENQVXMgdG8gYWNrbm93bGVkZ2UgdGhlIGZsaXAuICBPbmNlIHRoZSBmbGlwIGhhcworCQliZWVuIGFja25vd2xlZGdlZCwgQ1BVcyB3aWxsIG5vIGxvbmdlciBiZSBpbmNyZW1lbnRpbmcKKwkJd2hhdCBhcmUgbm93IHRoZSAibGFzdCIgY291bnRlcnMsIHNvIHRoYXQgdGhlaXIgc3VtIHdpbGwKKwkJZGVjcmVhc2UgbW9ub3RvbmljYWxseSBkb3duIHRvIHplcm8uCisKKwlvCSJ3YWl0emVybyI6IFJDVSBpcyB3YWl0aW5nIGZvciB0aGUgc3VtIG9mIHRoZSAibGFzdCIgY291bnRlcnMKKwkJdG8gZGVjcmVhc2UgdG8gemVyby4KKworCW8JIndhaXRtYiI6IFJDVSBpcyB3YWl0aW5nIGZvciBlYWNoIENQVSB0byBleGVjdXRlIGEgbWVtb3J5CisJCWJhcnJpZXIsIHdoaWNoIGVuc3VyZXMgdGhhdCBpbnN0cnVjdGlvbnMgZnJvbSBhIGdpdmVuIENQVSdzCisJCWxhc3QgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGNhbm5vdCBiZSByZW9yZGVyZWQKKwkJd2l0aCBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoZSBtZW1vcnktYmFycmllciBpbnN0cnVjdGlvbi4KKworVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VncCIgbG9va3MgYXMgZm9sbG93czoKKworb2xkZ2dwPTQ4ODcwICBuZXdnZ3A9NDg4NzMKKworTm90ZSB0aGF0IHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgcHJvdm9rZXMgYSBzeW5jaHJvbml6ZV9yY3UoKS4gIFRoZQorIm9sZGdncCIgdmFsdWUgaXMgdGhhdCBvZiAiZ2dwIiBmcm9tIHJjdS9yY3VjdHJzIGFib3ZlLCB0YWtlbiBiZWZvcmUKK2V4ZWN1dGluZyB0aGUgc3luY2hyb25pemVfcmN1KCksIGFuZCB0aGUgIm5ld2dncCIgdmFsdWUgaXMgYWxzbyB0aGUKKyJnZ3AiIHZhbHVlLCBidXQgdGFrZW4gYWZ0ZXIgdGhlIHN5bmNocm9uaXplX3JjdSgpIGNvbW1hbmQgcmV0dXJucy4KKworCitUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWdwIiBsb29rcyBhcyBmb2xsb3dzOgorCituYT0xMzM3OTU1IG5sPTQwIHdhPTEzMzc5MTUgd2w9NDQgZGE9MTMzNzg3MSBkbD0wIGRyPTEzMzc4NzEgZGk9MTMzNzg3MQorMT01MDk4OSBlMT02MTM4IGkxPTQ5NzIyIGllMT04MiBnMT00OTY0MCBhMT0zMTUyMDMgYWUxPTI2NTU2MyBhMj00OTY0MAorejE9MTQwMTI0NCB6ZTE9MTM1MTYwNSB6Mj00OTYzOSBtMT01NjYxMjUzIG1lMT01NjExNjE0IG0yPTQ5NjM5CisKK1RoZXNlIGFyZSBjb3VudGVycyB0cmFja2luZyBpbnRlcm5hbCBwcmVlbXB0YWJsZS1SQ1UgZXZlbnRzLCBob3dldmVyLAorc29tZSBvZiB0aGVtIG1heSBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGdvcml0aG1zIHVzaW5nIFJDVS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgIm5sIiwgIndsIiwgYW5kICJkbCIgdmFsdWVzIHRyYWNrIHRoZSBudW1iZXIgb2YgUkNVCitjYWxsYmFja3MgaW4gdmFyaW91cyBzdGF0ZXMuICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgorCitvCSJuYSIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIGVucXVldWVkCisJc2luY2UgYm9vdC4KKworbwkibmwiIGlzIHRoZSBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB3YWl0aW5nIGZvciB0aGUgcHJldmlvdXMKKwlncmFjZSBwZXJpb2QgdG8gZW5kIHNvIHRoYXQgdGhleSBjYW4gc3RhcnQgd2FpdGluZyBvbiB0aGUgbmV4dAorCWdyYWNlIHBlcmlvZC4KKworbwkid2EiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgc3RhcnRlZCB3YWl0aW5nCisJZm9yIGEgZ3JhY2UgcGVyaW9kIHNpbmNlIGJvb3QuICAibmEiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvCisJIm5sIiBwbHVzICJ3YSIuCisKK28JIndsIiBpcyB0aGUgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgY3VycmVudGx5IHdhaXRpbmcgZm9yIHRoZWlyCisJZ3JhY2UgcGVyaW9kIHRvIGVuZC4KKworbwkiZGEiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB3aG9zZSBncmFjZSBwZXJpb2RzCisJaGF2ZSBjb21wbGV0ZWQgc2luY2UgYm9vdC4gICJ3YSIgc2hvdWxkIGJlIHJvdWdobHkgZXF1YWwgdG8KKwkid2wiIHBsdXMgImRhIi4KKworbwkiZHIiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkCisJZnJvbSB0aGUgbGlzdCBvZiBjYWxsYmFja3MgcmVhZHkgdG8gaW52b2tlLiAgImRyIiBzaG91bGQgYmUgcm91Z2hseQorCWVxdWFsIHRvICJkYSIuCisKK28JImRpIiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIGJlZW4gaW52b2tlZAorCXNpbmNlIGJvb3QuICAiZGkiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvICJkYSIsIHRob3VnaCBzb21lCisJZWFybHkgdmVyc2lvbnMgb2YgcHJlZW1wdGFibGUgUkNVIGhhZCBhIGJ1ZyBzbyB0aGF0IG9ubHkgdGhlCisJbGFzdCBDUFUncyBjb3VudCBvZiBpbnZvY2F0aW9ucyB3YXMgZGlzcGxheWVkLCByYXRoZXIgdGhhbiB0aGUKKwlzdW0gb2YgYWxsIENQVSdzIGNvdW50cy4KKworbwkiMSIgaXMgdGhlIG51bWJlciBvZiBjYWxscyB0byByY3VfdHJ5X2ZsaXAoKS4gIFRoaXMgc2hvdWxkIGJlCisJcm91Z2hseSBlcXVhbCB0byB0aGUgc3VtIG9mICJlMSIsICJpMSIsICJhMSIsICJ6MSIsIGFuZCAibTEiCisJZGVzY3JpYmVkIGJlbG93LiAgSW4gb3RoZXIgd29yZHMsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdAorCXRoZSBzdGF0ZSBtYWNoaW5lIGlzIHZpc2l0ZWQgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBzdW0gb2YgdGhlCisJbnVtYmVyIG9mIHRpbWVzIHRoYXQgZWFjaCBzdGF0ZSBpcyB2aXNpdGVkIHBsdXMgdGhlIG51bWJlciBvZgorCXRpbWVzIHRoYXQgdGhlIHN0YXRlLW1hY2hpbmUgbG9jayBhY3F1aXNpdGlvbiBmYWlsZWQuCisKK28JImUxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwKCkgd2FzIHVuYWJsZSB0bworCWFjcXVpcmUgdGhlIGZsaXBsb2NrLgorCitvCSJpMSIgaXMgdGhlIG51bWJlciBvZiBjYWxscyB0byByY3VfdHJ5X2ZsaXBfaWRsZSgpLgorCitvCSJpZTEiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgcmN1X3RyeV9mbGlwX2lkbGUoKSBleGl0ZWQgZWFybHkKKwlkdWUgdG8gdGhlIGNhbGxpbmcgQ1BVIGhhdmluZyBubyB3b3JrIGZvciBSQ1UuCisKK28JImcxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX2lkbGUoKSBkZWNpZGVkCisJdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAgImkxIiBzaG91bGQgYmUgcm91Z2hseSBlcXVhbCB0bworCSJpZTEiIHBsdXMgImcxIi4KKworbwkiYTEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRhY2soKS4KKworbwkiYWUxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX3dhaXRhY2soKSBmb3VuZAorCXRoYXQgYXQgbGVhc3Qgb25lIENQVSBoYWQgbm90IHlldCBhY2tub3dsZWRnZSB0aGUgbmV3IGdyYWNlIHBlcmlvZAorCShBS0EgImNvdW50ZXIgZmxpcCIpLgorCitvCSJhMiIgaXMgdGhlIG51bWJlciBvZiB0aW1lIHJjdV90cnlfZmxpcF93YWl0YWNrKCkgZm91bmQgdGhhdAorCWFsbCBDUFVzIGhhZCBhY2tub3dsZWRnZWQuICAiYTEiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvCisJImFlMSIgcGx1cyAiYTIiLiAgKFRoaXMgcGFydGljdWxhciBvdXRwdXQgd2FzIGNvbGxlY3RlZCBvbgorCWEgMTI4LUNQVSBtYWNoaW5lLCBoZW5jZSB0aGUgc21hbGxlci10aGFuLXVzdWFsIGZyYWN0aW9uIG9mCisJY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRhY2soKSBmaW5kaW5nIGFsbCBDUFVzIGhhdmluZyBhbHJlYWR5CisJYWNrbm93bGVkZ2VkLikKKworbwkiejEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXR6ZXJvKCkuCisKK28JInplMSIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHJjdV90cnlfZmxpcF93YWl0emVybygpIGZvdW5kCisJdGhhdCBub3QgYWxsIG9mIHRoZSBvbGQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYWQKKwljb21wbGV0ZWQuCisKK28JInoyIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX3dhaXR6ZXJvKCkgZmluZHMKKwl0aGUgc3VtIG9mIHRoZSBjb3VudGVycyBlcXVhbCB0byB6ZXJvLCBpbiBvdGhlciB3b3JkcywgdGhhdAorCWFsbCBvZiB0aGUgb2xkIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGFkIGNvbXBsZXRlZC4KKwlUaGUgdmFsdWUgb2YgInoxIiBzaG91bGQgYmUgcm91Z2hseSBlcXVhbCB0byAiemUxIiBwbHVzCisJInoyIi4KKworbwkibTEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRtYigpLgorCitvCSJtZTEiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByY3VfdHJ5X2ZsaXBfd2FpdG1iKCkgZmluZHMKKwl0aGF0IGF0IGxlYXN0IG9uZSBDUFUgaGFzIG5vdCB5ZXQgZXhlY3V0ZWQgYSBtZW1vcnkgYmFycmllci4KKworbwkibTIiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByY3VfdHJ5X2ZsaXBfd2FpdG1iKCkgZmluZHMgdGhhdAorCWFsbCBDUFVzIGhhdmUgZXhlY3V0ZWQgYSBtZW1vcnkgYmFycmllci4KKworCitIaWVyYXJjaGljYWwgUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKKworVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgcHJvdmlkZXMgdGhyZWUgZGVidWdmcyBmaWxlcyB1bmRlciB0aGUKK3RvcC1sZXZlbCBkaXJlY3RvcnkgUkNVOiByY3UvcmN1ZGF0YSAod2hpY2ggZGlzcGxheXMgZmllbGRzIGluIHN0cnVjdAorcmN1X2RhdGEpLCByY3UvcmN1Z3AgKHdoaWNoIGRpc3BsYXlzIGdyYWNlLXBlcmlvZCBjb3VudGVycyksIGFuZAorcmN1L3JjdWhpZXIgKHdoaWNoIGRpc3BsYXlzIHRoZSBzdHJ1Y3QgcmN1X25vZGUgaGllcmFyY2h5KS4KKworVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VkYXRhIiBsb29rcyBhcyBmb2xsb3dzOgorCityY3U6CisgIDAgYz00MDExIGc9NDAxMiBwcT0xIHBxYz00MDExIHFwPTAgcnBmcT0xIHJwPTNjMmEgZHQ9MjMzMDEvNzMgZG49MiBkZj0xODgyIG9mPTAgcmk9MjEyNiBxbD0yIGI9MTAKKyAgMSBjPTQwMTEgZz00MDEyIHBxPTEgcHFjPTQwMTEgcXA9MCBycGZxPTMgcnA9MzlhNiBkdD03ODA3My8xIGRuPTIgZGY9MTQwMiBvZj0wIHJpPTE4NzUgcWw9NDYgYj0xMAorICAyIGM9NDAxMCBnPTQwMTAgcHE9MSBwcWM9NDAxMCBxcD0wIHJwZnE9LTUgcnA9MWQxMiBkdD0xNjY0Ni8wIGRuPTIgZGY9MzE0MCBvZj0wIHJpPTIwODAgcWw9MCBiPTEwCisgIDMgYz00MDEyIGc9NDAxMyBwcT0xIHBxYz00MDEyIHFwPTEgcnBmcT0zIHJwPTJiNTAgZHQ9MjExNTkvMSBkbj0yIGRmPTIyMzAgb2Y9MCByaT0xOTIzIHFsPTcyIGI9MTAKKyAgNCBjPTQwMTIgZz00MDEzIHBxPTEgcHFjPTQwMTIgcXA9MSBycGZxPTMgcnA9MTY0NCBkdD01NzgzLzEgZG49MiBkZj0zMzQ4IG9mPTAgcmk9MjgwNSBxbD03IGI9MTAKKyAgNSBjPTQwMTIgZz00MDEzIHBxPTAgcHFjPTQwMTEgcXA9MSBycGZxPTMgcnA9MWFhYyBkdD01ODc5LzEgZG49MiBkZj0zMTQwIG9mPTAgcmk9MjA2NiBxbD0xMCBiPTEwCisgIDYgYz00MDEyIGc9NDAxMyBwcT0xIHBxYz00MDEyIHFwPTEgcnBmcT0zIHJwPWVkOCBkdD01ODQ3LzEgZG49MiBkZj0zNzk3IG9mPTAgcmk9MTI2NiBxbD0xMCBiPTEwCisgIDcgYz00MDEyIGc9NDAxMyBwcT0xIHBxYz00MDEyIHFwPTEgcnBmcT0zIHJwPTFmYTIgZHQ9NjE5OS8xIGRuPTIgZGY9Mjc5NSBvZj0wIHJpPTIxNjIgcWw9MjggYj0xMAorcmN1X2JoOgorICAwIGM9LTI2OCBnPS0yNjggcHE9MSBwcWM9LTI2OCBxcD0wIHJwZnE9LTE0NSBycD0yMWQ2IGR0PTIzMzAxLzczIGRuPTIgZGY9MCBvZj0wIHJpPTAgcWw9MCBiPTEwCisgIDEgYz0tMjY4IGc9LTI2OCBwcT0xIHBxYz0tMjY4IHFwPTEgcnBmcT0tMTcwIHJwPTIwY2UgZHQ9NzgwNzMvMSBkbj0yIGRmPTI2IG9mPTAgcmk9NSBxbD0wIGI9MTAKKyAgMiBjPS0yNjggZz0tMjY4IHBxPTEgcHFjPS0yNjggcXA9MSBycGZxPS04MyBycD1mYmQgZHQ9MTY2NDYvMCBkbj0yIGRmPTI4IG9mPTAgcmk9NCBxbD0wIGI9MTAKKyAgMyBjPS0yNjggZz0tMjY4IHBxPTEgcHFjPS0yNjggcXA9MCBycGZxPS0xMDUgcnA9MTc4YyBkdD0yMTE1OS8xIGRuPTIgZGY9Mjggb2Y9MCByaT0yIHFsPTAgYj0xMAorICA0IGM9LTI2OCBnPS0yNjggcHE9MSBwcWM9LTI2OCBxcD0xIHJwZnE9LTMwIHJwPWI1NCBkdD01NzgzLzEgZG49MiBkZj0zMiBvZj0wIHJpPTAgcWw9MCBiPTEwCisgIDUgYz0tMjY4IGc9LTI2OCBwcT0xIHBxYz0tMjY4IHFwPTEgcnBmcT0tMjkgcnA9ZGY1IGR0PTU4NzkvMSBkbj0yIGRmPTMwIG9mPTAgcmk9MyBxbD0wIGI9MTAKKyAgNiBjPS0yNjggZz0tMjY4IHBxPTEgcHFjPS0yNjggcXA9MSBycGZxPS0yOCBycD03ODggZHQ9NTg0Ny8xIGRuPTIgZGY9MzIgb2Y9MCByaT0wIHFsPTAgYj0xMAorICA3IGM9LTI2OCBnPS0yNjggcHE9MSBwcWM9LTI2OCBxcD0xIHJwZnE9LTUzIHJwPTEwOTggZHQ9NjE5OS8xIGRuPTIgZGY9MzAgb2Y9MCByaT0zIHFsPTAgYj0xMAorCitUaGUgZmlyc3Qgc2VjdGlvbiBsaXN0cyB0aGUgcmN1X2RhdGEgc3RydWN0dXJlcyBmb3IgcmN1LCB0aGUgc2Vjb25kIGZvcgorcmN1X2JoLiAgRWFjaCBzZWN0aW9uIGhhcyBvbmUgbGluZSBwZXIgQ1BVLCBvciBlaWdodCBmb3IgdGhpcyA4LUNQVSBzeXN0ZW0uCitUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgorCitvCVRoZSBudW1iZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgaXMgdGhlIENQVSBudW1iZXIuCisJQ1BVcyBudW1iZXJzIGZvbGxvd2VkIGJ5IGFuIGV4Y2xhbWF0aW9uIG1hcmsgYXJlIG9mZmxpbmUsCisJYnV0IGhhdmUgYmVlbiBvbmxpbmUgYXQgbGVhc3Qgb25jZSBzaW5jZSBib290LglUaGVyZSB3aWxsIGJlCisJbm8gb3V0cHV0IGZvciBDUFVzIHRoYXQgaGF2ZSBuZXZlciBiZWVuIG9ubGluZSwgd2hpY2ggY2FuIGJlCisJYSBnb29kIHRoaW5nIGluIHRoZSBzdXJwcmlzaW5nbHkgY29tbW9uIGNhc2Ugd2hlcmUgTlJfQ1BVUyBpcworCXN1YnN0YW50aWFsbHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBhY3R1YWwgQ1BVcy4KKworbwkiYyIgaXMgdGhlIGNvdW50IG9mIGdyYWNlIHBlcmlvZHMgdGhhdCB0aGlzIENQVSBiZWxpZXZlcyBoYXZlCisJY29tcGxldGVkLiAgQ1BVcyBpbiBkeW50aWNrcyBpZGxlIG1vZGUgbWF5IGxhZyBxdWl0ZSBhIHdheXMKKwliZWhpbmQsIGZvciBleGFtcGxlLCBDUFUgNCB1bmRlciAicmN1IiBhYm92ZSwgd2hpY2ggaGFzIHNsZXB0CisJdGhyb3VnaCB0aGUgcGFzdCAyNSBSQ1UgZ3JhY2UgcGVyaW9kcy4JSXQgaXMgbm90IHVudXN1YWwgdG8KKwlzZWUgQ1BVcyBsYWdnaW5nIGJ5IHRob3VzYW5kcyBvZiBncmFjZSBwZXJpb2RzLgorCitvCSJnIiBpcyB0aGUgY291bnQgb2YgZ3JhY2UgcGVyaW9kcyB0aGF0IHRoaXMgQ1BVIGJlbGlldmVzIGhhdmUKKwlzdGFydGVkLiAgQWdhaW4sIENQVXMgaW4gZHludGlja3MgaWRsZSBtb2RlIG1heSBsYWcgYmVoaW5kLgorCUlmIHRoZSAiYyIgYW5kICJnIiB2YWx1ZXMgYXJlIGVxdWFsLCB0aGlzIENQVSBoYXMgYWxyZWFkeQorCXJlcG9ydGVkIGEgcXVpZXNjZW50IHN0YXRlIGZvciB0aGUgbGFzdCBSQ1UgZ3JhY2UgcGVyaW9kIHRoYXQKKwlpdCBpcyBhd2FyZSBvZiwgb3RoZXJ3aXNlLCB0aGUgQ1BVIGJlbGlldmVzIHRoYXQgaXQgb3dlcyBSQ1UgYQorCXF1aWVzY2VudCBzdGF0ZS4KKworbwkicHEiIGluZGljYXRlcyB0aGF0IHRoaXMgQ1BVIGhhcyBwYXNzZWQgdGhyb3VnaCBhIHF1aWVzY2VudCBzdGF0ZQorCWZvciB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuICBJdCBpcyBwb3NzaWJsZSBmb3IgInBxIiB0byBiZQorCSIxIiBhbmQgImMiIGRpZmZlcmVudCB0aGFuICJnIiwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYWx0aG91Z2gKKwl0aGUgQ1BVIGhhcyBwYXNzZWQgdGhyb3VnaCBhIHF1aWVzY2VudCBzdGF0ZSwgZWl0aGVyICgxKSB0aGlzCisJQ1BVIGhhcyBub3QgeWV0IHJlcG9ydGVkIHRoYXQgZmFjdCwgKDIpIHNvbWUgb3RoZXIgQ1BVIGhhcyBub3QKKwl5ZXQgcmVwb3J0ZWQgZm9yIHRoaXMgZ3JhY2UgcGVyaW9kLCBvciAoMykgYm90aC4KKworbwkicHFjIiBpbmRpY2F0ZXMgd2hpY2ggZ3JhY2UgcGVyaW9kIHRoZSBsYXN0LW9ic2VydmVkIHF1aWVzY2VudAorCXN0YXRlIGZvciB0aGlzIENQVSBjb3JyZXNwb25kcyB0by4gIFRoaXMgaXMgaW1wb3J0YW50IGZvciBoYW5kbGluZworCXRoZSByYWNlIGJldHdlZW4gQ1BVIDAgcmVwb3J0aW5nIGFuIGV4dGVuZGVkIGR5bnRpY2tzLWlkbGUKKwlxdWllc2NlbnQgc3RhdGUgZm9yIENQVSAxIGFuZCBDUFUgMSBzdWRkZW5seSB3YWtpbmcgdXAgYW5kCisJcmVwb3J0aW5nIGl0cyBvd24gcXVpZXNjZW50IHN0YXRlLiAgSWYgQ1BVIDEgd2FzIHRoZSBsYXN0IENQVQorCWZvciB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsIHRoZW4gdGhlIENQVSB0aGF0IGxvc2VzIHRoaXMgcmFjZQorCXdpbGwgYXR0ZW1wdCB0byBpbmNvcnJlY3RseSBtYXJrIENQVSAxIGFzIGhhdmluZyBjaGVja2VkIGluIGZvcgorCXRoZSBuZXh0IGdyYWNlIHBlcmlvZCEKKworbwkicXAiIGluZGljYXRlcyB0aGF0IFJDVSBzdGlsbCBleHBlY3RzIGEgcXVpZXNjZW50IHN0YXRlIGZyb20KKwl0aGlzIENQVS4KKworbwkicnBmcSIgaXMgdGhlIG51bWJlciBvZiByY3VfcGVuZGluZygpIGNhbGxzIG9uIHRoaXMgQ1BVIHJlcXVpcmVkCisJdG8gaW5kdWNlIHRoaXMgQ1BVIHRvIGludm9rZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4KKworbwkicnAiIGlzIGxvdy1vcmRlciBmb3VyIGhleCBkaWdpdHMgb2YgdGhlIGNvdW50IG9mIGhvdyBtYW55IHRpbWVzCisJcmN1X3BlbmRpbmcoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoaXMgQ1BVLgorCitvCSJkdCIgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGR5bnRpY2sgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkCisJd2hlbiBlbnRlcmluZyBvciBsZWF2aW5nIGR5bnRpY2tzIGlkbGUgc3RhdGUsIGVpdGhlciBieSB0aGUKKwlzY2hlZHVsZXIgb3IgYnkgaXJxLiAgVGhlIG51bWJlciBhZnRlciB0aGUgIi8iIGlzIHRoZSBpbnRlcnJ1cHQKKwluZXN0aW5nIGRlcHRoIHdoZW4gaW4gZHludGljay1pZGxlIHN0YXRlLCBvciBvbmUgZ3JlYXRlciB0aGFuCisJdGhlIGludGVycnVwdC1uZXN0aW5nIGRlcHRoIG90aGVyd2lzZS4KKworCVRoaXMgZmllbGQgaXMgZGlzcGxheWVkIG9ubHkgZm9yIENPTkZJR19OT19IWiBrZXJuZWxzLgorCitvCSJkbiIgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGR5bnRpY2sgY291bnRlciB0aGF0IGlzIGluY3JlbWVudGVkCisJd2hlbiBlbnRlcmluZyBvciBsZWF2aW5nIGR5bnRpY2tzIGlkbGUgc3RhdGUgdmlhIE5NSS4gIElmIGJvdGgKKwl0aGUgImR0IiBhbmQgImRuIiB2YWx1ZXMgYXJlIGV2ZW4sIHRoZW4gdGhpcyBDUFUgaXMgaW4gZHludGlja3MKKwlpZGxlIG1vZGUgYW5kIG1heSBiZSBpZ25vcmVkIGJ5IFJDVS4gIElmIGVpdGhlciBvZiB0aGVzZSB0d28KKwljb3VudGVycyBpcyBvZGQsIHRoZW4gUkNVIG11c3QgYmUgYWxlcnQgdG8gdGhlIHBvc3NpYmlsaXR5IG9mCisJYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHJ1bm5pbmcgb24gdGhpcyBDUFUuCisKKwlUaGlzIGZpZWxkIGlzIGRpc3BsYXllZCBvbmx5IGZvciBDT05GSUdfTk9fSFoga2VybmVscy4KKworbwkiZGYiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBzb21lIG90aGVyIENQVSBoYXMgZm9yY2VkIGEKKwlxdWllc2NlbnQgc3RhdGUgb24gYmVoYWxmIG9mIHRoaXMgQ1BVIGR1ZSB0byB0aGlzIENQVSBiZWluZyBpbgorCWR5bnRpY2tzLWlkbGUgc3RhdGUuCisKKwlUaGlzIGZpZWxkIGlzIGRpc3BsYXllZCBvbmx5IGZvciBDT05GSUdfTk9fSFoga2VybmVscy4KKworbwkib2YiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBzb21lIG90aGVyIENQVSBoYXMgZm9yY2VkIGEKKwlxdWllc2NlbnQgc3RhdGUgb24gYmVoYWxmIG9mIHRoaXMgQ1BVIGR1ZSB0byB0aGlzIENQVSBiZWluZworCW9mZmxpbmUuICBJbiBhIHBlcmZlY3Qgd29ybGQsIHRoaXMgbWlnaHQgbmV2ZSBoYXBwZW4sIGJ1dCBpdAorCXR1cm5zIG91dCB0aGF0IG9mZmxpbmluZyBhbmQgb25saW5pbmcgYSBDUFUgY2FuIHRha2Ugc2V2ZXJhbCBncmFjZQorCXBlcmlvZHMsIGFuZCBzbyB0aGVyZSBpcyBsaWtlbHkgdG8gYmUgYW4gZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUKKwl3aGVuIFJDVSBiZWxpZXZlcyB0aGF0IHRoZSBDUFUgaXMgb25saW5lIHdoZW4gaXQgcmVhbGx5IGlzIG5vdC4KKwlQbGVhc2Ugbm90ZSB0aGF0IGVycmluZyBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uIChSQ1UgYmVsaWV2aW5nIGEKKwlDUFUgaXMgb2ZmbGluZSB3aGVuIGl0IGlzIHJlYWxseSBhbGl2ZSBhbmQga2lja2luZykgaXMgYSBmYXRhbAorCWVycm9yLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBlcnIgY29uc2VydmF0aXZlbHkuCisKK28JInJpIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgUkNVIGhhcyBzZWVuIGZpdCB0byBzZW5kIGEKKwlyZXNjaGVkdWxlIElQSSB0byB0aGlzIENQVSBpbiBvcmRlciB0byBnZXQgaXQgdG8gcmVwb3J0IGEKKwlxdWllc2NlbnQgc3RhdGUuCisKK28JInFsIiBpcyB0aGUgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgY3VycmVudGx5IHJlc2lkaW5nIG9uCisJdGhpcyBDUFUuICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbGJhY2tzLCByZWdhcmRsZXNzCisJb2Ygd2hhdCBzdGF0ZSB0aGV5IGFyZSBpbiAobmV3LCB3YWl0aW5nIGZvciBncmFjZSBwZXJpb2QgdG8KKwlzdGFydCwgd2FpdGluZyBmb3IgZ3JhY2UgcGVyaW9kIHRvIGVuZCwgcmVhZHkgdG8gaW52b2tlKS4KKworbwkiYiIgaXMgdGhlIGJhdGNoIGxpbWl0IGZvciB0aGlzIENQVS4gIElmIG1vcmUgdGhhbiB0aGlzIG51bWJlcgorCW9mIFJDVSBjYWxsYmFja3MgaXMgcmVhZHkgdG8gaW52b2tlLCB0aGVuIHRoZSByZW1haW5kZXIgd2lsbAorCWJlIGRlZmVycmVkLgorCisKK1RoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1Z3AiIGxvb2tzIGFzIGZvbGxvd3M6CisKK3JjdTogY29tcGxldGVkPTMzMDYyICBncG51bT0zMzA2MworcmN1X2JoOiBjb21wbGV0ZWQ9NDY0ICBncG51bT00NjQKKworQWdhaW4sIHRoaXMgb3V0cHV0IGlzIGZvciBib3RoICJyY3UiIGFuZCAicmN1X2JoIi4gIFRoZSBmaWVsZHMgYXJlCit0YWtlbiBmcm9tIHRoZSByY3Vfc3RhdGUgc3RydWN0dXJlLCBhbmQgYXJlIGFzIGZvbGxvd3M6CisKK28JImNvbXBsZXRlZCIgaXMgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBjb21wbGV0ZWQuCisJSXQgaXMgY29tcGFyYWJsZSB0byB0aGUgImMiIGZpZWxkIGZyb20gcmN1L3JjdWRhdGEgaW4gdGhhdCBhCisJQ1BVIHdob3NlICJjIiBmaWVsZCBtYXRjaGVzIHRoZSB2YWx1ZSBvZiAiY29tcGxldGVkIiBpcyBhd2FyZQorCXRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgUkNVIGdyYWNlIHBlcmlvZCBoYXMgY29tcGxldGVkLgorCitvCSJncG51bSIgaXMgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBzdGFydGVkLiAgSXQgaXMKKwljb21wYXJhYmxlIHRvIHRoZSAiZyIgZmllbGQgZnJvbSByY3UvcmN1ZGF0YSBpbiB0aGF0IGEgQ1BVCisJd2hvc2UgImciIGZpZWxkIG1hdGNoZXMgdGhlIHZhbHVlIG9mICJncG51bSIgaXMgYXdhcmUgdGhhdCB0aGUKKwljb3JyZXNwb25kaW5nIFJDVSBncmFjZSBwZXJpb2QgaGFzIHN0YXJ0ZWQuCisKKwlJZiB0aGVzZSB0d28gZmllbGRzIGFyZSBlcXVhbCAoYXMgdGhleSBhcmUgZm9yICJyY3VfYmgiIGFib3ZlKSwKKwl0aGVuIHRoZXJlIGlzIG5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcywgaW4gb3RoZXIgd29yZHMsIFJDVQorCWlzIGlkbGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHR3byBmaWVsZHMgZGlmZmVyIChhcyB0aGV5CisJZG8gZm9yICJyY3UiIGFib3ZlKSwgdGhlbiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLgorCisKK1RoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1aGllciIgbG9va3MgYXMgZm9sbG93cywgd2l0aCB2ZXJ5IGxvbmcgbGluZXM6CisKK2M9NjkwMiBnPTY5MDMgcz0yIGpmcT0zIGo9NzJjNyBuZnFzPTEzMTQyL25mcXNuZz0wKDEzMTQyKSBmcWxoPTYKKzEvMSAwOjEyNyBeMCAgICAKKzMvMyAwOjM1IF4wICAgIDAvMCAzNjo3MSBeMSAgICAwLzAgNzI6MTA3IF4yICAgIDAvMCAxMDg6MTI3IF4zICAgIAorMy8zZiAwOjUgXjAgICAgMi8zIDY6MTEgXjEgICAgMC8wIDEyOjE3IF4yICAgIDAvMCAxODoyMyBeMyAgICAwLzAgMjQ6MjkgXjQgICAgMC8wIDMwOjM1IF41ICAgIDAvMCAzNjo0MSBeMCAgICAwLzAgNDI6NDcgXjEgICAgMC8wIDQ4OjUzIF4yICAgIDAvMCA1NDo1OSBeMyAgICAwLzAgNjA6NjUgXjQgICAgMC8wIDY2OjcxIF41ICAgIDAvMCA3Mjo3NyBeMCAgICAwLzAgNzg6ODMgXjEgICAgMC8wIDg0Ojg5IF4yICAgIDAvMCA5MDo5NSBeMyAgICAwLzAgOTY6MTAxIF40ICAgIDAvMCAxMDI6MTA3IF41ICAgIDAvMCAxMDg6MTEzIF4wICAgIDAvMCAxMTQ6MTE5IF4xICAgIDAvMCAxMjA6MTI1IF4yICAgIDAvMCAxMjY6MTI3IF4zICAgIAorcmN1X2JoOgorYz0tMjI2IGc9LTIyNiBzPTEgamZxPS01NzAxIGo9NzJjNyBuZnFzPTg4L25mcXNuZz0wKDg4KSBmcWxoPTAKKzAvMSAwOjEyNyBeMCAgICAKKzAvMyAwOjM1IF4wICAgIDAvMCAzNjo3MSBeMSAgICAwLzAgNzI6MTA3IF4yICAgIDAvMCAxMDg6MTI3IF4zICAgIAorMC8zZiAwOjUgXjAgICAgMC8zIDY6MTEgXjEgICAgMC8wIDEyOjE3IF4yICAgIDAvMCAxODoyMyBeMyAgICAwLzAgMjQ6MjkgXjQgICAgMC8wIDMwOjM1IF41ICAgIDAvMCAzNjo0MSBeMCAgICAwLzAgNDI6NDcgXjEgICAgMC8wIDQ4OjUzIF4yICAgIDAvMCA1NDo1OSBeMyAgICAwLzAgNjA6NjUgXjQgICAgMC8wIDY2OjcxIF41ICAgIDAvMCA3Mjo3NyBeMCAgICAwLzAgNzg6ODMgXjEgICAgMC8wIDg0Ojg5IF4yICAgIDAvMCA5MDo5NSBeMyAgICAwLzAgOTY6MTAxIF40ICAgIDAvMCAxMDI6MTA3IF41ICAgIDAvMCAxMDg6MTEzIF4wICAgIDAvMCAxMTQ6MTE5IF4xICAgIDAvMCAxMjA6MTI1IF4yICAgIDAvMCAxMjY6MTI3IF4zCisKK1RoaXMgaXMgb25jZSBhZ2FpbiBzcGxpdCBpbnRvICJyY3UiIGFuZCAicmN1X2JoIiBwb3J0aW9ucy4gIFRoZSBmaWVsZHMgYXJlCithcyBmb2xsb3dzOgorCitvCSJjIiBpcyBleGFjdGx5IHRoZSBzYW1lIGFzICJjb21wbGV0ZWQiIHVuZGVyIHJjdS9yY3VncC4KKworbwkiZyIgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyAiZ3BudW0iIHVuZGVyIHJjdS9yY3VncC4KKworbwkicyIgaXMgdGhlICJzaWduYWxlZCIgc3RhdGUgdGhhdCBkcml2ZXMgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkncworCXN0YXRlIG1hY2hpbmUuCisKK28JImpmcSIgaXMgdGhlIG51bWJlciBvZiBqaWZmaWVzIHJlbWFpbmluZyBmb3IgdGhpcyBncmFjZSBwZXJpb2QKKwliZWZvcmUgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaXMgaW52b2tlZCB0byBoZWxwIHB1c2ggdGhpbmdzCisJYWxvbmcuICBOb3RlIHRoYXQgQ1BVcyBpbiBkeW50aWNrLWlkbGUgbW9kZSB0aG91Z2hvdXQgdGhlIGdyYWNlCisJcGVyaW9kIHdpbGwgbm90IHJlcG9ydCBvbiB0aGVpciBvd24sIGJ1dCByYXRoZXIgbXVzdCBiZSBjaGVjayBieQorCXNvbWUgb3RoZXIgQ1BVIHZpYSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4KKworbwkiaiIgaXMgdGhlIGxvdy1vcmRlciBmb3VyIGhleCBkaWdpdHMgb2YgdGhlIGppZmZpZXMgY291bnRlci4KKwlZZXMsIFBhdWwgZGlkIHJ1biBpbnRvIGEgbnVtYmVyIG9mIHByb2JsZW1zIHRoYXQgdHVybmVkIG91dCB0bworCWJlIGR1ZSB0byB0aGUgamlmZmllcyBjb3VudGVyIG5vIGxvbmdlciBjb3VudGluZy4gIFdoeSBkbyB5b3UgYXNrPworCitvCSJuZnFzIiBpcyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIHNpbmNlCisJYm9vdC4KKworbwkibmZxc25nIiBpcyB0aGUgbnVtYmVyIG9mIHVzZWxlc3MgY2FsbHMgdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCksCisJd2hlcmUgdGhlcmUgd2Fzbid0IGFjdHVhbGx5IGEgZ3JhY2UgcGVyaW9kIGFjdGl2ZS4gIFRoaXMgY2FuCisJaGFwcGVuIGR1ZSB0byByYWNlcy4gIFRoZSBudW1iZXIgaW4gcGFyZW50aGVzZXMgaXMgdGhlIGRpZmZlcmVuY2UKKwliZXR3ZWVuICJuZnFzIiBhbmQgIm5mcXNuZyIsIG9yIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdAorCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGFjdHVhbGx5IGRpZCBzb21lIHJlYWwgd29yay4KKworbwkiZnFsaCIgaXMgdGhlIG51bWJlciBvZiBjYWxscyB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSB0aGF0CisJZXhpdGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IGV2ZW4gYmVpbmcgY291bnRlZCBpbiBuZnFzIGFib3ZlKQorCWR1ZSB0byBjb250ZW50aW9uIG9uIC0+ZnFzbG9jay4KKworbwlFYWNoIGVsZW1lbnQgb2YgdGhlIGZvcm0gIjEvMSAwOjEyNyBeMCIgcmVwcmVzZW50cyBvbmUgc3RydWN0CisJcmN1X25vZGUuICBFYWNoIGxpbmUgcmVwcmVzZW50cyBvbmUgbGV2ZWwgb2YgdGhlIGhpZXJhcmNoeSwgZnJvbQorCXJvb3QgdG8gbGVhdmVzLiAgSXQgaXMgYmVzdCB0byB0aGluayBvZiB0aGUgcmN1X2RhdGEgc3RydWN0dXJlcworCWFzIGZvcm1pbmcgeWV0IGFub3RoZXIgbGV2ZWwgYWZ0ZXIgdGhlIGxlYXZlcy4gIE5vdGUgdGhhdCB0aGVyZQorCW1pZ2h0IGJlIGVpdGhlciBvbmUsIHR3bywgb3IgdGhyZWUgbGV2ZWxzIG9mIHJjdV9ub2RlIHN0cnVjdHVyZXMsCisJZGVwZW5kaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBDT05GSUdfUkNVX0ZBTk9VVCBhbmQKKwlDT05GSUdfTlJfQ1BVUy4KKwkKKwlvCVRoZSBudW1iZXJzIHNlcGFyYXRlZCBieSB0aGUgIi8iIGFyZSB0aGUgcXNtYXNrIGZvbGxvd2VkCisJCWJ5IHRoZSBxc21hc2tpbml0LiAgVGhlIHFzbWFzayB3aWxsIGhhdmUgb25lIGJpdAorCQlzZXQgZm9yIGVhY2ggZW50aXR5IGluIHRoZSBuZXh0IGxvd2VyIGxldmVsIHRoYXQKKwkJaGFzIG5vdCB5ZXQgY2hlY2tlZCBpbiBmb3IgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLgorCQlUaGUgcXNtYXNraW5pdCB3aWxsIGhhdmUgb25lIGJpdCBmb3IgZWFjaCBlbnRpdHkgdGhhdCBpcworCQljdXJyZW50bHkgZXhwZWN0ZWQgdG8gY2hlY2sgaW4gZHVyaW5nIGVhY2ggZ3JhY2UgcGVyaW9kLgorCQlUaGUgdmFsdWUgb2YgcXNtYXNraW5pdCBpcyBhc3NpZ25lZCB0byB0aGF0IG9mIHFzbWFzaworCQlhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZ3JhY2UgcGVyaW9kLgorCisJCUZvciBleGFtcGxlLCBmb3IgInJjdSIsIHRoZSBxc21hc2sgb2YgdGhlIGZpcnN0IGVudHJ5CisJCW9mIHRoZSBsb3dlc3QgbGV2ZWwgaXMgMHgxNCwgbWVhbmluZyB0aGF0IHdlIGFyZSBzdGlsbAorCQl3YWl0aW5nIGZvciBDUFVzIDIgYW5kIDQgdG8gY2hlY2sgaW4gZm9yIHRoZSBjdXJyZW50CisJCWdyYWNlIHBlcmlvZC4KKworCW8JVGhlIG51bWJlcnMgc2VwYXJhdGVkIGJ5IHRoZSAiOiIgYXJlIHRoZSByYW5nZSBvZiBDUFVzCisJCXNlcnZlZCBieSB0aGlzIHN0cnVjdCByY3Vfbm9kZS4gIFRoaXMgY2FuIGJlIGhlbHBmdWwKKwkJaW4gd29ya2luZyBvdXQgaG93IHRoZSBoaWVyYXJjaHkgaXMgd2lyZWQgdG9nZXRoZXIuCisKKwkJRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBlbnRyeSBhdCB0aGUgbG93ZXN0IGxldmVsIHNob3dzCisJCSIwOjUiLCBpbmRpY2F0aW5nIHRoYXQgaXQgY292ZXJzIENQVXMgMCB0aHJvdWdoIDUuCisKKwlvCVRoZSBudW1iZXIgYWZ0ZXIgdGhlICJeIiBpbmRpY2F0ZXMgdGhlIGJpdCBpbiB0aGUKKwkJbmV4dCBoaWdoZXIgbGV2ZWwgcmN1X25vZGUgc3RydWN0dXJlIHRoYXQgdGhpcworCQlyY3Vfbm9kZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8uCisKKwkJRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBlbnRyeSBhdCB0aGUgbG93ZXN0IGxldmVsIHNob3dzCisJCSJeMCIsIGluZGljYXRpbmcgdGhhdCBpdCBjb3JyZXNwb25kcyB0byBiaXQgemVybyBpbgorCQl0aGUgZmlyc3QgZW50cnkgYXQgdGhlIG1pZGRsZSBsZXZlbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL3B4YS9tZnAudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vcHhhL21mcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3OWU1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3B4YS9tZnAudHh0CkBAIC0wLDAgKzEsMjg2IEBACisgICAgICAgICAgICAgICAgIE1GUCBDb25maWd1cmF0aW9uIGZvciBQWEEyeHgvUFhBM3h4IFByb2Nlc3NvcnMKKworCQkJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisKK01GUCBzdGFuZHMgZm9yIE11bHRpLUZ1bmN0aW9uIFBpbiwgd2hpY2ggaXMgdGhlIHBpbi1tdXggbG9naWMgb24gUFhBM3h4IGFuZAorbGF0ZXIgUFhBIHNlcmllcyBwcm9jZXNzb3JzLiAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGV4aXN0aW5nIE1GUCBBUEksCithbmQgaG93IGJvYXJkL3BsYXRmb3JtIGRyaXZlciBhdXRob3JzIGNvdWxkIG1ha2UgdXNlIG9mIGl0LgorCisgQmFzaWMgQ29uY2VwdAorPT09PT09PT09PT09PT09CisKK1VubGlrZSB0aGUgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gc2V0dGluZ3Mgb24gUFhBMjV4IGFuZCBQWEEyN3gsIGEgbmV3IE1GUAorbWVjaGFuaXNtIGlzIGludHJvZHVjZWQgZnJvbSBQWEEzeHggdG8gY29tcGxldGVseSBtb3ZlIHRoZSBwaW4tbXV4IGZ1bmN0aW9ucworb3V0IG9mIHRoZSBHUElPIGNvbnRyb2xsZXIuIEluIGFkZGl0aW9uIHRvIHBpbi1tdXggY29uZmlndXJhdGlvbnMsIHRoZSBNRlAKK2Fsc28gY29udHJvbHMgdGhlIGxvdyBwb3dlciBzdGF0ZSwgZHJpdmluZyBzdHJlbmd0aCwgcHVsbC11cC9kb3duIGFuZCBldmVudAorZGV0ZWN0aW9uIG9mIGVhY2ggcGluLiAgQmVsb3cgaXMgYSBkaWFncmFtIG9mIGludGVybmFsIGNvbm5lY3Rpb25zIGJldHdlZW4KK3RoZSBNRlAgbG9naWMgYW5kIHRoZSByZW1haW5pbmcgU29DIHBlcmlwaGVyYWxzOgorCisgKy0tLS0tLS0tKworIHwgICAgICAgIHwtLShHUElPMTkpLS0rCisgfCAgR1BJTyAgfCAgICAgICAgICAgIHwKKyB8ICAgICAgICB8LS0oR1BJTy4uLikgfAorICstLS0tLS0tLSsgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0tLSsKKyArLS0tLS0tLS0rICAgICAgICAgICAgKy0tLS0tLT58ICAgICAgICAgfAorIHwgIFBXTTIgIHwtLShQV01fT1VUKS0tLS0tLS0tPnwgICBNRlAgICB8CisgKy0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0+fCAgICAgICAgIHwtLS0tLS0tPiB0byBleHRlcm5hbCBQQUQKKyAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLT58ICAgICAgICAgfAorICstLS0tLS0tLSsgICAgICAgICAgICB8IHwgKy0tPnwgICAgICAgICB8CisgfCAgU1NQMiAgfC0tLShUWEQpLS0tLSsgfCB8ICAgKy0tLS0tLS0tLSsKKyArLS0tLS0tLS0rICAgICAgICAgICAgICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKKyArLS0tLS0tLS0rICAgICAgICAgICAgICB8IHwKKyB8IEtleXBhZCB8LS0oTUtPVVQ0KS0tLS0rIHwKKyArLS0tLS0tLS0rICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0rICAgICAgICAgICAgICAgIHwKKyB8ICBVQVJUMiB8LS0tKFRYRCktLS0tLS0tLSsKKyArLS0tLS0tLS0rCisKK05PVEU6IHRoZSBleHRlcm5hbCBwYWQgaXMgbmFtZWQgYXMgTUZQX1BJTl9HUElPMTksIGl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkKK21lYW4gaXQncyBkZWRpY2F0ZWQgZm9yIEdQSU8xOSwgb25seSBhcyBhIGhpbnQgdGhhdCBpbnRlcm5hbGx5IHRoaXMgcGluCitjYW4gYmUgcm91dGVkIGZyb20gR1BJTzE5IG9mIHRoZSBHUElPIGNvbnRyb2xsZXIuCisKK1RvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgZnJvbSBQWEEyNXgvUFhBMjd4IEdQSU8gYWx0ZXJuYXRlIGZ1bmN0aW9uCit0byB0aGlzIG5ldyBNRlAgbWVjaGFuaXNtLCBoZXJlIGFyZSBzZXZlcmFsIGtleSBwb2ludHM6CisKKyAgMS4gR1BJTyBjb250cm9sbGVyIG9uIFBYQTN4eCBpcyBub3cgYSBkZWRpY2F0ZWQgY29udHJvbGxlciwgc2FtZSBhcyBvdGhlcgorICAgICBpbnRlcm5hbCBjb250cm9sbGVycyBsaWtlIFBXTSwgU1NQIGFuZCBVQVJULCB3aXRoIDEyOCBpbnRlcm5hbCBzaWduYWxzCisgICAgIHdoaWNoIGNhbiBiZSByb3V0ZWQgdG8gZXh0ZXJuYWwgdGhyb3VnaCBvbmUgb3IgbW9yZSBNRlBzIChlLmcuIEdQSU88MD4KKyAgICAgY2FuIGJlIHJvdXRlZCB0aHJvdWdoIGVpdGhlciBNRlBfUElOX0dQSU8wIGFzIHdlbGwgYXMgTUZQX1BJTl9HUElPMF8yLAorICAgICBzZWUgYXJjaC9hcm0vbWFjaC1weGEvbWFjaC9pbmNsdWRlL21mcC1weGEzMDAuaCkKKworICAyLiBBbHRlcm5hdGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbiBpcyByZW1vdmVkIGZyb20gdGhpcyBHUElPIGNvbnRyb2xsZXIsCisgICAgIHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIGFyZSBwdXJlIEdQSU8tc3BlY2lmaWMsIGkuZS4KKworICAgICAgIC0gR1BJTyBzaWduYWwgbGV2ZWwgY29udHJvbAorICAgICAgIC0gR1BJTyBkaXJlY3Rpb24gY29udHJvbAorICAgICAgIC0gR1BJTyBsZXZlbCBjaGFuZ2UgZGV0ZWN0aW9uCisKKyAgMy4gTG93IHBvd2VyIHN0YXRlIGZvciBlYWNoIHBpbiBpcyBub3cgY29udHJvbGxlZCBieSBNRlAsIHRoaXMgbWVhbnMgdGhlCisgICAgIFBHU1J4IHJlZ2lzdGVycyBvbiBQWEEyeHggYXJlIG5vdyB1c2VsZXNzIG9uIFBYQTN4eAorCisgIDQuIFdha2V1cCBkZXRlY3Rpb24gaXMgbm93IGNvbnRyb2xsZWQgYnkgTUZQLCBQV0VSIGRvZXMgbm90IGNvbnRyb2wgdGhlCisgICAgIHdha2V1cCBmcm9tIEdQSU8ocykgYW55IG1vcmUsIGRlcGVuZGluZyBvbiB0aGUgc2xlZXBpbmcgc3RhdGUsIEFEeEVSCisgICAgIChhcyBkZWZpbmVkIGluIHB4YTN4eC1yZWdzLmgpIGNvbnRyb2xzIHRoZSB3YWtldXAgZnJvbSBNRlAKKworTk9URTogd2l0aCBzdWNoIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBNRlAgYW5kIEdQSU8sIGJ5IEdQSU88eHg+IHdlIG5vcm1hbGx5CittZWFuIGl0IGlzIGEgR1BJTyBzaWduYWwsIGFuZCBieSBNRlA8eHh4PiBvciBwaW4geHh4LCB3ZSBtZWFuIGEgcGh5c2ljYWwKK3BhZCAob3IgYmFsbCkuCisKKyBNRlAgQVBJIFVzYWdlCis9PT09PT09PT09PT09PT0KKworRm9yIGJvYXJkIGNvZGUgd3JpdGVycywgaGVyZSBhcmUgc29tZSBndWlkZWxpbmVzOgorCisxLiBpbmNsdWRlIE9ORSBvZiB0aGUgZm9sbG93aW5nIGhlYWRlciBmaWxlcyBpbiB5b3VyIDxib2FyZD4uYzoKKworICAgLSAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisgICAtICNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyAgIC0gI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorICAgLSAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzIwLmg+CisgICAtICNpbmNsdWRlIDxtYWNoL21mcC1weGE5MzAuaD4KKworICAgTk9URTogb25seSBvbmUgZmlsZSBpbiB5b3VyIDxib2FyZD4uYywgZGVwZW5kaW5nIG9uIHRoZSBwcm9jZXNzb3JzIHVzZWQsCisgICBiZWNhdXNlIHBpbiBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIG1heSBjb25mbGljdCBpbiB0aGVzZSBmaWxlIChpLmUuCisgICBzYW1lIG5hbWUsIGRpZmZlcmVudCBtZWFuaW5nIGFuZCBzZXR0aW5ncyBvbiBkaWZmZXJlbnQgcHJvY2Vzc29ycykuIEUuZy4KKyAgIGZvciB6eWxvbml0ZSBwbGF0Zm9ybSwgd2hpY2ggc3VwcG9ydCBib3RoIFBYQTMwMC9QWEEzMTAgYW5kIFBYQTMyMCwgdHdvCisgICBzZXBhcmF0ZSBmaWxlcyBhcmUgaW50cm9kdWNlZDogenlsb25pdGVfcHhhMzAwLmMgYW5kIHp5bG9uaXRlX3B4YTMyMC5jCisgICAoaW4gYWRkaXRpb24gdG8gaGFuZGxlIE1GUCBjb25maWd1cmF0aW9uIGRpZmZlcmVuY2VzLCB0aGV5IGFsc28gaGFuZGxlCisgICB0aGUgb3RoZXIgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIGNvbWJpbmF0aW9ucykuCisKKyAgIE5PVEU6IFBYQTMwMCBhbmQgUFhBMzEwIGFyZSBhbG1vc3QgaWRlbnRpY2FsIGluIHBpbiBjb25maWd1cmF0aW9ucyAod2l0aAorICAgUFhBMzEwIHN1cHBvcnRpbmcgc29tZSBhZGRpdGlvbmFsIG9uZXMpLCB0aHVzIHRoZSBkaWZmZXJlbmNlIGlzIGFjdHVhbGx5CisgICBjb3ZlcmVkIGluIGEgc2luZ2xlIG1mcC1weGEzMDAuaC4KKworMi4gcHJlcGFyZSBhbiBhcnJheSBmb3IgdGhlIGluaXRpYWwgcGluIGNvbmZpZ3VyYXRpb25zLCBlLmcuOgorCisgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWluc3RvbmVfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogQ2hpcCBTZWxlY3QgKi8KKwlHUElPMTVfbkNTXzEsCisKKwkvKiBMQ0QgLSAxNmJwcCBBY3RpdmUgVEZUICovCisJR1BJT3h4X1RGVF9MQ0RfMTZCUFAsCisJR1BJTzE2X1BXTTBfT1VULAkvKiBCYWNrbGlnaHQgKi8KKworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCisJLi4uCisKKwkvKiBHUElPICovCisJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCisgICB9OworCisgICBhKSBvbmNlIHRoZSBwaW4gY29uZmlndXJhdGlvbnMgYXJlIHBhc3NlZCB0byBweGF7Mnh4LDN4eH1fbWZwX2NvbmZpZygpLAorICAgYW5kIHdyaXR0ZW4gdG8gdGhlIGFjdHVhbCByZWdpc3RlcnMsIHRoZXkgYXJlIHVzZWxlc3MgYW5kIG1heSBkaXNjYXJkLAorICAgYWRkaW5nICdfX2luaXRkYXRhJyB3aWxsIGhlbHAgc2F2ZSBzb21lIGFkZGl0aW9uYWwgYnl0ZXMgaGVyZS4KKworICAgYikgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBwaW4gY29uZmlndXJhdGlvbnMgZm9yIGEgY29tcG9uZW50LAorICAgc29tZSBzaW1wbGlmaWVkIGRlZmluaXRpb25zIGNhbiBiZSB1c2VkLCBlLmcuIEdQSU94eF9URlRfTENEXzE2QlBQIG9uCisgICBQWEEyNXggYW5kIFBYQTI3eCBwcm9jZXNzb3JzCisKKyAgIGMpIGlmIGJ5IGJvYXJkIGRlc2lnbiwgYSBwaW4gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gd2FrZSB1cCB0aGUgc3lzdGVtCisgICBmcm9tIGxvdyBwb3dlciBzdGF0ZSwgaXQgY2FuIGJlICdPUidlZCB3aXRoIGFueSBvZjoKKworICAgICAgV0FLRVVQX09OX0VER0VfQk9USAorICAgICAgV0FLRVVQX09OX0VER0VfUklTRQorICAgICAgV0FLRVVQX09OX0VER0VfRkFMTAorICAgICAgV0FLRVVQX09OX0xFVkVMX0hJR0ggLSBzcGVjaWZpY2FsbHkgZm9yIGVuYWJsaW5nIG9mIGtleXBhZCBHUElPcywKKworICAgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHBpbiBoYXMgdGhlIGNhcGFiaWxpdHkgb2Ygd2FrZS11cCB0aGUgc3lzdGVtLAorICAgYW5kIG9uIHdoaWNoIGVkZ2UocykuIFRoaXMsIGhvd2V2ZXIsIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUKKyAgIHBpbiBfd2lsbF8gd2FrZXVwIHRoZSBzeXN0ZW0sIGl0IHdpbGwgb25seSB3aGVuIHNldF9pcnFfd2FrZSgpIGlzCisgICBpbnZva2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgR1BJTyBJUlEgKEdQSU9fSVJRKHh4KSBvciBncGlvX3RvX2lycSgpKQorICAgYW5kIGV2ZW50dWFsbHkgY2FsbHMgZ3Bpb19zZXRfd2FrZSgpIGZvciB0aGUgYWN0dWFsIHJlZ2lzdGVyIHNldHRpbmcuCisKKyAgIGQpIGFsdGhvdWdoIFBYQTN4eCBNRlAgc3VwcG9ydHMgZWRnZSBkZXRlY3Rpb24gb24gZWFjaCBwaW4sIHRoZQorICAgaW50ZXJuYWwgbG9naWMgd2lsbCBvbmx5IHdha2V1cCB0aGUgc3lzdGVtIHdoZW4gdGhvc2Ugc3BlY2lmaWMgYml0cworICAgaW4gQUR4RVIgcmVnaXN0ZXJzIGFyZSBzZXQsIHdoaWNoIGNhbiBiZSB3ZWxsIG1hcHBlZCB0byB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgcGVyaXBoZXJhbCwgdGh1cyBzZXRfaXJxX3dha2UoKSBjYW4gYmUgY2FsbGVkIHdpdGggCisgICB0aGUgcGVyaXBoZXJhbCBJUlEgdG8gZW5hYmxlIHRoZSB3YWtldXAuCisKKworIE1GUCBvbiBQWEEzeHgKKz09PT09PT09PT09PT09PQorCitFdmVyeSBleHRlcm5hbCBJL08gcGFkIG9uIFBYQTN4eCAoZXhjbHVkaW5nIHRob3NlIGZvciBzcGVjaWFsIHB1cnBvc2UpIGhhcworb25lIE1GUCBsb2dpYyBhc3NvY2lhdGVkLCBhbmQgaXMgY29udHJvbGxlZCBieSBvbmUgTUZQIHJlZ2lzdGVyIChNRlBSKS4KKworVGhlIE1GUFIgaGFzIHRoZSBmb2xsb3dpbmcgYml0IGRlZmluaXRpb25zIChmb3IgUFhBMzAwL1BYQTMxMC9QWEEzMjApOgorCisgMzEgICAgICAgICAgICAgICAgICAgICAgICAxNiAxNSAxNCAxMyAxMiAxMSAxMCAgOSAgOCAgNyAgNiAgNSAgNCAgMyAgMiAgMSAgMAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKKyAgfCAgICAgICAgIFJFU0VSVkVEICAgICAgICB8UFN8UFV8UER8ICBEUklWRSB8U1N8U0R8U098RUN8RUZ8RVJ8LS18IEFGX1NFTCB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKworCisgIEJpdCAzOiAgIFJFU0VSVkVECisgIEJpdCA0OiAgIEVER0VfUklTRV9FTiAtIGVuYWJsZSBkZXRlY3Rpb24gb2YgcmlzaW5nIGVkZ2Ugb24gdGhpcyBwaW4KKyAgQml0IDU6ICAgRURHRV9GQUxMX0VOIC0gZW5hYmxlIGRldGVjdGlvbiBvZiBmYWxsaW5nIGVkZ2Ugb24gdGhpcyBwaW4KKyAgQml0IDY6ICAgRURHRV9DTEVBUiAgIC0gZGlzYWJsZSBlZGdlIGRldGVjdGlvbiBvbiB0aGlzIHBpbgorICBCaXQgNzogICBTTEVFUF9PRV9OICAgLSBlbmFibGUgb3V0cHV0cyBkdXJpbmcgbG93IHBvd2VyIG1vZGVzCisgIEJpdCA4OiAgIFNMRUVQX0RBVEEgICAtIG91dHB1dCBkYXRhIG9uIHRoZSBwaW4gZHVyaW5nIGxvdyBwb3dlciBtb2RlcworICBCaXQgOTogICBTTEVFUF9TRUwgICAgLSBzZWxlY3Rpb24gY29udHJvbCBmb3IgbG93IHBvd2VyIG1vZGVzIHNpZ25hbHMKKyAgQml0IDEzOiAgUFVMTERPV05fRU4gIC0gZW5hYmxlIHRoZSBpbnRlcm5hbCBwdWxsLWRvd24gcmVzaXN0b3Igb24gdGhpcyBwaW4KKyAgQml0IDE0OiAgUFVMTFVQX0VOICAgIC0gZW5hYmxlIHRoZSBpbnRlcm5hbCBwdWxsLXVwIHJlc2lzdG9yIG9uIHRoaXMgcGluCisgIEJpdCAxNTogIFBVTExfU0VMICAgICAtIHB1bGwgc3RhdGUgY29udHJvbGxlZCBieSBzZWxlY3RlZCBhbHRlcm5hdGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDApIG9yIGJ5IFBVTEx7VVAsRE9XTn1fRU4gYml0cyAoMSkKKworICBCaXQgMCAtIDI6IEFGX1NFTCAtIGFsdGVybmF0ZSBmdW5jdGlvbiBzZWxlY3Rpb24sIDggcG9zc2liaWxpdGllcywgZnJvbSAwLTcKKyAgQml0IDEwLTEyOiBEUklWRSAgLSBkcml2ZSBzdHJlbmd0aCBhbmQgc2xldyByYXRlCisJCQkwYjAwMCAtIGZhc3QgMW1BCisJCQkwYjAwMSAtIGZhc3QgMm1BCisJCQkwYjAwMiAtIGZhc3QgM21BCisJCQkwYjAwMyAtIGZhc3QgNG1BCisJCQkwYjAwNCAtIHNsb3cgNm1BCisJCQkwYjAwNSAtIGZhc3QgNm1BCisJCQkwYjAwNiAtIHNsb3cgMTBtQQorCQkJMGIwMDcgLSBmYXN0IDEwbUEKKworIE1GUCBEZXNpZ24gZm9yIFBYQTJ4eC9QWEEzeHgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEdWUgdG8gdGhlIGRpZmZlcmVuY2Ugb2YgcGluLW11eCBoYW5kbGluZyBiZXR3ZWVuIFBYQTJ4eCBhbmQgUFhBM3h4LCBhIHVuaWZpZWQKK01GUCBBUEkgaXMgaW50cm9kdWNlZCB0byBjb3ZlciBib3RoIHNlcmllcyBvZiBwcm9jZXNzb3JzLgorCitUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIGRlc2lnbiBpcyB0byBpbnRyb2R1Y2UgZGVmaW5pdGlvbnMgZm9yIGFsbCBwb3NzaWJsZSBwaW4KK2NvbmZpZ3VyYXRpb25zLCB0aGVzZSBkZWZpbml0aW9ucyBhcmUgcHJvY2Vzc29yIGFuZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCwgYW5kCit0aGUgYWN0dWFsIEFQSSBpbnZva2VkIHRvIGNvbnZlcnQgdGhlc2UgZGVmaW5pdGlvbnMgaW50byByZWdpc3RlciBzZXR0aW5ncyBhbmQKK21ha2UgdGhlbSBlZmZlY3RpdmUgdGhlcmUtYWZ0ZXIuCisKKyAgRmlsZXMgSW52b2x2ZWQKKyAgLS0tLS0tLS0tLS0tLS0KKworICAtIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaAorICAKKyAgZm9yCisgICAgMS4gVW5pZmllZCBwaW4gZGVmaW5pdGlvbnMgLSBlbnVtIGNvbnN0YW50cyBmb3IgYWxsIGNvbmZpZ3VyYWJsZSBwaW5zCisgICAgMi4gcHJvY2Vzc29yLW5ldXRyYWwgYml0IGRlZmluaXRpb25zIGZvciBhIHBvc3NpYmxlIE1GUCBjb25maWd1cmF0aW9uCisKKyAgLSBhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTN4eC5oCisKKyAgZm9yIFBYQTN4eCBzcGVjaWZpYyBNRlBSIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBhbmQgUFhBM3h4IGNvbW1vbiBwaW4KKyAgY29uZmlndXJhdGlvbnMKKworICAtIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMnh4LmgKKworICBmb3IgUFhBMnh4IHNwZWNpZmljIGRlZmluaXRpb25zIGFuZCBQWEEyNXgvUFhBMjd4IGNvbW1vbiBwaW4gY29uZmlndXJhdGlvbnMKKworICAtIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKKyAgICBhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCisgICAgYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaAorICAgIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzIwLmgKKyAgICBhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oCisKKyAgZm9yIHByb2Nlc3NvciBzcGVjaWZpYyBkZWZpbml0aW9ucworCisgIC0gYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCisgIC0gYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisKKyAgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaW4gY29uZmlndXJhdGlvbiB0byB0YWtlIGVmZmVjdCBmb3IgdGhlIGFjdHVhbAorICBwcm9jZXNzb3IuCisKKyAgUGluIENvbmZpZ3VyYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZm9sbG93aW5nIGNvbW1lbnRzIGFyZSBjb3BpZWQgZnJvbSBtZnAuaCAoc2VlIHRoZSBhY3R1YWwgc291cmNlIGNvZGUKKyAgZm9yIG1vc3QgdXBkYXRlZCBpbmZvKQorICAKKyAgLyoKKyAgICogYSBwb3NzaWJsZSBNRlAgY29uZmlndXJhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCBpbnRlZ2VyCisgICAqCisgICAqIGJpdCAgMC4uIDkgLSBNRlAgUGluIE51bWJlciAoMTAyNCBQaW5zIE1heGltdW0pCisgICAqIGJpdCAxMC4uMTIgLSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0aW9uCisgICAqIGJpdCAxMy4uMTUgLSBEcml2ZSBTdHJlbmd0aAorICAgKiBiaXQgMTYuLjE4IC0gTG93IFBvd2VyIE1vZGUgU3RhdGUKKyAgICogYml0IDE5Li4yMCAtIExvdyBQb3dlciBNb2RlIEVkZ2UgRGV0ZWN0aW9uCisgICAqIGJpdCAyMS4uMjIgLSBSdW4gTW9kZSBQdWxsIFN0YXRlCisgICAqCisgICAqIHRvIGZhY2lsaXRhdGUgdGhlIGRlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZAorICAgKgorICAgKiBNRlBfQ0ZHX0RFRkFVTFQgLSBkZWZhdWx0IE1GUCBjb25maWd1cmF0aW9uIHZhbHVlLCB3aXRoCisgICAqIAkJICBhbHRlcm5hdGUgZnVuY3Rpb24gPSAwLAorICAgKiAJCSAgZHJpdmUgc3RyZW5ndGggPSBmYXN0IDNtQSAoTUZQX0RTMDNYKQorICAgKiAJCSAgbG93IHBvd2VyIG1vZGUgPSBkZWZhdWx0CisgICAqIAkJICBlZGdlIGRldGVjdGlvbiA9IG5vbmUKKyAgICoKKyAgICogTUZQX0NGRwktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbgorICAgKiBNRlBfQ0ZHX0RSVgktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKKyAgICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aAorICAgKiBNRlBfQ0ZHX0xQTQktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKKyAgICogCQkgIGxvdyBwb3dlciBtb2RlCisgICAqIE1GUF9DRkdfWAktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiwKKyAgICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aCBhbmQgbG93IHBvd2VyIG1vZGUKKyAgICovCisKKyAgIEV4YW1wbGVzIG9mIHBpbiBjb25maWd1cmF0aW9ucyBhcmU6CisKKyAgICNkZWZpbmUgR1BJTzk0X1NTUDNfUlhECQlNRlBfQ0ZHX1goR1BJTzk0LCBBRjEsIERTMDhYLCBGTE9BVCkKKworICAgd2hpY2ggcmVhZHMgR1BJTzk0IGNhbiBiZSBjb25maWd1cmVkIGFzIFNTUDNfUlhELCB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbgorICAgc2VsZWN0aW9uIG9mIDEsIGRyaXZpbmcgc3RyZW5ndGggb2YgMGIxMDEsIGFuZCBhIGZsb2F0IHN0YXRlIGluIGxvdyBwb3dlcgorICAgbW9kZXMuCisKKyAgIE5PVEU6IHRoaXMgaXMgdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGlzIHBpbiBiZWluZyBjb25maWd1cmVkIGFzIFNTUDNfUlhECisgICB3aGljaCBjYW4gYmUgbW9kaWZpZWQgYSBiaXQgaW4gYm9hcmQgY29kZSwgdGhvdWdoIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0bworICAgZG8gc28sIHNpbXBseSBiZWNhdXNlIHRoaXMgZGVmYXVsdCBzZXR0aW5nIGlzIHVzdWFsbHkgY2FyZWZ1bGx5IGVuY29kZWQsCisgICBhbmQgaXMgc3VwcG9zZWQgdG8gd29yayBpbiBtb3N0IGNhc2VzLgorCisgIFJlZ2lzdGVyIFNldHRpbmdzCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFJlZ2lzdGVyIHNldHRpbmdzIG9uIFBYQTN4eCBmb3IgYSBwaW4gY29uZmlndXJhdGlvbiBpcyBhY3R1YWxseSB2ZXJ5CisgICBzdHJhaWdodC1mb3J3YXJkLCBtb3N0IGJpdHMgY2FuIGJlIGNvbnZlcnRlZCBkaXJlY3RseSBpbnRvIE1GUFIgdmFsdWUKKyAgIGluIGEgZWFzaWVyIHdheS4gVHdvIHNldHMgb2YgTUZQUiB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQ6IHRoZSBydW4tdGltZQorICAgb25lcyBhbmQgdGhlIGxvdyBwb3dlciBtb2RlIG9uZXMsIHRvIGFsbG93IGRpZmZlcmVudCBzZXR0aW5ncy4KKworICAgVGhlIGNvbnZlcnNpb24gZnJvbSBhIGdlbmVyaWMgcGluIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGFjdHVhbCByZWdpc3RlcgorICAgc2V0dGluZ3Mgb24gUFhBMnh4IGlzIGEgYml0IGNvbXBsaWNhdGVkOiBtYW55IHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQsCisgICBpbmNsdWRpbmcgR0FGUngsIEdQRFJ4LCBQR1NSeCwgUFdFUiwgUEtXUiwgUEZFUiBhbmQgUFJFUi4gUGxlYXNlIHNlZQorICAgbWZwLXB4YTJ4eC5jIGZvciBob3cgdGhlIGNvbnZlcnNpb24gaXMgbWFkZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAppbmRleCA0ZGJiOGJlLi4zYzU0MzRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CkBAIC05MTQsNyArOTE0LDcgQEAKIHF1ZXVlIGFuZCBzcGVjaWZpYyBJL08gc2NoZWR1bGVycy4gIFVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLCBlbGV2YXRvciBpcyB1c2VkCiB0byByZWZlciB0byBib3RoIHBhcnRzIGFuZCBJL08gc2NoZWR1bGVyIHRvIHNwZWNpZmljIEkvTyBzY2hlZHVsZXJzLgogCi1CbG9jayBsYXllciBpbXBsZW1lbnRzIGdlbmVyaWMgZGlzcGF0Y2ggcXVldWUgaW4gbGxfcndfYmxrLmMgYW5kIGVsZXZhdG9yLmMuCitCbG9jayBsYXllciBpbXBsZW1lbnRzIGdlbmVyaWMgZGlzcGF0Y2ggcXVldWUgaW4gYmxvY2svKi5jLgogVGhlIGdlbmVyaWMgZGlzcGF0Y2ggcXVldWUgaXMgcmVzcG9uc2libGUgZm9yIHByb3Blcmx5IG9yZGVyaW5nIGJhcnJpZXIKIHJlcXVlc3RzLCByZXF1ZXVlaW5nLCBoYW5kbGluZyBub24tZnMgcmVxdWVzdHMgYW5kIGFsbCBvdGhlciBzdWJ0bGV0aWVzLgogCkBAIC05MjYsOCArOTI2LDggQEAKIGNoYW5nZSB0byBhbm90aGVyIG9uZSBkeW5hbWljYWxseS4KIAogQSBibG9jayBsYXllciBjYWxsIHRvIHRoZSBpL28gc2NoZWR1bGVyIGZvbGxvd3MgdGhlIGNvbnZlbnRpb24gZWx2X3h4eCgpLiBUaGlzCi1jYWxscyBlbGV2YXRvcl94eHhfZm4gaW4gdGhlIGVsZXZhdG9yIHN3aXRjaCAoZHJpdmVycy9ibG9jay9lbGV2YXRvci5jKS4gT2gsCi14eHggYW5kIHh4eCBtaWdodCBub3QgbWF0Y2ggZXhhY3RseSwgYnV0IHVzZSB5b3VyIGltYWdpbmF0aW9uLiBJZiBhbiBlbGV2YXRvcgorY2FsbHMgZWxldmF0b3JfeHh4X2ZuIGluIHRoZSBlbGV2YXRvciBzd2l0Y2ggKGJsb2NrL2VsZXZhdG9yLmMpLiBPaCwgeHh4CithbmQgeHh4IG1pZ2h0IG5vdCBtYXRjaCBleGFjdGx5LCBidXQgdXNlIHlvdXIgaW1hZ2luYXRpb24uIElmIGFuIGVsZXZhdG9yCiBkb2Vzbid0IGltcGxlbWVudCBhIGZ1bmN0aW9uLCB0aGUgc3dpdGNoIGRvZXMgbm90aGluZyBvciBzb21lIG1pbmltYWwgaG91c2UKIGtlZXBpbmcgd29yay4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvdGVjaG5pc2F0LnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmNmVlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL3RlY2huaXNhdC50eHQKQEAgLTAsMCArMSw2OSBAQAorSG93IHRvIHNldCB1cCB0aGUgVGVjaG5pc2F0IGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEpIEZpbmQgb3V0IHdoYXQgZGV2aWNlIHlvdSBoYXZlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCBzdGFydCB5b3VyIGxpbnV4IGJveCB3aXRoIGEgc2hpcHBlZCBrZXJuZWw6Citsc3BjaSAtdnZ2IGZvciBhIFBDSSBkZXZpY2UgKGxzdXNiIC12dnYgZm9yIGFuIFVTQiBkZXZpY2UpIHdpbGwgc2hvdyB5b3UgZm9yIGV4YW1wbGU6CiswMjowYi4wIE5ldHdvcmsgY29udHJvbGxlcjogVGVjaHNhbiBFbGVjdHJvbmljcyBDbyBMdGQgQjJDMiBGbGV4Q29wSUkgRFZCIGNoaXAgLyBUZWNobmlzYXQgU2t5U3RhcjIgRFZCIGNhcmQgKHJldiAwMikKKworZG1lc2cgfCBncmVwIGZyb250ZW5kIG1heSBzaG93IHlvdSBmb3IgZXhhbXBsZToKK0RWQjogcmVnaXN0ZXJpbmcgZnJvbnRlbmQgMCAoQ29uZXhhbnQgQ1gyNDEyMy9DWDI0MTA5KS4uLgorCisyKSBLZXJuZWwgY29tcGlsYXRpb246Cis9PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBUZWNobmlzYXQgaXMgdGhlIG9ubHkgVFYgZGV2aWNlIGluIHlvdXIgYm94IGdldCByaWQgb2YgdW5uZWNlc3NhcnkgbW9kdWxlcyBhbmQgY2hlY2sgdGhpcyBvbmU6CisiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCitJbiB0aGlzIGRpcmVjdG9yeSB1bmNoZWNrIGV2ZXJ5IGRyaXZlciB3aGljaCBpcyBhY3RpdmF0ZWQgdGhlcmUuCisKK1RoZW4gcGxlYXNlIGFjdGl2YXRlOgorMmEpIE1haW4gbW9kdWxlIHBhcnQ6CisKK2EuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIKK2IuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgUENJIiBpbiBjYXNlIG9mIGEgUENJIGNhcmQgT1IKK2MuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEVkIvQVRTQyBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEZsZXhjb3BJSShiKSBhbmQgRmxleENvcElJSSBhZGFwdGVycyIgPT4gIlRlY2huaXNhdC9CMkMyIEFpci9Ta3kvQ2FibGUyUEMgVVNCIiBpbiBjYXNlIG9mIGFuIFVTQiAxLjEgYWRhcHRlcgorZC4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkRWQi9BVFNDIGFkYXB0ZXJzIiA9PiAiVGVjaG5pc2F0L0IyQzIgRmxleGNvcElJKGIpIGFuZCBGbGV4Q29wSUlJIGFkYXB0ZXJzIiA9PiAiRW5hYmxlIGRlYnVnIGZvciB0aGUgQjJDMiBGbGV4Q29wIGRyaXZlcnMiCitOb3RpY2U6IGQuKSBpcyBoZWxwZnVsIGZvciB0cm91Ymxlc2hvb3RpbmcKKworMmIpIEZyb250ZW5kIG1vZHVsZSBwYXJ0OgorCisxLikgUmV2aXNpb24gMi4zOgorYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgorYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiWmFybGluayBWUDMxMC9NVDMxMi9aTDEwMzEzIGJhc2VkIgorCisyLikgUmV2aXNpb24gMi42OgorYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgorYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiU1QgU1RWMDI5OSBiYXNlZCIKKworMy4pIFJldmlzaW9uIDIuNzoKK2EuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKK2IuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlNhbXN1bmcgUzVIMTQyMCBiYXNlZCIKK2MuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkludGVncmFudCBJVEQxMDAwIFplcm8gSUYgdHVuZXIgZm9yIERWQi1TL0RTUyIKK2QuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIklTTDY0MjEgU0VDIGNvbnRyb2xsZXIiCisKKzQuKSBSZXZpc2lvbiAyLjg6CithLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCitiLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDb25leGFudCBDWDI0MTEzL0NYMjQxMjggdHVuZXIgZm9yIERWQi1TL0RTUyIKK2MuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkNvbmV4YW50IENYMjQxMjMgYmFzZWQiCitkLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJJU0w2NDIxIFNFQyBjb250cm9sbGVyIgorCis1LikgRFZCLVQgY2FyZDoKK2EuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKK2IuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIlphcmxpbmsgTVQzNTIgYmFzZWQiCisKKzYuKSBEVkItQyBjYXJkOgorYS4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgorYi4pIk11bHRpbWVkaWEgZGV2aWNlcyIgPT4gIkN1c3RvbWlzZSBEVkIgZnJvbnRlbmRzIiA9PiAiU1QgU1RWMDI5NyBiYXNlZCIKKworNy4pIEFUU0MgY2FyZCAxc3QgZ2VuZXJhdGlvbjoKK2EuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKK2IuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkJyb2FkY29tIEJDTTM1MTAiCisKKzguKSBBVFNDIGNhcmQgMm5kIGdlbmVyYXRpb246CithLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCitiLikiTXVsdGltZWRpYSBkZXZpY2VzIiA9PiAiQ3VzdG9taXNlIERWQiBmcm9udGVuZHMiID0+ICJOeHRXYXZlIENvbW11bmljYXRpb25zIE5YVDIwMDIvTlhUMjAwNCBiYXNlZCIKK2MuKSJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJDdXN0b21pc2UgRFZCIGZyb250ZW5kcyIgPT4gIkxHIEVsZWN0cm9uaWNzIExHRFQzMzAyL0xHRFQzMzAzIGJhc2VkIgorCitBdXRob3I6IFV3ZSBCdWdsYSA8dXdlLmJ1Z2xhQGdteC5kZT4gRGVjZW1iZXIgMjAwOApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9weGFmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3B4YWZiLnR4dAppbmRleCBkYjliODUwLi5kMTQzYTBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3B4YWZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3B4YWZiLnR4dApAQCAtNSw5ICs1LDEzIEBACiBvcHRpb25zPTxPUFRJT05TPiB3aGVuIG1vZHVsYXIgb3IgdmlkZW89cHhhZmI6PE9QVElPTlM+IHdoZW4gYnVpbHQgaW4uCiAKIEZvciBleGFtcGxlOgotCW1vZHByb2JlIHB4YWZiIG9wdGlvbnM9bW9kZTo2NDB4NDgwLTgscGFzc2l2ZQorCW1vZHByb2JlIHB4YWZiIG9wdGlvbnM9dm1lbToyTSxtb2RlOjY0MHg0ODAtOCxwYXNzaXZlCiBvciBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZQotCXZpZGVvPXB4YWZiOm1vZGU6NjQweDQ4MC04LHBhc3NpdmUKKwl2aWRlbz1weGFmYjp2bWVtOjJNLG1vZGU6NjQweDQ4MC04LHBhc3NpdmUKKwordm1lbTogVklERU9fTUVNX1NJWkUKKwlBbW91bnQgb2YgdmlkZW8gbWVtb3J5IHRvIGFsbG9jYXRlIChjYW4gYmUgc3VmZml4ZWQgd2l0aCBLIG9yIE0KKwlmb3Iga2lsb2J5dGVzIG9yIG1lZ2FieXRlcykKIAogbW9kZTpYUkVTeFlSRVNbLUJQUF0KIAlYUkVTID09IExDQ1IxX1BQTCArIDEKQEAgLTUyLDMgKzU2LDg3IEBACiBwaXhjbG9ja3BvbDpQT0xBUklUWQogCXBpeGVsIGNsb2NrIHBvbGFyaXR5CiAJMCA9PiBmYWxsaW5nIGVkZ2UsIDEgPT4gcmlzaW5nIGVkZ2UKKworCitPdmVybGF5IFN1cHBvcnQgZm9yIFBYQTI3eCBhbmQgbGF0ZXIgTENEIGNvbnRyb2xsZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgUFhBMjd4IGFuZCBsYXRlciBwcm9jZXNzb3JzIHN1cHBvcnQgb3ZlcmxheTEgYW5kIG92ZXJsYXkyIG9uLXRvcCBvZiB0aGUKKyAgYmFzZSBmcmFtZWJ1ZmZlciAoYWx0aG91Z2ggdW5kZXItbmVhdGggdGhlIGJhc2UgaXMgYWxzbyBwb3NzaWJsZSkuIFRoZXkKKyAgc3VwcG9ydCBwYWxldHRlIGFuZCBuby1wYWxldHRlIFJHQiBmb3JtYXRzLCBhcyB3ZWxsIGFzIFlVViBmb3JtYXRzIChvbmx5CisgIGF2YWlsYWJsZSBvbiBvdmVybGF5MikuIFRoZXNlIG92ZXJsYXlzIGhhdmUgZGVkaWNhdGVkIERNQSBjaGFubmVscyBhbmQKKyAgYmVoYXZlIGluIGEgc2ltaWxhciB3YXkgYXMgYSBmcmFtZWJ1ZmZlci4KKworICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIG92ZXJsYXkgZnJhbWVidWZmZXJzCisgIGFuZCBub3JtYWwgZnJhbWVidWZmZXJzLCBhcyBsaXN0ZWQgYmVsb3c6CisKKyAgMS4gb3ZlcmxheSBjYW4gc3RhcnQgYXQgYSAzMi1iaXQgd29yZCBhbGlnbmVkIHBvc2l0aW9uIHdpdGhpbiB0aGUgYmFzZQorICAgICBmcmFtZWJ1ZmZlciwgd2hpY2ggbWVhbnMgdGhleSBoYXZlIGEgc3RhcnQgKHgsIHkpLiBUaGlzIGluZm9ybWF0aW9uCisgICAgIGlzIGVuY29kZWQgaW50byB2YXItPm5vbnN0ZCAobm8sIHZhci0+eG9mZnNldCBhbmQgdmFyLT55b2Zmc2V0IGFyZQorICAgICBub3QgZm9yIHN1Y2ggcHVycG9zZSkuCisKKyAgMi4gb3ZlcmxheSBmcmFtZWJ1ZmZlciBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYWNjb3JkaW5nIHRvIHNwZWNpZmllZAorICAgICAnc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvJywgdGhlIGFtb3VudCBpcyBkZWNpZGVkIGJ5OgorCisgICAgICAgIHZhci0+eHJlc192aXJ0dWFsICogdmFyLT55cmVzX3ZpcnR1YWwgKiBicHAKKworICAgICBicHAgPSAxNiAtLSBmb3IgUkdCNTY1IG9yIFJHQlQ1NTUKKyAgICAgICAgID0gMjQgLS0gZm9yIFlVVjQ0NCBwYWNrZWQKKyAgICAgICAgID0gMjQgLS0gZm9yIFlVVjQ0NCBwbGFuYXIKKwkgPSAxNiAtLSBmb3IgWVVWNDIyIHBsYW5hciAoMSBwaXhlbCA9IDEgWSArIDEvMiBDYiArIDEvMiBDcikKKwkgPSAxMiAtLSBmb3IgWVVWNDIwIHBsYW5hciAoMSBwaXhlbCA9IDEgWSArIDEvNCBDYiArIDEvNCBDcikKKworICAgICBOT1RFOgorCisgICAgIGEuIG92ZXJsYXkgZG9lcyBub3Qgc3VwcG9ydCBwYW5uaW5nIGluIHgtZGlyZWN0aW9uLCB0aHVzCisgICAgICAgIHZhci0+eHJlc192aXJ0dWFsIHdpbGwgYWx3YXlzIGJlIGVxdWFsIHRvIHZhci0+eHJlcworCisgICAgIGIuIGxpbmUgbGVuZ3RoIG9mIG92ZXJsYXkocykgbXVzdCBiZSBvbiBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5LAorICAgICAgICBmb3IgWVVWIHBsYW5hciBtb2RlcywgaXQgaXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIGNvbXBvbmVudAorCXdpdGggbWluaW11bSBiaXRzIHBlciBwaXhlbCwgIGUuZy4gZm9yIFlVVjQyMCwgQ3IgY29tcG9uZW50CisJZm9yIG9uZSBwaXhlbCBpcyBhY3R1YWxseSAyLWJpdHMsIGl0IG1lYW5zIHRoZSBsaW5lIGxlbmd0aAorCXNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDE2LXBpeGVscworCisgICAgIGMuIHN0YXJ0aW5nIGhvcml6b250YWwgcG9zaXRpb24gKFhQT1MpIHNob3VsZCBzdGFydCBvbiBhIDMyLWJpdAorICAgICAgICB3b3JkIGJvdW5kYXJ5LCBvdGhlcndpc2UgdGhlIGZiX2NoZWNrX3ZhcigpIHdpbGwganVzdCBmYWlsLgorCisgICAgIGQuIHRoZSByZWN0YW5nbGUgb2YgdGhlIG92ZXJsYXkgc2hvdWxkIGJlIHdpdGhpbiB0aGUgYmFzZSBwbGFuZSwKKyAgICAgICAgb3RoZXJ3aXNlIGZhaWwKKworICAgICBBcHBsaWNhdGlvbnMgc2hvdWxkIGZvbGxvdyB0aGUgc2VxdWVuY2UgYmVsb3cgdG8gb3BlcmF0ZSBhbiBvdmVybGF5CisgICAgIGZyYW1lYnVmZmVyOgorCisgICAgICAgICBhLiBvcGVuKCIvZGV2L2ZiWzEtMl0iLCAuLi4pCisJIGIuIGlvY3RsKGZkLCBGQklPR0VUX1ZTQ1JFRU5JTkZPLCAuLi4pCisJIGMuIG1vZGlmeSAndmFyJyB3aXRoIGRlc2lyZWQgcGFyYW1ldGVyczoKKwkgICAgMSkgdmFyLT54cmVzIGFuZCB2YXItPnlyZXMKKwkgICAgMikgbGFyZ2VyIHZhci0+eXJlc192aXJ0dWFsIGlmIG1vcmUgbWVtb3J5IGlzIHJlcXVpcmVkLAorCSAgICAgICB1c3VhbGx5IGZvciBkb3VibGUtYnVmZmVyaW5nCisJICAgIDMpIHZhci0+bm9uc3RkIGZvciBzdGFydGluZyAoeCwgeSkgYW5kIGNvbG9yIGZvcm1hdAorCSAgICA0KSB2YXItPntyZWQsIGdyZWVuLCBibHVlLCB0cmFuc3B9IGlmIFJHQiBtb2RlIGlzIHRvIGJlIHVzZWQKKwkgZC4gaW9jdGwoZmQsIEZCSU9QVVRfVlNDUkVFTklORk8sIC4uLikKKwkgZS4gaW9jdGwoZmQsIEZCSU9HRVRfRlNDUkVFTklORk8sIC4uLikKKwkgZi4gbW1hcAorCSBnLiAuLi4KKworICAzLiBmb3IgWVVWIHBsYW5hciBmb3JtYXRzLCB0aGVzZSBhcmUgYWN0dWFsbHkgbm90IHN1cHBvcnRlZCB3aXRoaW4gdGhlCisgICAgIGZyYW1lYnVmZmVyIGZyYW1ld29yaywgYXBwbGljYXRpb24gaGFzIHRvIHRha2UgY2FyZSBvZiB0aGUgb2Zmc2V0cworICAgICBhbmQgbGVuZ3RocyBvZiBlYWNoIGNvbXBvbmVudCB3aXRoaW4gdGhlIGZyYW1lYnVmZmVyLgorCisgIDQuIHZhci0+bm9uc3RkIGlzIHVzZWQgdG8gcGFzcyBzdGFydGluZyAoeCwgeSkgcG9zaXRpb24gYW5kIGNvbG9yIGZvcm1hdCwKKyAgICAgdGhlIGRldGFpbGVkIGJpdCBmaWVsZHMgYXJlIHNob3duIGJlbG93OgorCisgICAgMzEgICAgICAgICAgICAgICAgMjMgIDIwICAgICAgICAgMTAgICAgICAgICAgMAorICAgICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICAgfCAgLi4uIHVudXNlZCAuLi4gfEZPUnwgICBYUE9TICAgfCAgIFlQT1MgICB8CisgICAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgICAgIEZPUiAgLSBjb2xvciBmb3JtYXQsIGFzIGRlZmluZWQgYnkgT1ZFUkxBWV9GT1JNQVRfKiBpbiBweGFmYi5oCisgICAgICAgICAgICAwIC0gUkdCCisJICAgIDEgLSBZVVY0NDQgUEFDS0VECisJICAgIDIgLSBZVVY0NDQgUExBTkFSCisJICAgIDMgLSBZVVY0MjIgUExBTkFSCisJICAgIDQgLSBZVVI0MjAgUExBTkFSCisKKyAgICAgWFBPUyAtIHN0YXJ0aW5nIGhvcml6b250YWwgcG9zaXRpb24KKyAgICAgWVBPUyAtIHN0YXJ0aW5nIHZlcnRpY2FsIHBvc2l0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IDgwNDUyMDYuLmYyZGJiZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00ODEsNTEgKzQ4MSw2IEBACiAJLyogV2UgcmV0dXJuIHRoZSBpbml0cmQgc2l6ZS4gKi8KIAlyZXR1cm4gbGVuOwogfQotCi0vKiBPbmNlIHdlIGtub3cgaG93IG11Y2ggbWVtb3J5IHdlIGhhdmUgd2UgY2FuIGNvbnN0cnVjdCBzaW1wbGUgbGluZWFyIHBhZ2UKLSAqIHRhYmxlcyB3aGljaCBzZXQgdmlydHVhbCA9PSBwaHlzaWNhbCB3aGljaCB3aWxsIGdldCB0aGUgR3Vlc3QgZmFyIGVub3VnaAotICogaW50byB0aGUgYm9vdCB0byBjcmVhdGUgaXRzIG93bi4KLSAqCi0gKiBXZSBsYXkgdGhlbSBvdXQgb2YgdGhlIHdheSwganVzdCBiZWxvdyB0aGUgaW5pdHJkICh3aGljaCBpcyB3aHkgd2UgbmVlZCB0bwotICoga25vdyBpdHMgc2l6ZSBoZXJlKS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldHVwX3BhZ2V0YWJsZXModW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbml0cmRfc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nICpwZ2RpciwgKmxpbmVhcjsKLQl1bnNpZ25lZCBpbnQgbWFwcGVkX3BhZ2VzLCBpLCBsaW5lYXJfcGFnZXM7Ci0JdW5zaWduZWQgaW50IHB0ZXNfcGVyX3BhZ2UgPSBnZXRwYWdlc2l6ZSgpL3NpemVvZih2b2lkICopOwotCi0JbWFwcGVkX3BhZ2VzID0gbWVtL2dldHBhZ2VzaXplKCk7Ci0KLQkvKiBFYWNoIFBURSBwYWdlIGNhbiBtYXAgcHRlc19wZXJfcGFnZSBwYWdlczogaG93IG1hbnkgZG8gd2UgbmVlZD8gKi8KLQlsaW5lYXJfcGFnZXMgPSAobWFwcGVkX3BhZ2VzICsgcHRlc19wZXJfcGFnZS0xKS9wdGVzX3Blcl9wYWdlOwotCi0JLyogV2UgcHV0IHRoZSB0b3BsZXZlbCBwYWdlIGRpcmVjdG9yeSBwYWdlIGF0IHRoZSB0b3Agb2YgbWVtb3J5LiAqLwotCXBnZGlyID0gZnJvbV9ndWVzdF9waHlzKG1lbSkgLSBpbml0cmRfc2l6ZSAtIGdldHBhZ2VzaXplKCk7Ci0KLQkvKiBOb3cgd2UgdXNlIHRoZSBuZXh0IGxpbmVhcl9wYWdlcyBwYWdlcyBhcyBwdGUgcGFnZXMgKi8KLQlsaW5lYXIgPSAodm9pZCAqKXBnZGlyIC0gbGluZWFyX3BhZ2VzKmdldHBhZ2VzaXplKCk7Ci0KLQkvKiBMaW5lYXIgbWFwcGluZyBpcyBlYXN5OiBwdXQgZXZlcnkgcGFnZSdzIGFkZHJlc3MgaW50byB0aGUgbWFwcGluZyBpbgotCSAqIG9yZGVyLiAgUEFHRV9QUkVTRU5UIGNvbnRhaW5zIHRoZSBmbGFncyBQcmVzZW50LCBXcml0YWJsZSBhbmQKLQkgKiBFeGVjdXRhYmxlLiAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXBwZWRfcGFnZXM7IGkrKykKLQkJbGluZWFyW2ldID0gKChpICogZ2V0cGFnZXNpemUoKSkgfCBQQUdFX1BSRVNFTlQpOwotCi0JLyogVGhlIHRvcCBsZXZlbCBwb2ludHMgdG8gdGhlIGxpbmVhciBwYWdlIHRhYmxlIHBhZ2VzIGFib3ZlLiAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXBwZWRfcGFnZXM7IGkgKz0gcHRlc19wZXJfcGFnZSkgewotCQlwZ2RpcltpL3B0ZXNfcGVyX3BhZ2VdCi0JCQk9ICgodG9fZ3Vlc3RfcGh5cyhsaW5lYXIpICsgaSpzaXplb2Yodm9pZCAqKSkKLQkJCSAgIHwgUEFHRV9QUkVTRU5UKTsKLQl9Ci0KLQl2ZXJib3NlKCJMaW5lYXIgbWFwcGluZyBvZiAldSBwYWdlcyBpbiAldSBwdGUgcGFnZXMgYXQgJSNseFxuIiwKLQkJbWFwcGVkX3BhZ2VzLCBsaW5lYXJfcGFnZXMsIHRvX2d1ZXN0X3BoeXMobGluZWFyKSk7Ci0KLQkvKiBXZSByZXR1cm4gdGhlIHRvcCBsZXZlbCAoZ3Vlc3QtcGh5c2ljYWwpIGFkZHJlc3M6IHRoZSBrZXJuZWwgbmVlZHMKLQkgKiB0byBrbm93IHdoZXJlIGl0IGlzLiAqLwotCXJldHVybiB0b19ndWVzdF9waHlzKHBnZGlyKTsKLX0KIC8qOiovCiAKIC8qIFNpbXBsZSByb3V0aW5lIHRvIHJvbGwgYWxsIHRoZSBjb21tYW5kbGluZSBhcmd1bWVudHMgdG9nZXRoZXIgd2l0aCBzcGFjZXMKQEAgLTU0OCwxMyArNTAzLDEzIEBACiAKIC8qTDoxODUgVGhpcyBpcyB3aGVyZSB3ZSBhY3R1YWxseSB0ZWxsIHRoZSBrZXJuZWwgdG8gaW5pdGlhbGl6ZSB0aGUgR3Vlc3QuICBXZQogICogc2F3IHRoZSBhcmd1bWVudHMgaXQgZXhwZWN0cyB3aGVuIHdlIGxvb2tlZCBhdCBpbml0aWFsaXplKCkgaW4gbGd1ZXN0X3VzZXIuYzoKLSAqIHRoZSBiYXNlIG9mIEd1ZXN0ICJwaHlzaWNhbCIgbWVtb3J5LCB0aGUgdG9wIHBoeXNpY2FsIHBhZ2UgdG8gYWxsb3csIHRoZQotICogdG9wIGxldmVsIHBhZ2V0YWJsZSBhbmQgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgR3Vlc3QuICovCi1zdGF0aWMgaW50IHRlbGxfa2VybmVsKHVuc2lnbmVkIGxvbmcgcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQpCisgKiB0aGUgYmFzZSBvZiBHdWVzdCAicGh5c2ljYWwiIG1lbW9yeSwgdGhlIHRvcCBwaHlzaWNhbCBwYWdlIHRvIGFsbG93IGFuZCB0aGUKKyAqIGVudHJ5IHBvaW50IGZvciB0aGUgR3Vlc3QuICovCitzdGF0aWMgaW50IHRlbGxfa2VybmVsKHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7CiAJdW5zaWduZWQgbG9uZyBhcmdzW10gPSB7IExIUkVRX0lOSVRJQUxJWkUsCiAJCQkJICh1bnNpZ25lZCBsb25nKWd1ZXN0X2Jhc2UsCi0JCQkJIGd1ZXN0X2xpbWl0IC8gZ2V0cGFnZXNpemUoKSwgcGdkaXIsIHN0YXJ0IH07CisJCQkJIGd1ZXN0X2xpbWl0IC8gZ2V0cGFnZXNpemUoKSwgc3RhcnQgfTsKIAlpbnQgZmQ7CiAKIAl2ZXJib3NlKCJHdWVzdDogJXAgLSAlcCAoJSNseClcbiIsCkBAIC0xMDMwLDcgKzk4NSw3IEBACiAJCS8qIFplcm8gb3V0IHRoZSB2aXJ0cXVldWVzLiAqLwogCQlmb3IgKHZxID0gZGV2LT52cTsgdnE7IHZxID0gdnEtPm5leHQpIHsKIAkJCW1lbXNldCh2cS0+dnJpbmcuZGVzYywgMCwKLQkJCSAgICAgICB2cmluZ19zaXplKHZxLT5jb25maWcubnVtLCBnZXRwYWdlc2l6ZSgpKSk7CisJCQkgICAgICAgdnJpbmdfc2l6ZSh2cS0+Y29uZmlnLm51bSwgTEdVRVNUX1ZSSU5HX0FMSUdOKSk7CiAJCQlsZ19sYXN0X2F2YWlsKHZxKSA9IDA7CiAJCX0KIAl9IGVsc2UgaWYgKGRldi0+ZGVzYy0+c3RhdHVzICYgVklSVElPX0NPTkZJR19TX0ZBSUxFRCkgewpAQCAtMTIxMSw3ICsxMTY2LDcgQEAKIAl2b2lkICpwOwogCiAJLyogRmlyc3Qgd2UgbmVlZCBzb21lIG1lbW9yeSBmb3IgdGhpcyB2aXJ0cXVldWUuICovCi0JcGFnZXMgPSAodnJpbmdfc2l6ZShudW1fZGVzY3MsIGdldHBhZ2VzaXplKCkpICsgZ2V0cGFnZXNpemUoKSAtIDEpCisJcGFnZXMgPSAodnJpbmdfc2l6ZShudW1fZGVzY3MsIExHVUVTVF9WUklOR19BTElHTikgKyBnZXRwYWdlc2l6ZSgpIC0gMSkKIAkJLyBnZXRwYWdlc2l6ZSgpOwogCXAgPSBnZXRfcGFnZXMocGFnZXMpOwogCkBAIC0xMjI4LDcgKzExODMsNyBAQAogCXZxLT5jb25maWcucGZuID0gdG9fZ3Vlc3RfcGh5cyhwKSAvIGdldHBhZ2VzaXplKCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSB2cmluZy4gKi8KLQl2cmluZ19pbml0KCZ2cS0+dnJpbmcsIG51bV9kZXNjcywgcCwgZ2V0cGFnZXNpemUoKSk7CisJdnJpbmdfaW5pdCgmdnEtPnZyaW5nLCBudW1fZGVzY3MsIHAsIExHVUVTVF9WUklOR19BTElHTik7CiAKIAkvKiBBcHBlbmQgdmlydHF1ZXVlIHRvIHRoaXMgZGV2aWNlJ3MgZGVzY3JpcHRvci4gIFdlIHVzZQogCSAqIGRldmljZV9jb25maWcoKSB0byBnZXQgdGhlIGVuZCBvZiB0aGUgZGV2aWNlJ3MgY3VycmVudCB2aXJ0cXVldWVzOwpAQCAtMTk0MSw3ICsxODk2LDcgQEAKIHsKIAkvKiBNZW1vcnksIHRvcC1sZXZlbCBwYWdldGFibGUsIGNvZGUgc3RhcnRwb2ludCBhbmQgc2l6ZSBvZiB0aGUKIAkgKiAob3B0aW9uYWwpIGluaXRyZC4gKi8KLQl1bnNpZ25lZCBsb25nIG1lbSA9IDAsIHBnZGlyLCBzdGFydCwgaW5pdHJkX3NpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgbWVtID0gMCwgc3RhcnQsIGluaXRyZF9zaXplID0gMDsKIAkvKiBUd28gdGVtcG9yYXJpZXMgYW5kIHRoZSAvZGV2L2xndWVzdCBmaWxlIGRlc2NyaXB0b3IuICovCiAJaW50IGksIGMsIGxndWVzdF9mZDsKIAkvKiBUaGUgYm9vdCBpbmZvcm1hdGlvbiBmb3IgdGhlIEd1ZXN0LiAqLwpAQCAtMjA0MCw5ICsxOTk1LDYgQEAKIAkJYm9vdC0+aGRyLnR5cGVfb2ZfbG9hZGVyID0gMHhGRjsKIAl9CiAKLQkvKiBTZXQgdXAgdGhlIGluaXRpYWwgbGluZWFyIHBhZ2V0YWJsZXMsIHN0YXJ0aW5nIGJlbG93IHRoZSBpbml0cmQuICovCi0JcGdkaXIgPSBzZXR1cF9wYWdldGFibGVzKG1lbSwgaW5pdHJkX3NpemUpOwotCiAJLyogVGhlIExpbnV4IGJvb3QgaGVhZGVyIGNvbnRhaW5zIGFuICJFODIwIiBtZW1vcnkgbWFwOiBvdXJzIGlzIGEKIAkgKiBzaW1wbGUsIHNpbmdsZSByZWdpb24uICovCiAJYm9vdC0+ZTgyMF9lbnRyaWVzID0gMTsKQEAgLTIwNjQsNyArMjAxNiw3IEBACiAKIAkvKiBXZSB0ZWxsIHRoZSBrZXJuZWwgdG8gaW5pdGlhbGl6ZSB0aGUgR3Vlc3Q6IHRoaXMgcmV0dXJucyB0aGUgb3BlbgogCSAqIC9kZXYvbGd1ZXN0IGZpbGUgZGVzY3JpcHRvci4gKi8KLQlsZ3Vlc3RfZmQgPSB0ZWxsX2tlcm5lbChwZ2Rpciwgc3RhcnQpOworCWxndWVzdF9mZCA9IHRlbGxfa2VybmVsKHN0YXJ0KTsKIAogCS8qIFdlIGNsb25lIG9mZiBhIHRocmVhZCwgd2hpY2ggd2FrZXMgdGhlIExhdW5jaGVyIHdoZW5ldmVyIG9uZSBvZiB0aGUKIAkgKiBpbnB1dCBmaWxlIGRlc2NyaXB0b3JzIG5lZWRzIGF0dGVudGlvbi4gIFdlIGNhbGwgdGhpcyB0aGUgV2FrZXIsIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2Nrc3RhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dAppbmRleCA0YmE0NjY0Li45Y2I5MTM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tzdGF0LnR4dApAQCAtNzEsMzUgKzcxLDUwIEBACiAKICMgbGVzcyAvcHJvYy9sb2NrX3N0YXQKIAotMDEgbG9ja19zdGF0IHZlcnNpb24gMC4yCiswMSBsb2NrX3N0YXQgdmVyc2lvbiAwLjMKIDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBuYW1lICAgIGNvbi1ib3VuY2VzICAgIGNvbnRlbnRpb25zICAgd2FpdHRpbWUtbWluICAgd2FpdHRpbWUtbWF4IHdhaXR0aW1lLXRvdGFsICAgIGFjcS1ib3VuY2VzICAgYWNxdWlzaXRpb25zICAgaG9sZHRpbWUtbWluICAgaG9sZHRpbWUtbWF4IGhvbGR0aW1lLXRvdGFsCiAwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMDUKLTA2ICAgICAgICAgICAgICAgJmlub2RlLT5pX2RhdGEudHJlZV9sb2NrLVc6ICAgICAgICAgICAgMTUgICAgICAgICAgMjE2NTcgICAgICAgICAgIDAuMTggICAgIDEwOTMyOTUuMzAgMTE1NDcxMzEwNTQuODUgICAgICAgICAgICAgNTggICAgICAgICAgMTA0MTUgICAgICAgICAgIDAuMTYgICAgICAgICAgODcuNTEgICAgICAgIDYzODcuNjAKLTA3ICAgICAgICAgICAgICAgJmlub2RlLT5pX2RhdGEudHJlZV9sb2NrLVI6ICAgICAgICAgICAgIDAgICAgICAgICAgICAgIDAgICAgICAgICAgIDAuMDAgICAgICAgICAgIDAuMDAgICAgICAgICAgIDAuMDAgICAgICAgICAgMjMzMDIgICAgICAgICAyMzExOTggICAgICAgICAgIDAuMjUgICAgICAgICAgIDguNDUgICAgICAgOTgwMjMuMzgKLTA4ICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTA5ICAgICAgICAgICAgICAgICAmaW5vZGUtPmlfZGF0YS50cmVlX2xvY2sgICAgICAgICAgICAgIDAgICAgICAgICAgWzxmZmZmZmZmZjgwMjdjMDhmPl0gYWRkX3RvX3BhZ2VfY2FjaGUrMHg1Zi8weDE5MAotMTAKLTExIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0xMgotMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbG9jazogICAgICAgICAgMTAzNyAgICAgICAgICAgMTE2MSAgICAgICAgICAgMC4zOCAgICAgICAgICA0NS4zMiAgICAgICAgIDc3NC41MSAgICAgICAgICAgNjYxMSAgICAgICAgIDI0MzM3MSAgICAgICAgICAgMC4xNSAgICAgICAgIDMwNi40OCAgICAgICA3NzM4Ny4yNAotMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLQotMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbG9jayAgICAgICAgICAgIDE4MCAgICAgICAgICBbPGZmZmZmZmZmODAyYzBkN2U+XSBzeXNfZ2V0Y3dkKzB4MTFlLzB4MjMwCi0xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9sb2NrICAgICAgICAgICAgMTY1ICAgICAgICAgIFs8ZmZmZmZmZmY4MDJjMDAyYT5dIGRfYWxsb2MrMHgxNWEvMHgyMTAKLTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX2xvY2sgICAgICAgICAgICAgMzMgICAgICAgICAgWzxmZmZmZmZmZjgwMzU4MThkPl0gX2F0b21pY19kZWNfYW5kX2xvY2srMHg0ZC8weDcwCi0xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9sb2NrICAgICAgICAgICAgICAxICAgICAgICAgIFs8ZmZmZmZmZmY4MDJiZWVmOD5dIHNocmlua19kY2FjaGVfcGFyZW50KzB4MTgvMHgxMzAKKzA2ICAgICAgICAgICAgICAgICAgICAgICAgICAmbW0tPm1tYXBfc2VtLVc6ICAgICAgICAgICAyMzMgICAgICAgICAgICA1MzggMTg0NDY3NDQwNzM3MDggICAgICAgMjI5MjQuMjcgICAgICA2MDcyNDMuNTEgICAgICAgICAgIDEzNDIgICAgICAgICAgNDU4MDYgICAgICAgICAgIDEuNzEgICAgICAgIDg1OTUuODkgICAgIDExODA1ODIuMzQKKzA3ICAgICAgICAgICAgICAgICAgICAgICAgICAmbW0tPm1tYXBfc2VtLVI6ICAgICAgICAgICAyMDUgICAgICAgICAgICA1ODcgMTg0NDY3NDQwNzM3MDggICAgICAgMjg0MDMuMzYgICAgICA3MzE5NzUuMDAgICAgICAgICAgIDE5NDAgICAgICAgICA0MTI0MjYgICAgICAgICAgIDAuNTggICAgICAxODc4MjUuNDUgICAgIDYzMDc1MDIuODgKKzA4ICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKzA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtbS0+bW1hcF9zZW0gICAgICAgICAgICA0ODcgICAgICAgICAgWzxmZmZmZmZmZjgwNTM0OTFmPl0gZG9fcGFnZV9mYXVsdCsweDQ2Ni8weDkyOAorMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1tLT5tbWFwX3NlbSAgICAgICAgICAgIDE3OSAgICAgICAgICBbPGZmZmZmZmZmODAyYTYyMDA+XSBzeXNfbXByb3RlY3QrMHhjZC8weDIxZAorMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1tLT5tbWFwX3NlbSAgICAgICAgICAgIDI3OSAgICAgICAgICBbPGZmZmZmZmZmODAyMTBhNTc+XSBzeXNfbW1hcCsweDc1LzB4Y2UKKzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtbS0+bW1hcF9zZW0gICAgICAgICAgICAgNzYgICAgICAgICAgWzxmZmZmZmZmZjgwMmE0OTBiPl0gc3lzX211bm1hcCsweDMyLzB4NTkKKzEzICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtbS0+bW1hcF9zZW0gICAgICAgICAgICAyNzAgICAgICAgICAgWzxmZmZmZmZmZjgwMjEwYTU3Pl0gc3lzX21tYXArMHg3NS8weGNlCisxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW0tPm1tYXBfc2VtICAgICAgICAgICAgNDMxICAgICAgICAgIFs8ZmZmZmZmZmY4MDUzNDkxZj5dIGRvX3BhZ2VfZmF1bHQrMHg0NjYvMHg5MjgKKzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtbS0+bW1hcF9zZW0gICAgICAgICAgICAxMzggICAgICAgICAgWzxmZmZmZmZmZjgwMmE0OTBiPl0gc3lzX211bm1hcCsweDMyLzB4NTkKKzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtbS0+bW1hcF9zZW0gICAgICAgICAgICAxNDUgICAgICAgICAgWzxmZmZmZmZmZjgwMmE2MjAwPl0gc3lzX21wcm90ZWN0KzB4Y2QvMHgyMWQKKzE4CisxOSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorMjAKKzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX2xvY2s6ICAgICAgICAgICA2MjEgICAgICAgICAgICA2MjMgICAgICAgICAgIDAuNTIgICAgICAgICAxMTguMjYgICAgICAgIDEwNTMuMDIgICAgICAgICAgIDY3NDUgICAgICAgICAgOTE5MzAgICAgICAgICAgIDAuMjkgICAgICAgICAzMTYuMjkgICAgICAxMTg0MjMuNDEKKzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0KKzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX2xvY2sgICAgICAgICAgICAxNzkgICAgICAgICAgWzxmZmZmZmZmZjgwMzc4Mjc0Pl0gX2F0b21pY19kZWNfYW5kX2xvY2srMHgzNC8weDU0CisyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9sb2NrICAgICAgICAgICAgMTEzICAgICAgICAgIFs8ZmZmZmZmZmY4MDJjYzE3Yj5dIGRfYWxsb2MrMHgxOWEvMHgxZWIKKzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX2xvY2sgICAgICAgICAgICAgOTkgICAgICAgICAgWzxmZmZmZmZmZjgwMmNhMGRjPl0gZF9yZWhhc2grMHgxYi8weDQ0CisyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9sb2NrICAgICAgICAgICAgMTA0ICAgICAgICAgIFs8ZmZmZmZmZmY4MDJjYmNhMD5dIGRfaW5zdGFudGlhdGUrMHgzNi8weDhhCisyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tCisyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9sb2NrICAgICAgICAgICAgMTkyICAgICAgICAgIFs8ZmZmZmZmZmY4MDM3ODI3ND5dIF9hdG9taWNfZGVjX2FuZF9sb2NrKzB4MzQvMHg1NAorMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbG9jayAgICAgICAgICAgICA5OCAgICAgICAgICBbPGZmZmZmZmZmODAyY2EwZGM+XSBkX3JlaGFzaCsweDFiLzB4NDQKKzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX2xvY2sgICAgICAgICAgICAgNzIgICAgICAgICAgWzxmZmZmZmZmZjgwMmNjMTdiPl0gZF9hbGxvYysweDE5YS8weDFlYgorMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbG9jayAgICAgICAgICAgIDExMiAgICAgICAgICBbPGZmZmZmZmZmODAyY2JjYTA+XSBkX2luc3RhbnRpYXRlKzB4MzYvMHg4YQogCiBUaGlzIGV4Y2VycHQgc2hvd3MgdGhlIGZpcnN0IHR3byBsb2NrIGNsYXNzIHN0YXRpc3RpY3MuIExpbmUgMDEgc2hvd3MgdGhlCiBvdXRwdXQgdmVyc2lvbiAtIGVhY2ggdGltZSB0aGUgZm9ybWF0IGNoYW5nZXMgdGhpcyB3aWxsIGJlIHVwZGF0ZWQuIExpbmUgMDItMDQKLXNob3cgdGhlIGhlYWRlciB3aXRoIGNvbHVtbiBkZXNjcmlwdGlvbnMuIExpbmVzIDA1LTEwIGFuZCAxMy0xOCBzaG93IHRoZSBhY3R1YWwKK3Nob3cgdGhlIGhlYWRlciB3aXRoIGNvbHVtbiBkZXNjcmlwdGlvbnMuIExpbmVzIDA1LTE4IGFuZCAyMC0zMSBzaG93IHRoZSBhY3R1YWwKIHN0YXRpc3RpY3MuIFRoZXNlIHN0YXRpc3RpY3MgY29tZSBpbiB0d28gcGFydHM7IHRoZSBhY3R1YWwgc3RhdHMgc2VwYXJhdGVkIGJ5IGEKLXNob3J0IHNlcGFyYXRvciAobGluZSAwOCwgMTQpIGZyb20gdGhlIGNvbnRlbnRpb24gcG9pbnRzLgorc2hvcnQgc2VwYXJhdG9yIChsaW5lIDA4LCAxMykgZnJvbSB0aGUgY29udGVudGlvbiBwb2ludHMuCiAKLVRoZSBmaXJzdCBsb2NrICgwNS0xMCkgaXMgYSByZWFkL3dyaXRlIGxvY2ssIGFuZCBzaG93cyB0d28gbGluZXMgYWJvdmUgdGhlCitUaGUgZmlyc3QgbG9jayAoMDUtMTgpIGlzIGEgcmVhZC93cml0ZSBsb2NrLCBhbmQgc2hvd3MgdHdvIGxpbmVzIGFib3ZlIHRoZQogc2hvcnQgc2VwYXJhdG9yLiBUaGUgY29udGVudGlvbiBwb2ludHMgZG9uJ3QgbWF0Y2ggdGhlIGNvbHVtbiBkZXNjcmlwdG9ycywKLXRoZXkgaGF2ZSB0d286IGNvbnRlbnRpb25zIGFuZCBbPElQPl0gc3ltYm9sLgordGhleSBoYXZlIHR3bzogY29udGVudGlvbnMgYW5kIFs8SVA+XSBzeW1ib2wuIFRoZSBzZWNvbmQgc2V0IG9mIGNvbnRlbnRpb24KK3BvaW50cyBhcmUgdGhlIHBvaW50cyB3ZSdyZSBjb250ZW5kaW5nIHdpdGguCiAKK1RoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHRpbWUgdmFsdWVzIGlzIGluIHVzLgogCiBWaWV3IHRoZSB0b3AgY29udGVuZGluZyBsb2NrczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKaW5kZXggYWZiZTlhZS4uZDc0OWQ0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC0xLDE2ICsxLDI3IEBACi08VElUTEU+VjRMIEFQSTwvVElUTEU+Ci08SDE+VmlkZW8gRm9yIExpbnV4IEFQSXM8L0gxPgotPHRhYmxlIGJvcmRlcj0wPgotPHRyPgotPHRkPgotPEEgSFJFRj1odHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy92aWRlbzRsaW51eC9BUEkvVjRMMV9BUEkuaHRtbD4KLVY0TCBvcmlnaW5hbCBBUEk8L2E+Ci08L3RkPjx0ZD4KLU9ic29sZXRlZCBieSBWNEwyIEFQSQotPC90ZD48L3RyPjx0cj48dGQ+Ci08QSBIUkVGPWh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL3ZpZGVvNGxpbnV4L0FQSS9WNEwyX0FQST4KLVY0TDIgQVBJPC9hPgotPC90ZD48dGQ+Ci1TaG91bGQgYmUgdXNlZCBmb3IgbmV3IHByb2plY3RzCi08L3RkPjwvdHI+Ci08L3RhYmxlPgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPgorIDxoZWFkPgorICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD1JU08tODg1OS0yIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+CisgIDx0aXRsZT5WNEwgQVBJPC90aXRsZT4KKyA8L2hlYWQ+CisgPGJvZHk+CisgIDxoMT5WaWRlbyBGb3IgTGludXggQVBJczwvaDE+CisgIDx0YWJsZSBib3JkZXI9IjAiPgorICAgPHRyPgorICAgIDx0ZD4KKyAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDFfQVBJLmh0bWwiPlY0TCBvcmlnaW5hbCBBUEk8L2E+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgICAgIE9ic29sZXRlZCBieSBWNEwyIEFQSQorICAgIDwvdGQ+CisgICA8L3RyPgorICAgPHRyPgorICAgIDx0ZD4KKyAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDJfQVBJIj5WNEwyIEFQSTwvYT4KKyAgICA8L3RkPgorICAgIDx0ZD5TaG91bGQgYmUgdXNlZCBmb3IgbmV3IHByb2plY3RzCisgICAgPC90ZD4KKyAgIDwvdHI+CisgIDwvdGFibGU+CisgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CmluZGV4IDYwYmE2NjguLjBkOTNmYTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKQEAgLTEwNCw4ICsxMDQsOCBAQAogMTAzIC0+IEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kgICAgICAgICAgICAgICAgICAgICAgICBbMDMwNDowMTAyXQogMTA0IC0+IE5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MTowMTAxXQogMTA1IC0+IFByb1ZpZGVvIFBWMTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWEwMDoxNDMwLGFhMDA6MTQzMSxhYTAwOjE0MzIsYWEwMDoxNDMzLGFhMDM6MTQzM10KLTEwNiAtPiBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQotMTA3IC0+IFBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KQorMTA2IC0+IFBIWVRFQyBWRC0wMDktWDEgVkQtMDExIE1pbmlESU4gKGJ0ODc4KQorMTA3IC0+IFBIWVRFQyBWRC0wMDktWDEgVkQtMDExIENvbWJpIChidDg3OCkKIDEwOCAtPiBQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KQogMTA5IC0+IFBIWVRFQyBWRC0wMDkgQ29tYmkgKGJ0ODc4KQogMTEwIC0+IElWQy0xMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmYwMDphMTMyXQpAQCAtMTUxLDMgKzE1MSw2IEBACiAxNTAgLT4gR2VvdmlzaW9uIEdWLTYwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDhhOjc2M2NdCiAxNTEgLT4gS296dW1pIEtUVi0wMUMKIDE1MiAtPiBFbmNvcmUgRU5MIFRWLUZNLTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDA6MTgwMV0KKzE1MyAtPiBQSFlURUMgVkQtMDEyIChidDg3OCkKKzE1NCAtPiBQSFlURUMgVkQtMDEyLVgxIChidDg3OCkKKzE1NSAtPiBQSFlURUMgVkQtMDEyLVgyIChidDg3OCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCA2NDgyM2NjLi4zNWVhMTMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC0xMSwzICsxMSw0IEBACiAgMTAgLT4gRFZpQ08gRnVzaW9uSERUVjcgRHVhbCBFeHByZXNzICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ2MThdCiAgMTEgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIEV4cHJlc3MgICAgICAgICAgICAgICAgIFsxOGFjOmRiNzhdCiAgMTIgLT4gTGVhZHRlayBXaW5mYXN0IFB4RFZSMzIwMCBIICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2ODFdCisgMTMgLT4gQ29tcHJvIFZpZGVvTWF0ZSBFNjUwRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODViOmU4MDBdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKaW5kZXggYTUyMjdlMy4uMGQwOGYxZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OApAQCAtMiw3ICsyLDcgQEAKICAgMSAtPiBIYXVwcGF1Z2UgV2luVFYgMzR4eHggbW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MzQwMCwwMDcwOjM0MDFdCiAgIDIgLT4gR0RJIEJsYWNrIEdvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGM3OjAxMDYsMTRjNzowMTA3XQogICAzIC0+IFBpeGVsVmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTU1NDo0ODExXQotICA0IC0+IEFUSSBUViBXb25kZXIgUHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAwMjowMGY4XQorICA0IC0+IEFUSSBUViBXb25kZXIgUHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAwMjowMGY4LDEwMDI6MDBmOV0KICAgNSAtPiBMZWFkdGVrIFdpbmZhc3QgMjAwMFhQIEV4cGVydCAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYxMSwxMDdkOjY2MTNdCiAgIDYgLT4gQXZlclRWIFN0dWRpbyAzMDMgKE0xMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMGJdCiAgIDcgLT4gTVNJIFRWLUBueXdoZXJlIE1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYyOjg2MDZdCkBAIC03NCwzICs3NCw2IEBACiAgNzMgLT4gVGVWaWkgUzQyMCBEVkItUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkNDIwOjkwMjJdCiAgNzQgLT4gUHJvbGluayBQaXhlbHZpZXcgR2xvYmFsIEV4dHJlbWUgICAgICAgICAgICAgICAgICAgIFsxNTU0OjQ5NzZdCiAgNzUgLT4gUFJPRiA3MzAwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtCMDMzOjMwMzNdCisgNzYgLT4gU0FUVFJBREUgU1Q0MjAwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMjAwOjQyMDBdCisgNzcgLT4gVEJTIDg5MTAgRFZCLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4OTEwOjg4ODhdCisgNzggLT4gUHJvZiA2MjAwIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMDIyOjMwMjJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDE4N2NjNDguLjc1YmRlZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC0xLDUgKzEsNSBAQAogICAwIC0+IFVua25vd24gRU0yODAwIHZpZGVvIGdyYWJiZXIgICAgICAgICAgICAgKGVtMjgwMCkgICAgICAgIFtlYjFhOjI4MDBdCi0gIDEgLT4gVW5rbm93biBFTTI3NTAvMjh4eCB2aWRlbyBncmFiYmVyICAgICAgICAoZW0yODIwL2VtMjg0MCkgW2ViMWE6MjgyMCxlYjFhOjI4NjAsZWIxYToyODYxLGViMWE6Mjg3MCxlYjFhOjI4ODEsZWIxYToyODgzXQorICAxIC0+IFVua25vd24gRU0yNzUwLzI4eHggdmlkZW8gZ3JhYmJlciAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjAsZWIxYToyODIxLGViMWE6Mjg2MCxlYjFhOjI4NjEsZWIxYToyODcwLGViMWE6Mjg4MSxlYjFhOjI4ODNdCiAgIDIgLT4gVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzBjY2Q6MDAzNl0KICAgMyAtPiBQaW5uYWNsZSBQQ1RWIFVTQiAyICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA4XQogICA0IC0+IEhhdXBwYXVnZSBXaW5UViBVU0IgMiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMDQwOjQyMDAsMjA0MDo0MjAxXQpAQCAtMTIsOSArMTIsOSBAQAogIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCiAgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxMyAtPiBUZXJyYXRlYyBQcm9kaWd5IFhTICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQ3XQotIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjFdCisgMTQgLT4gUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxNSAtPiBWLUdlYXIgUG9ja2V0VFYgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCi0gMTYgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA5NTAgICAgICAgICAgICAgICAgICAoZW0yODgzKSAgICAgICAgWzIwNDA6NjUxMywyMDQwOjY1MTcsMjA0MDo2NTFiLDIwNDA6NjUxZl0KKyAxNiAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDk1MCAgICAgICAgICAgICAgICAgIChlbTI4ODMpICAgICAgICBbMjA0MDo2NTEzLDIwNDA6NjUxNywyMDQwOjY1MWJdCiAgMTcgLT4gUGlubmFjbGUgUENUViBIRCBQcm8gU3RpY2sgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIzMDQ6MDIyN10KICAxOCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAoUjIpICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAyXQogIDE5IC0+IFBvaW50Tml4IEludHJhLU9yYWwgQ2FtZXJhICAgICAgICAgICAgICAgKGVtMjg2MCkKQEAgLTI3LDcgKzI3LDYgQEAKICAyNiAtPiBIZXJjdWxlcyBTbWFydCBUViBVU0IgMi4wICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDI3IC0+IFBpbm5hY2xlIFBDVFYgVVNCIDIgKFBoaWxpcHMgRk0xMjE2TUUpICAgKGVtMjgyMC9lbTI4NDApCiAgMjggLT4gTGVhZHRlayBXaW5mYXN0IFVTQiBJSSBEZWx1eGUgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKLSAyOSAtPiBQaW5uYWNsZSBEYXp6bGUgRFZDIDEwMCAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDMwIC0+IFZpZGVvbG9neSAyMEsxNFhVU0IgVVNCMi4wICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMzEgLT4gVXNiZ2VhciBWRDIwNHY5ICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODIxKQogIDMyIC0+IFN1cGVyY29tcCBVU0IgMi4wIFRWICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMSkKQEAgLTU3LDMgKzU2LDUgQEAKICA1NiAtPiBQaW5uYWNsZSBIeWJyaWQgUHJvICgyKSAgICAgICAgICAgICAgICAgIChlbTI4ODIpICAgICAgICBbMjMwNDowMjI2XQogIDU3IC0+IEt3b3JsZCBQbHVzVFYgSEQgSHlicmlkIDMzMCAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFtlYjFhOmEzMTZdCiAgNTggLT4gQ29tcHJvIFZpZGVvTWF0ZSBGb3JZb3UvU3RlcmVvICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzE4NWI6MjA0MV0KKyA2MCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDg1MCAgICAgICAgICAgICAgICAgIChlbTI4ODMpICAgICAgICBbMjA0MDo2NTFmXQorIDYxIC0+IFBpeGVsdmlldyBQbGF5VFYgQm94IDQgVVNCIDIuMCAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZGM2N2VlZi4uMzM1YWVmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTAsNyArMTAsNyBAQAogICA5IC0+IE1lZGlvbiA1MDQ0CiAgMTAgLT4gS3dvcmxkL0t1cm91dG9TaGlrb3UgU0FBNzEzMC1UVlBDSQogIDExIC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWICAgICAgICAgICAgICAgICAgWzE1M2I6MTE0M10KLSAxMiAtPiBNZWRpb24gNzEzNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDNdCisgMTIgLT4gTWVkaW9uIDcxMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDAzLDE2YmU6NTAwMF0KICAxMyAtPiBUeXBob29uIFRWK1JhZGlvIDkwMDMxCiAgMTQgLT4gRUxTQSBFWC1WSVNJT04gMzAwVFYgICAgICAgICAgICAgICAgICAgICBbMTA0ODoyMjZiXQogIDE1IC0+IEVMU0EgRVgtVklTSU9OIDUwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2YV0KQEAgLTE1MSwzICsxNTEsNCBAQAogMTUwIC0+IFpvZ2lzIFJlYWwgQW5nZWwgMjIwCiAxNTEgLT4gQURTIFRlY2ggSW5zdGFudCBIRFRWICAgICAgICAgICAgICAgICAgICBbMTQyMTowMzgwXQogMTUyIC0+IEFzdXMgVGlnZXIgUmV2OjEuMDAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg1N10KKzE1MyAtPiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgICAgICAgICAgIFsxN2RlOjcxMjhdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OAppbmRleCAxNjZkNTk2Li4zNWZhZTIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmN4ODgKQEAgLTEsNCArMSwzIEBACi0KIGN4ODgwMCByZWxlYXNlIG5vdGVzCiA9PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMCwyMSArOSwyMCBAQAogCiB2aWRlbwogCS0gQmFzaWNhbGx5IHdvcmtzLgotCS0gU29tZSBtaW5vciBpbWFnZSBxdWFsaXR5IGdsaXRjaGVzLgotCS0gRm9yIG5vdyBvbmx5IGNhcHR1cmUsIG92ZXJsYXkgc3VwcG9ydCBpc24ndCBjb21wbGV0ZWQgeWV0LgorCS0gRm9yIG5vdywgb25seSBjYXB0dXJlIGFuZCByZWFkKCkuIE92ZXJsYXkgaXNuJ3Qgc3VwcG9ydGVkLgogCiBhdWRpbwogCS0gVGhlIGNoaXAgc3BlY3MgZm9yIHRoZSBvbi1jaGlwIFRWIHNvdW5kIGRlY29kZXIgYXJlIG5leHQKIAkgIHRvIHVzZWxlc3MgOi0vCiAJLSBOZXZlcmxlc3MgdGhlIGJ1aWx0aW4gVFYgc291bmQgZGVjb2RlciBzdGFydHMgd29ya2luZyBub3csCi0JICBhdCBsZWFzdCBmb3IgUEFMLUJHLiAgT3RoZXIgVFYgbm9ybXMgbmVlZCBvdGhlciBjb2RlIC4uLgorCSAgYXQgbGVhc3QgZm9yIHNvbWUgc3RhbmRhcmRzLgogCSAgRk9SIEFOWSBSRVBPUlRTIE9OIFRISVMgUExFQVNFIE1FTlRJT04gVEhFIFRWIE5PUk0gWU9VIEFSRQogCSAgVVNJTkcuCiAJLSBNb3N0IHR1bmVyIGNoaXBzIGRvIHByb3ZpZGUgbW9ubyBzb3VuZCwgd2hpY2ggbWF5IG9yIG1heSBub3QKIAkgIGJlIHVzZWFibGUgZGVwZW5kaW5nIG9uIHRoZSBib2FyZCBkZXNpZ24uICBXaXRoIHRoZSBIYXVwcGF1Z2UKIAkgIGNhcmRzIGl0IHdvcmtzLCBzbyB0aGVyZSBpcyBtb25vIHNvdW5kIGF2YWlsYWJsZSBhcyBmYWxsYmFjay4KIAktIGF1ZGlvIGRhdGEgZG1hIChpLmUuIHJlY29yZGluZyB3aXRob3V0IGxvb3BiYWNrIGNhYmxlIHRvIHRoZQotCSAgc291bmQgY2FyZCkgc2hvdWxkIGJlIHBvc3NpYmxlLCBidXQgdGhlcmUgaXMgbm8gY29kZSB5ZXQgLi4uCisJICBzb3VuZCBjYXJkKSBpcyBzdXBwb3J0ZWQgdmlhIGN4ODgtYWxzYS4KIAogdmJpCiAJLSBDb2RlIHByZXNlbnQuIFdvcmtzIGZvciBOVFNDIGNsb3NlZCBjYXB0aW9uLiBQQUwgYW5kIG90aGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDAwNDgxOGYuLjFjNThhNzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC01MCw5ICs1MCwxNCBAQAogc3BjYTUwOAkJMDQ2MTowODE1CU1pY3JvIElubm92YXRpb24gSUMyMDAKIHN1bnBsdXMJCTA0NjE6MDgyMQlGdWppZmlsbSBNVi0xCiB6YzN4eAkJMDQ2MTowYTAwCU1pY3JvSW5ub3ZhdGlvbiBXZWJDYW0zMjAKK3N0djA2eHgJCTA0NmQ6MDg0MAlRdWlja0NhbSBFeHByZXNzCitzdHYwNnh4CQkwNDZkOjA4NTAJTEVHTyBjYW0gLyBRdWlja0NhbSBXZWIKK3N0djA2eHgJCTA0NmQ6MDg3MAlEZXh4YSBXZWJDYW0gVVNCCiBzcGNhNTAwCQkwNDZkOjA4OTAJTG9naXRlY2ggUXVpY2tDYW0gdHJhdmVsZXIKIHZjMDMyeAkJMDQ2ZDowODkyCUxvZ2l0ZWNoIE9yYmljYW0KIHZjMDMyeAkJMDQ2ZDowODk2CUxvZ2l0ZWNoIE9yYmljYW0KK3ZjMDMyeAkJMDQ2ZDowODk3CUxvZ2l0ZWNoIFF1aWNrQ2FtIGZvciBEZWxsIG5vdGVib29rcworemMzeHgJCTA0NmQ6MDg5ZAlMb2dpdGVjaCBRdWlja0NhbSBFMjUwMAogemMzeHgJCTA0NmQ6MDhhMAlMb2dpdGVjaCBRQyBJTQogemMzeHgJCTA0NmQ6MDhhMQlMb2dpdGVjaCBRQyBJTSAweDA4QTEgK3NvdW5kCiB6YzN4eAkJMDQ2ZDowOGEyCUxhYnRlYyBXZWJjYW0gUHJvCkBAIC0xNjksNiArMTc0LDkgQEAKIHNwY2E1MDAJCTA2YmU6MDgwMAlPcHRpbWVkaWEKIHN1bnBsdXMJCTA2ZDY6MDAzMQlUcnVzdCA2MTAgTENEIFBvd2VyQ0BtIFpvb20KIHNwY2E1MDYJCTA2ZTE6YTE5MAlBRFMgSW5zdGFudCBWQ0QKK292NTM0CQkwNmY4OjMwMDIJSGVyY3VsZXMgQmxvZyBXZWJjYW0KK292NTM0CQkwNmY4OjMwMDMJSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cKK3Nvbml4agkJMDZmODozMDA0CUhlcmN1bGVzIENsYXNzaWMgU2lsdmVyCiBzcGNhNTA4CQkwNzMzOjAxMTAJVmlld1F1ZXN0IFZRMTEwCiBzcGNhNTA4CQkwMTMwOjAxMzAJQ2xvbmUgRGlnaXRhbCBXZWJjYW0gMTEwNDMKIHNwY2E1MDEJCTA3MzM6MDQwMQlJbnRlbCBDcmVhdGUgYW5kIFNoYXJlCkBAIC0xOTksNyArMjA3LDggQEAKIHN1bnBsdXMJCTA4Y2E6MjA2MAlBaXB0ZWsgUG9ja2V0RFY1MzAwCiB0djg1MzIJCTA5MjM6MDEwZglJQ001MzIgY2FtcwogbWFycwkJMDkzYTowNTBmCU1hcnMtU2VtaSBQYy1DYW1lcmEKLXBhYzIwNwkJMDkzYToyNDYwCVBBQzIwNyBRdGVjIFdlYmNhbSAxMDAKK3BhYzIwNwkJMDkzYToyNDYwCVF0ZWMgV2ViY2FtIDEwMAorcGFjMjA3CQkwOTNhOjI0NjEJSFAgV2ViY2FtCiBwYWMyMDcJCTA5M2E6MjQ2MwlQaGlsaXBzIFNQQyAyMjAgTkMKIHBhYzIwNwkJMDkzYToyNDY0CUxhYnRlYyBXZWJjYW0gMTIwMAogcGFjMjA3CQkwOTNhOjI0NjgJUEFDMjA3CkBAIC0yMTMsMTAgKzIyMiwxMyBAQAogcGFjNzMxMQkJMDkzYToyNjA4CVRydXN0IFdCLTMzMDBwCiBwYWM3MzExCQkwOTNhOjI2MGUJR2lnYXdhcmUgVkdBIFBDIENhbWVyYSwgVHJ1c3QgV0ItMzM1MHAsIFNJR01BIGNhbSAyMzUwCiBwYWM3MzExCQkwOTNhOjI2MGYJU25ha2VDYW0KK3BhYzczMTEJCTA5M2E6MjYyMAlBcG9sbG8gQUMtOTA1CiBwYWM3MzExCQkwOTNhOjI2MjEJUEFDNzMxeAorcGFjNzMxMQkJMDkzYToyNjIyCUdlbml1cyBFeWUgMzEyCiBwYWM3MzExCQkwOTNhOjI2MjQJUEFDNzMwMgogcGFjNzMxMQkJMDkzYToyNjI2CUxhYnRlYyAyMjAwCiBwYWM3MzExCQkwOTNhOjI2MmEJV2ViY2FtIDMwMGsKK3BhYzczMTEJCTA5M2E6MjYyYwlQaGlsaXBzIFNQQyAyMzAgTkMKIHpjM3h4CQkwYWM4OjAzMDIJWi1zdGFyIFZpbWljcm8gemMwMzAyCiB2YzAzMngJCTBhYzg6MDMyMQlWaW1pY3JvIGdlbmVyaWMgdmMwMzIxCiB2YzAzMngJCTBhYzg6MDMyMwlWaW1pY3JvIFZjMDMyMwpAQCAtMjQ5LDExICsyNjEsMTMgQEAKIHNvbml4agkJMGM0NTo2MGVjCVNOOUMxMDUrTU80MDAwCiBzb25peGoJCTBjNDU6NjBmYglTdXJmZXIgTm9OYW1lCiBzb25peGoJCTBjNDU6NjBmYwlMRy1MSUMzMDAKK3Nvbml4agkJMGM0NTo2MGZlCU1pY3JvZGlhIEF1ZGlvCiBzb25peGoJCTBjNDU6NjEyOAlNaWNyb2RpYS9Tb25peCBTTlAzMjUKIHNvbml4agkJMGM0NTo2MTJhCUF2YW50IENhbWVyYQogc29uaXhqCQkwYzQ1OjYxMmMJVHlwaG9vbiBSYXN5IENhbSAxLjNNUGl4CiBzb25peGoJCTBjNDU6NjEzMAlTb25peCBQY2NhbQogc29uaXhqCQkwYzQ1OjYxMzgJU245YzEyMCBNbzQwMDAKK3Nvbml4agkJMGM0NTo2MTNhCU1pY3JvZGlhIFNvbml4IFBDIENhbWVyYQogc29uaXhqCQkwYzQ1OjYxM2IJU3VyZmVyIFNOLTIwNgogc29uaXhqCQkwYzQ1OjYxM2MJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQzCVNvbml4IFBjY2FtMTY4CkBAIC0yNjMsNiArMjc3LDkgQEAKIHpjM3h4CQkxMGZkOjAxMjgJVHlwaG9vbiBXZWJzaG90IElJIFVTQiAzMDBrIDB4MDEyOAogc3BjYTU2MQkJMTBmZDo3ZTUwCUZseUNhbSBVc2IgMTAwCiB6YzN4eAkJMTBmZDo4MDUwCVR5cGhvb24gV2Vic2hvdCBJSSBVU0IgMzAwaworb3Y1MzQJCTE0MTU6MjAwMAlTb255IEhEIEV5ZSBmb3IgUFMzIChTTEVIIDAwMjAxKQorcGFjMjA3CQkxNDVmOjAxM2EJVHJ1c3QgV0ItMTMwME4KK3ZjMDMyeAkJMTViODo2MDAyCUhQIDIuMCBNZWdhcGl4ZWwgcno0MDZhYQogc3BjYTUwMQkJMTc3Njo1MDFjCUFyb3dhbmEgMzAwSyBDTU9TIENhbWVyYQogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCiB2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhZTc2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CkBAIC0wLDAgKzEsNTIwIEBACitPdmVydmlldyBvZiB0aGUgVjRMMiBkcml2ZXIgZnJhbWV3b3JrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdGV4dCBkb2N1bWVudHMgdGhlIHZhcmlvdXMgc3RydWN0dXJlcyBwcm92aWRlZCBieSB0aGUgVjRMMiBmcmFtZXdvcmsgYW5kCit0aGVpciByZWxhdGlvbnNoaXBzLgorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoZSBWNEwyIGRyaXZlcnMgdGVuZCB0byBiZSB2ZXJ5IGNvbXBsZXggZHVlIHRvIHRoZSBjb21wbGV4aXR5IG9mIHRoZQoraGFyZHdhcmU6IG1vc3QgZGV2aWNlcyBoYXZlIG11bHRpcGxlIElDcywgZXhwb3J0IG11bHRpcGxlIGRldmljZSBub2RlcyBpbgorL2RldiwgYW5kIGNyZWF0ZSBhbHNvIG5vbi1WNEwyIGRldmljZXMgc3VjaCBhcyBEVkIsIEFMU0EsIEZCLCBJMkMgYW5kIGlucHV0CisoSVIpIGRldmljZXMuCisKK0VzcGVjaWFsbHkgdGhlIGZhY3QgdGhhdCBWNEwyIGRyaXZlcnMgaGF2ZSB0byBzZXR1cCBzdXBwb3J0aW5nIElDcyB0bworZG8gYXVkaW8vdmlkZW8gbXV4aW5nL2VuY29kaW5nL2RlY29kaW5nIG1ha2VzIGl0IG1vcmUgY29tcGxleCB0aGFuIG1vc3QuCitVc3VhbGx5IHRoZXNlIElDcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtYWluIGJyaWRnZSBkcml2ZXIgdGhyb3VnaCBvbmUgb3IKK21vcmUgSTJDIGJ1c3NlcywgYnV0IG90aGVyIGJ1c3NlcyBjYW4gYWxzbyBiZSB1c2VkLiBTdWNoIGRldmljZXMgYXJlCitjYWxsZWQgJ3N1Yi1kZXZpY2VzJy4KKworRm9yIGEgbG9uZyB0aW1lIHRoZSBmcmFtZXdvcmsgd2FzIGxpbWl0ZWQgdG8gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgZm9yCitjcmVhdGluZyBWNEwgZGV2aWNlIG5vZGVzIGFuZCB2aWRlb19idWYgZm9yIGhhbmRsaW5nIHRoZSB2aWRlbyBidWZmZXJzCisobm90ZSB0aGF0IHRoaXMgZG9jdW1lbnQgZG9lcyBub3QgZGlzY3VzcyB0aGUgdmlkZW9fYnVmIGZyYW1ld29yaykuCisKK1RoaXMgbWVhbnQgdGhhdCBhbGwgZHJpdmVycyBoYWQgdG8gZG8gdGhlIHNldHVwIG9mIGRldmljZSBpbnN0YW5jZXMgYW5kCitjb25uZWN0aW5nIHRvIHN1Yi1kZXZpY2VzIHRoZW1zZWx2ZXMuIFNvbWUgb2YgdGhpcyBpcyBxdWl0ZSBjb21wbGljYXRlZAordG8gZG8gcmlnaHQgYW5kIG1hbnkgZHJpdmVycyBuZXZlciBkaWQgZG8gaXQgY29ycmVjdGx5LgorCitUaGVyZSBpcyBhbHNvIGEgbG90IG9mIGNvbW1vbiBjb2RlIHRoYXQgY291bGQgbmV2ZXIgYmUgcmVmYWN0b3JlZCBkdWUgdG8KK3RoZSBsYWNrIG9mIGEgZnJhbWV3b3JrLgorCitTbyB0aGlzIGZyYW1ld29yayBzZXRzIHVwIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3MgdGhhdCBhbGwgZHJpdmVycworbmVlZCBhbmQgdGhpcyBzYW1lIGZyYW1ld29yayBzaG91bGQgbWFrZSBpdCBtdWNoIGVhc2llciB0byByZWZhY3RvcgorY29tbW9uIGNvZGUgaW50byB1dGlsaXR5IGZ1bmN0aW9ucyBzaGFyZWQgYnkgYWxsIGRyaXZlcnMuCisKKworU3RydWN0dXJlIG9mIGEgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIGRyaXZlcnMgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKworMSkgQSBzdHJ1Y3QgZm9yIGVhY2ggZGV2aWNlIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGRldmljZSBzdGF0ZS4KKworMikgQSB3YXkgb2YgaW5pdGlhbGl6aW5nIGFuZCBjb21tYW5kaW5nIHN1Yi1kZXZpY2VzIChpZiBhbnkpLgorCiszKSBDcmVhdGluZyBWNEwyIGRldmljZSBub2RlcyAoL2Rldi92aWRlb1gsIC9kZXYvdmJpWCwgL2Rldi9yYWRpb1ggYW5kCisgICAvZGV2L3Z0eFgpIGFuZCBrZWVwaW5nIHRyYWNrIG9mIGRldmljZS1ub2RlIHNwZWNpZmljIGRhdGEuCisKKzQpIEZpbGVoYW5kbGUtc3BlY2lmaWMgc3RydWN0cyBjb250YWluaW5nIHBlci1maWxlaGFuZGxlIGRhdGEuCisKK1RoaXMgaXMgYSByb3VnaCBzY2hlbWF0aWMgb2YgaG93IGl0IGFsbCByZWxhdGVzOgorCisgICAgZGV2aWNlIGluc3RhbmNlcworICAgICAgfAorICAgICAgKy1zdWItZGV2aWNlIGluc3RhbmNlcworICAgICAgfAorICAgICAgXC1WNEwyIGRldmljZSBub2RlcworCSAgfAorCSAgXC1maWxlaGFuZGxlIGluc3RhbmNlcworCisKK1N0cnVjdHVyZSBvZiB0aGUgZnJhbWV3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnJhbWV3b3JrIGNsb3NlbHkgcmVzZW1ibGVzIHRoZSBkcml2ZXIgc3RydWN0dXJlOiBpdCBoYXMgYSB2NGwyX2RldmljZQorc3RydWN0IGZvciB0aGUgZGV2aWNlIGluc3RhbmNlIGRhdGEsIGEgdjRsMl9zdWJkZXYgc3RydWN0IHRvIHJlZmVyIHRvCitzdWItZGV2aWNlIGluc3RhbmNlcywgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3Qgc3RvcmVzIFY0TDIgZGV2aWNlIG5vZGUgZGF0YQorYW5kIGluIHRoZSBmdXR1cmUgYSB2NGwyX2ZoIHN0cnVjdCB3aWxsIGtlZXAgdHJhY2sgb2YgZmlsZWhhbmRsZSBpbnN0YW5jZXMKKyh0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQpLgorCisKK3N0cnVjdCB2NGwyX2RldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggZGV2aWNlIGluc3RhbmNlIGlzIHJlcHJlc2VudGVkIGJ5IGEgc3RydWN0IHY0bDJfZGV2aWNlICh2NGwyLWRldmljZS5oKS4KK1Zlcnkgc2ltcGxlIGRldmljZXMgY2FuIGp1c3QgYWxsb2NhdGUgdGhpcyBzdHJ1Y3QsIGJ1dCBtb3N0IG9mIHRoZSB0aW1lIHlvdQord291bGQgZW1iZWQgdGhpcyBzdHJ1Y3QgaW5zaWRlIGEgbGFyZ2VyIHN0cnVjdC4KKworWW91IG11c3QgcmVnaXN0ZXIgdGhlIGRldmljZSBpbnN0YW5jZToKKworCXY0bDJfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CisKK1JlZ2lzdHJhdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIHY0bDJfZGV2aWNlIHN0cnVjdCBhbmQgbGluayBkZXYtPmRyaXZlcl9kYXRhCit0byB2NGwyX2Rldi4gUmVnaXN0cmF0aW9uIHdpbGwgYWxzbyBzZXQgdjRsMl9kZXYtPm5hbWUgdG8gYSB2YWx1ZSBkZXJpdmVkIGZyb20KK2RldiAoZHJpdmVyIG5hbWUgZm9sbG93ZWQgYnkgdGhlIGJ1c19pZCwgdG8gYmUgcHJlY2lzZSkuIFlvdSBtYXkgY2hhbmdlIHRoZQorbmFtZSBhZnRlciByZWdpc3RyYXRpb24gaWYgeW91IHdhbnQuCisKK1RoZSBmaXJzdCAnZGV2JyBhcmd1bWVudCBpcyBub3JtYWxseSB0aGUgc3RydWN0IGRldmljZSBwb2ludGVyIG9mIGEgcGNpX2RldiwKK3VzYl9kZXZpY2Ugb3IgcGxhdGZvcm1fZGV2aWNlLgorCitZb3UgdW5yZWdpc3RlciB3aXRoOgorCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKworVW5yZWdpc3RlcmluZyB3aWxsIGFsc28gYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyIGFsbCBzdWJkZXZzIGZyb20gdGhlIGRldmljZS4KKworU29tZXRpbWVzIHlvdSBuZWVkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZGV2aWNlcyByZWdpc3RlcmVkIGJ5IGEgc3BlY2lmaWMKK2RyaXZlci4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIG11bHRpcGxlIGRldmljZSBkcml2ZXJzIHVzZSB0aGUgc2FtZQoraGFyZHdhcmUuIEUuZy4gdGhlIGl2dHZmYiBkcml2ZXIgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBpdnR2CitoYXJkd2FyZS4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYWxzYSBkcml2ZXJzIGZvciBleGFtcGxlLgorCitZb3UgY2FuIGl0ZXJhdGUgb3ZlciBhbGwgcmVnaXN0ZXJlZCBkZXZpY2VzIGFzIGZvbGxvd3M6CisKK3N0YXRpYyBpbnQgY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIHRlc3QgaWYgdGhpcyBkZXZpY2Ugd2FzIGluaXRlZCAqLworCWlmICh2NGwyX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwkuLi4KKwlyZXR1cm4gMDsKK30KKworaW50IGl0ZXJhdGUodm9pZCAqcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCWludCBlcnI7CisKKwkvKiBGaW5kIGRyaXZlciAnaXZ0dicgb24gdGhlIFBDSSBidXMuCisJICAgcGNpX2J1c190eXBlIGlzIGEgZ2xvYmFsLiBGb3IgVVNCIGJ1c3NlcyB1c2UgdXNiX2J1c190eXBlLiAqLworCWRydiA9IGRyaXZlcl9maW5kKCJpdnR2IiwgJnBjaV9idXNfdHlwZSk7CisJLyogaXRlcmF0ZSBvdmVyIGFsbCBpdnR2IGRldmljZSBpbnN0YW5jZXMgKi8KKwllcnIgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKGRydiwgTlVMTCwgcCwgY2FsbGJhY2spOworCXB1dF9kcml2ZXIoZHJ2KTsKKwlyZXR1cm4gZXJyOworfQorCitTb21ldGltZXMgeW91IG5lZWQgdG8ga2VlcCBhIHJ1bm5pbmcgY291bnRlciBvZiB0aGUgZGV2aWNlIGluc3RhbmNlLiBUaGlzIGlzCitjb21tb25seSB1c2VkIHRvIG1hcCBhIGRldmljZSBpbnN0YW5jZSB0byBhbiBpbmRleCBvZiBhIG1vZHVsZSBvcHRpb24gYXJyYXkuCisKK1RoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBpcyBhcyBmb2xsb3dzOgorCitzdGF0aWMgYXRvbWljX3QgZHJ2X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRydl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJLi4uCisJc3RhdGUtPmluc3RhbmNlID0gYXRvbWljX2luY19yZXR1cm4oJmRydl9pbnN0YW5jZSkgLSAxOworfQorCisKK3N0cnVjdCB2NGwyX3N1YmRldgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgZHJpdmVycyBuZWVkIHRvIGNvbW11bmljYXRlIHdpdGggc3ViLWRldmljZXMuIFRoZXNlIGRldmljZXMgY2FuIGRvIGFsbAorc29ydCBvZiB0YXNrcywgYnV0IG1vc3QgY29tbW9ubHkgdGhleSBoYW5kbGUgYXVkaW8gYW5kL29yIHZpZGVvIG11eGluZywKK2VuY29kaW5nIG9yIGRlY29kaW5nLiBGb3Igd2ViY2FtcyBjb21tb24gc3ViLWRldmljZXMgYXJlIHNlbnNvcnMgYW5kIGNhbWVyYQorY29udHJvbGxlcnMuCisKK1VzdWFsbHkgdGhlc2UgYXJlIEkyQyBkZXZpY2VzLCBidXQgbm90IG5lY2Vzc2FyaWx5LiBJbiBvcmRlciB0byBwcm92aWRlIHRoZQorZHJpdmVyIHdpdGggYSBjb25zaXN0ZW50IGludGVyZmFjZSB0byB0aGVzZSBzdWItZGV2aWNlcyB0aGUgdjRsMl9zdWJkZXYgc3RydWN0CisodjRsMi1zdWJkZXYuaCkgd2FzIGNyZWF0ZWQuCisKK0VhY2ggc3ViLWRldmljZSBkcml2ZXIgbXVzdCBoYXZlIGEgdjRsMl9zdWJkZXYgc3RydWN0LiBUaGlzIHN0cnVjdCBjYW4gYmUKK3N0YW5kLWFsb25lIGZvciBzaW1wbGUgc3ViLWRldmljZXMgb3IgaXQgbWlnaHQgYmUgZW1iZWRkZWQgaW4gYSBsYXJnZXIgc3RydWN0CitpZiBtb3JlIHN0YXRlIGluZm9ybWF0aW9uIG5lZWRzIHRvIGJlIHN0b3JlZC4gVXN1YWxseSB0aGVyZSBpcyBhIGxvdy1sZXZlbAorZGV2aWNlIHN0cnVjdCAoZS5nLiBpMmNfY2xpZW50KSB0aGF0IGNvbnRhaW5zIHRoZSBkZXZpY2UgZGF0YSBhcyBzZXR1cAorYnkgdGhlIGtlcm5lbC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc3RvcmUgdGhhdCBwb2ludGVyIGluIHRoZSBwcml2YXRlCitkYXRhIG9mIHY0bDJfc3ViZGV2IHVzaW5nIHY0bDJfc2V0X3N1YmRldmRhdGEoKS4gVGhhdCBtYWtlcyBpdCBlYXN5IHRvIGdvCitmcm9tIGEgdjRsMl9zdWJkZXYgdG8gdGhlIGFjdHVhbCBsb3ctbGV2ZWwgYnVzLXNwZWNpZmljIGRldmljZSBkYXRhLgorCitZb3UgYWxzbyBuZWVkIGEgd2F5IHRvIGdvIGZyb20gdGhlIGxvdy1sZXZlbCBzdHJ1Y3QgdG8gdjRsMl9zdWJkZXYuIEZvciB0aGUKK2NvbW1vbiBpMmNfY2xpZW50IHN0cnVjdCB0aGUgaTJjX3NldF9jbGllbnRkYXRhKCkgY2FsbCBpcyB1c2VkIHRvIHN0b3JlIGEKK3Y0bDJfc3ViZGV2IHBvaW50ZXIsIGZvciBvdGhlciBidXNzZXMgeW91IG1heSBoYXZlIHRvIHVzZSBvdGhlciBtZXRob2RzLgorCitGcm9tIHRoZSBicmlkZ2UgZHJpdmVyIHBlcnNwZWN0aXZlIHlvdSBsb2FkIHRoZSBzdWItZGV2aWNlIG1vZHVsZSBhbmQgc29tZWhvdworb2J0YWluIHRoZSB2NGwyX3N1YmRldiBwb2ludGVyLiBGb3IgaTJjIGRldmljZXMgdGhpcyBpcyBlYXN5OiB5b3UgY2FsbAoraTJjX2dldF9jbGllbnRkYXRhKCkuIEZvciBvdGhlciBidXNzZXMgc29tZXRoaW5nIHNpbWlsYXIgbmVlZHMgdG8gYmUgZG9uZS4KK0hlbHBlciBmdW5jdGlvbnMgZXhpc3RzIGZvciBzdWItZGV2aWNlcyBvbiBhbiBJMkMgYnVzIHRoYXQgZG8gbW9zdCBvZiB0aGlzCit0cmlja3kgd29yayBmb3IgeW91LgorCitFYWNoIHY0bDJfc3ViZGV2IGNvbnRhaW5zIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgc3ViLWRldmljZSBkcml2ZXJzIGNhbgoraW1wbGVtZW50IChvciBsZWF2ZSBOVUxMIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlKS4gU2luY2Ugc3ViLWRldmljZXMgY2FuIGRvCitzbyBtYW55IGRpZmZlcmVudCB0aGluZ3MgYW5kIHlvdSBkbyBub3Qgd2FudCB0byBlbmQgdXAgd2l0aCBhIGh1Z2Ugb3BzIHN0cnVjdAorb2Ygd2hpY2ggb25seSBhIGhhbmRmdWwgb2Ygb3BzIGFyZSBjb21tb25seSBpbXBsZW1lbnRlZCwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzCithcmUgc29ydGVkIGFjY29yZGluZyB0byBjYXRlZ29yeSBhbmQgZWFjaCBjYXRlZ29yeSBoYXMgaXRzIG93biBvcHMgc3RydWN0LgorCitUaGUgdG9wLWxldmVsIG9wcyBzdHJ1Y3QgY29udGFpbnMgcG9pbnRlcnMgdG8gdGhlIGNhdGVnb3J5IG9wcyBzdHJ1Y3RzLCB3aGljaAorbWF5IGJlIE5VTEwgaWYgdGhlIHN1YmRldiBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhbnl0aGluZyBmcm9tIHRoYXQgY2F0ZWdvcnkuCisKK0l0IGxvb2tzIGxpa2UgdGhpczoKKworc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHsKKwlpbnQgKCpnX2NoaXBfaWRlbnQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApOworCWludCAoKmxvZ19zdGF0dXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworCWludCAoKmluaXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpOworCS4uLgorfTsKKworc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyB7CisJLi4uCit9OworCitzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIHsKKwkuLi4KK307CisKK3N0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgeworCS4uLgorfTsKKworc3RydWN0IHY0bDJfc3ViZGV2X29wcyB7CisJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzICAqY29yZTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzICp0dW5lcjsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzICphdWRpbzsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzICp2aWRlbzsKK307CisKK1RoZSBjb3JlIG9wcyBhcmUgY29tbW9uIHRvIGFsbCBzdWJkZXZzLCB0aGUgb3RoZXIgY2F0ZWdvcmllcyBhcmUgaW1wbGVtZW50ZWQKK2RlcGVuZGluZyBvbiB0aGUgc3ViLWRldmljZS4gRS5nLiBhIHZpZGVvIGRldmljZSBpcyB1bmxpa2VseSB0byBzdXBwb3J0IHRoZQorYXVkaW8gb3BzIGFuZCB2aWNlIHZlcnNhLgorCitUaGlzIHNldHVwIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHdoaWxlIHN0aWxsIG1ha2luZyBpdCBlYXN5Cit0byBhZGQgbmV3IG9wcyBhbmQgY2F0ZWdvcmllcy4KKworQSBzdWItZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdjRsMl9zdWJkZXYgc3RydWN0IHVzaW5nOgorCisJdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZvcHMpOworCitBZnRlcndhcmRzIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgc3ViZGV2LT5uYW1lIHdpdGggYSB1bmlxdWUgbmFtZSBhbmQgc2V0IHRoZQorbW9kdWxlIG93bmVyLiBUaGlzIGlzIGRvbmUgZm9yIHlvdSBpZiB5b3UgdXNlIHRoZSBpMmMgaGVscGVyIGZ1bmN0aW9ucy4KKworQSBkZXZpY2UgKGJyaWRnZSkgZHJpdmVyIG5lZWRzIHRvIHJlZ2lzdGVyIHRoZSB2NGwyX3N1YmRldiB3aXRoIHRoZQordjRsMl9kZXZpY2U6CisKKwlpbnQgZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KGRldmljZSwgc3ViZGV2KTsKKworVGhpcyBjYW4gZmFpbCBpZiB0aGUgc3ViZGV2IG1vZHVsZSBkaXNhcHBlYXJlZCBiZWZvcmUgaXQgY291bGQgYmUgcmVnaXN0ZXJlZC4KK0FmdGVyIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBzdWNjZXNzZnVsbHkgdGhlIHN1YmRldi0+ZGV2IGZpZWxkIHBvaW50cyB0bwordGhlIHY0bDJfZGV2aWNlLgorCitZb3UgY2FuIHVucmVnaXN0ZXIgYSBzdWItZGV2aWNlIHVzaW5nOgorCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsKKworQWZ0ZXJ3YXJkcyB0aGUgc3ViZGV2IG1vZHVsZSBjYW4gYmUgdW5sb2FkZWQgYW5kIHN1YmRldi0+ZGV2ID09IE5VTEwuCisKK1lvdSBjYW4gY2FsbCBhbiBvcHMgZnVuY3Rpb24gZWl0aGVyIGRpcmVjdGx5OgorCisJZXJyID0gc3ViZGV2LT5vcHMtPmNvcmUtPmdfY2hpcF9pZGVudChzdWJkZXYsICZjaGlwKTsKKworYnV0IGl0IGlzIGJldHRlciBhbmQgZWFzaWVyIHRvIHVzZSB0aGlzIG1hY3JvOgorCisJZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCitUaGUgbWFjcm8gd2lsbCB0byB0aGUgcmlnaHQgTlVMTCBwb2ludGVyIGNoZWNrcyBhbmQgcmV0dXJucyAtRU5PREVWIGlmIHN1YmRldgoraXMgTlVMTCwgLUVOT0lPQ1RMQ01EIGlmIGVpdGhlciBzdWJkZXYtPmNvcmUgb3Igc3ViZGV2LT5jb3JlLT5nX2NoaXBfaWRlbnQgaXMKK05VTEwsIG9yIHRoZSBhY3R1YWwgcmVzdWx0IG9mIHRoZSBzdWJkZXYtPm9wcy0+Y29yZS0+Z19jaGlwX2lkZW50IG9wcy4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIGFsbCBvciBhIHN1YnNldCBvZiB0aGUgc3ViLWRldmljZXM6CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbChkZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCitBbnkgc3ViZGV2IHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wcyBpcyBza2lwcGVkIGFuZCBlcnJvciByZXN1bHRzIGFyZQoraWdub3JlZC4gSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIGVycm9ycyB1c2UgdGhpczoKKworCWVyciA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisKK0FueSBlcnJvciBleGNlcHQgLUVOT0lPQ1RMQ01EIHdpbGwgZXhpdCB0aGUgbG9vcCB3aXRoIHRoYXQgZXJyb3IuIElmIG5vCitlcnJvcnMgKGV4Y2VwdCAtRU5PSU9DVExDTUQpIG9jY3VyZWQsIHRoZW4gMCBpcyByZXR1cm5lZC4KKworVGhlIHNlY29uZCBhcmd1bWVudCB0byBib3RoIGNhbGxzIGlzIGEgZ3JvdXAgSUQuIElmIDAsIHRoZW4gYWxsIHN1YmRldnMgYXJlCitjYWxsZWQuIElmIG5vbi16ZXJvLCB0aGVuIG9ubHkgdGhvc2Ugd2hvc2UgZ3JvdXAgSUQgbWF0Y2ggdGhhdCB2YWx1ZSB3aWxsCitiZSBjYWxsZWQuIEJlZm9yZSBhIGJyaWRnZSBkcml2ZXIgcmVnaXN0ZXJzIGEgc3ViZGV2IGl0IGNhbiBzZXQgc3ViZGV2LT5ncnBfaWQKK3RvIHdoYXRldmVyIHZhbHVlIGl0IHdhbnRzIChpdCdzIDAgYnkgZGVmYXVsdCkuIFRoaXMgdmFsdWUgaXMgb3duZWQgYnkgdGhlCiticmlkZ2UgZHJpdmVyIGFuZCB0aGUgc3ViLWRldmljZSBkcml2ZXIgd2lsbCBuZXZlciBtb2RpZnkgb3IgdXNlIGl0LgorCitUaGUgZ3JvdXAgSUQgZ2l2ZXMgdGhlIGJyaWRnZSBkcml2ZXIgbW9yZSBjb250cm9sIGhvdyBjYWxsYmFja3MgYXJlIGNhbGxlZC4KK0ZvciBleGFtcGxlLCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgYXVkaW8gY2hpcHMgb24gYSBib2FyZCwgZWFjaCBjYXBhYmxlIG9mCitjaGFuZ2luZyB0aGUgdm9sdW1lLiBCdXQgdXN1YWxseSBvbmx5IG9uZSB3aWxsIGFjdHVhbGx5IGJlIHVzZWQgd2hlbiB0aGUKK3VzZXIgd2FudCB0byBjaGFuZ2UgdGhlIHZvbHVtZS4gWW91IGNhbiBzZXQgdGhlIGdyb3VwIElEIGZvciB0aGF0IHN1YmRldiB0bworZS5nLiBBVURJT19DT05UUk9MTEVSIGFuZCBzcGVjaWZ5IHRoYXQgYXMgdGhlIGdyb3VwIElEIHZhbHVlIHdoZW4gY2FsbGluZwordjRsMl9kZXZpY2VfY2FsbF9hbGwoKS4gVGhhdCBlbnN1cmVzIHRoYXQgaXQgd2lsbCBvbmx5IGdvIHRvIHRoZSBzdWJkZXYKK3RoYXQgbmVlZHMgaXQuCisKK1RoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgdjRsMl9zdWJkZXYgaXMgdGhhdCBpdCBpcyBhIGdlbmVyaWMgc3RydWN0IGFuZCBkb2VzCitub3QgY29udGFpbiBhbnkga25vd2xlZGdlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBTbyBhIGRyaXZlciBtaWdodAorY29udGFpbiBzZXZlcmFsIHN1YmRldnMgdGhhdCB1c2UgYW4gSTJDIGJ1cywgYnV0IGFsc28gYSBzdWJkZXYgdGhhdCBpcworY29udHJvbGxlZCB0aHJvdWdoIEdQSU8gcGlucy4gVGhpcyBkaXN0aW5jdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gc2V0dGluZwordXAgdGhlIGRldmljZSwgYnV0IG9uY2UgdGhlIHN1YmRldiBpcyByZWdpc3RlcmVkIGl0IGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQuCisKKworSTJDIHN1Yi1kZXZpY2UgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSB0aGVzZSBkcml2ZXJzIGFyZSBzbyBjb21tb24sIHNwZWNpYWwgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHRvCitlYXNlIHRoZSB1c2Ugb2YgdGhlc2UgZHJpdmVycyAodjRsMi1jb21tb24uaCkuCisKK1RoZSByZWNvbW1lbmRlZCBtZXRob2Qgb2YgYWRkaW5nIHY0bDJfc3ViZGV2IHN1cHBvcnQgdG8gYW4gSTJDIGRyaXZlciBpcyB0bworZW1iZWQgdGhlIHY0bDJfc3ViZGV2IHN0cnVjdCBpbnRvIHRoZSBzdGF0ZSBzdHJ1Y3QgdGhhdCBpcyBjcmVhdGVkIGZvciBlYWNoCitJMkMgZGV2aWNlIGluc3RhbmNlLiBWZXJ5IHNpbXBsZSBkZXZpY2VzIGhhdmUgbm8gc3RhdGUgc3RydWN0IGFuZCBpbiB0aGF0IGNhc2UKK3lvdSBjYW4ganVzdCBjcmVhdGUgYSB2NGwyX3N1YmRldiBkaXJlY3RseS4KKworQSB0eXBpY2FsIHN0YXRlIHN0cnVjdCB3b3VsZCBsb29rIGxpa2UgdGhpcyAod2hlcmUgJ2NoaXBuYW1lJyBpcyByZXBsYWNlZCBieQordGhlIG5hbWUgb2YgdGhlIGNoaXApOgorCitzdHJ1Y3QgY2hpcG5hbWVfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwkuLi4gIC8qIGFkZGl0aW9uYWwgc3RhdGUgZmllbGRzICovCit9OworCitJbml0aWFsaXplIHRoZSB2NGwyX3N1YmRldiBzdHJ1Y3QgYXMgZm9sbG93czoKKworCXY0bDJfaTJjX3N1YmRldl9pbml0KCZzdGF0ZS0+c2QsIGNsaWVudCwgc3ViZGV2X29wcyk7CisKK1RoaXMgZnVuY3Rpb24gd2lsbCBmaWxsIGluIGFsbCB0aGUgZmllbGRzIG9mIHY0bDJfc3ViZGV2IGFuZCBlbnN1cmUgdGhhdCB0aGUKK3Y0bDJfc3ViZGV2IGFuZCBpMmNfY2xpZW50IGJvdGggcG9pbnQgdG8gb25lIGFub3RoZXIuCisKK1lvdSBzaG91bGQgYWxzbyBhZGQgYSBoZWxwZXIgaW5saW5lIGZ1bmN0aW9uIHRvIGdvIGZyb20gYSB2NGwyX3N1YmRldiBwb2ludGVyCit0byBhIGNoaXBuYW1lX3N0YXRlIHN0cnVjdDoKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2hpcG5hbWVfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGNoaXBuYW1lX3N0YXRlLCBzZCk7Cit9CisKK1VzZSB0aGlzIHRvIGdvIGZyb20gdGhlIHY0bDJfc3ViZGV2IHN0cnVjdCB0byB0aGUgaTJjX2NsaWVudCBzdHJ1Y3Q6CisKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKK0FuZCB0aGlzIHRvIGdvIGZyb20gYW4gaTJjX2NsaWVudCB0byBhIHY0bDJfc3ViZGV2IHN0cnVjdDoKKworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworRmluYWxseSB5b3UgbmVlZCB0byBtYWtlIGEgY29tbWFuZCBmdW5jdGlvbiB0byBtYWtlIGRyaXZlci0+Y29tbWFuZCgpCitjYWxsIHRoZSByaWdodCBzdWJkZXZfb3BzIGZ1bmN0aW9uczoKKworc3RhdGljIGludCBzdWJkZXZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCitJZiBkcml2ZXItPmNvbW1hbmQgaXMgbmV2ZXIgdXNlZCB0aGVuIHlvdSBjYW4gbGVhdmUgdGhpcyBvdXQuIEV2ZW50dWFsbHkgdGhlCitkcml2ZXItPmNvbW1hbmQgdXNhZ2Ugc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB2NGwuCisKK01ha2Ugc3VyZSB0byBjYWxsIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKSB3aGVuIHRoZSByZW1vdmUoKSBjYWxsYmFjaworaXMgY2FsbGVkLiBUaGlzIHdpbGwgdW5yZWdpc3RlciB0aGUgc3ViLWRldmljZSBmcm9tIHRoZSBicmlkZ2UgZHJpdmVyLiBJdCBpcworc2FmZSB0byBjYWxsIHRoaXMgZXZlbiBpZiB0aGUgc3ViLWRldmljZSB3YXMgbmV2ZXIgcmVnaXN0ZXJlZC4KKworCitUaGUgYnJpZGdlIGRyaXZlciBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgaXQgY2FuIHVzZToKKworc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoYWRhcHRlciwgIm1vZHVsZV9mb28iLCAiY2hpcGlkIiwgMHgzNik7CisKK1RoaXMgbG9hZHMgdGhlIGdpdmVuIG1vZHVsZSAoY2FuIGJlIE5VTEwgaWYgbm8gbW9kdWxlIG5lZWRzIHRvIGJlIGxvYWRlZCkgYW5kCitjYWxscyBpMmNfbmV3X2RldmljZSgpIHdpdGggdGhlIGdpdmVuIGkyY19hZGFwdGVyIGFuZCBjaGlwL2FkZHJlc3MgYXJndW1lbnRzLgorSWYgYWxsIGdvZXMgd2VsbCwgdGhlbiBpdCByZWdpc3RlcnMgdGhlIHN1YmRldiB3aXRoIHRoZSB2NGwyX2RldmljZS4gSXQgZ2V0cwordGhlIHY0bDJfZGV2aWNlIGJ5IGNhbGxpbmcgaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKSwgc28geW91IHNob3VsZCBtYWtlIHN1cmUKK3RoYXQgYWRhcGRhdGEgaXMgc2V0IHRvIHY0bDJfZGV2aWNlIHdoZW4geW91IHNldHVwIHRoZSBpMmNfYWRhcHRlciBpbiB5b3VyCitkcml2ZXIuCisKK1lvdSBjYW4gYWxzbyB1c2UgdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoKSB3aGljaCBpcyB2ZXJ5IHNpbWlsYXIgdG8KK3Y0bDJfaTJjX25ld19zdWJkZXYoKSwgZXhjZXB0IHRoYXQgaXQgaGFzIGFuIGFycmF5IG9mIHBvc3NpYmxlIEkyQyBhZGRyZXNzZXMKK3RoYXQgaXQgc2hvdWxkIHByb2JlLiBJbnRlcm5hbGx5IGl0IGNhbGxzIGkyY19uZXdfcHJvYmVkX2RldmljZSgpLgorCitCb3RoIGZ1bmN0aW9ucyByZXR1cm4gTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KKworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhY3R1YWwgZGV2aWNlIG5vZGVzIGluIHRoZSAvZGV2IGRpcmVjdG9yeSBhcmUgY3JlYXRlZCB1c2luZyB0aGUKK3ZpZGVvX2RldmljZSBzdHJ1Y3QgKHY0bDItZGV2LmgpLiBUaGlzIHN0cnVjdCBjYW4gZWl0aGVyIGJlIGFsbG9jYXRlZAorZHluYW1pY2FsbHkgb3IgZW1iZWRkZWQgaW4gYSBsYXJnZXIgc3RydWN0LgorCitUbyBhbGxvY2F0ZSBpdCBkeW5hbWljYWxseSB1c2U6CisKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKworSWYgeW91IGVtYmVkIGl0IGluIGEgbGFyZ2VyIHN0cnVjdCwgdGhlbiB5b3UgbXVzdCBzZXQgdGhlIHJlbGVhc2UoKQorY2FsbGJhY2sgdG8geW91ciBvd24gZnVuY3Rpb246CisKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gJm15X3ZkZXYtPnZkZXY7CisKKwl2ZGV2LT5yZWxlYXNlID0gbXlfdmRldl9yZWxlYXNlOworCitUaGUgcmVsZWFzZSBjYWxsYmFjayBtdXN0IGJlIHNldCBhbmQgaXQgaXMgY2FsbGVkIHdoZW4gdGhlIGxhc3QgdXNlcgorb2YgdGhlIHZpZGVvIGRldmljZSBleGl0cy4KKworVGhlIGRlZmF1bHQgdmlkZW9fZGV2aWNlX3JlbGVhc2UoKSBjYWxsYmFjayBqdXN0IGNhbGxzIGtmcmVlIHRvIGZyZWUgdGhlCithbGxvY2F0ZWQgbWVtb3J5LgorCitZb3Ugc2hvdWxkIGFsc28gc2V0IHRoZXNlIGZpZWxkczoKKworLSBwYXJlbnQ6IHNldCB0byB0aGUgcGFyZW50IGRldmljZSAoc2FtZSBkZXZpY2UgYXMgd2FzIHVzZWQgdG8gcmVnaXN0ZXIKKyAgdjRsMl9kZXZpY2UpLgorLSBuYW1lOiBzZXQgdG8gc29tZXRoaW5nIGRlc2NyaXB0aXZlIGFuZCB1bmlxdWUuCistIGZvcHM6IHNldCB0byB0aGUgZmlsZV9vcGVyYXRpb25zIHN0cnVjdC4KKy0gaW9jdGxfb3BzOiBpZiB5b3UgdXNlIHRoZSB2NGwyX2lvY3RsX29wcyB0byBzaW1wbGlmeSBpb2N0bCBtYWludGVuYW5jZQorICAoaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGFuZCBpdCBtaWdodCBiZWNvbWUgY29tcHVsc29yeSBpbiB0aGUKKyAgZnV0dXJlISksIHRoZW4gc2V0IHRoaXMgdG8geW91ciB2NGwyX2lvY3RsX29wcyBzdHJ1Y3QuCisKK0lmIHlvdSB1c2UgdjRsMl9pb2N0bF9vcHMsIHRoZW4geW91IHNob3VsZCBzZXQgLnVubG9ja2VkX2lvY3RsIHRvCitfX3ZpZGVvX2lvY3RsMiBvciAuaW9jdGwgdG8gdmlkZW9faW9jdGwyIGluIHlvdXIgZmlsZV9vcGVyYXRpb25zIHN0cnVjdC4KKworCit2aWRlb19kZXZpY2UgcmVnaXN0cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05leHQgeW91IHJlZ2lzdGVyIHRoZSB2aWRlbyBkZXZpY2U6IHRoaXMgd2lsbCBjcmVhdGUgdGhlIGNoYXJhY3RlciBkZXZpY2UKK2ZvciB5b3UuCisKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChlcnIpIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmRldik7IC8vIG9yIGtmcmVlKG15X3ZkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKworV2hpY2ggZGV2aWNlIGlzIHJlZ2lzdGVyZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBhcmd1bWVudC4gVGhlIGZvbGxvd2luZwordHlwZXMgZXhpc3Q6CisKK1ZGTF9UWVBFX0dSQUJCRVI6IHZpZGVvWCBmb3IgdmlkZW8gaW5wdXQvb3V0cHV0IGRldmljZXMKK1ZGTF9UWVBFX1ZCSTogdmJpWCBmb3IgdmVydGljYWwgYmxhbmsgZGF0YSAoaS5lLiBjbG9zZWQgY2FwdGlvbnMsIHRlbGV0ZXh0KQorVkZMX1RZUEVfUkFESU86IHJhZGlvWCBmb3IgcmFkaW8gdHVuZXJzCitWRkxfVFlQRV9WVFg6IHZ0eFggZm9yIHRlbGV0ZXh0IGRldmljZXMgKGRlcHJlY2F0ZWQsIGRvbid0IHVzZSkKKworVGhlIGxhc3QgYXJndW1lbnQgZ2l2ZXMgeW91IGEgY2VydGFpbiBhbW91bnQgb2YgY29udHJvbCBvdmVyIHRoZSBkZXZpY2UKK2tlcm5lbCBudW1iZXIgdXNlZCAoaS5lLiB0aGUgWCBpbiB2aWRlb1gpLiBOb3JtYWxseSB5b3Ugd2lsbCBwYXNzIC0xIHRvCitsZXQgdGhlIHY0bDIgZnJhbWV3b3JrIHBpY2sgdGhlIGZpcnN0IGZyZWUgbnVtYmVyLiBCdXQgaWYgYSBkcml2ZXIgY3JlYXRlcworbWFueSBkZXZpY2VzLCB0aGVuIGl0IGNhbiBiZSB1c2VmdWwgdG8gaGF2ZSBkaWZmZXJlbnQgdmlkZW8gZGV2aWNlcyBpbgorc2VwYXJhdGUgcmFuZ2VzLiBGb3IgZXhhbXBsZSwgdmlkZW8gY2FwdHVyZSBkZXZpY2VzIHN0YXJ0IGF0IDAsIHZpZGVvCitvdXRwdXQgZGV2aWNlcyBzdGFydCBhdCAxNi4KKworU28geW91IGNhbiB1c2UgdGhlIGxhc3QgYXJndW1lbnQgdG8gc3BlY2lmeSBhIG1pbmltdW0ga2VybmVsIG51bWJlciBhbmQKK3RoZSB2NGwyIGZyYW1ld29yayB3aWxsIHRyeSB0byBwaWNrIHRoZSBmaXJzdCBmcmVlIG51bWJlciB0aGF0IGlzIGVxdWFsCitvciBoaWdoZXIgdG8gd2hhdCB5b3UgcGFzc2VkLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGl0IHdpbGwganVzdCBwaWNrIHRoZQorZmlyc3QgZnJlZSBudW1iZXIuCisKK1doZW5ldmVyIGEgZGV2aWNlIG5vZGUgaXMgY3JlYXRlZCBzb21lIGF0dHJpYnV0ZXMgYXJlIGFsc28gY3JlYXRlZCBmb3IgeW91LgorSWYgeW91IGxvb2sgaW4gL3N5cy9jbGFzcy92aWRlbzRsaW51eCB5b3Ugc2VlIHRoZSBkZXZpY2VzLiBHbyBpbnRvIGUuZy4KK3ZpZGVvMCBhbmQgeW91IHdpbGwgc2VlICduYW1lJyBhbmQgJ2luZGV4JyBhdHRyaWJ1dGVzLiBUaGUgJ25hbWUnIGF0dHJpYnV0ZQoraXMgdGhlICduYW1lJyBmaWVsZCBvZiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdC4gVGhlICdpbmRleCcgYXR0cmlidXRlIGlzCithIGRldmljZSBub2RlIGluZGV4IHRoYXQgY2FuIGJlIGFzc2lnbmVkIGJ5IHRoZSBkcml2ZXIsIG9yIHRoYXQgaXMgY2FsY3VsYXRlZAorZm9yIHlvdS4KKworSWYgeW91IGNhbGwgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCksIHRoZW4gdGhlIGluZGV4IGlzIGp1c3QgaW5jcmVhc2VkIGJ5CisxIGZvciBlYWNoIGRldmljZSBub2RlIHlvdSByZWdpc3Rlci4gVGhlIGZpcnN0IHZpZGVvIGRldmljZSBub2RlIHlvdSByZWdpc3RlcgorYWx3YXlzIHN0YXJ0cyBvZmYgd2l0aCAwLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gY2FsbCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoKSB3aGljaCBpcyBpZGVudGljYWwKK3RvIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpLCBidXQgd2l0aCBhbiBleHRyYSBpbmRleCBhcmd1bWVudC4gSGVyZSB5b3UgY2FuCitwYXNzIGEgc3BlY2lmaWMgaW5kZXggdmFsdWUgKGJldHdlZW4gMCBhbmQgMzEpIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisKK1VzZXJzIGNhbiBzZXR1cCB1ZGV2IHJ1bGVzIHRoYXQgdXRpbGl6ZSB0aGUgaW5kZXggYXR0cmlidXRlIHRvIG1ha2UgZmFuY3kKK2RldmljZSBuYW1lcyAoZS5nLiAnbXBlZ1gnIGZvciBNUEVHIHZpZGVvIGNhcHR1cmUgZGV2aWNlIG5vZGVzKS4KKworQWZ0ZXIgdGhlIGRldmljZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIHRoZW4geW91IGNhbiB1c2UgdGhlc2UgZmllbGRzOgorCistIHZmbF90eXBlOiB0aGUgZGV2aWNlIHR5cGUgcGFzc2VkIHRvIHZpZGVvX3JlZ2lzdGVyX2RldmljZS4KKy0gbWlub3I6IHRoZSBhc3NpZ25lZCBkZXZpY2UgbWlub3IgbnVtYmVyLgorLSBudW06IHRoZSBkZXZpY2Uga2VybmVsIG51bWJlciAoaS5lLiB0aGUgWCBpbiB2aWRlb1gpLgorLSBpbmRleDogdGhlIGRldmljZSBpbmRleCBudW1iZXIgKGNhbGN1bGF0ZWQgb3Igc2V0IGV4cGxpY2l0bHkgdXNpbmcKKyAgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KS4KKworSWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHRoZW4geW91IG5lZWQgdG8gY2FsbCB2aWRlb19kZXZpY2VfcmVsZWFzZSgpCit0byBmcmVlIHRoZSBhbGxvY2F0ZWQgdmlkZW9fZGV2aWNlIHN0cnVjdCwgb3IgZnJlZSB5b3VyIG93biBzdHJ1Y3QgaWYgdGhlCit2aWRlb19kZXZpY2Ugd2FzIGVtYmVkZGVkIGluIGl0LiBUaGUgdmRldi0+cmVsZWFzZSgpIGNhbGxiYWNrIHdpbGwgbmV2ZXIKK2JlIGNhbGxlZCBpZiB0aGUgcmVnaXN0cmF0aW9uIGZhaWxlZCwgbm9yIHNob3VsZCB5b3UgZXZlciBhdHRlbXB0IHRvCit1bnJlZ2lzdGVyIHRoZSBkZXZpY2UgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuCisKKwordmlkZW9fZGV2aWNlIGNsZWFudXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIHZpZGVvIGRldmljZSBub2RlcyBoYXZlIHRvIGJlIHJlbW92ZWQsIGVpdGhlciBkdXJpbmcgdGhlIHVubG9hZAorb2YgdGhlIGRyaXZlciBvciBiZWNhdXNlIHRoZSBVU0IgZGV2aWNlIHdhcyBkaXNjb25uZWN0ZWQsIHRoZW4geW91IHNob3VsZAordW5yZWdpc3RlciB0aGVtOgorCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmRldik7CisKK1RoaXMgd2lsbCByZW1vdmUgdGhlIGRldmljZSBub2RlcyBmcm9tIHN5c2ZzIChjYXVzaW5nIHVkZXYgdG8gcmVtb3ZlIHRoZW0KK2Zyb20gL2RldikuCisKK0FmdGVyIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCkgcmV0dXJucyBubyBuZXcgb3BlbnMgY2FuIGJlIGRvbmUuCisKK0hvd2V2ZXIsIGluIHRoZSBjYXNlIG9mIFVTQiBkZXZpY2VzIHNvbWUgYXBwbGljYXRpb24gbWlnaHQgc3RpbGwgaGF2ZSBvbmUKK29mIHRoZXNlIGRldmljZSBub2RlcyBvcGVuLiBZb3Ugc2hvdWxkIGJsb2NrIGFsbCBuZXcgYWNjZXNzZXMgdG8gcmVhZCwKK3dyaXRlLCBwb2xsLCBldGMuIGV4Y2VwdCBwb3NzaWJseSBmb3IgY2VydGFpbiBpb2N0bCBvcGVyYXRpb25zIGxpa2UKK3F1ZXVlaW5nIGJ1ZmZlcnMuCisKK1doZW4gdGhlIGxhc3QgdXNlciBvZiB0aGUgdmlkZW8gZGV2aWNlIG5vZGUgZXhpdHMsIHRoZW4gdGhlIHZkZXYtPnJlbGVhc2UoKQorY2FsbGJhY2sgaXMgY2FsbGVkIGFuZCB5b3UgY2FuIGRvIHRoZSBmaW5hbCBjbGVhbnVwIHRoZXJlLgorCisKK3ZpZGVvX2RldmljZSBoZWxwZXIgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBmZXcgdXNlZnVsIGhlbHBlciBmdW5jdGlvbnM6CisKK1lvdSBjYW4gc2V0L2dldCBkcml2ZXIgcHJpdmF0ZSBkYXRhIGluIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0IHVzaW5nOgorCit2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpOwordm9pZCB2aWRlb19zZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpOworCitOb3RlIHRoYXQgeW91IGNhbiBzYWZlbHkgY2FsbCB2aWRlb19zZXRfZHJ2ZGF0YSgpIGJlZm9yZSBjYWxsaW5nCit2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKS4KKworQW5kIHRoaXMgZnVuY3Rpb246CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpOworCityZXR1cm5zIHRoZSB2aWRlb19kZXZpY2UgYmVsb25naW5nIHRvIHRoZSBmaWxlIHN0cnVjdC4KKworVGhlIGZpbmFsIGhlbHBlciBmdW5jdGlvbiBjb21iaW5lcyB2aWRlb19nZXRfZHJ2ZGF0YSB3aXRoCit2aWRlb19kZXZkYXRhOgorCit2b2lkICp2aWRlb19kcnZkYXRhKHN0cnVjdCBmaWxlICpmaWxlKTsKKworWW91IGNhbiBnbyBmcm9tIGEgdmlkZW9fZGV2aWNlIHN0cnVjdCB0byB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0IHVzaW5nOgorCitzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKHZkZXYtPnBhcmVudCk7CisKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMDhkMGFiNy4uY2ViMzJlZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE3NTUsNiArMTc1NSwxMyBAQAogTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitGUkVFU0NBTEUgSU1YIC8gTVhDIEZSQU1FQlVGRkVSIERSSVZFUgorUDoJU2FzY2hhIEhhdWVyCitNOglrZXJuZWxAcGVuZ3V0cm9uaXguZGUKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKIEZSRUVTQ0FMRSBTT0MgRlNfRU5FVCBEUklWRVIKIFA6CVBhbnRlbGlzIEFudG9uaW91CiBNOglwYW50ZWxpcy5hbnRvbmlvdUBnbWFpbC5jb20KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMDlmZjdkOC4uZDEzYTk2OSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTIwNSwxMyArMjA1LDE0IEBACiAgICAgICAgIFNSQ0FSQ0ggOj0geDg2CiBlbmRpZgogCi0jIFdoZXJlIHRvIGxvY2F0ZSBhcmNoIHNwZWNpZmljIGhlYWRlcnMKKyMgQWRkaXRpb25hbCBBUkNIIHNldHRpbmdzIGZvciBzcGFyYwogaWZlcSAoJChBUkNIKSxzcGFyYzY0KQotICAgICAgIGhkci1hcmNoICA6PSBzcGFyYwotZWxzZQotICAgICAgIGhkci1hcmNoICA6PSAkKFNSQ0FSQ0gpCisgICAgICAgU1JDQVJDSCA6PSBzcGFyYwogZW5kaWYKIAorIyBXaGVyZSB0byBsb2NhdGUgYXJjaCBzcGVjaWZpYyBoZWFkZXJzCitoZHItYXJjaCAgOj0gJChTUkNBUkNIKQorCiBLQ09ORklHX0NPTkZJRwk/PSAuY29uZmlnCiAKICMgU0hFTEwgdXNlZCBieSBrYnVpbGQKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCA0NzFlNzJkLi4yZTEzYWEyIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC02LDYgKzYsOCBAQAogCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gUFJPRklMSU5HCiAJZGVwZW5kcyBvbiBIQVZFX09QUk9GSUxFCisJc2VsZWN0IFRSQUNJTkcKKwlzZWxlY3QgUklOR19CVUZGRVIKIAloZWxwCiAJICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCiAJICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW8uaAppbmRleCBlOTcxYWIwLi5lZGE5YjkwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9pby5oCkBAIC05Niw5ICs5Niw2IEBACiAJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKTsKIH0KIAotLyogVGhpcyBkZXBlbmRzIG9uIHdvcmtpbmcgaW9tbXUuICAqLwotI2RlZmluZSBCSU9fVk1FUkdFX0JPVU5EQVJZCShhbHBoYV9tdi5tdl9wY2lfdGJpID8gUEFHRV9TSVpFIDogMCkKLQogLyogTWF4aW11bSBQSU8gc3BhY2UgYWRkcmVzcyBzdXBwb3J0ZWQ/ICAqLwogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggOTcyMmY4Yi4uZDZlYmUzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xNTYsNyArMTU2LDYgQEAKIAlib29sCiAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlib29sCiAJZGVmX2Jvb2wgeQogCiBpZiBPUFJPRklMRQpAQCAtMjAxLDYgKzIwMCw3IEBACiAKIGNvbmZpZyBBUkNIX0FBRUMyMDAwCiAJYm9vbCAiQWdpbGVudCBBQUVDLTIwMDAgYmFzZWQiCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEhBVkVfQ0xLCiAJaGVscApAQCAtMjEwLDYgKzIxMCw3IEBACiAJYm9vbCAiQVJNIEx0ZC4gSW50ZWdyYXRvciBmYW1pbHkiCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgSUNTVDUyNQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEFSTSdzIEludGVncmF0b3IgcGxhdGZvcm0uCkBAIC0yMTgsNiArMjE5LDcgQEAKIAlib29sICJBUk0gTHRkLiBSZWFsVmlldyBmYW1pbHkiCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgSUNTVDMwNwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtMjI5LDYgKzIzMSw3IEBACiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBJQ1NUMzA3CiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCkBAIC0yNDMsMjIgKzI0NiwxNSBAQAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEF0bWVsIEFUOTFSTTkyMDAsCiAJICBBVDkxU0FNOSBhbmQgQVQ5MUNBUDkgcHJvY2Vzc29ycy4KIAotY29uZmlnIEFSQ0hfQ0xQUzc1MDAKLQlib29sICJDaXJydXMgQ0wtUFM3NTAwRkUiCi0Jc2VsZWN0IFRJTUVSX0FDT1JOCi0Jc2VsZWN0IElTQQotCXNlbGVjdCBOT19JT1BPUlQKLQlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIENpcnJ1cyBMb2dpYyBQUzc1MDBGRSBzeXN0ZW0tb24tYS1jaGlwLgotCiBjb25maWcgQVJDSF9DTFBTNzExWAogCWJvb2wgIkNpcnJ1cyBMb2dpYyBDTFBTNzExeC9FUDcyMXgtYmFzZWQiCisJc2VsZWN0IENQVV9BUk03MjBUCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgQ2lycnVzIExvZ2ljIDcxMXgvNzIxeCBiYXNlZCBib2FyZHMuCiAKIGNvbmZpZyBBUkNIX0VCU0ExMTAKIAlib29sICJFQlNBLTExMCIKKwlzZWxlY3QgQ1BVX1NBMTEwCiAJc2VsZWN0IElTQQogCXNlbGVjdCBOT19JT1BPUlQKIAloZWxwCkBAIC0yNjksMTYgKzI2NSwxOSBAQAogCiBjb25maWcgQVJDSF9FUDkzWFgKIAlib29sICJFUDkzeHgtYmFzZWQiCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIENpcnJ1cyBFUDkzeHggc2VyaWVzIG9mIENQVXMuCiAKIGNvbmZpZyBBUkNIX0ZPT1RCUklER0UKIAlib29sICJGb290QnJpZGdlIgorCXNlbGVjdCBDUFVfU0ExMTAKIAlzZWxlY3QgRk9PVEJSSURHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIERDMjEyODUgY29tcGFuaW9uIGNoaXAKQEAgLTI4NiwxOCArMjg1LDIzIEBACiAKIGNvbmZpZyBBUkNIX05FVFgKIAlib29sICJIaWxzY2hlciBOZXRYIGJhc2VkIgorCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBBUk1fVklDCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgR0VORVJJQ19USU1FCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEhpbHNjaGVyIE5ldFggU29jCiAKIGNvbmZpZyBBUkNIX0g3MjBYCiAJYm9vbCAiSHluaXggSE1TNzIweC1iYXNlZCIKKwlzZWxlY3QgQ1BVX0FSTTcyMFQKIAlzZWxlY3QgSVNBX0RNQV9BUEkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgSHluaXggSE1TNzIweAogCiBjb25maWcgQVJDSF9JTVgKIAlib29sICJJTVgiCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtMzA3LDYgKzMxMSw3IEBACiBjb25maWcgQVJDSF9JT1AxM1hYCiAJYm9vbCAiSU9QMTN4eC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQorCXNlbGVjdCBDUFVfWFNDMwogCXNlbGVjdCBQTEFUX0lPUAogCXNlbGVjdCBQQ0kKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kKQEAgLTMxNyw2ICszMjIsNyBAQAogY29uZmlnIEFSQ0hfSU9QMzJYCiAJYm9vbCAiSU9QMzJ4LWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IENQVV9YU0NBTEUKIAlzZWxlY3QgUExBVF9JT1AKIAlzZWxlY3QgUENJCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwpAQCAtMzI4LDYgKzMzNCw3IEBACiBjb25maWcgQVJDSF9JT1AzM1gKIAlib29sICJJT1AzM3gtYmFzZWQiCiAJZGVwZW5kcyBvbiBNTVUKKwlzZWxlY3QgQ1BVX1hTQ0FMRQogCXNlbGVjdCBQTEFUX0lPUAogCXNlbGVjdCBQQ0kKIAlzZWxlY3QgR0VORVJJQ19HUElPCkBAIC0zMzgsNiArMzQ1LDcgQEAKIGNvbmZpZyBBUkNIX0lYUDIzWFgKICAJYm9vbCAiSVhQMjNYWC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQorCXNlbGVjdCBDUFVfWFNDMwogIAlzZWxlY3QgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSW50ZWwncyBJWFAyM3h4IChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgpAQCAtMzQ1LDYgKzM1Myw3IEBACiBjb25maWcgQVJDSF9JWFAyMDAwCiAJYm9vbCAiSVhQMjQwMC8yODAwLWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IENQVV9YU0NBTEUKIAlzZWxlY3QgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSW50ZWwncyBJWFAyNDAwLzI4MDAgKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCkBAIC0zNTIsNiArMzYxLDcgQEAKIGNvbmZpZyBBUkNIX0lYUDRYWAogCWJvb2wgIklYUDR4eC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQorCXNlbGVjdCBDUFVfWFNDQUxFCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtMzYxLDYgKzM3MSw3IEBACiAKIGNvbmZpZyBBUkNIX0w3MjAwCiAJYm9vbCAiTGlua1VwLUw3MjAwIgorCXNlbGVjdCBDUFVfQVJNNzIwVAogCXNlbGVjdCBGSVEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgTGlua1VwIFN5c3RlbXMKQEAgLTM3NCw3ICszODUsOSBAQAogCiBjb25maWcgQVJDSF9LSVJLV09PRAogCWJvb2wgIk1hcnZlbGwgS2lya3dvb2QiCisJc2VsZWN0IENQVV9GRVJPQ0VPTgogCXNlbGVjdCBQQ0kKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFBMQVRfT1JJT04KQEAgLTM4NCwxMyArMzk3LDE2IEBACiAKIGNvbmZpZyBBUkNIX0tTODY5NQogCWJvb2wgIk1pY3JlbC9LZW5kaW4gS1M4Njk1IgorCXNlbGVjdCBDUFVfQVJNOTIyVAogCXNlbGVjdCBHRU5FUklDX0dQSU8KKyAgICAgICAgc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgTWljcmVsL0tlbmRpbiBLUzg2OTUgIkNlbnRhdXIiIChBUk05MjJUKSBiYXNlZAogCSAgU3lzdGVtLW9uLUNoaXAgZGV2aWNlcy4KIAogY29uZmlnIEFSQ0hfTlM5WFhYCiAJYm9vbCAiTmV0U2lsaWNvbiBOUzl4eHgiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtNDAzLDYgKzQxOSw3IEBACiAKIGNvbmZpZyBBUkNIX0xPS0kKIAlib29sICJNYXJ2ZWxsIExva2kgKDg4UkM4NDgwKSIKKwlzZWxlY3QgQ1BVX0ZFUk9DRU9OCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFBMQVRfT1JJT04KQEAgLTQxMSw3ICs0MjgsOSBAQAogCiBjb25maWcgQVJDSF9NVjc4WFgwCiAJYm9vbCAiTWFydmVsbCBNVjc4eHgwIgorCXNlbGVjdCBDUFVfRkVST0NFT04KIAlzZWxlY3QgUENJCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBQTEFUX09SSU9OCkBAIC00MzIsNiArNDUxLDcgQEAKIGNvbmZpZyBBUkNIX09SSU9ONVgKIAlib29sICJNYXJ2ZWxsIE9yaW9uIgogCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IENQVV9GRVJPQ0VPTgogCXNlbGVjdCBQQ0kKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdFTkVSSUNfVElNRQpAQCAtNDQ0LDYgKzQ2NCw3IEBACiAKIGNvbmZpZyBBUkNIX1BOWDQwMDgKIAlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgorCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBIQVZFX0NMSwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQaGlsaXBzIFBOWDQwMDggbW9iaWxlIHBsYXRmb3JtLgpAQCAtNDU0LDYgKzQ3NSw3IEBACiAJc2VsZWN0IEFSQ0hfTVREX1hJUAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwpAQCAtNDc3LDYgKzQ5OSw3IEBACiAKIGNvbmZpZyBBUkNIX1NBMTEwMAogCWJvb2wgIlNBMTEwMC1iYXNlZCIKKwlzZWxlY3QgQ1BVX1NBMTEwMAogCXNlbGVjdCBJU0EKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IEFSQ0hfTVREX1hJUApAQCAtNDk4LDggKzUyMSwxNiBAQAogCSAgQkFTVCAoPGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL0VCMTEwSVRYLz4pLCB0aGUgSVBBUSAxOTQwIG9yCiAJICB0aGUgU2Ftc3VuZyBTTURLMjQxMCBkZXZlbG9wbWVudCBib2FyZCAoYW5kIGRlcml2YXRpdmVzKS4KIAorY29uZmlnIEFSQ0hfUzNDNjRYWAorCWJvb2wgIlNhbXN1bmcgUzNDNjRYWCIKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEhBVkVfQ0xLCisJaGVscAorCSAgU2Ftc3VuZyBTM0M2NFhYIHNlcmllcyBiYXNlZCBzeXN0ZW1zCisKIGNvbmZpZyBBUkNIX1NIQVJLCiAJYm9vbCAiU2hhcmsiCisJc2VsZWN0IENQVV9TQTExMAogCXNlbGVjdCBJU0EKIAlzZWxlY3QgSVNBX0RNQQogCXNlbGVjdCBaT05FX0RNQQpAQCAtNTEwLDYgKzU0MSw3IEBACiAKIGNvbmZpZyBBUkNIX0xIN0E0MFgKIAlib29sICJTaGFycCBMSDdBNDBYIgorCXNlbGVjdCBDUFVfQVJNOTIyVAogCXNlbGVjdCBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaWYgIUxIN0E0MFhfQ09OVElHTUVNCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpZiAhTEg3QTQwWF9DT05USUdNRU0KIAloZWxwCkBAIC01MjAsNiArNTUyLDcgQEAKIAogY29uZmlnIEFSQ0hfREFWSU5DSQogCWJvb2wgIlRJIERhVmluY2kiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwpAQCAtNTQxLDYgKzU3NCw3IEBACiAKIGNvbmZpZyBBUkNIX01TTQogCWJvb2wgIlF1YWxjb21tIE1TTSIKKwlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscApAQCAtNTQ5LDYgKzU4MywxMyBAQAogCSAgaW50ZXJmYWNlIHRvIHRoZSBBUk05IG1vZGVtIHByb2Nlc3NvciB3aGljaCBydW5zIHRoZSBiYXNlYmFuZCBzdGFjawogCSAgYW5kIGNvbnRyb2xzIHNvbWUgdml0YWwgc3Vic3lzdGVtcyAoY2xvY2sgYW5kIHBvd2VyIGNvbnRyb2wsIGV0YykuCiAKK2NvbmZpZyBBUkNIX1c5MFg5MDAKKwlib29sICJOdXZvdG9uIFc5MFg5MDAgQ1BVIgorCXNlbGVjdCBDUFVfQVJNOTI2VAorCWhlbHAKKwkJU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgQVJNOSBwcm9jZXNzb3IsWW91CisJCWNhbiBsb2dpbiB3d3cubWN1b3MuY29tIG9yIHd3dy5udXZvdG9uLmNvbSB0byBrbm93IG1vcmUuCisKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtY2xwczcxMXgvS2NvbmZpZyIKQEAgLTU5MCw2ICs2MzEsNyBAQAogc291cmNlICJhcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIgogCiBpZiBBUkNIX1MzQzI0MTAKQEAgLTYwMSw2ICs2NDMsMTEgQEAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWciCiBlbmRpZgogCitpZiBBUkNIX1MzQzY0WFgKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnIgorZW5kaWYKKwogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWlteC9LY29uZmlnIgpAQCAtNjI3LDYgKzY3NCw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZyIKKwogIyBEZWZpbml0aW9ucyB0byBtYWtlIGxpZmUgZWFzaWVyCiBjb25maWcgQVJDSF9BQ09STgogCWJvb2wKQEAgLTc4MSw3ICs4MzAsNyBAQAogCiBjb25maWcgTE9DQUxfVElNRVJTCiAJYm9vbCAiVXNlIGxvY2FsIHRpbWVyIGludGVycnVwdHMiCi0JZGVwZW5kcyBvbiBTTVAgJiYgKFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVApCisJZGVwZW5kcyBvbiBTTVAgJiYgKFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgUkVBTFZJRVdfRUJfQTlNUCkKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgbG9jYWwgdGltZXJzIG9uIFNNUCBwbGF0Zm9ybXMsIHJhdGhlciB0aGVuIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBiZDZlMjgxLi4yNGUwZjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQAogdHVuZS0kKENPTkZJR19DUFVfU0ExMTAwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAwCiB0dW5lLSQoQ09ORklHX0NQVV9YU0NBTEUpCTo9JChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9eHNjYWxlLC1tdHVuZT1zdHJvbmdhcm0xMTApIC1XYSwtbWNwdT14c2NhbGUKIHR1bmUtJChDT05GSUdfQ1BVX1hTQzMpCQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXhzY2FsZSwtbXR1bmU9c3Ryb25nYXJtMTEwKSAtV2EsLW1jcHU9eHNjYWxlCit0dW5lLSQoQ09ORklHX0NQVV9GRVJPQ0VPTikJOj0kKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1tYXJ2ZWxsLWYsLW10dW5lPXhzY2FsZSkKIHR1bmUtJChDT05GSUdfQ1BVX1Y2KQkJOj0kKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1hcm0xMTM2ai1zLC1tdHVuZT1zdHJvbmdhcm0pCiAKIGlmZXEgKCQoQ09ORklHX0FFQUJJKSx5KQpAQCAtOTYsNyArOTcsNiBAQAogCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1JQQykJICAgOj0gcnBjCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0VCU0ExMTApCSAgIDo9IGVic2ExMTAKLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzc1MDApICAgOj0gY2xwczc1MDAKICBtYWNoaW5lLSQoQ09ORklHX0ZPT1RCUklER0UpCSAgIDo9IGZvb3RicmlkZ2UKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hBUkspCSAgIDo9IHNoYXJrCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1NBMTEwMCkJICAgOj0gc2ExMTAwCkBAIC0xMjEsNyArMTIxLDEwIEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAzKQkgICA6PSBvbWFwMgogICAgIHBsYXQtJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAgczNjMjQwMCBzM2MyNDEyIHMzYzI0NDAgczNjMjQ0MiBzM2MyNDQzCisgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0QTApCSAgIDo9IHMzYzI0YTAKICAgICBwbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJICAgOj0gczNjMjR4eCBzM2MKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDNjRYWCkJICAgOj0gczNjNjQwMCBzM2M2NDEwCisgICAgcGxhdC0kKENPTkZJR19QTEFUX1MzQzY0WFgpCSAgIDo9IHMzYzY0eHggczNjCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0xIN0E0MFgpCSAgIDo9IGxoN2E0MHgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKSAgOj0gdmVyc2F0aWxlCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lNWCkJICAgOj0gaW14CkBAIC0xMzksMTEgKzE0MiwxMyBAQAogICAgIHBsYXQtJChDT05GSUdfQVJDSF9NWEMpCSAgIDo9IG14YwogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDIpCSAgIDo9IG14MgogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDMpCSAgIDo9IG14MworIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDEpCSAgIDo9IG14MQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9PUklPTjVYKQkgICA6PSBvcmlvbjV4CiAgICAgcGxhdC0kKENPTkZJR19QTEFUX09SSU9OKQkgICA6PSBvcmlvbgogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NU00pCSAgIDo9IG1zbQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MT0tJKSAgICAgICA6PSBsb2tpCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX01WNzhYWDApICAgIDo9IG12Nzh4eDAKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkgICAgOj0gdzkweDkwMAogCiBpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCiAjIFRoaXMgaXMgd2hhdCBoYXBwZW5zIGlmIHlvdSBmb3JnZXQgdGhlIElPQ1MxNiBsaW5lLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGM0N2YyYTMuLmZiZTVlZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTIzLDEwICsyMyw2IEBACiBPQkpTCQkrPSBoZWFkLWw3MjAwLm8KIGVuZGlmCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfQ0xQUzc1MDApLHkpCi1IRUFECQk9IGhlYWQtY2xwczc1MDAubwotZW5kaWYKLQogaWZlcSAoJChDT05GSUdfQVJDSF9QNzIwVCkseSkKICMgQm9ycm93IHRoaXMgY29kZSBmcm9tIFNBMTEwMAogT0JKUwkJKz0gaGVhZC1zYTExMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtY2xwczc1MDAuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWNscHM3NTAwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmM2M3OGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtY2xwczc1MDAuUworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1jbHBzNzUwMC5TCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxIE5leHVzIEVsZWN0cm9uaWNzIEx0ZAotICovCi0KLQotCQkvKiBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHdheXMgdGhlIGtlcm5lbCBjYW4gYmUKLQkJICAgYm9vdGVkIG9uIGEgNzUwMCBzeXN0ZW06IGZyb20gQW5nZWwgKGxvYWRlZCBpbiBSQU0pLCBmcm9tCi0JCSAgIDE2LWJpdCBST00gb3IgZnJvbSAzMi1iaXQgRmxhc2guICBMdWNraWx5LCBhIHNpbmdsZSBrZXJuZWwKLQkJICAgaW1hZ2UgZG9lcyBmb3IgdGhlbSBhbGwuICovCi0JCS8qIFRoaXMgYnJhbmNoIGlzIHRha2VuIGlmIHRoZSBDUFUgbWVtb3J5IHdpZHRoIG1hdGNoZXMgdGhlCi0JCSAgIGFjdHVhbCBkZXZpY2UgaW4gdXNlLiAgVGhlIGRlZmF1bHQgYXQgcG93ZXIgb24gaXMgMTYgYml0cwotCQkgICBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIGZvciBhIG1pc21hdGNoLiAqLwotCQkuc2VjdGlvbiAiLnN0YXJ0IiwgImF4IgotMjoKLQkJYgkxZgotCQkud29yZAkweGZmZmYKLQkJLndvcmQJMHhiNjMyCQlAIG1vdiByMTEsICMweDAzMjAwMDAwCi0JCS53b3JkCTB4ZTNhMAotCQkud29yZAkweDAwMDAJCUAgbW92IHIwLCAjMAotCQkud29yZAkweGUzYTAKLQkJLndvcmQJMHgwMDgwCQlAIHN0cmIgcjAsIFtyMTEsICMweDgwXQotCQkud29yZAkweGU1Y2IKLQkJLndvcmQJMHhmMDAwCQlAIG1vdiBwYywgIzAKLQkJLndvcmQJMHhlM2EwCi0xOgotCQlhZHIJcjEsIDJiCi0JCXRlcQlyMSwgIzAKLQkJYm5lCS5MYW5nZWwKLQkJLyogVGhpcyBpcyBhIGRpcmVjdC1mcm9tLVJPTSBib290LiAgQ29weSB0aGUga2VybmVsIGludG8gCi0JCSAgIFJBTSBhbmQgcnVuIGl0IHRoZXJlLiAqLwotCQltb3YJcjAsICMweDMwCi0JCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKLQkJbW92CXIwLCAjMHgxMwotCQltc3IJY3Bzcl9jeHNmLCByMAotCQltb3YJcjEyLCAjMHgwMzAwMDAwMAlAIHBvaW50IHRvIExFRHMKLQkJb3JyCXIxMiwgcjEyLCAjMHgwMDAyMDAwMAotCQlvcnIJcjEyLCByMTIsICMweGJhMDAKLQkJbW92CXIwLCAjMHg1NTAwCi0JCXN0cglyMCwgW3IxMl0KLQkJbW92CXIwLCAjMHgxMDAwMDAwMAotCQlvcnIJcjAsIHIwLCAjMHg4MDAwCi0JCW1vdglyNCwgcjAKLQkJbGRyCXIyLCA9X2VuZAotMjoKLQkJbGRyCXIzLCBbcjFdLCAjNAotCQlzdHIJcjMsIFtyMF0sICM0Ci0JCXRlcQlyMCwgcjIKLQkJYm5lCTJiCi0JCW1vdglyMCwgIzB4ZmYwMAotCQlzdHIJcjAsIFtyMTJdCi0xOgkKLQkJbW92CXIxMiwgIzB4MDMwMDAwMDAJQCBwb2ludCB0byBMRURzCi0JCW9ycglyMTIsIHIxMiwgIzB4MDAwMjAwMDAKLQkJb3JyCXIxMiwgcjEyLCAjMHhiYTAwCi0JCW1vdglyMCwgIzB4ZmUwMAotCQlzdHIJcjAsIFtyMTJdCi0KLQkJYWRyCWxyLCAxZgotCQltb3YJcjAsICMwCi0JCW1vdglyMSwgIzE0CQkvKiBNQUNIX1RZUEVfQ0xQUzc1MDAgKi8KLQkJbW92CXBjLCBscgotLkxhbmdlbDoKLSNpZmRlZiBDT05GSUdfQU5HRUxCT09UCi0JCS8qIENhbGwgQW5nZWwgdG8gc3dpdGNoIGludG8gU1ZDIG1vZGUuICovCi0JCW1vdglyMCwgIzB4MTcKLQkJc3dpCTB4MTIzNDU2Ci0jZW5kaWYKLQkJLyogRW5zdXJlIGFsbCBpbnRlcnJ1cHRzIGFyZSBvZmYgYW5kIE1NVSBkaXNhYmxlZCAqLwotCQltcnMJcjAsIGNwc3IKLQkJb3JyCXIwLCByMCwgIzB4YzAKLQkJbXNyCWNwc3JfY3hzZiwgcjAKLQotCQlhZHIJbHIsIDFiCi0JCW9ycglsciwgbHIsICMweDEwMDAwMDAwCi0JCW1vdglyMCwgIzB4MzAJCUAgTU1VIG9mZgotCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCi0JCW1vdglyMCwgcjAKLQkgCW1vdglwYywgbHIKLQotCQkubHRvcmcKLQotMToKLS8qIEFuZCB0aGUgcmVzdCAqLwotI2luY2x1ZGUgImhlYWQuUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDg0YTFlMDQuLjc3ZDYxNDIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTYyNCw2ICs2MjQsMTIgQEAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCisJCS53b3JkCTB4NTYwNTY5MzAKKwkJLndvcmQJMHhmZjBmZmZmMAkJQCBQWEE5MzUKKwkJYglfX2FybXY0X21tdV9jYWNoZV9vbgorCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQliCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCisKIAkJLndvcmQJMHg1NjA1MDAwMAkJQCBGZXJvY2VvbgogCQkud29yZAkweGZmMGYwMDAwCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb24KQEAgLTcxNyw2ICs3MjMsOSBAQAogCQlibAlfX2FybXY3X21tdV9jYWNoZV9mbHVzaAogCQltb3YJcjAsICMwCiAJCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJQCBpbnZhbGlkYXRlIHdob2xlIFRMQgorCQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CUAgaW52YWxpZGF0ZSBCVEMKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBEU0IKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAlAIElTQgogCQltb3YJcGMsIHIxMgogCiBfX2FybTZfbW11X2NhY2hlX29mZjoKQEAgLTc3OCwxMiArNzg3LDEzIEBACiBfX2FybXY3X21tdV9jYWNoZV9mbHVzaDoKIAkJbXJjCXAxNSwgMCwgcjEwLCBjMCwgYzEsIDUJQCByZWFkIElEX01NRlIxCiAJCXRzdAlyMTAsICMweGYgPDwgMTYJCUAgaGllcmFyY2hpY2FsIGNhY2hlIChBUk12NykKLQkJYmVxCWhpZXJhcmNoaWNhbAogCQltb3YJcjEwLCAjMAorCQliZXEJaGllcmFyY2hpY2FsCiAJCW1jcglwMTUsIDAsIHIxMCwgYzcsIGMxNCwgMAlAIGNsZWFuK2ludmFsaWRhdGUgRAogCQliCWlmbHVzaAogaGllcmFyY2hpY2FsOgotCQlzdG1mZAlzcCEsIHtyMC1yNSwgcjcsIHI5LXIxMX0KKwkJbWNyCXAxNSwgMCwgcjEwLCBjNywgYzEwLCA1CUAgRE1CCisJCXN0bWZkCXNwISwge3IwLXI1LCByNywgcjksIHIxMX0KIAkJbXJjCXAxNSwgMSwgcjAsIGMwLCBjMCwgMQlAIHJlYWQgY2xpZHIKIAkJYW5kcwlyMywgcjAsICMweDcwMDAwMDAJQCBleHRyYWN0IGxvYyBmcm9tIGNsaWRyCiAJCW1vdglyMywgcjMsIGxzciAjMjMJCUAgbGVmdCBhbGlnbiBsb2MgYml0IGZpZWxkCkBAIC04MjAsMTIgKzgzMCwxNCBAQAogCQljbXAJcjMsIHIxMAogCQliZ3QJbG9vcDEKIGZpbmlzaGVkOgorCQlsZG1mZAlzcCEsIHtyMC1yNSwgcjcsIHI5LCByMTF9CiAJCW1vdglyMTAsICMwCQkJQCBzd2l0aCBiYWNrIHRvIGNhY2hlIGxldmVsIDAKIAkJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJQCBzZWxlY3QgY3VycmVudCBjYWNoZSBsZXZlbCBpbiBjc3NyCi0JCWxkbWZkCXNwISwge3IwLXI1LCByNywgcjktcjExfQogaWZsdXNoOgorCQltY3IJcDE1LCAwLCByMTAsIGM3LCBjMTAsIDQJQCBEU0IKIAkJbWNyCXAxNSwgMCwgcjEwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEkrQlRCCi0JCW1jcglwMTUsIDAsIHIxMCwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCisJCW1jcglwMTUsIDAsIHIxMCwgYzcsIGMxMCwgNAlAIERTQgorCQltY3IJcDE1LCAwLCByMTAsIGM3LCBjNSwgNAlAIElTQgogCQltb3YJcGMsIGxyCiAKIF9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNjVjZThmZi4uM2ZjMDg0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC04Niw2ICs4Niw4IEBACiAKICNkZWZpbmUgX19wdHJfdCB2b2lkICoKIAorI2RlZmluZSBtZW16ZXJvKHMsbikgX19tZW16ZXJvKHMsbikKKwogLyoKICAqIE9wdGltaXNlZCBDIHZlcnNpb24gb2YgbWVtemVybyBmb3IgdGhlIEFSTS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL0tjb25maWcgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwppbmRleCA4NmI1ZTY5Li5hMmNkOWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vS2NvbmZpZworKysgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwpAQCAtMzMsMyArMzMsNiBAQAogCiBjb25maWcgU0hBUlBfU0NPT1AKIAlib29sCisKK2NvbmZpZyBDT01NT05fQ0xLREVWCisJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlIGIvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCmluZGV4IDMyNWU0YjYuLjdjYjc5NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQgQEAKIG9iai0kKENPTkZJR19BUkNIX0lYUDIwMDApCSs9IHVlbmdpbmUubwogb2JqLSQoQ09ORklHX0FSQ0hfSVhQMjNYWCkJKz0gdWVuZ2luZS5vCiBvYmotJChDT05GSUdfUENJX0hPU1RfSVRFODE1MikgICs9IGl0ODE1Mi5vCitvYmotJChDT05GSUdfQ09NTU9OX0NMS0RFVikJKz0gY2xrZGV2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ExN2I0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogIGFyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogSGVscGVyIGZvciB0aGUgY2xrIEFQSSB0byBhc3Npc3QgbG9va2luZyB1cCBhIHN0cnVjdCBjbGsuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXN0cnVjdCBjbGtfbG9va3VwICpwOworCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJaW50IG1hdGNoLCBiZXN0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAoKHAtPmRldl9pZCAmJiAhZGV2X2lkKSB8fCAocC0+Y29uX2lkICYmICFjb25faWQpKQorCQkJY29udGludWU7CisJCW1hdGNoID0gMDsKKwkJaWYgKHAtPmRldl9pZCkKKwkJCW1hdGNoICs9IDIgKiAoc3RyY21wKHAtPmRldl9pZCwgZGV2X2lkKSA9PSAwKTsKKwkJaWYgKHAtPmNvbl9pZCkKKwkJCW1hdGNoICs9IDEgKiAoc3RyY21wKHAtPmNvbl9pZCwgY29uX2lkKSA9PSAwKTsKKwkJaWYgKG1hdGNoID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2ggPiBiZXN0KSB7CisJCQljbGsgPSBwLT5jbGs7CisJCQliZXN0ID0gbWF0Y2g7CisJCX0KKwl9CisJcmV0dXJuIGNsazsKK30KKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKKwljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWNsayA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKKwlpZiAoY2xrICYmICFfX2Nsa19nZXQoY2xrKSkKKwkJY2xrID0gTlVMTDsKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CisKKwlyZXR1cm4gY2xrID8gY2xrIDogRVJSX1BUUigtRU5PRU5UKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJX19jbGtfcHV0KGNsayk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCit2b2lkIGNsa2Rldl9hZGQoc3RydWN0IGNsa19sb29rdXAgKmNsKQoreworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmY2wtPm5vZGUsICZjbG9ja3MpOworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woY2xrZGV2X2FkZCk7CisKKyNkZWZpbmUgTUFYX0RFVl9JRAkyMAorI2RlZmluZSBNQVhfQ09OX0lECTE2CisKK3N0cnVjdCBjbGtfbG9va3VwX2FsbG9jIHsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCBjbDsKKwljaGFyCWRldl9pZFtNQVhfREVWX0lEXTsKKwljaGFyCWNvbl9pZFtNQVhfQ09OX0lEXTsKK307CisKK3N0cnVjdCBjbGtfbG9va3VwICpjbGtkZXZfYWxsb2Moc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpjb25faWQsCisJY29uc3QgY2hhciAqZGV2X2ZtdCwgLi4uKQoreworCXN0cnVjdCBjbGtfbG9va3VwX2FsbG9jICpjbGE7CisKKwljbGEgPSBremFsbG9jKHNpemVvZigqY2xhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGEpCisJCXJldHVybiBOVUxMOworCisJY2xhLT5jbC5jbGsgPSBjbGs7CisJaWYgKGNvbl9pZCkgeworCQlzdHJsY3B5KGNsYS0+Y29uX2lkLCBjb25faWQsIHNpemVvZihjbGEtPmNvbl9pZCkpOworCQljbGEtPmNsLmNvbl9pZCA9IGNsYS0+Y29uX2lkOworCX0KKworCWlmIChkZXZfZm10KSB7CisJCXZhX2xpc3QgYXA7CisKKwkJdmFfc3RhcnQoYXAsIGRldl9mbXQpOworCQl2c2NucHJpbnRmKGNsYS0+ZGV2X2lkLCBzaXplb2YoY2xhLT5kZXZfaWQpLCBkZXZfZm10LCBhcCk7CisJCWNsYS0+Y2wuZGV2X2lkID0gY2xhLT5kZXZfaWQ7CisJCXZhX2VuZChhcCk7CisJfQorCisJcmV0dXJuICZjbGEtPmNsOworfQorRVhQT1JUX1NZTUJPTChjbGtkZXZfYWxsb2MpOworCisvKgorICogY2xrZGV2X2Ryb3AgLSByZW1vdmUgYSBjbG9jayBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKyAqLwordm9pZCBjbGtkZXZfZHJvcChzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpCit7CisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlsaXN0X2RlbCgmY2wtPm5vZGUpOworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwlrZnJlZShjbCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa2Rldl9kcm9wKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwppbmRleCA3YzZiNGI5Li4yMjkzZjBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCkBAIC0xMTA4LDYgKzExMDgsNyBAQAogCWxvY29tb193cml0ZWwoYnB3ZiB8IExPQ09NT19BTENfRU4sIGxjaGlwLT5iYXNlICsgTE9DT01PX0ZST05UTElHSFQgKyBMT0NPTU9fQUxTKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZnJvbnRsaWdodF9zZXQpOwogCiAvKgogICoJTG9Db01vICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCBmMWU0YjhmLi5lY2YwYmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC02OSwxMiArNjksMTIgQEAKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSBjbGVhciBhbGwgZXhpc3RpbmcgaW50ZXJydXB0cwogCSAqLwotCXdyaXRlbCgwLCBiYXNlICsgVklDX1ZFQ1RfQUREUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKLQkJdmFsdWUgPSByZWFkbChiYXNlICsgVklDX1ZFQ1RfQUREUik7Ci0JCXdyaXRlbCh2YWx1ZSwgYmFzZSArIFZJQ19WRUNUX0FERFIpOworCQl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKKwkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKQEAgLTgyLDcgKzgyLDcgQEAKIAkJd3JpdGVsKFZJQ19WRUNUX0NOVExfRU5BQkxFIHwgaSwgcmVnKTsKIAl9CiAKLQl3cml0ZWwoMzIsIGJhc2UgKyBWSUNfREVGX1ZFQ1RfQUREUik7CisJd3JpdGVsKDMyLCBiYXNlICsgVklDX1BMMTkwX0RFRl9WRUNUX0FERFIpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGlycSA9IGlycV9zdGFydCArIGk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VzZXJpZXNfcHhhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCmluZGV4IDIzMDc1ODcuLmI2YzVjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2Ci0jIFNhdCBKdWwgMjYgMjI6Mjg6NDYgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjOAorIyBXZWQgRGVjIDI0IDIzOjM1OjQ1IDIwMDgKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTIyLDggKzIyLDYgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCkBAIC00OCw4ICs0Niw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldApAQCAtNTgsMTMgKzU1LDEyIEBACiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC03Myw2ICs2OSw3IEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CkBAIC04MCwxNSArNzcsMTAgQEAKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CkBAIC0xMTIsMTQgKzEwNCwxNSBAQAogIwogQ09ORklHX0lPU0NIRURfTk9PUD15CiBDT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiBDT05GSUdfQ0xBU1NJQ19SQ1U9eQorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMjksNyArMTIyLDYgQEAKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldApAQCAtMTYwLDcgKzE1Miw4IEBACiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAKICMKICMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE2OSw4ICsxNjIsMTAgQEAKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTPXkKIENPTkZJR19NQUNIX0UzMzA9eQogQ09ORklHX01BQ0hfRTM1MD15CkBAIC0xNzgsNyArMTczLDggQEAKIENPTkZJR19NQUNIX0U3NTA9eQogQ09ORklHX01BQ0hfRTQwMD15CiBDT05GSUdfTUFDSF9FODAwPXkKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldApAQCAtMTg2LDEyICsxODIsMTUgQEAKICMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKIENPTkZJR19QWEEyNXg9eQogIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0CitDT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yMjIsNiArMjIxLDcgQEAKICMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIENPTkZJR19JV01NWFQ9eQogQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMzcsNiArMjM3LDcgQEAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCitDT05GSUdfUENNQ0lBX1BYQTJYWD1tCiAKICMKICMgS2VybmVsIEZlYXR1cmVzCkBAIC0yNDUsMjUgKzI0NiwzMCBAQAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCiAjCkBAIC0yNzcsOSArMjgzLDEwIEBACiBDT05GSUdfQVRBR1NfUFJPQz15CiAKICMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CiAjCiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0yOTYsNiArMzAzLDggQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CiAKQEAgLTMwOSwxMCArMzE4LDYgQEAKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzM5LDcgKzM0NCw3IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQpAQCAtMzUwLDI1ICszNTUsNyBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldApAQCAtMzc2LDYgKzM2Myw3IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQyMSwyNSArNDA5LDE4IEBACiAjCiAjIERvbmdsZSBzdXBwb3J0CiAjCi0jIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKIAogIwogIyBGSVIgZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0ZJQ1A9eQotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPW0KIENPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX01BQzgwMjExPW0KQEAgLTQ0OCw3ICs0MjksOSBAQAogIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgogIwogQ09ORklHX01BQzgwMjExX1JDX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgogIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9MRURTIGlzIG5vdCBzZXQKQEAgLTUzOSwxMSArNTIyLDEyIEBACiAjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz1tCiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1RNSU89bQogIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NiwxMyArNTQwLDEzIEBACiBDT05GSUdfQkxLX0RFVl9MT09QPW0KICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTYzMiwzNyArNjE2LDI1IEBACiBDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAogQ09ORklHX0hFUk1FUz1tCiBDT05GSUdfUENNQ0lBX0hFUk1FUz1tCiAjIENPTkZJR19QQ01DSUFfU1BFQ1RSVU0gaXMgbm90IHNldAogIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAogIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENNQ0lBPXkKICMgQ09ORklHX1BDTUNJQV8zQzU4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfM0M1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9QQ05FVD1tCisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldApAQCAtNzE0LDEzICs2ODYsMTEgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MDU9eQogQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzPXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC03NDksMTEgKzcxOSwxMyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfUFhBPXkKKyMgQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKQEAgLTc3Myw2ICs3NDUsMTAgQEAKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIwogCkBAIC03ODYsMTIgKzc2MiwxNCBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk5LDggKzc3NywxMyBAQAogIwogQ09ORklHX01GRF9DT1JFPXkKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfVE1JTz15CitDT05GSUdfTUZEX1Q3TDY2WEI9eQorQ09ORklHX01GRF9UQzYzODdYQj15CiBDT05GSUdfTUZEX1RDNjM5M1hCPXkKIAogIwpAQCAtODI3LDYgKzgxMCw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTg1MSw4ICs4MzUsMTAgQEAKICMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfVzEwMD15Ci0jIENPTkZJR19GQl9BTTIwMEVQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CkBAIC04ODYsNiArODcyLDcgQEAKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC04OTksMTQgKzg4NiwxOCBAQAogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KIENPTkZJR19TTkRfRFJJVkVSUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1BYQTJYWF9MSUI9bQorQ09ORklHX1NORF9QWEEyWFhfTElCX0FDOTc9eQogIyBDT05GSUdfU05EX1BYQTJYWF9BQzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz1tCiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CkBAIC05MjAsMTMzICs5MTEsMTkgQEAKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9QWEEyNVg9eQotQ09ORklHX1VTQl9QWEEyNVg9eQotQ09ORklHX1VTQl9QWEEyNVhfU01BTEw9eQotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD1tCi0jIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CitDT05GSUdfSElEX0NPTVBBVD15CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQogCiAjCi0jIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiAjCiBDT05GSUdfTU1DX0JMT0NLPXkKIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKQEAgLTEwNTQsMTQgKzkzMSwxOCBAQAogIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19UTUlPPXkKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNzAsMTEgKzk1MSwxNyBAQAogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9bQorQ09ORklHX0ZTX01CQ0FDSEU9bQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTA2LDYgKzk5Myw3IEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTAzMCw3IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMjgsMTMgKzExMTcsMTUgQEAKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKQEAgLTEyNDQsMTUgKzExMzUsMjMgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CkBAIC0xMzI0LDE0ICsxMjIzLDE3IEBACiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDUwMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OWJhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDk5NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNgorIyBUdWUgU2VwIDE2IDE2OjEzOjQ4IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0NMSz15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0g1MDAwPXkKKyMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfUFhBMjV4PXkKKyMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTU1YVCBpcyBub3Qgc2V0CitDT05GSUdfWFNDQUxFX1BNVT15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0ia2VlcGluaXRyZCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfQVBNX0VNVUxBVElPTj15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCisjIENPTkZJR19NVERfQ0hBUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BUE1QT1dFUiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYPXkKK0NPTkZJR19VU0JfUFhBMjVYPXkKK0NPTkZJR19VU0JfUFhBMjVYX1NNQUxMPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorIyBDT05GSUdfVVNCX0VUSF9STkRJUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCmluZGV4IGUzMzU3YmEuLmFiOGIxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCkBAIC0xLDExICsxLDExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmM1Ci0jIFN1biBKdW4gMjIgMTU6NTE6MjUgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNworIyBUaHUgRGVjICA0IDE1OjI3OjM5IDIwMDgKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX01NVT15CkBAIC0yMiw4ICsyMiw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15Ci1DT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQ5LDE0ICs0OCwxNyBAQAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC03Myw5ICs3NSwxMiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CkBAIC04NSw4ICs5MCw3IEBACiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQEAgLTk3LDEyICsxMDEsMTMgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTE3LDYgKzEyMiw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMjgsNyArMTM0LDYgQEAKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKQEAgLTE1OCw3ICsxNjMsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAKICMKICMgTWFydmVsbCBLaXJrd29vZCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE5OSw2ICsyMDQsNyBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19PVVRFUl9DQUNIRT15CiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQorIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjE3LDI1ICsyMjMsMzAgQEAKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCiAjCkBAIC0yNDgsNiArMjU5LDExIEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KICMKIApAQCAtMjYwLDYgKzI3Niw4IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTI2OCwxMCArMjg2LDYgQEAKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zMjIsNiArMzM2LDE1IEBACiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorQ09ORklHX05FVF9EU0E9eQorIyBDT05GSUdfTkVUX0RTQV9UQUdfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRFNBX1RBR19FRFNBPXkKKyMgQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIgaXMgbm90IHNldAorQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYPXkKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTMxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRFNBX01WODhFNjEyM182MV82NT15CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM0MywxMiArMzY2LDEyIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtMzY1LDYgKzM4OCw4IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTQ1Myw3ICs0NzgsNyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CkBAIC01NjEsNiArNTg2LDcgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02MTksNyArNjQ1LDYgQEAKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CkBAIC02MjcsMTEgKzY1MiwxNCBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MzksNyArNjY3LDIzIEBACiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldApAQCAtNjUwLDEyICs2OTQsMTYgQEAKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTY3NiwxNCArNzI0LDEyIEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTY5OSw2ICs3NDUsOCBAQAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIApAQCAtNzY1LDcgKzgxMywxMSBAQAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKQEAgLTc3NSw3ICs4MjcsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC04MDAsNDQgKzg1Miw2NCBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKIENPTkZJR19JMkNfTVY2NFhYWD15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKQEAgLTg2NCwyMCArOTM2LDI2IEBACiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTkxMCw4ICs5ODgsMTAgQEAKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15CkBAIC05MjIsOSArMTAwMiwzNiBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQlJJR0hUPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9ERUxMPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTk0MCw4ICsxMDQ3LDkgQEAKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwpAQCAtOTU2LDIwICsxMDY0LDIzIEBACiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfUFJJTlRFUj15CitDT05GSUdfVVNCX1BSSU5URVI9bQogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk5Miw3ICsxMTAzLDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEwMDUsNyArMTExNSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTEwMjMsOCArMTEzMywxMiBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0CiAKQEAgLTEwMzgsNiArMTE1Miw4IEBACiAjIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMDU2LDcgKzExNzIsNiBAQAogIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX01WPXkKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CkBAIC0xMDY0LDI5ICsxMTc5LDM5IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfTVY9eQogQ09ORklHX0RNQURFVklDRVM9eQogCiAjCkBAIC0xMDk5LDYgKzEyMjQsOCBAQAogIyBETUEgQ2xpZW50cwogIwogIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCkBAIC0xMTA5LDExICsxMjM2LDEyIEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPXkKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTExMzEsNyArMTI1OSw3IEBACiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQpAQCAtMTE0MCw5ICsxMjY4LDkgQEAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTUyLDYgKzEyODAsNyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMTgyLDYgKzEzMTEsNyBAQAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTE5MiwxMyArMTMyMiwxMyBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTIxMCwyNCArMTM0MCw4IEBACiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTEyODQsMTEgKzEzOTgsMTQgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMzAwLDIxICsxNDE3LDQwIEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTEzMjYsNiArMTQ2Miw3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0NSWVBUTz15CkBAIC0xMzMzLDggKzE0NzAsMTIgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fUk5HPW0KIENPTkZJR19DUllQVE9fTUFOQUdFUj1tCiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldApAQCAtMTM3Myw2ICsxNTE0LDEwIEBACiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKQEAgLTE0MDMsNiArMTU0OCwxMSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIApAQCAtMTQxMCwxMCArMTU2MCw5IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcKaW5kZXggNjA3N2YyYy4uZDI1YzQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwpAQCAtMSwzOSArMSw2NyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjNAotIyBUaHUgTWF5IDI1IDE1OjQyOjUxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1zaW10ZWMtbWljcmVsMQorIyBGcmkgRGVjICA1IDEwOjMwOjI3IDIwMDgKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAogQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgR2VuZXJhbCBzZXR1cAogIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC00MSwzMCArNjksNTAgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtNzgsNjAgKzEyNiw3NyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CiAKICMKICMgU3lzdGVtIFR5cGUKICMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfS1M4Njk1PXkKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfS1M4Njk1PXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKIAogIwogIyBLZW5kaW4vTWljcmVsIEtTODY5NSBJbXBsZW1lbnRhdGlvbnMKICMKIENPTkZJR19NQUNIX0tTODY5NT15Ci0jIENPTkZJR19NQUNIX0RTTTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNNDAwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNNDAwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNNDB4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xJVEUzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9TRTQyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQU5HQV9LUzg2OTUgaXMgbm90IHNldAorQ09ORklHX01BQ0hfRFNNMzIwPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMlQ9eQotQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCkBAIC0xNDAsMTYgKzIwNSwxNiBAQAogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKIENPTkZJR19QQ0lfREVCVUc9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKIENPTkZJR19QQ0NBUkQ9eQogIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQpAQCAtMTczLDkgKzIzOCwxMiBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xODQsNyArMjUyLDE0IEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIAogIwpAQCAtMTk0LDYgKzI2OSw3IEBACiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTIwMiw4ICsyNzgsNyBAQAogIwogIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKICMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiAKICMKQEAgLTIxMiwzNCArMjg3LDMzIEBACiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldApAQCAtMjUwLDI4ICszMjQsMjEgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMjgyLDEzICszNDksOCBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCkBAIC0yOTYsOSArMzU4LDIxIEBACiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzA3LDM2ICszODEsNDAgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIworIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTM1NSwyMiArNDMzLDI1IEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTM4OCwyOSArNDY5LDE1IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC00MjIsMTMgKzQ4OSwxNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00MzYsMTI3ICs1MDcsODUgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJNX0tTODY5NV9FVEhFUj15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIFdpcmVsZXNzIExBTgogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorQ09ORklHX1BSSVNNNTQ9bQorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTU2Niw3ICs1OTUsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTU3Niw2ICs2MDQsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC01ODksOSArNjE4LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjA5LDEzMiArNjQyLDExMyBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLQotIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtNzQzLDE2ICs3NTcsMTYgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC03NzQsMTAgKzc4OCwxMSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNzkwLDY3ICs4MDUsMTEzIEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLSMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKQEAgLTg1OSwyMSArOTIwLDEwMyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKIAogIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQogIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDMxbW9ib2FyZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MzFtb2JvYXJkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBmODZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDMxbW9ib2FyZF9kZWZjb25maWcKQEAgLTAsMCArMSw3OTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKKyMgRnJpIE9jdCAyNCAxMTo0MToyMiAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9NWEM9eQorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgRnJlZXNjYWxlIE1YQyBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTVgyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX01YMz15CisKKyMKKyMgTVgzIE9wdGlvbnMKKyMKKyMgQ09ORklHX01BQ0hfTVgzMUFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAzNyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01YMzFMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX01YMzFNT0JPQVJEPXkKKyMgQ09ORklHX01YQ19JUlFfUFJJT1IgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfVjY9eQorIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfMzJ2Nj15CitDT05GSUdfQ1BVX0FCUlRfRVY2PXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjY9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJub2luaXRyZCBjb25zb2xlPXR0eW14YzAsMTE1MjAwIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgaXA9b2ZmIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfVkZQPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CisjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9JTVg9eQorQ09ORklHX1NFUklBTF9JTVhfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZmYzBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDc3MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgorIyBTdW4gT2N0IDI2IDE1OjU1OjI5IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCisjIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9NWEM9eQorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEZyZWVzY2FsZSBNWEMgSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX01YMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9NWDM9eQorCisjCisjIE1YMyBPcHRpb25zCisjCisjIENPTkZJR19NQUNIX01YMzFBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMzcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NWDMxTElURSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9NWDMxXzNEUz15CisjIENPTkZJR19NWENfSVJRX1BSSU9SIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1Y2PXkKKyMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVXzMydjY9eQorQ09ORklHX0NQVV9BQlJUX0VWNj15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjY9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX1VORVZJQ1RBQkxFX0xSVSBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfSU1YPXkKK0NPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjVmMWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzMDIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzEKKyMgVHVlIEp1bCAyOSAxMDo0Njo1NCAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKKyMKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjM9eQorIyBDT05GSUdfQVJDSF9BVDkxU0FNOVJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxQ0FQOSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFYNDAgaXMgbm90IHNldAorQ09ORklHX0FUOTFfUE1DX1VOSVQ9eQorCisjCisjIEFUOTFTQU05MjYzIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1VTQl9BOTI2MyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9ORU9DT1JFOTI2PXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKK0NPTkZJR19NVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRD15CisKKyMKKyMgQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKK0NPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9eQorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorQ09ORklHX05GVEw9eQorQ09ORklHX05GVExfUlc9eQorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9CTE9DSzJNVEQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfTkFORF9FQ0NfU01DPXkKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVE1FTD15CitDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXPXkKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0VDQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19BVE1FTF9QV009eQorQ09ORklHX0FUTUVMX1RDTElCPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDPXkKK0NPTkZJR19BVE1FTF9UQ0JfQ0xLU1JDX0JMT0NLPTAKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9TU0MgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworIyBDT05GSUdfQkxLX0RFVl9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfUERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVE1FTD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfQVRNRUxfTENEQz15CisjIENPTkZJR19CQUNLTElHSFRfQVRNRUxfUFdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9eQorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCmluZGV4IDA4ODRmMjMuLjYxZDBmYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZwpAQCAtNzI4LDkgKzcyOCw5IEBACiAjCiAjIFJUQyBpbnRlcmZhY2VzCiAjCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9bQotQ09ORklHX1JUQ19JTlRGX1BST0M9bQotQ09ORklHX1JUQ19JTlRGX0RFVj1tCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CiAKICMKICMgUlRDIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTQzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQwOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNworIyBGcmkgRGVjICA1IDExOjU0OjA5IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX09NQVAzX1BBTkRPUkE9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiBkZWJ1ZyAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTgwMAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAorQ09ORklHX0lOUFVUX0pPWURFVj15CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CisjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1RXTDQwMzA9eQorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX0NPUkU9eQorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfREVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9NVVNCX0hPU1Q9eQorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKKyMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX09NQVA9eQorQ09ORklHX1VTQl9PTUFQPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMj15CitDT05GSUdfUVVPVEFDVEw9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fUk5HPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCmluZGV4IDk0OGEyMTIuLmI3N2QwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCkBAIC0zMTYsNyArMzE2LDgyIEBACiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX05FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzMyLDYgKzQwNyw4IEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKQEAgLTM5MCw2ICs0NjcsNTQgQEAKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTgxNiw2ICs5NDEsMjcgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCmluZGV4IDE0ODI2ZjAuLjU5ZTQ0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZwpAQCAtMTA2OSw5ICsxMDY5LDkgQEAKICMKICMgUlRDIGludGVyZmFjZXMKICMKLUNPTkZJR19SVENfSU5URl9TWVNGUz1tCi1DT05GSUdfUlRDX0lOVEZfUFJPQz1tCi1DT05GSUdfUlRDX0lOVEZfREVWPW0KK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKICMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwppbmRleCAwYzA5YjIzLi5jZDI5ODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCkBAIC0xLDg0ICsxLDExMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMwotIyBXZWQgT2N0IDI1IDE0OjEyOjAwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzIKKyMgTW9uIE5vdiAxMCAxNDo0MTo0NyAyMDA4CiAjCiBDT05GSUdfQVJNPXkKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfVUlEMTY9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKK0NPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKIENPTkZJR19TVE9QX01BQ0hJTkU9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCiBDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC05Miw2ICsxMTksOCBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMDMsMTkgKzEzMiwyNiBAQAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtMTIzLDEzICsxNTksMjkgQEAKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCiAKICMKICMgUmVhbFZpZXcgcGxhdGZvcm0gdHlwZQogIwogQ09ORklHX01BQ0hfUkVBTFZJRVdfRUI9eQotQ09ORklHX1JFQUxWSUVXX01QQ09SRT15CisjIENPTkZJR19SRUFMVklFV19FQl9BOU1QIGlzIG5vdCBzZXQKK0NPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QPXkKKyMgQ09ORklHX1JFQUxWSUVXX0VCX0FSTTExTVBfUkVWQiBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9SRUFMVklFV19QQjExTVA9eQorIyBDT05GSUdfTUFDSF9SRUFMVklFV19QQjExNzYgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9SRUFMVklFV19QQkE4IGlzIG5vdCBzZXQKK0NPTkZJR19SRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTM4LDEyICsxOTAsMTUgQEAKICMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15CisjIENPTkZJR19DUFVfVjcgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKIENPTkZJR19DUFVfQUJSVF9FVjY9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WNj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQogQ09ORklHX0NQVV9DT1BZX1Y2PXkKIENPTkZJR19DUFVfVExCX1Y2PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQogQ09ORklHX0NQVV9DUDE1PXkKIENPTkZJR19DUFVfQ1AxNV9NTVU9eQogCkBAIC0xNTMsOSArMjA4LDEwIEBACiBDT05GSUdfQVJNX1RIVU1CPXkKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAogQ09ORklHX0hBU19UTFNfUkVHPXkKK0NPTkZJR19PVVRFUl9DQUNIRT15CitDT05GSUdfQ0FDSEVfTDJYMD15CiBDT05GSUdfQVJNX0dJQz15CiBDT05GSUdfSUNTVDMwNz15CiAKQEAgLTE2MywzMiArMjE5LDQ0IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfQVJNX0FNQkE9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHX1NNUD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19OUl9DUFVTPTQKIENPTkZJR19IT1RQTFVHX0NQVT15CiBDT05GSUdfTE9DQUxfVElNRVJTPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIAogIwpAQCAtMTk4LDYgKzI2NiwxMiBAQAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTEwLjEuNjkuMzovd29yay9uZnNyb290IGlwPWRoY3AgY29uc29sZT10dHlBTUEwIG1lbT0xMjhNIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIAogIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KQEAgLTIwNiw4ICsyODAsNyBAQAogIwogIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKICMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiBDT05GSUdfVkZQPXkKIApAQCAtMjE1LDI4ICsyODgsMjkgQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yNTUsMzYgKzMyOSwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0yOTQsMTAgKzM1Nyw2IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTMwNSw5ICszNjQsMTQgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzE2LDM4ICszODAsMzcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTM3Myw3ICs0MzYsNiBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC0zOTcsMTE1ICs0NTksNzMgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTExWD15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAKICMKQEAgLTUxMyw2ICs1MzMsNyBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTIyLDcgKzU0Myw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTM4LDkgKzU1OCwxNiBAQAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTU1OCw5ICs1ODUsMTEgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3OSw5NyArNjA4LDkxIEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0KLSMKLSMgSVBNSQotIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKIENPTkZJR19GQl9BUk1DTENEPXkKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTY3NywyOCArNzAwLDE3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC03MTIsMTAwICs3MjQsNjUgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9BQzk3X0JVUz1tCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQVJNQUFDST1tCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKK0NPTkZJR19TTkRfVk1BU1RFUj15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9BUk1BQUNJPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKK0NPTkZJR19BQzk3X0JVUz15CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCiBDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKIENPTkZJR19NTUNfQVJNTU1DST15Ci0jIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBSVEMgaW50ZXJmYWNlcworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKICMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLUNPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQotCi0jCi0jIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9QTDAzMT15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CkBAIC04MzEsMTEgKzgwOCwxMSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ4LDI5ICs4MjUsMjggQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTg3OCwxNyArODU0LDEyIEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtOTI5LDY0ICs5MDAsMTc3IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19SV1NFTVM9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKIAogIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCA5MDdlNTQzLi43ZTI1M2Y1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtMSwxMDUgKzEsMjA0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmMyCi0jIFRodSBTZXAgMjkgMTQ6NTA6MTAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMgorIyBNb24gTm92IDEwIDE0OjM5OjQ4IDIwMDgKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBJTyBTY2hlZHVsZXJzCiAjCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIFR5cGUKICMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFQUxWSUVXPXkKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFQUxWSUVXPXkKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIwogCiAjCiAjIFJlYWxWaWV3IHBsYXRmb3JtIHR5cGUKICMKIENPTkZJR19NQUNIX1JFQUxWSUVXX0VCPXkKKyMgQ09ORklHX1JFQUxWSUVXX0VCX0E5TVAgaXMgbm90IHNldAorQ09ORklHX1JFQUxWSUVXX0VCX0FSTTExTVA9eQorIyBDT05GSUdfUkVBTFZJRVdfRUJfQVJNMTFNUF9SRVZCIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTFNUD15CitDT05GSUdfTUFDSF9SRUFMVklFV19QQjExNzY9eQorIyBDT05GSUdfTUFDSF9SRUFMVklFV19QQkE4IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX0FSTTkyNlQ9eQotIyBDT05GSUdfQ1BVX1Y2IGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfQ09QWV9WNFdCPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKKyMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfVjY9eQorIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9WNyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVXzMydjY9eQorQ09ORklHX0NQVV9BQlJUX0VWNj15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjY9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCkBAIC0xMDcsOCArMjA2LDkgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX09VVEVSX0NBQ0hFPXkKK0NPTkZJR19DQUNIRV9MMlgwPXkKIENPTkZJR19BUk1fR0lDPXkKIENPTkZJR19JQ1NUMzA3PXkKIApAQCAtMTE2LDIwICsyMTYsNDEgQEAKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19BUk1fQU1CQT15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCiAjCkBAIC0xMzksNiArMjYwLDEyIEBACiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKIENPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTAuMS42OS4zOi93b3JrL25mc3Jvb3QgaXA9ZGhjcCBjb25zb2xlPXR0eUFNQTAgbWVtPTEyOE0iCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMTQ3LDI2ICsyNzQsMjQgQEAKICMKICMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCiAjCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRlAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKK0NPTkZJR19WRlA9eQogCiAjCiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTE3NSw2ICszMDAsMTEgQEAKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTE4NiwzNCArMzE2LDU2IEBACiAjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAogIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMjIyLDMwICszNzQsMzcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtMjY2LDcgKzQyNSw2IEBACiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX1VUSUw9eQogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CkBAIC0yNzksNyArNDM3LDYgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1I9eQotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC0yODgsNyArNDQ1LDcgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCiAjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwpAQCAtMjk2LDEyMSArNDUzLDgxIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTExWD15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIFdpcmVsZXNzIExBTgogIwotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNDIwLDcgKzUzNyw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNDMzLDExICs1NDksMTkgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNDU1LDggKzU3OSwxMSBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtNDc1LDczICs2MDIsOTEgQEAKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLQotIwotIyBJMkMgc3VwcG9ydAotIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiBDT05GSUdfRkJfQVJNQ0xDRD15CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC01NDksMjcgKzY5NCwxNyBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtNTc3LDU5ICs3MTIsNzEgQEAKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgQVJNIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BUk1BQUNJIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIworQ09ORklHX1NORF9WTUFTVEVSPXkKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX0FSTUFBQ0k9eQorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX01NQ19BUk1NTUNJPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwogIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKQEAgLTY1NCw1MSArODAxLDU5IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKQEAgLTczOSwyNiArODk0LDcxIEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY2LDIxICs5NjYsMTA2IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CiAKICMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2MxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsODQ1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMzCisjIE1vbiBOb3YgIDMgMTA6MTA6MzAgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MU0Y9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUzNDNjRYWD15CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKK0NPTkZJR19QTEFUX1MzQzY0WFg9eQorQ09ORklHX0NQVV9TM0M2NDAwX0lOSVQ9eQorQ09ORklHX0NQVV9TM0M2NDAwX0NMT0NLPXkKK0NPTkZJR19TM0M2NFhYX1NFVFVQX0kyQzA9eQorQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMT15CitDT05GSUdfUExBVF9TM0M9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCitDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCitDT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAorQ09ORklHX1MzQ19HUElPX1RSQUNLPXkKK0NPTkZJR19TM0NfR1BJT19QVUxMX1VQRE9XTj15CitDT05GSUdfUzNDX0dQSU9fQ0ZHX1MzQzI0WFg9eQorQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYPXkKK0NPTkZJR19TM0NfREVWX0hTTU1DPXkKK0NPTkZJR19TM0NfREVWX0hTTU1DMT15CitDT05GSUdfUzNDX0RFVl9JMkMxPXkKK0NPTkZJR19DUFVfUzNDNjQxMD15CitDT05GSUdfUzNDNjQxMF9TRVRVUF9TREhDST15CitDT05GSUdfTUFDSF9TTURLNjQxMD15CitDT05GSUdfU01ESzY0MTBfU0RfQ0gwPXkKKyMgQ09ORklHX1NNREs2NDEwX1NEX0NIMSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9WNj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfMzJ2Nj15CitDT05GSUdfQ1BVX0FCUlRfRVY2PXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjY9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1ZJQz15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQUMwLDExNTIwMCByb290PS9kZXYvcmFtIGluaXQ9L2Jpbi9iYXNoIGluaXRyZD0weDUxMDAwMDAwLDRNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQorQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfUzNDNjQwMD15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19TM0MyNDEwPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CitDT05GSUdfQVQyND15CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX01NQz15CitDT05GSUdfTU1DX0RFQlVHPXkKK0NPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKK0NPTkZJR19TRElPX1VBUlQ9eQorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19NTUNfU0RIQ0lfUzNDPXkKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CitDT05GSUdfREVCVUdfUElfTElTVD15CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TM0NfUE9SVD15CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3c5MHA5MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy93OTBwOTEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJkYTdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy93OTBwOTEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDYyNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjOC1naXQ4CisjIFNhdCBOb3YgMTUgMTA6MDU6MDAgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9OUz15CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorQ09ORklHX0xTRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XOTBYOTAwPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCitDT05GSUdfQ1BVX1c5MFA5MTA9eQorCisjCisjIFc5MFA5MTAgTWFjaGluZXMKKyMKK0NPTkZJR19NQUNIX1c5MFA5MTBFVkI9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgY29uc29sZT10dHlTMCwxMTUyMDBuOCBpbml0cmQ9MHhhMDAwMDAsNDAwMDAwMCBtZW09NjRNIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1c5MFg5MDA9eQorIyBDT05GSUdfU0VSSUFMX1c5MFg5MDBfUE9SVDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1c5MFg5MDBfUE9SVDIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1c5MFg5MDBfUE9SVDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1c5MFg5MDBfUE9SVDQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9XOTBYOTAwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZGU2YzU5Zi4uNmNiZDhmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTAsMTEgKzEwLDExIEBACiAjaWZuZGVmIF9BU01BUk1fQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vZ2x1ZS5oPgogI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KIAogI2RlZmluZSBDQUNIRV9DT0xPVVIodmFkZHIpCSgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCiAKQEAgLTI5NiwxNiArMjk2LDYgQEAKICNlbmRpZgogCiAvKgotICogZmx1c2hfY2FjaGVfdm1hcCgpIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBtYXBwaW5ncyAoZWcsIHZpYSB2bWFwLAotICogdm1hbGxvYywgaW9yZW1hcCBldGMpIGluIGtlcm5lbCBzcGFjZSBmb3IgcGFnZXMuICBTaW5jZSB0aGUKLSAqIGRpcmVjdC1tYXBwaW5ncyBvZiB0aGVzZSBwYWdlcyBtYXkgY29udGFpbiBjYWNoZWQgZGF0YSwgd2UgbmVlZAotICogdG8gZG8gYSBmdWxsIGNhY2hlIGZsdXNoIHRvIGVuc3VyZSB0aGF0IHdyaXRlYmFja3MgZG9uJ3QgY29ycnVwdAotICogZGF0YSBwbGFjZWQgaW50byB0aGVzZSBwYWdlcyB2aWEgdGhlIG5ldyBtYXBwaW5ncy4KLSAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCi0KLS8qCiAgKiBDb3B5IHVzZXIgZGF0YSBmcm9tL3RvIGEgcGFnZSB3aGljaCBpcyBtYXBwZWQgaW50byBhIGRpZmZlcmVudAogICogcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UuICBSZWFsbHksIHdlIHdhbnQgdG8gYWxsb3cgb3VyICJ1c2VyCiAgKiBzcGFjZSIgbW9kZWwgdG8gaGFuZGxlIHRoaXMuCkBAIC00NDQsNCArNDM0LDI5IEBACiAJZG1hY19pbnZfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiB9CiAKKy8qCisgKiBmbHVzaF9jYWNoZV92bWFwKCkgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIG1hcHBpbmdzIChlZywgdmlhIHZtYXAsCisgKiB2bWFsbG9jLCBpb3JlbWFwIGV0YykgaW4ga2VybmVsIHNwYWNlIGZvciBwYWdlcy4gIE9uIG5vbi1WSVBUCisgKiBjYWNoZXMsIHNpbmNlIHRoZSBkaXJlY3QtbWFwcGluZ3Mgb2YgdGhlc2UgcGFnZXMgbWF5IGNvbnRhaW4gY2FjaGVkCisgKiBkYXRhLCB3ZSBuZWVkIHRvIGRvIGEgZnVsbCBjYWNoZSBmbHVzaCB0byBlbnN1cmUgdGhhdCB3cml0ZWJhY2tzCisgKiBkb24ndCBjb3JydXB0IGRhdGEgcGxhY2VkIGludG8gdGhlc2UgcGFnZXMgdmlhIHRoZSBuZXcgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV92bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICghY2FjaGVfaXNfdmlwdF9ub25hbGlhc2luZygpKQorCQlmbHVzaF9jYWNoZV9hbGwoKTsKKwllbHNlCisJCS8qCisJCSAqIHNldF9wdGVfYXQoKSBjYWxsZWQgZnJvbSB2bWFwX3B0ZV9yYW5nZSgpIGRvZXMgbm90CisJCSAqIGhhdmUgYSBEU0IgYWZ0ZXIgY2xlYW5pbmcgdGhlIGNhY2hlIGxpbmUuCisJCSAqLworCQlkc2IoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3Z1bm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAoIWNhY2hlX2lzX3ZpcHRfbm9uYWxpYXNpbmcoKSkKKwkJZmx1c2hfY2FjaGVfYWxsKCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmVjN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogSGVscGVyIGZvciB0aGUgY2xrIEFQSSB0byBhc3Npc3QgbG9va2luZyB1cCBhIHN0cnVjdCBjbGsuCisgKi8KKyNpZm5kZWYgX19BU01fQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fQ0xLREVWX0gKKworc3RydWN0IGNsazsKKworc3RydWN0IGNsa19sb29rdXAgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwljb25zdCBjaGFyCQkqZGV2X2lkOworCWNvbnN0IGNoYXIJCSpjb25faWQ7CisJc3RydWN0IGNsawkJKmNsazsKK307CisKK3N0cnVjdCBjbGtfbG9va3VwICpjbGtkZXZfYWxsb2Moc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpjb25faWQsCisJY29uc3QgY2hhciAqZGV2X2ZtdCwgLi4uKTsKKwordm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7Cit2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggNGVkMTQ5Yy4uMjJjYjE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC02OSw3ICs2OSw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKLQlyZXR1cm4gZGV2LT5kbWFfbWFzayAmJiAqZGV2LT5kbWFfbWFzayAhPSAwOworCWlmIChtYXNrIDwgSVNBX0RNQV9USFJFU0hPTEQpCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IDc1MTU0YjEuLmRmNTYzOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0xLDEyICsxLDcgQEAKICNpZm5kZWYgX19BU01fQVJNX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9ETUFfSAogCi10eXBlZGVmIHVuc2lnbmVkIGludCBkbWFjaF90OwotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHZpcnR1YWwgYWRkcmVzcyB3aGljaCBjYW4gYmUgRE1BJ2QgZnJvbS4KQEAgLTE1LDYgKzEwLDE5IEBACiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkweGZmZmZmZmZmCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JU0FfRE1BX0FQSQorLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGRyaXZlcnMgd3JpdHRlbiBmb3IgdGhlIHg4NiBJU0EgRE1BIEFQSS4KKyAqIEl0IHNob3VsZCBub3QgYmUgcmUtdXNlZCBleGNlcHQgZm9yIHRoYXQgcHVycG9zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFjaF90OworCisjaW5jbHVkZSA8bWFjaC9pc2EtZG1hLmg+CisKIC8qCiAgKiBETUEgbW9kZXMKICAqLwpAQCAtMTQwLDQgKzE0OCw2IEBACiAjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICAgICgwKQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfQVJNX0RNQV9IICovCisjZW5kaWYgLyogQ09ORklHX0lTQV9ETUFfQVBJICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvbWQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvbWQuaAppbmRleCA5YzVhZmJkLi5mOWVlNjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb21kLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9tZC5oCkBAIC0zMiwxOSArMzIsMTEgQEAKICNkZWZpbmUgSU9NRF9LQVJUUlgJKDB4MDA0KQogI2RlZmluZSBJT01EX0tDVFJMCSgweDAwOCkKIAotI2lmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCi0jZGVmaW5lIElPTURfSU9MSU5FUwkoMHgwMEMpCi0jZW5kaWYKLQogI2RlZmluZSBJT01EX0lSUVNUQVRBCSgweDAxMCkKICNkZWZpbmUgSU9NRF9JUlFSRVFBCSgweDAxNCkKICNkZWZpbmUgSU9NRF9JUlFDTFJBCSgweDAxNCkKICNkZWZpbmUgSU9NRF9JUlFNQVNLQQkoMHgwMTgpCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMAotI2RlZmluZSBJT01EX1NVU01PREUJKDB4MDFDKQotI2VuZGlmCi0KICNkZWZpbmUgSU9NRF9JUlFTVEFUQgkoMHgwMjApCiAjZGVmaW5lIElPTURfSVJRUkVRQgkoMHgwMjQpCiAjZGVmaW5lIElPTURfSVJRTUFTS0IJKDB4MDI4KQpAQCAtNTMsMTAgKzQ1LDYgQEAKICNkZWZpbmUgSU9NRF9GSVFSRVEJKDB4MDM0KQogI2RlZmluZSBJT01EX0ZJUU1BU0sJKDB4MDM4KQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKLSNkZWZpbmUgSU9NRF9DTEtDVEwJKDB4MDNDKQotI2VuZGlmCi0KICNkZWZpbmUgSU9NRF9UMENOVEwJKDB4MDQwKQogI2RlZmluZSBJT01EX1QwTFRDSEwJKDB4MDQwKQogI2RlZmluZSBJT01EX1QwQ05USAkoMHgwNDQpCkBAIC03MSwxOCArNTksNiBAQAogI2RlZmluZSBJT01EX1QxR08JKDB4MDU4KQogI2RlZmluZSBJT01EX1QxTEFUQ0gJKDB4MDVjKQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKLSNkZWZpbmUgSU9NRF9JUlFTVEFUQwkoMHgwNjApCi0jZGVmaW5lIElPTURfSVJRUkVRQwkoMHgwNjQpCi0jZGVmaW5lIElPTURfSVJRTUFTS0MJKDB4MDY4KQotCi0jZGVmaW5lIElPTURfVklETVVYCSgweDA2YykKLQotI2RlZmluZSBJT01EX0lSUVNUQVRECSgweDA3MCkKLSNkZWZpbmUgSU9NRF9JUlFSRVFECSgweDA3NCkKLSNkZWZpbmUgSU9NRF9JUlFNQVNLRAkoMHgwNzgpCi0jZW5kaWYKLQogI2RlZmluZSBJT01EX1JPTUNSMAkoMHgwODApCiAjZGVmaW5lIElPTURfUk9NQ1IxCSgweDA4NCkKICNpZmRlZiBDT05GSUdfQVJDSF9SUEMKQEAgLTEwMCwxMSArNzYsNiBAQAogI2RlZmluZSBJT01EX01PVVNFWQkoMHgwQTQpCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCi0jZGVmaW5lIElPTURfTVNFREFUCSgweDBBOCkKLSNkZWZpbmUgSU9NRF9NU0VDVEwJKDB4MEFjKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQVJDSF9SUEMKICNkZWZpbmUgSU9NRF9ETUFUQ1IJKDB4MEMwKQogI2VuZGlmCkBAIC0xMTMsMTggKzg0LDYgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9SUEMKICNkZWZpbmUgSU9NRF9ETUFFWFQJKDB4MENDKQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKLSNkZWZpbmUgSU9NRF9BU1RDUgkoMHgwQ0MpCi0jZGVmaW5lIElPTURfRFJBTUNSCSgweDBEMCkKLSNkZWZpbmUgSU9NRF9TRUxGUkVGCSgweDBENCkKLSNkZWZpbmUgSU9NRF9BVE9ESUNSCSgweDBFMCkKLSNkZWZpbmUgSU9NRF9BVE9EU1IJKDB4MEU0KQotI2RlZmluZSBJT01EX0FUT0RDQwkoMHgwRTgpCi0jZGVmaW5lIElPTURfQVRPRENOVDEJKDB4MEVDKQotI2RlZmluZSBJT01EX0FUT0RDTlQyCSgweDBGMCkKLSNkZWZpbmUgSU9NRF9BVE9EQ05UMwkoMHgwRjQpCi0jZGVmaW5lIElPTURfQVRPRENOVDQJKDB4MEY4KQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9SUEMKICNkZWZpbmUgRE1BX0VYVF9JTzAJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvdmljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS92aWMuaAppbmRleCAyNjNmMmMzLi5mODczMjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS92aWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS92aWMuaApAQCAtMjksMTUgKzI5LDE3IEBACiAjZGVmaW5lIFZJQ19JTlRfU09GVAkJCTB4MTgKICNkZWZpbmUgVklDX0lOVF9TT0ZUX0NMRUFSCQkweDFjCiAjZGVmaW5lIFZJQ19QUk9URUNUCQkJMHgyMAotI2RlZmluZSBWSUNfVkVDVF9BRERSCQkJMHgzMAotI2RlZmluZSBWSUNfREVGX1ZFQ1RfQUREUgkJMHgzNAorI2RlZmluZSBWSUNfUEwxOTBfVkVDVF9BRERSCQkweDMwCS8qIFBMMTkwIG9ubHkgKi8KKyNkZWZpbmUgVklDX1BMMTkwX0RFRl9WRUNUX0FERFIJCTB4MzQJLyogUEwxOTAgb25seSAqLwogCi0jZGVmaW5lIFZJQ19WRUNUX0FERFIwCQkJMHgxMDAJLyogMCB0byAxNSAqLwotI2RlZmluZSBWSUNfVkVDVF9DTlRMMAkJCTB4MjAwCS8qIDAgdG8gMTUgKi8KKyNkZWZpbmUgVklDX1ZFQ1RfQUREUjAJCQkweDEwMAkvKiAwIHRvIDE1ICgwLi4zMSBQTDE5MikgKi8KKyNkZWZpbmUgVklDX1ZFQ1RfQ05UTDAJCQkweDIwMAkvKiAwIHRvIDE1ICgwLi4zMSBQTDE5MikgKi8KICNkZWZpbmUgVklDX0lUQ1IJCQkweDMwMAkvKiBWSUMgdGVzdCBjb250cm9sIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgVklDX1ZFQ1RfQ05UTF9FTkFCTEUJCSgxIDw8IDUpCiAKKyNkZWZpbmUgVklDX1BMMTkyX1ZFQ1RfQUREUgkJMHhGMDAKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHZvaWQgdmljX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LCB1MzIgdmljX3NvdXJjZXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaAppbmRleCA4MWY0Yzg5Li5iZGE0ODlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgSFdDQVBfSVdNTVhUCTUxMgogI2RlZmluZSBIV0NBUF9DUlVOQ0gJMTAyNAogI2RlZmluZSBIV0NBUF9USFVNQkVFCTIwNDgKKyNkZWZpbmUgSFdDQVBfTkVPTgk0MDk2CiAKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCBhODA5NDQ1Li5kMmE1OWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTgwLDYgKzgwLDE0IEBACiBleHRlcm4gdm9pZCBfX3JlYWR3cml0ZV9idWcoY29uc3QgY2hhciAqZm4pOwogCiAvKgorICogQSB0eXBlc2FmZSBfX2lvKCkgaGVscGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX3R5cGVzYWZlX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Cit9CisKKy8qCiAgKiBOb3csIHBpY2sgdXAgdGhlIG1hY2hpbmUtZGVmaW5lZCBJTyBkZWZpbml0aW9ucwogICovCiAjaW5jbHVkZSA8bWFjaC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBhMDAwOWFhLi4zMjhmMTRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pcnEuaApAQCAtNywxMCArNyw2IEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaSkJKGkpCiAjZW5kaWYKIAotI2lmbmRlZiBOUl9JUlFTCi0jZGVmaW5lIE5SX0lSUVMJMTI4Ci0jZW5kaWYKLQogLyoKICAqIFVzZSB0aGlzIHZhbHVlIHRvIGluZGljYXRlIGxhY2sgb2YgaW50ZXJydXB0CiAgKiBjYXBhYmlsaXR5CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDc3NzY0MzAuLjAyMDJhN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0xMTIsMTAgKzExMiw4IEBACiAgKiBwcml2YXRlIGRlZmluaXRpb25zIHdoaWNoIHNob3VsZCBOT1QgYmUgdXNlZCBvdXRzaWRlIG1lbW9yeS5oCiAgKiBmaWxlcy4gIFVzZSB2aXJ0X3RvX3BoeXMvcGh5c190b192aXJ0L19fcGEvX192YSBpbnN0ZWFkLgogICovCi0jaWZuZGVmIF9fdmlydF90b19waHlzCiAjZGVmaW5lIF9fdmlydF90b19waHlzKHgpCSgoeCkgLSBQQUdFX09GRlNFVCArIFBIWVNfT0ZGU0VUKQogI2RlZmluZSBfX3BoeXNfdG9fdmlydCh4KQkoKHgpIC0gUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKLSNlbmRpZgogCiAvKgogICogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYSBQYWdlIEZyYW1lIE51bWJlciBhbmQgYmFjawpAQCAtMTgwLDYgKzE3OCwxMSBAQAogICogbWVtb3J5LiAgVXNlIG9mIHRoZXNlIGlzICpkZXByZWNhdGVkKiAoYW5kIHRoYXQgZG9lc24ndCBtZWFuCiAgKiB1c2UgdGhlIF9fIHByZWZpeGVkIGZvcm1zIGluc3RlYWQuKSAgU2VlIGRtYS1tYXBwaW5nLmguCiAgKi8KKyNpZm5kZWYgX192aXJ0X3RvX2J1cworI2RlZmluZSBfX3ZpcnRfdG9fYnVzCV9fdmlydF90b19waHlzCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQJX19waHlzX3RvX3ZpcnQKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZCB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzKHZvaWQgKngpCiB7CiAJcmV0dXJuIF9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpeCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAwNTU5ZjM3Li4yNjNmZWQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgX19BU01fQVJNX01NVV9DT05URVhUX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZXR5cGUuaD4KICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL210ZC14aXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL210ZC14aXAuaAppbmRleCBkOGZiZTJkLi5kNzlkNjZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tdGQteGlwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbXRkLXhpcC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fQVJNX01URF9YSVBfSF9fCiAjZGVmaW5lIF9fQVJNX01URF9YSVBfSF9fCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tdGQteGlwLmg+CiAKIC8qIGZpbGwgaW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBiZWQxYzBhLi5mMzQxYzlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDgsMzIgKzEwOCwzOCBAQAogI2Vycm9yIFVua25vd24gdXNlciBvcGVyYXRpb25zIG1vZGVsCiAjZW5kaWYKIAorc3RydWN0IHBhZ2U7CisKIHN0cnVjdCBjcHVfdXNlcl9mbnMgewotCXZvaWQgKCpjcHVfY2xlYXJfdXNlcl9wYWdlKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHVzZXIpOwotCXZvaWQgKCpjcHVfY29weV91c2VyX3BhZ2UpKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgdXNlcik7CisJdm9pZCAoKmNwdV9jbGVhcl91c2VyX2hpZ2hwYWdlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcik7CisJdm9pZCAoKmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UpKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJCQl1bnNpZ25lZCBsb25nIHZhZGRyKTsKIH07CiAKICNpZmRlZiBNVUxUSV9VU0VSCiBleHRlcm4gc3RydWN0IGNwdV91c2VyX2ZucyBjcHVfdXNlcjsKIAotI2RlZmluZSBfX2NwdV9jbGVhcl91c2VyX3BhZ2UJY3B1X3VzZXIuY3B1X2NsZWFyX3VzZXJfcGFnZQotI2RlZmluZSBfX2NwdV9jb3B5X3VzZXJfcGFnZQljcHVfdXNlci5jcHVfY29weV91c2VyX3BhZ2UKKyNkZWZpbmUgX19jcHVfY2xlYXJfdXNlcl9oaWdocGFnZQljcHVfdXNlci5jcHVfY2xlYXJfdXNlcl9oaWdocGFnZQorI2RlZmluZSBfX2NwdV9jb3B5X3VzZXJfaGlnaHBhZ2UJY3B1X3VzZXIuY3B1X2NvcHlfdXNlcl9oaWdocGFnZQogCiAjZWxzZQogCi0jZGVmaW5lIF9fY3B1X2NsZWFyX3VzZXJfcGFnZQlfX2dsdWUoX1VTRVIsX2NsZWFyX3VzZXJfcGFnZSkKLSNkZWZpbmUgX19jcHVfY29weV91c2VyX3BhZ2UJX19nbHVlKF9VU0VSLF9jb3B5X3VzZXJfcGFnZSkKKyNkZWZpbmUgX19jcHVfY2xlYXJfdXNlcl9oaWdocGFnZQlfX2dsdWUoX1VTRVIsX2NsZWFyX3VzZXJfaGlnaHBhZ2UpCisjZGVmaW5lIF9fY3B1X2NvcHlfdXNlcl9oaWdocGFnZQlfX2dsdWUoX1VTRVIsX2NvcHlfdXNlcl9oaWdocGFnZSkKIAotZXh0ZXJuIHZvaWQgX19jcHVfY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgdXNlcik7Ci1leHRlcm4gdm9pZCBfX2NwdV9jb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbG9uZyB1c2VyKTsKK2V4dGVybiB2b2lkIF9fY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOworZXh0ZXJuIHZvaWQgX19jcHVfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJCQl1bnNpZ25lZCBsb25nIHZhZGRyKTsKICNlbmRpZgogCi0jZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShhZGRyLHZhZGRyLHBnKQkgX19jcHVfY2xlYXJfdXNlcl9wYWdlKGFkZHIsIHZhZGRyKQotI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0byxmcm9tLHZhZGRyLHBnKSBfX2NwdV9jb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIpCisjZGVmaW5lIGNsZWFyX3VzZXJfaGlnaHBhZ2UocGFnZSx2YWRkcikJCVwKKwkgX19jcHVfY2xlYXJfdXNlcl9oaWdocGFnZShwYWdlLCB2YWRkcikKIAotI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXplcm8oKHZvaWQgKikocGFnZSksIFBBR0VfU0laRSkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ09QWV9VU0VSX0hJR0hQQUdFCisjZGVmaW5lIGNvcHlfdXNlcl9oaWdocGFnZSh0byxmcm9tLHZhZGRyLHZtYSkJXAorCV9fY3B1X2NvcHlfdXNlcl9oaWdocGFnZSh0bywgZnJvbSwgdmFkZHIpCisKKyNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSk7CiAKICN1bmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA2ZmYzMzc5Li4xODQ1ODkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtNjQsNyArNjQsNyBAQAogKHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyAqc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXNwOwkJCVwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJCQkJXAotCW1lbXplcm8ocmVncy0+dXJlZ3MsIHNpemVvZihyZWdzLT51cmVncykpOwkJCVwKKwltZW1zZXQocmVncy0+dXJlZ3MsIDAsIHNpemVvZihyZWdzLT51cmVncykpOwkJCVwKIAlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0xJTUlUXzMyQklUKQkJCVwKIAkJcmVncy0+QVJNX2Nwc3IgPSBVU1JfTU9ERTsJCQkJXAogCWVsc2UJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGE2NTQxM2IuLmYyY2QxOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMjA5LDkgKzIwOSwxMSBAQAogCXN0cnVjdCBtZW1iYW5rIGJhbmtbTlJfQkFOS1NdOwogfTsKIAorZXh0ZXJuIHN0cnVjdCBtZW1pbmZvIG1lbWluZm87CisKICNkZWZpbmUgZm9yX2VhY2hfbm9kZWJhbmsoaXRlcixtaSxubykJCQlcCi0JZm9yIChpdGVyID0gMDsgaXRlciA8IG1pLT5ucl9iYW5rczsgaXRlcisrKQlcCi0JCWlmIChtaS0+YmFua1tpdGVyXS5ub2RlID09IG5vKQorCWZvciAoaXRlciA9IDA7IGl0ZXIgPCAobWkpLT5ucl9iYW5rczsgaXRlcisrKQlcCisJCWlmICgobWkpLT5iYW5rW2l0ZXJdLm5vZGUgPT0gbm8pCiAKICNkZWZpbmUgYmFua19wZm5fc3RhcnQoYmFuaykJX19waHlzX3RvX3BmbigoYmFuayktPnN0YXJ0KQogI2RlZmluZSBiYW5rX3Bmbl9lbmQoYmFuaykJX19waHlzX3RvX3BmbigoYmFuayktPnN0YXJ0ICsgKGJhbmspLT5zaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA3MjdiNWMwLi5mYWQ3MGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTE0LDcgKzExNCw3IEBACiAvKgogICogU3RvcCBhIGxvY2FsIHRpbWVyIGludGVycnVwdC4KICAqLwotZXh0ZXJuIHZvaWQgbG9jYWxfdGltZXJfc3RvcCh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGxvY2FsX3RpbWVyX3N0b3Aodm9pZCk7CiAKIC8qCiAgKiBQbGF0Zm9ybSBwcm92aWRlcyB0aGlzIHRvIGFja25vd2xlZGdlIGEgbG9jYWwgdGltZXIgSVJRCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF90aW1lcl9zdG9wKHZvaWQpCiB7CiB9CiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogLyoKICAqIFNldHVwIGEgbG9jYWwgdGltZXIgaW50ZXJydXB0IGZvciBhIENQVS4KICAqLwotZXh0ZXJuIHZvaWQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdm9pZCBsb2NhbF90aW1lcl9zZXR1cCh2b2lkKTsKIAogLyoKICAqIHNob3cgbG9jYWwgaW50ZXJydXB0IGluZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N0cmluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggZTUwYzRhMy4uY2Y0ZjNhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RyaW5nLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ0hSCiBleHRlcm4gdm9pZCAqIG1lbWNocihjb25zdCB2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTsKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1aRVJPCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAogZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CiAKQEAgLTM5LDEyICszOCw0IEBACiAJCShfX3ApOwkJCQkJCQlcCiAJfSkKIAotI2RlZmluZSBtZW16ZXJvKHAsbikgCQkJCQkJCVwKLQkoeyAJCQkJCQkJCVwKLQkgCXZvaWQgKl9fcCA9IChwKTsgc2l6ZV90IF9fbiA9IG47CQkJXAotCSAJaWYgKChfX24pICE9IDApIAkJCQkJXAotCSAJCV9fbWVtemVybygoX19wKSwoX19uKSk7IAkJCVwKLQkgCShfX3ApOyAJCQkJCQkJXAotCSB9KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggNTY4MDIwYi4uODExYmU1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTMsOCArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0KICNkZWZpbmUgQ1BVX0FSQ0hfVU5LTk9XTgkwCiAjZGVmaW5lIENQVV9BUkNIX0FSTXYzCQkxCiAjZGVmaW5lIENQVV9BUkNIX0FSTXY0CQkyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggZTk4ZWM2MC4uNzg5NzQ2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTEsNyArMTEsOCBAQAogLyoKICAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgpAQCAtNDAwLDcgKzQwMSw3IEBACiAJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJvbSwgbikpCiAJCW4gPSBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKIAllbHNlIC8qIHNlY3VyaXR5IGhvbGUgLSBwbHVnIGl0ICovCi0JCW1lbXplcm8odG8sIG4pOworCQltZW1zZXQodG8sIDAsIG4pOwogCXJldHVybiBuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCmluZGV4IDIzYWYzYzkuLjUzMWUxODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCkBAIC04LDYgKzgsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jCmluZGV4IDZjOTA0NzkuLmM2Mzg0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBydW4gZnJvbSBrc3RvcF9tYWNoaW5lICovCisvKiBydW4gZnJvbSBmdHJhY2VfaW5pdCB3aXRoIGlycXMgZGlzYWJsZWQgKi8KIGludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKIHsKIAlmdHJhY2VfbWNvdW50X3NldChkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKaW5kZXggYmRlNTJkZi4uOTkxOTUyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKQEAgLTE4LDcgKzE4LDcgQEAKIF9fc3dpdGNoX2RhdGE6CiAJLmxvbmcJX19tbWFwX3N3aXRjaGVkCiAJLmxvbmcJX19kYXRhX2xvYwkJCUAgcjQKLQkubG9uZwlfX2RhdGFfc3RhcnQJCQlAIHI1CisJLmxvbmcJX2RhdGEJCQkJQCByNQogCS5sb25nCV9fYnNzX3N0YXJ0CQkJQCByNgogCS5sb25nCV9lbmQJCQkJQCByNwogCS5sb25nCXByb2Nlc3Nvcl9pZAkJCUAgcjQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwppbmRleCBiOGQ5NjVkLi5kYWI0OGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKIC8qCkBAIC0yOSw5ICszMCw4IEBACiAgKiBNT0RVTEVTX1ZBRERSIGlzIHJlZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gYXNtL21lbW9yeS5oIHRvIGF2b2lkCiAgKiByZWNvbXBpbGluZyB0aGUgd2hvbGUga2VybmVsIHdoZW4gQ09ORklHX1hJUF9LRVJORUwgaXMgdHVybmVkIG9uL29mZi4KICAqLwotZXh0ZXJuIHZvaWQgX2V0ZXh0OwogI3VuZGVmIE1PRFVMRVNfVkFERFIKLSNkZWZpbmUgTU9EVUxFU19WQUREUgkoKCh1bnNpZ25lZCBsb25nKSZfZXRleHQgKyB+UEdESVJfTUFTSykgJiBQR0RJUl9NQVNLKQorI2RlZmluZSBNT0RVTEVTX1ZBRERSCSgoKHVuc2lnbmVkIGxvbmcpX2V0ZXh0ICsgflBHRElSX01BU0spICYgUEdESVJfTUFTSykKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCAxZjFlZWNjLi43MDQ5ODE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTU5LDkgKzYwLDggQEAKIF9fc2V0dXAoImZwZT0iLCBmcGVfc2V0dXApOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHN0cnVjdCBtZW1pbmZvICosIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MpOworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYyk7CiBleHRlcm4gdm9pZCByZWJvb3Rfc2V0dXAoY2hhciAqc3RyKTsKLWV4dGVybiB2b2lkIF90ZXh0LCBfZXRleHQsIF9fZGF0YV9zdGFydCwgX2VkYXRhLCBfZW5kOwogCiB1bnNpZ25lZCBpbnQgcHJvY2Vzc29yX2lkOwogRVhQT1JUX1NZTUJPTChwcm9jZXNzb3JfaWQpOwpAQCAtMTEyLDcgKzExMiw2IEBACiBjaGFyIGVsZl9wbGF0Zm9ybVtFTEZfUExBVEZPUk1fU0laRV07CiBFWFBPUlRfU1lNQk9MKGVsZl9wbGF0Zm9ybSk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWVtaW5mbyBtZW1pbmZvIF9faW5pdGRhdGEgPSB7IDAsIH07CiBzdGF0aWMgY29uc3QgY2hhciAqY3B1X25hbWU7CiBzdGF0aWMgY29uc3QgY2hhciAqbWFjaGluZV9uYW1lOwogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBjb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwpAQCAtMzY3LDIxICszNjYsMzQgQEAKIAlyZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFybV9hZGRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbnQgX19pbml0IGFybV9hZGRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlzdHJ1Y3QgbWVtYmFuayAqYmFuazsKKwlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtZW1pbmZvLmJhbmtbbWVtaW5mby5ucl9iYW5rc107CisKKwlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgeworCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCisJCQkiaWdub3JpbmcgbWVtb3J5IGF0ICUjbHhcbiIsIHN0YXJ0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCBzdGFydC9zaXplIGFyZSBhbGlnbmVkIHRvIGEgcGFnZSBib3VuZGFyeS4KIAkgKiBTaXplIGlzIGFwcHJvcHJpYXRlbHkgcm91bmRlZCBkb3duLCBzdGFydCBpcyByb3VuZGVkIHVwLgogCSAqLwogCXNpemUgLT0gc3RhcnQgJiB+UEFHRV9NQVNLOwotCi0JYmFuayA9ICZtZW1pbmZvLmJhbmtbbWVtaW5mby5ucl9iYW5rcysrXTsKLQogCWJhbmstPnN0YXJ0ID0gUEFHRV9BTElHTihzdGFydCk7CiAJYmFuay0+c2l6ZSAgPSBzaXplICYgUEFHRV9NQVNLOwogCWJhbmstPm5vZGUgID0gUEhZU19UT19OSUQoc3RhcnQpOworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHJlZ2lvbiBoYXMgbm9uLXplcm8gc2l6ZSBvcgorCSAqIGludmFsaWQgbm9kZSBudW1iZXIuCisJICovCisJaWYgKGJhbmstPnNpemUgPT0gMCB8fCBiYW5rLT5ub2RlID49IE1BWF9OVU1OT0RFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1pbmZvLm5yX2JhbmtzKys7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00NzIsMTAgKzQ4NCwxMCBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpOwogCi0Ja2VybmVsX2NvZGUuc3RhcnQgICA9IHZpcnRfdG9fcGh5cygmX3RleHQpOwotCWtlcm5lbF9jb2RlLmVuZCAgICAgPSB2aXJ0X3RvX3BoeXMoJl9ldGV4dCAtIDEpOwotCWtlcm5lbF9kYXRhLnN0YXJ0ICAgPSB2aXJ0X3RvX3BoeXMoJl9fZGF0YV9zdGFydCk7Ci0Ja2VybmVsX2RhdGEuZW5kICAgICA9IHZpcnRfdG9fcGh5cygmX2VuZCAtIDEpOworCWtlcm5lbF9jb2RlLnN0YXJ0ICAgPSB2aXJ0X3RvX3BoeXMoX3RleHQpOworCWtlcm5lbF9jb2RlLmVuZCAgICAgPSB2aXJ0X3RvX3BoeXMoX2V0ZXh0IC0gMSk7CisJa2VybmVsX2RhdGEuc3RhcnQgICA9IHZpcnRfdG9fcGh5cyhfZGF0YSk7CisJa2VybmVsX2RhdGEuZW5kICAgICA9IHZpcnRfdG9fcGh5cyhfZW5kIC0gMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2JhbmtzOyBpKyspIHsKIAkJaWYgKG1pLT5iYW5rW2ldLnNpemUgPT0gMCkKQEAgLTUzOSwxNCArNTUxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX21lbTMyKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKIHsKLQlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSWdub3JpbmcgbWVtb3J5IGJhbmsgMHglMDh4IHNpemUgJWRLQlxuIiwKLQkJCXRhZy0+dS5tZW0uc3RhcnQsIHRhZy0+dS5tZW0uc2l6ZSAvIDEwMjQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JYXJtX2FkZF9tZW1vcnkodGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gYXJtX2FkZF9tZW1vcnkodGFnLT51Lm1lbS5zdGFydCwgdGFnLT51Lm1lbS5zaXplKTsKIH0KIAogX190YWd0YWJsZShBVEFHX01FTSwgcGFyc2VfdGFnX21lbTMyKTsKQEAgLTcxMCwxNSArNzE1LDE1IEBACiAJCXBhcnNlX3RhZ3ModGFncyk7CiAJfQogCi0JaW5pdF9tbS5zdGFydF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dDsKLQlpbml0X21tLmVuZF9jb2RlICAgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKLQlpbml0X21tLmVuZF9kYXRhICAgPSAodW5zaWduZWQgbG9uZykgJl9lZGF0YTsKLQlpbml0X21tLmJyawkgICA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKKwlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3RleHQ7CisJaW5pdF9tbS5lbmRfY29kZSAgID0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhICAgPSAodW5zaWduZWQgbG9uZykgX2VkYXRhOworCWluaXRfbW0uYnJrCSAgID0gKHVuc2lnbmVkIGxvbmcpIF9lbmQ7CiAKIAltZW1jcHkoYm9vdF9jb21tYW5kX2xpbmUsIGZyb20sIENPTU1BTkRfTElORV9TSVpFKTsKIAlib290X2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7CiAJcGFyc2VfY21kbGluZShjbWRsaW5lX3AsIGZyb20pOwotCXBhZ2luZ19pbml0KCZtZW1pbmZvLCBtZGVzYyk7CisJcGFnaW5nX2luaXQobWRlc2MpOwogCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCZtZW1pbmZvLCBtZGVzYyk7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC03NzIsNiArNzc3LDggQEAKIAkiamF2YSIsCiAJIml3bW14dCIsCiAJImNydW5jaCIsCisJInRodW1iZWUiLAorCSJuZW9uIiwKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggZTQyYTc0OS4uMDE5MjM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJLyoKIAkgKiBTdG9wIHRoZSBsb2NhbCB0aW1lciBmb3IgdGhpcyBDUFUuCiAJICovCi0JbG9jYWxfdGltZXJfc3RvcChjcHUpOworCWxvY2FsX3RpbWVyX3N0b3AoKTsKIAogCS8qCiAJICogRmx1c2ggdXNlciBjYWNoZSBhbmQgVExCIG1hcHBpbmdzLCBhbmQgdGhlbiByZW1vdmUgdGhpcyBDUFUKQEAgLTI4NCw3ICsyODQsNyBAQAogCS8qCiAJICogU2V0dXAgbG9jYWwgdGltZXIgZm9yIHRoaXMgQ1BVLgogCSAqLwotCWxvY2FsX3RpbWVyX3NldHVwKGNwdSk7CisJbG9jYWxfdGltZXJfc2V0dXAoKTsKIAogCWNhbGlicmF0ZV9kZWxheSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGh1bWJlZS5jIGIvYXJjaC9hcm0va2VybmVsL3RodW1iZWUuYwppbmRleCBkZjNmNmI3Li45Y2I3YWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGh1bWJlZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aHVtYmVlLmMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qCiAgKiBBY2Nlc3MgdG8gdGhlIFRodW1iRUUgSGFuZGxlciBCYXNlIHJlZ2lzdGVyCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0ZWVoYnJfcmVhZCgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGVlaGJyX3JlYWQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHY7CiAJYXNtKCJtcmMJcDE0LCA2LCAlMCwgYzEsIGMwLCAwXG4iIDogIj1yIiAodikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0ODk4YmRjLi4wMDIxNjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTE5LDcgKzExOSw3IEBACiAjZW5kaWYKIAogCS5kYXRhIDogQVQoX19kYXRhX2xvYykgewotCQlfX2RhdGFfc3RhcnQgPSAuOwkvKiBhZGRyZXNzIGluIG1lbW9yeSAqLworCQlfZGF0YSA9IC47CQkvKiBhZGRyZXNzIGluIG1lbW9yeSAqLwogCiAJCS8qCiAJCSAqIGZpcnN0LCB0aGUgaW5pdCB0YXNrIHVuaW9uLCBhbGlnbmVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvTWFrZWZpbGUgYi9hcmNoL2FybS9saWIvTWFrZWZpbGUKaW5kZXggMzAzNTFjZDQuLjg2NmY4NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9saWIvTWFrZWZpbGUKQEAgLTM4LDcgKzM4LDYgQEAKIGVuZGlmCiAKIGxpYi0kKENPTkZJR19BUkNIX1JQQykJCSs9IGVjYXJkLm8gaW8tYWNvcm4ubyBmbG9wcHlkbWEubwotbGliLSQoQ09ORklHX0FSQ0hfQ0xQUzc1MDApCSs9IGlvLWFjb3JuLm8KIGxpYi0kKENPTkZJR19BUkNIX0w3MjAwKQkrPSBpby1hY29ybi5vCiBsaWItJChDT05GSUdfQVJDSF9TSEFSSykJKz0gaW8tc2hhcmsubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvbWVtc2V0LlMgYi9hcmNoL2FybS9saWIvbWVtc2V0LlMKaW5kZXggNzYxZWVmYS4uNjUwZDU5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL21lbXNldC5TCisrKyBiL2FyY2gvYXJtL2xpYi9tZW1zZXQuUwpAQCAtMjUsNyArMjUsNyBAQAogCWFkZAlyMiwgcjIsIHIzCQlAIDEgKHIyID0gcjIgLSAoNCAtIHIzKSkKIC8qCiAgKiBUaGUgcG9pbnRlciBpcyBub3cgYWxpZ25lZCBhbmQgdGhlIGxlbmd0aCBpcyBhZGp1c3RlZC4gIFRyeSBkb2luZyB0aGUKLSAqIG1lbXplcm8gYWdhaW4uCisgKiBtZW1zZXQgYWdhaW4uCiAgKi8KIAogRU5UUlkobWVtc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvTWFrZWZpbGUKaW5kZXggYThlNDYyZi4uMjBlYzgzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0IChtdXN0IGJlIGxpbmtlZCBiZWZvcmUgYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCkKLW9iai15ICs9IGNvcmUubyBjbG9jay5vCitvYmoteSArPSBjb3JlLm8KIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BQUVEMjAwMCkgKz0gYWFlZDIwMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTBlZTE1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jbG9jay5jCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBOaWNvbGFzIEJlbGxpZG8gWSBPcnRlZ2EKLSAqCi0gKiAgQmFzZWQgb24gbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgImNsb2NrLmgiCi0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKLQotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQotewotCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCWNsayA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLQotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKLQotdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnJhdGU7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7Ci0KLWxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JcmV0dXJuIHJhdGU7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKLQotaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7Ci0KLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9kZWwoJmNsay0+bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiYjc0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2Nsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY2xvY2suaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTmljb2xhcyBCZWxsaWRvIFkgT3J0ZWdhCi0gKgotICogIEJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotc3RydWN0IG1vZHVsZTsKLQotc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0Jc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIJCSpuYW1lOwotCXZvaWQJCQkqZGF0YTsKLX07Ci0KLWludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jb3JlLmMKaW5kZXggZGZiMjZiYy4uNTBlMTM5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jb3JlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJjbG9jay5oIgogCiAvKgogICogQ29tbW9uIEkvTyBtYXBwaW5nOgpAQCAtMjI5LDkgKzIyOSwyOCBAQAogCSZjbGNkX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFhZWMyMDAwX2NsY2RfY2xrID0gewotCS5uYW1lID0gIkNMQ0RDTEsiLAotfTsKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiAwOworfQorCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gZGV2ICYmIHN0cmNtcChkZXZfbmFtZShkZXYpLCAibWI6MTYiKSA9PSAwID8gTlVMTCA6IEVSUl9QVFIoLUVOT0VOVCk7Cit9CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CiAKIHZvaWQgX19pbml0IGFhZWMyMDAwX3NldF9jbGNkX3BsYXRfZGF0YShzdHJ1Y3QgYWFlYzIwMDBfY2xjZF9pbmZvICpjbGNkKQogewpAQCAtMjY1LDggKzI4NCw2IEBACiB7CiAJaW50IGk7CiAKLQljbGtfcmVnaXN0ZXIoJmFhZWMyMDAwX2NsY2RfY2xrKTsKLQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CiAJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZpb21lbV9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGE4NDZjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNSBOaWNvbGFzIEJlbGxpZG8gWSBPcnRlZ2EKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBjODdjMjRkZS4uYWI0ZmU1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9pby5oCkBAIC02LDE1ICs2LDEzIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAogLyoKICAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcmVhbCBJU0Egbm9yIFBDSSBidXNlcywgYnV0IHRoZXJlIGlzIHNvIG1hbnkKICAqIGRyaXZlcnMgb3V0IHRoZXJlIHRoYXQgbWlnaHQganVzdCB3b3JrIGlmIHdlIGZha2UgdGhlbS4uLgogICovCi0jZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA1NmFlOTAwLi5jMDA4MjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTQsOSArMTQsNiBAQAogCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4ZjAwMDAwMDApCiAKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KIC8qCiAgKiBUaGUgbm9kZXMgYXJlIHRoZSBmb2xsb3dpbmdzOgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggNWFhZmIyZS4uMzIzYjQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTcsMzYgKzcsNDMgQEAKIAogY29uZmlnIEFSQ0hfQVQ5MVJNOTIwMAogCWJvb2wgIkFUOTFSTTkyMDAiCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKIGNvbmZpZyBBUkNIX0FUOTFTQU05MjYwCiAJYm9vbCAiQVQ5MVNBTTkyNjAgb3IgQVQ5MVNBTTlYRSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjEKIAlib29sICJBVDkxU0FNOTI2MSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjMKIAlib29sICJBVDkxU0FNOTI2MyIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfQVQ5MVNBTTlSTAogCWJvb2wgIkFUOTFTQU05UkwiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKIGNvbmZpZyBBUkNIX0FUOTFTQU05RzIwCiAJYm9vbCAiQVQ5MVNBTTlHMjAiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKIGNvbmZpZyBBUkNIX0FUOTFDQVA5CiAJYm9vbCAiQVQ5MUNBUDkiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKQEAgLTIzNSw2ICsyNDIsMTIgQEAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBDYWxhbyBTeXN0ZW1zIFVTQi1BOTI2My4KIAkgIDxodHRwOi8vd3d3LmNhbGFvLXN5c3RlbXMuY29tPgogCitjb25maWcgTUFDSF9ORU9DT1JFOTI2CisJYm9vbCAiQWRlbmVvIE5FT0NPUkU5MjYiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05MjYzCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgorCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwMiw3ICszMTUsNyBAQAogCiBjb25maWcgTVREX0FUOTFfREFUQUZMQVNIX0NBUkQKIAlib29sICJFbmFibGUgRGF0YUZsYXNoIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9FQ0JBVDkxIHx8IE1BQ0hfU0FNOV9MOTI2MCB8fCBNQUNIX0FUOTFDQVA5QURLKQorCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMERLIHx8IE1BQ0hfQVQ5MVJNOTIwMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjBFSyB8fCBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0VDQkFUOTEgfHwgTUFDSF9TQU05X0w5MjYwIHx8IE1BQ0hfQVQ5MUNBUDlBREsgfHwgTUFDSF9ORU9DT1JFOTI2KQogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRGF0YUZsYXNoIGNhcmQuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBjY2E2MTJkLi5jNjlmZjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xMSwxMiArMTEsMTIgQEAKIAogIyBDUFUtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkJKz0gYXQ5MXJtOTIwMC5vIGF0OTFybTkyMDBfdGltZS5vIGF0OTFybTkyMDBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkJKz0gYXQ5MXNhbTkyNjEubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjFfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykJKz0gYXQ5MXNhbTkyNjMubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjNfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQkrPSBhdDkxc2FtOXJsLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05cmxfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vCi1vYmotJChDT05GSUdfQVJDSF9BVDkxQ0FQOSkJKz0gYXQ5MWNhcDkubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MWNhcDlfZGV2aWNlcy5vCitvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQkrPSBhdDkxc2FtOTI2MS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MV9kZXZpY2VzLm8gc2FtOV9zbWMubworb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpCSs9IGF0OTFzYW05MjYzLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05MjYzX2RldmljZXMubyBzYW05X3NtYy5vCitvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQkrPSBhdDkxc2FtOXJsLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05cmxfZGV2aWNlcy5vIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUOTFTQU05RzIwKQkrPSBhdDkxc2FtOTI2MC5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MF9kZXZpY2VzLm8gIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUOTFDQVA5KQkrPSBhdDkxY2FwOS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxY2FwOV9kZXZpY2VzLm8gc2FtOV9zbWMubwogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVg0MCkJKz0gYXQ5MXg0MC5vIGF0OTF4NDBfdGltZS5vCiAKICMgQVQ5MVJNOTIwMCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CkBAIC00Nyw2ICs0Nyw3IEBACiAjIEFUOTFTQU05MjYzIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05MjYzRUspICs9IGJvYXJkLXNhbTkyNjNlay5vCiBvYmotJChDT05GSUdfTUFDSF9VU0JfQTkyNjMpCSs9IGJvYXJkLXVzYi1hOTI2My5vCitvYmotJChDT05GSUdfTUFDSF9ORU9DT1JFOTI2KQkrPSBib2FyZC1uZW9jb3JlOTI2Lm8KIAogIyBBVDkxU0FNOVJMIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05UkxFSykJKz0gYm9hcmQtc2FtOXJsZWsubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDkuYwppbmRleCAwZmMwYWRhLi4wYTM4YzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDkuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDkuYwpAQCAtMTcsNiArMTcsOCBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CkBAIC0zMTcsNiArMzE5LDEyIEBACiAKIAkvKiBSZWdpc3RlciBHUElPIHN1YnN5c3RlbSAqLwogCWF0OTFfZ3Bpb19pbml0KGF0OTFjYXA5X2dwaW8sIDQpOworCisJLyogUmVtZW1iZXIgdGhlIHNpbGljb24gcmV2aXNpb24gKi8KKwlpZiAoY3B1X2lzX2F0OTFjYXA5X3JldkIoKSkKKwkJc3lzdGVtX3JldiA9IDB4QjsKKwllbHNlIGlmIChjcHVfaXNfYXQ5MWNhcDlfcmV2QygpKQorCQlzeXN0ZW1fcmV2ID0gMHhDOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKaW5kZXggNWViZDQyNy4uOWVjYTIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKi8KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMjEsNiArMjIsNyBAQAogI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MWNhcDkuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5X21hdHJpeC5oPgpAQCAtNjksNiArNzEsOSBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuOwogCisJaWYgKGNwdV9pc19hdDkxY2FwOV9yZXZCKCkpCisJCXNldF9pcnFfdHlwZShBVDkxQ0FQOV9JRF9VSFAsIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCiAJLyogRW5hYmxlIFZCdXMgY29udHJvbCBmb3IgVUhQIHBvcnRzICovCiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPnBvcnRzOyBpKyspIHsKIAkJaWYgKGRhdGEtPnZidXNfcGluW2ldKQpAQCAtMTUxLDggKzE1NiwxMyBAQAogCiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiYShzdHJ1Y3QgdXNiYV9wbGF0Zm9ybV9kYXRhICpkYXRhKQogewotCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX1VEUEhTLCBBVDkxX01BVFJJWF9TRUxFQ1RfVURQSFMgfAotCQkJCQkgIEFUOTFfTUFUUklYX1VEUEhTX0JZUEFTU19MT0NLKTsKKwlpZiAoY3B1X2lzX2F0OTFjYXA5X3JldkIoKSkgeworCQlzZXRfaXJxX3R5cGUoQVQ5MUNBUDlfSURfVURQSFMsIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCQlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9VRFBIUywgQVQ5MV9NQVRSSVhfU0VMRUNUX1VEUEhTIHwKKwkJCQkJCSAgQVQ5MV9NQVRSSVhfVURQSFNfQllQQVNTX0xPQ0spOworCX0KKwllbHNlCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX1VEUEhTLCBBVDkxX01BVFJJWF9TRUxFQ1RfVURQSFMpOwogCiAJLyoKIAkgKiBJbnZhbGlkIHBpbnMgYXJlIDAgb24gQVQ5MSwgYnV0IHRoZSB1c2JhIGRyaXZlciBpcyBzaGFyZWQKQEAgLTQwNiwyOCArNDE2LDEzIEBACiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjc2EsIG1vZGU7CisJdW5zaWduZWQgbG9uZyBjc2E7CiAKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAogCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKLQlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0VCSV9DUzNBX1NNQ19TTUFSVE1FRElBIHwgQVQ5MV9NQVRSSVhfRUJJX1ZERElPTVNFTF8zXzNWKTsKLQotCS8qIHNldCB0aGUgYnVzIGludGVyZmFjZSBjaGFyYWN0ZXJpc3RpY3MgKi8KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgzKSwgQVQ5MV9TTUNfTldFU0VUVVBfKDIpIHwgQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKDEpCi0JCQl8IEFUOTFfU01DX05SRFNFVFVQXygyKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygxKSk7Ci0KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwgQVQ5MV9TTUNfTldFUFVMU0VfKDQpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDYpCi0JCQl8IEFUOTFfU01DX05SRFBVTFNFXyg0KSB8IEFUOTFfU01DX05DU19SRFBVTFNFXyg2KSk7Ci0KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDgpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDgpKTsKLQotCWlmIChkYXRhLT5idXNfd2lkdGhfMTYpCi0JCW1vZGUgPSBBVDkxX1NNQ19EQldfMTY7Ci0JZWxzZQotCQltb2RlID0gQVQ5MV9TTUNfREJXXzg7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgzKSwgbW9kZSB8IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX1RERl8oMSkpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEpOwogCiAJLyogZW5hYmxlIHBpbiAqLwogCWlmIChkYXRhLT5lbmFibGVfcGluKQpAQCAtODY1LDYgKzg2MCw5IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CiAKKwlpZiAoY3B1X2lzX2F0OTFjYXA5X3JldkIoKSkKKwkJc2V0X2lycV90eXBlKEFUOTFDQVA5X0lEX0xDREMsIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCiAJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogTENESFNZTkMgKi8KIAlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIsIDApOwkvKiBMQ0RET1RDSyAqLwogCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMywgMCk7CS8qIExDRERFTiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCmluZGV4IGE3MmU3OTguLmQxNDBlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKQEAgLTE0MSw2ICsxNDEsMTUgQEAKIAkvKiBVc2UgInJhdyIgcHJpbWl0aXZlcyBzbyB3ZSBiZWhhdmUgY29ycmVjdGx5IG9uIFJUIGtlcm5lbHMuICovCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAorCS8qCisJICogQWNjb3JkaW5nIHRvIFRob21hcyBHbGVpeG5lciBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkIGhlcmUuICBTaW1wbHkKKwkgKiByZW1vdmluZyByYXdfbG9jYWxfaXJxX3NhdmUgYWJvdmUgKGFuZCB0aGUgbWF0Y2hpbmcKKwkgKiByYXdfbG9jYWxfaXJxX3Jlc3RvcmUpIHdhcyBub3QgYWNjZXB0ZWQuICBTZWUKKwkgKiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5wb3J0cy5hcm0ua2VybmVsLzQxMTc0CisJICogU28gZm9yIG5vdyAoMjAwOC0xMS0yMCkganVzdCB3YXJuIG9uY2UgaWYgaXJxcyB3ZXJlIG5vdCBkaXNhYmxlZCAuLi4KKwkgKi8KKwlXQVJOX09OX09OQ0UoIXJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSk7CisKIAkvKiBUaGUgYWxhcm0gSVJRIHVzZXMgYWJzb2x1dGUgdGltZSAobm93K2RlbHRhKSwgbm90IHRoZSByZWxhdGl2ZQogCSAqIHRpbWUgKGRlbHRhKSBpbiBvdXIgY2FsbGluZyBjb252ZW50aW9uLiAgTGlrZSBhbGwgY2xvY2tldmVudHMKIAkgKiB1c2luZyBzdWNoICJtYXRjaCIgaGFyZHdhcmUsIHdlIGhhdmUgYSByYWNlIHRvIGRlZmVuZCBhZ2FpbnN0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggNzc3NGQxNy4uZmRkZTFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIGNzYSwgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGNzYTsKIAogCWlmICghZGF0YSkKIAkJcmV0dXJuOwpAQCAtMzIxLDQyICszMjEsNiBAQAogCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOwogCi0JaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpKSB7Ci0JCS8qIFRpbWluZyBmb3Igc2FtOTI2MCAqLwotCQkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKDMpLCBBVDkxX1NNQ19OV0VTRVRVUF8oMSkgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMCkKLQkJCQl8IEFUOTFfU01DX05SRFNFVFVQXygxKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7Ci0KLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoMyksIEFUOTFfU01DX05XRVBVTFNFXygzKSB8IEFUOTFfU01DX05DU19XUlBVTFNFXygzKQotCQkJCXwgQVQ5MV9TTUNfTlJEUFVMU0VfKDMpIHwgQVQ5MV9TTUNfTkNTX1JEUFVMU0VfKDMpKTsKLQotCQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDUpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDUpKTsKLQotCQlpZiAoZGF0YS0+YnVzX3dpZHRoXzE2KQotCQkJbW9kZSA9IEFUOTFfU01DX0RCV18xNjsKLQkJZWxzZQotCQkJbW9kZSA9IEFUOTFfU01DX0RCV184OwotCQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKDMpLCBtb2RlIHwgQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfVERGXygyKSk7Ci0JfQotCi0JaWYgKGNwdV9pc19hdDkxc2FtOWcyMCgpKSB7Ci0JCS8qIFRpbWluZyBmb3Igc2FtOWcyMCAqLwotCQkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKDMpLCBBVDkxX1NNQ19OV0VTRVRVUF8oMikgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMCkKLQkJCQl8IEFUOTFfU01DX05SRFNFVFVQXygyKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7Ci0KLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoMyksIEFUOTFfU01DX05XRVBVTFNFXyg0KSB8IEFUOTFfU01DX05DU19XUlBVTFNFXyg0KQotCQkJCXwgQVQ5MV9TTUNfTlJEUFVMU0VfKDQpIHwgQVQ5MV9TTUNfTkNTX1JEUFVMU0VfKDQpKTsKLQotCQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDcpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDcpKTsKLQotCQlpZiAoZGF0YS0+YnVzX3dpZHRoXzE2KQotCQkJbW9kZSA9IEFUOTFfU01DX0RCV18xNjsKLQkJZWxzZQotCQkJbW9kZSA9IEFUOTFfU01DX0RCV184OwotCQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKDMpLCBtb2RlIHwgQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfVERGXygzKSk7Ci0JfQotCiAJLyogZW5hYmxlIHBpbiAqLwogCWlmIChkYXRhLT5lbmFibGVfcGluKQogCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCmluZGV4IDZiODkxNzIuLjE3Mjg5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjc2EsIG1vZGU7CisJdW5zaWduZWQgbG9uZyBjc2E7CiAKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTIzMSwyMSArMjMxLDYgQEAKIAljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKIAotCS8qIHNldCB0aGUgYnVzIGludGVyZmFjZSBjaGFyYWN0ZXJpc3RpY3MgKi8KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgzKSwgQVQ5MV9TTUNfTldFU0VUVVBfKDEpIHwgQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKDApCi0JCQl8IEFUOTFfU01DX05SRFNFVFVQXygxKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7Ci0KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwgQVQ5MV9TTUNfTldFUFVMU0VfKDMpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDMpCi0JCQl8IEFUOTFfU01DX05SRFBVTFNFXygzKSB8IEFUOTFfU01DX05DU19SRFBVTFNFXygzKSk7Ci0KLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDUpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDUpKTsKLQotCWlmIChkYXRhLT5idXNfd2lkdGhfMTYpCi0JCW1vZGUgPSBBVDkxX1NNQ19EQldfMTY7Ci0JZWxzZQotCQltb2RlID0gQVQ5MV9TTUNfREJXXzg7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgzKSwgbW9kZSB8IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX1RERl8oMikpOwotCiAJLyogZW5hYmxlIHBpbiAqLwogCWlmIChkYXRhLT5lbmFibGVfcGluKQogCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCmluZGV4IDhiODg0MDguLmI3NTNjYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjc2EsIG1vZGU7CisJdW5zaWduZWQgbG9uZyBjc2E7CiAKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTM5MCwyMSArMzkwLDYgQEAKIAljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSTBDU0EpOwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSTBDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0VCSTBfQ1MzQV9TTUNfU01BUlRNRURJQSk7CiAKLQkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoMyksIEFUOTFfU01DX05XRVNFVFVQXygxKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKQotCQkJfCBBVDkxX1NNQ19OUkRTRVRVUF8oMSkgfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oMCkpOwotCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoMyksIEFUOTFfU01DX05XRVBVTFNFXygzKSB8IEFUOTFfU01DX05DU19XUlBVTFNFXygzKQotCQkJfCBBVDkxX1NNQ19OUkRQVUxTRV8oMykgfCBBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oMykpOwotCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMyksIEFUOTFfU01DX05XRUNZQ0xFXyg1KSB8IEFUOTFfU01DX05SRENZQ0xFXyg1KSk7Ci0KLQlpZiAoZGF0YS0+YnVzX3dpZHRoXzE2KQotCQltb2RlID0gQVQ5MV9TTUNfREJXXzE2OwotCWVsc2UKLQkJbW9kZSA9IEFUOTFfU01DX0RCV184OwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX01PREUoMyksIG1vZGUgfCBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19UREZfKDIpKTsKLQogCS8qIGVuYWJsZSBwaW4gKi8KIAlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKIAkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKaW5kZXggODdkZWIxZS4uMTQ1MzI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpAQCAtMjMyLDE3ICsyMzIsNiBAQAogCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01DX1NNQVJUTUVESUEpOwogCi0JLyogc2V0IHRoZSBidXMgaW50ZXJmYWNlIGNoYXJhY3RlcmlzdGljcyAqLwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKDMpLCBBVDkxX1NNQ19OV0VTRVRVUF8oMSkgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMCkKLQkJCXwgQVQ5MV9TTUNfTlJEU0VUVVBfKDEpIHwgQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKDApKTsKLQotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKDMpLCBBVDkxX1NNQ19OV0VQVUxTRV8oMykgfCBBVDkxX1NNQ19OQ1NfV1JQVUxTRV8oMykKLQkJCXwgQVQ5MV9TTUNfTlJEUFVMU0VfKDMpIHwgQVQ5MV9TTUNfTkNTX1JEUFVMU0VfKDMpKTsKLQotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX0NZQ0xFKDMpLCBBVDkxX1NNQ19OV0VDWUNMRV8oNSkgfCBBVDkxX1NNQ19OUkRDWUNMRV8oNSkpOwotCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgzKSwgQVQ5MV9TTUNfREJXXzggfCBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19UREZfKDIpKTsKLQogCS8qIGVuYWJsZSBwaW4gKi8KIAlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKIAkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FtNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jCmluZGV4IGNkZGRjYTUuLmQzYmEyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jCkBAIC0zOSw3ICszOSw5IEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KIAorI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKQEAgLTE1MSw2ICsxNTMsMzIgQEAKIAkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGNhbTYwX25hbmRfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDMsCisJLm5yZF9wdWxzZQkJPSAzLAorCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAorCS5ud2VfcHVsc2UJCT0gMywKKworCS5yZWFkX2N5Y2xlCQk9IDUsCisJLndyaXRlX2N5Y2xlCQk9IDUsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYW02MF9hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmNhbTYwX25hbmRfc21jX2NvbmZpZyk7CisKKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmY2FtNjBfbmFuZF9kYXRhKTsKK30KKwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2FtNjBfYm9hcmRfaW5pdCh2b2lkKQogewpAQCAtMTY1LDcgKzE5Myw3IEBACiAJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIxOCwgMSk7CiAJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNhbTYwX3VzYmhfZGF0YSk7CiAJLyogTkFORCAqLwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjYW02MF9uYW5kX2RhdGEpOworCWNhbTYwX2FkZF9kZXZpY2VfbmFuZCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENBTTYwLCAiS3dpa0J5dGUgQ0FNNjAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKaW5kZXggMjAxYjg5My4uODNhMWEwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCkBAIC0zNiwxNyArMzYsMTYgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxY2FwOV9tYXRyaXguaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgogCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIApAQCAtMTk1LDYgKzE5NCw0MyBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGNhcDlhZGtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMSwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNiwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDYsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gOCwKKwkud3JpdGVfY3ljbGUJCT0gOCwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYXA5YWRrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfRUJJX1ZERElPTVNFTF8zXzNWKTsKKworCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KKwlpZiAoY2FwOWFka19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2KQorCQljYXA5YWRrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWNhcDlhZGtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7CisKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmNhcDlhZGtfbmFuZF9zbWNfY29uZmlnKTsKKworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjYXA5YWRrX25hbmRfZGF0YSk7Cit9CisKIAogLyoKICAqIE5PUiBmbGFzaApAQCAtMjM0LDYgKzI3MCwyNCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY2FwOWFka19ub3Jfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMiwKKwkubnJkX3NldHVwCQk9IDQsCisJLm5jc193cml0ZV9zZXR1cAk9IDIsCisJLm53ZV9zZXR1cAkJPSA0LAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDEwLAorCS5ucmRfcHVsc2UJCT0gOCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gMTAsCisJLm53ZV9wdWxzZQkJPSA4LAorCisJLnJlYWRfY3ljbGUJCT0gMTYsCisJLndyaXRlX2N5Y2xlCQk9IDE2LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0JBVF9XUklURSB8IEFUOTFfU01DX0RCV18xNiwKKwkudGRmX2N5Y2xlcwkJPSAxLAorfTsKKwogc3RhdGljIF9faW5pdCB2b2lkIGNhcDlhZGtfYWRkX2RldmljZV9ub3Iodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNzYTsKQEAgLTI0MSwxOCArMjk1LDggQEAKIAljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQklfVkRESU9NU0VMXzNfM1YpOwogCi0JLyogc2V0IHRoZSBidXMgaW50ZXJmYWNlIGNoYXJhY3RlcmlzdGljcyAqLwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKDApLCBBVDkxX1NNQ19OV0VTRVRVUF8oNCkgfCBBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oMikKLQkJCXwgQVQ5MV9TTUNfTlJEU0VUVVBfKDQpIHwgQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKDIpKTsKLQotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKDApLCBBVDkxX1NNQ19OV0VQVUxTRV8oOCkgfCBBVDkxX1NNQ19OQ1NfV1JQVUxTRV8oMTApCi0JCQl8IEFUOTFfU01DX05SRFBVTFNFXyg4KSB8IEFUOTFfU01DX05DU19SRFBVTFNFXygxMCkpOwotCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMCksIEFUOTFfU01DX05XRUNZQ0xFXygxNikgfCBBVDkxX1NNQ19OUkRDWUNMRV8oMTYpKTsKLQotCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX01PREUoMCksIEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCi0JCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKLQkJCXwgQVQ5MV9TTUNfREJXXzE2IHwgQVQ5MV9TTUNfVERGXygxKSk7CisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDAgKE5PUikgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMCwgJmNhcDlhZGtfbm9yX3NtY19jb25maWcpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYXA5YWRrX25vcl9mbGFzaCk7CiB9CkBAIC0zMzAsMTAgKzM3NCw4IEBACiAJLyogU2VyaWFsICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOwogCS8qIFVTQiBIb3N0ICovCi0Jc2V0X2lycV90eXBlKEFUOTFDQVA5X0lEX1VIUCwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJmNhcDlhZGtfdXNiaF9kYXRhKTsKIAkvKiBVU0IgSFMgKi8KLQlzZXRfaXJxX3R5cGUoQVQ5MUNBUDlfSURfVURQSFMsIElSUV9UWVBFX0xFVkVMX0hJR0gpOwogCWF0OTFfYWRkX2RldmljZV91c2JhKCZjYXA5YWRrX3VzYmFfdWRjX2RhdGEpOwogCS8qIFNQSSAqLwogCWF0OTFfYWRkX2RldmljZV9zcGkoY2FwOWFka19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShjYXA5YWRrX3NwaV9kZXZpY2VzKSk7CkBAIC0zNDQsMTMgKzM4NiwxMiBAQAogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY2FwOWFka19tYWNiX2RhdGEpOwogCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmY2FwOWFka19uYW5kX2RhdGEpOworCWNhcDlhZGtfYWRkX2RldmljZV9uYW5kKCk7CiAJLyogTk9SIEZsYXNoICovCiAJY2FwOWFka19hZGRfZGV2aWNlX25vcigpOwogCS8qIEkyQyAqLwogCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CiAJLyogTENEIENvbnRyb2xsZXIgKi8KLQlzZXRfaXJxX3R5cGUoQVQ5MUNBUDlfSURfTENEQywgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmNhcDlhZGtfbGNkY19kYXRhKTsKIAkvKiBBQzk3ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmNhcDlhZGtfYWM5N19kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTdiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQorICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwOCBBREVORU8uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IG5lb2NvcmU5MjZfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDIwIE1IeiBjcnlzdGFsICovCisJYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSgyMDAwMDAwMCk7CisKKwkvKiBER0JVIG9uIHR0eVMwLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydCgwLCAwLCAwKTsKKworCS8qIFVTQVJUMCBvbiB0dHlTMS4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYzX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfCBBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbmVvY29yZTkyNl9pbml0X2lycSh2b2lkKQoreworCWF0OTFzYW05MjYzX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKworCisvKgorICogVVNCIEhvc3QgcG9ydAorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgbmVvY29yZTkyNl91c2JoX2RhdGEgPSB7CisJLnBvcnRzCQk9IDIsCisJLnZidXNfcGluCT0geyBBVDkxX1BJTl9QQTI0LCBBVDkxX1BJTl9QQTIxIH0sCit9OworCisvKgorICogVVNCIERldmljZSBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIG5lb2NvcmU5MjZfdWRjX2RhdGEgPSB7CisJLnZidXNfcGluCT0gQVQ5MV9QSU5fUEEyNSwKKwkucHVsbHVwX3Bpbgk9IDAsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KK307CisKKworLyoKKyAqIEFEUzc4NDYgVG91Y2hzY3JlZW4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQorc3RhdGljIGludCBhZHM3ODQzX3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIWF0OTFfZ2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEExNSk7CS8qIFRvdWNoc2NyZWVuIFBFTklSUSAqLworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NDMsCisJLnhfbWluCQkJPSAxNTAsCisJLnhfbWF4CQkJPSAzODMwLAorCS55X21pbgkJCT0gMTkwLAorCS55X21heAkJCT0gMzgzMCwKKwkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKKwkueF9wbGF0ZV9vaG1zCQk9IDQ1MCwKKwkueV9wbGF0ZV9vaG1zCQk9IDI1MCwKKwkucHJlc3N1cmVfbWF4CQk9IDE1MDAwLAorCS5kZWJvdW5jZV9tYXgJCT0gMSwKKwkuZGVib3VuY2VfcmVwCQk9IDAsCisJLmRlYm91bmNlX3RvbAkJPSAofjApLAorCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDNfcGVuZG93bl9zdGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZW9jb3JlOTI2X2FkZF9kZXZpY2VfdHModm9pZCkKK3sKKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE1LCAxKTsJLyogRXh0ZXJuYWwgSVJRMSwgd2l0aCBwdWxsdXAgKi8KKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BDMTMsIDEpOwkvKiBUb3VjaHNjcmVlbiBCVVNZIHNpZ25hbCAqLworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBuZW9jb3JlOTI2X2FkZF9kZXZpY2VfdHModm9pZCkge30KKyNlbmRpZgorCisvKgorICogU1BJIGRldmljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbmVvY29yZTkyNl9zcGlfZGV2aWNlc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEKQorCXsJLyogRGF0YUZsYXNoIGNhcmQgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKKwkJLmNoaXBfc2VsZWN0CT0gMSwKKwkJLm1heF9zcGVlZF9oegk9IDEyNTAwMCAqIDE2LAorCQkuYnVzX251bQk9IDAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkc19pbmZvLAorCQkuaXJxCQk9IEFUOTFTQU05MjYzX0lEX0lSUTEsCisJfSwKKyNlbmRpZgorfTsKKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIG5lb2NvcmU5MjZfbW1jX2RhdGEgPSB7CisJLndpcmU0CQk9IDEsCisJLmRldF9waW4JPSBBVDkxX1BJTl9QRTE4LAorCS53cF9waW4JCT0gQVQ5MV9QSU5fUEUxOSwKK307CisKKworLyoKKyAqIE1BQ0IgRXRoZXJuZXQgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIG5lb2NvcmU5MjZfbWFjYl9kYXRhID0geworCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BFMzEsCisJLmlzX3JtaWkJPSAxLAorfTsKKworCisvKgorICogTkFORCBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBuZW9jb3JlOTI2X25hbmRfcGFydGl0aW9uW10gPSB7CisJeworCQkubmFtZQk9ICJMaW51eCBLZXJuZWwiLAkvKiAiUGFydGl0aW9uIDEiLCAqLworCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBTWl84TSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiRmlsZXN5c3RlbSIsCQkvKiAiUGFydGl0aW9uIDIiLCAqLworCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IFNaXzMyTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiRnJlZSIsCQkvKiAiUGFydGl0aW9uIDMiLCAqLworCQkub2Zmc2V0CT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShuZW9jb3JlOTI2X25hbmRfcGFydGl0aW9uKTsKKwlyZXR1cm4gbmVvY29yZTkyNl9uYW5kX3BhcnRpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBuZW9jb3JlOTI2X25hbmRfZGF0YSA9IHsKKwkuYWxlCQkJPSAyMSwKKwkuY2xlCQkJPSAyMiwKKwkucmR5X3BpbgkJPSBBVDkxX1BJTl9QQjE5LAorCS5yZHlfcGluX2FjdGl2ZV9sb3cJPSAxLAorCS5lbmFibGVfcGluCQk9IEFUOTFfUElOX1BEMTUsCisJLnBhcnRpdGlvbl9pbmZvCQk9IG5hbmRfcGFydGl0aW9ucywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgbmVvY29yZTkyNl9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAxLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSA0LAorCS5ucmRfcHVsc2UJCT0gNCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gNCwKKwkubndlX3B1bHNlCQk9IDQsCisKKwkucmVhZF9jeWNsZQkJPSA2LAorCS53cml0ZV9jeWNsZQkJPSA2LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbmVvY29yZTkyNl9hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJm5lb2NvcmU5MjZfbmFuZF9zbWNfY29uZmlnKTsKKworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZuZW9jb3JlOTI2X25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIExDRCBDb250cm9sbGVyCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNTAwMCksCisKKwkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKKwkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKKwkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7CisJLm1hbnVmYWN0dXJlcgk9ICJISVQiLAorCS5tb25pdG9yCT0gIlRYMDlENzBWTTFDQ0EiLAorCisJLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCisJLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCisJLmhmbWluCQk9IDE1MDAwLAorCS5oZm1heAkJPSA2NDAwMCwKKwkudmZtaW4JCT0gNTAsCisJLnZmbWF4CQk9IDE1MCwKK307CisKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfREVGQVVMVF9MQ0RDT04yIChBVE1FTF9MQ0RDX01FTU9SX0xJVFRMRSBcCisJCQkJCXwgQVRNRUxfTENEQ19ESVNUWVBFX1RGVCBcCisJCQkJCXwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFKQorCitzdGF0aWMgdm9pZCBhdDkxX2xjZGNfcG93ZXJfY29udHJvbChpbnQgb24pCit7CisJYXQ5MV9zZXRfZ3Bpb192YWx1ZShBVDkxX1BJTl9QQTMwLCBvbik7Cit9CisKKy8qIERyaXZlciBkYXRhcyAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIF9faW5pdGRhdGEgbmVvY29yZTkyNl9sY2RjX2RhdGEgPSB7CisJLmxjZGNvbl9pc19iYWNrbGlnaHQJCT0gdHJ1ZSwKKwkuZGVmYXVsdF9icHAJCQk9IDE2LAorCS5kZWZhdWx0X2RtYWNvbgkJCT0gQVRNRUxfTENEQ19ETUFFTiwKKwkuZGVmYXVsdF9sY2Rjb24yCQk9IEFUOTFTQU05MjYzX0RFRkFVTFRfTENEQ09OMiwKKwkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MsCisJLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfcG93ZXJfY29udHJvbCwKKwkuZ3VhcmRfdGltZQkJCT0gMSwKKwkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQjU1NSwKK307CisKKyNlbHNlCitzdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBuZW9jb3JlOTI2X2xjZGNfZGF0YTsKKyNlbmRpZgorCisKKy8qCisgKiBHUElPIEJ1dHRvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG5lb2NvcmU5MjZfYnV0dG9uc1tdID0geworCXsJLyogQlAxLCAibGVmdGNsaWMiICovCisJCS5jb2RlCQk9IEJUTl9MRUZULAorCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzUsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gImxlZnRfY2xpY2siLAorCQkud2FrZXVwCQk9IDEsCisJfSwKKwl7CS8qIEJQMiwgInJpZ2h0Y2xpYyIgKi8KKwkJLmNvZGUJCT0gQlROX1JJR0hULAorCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQzQsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gInJpZ2h0X2NsaWNrIiwKKwkJLndha2V1cAkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIG5lb2NvcmU5MjZfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBuZW9jb3JlOTI2X2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShuZW9jb3JlOTI2X2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmVvY29yZTkyNl9idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5lb2NvcmU5MjZfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG5lb2NvcmU5MjZfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7CisJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEM1LCAwKTsJLyogbGVmdCBidXR0b24gKi8KKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQzUsIDEpOworCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BDNCwgMCk7CS8qIHJpZ2h0IGJ1dHRvbiAqLworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BDNCwgMSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm5lb2NvcmU5MjZfYnV0dG9uX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IG5lb2NvcmU5MjZfYWRkX2RldmljZV9idXR0b25zKHZvaWQpIHt9CisjZW5kaWYKKworCisvKgorICogQUM5NworICovCitzdGF0aWMgc3RydWN0IGF0bWVsX2FjOTdfZGF0YSBuZW9jb3JlOTI2X2FjOTdfZGF0YSA9IHsKKwkucmVzZXRfcGluCT0gQVQ5MV9QSU5fUEExMywKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IG5lb2NvcmU5MjZfYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIFNlcmlhbCAqLworCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKKworCS8qIFVTQiBIb3N0ICovCisJYXQ5MV9hZGRfZGV2aWNlX3VzYmgoJm5lb2NvcmU5MjZfdXNiaF9kYXRhKTsKKworCS8qIFVTQiBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZuZW9jb3JlOTI2X3VkY19kYXRhKTsKKworCS8qIFNQSSAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BFMjAsIDEpOwkJLyogc2VsZWN0IHNwaTAgY2xvY2sgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc3BpKG5lb2NvcmU5MjZfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUobmVvY29yZTkyNl9zcGlfZGV2aWNlcykpOworCisJLyogVG91Y2hzY3JlZW4gKi8KKwluZW9jb3JlOTI2X2FkZF9kZXZpY2VfdHMoKTsKKworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tbWMoMSwgJm5lb2NvcmU5MjZfbW1jX2RhdGEpOworCisJLyogRXRoZXJuZXQgKi8KKwlhdDkxX2FkZF9kZXZpY2VfZXRoKCZuZW9jb3JlOTI2X21hY2JfZGF0YSk7CisKKwkvKiBOQU5EICovCisJbmVvY29yZTkyNl9hZGRfZGV2aWNlX25hbmQoKTsKKworCS8qIEkyQyAqLworCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CisKKwkvKiBMQ0QgQ29udHJvbGxlciAqLworCWF0OTFfYWRkX2RldmljZV9sY2RjKCZuZW9jb3JlOTI2X2xjZGNfZGF0YSk7CisKKwkvKiBQdXNoIEJ1dHRvbnMgKi8KKwluZW9jb3JlOTI2X2FkZF9kZXZpY2VfYnV0dG9ucygpOworCisJLyogQUM5NyAqLworCWF0OTFfYWRkX2RldmljZV9hYzk3KCZuZW9jb3JlOTI2X2FjOTdfZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTkVPQ09SRTkyNiwgIkFERU5FTyBORU9DT1JFIDkyNiIpCisJLyogTWFpbnRhaW5lcjogQURFTkVPICovCisJLnBoeXNfaW8JPSBBVDkxX0JBU0VfU1lTLAorCS5pb19wZ19vZmZzdAk9IChBVDkxX1ZBX0JBU0VfU1lTID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBBVDkxX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkudGltZXIJCT0gJmF0OTFzYW05MjZ4X3RpbWVyLAorCS5tYXBfaW8JCT0gbmVvY29yZTkyNl9tYXBfaW8sCisJLmluaXRfaXJxCT0gbmVvY29yZTkyNl9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbmVvY29yZTkyNl9ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1xaWwtYTkyNjAuYwppbmRleCBjZmI0NTcxLi40Y2ZmOWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtcWlsLWE5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXFpbC1hOTI2MC5jCkBAIC00MSw4ICs0MSwxMCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfc2hkd2MuaD4KIAorI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKQEAgLTE0NywxMyArMTQ5LDM0IEBACiAJLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAogCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKIAkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfQlVTV0lEVEhfMTYpCi0JLmJ1c193aWR0aF8xNgk9IDEsCi0jZWxzZQotCS5idXNfd2lkdGhfMTYJPSAwLAotI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDMsCisJLm5yZF9wdWxzZQkJPSAzLAorCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAorCS5ud2VfcHVsc2UJCT0gMywKKworCS5yZWFkX2N5Y2xlCQk9IDUsCisJLndyaXRlX2N5Y2xlCQk9IDUsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmVrX25hbmRfc21jX2NvbmZpZyk7CisKKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKK30KKwogLyoKICAqIE1DSSAoU0QvTU1DKQogICovCkBAIC0yMjcsNyArMjUwLDcgQEAKIAkvKiBTUEkgKi8KIAlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7CiAJLyogTkFORCAqLwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwogCS8qIEkyQyAqLwogCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CiAJLyogRXRoZXJuZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOS1sOTI2MC5jCmluZGV4IDk5YmI0Y2MuLmI0ODM0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05LWw5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTktbDkyNjAuYwpAQCAtMzgsNyArMzgsOSBAQAogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CiAKKyNpbmNsdWRlICJzYW05X3NtYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogCkBAIC0xNDgsMTMgKzE1MCwzNCBAQAogCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKIAkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCiAJLnBhcnRpdGlvbl9pbmZvCT0gbmFuZF9wYXJ0aXRpb25zLAotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2KQotCS5idXNfd2lkdGhfMTYJPSAxLAotI2Vsc2UKLQkuYnVzX3dpZHRoXzE2CT0gMCwKLSNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAxLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCit7CisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKIAogLyoKICAqIE1DSSAoU0QvTU1DKQpAQCAtMTc4LDcgKzIwMSw3IEBACiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwogCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKKwlla19hZGRfZGV2aWNlX25hbmQoKTsKIAkvKiBFdGhlcm5ldCAqLwogCWF0OTFfYWRkX2RldmljZV9ldGgoJmVrX21hY2JfZGF0YSk7CiAJLyogTU1DICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKaW5kZXggYjQ5ZWI2ZS4uOTNhMGY4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYwpAQCAtNDIsNyArNDIsMTAgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3NoZHdjLmg+CiAKKyNpbmNsdWRlICJzYW05X3NtYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogCkBAIC0xOTUsNiArMTk4LDM4IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gMywKKwkubnJkX3B1bHNlCQk9IDMsCisJLm5jc193cml0ZV9wdWxzZQk9IDMsCisJLm53ZV9wdWxzZQkJPSAzLAorCisJLnJlYWRfY3ljbGUJCT0gNSwKKwkud3JpdGVfY3ljbGUJCT0gNSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKIAogLyoKICAqIE1DSSAoU0QvTU1DKQpAQCAtMzAzLDcgKzMzOCw3IEBACiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwogCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKKwlla19hZGRfZGV2aWNlX25hbmQoKTsKIAkvKiBFdGhlcm5ldCAqLwogCWF0OTFfYWRkX2RldmljZV9ldGgoJmVrX21hY2JfZGF0YSk7CiAJLyogTU1DICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggNDk3NzQwOS4uZDUyNjZkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpAQCAtNDcsNyArNDcsOSBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9zaGR3Yy5oPgogCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIApAQCAtNzYsNyArNzgsNyBAQAogICogRE05MDAwIGV0aGVybmV0IGRldmljZQogICovCiAjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxc2FtOTI2MV9kbTkwMDBfcmVzb3VyY2VbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG05MDAwX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfMiwKIAkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF8yICsgMywKQEAgLTk4LDI3ICsxMDAsNDIgQEAKIAkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYxX2RtOTAwMF9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTkwMDBfZGV2aWNlID0gewogCS5uYW1lCQk9ICJkbTkwMDAiLAogCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdDkxc2FtOTI2MV9kbTkwMDBfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IGF0OTFzYW05MjYxX2RtOTAwMF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2UsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtOTAwMF9wbGF0ZGF0YSwKIAl9CiB9OwogCisvKgorICogU01DIHRpbWluZ3MgZm9yIHRoZSBETTkwMDAuCisgKiBOb3RlOiBUaGVzZSB0aW1pbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgTUFTVEVSX0NMT0NLID0gMTAwMDAwMDAwIGFjY29yZGluZyB0byB0aGUgRE05MDAwIHRpbWluZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZG05MDAwX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAyLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMiwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSA4LAorCS5ucmRfcHVsc2UJCT0gNCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gOCwKKwkubndlX3B1bHNlCQk9IDQsCisKKwkucmVhZF9jeWNsZQkJPSAxNiwKKwkud3JpdGVfY3ljbGUJCT0gMTYsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfQkFUX1dSSVRFIHwgQVQ5MV9TTUNfREJXXzE2LAorCS50ZGZfY3ljbGVzCQk9IDEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9kbTkwMDAodm9pZCkKIHsKLQkvKgotCSAqIENvbmZpZ3VyZSBDaGlwLVNlbGVjdCAyIG9uIFNNQyBmb3IgdGhlIERNOTAwMC4KLQkgKiBOb3RlOiBUaGVzZSB0aW1pbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgTUFTVEVSX0NMT0NLID0gMTAwMDAwMDAwCi0JICogIGFjY29yZGluZyB0byB0aGUgRE05MDAwIHRpbWluZ3MuCi0JICovCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoMiksIEFUOTFfU01DX05XRVNFVFVQXygyKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKSB8IEFUOTFfU01DX05SRFNFVFVQXygyKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoMiksIEFUOTFfU01DX05XRVBVTFNFXyg0KSB8IEFUOTFfU01DX05DU19XUlBVTFNFXyg4KSB8IEFUOTFfU01DX05SRFBVTFNFXyg0KSB8IEFUOTFfU01DX05DU19SRFBVTFNFXyg4KSk7Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMiksIEFUOTFfU01DX05XRUNZQ0xFXygxNikgfCBBVDkxX1NNQ19OUkRDWUNMRV8oMTYpKTsKLQlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKDIpLCBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUgfCBBVDkxX1NNQ19EQldfMTYgfCBBVDkxX1NNQ19UREZfKDEpKTsKKwkvKiBDb25maWd1cmUgY2hpcC1zZWxlY3QgMiAoRE05MDAwKSAqLworCXNhbTlfc21jX2NvbmZpZ3VyZSgyLCAmZG05MDAwX3NtY19jb25maWcpOwogCiAJLyogQ29uZmlndXJlIFJlc2V0IHNpZ25hbCBhcyBvdXRwdXQgKi8KIAlhdDkxX3NldF9ncGlvX291dHB1dChBVDkxX1BJTl9QQzEwLCAwKTsKQEAgLTEyNiw3ICsxNDMsNyBAQAogCS8qIENvbmZpZ3VyZSBJbnRlcnJ1cHQgcGluIGFzIGlucHV0LCBubyBwdWxsLXVwICovCiAJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQzExLCAwKTsKIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjFfZG05MDAwX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTkwMDBfZGV2aWNlKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9kbTkwMDAodm9pZCkge30KQEAgLTE5Nyw2ICsyMTQsMzkgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAxLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKKwkudGRmX2N5Y2xlcwkJPSAyLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQoreworCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KKwlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKKwkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OworCWVsc2UKKwkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7CisKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmVrX25hbmRfc21jX2NvbmZpZyk7CisKKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKK30KKworCiAvKgogICogQURTNzg0NiBUb3VjaHNjcmVlbgogICovCkBAIC01MjUsNyArNTc1LDcgQEAKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwogCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKKwlla19hZGRfZGV2aWNlX25hbmQoKTsKIAkvKiBETTkwMDAgZXRoZXJuZXQgKi8KIAlla19hZGRfZGV2aWNlX2RtOTAwMCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKaW5kZXggODM1NDAxNS4uNTdkNTI1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwpAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9zaGR3Yy5oPgogCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIApAQCAtMjAzLDYgKzIwNSwzOCBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDMsCisJLm5yZF9wdWxzZQkJPSAzLAorCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAorCS5ud2VfcHVsc2UJCT0gMywKKworCS5yZWFkX2N5Y2xlCQk9IDUsCisJLndyaXRlX2N5Y2xlCQk9IDUsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFLAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfYWRkX2RldmljZV9uYW5kKHZvaWQpCit7CisJLyogc2V0dXAgYnVzLXdpZHRoICg4IG9yIDE2KSAqLworCWlmIChla19uYW5kX2RhdGEuYnVzX3dpZHRoXzE2KQorCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfMTY7CisJZWxzZQorCQlla19uYW5kX3NtY19jb25maWcubW9kZSB8PSBBVDkxX1NNQ19EQldfODsKKworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLworCXNhbTlfc21jX2NvbmZpZ3VyZSgzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKKworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworfQorCiAKIC8qCiAgKiBJMkMgZGV2aWNlcwpAQCAtMzg1LDcgKzQxOSw3IEBACiAJLyogRXRoZXJuZXQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwogCS8qIE5BTkQgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKKwlla19hZGRfZGV2aWNlX25hbmQoKTsKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CiAJLyogTENEIENvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwppbmRleCBiNTg4ZWFkLi44MTQzOWZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCkBAIC0zNyw3ICszNyw5IEBACiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KIAorI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKQEAgLTE1Niw2ICsxNTgsMzggQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBla19uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAyLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMiwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSA0LAorCS5ucmRfcHVsc2UJCT0gNCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gNCwKKwkubndlX3B1bHNlCQk9IDQsCisKKwkucmVhZF9jeWNsZQkJPSA3LAorCS53cml0ZV9jeWNsZQkJPSA3LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKKwkudGRmX2N5Y2xlcwkJPSAzLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQoreworCS8qIHNldHVwIGJ1cy13aWR0aCAoOCBvciAxNikgKi8KKwlpZiAoZWtfbmFuZF9kYXRhLmJ1c193aWR0aF8xNikKKwkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzE2OworCWVsc2UKKwkJZWtfbmFuZF9zbWNfY29uZmlnLm1vZGUgfD0gQVQ5MV9TTUNfREJXXzg7CisKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmVrX25hbmRfc21jX2NvbmZpZyk7CisKKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKK30KKwogCiAvKgogICogTUNJIChTRC9NTUMpCkBAIC0xOTUsNyArMjI5LDcgQEAKIAkvKiBTUEkgKi8KIAlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7CiAJLyogTkFORCAqLwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKIAkvKiBNTUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggMjcwODUxOC4uOWI5MzdlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTI5LDggKzI5LDkgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3NoZHdjLmg+CiAKKyNpbmNsdWRlICJzYW05X3NtYy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogCkBAIC0xMDMsOSArMTA0LDM0IEBACiAJLnJkeV9waW4JPSBBVDkxX1BJTl9QRDE3LAogCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEI2LAogCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKLQkuYnVzX3dpZHRoXzE2CT0gMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gMywKKwkubnJkX3B1bHNlCQk9IDMsCisJLm5jc193cml0ZV9wdWxzZQk9IDMsCisJLm53ZV9wdWxzZQkJPSAzLAorCisJLnJlYWRfY3ljbGUJCT0gNSwKKwkud3JpdGVfY3ljbGUJCT0gNSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKKwkudGRmX2N5Y2xlcwkJPSAyLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLworCXNhbTlfc21jX2NvbmZpZ3VyZSgzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKKworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworfQorCiAKIC8qCiAgKiBTUEkgZGV2aWNlcwpAQCAtMTg4LDcgKzIxNCw3IEBACiAJLyogSTJDICovCiAJYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKIAkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7CisJZWtfYWRkX2RldmljZV9uYW5kKCk7CiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOwogCS8qIE1NQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2MC5jCmluZGV4IDdjMzUwMzUuLmQxMzMwNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYwLmMKQEAgLTQxLDggKzQxLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9zaGR3Yy5oPgogCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIApAQCAtMTIxLDEzICsxMjMsMzQgQEAKIAkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTMsCiAJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQzE0LAogCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNikKLQkuYnVzX3dpZHRoXzE2CT0gMSwKLSNlbHNlCi0JLmJ1c193aWR0aF8xNgk9IDAsCi0jZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gMywKKwkubnJkX3B1bHNlCQk9IDMsCisJLm5jc193cml0ZV9wdWxzZQk9IDMsCisJLm53ZV9wdWxzZQkJPSAzLAorCisJLnJlYWRfY3ljbGUJCT0gNSwKKwkud3JpdGVfY3ljbGUJCT0gNSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKKwkudGRmX2N5Y2xlcwkJPSAyLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfbmFuZCh2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAzIChOQU5EKSAqLworCXNhbTlfc21jX2NvbmZpZ3VyZSgzLCAmZWtfbmFuZF9zbWNfY29uZmlnKTsKKworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworfQorCiAvKgogICogR1BJTyBCdXR0b25zCiAgKi8KQEAgLTE4OSw3ICsyMTIsNyBAQAogCS8qIFVTQiBEZXZpY2UgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdWRjKCZla191ZGNfZGF0YSk7CiAJLyogTkFORCAqLwotCWF0OTFfYWRkX2RldmljZV9uYW5kKCZla19uYW5kX2RhdGEpOworCWVrX2FkZF9kZXZpY2VfbmFuZCgpOwogCS8qIEkyQyAqLwogCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CiAJLyogRXRoZXJuZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC11c2ItYTkyNjMuYwppbmRleCAzOTFiNTY2Li5kOTY0MDViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtdXNiLWE5MjYzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXVzYi1hOTI2My5jCkBAIC00MCw4ICs0MCwxMCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfc2hkd2MuaD4KIAorI2luY2x1ZGUgInNhbTlfc21jLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKQEAgLTEzNCwxMyArMTM2LDM1IEBACiAJLnJkeV9waW4JPSBBVDkxX1BJTl9QQTIyLAogCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEQxNSwKIAkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfQlVTV0lEVEhfMTYpCi0JLmJ1c193aWR0aF8xNgk9IDEsCi0jZWxzZQotCS5idXNfd2lkdGhfMTYJPSAwLAotI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGVrX25hbmRfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDMsCisJLm5yZF9wdWxzZQkJPSAzLAorCS5uY3Nfd3JpdGVfcHVsc2UJPSAzLAorCS5ud2VfcHVsc2UJCT0gMywKKworCS5yZWFkX2N5Y2xlCQk9IDUsCisJLndyaXRlX2N5Y2xlCQk9IDUsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUgfCBBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFIHwgQVQ5MV9TTUNfREJXXzgsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBjb25maWd1cmUgY2hpcC1zZWxlY3QgMyAoTkFORCkgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMywgJmVrX25hbmRfc21jX2NvbmZpZyk7CisKKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKK30KKworCiAvKgogICogR1BJTyBCdXR0b25zCiAgKi8KQEAgLTIwNiw3ICsyMzAsNyBAQAogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKIAkvKiBOQU5EICovCi0JYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7CisJZWtfYWRkX2RldmljZV9uYW5kKCk7CiAJLyogSTJDICovCiAJYXQ5MV9hZGRfZGV2aWNlX2kyYyhOVUxMLCAwKTsKIAkvKiBQdXNoIEJ1dHRvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9wbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9wbWMuaAppbmRleCAyZTNmMjg5Li45NTYxZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3BtYy5oCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lCQlBVDkxX1BNQ19QQ0sJCSgxIDw8ICAwKQkJLyogUHJvY2Vzc29yIENsb2NrICovCiAjZGVmaW5lCQlBVDkxUk05MjAwX1BNQ19VRFAJKDEgPDwgIDEpCQkvKiBVU0IgRGV2Y2ljZSBQb3J0IENsb2NrIFtBVDkxUk05MjAwIG9ubHldICovCiAjZGVmaW5lCQlBVDkxUk05MjAwX1BNQ19NQ0tVRFAJKDEgPDwgIDIpCQkvKiBVU0IgRGV2aWNlIFBvcnQgTWFzdGVyIENsb2NrIEF1dG9tYXRpYyBEaXNhYmxlIG9uIFN1c3BlbmQgW0FUOTFSTTkyMDAgb25seV0gKi8KKyNkZWZpbmUJCUFUOTFDQVA5X1BNQ19ERFIJKDEgPDwgIDIpCQkvKiBERFIgQ2xvY2sgW0FUOTFDQVA5IHJldkMgb25seV0gKi8KICNkZWZpbmUJCUFUOTFSTTkyMDBfUE1DX1VIUAkoMSA8PCAgNCkJCS8qIFVTQiBIb3N0IFBvcnQgQ2xvY2sgW0FUOTFSTTkyMDAgb25seV0gKi8KICNkZWZpbmUJCUFUOTFTQU05MjZ4X1BNQ19VSFAJKDEgPDwgIDYpCQkvKiBVU0IgSG9zdCBQb3J0IENsb2NrIFtBVDkxU0FNOTI2eCBvbmx5XSAqLwogI2RlZmluZQkJQVQ5MUNBUDlfUE1DX1VIUAkoMSA8PCAgNikJCS8qIFVTQiBIb3N0IFBvcnQgQ2xvY2sgW0FUOTFDQVA5IG9ubHldICovCkBAIC0xMDIsMTAgKzEwMywxNiBAQAogI2RlZmluZQkJQVQ5MV9QTUNfTE9DS0IJCSgxIDw8ICAyKQkJLyogUExMQiBMb2NrICovCiAjZGVmaW5lCQlBVDkxX1BNQ19NQ0tSRFkJCSgxIDw8ICAzKQkJLyogTWFzdGVyIENsb2NrICovCiAjZGVmaW5lCQlBVDkxX1BNQ19MT0NLVQkJKDEgPDwgIDYpCQkvKiBVUExMIExvY2sgW0FUOTFDQVA5IG9ubHldICovCisjZGVmaW5lCQlBVDkxX1BNQ19PU0NTRUwJCSgxIDw8ICA3KQkJLyogU2xvdyBDbG9jayBPc2NpbGxhdG9yIFtBVDkxQ0FQOSByZXZDIG9ubHldICovCiAjZGVmaW5lCQlBVDkxX1BNQ19QQ0swUkRZCSgxIDw8ICA4KQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDAgKi8KICNkZWZpbmUJCUFUOTFfUE1DX1BDSzFSRFkJKDEgPDwgIDkpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMSAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMlJEWQkoMSA8PCAxMCkJCS8qIFByb2dyYW1tYWJsZSBDbG9jayAyICovCiAjZGVmaW5lCQlBVDkxX1BNQ19QQ0szUkRZCSgxIDw8IDExKQkJLyogUHJvZ3JhbW1hYmxlIENsb2NrIDMgKi8KICNkZWZpbmUJQVQ5MV9QTUNfSU1SCQkoQVQ5MV9QTUMgKyAweDZjKQkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogCisjZGVmaW5lIEFUOTFfUE1DX1BST1QJCShBVDkxX1BNQyArIDB4ZTQpCS8qIFByb3RlY3QgUmVnaXN0ZXIgW0FUOTFDQVA5IHJldkMgb25seV0gKi8KKyNkZWZpbmUJCUFUOTFfUE1DX1BST1RLRVkJMHg1MDRkNDMwMQkvKiBBY3RpdmF0aW9uIENvZGUgKi8KKworI2RlZmluZSBBVDkxX1BNQ19WRVIJCShBVDkxX1BNQyArIDB4ZmMpCS8qIFBNQyBNb2R1bGUgVmVyc2lvbiBbQVQ5MUNBUDkgb25seV0gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFjYXA5LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFjYXA5LmgKaW5kZXggNGE0YjY0MS4uZDhjMWVkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxY2FwOS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MWNhcDkuaApAQCAtMTAxLDcgKzEwMSw5IEBACiAjZGVmaW5lIEFUOTFfUlRUCSgweGZmZmZmZDIwIC0gQVQ5MV9CQVNFX1NZUykKICNkZWZpbmUgQVQ5MV9QSVQJKDB4ZmZmZmZkMzAgLSBBVDkxX0JBU0VfU1lTKQogI2RlZmluZSBBVDkxX1dEVAkoMHhmZmZmZmQ0MCAtIEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfR1BCUgkoMHhmZmZmZmQ1MCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfR1BCUgkoY3B1X2lzX2F0OTFjYXA5X3JldkIoKSA/CVwKKwkJCSgweGZmZmZmZDUwIC0gQVQ5MV9CQVNFX1NZUykgOglcCisJCQkoMHhmZmZmZmQ2MCAtIEFUOTFfQkFTRV9TWVMpKQogCiAjZGVmaW5lIEFUOTFfVVNBUlQwCUFUOTFDQVA5X0JBU0VfVVMwCiAjZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFDQVA5X0JBU0VfVVMxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCBkYmZkOWY3Li5jNTU0YzNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTQ5LDYgKzQ5LDE3IEBACiAJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKSAmIEFUOTFfQ0lEUl9BUkNIKTsKIH0KIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CisjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgorCisjZGVmaW5lIEFSQ0hfUkVWSVNJT05fQ0FQOV9CCTB4Mzk5CisjZGVmaW5lIEFSQ0hfUkVWSVNJT05fQ0FQOV9DCTB4NjAxCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxY2FwOV9yZXZfaWRlbnRpZnkodm9pZCkKK3sKKwlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfVkVSKSk7Cit9CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKICNkZWZpbmUgY3B1X2lzX2F0OTFybTkyMDAoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFSTTkyMDApCkBAIC05MCw4ICsxMDEsMTIgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MUNBUDkpCisjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZCKCkJKGF0OTFjYXA5X3Jldl9pZGVudGlmeSgpID09IEFSQ0hfUkVWSVNJT05fQ0FQOV9CKQorI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDlfcmV2QygpCShhdDkxY2FwOV9yZXZfaWRlbnRpZnkoKSA9PSBBUkNIX1JFVklTSU9OX0NBUDlfQykKICNlbHNlCiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDlfcmV2QigpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDlfcmV2QygpCSgwKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRmOTBjMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAxNjExYmQwLi4wYjBjY2NjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0yMyw4ICsyMyw4IEBACiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4RkZGRkZGRkYKIAotI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQogCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA5ZGQxYjhjLi4xNGY0ZWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI1LDE1ICsyNSw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJKEFUOTFfU0RSQU1fQkFTRSkKIAotCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKiAgICAgICAgICAgICAgYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKiAgICAgICAgICAgICAgdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvc2FtOV9zbWMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9zYW05X3NtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWI2YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3NhbTlfc21jLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9zYW05X3NtYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJldyBWaWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOV9zbWMuaD4KKworI2luY2x1ZGUgInNhbTlfc21jLmgiCisKK3ZvaWQgX19pbml0IHNhbTlfc21jX2NvbmZpZ3VyZShpbnQgY3MsIHN0cnVjdCBzYW05X3NtY19jb25maWcqIGNvbmZpZykKK3sKKwkvKiBTZXR1cCByZWdpc3RlciAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKGNzKSwKKwkJICBBVDkxX1NNQ19OV0VTRVRVUF8oY29uZmlnLT5ud2Vfc2V0dXApCisJCXwgQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKGNvbmZpZy0+bmNzX3dyaXRlX3NldHVwKQorCQl8IEFUOTFfU01DX05SRFNFVFVQXyhjb25maWctPm5yZF9zZXR1cCkKKwkJfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oY29uZmlnLT5uY3NfcmVhZF9zZXR1cCkKKwkpOworCisJLyogUHVsc2UgcmVnaXN0ZXIgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRShjcyksCisJCSAgQVQ5MV9TTUNfTldFUFVMU0VfKGNvbmZpZy0+bndlX3B1bHNlKQorCQl8IEFUOTFfU01DX05DU19XUlBVTFNFXyhjb25maWctPm5jc193cml0ZV9wdWxzZSkKKyAgICAgICAgICAgICAgICB8IEFUOTFfU01DX05SRFBVTFNFXyhjb25maWctPm5yZF9wdWxzZSkKKwkJfCBBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oY29uZmlnLT5uY3NfcmVhZF9wdWxzZSkKKwkpOworCisJLyogQ3ljbGUgcmVnaXN0ZXIgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRShjcyksCisJCSAgQVQ5MV9TTUNfTldFQ1lDTEVfKGNvbmZpZy0+d3JpdGVfY3ljbGUpCisJCXwgQVQ5MV9TTUNfTlJEQ1lDTEVfKGNvbmZpZy0+cmVhZF9jeWNsZSkKKwkpOworCisJLyogTW9kZSByZWdpc3RlciAqLworCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX01PREUoY3MpLAorCQkgIGNvbmZpZy0+bW9kZQorCQl8IEFUOTFfU01DX1RERl8oY29uZmlnLT50ZGZfY3ljbGVzKQorCSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvc2FtOV9zbWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9zYW05X3NtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzJjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvc2FtOV9zbWMuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL3NhbTlfc21jLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZXcgVmljdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIHsKKwkvKiBTZXR1cCByZWdpc3RlciAqLworCXU4IG5jc19yZWFkX3NldHVwOworCXU4IG5yZF9zZXR1cDsKKwl1OCBuY3Nfd3JpdGVfc2V0dXA7CisJdTggbndlX3NldHVwOworCisJLyogUHVsc2UgcmVnaXN0ZXIgKi8KKwl1OCBuY3NfcmVhZF9wdWxzZTsKKwl1OCBucmRfcHVsc2U7CisJdTggbmNzX3dyaXRlX3B1bHNlOworCXU4IG53ZV9wdWxzZTsKKworCS8qIEN5Y2xlIHJlZ2lzdGVyICovCisJdTE2IHJlYWRfY3ljbGU7CisJdTE2IHdyaXRlX2N5Y2xlOworCisJLyogTW9kZSByZWdpc3RlciAqLworCXUzMiBtb2RlOworCXU4IHRkZl9jeWNsZXM6NDsKK307CisKK2V4dGVybiB2b2lkIF9faW5pdCBzYW05X3NtY19jb25maWd1cmUoaW50IGNzLCBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnKiBjb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2MjBlOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCA0Yzg0NDAwLi4yZTBiM2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTIwLDEyICsyMCwxMCBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKLSNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogLyoKICAqIFdlIGRvbid0IHN1cHBvcnQgaW5zW2xiXS9vdXRzW2xiXS4gIE1ha2UgdGhlbSBmYXVsdC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggOThlYzMwYy4uZTUyMmIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI2LDI1ICsyNiw3IEBACiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhjMDAwMDAwMCkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICogICAgICAgICAgICAgIGFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICogICAgICAgICAgICAgIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQ0RCODk3MTIpCi0KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKLQotI2VsaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQVVUQ1BVMTIpCi0KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoeCkKLQotI2Vsc2UKKyNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9DREI4OTcxMikgJiYgIWRlZmluZWQgKENPTkZJR19BUkNIX0FVVENQVTEyKQogCiAjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgKyBQQUdFX09GRlNFVCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ4ZWJkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgotIwotCi0jIE9iamVjdCBmaWxlIGxpc3RzLgotCi1vYmoteQkJCTo9IGNvcmUubwotb2JqLW0JCQk6PQotb2JqLW4JCQk6PQotb2JqLQkJCTo9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvTWFrZWZpbGUuYm9vdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxNjUwNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL01ha2VmaWxlLmJvb3QKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSAgIHpyZWxhZGRyLXkJOj0gMHgxMDAwODAwMAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvY29yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTI0N2MwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZwotICogIENvcHlyaWdodCAoQykgMTk5OSBOZXh1cyBFbGVjdHJvbmljcyBMdGQKLSAqCi0gKiBFeHRyYSBNTSByb3V0aW5lcyBmb3IgQ0w3NTAwIGFyY2hpdGVjdHVyZQotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi11bnNpZ25lZCBpbnQgdnJhbV9zaXplOwotCi1zdGF0aWMgdm9pZCBjbDc1MDBfYWNrX2lycV9hKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHZhbCwgbWFzazsKLQotCW1hc2sgPSAxIDw8IGlycTsKLQl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0EpOwotCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tBKTsKLQlpb21kX3dyaXRlYihtYXNrLCBJT01EX0lSUUNMUkEpOwotfQotCi1zdGF0aWMgdm9pZCBjbDc1MDBfbWFza19pcnFfYSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7Ci0KLQltYXNrID0gMSA8PCBpcnE7Ci0JdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tBKTsKLQlpb21kX3dyaXRlYih2YWwgJiB+bWFzaywgSU9NRF9JUlFNQVNLQSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsNzUwMF91bm1hc2tfaXJxX2EodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOwotCi0JbWFzayA9IDEgPDwgaXJxOwotCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQSk7Ci0JaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9JUlFNQVNLQSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xwczc1MDBfYV9jaGlwID0gewotCS5hY2sJPSBjbDc1MDBfYWNrX2lycV9hLAotCS5tYXNrCT0gY2w3NTAwX21hc2tfaXJxX2EsCi0JLnVubWFzawk9IGNsNzUwMF91bm1hc2tfaXJxX2EsCi19OwotCi1zdGF0aWMgdm9pZCBjbDc1MDBfbWFza19pcnFfYih1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7Ci0KLQltYXNrID0gMSA8PCAoaXJxICYgNyk7Ci0JdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tCKTsKLQlpb21kX3dyaXRlYih2YWwgJiB+bWFzaywgSU9NRF9JUlFNQVNLQik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsNzUwMF91bm1hc2tfaXJxX2IodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOwotCi0JbWFzayA9IDEgPDwgKGlycSAmIDcpOwotCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQik7Ci0JaW9tZF93cml0ZWIodmFsIHwgbWFzaywgSU9NRF9JUlFNQVNLQik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xwczc1MDBfYl9jaGlwID0gewotCS5hY2sJPSBjbDc1MDBfbWFza19pcnFfYiwKLQkubWFzawk9IGNsNzUwMF9tYXNrX2lycV9iLAotCS51bm1hc2sJPSBjbDc1MDBfdW5tYXNrX2lycV9iLAotfTsKLQotc3RhdGljIHZvaWQgY2w3NTAwX21hc2tfaXJxX2ModW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsLCBtYXNrOwotCi0JbWFzayA9IDEgPDwgKGlycSAmIDcpOwotCXZhbCA9IGlvbWRfcmVhZGIoSU9NRF9JUlFNQVNLQyk7Ci0JaW9tZF93cml0ZWIodmFsICYgfm1hc2ssIElPTURfSVJRTUFTS0MpOwotfQotCi1zdGF0aWMgdm9pZCBjbDc1MDBfdW5tYXNrX2lycV9jKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHZhbCwgbWFzazsKLQotCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKLQl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0MpOwotCWlvbWRfd3JpdGViKHZhbCB8IG1hc2ssIElPTURfSVJRTUFTS0MpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGNscHM3NTAwX2NfY2hpcCA9IHsKLQkuYWNrCT0gY2w3NTAwX21hc2tfaXJxX2MsCi0JLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfYywKLQkudW5tYXNrCT0gY2w3NTAwX3VubWFza19pcnFfYywKLX07Ci0KLXN0YXRpYyB2b2lkIGNsNzUwMF9tYXNrX2lycV9kKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHZhbCwgbWFzazsKLQotCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKLQl2YWwgPSBpb21kX3JlYWRiKElPTURfSVJRTUFTS0QpOwotCWlvbWRfd3JpdGViKHZhbCAmIH5tYXNrLCBJT01EX0lSUU1BU0tEKTsKLX0KLQotc3RhdGljIHZvaWQgY2w3NTAwX3VubWFza19pcnFfZCh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7Ci0KLQltYXNrID0gMSA8PCAoaXJxICYgNyk7Ci0JdmFsID0gaW9tZF9yZWFkYihJT01EX0lSUU1BU0tEKTsKLQlpb21kX3dyaXRlYih2YWwgfCBtYXNrLCBJT01EX0lSUU1BU0tEKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjbHBzNzUwMF9kX2NoaXAgPSB7Ci0JLmFjawk9IGNsNzUwMF9tYXNrX2lycV9kLAotCS5tYXNrCT0gY2w3NTAwX21hc2tfaXJxX2QsCi0JLnVubWFzawk9IGNsNzUwMF91bm1hc2tfaXJxX2QsCi19OwotCi1zdGF0aWMgdm9pZCBjbDc1MDBfbWFza19pcnFfZG1hKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHZhbCwgbWFzazsKLQotCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKLQl2YWwgPSBpb21kX3JlYWRiKElPTURfRE1BTUFTSyk7Ci0JaW9tZF93cml0ZWIodmFsICYgfm1hc2ssIElPTURfRE1BTUFTSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsNzUwMF91bm1hc2tfaXJxX2RtYSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7Ci0KLQltYXNrID0gMSA8PCAoaXJxICYgNyk7Ci0JdmFsID0gaW9tZF9yZWFkYihJT01EX0RNQU1BU0spOwotCWlvbWRfd3JpdGViKHZhbCB8IG1hc2ssIElPTURfRE1BTUFTSyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xwczc1MDBfZG1hX2NoaXAgPSB7Ci0JLmFjawk9IGNsNzUwMF9tYXNrX2lycV9kbWEsCi0JLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfZG1hLAotCS51bm1hc2sJPSBjbDc1MDBfdW5tYXNrX2lycV9kbWEsCi19OwotCi1zdGF0aWMgdm9pZCBjbDc1MDBfbWFza19pcnFfZmlxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IHZhbCwgbWFzazsKLQotCW1hc2sgPSAxIDw8IChpcnEgJiA3KTsKLQl2YWwgPSBpb21kX3JlYWRiKElPTURfRklRTUFTSyk7Ci0JaW9tZF93cml0ZWIodmFsICYgfm1hc2ssIElPTURfRklRTUFTSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsNzUwMF91bm1hc2tfaXJxX2ZpcSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7Ci0KLQltYXNrID0gMSA8PCAoaXJxICYgNyk7Ci0JdmFsID0gaW9tZF9yZWFkYihJT01EX0ZJUU1BU0spOwotCWlvbWRfd3JpdGViKHZhbCB8IG1hc2ssIElPTURfRklRTUFTSyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xwczc1MDBfZmlxX2NoaXAgPSB7Ci0JLmFjawk9IGNsNzUwMF9tYXNrX2lycV9maXEsCi0JLm1hc2sJPSBjbDc1MDBfbWFza19pcnFfZmlxLAotCS51bm1hc2sJPSBjbDc1MDBfdW5tYXNrX2lycV9maXEsCi19OwotCi1zdGF0aWMgdm9pZCBjbDc1MDBfbm9fYWN0aW9uKHVuc2lnbmVkIGludCBpcnEpCi17Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xwczc1MDBfbm9fY2hpcCA9IHsKLQkuYWNrCT0gY2w3NTAwX25vX2FjdGlvbiwKLQkubWFzawk9IGNsNzUwMF9ub19hY3Rpb24sCi0JLnVubWFzawk9IGNsNzUwMF9ub19hY3Rpb24sCi19OwotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfaXNhID0gewotCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJpc2EiLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNscHM3NTAwX2luaXRfaXJxKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlycSwgZmxhZ3M7Ci0KLQlpb21kX3dyaXRlYigwLCBJT01EX0lSUU1BU0tBKTsKLQlpb21kX3dyaXRlYigwLCBJT01EX0lSUU1BU0tCKTsKLQlpb21kX3dyaXRlYigwLCBJT01EX0ZJUU1BU0spOwotCWlvbWRfd3JpdGViKDAsIElPTURfRE1BTUFTSyk7Ci0KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCWZsYWdzID0gSVJRRl9WQUxJRDsKLQotCQlpZiAoaXJxIDw9IDYgfHwgKGlycSA+PSA5ICYmIGlycSA8PSAxNSkgfHwKLQkJICAgIChpcnEgPj0gNDggJiYgaXJxIDw9IDU1KSkKLQkJCWZsYWdzIHw9IElSUUZfUFJPQkU7Ci0KLQkJc3dpdGNoIChpcnEpIHsKLQkJY2FzZSAwIC4uLiA3OgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNscHM3NTAwX2FfY2hpcCk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7Ci0JCQlicmVhazsKLQotCQljYXNlIDggLi4uIDE1OgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNscHM3NTAwX2JfY2hpcCk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7Ci0JCQlicmVhazsKLQotCQljYXNlIDE2IC4uLiAyMjoKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjbHBzNzUwMF9kbWFfY2hpcCk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3MoaXJxLCBmbGFncyk7Ci0JCQlicmVhazsKLQotCQljYXNlIDI0IC4uLiAzMToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjbHBzNzUwMF9jX2NoaXApOwotCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSA0MCAuLi4gNDc6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY2xwczc1MDBfZF9jaGlwKTsKLQkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQkJc2V0X2lycV9mbGFncyhpcnEsIGZsYWdzKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgNDggLi4uIDU1OgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNscHM3NTAwX25vX2NoaXApOwotCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSA2NCAuLi4gNzI6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY2xwczc1MDBfZmlxX2NoaXApOwotCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGlycSwgZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzZXR1cF9pcnEoSVJRX0lTQSwgJmlycV9pc2EpOwotfQotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGNsNzUwMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7IAkvKiBJTyBzcGFjZQkqLwotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKUlPX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT19TVEFSVCksCi0JCS5sZW5ndGgJCT0gSU9fU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewkvKiBJU0Egc3BhY2UJKi8KLQkJLnZpcnR1YWwJPSBJU0FfQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElTQV9TVEFSVCksCi0JCS5sZW5ndGgJCT0gSVNBX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogRmxhc2gJKi8KLQkJLnZpcnR1YWwJPSBDTFBTNzUwMF9GTEFTSF9CQVNFLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ0xQUzc1MDBfRkxBU0hfU1RBUlQpLAotCQkubGVuZ3RoCQk9IENMUFM3NTAwX0ZMQVNIX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogTEVECQkqLwotCQkudmlydHVhbAk9IExFRF9CQVNFLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTEVEX1NUQVJUKSwKLQkJLmxlbmd0aAkJPSBMRURfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNscHM3NTAwX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdChjbDc1MDBfaW9fZGVzYywgQVJSQVlfU0laRShjbDc1MDBfaW9fZGVzYykpOwotfQotCi1leHRlcm4gdm9pZCBpb2N0aW1lX2luaXQodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpb2NfdGltZXJfZ2V0dGltZW9mZnNldCh2b2lkKTsKLQotc3RhdGljIGlycXJldHVybl90Ci1jbHBzNzUwMF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXRpbWVyX3RpY2soKTsKLQotCS8qIFdoeSBub3QgdXNpbmcgZG9fbGVkcyBpbnRlcmZhY2U/PyAqLwotCXsKLQkJLyogVHdpbmtsZSB0aGUgbGlnaHRzLiAqLwotCQlzdGF0aWMgaW50IGNvdW50LCBzdGF0ZSA9IDB4ZmYwMDsKLQkJaWYgKGNvdW50LS0gPT0gMCkgewotCQkJc3RhdGUgXj0gMHgxMDA7Ci0JCQljb3VudCA9IDI1OwotCQkJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopTEVEX0FERFJFU1MpID0gc3RhdGU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNscHM3NTAwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiQ0xQUzc1MDAgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5oYW5kbGVyCT0gY2xwczc1MDBfdGltZXJfaW50ZXJydXB0LAotfTsKLQotLyoKLSAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBjbHBzNzUwMF90aW1lcl9pbml0KHZvaWQpCi17Ci0JaW9jdGltZV9pbml0KCk7Ci0Jc2V0dXBfaXJxKElSUV9USU1FUiwgJmNscHM3NTAwX3RpbWVyX2lycSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGNscHM3NTAwX3RpbWVyID0gewotCS5pbml0CQk9IGNscHM3NTAwX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpb2NfdGltZXJfZ2V0dGltZW9mZnNldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5tYXBiYXNlCT0gMHgwMzAxMGZlMCwKLQkJLmlycQkJPSAxMCwKLQkJLnVhcnRjbGsJPSAxODQzMjAwLAotCQkucmVnc2hpZnQJPSAyLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUCB8IFVQRl9TS0lQX1RFU1QsCi0JfSwKLQl7Ci0JCS5tYXBiYXNlCT0gMHgwMzAxMGJlMCwKLQkJLmlycQkJPSAwLAotCQkudWFydGNsawk9IDE4NDMyMDAsCi0JCS5yZWdzaGlmdAk9IDIsCi0JCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9JT1JFTUFQIHwgVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsKLQkJLmlvYmFzZQkJPSBJU0FTTE9UX0lPICsgMHgyZTgsCi0JCS5pcnEJCT0gNDEsCi0JCS51YXJ0Y2xrCT0gMTg0MzIwMCwKLQkJLnJlZ3NoaWZ0CT0gMCwKLQkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCi0JfSwKLQl7Ci0JCS5pb2Jhc2UJCT0gSVNBU0xPVF9JTyArIDB4M2U4LAotCQkuaXJxCQk9IDQwLAotCQkudWFydGNsawk9IDE4NDMyMDAsCi0JCS5yZWdzaGlmdAk9IDAsCi0JCS5pb3R5cGUJCT0gVVBJT19QT1JULAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAotCX0sCi0JeyB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKLQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGNscHM3NTAwX2luaXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwotfQotCi1NQUNISU5FX1NUQVJUKENMUFM3NTAwLCAiQ0wtUFM3NTAwIikKLQkvKiBNYWludGFpbmVyOiBQaGlsaXAgQmx1bmRlbGwgKi8KLQkucGh5c19pbwk9IDB4MDMwMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGUwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLm1hcF9pbwkJPSBjbHBzNzUwMF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gY2xwczc1MDBfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IGNscHM3NTAwX2luaXQsCi0JLnRpbWVyCQk9ICZjbHBzNzUwMF90aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2Fjb3JuZmIuaCBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2Fjb3JuZmIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVhNjMzMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9hY29ybmZiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jZGVmaW5lIGFjb3JuZmJfdmFsaWRfcGl4cmF0ZSh2YXIpICh2YXItPnBpeGNsb2NrID49IDM5MzI1ICYmIHZhci0+cGl4Y2xvY2sgPD0gNDAxMTkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWNvcm5mYl92aWRjMjBfZmluZF9yYXRlcyhzdHJ1Y3QgdmlkY190aW1pbmcgKnZpZGMsCi0JCQkgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQotewotCXVfaW50IGJhbmR3aWR0aDsKLSAgCi0JdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9QSVhfQ0s7Ci0KLQkvKiBDYWxjdWxhdGUgYmFuZHdpZHRoICovCi0JYmFuZHdpZHRoID0gdmFyLT5waXhjbG9jayAqIDggLyB2YXItPmJpdHNfcGVyX3BpeGVsOwotCi0JLyogRW5jb2RlIGJhbmR3aWR0aCBhcyBWSURDMjAgc2V0dGluZyAqLwotCWlmIChiYW5kd2lkdGggPiAxNjY2NyoyKQotCQl2aWRjLT5jb250cm9sIHw9IFZJREMyMF9DVFJMX0ZJRk9fMTY7Ci0JZWxzZSBpZiAoYmFuZHdpZHRoID4gMTMzMzMqMikKLQkJdmlkYy0+Y29udHJvbCB8PSBWSURDMjBfQ1RSTF9GSUZPXzIwOwotCWVsc2UgaWYgKGJhbmR3aWR0aCA+IDExMTExKjIpCi0JCXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfRklGT18yNDsKLQllbHNlCi0JCXZpZGMtPmNvbnRyb2wgfD0gVklEQzIwX0NUUkxfRklGT18yODsKLQotCXZpZGMtPnBsbF9jdGwgID0gMHgyMDIwOwotfQotCi0jaWZkZWYgQ09ORklHX0NIUk9OVEVMXzcwMDMKLSNkZWZpbmUgYWNvcm5mYl9kZWZhdWx0X2NvbnRyb2woKQlWSURDMjBfQ1RSTF9QSVhfSENMSwotI2Vsc2UKLSNkZWZpbmUgYWNvcm5mYl9kZWZhdWx0X2NvbnRyb2woKQlWSURDMjBfQ1RSTF9QSVhfVkNMSwotI2VuZGlmCi0KLSNkZWZpbmUgYWNvcm5mYl9kZWZhdWx0X2Vjb250cm9sKCkJVklEQzIwX0VDVExfREFDIHwgVklEQzIwX0VDVExfUkVHKDMpIHwgVklEQzIwX0VDVExfRUNLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0MTA0ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwotICoKLSAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKLSAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotKi8KLQotCQkubWFjcm8JYWRkcnVhcnQscngKLQkJbW92CVxyeCwgIzB4ZTAwMDAwMDAKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAxMDAwMAotCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCi0JCS5lbmRtCi0KLSNkZWZpbmUgVUFSVF9TSElGVAkyCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZmNkZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmV4dXMgRWxlY3Ryb25pY3MgTHRkLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAotI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICi0KLS8qIERNQSBpcyBub3QgeWV0IGltcGxlbWVudGVkISBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYWNvcm4sIGNvcHkgb3Zlci4uICovCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzIHRoYXQgY2FuIGJlIERNQWQgdG8uCi0gKiBUaGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiAoMHhkMDAwMDAwMCAtIDB4YzAwMDAwMDApCi0gKiBieXRlcyBvZiBSQU0uCi0gKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGQwMDAwMDAwCi0KLSNkZWZpbmUgRE1BX1MwCQkJMAotCi0jZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3ZTU0MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZW50cnktbWFjcm8taW9tZC5TPgotCi0JLmVxdQlpb2NfYmFzZV9oaWdoLCBJT0NfQkFTRSAmIDB4ZmYwMDAwMDAKLQkuZXF1CWlvY19iYXNlX2xvdywgSU9DX0JBU0UgJiAweDAwZmYwMDAwCi0KLQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCi0JbW92CVxiYXNlLCAjaW9jX2Jhc2VfaGlnaAkJQCBwb2ludCBhdCBJT0MKLQkuaWYJaW9jX2Jhc2VfbG93Ci0Jb3JyCVxiYXNlLCBcYmFzZSwgI2lvY19iYXNlX2xvdwotCS5lbmRpZgotCS5lbmRtCi0KLQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKLQkuZW5kbQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZhZDFkNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSBSdXNzZWxsIEtpbmcuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmV4dXMgRWxlY3Ryb25pY3MgTHRkLgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIAotICogQ0w3NTAwIGV2YWx1YXRpb24gYm9hcmQuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAotCi0jaW5jbHVkZSA8bWFjaC9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgotCi0jaWZkZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIElPTUVNKHgpIHgKLSNlbHNlCi0jZGVmaW5lIElPTUVNKHgpICgodm9pZCBfX2lvbWVtICopKHgpKQotI2VuZGlmCi0KLS8qCi0gKiBXaGF0IGhhcmR3YXJlIG11c3QgYmUgcHJlc2VudAotICovCi0jZGVmaW5lIEhBU19JT01ECi0jZGVmaW5lIEhBU19WSURDMjAKLQotLyogSGFyZHdhcmUgYWRkcmVzc2VzIG9mIG1ham9yIGFyZWFzLgotICogICpfU1RBUlQgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKLSAqICAqX1NJWkUgIGlzIHRoZSBzaXplIG9mIHRoZSByZWdpb24KLSAqICAqX0JBU0UgIGlzIHRoZSB2aXJ0dWFsIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIElPX1NUQVJUCQkweDAzMDAwMDAwCS8qIEkvTyAqLwotI2RlZmluZSBJT19TSVpFCQkJMHgwMTAwMDAwMAotI2RlZmluZSBJT19CQVNFCQkJSU9NRU0oMHhlMDAwMDAwMCkKLQotI2RlZmluZSBJU0FfU1RBUlQJCTB4MGMwMDAwMDAJLyogSVNBICovCi0jZGVmaW5lIElTQV9TSVpFCQkweDAwMDEwMDAwCi0jZGVmaW5lIElTQV9CQVNFCQkweGUxMDAwMDAwCi0KLSNkZWZpbmUgQ0xQUzc1MDBfRkxBU0hfU1RBUlQJMHgwMTAwMDAwMAkvKiBYWFggKi8KLSNkZWZpbmUgQ0xQUzc1MDBfRkxBU0hfU0laRQkweDAxMDAwMDAwCi0jZGVmaW5lIENMUFM3NTAwX0ZMQVNIX0JBU0UJMHhlMjAwMDAwMAotCi0jZGVmaW5lIExFRF9TVEFSVAkJMHgwMzAyQjAwMAotI2RlZmluZSBMRURfU0laRQkJMHgwMDAwMTAwMAotI2RlZmluZSBMRURfQkFTRQkJMHhlMzAwMDAwMAotI2RlZmluZSBMRURfQUREUkVTUwkJKExFRF9CQVNFICsgMHhhMDApCi0KLS8qIExldCdzIGRlZmluZSBTQ1JFRU5fU1RBUlQgZm9yIENMNzUwMCwgZXZlbiB0aG91Z2ggaXQncyBhIGxpZS4gKi8KLSNkZWZpbmUgU0NSRUVOX1NUQVJUCQkweDAyMDAwMDAwCS8qIFZSQU0gKi8KLSNkZWZpbmUgU0NSRUVOX0VORAkJMHhkZmMwMDAwMAotI2RlZmluZSBTQ1JFRU5fQkFTRQkJMHhkZjgwMDAwMAotCi0jZGVmaW5lIFZJRENfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZTA0MDAwMDAKLSNkZWZpbmUgSU9NRF9CQVNFCQlJT01FTSgweGUwMjAwMDAwKQotI2RlZmluZSBJT0NfQkFTRQkJSU9NRU0oMHhlMDIwMDAwMCkKLSNkZWZpbmUgRkxPUFBZRE1BX0JBU0UJCUlPTUVNKDB4ZTAwMmEwMDApCi0jZGVmaW5lIFBDSU9fQkFTRQkJSU9NRU0oMHhlMDAxMDAwMCkKLQotI2RlZmluZSB2aWRjX3dyaXRlbCh2YWwpCV9fcmF3X3dyaXRlbCh2YWwsIFZJRENfQkFTRSkKLQotLyogaW4vb3V0IGJpYXMgZm9yIHRoZSBJU0Egc2xvdCByZWdpb24gKi8KLSNkZWZpbmUgSVNBU0xPVF9JTwkJMHg4MDQwMDAwMAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmYyODYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lvLmgKLSAqICBmcm9tIGFyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pby5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IFJ1c3NlbGwgS2luZwotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgMDYtRGVjLTE5OTcJUk1LCUNyZWF0ZWQuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgotCi0vKgotICogR0NDIGlzIHRvdGFsbHkgY3JhcCBhdCBsb2FkaW5nL3N0b3JpbmcgZGF0YS4gIFdlIHRyeSB0byBwZXJzdWFkZSBpdAotICogdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGJ5IHVzaW5nIHRoZXNlIHdoZXJlZXZlciBwb3NzaWJsZSBpbnN0ZWFkIG9mCi0gKiB0aGUgYWJvdmUuCi0gKi8KLSNkZWZpbmUgX19hcmNoX2Jhc2VfZ2V0YihiLG8pCQkJXAotICh7CQkJCQkJXAotCXVuc2lnbmVkIGludCB2LCByID0gKGIpOwkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKLQkJImxkcmIJJTAsIFslMSwgJTJdIgkJXAotCQk6ICI9ciIgKHYpCQkJXAotCQk6ICJyIiAociksICJJciIgKG8pKTsJCVwKLQl2OwkJCQkJXAotIH0pCi0KLSNkZWZpbmUgX19hcmNoX2Jhc2VfZ2V0bChiLG8pCQkJXAotICh7CQkJCQkJXAotCXVuc2lnbmVkIGludCB2LCByID0gKGIpOwkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKLQkJImxkcgklMCwgWyUxLCAlMl0iCQlcCi0JCTogIj1yIiAodikJCQlcCi0JCTogInIiIChyKSwgIklyIiAobykpOwkJXAotCXY7CQkJCQlcCi0gfSkKLQotI2RlZmluZSBfX2FyY2hfYmFzZV9wdXRiKHYsYixvKQkJCVwKLSAoewkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgciA9IChiKTsJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAotCQkic3RyYgklMCwgWyUxLCAlMl0iCQlcCi0JCToJCQkJXAotCQk6ICJyIiAodiksICJyIiAociksICJJciIgKG8pKTsJXAotIH0pCi0KLSNkZWZpbmUgX19hcmNoX2Jhc2VfcHV0bCh2LGIsbykJCQlcCi0gKHsJCQkJCQlcCi0JdW5zaWduZWQgaW50IHIgPSAoYik7CQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKLQkJInN0cgklMCwgWyUxLCAlMl0iCQlcCi0JCToJCQkJXAotCQk6ICJyIiAodiksICJyIiAociksICJJciIgKG8pKTsJXAotIH0pCi0KLS8qCi0gKiBXZSB1c2UgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBhZGRyZXNzaW5nIC0gUEMgc3R5bGUgYWRkcmVzc2VzLCBhbmQgQVJNCi0gKiBhZGRyZXNzZXMuICBQQyBzdHlsZSBhY2Nlc3NlcyB0aGUgUEMgaGFyZHdhcmUgd2l0aCB0aGUgbm9ybWFsIFBDIElPCi0gKiBhZGRyZXNzZXMsIGVnIDB4M2Y4IGZvciBzZXJpYWwjMS4gIEFSTSBhZGRyZXNzZXMgYXJlIDB4ODAwMDAwMDArCi0gKiBhbmQgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIHN0YXJ0IG9mIElPLiAgTm90ZSB0aGF0IGFsbCBhZGRyZXNzZXMgYXJlCi0gKiBzaGlmdGVkIGxlZnQhCi0gKi8KLSNkZWZpbmUgX19QT1JUX1BDSU8oeCkJKCEoKHgpICYgMHg4MDAwMDAwMCkpCi0KLS8qCi0gKiBEeW5hbWljIElPIGZ1bmN0aW9ucyAtIGxldCB0aGUgY29tcGlsZXIKLSAqIG9wdGltaXplIHRoZSBleHByZXNzaW9ucwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19vdXRiICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQotewotCXVuc2lnbmVkIGxvbmcgdGVtcDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCi0JIm1vdgklMCwgJTRcblx0IgotCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKLQkic3RyYgklMSwgWyUwLCAlMiwgbHNsICMyXQlAIG91dGIiCi0JOiAiPSZyIiAodGVtcCkKLQk6ICJyIiAodmFsdWUpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKLQk6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19vdXR3ICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQotewotCXVuc2lnbmVkIGxvbmcgdGVtcDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCi0JIm1vdgklMCwgJTRcblx0IgotCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKLQkic3RyCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgb3V0dyIKLQk6ICI9JnIiICh0ZW1wKQotCTogInIiICh2YWx1ZXx2YWx1ZTw8MTYpLCAiciIgKHBvcnQpLCAiSXIiIChQQ0lPX0JBU0UgLSBJT19CQVNFKSwgIklyIiAoSU9fQkFTRSkKLQk6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19vdXRsICh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBwb3J0KQotewotCXVuc2lnbmVkIGxvbmcgdGVtcDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkidHN0CSUyLCAjMHg4MDAwMDAwMFxuXHQiCi0JIm1vdgklMCwgJTRcblx0IgotCSJhZGRlcQklMCwgJTAsICUzXG5cdCIKLQkic3RyCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgb3V0bCIKLQk6ICI9JnIiICh0ZW1wKQotCTogInIiICh2YWx1ZSksICJyIiAocG9ydCksICJJciIgKFBDSU9fQkFTRSAtIElPX0JBU0UpLCAiSXIiIChJT19CQVNFKQotCTogImNjIik7Ci19Ci0KLSNkZWZpbmUgREVDTEFSRV9EWU5fSU4oc3osZm5zdWZmaXgsaW5zdHIpCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN6IF9faW4jI2Zuc3VmZml4ICh1bnNpZ25lZCBpbnQgcG9ydCkJCVwKLXsJCQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgdGVtcCwgdmFsdWU7CQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCi0JInRzdAklMiwgIzB4ODAwMDAwMDBcblx0IgkJCQkJCVwKLQkibW92CSUwLCAlNFxuXHQiCQkJCQkJCVwKLQkiYWRkZXEJJTAsICUwLCAlM1xuXHQiCQkJCQkJCVwKLQkibGRyIiBpbnN0ciAiCSUxLCBbJTAsICUyLCBsc2wgIzJdCUAgaW4iICNmbnN1ZmZpeAkJCVwKLQk6ICI9JnIiICh0ZW1wKSwgIj1yIiAodmFsdWUpCQkJCQkJXAotCTogInIiIChwb3J0KSwgIklyIiAoUENJT19CQVNFIC0gSU9fQkFTRSksICJJciIgKElPX0JBU0UpCQlcCi0JOiAiY2MiKTsJCQkJCQkJCVwKLQlyZXR1cm4gKHVuc2lnbmVkIHN6KXZhbHVlOwkJCQkJCVwKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb2FkZHIgKHVuc2lnbmVkIGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCQkJXAotCWlmIChfX1BPUlRfUENJTyhwb3J0KSkJCQkJCQkJXAotCQlyZXR1cm4gKHVuc2lnbmVkIGludCkoUENJT19CQVNFICsgKHBvcnQgPDwgMikpOwkJCVwKLQllbHNlCQkJCQkJCQkJXAotCQlyZXR1cm4gKHVuc2lnbmVkIGludCkoSU9fQkFTRSArIChwb3J0IDw8IDIpKTsJCQlcCi19Ci0KLSNkZWZpbmUgREVDTEFSRV9JTyhzeixmbnN1ZmZpeCxpbnN0cikJXAotCURFQ0xBUkVfRFlOX0lOKHN6LGZuc3VmZml4LGluc3RyKQotCi1ERUNMQVJFX0lPKGNoYXIsYiwiYiIpCi1ERUNMQVJFX0lPKHNob3J0LHcsIiIpCi1ERUNMQVJFX0lPKGludCxsLCIiKQotCi0jdW5kZWYgREVDTEFSRV9JTwotI3VuZGVmIERFQ0xBUkVfRFlOX0lOCi0KLS8qCi0gKiBDb25zdGFudCBhZGRyZXNzIElPIGZ1bmN0aW9ucwotICoKLSAqIFRoZXNlIGhhdmUgdG8gYmUgbWFjcm9zIGZvciB0aGUgJ0onIGNvbnN0cmFpbnQgdG8gd29yayAtCi0gKiArLy00MDk2IGltbWVkaWF0ZSBvcGVyYW5kLgotICovCi0jZGVmaW5lIF9fb3V0YmModmFsdWUscG9ydCkJCQkJCQkJXAotKHsJCQkJCQkJCQkJXAotCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkic3RyYgklMCwgWyUxLCAlMl0JQCBvdXRiYyIJCQkJXAotCQk6IDogInIiICh2YWx1ZSksICJyIiAoUENJT19CQVNFKSwgIkpyIiAoKHBvcnQpIDw8IDIpKTsJCVwKLQllbHNlCQkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSJzdHJiCSUwLCBbJTEsICUyXQlAIG91dGJjIgkJCQlcCi0JCTogOiAiciIgKHZhbHVlKSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJXAotfSkKLQotI2RlZmluZSBfX2luYmMocG9ydCkJCQkJCQkJCVwKLSh7CQkJCQkJCQkJCVwKLQl1bnNpZ25lZCBjaGFyIHJlc3VsdDsJCQkJCQkJXAotCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkibGRyYgklMCwgWyUxLCAlMl0JQCBpbmJjIgkJCQkJXAotCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCi0JZWxzZQkJCQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkibGRyYgklMCwgWyUxLCAlMl0JQCBpbmJjIgkJCQkJXAotCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQlcCi0JcmVzdWx0OwkJCQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX19vdXR3Yyh2YWx1ZSxwb3J0KQkJCQkJCQlcCi0oewkJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyB2ID0gdmFsdWU7CQkJCQkJXAotCWlmIChfX1BPUlRfUENJTygocG9ydCkpKQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkic3RyCSUwLCBbJTEsICUyXQlAIG91dHdjIgkJCQlcCi0JCTogOiAiciIgKHZ8djw8MTYpLCAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CVwKLQllbHNlCQkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSJzdHIJJTAsIFslMSwgJTJdCUAgb3V0d2MiCQkJCVwKLQkJOiA6ICJyIiAodnx2PDwxNiksICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKLX0pCi0KLSNkZWZpbmUgX19pbndjKHBvcnQpCQkJCQkJCQlcCi0oewkJCQkJCQkJCQlcCi0JdW5zaWduZWQgc2hvcnQgcmVzdWx0OwkJCQkJCQlcCi0JaWYgKF9fUE9SVF9QQ0lPKChwb3J0KSkpCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSJsZHIJJTAsIFslMSwgJTJdCUAgaW53YyIJCQkJCVwKLQkJOiAiPXIiIChyZXN1bHQpIDogInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkgPDwgMikpOwkJXAotCWVsc2UJCQkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJImxkcgklMCwgWyUxLCAlMl0JQCBpbndjIgkJCQkJXAotCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKElPX0JBU0UpLCAiciIgKChwb3J0KSA8PCAyKSk7CQlcCi0JcmVzdWx0ICYgMHhmZmZmOwkJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9fb3V0bGModmFsdWUscG9ydCkJCQkJCQkJXAotKHsJCQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgdiA9IHZhbHVlOwkJCQkJCVwKLQlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJInN0cgklMCwgWyUxLCAlMl0JQCBvdXRsYyIJCQkJXAotCQk6IDogInIiICh2KSwgInIiIChQQ0lPX0JBU0UpLCAiSnIiICgocG9ydCkgPDwgMikpOwkJXAotCWVsc2UJCQkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJInN0cgklMCwgWyUxLCAlMl0JQCBvdXRsYyIJCQkJXAotCQk6IDogInIiICh2KSwgInIiIChJT19CQVNFKSwgInIiICgocG9ydCkgPDwgMikpOwkJCVwKLX0pCi0KLSNkZWZpbmUgX19pbmxjKHBvcnQpCQkJCQkJCQlcCi0oewkJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyByZXN1bHQ7CQkJCQkJCVwKLQlpZiAoX19QT1JUX1BDSU8oKHBvcnQpKSkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJImxkcgklMCwgWyUxLCAlMl0JQCBpbmxjIgkJCQkJXAotCQk6ICI9ciIgKHJlc3VsdCkgOiAiciIgKFBDSU9fQkFTRSksICJKciIgKChwb3J0KSA8PCAyKSk7CQlcCi0JZWxzZQkJCQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkibGRyCSUwLCBbJTEsICUyXQlAIGlubGMiCQkJCQlcCi0JCTogIj1yIiAocmVzdWx0KSA6ICJyIiAoSU9fQkFTRSksICJyIiAoKHBvcnQpIDw8IDIpKTsJCVwKLQlyZXN1bHQ7CQkJCQkJCQkJXAotfSkKLQotI2RlZmluZSBfX2lvYWRkcmMocG9ydCkJCQkJCQkJCVwKLQkoX19QT1JUX1BDSU8oKHBvcnQpKSA/IFBDSU9fQkFTRSArICgocG9ydCkgPDwgMikgOiBJT19CQVNFICsgKChwb3J0KSA8PCAyKSkKLQotI2RlZmluZSBpbmIocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5iYyhwKSAgICA6IF9faW5iKHApKQotI2RlZmluZSBpbncocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW53YyhwKSAgICA6IF9faW53KHApKQotI2RlZmluZSBpbmwocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5sYyhwKSAgICA6IF9faW5sKHApKQotI2RlZmluZSBvdXRiKHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dGJjKHYscCkgOiBfX291dGIodixwKSkKLSNkZWZpbmUgb3V0dyh2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXR3Yyh2LHApIDogX19vdXR3KHYscCkpCi0jZGVmaW5lIG91dGwodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0bGModixwKSA6IF9fb3V0bCh2LHApKQotI2RlZmluZSBfX2lvYWRkcihwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW9hZGRyKHApICA6IF9faW9hZGRyYyhwKSkKLS8qIHRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgZGVwcmVjYXRlZCAqLwotI2RlZmluZSBpb2FkZHIocG9ydCkJCQlfX2lvYWRkcigocG9ydCkpCi0KLSNkZWZpbmUgaW5zYihwLGQsbCkJX19yYXdfcmVhZHNiKF9faW9hZGRyKHApLGQsbCkKLSNkZWZpbmUgaW5zdyhwLGQsbCkJX19yYXdfcmVhZHN3KF9faW9hZGRyKHApLGQsbCkKLQotI2RlZmluZSBvdXRzYihwLGQsbCkJX19yYXdfd3JpdGVzYihfX2lvYWRkcihwKSxkLGwpCi0jZGVmaW5lIG91dHN3KHAsZCxsKQlfX3Jhd193cml0ZXN3KF9faW9hZGRyKHApLGQsbCkKLQotLyoKLSAqIDE6MSBtYXBwaW5nIGZvciBpb3JlbWFwcGVkIHJlZ2lvbnMuCi0gKi8KLSNkZWZpbmUgX19tZW1fcGNpKHgpCSh4KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvaXJxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMmZjZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvaXJxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvaXJxLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgUnVzc2VsbCBLaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEgTmV4dXMgRWxlY3Ryb25pY3MgTHRkLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAgMTAtMTAtMTk5NglSTUsJQnJvdWdodCB1cCB0byBkYXRlIHdpdGggYXJjaC1zYTExMGV2YWwKLSAqICAgMjItMDgtMTk5OAlSTUsJUmVzdHJ1Y3R1cmVkIElSUSByb3V0aW5lcwotICogICAxMS0wOC0xOTk5CVBKQglDcmVhdGVkIEFSTTc1MDAgdmVyc2lvbiwgZGVyaXZlZCBmcm9tIFJpc2NQQyBjb2RlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KLQotc3RhdGljIGlubGluZSBpbnQgZml4dXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKGlycSA9PSBJUlFfSVNBKSB7Ci0JCWludCBpc2FiaXRzID0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopMHhlMDAyYjcwMCk7Ci0JCWlmIChpc2FiaXRzID09IDApIHsKLQkJCXByaW50aygiU3B1cmlvdXMgSVNBIElSUSFcbiIpOwotCQkJcmV0dXJuIGlycTsKLQkJfQotCQlpcnEgPSBJUlFfSVNBX0JBU0U7Ci0JCXdoaWxlICghKGlzYWJpdHMgJiAxKSkgewotCQkJaXJxKys7Ci0JCQlpc2FiaXRzID4+PSAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIGlycTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL2lycXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVlNjZiNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvaXJxcy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZAotICovCi0KLSNkZWZpbmUgSVJRX0lOVDIJCTAKLSNkZWZpbmUgSVJRX0lOVDEJCTIKLSNkZWZpbmUgSVJRX1ZTWU5DUFVMU0UJCTMKLSNkZWZpbmUgSVJRX1BPV0VST04JCTQKLSNkZWZpbmUgSVJRX1RJTUVSMAkJNQotI2RlZmluZSBJUlFfVElNRVIxCQk2Ci0jZGVmaW5lIElSUV9GT1JDRQkJNwotI2RlZmluZSBJUlFfSU5UOAkJOAotI2RlZmluZSBJUlFfSVNBCQkJOQotI2RlZmluZSBJUlFfSU5UNgkJMTAKLSNkZWZpbmUgSVJRX0lOVDUJCTExCi0jZGVmaW5lIElSUV9JTlQ0CQkxMgotI2RlZmluZSBJUlFfSU5UMwkJMTMKLSNkZWZpbmUgSVJRX0tFWUJPQVJEVFgJCTE0Ci0jZGVmaW5lIElSUV9LRVlCT0FSRFJYCQkxNQotCi0jZGVmaW5lIElSUV9ETUEwCQkxNgotI2RlZmluZSBJUlFfRE1BMQkJMTcKLSNkZWZpbmUgSVJRX0RNQTIJCTE4Ci0jZGVmaW5lIElSUV9ETUEzCQkxOQotI2RlZmluZSBJUlFfRE1BUzAJCTIwCi0jZGVmaW5lIElSUV9ETUFTMQkJMjEKLQotI2RlZmluZSBJUlFfSU9QMAkJMjQKLSNkZWZpbmUgSVJRX0lPUDEJCTI1Ci0jZGVmaW5lIElSUV9JT1AyCQkyNgotI2RlZmluZSBJUlFfSU9QMwkJMjcKLSNkZWZpbmUgSVJRX0lPUDQJCTI4Ci0jZGVmaW5lIElSUV9JT1A1CQkyOQotI2RlZmluZSBJUlFfSU9QNgkJMzAKLSNkZWZpbmUgSVJRX0lPUDcJCTMxCi0KLSNkZWZpbmUgSVJRX01PVVNFUlgJCTQwCi0jZGVmaW5lIElSUV9NT1VTRVRYCQk0MQotI2RlZmluZSBJUlFfQURDCQkJNDIKLSNkZWZpbmUgSVJRX0VWRU5UMQkJNDMKLSNkZWZpbmUgSVJRX0VWRU5UMgkJNDQKLQotI2RlZmluZSBJUlFfSVNBX0JBU0UJCTQ4Ci0jZGVmaW5lIElSUV9JU0FfMwkJNDgKLSNkZWZpbmUgSVJRX0lTQV80CQk0OQotI2RlZmluZSBJUlFfSVNBXzUJCTUwCi0jZGVmaW5lIElSUV9JU0FfNwkJNTEKLSNkZWZpbmUgSVJRX0lTQV85CQk1MgotI2RlZmluZSBJUlFfSVNBXzEwCQk1MwotI2RlZmluZSBJUlFfSVNBXzExCQk1NAotI2RlZmluZSBJUlFfSVNBXzE0CQk1NQkKLQotI2RlZmluZSBGSVFfSU5UOQkJMAotI2RlZmluZSBGSVFfSU5UNQkJMQotI2RlZmluZSBGSVFfSU5UNgkJNAotI2RlZmluZSBGSVFfSU5UOAkJNgotI2RlZmluZSBGSVFfRk9SQ0UJCTcKLQotLyoKLSAqIFRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgRklRICJJUlEiIG51bWJlcnMKLSAqLwotI2RlZmluZSBGSVFfU1RBUlQJCTY0Ci0KLSNkZWZpbmUgSVJRX1RJTUVSCQlJUlFfVElNRVIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IzMmRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcuCi0gKgotICogQ2hhbmdlbG9nOgotICogIDIwLU9jdC0xOTk2CVJNSwlDcmVhdGVkCi0gKiAgMzEtRGVjLTE5OTcJUk1LCUZpeGVkIGRlZmluaXRpb25zIHRvIHJlZHVjZSB3YXJuaW5ncwotICogIDExLUphbi0xOTk4CVJNSwlVbmlubGluZWQgdG8gcmVkdWNlIGhpdHMgb24gY2FjaGUKLSAqICAwOC1GZWItMTk5OAlSTUsJQWRkZWQgX192aXJ0X3RvX2J1cyBhbmQgX19idXNfdG9fdmlydAotICogIDIxLU1hci0xOTk5CVJNSwlSZW5hbWVkIHRvIG1lbW9yeS5oCi0gKgkJUk1LCUFkZGVkIFRBU0tfU0laRSBhbmQgUEFHRV9PRkZTRVQKLSAqLwotI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKLQotLyoKLSAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgotICovCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MTAwMDAwMDApCi0KLS8qCi0gKiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBvbiB0aGUgUmlzY1BDIGFzIHRoZQotICogcGh5c2ljYWwgbWVtb3J5IHZpZXcuCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCi0KLS8qCi0gKiBDYWNoZSBmbHVzaGluZyBhcmVhIC0gUk9NCi0gKi8KLSNkZWZpbmUgRkxVU0hfQkFTRV9QSFlTCQkweDAwMDAwMDAwCi0jZGVmaW5lIEZMVVNIX0JBU0UJCTB4ZGYwMDAwMDAKLQotLyoKLSAqIFNwYXJzZW1lbSBzdXBwb3J0LiAgRWFjaCBzZWN0aW9uIGlzIGEgbWF4aW11bSBvZiA2NE1CLiAgVGhlIHNlY3Rpb25zCi0gKiBhcmUgb2Zmc2V0IGJ5IDEyOE1CIGFuZCBjYW4gY292ZXIgMTI4TUIsIHNvIHRoYXQgZ2l2ZXMgdXMgYSBtYXhpbXVtCi0gKiBvZiAyOSBwaHlzbWVtIGJpdHMuCi0gKi8KLSNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkyOQotI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyNgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMzI1ZmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgTmV4dXMgRWxlY3Ryb25pY3MgTHRkLgotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKLSNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCi17Ci0JaW9tZF93cml0ZWIoMCwgSU9NRF9TVVNNT0RFKTsKLX0KLQotI2RlZmluZSBhcmNoX3Jlc2V0KG1vZGUpCQkJXAotCWRvIHsJCQkJCVwKLQkJaW9tZF93cml0ZWIoMCwgSU9NRF9ST01DUjApOwlcCi0JCWNwdV9yZXNldCgwKTsJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvdGltZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhYTliNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKLSAqCi0gKiBDTDc1MDAgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZAotICovCi0KLS8qCi0gKiBPbiB0aGUgQVJNNzUwMCwgdGhlIGNsb2NrIHRpY2tzIGF0IDJNSHouCi0gKi8KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkyMDAwMDAwCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkMGFmNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIE5leHVzIEVsZWN0cm9uaWNzIEx0ZC4KLSAqLwotI2RlZmluZSBCQVNFIDB4MDMwMTAwMDAKLSNkZWZpbmUgU0VSQkFTRSAoQkFTRSArICgweDJmOCA8PCAyKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHB1dGMoY2hhciBjKQotewotCXdoaWxlICghKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFICsgMHgxNCkpICYgMHgyMCkpCi0JCWJhcnJpZXIoKTsKLQotCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFKSkgPSBjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKLXsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQotewotCWludCBiYXVkID0gMzY4NjQwMCAvICg5NjAwICogMzIpOwotCi0JKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UgKyAweEMpKSA9IDB4ODA7Ci0JKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UgKyAweDApKSA9IGJhdWQgJiAweGZmOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShTRVJCQVNFICsgMHg0KSkgPSAoYmF1ZCAmIDB4ZmYwMCkgPj4gODsKLQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoU0VSQkFTRSArIDB4QykpID0gMzsgLyogOCBiaXRzICovCi0JKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKFNFUkJBU0UgKyAweDEwKSkgPSAzOyAvKiBEVFIsIFJUUyAqLwotfQotCi0vKgotICogbm90aGluZyB0byBkbwotICovCi0jZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmM1NDA2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtY2xwczc1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAotICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MWMwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyZjJkMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoKLSAqIERhVmluY2kgRE1BIGRlZmluaXRpb25zCi0gKgotICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAotI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICi0KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkJMHhmZmZmZmZmZgotCi0jZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGI3OGVlOTEuLmE0ODc5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTI5LDggKzI5LDcgQEAKICAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcmVhbCBJU0Egbm9yIFBDSSBidXNlcywgYnV0IHRoZXJlIGlzIHNvIG1hbnkKICAqIGRyaXZlcnMgb3V0IHRoZXJlIHRoYXQgbWlnaHQganVzdCB3b3JrIGlmIHdlIGZha2UgdGhlbS4uLgogICovCi0jZGVmaW5lIFBDSU9fQkFTRSAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCisjZGVmaW5lIF9faW8oYSkJCQlfX3R5cGVzYWZlX2lvKGEpCiAjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCiAjZGVmaW5lIF9fbWVtX2lzYShhKQkJKGEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGRkMTYyNWMuLjg2YzI1YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNTIsMTMgKzUyLDggQEAKICAgICAgICAgaWYgKChtZW1pbmZvLmJhbmtbMF0uc2l6ZSA+PiAyMCkgPiAxMjgpIF9fYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgem9uZV9zaXplLCBob2xlcykKIAogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoUEhZU19PRkZTRVQgKyAoMTI4PDwyMCkgLSAxKQorI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArICgxMjg8PDIwKSkKIAogI2VuZGlmCiAKLS8qCi0gKiBCdXMgYWRkcmVzcyBpcyBwaHlzaWNhbCBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01FTU9SWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGI5OGJkOWUuLmFkNTE2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC04LDcgKzgsNiBAQAogICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCiAgKiBvciBpbXBsaWVkLgogICovCi0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPG1hY2gvaW8uaD4KIAogLyogQWxsb3cgdm1hbGxvYyByYW5nZSB1bnRpbCB0aGUgSU8gdmlydHVhbCByYW5nZSBtaW51cyBhIDJNICJob2xlIiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MGEwNGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kbWEuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBFQlNBMTEwIERNQSBkZWZpbml0aW9ucwotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBlZWE0Yjc1Li4wY2E2NmQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTIyLDEzICsyMiw2IEBACiAjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCiAKIC8qCi0gKiBXZSBrZWVwIHRoaXMgMToxIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJmZXJlCi0gKiB3aXRoIHRoZSBQQ01DSUEgbWVtb3J5IHJlZ2lvbnMKLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSh4KQotCi0vKgogICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFNSQU0KICAqLwogI2RlZmluZSBGTFVTSF9CQVNFX1BIWVMJCTB4NDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IDVhMWI4YzAuLjU2YmRkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMzMsNiArMzMsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZSBDaXJydXMKIAkgIExvZ2ljIEVEQjkzMDcgRXZhbHVhdGlvbiBCb2FyZC4KIAorY29uZmlnIE1BQ0hfRURCOTMwN0EKKwlib29sICJTdXBwb3J0IENpcnJ1cyBMb2dpYyBFREI5MzA3QSIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgQ2lycnVzCisJICBMb2dpYyBFREI5MzA3QSBFdmFsdWF0aW9uIEJvYXJkLgorCiBjb25maWcgTUFDSF9FREI5MzEyCiAJYm9vbCAiU3VwcG9ydCBDaXJydXMgTG9naWMgRURCOTMxMiIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCmluZGV4IGMxMjUyY2EuLjk0NGU0MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotJChDT05GSUdfTUFDSF9FREI5MzAyKQkrPSBlZGI5MzAyLm8KIG9iai0kKENPTkZJR19NQUNIX0VEQjkzMDJBKQkrPSBlZGI5MzAyYS5vCiBvYmotJChDT05GSUdfTUFDSF9FREI5MzA3KQkrPSBlZGI5MzA3Lm8KK29iai0kKENPTkZJR19NQUNIX0VEQjkzMDdBKQkrPSBlZGI5MzA3YS5vCiBvYmotJChDT05GSUdfTUFDSF9FREI5MzEyKQkrPSBlZGI5MzEyLm8KIG9iai0kKENPTkZJR19NQUNIX0VEQjkzMTUpCSs9IGVkYjkzMTUubwogb2JqLSQoQ09ORklHX01BQ0hfRURCOTMxNUEpCSs9IGVkYjkzMTVhLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Fkc3NwaGVyZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKaW5kZXggNTYxZGI3My4uM2ZiZDliMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsOCArMjksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhZHNzcGhlcmVfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IDB4NjAwMDAwMDAsCi0JLmVuZAkJPSAweDYxZmZmZmZmLAorCS5zdGFydAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwKKwkuZW5kCQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFICsgU1pfMzJNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCkBAIC01OSw3ICs2MCw3IEBACiAJLyogTWFpbnRhaW5lcjogTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggOGM5ZjI0OS4uOTYwNDkyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCkBAIC0xNiwxMSArMTYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RydWN0IGNsayB7Ci0JY2hhcgkJKm5hbWU7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJdTMyCQllbmFibGVfcmVnOwpAQCAtMjgsNTMgKzI5LDMzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydCA9IHsKLQkubmFtZQkJPSAiVUFSVENMSyIsCiAJLnJhdGUJCT0gMTQ3NDU2MDAsCiB9Owotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7Ci0JLm5hbWUJCT0gInBsbDEiLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0gewotCS5uYW1lCQk9ICJmY2xrIiwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfaCA9IHsKLQkubmFtZQkJPSAiaGNsayIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3AgPSB7Ci0JLm5hbWUJCT0gInBjbGsiLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0gewotCS5uYW1lCQk9ICJwbGwyIiwKLX07CitzdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7CitzdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VzYl9ob3N0ID0gewotCS5uYW1lCQk9ICJ1c2JfaG9zdCIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19VU0hfRU4sCiB9OwogCisjZGVmaW5lIElOSVRfQ0soZGV2LGNvbixjaykJCQkJCVwKKwl7IC5kZXZfaWQgPSBkZXYsIC5jb25faWQgPSBjb24sIC5jbGsgPSBjayB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbG9ja3NbXSA9IHsKLQkmY2xrX3VhcnQsCi0JJmNsa19wbGwxLAotCSZjbGtfZiwKLQkmY2xrX2gsCi0JJmNsa19wLAotCSZjbGtfcGxsMiwKLQkmY2xrX3VzYl9ob3N0LAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soImFwYjp1YXJ0MSIsIE5VTEwsICZjbGtfdWFydCksCisJSU5JVF9DSygiYXBiOnVhcnQyIiwgTlVMTCwgJmNsa191YXJ0KSwKKwlJTklUX0NLKCJhcGI6dWFydDMiLCBOVUxMLCAmY2xrX3VhcnQpLAorCUlOSVRfQ0soTlVMTCwgInBsbDEiLCAmY2xrX3BsbDEpLAorCUlOSVRfQ0soTlVMTCwgImZjbGsiLCAmY2xrX2YpLAorCUlOSVRfQ0soTlVMTCwgImhjbGsiLCAmY2xrX2gpLAorCUlOSVRfQ0soTlVMTCwgInBjbGsiLCAmY2xrX3ApLAorCUlOSVRfQ0soTlVMTCwgInBsbDIiLCAmY2xrX3BsbDIpLAorCUlOSVRfQ0soTlVMTCwgInVzYl9ob3N0IiwgJmNsa191c2JfaG9zdCksCiB9OwogCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja3MpOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoY2xvY2tzW2ldLT5uYW1lLCBpZCkpCi0JCQlyZXR1cm4gY2xvY2tzW2ldOwotCX0KLQotCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtMTA2LDEyICs4Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CiAKLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotCi0KIAogc3RhdGljIGNoYXIgZmNsa19kaXZpc29yc1tdID0geyAxLCAyLCA0LCA4LCAxNiwgMSwgMSwgMSB9Owogc3RhdGljIGNoYXIgaGNsa19kaXZpc29yc1tdID0geyAxLCAyLCA0LCA1LCA2LCA4LCAxNiwgMzIgfTsKQEAgLTEzOCw2ICsxMTMsNyBAQAogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCkKIHsKIAl1MzIgdmFsdWU7CisJaW50IGk7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMSk7CiAJaWYgKCEodmFsdWUgJiAweDAwODAwMDAwKSkgewkJCS8qIFBMTDEgYnlwYXNzZWQ/ICAqLwpAQCAtMTY1LDYgKzE0MSw4IEBACiAJCWNsa19mLnJhdGUgLyAxMDAwMDAwLCBjbGtfaC5yYXRlIC8gMTAwMDAwMCwKIAkJY2xrX3AucmF0ZSAvIDEwMDAwMDApOwogCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZjbG9ja3NbaV0pOwogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChlcDkzeHhfY2xvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggNDgzNDVmYi4uNDc4MWYzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTE1MywxMiArMTU1LDE0IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF9lbmFibGVkWzNdOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTFbM107CiBzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMlszXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X2RlYm91Y2VbM107CiAKIC8qIFBvcnQgb3JkZXJpbmcgaXM6IEEgQiBGICovCiBzdGF0aWMgY29uc3QgdTggaW50X3R5cGUxX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5MCwgMHhhYywgMHg0YyB9Owogc3RhdGljIGNvbnN0IHU4IGludF90eXBlMl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OTQsIDB4YjAsIDB4NTAgfTsKIHN0YXRpYyBjb25zdCB1OCBlb2lfcmVnaXN0ZXJfb2Zmc2V0WzNdCQk9IHsgMHg5OCwgMHhiNCwgMHg1NCB9Owogc3RhdGljIGNvbnN0IHU4IGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OWMsIDB4YjgsIDB4NTggfTsKK3N0YXRpYyBjb25zdCB1OCBpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweGE4LCAweGM0LCAweDY0IH07CiAKIHZvaWQgZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXModW5zaWduZWQgcG9ydCkKIHsKQEAgLTE4MSw2ICsxODUsMjIgQEAKIAlncGlvX2ludF91bm1hc2tlZFtsaW5lID4+IDNdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKIH0KIAordm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmIChlbmFibGUpCisJCWdwaW9faW50X2RlYm91Y2VbcG9ydF0gfD0gcG9ydF9tYXNrOworCWVsc2UKKwkJZ3Bpb19pbnRfZGVib3VjZVtwb3J0XSAmPSB+cG9ydF9tYXNrOworCisJX19yYXdfd3JpdGViKGdwaW9faW50X2RlYm91Y2VbcG9ydF0sCisJCUVQOTNYWF9HUElPX1JFRyhpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFUDkzeHggSVJRIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ5Nyw2ICs1MTcsMjYgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9ldGhfZGV2aWNlKTsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlcDkzeHhfaTJjX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImkyYy1ncGlvIiwKKwkuaWQJCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKK307CisKK3ZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQoreworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG51bSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfaTJjX2RldmljZSk7Cit9CisKIGV4dGVybiB2b2lkIGVwOTN4eF9ncGlvX2luaXQodm9pZCk7CiAKIHZvaWQgX19pbml0IGVwOTN4eF9pbml0X2RldmljZXModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDIuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDIuYwppbmRleCBlNGFkZDViLi44YmY4ZDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzAyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwMi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTI4LDggKzI5LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRiOTMwMl9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gMHg2MDAwMDAwMCwKLQkuZW5kCQk9IDB4NjBmZmZmZmYsCisJLnN0YXJ0CQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFLAorCS5lbmQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UgKyBTWl8xNk0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTU5LDcgKzYwLDcgQEAKIAkvKiBNYWludGFpbmVyOiBHZW9yZ2UgS2FzaHBlcmtvIDxnZW9yZ2VAY2hhcy5jb20udWE+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwMmEuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDJhLmMKaW5kZXggMDJjNDQwNS4uYTM1MmM1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwMmEuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzAyYS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTI4LDggKzI5LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRiOTMwMmFfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IDB4NjAwMDAwMDAsCi0JLmVuZAkJPSAweDYwZmZmZmZmLAorCS5zdGFydAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwKKwkuZW5kCQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFICsgU1pfMTZNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCkBAIC00NCw3ICs0NSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBlZGI5MzAyYV9ldGhfZGF0YSA9IHsKLQkucGh5X2lkCQkJPSAxLAorCS5waHlfaWQJCT0gMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlZGI5MzAyYV9pbml0X21hY2hpbmUodm9pZCkKQEAgLTU5LDcgKzYwLDcgQEAKIAkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFMF9QSFlTX0JBU0UgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwNy5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwNy5jCmluZGV4IDA0MGVkYmQuLjVhYjIyZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDcuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsOCArMjksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZGI5MzA3X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJPSAweDYwMDAwMDAwLAotCS5lbmQJCT0gMHg2MWZmZmZmZiwKKwkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzMyTSAtIDEsCiAJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtNDQsNyArNDUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgZWRiOTMwN19ldGhfZGF0YSA9IHsKLQkucGh5X2lkCQkJPSAxLAorCS5waHlfaWQJCT0gMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlZGI5MzA3X2luaXRfbWFjaGluZSh2b2lkKQpAQCAtNTksNyArNjAsNyBAQAogCS8qIE1haW50YWluZXI6IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWMyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCisgKiBDaXJydXMgTG9naWMgRURCOTMwN0Egc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSCBIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlZGI5MzA3YV9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZGI5MzA3YV9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzE2TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWRiOTMwN2FfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlZGI5MzA3YV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZlZGI5MzA3YV9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIGVkYjkzMDdhX2V0aF9kYXRhID0geworCS5waHlfaWQJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5MzA3YV9pbml0X21hY2hpbmUodm9pZCkKK3sKKwllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZGI5MzA3YV9mbGFzaCk7CisKKwllcDkzeHhfcmVnaXN0ZXJfZXRoKCZlZGI5MzA3YV9ldGhfZGF0YSwgMSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoRURCOTMwN0EsICJDaXJydXMgTG9naWMgRURCOTMwN0EgRXZhbHVhdGlvbiBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogSCBIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UwX1BIWVNfQkFTRSArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGVkYjkzMDdhX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzEyLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzEyLmMKaW5kZXggNjg1M2UzMC4uZDcxNzlmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yOSw4ICszMCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzMTJfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IDB4NjAwMDAwMDAsCi0JLmVuZAkJPSAweDYxZmZmZmZmLAorCS5zdGFydAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwKKwkuZW5kCQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFICsgU1pfMzJNIC0gMSwKIAkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCkBAIC00NSw3ICs0Niw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBlZGI5MzEyX2V0aF9kYXRhID0gewotCS5waHlfaWQJCQk9IDEsCisJLnBoeV9pZAkJPSAxLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGVkYjkzMTJfaW5pdF9tYWNoaW5lKHZvaWQpCkBAIC02MCw3ICs2MSw3IEBACiAJLyogTWFpbnRhaW5lcjogVG91ZmVlcSBIdXNzYWluIDx0b3VmZWVxX2h1c3NhaW5AaW5mb3N5cy5jb20+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxNS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxNS5jCmluZGV4IDk0NjliMzUuLjAyNWFmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzE1LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsOCArMjksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZGI5MzE1X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJPSAweDYwMDAwMDAwLAotCS5lbmQJCT0gMHg2MWZmZmZmZiwKKwkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzMyTSAtIDEsCiAJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtNDQsNyArNDUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgZWRiOTMxNV9ldGhfZGF0YSA9IHsKLQkucGh5X2lkCQkJPSAxLAorCS5waHlfaWQJCT0gMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlZGI5MzE1X2luaXRfbWFjaGluZSh2b2lkKQpAQCAtNTksNyArNjAsNyBAQAogCS8qIE1haW50YWluZXI6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTVhLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzE1YS5jCmluZGV4IDU4NDQ1N2MuLjRjOWNjOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTVhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxNWEuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yOCw4ICsyOSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzMTVhX2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAkJPSAweDYwMDAwMDAwLAotCS5lbmQJCT0gMHg2MGZmZmZmZiwKKwkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzE2TSAtIDEsCiAJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtNDQsNyArNDUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgZWRiOTMxNWFfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pZAkJCT0gMSwKKwkucGh5X2lkCQk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTMxNWFfaW5pdF9tYWNoaW5lKHZvaWQpCkBAIC01OSw3ICs2MCw3IEBACiAJLyogTWFpbnRhaW5lcjogTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHhjMDAwMDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTBfUEhZU19CQVNFICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKaW5kZXggMDM1YjI0ZS4uM2JhZDUwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsOCArMjksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnZXNiYzkzMTJfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CQk9IDB4NjAwMDAwMDAsCi0JLmVuZAkJPSAweDYwN2ZmZmZmLAorCS5zdGFydAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSwKKwkuZW5kCQk9IEVQOTNYWF9DUzZfUEhZU19CQVNFICsgU1pfOE0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTU5LDcgKzYwLDcgQEAKIAkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmYTk2NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZjcwMjA0MS4uMGExNDk4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC05OSw2ICs5OSw4IEBACiAvKiBtYXhpbXVtIHZhbHVlIGZvciBpcnEgY2FwYWJsZSBsaW5lIGlkZW50aWZpZXJzICovCiAjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUQlFUDkzWFhfR1BJT19MSU5FX0YoNykKIAorZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpOworCiAvKiBuZXcgZ2VuZXJpYyBHUElPIEFQSSAtIHNlZSBEb2N1bWVudGF0aW9uL2dwaW8udHh0ICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDFhYjlhOTAuLmZkNWYwODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC00LDUgKzQsNSBAQAogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkweGZmZmZmZmZmCiAKLSNkZWZpbmUgX19pbyhwKQkJCSgodm9pZCBfX2lvbWVtICopKHApKQotI2RlZmluZSBfX21lbV9wY2kocCkJCShwKQorI2RlZmluZSBfX2lvKHApCQlfX3R5cGVzYWZlX2lvKHApCisjZGVmaW5lIF9fbWVtX3BjaShwKQkocCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBmMWI2MzM1Li41YzgwYzNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC03LDggKzcsNCBAQAogCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDAwMDAwMDAwKQogCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCBkYjI0ODlkLi44OGY3ZTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTQsNiArMTQsNyBAQAogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9ldGgoc3RydWN0IGVwOTN4eF9ldGhfZGF0YSAqZGF0YSwgaW50IGNvcHlfYWRkcik7Cit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKTsKIHZvaWQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVwOTN4eF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCBjMjE5NzIzLi4xNWQ2ODE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMjUsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIG1pY3JvOV9ldGhfZGF0YSA9IHsKLSAgICAgICAucGh5X2lkICAgICAgICAgICAgICAgICA9IDB4MWYsCisJLnBoeV9pZAkJPSAweDFmLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9pbml0KHZvaWQpCkBAIC0zOCw0NiArMzksNDYgQEAKICAqLwogI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUgKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG1pY3JvOWhfZmxhc2hfZGF0YSA9IHsKLSAgICAgICAud2lkdGggICAgICAgICAgPSA0LAorCS53aWR0aAkJPSA0LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzloX2ZsYXNoX3Jlc291cmNlID0gewotICAgICAgIC5zdGFydCAgICAgICAgICA9IDB4MTAwMDAwMDAsCi0gICAgICAgLmVuZCAgICAgICAgICAgID0gMHgxM2ZmZmZmZiwKLSAgICAgICAuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gRVA5M1hYX0NTMV9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1MxX1BIWVNfQkFTRSArIFNaXzY0TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85aF9mbGFzaCA9IHsKLSAgICAgICAubmFtZSAgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCi0gICAgICAgLmlkICAgICAgICAgICAgID0gMCwKLSAgICAgICAuZGV2ICAgICAgICAgICAgPSB7Ci0gICAgICAgICAgICAgICAucGxhdGZvcm1fZGF0YSAgPSAmbWljcm85aF9mbGFzaF9kYXRhLAotICAgICAgIH0sCi0gICAgICAgLm51bV9yZXNvdXJjZXMgID0gMSwKLSAgICAgICAucmVzb3VyY2UgICAgICAgPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1pY3JvOWhfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXQodm9pZCkKIHsKLSAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOWhfZmxhc2gpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWljcm85aF9mbGFzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXRfbWFjaGluZSh2b2lkKQogewotICAgICAgIGVwOTN4eF9pbml0X2RldmljZXMoKTsKLSAgICAgICBtaWNybzlfaW5pdCgpOwotICAgICAgIG1pY3JvOWhfaW5pdCgpOworCWVwOTN4eF9pbml0X2RldmljZXMoKTsKKwltaWNybzlfaW5pdCgpOworCW1pY3JvOWhfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKE1JQ1JPOSwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiKQotICAgICAgIC8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCi0gICAgICAgLnBoeXNfaW8gICAgICAgID0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCi0gICAgICAgLmlvX3BnX29mZnN0ICAgID0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotICAgICAgIC5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCi0gICAgICAgLm1hcF9pbyAgICAgICAgID0gZXA5M3h4X21hcF9pbywKLSAgICAgICAuaW5pdF9pcnEgICAgICAgPSBlcDkzeHhfaW5pdF9pcnEsCi0gICAgICAgLnRpbWVyICAgICAgICAgID0gJmVwOTN4eF90aW1lciwKLSAgICAgICAuaW5pdF9tYWNoaW5lICAgPSBtaWNybzloX2luaXRfbWFjaGluZSwKKwkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOWhfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCkBAIC04NywxOSArODgsMTkgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlNCiBzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bV9pbml0X21hY2hpbmUodm9pZCkKIHsKLSAgICAgICBlcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0gICAgICAgbWljcm85X2luaXQoKTsKKwllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisJbWljcm85X2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIpCi0gICAgICAgLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KLSAgICAgICAucGh5c19pbyAgICAgICAgPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKLSAgICAgICAuaW9fcGdfb2Zmc3QgICAgPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0gICAgICAgLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKLSAgICAgICAubWFwX2lvICAgICAgICAgPSBlcDkzeHhfbWFwX2lvLAotICAgICAgIC5pbml0X2lycSAgICAgICA9IGVwOTN4eF9pbml0X2lycSwKLSAgICAgICAudGltZXIgICAgICAgICAgPSAmZXA5M3h4X3RpbWVyLAotICAgICAgIC5pbml0X21hY2hpbmUgICA9IG1pY3JvOW1faW5pdF9tYWNoaW5lLAorCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85bV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKQEAgLTEwOSwxOSArMTEwLDE5IEBACiAjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TAogc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWxfaW5pdF9tYWNoaW5lKHZvaWQpCiB7Ci0gICAgICAgZXA5M3h4X2luaXRfZGV2aWNlcygpOwotICAgICAgIG1pY3JvOV9pbml0KCk7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCW1pY3JvOV9pbml0KCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwiKQotICAgICAgIC8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCi0gICAgICAgLnBoeXNfaW8gICAgICAgID0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCi0gICAgICAgLmlvX3BnX29mZnN0ICAgID0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotICAgICAgIC5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCi0gICAgICAgLm1hcF9pbyAgICAgICAgID0gZXA5M3h4X21hcF9pbywKLSAgICAgICAuaW5pdF9pcnEgICAgICAgPSBlcDkzeHhfaW5pdF9pcnEsCi0gICAgICAgLnRpbWVyICAgICAgICAgID0gJmVwOTN4eF90aW1lciwKLSAgICAgICAuaW5pdF9tYWNoaW5lICAgPSBtaWNybzlsX2luaXRfbWFjaGluZSwKKwkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOWxfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCmluZGV4IGI0YWE0YzAuLjdlZTAyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbTQ4dDg2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xMTcsNyArMTE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0czcyeHhfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFRTNzJYWF9OT1JfUEhZU19CQVNFLAotCS5lbmQJCT0gVFM3MlhYX05PUl9QSFlTX0JBU0UgKyAweDAwZmZmZmZmLAorCS5lbmQJCT0gVFM3MlhYX05PUl9QSFlTX0JBU0UgKyBTWl8xNk0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTE0NCwyMSArMTQ1LDIxIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbTQ4dDg2X29wcyB0czcyeHhfcnRjX29wcyA9IHsKLQkucmVhZGJ5dGUJCT0gdHM3Mnh4X3J0Y19yZWFkYnl0ZSwKLQkud3JpdGVieXRlCQk9IHRzNzJ4eF9ydGNfd3JpdGVieXRlLAorCS5yZWFkYnl0ZQk9IHRzNzJ4eF9ydGNfcmVhZGJ5dGUsCisJLndyaXRlYnl0ZQk9IHRzNzJ4eF9ydGNfd3JpdGVieXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3Mnh4X3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJydGMtbTQ4dDg2IiwKLQkuaWQJCQk9IC0xLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJCT0gJnRzNzJ4eF9ydGNfb3BzLAorCS5uYW1lCQk9ICJydGMtbTQ4dDg2IiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRzNzJ4eF9ydGNfb3BzLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSB0czcyeHhfZXRoX2RhdGEgPSB7Ci0JLnBoeV9pZAkJCT0gMSwKKwkucGh5X2lkCQk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdHM3Mnh4X2luaXRfbWFjaGluZSh2b2lkKQpAQCAtMTc1LDcgKzE3Niw3IEBACiAJLyogTWFpbnRhaW5lcjogTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IHRzNzJ4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtaHcuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLWh3LmMKaW5kZXggNmE1YjQzNy4uMWI5OTZiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtaHcuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1ody5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYwppbmRleCA4MTgwMTRlLi4zNmZmMDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAgCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggYjJhMjExOC4uZGEzNWJjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwppbmRleCBkNGMxZTUyLi4xMzMwODYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCmluZGV4IGI2NTNlOWMuLjRmMzUwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYwppbmRleCBiMWQzYmYyLi4zMDA0MGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMKQEAgLTQsNiArNCw3IEBACiAgKiBFQlNBMjg1IG1hY2hpbmUgZml4dXAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBmZmFlYTkwLi41MWRkOTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xMiw4ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+Ci0KIC8qICAgVmlydHVhbCAgICAgIFBoeXNpY2FsCVNpemUKICAqIDB4ZmY4MDAwMDAJMHg0MDAwMDAwMAkxTUIJWC1CdXMKICAqIDB4ZmYwMDAwMDAJMHg3YzAwMDAwMAkxTUIJUENJIEkvTyBzcGFjZQpAQCAtMjgsOSArMjYsNiBAQAogI2RlZmluZSBYQlVTX1NJWkUJCTB4MDAxMDAwMDAKICNkZWZpbmUgWEJVU19CQVNFCQkweGZmODAwMDAwCiAKLSNkZWZpbmUgUENJT19TSVpFCQkweDAwMTAwMDAwCi0jZGVmaW5lIFBDSU9fQkFTRQkJMHhmZjAwMDAwMAotCiAjZGVmaW5lIEFSTUNTUl9TSVpFCQkweDAwMTAwMDAwCiAjZGVmaW5lIEFSTUNTUl9CQVNFCQkweGZlMDAwMDAwCiAKQEAgLTkxLDEwICs4NiwxMSBAQAogI2RlZmluZSBDUExEX0ZMQVNIX1dSX0VOQUJMRQkxCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBncGlvX21vZGlmeV9vcChpbnQgbWFzaywgaW50IHNldCk7Ci1leHRlcm4gdm9pZCBncGlvX21vZGlmeV9pbyhpbnQgbWFzaywgaW50IGluKTsKLWV4dGVybiBpbnQgIGdwaW9fcmVhZCh2b2lkKTsKLWV4dGVybiB2b2lkIGNwbGRfbW9kaWZ5KGludCBtYXNrLCBpbnQgc2V0KTsKK2V4dGVybiBzcGlubG9ja190IG53X2dwaW9fbG9jazsKK2V4dGVybiB2b2lkIG53X2dwaW9fbW9kaWZ5X29wKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgc2V0KTsKK2V4dGVybiB2b2lkIG53X2dwaW9fbW9kaWZ5X2lvKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgaW4pOworZXh0ZXJuIHVuc2lnbmVkIGludCBud19ncGlvX3JlYWQodm9pZCk7CitleHRlcm4gdm9pZCBud19jcGxkX21vZGlmeSh1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNldCk7CiAjZW5kaWYKIAogI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGE3YjA2NjIuLjEwMWE0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE0LDcgKzE0LDggQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjZGVmaW5lIFBDSU9fU0laRQkJMHgwMDEwMDAwMAorI2RlZmluZSBQQ0lPX0JBU0UJCTB4ZmYwMDAwMDAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZG1hLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IDYyYWZkMjEuLjViZDRhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZG1hLmgKKyAqICBhcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAogICoKICAqICBBcmNoaXRlY3R1cmUgRE1BIHJvdXRpbmVzCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNmFlMmYxYS4uY2IxNmU1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0zMCw5ICszMCwxOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX192aXJ0X3RvX2J1cyh1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyk7CiAjZW5kaWYKKyNkZWZpbmUgX192aXJ0X3RvX2J1cwlfX3ZpcnRfdG9fYnVzCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQJX19idXNfdG9fdmlydAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GT09UQlJJREdFX0hPU1QpCiAKKy8qCisgKiBUaGUgZm9vdGJyaWRnZSBpcyBwcm9ncmFtbWVkIHRvIGV4cG9zZSB0aGUgc3lzdGVtIFJBTSBhdCB0aGUgY29ycmVzcG9uZGluZworICogYWRkcmVzcy4gIFNvLCBpZiBQQUdFX09GRlNFVCBpcyAweGMwMDAwMDAwLCBSQU0gYXBwZWFycyBhdCAweGUwMDAwMDAwLgorICogSWYgMHg4MDAwMDAwMCwgdGhlbiBpdHMgZXhwb3NlZCBhdCAweGEwMDAwMDAwIG9uIHRoZSBidXMuIGV0Yy4KKyAqIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIFJBTSBpc24ndCBwbGFjZWQgYXQgYnVzIGFkZHJlc3MgMCB3aGljaAorICogd291bGQgY2xhc2ggd2l0aCBWR0EgY2FyZHMuCisgKi8KICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gMHhlMDAwMDAwMCkKICNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpICsgMHhlMDAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1pcnEuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtaXJxLmMKaW5kZXggNTRmZWM5YS4uOWVlODBhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLWlycS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jCmluZGV4IDAwYjBkZGMuLmFjN2ZmYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgpAQCAtNjcsMTMgKzY4LDE0IEBACiAvKgogICogVGhpcyBpcyBhIGxvY2sgZm9yIGFjY2Vzc2luZyBwb3J0cyBHUDFfSU9fQkFTRSBhbmQgR1AyX0lPX0JBU0UKICAqLwotREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitERUZJTkVfU1BJTkxPQ0sobndfZ3Bpb19sb2NrKTsKK0VYUE9SVF9TWU1CT0wobndfZ3Bpb19sb2NrKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBjdXJyZW50X2dwaW9fb3A7CiBzdGF0aWMgdW5zaWduZWQgaW50IGN1cnJlbnRfZ3Bpb19pbzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3VycmVudF9jcGxkOwogCi12b2lkIGdwaW9fbW9kaWZ5X29wKGludCBtYXNrLCBpbnQgc2V0KQordm9pZCBud19ncGlvX21vZGlmeV9vcCh1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNldCkKIHsKIAl1bnNpZ25lZCBpbnQgbmV3X2dwaW8sIGNoYW5nZWQ7CiAKQEAgLTg2LDYgKzg4LDcgQEAKIAlpZiAoY2hhbmdlZCAmIDB4ZmYwMCkKIAkJb3V0YihuZXdfZ3BpbyA+PiA4LCBHUDJfSU9fQkFTRSk7CiB9CitFWFBPUlRfU1lNQk9MKG53X2dwaW9fbW9kaWZ5X29wKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fZ3Bpb19tb2RpZnlfaW8oaW50IG1hc2ssIGludCBpbikKIHsKQEAgLTExOCw3ICsxMjEsNyBAQAogCX0KIH0KIAotdm9pZCBncGlvX21vZGlmeV9pbyhpbnQgbWFzaywgaW50IGluKQordm9pZCBud19ncGlvX21vZGlmeV9pbyh1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGluKQogewogCS8qIE9wZW4gdXAgdGhlIFN1cGVySU8gY2hpcCAqLwogCXdiOTc3X29wZW4oKTsKQEAgLTEyOCwxMSArMTMxLDEzIEBACiAJLyogQ2xvc2UgdXAgdGhlIEVGRVIgZ2F0ZSAqLwogCXdiOTc3X2Nsb3NlKCk7CiB9CitFWFBPUlRfU1lNQk9MKG53X2dwaW9fbW9kaWZ5X2lvKTsKIAotaW50IGdwaW9fcmVhZCh2b2lkKQordW5zaWduZWQgaW50IG53X2dwaW9fcmVhZCh2b2lkKQogewogCXJldHVybiBpbmIoR1AxX0lPX0JBU0UpIHwgaW5iKEdQMl9JT19CQVNFKSA8PCA4OwogfQorRVhQT1JUX1NZTUJPTChud19ncGlvX3JlYWQpOwogCiAvKgogICogSW5pdGlhbGlzZSB0aGUgV2luYm9uZCBXODM5NzdGIGdsb2JhbCByZWdpc3RlcnMKQEAgLTMyMiw5ICszMjcsOSBAQAogCS8qCiAJICogU2V0IEdyb3VwMS9Hcm91cDIgb3V0cHV0cwogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlncGlvX21vZGlmeV9vcCgtMSwgR1BJT19SRURfTEVEIHwgR1BJT19GQU4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZud19ncGlvX2xvY2ssIGZsYWdzKTsKKwlud19ncGlvX21vZGlmeV9vcCgtMSwgR1BJT19SRURfTEVEIHwgR1BJT19GQU4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMzU5LDM0ICszNjQsMzUgQEAKIAl3Yjk3N19jbG9zZSgpOwogfQogCi12b2lkIGNwbGRfbW9kaWZ5KGludCBtYXNrLCBpbnQgc2V0KQordm9pZCBud19jcGxkX21vZGlmeSh1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNldCkKIHsKIAlpbnQgbXNrOwogCiAJY3VycmVudF9jcGxkID0gKGN1cnJlbnRfY3BsZCAmIH5tYXNrKSB8IHNldDsKIAotCWdwaW9fbW9kaWZ5X2lvKEdQSU9fREFUQSB8IEdQSU9fSU9DTEsgfCBHUElPX0lPTE9BRCwgMCk7Ci0JZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0xPQUQsIDApOworCW53X2dwaW9fbW9kaWZ5X2lvKEdQSU9fREFUQSB8IEdQSU9fSU9DTEsgfCBHUElPX0lPTE9BRCwgMCk7CisJbndfZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0xPQUQsIDApOwogCiAJZm9yIChtc2sgPSA4OyBtc2s7IG1zayA+Pj0gMSkgewogCQlpbnQgYml0ID0gY3VycmVudF9jcGxkICYgbXNrOwogCi0JCWdwaW9fbW9kaWZ5X29wKEdQSU9fREFUQSB8IEdQSU9fSU9DTEssIGJpdCA/IEdQSU9fREFUQSA6IDApOwotCQlncGlvX21vZGlmeV9vcChHUElPX0lPQ0xLLCBHUElPX0lPQ0xLKTsKKwkJbndfZ3Bpb19tb2RpZnlfb3AoR1BJT19EQVRBIHwgR1BJT19JT0NMSywgYml0ID8gR1BJT19EQVRBIDogMCk7CisJCW53X2dwaW9fbW9kaWZ5X29wKEdQSU9fSU9DTEssIEdQSU9fSU9DTEspOwogCX0KIAotCWdwaW9fbW9kaWZ5X29wKEdQSU9fSU9DTEt8R1BJT19EQVRBLCAwKTsKLQlncGlvX21vZGlmeV9vcChHUElPX0lPTE9BRHxHUElPX0RTQ0xLLCBHUElPX0lPTE9BRHxHUElPX0RTQ0xLKTsKLQlncGlvX21vZGlmeV9vcChHUElPX0lPTE9BRCwgMCk7CisJbndfZ3Bpb19tb2RpZnlfb3AoR1BJT19JT0NMS3xHUElPX0RBVEEsIDApOworCW53X2dwaW9fbW9kaWZ5X29wKEdQSU9fSU9MT0FEfEdQSU9fRFNDTEssIEdQSU9fSU9MT0FEfEdQSU9fRFNDTEspOworCW53X2dwaW9fbW9kaWZ5X29wKEdQSU9fSU9MT0FELCAwKTsKIH0KK0VYUE9SVF9TWU1CT0wobndfY3BsZF9tb2RpZnkpOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY3BsZF9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQljcGxkX21vZGlmeSgtMSwgQ1BMRF9VTk1VVEUgfCBDUExEXzcxMTFfRElTQUJMRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOworCW53X2NwbGRfbW9kaWZ5KC0xLCBDUExEX1VOTVVURSB8IENQTERfNzExMV9ESVNBQkxFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZud19ncGlvX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgcndhX3VubG9ja1tdIF9faW5pdGRhdGEgPQpAQCAtNTk2LDEyICs2MDIsNiBAQAogCXJ3YTAxMF9zb3VuZGJsYXN0ZXJfcmVzZXQoKTsKIH0KIAotRVhQT1JUX1NZTUJPTChncGlvX2xvY2spOwotRVhQT1JUX1NZTUJPTChncGlvX21vZGlmeV9vcCk7Ci1FWFBPUlRfU1lNQk9MKGdwaW9fbW9kaWZ5X2lvKTsKLUVYUE9SVF9TWU1CT0woY3BsZF9tb2RpZnkpOwotRVhQT1JUX1NZTUJPTChncGlvX3JlYWQpOwotCiAvKgogICogSW5pdGlhbGlzZSBhbnkgb3RoZXIgaGFyZHdhcmUgYWZ0ZXIgd2UndmUgZ290IHRoZSBQQ0kgYnVzCiAgKiBpbml0aWFsaXNlZC4gIFdlIG1heSBuZWVkIHRoZSBQQ0kgYnVzIHRvIHRhbGsgdG8gdGhpcyBvdGhlcgpAQCAtNjE2LDkgKzYxNiw5IEBACiAJCWNwbGRfaW5pdCgpOwogCQlyd2EwMTBfaW5pdCgpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQkJZ3Bpb19tb2RpZnlfb3AoR1BJT19SRURfTEVEfEdQSU9fR1JFRU5fTEVELCBERUZBVUxUX0xFRFMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOworCQlud19ncGlvX21vZGlmeV9vcChHUElPX1JFRF9MRUR8R1BJT19HUkVFTl9MRUQsIERFRkFVTFRfTEVEUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMKaW5kZXggZDkxYTRmNC4uMDAyNjlmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1sZWRzLmMKQEAgLTMyLDcgKzMyLDYgQEAKIHN0YXRpYyBjaGFyIGh3X2xlZF9zdGF0ZTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhsZWRzX2xvY2spOwotZXh0ZXJuIHNwaW5sb2NrX3QgZ3Bpb19sb2NrOwogCiBzdGF0aWMgdm9pZCBuZXR3aW5kZXJfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpCiB7CkBAIC0xMjEsOSArMTIwLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZWRzX2xvY2ssIGZsYWdzKTsKIAogCWlmICAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQlncGlvX21vZGlmeV9vcChHUElPX1JFRF9MRUQgfCBHUElPX0dSRUVOX0xFRCwgaHdfbGVkX3N0YXRlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZud19ncGlvX2xvY2ssIGZsYWdzKTsKKwkJbndfZ3Bpb19tb2RpZnlfb3AoR1BJT19SRURfTEVEIHwgR1BJT19HUkVFTl9MRUQsIGh3X2xlZF9zdGF0ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3BlcnNvbmFsLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwuYwppbmRleCBjNGY4NDNmLi5lMmM5ZjA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwuYwpAQCAtNCw2ICs0LDcgQEAKICAqIFBlcnNvbmFsIHNlcnZlciAoU2tpZmYpIG1hY2hpbmUgZml4dXAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDFkYWI3NGMuLjJjODY1OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTQsMTEgKzE0LDkgQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8oYSkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCiAjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kbWEuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IDBhOWQ4NmUuLjNlYWZiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kbWEuaAorICogYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCiAgKgogICogQXJjaGl0ZWN0dXJlIERNQSByb3V0ZXMKICAqCkBAIC04LDEzICs4LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICiAKLS8qCi0gKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzIHRoYXQgY2FuIGJlIERNQWQgdG8uCi0gKiBUaGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiAoMHhkMDAwMDAwMCAtIDB4YzAwMDAwMDApCi0gKiBieXRlcyBvZiBSQU0uCi0gKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGQwMDAwMDAwCi0KICNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX0g3MjAxKQogI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTMKICNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfSDcyMDIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGNiMjZmNDkuLmVmNGMxZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC03LDIzICs3LDEzIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0vKgotICogUGFnZSBvZmZzZXQ6Ci0gKiAgICAoIDB4YzAwMDAwMDBVTCApCi0gKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHg0MDAwMDAwMCkKLQogLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICogICAgICAgICAgICAgIGFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICogICAgICAgICAgICAgIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKgotICogVGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGhlcmUgbGF0ZXIgISwgTWFyIDIwMDAsIEp1bmdqdW4gS2ltCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzIHRoYXQgY2FuIGJlIERNQWQgdG8uCisgKiBUaGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiAoMHhkMDAwMDAwMCAtIDB4YzAwMDAwMDApCisgKiBieXRlcyBvZiBSQU0uCiAgKi8KLQotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMjU2TSAtIDEpCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMjU2TSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jCmluZGV4IGMxMDgxMGMuLjE1MzY1ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtZG1hLmg+CiAKIHN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgaW14X2RtYV9jaGFubmVsc1tJTVhfRE1BX0NIQU5ORUxTXTsKQEAgLTEzOCw3ICsxMzksNyBAQAogaW50CiBpbXhfZG1hX3NldHVwX3NpbmdsZShpbXhfZG1hY2hfdCBkbWFfY2gsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCiAJCSAgICAgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKLQkJICAgICBkbWFtb2RlX3QgZG1hbW9kZSkKKwkJICAgICB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKIHsKIAlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tkbWFfY2hdOwogCkBAIC0yMjMsNyArMjI0LDcgQEAKIGludAogaW14X2RtYV9zZXR1cF9zZyhpbXhfZG1hY2hfdCBkbWFfY2gsCiAJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc2djb3VudCwgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsCi0JCSB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGRtYW1vZGVfdCBkbWFtb2RlKQorCQkgdW5zaWduZWQgaW50IGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKIHsKIAlpbnQgcmVzOwogCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2RtYV9jaF07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14LWRtYS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lteC1kbWEuaAppbmRleCA0NGQ4OWMzLi5iYmU1NGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14LWRtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXgtZG1hLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNpZm5kZWYgX19BU01fQVJDSF9JTVhfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9JTVhfRE1BX0gKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIHZvaWQgKik7CiAJdm9pZCAoKmVycl9oYW5kbGVyKSAoaW50LCB2b2lkICosIGludCBlcnJjb2RlKTsKIAl2b2lkICpkYXRhOwotCWRtYW1vZGVfdCAgZG1hX21vZGU7CisJdW5zaWduZWQgaW50ICBkbWFfbW9kZTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBzZ2JjOwogCXVuc2lnbmVkIGludCBzZ2NvdW50OwpAQCAtNjYsMTQgKzY2LDE4IEBACiAvKiBUaGUgdHlwZSB0byBkaXN0aW5ndWlzaCBjaGFubmVsIG51bWJlcnMgcGFyYW1ldGVyIGZyb20gb3JkaW5hbCBpbnQgdHlwZSAqLwogdHlwZWRlZiBpbnQgaW14X2RtYWNoX3Q7CiAKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkJMAorI2RlZmluZSBETUFfTU9ERV9XUklURQkJMQorI2RlZmluZSBETUFfTU9ERV9NQVNLCQkxCisKIGludAogaW14X2RtYV9zZXR1cF9zaW5nbGUoaW14X2RtYWNoX3QgZG1hX2NoLCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAotCQl1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aCwgdW5zaWduZWQgaW50IGRldl9hZGRyLCBkbWFtb2RlX3QgZG1hbW9kZSk7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIHVuc2lnbmVkIGludCBkbWFtb2RlKTsKIAogaW50CiBpbXhfZG1hX3NldHVwX3NnKGlteF9kbWFjaF90IGRtYV9jaCwKIAkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzZ2NvdW50LCB1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aCwKLQkJIHVuc2lnbmVkIGludCBkZXZfYWRkciwgZG1hbW9kZV90IGRtYW1vZGUpOworCQkgdW5zaWduZWQgaW50IGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgZG1hbW9kZSk7CiAKIGludAogaW14X2RtYV9zZXR1cF9oYW5kbGVycyhpbXhfZG1hY2hfdCBkbWFfY2gsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvaW14ZmIuaCBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCmluZGV4IDNlZDllYzguLjg3MGQwZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oCkBAIC0xLDcgKzEsNTIgQEAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIG1hY2hpbmUgd2hpY2ggd2UgYXJlIHJ1bm5pbmcgb24uCiAgKi8KLXN0cnVjdCBpbXhmYl9tYWNoX2luZm8geworCisjZGVmaW5lIFBDUl9URlQJCSgxIDw8IDMxKQorI2RlZmluZSBQQ1JfQ09MT1IJKDEgPDwgMzApCisjZGVmaW5lIFBDUl9QQlNJWl8xCSgwIDw8IDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfMgkoMSA8PCAyOCkKKyNkZWZpbmUgUENSX1BCU0laXzQJKDIgPDwgMjgpCisjZGVmaW5lIFBDUl9QQlNJWl84CSgzIDw8IDI4KQorI2RlZmluZSBQQ1JfQlBJWF8xCSgwIDw8IDI1KQorI2RlZmluZSBQQ1JfQlBJWF8yCSgxIDw8IDI1KQorI2RlZmluZSBQQ1JfQlBJWF80CSgyIDw8IDI1KQorI2RlZmluZSBQQ1JfQlBJWF84CSgzIDw8IDI1KQorI2RlZmluZSBQQ1JfQlBJWF8xMgkoNCA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTYJKDQgPDwgMjUpCisjZGVmaW5lIFBDUl9QSVhQT0wJKDEgPDwgMjQpCisjZGVmaW5lIFBDUl9GTE1QT0wJKDEgPDwgMjMpCisjZGVmaW5lIFBDUl9MUFBPTAkoMSA8PCAyMikKKyNkZWZpbmUgUENSX0NMS1BPTAkoMSA8PCAyMSkKKyNkZWZpbmUgUENSX09FUE9MCSgxIDw8IDIwKQorI2RlZmluZSBQQ1JfU0NMS0lETEUJKDEgPDwgMTkpCisjZGVmaW5lIFBDUl9FTkRfU0VMCSgxIDw8IDE4KQorI2RlZmluZSBQQ1JfRU5EX0JZVEVfU1dBUCAoMSA8PCAxNykKKyNkZWZpbmUgUENSX1JFVl9WUwkoMSA8PCAxNikKKyNkZWZpbmUgUENSX0FDRF9TRUwJKDEgPDwgMTUpCisjZGVmaW5lIFBDUl9BQ0QoeCkJKCgoeCkgJiAweDdmKSA8PCA4KQorI2RlZmluZSBQQ1JfU0NMS19TRUwJKDEgPDwgNykKKyNkZWZpbmUgUENSX1NIQVJQCSgxIDw8IDYpCisjZGVmaW5lIFBDUl9QQ0QoeCkJKCh4KSAmIDB4M2YpCisKKyNkZWZpbmUgUFdNUl9DTFMoeCkJKCgoeCkgJiAweDFmZikgPDwgMTYpCisjZGVmaW5lIFBXTVJfTERNU0sJKDEgPDwgMTUpCisjZGVmaW5lIFBXTVJfU0NSMQkoMSA8PCAxMCkKKyNkZWZpbmUgUFdNUl9TQ1IwCSgxIDw8IDkpCisjZGVmaW5lIFBXTVJfQ0NfRU4JKDEgPDwgOCkKKyNkZWZpbmUgUFdNUl9QVyh4KQkoKHgpICYgMHhmZikKKworI2RlZmluZSBMU0NSMV9QU19SSVNFX0RFTEFZKHgpICAgICgoKHgpICYgMHg3ZikgPDwgMjYpCisjZGVmaW5lIExTQ1IxX0NMU19SSVNFX0RFTEFZKHgpICAgKCgoeCkgJiAweDNmKSA8PCAxNikKKyNkZWZpbmUgTFNDUjFfUkVWX1RPR0dMRV9ERUxBWSh4KSAoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgTFNDUjFfR1JBWTIoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgTFNDUjFfR1JBWTEoeCkgICAgICAgICAgICAoKCh4KSAmIDB4ZikpCisKKyNkZWZpbmUgRE1BQ1JfQlVSU1QJKDEgPDwgMzEpCisjZGVmaW5lIERNQUNSX0hNKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgRE1BQ1JfVE0oeCkJKCh4KSAmIDB4ZikKKworc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIHsKIAl1X2xvbmcJCXBpeGNsb2NrOwogCiAJdV9zaG9ydAkJeHJlczsKQEAgLTM0LDQgKzc5LDUgQEAKIAl2b2lkICgqbGNkX3Bvd2VyKShpbnQpOwogCXZvaWQgKCpiYWNrbGlnaHRfcG93ZXIpKGludCk7CiB9Owotdm9pZCBzZXRfaW14X2ZiX2luZm8oc3RydWN0IGlteGZiX21hY2hfaW5mbyAqaGFyZF9pbXhfZmJfaW5mbyk7CisKK3ZvaWQgc2V0X2lteF9mYl9pbmZvKHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYzUwYzVmYS4uOWUxOTdhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTIwLDExICsyMCw5IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAotI2RlZmluZSBfX2lvKGEpCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQogI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDVjNDUzMDYuLmE5M2RmN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTIzLDE0ICsyMyw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwODAwMDAwMCkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICogICAgICAgICAgICAgIGFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICogICAgICAgICAgICAgIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHggLSBQSFlTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKaW5kZXggOGQ3NjFmZC4uOTg5ZWNmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmMKQEAgLTEwLDQyICsxMCwxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0NTI1Lmg+Ci0KLSNpbmNsdWRlICJjbG9jay5oIgotCi1zdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlzdHJ1Y3QgY2xrICpwLCAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIGNsazsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldCk7Ci0KLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbW9kdWxlX3B1dChjbGstPm93bmVyKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTY3LDcgKzM3LDYgQEAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJc3RydWN0IGljc3Q1MjVfdmNvIHZjbzsKLQogCXZjbyA9IGljc3Q1MjVfa2h6X3RvX3ZjbyhjbGstPnBhcmFtcywgcmF0ZSAvIDEwMDApOwogCXJldHVybiBpY3N0NTI1X2toeihjbGstPnBhcmFtcywgdmNvKSAqIDEwMDA7CiB9CkBAIC03Niw1NiArNDUsMTUgQEAKIGludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50IHJldCA9IC1FSU87CisKIAlpZiAoY2xrLT5zZXR2Y28pIHsKIAkJc3RydWN0IGljc3Q1MjVfdmNvIHZjbzsKIAogCQl2Y28gPSBpY3N0NTI1X2toel90b192Y28oY2xrLT5wYXJhbXMsIHJhdGUgLyAxMDAwKTsKIAkJY2xrLT5yYXRlID0gaWNzdDUyNV9raHooY2xrLT5wYXJhbXMsIHZjbykgKiAxMDAwOwotCi0JCXByaW50aygiQ2xvY2sgJXM6IHNldHRpbmcgVkNPIHJlZyBwYXJhbXM6IFM9JWQgUj0lZCBWPSVkXG4iLAotCQkJY2xrLT5uYW1lLCB2Y28ucywgdmNvLnIsIHZjby52KTsKLQogCQljbGstPnNldHZjbyhjbGssIHZjbyk7CiAJCXJldCA9IDA7CiAJfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7Ci0KLS8qCi0gKiBUaGVzZSBhcmUgZml4ZWQgY2xvY2tzLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBrbWlfY2xrID0gewotCS5uYW1lCT0gIktNSVJFRkNMSyIsCi0JLnJhdGUJPSAyNDAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0gewotCS5uYW1lCT0gIlVBUlRDTEsiLAotCS5yYXRlCT0gMTQ3NDU2MDAsCi19OwotCi1pbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKLQotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKLQotc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKLXsKLQljbGtfcmVnaXN0ZXIoJmttaV9jbGspOwotCWNsa19yZWdpc3RlcigmdWFydF9jbGspOwotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oCmluZGV4IDA5ZTYzMjguLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jbG9jay5oCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2Nsb2NrLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgotICogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLXN0cnVjdCBtb2R1bGU7Ci1zdHJ1Y3QgaWNzdDUyNV9wYXJhbXM7Ci0KLXN0cnVjdCBjbGsgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQl1bnNpZ25lZCBsb25nCQlyYXRlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQljb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgKnBhcmFtczsKLQl2b2lkCQkJKmRhdGE7Ci0Jdm9pZAkJCSgqc2V0dmNvKShzdHJ1Y3QgY2xrICosIHN0cnVjdCBpY3N0NTI1X3ZjbyB2Y28pOwotfTsKLQotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggNTk1YjczOS4uYzg5Yzk0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvYXJtX3RpbWVyLmg+CkBAIC0xMDgsMTAgKzExMCw0MyBAQAogCSZrbWkxX2RldmljZSwKIH07CiAKKy8qCisgKiBUaGVzZSBhcmUgZml4ZWQgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBjbGsyNG1oeiA9IHsKKwkucmF0ZQk9IDI0MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydGNsayA9IHsKKwkucmF0ZQk9IDE0NzQ1NjAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCXsJLyogVUFSVDAgKi8KKwkJLmRldl9pZAkJPSAibWI6MTYiLAorCQkuY2xrCQk9ICZ1YXJ0Y2xrLAorCX0sIHsJLyogVUFSVDEgKi8KKwkJLmRldl9pZAkJPSAibWI6MTciLAorCQkuY2xrCQk9ICZ1YXJ0Y2xrLAorCX0sIHsJLyogS01JMCAqLworCQkuZGV2X2lkCQk9ICJtYjoxOCIsCisJCS5jbGsJCT0gJmNsazI0bWh6LAorCX0sIHsJLyogS01JMSAqLworCQkuZGV2X2lkCQk9ICJtYjoxOSIsCisJCS5jbGsJCT0gJmNsazI0bWh6LAorCX0sIHsJLyogTU1DSSAtIEludGVncmF0b3JDUCAqLworCQkuZGV2X2lkCQk9ICJtYjoxYyIsCisJCS5jbGsJCT0gJnVhcnRjbGssCisJfQorfTsKKwogc3RhdGljIGludCBfX2luaXQgaW50ZWdyYXRvcl9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CiAJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGQsICZpb21lbV9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCmluZGV4IDE3MjI5OWEuLjAwNThjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbXBkMS5jCkBAIC0yMiwxMyArMjIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3Q1MjUuaD4KICNpbmNsdWRlIDxtYWNoL2xtLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXBkMS5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKLQogc3RhdGljIGludCBtb2R1bGVfaWQ7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChsbWlkLCBtb2R1bGVfaWQsIGludCwgMDQ0NCk7CkBAIC0zNyw2ICszNyw3IEBACiBzdHJ1Y3QgaW1wZDFfbW9kdWxlIHsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAJc3RydWN0IGNsawl2Y29zWzJdOworCXN0cnVjdCBjbGtfbG9va3VwICpjbGtzWzNdOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpY3N0NTI1X3BhcmFtcyBpbXBkMV92Y29fcGFyYW1zID0gewpAQCAtMzM5LDkgKzM0MCw4IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmltcGQxX3Zjb25hbWVzWzJdID0gewotCSJDTENEQ0xLIiwKLQkiQVVYVkNPMiIsCitzdGF0aWMgc3RydWN0IGNsayBmaXhlZF8xNDc0NTYwMCA9IHsKKwkucmF0ZSA9IDE0NzQ1NjAwLAogfTsKIAogc3RhdGljIGludCBpbXBkMV9wcm9iZShzdHJ1Y3QgbG1fZGV2aWNlICpkZXYpCkBAIC0zNzQsMTQgKzM3NCwyMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1wZDEtPnZjb3MpOyBpKyspIHsKIAkJaW1wZDEtPnZjb3NbaV0ub3duZXIgPSBUSElTX01PRFVMRSwKLQkJaW1wZDEtPnZjb3NbaV0ubmFtZSA9IGltcGQxX3Zjb25hbWVzW2ldLAogCQlpbXBkMS0+dmNvc1tpXS5wYXJhbXMgPSAmaW1wZDFfdmNvX3BhcmFtcywKIAkJaW1wZDEtPnZjb3NbaV0uZGF0YSA9IGltcGQxLAogCQlpbXBkMS0+dmNvc1tpXS5zZXR2Y28gPSBpbXBkMV9zZXR2Y287Ci0KLQkJY2xrX3JlZ2lzdGVyKCZpbXBkMS0+dmNvc1tpXSk7CiAJfQogCisJaW1wZDEtPmNsa3NbMF0gPSBjbGtkZXZfYWxsb2MoJmltcGQxLT52Y29zWzBdLCBOVUxMLCAibG0leDowMTAwMCIsCisJCQkJCWRldi0+aWQpOworCWltcGQxLT5jbGtzWzFdID0gY2xrZGV2X2FsbG9jKCZmaXhlZF8xNDc0NTYwMCwgTlVMTCwgImxtJXg6MDAxMDAiLAorCQkJCQlkZXYtPmlkKTsKKwlpbXBkMS0+Y2xrc1syXSA9IGNsa2Rldl9hbGxvYygmZml4ZWRfMTQ3NDU2MDAsIE5VTEwsICJsbSV4OjAwMjAwIiwKKwkJCQkJZGV2LT5pZCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1wZDEtPmNsa3MpOyBpKyspCisJCWNsa2Rldl9hZGQoaW1wZDEtPmNsa3NbaV0pOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1wZDFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgaW1wZDFfZGV2aWNlICppZGV2ID0gaW1wZDFfZGV2cyArIGk7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZDsKQEAgLTQzNCw4ICs0NDAsOCBAQAogCiAJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgTlVMTCwgaW1wZDFfcmVtb3ZlX29uZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXBkMS0+dmNvcyk7IGkrKykKLQkJY2xrX3VucmVnaXN0ZXIoJmltcGQxLT52Y29zW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXBkMS0+Y2xrcyk7IGkrKykKKwkJY2xrZGV2X2Ryb3AoaW1wZDEtPmNsa3NbaV0pOwogCiAJbG1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5M2U0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0NTI1Lmg+CisKK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGxvbmcJCXJhdGU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IHN0cnVjdCBpY3N0NTI1X3BhcmFtcyAqcGFyYW1zOworCXZvaWQJCQkqZGF0YTsKKwl2b2lkCQkJKCpzZXR2Y28pKHN0cnVjdCBjbGsgKiwgc3RydWN0IGljc3Q1MjVfdmNvIHZjbyk7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBfX2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiB0cnlfbW9kdWxlX2dldChjbGstPm93bmVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlYmU4NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggYmU3ZTYzYy4uMmIyZTdhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yNCwxNiArMjQsOSBAQAogICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQlVTX09GRlNFVAlVTCgweDgwMDAwMDAwKQogCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKiAgICAgICAgICAgICAgYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKiAgICAgICAgICAgICAgdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSh4IC0gUEFHRV9PRkZTRVQgKyBCVVNfT0ZGU0VUKQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSh4IC0gQlVTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQorI2RlZmluZSBCVVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUICsgQlVTX09GRlNFVCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpIC0gQlVTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IDg4MDI2Y2MuLjQyN2MyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMzgsNyArNDAsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImNsb2NrLmgiCiAKICNkZWZpbmUgSU5UQ1BfUEFfTU1DX0JBU0UJCTB4MWMwMDAwMDAKICNkZWZpbmUgSU5UQ1BfUEFfQUFDSV9CQVNFCQkweDFkMDAwMDAwCkBAIC0yODksMTUgKzI5MCwxNiBAQAogCXdyaXRlbCgwLCBDTV9MT0NLKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgY3BfY2xjZF9jbGsgPSB7Ci0JLm5hbWUJPSAiQ0xDRENMSyIsCitzdGF0aWMgc3RydWN0IGNsayBjcF9hdXhjbGsgPSB7CiAJLnBhcmFtcwk9ICZjcF9hdXh2Y29fcGFyYW1zLAogCS5zZXR2Y28gPSBjcF9hdXh2Y29fc2V0LAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY3BfbW1jaV9jbGsgPSB7Ci0JLm5hbWUJPSAiTUNMSyIsCi0JLnJhdGUJPSAxNDc0NTYwMCwKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjcF9sb29rdXBzW10gPSB7CisJewkvKiBDTENEICovCisJCS5kZXZfaWQJCT0gIm1iOmMwIiwKKwkJLmNsawkJPSAmY3BfYXV4Y2xrLAorCX0sCiB9OwogCiAvKgpAQCAtNTU0LDggKzU1Niw4IEBACiB7CiAJaW50IGk7CiAKLQljbGtfcmVnaXN0ZXIoJmNwX2NsY2RfY2xrKTsKLQljbGtfcmVnaXN0ZXIoJmNwX21tY2lfY2xrKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcF9sb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZjcF9sb29rdXBzW2ldKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGludGNwX2RldnMsIEFSUkFZX1NJWkUoaW50Y3BfZGV2cykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5ODQ2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jaWZuZGVmIF9JT1AxM1hYX0RNQV9ICi0jZGVmaW5lIF9JT1AxM1hYX0RNQV9ICi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGI4MjYwMmQuLmUwMTJiZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTYsMTggKzE2LDYgQEAKICNkZWZpbmUgSU9QMTNYWF9QTU1SX1BfU1RBUlQgKElPUDEzWFhfUE1NUl9QSFlTX01FTV9CQVNFKQogI2RlZmluZSBJT1AxM1hYX1BNTVJfUF9FTkQgICAoSU9QMTNYWF9QTU1SX1BIWVNfTUVNX0JBU0UgKyBJT1AxM1hYX1BNTVJfU0laRSkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gUENJIERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwotICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KLSAqCQlhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKLSAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKLSAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgotICovCi0KLS8qIFJBTSBoYXMgMToxIG1hcHBpbmcgb24gdGhlIFBDSWUveCBCdXNzZXMgKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoX192aXJ0X3RvX3BoeXMoeCkpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKF9fcGh5c190b192aXJ0KHgpKQotCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgX192aXJ0X3RvX2xidXModW5zaWduZWQgbG9uZyB4KQogewogCXJldHVybiB4ICsgSU9QMTNYWF9QTU1SX1BIWVNfTUVNX0JBU0UgLSBJT1AxM1hYX1BNTVJfVklSVF9NRU1fQkFTRTsKQEAgLTU1LDcgKzQzLDcgQEAKIAkJaWYgKGlzX2xidXNfZGV2aWNlKGRldikgJiYgX19pc19sYnVzX2RtYShfX2RtYSkpCVwKIAkJCV9fdmlydCA9IF9fbGJ1c190b192aXJ0KF9fZG1hKTsJCQlcCiAJCWVsc2UJCQkJCQkJXAotCQkJX192aXJ0ID0gX19idXNfdG9fdmlydChfX2RtYSk7CQkJXAorCQkJX192aXJ0ID0gX19waHlzX3RvX3ZpcnQoX19kbWEpOwkJCVwKIAkJKHZvaWQgKilfX3ZpcnQ7CQkJCQkJXAogCX0pCiAKQEAgLTY2LDcgKzU0LDcgQEAKIAkJaWYgKGlzX2xidXNfZGV2aWNlKGRldikgJiYgX19pc19sYnVzX3ZpcnQoX192aXJ0KSkJXAogCQkJX19kbWEgPSBfX3ZpcnRfdG9fbGJ1cyhfX3ZpcnQpOwkJCVwKIAkJZWxzZQkJCQkJCQlcCi0JCQlfX2RtYSA9IF9fdmlydF90b19idXMoX192aXJ0KTsJCQlcCisJCQlfX2RtYSA9IF9fdmlydF90b19waHlzKF9fdmlydCk7CQkJXAogCQlfX2RtYTsJCQkJCQkJXAogCX0pCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCA1YjFmMWM4Li40NWZiMjc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xLDMgKzEgQEAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFICgxMDAgKiBIWikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiZDgxNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGNlNTQ3MDUuLjMzOWU1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9fSU9fSAogI2RlZmluZSBfX0lPX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9wM3h4Lmg+CiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wM3h4X2lvcmVtYXAodW5zaWduZWQgbG9uZyBjb29raWUsIHNpemVfdCBzaXplLAogCXVuc2lnbmVkIGludCBtdHlwZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNDJjZDRiZi4uYzMwZjY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNSwyMiArNSw5IEBACiAjaWZuZGVmIF9fTUVNT1JZX0gKICNkZWZpbmUgX19NRU1PUllfSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAvKgogICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhhMDAwMDAwMCkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gUENJIERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwotICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KLSAqCQlhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKLSAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKLSAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgotICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJKF9fdmlydF90b19waHlzKHgpKQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCShfX3BoeXNfdG9fdmlydCh4KSkKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAyMGY5MjNlLi4zMmQ5ZTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC03LDggKzcsOSBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb3AzeHguaD4KKyNpbmNsdWRlIDxtYWNoL24yMTAwLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggYTU0MWFmYy4uNzI2MmFiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTMsNyArMyw0IEBACiAgKgogICogSU9QMzJ4IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwogICovCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoMTAwICogSFopCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjQyMjMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEludGVsIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAxNTg4NzQ2Li5lOTlhN2VkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfX0lPX0gKICNkZWZpbmUgX19JT19ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvcDN4eC5oPgogCiBleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcDN4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgY29va2llLCBzaXplX3Qgc2l6ZSwKIAl1bnNpZ25lZCBpbnQgbXR5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDJjZWYwYmIuLmEzMGE5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTUsMjIgKzUsOSBAQAogI2lmbmRlZiBfX01FTU9SWV9ICiAjZGVmaW5lIF9fTUVNT1JZX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogLyoKICAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgogICovCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCiAKLS8qCi0gKiBWaXJ0dWFsIHZpZXcgPC0+IFBDSSBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKgkJYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCShfX3ZpcnRfdG9fcGh5cyh4KSkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoX19waHlzX3RvX3ZpcnQoeCkpCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggN2JmM2JmYi4uMGNiM2FkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtNyw2ICs3LDcgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb3AzeHguaD4KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCBjNzU3NjA4Li41NGM1ODkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMyw3ICszLDQgQEAKICAqCiAgKiBJT1AzeHggYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCiAgKi8KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCSgxMDAgKiBIWikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA2M2Q2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMjQxNTI5YS4uYWVlN2ViOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xNSwxMyArMTUsNiBAQAogCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCiAKLS8qCi0gKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwotICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KLSAqCQlhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKLSAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKLSAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgotICovCiAjaW5jbHVkZSA8bWFjaC9peHAyMDAwLXJlZ3MuaD4KIAogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODg2NTQ0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAzMDVlYTE4Li5mZDllZjhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0yMCw4ICsyMCw2IEBACiAjZGVmaW5lIF9faW8ocCkJCSgodm9pZCBfX2lvbWVtKikoKHApICsgSVhQMjNYWF9QQ0lfSU9fVklSVCkpCiAjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBGb3IgQlVHICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKIGl4cDIzeHhfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IG10eXBlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggOWQ0MDExNS4uZmRkMTM4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xOSwxNiArMTksNiBAQAogICovCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQkoMHgwMDAwMDAwMCkKIAotCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKgkJYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHYpCQkJCQkJXAogCSh7IHVuc2lnbmVkIGludCByZXQ7CQkJCQkJXAogCXJldCA9ICgoX192aXJ0X3RvX3BoeXModikgLSAweDAwMDAwMDAwKSArCQkJXApAQCAtNDMsNiArMzMsMyBAQAogI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkJMQogCiAjZW5kaWYKLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNTA3MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKLSNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl82NE0pCi0KLSNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMzE5OTQ4ZS4uY2U2MzA0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTQ5LDggKzQ5LDYgQEAKIAogI2Vsc2UKIAotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KIC8qCiAgKiBJbiB0aGUgY2FzZSBvZiB1c2luZyBpbmRpcmVjdCBQQ0ksIHdlIHNpbXBseSByZXR1cm4gdGhlIGFjdHVhbCBQQ0kKICAqIGFkZHJlc3MgYW5kIG91ciByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9uIHVzZSB0aGF0IHRvIGRyaXZlIHRoZSAKQEAgLTI0MSw3ICsyMzksNyBAQAogCiAjaWZuZGVmIENPTkZJR19QQ0kKIAotI2RlZmluZQlfX2lvKHYpCQl2CisjZGVmaW5lCV9faW8odikJCV9fdHlwZXNhZmVfaW8odikKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGM0ZDI4MzAuLjk4ZjVlNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTIyLDE5ICsyMiw4IEBACiAJaXhwNHh4X2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlcykKIAogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoU1pfNjRNIC0gMSkKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl82NE0pCiAKICNlbmRpZgogCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKgkJYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqCi0gKiBUaGVzZSBhcmUgZHVtbWllcyBmb3Igbm93LgotICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJIF9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJIF9fcGh5c190b192aXJ0KHgpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggMGJiMWZiZC4uN2I4ZWY5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3Qgb3Jpb25fZWhjaV9kYXRhIGtpcmt3b29kX2VoY2lfZGF0YSA9IHsKIAkuZHJhbQkJPSAma2lya3dvb2RfbWJ1c19kcmFtX2luZm8sCisJLnBoeV92ZXJzaW9uCT0gRUhDSV9QSFlfTkEsCiB9OwogCiBzdGF0aWMgdTY0IGVoY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTE1Myw2ICsxNTQsNjQgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdFMDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IG12NjQzeHhfZXRoX3NoYXJlZF9wbGF0Zm9ybV9kYXRhIGtpcmt3b29kX2dlMDFfc2hhcmVkX2RhdGEgPSB7CisJLmRyYW0JCT0gJmtpcmt3b29kX21idXNfZHJhbV9pbmZvLAorCS5zaGFyZWRfc21pCT0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBraXJrd29vZF9nZTAxX3NoYXJlZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImdlMDEgYmFzZSIsCisJCS5zdGFydAk9IEdFMDFfUEhZU19CQVNFICsgMHgyMDAwLAorCQkuZW5kCT0gR0UwMV9QSFlTX0JBU0UgKyAweDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiZ2UwMSBlcnIgaXJxIiwKKwkJLnN0YXJ0CT0gSVJRX0tJUktXT09EX0dFMDFfRVJSLAorCQkuZW5kCT0gSVJRX0tJUktXT09EX0dFMDFfRVJSLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2lya3dvb2RfZ2UwMV9zaGFyZWQgPSB7CisJLm5hbWUJCT0gTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmtpcmt3b29kX2dlMDFfc2hhcmVkX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa2lya3dvb2RfZ2UwMV9zaGFyZWRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBraXJrd29vZF9nZTAxX3NoYXJlZF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtpcmt3b29kX2dlMDFfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJnZTAxIGlycSIsCisJCS5zdGFydAk9IElSUV9LSVJLV09PRF9HRTAxX1NVTSwKKwkJLmVuZAk9IElSUV9LSVJLV09PRF9HRTAxX1NVTSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtpcmt3b29kX2dlMDEgPSB7CisJLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0ga2lya3dvb2RfZ2UwMV9yZXNvdXJjZXMsCit9OworCit2b2lkIF9faW5pdCBraXJrd29vZF9nZTAxX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKQoreworCWV0aF9kYXRhLT5zaGFyZWQgPSAma2lya3dvb2RfZ2UwMV9zaGFyZWQ7CisJa2lya3dvb2RfZ2UwMS5kZXYucGxhdGZvcm1fZGF0YSA9IGV0aF9kYXRhOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9nZTAxX3NoYXJlZCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9nZTAxKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEV0aGVybmV0IHN3aXRjaAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCmluZGV4IDU3NzQ2MzIuLmZlMzY3YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaApAQCAtMzAsNiArMzAsNyBAQAogCiB2b2lkIGtpcmt3b29kX2VoY2lfaW5pdCh2b2lkKTsKIHZvaWQga2lya3dvb2RfZ2UwMF9pbml0KHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7Cit2b2lkIGtpcmt3b29kX2dlMDFfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpOwogdm9pZCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSk7CiB2b2lkIGtpcmt3b29kX3BjaWVfaW5pdCh2b2lkKTsKIHZvaWQga2lya3dvb2RfcnRjX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE4YzE3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWIzMzVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBhcmNoL2FzbS1hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fSAorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KKworI2RlZmluZSBHUElPX01BWAkJNTAKKyNkZWZpbmUgR1BJT19PRkYocGluKQkJKCgocGluKSA+PiA1KSA/IDB4MDE0MCA6IDB4MDEwMCkKKyNkZWZpbmUgR1BJT19PVVQocGluKQkJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MDApCisjZGVmaW5lIEdQSU9fSU9fQ09ORihwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIEdQSU9fT0ZGKHBpbikgKyAweDA0KQorI2RlZmluZSBHUElPX0JMSU5LX0VOKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MDgpCisjZGVmaW5lIEdQSU9fSU5fUE9MKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MGMpCisjZGVmaW5lIEdQSU9fREFUQV9JTihwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIEdQSU9fT0ZGKHBpbikgKyAweDEwKQorI2RlZmluZSBHUElPX0VER0VfQ0FVU0UocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyBHUElPX09GRihwaW4pICsgMHgxNCkKKyNkZWZpbmUgR1BJT19FREdFX01BU0socGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyBHUElPX09GRihwaW4pICsgMHgxOCkKKyNkZWZpbmUgR1BJT19MRVZFTF9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgR1BJT19PRkYocGluKSArIDB4MWMpCisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKGludCBwaW4pCit7CisJcmV0dXJuIHBpbiArIElSUV9LSVJLV09PRF9HUElPX1NUQVJUOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3BpbyhpbnQgaXJxKQoreworCXJldHVybiBpcnEgLSBJUlFfS0lSS1dPT0RfR1BJT19TVEFSVDsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBmZmFiODlmLi5mMDBhMGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKLSNpbmNsdWRlICJraXJrd29vZC5oIgkvKiBuZWVkIEdQSU9fTUFYICovCi0KIC8qCiAgKiBMb3cgSW50ZXJydXB0IENvbnRyb2xsZXIKICAqLwpAQCAtNTEsMTIgKzQ5LDEzIEBACiAjZGVmaW5lIElSUV9LSVJLV09PRF9HUElPX0hJR0hfOF8xNQk0MAogI2RlZmluZSBJUlFfS0lSS1dPT0RfR1BJT19ISUdIXzE2XzIzCTQxCiAjZGVmaW5lIElSUV9LSVJLV09PRF9HRTAwX0VSUgk0NgorI2RlZmluZSBJUlFfS0lSS1dPT0RfR0UwMV9FUlIJNDcKIAogLyoKICAqIEtJUktXT09EIEdlbmVyYWwgUHVycG9zZSBQaW5zCiAgKi8KICNkZWZpbmUgSVJRX0tJUktXT09EX0dQSU9fU1RBUlQJNjQKLSNkZWZpbmUgTlJfR1BJT19JUlFTCQlHUElPX01BWAorI2RlZmluZSBOUl9HUElPX0lSUVMJCTUwCiAKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfS0lSS1dPT0RfR1BJT19TVEFSVCArIE5SX0dQSU9fSVJRUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggZWFlNDI0MC4uYWRhNDgwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC0xMTcsNyArMTE3LDQgQEAKICNkZWZpbmUgU0FUQV9QSFlTX0JBU0UJCShLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSB8IDB4ODAwMDApCiAKIAotI2RlZmluZSBHUElPX01BWAkJNTAKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggYjVmYjM0Yi4uNDU0MzFlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTcsOCArNyw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pcnEuYwppbmRleCA1NzkwNjQzLi5lZmI4NmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaXJxLmMKQEAgLTEzLDEwICsxMyw0NSBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8cGxhdC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCitzdGF0aWMgdm9pZCBncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlCVUdfT04oaXJxIDwgSVJRX0tJUktXT09EX0dQSU9fTE9XXzBfNyk7CisJQlVHX09OKGlycSA+IElSUV9LSVJLV09PRF9HUElPX0hJR0hfMTZfMjMpOworCisJb3Jpb25fZ3Bpb19pcnFfaGFuZGxlcigoaXJxIC0gSVJRX0tJUktXT09EX0dQSU9fTE9XXzBfNykgPDwgMyk7Cit9CisKIHZvaWQgX19pbml0IGtpcmt3b29kX2luaXRfaXJxKHZvaWQpCiB7CisJaW50IGk7CisKIAlvcmlvbl9pcnFfaW5pdCgwLCAodm9pZCBfX2lvbWVtICopKElSUV9WSVJUX0JBU0UgKyBJUlFfTUFTS19MT1dfT0ZGKSk7CiAJb3Jpb25faXJxX2luaXQoMzIsICh2b2lkIF9faW9tZW0gKikoSVJRX1ZJUlRfQkFTRSArIElSUV9NQVNLX0hJR0hfT0ZGKSk7CisKKwkvKgorCSAqIE1hc2sgYW5kIGNsZWFyIEdQSU8gSVJRIGludGVycnVwdHMuCisJICovCisJd3JpdGVsKDAsIEdQSU9fTEVWRUxfTUFTSygwKSk7CisJd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKDApKTsKKwl3cml0ZWwoMCwgR1BJT19FREdFX0NBVVNFKDApKTsKKwl3cml0ZWwoMCwgR1BJT19MRVZFTF9NQVNLKDMyKSk7CisJd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKDMyKSk7CisJd3JpdGVsKDAsIEdQSU9fRURHRV9DQVVTRSgzMikpOworCisJZm9yIChpID0gSVJRX0tJUktXT09EX0dQSU9fU1RBUlQ7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9sZXZlbF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfMF83LCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0tJUktXT09EX0dQSU9fTE9XXzE2XzIzLCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19MT1dfMjRfMzEsIGdwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9LSVJLV09PRF9HUElPX0hJR0hfMF83LCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfS0lSS1dPT0RfR1BJT19ISUdIXzhfMTUsIGdwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9LSVJLV09PRF9HUElPX0hJR0hfMTZfMjMsIGdwaW9faXJxX2hhbmRsZXIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKaW5kZXggMTc1MDU0YS4uOWEwZTkwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCkBAIC04MCwyNCArODAsMzggQEAKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1syXQk9ICJsYW4zIiwKIAkucG9ydF9uYW1lc1szXQk9ICJsYW40IiwKLQkucG9ydF9uYW1lc1s0XQk9ICJ3YW4iLAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX2dlMDFfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxMSksCit9OworCiBzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc2F0YV9kYXRhID0gewogCS5uX3BvcnRzCT0gMiwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByZDg4ZjYyODFfaW5pdCh2b2lkKQogeworCXUzMiBkZXYsIHJldjsKKwogCS8qCiAJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KIAkgKi8KIAlraXJrd29vZF9pbml0KCk7CiAKIAlraXJrd29vZF9laGNpX2luaXQoKTsKKwogCWtpcmt3b29kX2dlMDBfaW5pdCgmcmQ4OGY2MjgxX2dlMDBfZGF0YSk7CisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAocmV2ID09IE1WODhGNjI4MV9SRVZfQTApIHsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnN3X2FkZHIgPSAxMDsKKwkJa2lya3dvb2RfZ2UwMV9pbml0KCZyZDg4ZjYyODFfZ2UwMV9kYXRhKTsKKwl9IGVsc2UgeworCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOworCX0KIAlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisKIAlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MjgxX3NhdGFfZGF0YSk7CiAJa2lya3dvb2RfdWFydDBfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWcKaW5kZXggY2UxY2Y4ZC4uMjc1NGRhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnCkBAIC04LDYgKzgsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gdGhlIG9yaWdpbmFsCiAJICBLZW5kaW4tTWljcmVsIEtTODY5NSBkZXZlbG9wbWVudCBib2FyZC4KIAorY29uZmlnIE1BQ0hfRFNNMzIwCisJYm9vbCAiRFNNLTMyMCBXaXJlbGVzcyBNZWRpYSBQbGF5ZXIiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiB0aGUgRC1MaW5rCisJICBEU00tMzIwIFdpcmVsZXNzIE1lZGlhIFBsYXllci4KKwogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQppbmRleCBhZGU0MmI3Li5mNzM1ZDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZQpAQCAtMTYsMyArMTYsNCBAQAogCiAjIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0tTODY5NSkJKz0gYm9hcmQtbWljcmVsLm8KK29iai0kKENPTkZJR19NQUNIX0RTTTMyMCkJKz0gYm9hcmQtZHNtMzIwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWRzbTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtZHNtMzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWRzbTMyMC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtZHNtMzIwLmMKKyAqCisgKiBEU00tMzIwIEQtTGluayBXaXJlbGVzcyBNZWRpYSBQbGF5ZXIsIGJvYXJkIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKgkJICBEYW5pZWwgU2lsdmVyc3RvbmUgPGRzaWx2ZXJzQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBkc20zMjBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMDoKKwkJLyogUENJLUFIQiBicmlkZ2U/ICovCisJCXJldHVybiBLUzg2OTVfSVJRX0VYVEVSTjA7CisJY2FzZSAxODoKKwkJLyogTWluaSBQQ0kgc2xvdCAqLworCQlyZXR1cm4gS1M4Njk1X0lSUV9FWFRFUk4yOworCWNhc2UgMjA6CisJCS8qIFJlYWxNQUdJQyBjaGlwICovCisJCXJldHVybiBLUzg2OTVfSVJRX0VYVEVSTjA7CisJfQorCUJVRygpOworfQorCitzdGF0aWMgc3RydWN0IGtzODY5NV9wY2lfY2ZnIF9faW5pdGRhdGEgZHNtMzIwX3BjaSA9IHsKKwkubW9kZQkJPSBLUzg2OTVfTU9ERV9NSU5JUENJLAorCS5tYXBfaXJxCT0gZHNtMzIwX3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGRzbTMyMF9yZWdpc3Rlcl9wY2kodm9pZCkKK3sKKwkvKiBJbml0aWFsaXNlIHRoZSBHUElPIGxpbmVzIGZvciBpbnRlcnJ1cHQgbW9kZSAqLworCS8qIFJlYWxNQUdJQyAqLworCWtzODY5NV9ncGlvX2ludGVycnVwdChLUzg2OTVfR1BJT18wLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCS8qIE1pbmlQQ0kgU2xvdCAqLworCWtzODY5NV9ncGlvX2ludGVycnVwdChLUzg2OTVfR1BJT18yLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCisJa3M4Njk1X2luaXRfcGNpKCZkc20zMjBfcGNpKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZHNtMzIwX3JlZ2lzdGVyX3BjaSh2b2lkKSB7IH0KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBkc20zMjBfbm9yX3BkYXRhID0geworCS53aWR0aAkJPSA0LAorCS5ucl9wYXJ0cwk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRzbTMyMF9ub3JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFNaXzMyTSwgLyogV2UgZXhwZWN0IHRoZSBib290bG9hZGVyIHRvIG1hcAorCQkJCSAgKiB0aGUgZmxhc2ggaGVyZS4KKwkJCQkgICovCisJCS5lbmQgICA9IFNaXzMyTSArIFNaXzRNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZHNtMzIwX2RldmljZV9ub3IgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZHNtMzIwX25vcl9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gZHNtMzIwX25vcl9yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZHNtMzIwX25vcl9wZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgZHNtMzIwX3JlZ2lzdGVyX25vcih2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRzbTMyMF9kZXZpY2Vfbm9yKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgcGh5c21hcC1mbGFzaCBkZXZpY2VcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZHNtMzIwX2luaXQodm9pZCkKK3sKKwkvKiBHUElPIHJlZ2lzdHJhdGlvbiAqLworCWtzODY5NV9yZWdpc3Rlcl9ncGlvcygpOworCisJLyogUENJIHJlZ2lzdHJhdGlvbiAqLworCWRzbTMyMF9yZWdpc3Rlcl9wY2koKTsKKworCS8qIE5ldHdvcmsgZGV2aWNlICovCisJa3M4Njk1X2FkZF9kZXZpY2VfbGFuKCk7CS8qIGV0aDAgPSBMQU4gKi8KKworCS8qIE5PUiBkZXZpY2VzICovCisJZHNtMzIwX3JlZ2lzdGVyX25vcigpOworfQorCitNQUNISU5FX1NUQVJUKERTTTMyMCwgIkQtTGluayBEU00tMzIwIFdpcmVsZXNzIE1lZGlhIFBsYXllciIpCisJLyogTWFpbnRhaW5lcjogU2ltdGVjIEVsZWN0cm9uaWNzLiAqLworCS5waHlzX2lvCT0gS1M4Njk1X0lPX1BBLAorCS5pb19wZ19vZmZzdAk9IChLUzg2OTVfSU9fVkEgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEtTODY5NV9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0ga3M4Njk1X21hcF9pbywKKwkuaW5pdF9pcnEJPSBrczg2OTVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGRzbTMyMF9pbml0LAorCS50aW1lcgkJPSAma3M4Njk1X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLW1pY3JlbC5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKaW5kZXggMDQ2OGU5My4uOGNlYWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpAQCAtMzksNiArNDAsOCBAQAogewogCXByaW50ayhLRVJOX0lORk8gIk1pY3JlbCBLUzg2OTUgRGV2ZWxvcG1lbnQgQm9hcmQgaW5pdGlhbGl6aW5nXG4iKTsKIAorCWtzODY5NV9yZWdpc3Rlcl9ncGlvcygpOworCiAjaWZkZWYgQ09ORklHX1BDSQogCWtzODY5NV9pbml0X3BjaSgmbWljcmVsX3BjaSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2RldmljZXMuYwppbmRleCA0YmQyNTE0Li4zNmFiMGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvZGV2aWNlcy5jCkBAIC0yNSwxOSArMjUsMjAgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3Mtd2FuLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxhbi5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ocG5hLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXN3aXRjaC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1taXNjLmg+CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBFdGhlcm5ldAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSTV9LUzg2OTVfRVRIRVIpIHx8IGRlZmluZWQoQ09ORklHX0FSTV9LUzg2OTVfRVRIRVJfTU9EVUxFKQogc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBrczg2OTVfd2FuX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gS1M4Njk1X1dBTl9WQSwKLQkJLmVuZAk9IEtTODY5NV9XQU5fVkEgKyAweDAwZmYsCisJCS5zdGFydAk9IEtTODY5NV9XQU5fUEEsCisJCS5lbmQJPSBLUzg2OTVfV0FOX1BBICsgMHgwMGZmLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTU4LDYgKzU5LDEyIEBACiAJCS5lbmQJPSBLUzg2OTVfSVJRX1dBTl9MSU5LLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAorCVs0XSA9IHsKKwkJLm5hbWUJPSAiV0FOIFBIWSIsCisJCS5zdGFydAk9IEtTODY5NV9NSVNDX1BBLAorCQkuZW5kCT0gS1M4Njk1X01JU0NfUEEgKyAweDFmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3M4Njk1X3dhbl9kZXZpY2UgPSB7CkBAIC03NCw4ICs4MSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3M4Njk1X2xhbl9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IEtTODY5NV9MQU5fVkEsCi0JCS5lbmQJPSBLUzg2OTVfTEFOX1ZBICsgMHgwMGZmLAorCQkuc3RhcnQJPSBLUzg2OTVfTEFOX1BBLAorCQkuZW5kCT0gS1M4Njk1X0xBTl9QQSArIDB4MDBmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC05MCw2ICs5NywxMiBAQAogCQkuZW5kCT0gS1M4Njk1X0lSUV9MQU5fVFhfU1RBVFVTLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAiTEFOIFNXSVRDSCIsCisJCS5zdGFydAk9IEtTODY5NV9TV0lUQ0hfUEEsCisJCS5lbmQJPSBLUzg2OTVfU1dJVENIX1BBICsgMHg0ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtzODY5NV9sYW5fZGV2aWNlID0gewpAQCAtMTA2LDggKzExOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3M4Njk1X2hwbmFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBLUzg2OTVfSFBOQV9WQSwKLQkJLmVuZAk9IEtTODY5NV9IUE5BX1ZBICsgMHgwMGZmLAorCQkuc3RhcnQJPSBLUzg2OTVfSFBOQV9QQSwKKwkJLmVuZAk9IEtTODY5NV9IUE5BX1BBICsgMHgwMGZmLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTE0OSwxOCArMTYyLDEyIEBACiB7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZrczg2OTVfaHBuYV9kZXZpY2UpOwogfQotI2Vsc2UKLXZvaWQgX19pbml0IGtzODY5NV9hZGRfZGV2aWNlX3dhbih2b2lkKSB7fQotdm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2VfbGFuKHZvaWQpIHt9Ci12b2lkIF9faW5pdCBrczg2OTZfYWRkX2RldmljZV9ocG5hKHZvaWQpIHt9Ci0jZW5kaWYKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFdhdGNoZG9nCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfS1M4Njk1X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19LUzg2OTVfV0FUQ0hET0dfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3M4Njk1X3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImtzODY5NV93ZHQiLAogCS5pZAkJPSAtMSwKQEAgLTE3MSw5ICsxNzgsNiBAQAogewogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma3M4Njk1X3dkdF9kZXZpY2UpOwogfQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBrczg2OTVfYWRkX2RldmljZV93YXRjaGRvZyh2b2lkKSB7fQotI2VuZGlmCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MCw3ICsxOTQsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChjcHVfbGVkLCAxKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQodGltZXJfbGVkLCAxKTsKIAotCWtzODY5NV9sZWRzX2NwdSAgID0gY3B1X2xlZDsKKwlrczg2OTVfbGVkc19jcHUJICA9IGNwdV9sZWQ7CiAJa3M4Njk1X2xlZHNfdGltZXIgPSB0aW1lcl9sZWQ7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvZ3Bpby5jCmluZGV4IDlhZWNmMGMuLjU1ZmJmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ncGlvLmMKQEAgLTIsNiArMiw4IEBACiAgKiBhcmNoL2FybS9tYWNoLWtzODY5NS9ncGlvLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFZpY3RvcgorICogVXBkYXRlZCB0byBHUElPTElCLCBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgICAgICAgICAgICAgICAgRGFuaWVsIFNpbHZlcnN0b25lIDxkc2lsdmVyc0BzaW10ZWMuY28udWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zNSw3ICszNyw3IEBACiAgKiBDb25maWd1cmUgYSBHUElPIGxpbmUgZm9yIGVpdGhlciBHUElPIGZ1bmN0aW9uLCBvciBpdHMgaW50ZXJuYWwKICAqIGZ1bmN0aW9uIChJbnRlcnJ1cHQsIFRpbWVyLCBldGMpLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIGtzODY5NV9ncGlvX21vZGUodW5zaWduZWQgaW50IHBpbiwgc2hvcnQgZ3BpbykKK3N0YXRpYyB2b2lkIGtzODY5NV9ncGlvX21vZGUodW5zaWduZWQgaW50IHBpbiwgc2hvcnQgZ3BpbykKIHsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlW10gPSB7IElPUENfSU9FSU5UMEVOLCBJT1BDX0lPRUlOVDFFTiwgSU9QQ19JT0VJTlQyRU4sIElPUENfSU9FSU5UM0VOLCBJT1BDX0lPVElNMEVOLCBJT1BDX0lPVElNMUVOIH07CiAJdW5zaWduZWQgbG9uZyB4LCBmbGFnczsKQEAgLTYxLDcgKzYzLDcgQEAKIC8qCiAgKiBDb25maWd1cmUgR1BJTyBwaW4gYXMgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZS4KICAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUga3M4Njk1X2dwaW9faW50ZXJydXB0KHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0eXBlKQoraW50IGtzODY5NV9ncGlvX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIHgsIGZsYWdzOwogCkBAIC05NCw3ICs5Niw3IEBACiAvKgogICogQ29uZmlndXJlIHRoZSBHUElPIGxpbmUgYXMgYW4gaW5wdXQuCiAgKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGludCBwaW4pCitzdGF0aWMgaW50IGtzODY5NV9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IHBpbikKIHsKIAl1bnNpZ25lZCBsb25nIHgsIGZsYWdzOwogCkBAIC0xMTUsMTMgKzExNywxMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKIAogCiAvKgogICogQ29uZmlndXJlIHRoZSBHUElPIGxpbmUgYXMgYW4gb3V0cHV0LCB3aXRoIGRlZmF1bHQgc3RhdGUuCiAgKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgaW50IGtzODY5NV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJCXVuc2lnbmVkIGludCBwaW4sIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHgsIGZsYWdzOwogCkBAIC0xNTAsMTMgKzE1MiwxMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7CiAKIAogLyoKICAqIFNldCB0aGUgc3RhdGUgb2YgYW4gb3V0cHV0IEdQSU8gbGluZS4KICAqLwotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBrczg2OTVfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJICB1bnNpZ25lZCBpbnQgcGluLCBpbnQgc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyB4LCBmbGFnczsKIApAQCAtMTc1LDEzICsxNzcsMTIgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOwogCiAKIC8qCiAgKiBSZWFkIHRoZSBzdGF0ZSBvZiBhIEdQSU8gbGluZS4KICAqLwotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGludCBwaW4pCitzdGF0aWMgaW50IGtzODY5NV9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IHBpbikKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKQEAgLTE5MSwyMSArMTkyLDE4IEBACiAJeCA9IF9fcmF3X3JlYWRsKEtTODY5NV9HUElPX1ZBICsgS1M4Njk1X0lPUEQpOwogCXJldHVybiAoeCAmIElPUEQocGluKSkgIT0gMDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwogCiAKIC8qCiAgKiBNYXAgR1BJTyBsaW5lIHRvIElSUSBudW1iZXIuCiAgKi8KLWludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgcGluKQorc3RhdGljIGludCBrczg2OTVfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBwaW4pCiB7CiAJaWYgKHBpbiA+IEtTODY5NV9HUElPXzMpCS8qIG9ubHkgR1BJTyAwLi4zIGNhbiBnZW5lcmF0ZSBJUlEgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gZ3Bpb19pcnFbcGluXTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb190b19pcnEpOwotCiAKIC8qCiAgKiBNYXAgSVJRIG51bWJlciB0byBHUElPIGxpbmUuCkBAIC0yMTksNiArMjE3LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlycV90b19ncGlvKTsKIAorLyogR1BJT0xJQiBpbnRlcmZhY2UgKi8KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAga3M4Njk1X2dwaW9fY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJLUzg2OTUiLAorCS5kaXJlY3Rpb25faW5wdXQJPSBrczg2OTVfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBrczg2OTVfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCS5nZXQJCQk9IGtzODY5NV9ncGlvX2dldF92YWx1ZSwKKwkuc2V0CQkJPSBrczg2OTVfZ3Bpb19zZXRfdmFsdWUsCisJLnRvX2lycQkJCT0ga3M4Njk1X2dwaW9fdG9faXJxLAorCS5iYXNlCQkJPSAwLAorCS5uZ3BpbwkJCT0gMTYsCisJLmNhbl9zbGVlcAkJPSAwLAorfTsKKworLyogUmVnaXN0ZXIgdGhlIEdQSU9zICovCit2b2lkIGtzODY5NV9yZWdpc3Rlcl9ncGlvcyh2b2lkKQoreworCWlmIChncGlvY2hpcF9hZGQoJmtzODY5NV9ncGlvX2NoaXApKQorCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjb3JlIEdQSU9zXG4iKTsKK30KIAogLyogLi4uLiBEZWJ1ZyBpbnRlcmZhY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjEyMDYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGQ0YWY1YzMuLjg2MzEyZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMzAsNTMgKzMwLDI4IEBACiAjZGVmaW5lIEtTODY5NV9HUElPXzE0CQkxNAogI2RlZmluZSBLUzg2OTVfR1BJT18xNQkJMTUKIAotCiAvKgogICogQ29uZmlndXJlIEdQSU8gcGluIGFzIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2UuCiAgKi8KLWludCBfX2luaXRfb3JfbW9kdWxlIGtzODY5NV9ncGlvX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdHlwZSk7Ci0KLS8qCi0gKiBDb25maWd1cmUgdGhlIEdQSU8gbGluZSBhcyBhbiBpbnB1dC4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgaW50IHBpbik7Ci0KLS8qCi0gKiBDb25maWd1cmUgdGhlIEdQSU8gbGluZSBhcyBhbiBvdXRwdXQsIHdpdGggZGVmYXVsdCBzdGF0ZS4KLSAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBzdGF0ZSk7Ci0KLS8qCi0gKiBTZXQgdGhlIHN0YXRlIG9mIGFuIG91dHB1dCBHUElPIGxpbmUuCi0gKi8KLXZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IHN0YXRlKTsKLQotLyoKLSAqIFJlYWQgdGhlIHN0YXRlIG9mIGEgR1BJTyBsaW5lLgotICovCi1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgaW50IHBpbik7Ci0KLS8qCi0gKiBNYXAgR1BJTyBsaW5lIHRvIElSUSBudW1iZXIuCi0gKi8KLWludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgcGluKTsKK2V4dGVybiBpbnQga3M4Njk1X2dwaW9faW50ZXJydXB0KHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0eXBlKTsKIAogLyoKICAqIE1hcCBJUlEgbnVtYmVyIHRvIEdQSU8gbGluZS4KICAqLwotaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpOwotCitleHRlcm4gaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpOwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgaW50IHBpbiwgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JcmV0dXJuIDA7Ci19CisvKiBJZiBpdCB0dXJucyBvdXQgdGhhdCB3ZSBuZWVkIHRvIG9wdGltaXNlIEdQSU8gYWNjZXNzIGZvciB0aGUKKyAqIE1pY3JlbCdzIEdQSU9zLCB0aGVuIHRoZXNlIGNhbiBiZSBjaGFuZ2VkIHRvIGNoZWNrIHRoZWlyIGFyZ3VtZW50CisgKiBkaXJlY3RseSBhcyBzdGF0aWMgaW5saW5lcy4gSG93ZXZlciBmb3Igbm93IGl0J3MgcHJvYmFibHkgbm90CisgKiB3b3J0aHdoaWxlLgorICovCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlIF9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX3RvX2lycSBfX2dwaW9fdG9faXJxCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgaW50IHBpbikKLXsKLQltaWdodF9zbGVlcCgpOwotfQorLyogUmVnaXN0ZXIgdGhlIEdQSU9zICovCitleHRlcm4gdm9pZCBrczg2OTVfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBmMzY0ZjI0Li5hN2E2M2FjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkweGZmZmZmZmZmCiAKLSNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggOGZiYzRjNy4uNmQ1ODg3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMzcsMTEgKzM3LDYgQEAKIAkJCQkJKGRtYV9hZGRyX3QpX192aXJ0X3RvX3BoeXMoeCkgOiAoZG1hX2FkZHJfdClfX3ZpcnRfdG9fYnVzKHgpOyB9KQogI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCB4KQlfX2FyY2hfdmlydF90b19kbWEoZGV2LCBwYWdlX2FkZHJlc3MoeCkpCiAKLSNlbHNlCi0KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZTQ4YmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIENoYW5nZWxvZzoKLSAqICAwOC0yOS0yMDAwCVNKSAlDcmVhdGVkCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAotI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICi0KLS8qIERNQSBpcyBub3QgeWV0IGltcGxlbWVudGVkISBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYWNvcm4sIGNvcHkgb3Zlci4uICovCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzIHRoYXQgY2FuIGJlIERNQWQgdG8uCi0gKiBUaGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiAoMHhkMDAwMDAwMCAtIDB4YzAwMDAwMDApCi0gKiBieXRlcyBvZiBSQU0uCi0gKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgICAgICAgMHhkMDAwMDAwMAotCi0jZGVmaW5lIERNQV9TMCAgICAgICAgICAgICAgICAgIDAKLQotI2VuZGlmIC8qIF9BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggZDQzMmJhOS4uYTc3MGE4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xMCwxOCArMTAsMTIgQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCiAvKgogICogVGhlcmUgYXJlIG5vdCByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBzbyB3ZSBmYWtlIGl0LgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwotfQotI2RlZmluZSBfX2lvKGEpCV9faW8oYSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBmMzM4Y2YzLi45ZmI0MGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTcsOSArMTcsNiBAQAogICovCiAjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICBVTCgweGYwMDAwMDAwKQogCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQotCiAvKgogICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKaW5kZXggNGZiMjNhYy4uNjE4MmY1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2Nsb2Nrcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwpAQCAtMTQsMjEgKzE0LDE0IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKIHN0cnVjdCBtb2R1bGU7Ci1zdHJ1Y3QgaWNzdDUyNV9wYXJhbXM7CiAKIHN0cnVjdCBjbGsgewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAl1bnNpZ25lZCBsb25nIHJhdGU7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgY2hhciAqbmFtZTsKLS8vCXZvaWQgKmRhdGE7Ci0vLwljb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgKnBhcmFtczsKLS8vCXZvaWQgKCpzZXR2Y28pKHN0cnVjdCBjbGsgKiwgc3RydWN0IGljc3Q1MjVfdmNvIHZjbyk7CiB9OwogCi1pbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7Ci0KIC8qIC0tLS0tICovCiAKICNkZWZpbmUgTUFJTkRJVjEoYykJKCgoYykgPj4gIDcpICYgMHgwZikKQEAgLTc5LDMxICs3MiwxNSBAQAogCiAvKiAtLS0tLSAqLwogCi1zdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChjbG9ja3Nfc2VtKTsKLQogc3RydWN0IGNsayAqY2xrX2dldCAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQlzdHJ1Y3QgY2xrICpwOwotCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0KLQlkb3duICgmY2xvY2tzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSAocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAoc3RyY21wIChpZCwgcC0+bmFtZSkgPT0gMAotCQkgICAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JdXAgKCZjbG9ja3Nfc2VtKTsKLQotCXJldHVybiBjbGs7CisJcmV0dXJuIGRldiAmJiBzdHJjbXAoZGV2X25hbWUoZGV2KSwgImNsZGMtbGg3YTQweCIpID09IDAKKwkJID8gTlVMTCA6IEVSUl9QVFIoLUVOT0VOVCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXQpOwogCiB2b2lkIGNsa19wdXQgKHN0cnVjdCBjbGsgKmNsaykKIHsKLQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKIApAQCAtMTE4LDIwICs5NSw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAotaW50IGNsa191c2UgKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3VzZSk7Ci0KLXZvaWQgY2xrX3VudXNlIChzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnVzZSk7Ci0KIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlIChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JcmV0dXJuIGNsay0+cmF0ZTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIApAQCAtMTQzLDU2ICsxMDksNiBAQAogCiBpbnQgY2xrX3NldF9yYXRlIChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpbnQgcmV0ID0gLUVJTzsKLQlyZXR1cm4gcmV0OworCXJldHVybiAtRUlPOwogfQogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOwotCi0jaWYgMAotLyoKLSAqIFRoZXNlIGFyZSBmaXhlZCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGttaV9jbGsgPSB7Ci0JLm5hbWUJPSAiS01JUkVGQ0xLIiwKLQkucmF0ZQk9IDI0MDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7Ci0JLm5hbWUJPSAiVUFSVENMSyIsCi0JLnJhdGUJPSAyNDAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2lfY2xrID0gewotCS5uYW1lCT0gIk1DTEsiLAotCS5yYXRlCT0gMzMwMDAwMDAsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsY2RfY2xrID0gewotCS5uYW1lCT0gIkNMQ0RDTEsiLAotCS5yYXRlCT0gMCwKLX07Ci0KLWludCBjbGtfcmVnaXN0ZXIgKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlkb3duICgmY2xvY2tzX3NlbSk7Ci0JbGlzdF9hZGQgKCZjbGstPm5vZGUsICZjbG9ja3MpOwotCXVwICgmY2xvY2tzX3NlbSk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7Ci0KLXZvaWQgY2xrX3VucmVnaXN0ZXIgKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlkb3duICgmY2xvY2tzX3NlbSk7Ci0JbGlzdF9kZWwgKCZjbGstPm5vZGUpOwotCXVwICgmY2xvY2tzX3NlbSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKLQotc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQgKHZvaWQpCi17Ci0JY2xrX3JlZ2lzdGVyKCZjbGNkX2Nsayk7Ci0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAwMzFkMjZmLi42ZWNlNDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xMSwxMiArMTEsMTAgQEAKICNpZm5kZWYgX19BU01fQVJDSF9JT19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSU9fSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAogLyogTm8gSVNBIG9yIFBDSSBidXMgb24gdGhpcyBtYWNoaW5lLiAqLwotI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAxZGExNGZmLi4xODlkMjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE5LDE2ICsxOSw2IEBACiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhjMDAwMDAwMCkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkgX19waHlzX3RvX3ZpcnQoeCkKLQogI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE4YzE3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggYTM5NTMzYS4uMmVkN2U2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNyw4ICs3LDQgQEAKIAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKIAotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYzZhMmZlYi4uYWFiOTY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTIzLDExICsyMyw3IEBACiAKIHZvaWQgX19pb21lbSAqX19tc21faW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBtdHlwZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Ci19Ci0jZGVmaW5lIF9faW8oYSkgICAgICAgICBfX2lvKGEpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKICNkZWZpbmUgX19tZW1fcGNpKGEpICAgIChhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA2M2ZkNDdmLi5mNDY5OGJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xOSw5ICsxOSw1IEBACiAvKiBwaHlzaWNhbCBvZmZzZXQgb2YgUkFNICovCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDEwMDAwMDAwKQogCi0vKiBidXMgYWRkcmVzcyBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSBpZGVudGljYWwgKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMjM4YTJmOC4uYjBlNGUwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtMTY3LDYgKzE2Nyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3Qgb3Jpb25fZWhjaV9kYXRhIG12Nzh4eDBfZWhjaV9kYXRhID0gewogCS5kcmFtCQk9ICZtdjc4eHgwX21idXNfZHJhbV9pbmZvLAorCS5waHlfdmVyc2lvbgk9IEVIQ0lfUEhZX05BLAogfTsKIAogc3RhdGljIHU2NCBlaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhOGMxNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkMTUzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBhcmNoL2FzbS1hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19ICisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLworCitleHRlcm4gaW50IG12Nzh4eDBfY29yZV9pbmRleCh2b2lkKTsKKworI2RlZmluZSBHUElPX01BWAkJMzIKKyNkZWZpbmUgR1BJT19PVVQocGluKQkJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTAwKQorI2RlZmluZSBHUElPX0lPX0NPTkYocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMDQpCisjZGVmaW5lIEdQSU9fQkxJTktfRU4ocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMDgpCisjZGVmaW5lIEdQSU9fSU5fUE9MKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTBjKQorI2RlZmluZSBHUElPX0RBVEFfSU4ocGluKQkoREVWX0JVU19WSVJUX0JBU0UgKyAweDAxMTApCisjZGVmaW5lIEdQSU9fRURHRV9DQVVTRShwaW4pCShERVZfQlVTX1ZJUlRfQkFTRSArIDB4MDExNCkKKyNkZWZpbmUgR1BJT19NQVNLX09GRgkJKG12Nzh4eDBfY29yZV9pbmRleCgpID8gMHgxOCA6IDApCisjZGVmaW5lIEdQSU9fRURHRV9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTE4ICsgR1BJT19NQVNLX09GRikKKyNkZWZpbmUgR1BJT19MRVZFTF9NQVNLKHBpbikJKERFVl9CVVNfVklSVF9CQVNFICsgMHgwMTFjICsgR1BJT19NQVNLX09GRikKKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEoaW50IHBpbikKK3sKKwlyZXR1cm4gcGluICsgSVJRX01WNzhYWDBfR1BJT19TVEFSVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8oaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxIC0gSVJRX01WNzhYWDBfR1BJT19TVEFSVDsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYmViYzMzMC4uZmExZDQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTExLDggKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKICNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0gKIAotI2luY2x1ZGUgIm12Nzh4eDAuaCIJLyogbmVlZCBHUElPX01BWCAqLwotCiAvKgogICogTVY3OHh4MCBMb3cgSW50ZXJydXB0IENvbnRyb2xsZXIKICAqLwpAQCAtODgsNyArODYsNyBAQAogICogTVY3OFhYMCBHZW5lcmFsIFB1cnBvc2UgUGlucwogICovCiAjZGVmaW5lIElSUV9NVjc4WFgwX0dQSU9fU1RBUlQJOTYKLSNkZWZpbmUgTlJfR1BJT19JUlFTCQlHUElPX01BWAorI2RlZmluZSBOUl9HUElPX0lSUVMJCTMyCiAKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfTVY3OFhYMF9HUElPX1NUQVJUICsgTlJfR1BJT19JUlFTKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA5ZTQ3YTE0Li5lNjYzMDQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTcsOCArNyw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGVlOWM1NTkuLmU5MzBlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC0xMjIsNyArMTIyLDQgQEAKICNkZWZpbmUgU0FUQV9QSFlTX0JBU0UJCShNVjc4WFgwX1JFR1NfUEhZU19CQVNFIHwgMHhhMDAwMCkKIAogCi0jZGVmaW5lIEdQSU9fTUFYCQkzMgotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2lycS5jCmluZGV4IDUwM2U1ZDEuLmUyNzM0MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaXJxLmMKQEAgLTExLDEzICsxMSw0MiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgogI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKK3N0YXRpYyB2b2lkIGdwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCUJVR19PTihpcnEgPCBJUlFfTVY3OFhYMF9HUElPXzBfNyB8fCBpcnEgPiBJUlFfTVY3OFhYMF9HUElPXzI0XzMxKTsKKworCW9yaW9uX2dwaW9faXJxX2hhbmRsZXIoKGlycSAtIElSUV9NVjc4WFgwX0dQSU9fMF83KSA8PCAzKTsKK30KKwogdm9pZCBfX2luaXQgbXY3OHh4MF9pbml0X2lycSh2b2lkKQogeworCWludCBpOworCiAJb3Jpb25faXJxX2luaXQoMCwgKHZvaWQgX19pb21lbSAqKShJUlFfVklSVF9CQVNFICsgSVJRX01BU0tfTE9XX09GRikpOwogCW9yaW9uX2lycV9pbml0KDMyLCAodm9pZCBfX2lvbWVtICopKElSUV9WSVJUX0JBU0UgKyBJUlFfTUFTS19ISUdIX09GRikpOwogCW9yaW9uX2lycV9pbml0KDY0LCAodm9pZCBfX2lvbWVtICopKElSUV9WSVJUX0JBU0UgKyBJUlFfTUFTS19FUlJfT0ZGKSk7CisKKwkvKgorCSAqIE1hc2sgYW5kIGNsZWFyIEdQSU8gSVJRIGludGVycnVwdHMuCisJICovCisJd3JpdGVsKDAsIEdQSU9fTEVWRUxfTUFTSygwKSk7CisJd3JpdGVsKDAsIEdQSU9fRURHRV9NQVNLKDApKTsKKwl3cml0ZWwoMCwgR1BJT19FREdFX0NBVVNFKDApKTsKKworCWZvciAoaSA9IElSUV9NVjc4WFgwX0dQSU9fU1RBUlQ7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZvcmlvbl9ncGlvX2lycV9sZXZlbF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTVY3OFhYMF9HUElPXzBfNywgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX01WNzhYWDBfR1BJT184XzE1LCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTVY3OFhYMF9HUElPXzE2XzIzLCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTVY3OFhYMF9HUElPXzI0XzMxLCBncGlvX2lycV9oYW5kbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTlmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKK2lmIEFSQ0hfTVgxCisKK2NvbW1lbnQgIk1YMSBQbGF0Zm9ybXMiCisKK2NvbmZpZyBNQUNIX01YTEFEUworCWJvb2wKKworY29uZmlnIEFSQ0hfTVgxQURTCisJYm9vbCAiTVgxQURTIHBsYXRmb3JtIgorCXNlbGVjdCBNQUNIX01YTEFEUworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBNb3Rvcm9sYSBNWDFBRFMvTVhMQURTIGJvYXJkcworCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTY5NzE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQkrPSBnZW5lcmljLm8gY2xvY2subyBkZXZpY2VzLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfQVJDSF9NWDFBRFMpICs9IG14MWFkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQxNDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDQgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwODAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDA4MDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDg4MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjZDFlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19jYW5fdXNlX3BhcmVudChjb25zdCBzdHJ1Y3QgY2xrICpjbGtfYXJyW10sIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICAgIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWlmIChwYXJlbnQgPT0gY2xrX2FycltpXSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJaW50IGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCisJCWRpdisrOworCisJaWYgKGRpdiA+IGxpbWl0KQorCQlkaXYgPSBsaW1pdDsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wYXJlbnRfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJvdW5kX3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOworfQorCitzdGF0aWMgaW50IF9jbGtfcGFyZW50X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGstPnBhcmVudC0+c2V0X3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOworfQorCisvKgorICogIGdldCB0aGUgc3lzdGVtIHBsbCBjbG9jayBpbiBIegorICoKKyAqICAgICAgICAgICAgICAgICAgbWZpICsgbWZuIC8gKG1mZCArMSkKKyAqICBmID0gMiAqIGZfcmVmICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgcGQgKyAxCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG14MV9kZWNvZGVfcGxsKHVuc2lnbmVkIGludCBwbGwsIHUzMiBmX3JlZikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGw7CisJdW5zaWduZWQgbG9uZyBxdW90OworCisJdTMyIG1maSA9IChwbGwgPj4gMTApICYgMHhmOworCXUzMiBtZm4gPSBwbGwgJiAweDNmZjsKKwl1MzIgbWZkID0gKHBsbCA+PiAxNikgJiAweDNmZjsKKwl1MzIgcGQgPSAgKHBsbCA+PiAyNikgJiAweGY7CisKKwltZmkgPSBtZmkgPD0gNSA/IDUgOiBtZmk7CisKKwlsbCA9IDIgKiAodW5zaWduZWQgbG9uZyBsb25nKWZfcmVmICoKKwkJKChtZmkgPDwgMTYpICsgKG1mbiA8PCAxNikgLyAobWZkICsgMSkpOworCXF1b3QgPSAocGQgKyAxKSAqICgxIDw8IDE2KTsKKwlsbCArPSBxdW90IC8gMjsKKwlkb19kaXYobGwsIHF1b3QpOworCXJldHVybiAodW5zaWduZWQgbG9uZylsbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrMTZtX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMTYwMDAwMDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsazE2bSA9IHsKKwkubmFtZSA9ICJDTEsxNk0iLAorCS5nZXRfcmF0ZSA9IGNsazE2bV9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fQ1NDUiwKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX0NTQ1JfT1NDX0VOX1NISUZULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworLyogaW4gSHogKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX3JhdGU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrMzJfcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrMzIgPSB7CisJLm5hbWUgPSAiQ0xLMzIiLAorCS5nZXRfcmF0ZSA9IGNsazMyX2dldF9yYXRlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrMzJfcHJlbXVsdF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgKiA1MTI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsazMyX3ByZW11bHQgPSB7CisJLm5hbWUgPSAiQ0xLMzJfcHJlbXVsdGlwbGllciIsCisJLnBhcmVudCA9ICZjbGszMiwKKwkuZ2V0X3JhdGUgPSBjbGszMl9wcmVtdWx0X2dldF9yYXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGsgKnByZW1fY2xrX2Nsb2Nrc1tdID0geworCSZjbGszMl9wcmVtdWx0LAorCSZjbGsxNm0sCit9OworCitzdGF0aWMgaW50IHByZW1fY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKworCWkgPSBfY2xrX2Nhbl91c2VfcGFyZW50KHByZW1fY2xrX2Nsb2NrcywgQVJSQVlfU0laRShwcmVtX2Nsa19jbG9ja3MpLAorCQkJCXBhcmVudCk7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCXJlZyAmPSB+Q0NNX0NTQ1JfU1lTVEVNX1NFTDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWcgfD0gQ0NNX0NTQ1JfU1lTVEVNX1NFTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGk7CisJfQorCisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHByZW1fY2xrID0geworCS5uYW1lID0gInByZW1fY2xrIiwKKwkuc2V0X3BhcmVudCA9IHByZW1fY2xrX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXN0ZW1fY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gbXgxX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCksCisJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgc3lzdGVtX2NsayA9IHsKKwkubmFtZSA9ICJzeXN0ZW1fY2xrIiwKKwkucGFyZW50ID0gJnByZW1fY2xrLAorCS5nZXRfcmF0ZSA9IHN5c3RlbV9jbGtfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtY3VfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gbXgxX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCksCisJCQkgICAgICBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgbWN1X2NsayA9IHsKKwkubmFtZSA9ICJtY3VfY2xrIiwKKwkucGFyZW50ID0gJmNsazMyX3ByZW11bHQsCisJLmdldF9yYXRlID0gbWN1X2Nsa19nZXRfcmF0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmNsayA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpICYgQ0NNX0NTQ1JfUFJFU0MpCisJCWZjbGsgLz0gMjsKKworCXJldHVybiBmY2xrOworfQorCitzdGF0aWMgc3RydWN0IGNsayBmY2xrID0geworCS5uYW1lID0gImZjbGsiLAorCS5wYXJlbnQgPSAmbWN1X2NsaywKKwkuZ2V0X3JhdGUgPSBmY2xrX2dldF9yYXRlLAorfTsKKworLyoKKyAqICBnZXQgaGNsayAoIFNEUkFNLCBDU0ksIE1lbW9yeSBTdGljaywgSTJDLCBETUEgKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICgoKF9fcmF3X3JlYWRsKENDTV9DU0NSKSAmCisJCQlDQ01fQ1NDUl9CQ0xLX01BU0spID4+IENDTV9DU0NSX0JDTEtfT0ZGU0VUKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIF9jbGtfc2ltcGxlX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAxNik7Cit9CisKK3N0YXRpYyBpbnQgaGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiAxNiB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdi0tOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyAmPSB+Q0NNX0NTQ1JfQkNMS19NQVNLOworCXJlZyB8PSBkaXYgPDwgQ0NNX0NTQ1JfQkNMS19PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhjbGsgPSB7CisJLm5hbWUgPSAiaGNsayIsCisJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAorCS5nZXRfcmF0ZSA9IGhjbGtfZ2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBoY2xrX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gaGNsa19zZXRfcmF0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazQ4bV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoKChfX3Jhd19yZWFkbChDQ01fQ1NDUikgJgorCQkJQ0NNX0NTQ1JfVVNCX01BU0spID4+IENDTV9DU0NSX1VTQl9PRkZTRVQpICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazQ4bV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgOCk7Cit9CisKK3N0YXRpYyBpbnQgY2xrNDhtX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA+IDggfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKwlyZWcgJj0gfkNDTV9DU0NSX1VTQl9NQVNLOworCXJlZyB8PSBkaXYgPDwgQ0NNX0NTQ1JfVVNCX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrNDhtID0geworCS5uYW1lID0gIkNMSzQ4TSIsCisJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAorCS5nZXRfcmF0ZSA9IGNsazQ4bV9nZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IGNsazQ4bV9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IGNsazQ4bV9zZXRfcmF0ZSwKK307CisKKy8qCisgKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMSAoIFVBUlRbMTJdLCBUaW1lclsxMl0sIFBXTSApCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKCgoX19yYXdfcmVhZGwoQ0NNX1BDRFIpICYKKwkJCUNDTV9QQ0RSX1BDTEsxX01BU0spID4+IENDTV9QQ0RSX1BDTEsxX09GRlNFVCkgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyY2xrMV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBfY2xrX3NpbXBsZV9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgMTYpOworfQorCitzdGF0aWMgaW50IHBlcmNsazFfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwlpZiAoZGl2ID4gMTYgfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSKTsKKwlyZWcgJj0gfkNDTV9QQ0RSX1BDTEsxX01BU0s7CisJcmVnIHw9IGRpdiA8PCBDQ01fUENEUl9QQ0xLMV9PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgZ2V0IHBlcmlwaGVyYWwgY2xvY2sgMiAoIExDRCwgU0QsIFNQSVsxMl0gKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJjbGsyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICgoKF9fcmF3X3JlYWRsKENDTV9QQ0RSKSAmCisJCQlDQ01fUENEUl9QQ0xLMl9NQVNLKSA+PiBDQ01fUENEUl9QQ0xLMl9PRkZTRVQpICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazJfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gX2Nsa19zaW1wbGVfcm91bmRfcmF0ZShjbGssIHJhdGUsIDE2KTsKK30KKworc3RhdGljIGludCBwZXJjbGsyX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA+IDE2IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2LS07CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUik7CisJcmVnICY9IH5DQ01fUENEUl9QQ0xLMl9NQVNLOworCXJlZyB8PSBkaXYgPDwgQ0NNX1BDRFJfUENMSzJfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogIGdldCBwZXJpcGhlcmFsIGNsb2NrIDMgKCBTU0kgKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJjbGszX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICgoKF9fcmF3X3JlYWRsKENDTV9QQ0RSKSAmCisJCQlDQ01fUENEUl9QQ0xLM19NQVNLKSA+PiBDQ01fUENEUl9QQ0xLM19PRkZTRVQpICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmNsazNfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gX2Nsa19zaW1wbGVfcm91bmRfcmF0ZShjbGssIHJhdGUsIDEyOCk7Cit9CisKK3N0YXRpYyBpbnQgcGVyY2xrM19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiAxMjggfHwgZGl2IDwgMSB8fCAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYtLTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSKTsKKwlyZWcgJj0gfkNDTV9QQ0RSX1BDTEszX01BU0s7CisJcmVnIHw9IGRpdiA8PCBDQ01fUENEUl9QQ0xLM19PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa1tdID0geworCXsKKwkJLm5hbWUgPSAicGVyY2xrIiwKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAorCQkuZ2V0X3JhdGUgPSBwZXJjbGsxX2dldF9yYXRlLAorCQkucm91bmRfcmF0ZSA9IHBlcmNsazFfcm91bmRfcmF0ZSwKKwkJLnNldF9yYXRlID0gcGVyY2xrMV9zZXRfcmF0ZSwKKwl9LCB7CisJCS5uYW1lID0gInBlcmNsayIsCisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKKwkJLmdldF9yYXRlID0gcGVyY2xrMl9nZXRfcmF0ZSwKKwkJLnJvdW5kX3JhdGUgPSBwZXJjbGsyX3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IHBlcmNsazJfc2V0X3JhdGUsCisJfSwgeworCQkubmFtZSA9ICJwZXJjbGsiLAorCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJnN5c3RlbV9jbGssCisJCS5nZXRfcmF0ZSA9IHBlcmNsazNfZ2V0X3JhdGUsCisJCS5yb3VuZF9yYXRlID0gcGVyY2xrM19yb3VuZF9yYXRlLAorCQkuc2V0X3JhdGUgPSBwZXJjbGszX3NldF9yYXRlLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrICpjbGtvX2Nsb2Nrc1tdID0geworCSZwZXJjbGtbMF0sCisJJmhjbGssCisJJmNsazQ4bSwKKwkmY2xrMTZtLAorCSZwcmVtX2NsaywKKwkmZmNsaywKK307CisKK3N0YXRpYyBpbnQgY2xrb19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCBpOworCXVuc2lnbmVkIGludCByZWc7CisKKwlpID0gX2Nsa19jYW5fdXNlX3BhcmVudChjbGtvX2Nsb2NrcywgQVJSQVlfU0laRShjbGtvX2Nsb2NrcyksIHBhcmVudCk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKSAmIH5DQ01fQ1NDUl9DTEtPX01BU0s7CisJcmVnIHw9IGkgPDwgQ0NNX0NTQ1JfQ0xLT19PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX0NTQ1IpOworCisJaWYgKGNsa29fY2xvY2tzW2ldLT5zZXRfcmF0ZSAmJiBjbGtvX2Nsb2Nrc1tpXS0+cm91bmRfcmF0ZSkgeworCQljbGstPnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGU7CisJCWNsay0+cm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGU7CisJfSBlbHNlIHsKKwkJY2xrLT5zZXRfcmF0ZSA9IE5VTEw7CisJCWNsay0+cm91bmRfcmF0ZSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa29fY2xrID0geworCS5uYW1lID0gImNsa29fY2xrIiwKKwkuc2V0X3BhcmVudCA9IGNsa29fc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jbGsgPSB7CisJLm5hbWUgPSAiZG1hX2NsayIsCisJLnBhcmVudCA9ICZoY2xrLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBTQ01fR0NDUiwKKwkuZW5hYmxlX3NoaWZ0ID0gU0NNX0dDQ1JfRE1BX0NMS19FTl9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjc2lfY2xrID0geworCS5uYW1lID0gImNzaV9jbGsiLAorCS5wYXJlbnQgPSAmaGNsaywKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCisJLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX0NTSV9DTEtfRU5fT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1hX2NsayA9IHsKKwkubmFtZSA9ICJtbWFfY2xrIiwKKwkucGFyZW50ID0gJmhjbGssCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IFNDTV9HQ0NSLAorCS5lbmFibGVfc2hpZnQgPSBTQ01fR0NDUl9NTUFfQ0xLX0VOX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmRfY2xrID0geworCS5uYW1lID0gInVzYmRfY2xrIiwKKwkucGFyZW50ID0gJmNsazQ4bSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gU0NNX0dDQ1IsCisJLmVuYWJsZV9zaGlmdCA9IFNDTV9HQ0NSX1VTQkRfQ0xLX0VOX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7CisJLm5hbWUgPSAiZ3B0X2NsayIsCisJLnBhcmVudCA9ICZwZXJjbGtbMF0sCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7CisJLm5hbWUgPSAidWFydF9jbGsiLAorCS5wYXJlbnQgPSAmcGVyY2xrWzBdLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGsgPSB7CisJLm5hbWUgPSAiaTJjX2NsayIsCisJLnBhcmVudCA9ICZoY2xrLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7CisJLm5hbWUgPSAic3BpX2NsayIsCisJLnBhcmVudCA9ICZwZXJjbGtbMV0sCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19jbGsgPSB7CisJLm5hbWUgPSAic2RoY19jbGsiLAorCS5wYXJlbnQgPSAmcGVyY2xrWzFdLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0geworCS5uYW1lID0gImxjZGNfY2xrIiwKKwkucGFyZW50ID0gJnBlcmNsa1sxXSwKKwkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc2hjX2NsayA9IHsKKwkubmFtZSA9ICJtc2hjX2NsayIsCisJLnBhcmVudCA9ICZoY2xrLAorCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9jbGsgPSB7CisJLm5hbWUgPSAic3NpX2NsayIsCisJLnBhcmVudCA9ICZwZXJjbGtbMl0sCisJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcnRjX2NsayA9IHsKKwkubmFtZSA9ICJydGNfY2xrIiwKKwkucGFyZW50ID0gJmNsazMyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKm14Y19jbGtzW10gPSB7CisJJmNsazE2bSwKKwkmY2xrMzIsCisJJmNsazMyX3ByZW11bHQsCisJJnByZW1fY2xrLAorCSZzeXN0ZW1fY2xrLAorCSZtY3VfY2xrLAorCSZmY2xrLAorCSZoY2xrLAorCSZjbGs0OG0sCisJJnBlcmNsa1swXSwKKwkmcGVyY2xrWzFdLAorCSZwZXJjbGtbMl0sCisJJmNsa29fY2xrLAorCSZkbWFfY2xrLAorCSZjc2lfY2xrLAorCSZtbWFfY2xrLAorCSZ1c2JkX2NsaywKKwkmZ3B0X2NsaywKKwkmdWFydF9jbGssCisJJmkyY19jbGssCisJJnNwaV9jbGssCisJJnNkaGNfY2xrLAorCSZsY2RjX2NsaywKKwkmbXNoY19jbGssCisJJnNzaV9jbGssCisJJnJ0Y19jbGssCit9OworCitpbnQgX19pbml0IG14Y19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCit7CisJc3RydWN0IGNsayAqKmNsa3A7CisJdW5zaWduZWQgaW50IHJlZzsKKworCS8qIGRpc2FibGUgY2xvY2tzIHdlIGFyZSBhYmxlIHRvICovCisJX19yYXdfd3JpdGVsKDAsIFNDTV9HQ0NSKTsKKworCWNsazMyX3JhdGUgPSBmcmVmOworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKKworCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIHN5c3RlbSBQTEwgKi8KKwlpZiAocmVnICYgQ0NNX0NTQ1JfU1lTVEVNX1NFTCkgeworCQlwcmVtX2Nsay5wYXJlbnQgPSAmY2xrMTZtOworCX0gZWxzZSB7CisJCS8qIGVuc3VyZSB0aGF0IG9zY2lsbGF0b3IgaXMgZGlzYWJsZWQgKi8KKwkJcmVnICY9IH4oMSA8PCBDQ01fQ1NDUl9PU0NfRU5fU0hJRlQpOworCQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CisJCXByZW1fY2xrLnBhcmVudCA9ICZjbGszMl9wcmVtdWx0OworCX0KKworCS8qIGRldGVjdCByZWZlcmVuY2UgZm9yIENMS08gKi8KKwlyZWcgPSAocmVnICYgQ0NNX0NTQ1JfQ0xLT19NQVNLKSA+PiBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKKwljbGtvX2Nsay5wYXJlbnQgPSAoc3RydWN0IGNsayAqKWNsa29fY2xvY2tzW3JlZ107CisKKwlmb3IgKGNsa3AgPSBteGNfY2xrczsgY2xrcCA8IG14Y19jbGtzICsgQVJSQVlfU0laRShteGNfY2xrcyk7IGNsa3ArKykKKwkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKworCWNsa19lbmFibGUoJmhjbGspOworCWNsa19lbmFibGUoJmZjbGspOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDEvY3JtX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU4NjZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvY3JtX3JlZ3MuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NWDFfQ1JNX1JFR1NfSF9fCisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NWDFfQ1JNX1JFR1NfSF9fCisKKyNkZWZpbmUgQ0NNX0JBU0UJSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKQorI2RlZmluZSBTQ01fQkFTRQlJT19BRERSRVNTKFNDTV9CQVNFX0FERFIpCisKKy8qIENDTSByZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQ0NNX0NTQ1IJKENDTV9CQVNFICsgMHgwKQorI2RlZmluZSBDQ01fTVBDVEwwCShDQ01fQkFTRSArIDB4NCkKKyNkZWZpbmUgQ0NNX01QQ1RMMQkoQ0NNX0JBU0UgKyAweDgpCisjZGVmaW5lIENDTV9TUENUTDAJKENDTV9CQVNFICsgMHhDKQorI2RlZmluZSBDQ01fU1BDVEwxCShDQ01fQkFTRSArIDB4MTApCisjZGVmaW5lIENDTV9QQ0RSCShDQ01fQkFTRSArIDB4MjApCisKKyNkZWZpbmUgQ0NNX0NTQ1JfQ0xLT19PRkZTRVQJMjkKKyNkZWZpbmUgQ0NNX0NTQ1JfQ0xLT19NQVNLCSgweDcgPDwgMjkpCisjZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQJMjYKKyNkZWZpbmUgQ0NNX0NTQ1JfVVNCX01BU0sJKDB4NyA8PCAyNikKKyNkZWZpbmUgQ0NNX0NTQ1JfU1BMTF9SRVNUQVJUCSgxIDw8IDIyKQorI2RlZmluZSBDQ01fQ1NDUl9NUExMX1JFU1RBUlQJKDEgPDwgMjEpCisjZGVmaW5lIENDTV9DU0NSX09TQ19FTl9TSElGVAkxNworI2RlZmluZSBDQ01fQ1NDUl9TWVNURU1fU0VMCSgxIDw8IDE2KQorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX09GRlNFVAkxMAorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX01BU0sJKDB4RiA8PCAxMCkKKyNkZWZpbmUgQ0NNX0NTQ1JfUFJFU0MJCSgxIDw8IDE1KQorI2RlZmluZSBDQ01fQ1NDUl9TUEVOCQkoMSA8PCAxKQorI2RlZmluZSBDQ01fQ1NDUl9NUEVOCQkoMSA8PCAwKQorCisjZGVmaW5lIENDTV9QQ0RSX1BDTEszX09GRlNFVAkxNgorI2RlZmluZSBDQ01fUENEUl9QQ0xLM19NQVNLCSgweDdGIDw8IDE2KQorI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9PRkZTRVQJNAorI2RlZmluZSBDQ01fUENEUl9QQ0xLMl9NQVNLCSgweEYgPDwgNCkKKyNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFJfUENMSzFfTUFTSwkweEYKKworLyogU0NNIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQ01fU0lEUgkoU0NNX0JBU0UgKyAweDApCisjZGVmaW5lIFNDTV9GTUNSCShTQ01fQkFTRSArIDB4NCkKKyNkZWZpbmUgU0NNX0dQQ1IJKFNDTV9CQVNFICsgMHg4KQorI2RlZmluZSBTQ01fR0NDUgkoU0NNX0JBU0UgKyAweEMpCisKKyNkZWZpbmUgU0NNX0dDQ1JfRE1BX0NMS19FTl9PRkZTRVQJMworI2RlZmluZSBTQ01fR0NDUl9DU0lfQ0xLX0VOX09GRlNFVAkyCisjZGVmaW5lIFNDTV9HQ0NSX01NQV9DTEtfRU5fT0ZGU0VUCTEKKyNkZWZpbmUgU0NNX0dDQ1JfVVNCRF9DTEtfRU5fT0ZGU0VUCTAKKworI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9NWDJfQ1JNX1JFR1NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2ZDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRGFyaXVzIEF1Z3VsaXMgPGRhcml1cy5hdWd1bGlzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9jc2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gMHgwMDIyNDAwMCwKKwkJLmVuZCAgICA9IDB4MDAyMjQwMTAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IENTSV9JTlQsCisJCS5lbmQgICAgPSBDU0lfSU5ULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgaW14X2NzaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9jc2lfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJpbXgtY3NpIiwKKwkuaWQgICAgICAgICAgICAgPSAwLCAvKiBUaGlzIGlzIHVzZWQgdG8gcHV0IGNhbWVyYXMgb24gdGhpcyBpbnRlcmZhY2UgKi8KKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJmlteF9jc2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZSAgICAgICA9IGlteF9jc2lfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X2NzaV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfaTJjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IDB4MDAyMTcwMDAsCisJCS5lbmQgICAgPSAweDAwMjE3MDEwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBJMkNfSU5ULAorCQkuZW5kICAgID0gSTJDX0lOVCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9pMmNfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJpbXgtaTJjIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlteF9pMmNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X2kyY19yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdWFydDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBVQVJUMV9CQVNFX0FERFIsCisJCS5lbmQJPSBVQVJUMV9CQVNFX0FERFIgKyAweEQwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9SWCwKKwkJLmVuZAk9IFVBUlQxX01JTlRfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBVQVJUMV9NSU5UX1RYLAorCQkuZW5kCT0gVUFSVDFfTUlOVF9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IFVBUlQxX01JTlRfUlRTLAorCQkuZW5kCT0gVUFSVDFfTUlOVF9SVFMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91YXJ0MV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImlteC11YXJ0IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14X3VhcnQxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaW14X3VhcnQxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gVUFSVDJfQkFTRV9BRERSLAorCQkuZW5kCT0gVUFSVDJfQkFTRV9BRERSICsgMHhEMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IFVBUlQyX01JTlRfUlgsCisJCS5lbmQJPSBVQVJUMl9NSU5UX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gVUFSVDJfTUlOVF9UWCwKKwkJLmVuZAk9IFVBUlQyX01JTlRfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JUUywKKwkJLmVuZAk9IFVBUlQyX01JTlRfUlRTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDJfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXgtdWFydCIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGlteF91YXJ0Ml9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91YXJ0Ml9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gMHgwMDIwNDAwMCwKKwkJLmVuZCAgICA9IDB4MDAyMDQwMjQsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IFJUQ19JTlQsCisJCS5lbmQgICAgPSBSVENfSU5ULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydCAgPSBSVENfU0FNSU5ULAorCQkuZW5kICAgID0gUlRDX1NBTUlOVCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9ydGNfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJydGMtaW14IiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlteF9ydGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3J0Y19yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfd2R0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IDB4MDAyMDEwMDAsCisJCS5lbmQgICAgPSAweDAwMjAxMDA4LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBXRFRfSU5ULAorCQkuZW5kICAgID0gV0RUX0lOVCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJpbXgtd2R0IiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZSAgICAgICA9IGlteF93ZHRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3dkdF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdXNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHgwMDIxMjAwMCwKKwkJLmVuZAk9IDB4MDAyMTIxNDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDAsCisJCS5lbmQJPSBVU0JEX0lOVDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDEsCisJCS5lbmQJPSBVU0JEX0lOVDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDIsCisJCS5lbmQJPSBVU0JEX0lOVDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzRdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDMsCisJCS5lbmQJPSBVU0JEX0lOVDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzVdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDQsCisJCS5lbmQJPSBVU0JEX0lOVDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzZdID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDUsCisJCS5lbmQJPSBVU0JEX0lOVDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzddID0geworCQkuc3RhcnQJPSBVU0JEX0lOVDYsCisJCS5lbmQJPSBVU0JEX0lOVDYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91c2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJpbXhfdWRjIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14X3VzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGlteF91c2JfcmVzb3VyY2VzLAorfTsKKworLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKKwlbMF0gPSB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpLAorCQkuaXJxID0gR1BJT19JTlRfUE9SVEEsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVAorCX0sCisJWzFdID0geworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAorCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgxMDApLAorCQkuaXJxID0gR1BJT19JTlRfUE9SVEIsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyCisJfSwKKwlbMl0gPSB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDIwMCksCisJCS5pcnEgPSBHUElPX0lOVF9QT1JUQywKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQKKwl9LAorCVszXSA9IHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0zIiwKKwkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MzAwKSwKKwkJLmlycSA9IEdQSU9fSU5UX1BPUlRELAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA5NgorCX0KK307CisKK2ludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCit7CisJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14X2dwaW9fcG9ydHMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE1ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5oCkBAIC0wLDAgKzEsNyBAQAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X2NzaV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfaTJjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91YXJ0MV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfdWFydDJfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3J0Y19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfd2R0X2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91c2JfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZWM2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MS9nZW5lcmljLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBhdXRob3I6IFNhc2NoYSBIYXVlcgorICogIENyZWF0ZWQ6IGFwcmlsIDIwdGgsIDIwMDQKKyAqICBDb3B5cmlnaHQ6IFN5bmVydHJvbml4eCBHbWJICisgKgorICogIENvbW1vbiBjb2RlIGZvciBpLk1YIG1hY2hpbmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBJTVhfSU9fQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElNWF9JT19QSFlTKSwKKwkJLmxlbmd0aAkJPSBJTVhfSU9fU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKwordm9pZCBfX2luaXQgbXhjX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChpbXhfaW9fZGVzYywgQVJSQVlfU0laRShpbXhfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTRiMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlteC9teDFhZHMuYworICoKKyAqIEluaXRpYWxseSBiYXNlZCBvbjoKKyAqCWxpbnV4LTIuNi43LWlteC9hcmNoL2FybS9tYWNoLWlteC9zY2I5MzI4LmMKKyAqCUNvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqCisgKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDEtbXgyLmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogVUFSVHMgcGxhdGZvcm0gZGF0YQorICovCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJUEM5X1BGX1VBUlQxX0NUUywKKwlQQzEwX1BGX1VBUlQxX1JUUywKKwlQQzExX1BGX1VBUlQxX1RYRCwKKwlQQzEyX1BGX1VBUlQxX1JYRCwKK307CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAiVUFSVDEiKTsKK30KKworc3RhdGljIGludCB1YXJ0MV9teGNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteGNfdWFydDJfcGluc1tdID0geworCVBCMjhfUEZfVUFSVDJfQ1RTLAorCVBCMjlfUEZfVUFSVDJfUlRTLAorCVBCMzBfUEZfVUFSVDJfVFhELAorCVBCMzFfUEZfVUFSVDJfUlhELAorfTsKKworc3RhdGljIGludCB1YXJ0Ml9teGNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0Ml9waW5zLAorCQkJQVJSQVlfU0laRShteGNfdWFydDJfcGlucyksICJVQVJUMiIpOworfQorCitzdGF0aWMgaW50IHVhcnQyX214Y19leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0Ml9waW5zLAorCQkJQVJSQVlfU0laRShteGNfdWFydDJfcGlucykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CisJeworCQkuaW5pdCA9IHVhcnQxX214Y19pbml0LAorCQkuZXhpdCA9IHVhcnQxX214Y19leGl0LAorCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sIHsKKwkJLmluaXQgPSB1YXJ0Ml9teGNfaW5pdCwKKwkJLmV4aXQgPSB1YXJ0Ml9teGNfZXhpdCwKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LAorfTsKKworLyoKKyAqIFBoeXNtYXAgZmxhc2gKKyAqLworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDFhZHNfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBJTVhfQ1MwX1BIWVMsCisJLmVuZAk9IElNWF9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gMCwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworLyoKKyAqIEJvYXJkIGluaXQKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14MWFkc19pbml0KHZvaWQpCit7CisJLyogVUFSVCAqLworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF91YXJ0MV9kZXZpY2UsICZ1YXJ0X3BkYXRhWzBdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDJfZGV2aWNlLCAmdWFydF9wZGF0YVsxXSk7CisKKwkvKiBQaHlzbWFwIGZsYXNoICovCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmZmxhc2hfZGV2aWNlLCAmbXgxYWRzX2ZsYXNoX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteGNfY2xvY2tzX2luaXQoMzIwMDApOworCW14Y190aW1lcl9pbml0KCJncHRfY2xrIik7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbXgxYWRzX3RpbWVyID0geworCS5pbml0CT0gbXgxYWRzX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMUFEUywgIkZyZWVzY2FsZSBNWDFBRFMiKQorCS8qIE1haW50YWluZXI6IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggKi8KKwkucGh5c19pbwk9IElNWF9JT19QSFlTLAorCS5pb19wZ19vZmZzdAk9IChJTVhfSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14Y19tYXBfaW8sCisJLmluaXRfaXJxCT0gbXhjX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKK01BQ0hJTkVfRU5ECisKK01BQ0hJTkVfU1RBUlQoTVhMQURTLCAiRnJlZXNjYWxlIE1YTEFEUyIpCisJLnBoeXNfaW8JPSBJTVhfSU9fUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbwkJPSBteGNfbWFwX2lvLAorCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkudGltZXIJCT0gJm14MWFkc190aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCmluZGV4IGJkMDU1OWQuLmFmMTIxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKQEAgLTE5MCwzOCArMTkwLDcyIEBACiAJLnJlc291cmNlID0gbXhjX3dkdF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBPV0lSRV9CQVNFX0FERFIsCisJCS5lbmQgICA9IE9XSVJFX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXhjX3cxIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdzFfbWFzdGVyX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTkZDX0JBU0VfQUREUiwKKwkJLmVuZAk9IE5GQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IE1YQ19JTlRfTkFOREZDLAorCQkuZW5kCT0gTVhDX0lOVF9OQU5ERkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlID0geworCS5uYW1lID0gIm14Y19uYW5kIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfbmFuZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19uYW5kX3Jlc291cmNlcywKK307CisKIC8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7CiAJWzBdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuaXJxID0gTVhDX0lOVF9HUElPLAogCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDApLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfTUFYX0lOVF9MSU5FUywKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAogCX0sCiAJWzFdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAogCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDEpLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfTUFYX0lOVF9MSU5FUyArIDMyLAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKIAl9LAogCVsyXSA9IHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0yIiwKIAkJLmJhc2UgPSAodm9pZCopKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDE1MDAwICsgMHgxMDAgKiAyKSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX01BWF9JTlRfTElORVMgKyA2NCwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCiAJfSwKIAlbM10gPSB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCiAJCS5iYXNlID0gKHZvaWQqKShBSVBJX0JBU0VfQUREUl9WSVJUICsgMHgxNTAwMCArIDB4MTAwICogMyksCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19NQVhfSU5UX0xJTkVTICsgOTYsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAogCX0sCiAJWzRdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTQiLAogCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDQpLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfTUFYX0lOVF9MSU5FUyArIDEyOCwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMTI4LAogCX0sCiAJWzVdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTUiLAogCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDUpLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfTUFYX0lOVF9MSU5FUyArIDE2MCwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMTYwLAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAppbmRleCBjNzdhNGI4Li4xZThjYjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCkBAIC0xMiw0ICsxMiw1IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UzOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTU7Ci0KK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCmluZGV4IDU2ZTIyZDMuLjJiNWM2N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKQEAgLTY4LDE1ICs2OCwxNCBAQAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0MF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQwX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MF9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfTk9STUFMLCAiVUFSVDAiKTsKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQwX3BpbnMpLCAiVUFSVDAiKTsKIH0KIAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0MF9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQwX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MF9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfUkVMRUFTRSwgIlVBUlQwIik7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0MF9waW5zLAorCQkJQVJSQVlfU0laRShteGNfdWFydDBfcGlucykpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CkBAIC04OSwxNSArODgsMTQgQEAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0MV9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDFfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIlVBUlQxIik7CisJCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSwgIlVBUlQxIik7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDFfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0MV9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDFfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJVQVJUMSIpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBteGNfdWFydDJfcGluc1tdID0gewpAQCAtMTEwLDE1ICsxMDgsMTQgQEAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0Ml9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDJfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIlVBUlQyIik7CisJCQlBUlJBWV9TSVpFKG14Y191YXJ0Ml9waW5zKSwgIlVBUlQyIik7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDJfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0Ml9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDJfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJVQVJUMiIpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDJfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQyX3BpbnMpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBteGNfdWFydDNfcGluc1tdID0gewpAQCAtMTMxLDE1ICsxMjgsMTMgQEAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0M19waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDNfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIlVBUlQzIik7CisJCQlBUlJBWV9TSVpFKG14Y191YXJ0M19waW5zKSwgIlVBUlQzIik7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0M19waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDNfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJVQVJUMyIpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDNfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQzX3BpbnMpKTsKIH0KIAogc3RhdGljIGludCBteGNfdWFydDRfcGluc1tdID0gewpAQCAtMTUyLDE1ICsxNDcsMTQgQEAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDRfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0NF9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDRfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIlVBUlQ0Iik7CisJCQlBUlJBWV9TSVpFKG14Y191YXJ0NF9waW5zKSwgIlVBUlQ0Iik7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDRfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0NF9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDRfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJVQVJUNCIpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDRfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQ0X3BpbnMpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBteGNfdWFydDVfcGluc1tdID0gewpAQCAtMTczLDE1ICsxNjcsMTQgQEAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0NV9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDVfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIlVBUlQ1Iik7CisJCQlBUlJBWV9TSVpFKG14Y191YXJ0NV9waW5zKSwgIlVBUlQ1Iik7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDVfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0NV9waW5zLAotCQkJQVJSQVlfU0laRShteGNfdWFydDVfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJVQVJUNSIpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDVfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQ1X3BpbnMpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMjEyLDE1ICsyMDUsMTMgQEAKIHN0YXRpYyB2b2lkIGdwaW9fZmVjX2FjdGl2ZSh2b2lkKQogewogCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAotCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpLAotCQkJTVhDX0dQSU9fQUxMT0NfTU9ERV9OT1JNQUwsICJGRUMiKTsKKwkJCUFSUkFZX1NJWkUobXhjX2ZlY19waW5zKSwgIkZFQyIpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX2ZlY19pbmFjdGl2ZSh2b2lkKQogewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAotCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpLAotCQkJTVhDX0dQSU9fQUxMT0NfTU9ERV9SRUxFQVNFLCAiRkVDIik7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y19mZWNfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX2ZlY19waW5zKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKaW5kZXggN2Y1NTc0Ni4uZGZkNDE1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KQEAgLTI3LDEwICsyOCwzNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzguaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCisgKiBQaHl0ZWMncyBQQ00wMzggY29tZXMgd2l0aCAyTWlCIGJhdHRlcnkgYnVmZmVyZWQgU1JBTSwKKyAqIDE2IGJpdCB3aWR0aAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBwY20wMzhfc3JhbV9kYXRhID0geworCS5iYW5rd2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY20wMzhfc3JhbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBDUzFfQkFTRV9BRERSLAorCS5lbmQgICA9IENTMV9CQVNFX0FERFIgKyA1MTIgKiAxMDI0IC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzOF9zcmFtX210ZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXRkLXJhbSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfc3JhbV9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZwY20wMzhfc3JhbV9yZXNvdXJjZSwKK307CisKKy8qCiAgKiBQaHl0ZWMncyBwaHlDT1JFLWkuTVgyNyBjb21lcyB3aXRoIDMyTWlCIGZsYXNoLAogICogMTYgYml0IHdpZHRoCiAgKi8KQEAgLTY0LDE1ICs5MSwxNCBAQAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0MF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQwX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MF9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfTk9STUFMLCAiVUFSVDAiKTsKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQwX3BpbnMpLCAiVUFSVDAiKTsKIH0KIAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0MF9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQwX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MF9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfUkVMRUFTRSwgIlVBUlQwIik7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0MF9waW5zLAorCQkJQVJSQVlfU0laRShteGNfdWFydDBfcGlucykpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CkBAIC04NSwxNSArMTExLDE0IEBACiBzdGF0aWMgaW50IHVhcnRfbXhjX3BvcnQxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKLQkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLAotCQkJTVhDX0dQSU9fQUxMT0NfTU9ERV9OT1JNQUwsICJVQVJUMSIpOworCQkJQVJSQVlfU0laRShteGNfdWFydDFfcGlucyksICJVQVJUMSIpOwogfQogCiBzdGF0aWMgaW50IHVhcnRfbXhjX3BvcnQxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKLQkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLAotCQkJTVhDX0dQSU9fQUxMT0NfTU9ERV9SRUxFQVNFLCAiVUFSVDEiKTsKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCisJCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbXhjX3VhcnQyX3BpbnNbXSA9IHsgUEUxMF9QRl9VQVJUM19DVFMsCkBAIC0xMDQsMTUgKzEyOSwxNCBAQAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQyX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0Ml9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfTk9STUFMLCAiVUFSVDIiKTsKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQyX3BpbnMpLCAiVUFSVDIiKTsKIH0KIAogc3RhdGljIGludCB1YXJ0X214Y19wb3J0Ml9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQyX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0Ml9waW5zKSwKLQkJCU1YQ19HUElPX0FMTE9DX01PREVfUkVMRUFTRSwgIlVBUlQyIik7CisJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0Ml9waW5zLAorCQkJQVJSQVlfU0laRShteGNfdWFydDJfcGlucykpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CkBAIC0xNTUsMjkgKzE3OSw0NyBAQAogc3RhdGljIHZvaWQgZ3Bpb19mZWNfYWN0aXZlKHZvaWQpCiB7CiAJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfZmVjX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX05PUk1BTCwgIkZFQyIpOworCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpLCAiRkVDIik7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fZmVjX2luYWN0aXZlKHZvaWQpCiB7Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfZmVjX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucyksCi0JCQlNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UsICJGRUMiKTsKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAorCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjbTAzOF9uYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDM4X25vcl9tdGRfZGV2aWNlLAorCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmcGNtMDM4X3NyYW1fbXRkX2RldmljZSwKIH07CiAKKy8qIE9uIHBjbTAzOCB0aGVyZSdzIGEgc3JhbSBhdHRhY2hlZCB0byBDUzEsIHdlIGVuYWJsZSB0aGUgY2hpcHNlbGVjdCBoZXJlIGFuZAorICogc2V0dXAgb3RoZXIgc3R1ZmZzIHRvIGFjY2VzcyB0aGUgc3JhbS4gKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfaW5pdF9zcmFtKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKDB4MDAwMGQ4NDMsIENTQ1JfVSgxKSk7CisJX19yYXdfd3JpdGVsKDB4MjIyNTI1MjEsIENTQ1JfTCgxKSk7CisJX19yYXdfd3JpdGVsKDB4MjIyMjBhMDAsIENTQ1JfQSgxKSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfaW5pdCh2b2lkKQogewogCWdwaW9fZmVjX2FjdGl2ZSgpOworCXBjbTAzOF9pbml0X3NyYW0oKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhWzBdKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YVsxXSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfcGRhdGFbMl0pOwogCisJbXhjX2dwaW9fbW9kZShQRTE2X0FGX1JUQ0spOyAvKiBPV0lSRSAqLworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzOF9uYW5kX2JvYXJkX2luZm8pOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwppbmRleCBkYjk0MzFkLi5lNzk2NTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKQEAgLTIxLDUgKzIxLDE5IEBACiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzEgTElURUtJVCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCitjb25maWcgTUFDSF9NWDMxXzNEUworCWJvb2wgIlN1cHBvcnQgTVgzMVBESyAoM0RTKSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzFQREsgKDNEUykgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfTVgzMU1PQk9BUkQKKwlib29sICJTdXBwb3J0IG14MzFtb2JvYXJkIHBsYXRmb3JtcyAoRVBGTCBNb2JvdHMgZ3JvdXApIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgbXgzMW1vYm9hcmQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlCmluZGV4IDhiMjFhYmIuLjVhMTUxNTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQpAQCAtOCwzICs4LDUgQEAKIG9iai0kKENPTkZJR19NQUNIX01YMzFBRFMpCSs9IG14MzFhZHMubwogb2JqLSQoQ09ORklHX01BQ0hfTVgzMUxJVEUpCSs9IG14MzFsaXRlLm8KIG9iai0kKENPTkZJR19NQUNIX1BDTTAzNykJKz0gcGNtMDM3Lm8KK29iai0kKENPTkZJR19NQUNIX01YMzFfM0RTKQkrPSBteDMxcGRrLm8KK29iai0kKENPTkZJR19NQUNIX01YMzFNT0JPQVJEKQkrPSBteDMxbW9ib2FyZC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwppbmRleCA5ZjE0YTg3Li5iMTc0NmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlICJjcm1fcmVncy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IGE2YmRjYzAuLjFkNDZjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTEyNSwxOSArMTI1LDE5IEBACiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPMV9CQVNFX0FERFIpLAogCQkuaXJxID0gTVhDX0lOVF9HUElPMSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSU5UX0JBU0UKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAogCX0sCiAJWzFdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJTzJfQkFTRV9BRERSKSwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTzIsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lOVF9CQVNFICsgR1BJT19OVU1fUElOCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAogCX0sCiAJWzJdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJTzNfQkFTRV9BRERSKSwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTzMsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lOVF9CQVNFICsgR1BJT19OVU1fUElOICogMgorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA2NCwKIAl9CiB9OwogCkBAIC0xNDUsMyArMTQ1LDM3IEBACiB7CiAJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14X2dwaW9fcG9ydHMpKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdzFfbWFzdGVyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gT1dJUkVfQkFTRV9BRERSLAorCQkuZW5kICAgPSBPV0lSRV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlID0geworCS5uYW1lID0gIm14Y193MSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3cxX21hc3Rlcl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE5GQ19CQVNFX0FERFIsCisJCS5lbmQJPSBORkNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSBNWENfSU5UX05BTkRGQywKKwkJLmVuZAk9IE1YQ19JTlRfTkFOREZDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZSA9IHsKKwkubmFtZSA9ICJteGNfbmFuZCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX25hbmRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfbmFuZF9yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IDRkYzAzZjkuLjk5NDllZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTQsMyArNCw1IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW14My9pb211eC5jCmluZGV4IDZlNjY0YmUuLjdhNTA4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXguYwpAQCAtNzQsMTcgKzc0LDE4IEBACiAJdTMyIGZpZWxkLCBsOwogCXZvaWQgX19pb21lbSAqcmVnOwogCi0JcmVnID0gSU9NVVhTV19QQURfQ1RMICsgKHBpbiArIDIpIC8gMzsKKwlwaW4gJj0gSU9NVVhfUEFETlVNX01BU0s7CisJcmVnID0gSU9NVVhTV19QQURfQ1RMICsgKHBpbiArIDIpIC8gMyAqIDQ7CiAJZmllbGQgPSAocGluICsgMikgJSAzOwogCi0JcHJfZGVidWcoIiVzOiByZWcgb2Zmc2V0ID0gMHgleCBmaWVsZCA9ICVkXG4iLAorCXByX2RlYnVnKCIlczogcmVnIG9mZnNldCA9IDB4JXgsIGZpZWxkID0gJWRcbiIsCiAJCQlfX2Z1bmNfXywgKHBpbiArIDIpIC8gMywgZmllbGQpOwogCiAJc3Bpbl9sb2NrKCZncGlvX211eF9sb2NrKTsKIAogCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCWwgJj0gfigweDFmZiA8PCAoZmllbGQgKiA5KSk7Ci0JbCB8PSBjb25maWcgPDwgKGZpZWxkICogOSk7CisJbCAmPSB+KDB4MWZmIDw8IChmaWVsZCAqIDEwKSk7CisJbCB8PSBjb25maWcgPDwgKGZpZWxkICogMTApOwogCV9fcmF3X3dyaXRlbChsLCByZWcpOwogCiAJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5MDk4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFZhbGVudGluIExvbmdjaGFtcCwgRVBGTCBNb2JvdHMgZ3JvdXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDMxbW9ib2FyZF9mbGFzaF9kYXRhID0geworCS53aWR0aCAgCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgzMW1vYm9hcmRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gMHhhMDAwMDAwMCwKKwkuZW5kCT0gMHhhMWZmZmZmZiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MzFtb2JvYXJkX2ZsYXNoID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJm14MzFtb2JvYXJkX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmbXgzMW1vYm9hcmRfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteDMxbW9ib2FyZF9mbGFzaCwKK307CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DVFMxX19DVFMxKTsKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SVFMxX19SVFMxKTsKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9UWEQxX19UWEQxKTsKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SWEQxX19SWEQxKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKKworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzJfX0NUUzIpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzJfX1JUUzIpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDJfX1RYRDIpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDJfX1JYRDIpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCisJbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUENfUlNUX19DVFM1KTsKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9QQ19WUzJfX1JUUzUpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX0JWRDJfX1RYRDUpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX0JWRDFfX1JYRDUpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlNCwgJnVhcnRfcGRhdGEpOworfQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBteDMxbW9ib2FyZC4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxbW9ib2FyZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IEFJUFMxX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LCB7CisJCS52aXJ0dWFsCT0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IEFJUFMyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LAorfTsKKworLyoKKyAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KKyAqLwordm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfbWFwX2lvKHZvaWQpCit7CisJbXhjX21hcF9pbygpOworCWlvdGFibGVfaW5pdChteDMxbW9ib2FyZF9pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFtb2JvYXJkX2lvX2Rlc2MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MzFtb2JvYXJkX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOworCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKK30KKworc3RydWN0IHN5c190aW1lciBteDMxbW9ib2FyZF90aW1lciA9IHsKKwkuaW5pdAk9IG14MzFtb2JvYXJkX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMzFNT0JPQVJELCAiRVBGTCBNb2JvdHMgbXgzMW1vYm9hcmQiKQorCS8qIE1haW50YWluZXI6IFZhbGVudGluIExvbmdjaGFtcCwgRVBGTCBNb2JvdHMgZ3JvdXAgKi8KKwkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDMxbW9ib2FyZF9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDMxbW9ib2FyZF90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY0ZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxcGRrLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKiEKKyAqIEBmaWxlIG14MzFwZGsuYworICoKKyAqIEBicmllZiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorICoKKyAqIEBpbmdyb3VwIFN5c3RlbQorICovCisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQoreworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzFfX0NUUzEpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzFfX1JUUzEpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDFfX1RYRDEpOworCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDFfX1JYRDEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworfQorCisvKiEKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgc3RhdGljIG1hcHBpbmdzIGZvciB0aGUgaS5NWDMxUERLIGJvYXJkLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFwZGtfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwKK307CisKKy8qIQorICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMXBka19tYXBfaW8odm9pZCkKK3sKKwlteGNfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KG14MzFwZGtfaW9fZGVzYywgQVJSQVlfU0laRShteDMxcGRrX2lvX2Rlc2MpKTsKK30KKworLyohCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2luaXRfaW14X3VhcnQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MzFwZGtfdGltZXJfaW5pdCh2b2lkKQoreworCW14Y19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CisJbXhjX3RpbWVyX2luaXQoImlwZ19jbGsuMCIpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxcGRrX3RpbWVyID0geworCS5pbml0CT0gbXgzMXBka190aW1lcl9pbml0LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCisgKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX01YMzFQREsgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK01BQ0hJTkVfU1RBUlQoTVgzMV8zRFMsICJGcmVlc2NhbGUgTVgzMVBESyAoM0RTKSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDMxcGRrX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJm14MzFwZGtfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwppbmRleCA4NDNmNjhjLi44Y2VhODI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMjEsNyArMjEsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzIsNiArMzYsNyBAQAogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM3Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC01OSw4ICs2NCw2MyBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gQ1MxX0JBU0VfQUREUiArIDB4MzAwLAorCQkuZW5kCQk9IENTMV9CQVNFX0FERFIgKyAweDMwMCArIFNaXzY0SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKKwkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhIHNtYzkxMXhfaW5mbyA9IHsKKwkuZmxhZ3MJCT0gU01DOTExWF9VU0VfMzJCSVQsCisJLmlycV9mbGFncwk9IElSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VSX0xPVywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19ldGggPSB7CisJLm5hbWUJCT0gInNtYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWM5MTF4X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBwY20wMzhfc3JhbV9kYXRhID0geworCS5iYW5rd2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY20wMzhfc3JhbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBDUzRfQkFTRV9BRERSLAorCS5lbmQgICA9IENTNF9CQVNFX0FERFIgKyA1MTIgKiAxMDI0IC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19zcmFtX2RldmljZSA9IHsKKwkubmFtZSA9ICJtdGQtcmFtIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjbTAzN19uYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDM3X2ZsYXNoLAorCSZwY20wMzdfZXRoLAorCSZwY20wMzdfc3JhbV9kZXZpY2UsCiB9OwogCiAvKgpAQCAtODEsNiArMTQxLDE2IEBACiAJbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1NQSTNfTUlTT19fVFhEMyk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YSk7CisKKwlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9CQVRUX0xJTkVfX09XSVJFKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdzFfbWFzdGVyX2RldmljZSwgTlVMTCk7CisKKwkvKiBTTVNDOTIxNSBJUlEgcGluICovCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPM18xLCBJT01VWF9DT05GSUdfR1BJTykpOworCWlmICghZ3Bpb19yZXF1ZXN0KE1YMzFfUElOX0dQSU8zXzEsICJwY20wMzctZXRoIikpCisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8zXzEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmcGNtMDM3X25hbmRfYm9hcmRfaW5mbyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvZmIuYyBiL2FyY2gvYXJtL21hY2gtbmV0eC9mYi5jCmluZGV4IDI0Yzc5NjUuLjhmMWY5OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9mYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9mYi5jCkBAIC0yMiwxNCArMjIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxtYWNoL25ldHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotc3RydWN0IGNsayB7fTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmJfY2xrOwotCiBzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgKm5ldHhfcGFuZWw7CiAKIHZvaWQgbmV0eF9jbGNkX2VuYWJsZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCkBAIC04NSw3ICs4Miw3IEBACiAKIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQlyZXR1cm4gJmZiX2NsazsKKwlyZXR1cm4gZGV2ICYmIHN0cmNtcChkZXZfbmFtZShkZXYpLCAiZmIiKSA9PSAwID8gTlVMTCA6IEVSUl9QVFIoLUVOT0VOVCk7CiB9CiAKIHZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwYjNlYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAwCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUyB+MApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDQ2OGI5MmEuLmMzOTIxY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKLSNkZWZpbmUgX19pbyhhKSAgICAgICAgICgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCiAjZGVmaW5lIF9fbWVtX3BjaShhKSAgICAgICAgICAgIChhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDUzNzQ1YTEuLjlhMzYzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjIsMTUgKzIyLDUgQEAKIAogI2RlZmluZSBQSFlTX09GRlNFVCBVTCgweDgwMDAwMDAwKQogCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKiAgICAgICAgICAgICAgYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKiAgICAgICAgICAgICAgdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpICAgICAgICAgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSAgICAgICAgIF9fcGh5c190b192aXJ0KHgpCi0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL25ldHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9uZXR4LXJlZ3MuaAppbmRleCA1MTA0YTAwLi4wOGM2MGZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL25ldHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbmV0eC1yZWdzLmgKQEAgLTMyOCw2ICszMjgsMjggQEAKICNkZWZpbmUgTkVUWF9QRklGT19GSUxMX0xFVkVMKHBmaWZvKSAgTkVUWF9QRklGT19SRUcoMHgxODAgKyAoKHBmaWZvKTw8MikpCiAjZGVmaW5lIE5FVFhfUEZJRk9fWFBFQ19JU1IoeHBlYykgICAgIE5FVFhfUEZJRk9fUkVHKDB4NDAwICsgKCh4cGVjKSA8PCAyKSkKIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IENvbnRyb2xsZXIgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTkVUWF9NRU1DUl9SRUcob2ZzKSAgICAgICAgICAgICAgIF9faW8oTkVUWF9WQV9NRU1DUiArIChvZnMpKQorI2RlZmluZSBORVRYX01FTUNSX1NSQU1fQ1RSTChjcykgICAgICBORVRYX01FTUNSX1JFRygweDAgKyA0ICogKGNzKSkgLyogU1JBTSBmb3IgQ1MgMC4uMiAqLworI2RlZmluZSBORVRYX01FTUNSX1NEUkFNX0NGR19DVFJMICAgICBORVRYX01FTUNSX1JFRygweDQwKQorI2RlZmluZSBORVRYX01FTUNSX1NEUkFNX1RJTUlOR19DVFJMICBORVRYX01FTUNSX1JFRygweDQ0KQorI2RlZmluZSBORVRYX01FTUNSX1NEUkFNX01PREUgICAgICAgICBORVRYX01FTUNSX1JFRygweDQ4KQorI2RlZmluZSBORVRYX01FTUNSX1NEUkFNX0VYVF9NT0RFICAgICBORVRYX01FTUNSX1JFRygweDRjKQorI2RlZmluZSBORVRYX01FTUNSX1BSSU9fVElNRVNMT1RfQ1RSTCBORVRYX01FTUNSX1JFRygweDgwKQorI2RlZmluZSBORVRYX01FTUNSX1BSSU9fQUNDRVNTX0NUUkwgICBORVRYX01FTUNSX1JFRygweDg0KQorCisvKiBCaXRzICovCisjZGVmaW5lIE5FVFhfTUVNQ1JfU1JBTV9DVFJMX1dJRFRIRVhUTUVNKHgpICAgICAgICgoKHgpICYgMHgzKSAgPDwgMjQpCisjZGVmaW5lIE5FVFhfTUVNQ1JfU1JBTV9DVFJMX1dTUE9TVFBBVVNFRVhUTUVNKHgpICgoKHgpICYgMHgzKSAgPDwgMTYpCisjZGVmaW5lIE5FVFhfTUVNQ1JfU1JBTV9DVFJMX1dTUFJFUEFTRUVYVE1FTSh4KSAgICgoKHgpICYgMHgzKSAgPDwgOCkKKyNkZWZpbmUgTkVUWF9NRU1DUl9TUkFNX0NUUkxfV1NFWFRNRU0oeCkgICAgICAgICAgKCgoeCkgJiAweDFmKSA8PCAwKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEdWFsIFBvcnQgTWVtb3J5ICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwppbmRleCA3YzU0MGMxLi5kNTFkNjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKQEAgLTIxLDQzICsyMSwxMDAgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL25ldHgtcmVncy5oPgogCisjZGVmaW5lIFRJTUVSX0NMT0NLRVZFTlQgMAorI2RlZmluZSBUSU1FUl9DTE9DS1NPVVJDRSAxCisKK3N0YXRpYyB2b2lkIG5ldHhfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl1MzIgdG1vZGU7CisKKwkvKiBkaXNhYmxlIHRpbWVyICovCisJd3JpdGVsKDAsIE5FVFhfR1BJT19DT1VOVEVSX0NUUkwoVElNRVJfQ0xPQ0tFVkVOVCkpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJd3JpdGVsKExBVENILCBORVRYX0dQSU9fQ09VTlRFUl9NQVgoVElNRVJfQ0xPQ0tFVkVOVCkpOworCQl0bW9kZSA9IE5FVFhfR1BJT19DT1VOVEVSX0NUUkxfUlNUX0VOIHwKKwkJCU5FVFhfR1BJT19DT1VOVEVSX0NUUkxfSVJRX0VOIHwKKwkJCU5FVFhfR1BJT19DT1VOVEVSX0NUUkxfUlVOOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJd3JpdGVsKDAsIE5FVFhfR1BJT19DT1VOVEVSX01BWChUSU1FUl9DTE9DS0VWRU5UKSk7CisJCXRtb2RlID0gTkVUWF9HUElPX0NPVU5URVJfQ1RSTF9JUlFfRU4gfAorCQkJTkVUWF9HUElPX0NPVU5URVJfQ1RSTF9SVU47CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0FSTigxLCAiJXM6IHVuaGFuZGxlZCBtb2RlICVkXG4iLCBfX2Z1bmNfXywgbW9kZSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJdG1vZGUgPSAwOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwodG1vZGUsIE5FVFhfR1BJT19DT1VOVEVSX0NUUkwoVElNRVJfQ0xPQ0tFVkVOVCkpOworfQorCitzdGF0aWMgaW50IG5ldHhfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl3cml0ZWwoMCAtIGV2dCwgTkVUWF9HUElPX0NPVU5URVJfQ1VSUkVOVChUSU1FUl9DTE9DS0VWRU5UKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIG5ldHhfY2xvY2tldmVudCA9IHsKKwkubmFtZSA9ICJuZXR4LXRpbWVyIiBfX3N0cmluZ2lmeShUSU1FUl9DTE9DS0VWRU5UKSwKKwkuc2hpZnQgPSAzMiwKKwkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9uZXh0X2V2ZW50ID0gbmV0eF9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUgPSBuZXR4X3NldF9tb2RlLAorfTsKKwogLyoKICAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKICAqLwogc3RhdGljIGlycXJldHVybl90CiBuZXR4X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JdGltZXJfdGljaygpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZuZXR4X2Nsb2NrZXZlbnQ7CiAKIAkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoQ09VTlRFUl9CSVQoMCksIE5FVFhfR1BJT19JUlEpOwogCisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG5ldHhfdGltZXJfaXJxID0gewotCS5uYW1lICAgICAgICAgICA9ICJOZXRYIFRpbWVyIFRpY2siLAotCS5mbGFncyAgICAgICAgICA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5oYW5kbGVyICAgICAgICA9IG5ldHhfdGltZXJfaW50ZXJydXB0LAorCS5uYW1lCQk9ICJOZXRYIFRpbWVyIFRpY2siLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IG5ldHhfdGltZXJfaW50ZXJydXB0LAogfTsKIAogY3ljbGVfdCBuZXR4X2dldF9jeWNsZXModm9pZCkKIHsKLQlyZXR1cm4gcmVhZGwoTkVUWF9HUElPX0NPVU5URVJfQ1VSUkVOVCgxKSk7CisJcmV0dXJuIHJlYWRsKE5FVFhfR1BJT19DT1VOVEVSX0NVUlJFTlQoVElNRVJfQ0xPQ0tTT1VSQ0UpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9uZXR4ID0gewotCS5uYW1lIAkJPSAibmV0eF90aW1lciIsCisJLm5hbWUJCT0gIm5ldHhfdGltZXIiLAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IG5ldHhfZ2V0X2N5Y2xlcywKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQgCQk9IDIwLAorCS5zaGlmdAkJPSAyMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC03NywyNCArMTM0LDM3IEBACiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJd3JpdGVsKENPVU5URVJfQklUKDApLCBORVRYX0dQSU9fSVJRKTsKIAotCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IGluIHRoZSBzcGVjaWZpYyB0aW1lciByZWdpc3RlciBhbmQgc3RhcnQgdGltZXIgKi8KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdCBpbiB0aGUgc3BlY2lmaWMgdGltZXIKKwkgKiByZWdpc3RlciBhbmQgc3RhcnQgdGltZXIKKwkgKi8KIAl3cml0ZWwoQ09VTlRFUl9CSVQoMCksIE5FVFhfR1BJT19JUlFfRU5BQkxFKTsKIAl3cml0ZWwoTkVUWF9HUElPX0NPVU5URVJfQ1RSTF9JUlFfRU4gfCBORVRYX0dQSU9fQ09VTlRFUl9DVFJMX1JVTiwKLQkJTkVUWF9HUElPX0NPVU5URVJfQ1RSTCgwKSk7CisJCQlORVRYX0dQSU9fQ09VTlRFUl9DVFJMKDApKTsKIAogCXNldHVwX2lycShORVRYX0lSUV9USU1FUjAsICZuZXR4X3RpbWVyX2lycSk7CiAKIAkvKiBTZXR1cCB0aW1lciBvbmUgZm9yIGNsb2Nrc291cmNlICovCi0gICAgICAgIHdyaXRlbCgwLCBORVRYX0dQSU9fQ09VTlRFUl9DVFJMKDEpKTsKLSAgICAgICAgd3JpdGVsKDAsIE5FVFhfR1BJT19DT1VOVEVSX0NVUlJFTlQoMSkpOwotICAgICAgICB3cml0ZWwoMHhGRkZGRkZGRiwgTkVUWF9HUElPX0NPVU5URVJfTUFYKDEpKTsKKwl3cml0ZWwoMCwgTkVUWF9HUElPX0NPVU5URVJfQ1RSTChUSU1FUl9DTE9DS1NPVVJDRSkpOworCXdyaXRlbCgwLCBORVRYX0dQSU9fQ09VTlRFUl9DVVJSRU5UKFRJTUVSX0NMT0NLU09VUkNFKSk7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIE5FVFhfR1BJT19DT1VOVEVSX01BWChUSU1FUl9DTE9DS1NPVVJDRSkpOwogCi0gICAgICAgIHdyaXRlbChORVRYX0dQSU9fQ09VTlRFUl9DVFJMX1JVTiwKLSAgICAgICAgICAgICAgICBORVRYX0dQSU9fQ09VTlRFUl9DVFJMKDEpKTsKKwl3cml0ZWwoTkVUWF9HUElPX0NPVU5URVJfQ1RSTF9SVU4sCisJCQlORVRYX0dQSU9fQ09VTlRFUl9DVFJMKFRJTUVSX0NMT0NLU09VUkNFKSk7CiAKIAljbG9ja3NvdXJjZV9uZXR4Lm11bHQgPQogCQljbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgY2xvY2tzb3VyY2VfbmV0eC5zaGlmdCk7CiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX25ldHgpOworCisJbmV0eF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsCisJCQluZXR4X2Nsb2NrZXZlbnQuc2hpZnQpOworCW5ldHhfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZuZXR4X2Nsb2NrZXZlbnQpOworCS8qIHdpdGggbWF4X2RlbHRhX25zID49IGRlbHRhMm5zKDB4ODAwKSB0aGUgc3lzdGVtIGN1cnJlbnRseSBydW5zIGZpbmUuCisJICogQWRkaW5nIHNvbWUgc2FmZXR5IC4uLiAqLworCW5ldHhfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4YTAwLCAmbmV0eF9jbG9ja2V2ZW50KTsKKwluZXR4X2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmbmV0eF9jbG9ja2V2ZW50KTsKIH0KIAogc3RydWN0IHN5c190aW1lciBuZXR4X3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L3hjLmMgYi9hcmNoL2FybS9tYWNoLW5ldHgveGMuYwppbmRleCAzMmVhYmY1Li44ZmM2MjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgveGMuYworKysgYi9hcmNoL2FybS9tYWNoLW5ldHgveGMuYwpAQCAtOTIsMTAgKzkyLDEwIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHhjX3BhdGNoKHN0cnVjdCB4YyAqeCwgdm9pZCAqcGF0Y2gsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgeGNfcGF0Y2goc3RydWN0IHhjICp4LCBjb25zdCB2b2lkICpwYXRjaCwgaW50IGNvdW50KQogewogCXVuc2lnbmVkIGludCB2YWwsIGFkcjsKLQl1bnNpZ25lZCBpbnQgKmRhdGEgPSBwYXRjaDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmRhdGEgPSBwYXRjaDsKIAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAlzdHJ1Y3QgZndfaGVhZGVyICpoZWFkOwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCBpOwotCXZvaWQgKnNyYzsKKwljb25zdCB2b2lkICpzcmM7CiAJdW5zaWduZWQgbG9uZyBkc3Q7CiAKIAlzcHJpbnRmKG5hbWUsICJ4YyVkLmJpbiIsIHgtPm5vKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y1MGQ4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAotI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICi0KLSNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA2ZGJiMjAzLi43NjYzMTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTEsOCArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0KIC8qCiAgKiBOZXRTaWxpY29uIE5TOXh4eCBpbnRlcm5hbCBtYXBwaW5nOgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMDI3YmY2NC4uZjA4NDUxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAgMHhmZmZmZmZmZiAvKiBYWFggKi8KIAotI2RlZmluZSBfX2lvKGEpICAgICAgICAgKCh2b2lkIF9faW9tZW0gKikoYSkpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKICNkZWZpbmUgX19tZW1fcGNpKGEpICAgIChhKQogI2RlZmluZSBfX21lbV9pc2EoYSkgICAgKElPX0JBU0UgKyAoYSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA2NDllZTYyLi42MTA3MTkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yMSw3ICsyMSw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKIAotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggNzlmMGIxZi4uMTBhMzAxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNCwxNiArNCwxOSBAQAogY29uZmlnIEFSQ0hfT01BUDczMAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWJvb2wgIk9NQVA3MzAgQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKIGNvbmZpZyBBUkNIX09NQVAxNVhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJZGVmYXVsdCB5CiAJYm9vbCAiT01BUDE1eHggQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBDUFVfQVJNOTI1VAogCiBjb25maWcgQVJDSF9PTUFQMTZYWAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWJvb2wgIk9NQVAxNnh4IEJhc2VkIFN5c3RlbSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb21tZW50ICJPTUFQIEJvYXJkIFR5cGUiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCmluZGV4IGRiNzg5NDYuLjMwMzA4MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogc3RhdGljIGludCBuYW5kX2Rldl9yZWFkeShzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7Ci0JcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKFAyX05BTkRfUkJfR1BJT19QSU4pOworCXJldHVybiBncGlvX2dldF92YWx1ZShQMl9OQU5EX1JCX0dQSU9fUElOKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGZzYW1wbGVfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKQEAgLTIyMyw4ICsyMjMsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9mc2FtcGxlX2luaXQodm9pZCkKIHsKLQlpZiAoIShvbWFwX3JlcXVlc3RfZ3BpbyhQMl9OQU5EX1JCX0dQSU9fUElOKSkpCi0JCW5hbmRfZGF0YS5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKKwlpZiAoZ3Bpb19yZXF1ZXN0KFAyX05BTkRfUkJfR1BJT19QSU4sICJOQU5EIHJlYWR5IikgPCAwKQorCQlCVUcoKTsKKwluYW5kX2RhdGEuZGV2X3JlYWR5ID0gbmFuZF9kZXZfcmVhZHk7CiAKIAlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKIAlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDItbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLW1tYy5jCmluZGV4IGFiOWVlNTguLjQwOWZhNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDItbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYwpAQCAtMTIsOTAgKzEyLDY4IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KKwogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKLSNpZmRlZiBDT05GSUdfTU1DX09NQVAKLXN0YXRpYyBpbnQgc2xvdF9jb3Zlcl9vcGVuOwotc3RhdGljIHN0cnVjdCBkZXZpY2UgKm1tY19kZXZpY2U7CisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKIAotc3RhdGljIGludCBoMl9tbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKK3N0YXRpYyBpbnQgbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCiAJCQkJaW50IHZkZCkKIHsKLSNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCi0JZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBwb3dlcjogJXMgKHZkZCAlZClcbiIsIHNsb3QgKyAxLAotCQlwb3dlcl9vbiA/ICJvbiIgOiAib2ZmIiwgdmRkKTsKLSNlbmRpZgotCWlmIChzbG90ICE9IDApIHsKLQkJZGV2X2VycihkZXYsICJObyBzdWNoIHNsb3QgJWRcbiIsIHNsb3QgKyAxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWlmIChwb3dlcl9vbikKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEgyX1RQU19HUElPX01NQ19QV1JfRU4sIDEpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEgyX1RQU19HUElPX01NQ19QV1JfRU4sIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaDJfbW1jX3NldF9idXNfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgYnVzX21vZGUpCitzdGF0aWMgaW50IG1tY19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQlkZXZfZGJnKGRldiwgIlNldCBzbG90ICVkIGJ1c19tb2RlICVzXG4iLCBzbG90ICsgMSwKLQkJYnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOID8gIm9wZW4tZHJhaW4iIDogInB1c2gtcHVsbCIpOwotI2VuZGlmCi0JaWYgKHNsb3QgIT0gMCkgewotCQlkZXZfZXJyKGRldiwgIk5vIHN1Y2ggc2xvdCAlZFxuIiwgc2xvdCArIDEpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJaW50IHJldDsKIAotCXJldHVybiAwOwotfQorCXJldCA9IGdwaW9fcmVxdWVzdChIMl9UUFNfR1BJT19NTUNfUFdSX0VOLCAiTU1DIHBvd2VyIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLXN0YXRpYyBpbnQgaDJfbW1jX2dldF9jb3Zlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQotewotCUJVR19PTihzbG90ICE9IDApOwotCi0JcmV0dXJuIHNsb3RfY292ZXJfb3BlbjsKLX0KLQotdm9pZCBoMl9tbWNfc2xvdF9jb3Zlcl9oYW5kbGVyKHZvaWQgKmFyZywgaW50IHN0YXRlKQotewotCWlmIChtbWNfZGV2aWNlID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNsb3RfY292ZXJfb3BlbiA9IHN0YXRlOwotCW9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChtbWNfZGV2aWNlLCAwLCBzdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaDJfbW1jX2xhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltbWNfZGV2aWNlID0gZGV2OworCWdwaW9fZGlyZWN0aW9uX291dHB1dChIMl9UUFNfR1BJT19NTUNfUFdSX0VOLCAwKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGgyX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIG1tY19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJZ3Bpb19mcmVlKEgyX1RQU19HUElPX01NQ19QV1JfRU4pOwogfQogCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgaDJfbW1jX2RhdGEgPSB7CisvKgorICogSDIgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRlc3RlZDoKKyAqIC0gbW1jX2dldF9jb3Zlcl9zdGF0ZSB0aGF0IHVzZXMgT01BUF9NUFVJTygxKQorICogLSBtbWNfZ2V0X3dwIHRoYXQgdXNlcyBPTUFQX01QVUlPKDMpCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGEgPSB7CiAJLm5yX3Nsb3RzICAgICAgICAgICAgICAgICAgICAgICA9IDEsCi0JLnN3aXRjaF9zbG90ICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCi0JLmluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGgyX21tY19sYXRlX2luaXQsCi0JLmNsZWFudXAgICAgICAgICAgICAgICAgICAgICAgICA9IGgyX21tY19jbGVhbnVwLAorCS5pbml0CQkJCT0gbW1jX2xhdGVfaW5pdCwKKwkuc2h1dGRvd24JCQk9IG1tY19zaHV0ZG93biwKKwkuZG1hX21hc2sJCQk9IDB4ZmZmZmZmZmYsCiAJLnNsb3RzWzBdICAgICAgID0gewotCQkuc2V0X3Bvd2VyICAgICAgICAgICAgICA9IGgyX21tY19zZXRfcG93ZXIsCi0JCS5zZXRfYnVzX21vZGUgICAgICAgICAgID0gaDJfbW1jX3NldF9idXNfbW9kZSwKLQkJLmdldF9ybyAgICAgICAgICAgICAgICAgPSBOVUxMLAotCQkuZ2V0X2NvdmVyX3N0YXRlICAgICAgICA9IGgyX21tY19nZXRfY292ZXJfc3RhdGUsCisJCS5zZXRfcG93ZXIgICAgICAgICAgICAgID0gbW1jX3NldF9wb3dlciwKIAkJLm9jcl9tYXNrICAgICAgICAgICAgICAgPSBNTUNfVkREXzI4XzI5IHwgTU1DX1ZERF8zMF8zMSB8CiAJCQkJCSAgTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIm1tY2JsayIsCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX2RhdGFbT01BUDE2WFhfTlJfTU1DXTsKKwogdm9pZCBfX2luaXQgaDJfbW1jX2luaXQodm9pZCkKIHsKLQlvbWFwX3NldF9tbWNfaW5mbygxLCAmaDJfbW1jX2RhdGEpOworCW1tY19kYXRhWzBdID0gJm1tYzFfZGF0YTsKKwlvbWFwMV9pbml0X21tYyhtbWNfZGF0YSwgT01BUDE2WFhfTlJfTU1DKTsKIH0KIAogI2Vsc2UKQEAgLTEwNCw3ICs4Miw0IEBACiB7CiB9CiAKLXZvaWQgaDJfbW1jX3Nsb3RfY292ZXJfaGFuZGxlcih2b2lkICphcmcsIGludCBzdGF0ZSkKLXsKLX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IDNiNjU5MTQuLmIyNDBjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTI1MCwxMSArMjUwLDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKIHN0YXRpYyBpbnQgaDJfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKIHsKLQlpZiAoc3RhdGUgJiBJUl9TSVJNT0RFKQotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDApOwotCWVsc2UgICAgLyogTUlSL0ZJUiAqLwotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sIDEpOwotCisJLyogU0lSIHdoZW4gbG93LCBlbHNlIE1JUi9GSVIgd2hlbiBISUdIICovCisJZ3Bpb19zZXRfdmFsdWUoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sICEoc3RhdGUgJiBJUl9TSVJNT0RFKSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTM0MiwxNiArMzM5LDMxIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9pbml0X3NtYzkxeCh2b2lkKQogewotCWlmICgob21hcF9yZXF1ZXN0X2dwaW8oMCkpIDwgMCkgeworCWlmIChncGlvX3JlcXVlc3QoMCwgIlNNQzkxeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKCJFcnJvciByZXF1ZXN0aW5nIGdwaW8gMCBmb3Igc21jOTF4IGlycVxuIik7CiAJCXJldHVybjsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgdHBzX3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHZvaWQgKmNvbnRleHQpCit7CisJdHBzNjUwMTBfY29uZmlnX3ZyZWdzMShUUFNfTERPMl9FTkFCTEUgfCBUUFNfVkxETzJfM18wViB8CisJCQkJVFBTX0xETzFfRU5BQkxFIHwgVFBTX1ZMRE8xXzNfMFYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHBzNjUwMTBfYm9hcmQgdHBzX2JvYXJkID0geworCS5iYXNlCQk9IEgyX1RQU19HUElPX0JBU0UsCisJLm91dG1hc2sJPSAweDBmLAorCS5zZXR1cAkJPSB0cHNfc2V0dXAsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaDJfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJ0cHM2NTAxMCIsIDB4NDgpLAogCQkuaXJxICAgICAgICAgICAgPSBPTUFQX0dQSU9fSVJRKDU4KSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdHBzX2JvYXJkLAogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oImlzcDEzMDFfb21hcCIsIDB4MmQpLAogCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMiksCkBAIC0zODEsMTUgKzM5Myw2IEBACiAJLnBpbnNbMV0JPSAzLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaDJfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5tbWNbMF0gPSB7Ci0JCS5lbmFibGVkCT0gMSwKLQkJLndpcmU0CQk9IDEsCi0JfSwKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBoMl9tbWNfZGF0YTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGgyX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKIH07CkBAIC00MDAsNyArNDAzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDJfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwJCSZoMl91c2JfY29uZmlnIH0sCi0JeyBPTUFQX1RBR19NTUMsCQkmaDJfbW1jX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmgyX3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDJfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTQwOSw3ICs0MTEsNyBAQAogCiBzdGF0aWMgaW50IGgyX25hbmRfZGV2X3JlYWR5KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKLQlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oSDJfTkFORF9SQl9HUElPX1BJTik7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEgyX05BTkRfUkJfR1BJT19QSU4pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfaW5pdCh2b2lkKQpAQCAtNDI4LDggKzQzMCw5IEBACiAKIAloMl9uYW5kX3Jlc291cmNlLmVuZCA9IGgyX25hbmRfcmVzb3VyY2Uuc3RhcnQgPSBPTUFQX0NTMkJfUEhZUzsKIAloMl9uYW5kX3Jlc291cmNlLmVuZCArPSBTWl80SyAtIDE7Ci0JaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oSDJfTkFORF9SQl9HUElPX1BJTikpKQotCQloMl9uYW5kX2RhdGEuZGV2X3JlYWR5ID0gaDJfbmFuZF9kZXZfcmVhZHk7CisJaWYgKGdwaW9fcmVxdWVzdChIMl9OQU5EX1JCX0dQSU9fUElOLCAiTkFORCByZWFkeSIpIDwgMCkKKwkJQlVHKCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSDJfTkFORF9SQl9HUElPX1BJTik7CiAKIAlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKIAlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKQEAgLTQ0MSwxMCArNDQ0LDEwIEBACiAJLyogSXJkYSAqLwogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfSVIpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfSVJfTU9EVUxFKQogCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoRlVOQ19NVVhfQ1RSTF9BKSB8IDcsIEZVTkNfTVVYX0NUUkxfQSk7Ci0JaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4pKSkgewotCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTiwgMCk7Ci0JCWgyX2lyZGFfZGF0YS50cmFuc2NlaXZlcl9tb2RlID0gaDJfdHJhbnNjZWl2ZXJfbW9kZTsKLQl9CisJaWYgKGdwaW9fcmVxdWVzdChIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTiwgIklSREEgbW9kZSIpIDwgMCkKKwkJQlVHKCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEgyX0lSREFfRklSU0VMX0dQSU9fUElOLCAwKTsKKwloMl9pcmRhX2RhdGEudHJhbnNjZWl2ZXJfbW9kZSA9IGgyX3RyYW5zY2VpdmVyX21vZGU7CiAjZW5kaWYKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgyX2RldmljZXMsIEFSUkFZX1NJWkUoaDJfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMtbW1jLmMKaW5kZXggMzYwODU4MS4uZmRmZTc5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLW1tYy5jCkBAIC0xMiw5NCArMTIsNTUgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy90cHM2NTAxMC5oPgorCiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAotI2lmZGVmIENPTkZJR19NTUNfT01BUAotc3RhdGljIGludCBzbG90X2NvdmVyX29wZW47Ci1zdGF0aWMgc3RydWN0IGRldmljZSAqbW1jX2RldmljZTsKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCi1zdGF0aWMgaW50IGgzX21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorc3RhdGljIGludCBtbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKIAkJCQlpbnQgdmRkKQogewotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQlkZXZfZGJnKGRldiwgIlNldCBzbG90ICVkIHBvd2VyOiAlcyAodmRkICVkKVxuIiwgc2xvdCArIDEsCi0JCXBvd2VyX29uID8gIm9uIiA6ICJvZmYiLCB2ZGQpOwotI2VuZGlmCi0JaWYgKHNsb3QgIT0gMCkgewotCQlkZXZfZXJyKGRldiwgIk5vIHN1Y2ggc2xvdCAlZFxuIiwgc2xvdCArIDEpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJaWYgKHBvd2VyX29uKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSDNfVFBTX0dQSU9fTU1DX1BXUl9FTiwgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSDNfVFBTX0dQSU9fTU1DX1BXUl9FTiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoM19tbWNfc2V0X2J1c19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQlkZXZfZGJnKGRldiwgIlNldCBzbG90ICVkIGJ1c19tb2RlICVzXG4iLCBzbG90ICsgMSwKLQkJYnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOID8gIm9wZW4tZHJhaW4iIDogInB1c2gtcHVsbCIpOwotI2VuZGlmCi0JaWYgKHNsb3QgIT0gMCkgewotCQlkZXZfZXJyKGRldiwgIk5vIHN1Y2ggc2xvdCAlZFxuIiwgc2xvdCArIDEpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBUcmVhdGVkIG9uIHVwcGVyIGxldmVsICovCi0KLQlyZXR1cm4gYnVzX21vZGU7Ci19Ci0KLXN0YXRpYyBpbnQgaDNfbW1jX2dldF9jb3Zlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQotewotCUJVR19PTihzbG90ICE9IDApOwotCi0JcmV0dXJuIHNsb3RfY292ZXJfb3BlbjsKLX0KLQotdm9pZCBoM19tbWNfc2xvdF9jb3Zlcl9oYW5kbGVyKHZvaWQgKmFyZywgaW50IHN0YXRlKQotewotCWlmIChtbWNfZGV2aWNlID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNsb3RfY292ZXJfb3BlbiA9IHN0YXRlOwotCW9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChtbWNfZGV2aWNlLCAwLCBzdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaDNfbW1jX2xhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltbWNfZGV2aWNlID0gZGV2OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaDNfbW1jX2NsZWFudXAoc3RydWN0IGRldmljZSAqZGV2KQotewotfQotCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgaDNfbW1jX2RhdGEgPSB7CisvKgorICogSDMgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRlc3RlZDoKKyAqIC0gbW1jX2dldF9jb3Zlcl9zdGF0ZSB0aGF0IHVzZXMgT01BUF9NUFVJTygxKQorICogLSBtbWNfZ2V0X3dwIHRoYXQgbWF5YmUgdXNlcyBPTUFQX01QVUlPKDMpCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGEgPSB7CiAJLm5yX3Nsb3RzICAgICAgICAgICAgICAgICAgICAgICA9IDEsCi0JLnN3aXRjaF9zbG90ICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCi0JLmluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGgzX21tY19sYXRlX2luaXQsCi0JLmNsZWFudXAgICAgICAgICAgICAgICAgICAgICAgICA9IGgzX21tY19jbGVhbnVwLAorCS5kbWFfbWFzawkJCT0gMHhmZmZmZmZmZiwKIAkuc2xvdHNbMF0gICAgICAgPSB7Ci0JCS5zZXRfcG93ZXIgICAgICAgICAgICAgID0gaDNfbW1jX3NldF9wb3dlciwKLQkJLnNldF9idXNfbW9kZSAgICAgICAgICAgPSBoM19tbWNfc2V0X2J1c19tb2RlLAotCQkuZ2V0X3JvICAgICAgICAgICAgICAgICA9IE5VTEwsCi0JCS5nZXRfY292ZXJfc3RhdGUgICAgICAgID0gaDNfbW1jX2dldF9jb3Zlcl9zdGF0ZSwKKwkJLnNldF9wb3dlciAgICAgICAgICAgICAgPSBtbWNfc2V0X3Bvd2VyLAogCQkub2NyX21hc2sgICAgICAgICAgICAgICA9IE1NQ19WRERfMjhfMjkgfCBNTUNfVkREXzMwXzMxIHwKIAkJCQkJICBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibW1jYmxrIiwKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YVtPTUFQMTZYWF9OUl9NTUNdOworCiB2b2lkIF9faW5pdCBoM19tbWNfaW5pdCh2b2lkKQogewotCW9tYXBfc2V0X21tY19pbmZvKDEsICZoM19tbWNfZGF0YSk7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChIM19UUFNfR1BJT19NTUNfUFdSX0VOLCAiTU1DIHBvd2VyIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSDNfVFBTX0dQSU9fTU1DX1BXUl9FTiwgMCk7CisKKwltbWNfZGF0YVswXSA9ICZtbWMxX2RhdGE7CisJb21hcDFfaW5pdF9tbWMobW1jX2RhdGEsIE9NQVAxNlhYX05SX01NQyk7CiB9CiAKICNlbHNlCkBAIC0xMDgsNyArNjksNCBAQAogewogfQogCi12b2lkIGgzX21tY19zbG90X2NvdmVyX2hhbmRsZXIodm9pZCAqYXJnLCBpbnQgc3RhdGUpCi17Ci19CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCBhZGZjZDdiLi41MTU3ZWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC00NDcsMTUgKzQ0Nyw2IEBACiAJLnBpbnNbMV0JPSAzLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaDNfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5tbWNbMF0gPSB7Ci0JCS5lbmFibGVkCT0gMSwKLQkJLndpcmU0CQk9IDEsCi0gICAgICAgfSwKLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBoM19tbWNfZGF0YTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGgzX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKIH07CkBAIC00NjYsNyArNDU3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDNfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwJCSZoM191c2JfY29uZmlnIH0sCi0JeyBPTUFQX1RBR19NTUMsCQkmaDNfbW1jX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmgzX3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDNfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTQ5OCw3ICs0ODgsNyBAQAogCiBzdGF0aWMgaW50IG5hbmRfZGV2X3JlYWR5KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKLQlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oSDNfTkFORF9SQl9HUElPX1BJTik7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEgzX05BTkRfUkJfR1BJT19QSU4pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfaW5pdCh2b2lkKQpAQCAtNTE2LDggKzUwNiw5IEBACiAKIAluYW5kX3Jlc291cmNlLmVuZCA9IG5hbmRfcmVzb3VyY2Uuc3RhcnQgPSBPTUFQX0NTMkJfUEhZUzsKIAluYW5kX3Jlc291cmNlLmVuZCArPSBTWl80SyAtIDE7Ci0JaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oSDNfTkFORF9SQl9HUElPX1BJTikpKQotCQluYW5kX2RhdGEuZGV2X3JlYWR5ID0gbmFuZF9kZXZfcmVhZHk7CisJaWYgKGdwaW9fcmVxdWVzdChIM19OQU5EX1JCX0dQSU9fUElOLCAiTkFORCByZWFkeSIpIDwgMCkKKwkJQlVHKCk7CisJbmFuZF9kYXRhLmRldl9yZWFkeSA9IG5hbmRfZGV2X3JlYWR5OwogCiAJLyogR1BJTzEwIEZ1bmNfTVVYX0NUUkwgcmVnIGJpdCAyOToyNywgQ29uZmlndXJlIFYyIHRvIG1vZGUxIGFzIEdQSU8gKi8KIAkvKiBHUElPMTAgcHVsbHVwL2Rvd24gcmVnaXN0ZXIsIEVuYWJsZSBwdWxsdXAgb24gR1BJTzEwICovCkBAIC01MzcsNyArNTI4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQogewogCW9tYXBfY2ZnX3JlZyhXMTVfMTcxMF9HUElPNDApOwotCWlmIChvbWFwX3JlcXVlc3RfZ3Bpbyg0MCkgPCAwKSB7CisJaWYgKGdwaW9fcmVxdWVzdCg0MCwgIlNNQzkxeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKCJFcnJvciByZXF1ZXN0aW5nIGdwaW8gNDAgZm9yIHNtYzkxeCBpcnFcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2JjMTFiZS4uYWYyZmI5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CiAjaW5jbHVkZSA8bWFjaC9vbWFwLWFsc2EuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgogCiBzdGF0aWMgaW50IGlubm92YXRvcl9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0YxKSwKQEAgLTMwMSw3ICszMDIsNyBAQAogCQkJICAgT01BUDE1MTBfRlBHQV9SU1QpOwogCQl1ZGVsYXkoNzUwKTsKIAl9IGVsc2UgewotCQlpZiAoKG9tYXBfcmVxdWVzdF9ncGlvKDApKSA8IDApIHsKKwkJaWYgKGdwaW9fcmVxdWVzdCgwLCAiU01DOTF4IGlycSIpIDwgMCkgewogCQkJcHJpbnRrKCJFcnJvciByZXF1ZXN0aW5nIGdwaW8gMCBmb3Igc21jOTF4IGlycVxuIik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTM2MCwxNiArMzYxLDQ5IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGlubm92YXRvcl9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLm1tYyBbMF0gPSB7Ci0JCS5lbmFibGVkIAk9IDEsCi0JCS53aXJlNAkJPSAxLAotCQkud3BfcGluCQk9IE9NQVBfTVBVSU8oMyksCi0JCS5wb3dlcl9waW4JPSAtMSwJLyogRlBHQSBGMyBVSU80MiAqLwotCQkuc3dpdGNoX3Bpbgk9IC0xLAkvKiBGUEdBIEY0IFVJTzQzICovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKKworc3RhdGljIGludCBtbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKKwkJCQlpbnQgdmRkKQoreworCWlmIChwb3dlcl9vbikKKwkJZnBnYV93cml0ZShmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUikgfCAoMSA8PCAzKSwKKwkJCQlPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwllbHNlCisJCWZwZ2Ffd3JpdGUoZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpICYgfigxIDw8IDMpLAorCQkJCU9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbm5vdmF0b3IgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRlc3RlZDoKKyAqIC0gbW1jX2dldF93cCB0aGF0IHVzZXMgT01BUF9NUFVJTygzKQorICogLSBtbWNfZ2V0X2NvdmVyX3N0YXRlIHRoYXQgdXNlcyBGUEdBIEY0IFVJTzQzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGEgPSB7CisJLm5yX3Nsb3RzICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisJLnNsb3RzWzBdICAgICAgID0geworCQkuc2V0X3Bvd2VyCQk9IG1tY19zZXRfcG93ZXIsCisJCS53aXJlcwkJCT0gNCwKKwkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibW1jYmxrIiwKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YVtPTUFQMTZYWF9OUl9NTUNdOworCit2b2lkIF9faW5pdCBpbm5vdmF0b3JfbW1jX2luaXQodm9pZCkKK3sKKwltbWNfZGF0YVswXSA9ICZtbWMxX2RhdGE7CisJb21hcDFfaW5pdF9tbWMobW1jX2RhdGEsIE9NQVAxNVhYX05SX01NQyk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW5ub3ZhdG9yX21tY19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGlubm92YXRvcl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCiB9OwpAQCAtMzc3LDcgKzQxMSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBpbm5vdmF0b3JfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgTlVMTCB9LAogCXsgT01BUF9UQUdfTENELAkJTlVMTCB9LAotCXsgT01BUF9UQUdfTU1DLAkJJmlubm92YXRvcl9tbWNfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmaW5ub3ZhdG9yX3VhcnRfY29uZmlnIH0sCiB9OwogCkBAIC00MTIsNiArNDQ1LDcgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShpbm5vdmF0b3JfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CisJaW5ub3ZhdG9yX21tY19pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbm5vdmF0b3JfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKaW5kZXggMzhkOTc4My4uNDk3MGM0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPG1hY2gvYWljMjMuaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgogI2luY2x1ZGUgPG1hY2gvbGNkX21pcGlkLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAogI2RlZmluZSBBRFM3ODQ2X1BFTkRPV05fR1BJTwkxNQogCkBAIC0xMDIsNyArMTAzLDcgQEAKIHsKIAlpZiAocGRhdGEtPm5yZXNldF9ncGlvICE9IC0xKSB7CiAJCXByaW50ayhLRVJOX0lORk8gInNodXRkb3duIExDRFxuIik7Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChwZGF0YS0+bnJlc2V0X2dwaW8sIDApOworCQlncGlvX3NldF92YWx1ZShwZGF0YS0+bnJlc2V0X2dwaW8sIDApOwogCQltc2xlZXAoMTIwKTsKIAl9CiB9CkBAIC0xMjQsMTMgKzEyNSwxMyBAQAogCiBzdGF0aWMgdm9pZCBhZHM3ODQ2X2Rldl9pbml0KHZvaWQpCiB7Ci0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKEFEUzc4NDZfUEVORE9XTl9HUElPKSA8IDApCisJaWYgKGdwaW9fcmVxdWVzdChBRFM3ODQ2X1BFTkRPV05fR1BJTywgIkFEUzc4NDYgcGVuZG93biIpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgYWRzNzg0NiBwZW4gZG93biBHUElPXG4iKTsKIH0KIAogc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCiB7Ci0JcmV0dXJuICFvbWFwX2dldF9ncGlvX2RhdGFpbihBRFM3ODQ2X1BFTkRPV05fR1BJTyk7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShBRFM3ODQ2X1BFTkRPV05fR1BJTyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIG5va2lhNzcwX2Fkczc4NDZfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhID0gewpAQCAtMTczLDI2ICsxNzQsNjggQEAKIAkucGluc1swXQk9IDYsCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBub2tpYTc3MF9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLm1tY1swXSA9IHsKLQkJLmVuYWJsZWQJPSAwLAotCQkud2lyZTQJCT0gMCwKLQkJLndwX3BpbgkJPSAtMSwKLQkJLnBvd2VyX3Bpbgk9IC0xLAotCQkuc3dpdGNoX3Bpbgk9IC0xLAotCX0sCi0JLm1tY1sxXSA9IHsKLQkJLmVuYWJsZWQJPSAwLAotCQkud2lyZTQJCT0gMCwKLQkJLndwX3BpbgkJPSAtMSwKLQkJLnBvd2VyX3Bpbgk9IC0xLAotCQkuc3dpdGNoX3Bpbgk9IC0xLAorI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUgTk9LSUE3NzBfR1BJT19NTUNfUE9XRVIJCTQxCisjZGVmaW5lIE5PS0lBNzcwX0dQSU9fTU1DX1NXSVRDSAkyMworCitzdGF0aWMgaW50IG5va2lhNzcwX21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorCQkJCWludCB2ZGQpCit7CisJaWYgKHBvd2VyX29uKQorCQlncGlvX3NldF92YWx1ZShOT0tJQTc3MF9HUElPX01NQ19QT1dFUiwgMSk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShOT0tJQTc3MF9HUElPX01NQ19QT1dFUiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub2tpYTc3MF9tbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKE5PS0lBNzcwX0dQSU9fTU1DX1NXSVRDSCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBub2tpYTc3MF9tbWMyX2RhdGEgPSB7CisJLm5yX3Nsb3RzICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisJLmRtYV9tYXNrCQkJPSAweGZmZmZmZmZmLAorCS5zbG90c1swXSAgICAgICA9IHsKKwkJLnNldF9wb3dlcgkJPSBub2tpYTc3MF9tbWNfc2V0X3Bvd2VyLAorCQkuZ2V0X2NvdmVyX3N0YXRlCT0gbm9raWE3NzBfbW1jX2dldF9jb3Zlcl9zdGF0ZSwKKwkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibW1jYmxrIiwKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpub2tpYTc3MF9tbWNfZGF0YVtPTUFQMTZYWF9OUl9NTUNdOworCitzdGF0aWMgdm9pZCBfX2luaXQgbm9raWE3NzBfbW1jX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KE5PS0lBNzcwX0dQSU9fTU1DX1BPV0VSLCAiTU1DIHBvd2VyIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTk9LSUE3NzBfR1BJT19NTUNfUE9XRVIsIDApOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KE5PS0lBNzcwX0dQSU9fTU1DX1NXSVRDSCwgIk1NQyBjb3ZlciIpOworCWlmIChyZXQgPCAwKSB7CisJCWdwaW9fZnJlZShOT0tJQTc3MF9HUElPX01NQ19QT1dFUik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoTk9LSUE3NzBfR1BJT19NTUNfU1dJVENIKTsKKworCS8qIE9ubHkgdGhlIHNlY29uZCBNTUMgY29udHJvbGxlciBpcyB1c2VkICovCisJbm9raWE3NzBfbW1jX2RhdGFbMV0gPSAmbm9raWE3NzBfbW1jMl9kYXRhOworCW9tYXAxX2luaXRfbW1jKG5va2lhNzcwX21tY19kYXRhLCBPTUFQMTZYWF9OUl9NTUMpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG5va2lhNzcwX21tY19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgbm9raWE3NzBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwJCU5VTEwgfSwKLQl7IE9NQVBfVEFHX01NQywJCSZub2tpYTc3MF9tbWNfY29uZmlnIH0sCiB9OwogCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9EU1ApCkBAIC0yMjgsOSArMjcxLDkgQEAKIAkvKiBUdXJuIG9uIGNvZGVjICovCiAJYWljMjNfcG93ZXJfdXAoKTsKIAotCWlmIChvbWFwX2dldF9ncGlvX2RhdGFpbihIRUFEUEhPTkVfR1BJTykpCisJaWYgKGdwaW9fZ2V0X3ZhbHVlKEhFQURQSE9ORV9HUElPKSkKIAkJLyogSFAgbm90IGNvbm5lY3RlZCwgdHVybiBvbiBhbXBsaWZpZXIgKi8KLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFNUExJRklFUl9DVFJMX0dQSU8sIDEpOworCQlncGlvX3NldF92YWx1ZShBTVBMSUZJRVJfQ1RSTF9HUElPLCAxKTsKIAllbHNlCiAJCS8qIEhQIGNvbm5lY3RlZCwgZG8gbm90IHR1cm4gb24gYW1wbGlmaWVyICovCiAJCXByaW50aygiSFAgY29ubmVjdGVkXG4iKTsKQEAgLTI1MCw3ICsyOTMsNyBAQAogc3RhdGljIHZvaWQgbm9raWE3NzBfYXVkaW9fcHdyX2Rvd24odm9pZCkKIHsKIAkvKiBUdXJuIG9mZiBhbXBsaWZpZXIgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoQU1QTElGSUVSX0NUUkxfR1BJTywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoQU1QTElGSUVSX0NUUkxfR1BJTywgMCk7CiAKIAkvKiBUdXJuIG9mZiBjb2RlYzogc2NoZWR1bGUgZGVsYXllZCB3b3JrICovCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlY19wb3dlcl9kb3duX3dvcmssIEhaIC8gMjApOwkvKiA1MG1zICovCkBAIC0zMzUsNiArMzc4LDcgQEAKIAlvbWFwX2RzcF9pbml0KCk7CiAJYWRzNzg0Nl9kZXZfaW5pdCgpOwogCW1pcGlkX2Rldl9pbml0KCk7CisJbm9raWE3NzBfbW1jX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbm9raWE3NzBfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCAzZTc2NmU0Li5mZjllNjdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTE4OCw3ICsxODgsOCBAQAogCS8qIE5PVEU6ICBEOSBhbmQgRDIgaGF2ZSBoYXJkd2FyZSBibGluayBzdXBwb3J0LgogCSAqIEFsc28sIEQ5IHJlcXVpcmVzIG5vbi1iYXR0ZXJ5IHBvd2VyLgogCSAqLwotCXsgLmdwaW8gPSBPU0tfVFBTX0dQSU9fTEVEX0Q5LCAubmFtZSA9ICJkOSIsIH0sCisJeyAuZ3BpbyA9IE9TS19UUFNfR1BJT19MRURfRDksIC5uYW1lID0gImQ5IiwKKwkJCS5kZWZhdWx0X3RyaWdnZXIgPSAiaWRlLWRpc2siLCB9LAogCXsgLmdwaW8gPSBPU0tfVFBTX0dQSU9fTEVEX0QyLCAubmFtZSA9ICJkMiIsIH0sCiAJeyAuZ3BpbyA9IE9TS19UUFNfR1BJT19MRURfRDMsIC5uYW1lID0gImQzIiwgLmFjdGl2ZV9sb3cgPSAxLAogCQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLCB9LApAQCAtMjYwLDcgKzI2MSw2IEBACiAJfSwKIAkvKiBUT0RPIHdoZW4gZHJpdmVyIHN1cHBvcnQgaXMgcmVhZHk6CiAJICogIC0gYWljMjMgYXVkaW8gY2hpcCBhdCAweDFhCi0JICogIC0gb24gTWlzdHJhbCwgMjRjMDQgZWVwcm9tIGF0IDB4NTAKIAkgKiAgLSBvcHRpb25hbGx5IG9uIE1pc3RyYWwsIG92OTY0MCBjYW1lcmEgc2Vuc29yIGF0IDB4MzAKIAkgKi8KIH07CkBAIC0yODgsNyArMjg4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAkvKiB0aGUgQ0YgSS9PIElSUSBpcyByZWFsbHkgYWN0aXZlLWxvdyAqLwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDYyKSwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoNjIpLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NrX2luaXRfaXJxKHZvaWQpCkBAIC0zMzcsMTEgKzMzNywyOCBAQAogI2lmZGVmCUNPTkZJR19PTUFQX09TS19NSVNUUkFMCiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBhdDI0YzA0ID0geworCS5ieXRlX2xlbgk9IFNaXzRLIC8gOCwKKwkucGFnZV9zaXplCT0gMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbWlzdHJhbF9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJLyogTk9URTogIHBvd2VyZWQgZnJvbSBMQ0Qgc3VwcGx5ICovCisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwNCIsIDB4NTApLAorCQkucGxhdGZvcm1fZGF0YQk9ICZhdDI0YzA0LAorCX0sCisJLyogVE9ETyB3aGVuIGRyaXZlciBzdXBwb3J0IGlzIHJlYWR5OgorCSAqICAtIG9wdGlvbmFsbHkgb3Y5NjQwIGNhbWVyYSBzZW5zb3IgYXQgMHgzMAorCSAqLworfTsKKwogc3RhdGljIGNvbnN0IGludCBvc2tfa2V5bWFwW10gPSB7CiAJLyogS0VZKGNvbCwgcm93LCBjb2RlKSAqLwogCUtFWSgwLCAwLCBLRVlfRjEpLAkJLyogU1c0ICovCkBAIC00ODMsMjMgKzUwMCwzMCBAQAogCW9tYXBfY2ZnX3JlZyhQMjBfMTYxMF9HUElPNCk7CS8qIFBFTklSUSAqLwogCWdwaW9fcmVxdWVzdCg0LCAidHNfaW50Iik7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoNCk7Ci0Jc2V0X2lycV90eXBlKE9NQVBfR1BJT19JUlEoNCksIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKDQpLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOwogCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obWlzdHJhbF9ib2FyZGluZm8sCiAJCQlBUlJBWV9TSVpFKG1pc3RyYWxfYm9hcmRpbmZvKSk7CiAKLQkvKiB0aGUgc2lkZXdheXMgYnV0dG9uIChTVzEpIGlzIGZvciB1c2UgYXMgYSAid2FrZXVwIiBidXR0b24gKi8KKwkvKiB0aGUgc2lkZXdheXMgYnV0dG9uIChTVzEpIGlzIGZvciB1c2UgYXMgYSAid2FrZXVwIiBidXR0b24KKwkgKgorCSAqIE5PVEU6ICBUaGUgTWlzdHJhbCBib2FyZCBoYXMgdGhlIHdha2V1cCBidXR0b24gKFNXMSkgd2lyZWQKKwkgKiB0byB0aGUgTENEIDMuM1YgcmFpbCwgd2hpY2ggaXMgcG93ZXJlZCBkb3duIGR1cmluZyBzdXNwZW5kLgorCSAqIFRvIGFsbG93IHRoaXMgYnV0dG9uIHRvIHdha2UgdXAgdGhlIG9tYXAsIHdvcmsgYXJvdW5kIHRoaXMKKwkgKiBIVyBidWcgYnkgcmV3aXJpbmcgU1cxIHRvIHVzZSB0aGUgbWFpbiAzLjNWIHJhaWwuCisJICovCiAJb21hcF9jZmdfcmVnKE4xNV8xNjEwX01QVUlPMik7CiAJaWYgKGdwaW9fcmVxdWVzdChPTUFQX01QVUlPKDIpLCAid2FrZXVwIikgPT0gMCkgewogCQlpbnQgcmV0ID0gMDsKKwkJaW50IGlycSA9IGdwaW9fdG9faXJxKE9NQVBfTVBVSU8oMikpOwogCiAJCWdwaW9fZGlyZWN0aW9uX2lucHV0KE9NQVBfTVBVSU8oMikpOwotCQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDIpKSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCQlzZXRfaXJxX3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CiAjaWZkZWYJQ09ORklHX1BNCiAJCS8qIHNoYXJlIHRoZSBJUlEgaW4gY2FzZSBzb21lb25lIHdhbnRzIHRvIHVzZSB0aGUKIAkJICogYnV0dG9uIGZvciBtb3JlIHRoYW4gd2FrZXVwIGZyb20gc3lzdGVtIHNsZWVwLgogCQkgKi8KLQkJcmV0ID0gcmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDIpKSwKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLAogCQkJCSZvc2tfbWlzdHJhbF93YWtlX2ludGVycnVwdCwKIAkJCQlJUlFGX1NIQVJFRCwgIm1pc3RyYWxfd2FrZXVwIiwKIAkJCQkmb3NrX21pc3RyYWxfd2FrZV9pbnRlcnJ1cHQpOwpAQCAtNTA4LDcgKzUzMiw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIk9TSytNaXN0cmFsOiBubyB3YWtldXAgaXJxLCAlZD9cbiIsCiAJCQkJcmV0KTsKIAkJfSBlbHNlCi0JCQllbmFibGVfaXJxX3dha2UoT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDIpKSk7CisJCQllbmFibGVfaXJxX3dha2UoaXJxKTsKICNlbmRpZgogCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIk9TSytNaXN0cmFsOiB3YWtldXAgYnV0dG9uIGlzIGF3b2xcbiIpOwpAQCAtNTIwLDYgKzU0NCw5IEBACiAJaWYgKGdwaW9fcmVxdWVzdCgyLCAibGNkX3B3ciIpID09IDApCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dCgyLCAxKTsKIAorCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG1pc3RyYWxfaTJjX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKG1pc3RyYWxfaTJjX2JvYXJkX2luZm8pKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG1pc3RyYWxfZGV2aWNlcywgQVJSQVlfU0laRShtaXN0cmFsX2RldmljZXMpKTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCBiNTgwNDM2Li43NWUzMmQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogCWludCBjaGFyZ2luZywgYmF0dCwgaGksIGxvLCBtaWQ7CiAKLQljaGFyZ2luZyA9ICFvbWFwX2dldF9ncGlvX2RhdGFpbihQQUxNVEVfRENfR1BJTyk7CisJY2hhcmdpbmcgPSAhZ3Bpb19nZXRfdmFsdWUoUEFMTVRFX0RDX0dQSU8pOwogCWJhdHQgPSBiYXR0ZXJ5WzBdOwogCWlmIChjaGFyZ2luZykKIAkJYmF0dCAtPSA2MDsKQEAgLTMxNiw3ICszMTYsNiBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBwYWxtdGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwJCSZwYWxtdGVfdXNiX2NvbmZpZyB9LAotCXsgT01BUF9UQUdfTU1DLAkJJnBhbG10ZV9tbWNfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmcGFsbXRlX2xjZF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZwYWxtdGVfdWFydF9jb25maWcgfSwKIH07CkBAIC0zMzUsMTEgKzMzNCwxMSBAQAogewogCWlmIChzdGF0ZSkgewogCQkvKiBIZWFkcGhvbmVzIGNvbm5lY3RlZCwgZGlzYWJsZSBzcGVha2VyICovCi0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChQQUxNVEVfU1BFQUtFUl9HUElPLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoUEFMTVRFX1NQRUFLRVJfR1BJTywgMCk7CiAJCXByaW50ayhLRVJOX0lORk8gIlBNOiBzcGVha2VyIG9mZlxuIik7CiAJfSBlbHNlIHsKIAkJLyogSGVhZHBob25lcyB1bnBsdWdnZWQsIHJlLWVuYWJsZSBzcGVha2VyICovCi0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChQQUxNVEVfU1BFQUtFUl9HUElPLCAxKTsKKwkJZ3Bpb19zZXRfdmFsdWUoUEFMTVRFX1NQRUFLRVJfR1BJTywgMSk7CiAJCXByaW50ayhLRVJOX0lORk8gIlBNOiBzcGVha2VyIG9uXG4iKTsKIAl9CiB9CkBAIC0zNDcsMTggKzM0NiwxOCBAQAogc3RhdGljIHZvaWQgX19pbml0IHBhbG10ZV9taXNjX2dwaW9fc2V0dXAodm9pZCkKIHsKIAkvKiBTZXQgVFNDMjEwMiBQSU5UREFWIHBpbiBhcyBpbnB1dCAodXNlZCBieSBUU0MyMTAyIGRyaXZlcikgKi8KLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oUEFMTVRFX1BJTlREQVZfR1BJTykpIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KFBBTE1URV9QSU5UREFWX0dQSU8sICJUU0MyMTAyIFBJTlREQVYiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVzZXJ2ZSBQSU5UREFWIEdQSU8hXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihQQUxNVEVfUElOVERBVl9HUElPLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChQQUxNVEVfUElOVERBVl9HUElPKTsKIAogCS8qIFNldCBVU0Itb3ItREMtSU4gcGluIGFzIGlucHV0ICh1bnVzZWQpICovCi0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKFBBTE1URV9VU0JfT1JfRENfR1BJTykpIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KFBBTE1URV9VU0JfT1JfRENfR1BJTywgIlVTQi9EQy1JTiIpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZXNlcnZlIGNhYmxlIHNpZ25hbCBHUElPIVxuIik7CiAJCXJldHVybjsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oUEFMTVRFX1VTQl9PUl9EQ19HUElPLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChQQUxNVEVfVVNCX09SX0RDX0dQSU8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggNDBmOTg2MC4uNWMwMDFhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogc3RhdGljIGludCBwYWxtdHRfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKIHsKLQlyZXR1cm4gIW9tYXBfZ2V0X2dwaW9fZGF0YWluKDYpOworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoNik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIHBhbG10dF90c19pbmZvID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCBlNzE5Mjk0Li5jYzA1MjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiBzdGF0aWMgaW50CiBwYWxtejcxX2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCiB7Ci0JcmV0dXJuICFvbWFwX2dldF9ncGlvX2RhdGFpbihQQUxNWjcxX1BFTklSUV9HUElPKTsKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKFBBTE1aNzFfUEVOSVJRX0dQSU8pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBwYWxtejcxX3RzX2luZm8gPSB7CkBAIC0yNjcsMTYgKzI2Nyw2IEBACiAJLnBpbnNbMF0JPSAyLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgcGFsbXo3MV9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLm1tY1swXSA9IHsKLQkJLmVuYWJsZWQJPSAxLAotCQkud2lyZTQJCT0gMCwKLQkJLndwX3BpbgkJPSBQQUxNWjcxX01NQ19XUF9HUElPLAotCQkucG93ZXJfcGluCT0gLTEsCi0JCS5zd2l0Y2hfcGluCT0gUEFMTVo3MV9NTUNfSU5fR1BJTywKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXo3MV9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLmN0cmxfbmFtZSA9ICJpbnRlcm5hbCIsCiB9OwpAQCAtMjg3LDcgKzI3Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBhbG16NzFfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7T01BUF9UQUdfVVNCLAkmcGFsbXo3MV91c2JfY29uZmlnfSwKLQl7T01BUF9UQUdfTU1DLAkmcGFsbXo3MV9tbWNfY29uZmlnfSwKIAl7T01BUF9UQUdfTENELAkmcGFsbXo3MV9sY2RfY29uZmlnfSwKIAl7T01BUF9UQUdfVUFSVCwJJnBhbG16NzFfdWFydF9jb25maWd9LAogfTsKQEAgLTI5NSwxMyArMjg0LDEzIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QKIHBhbG16NzFfcG93ZXJjYWJsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JaWYgKG9tYXBfZ2V0X2dwaW9fZGF0YWluKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pKSB7CisJaWYgKGdwaW9fZ2V0X3ZhbHVlKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlBNOiBQb3dlciBjYWJsZSBjb25uZWN0ZWRcbiIpOwotCQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUShQQUxNWjcxX1VTQkRFVEVDVF9HUElPKSwKKwkJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pLAogCQkJCUlSUV9UWVBFX0VER0VfRkFMTElORyk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUE06IFBvd2VyIGNhYmxlIGRpc2Nvbm5lY3RlZFxuIik7Ci0JCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pLAorCQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoUEFMTVo3MV9VU0JERVRFQ1RfR1BJTyksCiAJCQkJSVJRX1RZUEVfRURHRV9SSVNJTkcpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMjMsMjkgKzMxMiwyOCBAQAogewogCWlmIChlYXJseSkgewogCQkvKiBPbmx5IHNldCBHUElPMSBzbyB3ZSBoYXZlIGEgd29ya2luZyBzZXJpYWwgKi8KLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDEsIDEpOwotCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigxLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDEsIDEpOwogCX0gZWxzZSB7CiAJCS8qIFNldCBNTUMvU0QgaG9zdCBXUCBwaW4gYXMgaW5wdXQgKi8KLQkJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKFBBTE1aNzFfTU1DX1dQX0dQSU8pKSB7CisJCWlmIChncGlvX3JlcXVlc3QoUEFMTVo3MV9NTUNfV1BfR1BJTywgIk1NQyBXUCIpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVzZXJ2ZSBXUCBHUElPIVxuIik7CiAJCQlyZXR1cm47CiAJCX0KLQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oUEFMTVo3MV9NTUNfV1BfR1BJTywgMSk7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFBBTE1aNzFfTU1DX1dQX0dQSU8pOwogCiAJCS8qIE1vbml0b3IgdGhlIFBvd2VyLWNhYmxlLWNvbm5lY3RlZCBzaWduYWwgKi8KLQkJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pKSB7CisJCWlmIChncGlvX3JlcXVlc3QoUEFMTVo3MV9VU0JERVRFQ1RfR1BJTywgIlVTQiBkZXRlY3QiKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJDb3VsZCBub3QgcmVzZXJ2ZSBjYWJsZSBzaWduYWwgR1BJTyFcbiIpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKFBBTE1aNzFfVVNCREVURUNUX0dQSU8sIDEpOwotCQlpZiAocmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShQQUxNWjcxX1VTQkRFVEVDVF9HUElPKSwKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoUEFMTVo3MV9VU0JERVRFQ1RfR1BJTyk7CisJCWlmIChyZXF1ZXN0X2lycShncGlvX3RvX2lycShQQUxNWjcxX1VTQkRFVEVDVF9HUElPKSwKIAkJCQlwYWxtejcxX3Bvd2VyY2FibGUsIElSUUZfU0FNUExFX1JBTkRPTSwKIAkJCQkicGFsbXo3MS1jYWJsZSIsIDApKQogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJCSJJUlEgcmVxdWVzdCBmb3IgcG93ZXIgY2FibGUgZmFpbGVkIVxuIik7Ci0JCXBhbG16NzFfcG93ZXJjYWJsZShPTUFQX0dQSU9fSVJRKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pLCAwKTsKKwkJcGFsbXo3MV9wb3dlcmNhYmxlKGdwaW9fdG9faXJxKFBBTE1aNzFfVVNCREVURUNUX0dQSU8pLCAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCBiNzE1OTE3Li4zYjlmOTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogc3RhdGljIGludCBuYW5kX2Rldl9yZWFkeShzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7Ci0JcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKFAyX05BTkRfUkJfR1BJT19QSU4pOworCXJldHVybiBncGlvX2dldF92YWx1ZShQMl9OQU5EX1JCX0dQSU9fUElOKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHBlcnNldXMyX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CkBAIC0yMjMsOCArMjIzLDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfaW5pdCh2b2lkKQogewotCWlmICghKG9tYXBfcmVxdWVzdF9ncGlvKFAyX05BTkRfUkJfR1BJT19QSU4pKSkKLQkJbmFuZF9kYXRhLmRldl9yZWFkeSA9IG5hbmRfZGV2X3JlYWR5OworCWlmIChncGlvX3JlcXVlc3QoUDJfTkFORF9SQl9HUElPX1BJTiwgIk5BTkQgcmVhZHkiKSA8IDApCisJCUJVRygpOworCW5hbmRfZGF0YS5kZXZfcmVhZHkgPSBuYW5kX2Rldl9yZWFkeTsKIAogCW9tYXBfY2ZnX3JlZyhMM18xNjEwX0ZMQVNIX0NTMkJfT0UpOwogCW9tYXBfY2ZnX3JlZyhNOF8xNjEwX0ZMQVNIX0NTMkJfV0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEtbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYwppbmRleCAwYmU0ZWJhLi42NmE0ZDdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYwpAQCAtMTIsMzAgKzEyLDIwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAotI2lmZGVmIENPTkZJR19NTUNfT01BUAotc3RhdGljIGludCBzbG90X2NvdmVyX29wZW47Ci1zdGF0aWMgc3RydWN0IGRldmljZSAqbW1jX2RldmljZTsKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCi1zdGF0aWMgaW50IHN4MV9tbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKK3N0YXRpYyBpbnQgbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCiAJCQkJaW50IHZkZCkKIHsKIAlpbnQgZXJyOwogCXU4IGRhdCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCi0JZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBwb3dlcjogJXMgKHZkZCAlZClcbiIsIHNsb3QgKyAxLAotCQlwb3dlcl9vbiA/ICJvbiIgOiAib2ZmIiwgdmRkKTsKLSNlbmRpZgotCi0JaWYgKHNsb3QgIT0gMCkgewotCQlkZXZfZXJyKGRldiwgIk5vIHN1Y2ggc2xvdCAlZFxuIiwgc2xvdCArIDEpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAllcnIgPSBzeDFfaTJjX3JlYWRfYnl0ZShTT0ZJQV9JMkNfQUREUiwgU09GSUFfUE9XRVIxX1JFRywgJmRhdCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC00OCw2OCArMzgsMjMgQEAKIAlyZXR1cm4gc3gxX2kyY193cml0ZV9ieXRlKFNPRklBX0kyQ19BRERSLCBTT0ZJQV9QT1dFUjFfUkVHLCBkYXQpOwogfQogCi1zdGF0aWMgaW50IHN4MV9tbWNfc2V0X2J1c19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSkKLXsKLSNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCi0JZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBidXNfbW9kZSAlc1xuIiwgc2xvdCArIDEsCi0JCWJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTiA/ICJvcGVuLWRyYWluIiA6ICJwdXNoLXB1bGwiKTsKLSNlbmRpZgotCWlmIChzbG90ICE9IDApIHsKLQkJZGV2X2VycihkZXYsICJObyBzdWNoIHNsb3QgJWRcbiIsIHNsb3QgKyAxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3gxX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKLXsKLQlCVUdfT04oc2xvdCAhPSAwKTsKLQotCXJldHVybiBzbG90X2NvdmVyX29wZW47Ci19Ci0KLXZvaWQgc3gxX21tY19zbG90X2NvdmVyX2hhbmRsZXIodm9pZCAqYXJnLCBpbnQgc3RhdGUpCi17Ci0JaWYgKG1tY19kZXZpY2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jc2xvdF9jb3Zlcl9vcGVuID0gc3RhdGU7Ci0Jb21hcF9tbWNfbm90aWZ5X2NvdmVyX2V2ZW50KG1tY19kZXZpY2UsIDAsIHN0YXRlKTsKLX0KLQotc3RhdGljIGludCBzeDFfbW1jX2xhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltbWNfZGV2aWNlID0gZGV2OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3gxX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLX0KLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhIHN4MV9tbWNfZGF0YSA9IHsKKy8qIENvdmVyIHN3aXRjaCBpcyBhdCBPTUFQX01QVUlPKDMpICovCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgbW1jMV9kYXRhID0gewogCS5ucl9zbG90cyAgICAgICAgICAgICAgICAgICAgICAgPSAxLAotCS5zd2l0Y2hfc2xvdCAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAotCS5pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzeDFfbW1jX2xhdGVfaW5pdCwKLQkuY2xlYW51cCAgICAgICAgICAgICAgICAgICAgICAgID0gc3gxX21tY19jbGVhbnVwLAogCS5zbG90c1swXSAgICAgICA9IHsKLQkJLnNldF9wb3dlciAgICAgICAgICAgICAgPSBzeDFfbW1jX3NldF9wb3dlciwKLQkJLnNldF9idXNfbW9kZSAgICAgICAgICAgPSBzeDFfbW1jX3NldF9idXNfbW9kZSwKLQkJLmdldF9ybyAgICAgICAgICAgICAgICAgPSBOVUxMLAotCQkuZ2V0X2NvdmVyX3N0YXRlICAgICAgICA9IHN4MV9tbWNfZ2V0X2NvdmVyX3N0YXRlLAorCQkuc2V0X3Bvd2VyICAgICAgICAgICAgICA9IG1tY19zZXRfcG93ZXIsCiAJCS5vY3JfbWFzayAgICAgICAgICAgICAgID0gTU1DX1ZERF8yOF8yOSB8IE1NQ19WRERfMzBfMzEgfAogCQkJCQkgIE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJtbWNibGsiLAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19kYXRhW09NQVAxNVhYX05SX01NQ107CisKIHZvaWQgX19pbml0IHN4MV9tbWNfaW5pdCh2b2lkKQogewotCW9tYXBfc2V0X21tY19pbmZvKDEsICZzeDFfbW1jX2RhdGEpOworCW1tY19kYXRhWzBdID0gJm1tYzFfZGF0YTsKKwlvbWFwMV9pbml0X21tYyhtbWNfZGF0YSwgT01BUDE1WFhfTlJfTU1DKTsKIH0KIAogI2Vsc2UKQEAgLTExOCw3ICs2Myw0IEBACiB7CiB9CiAKLXZvaWQgc3gxX21tY19zbG90X2NvdmVyX2hhbmRsZXIodm9pZCAqYXJnLCBpbnQgc3RhdGUpCi17Ci19CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDEzMGJjYzYuLjgxNzFmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMzc4LDE1ICszNzgsNiBAQAogCS5waW5zWzJdCT0gMCwKIH07CiAKLS8qLS0tLS0tLS0tLS0gTU1DIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBzeDFfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5tbWMgWzBdID0gewotCQkuZW5hYmxlZAk9IDEsCi0JCS53aXJlNAkJPSAwLAotCX0sCi19OwotCiAvKi0tLS0tLS0tLS0tIExDRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3gxX2xjZF9kZXZpY2UgPSB7CkBAIC00MTQsNyArNDA1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgc3gxX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJeyBPTUFQX1RBR19VU0IsCSZzeDFfdXNiX2NvbmZpZyB9LAotCXsgT01BUF9UQUdfTU1DLAkmc3gxX21tY19jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJJnN4MV9sY2RfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmc3gxX3VhcnRfY29uZmlnIH0sCiB9OwpAQCAtNDM2LDE0ICs0MjYsOSBAQAogCW9tYXBfcmVxdWVzdF9ncGlvKDEpOwkvKiBBX0lSREFfT0ZGICovCiAJb21hcF9yZXF1ZXN0X2dwaW8oMTEpOwkvKiBBX1NXSVRDSCAqLwogCW9tYXBfcmVxdWVzdF9ncGlvKDE1KTsJLyogQV9VU0JfT04gKi8KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigxLCAwKTsvKiBncGlvMSAtPiBvdXRwdXQgKi8KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigxMSwgMCk7LyogZ3BpbzExIC0+IG91dHB1dCAqLwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDE1LCAwKTsvKiBncGlvMTUgLT4gb3V0cHV0ICovCi0JLyogc2V0IEdQSU8gZGF0YSAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxLCAxKTsvKkFfSVJEQV9PRkYgPSAxICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDExLCAwKTsvKkFfU1dJVENIID0gMCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNSwgMCk7LypBX1VTQl9PTiA9IDAgKi8KLQorCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxLCAxKTsJLypBX0lSREFfT0ZGID0gMSAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxMSwgMCk7CS8qQV9TV0lUQ0ggPSAwICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE1LCAwKTsJLypBX1VTQl9PTiA9IDAgKi8KIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zeDFfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDQ1YTAxMzEuLmMyMjRmM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CkBAIC0xNDAsMjEgKzE0MSwxMiBAQAogCS5waW5zWzJdCT0gNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHZvaWNlYmx1ZV9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLm1tY1swXSA9IHsKLQkJLmVuYWJsZWQJPSAxLAotCQkucG93ZXJfcGluCT0gMiwKLQkJLnN3aXRjaF9waW4JPSAtMSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHZvaWNlYmx1ZV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB2b2ljZWJsdWVfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAmdm9pY2VibHVlX3VzYl9jb25maWcgfSwKLQl7IE9NQVBfVEFHX01NQywgICZ2b2ljZWJsdWVfbW1jX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwgJnZvaWNlYmx1ZV91YXJ0X2NvbmZpZyB9LAogfTsKIApAQCAtMTY4LDI5ICsxNjAsMjcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfaW5pdCh2b2lkKQogewogCS8qIFdhdGNoZG9nICovCi0Jb21hcF9yZXF1ZXN0X2dwaW8oMCk7CisJZ3Bpb19yZXF1ZXN0KDAsICJXYXRjaGRvZyIpOwogCS8qIHNtYzkxeCByZXNldCAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDcpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDcsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCg3LCAxKTsKKwlncGlvX3JlcXVlc3QoNywgIlNNQzkxeCByZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCg3LCAxKTsKIAl1ZGVsYXkoMik7CS8qIHdhaXQgYXQgbGVhc3QgMTAwbnMgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoNywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoNywgMCk7CiAJbWRlbGF5KDUwKTsJLyogNTBtcyB1bnRpbCBQSFkgcmVhZHkgKi8KIAkvKiBzbWM5MXggaW50ZXJydXB0IHBpbiAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDgpOworCWdwaW9fcmVxdWVzdCg4LCAiU01DOTF4IGlycSIpOwogCS8qIDE2QzU1NCByZXNldCovCi0Jb21hcF9yZXF1ZXN0X2dwaW8oNik7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oNiwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDYsIDApOworCWdwaW9fcmVxdWVzdCg2LCAiMTZDNTU0IHJlc2V0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDYsIDApOwogCS8qIDE2QzU1NCBpbnRlcnJ1cHQgcGlucyAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKDEyKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbygxMyk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oMTQpOwotCW9tYXBfcmVxdWVzdF9ncGlvKDE1KTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxMiksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxMyksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxNCksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUSgxNSksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlncGlvX3JlcXVlc3QoMTIsICIxNkM1NTQgaXJxIik7CisJZ3Bpb19yZXF1ZXN0KDEzLCAiMTZDNTU0IGlycSIpOworCWdwaW9fcmVxdWVzdCgxNCwgIjE2QzU1NCBpcnEiKTsKKwlncGlvX3JlcXVlc3QoMTUsICIxNkM1NTQgaXJxIik7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKDEyKSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxMyksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoMTQpLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKDE1KSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXModm9pY2VibHVlX2RldmljZXMsIEFSUkFZX1NJWkUodm9pY2VibHVlX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CkBAIC0yNDQsMTkgKzIzNCwxOCBAQAogCiB2b2lkIHZvaWNlYmx1ZV93ZHRfZW5hYmxlKHZvaWQpCiB7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDAsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgwLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMCwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDAsIDApOworCWdwaW9fc2V0X3ZhbHVlKDAsIDEpOworCWdwaW9fc2V0X3ZhbHVlKDAsIDApOwogCXdkdF9ncGlvX3N0YXRlID0gMDsKIH0KIAogdm9pZCB2b2ljZWJsdWVfd2R0X2Rpc2FibGUodm9pZCkKIHsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDAsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgwLCAwKTsKLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigwLCAxKTsKKwlncGlvX3NldF92YWx1ZSgwLCAwKTsKKwlncGlvX3NldF92YWx1ZSgwLCAxKTsKKwlncGlvX3NldF92YWx1ZSgwLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dCgwKTsKIH0KIAogdm9pZCB2b2ljZWJsdWVfd2R0X3Bpbmcodm9pZCkKQEAgLTI2NSw3ICsyNTQsNyBAQAogCQlyZXR1cm47CiAKIAl3ZHRfZ3Bpb19zdGF0ZSA9ICF3ZHRfZ3Bpb19zdGF0ZTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMCwgd2R0X2dwaW9fc3RhdGUpOworCWdwaW9fc2V0X3ZhbHVlKDAsIHdkdF9ncGlvX3N0YXRlKTsKIH0KIAogdm9pZCB2b2ljZWJsdWVfcmVzZXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAppbmRleCA1NjM1YjUxLi5jMWRjZGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC03MDUsNyArNzA1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKIAkubmFtZQkJPSAibW1jX2NrIiwKLQkuaWQJCT0gMSwKIAkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDQ4MDAwMDAwLApAQCAtNzIwLDcgKzcxOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CiAJLm5hbWUJCT0gIm1tY19jayIsCi0JLmlkCQk9IDIsCisJLmlkCQk9IDEsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggZTM4MmI0My4uNzczODJkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05OSw2ICsxMDAsOTUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKSB7IH0KICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAxX21tY19tdXgoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19jb250cm9sbGVyLAorCQkJaW50IGNvbnRyb2xsZXJfbnIpCit7CisJaWYgKGNvbnRyb2xsZXJfbnIgPT0gMCkgeworCQlvbWFwX2NmZ19yZWcoTU1DX0NNRCk7CisJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKKwkJb21hcF9jZmdfcmVnKE1NQ19EQVQwKTsKKwkJaWYgKGNwdV9pc19vbWFwMTcxMCgpKSB7CisJCQlvbWFwX2NmZ19yZWcoTTE1XzE3MTBfTU1DX0NMS0kpOworCQkJb21hcF9jZmdfcmVnKFAxOV8xNzEwX01NQ19DTURESVIpOworCQkJb21hcF9jZmdfcmVnKFAyMF8xNzEwX01NQ19EQVRESVIwKTsKKwkJfQorCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLndpcmVzID09IDQpIHsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMSk7CisJCQkvKiBOT1RFOiBEQVQyIGNhbiBiZSBvbiBXMTAgKGhlcmUpIG9yIE0xNSAqLworCQkJaWYgKCFtbWNfY29udHJvbGxlci0+c2xvdHNbMF0ubm9tdXgpCisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQyKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMyk7CisJCX0KKwl9CisKKwkvKiBCbG9jayAyIGlzIG9uIG5ld2VyIGNoaXBzLCBhbmQgaGFzIG1hbnkgcGlub3V0IG9wdGlvbnMgKi8KKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkgJiYgY29udHJvbGxlcl9uciA9PSAxKSB7CisJCWlmICghbW1jX2NvbnRyb2xsZXItPnNsb3RzWzFdLm5vbXV4KSB7CisJCQlvbWFwX2NmZ19yZWcoWThfMTYxMF9NTUMyX0NNRCk7CisJCQlvbWFwX2NmZ19yZWcoWTEwXzE2MTBfTU1DMl9DTEspOworCQkJb21hcF9jZmdfcmVnKFIxOF8xNjEwX01NQzJfQ0xLSU4pOworCQkJb21hcF9jZmdfcmVnKFc4XzE2MTBfTU1DMl9EQVQwKTsKKwkJCWlmIChtbWNfY29udHJvbGxlci0+c2xvdHNbMV0ud2lyZXMgPT0gNCkgeworCQkJCW9tYXBfY2ZnX3JlZyhWOF8xNjEwX01NQzJfREFUMSk7CisJCQkJb21hcF9jZmdfcmVnKFcxNV8xNjEwX01NQzJfREFUMik7CisJCQkJb21hcF9jZmdfcmVnKFIxMF8xNjEwX01NQzJfREFUMyk7CisJCQl9CisKKwkJCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBsZXZlbCBzaGlmdGVyICovCisJCQlvbWFwX2NmZ19yZWcoVjlfMTYxMF9NTUMyX0NNRERJUik7CisJCQlvbWFwX2NmZ19yZWcoVjVfMTYxMF9NTUMyX0RBVERJUjApOworCQkJb21hcF9jZmdfcmVnKFcxOV8xNjEwX01NQzJfREFURElSMSk7CisJCX0KKworCQkvKiBGZWVkYmFjayBjbG9jayBtdXN0IGJlIHNldCBvbiBPTUFQLTE3MTAgTU1DMiAqLworCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpCisJCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSkgfCAoMSA8PCAyNCksCisJCQkJCU1PRF9DT05GX0NUUkxfMSk7CisJfQorfQorCit2b2lkIF9faW5pdCBvbWFwMV9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhLAorCQkJaW50IG5yX2NvbnRyb2xsZXJzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2NvbnRyb2xsZXJzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOworCQl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKworCQlpZiAoIW1tY19kYXRhW2ldKQorCQkJY29udGludWU7CisKKwkJb21hcDFfbW1jX211eChtbWNfZGF0YVtpXSwgaSk7CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCWJhc2UgPSBPTUFQMV9NTUMxX0JBU0U7CisJCQlpcnEgPSBJTlRfTU1DOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmICghY3B1X2lzX29tYXAxNnh4KCkpCisJCQkJcmV0dXJuOworCQkJYmFzZSA9IE9NQVAxX01NQzJfQkFTRTsKKwkJCWlycSA9IElOVF8xNjEwX01NQzI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisJCXNpemUgPSBPTUFQMV9NTUNfU0laRTsKKworCQlvbWFwX21tY19hZGQoaSwgYmFzZSwgc2l6ZSwgaXJxLCBtbWNfZGF0YVtpXSk7CisJfTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX1NUSSkKIAogI2RlZmluZSBPTUFQMV9TVElfQkFTRQkJMHhmZmZlYTAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2ZwZ2EuYwppbmRleCAwNDk5NTM4Li40ZjJiOGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2ZwZ2EuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2ZwZ2EuYwpAQCAtMTc3LDkgKzE3Nyw5IEBACiAJICogTk9URTogRm9yIGdlbmVyYWwgR1BJTy9NUFVJTyBhY2Nlc3MgYW5kIGludGVycnVwdHMsIHBsZWFzZSBzZWUKIAkgKiBncGlvLltjaF0KIAkgKi8KLQlvbWFwX3JlcXVlc3RfZ3BpbygxMyk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMTMsIDEpOwotCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDEzKSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCWdwaW9fcmVxdWVzdCgxMywgIkZQR0EgaXJxIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoMTMpOworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxMyksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihPTUFQMTUxMF9JTlRfRlBHQSwgaW5ub3ZhdG9yX2ZwZ2FfSVJRX2RlbXV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCmluZGV4IDEzMDgzZDcuLjg5YmI4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgogCiAjZGVmaW5lIE9NQVBfRElFX0lEXzAJCTB4ZmZmZTE4MDAKICNkZWZpbmUgT01BUF9ESUVfSURfMQkJMHhmZmZlMTgwNApAQCAtMzAsNiArMzEsOCBAQAogCXUzMgl0eXBlOwkJLyogQ3B1IGlkIGJpdHMgWzMxOjA4XSwgY3B1IGNsYXNzIGJpdHMgWzA3OjAwXSAqLwogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBvbWFwX3JldmlzaW9uOworCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAuanRhZ19pZCA9IDB4YjU3NCwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMxMDMxNSwgLnR5cGUgPSAweDAzMTAwMDAwfSwKQEAgLTUzLDYgKzU2LDEyIEBACiAJeyAuanRhZ19pZCA9IDB4YjVmNywgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMzMDEwMCwgLnR5cGUgPSAweDE3MTAwMDAwfSwKIH07CiAKK3Vuc2lnbmVkIGludCBvbWFwX3Jldih2b2lkKQoreworCXJldHVybiBvbWFwX3JldmlzaW9uOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3Jldik7CisKIC8qCiAgKiBHZXQgT01BUCB0eXBlIGZyb20gUFJPRF9JRC4KICAqIDE3MTAgaGFzIHRoZSBQUk9EX0lEIGluIGJpdHMgMTU6MDAsIG5vdCBpbiAxNjowMSBhcyBkb2N1bWVudGVkIGluIFRSTS4KQEAgLTEyMSwxNyArMTMwLDE4IEBACiAJb21hcF9pZCA9IG9tYXBfcmVhZGwoT01BUDMyX0lEXzApOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIk9NQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQX0RJRV9JRF8wKSk7Ci0JcHJpbnRrKCJPTUFQX0RJRV9JRF8xOiAweCUwOHggRElFX1JFVjogJWlcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfRElFX0lEXzE6IDB4JTA4eCBESUVfUkVWOiAlaVxuIiwKIAkJb21hcF9yZWFkbChPTUFQX0RJRV9JRF8xKSwKIAkgICAgICAgKG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMSkgPj4gMTcpICYgMHhmKTsKLQlwcmludGsoIk9NQVBfUFJPRFVDVElPTl9JRF8wOiAweCUwOHhcbiIsIG9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzApKTsKLQlwcmludGsoIk9NQVBfUFJPRFVDVElPTl9JRF8xOiAweCUwOHggSlRBR19JRDogMHglMDR4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1BST0RVQ1RJT05fSURfMDogMHglMDh4XG4iLAorCQlvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8wKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfUFJPRFVDVElPTl9JRF8xOiAweCUwOHggSlRBR19JRDogMHglMDR4XG4iLAogCQlvbWFwX3JlYWRsKE9NQVBfUFJPRFVDVElPTl9JRF8xKSwKIAkJb21hcF9yZWFkbChPTUFQX1BST0RVQ1RJT05fSURfMSkgJiAweGZmZmYpOwotCXByaW50aygiT01BUDMyX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQMzJfSURfMCkpOwotCXByaW50aygiT01BUDMyX0lEXzE6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQMzJfSURfMSkpOwotCXByaW50aygiSlRBR19JRDogMHglMDR4IERJRV9SRVY6ICVpXG4iLCBqdGFnX2lkLCBkaWVfcmV2KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUDMyX0lEXzA6IDB4JTA4eFxuIiwgb21hcF9yZWFkbChPTUFQMzJfSURfMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQMzJfSURfMTogMHglMDh4XG4iLCBvbWFwX3JlYWRsKE9NQVAzMl9JRF8xKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkpUQUdfSUQ6IDB4JTA0eCBESUVfUkVWOiAlaVxuIiwganRhZ19pZCwgZGllX3Jldik7CiAjZW5kaWYKIAogCXN5c3RlbV9zZXJpYWxfaGlnaCA9IG9tYXBfcmVhZGwoT01BUF9ESUVfSURfMCk7CkBAIC0xNDAsNyArMTUwLDcgQEAKIAkvKiBGaXJzdCBjaGVjayBvbmx5IHRoZSBtYWpvciB2ZXJzaW9uIGluIGEgc2FmZSB3YXkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGkrKykgewogCQlpZiAoanRhZ19pZCA9PSAob21hcF9pZHNbaV0uanRhZ19pZCkpIHsKLQkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOworCQkJb21hcF9yZXZpc2lvbiA9IG9tYXBfaWRzW2ldLnR5cGU7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE0OCw3ICsxNTgsNyBAQAogCS8qIENoZWNrIGlmIHdlIGNhbiBmaW5kIHRoZSBkaWUgcmV2aXNpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGkrKykgewogCQlpZiAoanRhZ19pZCA9PSBvbWFwX2lkc1tpXS5qdGFnX2lkICYmIGRpZV9yZXYgPT0gb21hcF9pZHNbaV0uZGllX3JldikgewotCQkJc3lzdGVtX3JldiA9IG9tYXBfaWRzW2ldLnR5cGU7CisJCQlvbWFwX3JldmlzaW9uID0gb21hcF9pZHNbaV0udHlwZTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTU4LDM4ICsxNjgsMzUgQEAKIAkJaWYgKGp0YWdfaWQgPT0gb21hcF9pZHNbaV0uanRhZ19pZAogCQkgICAgJiYgZGllX3JldiA9PSBvbWFwX2lkc1tpXS5kaWVfcmV2CiAJCSAgICAmJiBvbWFwX2lkID09IG9tYXBfaWRzW2ldLm9tYXBfaWQpIHsKLQkJCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tpXS50eXBlOworCQkJb21hcF9yZXZpc2lvbiA9IG9tYXBfaWRzW2ldLnR5cGU7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCS8qIEFkZCB0aGUgY3B1IGNsYXNzIGluZm8gKDd4eCwgMTV4eCwgMTZ4eCwgMjR4eCkgKi8KLQljcHVfdHlwZSA9IHN5c3RlbV9yZXYgPj4gMjQ7CisJY3B1X3R5cGUgPSBvbWFwX3JldmlzaW9uID4+IDI0OwogCiAJc3dpdGNoIChjcHVfdHlwZSkgewogCWNhc2UgMHgwNzoKLQkJc3lzdGVtX3JldiB8PSAweDA3OworCQlvbWFwX3JldmlzaW9uIHw9IDB4MDc7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKIAljYXNlIDB4MTU6Ci0JCXN5c3RlbV9yZXYgfD0gMHgxNTsKKwkJb21hcF9yZXZpc2lvbiB8PSAweDE1OwogCQlicmVhazsKIAljYXNlIDB4MTY6CiAJY2FzZSAweDE3OgotCQlzeXN0ZW1fcmV2IHw9IDB4MTY7Ci0JCWJyZWFrOwotCWNhc2UgMHgyNDoKLQkJc3lzdGVtX3JldiB8PSAweDI0OworCQlvbWFwX3JldmlzaW9uIHw9IDB4MTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiVW5rbm93biBPTUFQIGNwdSB0eXBlOiAweCUwMnhcbiIsIGNwdV90eXBlKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBPTUFQIGNwdSB0eXBlOiAweCUwMnhcbiIsIGNwdV90eXBlKTsKIAl9CiAKLQlwcmludGsoIk9NQVAlMDR4Iiwgc3lzdGVtX3JldiA+PiAxNik7Ci0JaWYgKChzeXN0ZW1fcmV2ID4+IDgpICYgMHhmZikKLQkJcHJpbnRrKCIleCIsIChzeXN0ZW1fcmV2ID4+IDgpICYgMHhmZik7Ci0JcHJpbnRrKCIgcmV2aXNpb24gJWkgaGFuZGxlZCBhcyAlMDJ4eHggaWQ6ICUwOHglMDh4XG4iLAotCSAgICAgICBkaWVfcmV2LCBzeXN0ZW1fcmV2ICYgMHhmZiwgc3lzdGVtX3NlcmlhbF9sb3csCisJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCUwNHgiLCBvbWFwX3JldmlzaW9uID4+IDE2KTsKKwlpZiAoKG9tYXBfcmV2aXNpb24gPj4gOCkgJiAweGZmKQorCQlwcmludGsoS0VSTl9JTkZPICIleCIsIChvbWFwX3JldmlzaW9uID4+IDgpICYgMHhmZik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIHJldmlzaW9uICVpIGhhbmRsZWQgYXMgJTAyeHh4IGlkOiAlMDh4JTA4eFxuIiwKKwkgICAgICAgZGllX3Jldiwgb21hcF9yZXZpc2lvbiAmIDB4ZmYsIHN5c3RlbV9zZXJpYWxfbG93LAogCSAgICAgICBzeXN0ZW1fc2VyaWFsX2hpZ2gpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwppbmRleCA3MWZlMmNjLi4xN2M5ZDBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTY1LDggKzY1LDggQEAKIAkJLyogYWxsIGxlZHMgb2ZmIGR1cmluZyBzdXNwZW5kIG9yIHNodXRkb3duICovCiAKIAkJaWYgKCEgbWFjaGluZV9pc19vbWFwX3BlcnNldXMyKCkpIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCAwKTsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19USU1FUiwgMCk7CisJCQlncGlvX3NldF92YWx1ZShHUElPX0lETEUsIDApOwogCQl9CiAKIAkJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CkBAIC05NCw3ICs5NCw3IEBACiAJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKIAkJCWh3X2xlZF9zdGF0ZSBePSBIMlAyX0RCR19GUEdBX1AyX0xFRF9USU1FUjsKIAkJZWxzZSB7Ci0JCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19USU1FUiwgbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fVElNRVIsIGxlZF9zdGF0ZSAmIExFRF9USU1FUl9PTik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMTA2LDcgKzEwNiw3IEBACiAJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKIAkJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOwogCQllbHNlIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19JRExFLCAxKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQogCQkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOwogCQllbHNlIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19JRExFLCAwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMKaW5kZXggOThlNzg5Ni4uNDk5ZDdhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1vc2suYwpAQCAtNDQsOCArNDQsOCBAQAogCQlncmVlbiA9IDE7CiAJLyogZWxzZSBib3RoIHNpZGVzIGFyZSBkaXNhYmxlZCAqLwogCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fTEVEX0dSRUVOLCBncmVlbik7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fTEVEX1JFRCwgcmVkKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0xFRF9HUkVFTiwgZ3JlZW4pOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTEVEX1JFRCwgcmVkKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCmluZGV4IDZjZGFkOTMuLjhjYmYyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCkBAIC00NywxNCArNDcsMTQgQEAKIAkJICogdGhhdCdzIGEgZGlmZmVyZW50IGtpbmQgb2YgTEVEIChqdXN0IG9uZSBjb2xvciBhdCBhIHRpbWUpLgogCQkgKi8KIAkJb21hcF9jZmdfcmVnKFAxOF8xNjEwX0dQSU8zKTsKLQkJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKDMpID09IDApCi0JCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigzLCAwKTsKKwkJaWYgKGdwaW9fcmVxdWVzdCgzLCAiTEVEIHJlZCIpID09IDApCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMywgMSk7CiAJCWVsc2UKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkxFRDogY2FuJ3QgZ2V0IEdQSU8zL3JlZD9cbiIpOwogCiAJCW9tYXBfY2ZnX3JlZyhNUFVJTzQpOwotCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oT01BUF9NUFVJTyg0KSkgPT0gMCkKLQkJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKE9NQVBfTVBVSU8oNCksIDApOworCQlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVBfTVBVSU8oNCksICJMRUQgZ3JlZW4iKSA9PSAwKQorCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVBfTVBVSU8oNCksIDEpOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJMRUQ6IGNhbid0IGdldCBNUFVJTzQvZ3JlZW4/XG4iKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKaW5kZXggNzcwZDI1Ni4uOTc3NGMxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwpAQCAtMjI2LDcgKzIyNiw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhcmcwID0gMCwgYXJnMSA9IDA7CiAKLQlwcmludGsoIlBNOiBPTUFQJXggaXMgdHJ5aW5nIHRvIGVudGVyIGRlZXAgc2xlZXAuLi5cbiIsIHN5c3RlbV9yZXYpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBPTUFQJXggaXMgdHJ5aW5nIHRvIGVudGVyIGRlZXAgc2xlZXAuLi5cbiIsCisJCW9tYXBfcmV2KCkpOwogCiAJb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKDEpOwogCkBAIC00MjEsNyArNDIyLDggQEAKIAogCW9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcigwKTsKIAotCXByaW50aygiUE06IE9NQVAleCBpcyByZS1zdGFydGluZyBmcm9tIGRlZXAgc2xlZXAuLi5cbiIsIHN5c3RlbV9yZXYpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBPTUFQJXggaXMgcmUtc3RhcnRpbmcgZnJvbSBkZWVwIHNsZWVwLi4uXG4iLAorCQlvbWFwX3JldigpKTsKIH0KIAogI2lmIGRlZmluZWQoREVCVUcpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCA1Mjg2OTFkNWMuLjAwMDIwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMjQ0LDIyICsyNDQsMjIgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb21hcF9yZXF1ZXN0X2dwaW8oZ3Bpb19ucik7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fbnIsICJVQVJUIHdha2UiKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZXF1ZXN0IFVBUlQgd2FrZSBHUElPOiAlaVxuIiwKIAkJICAgICAgIGdwaW9fbnIpOwogCQlyZXR1cm47CiAJfQotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGdwaW9fbnIsIDEpOwotCXJldCA9IHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoZ3Bpb19uciksICZvbWFwX3NlcmlhbF93YWtlX2ludGVycnVwdCwKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX25yKTsKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShncGlvX25yKSwgJm9tYXBfc2VyaWFsX3dha2VfaW50ZXJydXB0LAogCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLCAic2VyaWFsIHdha2V1cCIsIE5VTEwpOwogCWlmIChyZXQpIHsKLQkJb21hcF9mcmVlX2dwaW8oZ3Bpb19ucik7CisJCWdwaW9fZnJlZShncGlvX25yKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJObyBpbnRlcnJ1cHQgZm9yIFVBUlQgd2FrZSBHUElPOiAlaVxuIiwKIAkJICAgICAgIGdwaW9fbnIpOwogCQlyZXR1cm47CiAJfQotCWVuYWJsZV9pcnFfd2FrZShPTUFQX0dQSU9fSVJRKGdwaW9fbnIpKTsKKwllbmFibGVfaXJxX3dha2UoZ3Bpb190b19pcnEoZ3Bpb19ucikpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX3NlcmlhbF93YWtldXBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDQ4MzJmY2MuLjM3NTRiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTU1LDMgKzU1LDcgQEAKIGNvbmZpZyBNQUNIX09WRVJPCiAJYm9vbCAiR3Vtc3RpeCBPdmVybyBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCitjb25maWcgTUFDSF9PTUFQM19QQU5ET1JBCisJYm9vbCAiT01BUDMgUGFuZG9yYSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGM2OTM5MjMuLmJiZDEyYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMjcsOSArMjcsMTUgQEAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9HRU5FUklDKQkJKz0gYm9hcmQtZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0g0KQkJKz0gYm9hcmQtaDQubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQKQkJKz0gYm9hcmQtMjQzMHNkcC5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFApCQkrPSBib2FyZC0yNDMwc2RwLm8gXAorCQkJCQkgICBtbWMtdHdsNDAzMC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pCQkrPSBib2FyZC1hcG9sbG9uLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSkJCSs9IGJvYXJkLW9tYXAzYmVhZ2xlLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8KLW9iai0kKENPTkZJR19NQUNIX09WRVJPKQkJKz0gYm9hcmQtb3Zlcm8ubworb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFKQkJKz0gYm9hcmQtb21hcDNiZWFnbGUubyBcCisJCQkJCSAgIG1tYy10d2w0MDMwLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8gXAorCQkJCQkgICBtbWMtdHdsNDAzMC5vCitvYmotJChDT05GSUdfTUFDSF9PVkVSTykJCSs9IGJvYXJkLW92ZXJvLm8gXAorCQkJCQkgICBtbWMtdHdsNDAzMC5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBKQkrPSBib2FyZC1vbWFwM3BhbmRvcmEubyBcCisJCQkJCSAgIG1tYy10d2w0MDMwLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwppbmRleCAyNDY4OGVmLi44M2ZhMzcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKKyNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCiAjZGVmaW5lCVNEUDI0MzBfRkxBU0hfQ1MJMAogI2RlZmluZQlTRFAyNDMwX1NNQzkxWF9DUwk1CkBAIC0xNjgsMTMgKzE3MCwxMyBAQAogCXNkcDI0MzBfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOwogCXVkZWxheSgxMDApOwogCi0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpIDwgMCkgeworCWlmIChncGlvX3JlcXVlc3QoT01BUDI0WFhfRVRIUl9HUElPX0lSUSwgIlNNQzkxeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCiAJCQlPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKIAkJZ3BtY19jc19mcmVlKGV0aF9jcyk7CiAJCWdvdG8gb3V0OwogCX0KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihPTUFQMjRYWF9FVEhSX0dQSU9fSVJRLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKIAogb3V0OgogCWNsa19kaXNhYmxlKGdwbWNfZmNrKTsKQEAgLTE5NywxMiArMTk5LDU4IEBACiAJe09NQVBfVEFHX1VBUlQsICZzZHAyNDMwX3VhcnRfY29uZmlnfSwKIH07CiAKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBzZHAyNDMwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHNkcDI0MzBfdHdsZGF0YSA9IHsKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAorCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELAorCisJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCisJLmdwaW8JCT0gJnNkcDI0MzBfZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNkcDI0MzBfaTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInR3bDQwMzAiLCAweDQ4KSwKKwkJLmZsYWdzID0gSTJDX0NMSUVOVF9XQUtFLAorCQkuaXJxID0gSU5UXzI0WFhfU1lTX05JUlEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNkcDI0MzBfdHdsZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDI0MzBfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgNDAwLCBOVUxMLCAwKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgMjYwMCwgc2RwMjQzMF9pMmNfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRShzZHAyNDMwX2kyY19ib2FyZGluZm8pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tbWMJCT0gMSwKKwkJLndpcmVzCQk9IDQsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCQkuZXh0X2Nsb2NrCT0gMSwKKwl9LAorCXt9CS8qIFRlcm1pbmF0b3IgKi8KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfaW5pdCh2b2lkKQogeworCW9tYXAyNDMwX2kyY19pbml0KCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHAyNDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwMjQzMF9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBzZHAyNDMwX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHAyNDMwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMjQzMHNkcF9tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggOTg5YWQxNS4uYmYxZTVkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTIzNiwxMyArMjM2LDEzIEBACiAJdWRlbGF5KDEwMCk7CiAKIAlvbWFwX2NmZ19yZWcoVzRfXzI0WFhfR1BJTzc0KTsKLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oQVBPTExPTl9FVEhSX0dQSU9fSVJRKSA8IDApIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KEFQT0xMT05fRVRIUl9HUElPX0lSUSwgIlNNQzkxeCBpcnEiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCiAJCQlBUE9MTE9OX0VUSFJfR1BJT19JUlEpOwogCQlncG1jX2NzX2ZyZWUoQVBPTExPTl9FVEhfQ1MpOwogCQlnb3RvIG91dDsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oQVBPTExPTl9FVEhSX0dQSU9fSVJRLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChBUE9MTE9OX0VUSFJfR1BJT19JUlEpOwogCiBvdXQ6CiAJY2xrX2Rpc2FibGUoZ3BtY19mY2spOwpAQCAtMjYxLDE2ICsyNjEsNiBAQAogCS5lbmFibGVkX3VhcnRzID0gKDEgPDwgMCkgfCAoMCA8PCAxKSB8ICgwIDw8IDIpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgYXBvbGxvbl9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLm1tYyBbMF0gPSB7Ci0JCS5lbmFibGVkIAk9IDEsCi0JCS53aXJlNAkJPSAxLAotCQkud3BfcGluCQk9IC0xLAotCQkucG93ZXJfcGluCT0gLTEsCi0JCS5zd2l0Y2hfcGluCT0gLTEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIGFwb2xsb25fdXNiX2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5yZWdpc3Rlcl9kZXYJPSAxLAogCS5obWNfbW9kZQk9IDB4MTQsCS8qIDA6ZGV2IDE6aG9zdDEgMjpkaXNhYmxlICovCkBAIC0yODQsNyArMjc0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYXBvbGxvbl9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VBUlQsCSZhcG9sbG9uX3VhcnRfY29uZmlnIH0sCi0JeyBPTUFQX1RBR19NTUMsCQkmYXBvbGxvbl9tbWNfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19VU0IsCQkmYXBvbGxvbl91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmYXBvbGxvbl9sY2RfY29uZmlnIH0sCiB9OwpAQCAtMzI3LDE1ICszMTYsMTUgQEAKIAkvKiBFbnRlciBTVyAtIFkxMSAqLwogCW9tYXBfY2ZnX3JlZyhZMTFfMjQyWF9HUElPMTYpOwogCW9tYXBfcmVxdWVzdF9ncGlvKFNXX0VOVEVSX0dQSU8xNik7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oU1dfRU5URVJfR1BJTzE2LCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChTV19FTlRFUl9HUElPMTYpOwogCS8qIFVwIFNXIC0gQUExMiAqLwogCW9tYXBfY2ZnX3JlZyhBQTEyXzI0MlhfR1BJTzE3KTsKIAlvbWFwX3JlcXVlc3RfZ3BpbyhTV19VUF9HUElPMTcpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKFNXX1VQX0dQSU8xNywgMSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU1dfVVBfR1BJTzE3KTsKIAkvKiBEb3duIFNXIC0gQUE4ICovCiAJb21hcF9jZmdfcmVnKEFBOF8yNDJYX0dQSU81OCk7CiAJb21hcF9yZXF1ZXN0X2dwaW8oU1dfRE9XTl9HUElPNTgpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKFNXX0RPV05fR1BJTzU4LCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChTV19ET1dOX0dQSU81OCk7CiAKIAlzZXRfaXJxX3R5cGUoT01BUF9HUElPX0lSUShTV19FTlRFUl9HUElPMTYpLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CiAJaWYgKHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoU1dfRU5URVJfR1BJTzE2KSwgJmFwb2xsb25fc3dfaW50ZXJydXB0LApAQCAtMzU5LDkgKzM0OCw4IEBACiAJLyogVVNCIGRldmljZSAqLwogCS8qIERFVklDRV9TVVNQRU5EICovCiAJb21hcF9jZmdfcmVnKFAyMV8yNDJYX0dQSU8xMik7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oMTIpOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDEyLCAwKTsJCS8qIE9VVCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxMiwgMCk7CisJZ3Bpb19yZXF1ZXN0KDEyLCAiVVNCIHN1c3BlbmQiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTIsIDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKaW5kZXggOWJhMDk3OC4uM2IzNGMyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTQxLDE5ICs0MSw4IEBACiAJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGdlbmVyaWNfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5tbWMgWzBdID0gewotCQkuZW5hYmxlZCAJPSAwLAotCQkud2lyZTQJCT0gMCwKLQkJLndwX3BpbgkJPSAtMSwKLQkJLnBvd2VyX3Bpbgk9IC0xLAotCQkuc3dpdGNoX3Bpbgk9IC0xLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKLQl7IE9NQVBfVEFHX01NQywJCSZnZW5lcmljX21tY19jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IDJmZWYyYzguLjVlOWIxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTM3MiwzMSArMzczLDMzIEBACiAJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGg0X21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKLQkubW1jIFswXSA9IHsKLQkJLmVuYWJsZWQJPSAxLAotCQkud2lyZTQJCT0gMSwKLQkJLndwX3BpbgkJPSAtMSwKLQkJLnBvd2VyX3Bpbgk9IC0xLAotCQkuc3dpdGNoX3Bpbgk9IC0xLAotCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoNF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoNF9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VBUlQsCSZoNF91YXJ0X2NvbmZpZyB9LAotCXsgT01BUF9UQUdfTU1DLAkJJmg0X21tY19jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZoNF9sY2RfY29uZmlnIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBtMjRjMDEgPSB7CisJLmJ5dGVfbGVuCT0gU1pfMUsgLyA4LAorCS5wYWdlX3NpemUJPSAxNiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBoNF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImlzcDEzMDFfb21hcCIsIDB4MmQpLAogCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMTI1KSwKIAl9LAorCXsJLyogRUVQUk9NIG9uIG1haW5ib2FyZCAqLworCQlJMkNfQk9BUkRfSU5GTygiMjRjMDEiLCAweDUyKSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbTI0YzAxLAorCX0sCisJewkvKiBFRVBST00gb24gY3B1IGNhcmQgKi8KKwkJSTJDX0JPQVJEX0lORk8oIjI0YzAxIiwgMHg1NyksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm0yNGMwMSwKKwl9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggMWVhNTk5ODYuLmFhNjk3MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM4LDExICszOSw2OSBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogCisjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKworI2RlZmluZSBTRFAzNDMwX1NNQzkxWF9DUwkzCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGRwX3NtYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQMzRYWF9FVEhSX1NUQVJULAorCQkuZW5kCT0gT01BUDM0WFhfRVRIUl9TVEFSVCArIFNaXzRLLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMCwKKwkJLmVuZAk9IDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxkcF9zbWM5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTExeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsZHBfc21jOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxkcF9zbWM5MTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpsZHBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmxkcF9zbWM5MTF4X2RldmljZSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbGRwX2luaXRfc21jOTExeCh2b2lkKQoreworCWludCBldGhfY3M7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKKwlpbnQgZXRoX2dwaW8gPSAwOworCisJZXRoX2NzID0gTERQX1NNQzkxMVhfQ1M7CisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KGV0aF9jcywgU1pfMTZNLCAmY3NfbWVtX2Jhc2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQTUMgbWVtIGZvciBzbWM5MTF4XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWxkcF9zbWM5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgwOworCWxkcF9zbWM5MTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGNzX21lbV9iYXNlICsgMHhmOworCXVkZWxheSgxMDApOworCisJZXRoX2dwaW8gPSBMRFBfU01DOTExWF9HUElPOworCisJbGRwX3NtYzkxMXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT01BUF9HUElPX0lSUShldGhfZ3Bpbyk7CisKKwlpZiAob21hcF9yZXF1ZXN0X2dwaW8oZXRoX2dwaW8pIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTExeCBJUlFcbiIsCisJCQkJZXRoX2dwaW8pOworCQlyZXR1cm47CisJfQorCWdwaW9fZGlyZWN0aW9uX2lucHV0KGV0aF9ncGlvKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDJfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKKwlsZHBfaW5pdF9zbWM5MTF4KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBsZHBfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKQEAgLTUzLDIwICsxMTIsNTYgQEAKIAl7IE9NQVBfVEFHX1VBUlQsCSZsZHBfdWFydF9jb25maWcgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgbGRwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIGxkcF90d2xkYXRhID0geworCS5pcnFfYmFzZQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0lSUV9FTkQsCisKKwkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KKwkuZ3BpbwkJPSAmbGRwX2dwaW9fZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBsZHBfaTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInR3bDQwMzAiLCAweDQ4KSwKKwkJLmZsYWdzID0gSTJDX0NMSUVOVF9XQUtFLAorCQkuaXJxID0gSU5UXzM0WFhfU1lTX05JUlEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmxkcF90d2xkYXRhLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19pbml0KHZvaWQpCiB7Ci0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIE5VTEwsIDApOworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBsZHBfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUobGRwX2kyY19ib2FyZGluZm8pKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tbWMJCT0gMSwKKwkJLndpcmVzCQk9IDQsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXQodm9pZCkKIHsKIAlvbWFwX2kyY19pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMobGRwX2RldmljZXMsIEFSUkFZX1NJWkUobGRwX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGxkcF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUobGRwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGJhYTc5NjcuLjllNWFkYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKKyNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgogCiAjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMApAQCAtMTAzLDYgKzEwNSw3OCBAQAogCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCiB9OwogCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKwl7CisJCS5tbWMJCT0gMSwKKwkJLndpcmVzCQk9IDgsCisJCS5ncGlvX3dwCT0gMjksCisJfSwKKwl7fQkvKiBUZXJtaW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdOworCitzdGF0aWMgaW50IGJlYWdsZV90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQoreworCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLworCisJLyogUkVWSVNJVDogbmVlZCBlaGNpLW9tYXAgaG9va3MgZm9yIGV4dGVybmFsIFZCVVMKKwkgKiBwb3dlciBzd2l0Y2ggYW5kIG92ZXJjdXJyZW50IGRldGVjdAorCSAqLworCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyAxLCAiRUhDSV9uT0MiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvICsgMSk7CisKKwkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMCA9PSBsZWRBLCBFSENJIG5FTl9VU0JfUFdSIChvdXQsIGFjdGl2ZSBsb3cpICovCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAibkVOX1VTQl9QV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDEpOworCisJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCisJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBiZWFnbGVfZ3Bpb19kYXRhID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTLAorCS5pcnFfYmFzZQk9IFRXTDQwMzBfR1BJT19JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfR1BJT19JUlFfRU5ELAorCS51c2VfbGVkcwk9IHRydWUsCisJLnB1bGx1cHMJPSBCSVQoMSksCisJLnB1bGxkb3ducwk9IEJJVCgyKSB8IEJJVCg2KSB8IEJJVCg3KSB8IEJJVCg4KSB8IEJJVCgxMykKKwkJCQl8IEJJVCgxNSkgfCBCSVQoMTYpIHwgQklUKDE3KSwKKwkuc2V0dXAJCT0gYmVhZ2xlX3R3bF9ncGlvX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgYmVhZ2xlX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCT0gVFdMNDAzMF9JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfSVJRX0VORCwKKworCS8qIHBsYXRmb3JtX2RhdGEgZm9yIGNoaWxkcmVuIGdvZXMgaGVyZSAqLworCS5ncGlvCQk9ICZiZWFnbGVfZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJlYWdsZV9pMmNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmVhZ2xlX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzX2JlYWdsZV9pMmNfaW5pdCh2b2lkKQoreworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBiZWFnbGVfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUoYmVhZ2xlX2kyY19ib2FyZGluZm8pKTsKKyNpZmRlZiBDT05GSUdfSTJDMl9PTUFQX0JFQUdMRQorCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOworI2VuZGlmCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwMl9pbml0X2NvbW1vbl9odygpOwpAQCAtMTMwLDYgKzIwNCwxMSBAQAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAogCQkuZ3BpbwkJCT0gMTQ5LAogCX0sCisJeworCQkubmFtZQkJCT0gImJlYWdsZWJvYXJkOjpwbXVfc3RhdCIsCisJCS5ncGlvCQkJPSAtRUlOVkFMLAkvKiBnZXRzIHJlcGxhY2VkICovCisJCS5hY3RpdmVfbG93CQk9IHRydWUsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZF9pbmZvID0gewpAQCAtMjE4LDExICsyOTcsMjIgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0KHZvaWQpCiB7CisJb21hcDNfYmVhZ2xlX2kyY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMob21hcDNfYmVhZ2xlX2RldmljZXMsCiAJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM19iZWFnbGVfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCW9tYXBfY2ZnX3JlZyhBSDhfMzRYWF9HUElPMjkpOworCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CisJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCisJb21hcF9jZmdfcmVnKEoyNV8zNFhYX0dQSU8xNzApOworCWdwaW9fcmVxdWVzdCgxNzAsICJEVklfblBEIik7CisJLyogUkVWSVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNzAsIHRydWUpOworCiAJb21hcDNiZWFnbGVfZmxhc2hfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzE5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIGJvYXJkLW9tYXAzcGFuZG9yYS5jIChQYW5kb3JhIEhhbmRoZWxkIENvbnNvbGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKworI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisKKyNkZWZpbmUgT01BUDNfUEFORE9SQV9UU19HUElPCQk5NAorCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBvbWFwM3BhbmRvcmFfbW1jW10gPSB7CisJeworCQkubW1jCQk9IDEsCisJCS53aXJlcwkJPSA0LAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCisJCS5ncGlvX3dwCT0gMTI2LAorCQkuZXh0X2Nsb2NrCT0gMCwKKwl9LAorCXsKKwkJLm1tYwkJPSAyLAorCQkud2lyZXMJCT0gNCwKKwkJLmdwaW9fY2QJPSAtRUlOVkFMLAorCQkuZ3Bpb193cAk9IDEyNywKKwkJLmV4dF9jbG9jawk9IDEsCisJfSwKKwl7fQkvKiBUZXJtaW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgb21hcDNwYW5kb3JhX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoMSA8PCAyKSwgLyogVUFSVDMgKi8KK307CisKK3N0YXRpYyBpbnQgb21hcDNwYW5kb3JhX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCit7CisJLyogZ3BpbyArIHswLDF9IGlzICJtbWN7MCwxfV9jZCIgKGlucHV0L0lSUSkgKi8KKwlvbWFwM3BhbmRvcmFfbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKKwlvbWFwM3BhbmRvcmFfbW1jWzFdLmdwaW9fY2QgPSBncGlvICsgMTsKKwl0d2w0MDMwX21tY19pbml0KG9tYXAzcGFuZG9yYV9tbWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDNwYW5kb3JhX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkuc2V0dXAJCT0gb21hcDNwYW5kb3JhX3R3bF9ncGlvX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIG9tYXAzcGFuZG9yYV91c2JfZGF0YSA9IHsKKwkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgb21hcDNwYW5kb3JhX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCT0gVFdMNDAzMF9JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfSVJRX0VORCwKKwkuZ3BpbwkJPSAmb21hcDNwYW5kb3JhX2dwaW9fZGF0YSwKKwkudXNiCQk9ICZvbWFwM3BhbmRvcmFfdXNiX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb21hcDNwYW5kb3JhX2kyY19ib2FyZGluZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0cHM2NTk1MCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDNwYW5kb3JhX3R3bGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAzcGFuZG9yYV9pMmNfaW5pdCh2b2lkKQoreworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBvbWFwM3BhbmRvcmFfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX2kyY19ib2FyZGluZm8pKTsKKwkvKiBpMmMyIHBpbnMgYXJlIG5vdCBjb25uZWN0ZWQgKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfYWRzNzg0Nl9pbml0KHZvaWQpCit7CisJaW50IGdwaW8gPSBPTUFQM19QQU5ET1JBX1RTX0dQSU87CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCAiYWRzNzg0Nl9wZW5fZG93biIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyAlZCBmb3IgIgorCQkJCSJhZHM3ODQ2IHBlbiBkb3duIElSUVxuIiwgZ3Bpbyk7CisJCXJldHVybjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKK30KKworc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShPTUFQM19QQU5ET1JBX1RTX0dQSU8pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHM3ODQ2X2NvbmZpZyA9IHsKKwkueF9tYXgJCQk9IDB4MGZmZiwKKwkueV9tYXgJCQk9IDB4MGZmZiwKKwkueF9wbGF0ZV9vaG1zCQk9IDE4MCwKKwkucHJlc3N1cmVfbWF4CQk9IDI1NSwKKwkuZGVib3VuY2VfbWF4CQk9IDEwLAorCS5kZWJvdW5jZV90b2wJCT0gMywKKwkuZGVib3VuY2VfcmVwCQk9IDEsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSwKKwkua2VlcF92cmVmX29uCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgYWRzNzg0Nl9tY3NwaV9jb25maWcgPSB7CisJLnR1cmJvX21vZGUJPSAwLAorCS5zaW5nbGVfY2hhbm5lbAk9IDEsCS8qIDA6IHNsYXZlLCAxOiBtYXN0ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gb21hcDNwYW5kb3JhX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwkJPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDE1MDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmYWRzNzg0Nl9tY3NwaV9jb25maWcsCisJCS5pcnEJCQk9IE9NQVBfR1BJT19JUlEoT01BUDNfUEFORE9SQV9UU19HUElPKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmFkczc4NDZfY29uZmlnLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzcGFuZG9yYV9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJwYW5kb3JhX2xjZCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcDNwYW5kb3JhX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9tYXAzcGFuZG9yYV9jb25maWdbXSBfX2luaXRkYXRhID0geworCXsgT01BUF9UQUdfVUFSVCwJJm9tYXAzcGFuZG9yYV91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJm9tYXAzcGFuZG9yYV9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNwYW5kb3JhX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZvbWFwM3BhbmRvcmFfbGNkX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfaW5pdCh2b2lkKQoreworCW9tYXAzcGFuZG9yYV9pMmNfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG9tYXAzcGFuZG9yYV9kZXZpY2VzLAorCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gb21hcDNwYW5kb3JhX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ob21hcDNwYW5kb3JhX3NwaV9ib2FyZF9pbmZvLAorCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfc3BpX2JvYXJkX2luZm8pKTsKKwlvbWFwM3BhbmRvcmFfYWRzNzg0Nl9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM3BhbmRvcmFfbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQM19QQU5ET1JBLCAiUGFuZG9yYSBIYW5kaGVsZCBDb25zb2xlIikKKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXAzcGFuZG9yYV9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcDNwYW5kb3JhX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwM3BhbmRvcmFfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IGUwOWFhNTkuLjgyYjNkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KQEAgLTQ0LDYgKzQ1LDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAKKyNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorCiAjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRSBTWl8xMjhLCiAjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMApAQCAtMTM5LDggKzE0MiwzMSBAQAogCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCiB9OwogCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIG92ZXJvX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIG92ZXJvX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCT0gVFdMNDAzMF9JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfSVJRX0VORCwKKwkuZ3BpbwkJPSAmb3Zlcm9fZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG92ZXJvX2kyY19ib2FyZGluZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w0MDMwIiwgMHg0OCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwkJLmlycSA9IElOVF8zNFhYX1NZU19OSVJRLAorCQkucGxhdGZvcm1fZGF0YSA9ICZvdmVyb190d2xkYXRhLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBvdmVyb19pMmNfaW5pdCh2b2lkKQogeworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBvdmVyb19pMmNfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRShvdmVyb19pMmNfYm9hcmRpbmZvKSk7CiAJLyogaTJjMiBwaW5zIGFyZSB1c2VkIGZvciBncGlvICovCiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CiAJcmV0dXJuIDA7CkBAIC0xNzEsNiArMTk3LDIyIEBACiAJJm92ZXJvX2xjZF9kZXZpY2UsCiB9OwogCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1tYwkJPSAxLAorCQkud2lyZXMJCT0gNCwKKwkJLmdwaW9fY2QJPSAtRUlOVkFMLAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJfSwKKwl7CisJCS5tbWMJCT0gMiwKKwkJLndpcmVzCQk9IDQsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2luaXQodm9pZCkKIHsKIAlvdmVyb19pMmNfaW5pdCgpOwpAQCAtMTc4LDYgKzIyMCw3IEBACiAJb21hcF9ib2FyZF9jb25maWcgPSBvdmVyb19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3Zlcm9fY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJdHdsNDAzMF9tbWNfaW5pdChtbWMpOwogCW92ZXJvX2ZsYXNoX2luaXQoKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCmluZGV4IDI0MmExOWQuLmZmNmNkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaApAQCAtMjUyMiw3ICsyNTIyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCkBAIC0yNTMzLDcgKzI1MzIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAotCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKQEAgLTI1NDQsNyArMjU0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLmlkCQk9IDIsCisJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLApAQCAtMjU1NSw3ICsyNTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkuaWQJCT0gMiwKKwkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLApAQCAtMjU5NSw3ICsyNTkzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLApAQCAtMjYwNiw3ICsyNjAzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLmlkCQk9IDIsCisJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggMDg0ZTExMC4uMzFiYjcwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC00NzUsNyArNDc1LDcgQEAKIAkJICogVXBkYXRlIHRoaXMgaWYgdGhlcmUgYXJlIGZ1cnRoZXIgY2xvY2sgY2hhbmdlcyBiZXR3ZWVuIEVTMgogCQkgKiBhbmQgcHJvZHVjdGlvbiBwYXJ0cwogCQkgKi8KLQkJaWYgKGlzX3NpbF9yZXZfZXF1YWxfdG8oT01BUDM0MzBfUkVWX0VTMV8wKSkgeworCQlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKIAkJCS8qIE5vIDM0MzBFUzEtb25seSByYXRlcyBleGlzdCwgc28gbm8gUkFURV9JTl8zNDMwRVMxICovCiAJCQljcHVfY2xrZmxnIHw9IENMT0NLX0lOX09NQVAzNDMwRVMxOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKaW5kZXggYzM4YThhMC4uYTgyNjA5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCkBAIC0xMzc0LDcgKzEzNzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAotCS5pZAkJPSAzLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULApAQCAtMTM4NSw3ICsxMzg1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkuaWQJCT0gMiwKKwkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMl9TSElGVCwKQEAgLTE0MDYsNyArMTQwNiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCkBAIC0xNzIyLDcgKzE3MjEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAotCS5pZAkJPSAzLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCkBAIC0xNzc0LDcgKzE3NzMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAotCS5pZAkJPSAyLAorCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCkBAIC0xNzg1LDcgKzE3ODQsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAotCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCkBAIC0yMjgwLDggKzIyNzgsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2ZjayIsCitzdGF0aWMgc3RydWN0IGNsayBncGlvMV9kYmNrID0geworCS5uYW1lCQk9ICJncGlvMV9kYmNrIiwKIAkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKQEAgLTI1MjcsOCArMjUyNSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzZfZmNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2RiY2siLAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKQEAgLTI1MzcsOCArMjUzNSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2RiY2siLAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKQEAgLTI1NDcsOCArMjU0NSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzRfZmNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2RiY2siLAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKQEAgLTI1NTcsOCArMjU1NSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzNfZmNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2RiY2siLAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKQEAgLTI1NjcsOCArMjU2NSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzJfZmNrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW8yX2RiY2siLAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKQEAgLTMxNzAsNyArMzE2OCw3IEBACiAJJnVzaW1fZmNrLAogCSZncHQxX2ZjaywKIAkmd2t1cF8zMmtfZmNrLAotCSZncGlvMV9mY2ssCisJJmdwaW8xX2RiY2ssCiAJJndkdDJfZmNrLAogCSZ3a3VwX2w0X2ljaywKIAkmdXNpbV9pY2ssCkBAIC0zMTkyLDExICszMTkwLDExIEBACiAJJmdwdDhfZmNrLAogCSZncHQ5X2ZjaywKIAkmcGVyXzMya19hbHdvbl9mY2ssCi0JJmdwaW82X2ZjaywKLQkmZ3BpbzVfZmNrLAotCSZncGlvNF9mY2ssCi0JJmdwaW8zX2ZjaywKLQkmZ3BpbzJfZmNrLAorCSZncGlvNl9kYmNrLAorCSZncGlvNV9kYmNrLAorCSZncGlvNF9kYmNrLAorCSZncGlvM19kYmNrLAorCSZncGlvMl9kYmNrLAogCSZ3ZHQzX2ZjaywKIAkmcGVyX2w0X2ljaywKIAkmZ3BpbzZfaWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCA5MGFmMmFjLi45ZDcyMTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMTQsMTYgKzE0LDE5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvdGMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2VhYy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQogI2RlZmluZSBPTUFQMl9NQk9YX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfTUFJTEJPWF9CQVNFKQpAQCAtMjk1LDYgKzI5OCwxNzEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc2hhMV9tZDUodm9pZCkgeyB9CiAjZW5kaWYKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisKKyNkZWZpbmUgTU1DSFNfU1lTQ09ORklHCQkJMHgwMDEwCisjZGVmaW5lIE1NQ0hTX1NZU0NPTkZJR19TV1JFU0VUCQkoMSA8PCAxKQorI2RlZmluZSBNTUNIU19TWVNTVEFUVVMJCQkweDAwMTQKKyNkZWZpbmUgTU1DSFNfU1lTU1RBVFVTX1JFU0VURE9ORQkoMSA8PCAwKQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkdW1teV9wZGV2ID0geworCS5kZXYgPSB7CisJCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJfSwKK307CisKKy8qKgorICogb21hcF9oc21tY19yZXNldCgpIC0gRnVsbCByZXNldCBvZiBlYWNoIEhTLU1NQyBjb250cm9sbGVyCisgKgorICogRW5zdXJlIHRoYXQgZWFjaCBNTUMgY29udHJvbGxlciBpcyBmdWxseSByZXNldC4gIENvbnRyb2xsZXJzCisgKiBsZWZ0IGluIGFuIHVua25vd24gc3RhdGUgKGJ5IGJvb3Rsb2FkZXIpIG1heSBwcmV2ZW50IHJldGVudGlvbgorICogb3IgT0ZGLW1vZGUuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIGNhc2VzIHdoZXJlIHRoZQorICogTU1DIGRyaXZlciBpcyBub3QgZW5hYmxlZCwgX29yXyBidWlsdCBhcyBhIG1vZHVsZS4KKyAqCisgKiBJbiBvcmRlciBmb3IgcmVzZXQgdG8gd29yaywgaW50ZXJmYWNlLCBmdW5jdGlvbmFsIGFuZCBkZWJvdW5jZQorICogY2xvY2tzIG11c3QgYmUgZW5hYmxlZC4gIFRoZSBkZWJvdW5jZSBjbG9jayBjb21lcyBmcm9tIGZ1bmNfMzJrX2NsaworICogYW5kIGlzIG5vdCB1bmRlciBTVyBjb250cm9sLCBzbyB3ZSBvbmx5IGVuYWJsZSBpLSBhbmQgZi1jbG9ja3MuCisgKiovCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oc21tY19yZXNldCh2b2lkKQoreworCXUzMiBpLCBucl9jb250cm9sbGVycyA9IGNwdV9pc19vbWFwMzR4eCgpID8gT01BUDM0WFhfTlJfTU1DIDoKKwkJT01BUDI0WFhfTlJfTU1DOworCisJZm9yIChpID0gMDsgaSA8IG5yX2NvbnRyb2xsZXJzOyBpKyspIHsKKwkJdTMyIHYsIGJhc2UgPSAwOworCQlzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gJmR1bW15X3BkZXYuZGV2OworCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQliYXNlID0gT01BUDJfTU1DMV9CQVNFOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJhc2UgPSBPTUFQMl9NTUMyX0JBU0U7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYmFzZSA9IE9NQVAzX01NQzNfQkFTRTsKKwkJCWJyZWFrOworCQl9CisKKwkJZHVtbXlfcGRldi5pZCA9IGk7CisJCWljbGsgPSBjbGtfZ2V0KGRldiwgIm1tY2hzX2ljayIpOworCQlpZiAoaWNsayAmJiBjbGtfZW5hYmxlKGljbGspKQorCQkJaWNsayA9IE5VTEw7CisKKwkJZmNsayA9IGNsa19nZXQoZGV2LCAibW1jaHNfZmNrIik7CisJCWlmIChmY2xrICYmIGNsa19lbmFibGUoZmNsaykpCisJCQlmY2xrID0gTlVMTDsKKworCQlpZiAoIWljbGsgfHwgIWZjbGspIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgY2xvY2tzIGZvciBNTUMlZCwgIgorCQkJICAgICAgICJjYW5ub3QgcmVzZXQuXG4iLCAgX19mdW5jX18sIGkpOworCQkJYnJlYWs7CisJCX0KKworCQlvbWFwX3dyaXRlbChNTUNIU19TWVNDT05GSUdfU1dSRVNFVCwgYmFzZSArIE1NQ0hTX1NZU0NPTkZJRyk7CisJCXYgPSBvbWFwX3JlYWRsKGJhc2UgKyBNTUNIU19TWVNTVEFUVVMpOworCQl3aGlsZSAoIShvbWFwX3JlYWRsKGJhc2UgKyBNTUNIU19TWVNTVEFUVVMpICYKKwkJCSBNTUNIU19TWVNTVEFUVVNfUkVTRVRET05FKSkKKwkJCWNwdV9yZWxheCgpOworCisJCWlmIChmY2xrKSB7CisJCQljbGtfZGlzYWJsZShmY2xrKTsKKwkJCWNsa19wdXQoZmNsayk7CisJCX0KKwkJaWYgKGljbGspIHsKKwkJCWNsa19kaXNhYmxlKGljbGspOworCQkJY2xrX3B1dChpY2xrKTsKKwkJfQorCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9oc21tY19yZXNldCh2b2lkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKSB8fCBcCisJZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21tY19tdXgoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tY19jb250cm9sbGVyLAorCQkJaW50IGNvbnRyb2xsZXJfbnIpCit7CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpICYmIGNvbnRyb2xsZXJfbnIgPT0gMCkgeworCQlvbWFwX2NmZ19yZWcoSDE4XzI0WFhfTU1DX0NNRCk7CisJCW9tYXBfY2ZnX3JlZyhIMTVfMjRYWF9NTUNfQ0xLSSk7CisJCW9tYXBfY2ZnX3JlZyhHMTlfMjRYWF9NTUNfQ0xLTyk7CisJCW9tYXBfY2ZnX3JlZyhGMjBfMjRYWF9NTUNfREFUMCk7CisJCW9tYXBfY2ZnX3JlZyhGMTlfMjRYWF9NTUNfREFUX0RJUjApOworCQlvbWFwX2NmZ19yZWcoRzE4XzI0WFhfTU1DX0NNRF9ESVIpOworCQlpZiAobW1jX2NvbnRyb2xsZXItPnNsb3RzWzBdLndpcmVzID09IDQpIHsKKwkJCW9tYXBfY2ZnX3JlZyhIMTRfMjRYWF9NTUNfREFUMSk7CisJCQlvbWFwX2NmZ19yZWcoRTE5XzI0WFhfTU1DX0RBVDIpOworCQkJb21hcF9jZmdfcmVnKEQxOV8yNFhYX01NQ19EQVQzKTsKKwkJCW9tYXBfY2ZnX3JlZyhFMjBfMjRYWF9NTUNfREFUX0RJUjEpOworCQkJb21hcF9jZmdfcmVnKEYxOF8yNFhYX01NQ19EQVRfRElSMik7CisJCQlvbWFwX2NmZ19yZWcoRTE4XzI0WFhfTU1DX0RBVF9ESVIzKTsKKwkJfQorCisJCS8qCisJCSAqIFVzZSBpbnRlcm5hbCBsb29wLWJhY2sgaW4gTU1DL1NESU8gTW9kdWxlIElucHV0IENsb2NrCisJCSAqIHNlbGVjdGlvbgorCQkgKi8KKwkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQkJdTMyIHYgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJCQl2IHw9ICgxIDw8IDI0KTsKKwkJCW9tYXBfY3RybF93cml0ZWwodiwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfbW1jKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICoqbW1jX2RhdGEsCisJCQlpbnQgbnJfY29udHJvbGxlcnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY29udHJvbGxlcnM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7CisJCXVuc2lnbmVkIGludCBpcnEgPSAwOworCisJCWlmICghbW1jX2RhdGFbaV0pCisJCQljb250aW51ZTsKKworCQlvbWFwMl9tbWNfbXV4KG1tY19kYXRhW2ldLCBpKTsKKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJYmFzZSA9IE9NQVAyX01NQzFfQkFTRTsKKwkJCWlycSA9IElOVF8yNFhYX01NQ19JUlE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYmFzZSA9IE9NQVAyX01NQzJfQkFTRTsKKwkJCWlycSA9IElOVF8yNFhYX01NQzJfSVJROworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCQkJcmV0dXJuOworCQkJYmFzZSA9IE9NQVAzX01NQzNfQkFTRTsKKwkJCWlycSA9IElOVF8zNFhYX01NQzNfSVJROworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJCXNpemUgPSBPTUFQMjQyMF9NTUNfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IEhTTU1DX1NJWkU7CisKKwkJb21hcF9tbWNfYWRkKGksIGJhc2UsIHNpemUsIGlycSwgbW1jX2RhdGFbaV0pOworCX07Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjaWYgZGVmaW5lZChDT05GSUdfSERRX01BU1RFUl9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19IRFFfTUFTVEVSX09NQVBfTU9EVUxFKQogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCiAjZGVmaW5lIE9NQVBfSERRX0JBU0UJMHg0ODBCMjAwMApAQCAtMzM0LDYgKzUwMiw3IEBACiAJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KKwlvbWFwX2hzbW1jX3Jlc2V0KCk7CiAJb21hcF9pbml0X21ib3goKTsKIAlvbWFwX2luaXRfbWNzcGkoKTsKIAlvbWFwX2hkcV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggYmY0NWZmMy4uYjBmOGU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMjIsNDAgKzIyLDE1IEBACiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAotc3RhdGljIHUzMiBjbGFzczsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnRhcF9iYXNlOwotc3RhdGljIHUxNiB0YXBfcHJvZF9pZDsKLQotI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAotI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMAkweDAyMTgKLSNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzEJMHgwMjFDCi0jZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8yCTB4MDIyMAotI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMwkweDAyMjQKLQotLyogc3lzdGVtX3JldiBmaWVsZHMgZm9yIE9NQVAyIHByb2Nlc3NvcnM6Ci0gKiAgIENQVSBpZCBiaXRzICAgICBbMzE6MTZdLAotICogICBDUFUgZGV2aWNlIHR5cGUgWzE1OjEyXSwgKHVucHJnLG5vcm1hbCxQT1ApCi0gKiAgIENQVSByZXZpc2lvbiAgICBbMTE6MDhdCi0gKiAgIENQVSBjbGFzcyBiaXRzICBbMDc6MDBdCi0gKi8KLQotc3RydWN0IG9tYXBfaWQgewotCXUxNgloYXdrZXllOwkvKiBTaWxpY29uIHR5cGUgKEhhd2tleWUgaWQpICovCi0JdTgJZGV2OwkJLyogRGV2aWNlIHR5cGUgZnJvbSBwcm9kdWN0aW9uX2lkIHJlZyAqLwotCXUzMgl0eXBlOwkJLyogY29tYmluZWQgdHlwZSBpZCBjb3BpZWQgdG8gc3lzdGVtX3JldiAqLwotfTsKLQotLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGRldGVjdCB0aGUgT01BUCB2ZXJzaW9uICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaWQgb21hcF9pZHNbXSBfX2luaXRkYXRhID0gewotCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDIwMDAwMCB9LAotCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDEsIC50eXBlID0gMHgyNDIwMTAwMCB9LAotCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDIsIC50eXBlID0gMHgyNDIwMjAwMCB9LAotCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDQsIC50eXBlID0gMHgyNDIyMDAwMCB9LAotCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDgsIC50eXBlID0gMHgyNDIzMDAwMCB9LAotCXsgLmhhd2tleWUgPSAweGI2OGEsIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDMwMDAwMCB9LAotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwX3JldmlzaW9uOworCisKK3Vuc2lnbmVkIGludCBvbWFwX3Jldih2b2lkKQoreworCXJldHVybiBvbWFwX3JldmlzaW9uOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3Jldik7CiAKIC8qKgogICogb21hcF9jaGlwX2lzIC0gdGVzdCB3aGV0aGVyIGN1cnJlbnRseSBydW5uaW5nIE9NQVAgbWF0Y2hlcyBhIGNoaXAgdHlwZQpAQCAtNzAsMTM1ICs0NSw0MSBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwX2NoaXBfaXMpOwogCi1zdGF0aWMgdTMyIF9faW5pdCByZWFkX3RhcF9yZWcoaW50IHJlZykKLXsKLQl1bnNpZ25lZCBpbnQgcmVndmFsID0gMDsKLQl1MzIgY3B1aWQ7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0JLyogUmVhZGluZyB0aGUgSURDT0RFIHJlZ2lzdGVyIG9uIDM0MzAgRVMxIHJlc3VsdHMgaW4gYQotCSAqIGRhdGEgYWJvcnQgYXMgdGhlIHJlZ2lzdGVyIGlzIG5vdCBleHBvc2VkIG9uIHRoZSBPQ1AKLQkgKiBIZW5jZSByZWFkaW5nIHRoZSBDb3J0ZXggUmV2Ci0JICovCi0JY3B1aWQgPSByZWFkX2NwdWlkKENQVUlEX0lEKTsKKyNkZWZpbmUgT01BUF9UQVBfSURDT0RFCQkweDAyMDQKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzAJMHgwMjE4CisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8xCTB4MDIxQworI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMgkweDAyMjAKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzMJMHgwMjI0CiAKLQkvKiBJZiB0aGUgcHJvY2Vzc29yIHR5cGUgaXMgQ29ydGV4LUE4IGFuZCB0aGUgcmV2aXNpb24gaXMgMHgwCi0JICogaXQgbWVhbnMgaXRzIENvcnRleCByMHAwIHdoaWNoIGlzIDM0MzAgRVMxCi0JICovCi0JaWYgKCgoKGNwdWlkID4+IDQpICYgMHhGRkYpID09IDB4QzA4KSAmJiAoKGNwdWlkICYgMHhGKSA9PSAweDApKSB7CisjZGVmaW5lIHJlYWRfdGFwX3JlZyhyZWcpCV9fcmF3X3JlYWRsKHRhcF9iYXNlICArIChyZWcpKQogCi0JCWlmIChyZWcgPT0gdGFwX3Byb2RfaWQpIHsKLQkJCXJlZ3ZhbCA9IDB4MDAwRjAwRjA7Ci0JCQlnb3RvIG91dDsKLQkJfQorc3RydWN0IG9tYXBfaWQgeworCXUxNgloYXdrZXllOwkvKiBTaWxpY29uIHR5cGUgKEhhd2tleWUgaWQpICovCisJdTgJZGV2OwkJLyogRGV2aWNlIHR5cGUgZnJvbSBwcm9kdWN0aW9uX2lkIHJlZyAqLworCXUzMgl0eXBlOwkJLyogQ29tYmluZWQgdHlwZSBpZCBjb3BpZWQgdG8gb21hcF9yZXZpc2lvbiAqLworfTsKIAotCQlzd2l0Y2ggKHJlZykgewotCQljYXNlIE9NQVBfVEFQX0lEQ09ERSAgOiByZWd2YWwgPSAweDBCN0FFMDJGOyBicmVhazsKLQkJLyogTWFraW5nIERldlR5cGUgYXMgMHhGIGluIEVTMSB0byBkaWZmZXIgZnJvbSBFUzIgKi8KLQkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMDogcmVndmFsID0gMHgwMTAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgT01BUF9UQVBfRElFX0lEXzE6IHJlZ3ZhbCA9IDB4MTAxMmQ2ODc7IGJyZWFrOwotCQljYXNlIE9NQVBfVEFQX0RJRV9JRF8yOglyZWd2YWwgPSAweDAwMDAwMDAwOyBicmVhazsKLQkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMzoJcmVndmFsID0gMHgyZDJjMDAwMDsgYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJcmVndmFsID0gX19yYXdfcmVhZGwodGFwX2Jhc2UgKyByZWcpOworLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGRldGVjdCB0aGUgT01BUCB2ZXJzaW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaWQgb21hcF9pZHNbXSBfX2luaXRkYXRhID0geworCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDIwMDAyNCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDEsIC50eXBlID0gMHgyNDIwMTAyNCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDIsIC50eXBlID0gMHgyNDIwMjAyNCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDQsIC50eXBlID0gMHgyNDIyMDAyNCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDgsIC50eXBlID0gMHgyNDIzMDAyNCB9LAorCXsgLmhhd2tleWUgPSAweGI2OGEsIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDMwMDAyNCB9LAorfTsKIAotb3V0OgotCXJldHVybiByZWd2YWw7CitzdGF0aWMgdm9pZCBfX2lvbWVtICp0YXBfYmFzZTsKK3N0YXRpYyB1MTYgdGFwX3Byb2RfaWQ7CiAKLX0KLQotLyoKLSAqIF9zZXRfc3lzdGVtX3JldiAtIHNldCB0aGUgc3lzdGVtX3JldiBnbG9iYWwgYmFzZWQgb24gY3VycmVudCBPTUFQIGNoaXAgdHlwZQotICoKLSAqIFNldCB0aGUgc3lzdGVtX3JldiBnbG9iYWwuICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBjcHVfaXNfb21hcHh4eHgoKQotICogbWFjcm9zLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgX3NldF9zeXN0ZW1fcmV2KHUzMiB0eXBlLCB1OCByZXYpCi17Ci0JdTMyIGksIGN0cmxfc3RhdHVzOwotCi0JLyoKLQkgKiBzeXN0ZW1fcmV2IGVuY29kaW5nIGlzIGFzIGZvbGxvd3MKLQkgKiBzeXN0ZW1fcmV2ICYgMHhmZjAwMDAwMCAtPiBPbWFwIENsYXNzICgyNHh4LzM0eHgpCi0JICogc3lzdGVtX3JldiAmIDB4ZmZmMDAwMDAgLT4gT21hcCBTdWIgQ2xhc3MgKDI0MngvMzQzeCkKLQkgKiBzeXN0ZW1fcmV2ICYgMHhmZmZmMDAwMCAtPiBPbWFwIHR5cGUgKDI0MjAvMjQyMi8yNDIzLzI0MzAvMzQzMCkKLQkgKiBzeXN0ZW1fcmV2ICYgMHgwMDAwZjAwMCAtPiBTaWxpY29uIHJldmlzaW9uIChFUzEsIEVTMiApCi0JICogc3lzdGVtX3JldiAmIDB4MDAwMDA3MDAgLT4gRGV2aWNlIFR5cGUgKCBFTVUvSFMvR1AvQkFEICkKLQkgKiBzeXN0ZW1fcmV2ICYgMHgwMDAwMDBjMCAtPiBJRENPREUgcmV2aXNpb25bNjo3XQotCSAqIHN5c3RlbV9yZXYgJiAweDAwMDAwMDNmIC0+IHN5c19ib290WzA6NV0KLQkgKi8KLQkvKiBFbWJlZGRpbmcgdGhlIEVTIHJldmlzaW9uIGluZm8gaW4gdHlwZSBmaWVsZCAqLwotCXN5c3RlbV9yZXYgPSB0eXBlOwotCS8qIEFsc28gYWRkIElEQ09ERSByZXZpc2lvbiBpbmZvIG9ubHkgdHdvIGxvd2VyIGJpdHMgKi8KLQlzeXN0ZW1fcmV2IHw9ICgocmV2ICYgMHgzKSA8PCA2KTsKLQotCS8qIEFkZCBpbiB0aGUgZGV2aWNlIHR5cGUgYW5kIHN5c19ib290IGZpZWxkcyAoc2VlIGFib3ZlKSAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlpID0gT01BUDI0WFhfQ09OVFJPTF9TVEFUVVM7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0M3goKSkgewotCQlpID0gT01BUDM0M1hfQ09OVFJPTF9TVEFUVVM7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpZDogdW5rbm93biBDUFUgdHlwZVxuIik7Ci0JCUJVRygpOwotCX0KLQljdHJsX3N0YXR1cyA9IG9tYXBfY3RybF9yZWFkbChpKTsKLQlzeXN0ZW1fcmV2IHw9IChjdHJsX3N0YXR1cyAmIChPTUFQMl9TWVNCT09UXzVfTUFTSyB8Ci0JCQkJICAgICAgT01BUDJfU1lTQk9PVF80X01BU0sgfAotCQkJCSAgICAgIE9NQVAyX1NZU0JPT1RfM19NQVNLIHwKLQkJCQkgICAgICBPTUFQMl9TWVNCT09UXzJfTUFTSyB8Ci0JCQkJICAgICAgT01BUDJfU1lTQk9PVF8xX01BU0sgfAotCQkJCSAgICAgIE9NQVAyX1NZU0JPT1RfMF9NQVNLKSk7Ci0Jc3lzdGVtX3JldiB8PSAoY3RybF9zdGF0dXMgJiBPTUFQMl9ERVZJQ0VUWVBFX01BU0spOwotfQotCi0KLS8qCi0gKiBfc2V0X29tYXBfY2hpcCAtIHNldCB0aGUgb21hcF9jaGlwIGdsb2JhbCBiYXNlZCBvbiBPTUFQIGNoaXAgdHlwZQotICoKLSAqIEJ1aWxkIHRoZSBvbWFwX2NoaXAgYml0cy4gIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSBwb3dlcmRvbWFpbiBhbmQKLSAqIGNsb2NrZG9tYWluIGNvZGUgdG8gaW5kaWNhdGUgd2hldGhlciBzdHJ1Y3R1cmVzIGFyZSBhcHBsaWNhYmxlIGZvcgotICogdGhlIGN1cnJlbnQgT01BUCBjaGlwIHR5cGUgYnkgQU5EaW5nIGl0IGFnYWluc3QgYSAncGxhdGZvcm0nIGJpdGZpZWxkCi0gKiBpbiB0aGUgc3RydWN0dXJlLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgX3NldF9vbWFwX2NoaXAodm9pZCkKLXsKLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkpIHsKLQotCQlvbWFwX2NoaXAub2MgPSBDSElQX0lTX09NQVAzNDMwOwotCQlpZiAoaXNfc2lsX3Jldl9lcXVhbF90byhPTUFQMzQzMF9SRVZfRVMxXzApKQotCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzE7Ci0JCWVsc2UgaWYgKGlzX3NpbF9yZXZfZ3JlYXRlcl90aGFuKE9NQVAzNDMwX1JFVl9FUzFfMCkpCi0JCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzQzMEVTMjsKLQotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKLQotCQkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyAyNDMwRVMyLjEgYW5kIDI0MzAtYWxsICovCi0JCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAyNDMwOwotCi0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MngoKSkgewotCi0JCS8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDI0MjBFUzIuMS4xIGFuZCAyNDIwLWFsbCAqLwotCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMjQyMDsKLQotCX0gZWxzZSB7Ci0KLQkJLyogQ3VycmVudCBDUFUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvZGUuICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk9NQVAgY2hpcCB0eXBlIGNvZGUgZG9lcyBub3QgeWV0IHN1cHBvcnQgIgotCQkgICAgICAgInRoaXMgQ1BVIHR5cGUuXG4iKTsKLQkJV0FSTl9PTigxKTsKLQotCX0KLQotfQotCi12b2lkIF9faW5pdCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKQordm9pZCBfX2luaXQgb21hcDI0eHhfY2hlY2tfcmV2aXNpb24odm9pZCkKIHsKIAlpbnQgaSwgajsKLQl1MzIgaWRjb2RlOwotCXUzMiBwcm9kX2lkOworCXUzMiBpZGNvZGUsIHByb2RfaWQ7CiAJdTE2IGhhd2tleWU7Ci0JdTggIGRldl90eXBlOwotCXU4ICByZXY7CisJdTggIGRldl90eXBlLCByZXY7CiAKIAlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKIAlwcm9kX2lkID0gcmVhZF90YXBfcmVnKHRhcF9wcm9kX2lkKTsKQEAgLTIyMCwxOCArMTAxLDYgQEAKIAlwcl9kZWJ1ZygiT01BUF9UQVBfUFJPRF9JRF8wOiAweCUwOHggREVWX1RZUEU6ICVpXG4iLAogCQkgcHJvZF9pZCwgZGV2X3R5cGUpOwogCi0JLyoKLQkgKiBEZXRlY3Rpb24gZm9yIDM0eHggRVMyLjAgYW5kIGFib3ZlIGNhbiBiZSBkb25lIHdpdGgganVzdAotCSAqIGhhd2tleWUgYW5kIHJldi4gU2VlIFRSTSAxLjUuMiBEZXZpY2UgSWRlbnRpZmljYXRpb24uCi0JICogTm90ZSB0aGF0IHJldiBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyBFUzEuMCB1c2VzIHZhbHVlIDAuCi0JICovCi0JaWYgKGhhd2tleWUgPT0gMHhiN2FlKSB7Ci0JCXN5c3RlbV9yZXYgPSAweDM0MzAwMDAwIHwgKCgxICsgcmV2KSA8PCAxMik7Ci0JCXByX2luZm8oIk9NQVAlMDR4IEVTMi4laVxuIiwgc3lzdGVtX3JldiA+PiAxNiwgcmV2KTsKLQkJX3NldF9vbWFwX2NoaXAoKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIENoZWNrIGhhd2tleWUgaWRzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKIAkJaWYgKGhhd2tleWUgPT0gb21hcF9pZHNbaV0uaGF3a2V5ZSkKQEAgLTI1NSwyMyArMTI0LDExNSBAQAogCQlqID0gaTsKIAl9CiAKLQlfc2V0X3N5c3RlbV9yZXYob21hcF9pZHNbal0udHlwZSwgcmV2KTsKLQotCV9zZXRfb21hcF9jaGlwKCk7Ci0KLQlwcl9pbmZvKCJPTUFQJTA0eCIsIHN5c3RlbV9yZXYgPj4gMTYpOwotCWlmICgoc3lzdGVtX3JldiA+PiA4KSAmIDB4MGYpCi0JCXByX2luZm8oIkVTJXgiLCAoc3lzdGVtX3JldiA+PiAxMikgJiAweGYpOworCXByX2luZm8oIk9NQVAlMDR4Iiwgb21hcF9yZXYoKSA+PiAxNik7CisJaWYgKChvbWFwX3JldigpID4+IDgpICYgMHgwZikKKwkJcHJfaW5mbygiRVMleCIsIChvbWFwX3JldigpID4+IDEyKSAmIDB4Zik7CiAJcHJfaW5mbygiXG4iKTsKLQogfQogCit2b2lkIF9faW5pdCBvbWFwMzR4eF9jaGVja19yZXZpc2lvbih2b2lkKQoreworCXUzMiBjcHVpZCwgaWRjb2RlOworCXUxNiBoYXdrZXllOworCXU4IHJldjsKKwljaGFyICpyZXZfbmFtZSA9ICJFUzEuMCI7CisKKwkvKgorCSAqIFdlIGNhbm5vdCBhY2Nlc3MgcmV2aXNpb24gcmVnaXN0ZXJzIG9uIEVTMS4wLgorCSAqIElmIHRoZSBwcm9jZXNzb3IgdHlwZSBpcyBDb3J0ZXgtQTggYW5kIHRoZSByZXZpc2lvbiBpcyAweDAKKwkgKiBpdCBtZWFucyBpdHMgQ29ydGV4IHIwcDAgd2hpY2ggaXMgMzQzMCBFUzEuMC4KKwkgKi8KKwljcHVpZCA9IHJlYWRfY3B1aWQoQ1BVSURfSUQpOworCWlmICgoKChjcHVpZCA+PiA0KSAmIDB4ZmZmKSA9PSAweGMwOCkgJiYgKChjcHVpZCAmIDB4ZikgPT0gMHgwKSkgeworCQlvbWFwX3JldmlzaW9uID0gT01BUDM0MzBfUkVWX0VTMV8wOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIERldGVjdGlvbiBmb3IgMzR4eCBFUzIuMCBhbmQgYWJvdmUgY2FuIGJlIGRvbmUgd2l0aCBqdXN0CisJICogaGF3a2V5ZSBhbmQgcmV2LiBTZWUgVFJNIDEuNS4yIERldmljZSBJZGVudGlmaWNhdGlvbi4KKwkgKiBOb3RlIHRoYXQgcmV2IGRvZXMgbm90IG1hcCBkaXJlY3RseSB0byBvdXIgZGVmaW5lZCBwcm9jZXNzb3IKKwkgKiByZXZpc2lvbiBudW1iZXJzIGFzIEVTMS4wIHVzZXMgdmFsdWUgMC4KKwkgKi8KKwlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKKwloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CisJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweGZmOworCisJaWYgKGhhd2tleWUgPT0gMHhiN2FlKSB7CisJCXN3aXRjaCAocmV2KSB7CisJCWNhc2UgMDoKKwkJCW9tYXBfcmV2aXNpb24gPSBPTUFQMzQzMF9SRVZfRVMyXzA7CisJCQlyZXZfbmFtZSA9ICJFUzIuMCI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJb21hcF9yZXZpc2lvbiA9IE9NQVAzNDMwX1JFVl9FUzJfMTsKKwkJCXJldl9uYW1lID0gIkVTMi4xIjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlvbWFwX3JldmlzaW9uID0gT01BUDM0MzBfUkVWX0VTM18wOworCQkJcmV2X25hbWUgPSAiRVMzLjAiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBVc2UgdGhlIGxhdGVzdCBrbm93biByZXZpc2lvbiBhcyBkZWZhdWx0ICovCisJCQlvbWFwX3JldmlzaW9uID0gT01BUDM0MzBfUkVWX0VTM18wOworCQkJcmV2X25hbWUgPSAiVW5rbm93biByZXZpc2lvblxuIjsKKwkJfQorCX0KKworb3V0OgorCXByX2luZm8oIk9NQVAlMDR4ICVzXG4iLCBvbWFwX3JldigpID4+IDE2LCByZXZfbmFtZSk7Cit9CisKKy8qCisgKiBUcnkgdG8gZGV0ZWN0IHRoZSBleGFjdCByZXZpc2lvbiBvZiB0aGUgb21hcCB3ZSdyZSBydW5uaW5nIG9uCisgKi8KK3ZvaWQgX19pbml0IG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpCit7CisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaWRlYSBhYm91dCB0aGUgcHJvY2Vzc29yIHJldmlzaW9uIHNldAorCSAqIGVhcmxpZXIgd2l0aCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoKS4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXAyNHh4X2NoZWNrX3JldmlzaW9uKCk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXAzNHh4X2NoZWNrX3JldmlzaW9uKCk7CisJZWxzZQorCQlwcl9lcnIoIk9NQVAgcmV2aXNpb24gdW5rbm93biwgcGxlYXNlIGZpeCFcbiIpOworCisJLyoKKwkgKiBPSywgbm93IHdlIGtub3cgdGhlIGV4YWN0IHJldmlzaW9uLiBJbml0aWFsaXplIG9tYXBfY2hpcCBiaXRzCisJICogZm9yIHBvd2VyZG93bWFpbiBhbmQgY2xvY2tkb21haW4gY29kZS4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKKwkJLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMjQzMEVTMi4xIGFuZCAyNDMwLWFsbCAqLworCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMjQzMDsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7CisJCS8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDI0MjBFUzIuMS4xIGFuZCAyNDIwLWFsbCAqLworCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMjQyMDsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7CisJCW9tYXBfY2hpcC5vYyA9IENISVBfSVNfT01BUDM0MzA7CisJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMxOworCQllbHNlIGlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQorCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzI7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJVbmluaXRpYWxpemVkIG9tYXBfY2hpcCwgcGxlYXNlIGZpeCFcbiIpOworCX0KK30KKworLyoKKyAqIFNldCB1cCB0aGluZ3MgZm9yIG1hcF9pbyBhbmQgcHJvY2Vzc29yIGRldGVjdGlvbiBsYXRlciBvbi4gR2V0cyBjYWxsZWQKKyAqIHByZXR0eSBtdWNoIGZpcnN0IHRoaW5nIGZyb20gYm9hcmQgaW5pdC4gRm9yIG11bHRpLW9tYXAsIHRoaXMgZ2V0cworICogY3B1X2lzX29tYXB4eHh4KCkgd29ya2luZyBhY2N1cmF0ZWx5IGVub3VnaCBmb3IgbWFwX2lvLiBUaGVuIHdlJ2xsIHRyeSB0bworICogZGV0ZWN0IHRoZSBleGFjdCByZXZpc2lvbiBsYXRlciBvbiBpbiBvbWFwMl9kZXRlY3RfcmV2aXNpb24oKSBvbmNlIG1hcF9pbworICogaXMgZG9uZS4KKyAqLwogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfdGFwKHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCiB7Ci0JY2xhc3MgPSBvbWFwMl9nbG9iYWxzLT5jbGFzczsKKwlvbWFwX3JldmlzaW9uID0gb21hcDJfZ2xvYmFscy0+Y2xhc3M7CiAJdGFwX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT50YXA7CiAKLQlpZiAoY2xhc3MgPT0gMHgzNDMwKQorCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJdGFwX3Byb2RfaWQgPSAweDAyMTA7CiAJZWxzZQogCQl0YXBfcHJvZF9pZCA9IDB4MDIwODsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCmluZGV4IGM0MGZjMzcuLjYzNmUyODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBJTlRDX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCTB4MDAxMAogI2RlZmluZSBJTlRDX1NZU1NUQVRVUwkJMHgwMDE0CisjZGVmaW5lIElOVENfU0lSCQkweDAwNDAKICNkZWZpbmUgSU5UQ19DT05UUk9MCQkweDAwNDgKICNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCQkweDAwODgKICNkZWZpbmUgSU5UQ19NSVJfU0VUMAkJMHgwMDhjCkBAIC02MCw2ICs2MSwzMCBAQAogCXJldHVybiBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIHJlZyk7CiB9CiAKK3N0YXRpYyBpbnQgcHJldmlvdXNfaXJxOworCisvKgorICogT24gMzR4eCB3ZSBjYW4gZ2V0IG9jY2FzaW9uYWwgc3B1cmlvdXMgaW50ZXJydXB0cyBpZiB0aGUgYWNrIGZyb20KKyAqIGFuIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90IGdldCBwb3N0ZWQgYmVmb3JlIHdlIHVubWFzay4gV2FybiBhYm91dAorICogdGhlIGludGVycnVwdCBoYW5kbGVycyB0aGF0IG5lZWQgdG8gZmx1c2ggcG9zdGVkIHdyaXRlcy4KKyAqLworc3RhdGljIGludCBvbWFwX2NoZWNrX3NwdXJpb3VzKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHNpciwgc3B1cmlvdXM7CisKKwlzaXIgPSBpbnRjX2JhbmtfcmVhZF9yZWcoJmlycV9iYW5rc1swXSwgSU5UQ19TSVIpOworCXNwdXJpb3VzID0gc2lyID4+IDY7CisKKwlpZiAoc3B1cmlvdXMgPiAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGlycSAlaTogMHglMDh4LCBwbGVhc2UgZmx1c2ggIgorCQkJCQkicG9zdGVkIHdyaXRlIGZvciBpcnEgJWlcbiIsCisJCQkJCWlycSwgc2lyLCBwcmV2aW91c19pcnEpOworCQlyZXR1cm4gc3B1cmlvdXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIFhYWDogRklRIGFuZCBhZGRpdGlvbmFsIElOVEMgc3VwcG9ydCAob25seSBNUFUgYXQgdGhlIG1vbWVudCkgKi8KIHN0YXRpYyB2b2lkIG9tYXBfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNzAsNiArOTUsMjAgQEAKIHsKIAlpbnQgb2Zmc2V0ID0gaXJxICYgKH4oSVJRX0JJVFNfUEVSX1JFRyAtIDEpKTsKIAorCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpbnQgc3B1cmlvdXMgPSAwOworCisJCS8qCisJCSAqIElOVF8zNFhYX0dQVDEyX0lSUSBpcyBhbHNvIHRoZSBzcHVyaW91cyBpcnEuIE1heWJlIGJlY2F1c2UKKwkJICogaXQgaXMgdGhlIGhpZ2hlc3QgaXJxIG51bWJlcj8KKwkJICovCisJCWlmIChpcnEgPT0gSU5UXzM0WFhfR1BUMTJfSVJRKQorCQkJc3B1cmlvdXMgPSBvbWFwX2NoZWNrX3NwdXJpb3VzKGlycSk7CisKKwkJaWYgKCFzcHVyaW91cykKKwkJCXByZXZpb3VzX2lycSA9IGlycTsKKwl9CisKIAlpcnEgJj0gKElSUV9CSVRTX1BFUl9SRUcgLSAxKTsKIAogCWludGNfYmFua193cml0ZV9yZWcoMSA8PCBpcnEsICZpcnFfYmFua3NbMF0sIElOVENfTUlSX1NFVDAgKyBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2Y1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cworICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKworI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPUkUpICYmIFwKKwkoZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkpCisKKyNkZWZpbmUgTERPX0NMUgkJCTB4MDAKKyNkZWZpbmUgVlNFTF9TMl9DTFIJCTB4NDAKKworI2RlZmluZSBWTU1DMV9ERVZfR1JQCQkweDI3CisjZGVmaW5lIFZNTUMxX0NMUgkJMHgwMAorI2RlZmluZSBWTU1DMV8zMTVWCQkweDAzCisjZGVmaW5lIFZNTUMxXzMwMFYJCTB4MDIKKyNkZWZpbmUgVk1NQzFfMjg1VgkJMHgwMQorI2RlZmluZSBWTU1DMV8xODVWCQkweDAwCisjZGVmaW5lIFZNTUMxX0RFRElDQVRFRAkJMHgyQQorCisjZGVmaW5lIFZNTUMyX0RFVl9HUlAJCTB4MkIKKyNkZWZpbmUgVk1NQzJfQ0xSCQkweDQwCisjZGVmaW5lIFZNTUMyXzMxNVYJCTB4MGMKKyNkZWZpbmUgVk1NQzJfMzAwVgkJMHgwYgorI2RlZmluZSBWTU1DMl8yODVWCQkweDBhCisjZGVmaW5lIFZNTUMyXzI2MFYJCTB4MDgKKyNkZWZpbmUgVk1NQzJfMTg1VgkJMHgwNgorI2RlZmluZSBWTU1DMl9ERURJQ0FURUQJCTB4MkUKKworI2RlZmluZSBWTU1DX0RFVl9HUlBfUDEJCTB4MjAKKworc3RhdGljIHUxNiBjb250cm9sX3BiaWFzX29mZnNldDsKK3N0YXRpYyB1MTYgY29udHJvbF9kZXZjb25mMV9vZmZzZXQ7CisKKyNkZWZpbmUgSFNNTUNfTkFNRV9MRU4JOQorCitzdGF0aWMgc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciB7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKm1tYzsKKwl1OAkJdHdsX3ZtbWNfZGV2X2dycDsKKwl1OAkJdHdsX21tY19kZWRpY2F0ZWQ7CisJY2hhcgkJbmFtZVtIU01NQ19OQU1FX0xFTl07Cit9IGhzbW1jW10gPSB7CisJeworCQkudHdsX3ZtbWNfZGV2X2dycAkJPSBWTU1DMV9ERVZfR1JQLAorCQkudHdsX21tY19kZWRpY2F0ZWQJCT0gVk1NQzFfREVESUNBVEVELAorCX0sCisJeworCQkudHdsX3ZtbWNfZGV2X2dycAkJPSBWTU1DMl9ERVZfR1JQLAorCQkudHdsX21tY19kZWRpY2F0ZWQJCT0gVk1NQzJfREVESUNBVEVELAorCX0sCit9OworCitzdGF0aWMgaW50IHR3bF9tbWNfY2FyZF9kZXRlY3QoaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHNtbWMpOyBpKyspIHsKKwkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYzsKKworCQltbWMgPSBoc21tY1tpXS5tbWM7CisJCWlmICghbW1jKQorCQkJY29udGludWU7CisJCWlmIChpcnEgIT0gbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpCisJCQljb250aW51ZTsKKworCQkvKiBOT1RFOiBhc3N1bWVzIGNhcmQgZGV0ZWN0IHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCisJCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwl9CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgdHdsX21tY19nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJLyogTk9URTogYXNzdW1lcyB3cml0ZSBwcm90ZWN0IHNpZ25hbCBpcyBhY3RpdmUtaGlnaCAqLworCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLmdwaW9fd3ApOworfQorCisvKgorICogTU1DIFNsb3QgSW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyBpbnQgdHdsX21tY19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluLCAibW1jX2NkIik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgeworCQlpZiAoaHNtbWNbaV0ubmFtZSA9PSBtbWMtPnNsb3RzWzBdLm5hbWUpIHsKKwkJCWhzbW1jW2ldLm1tYyA9IG1tYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlncGlvX2ZyZWUobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKK2RvbmU6CisJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPSAwOworCW1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSBOVUxMOworCisJZGV2X2VycihkZXYsICJlcnIgJWQgY29uZmlndXJpbmcgY2FyZCBkZXRlY3RcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdHdsX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZ3Bpb19mcmVlKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCB0d2xfbW1jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZGlzYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3bF9tbWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWVuYWJsZV9pcnEobW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSB0d2xfbW1jX3N1c3BlbmQJTlVMTAorI2RlZmluZSB0d2xfbW1jX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworLyoKKyAqIFNldHMgdGhlIE1NQyB2b2x0YWdlIGluIHR3bDQwMzAKKyAqLworc3RhdGljIGludCB0d2xfbW1jX3NldF92b2x0YWdlKHN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMsIGludCB2ZGQpCit7CisJaW50IHJldDsKKwl1OCB2bW1jLCBkZXZfZ3JwX3ZhbDsKKworCXN3aXRjaCAoMSA8PCB2ZGQpIHsKKwljYXNlIE1NQ19WRERfMzVfMzY6CisJY2FzZSBNTUNfVkREXzM0XzM1OgorCWNhc2UgTU1DX1ZERF8zM18zNDoKKwljYXNlIE1NQ19WRERfMzJfMzM6CisJY2FzZSBNTUNfVkREXzMxXzMyOgorCWNhc2UgTU1DX1ZERF8zMF8zMToKKwkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKKwkJCXZtbWMgPSBWTU1DMV8zMTVWOworCQllbHNlCisJCQl2bW1jID0gVk1NQzJfMzE1VjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfVkREXzI5XzMwOgorCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQorCQkJdm1tYyA9IFZNTUMxXzMxNVY7CisJCWVsc2UKKwkJCXZtbWMgPSBWTU1DMl8zMDBWOworCQlicmVhazsKKwljYXNlIE1NQ19WRERfMjdfMjg6CisJY2FzZSBNTUNfVkREXzI2XzI3OgorCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQorCQkJdm1tYyA9IFZNTUMxXzI4NVY7CisJCWVsc2UKKwkJCXZtbWMgPSBWTU1DMl8yODVWOworCQlicmVhazsKKwljYXNlIE1NQ19WRERfMjVfMjY6CisJY2FzZSBNTUNfVkREXzI0XzI1OgorCWNhc2UgTU1DX1ZERF8yM18yNDoKKwljYXNlIE1NQ19WRERfMjJfMjM6CisJY2FzZSBNTUNfVkREXzIxXzIyOgorCWNhc2UgTU1DX1ZERF8yMF8yMToKKwkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKKwkJCXZtbWMgPSBWTU1DMV8yODVWOworCQllbHNlCisJCQl2bW1jID0gVk1NQzJfMjYwVjsKKwkJYnJlYWs7CisJY2FzZSBNTUNfVkREXzE2NV8xOTU6CisJCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCisJCQl2bW1jID0gVk1NQzFfMTg1VjsKKwkJZWxzZQorCQkJdm1tYyA9IFZNTUMyXzE4NVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZtbWMgPSAwOworCQlicmVhazsKKwl9CisKKwlpZiAodm1tYykKKwkJZGV2X2dycF92YWwgPSBWTU1DX0RFVl9HUlBfUDE7CS8qIFBvd2VyIHVwICovCisJZWxzZQorCQlkZXZfZ3JwX3ZhbCA9IExET19DTFI7CQkvKiBQb3dlciBkb3duICovCisKKwlyZXQgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKKwkJCQkJZGV2X2dycF92YWwsIGMtPnR3bF92bW1jX2Rldl9ncnApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKKwkJCQkJdm1tYywgYy0+dHdsX21tY19kZWRpY2F0ZWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2xfbW1jMV9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorCQkJCWludCB2ZGQpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzBdOworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocG93ZXJfb24pIHsKKwkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CisJCQlpZiAoKDEgPDwgdmRkKSA+PSBNTUNfVkREXzMwXzMxKQorCQkJCXJlZyB8PSBPTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7CisJCQllbHNlCisJCQkJcmVnICY9IH5PTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7CisJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7CisJCX0KKworCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTDsKKwkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKKwkJfQorCisJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7CisJCXJlZyB8PSBPTUFQMl9QQklBU1NQRUVEQ1RSTDA7CisJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFUFdSRE5aMDsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQlyZXQgPSB0d2xfbW1jX3NldF92b2x0YWdlKGMsIHZkZCk7CisKKwkJLyogMTAwbXMgZGVsYXkgcmVxdWlyZWQgZm9yIFBCSUFTIGNvbmZpZ3VyYXRpb24gKi8KKwkJbXNsZWVwKDEwMCk7CisJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7CisJCXJlZyB8PSAoT01BUDJfUEJJQVNMSVRFUFdSRE5aMCB8IE9NQVAyX1BCSUFTU1BFRURDVFJMMCk7CisJCWlmICgoMSA8PCB2ZGQpIDw9IE1NQ19WRERfMTY1XzE5NSkKKwkJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFVk1PREUwOworCQllbHNlCisJCQlyZWcgfD0gT01BUDJfUEJJQVNMSVRFVk1PREUwOworCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9wYmlhc19vZmZzZXQpOworCX0gZWxzZSB7CisJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7CisJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFUFdSRE5aMDsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQlyZXQgPSB0d2xfbW1jX3NldF92b2x0YWdlKGMsIDApOworCisJCS8qIDEwMG1zIGRlbGF5IHJlcXVpcmVkIGZvciBQQklBUyBjb25maWd1cmF0aW9uICovCisJCW1zbGVlcCgxMDApOworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQlyZWcgfD0gKE9NQVAyX1BCSUFTU1BFRURDVFJMMCB8IE9NQVAyX1BCSUFTTElURVBXUkROWjAgfAorCQkJT01BUDJfUEJJQVNMSVRFVk1PREUwKTsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3bF9tbWMyX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzFdOworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocG93ZXJfb24pIHsKKwkJaWYgKG1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2spIHsKKwkJCXUzMiByZWc7CisKKwkJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX2RldmNvbmYxX29mZnNldCk7CisJCQlyZWcgfD0gT01BUDJfTU1DU0RJTzJBRFBDTEtJU0VMOworCQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKKwkJfQorCQlyZXQgPSB0d2xfbW1jX3NldF92b2x0YWdlKGMsIHZkZCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gdHdsX21tY19zZXRfdm9sdGFnZShjLCAwKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmhzbW1jX2RhdGFbT01BUDM0WFhfTlJfTU1DXSBfX2luaXRkYXRhOworCit2b2lkIF9faW5pdCB0d2w0MDMwX21tY19pbml0KHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmNvbnRyb2xsZXJzKQoreworCXN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gKmM7CisJaW50IG5yX2hzbW1jID0gQVJSQVlfU0laRShoc21tY19kYXRhKTsKKworCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgeworCQljb250cm9sX3BiaWFzX29mZnNldCA9IE9NQVAyNDNYX0NPTlRST0xfUEJJQVNfTElURTsKKwkJY29udHJvbF9kZXZjb25mMV9vZmZzZXQgPSBPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxOworCQlucl9oc21tYyA9IDI7CisJfSBlbHNlIHsKKwkJY29udHJvbF9wYmlhc19vZmZzZXQgPSBPTUFQMzQzWF9DT05UUk9MX1BCSUFTX0xJVEU7CisJCWNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0ID0gT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMTsKKwl9CisKKwlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKKwkJc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqdHdsID0gaHNtbWMgKyBjLT5tbWMgLSAxOworCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKworCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykgeworCQkJcHJfZGVidWcoIk1NQyVkOiBubyBzdWNoIGNvbnRyb2xsZXJcbiIsIGMtPm1tYyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobW1jKSB7CisJCQlwcl9kZWJ1ZygiTU1DJWQ6IGFscmVhZHkgY29uZmlndXJlZFxuIiwgYy0+bW1jKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbW1jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtbWMpIHsKKwkJCXByX2VycigiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW1jIGRldmljZSFcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3ByaW50Zih0d2wtPm5hbWUsICJtbWMlaXNsb3QlaSIsIGMtPm1tYywgMSk7CisJCW1tYy0+c2xvdHNbMF0ubmFtZSA9IHR3bC0+bmFtZTsKKwkJbW1jLT5ucl9zbG90cyA9IDE7CisJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTUgfAorCQkJCQlNTUNfVkREXzI2XzI3IHwgTU1DX1ZERF8yN18yOCB8CisJCQkJCU1NQ19WRERfMjlfMzAgfAorCQkJCQlNTUNfVkREXzMwXzMxIHwgTU1DX1ZERF8zMV8zMjsKKwkJbW1jLT5zbG90c1swXS53aXJlcyA9IGMtPndpcmVzOworCQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKKwkJbW1jLT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwkJLyogbm90ZTogdHdsNDAzMCBjYXJkIGRldGVjdCBHUElPcyBub3JtYWxseSBzd2l0Y2ggVk1NQ3ggLi4uICovCisJCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fY2QpKSB7CisJCQltbWMtPmluaXQgPSB0d2xfbW1jX2xhdGVfaW5pdDsKKwkJCW1tYy0+Y2xlYW51cCA9IHR3bF9tbWNfY2xlYW51cDsKKwkJCW1tYy0+c3VzcGVuZCA9IHR3bF9tbWNfc3VzcGVuZDsKKwkJCW1tYy0+cmVzdW1lID0gdHdsX21tY19yZXN1bWU7CisKKwkJCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7CisJCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSA9IGdwaW9fdG9faXJxKGMtPmdwaW9fY2QpOworCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IHR3bF9tbWNfY2FyZF9kZXRlY3Q7CisJCX0gZWxzZQorCQkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gLUVJTlZBTDsKKworCQkvKiB3cml0ZSBwcm90ZWN0IG5vcm1hbGx5IHVzZXMgYW4gT01BUCBncGlvICovCisJCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fd3ApKSB7CisJCQlncGlvX3JlcXVlc3QoYy0+Z3Bpb193cCwgIm1tY193cCIpOworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoYy0+Z3Bpb193cCk7CisKKwkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IGMtPmdwaW9fd3A7CisJCQltbWMtPnNsb3RzWzBdLmdldF9ybyA9IHR3bF9tbWNfZ2V0X3JvOworCQl9IGVsc2UKKwkJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IC1FSU5WQUw7CisKKwkJLyogTk9URTogIHdlIGFzc3VtZSBPTUFQJ3MgTU1DMSBhbmQgTU1DMiB1c2UKKwkJICogdGhlIFRXTDQwMzAncyBWTU1DMSBhbmQgVk1NQzIsIHJlc3BlY3RpdmVseTsKKwkJICogYW5kIHRoYXQgT01BUCdzIE1NQzMgaXNuJ3QgdXNlZC4KKwkJICovCisKKwkJc3dpdGNoIChjLT5tbWMpIHsKKwkJY2FzZSAxOgorCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMV9zZXRfcG93ZXI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbW1jLT5zbG90c1swXS5zZXRfcG93ZXIgPSB0d2xfbW1jMl9zZXRfcG93ZXI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWhzbW1jX2RhdGFbYy0+bW1jIC0gMV0gPSBtbWM7CisJfQorCisJb21hcDJfaW5pdF9tbWMoaHNtbWNfZGF0YSwgT01BUDM0WFhfTlJfTU1DKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjODA3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogTU1DIGRlZmluaXRpb25zIGZvciBPTUFQMgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyB7CisJdTgJbW1jOwkJLyogY29udHJvbGxlciAxLzIvMyAqLworCXU4CXdpcmVzOwkJLyogMS80Lzggd2lyZXMgKi8KKwlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLworCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCisJaW50CWV4dF9jbG9jazoxOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLworfTsKKworI2lmCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09SRSkgJiYgXAorCShkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKSB8fCBcCisJIGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpKQorCit2b2lkIHR3bDQwMzBfbW1jX2luaXQoc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHR3bDQwMzBfbW1jX2luaXQoc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqaW5mbykKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBiMTM5MzY3Li5kYWNiNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTIwMyw2ICsyMDMsMTUgQEAKIE1VWF9DRkdfMjRYWCgiQUM3XzI0MzBfVVNCMEhTX0RBVEE3IiwJMHgxM0UsCTAsCTAsCTAsCTEpCiAKIC8qIDI0MzAgTWNCU1AgKi8KK01VWF9DRkdfMjRYWCgiQUQ2XzI0MzBfTUNCU1BfQ0xLUyIsCTB4MDExRSwJMCwJMCwJMCwJMSkKKworTVVYX0NGR18yNFhYKCJBQjJfMjQzMF9NQ0JTUDFfQ0xLUiIsCTB4MDExQSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUQ1XzI0MzBfTUNCU1AxX0ZTUiIsCTB4MDExQiwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUExXzI0MzBfTUNCU1AxX0RYIiwJMHgwMTFDLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRjNfMjQzMF9NQ0JTUDFfRFIiLAkweDAxMUQsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFCM18yNDMwX01DQlNQMV9GU1giLAkweDAxMUYsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlk5XzI0MzBfTUNCU1AxX0NMS1giLAkweDAxMjAsCTAsCTAsCTAsCTEpCisKIE1VWF9DRkdfMjRYWCgiQUMxMF8yNDMwX01DQlNQMl9GU1giLAkweDAxMkUsCTEsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIkFEMTZfMjQzMF9NQ0JTUDJfQ0xYIiwJMHgwMTJGLAkxLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJBRTEzXzI0MzBfTUNCU1AyX0RYIiwJMHgwMTMwLAkxLAkwLAkwLAkxKQpAQCAtMjExLDYgKzIyMCwzMSBAQAogTVVYX0NGR18yNFhYKCJBRDE2XzI0MzBfTUNCU1AyX0NMWF9PRkYiLDB4MDEyRiwJMCwJMCwJMCwJMSkKIE1VWF9DRkdfMjRYWCgiQUUxM18yNDMwX01DQlNQMl9EWF9PRkYiLAkweDAxMzAsCTAsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIkFEMTNfMjQzMF9NQ0JTUDJfRFJfT0ZGIiwJMHgwMTMxLAkwLAkwLAkwLAkxKQorCitNVVhfQ0ZHXzI0WFgoIkFDOV8yNDMwX01DQlNQM19DTEtYIiwJMHgwMTAzLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRTRfMjQzMF9NQ0JTUDNfRlNYIiwJMHgwMTA0LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRTJfMjQzMF9NQ0JTUDNfRFIiLAkweDAxMDUsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFGNF8yNDMwX01DQlNQM19EWCIsCTB4MDEwNiwJMCwJMCwJMCwJMSkKKworTVVYX0NGR18yNFhYKCJOM18yNDMwX01DQlNQNF9DTEtYIiwJMHgwMTBCLAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBRDIzXzI0MzBfTUNCU1A0X0RSIiwJMHgwMTBDLAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBQjI1XzI0MzBfTUNCU1A0X0RYIiwJMHgwMTBELAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBQzI1XzI0MzBfTUNCU1A0X0ZTWCIsCTB4MDEwRSwJMSwJMCwJMCwJMSkKKworTVVYX0NGR18yNFhYKCJBRTE2XzI0MzBfTUNCU1A1X0NMS1giLAkweDAwRUQsCTEsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFGMTJfMjQzMF9NQ0JTUDVfRlNYIiwJMHgwMEVELAkxLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJLN18yNDMwX01DQlNQNV9EWCIsCTB4MDBFRiwJMSwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTTFfMjQzMF9NQ0JTUDVfRFIiLAkweDAwRjAsCTEsCTAsCTAsCTEpCisKKy8qIDI0MzAgTUNTUEkxICovCitNVVhfQ0ZHXzI0WFgoIlkxOF8yNDMwX01DU1BJMV9DTEsiLAkweDAxMEYsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFEMTVfMjQzMF9NQ1NQSTFfU0lNTyIsCTB4MDExMCwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiQUUxN18yNDMwX01DU1BJMV9TT01JIiwJMHgwMTExLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJVMV8yNDMwX01DU1BJMV9DUzAiLAkweDAxMTIsCTAsCTAsCTAsCTEpCisKKy8qIFRvdWNoc2NyZWVuIEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiQUYxOV8yNDMwX0dQSU9fODUiLAkweDAxMTMsCTMsCTAsCTAsCTEpCisKIH07CiAKICNkZWZpbmUgT01BUDI0WFhfUElOU19TWglBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpCkBAIC00MTcsNiArNDUxLDE0IEBACiBNVVhfQ0ZHXzM0WFgoIkFDMV8zNDMwX1VTQjNGU19QSFlfTU0zX1RYRU5fTiIsIDB4MThhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQogCisKKy8qIDM0WFggR1BJTyAtIGJpZGlyZWN0aW9uYWwsIHVubGVzcyB0aGUgbmFtZSBoYXMgYW4gIl9PVVQiIHN1ZmZpeC4KKyAqIE5vIGludGVybmFsIHB1bGx1cC9wdWxsZG93biB3aXRob3V0ICJfVVAiIG9yICJfRE9XTiIgc3VmZml4LgorICovCitNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkoyNV8zNFhYX0dQSU8xNzAiLCAweDFjNiwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQogfTsKIAogI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCUFSUkFZX1NJWkUob21hcDM0eHhfcGlucykKQEAgLTQ1Miw3ICs0OTQsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAotaW50IF9faW5pdF9vcl9tb2R1bGUgb21hcDI0eHhfY2ZnX3JlZyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnKQorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyNHh4X2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKIHsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi10dXNiNjAxMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuYwppbmRleCAxMGVmNDY0Li4xNWU1MDkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi10dXNiNjAxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMKQEAgLTEyLDExICsxMiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KIAogCkBAIC0yOTIsMTIgKzI5MiwxMiBAQAogCQkJKTsKIAogCS8qIElSUSAqLwotCXN0YXR1cyA9IG9tYXBfcmVxdWVzdF9ncGlvKGlycSk7CisJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGlycSwgIlRVU0I2MDEwIGlycSIpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCXByaW50ayhlcnJvciwgMywgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaXJxLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChpcnEpOwogCXR1c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gaXJxICsgSUhfR1BJT19CQVNFOwogCiAJLyogc2V0IHVwIG1lbW9yeSB0aW1pbmdzIC4uLiBjYW4gc3BlZWQgdGhlbSB1cCBsYXRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCmluZGV4IDNkNGExYmMuLmVkYzM4ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIHBjaS5vIGdwaW8ubyBpcnEubyBtcHAubworb2JqLXkJCQkJKz0gY29tbW9uLm8gYWRkci1tYXAubyBwY2kubyBpcnEubyBtcHAubwogb2JqLSQoQ09ORklHX01BQ0hfREI4OEY1MjgxKQkrPSBkYjg4ZjUyODEtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY1MTgyKQkrPSByZDg4ZjUxODItc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfS1VST0JPWF9QUk8pCSs9IGt1cm9ib3hfcHJvLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwppbmRleCA0MzcwNjVjLi4wYTYyMzM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCkBAIC03Miw2ICs3Miw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3Qgb3Jpb25fZWhjaV9kYXRhIG9yaW9uNXhfZWhjaV9kYXRhID0gewogCS5kcmFtCQk9ICZvcmlvbjV4X21idXNfZHJhbV9pbmZvLAorCS5waHlfdmVyc2lvbgk9IEVIQ0lfUEhZX09SSU9OLAogfTsKIAogc3RhdGljIHU2NCBlaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKaW5kZXggYTAwMGM3Yy4uNzk4YjlhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaApAQCAtNTEsMTMgKzUxLDYgQEAKIHN0cnVjdCBwY2lfYnVzICpvcmlvbjV4X3BjaV9zeXNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwogaW50IG9yaW9uNXhfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKIAotLyoKLSAqIFZhbGlkIEdQSU8gcGlucyBhY2NvcmRpbmcgdG8gTVBQIHNldHVwLCB1c2VkIGJ5IG1hY2hpbmUtc2V0dXAuCi0gKiAoL21hY2gtb3Jpb24vZ3Bpby5jKS4KLSAqLwotdm9pZCBvcmlvbjV4X2dwaW9fc2V0X3ZhbGlkKHVuc2lnbmVkIHBpbiwgaW50IHZhbGlkKTsKLXZvaWQgZ3Bpb19kaXNwbGF5KHZvaWQpOwkvKiBkZWJ1ZyAqLwotCiBzdHJ1Y3QgbWFjaGluZV9kZXNjOwogc3RydWN0IG1lbWluZm87CiBzdHJ1Y3QgdGFnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCmluZGV4IDNlNjYwOTguLjA3MjJkNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC02NCw5ICs2NSwyMSBAQAogCS5tYXBfaXJxCT0gZG5zMzIzX3BjaV9tYXBfaXJxLAogfTsKIAorc3RhdGljIGludCBfX2luaXQgZG5zMzIzX2Rldl9pZCh2b2lkKQoreworCXUzMiBkZXYsIHJldjsKKworCW9yaW9uNXhfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKworCXJldHVybiBkZXY7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfaW5pdCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX2RuczMyMygpKQorCS8qIFRoZSA1MTgyIGRvZXNuJ3QgcmVhbGx5IHVzZSBpdCdzIFBDSSBidXMsIGFuZCBpbml0aWFsaXNpbmcgUENJCisJICogZ2V0cyBpbiB0aGUgd2F5IG9mIGluaXRpYWxpc2luZyB0aGUgU0FUQSBjb250cm9sbGVyLgorCSAqLworCWlmIChtYWNoaW5lX2lzX2RuczMyMygpICYmIGRuczMyM19kZXZfaWQoKSAhPSBNVjg4RjUxODJfREVWX0lEKQogCQlwY2lfY29tbW9uX2luaXQoJmRuczMyM19wY2kpOwogCiAJcmV0dXJuIDA7CkBAIC03NSwxNCArODgsNiBAQAogc3Vic3lzX2luaXRjYWxsKGRuczMyM19wY2lfaW5pdCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFdGhlcm5ldAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkbnMzMjNfZXRoX2RhdGEgPSB7Ci0JLnBoeV9hZGRyID0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogOE1pQiBOT1IgZmxhc2ggKFNwYW5zaW9uIFMyOUdMMDY0TTkwVEZJUjQpCiAgKgogICogTGF5b3V0IGFzIHVzZWQgYnkgRC1MaW5rOgpAQCAtMTQzLDYgKzE0OCw5MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRuczMyM19ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIgPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKKy8qIGRuczMyM19wYXJzZV9oZXhfKigpIHRha2VuIGZyb20gdHN4MDktY29tbW9uLmM7IHNob3VsZCBhIGNvbW1vbiBjb3B5IG9mIHRoZXNlCisgKiBmdW5jdGlvbnMgYmUga2VwdCBzb21ld2hlcmU/CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRuczMyM19wYXJzZV9oZXhfbmliYmxlKGNoYXIgbikKK3sKKwlpZiAobiA+PSAnMCcgJiYgbiA8PSAnOScpCisJCXJldHVybiBuIC0gJzAnOworCisJaWYgKG4gPj0gJ0EnICYmIG4gPD0gJ0YnKQorCQlyZXR1cm4gbiAtICdBJyArIDEwOworCisJaWYgKG4gPj0gJ2EnICYmIG4gPD0gJ2YnKQorCQlyZXR1cm4gbiAtICdhJyArIDEwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkbnMzMjNfcGFyc2VfaGV4X2J5dGUoY29uc3QgY2hhciAqYikKK3sKKwlpbnQgaGk7CisJaW50IGxvOworCisJaGkgPSBkbnMzMjNfcGFyc2VfaGV4X25pYmJsZShiWzBdKTsKKwlsbyA9IGRuczMyM19wYXJzZV9oZXhfbmliYmxlKGJbMV0pOworCisJaWYgKGhpIDwgMCB8fCBsbyA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAoaGkgPDwgNCkgfCBsbzsKK30KKworc3RhdGljIGludCBfX2luaXQgZG5zMzIzX3JlYWRfbWFjX2FkZHIodm9pZCkKK3sKKwl1X2ludDhfdCBhZGRyWzZdOworCWludCBpOworCWNoYXIgKm1hY19wYWdlOworCisJLyogTUFDIGFkZHJlc3MgaXMgc3RvcmVkIGFzIGEgcmVndWxhciBvbCcgc3RyaW5nIGluIC9kZXYvbXRkYmxvY2s0CisJICogKDB4MDA3ZDAwMDAtMHgwMDgwMDAwMCkgc3RhcnRpbmcgYXQgb2Zmc2V0IDE5NjQ4MCAoMHgyZmY4MCkuCisJICovCisJbWFjX3BhZ2UgPSBpb3JlbWFwKEROUzMyM19OT1JfQk9PVF9CQVNFICsgMHg3ZDAwMDAgKyAxOTY0ODAsIDEwMjQpOworCWlmICghbWFjX3BhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogU2FuaXR5IGNoZWNrIHRoZSBzdHJpbmcgd2UncmUgbG9va2luZyBhdCAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKCoobWFjX3BhZ2UgKyAoaSAqIDMpICsgMikgIT0gJzonKSB7CisJCQlnb3RvIGVycm9yX2ZhaWw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQl7CisJCWludCBieXRlOworCisJCWJ5dGUgPSBkbnMzMjNfcGFyc2VfaGV4X2J5dGUobWFjX3BhZ2UgKyAoaSAqIDMpKTsKKwkJaWYgKGJ5dGUgPCAwKSB7CisJCQlnb3RvIGVycm9yX2ZhaWw7CisJCX0KKworCQlhZGRyW2ldID0gYnl0ZTsKKwl9CisKKwlpb3VubWFwKG1hY19wYWdlKTsKKwlwcmludGsoIkROUzMyMzogRm91bmQgZXRoZXJuZXQgTUFDIGFkZHJlc3M6ICIpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXByaW50aygiJS4yeCVzIiwgYWRkcltpXSwgKGkgPCA1KSA/ICI6IiA6ICIuXG4iKTsKKworCW1lbWNweShkbnMzMjNfZXRoX2RhdGEubWFjX2FkZHIsIGFkZHIsIDYpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2ZhaWw6CisJaW91bm1hcChtYWNfcGFnZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIExFRHMgKHNpbXBsZSAtIGRvZXNuJ3QgdXNlIGhhcmR3YXJlIGJsaW5raW5nIHN1cHBvcnQpCiAgKi8KIApAQCAtMjA3LDEwICsyOTYsMTcgQEAKIAl9LAogfTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTQVRBCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGRuczMyM19zYXRhX2RhdGEgPSB7CisgICAgICAgLm5fcG9ydHMgICAgICAgID0gMiwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsIFNldHVwCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgb3Jpb241eF9tcHBfbW9kZSBkbnMzMjNfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb241eF9tcHBfbW9kZSBkbnMzMjNfbXY4OGY1MTgxX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAgMCwgTVBQX1BDSUVfUlNUX09VVG4gfSwKIAl7ICAxLCBNUFBfR1BJTyB9LAkJLyogcmlnaHQgYW1iZXIgTEVEIChzYXRhIGNoMCkgKi8KIAl7ICAyLCBNUFBfR1BJTyB9LAkJLyogbGVmdCBhbWJlciBMRUQgKHNhdGEgY2gxKSAqLwpAQCAtMjM0LDYgKzMzMCwzMCBAQAogCXsgLTEgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb3Jpb241eF9tcHBfbW9kZSBkbnMzMjNfbXY4OGY1MTgyX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CisJeyAgMCwgTVBQX1VOVVNFRCB9LAorCXsgIDEsIE1QUF9HUElPIH0sCQkvKiByaWdodCBhbWJlciBMRUQgKHNhdGEgY2gwKSAqLworCXsgIDIsIE1QUF9HUElPIH0sCQkvKiBsZWZ0IGFtYmVyIExFRCAoc2F0YSBjaDEpICovCisJeyAgMywgTVBQX1VOVVNFRCB9LAorCXsgIDQsIE1QUF9HUElPIH0sCQkvKiBwb3dlciBidXR0b24gTEVEICovCisJeyAgNSwgTVBQX0dQSU8gfSwJCS8qIHBvd2VyIGJ1dHRvbiBMRUQgKi8KKwl7ICA2LCBNUFBfR1BJTyB9LAkJLyogR01UIEc3NTEtMmYgb3ZlcnRlbXAgKi8KKwl7ICA3LCBNUFBfR1BJTyB9LAkJLyogTTQxVDgwIG5JUlEvT1VUL1NRVyAqLworCXsgIDgsIE1QUF9HUElPIH0sCQkvKiB0cmlnZ2VycyBwb3dlciBvZmYgKi8KKwl7ICA5LCBNUFBfR1BJTyB9LAkJLyogcG93ZXIgYnV0dG9uIHN3aXRjaCAqLworCXsgMTAsIE1QUF9HUElPIH0sCQkvKiByZXNldCBidXR0b24gc3dpdGNoICovCisJeyAxMSwgTVBQX1VOVVNFRCB9LAorCXsgMTIsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTMsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTQsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTUsIE1QUF9TQVRBX0xFRCB9LAorCXsgMTYsIE1QUF9VTlVTRUQgfSwKKwl7IDE3LCBNUFBfVU5VU0VEIH0sCisJeyAxOCwgTVBQX1VOVVNFRCB9LAorCXsgMTksIE1QUF9VTlVTRUQgfSwKKwl7IC0xIH0sCit9OworCiAvKgogICogT24gdGhlIEROUy0zMjMgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB2aWEgSTJDOgogICoKQEAgLTI2NCwxNiArMzg0LDE1IEBACiAJLyogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4gKi8KIAlvcmlvbjV4X2luaXQoKTsKIAotCW9yaW9uNXhfbXBwX2NvbmYoZG5zMzIzX21wcF9tb2Rlcyk7Ci0Jd3JpdGVsKDAsIE1QUF9ERVZfQ1RSTCk7CQkvKiBERVZfRFszMToxNl0gKi8KLQotCS8qCi0JICogQ29uZmlndXJlIHBlcmlwaGVyYWxzLgorCS8qIEp1c3QgdG8gYmUgdHJpY2t5LCB0aGUgNTE4MiBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudAorCSAqIHNldCBvZiBNUFAgbW9kZXMgdG8gdGhlIDUxODEuCiAJICovCi0Jb3Jpb241eF9laGNpMF9pbml0KCk7Ci0Jb3Jpb241eF9ldGhfaW5pdCgmZG5zMzIzX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2kyY19pbml0KCk7Ci0Jb3Jpb241eF91YXJ0MF9pbml0KCk7CisJaWYgKGRuczMyM19kZXZfaWQoKSA9PSBNVjg4RjUxODJfREVWX0lEKQorCQlvcmlvbjV4X21wcF9jb25mKGRuczMyM19tdjg4ZjUxODJfbXBwX21vZGVzKTsKKwllbHNlIHsKKwkJb3Jpb241eF9tcHBfY29uZihkbnMzMjNfbXY4OGY1MTgxX21wcF9tb2Rlcyk7CisJCXdyaXRlbCgwLCBNUFBfREVWX0NUUkwpOwkJLyogREVWX0RbMzE6MTZdICovCisJfQogCiAJLyogc2V0dXAgZmxhc2ggbWFwcGluZwogCSAqIENTMyBob2xkcyBhIDggTUIgU3BhbnNpb24gUzI5R0wwNjRNOTBURklSNApAQCAtMjg4LDYgKzQwNywyMyBAQAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRuczMyM19pMmNfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGRuczMyM19pMmNfZGV2aWNlcykpOwogCisJLyoKKwkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCisJICovCisJaWYgKGRuczMyM19yZWFkX21hY19hZGRyKCkgPCAwKQorCQlwcmludGsoIkROUzMyMzogRmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3NcbiIpOworCisJb3Jpb241eF9laGNpMF9pbml0KCk7CisJb3Jpb241eF9ldGhfaW5pdCgmZG5zMzIzX2V0aF9kYXRhKTsKKwlvcmlvbjV4X2kyY19pbml0KCk7CisJb3Jpb241eF91YXJ0MF9pbml0KCk7CisKKwkvKiBUaGUgNTE4MiBoYXMgaXQncyBTQVRBIGNvbnRyb2xsZXIgb24tY2hpcCwgYW5kIG5lZWRzIGl0J3Mgb3duIGxpdHRsZQorCSAqIGluaXQgcm91dGluZS4KKwkgKi8KKwlpZiAoZG5zMzIzX2Rldl9pZCgpID09IE1WODhGNTE4Ml9ERVZfSUQpCisJCW9yaW9uNXhfc2F0YV9pbml0KCZkbnMzMjNfc2F0YV9kYXRhKTsKKwogCS8qIHJlZ2lzdGVyIGRuczMyMyBzcGVjaWZpYyBwb3dlci1vZmYgbWV0aG9kICovCiAJaWYgKGdwaW9fcmVxdWVzdChETlMzMjNfR1BJT19QT1dFUl9PRkYsICJQT1dFUk9GRiIpICE9IDAgfHwKIAkgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEROUzMyM19HUElPX1BPV0VSX09GRiwgMCkgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZ3Bpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTlkMDg4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9ncGlvLmMKLSAqCi0gKiBHUElPIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBPcmlvbiBTeXN0ZW0gT24gQ2hpcAotICoKLSAqIE1haW50YWluZXI6IFR6YWNoaSBQZXJlbHN0ZWluIDx0emFjaGlAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KLSNpbmNsdWRlICJjb21tb24uaCIKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZFtCSVRTX1RPX0xPTkdTKEdQSU9fTUFYKV07Ci1zdGF0aWMgY29uc3QgY2hhciAqZ3Bpb19sYWJlbFtHUElPX01BWF07ICAvKiBub24gbnVsbCBmb3IgYWxsb2NhdGVkIEdQSU9zICovCi0KLXZvaWQgX19pbml0IG9yaW9uNXhfZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpCi17Ci0JaWYgKHZhbGlkKQotCQlfX3NldF9iaXQocGluLCBncGlvX3ZhbGlkKTsKLQllbHNlCi0JCV9fY2xlYXJfYml0KHBpbiwgZ3Bpb192YWxpZCk7Ci19Ci0KLS8qCi0gKiBHRU5FUklDX0dQSU8gcHJpbWl0aXZlcwotICovCi1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgcGluKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7Ci0JCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBTb21lIGNhbGxlcnMgbWlnaHQgaGF2ZSBub3QgdXNlZCB0aGUgZ3Bpb19yZXF1ZXN0KCksCi0JICogc28gZmxhZyB0aGlzIHBpbiBhcyByZXF1ZXN0ZWQgbm93LgotCSAqLwotCWlmICghZ3Bpb19sYWJlbFtwaW5dKQotCQlncGlvX2xhYmVsW3Bpbl0gPSAiPyI7Ci0KLQlvcmlvbjV4X3NldGJpdHMoR1BJT19JT19DT05GLCAxIDw8IHBpbik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1hc2s7Ci0KLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7Ci0JCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBTb21lIGNhbGxlcnMgbWlnaHQgaGF2ZSBub3QgdXNlZCB0aGUgZ3Bpb19yZXF1ZXN0KCksCi0JICogc28gZmxhZyB0aGlzIHBpbiBhcyByZXF1ZXN0ZWQgbm93LgotCSAqLwotCWlmICghZ3Bpb19sYWJlbFtwaW5dKQotCQlncGlvX2xhYmVsW3Bpbl0gPSAiPyI7Ci0KLQltYXNrID0gMSA8PCBwaW47Ci0Jb3Jpb241eF9jbHJiaXRzKEdQSU9fQkxJTktfRU4sIG1hc2spOwotCWlmICh2YWx1ZSkKLQkJb3Jpb241eF9zZXRiaXRzKEdQSU9fT1VULCBtYXNrKTsKLQllbHNlCi0JCW9yaW9uNXhfY2xyYml0cyhHUElPX09VVCwgbWFzayk7Ci0Jb3Jpb241eF9jbHJiaXRzKEdQSU9fSU9fQ09ORiwgbWFzayk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKLQotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIHBpbikKLXsKLQlpbnQgdmFsLCBtYXNrID0gMSA8PCBwaW47Ci0KLQlpZiAocmVhZGwoR1BJT19JT19DT05GKSAmIG1hc2spCi0JCXZhbCA9IHJlYWRsKEdQSU9fREFUQV9JTikgXiByZWFkbChHUElPX0lOX1BPTCk7Ci0JZWxzZQotCQl2YWwgPSByZWFkbChHUElPX09VVCk7Ci0KLQlyZXR1cm4gdmFsICYgbWFzazsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwotCi12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1hc2sgPSAxIDw8IHBpbjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCW9yaW9uNXhfY2xyYml0cyhHUElPX0JMSU5LX0VOLCBtYXNrKTsKLQlpZiAodmFsdWUpCi0JCW9yaW9uNXhfc2V0Yml0cyhHUElPX09VVCwgbWFzayk7Ci0JZWxzZQotCQlvcmlvbjV4X2NscmJpdHMoR1BJT19PVVQsIG1hc2spOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fc2V0X3ZhbHVlKTsKLQotdm9pZCBvcmlvbjV4X2dwaW9fc2V0X2JsaW5rKHVuc2lnbmVkIHBpbiwgaW50IGJsaW5rKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1hc2sgPSAxIDw8IHBpbjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCW9yaW9uNXhfY2xyYml0cyhHUElPX09VVCwgbWFzayk7Ci0JaWYgKGJsaW5rKQotCQlvcmlvbjV4X3NldGJpdHMoR1BJT19CTElOS19FTiwgbWFzayk7Ci0JZWxzZQotCQlvcmlvbjV4X2NscmJpdHMoR1BJT19CTElOS19FTiwgbWFzayk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0wob3Jpb241eF9ncGlvX3NldF9ibGluayk7Ci0KLWludCBncGlvX3JlcXVlc3QodW5zaWduZWQgcGluLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgewotCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQotCWlmIChncGlvX2xhYmVsW3Bpbl0pIHsKLQkJcHJfZGVidWcoIiVzOiBHUElPICVkIGFscmVhZHkgdXNlZCBhcyAlc1xuIiwKLQkJCSBfX2Z1bmNfXywgcGluLCBncGlvX2xhYmVsW3Bpbl0pOwotCQlyZXQgPSAtRUJVU1k7Ci0JfSBlbHNlCi0JCWdwaW9fbGFiZWxbcGluXSA9IGxhYmVsID8gbGFiZWwgOiAiPyI7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOwotCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBwaW4pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQotCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKLQkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFncGlvX2xhYmVsW3Bpbl0pCi0JCXByX3dhcm5pbmcoIiVzOiBHUElPICVkIGFscmVhZHkgZnJlZWRcbiIsIF9fZnVuY19fLCBwaW4pOwotCWVsc2UKLQkJZ3Bpb19sYWJlbFtwaW5dID0gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKLQotLyogRGVidWcgaGVscGVyICovCi12b2lkIGdwaW9fZGlzcGxheSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEdQSU9fTUFYOyBpKyspIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBpbi0lZDogIiwgaSk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpLCBncGlvX3ZhbGlkKSkgewotCQkJcHJpbnRrKCJub24tR1BJT1xuIik7Ci0JCX0gZWxzZSBpZiAoIWdwaW9fbGFiZWxbaV0pIHsKLQkJCXByaW50aygiR1BJTywgZnJlZVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoIkdQSU8sIHVzZWQgYnkgJXMsICIsIGdwaW9fbGFiZWxbaV0pOwotCQkJaWYgKHJlYWRsKEdQSU9fSU9fQ09ORikgJiAoMSA8PCBpKSkgewotCQkJCXByaW50aygiaW5wdXQsIGFjdGl2ZSAlcywgbGV2ZWwgJXMsIGVkZ2UgJXNcbiIsCi0JCQkJKChyZWFkbChHUElPX0lOX1BPTCkgPj4gaSkgJiAxKSA/ICJsb3ciIDogImhpZ2giLAotCQkJCSgocmVhZGwoR1BJT19MRVZFTF9NQVNLKSA+PiBpKSAmIDEpID8gImVuYWJsZWQiIDogIm1hc2tlZCIsCi0JCQkJKChyZWFkbChHUElPX0VER0VfTUFTSykgPj4gaSkgJiAxKSA/ICJlbmFibGVkIiA6ICJtYXNrZWQiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKCJvdXRwdXQsIHZhbD0lZFxuIiwgKHJlYWRsKEdQSU9fT1VUKSA+PiBpKSAmIDEpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF8wXzdfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlNUFBfMF83X0NUUkwsIHJlYWRsKE1QUF8wXzdfQ1RSTCkpOwotCXByaW50ayhLRVJOX0RFQlVHICJNUFBfOF8xNV9DVFJMICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCU1QUF84XzE1X0NUUkwsIHJlYWRsKE1QUF84XzE1X0NUUkwpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiTVBQXzE2XzE5X0NUUkwgKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJTVBQXzE2XzE5X0NUUkwsIHJlYWRsKE1QUF8xNl8xOV9DVFJMKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk1QUF9ERVZfQ1RSTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlNUFBfREVWX0NUUkwsIHJlYWRsKE1QUF9ERVZfQ1RSTCkpOwotCXByaW50ayhLRVJOX0RFQlVHICJHUElPX09VVCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX09VVCwgcmVhZGwoR1BJT19PVVQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19JT19DT05GICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCUdQSU9fSU9fQ09ORiwgcmVhZGwoR1BJT19JT19DT05GKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fQkxJTktfRU4gKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJR1BJT19CTElOS19FTiwgcmVhZGwoR1BJT19CTElOS19FTikpOwotCXByaW50ayhLRVJOX0RFQlVHICJHUElPX0lOX1BPTCAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0lOX1BPTCwgcmVhZGwoR1BJT19JTl9QT0wpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19EQVRBX0lOICgweCUwOHgpID0gMHglMDh4XG4iLAotCQkJCUdQSU9fREFUQV9JTiwgcmVhZGwoR1BJT19EQVRBX0lOKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkdQSU9fTEVWRUxfTUFTSyAoMHglMDh4KSA9IDB4JTA4eFxuIiwKLQkJCQlHUElPX0xFVkVMX01BU0ssIHJlYWRsKEdQSU9fTEVWRUxfTUFTSykpOwotCXByaW50ayhLRVJOX0RFQlVHICJHUElPX0VER0VfQ0FVU0UgKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJR1BJT19FREdFX0NBVVNFLCByZWFkbChHUElPX0VER0VfQ0FVU0UpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiR1BJT19FREdFX01BU0sgKDB4JTA4eCkgPSAweCUwOHhcbiIsCi0JCQkJR1BJT19FREdFX01BU0ssIHJlYWRsKEdQSU9fRURHRV9NQVNLKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBhOGMxNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggNjVkYzEzNi4uZDgxODJlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTIsMTggKzIsMjYgQEAKICAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZ3Bpby5oCiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi1leHRlcm4gaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBwaW4sIGNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBwaW4pOwotZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBwaW4pOwotZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBwaW4pOwotZXh0ZXJuIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOwotZXh0ZXJuIHZvaWQgb3Jpb241eF9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7Ci1leHRlcm4gdm9pZCBncGlvX2Rpc3BsYXkodm9pZCk7CQkvKiBkZWJ1ZyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fSAorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KKworI2RlZmluZSBHUElPX01BWAkJMzIKKyNkZWZpbmUgR1BJT19PVVQocGluKQkJT1JJT041WF9ERVZfQlVTX1JFRygweDEwMCkKKyNkZWZpbmUgR1BJT19JT19DT05GKHBpbikJT1JJT041WF9ERVZfQlVTX1JFRygweDEwNCkKKyNkZWZpbmUgR1BJT19CTElOS19FTihwaW4pCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMDgpCisjZGVmaW5lIEdQSU9fSU5fUE9MKHBpbikJT1JJT041WF9ERVZfQlVTX1JFRygweDEwYykKKyNkZWZpbmUgR1BJT19EQVRBX0lOKHBpbikJT1JJT041WF9ERVZfQlVTX1JFRygweDExMCkKKyNkZWZpbmUgR1BJT19FREdFX0NBVVNFKHBpbikJT1JJT041WF9ERVZfQlVTX1JFRygweDExNCkKKyNkZWZpbmUgR1BJT19FREdFX01BU0socGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTE4KQorI2RlZmluZSBHUElPX0xFVkVMX01BU0socGluKQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTFjKQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycShpbnQgcGluKQogewpAQCAtMjUsNCArMzMsNSBAQAogCXJldHVybiBpcnEgLSBJUlFfT1JJT041WF9HUElPX1NUQVJUOwogfQogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggZjI0YjI1MS4uYzQ3YjAzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMzgsMTQgKzM4LDkgQEAKIAkJX19pb3VubWFwKGFkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwotfQotCiAjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCV9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCiAjZGVmaW5lIF9fYXJjaF9pb3VubWFwKGEpCV9fYXJjaF9pb3VubWFwKGEpCi0jZGVmaW5lIF9faW8oYSkJCQlfX2lvKGEpCisjZGVmaW5lIF9faW8oYSkJCQlfX3R5cGVzYWZlX2lvKGEpCiAjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBkNWIwZmJmLi5hNmZhOWQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMTMsOCArMTMsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAogI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAogCi0jaW5jbHVkZSAib3Jpb241eC5oIgkvKiBuZWVkIEdQSU9fTUFYICovCi0KIC8qCiAgKiBPcmlvbiBNYWluIEludGVycnVwdCBDb250cm9sbGVyCiAgKi8KQEAgLTU0LDcgKzUyLDcgQEAKICAqIE9yaW9uIEdlbmVyYWwgUHVycG9zZSBQaW5zCiAgKi8KICNkZWZpbmUgSVJRX09SSU9ONVhfR1BJT19TVEFSVAkzMgotI2RlZmluZSBOUl9HUElPX0lSUVMJCUdQSU9fTUFYCisjZGVmaW5lIE5SX0dQSU9fSVJRUwkJMzIKIAogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9PUklPTjVYX0dQSU9fU1RBUlQgKyBOUl9HUElPX0lSUVMpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDU0ZGQ3NmIuLjUyYTI5NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtOSw4ICs5LDQgQEAKIAogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQogCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9vcmlvbjV4LmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL29yaW9uNXguaAppbmRleCA5ZjVjZTFjLi42N2JkYTMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL29yaW9uNXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL29yaW9uNXguaApAQCAtMTM0LDE0ICsxMzQsNiBAQAogI2RlZmluZSBNUFBfMTZfMTlfQ1RSTAkJT1JJT041WF9ERVZfQlVTX1JFRygweDA1MCkKICNkZWZpbmUgTVBQX0RFVl9DVFJMCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MDA4KQogI2RlZmluZSBNUFBfUkVTRVRfU0FNUExFCU9SSU9ONVhfREVWX0JVU19SRUcoMHgwMTApCi0jZGVmaW5lIEdQSU9fT1VUCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTAwKQotI2RlZmluZSBHUElPX0lPX0NPTkYJCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMDQpCi0jZGVmaW5lIEdQSU9fQkxJTktfRU4JCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMDgpCi0jZGVmaW5lIEdQSU9fSU5fUE9MCQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4MTBjKQotI2RlZmluZSBHUElPX0RBVEFfSU4JCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMTApCi0jZGVmaW5lIEdQSU9fRURHRV9DQVVTRQkJT1JJT041WF9ERVZfQlVTX1JFRygweDExNCkKLSNkZWZpbmUgR1BJT19FREdFX01BU0sJCU9SSU9ONVhfREVWX0JVU19SRUcoMHgxMTgpCi0jZGVmaW5lIEdQSU9fTEVWRUxfTUFTSwkJT1JJT041WF9ERVZfQlVTX1JFRygweDExYykKICNkZWZpbmUgREVWX0JBTktfMF9QQVJBTQlPUklPTjVYX0RFVl9CVVNfUkVHKDB4NDVjKQogI2RlZmluZSBERVZfQkFOS18xX1BBUkFNCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0NjApCiAjZGVmaW5lIERFVl9CQU5LXzJfUEFSQU0JT1JJT041WF9ERVZfQlVTX1JFRygweDQ2NCkKQEAgLTE0OSw3ICsxNDEsNiBAQAogI2RlZmluZSBERVZfQlVTX0NUUkwJCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0YzApCiAjZGVmaW5lIERFVl9CVVNfSU5UX0NBVVNFCU9SSU9ONVhfREVWX0JVU19SRUcoMHg0ZDApCiAjZGVmaW5lIERFVl9CVVNfSU5UX01BU0sJT1JJT041WF9ERVZfQlVTX1JFRygweDRkNCkKLSNkZWZpbmUgR1BJT19NQVgJCTMyCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE9yaW9uIENQVSBCcmlkZ2UgUmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaXJxLmMKaW5kZXggNjMyYTM2Zi4uMGNhYWU0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pcnEuYwpAQCAtMTksMTkzICsxOSwzOCBAQAogI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogT3Jpb24gR1BJTyBJUlEKLSAqCi0gKiBHUElPX0lOX1BPTCByZWdpc3RlciBjb250cm9sbHMgd2hldGhlciBHUElPX0RBVEFfSU4gd2lsbCBob2xkIHRoZSBzYW1lCi0gKiB2YWx1ZSBvZiB0aGUgbGluZSBvciB0aGUgb3Bwb3NpdGUgdmFsdWUuCi0gKgotICogTGV2ZWwgSVJRIGhhbmRsZXJzOiBEQVRBX0lOIGlzIHVzZWQgZGlyZWN0bHkgYXMgY2F1c2UgcmVnaXN0ZXIuCi0gKiAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBhcmUgbWFza2VkIGJ5IExFVkVMX01BU0sgcmVnaXN0ZXJzLgotICogRWRnZSBJUlEgaGFuZGxlcnM6ICBDaGFuZ2UgaW4gREFUQV9JTiBhcmUgbGF0Y2hlZCBpbiBFREdFX0NBVVNFLgotICogICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgYXJlIG1hc2tlZCBieSBFREdFX01BU0sgcmVnaXN0ZXJzLgotICogQm90aC1lZGdlIGhhbmRsZXJzOiBTaW1pbGFyIHRvIHJlZ3VsYXIgRWRnZSBoYW5kbGVycywgYnV0IGFsc28gc3dhcHMKLSAqICAgICAgICAgICAgICAgICAgICAgdGhlIHBvbGFyaXR5IHRvIGNhdGNoIHRoZSBuZXh0IGxpbmUgdHJhbnNhY3Rpb24uCi0gKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IG1pZ2h0IG5vdCBwZXJmZWN0bHkKLSAqICAgICAgICAgICAgICAgICAgICAgd29yayBvbiBzb21lIHVzZSBjYXNlcy4KLSAqCi0gKiBFdmVyeSBlaWdodCBHUElPIGxpbmVzIGFyZSBncm91cGVkIChPUidlZCkgYmVmb3JlIGdvaW5nIHVwIHRvIG1haW4KLSAqIGNhdXNlIHJlZ2lzdGVyLgotICoKLSAqICAgICAgICAgICAgICAgICAgICBFREdFICBjYXVzZSAgICBtYXNrCi0gKiAgICAgICAgZGF0YS1pbiAgIC8tLS0tLS0tLXwgfC0tLS0tfCB8LS0tLVwKLSAqICAgICAtLS0tLXwgfC0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gdG8gbWFpbiBjYXVzZSByZWcKLSAqICAgICAgICAgICBYICAgICAgXC0tLS0tLS0tLS0tLS0tLS18IHwtLS0tLwotICogICAgICAgIHBvbGFyaXR5ICAgIExFVkVMICAgICAgICAgIG1hc2sKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIG9yaW9uNXhfZ3Bpb19pcnFfYWNrKHUzMiBpcnEpCitzdGF0aWMgdm9pZCBncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCi0JCS8qCi0JCSAqIE1hc2sgYml0IGZvciBsZXZlbCBpbnRlcnJ1cHQKLQkJICovCi0JCW9yaW9uNXhfY2xyYml0cyhHUElPX0xFVkVMX01BU0ssIDEgPDwgcGluKTsKLQllbHNlCi0JCS8qCi0JCSAqIENsZWFyIGNhc3VlIGJpdCBmb3IgZWdkZSBpbnRlcnJ1cHQKLQkJICovCi0JCW9yaW9uNXhfY2xyYml0cyhHUElPX0VER0VfQ0FVU0UsIDEgPDwgcGluKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpb241eF9ncGlvX2lycV9tYXNrKHUzMiBpcnEpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7Ci0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKQotCQlvcmlvbjV4X2NscmJpdHMoR1BJT19MRVZFTF9NQVNLLCAxIDw8IHBpbik7Ci0JZWxzZQotCQlvcmlvbjV4X2NscmJpdHMoR1BJT19FREdFX01BU0ssIDEgPDwgcGluKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpb241eF9ncGlvX2lycV91bm1hc2sodTMyIGlycSkKLXsKLQlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpCi0JCW9yaW9uNXhfc2V0Yml0cyhHUElPX0xFVkVMX01BU0ssIDEgPDwgcGluKTsKLQllbHNlCi0JCW9yaW9uNXhfc2V0Yml0cyhHUElPX0VER0VfTUFTSywgMSA8PCBwaW4pOwotfQotCi1zdGF0aWMgaW50IG9yaW9uNXhfZ3Bpb19zZXRfaXJxX3R5cGUodTMyIGlycSwgdTMyIHR5cGUpCi17Ci0JaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JaWYgKChyZWFkbChHUElPX0lPX0NPTkYpICYgKDEgPDwgcGluKSkgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm9yaW9uNXhfZ3Bpb19zZXRfaXJxX3R5cGUgZmFpbGVkICIKLQkJCQkiKGlycSAlZCwgcGluICVkKS5cbiIsIGlycSwgcGluKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKLQkJb3Jpb241eF9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCQlvcmlvbjV4X3NldGJpdHMoR1BJT19JTl9QT0wsICgxIDw8IHBpbikpOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQkJb3Jpb241eF9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCQlvcmlvbjV4X3NldGJpdHMoR1BJT19JTl9QT0wsICgxIDw8IHBpbikpOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0JCS8qCi0JCSAqIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwKLQkJICovCi0JCWlmICgocmVhZGwoR1BJT19JTl9QT0wpIF4gcmVhZGwoR1BJT19EQVRBX0lOKSkKLQkJICAgICYgKDEgPDwgcGluKSkKLQkJCW9yaW9uNXhfc2V0Yml0cyhHUElPX0lOX1BPTCwgKDEgPDwgcGluKSk7IC8qIGZhbGxpbmcgKi8KLQkJZWxzZQotCQkJb3Jpb241eF9jbHJiaXRzKEdQSU9fSU5fUE9MLCAoMSA8PCBwaW4pKTsgLyogcmlzaW5nICovCi0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IGlycT0lZCAodHlwZT0lZClcbiIsIGlycSwgdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKLQlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvcmlvbjV4X2dwaW9faXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIk9yaW9uLUlSUS1HUElPIiwKLQkuYWNrCQk9IG9yaW9uNXhfZ3Bpb19pcnFfYWNrLAotCS5tYXNrCQk9IG9yaW9uNXhfZ3Bpb19pcnFfbWFzaywKLQkudW5tYXNrCQk9IG9yaW9uNXhfZ3Bpb19pcnFfdW5tYXNrLAotCS5zZXRfdHlwZQk9IG9yaW9uNXhfZ3Bpb19zZXRfaXJxX3R5cGUsCi19OwotCi1zdGF0aWMgdm9pZCBvcmlvbjV4X2dwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXUzMiBjYXVzZSwgb2ZmcywgcGluOwotCiAJQlVHX09OKGlycSA8IElSUV9PUklPTjVYX0dQSU9fMF83IHx8IGlycSA+IElSUV9PUklPTjVYX0dQSU9fMjRfMzEpOwotCW9mZnMgPSAoaXJxIC0gSVJRX09SSU9ONVhfR1BJT18wXzcpICogODsKLQljYXVzZSA9IChyZWFkbChHUElPX0RBVEFfSU4pICYgcmVhZGwoR1BJT19MRVZFTF9NQVNLKSkgfAotCQkocmVhZGwoR1BJT19FREdFX0NBVVNFKSAmIHJlYWRsKEdQSU9fRURHRV9NQVNLKSk7CiAKLQlmb3IgKHBpbiA9IG9mZnM7IHBpbiA8IG9mZnMgKyA4OyBwaW4rKykgewotCQlpZiAoY2F1c2UgJiAoMSA8PCBwaW4pKSB7Ci0JCQlpcnEgPSBncGlvX3RvX2lycShwaW4pOwotCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCQkJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKLQkJCQkvKiBTd2FwIHBvbGFyaXR5IChyYWNlIHdpdGggR1BJTyBsaW5lKSAqLwotCQkJCXUzMiBwb2xhcml0eSA9IHJlYWRsKEdQSU9fSU5fUE9MKTsKLQkJCQlwb2xhcml0eSBePSAxIDw8IHBpbjsKLQkJCQl3cml0ZWwocG9sYXJpdHksIEdQSU9fSU5fUE9MKTsKLQkJCX0KLQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCQl9Ci0JfQorCW9yaW9uX2dwaW9faXJxX2hhbmRsZXIoKGlycSAtIElSUV9PUklPTjVYX0dQSU9fMF83KSA8PCAzKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9yaW9uNXhfaW5pdF9ncGlvX2lycSh2b2lkKQordm9pZCBfX2luaXQgb3Jpb241eF9pbml0X2lycSh2b2lkKQogewogCWludCBpOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCW9yaW9uX2lycV9pbml0KDAsICh2b2lkIF9faW9tZW0gKilNQUlOX0lSUV9NQVNLKTsKIAogCS8qCiAJICogTWFzayBhbmQgY2xlYXIgR1BJTyBJUlEgaW50ZXJydXB0cwogCSAqLwotCXdyaXRlbCgweDAsIEdQSU9fTEVWRUxfTUFTSyk7Ci0Jd3JpdGVsKDB4MCwgR1BJT19FREdFX01BU0spOwotCXdyaXRlbCgweDAsIEdQSU9fRURHRV9DQVVTRSk7CisJd3JpdGVsKDB4MCwgR1BJT19MRVZFTF9NQVNLKDApKTsKKwl3cml0ZWwoMHgwLCBHUElPX0VER0VfTUFTSygwKSk7CisJd3JpdGVsKDB4MCwgR1BJT19FREdFX0NBVVNFKDApKTsKIAogCS8qCiAJICogUmVnaXN0ZXIgY2hhaW5lZCBsZXZlbCBoYW5kbGVycyBmb3IgR1BJTyBJUlFzIGJ5IGRlZmF1bHQuCiAJICogVXNlciBjYW4gdXNlIHNldF90eXBlKCkgaWYgaGUgd2FudHMgdG8gdXNlIGVkZ2UgdHlwZXMgaGFuZGxlcnMuCiAJICovCiAJZm9yIChpID0gSVJRX09SSU9ONVhfR1BJT19TVEFSVDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJm9yaW9uNXhfZ3Bpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfY2hpcChpLCAmb3Jpb25fZ3Bpb19pcnFfbGV2ZWxfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJZGVzYyA9IGlycV9kZXNjICsgaTsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJaXJxX2Rlc2NbaV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKIAl9Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18wXzcsIG9yaW9uNXhfZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT184XzE1LCBvcmlvbjV4X2dwaW9faXJxX2hhbmRsZXIpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTjVYX0dQSU9fMTZfMjMsIG9yaW9uNXhfZ3Bpb19pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18yNF8zMSwgb3Jpb241eF9ncGlvX2lycV9oYW5kbGVyKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBPcmlvbiBNYWluIElSUQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBfX2luaXQgb3Jpb241eF9pbml0X21haW5faXJxKHZvaWQpCi17Ci0Jb3Jpb25faXJxX2luaXQoMCwgKHZvaWQgX19pb21lbSAqKU1BSU5fSVJRX01BU0spOwotfQotCi12b2lkIF9faW5pdCBvcmlvbjV4X2luaXRfaXJxKHZvaWQpCi17Ci0Jb3Jpb241eF9pbml0X21haW5faXJxKCk7Ci0Jb3Jpb241eF9pbml0X2dwaW9faXJxKCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18wXzcsIGdwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9PUklPTjVYX0dQSU9fOF8xNSwgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18xNl8yMywgZ3Bpb19pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX09SSU9ONVhfR1BJT18yNF8zMSwgZ3Bpb19pcnFfaGFuZGxlcik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXBwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXBwLmMKaW5kZXggNjQwZWEyYS4uZTIzYTNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21wcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tcHAuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJtcHAuaCIKQEAgLTE1Miw3ICsxNTMsMTAgQEAKIAkJKnJlZyAmPSB+KDB4ZiA8PCBzaGlmdCk7CiAJCSpyZWcgfD0gKG51bV90eXBlICYgMHhmKSA8PCBzaGlmdDsKIAotCQlvcmlvbjV4X2dwaW9fc2V0X3ZhbGlkKG1vZGUtPm1wcCwgISEobW9kZS0+dHlwZSA9PSBNUFBfR1BJTykpOworCQlpZiAobW9kZS0+dHlwZSA9PSBNUFBfVU5VU0VEICYmIChtb2RlLT5tcHAgPCAxNiB8fCBpc181MTgyKCkpKQorCQkJb3Jpb25fZ3Bpb19zZXRfdW51c2VkKG1vZGUtPm1wcCk7CisKKwkJb3Jpb25fZ3Bpb19zZXRfdmFsaWQobW9kZS0+bXBwLCAhIShtb2RlLT50eXBlID09IE1QUF9HUElPKSk7CiAKIAkJbW9kZSsrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYwppbmRleCBhYzJmNzBlLi40MjVmNzE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCkBAIC0yNSw5ICsyNSw4IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCA1NDQyZDA0Li5mMDk0YmY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTE2LDggKzE2LDYgQEAKIAogI2luY2x1ZGUgInBsYXRmb3JtLmgiCiAKLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweGZmZmZmZmZmCi0KICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CiAKICNkZWZpbmUgRE1BQ19CQVNFCQlJT19BRERSRVNTKFBOWDQwMDhfRE1BX0NPTkZJR19CQVNFKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGM2MjA2ZjIuLmNiZjA5MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKLSNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA1Nzg5YTJkLi4wZTg3NzAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE2LDkgKzE2LDYgQEAKIC8qCiAgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KICAqLwotI2RlZmluZSBQSFlTX09GRlNFVCAgICAgKDB4ODAwMDAwMDApCi0KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSAoKHgpIC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSAoKHgpICsgUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHg4MDAwMDAwMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCBhMDYyMjM1Li44ZWVhNzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTE5LDIwICsxOSwzNCBAQAogY29uZmlnIENQVV9QWEE5MzAKIAlib29sICJQWEE5MzAgKGNvZGVuYW1lIFRhdm9yLVApIgogCitjb25maWcgQ1BVX1BYQTkzNQorCWJvb2wgIlBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KSIKKwogZW5kbWVudQogCiBlbmRpZgogCiBjb25maWcgQVJDSF9HVU1TVElYCi0JYm9vbCAiR3Vtc3RpeCBYU2NhbGUgYm9hcmRzIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQotCSAgR3Vtc3RpeCBGdWxsIEZ1bmN0aW9uIE1pbmF0dXJlIENvbXB1dGVyLgotCi1jb25maWcgTUFDSF9HVU1TVElYX0YKLQlib29sICJCYXNpeCwgQ29ubmV4LCB3cy0yMDBheCwgd3MtNDAwYXggc3lzdGVtcyIKLQlkZXBlbmRzIG9uIEFSQ0hfR1VNU1RJWAorCWJvb2wgIkd1bXN0aXggWFNjYWxlIDI1NSBib2FyZHMiCiAJc2VsZWN0IFBYQTI1eAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24KKwkgIEJhc2l4LCBDb25uZXgsIHdzLTIwMGF4LCB3cy00MDBheCBzeXN0ZW1zCisKK2Nob2ljZQorCXByb21wdCAiR3Vtc3RpeCBDYXJyaWVyL0V4cGFuc2lvbiBCb2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfR1VNU1RJWAorCitjb25maWcgR1VNU1RJWF9BTTIwMEVQRAorCWJvb2wgIkVuYWJsZSBBTTIwMEVQRCBib2FyZCBzdXBwb3J0IgorCitlbmRjaG9pY2UKKworY29uZmlnIE1BQ0hfSU5URUxNT1RFMgorCWJvb2wgIkludGVsIE1vdGUgMiBQbGF0Zm9ybSIKKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCiAKIGNvbmZpZyBBUkNIX0xVQkJPQ0sKIAlib29sICJJbnRlbCBEQlBYQTI1MCBEZXZlbG9wbWVudCBQbGF0Zm9ybSIKQEAgLTE5OSw2ICsyMTMsMTAgQEAKIGNvbmZpZyBUUklaRVBTX1BYQQogCWJvb2wgIlBYQSBiYXNlZCBLZWl0aCB1bmQgS29lcCBUcml6ZXBzIERJTU0tTW9kdWxlcyIKIAorY29uZmlnIE1BQ0hfSDUwMDAKKwlib29sICJIUCBpUEFRIGg1MDAwIgorCXNlbGVjdCBQWEEyNXgKKwogY29uZmlnIE1BQ0hfVFJJWkVQUzQKIAlib29sICJLZWl0aCB1bmQgS29lcCBUcml6ZXBzNCBESU1NLU1vZHVsZSIKIAlkZXBlbmRzIG9uIFRSSVpFUFNfUFhBCkBAIC0yODMsNyArMzAxLDYgQEAKIAlib29sICJNaXRhYyBNaW8gQTcwMSBTdXBwb3J0IgogCXNlbGVjdCBQWEEyN3gKIAlzZWxlY3QgSVdNTVhUCi0Jc2VsZWN0IExFRFNfR1BJTwogCXNlbGVjdCBIQVZFX1BXTQogCXNlbGVjdCBHUElPX1NZU0ZTCiAJaGVscApAQCAtMzQyLDEwICszNTksNiBAQAogCiBlbmRjaG9pY2UKIAotY29uZmlnIE1BQ0hfQU0yMDBFUEQKLQlkZXBlbmRzIG9uIE1BQ0hfR1VNU1RJWF9GCi0JYm9vbCAiRW5hYmxlIEFNMjAwRVBEIGJvYXJkIHN1cHBvcnQiCi0KIGNvbmZpZyBQWEFfRVpYCiAJYm9vbCAiTW90b3JvbGEgRVpYIFBsYXRmb3JtIgogCXNlbGVjdCBQWEEyN3gKQEAgLTM4NiwxNiArMzk5LDI1IEBACiAKIGNvbmZpZyBQWEEyNXgKIAlib29sCisJc2VsZWN0IENQVV9YU0NBTEUKIAloZWxwCiAJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEEyMXgvMjV4LzI2eCB2YXJpYW50cwogCiBjb25maWcgUFhBMjd4CiAJYm9vbAorCXNlbGVjdCBDUFVfWFNDQUxFCiAJaGVscAogCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBMjd4IHZhcmlhbnRzCiAKK2NvbmZpZyBDUFVfUFhBMjZ4CisJYm9vbAorCXNlbGVjdCBQWEEyNXgKKwloZWxwCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEEyNnggKGNvZGVuYW1lIERhbGhhcnQpCisKIGNvbmZpZyBQWEEzeHgKIAlib29sCisJc2VsZWN0IENQVV9YU0MzCiAJaGVscAogCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBM3h4IHZhcmlhbnRzCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggZDY0YzY4Yi4uN2IyOGJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDcgQEAKIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfQVJDSF9HVU1TVElYKQkrPSBndW1zdGl4Lm8KLW9iai0kKENPTkZJR19NQUNIX0FNMjAwRVBEKQkrPSBhbTIwMGVwZC5vCitvYmotJChDT05GSUdfR1VNU1RJWF9BTTIwMEVQRCkJKz0gYW0yMDBlcGQubwogb2JqLSQoQ09ORklHX0FSQ0hfTFVCQk9DSykJKz0gbHViYm9jay5vCiBvYmotJChDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCkgKz0gbHBkMjcwLm8KIG9iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkJKz0gbWFpbnN0b25lLm8KQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19BUkNIX1BYQV9JRFApCSs9IGlkcC5vCiBvYmotJChDT05GSUdfTUFDSF9UUklaRVBTNCkJKz0gdHJpemVwczQubwogb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSSkJKz0gY29saWJyaS5vCitvYmotJChDT05GSUdfTUFDSF9INTAwMCkJKz0gaDUwMDAubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DN3h4KQkrPSBjb3JnaS5vIHNoYXJwc2xfcG0ubyBjb3JnaV9wbS5vCiBvYmotJChDT05GSUdfUFhBX1NIQVJQX0N4eDAwKQkrPSBzcGl0ei5vIHNoYXJwc2xfcG0ubyBzcGl0el9wbS5vCiBvYmotJChDT05GSUdfQ09SR0lfU1NQX0RFUFJFQ0FURUQpCSs9IGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vCkBAIC02OSw2ICs3MCw4IEBACiBvYmotJChDT05GSUdfTUFDSF9DTV9YMzAwKSAgICAgICs9IGNtLXgzMDAubwogb2JqLSQoQ09ORklHX1BYQV9FWlgpICAgICAgICAgICArPSBlengubwogCitvYmotJChDT05GSUdfTUFDSF9JTlRFTE1PVEUyKSAgICs9IGltb3RlMi5vCisKICMgU3VwcG9ydCBmb3IgYmxpbmt5IGxpZ2h0cwogbGVkLXkgOj0gbGVkcy5vCiBsZWQtJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsZWRzLWx1YmJvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2FtMjAwZXBkLmMKaW5kZXggYjk2NTA4NS4uNzdlZTgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTIwMGVwZC5jCkBAIC0zMCw4ICszMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAorI2luY2x1ZGUgPG1hY2gvZ3Vtc3RpeC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAorI2luY2x1ZGUgImdlbmVyaWMuaCIKKwogI2luY2x1ZGUgPHZpZGVvL21ldHJvbm9tZWZiLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFuZWxfdHlwZSA9IDY7CkBAIC0zMzEsNyArMzM1LDE2IEBACiAJLmNsZWFudXAJCT0gYW0yMDBfY2xlYW51cCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFtMjAwX2luaXQodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFtMjAwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU81MV9HUElPLAorCUdQSU80OV9HUElPLAorCUdQSU80OF9HUElPLAorCUdQSU8zMl9HUElPLAorCUdQSU8xN19HUElPLAorCUdQSU8xNl9HUElPLAorfTsKKworaW50IF9faW5pdCBhbTIwMF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMzM5LDYgKzM1Miw4IEBACiAJICogY3JlYXRpb24gZXZlbnRzICovCiAJZmJfcmVnaXN0ZXJfY2xpZW50KCZhbTIwMF9mYl9ub3RpZik7CiAKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShhbTIwMF9waW5fY29uZmlnKSk7CisKIAkvKiByZXF1ZXN0IG91ciBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkcml2ZXIgKi8KIAlyZXF1ZXN0X21vZHVsZSgibWV0cm9ub21lZmIiKTsKIApAQCAtMzY3LDggKzM4Miw2IEBACiBtb2R1bGVfcGFyYW0ocGFuZWxfdHlwZSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbmVsX3R5cGUsICJTZWxlY3QgdGhlIHBhbmVsIHR5cGU6IDYsIDgsIDk3Iik7CiAKLW1vZHVsZV9pbml0KGFtMjAwX2luaXQpOwotCiBNT0RVTEVfREVTQ1JJUFRJT04oImJvYXJkIGRyaXZlciBmb3IgYW0yMDAgbWV0cm9ub21lIGVwZCBraXQiKTsKIE1PRFVMRV9BVVRIT1IoIkpheWEgS3VtYXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCmluZGV4IGNhOGUyMDUuLjQwYjc3NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYwpAQCAtMTIsNTMgKzEyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKIAotc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwotc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfbG9va3VwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkKLQkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiBwLT5kZXYgPT0gZGV2KQotCQkJcmV0dXJuIHA7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQotewotCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlwID0gY2xrX2xvb2t1cChkZXYsIGlkKTsKLQlpZiAoIXApCi0JCXAgPSBjbGtfbG9va3VwKE5VTEwsIGlkKTsKLQlpZiAocCkKLQkJY2xrID0gcDsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlpZiAoIUlTX0VSUihjbGspICYmIGNsay0+b3BzID09IE5VTEwpCi0JCWNsayA9IGNsay0+b3RoZXI7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE2LDM3ICs3OSwyNyBAQAogCS5kaXNhYmxlCT0gY2xrX2NrZW5fZGlzYWJsZSwKIH07CiAKLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBzaXplX3QgbnVtKQordm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQogewogCWludCBpOwogCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWxpc3RfYWRkKCZjbGtzW2ldLm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7CiB9CiAKIGludCBjbGtfYWRkX2FsaWFzKGNoYXIgKmFsaWFzLCBzdHJ1Y3QgZGV2aWNlICphbGlhc19kZXYsIGNoYXIgKmlkLAogCXN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY2xrICpyID0gY2xrX2xvb2t1cChkZXYsIGlkKTsKLQlzdHJ1Y3QgY2xrICpuZXc7CisJc3RydWN0IGNsayAqciA9IGNsa19nZXQoZGV2LCBpZCk7CisJc3RydWN0IGNsa19sb29rdXAgKmw7CiAKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNsayksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbmV3LT5uYW1lID0gYWxpYXM7Ci0JbmV3LT5kZXYgPSBhbGlhc19kZXY7Ci0JbmV3LT5vdGhlciA9IHI7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfYWRkKCZuZXctPm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQorCWwgPSBjbGtkZXZfYWxsb2MociwgYWxpYXMsIGFsaWFzX2RldiA/IGRldl9uYW1lKGFsaWFzX2RldikgOiBOVUxMKTsKKwljbGtfcHV0KHIpOworCWlmICghbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2xrZGV2X2FkZChsKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDczYmU3OTUuLjRlOWM2MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMSw2ICsxLDQgQEAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLXN0cnVjdCBjbGs7CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCiBzdHJ1Y3QgY2xrb3BzIHsKIAl2b2lkCQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CkBAIC05LDkgKzcsNiBAQAogfTsKIAogc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCWNvbnN0IGNoYXIJCSpuYW1lOwotCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJY29uc3Qgc3RydWN0IGNsa29wcwkqb3BzOwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7CiAJdW5zaWduZWQgaW50CQlja2VuOwpAQCAtMjAsNDEgKzE1LDMxIEBACiAJc3RydWN0IGNsawkJKm90aGVyOwogfTsKIAotI2RlZmluZSBJTklUX0NLRU4oX25hbWUsIF9ja2VuLCBfcmF0ZSwgX2RlbGF5LCBfZGV2KQlcCisjZGVmaW5lIElOSVRfQ0xLUkVHKF9jbGssX2Rldm5hbWUsX2Nvbm5hbWUpCQlcCiAJewkJCQkJCVwKLQkJLm5hbWUJPSBfbmFtZSwJCQlcCi0JCS5kZXYJPSBfZGV2LAkJCQlcCisJCS5jbGsJCT0gX2NsaywJCQlcCisJCS5kZXZfaWQJCT0gX2Rldm5hbWUsCQlcCisJCS5jb25faWQJCT0gX2Nvbm5hbWUsCQlcCisJfQorCisjZGVmaW5lIERFRklORV9DS0VOKF9uYW1lLCBfY2tlbiwgX3JhdGUsIF9kZWxheSkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAogCQkub3BzCT0gJmNsa19ja2VuX29wcywJCVwKIAkJLnJhdGUJPSBfcmF0ZSwJCQlcCiAJCS5ja2VuCT0gQ0tFTl8jI19ja2VuLAkJCVwKIAkJLmRlbGF5CT0gX2RlbGF5LAkJCVwKIAl9CiAKLSNkZWZpbmUgSU5JVF9DSyhfbmFtZSwgX2NrZW4sIF9vcHMsIF9kZXYpCQlcCi0JewkJCQkJCVwKLQkJLm5hbWUJPSBfbmFtZSwJCQlcCi0JCS5kZXYJPSBfZGV2LAkJCQlcCisjZGVmaW5lIERFRklORV9DSyhfbmFtZSwgX2NrZW4sIF9vcHMpCQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAogCQkub3BzCT0gX29wcywJCQkJXAogCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCiAJfQogCi0vKgotICogVGhpcyBpcyBhIHBsYWNlaG9sZGVyIHRvIGFsaWFzIG9uZSBjbG9jayBkZXZpY2UrbmFtZSBwYWlyCi0gKiB0byBhbm90aGVyIHN0cnVjdCBjbGsuCi0gKi8KLSNkZWZpbmUgSU5JVF9DS09USEVSKF9uYW1lLCBfb3RoZXIsIF9kZXYpCQlcCi0JewkJCQkJCVwKLQkJLm5hbWUJPSBfbmFtZSwJCQlcCi0JCS5kZXYJPSBfZGV2LAkJCQlcCi0JCS5vdGhlcgk9IF9vdGhlciwJCQlcCi0JfQotCi0jZGVmaW5lIElOSVRfQ0xLKF9uYW1lLCBfb3BzLCBfcmF0ZSwgX2RlbGF5LCBfZGV2KSAgICAgIFwKLQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCS5uYW1lICAgPSBfbmFtZSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCS5kZXYgICAgPSBfZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCS5vcHMgICAgPSBfb3BzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCS5yYXRlICAgPSBfcmF0ZSwgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFRklORV9DTEsoX25hbWUsIF9vcHMsIF9yYXRlLCBfZGVsYXkpCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQlcCisJCS5vcHMJPSBfb3BzLCAJCQlcCisJCS5yYXRlCT0gX3JhdGUsCQkJXAogCQkuZGVsYXkJPSBfZGVsYXksCQkJXAogCX0KIApAQCAtNjQsMjAgKzQ5LDE2IEBACiB2b2lkIGNsa19ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIAogI2lmZGVmIENPTkZJR19QWEEzeHgKLSNkZWZpbmUgUFhBM3h4X0NLRU4oX25hbWUsIF9ja2VuLCBfcmF0ZSwgX2RlbGF5LCBfZGV2KQlcCi0JewkJCQkJCVwKLQkJLm5hbWUJPSBfbmFtZSwJCQlcCi0JCS5kZXYJPSBfZGV2LAkJCQlcCisjZGVmaW5lIERFRklORV9QWEEzX0NLRU4oX25hbWUsIF9ja2VuLCBfcmF0ZSwgX2RlbGF5KQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQlcCiAJCS5vcHMJPSAmY2xrX3B4YTN4eF9ja2VuX29wcywJCVwKIAkJLnJhdGUJPSBfcmF0ZSwJCQlcCiAJCS5ja2VuCT0gQ0tFTl8jI19ja2VuLAkJCVwKIAkJLmRlbGF5CT0gX2RlbGF5LAkJCVwKIAl9CiAKLSNkZWZpbmUgUFhBM3h4X0NLKF9uYW1lLCBfY2tlbiwgX29wcywgX2RldikJCVwKLQl7CQkJCQkJXAotCQkubmFtZQk9IF9uYW1lLAkJCVwKLQkJLmRldgk9IF9kZXYsCQkJCVwKKyNkZWZpbmUgREVGSU5FX1BYQTNfQ0soX25hbWUsIF9ja2VuLCBfb3BzKQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAogCQkub3BzCT0gX29wcywJCQkJXAogCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCiAJfQpAQCAtODcsNyArNjgsNyBAQAogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqKTsKICNlbmRpZgogCi12b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgc2l6ZV90IG51bSk7Cit2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pOwogaW50IGNsa19hZGRfYWxpYXMoY2hhciAqYWxpYXMsIHN0cnVjdCBkZXZpY2UgKmFsaWFzX2RldiwgY2hhciAqaWQsCiAJc3RydWN0IGRldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCmluZGV4IDBiM2NlM2IuLmQ5OWZkOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMKQEAgLTIxMCwxMCArMjEwLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGdlbmVyaWNfc3RuXzMyMHgyNDAgPSB7CiAJLm1vZGVzCQk9ICZnZW5lcmljX3N0bl8zMjB4MjQwX21vZGUsCiAJLm51bV9tb2Rlcwk9IDEsCi0JLmxjY3IwCQk9IDAsCi0JLmxjY3IzCQk9IChMQ0NSM19QaXhDbGtEaXYoMHgwMykgfAotCQkJICAgTENDUjNfQWNiKDB4ZmYpIHwKLQkJCSAgIExDQ1IzX1BDUCksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1NUTl84QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMIHxcCisJCQkgIExDRF9BQ19CSUFTX0ZSRVEoMHhmZiksCiAJLmNtYXBfaW52ZXJzZQk9IDAsCiAJLmNtYXBfc3RhdGljCT0gMCwKIH07CkBAIC0yMzYsMTAgKzIzNCw4IEBACiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBnZW5lcmljX3RmdF82NDB4NDgwID0gewogCS5tb2RlcwkJPSAmZ2VuZXJpY190ZnRfNjQweDQ4MF9tb2RlLAogCS5udW1fbW9kZXMJPSAxLAotCS5sY2NyMAkJPSAoTENDUjBfUEFTKSwKLQkubGNjcjMJCT0gKExDQ1IzX1BpeENsa0RpdigweDAxKSB8Ci0JCQkgICBMQ0NSM19BY2IoMHhmZikgfAotCQkJICAgTENDUjNfUENQKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzhCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwgfFwKKwkJCSAgTENEX0FDX0JJQVNfRlJFUSgweGZmKSwKIAkuY21hcF9pbnZlcnNlCT0gMCwKIAkuY21hcF9zdGF0aWMJPSAwLAogfTsKQEAgLTI2Myw5ICsyNTksNyBAQAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gZ2VuZXJpY19jcnRfNjQweDQ4MCA9IHsKIAkubW9kZXMJCT0gJmdlbmVyaWNfY3J0XzY0MHg0ODBfbW9kZSwKIAkubnVtX21vZGVzCT0gMSwKLQkubGNjcjAJCT0gKExDQ1IwX1BBUyksCi0JLmxjY3IzCQk9IChMQ0NSM19QaXhDbGtEaXYoMHgwMSkgfAotCQkJICAgTENDUjNfQWNiKDB4ZmYpKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzhCUFAgfCBMQ0RfQUNfQklBU19GUkVRKDB4ZmYpLAogCS5jbWFwX2ludmVyc2UJPSAwLAogCS5jbWFwX3N0YXRpYwk9IDAsCiB9OwpAQCAtMjg5LDkgKzI4Myw3IEBACiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBnZW5lcmljX2NydF84MDB4NjAwID0gewogCS5tb2RlcwkJPSAmZ2VuZXJpY19jcnRfODAweDYwMF9tb2RlLAogCS5udW1fbW9kZXMJPSAxLAotCS5sY2NyMAkJPSAoTENDUjBfUEFTKSwKLQkubGNjcjMJCT0gKExDQ1IzX1BpeENsa0RpdigweDAyKSB8Ci0JCQkgICBMQ0NSM19BY2IoMHhmZikpLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfOEJQUCB8IExDRF9BQ19CSUFTX0ZSRVEoMHhmZiksCiAJLmNtYXBfaW52ZXJzZQk9IDAsCiAJLmNtYXBfc3RhdGljCT0gMCwKIH07CkBAIC0zMTQsMTAgKzMwNiw3IEBACiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBnZW5lcmljX3RmdF8zMjB4MjQwID0gewogCS5tb2RlcwkJPSAmZ2VuZXJpY190ZnRfMzIweDI0MF9tb2RlLAogCS5udW1fbW9kZXMJPSAxLAotCS5sY2NyMAkJPSAoTENDUjBfUEFTKSwKLQkubGNjcjMJCT0gKExDQ1IzX1BpeENsa0RpdigweDA2KSB8Ci0JCQkgICBMQ0NSM19BY2IoMHhmZikgfAotCQkJICAgTENDUjNfUENQKSwKKwkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX0FDX0JJQVNfRlJFUSgweGZmKSwKIAkuY21hcF9pbnZlcnNlCT0gMCwKIAkuY21hcF9zdGF0aWMJPSAwLAogfTsKQEAgLTM0MSw5ICszMzAsNyBAQAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gZ2VuZXJpY19zdG5fNjQweDQ4MCA9IHsKIAkubW9kZXMJCT0gJmdlbmVyaWNfc3RuXzY0MHg0ODBfbW9kZSwKIAkubnVtX21vZGVzCT0gMSwKLQkubGNjcjAJCT0gMCwKLQkubGNjcjMJCT0gKExDQ1IzX1BpeENsa0RpdigweDAyKSB8Ci0JCQkgICBMQ0NSM19BY2IoMHhmZikpLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9TVE5fOEJQUCB8IExDRF9BQ19CSUFTX0ZSRVEoMHhmZiksCiAJLmNtYXBfaW52ZXJzZQk9IDAsCiAJLmNtYXBfc3RhdGljCT0gMCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKaW5kZXggZGViNDZjZC4uZmYwYzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgpAQCAtMTM3LDYgKzEzNiwxMCBAQAogCUdQSU84Ml9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogTU1DIENEICovCiAJR1BJTzg1X0dQSU8sCQkJLyogTU1DIFdQICovCiAJR1BJTzk5X0dQSU8sCQkJLyogRXRoZXJuZXQgSVJRICovCisKKwkvKiBTdGFuZGFyZCBJMkMgKi8KKwlHUElPMjFfSTJDX1NDTCwKKwlHUElPMjJfSTJDX1NEQSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApIHx8IGRlZmluZWQoQ09ORklHX0RNOTAwMF9NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCA2NTU1OGQ2Li5jNWUyOGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KQEAgLTU0MSwxMSArNTQyLDQyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29yZ2lfaW5pdF9zcGkodm9pZCkge30KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9yb21fcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0iQm9vdCBQUk9NIEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CT0gMHgwMDEyMDAwMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzaGFycHNsX3JvbV9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc2hhcnBzbF9yb21fcGFydHMpLAorCS5wYXJ0cwkJPSBzaGFycHNsX3JvbV9wYXJ0cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hhcnBzbF9yb21fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDAwMDAwMDAwLAorCQkuZW5kCT0gMHgwMDdmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoYXJwc2xfcm9tX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAtMSwKKwkucmVzb3VyY2UgPSBzaGFycHNsX3JvbV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHNoYXJwc2xfcm9tX3Jlc291cmNlcyksCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcm9tX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNvcmdpc2Nvb3BfZGV2aWNlLAogCSZjb3JnaWZiX2RldmljZSwKIAkmY29yZ2lrYmRfZGV2aWNlLAogCSZjb3JnaWxlZF9kZXZpY2UsCisJJnNoYXJwc2xfcm9tX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIGNvcmdpX3Bvd2Vyb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwppbmRleCAxZjI3MmVhLi43NzFkZDRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogLyogRGVmaW5lIHRoZSByZWZyZXNoIHBlcmlvZCBpbiBtU2VjIGZvciB0aGUgU0RSQU0gYW5kIHRoZSBudW1iZXIgb2Ygcm93cyAqLwogI2RlZmluZSBTRFJBTV9UUkVGCTY0CS8qIHN0YW5kYXJkIDY0bXMgU0RSQU0gKi8KLSNkZWZpbmUgU0RSQU1fUk9XUwk0MDk2CS8qIDY0TUI9ODE5MiAzMk1CPTQwOTYgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2RyYW1fcm93czsKIAogI2RlZmluZSBDQ0xLQ0ZHX1RVUkJPCQkweDEKICNkZWZpbmUgQ0NMS0NGR19GQ1MJCTB4MgpAQCAtNzMsNiArNzMsOSBAQAogI2RlZmluZSBNRFJFRlJfREIyX01BU0sJCShNRFJFRlJfSzJEQjIgfCBNRFJFRlJfSzFEQjIpCiAjZGVmaW5lIE1EUkVGUl9EUklfTUFTSwkJMHhGRkYKIAorI2RlZmluZSBNRENORkdfRFJBQzIobWRjbmZnKSAoKChtZGNuZmcpID4+IDIxKSAmIDB4MykKKyNkZWZpbmUgTURDTkZHX0RSQUMwKG1kY25mZykgKCgobWRjbmZnKSA+PiA1KSAmIDB4MykKKwogLyoKICAqIFBYQTI1NSBkZWZpbml0aW9ucwogICovCkBAIC0xMDksNiArMTEyLDEwIEBACiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlCiAJcHhhMjU1X3R1cmJvX2ZyZXFfdGFibGVbTlVNX1BYQTI1eF9UVVJCT19GUkVRUysxXTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBweGEyNTVfdHVyYm9fdGFibGU7Cittb2R1bGVfcGFyYW0ocHhhMjU1X3R1cmJvX3RhYmxlLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHhhMjU1X3R1cmJvX3RhYmxlLCAiU2VsZWN0cyB0aGUgZnJlcXVlbmN5IHRhYmxlICgwID0gcnVuIHRhYmxlLCAhMCA9IHR1cmJvIHRhYmxlKSIpOworCiAvKgogICogUFhBMjcwIGRlZmluaXRpb25zCiAgKgpAQCAtMTU4LDIyICsxNjUsMTYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbyk7CiAKLXN0YXRpYyB2b2lkIGZpbmRfZnJlcV90YWJsZXMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCi0JCQkgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKmZyZXFfdGFibGUsCitzdGF0aWMgdm9pZCBmaW5kX2ZyZXFfdGFibGVzKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKmZyZXFfdGFibGUsCiAJCQkgICAgIHB4YV9mcmVxc190ICoqcHhhX2ZyZXFzKQogewogCWlmIChjcHVfaXNfcHhhMjV4KCkpIHsKLQkJaWYgKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFKSB7CisJCWlmICghcHhhMjU1X3R1cmJvX3RhYmxlKSB7CiAJCQkqcHhhX2ZyZXFzID0gcHhhMjU1X3J1bl9mcmVxczsKIAkJCSpmcmVxX3RhYmxlID0gcHhhMjU1X3J1bl9mcmVxX3RhYmxlOwotCQl9IGVsc2UgaWYgKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRSkgeworCQl9IGVsc2UgewogCQkJKnB4YV9mcmVxcyA9IHB4YTI1NV90dXJib19mcmVxczsKIAkJCSpmcmVxX3RhYmxlID0gcHhhMjU1X3R1cmJvX2ZyZXFfdGFibGU7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoIkNQVSBQWEE6IFVua25vd24gcG9saWN5IGZvdW5kLiAiCi0JCQkgICAgICAgIlVzaW5nIENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFXG4iKTsKLQkJCSpweGFfZnJlcXMgPSBweGEyNTVfcnVuX2ZyZXFzOwotCQkJKmZyZXFfdGFibGUgPSBweGEyNTVfcnVuX2ZyZXFfdGFibGU7CiAJCX0KIAl9CiAJaWYgKGNwdV9pc19weGEyN3goKSkgewpAQCAtMTk0LDE0ICsxOTUsMjggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRfc2RyYW1fcm93cyh2b2lkKQoreworCXVpbnQzMl90IG1kY25mZyA9IE1EQ05GRzsKKwl1bnNpZ25lZCBpbnQgZHJhYzIgPSAwLCBkcmFjMCA9IDA7CisKKwlpZiAobWRjbmZnICYgKE1EQ05GR19ERTIgfCBNRENORkdfREUzKSkKKwkJZHJhYzIgPSBNRENORkdfRFJBQzIobWRjbmZnKTsKKworCWlmIChtZGNuZmcgJiAoTURDTkZHX0RFMCB8IE1EQ05GR19ERTEpKQorCQlkcmFjMCA9IE1EQ05GR19EUkFDMChtZGNuZmcpOworCisJc2RyYW1fcm93cyA9IDEgPDwgKDExICsgbWF4KGRyYWMwLCBkcmFjMikpOworfQorCiBzdGF0aWMgdTMyIG1kcmVmcl9kcmkodW5zaWduZWQgaW50IGZyZXEpCiB7CiAJdTMyIGRyaSA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQlkcmkgPSAoKGZyZXEgKiBTRFJBTV9UUkVGKSAvIChTRFJBTV9ST1dTICogMzIpKTsKKwkJZHJpID0gKChmcmVxICogU0RSQU1fVFJFRikgLyAoc2RyYW1fcm93cyAqIDMyKSk7CiAJaWYgKGNwdV9pc19weGEyN3goKSkKLQkJZHJpID0gKChmcmVxICogU0RSQU1fVFJFRikgLyAoU0RSQU1fUk9XUyAtIDMxKSkgLyAzMjsKKwkJZHJpID0gKChmcmVxICogU0RSQU1fVFJFRikgLyAoc2RyYW1fcm93cyAtIDMxKSkgLyAzMjsKIAlyZXR1cm4gZHJpOwogfQogCkBAIC0yMTIsNyArMjI3LDcgQEAKIAlweGFfZnJlcXNfdCAqcHhhX2ZyZXFzOwogCWludCByZXQ7CiAKLQlmaW5kX2ZyZXFfdGFibGVzKHBvbGljeSwgJnB4YV9mcmVxc190YWJsZSwgJnB4YV9mcmVxcyk7CisJZmluZF9mcmVxX3RhYmxlcygmcHhhX2ZyZXFzX3RhYmxlLCAmcHhhX2ZyZXFzKTsKIAlyZXQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCBweGFfZnJlcXNfdGFibGUpOwogCiAJaWYgKGZyZXFfZGVidWcpCkBAIC0yNDAsNyArMjU1LDcgQEAKIAl1bnNpZ25lZCBpbnQgdW51c2VkLCBwcmVzZXRfbWRyZWZyLCBwb3N0c2V0X21kcmVmciwgY2Nsa2NmZzsKIAogCS8qIEdldCB0aGUgY3VycmVudCBwb2xpY3kgKi8KLQlmaW5kX2ZyZXFfdGFibGVzKHBvbGljeSwgJnB4YV9mcmVxc190YWJsZSwgJnB4YV9mcmVxX3NldHRpbmdzKTsKKwlmaW5kX2ZyZXFfdGFibGVzKCZweGFfZnJlcXNfdGFibGUsICZweGFfZnJlcV9zZXR0aW5ncyk7CiAKIAkvKiBMb29rdXAgdGhlIG5leHQgZnJlcXVlbmN5ICovCiAJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHB4YV9mcmVxc190YWJsZSwKQEAgLTMyOSwxMSArMzQ0LDE1IEBACiB7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IGZyZXE7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpweGEyNTVfZnJlcV90YWJsZTsKKwlweGFfZnJlcXNfdCAqcHhhMjU1X2ZyZXFzOwogCiAJLyogdHJ5IHRvIGd1ZXNzIHB4YTI3eCBjcHUgKi8KIAlpZiAoY3B1X2lzX3B4YTI3eCgpKQogCQlweGEyN3hfZ3Vlc3NfbWF4X2ZyZXEoKTsKIAorCWluaXRfc2RyYW1fcm93cygpOworCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDA7IC8qIEZJWE1FOiAxIG1zLCBhc3N1bWVkICovCiAJcG9saWN5LT5jdXIgPSBnZXRfY2xrX2ZyZXF1ZW5jeV9raHooMCk7CSAgIC8qIGN1cnJlbnQgZnJlcSAqLwpAQCAtMzU0LDYgKzM3Myw4IEBACiAJfQogCXB4YTI1NV90dXJib19mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOwogCisJcHhhMjU1X3R1cmJvX3RhYmxlID0gISFweGEyNTVfdHVyYm9fdGFibGU7CisKIAkvKiBHZW5lcmF0ZSB0aGUgcHhhMjd4IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHN0cnVjdCAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fUFhBMjd4X0ZSRVFTOyBpKyspIHsKIAkJZnJlcSA9IHB4YTI3eF9mcmVxc1tpXS5raHo7CkBAIC0zNjgsOCArMzg5LDEyIEBACiAJICogU2V0IHRoZSBwb2xpY3kncyBtaW5pbXVtIGFuZCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGZyb20gdGhlIHRhYmxlcwogCSAqIGp1c3QgY29uc3RydWN0ZWQuICBUaGlzIHNldHMgY3B1aW5mby5teHhfZnJlcSwgbWluIGFuZCBtYXguCiAJICovCi0JaWYgKGNwdV9pc19weGEyNXgoKSkKLQkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHB4YTI1NV9ydW5fZnJlcV90YWJsZSk7CisJaWYgKGNwdV9pc19weGEyNXgoKSkgeworCQlmaW5kX2ZyZXFfdGFibGVzKCZweGEyNTVfZnJlcV90YWJsZSwgJnB4YTI1NV9mcmVxcyk7CisJCXByX2luZm8oIlBYQTI1NSBjcHVmcmVxIHVzaW5nICVzIGZyZXF1ZW5jeSB0YWJsZVxuIiwKKwkJCXB4YTI1NV90dXJib190YWJsZSA/ICJ0dXJibyIgOiAicnVuIik7CisJCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBweGEyNTVfZnJlcV90YWJsZSk7CisJfQogCWVsc2UgaWYgKGNwdV9pc19weGEyN3goKSkKIAkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHB4YTI3eF9mcmVxX3RhYmxlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IDM1NzM2ZmMuLmUxNmY4ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTQsMTMgKzQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KQEAgLTE1Niw4ICsxNTUsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9yZXNvdXJjZV9mZnVhcnRbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IF9fUFJFRyhGRlVBUlQpLAotCQkuZW5kCT0gX19QUkVHKEZGVUFSVCkgKyAzNSwKKwkJLnN0YXJ0CT0gMHg0MDEwMDAwMCwKKwkJLmVuZAk9IDB4NDAxMDAwMjMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gSVJRX0ZGVUFSVCwKQEAgLTE3NSw4ICsxNzQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9yZXNvdXJjZV9idHVhcnRbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IF9fUFJFRyhCVFVBUlQpLAotCQkuZW5kCT0gX19QUkVHKEJUVUFSVCkgKyAzNSwKKwkJLnN0YXJ0CT0gMHg0MDIwMDAwMCwKKwkJLmVuZAk9IDB4NDAyMDAwMjMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gSVJRX0JUVUFSVCwKQEAgLTE5NCw4ICsxOTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9yZXNvdXJjZV9zdHVhcnRbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IF9fUFJFRyhTVFVBUlQpLAotCQkuZW5kCT0gX19QUkVHKFNUVUFSVCkgKyAzNSwKKwkJLnN0YXJ0CT0gMHg0MDcwMDAwMCwKKwkJLmVuZAk9IDB4NDA3MDAwMjMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gSVJRX1NUVUFSVCwKQEAgLTIxMyw4ICsyMTIsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9yZXNvdXJjZV9od3VhcnRbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IF9fUFJFRyhIV1VBUlQpLAotCQkuZW5kCT0gX19QUkVHKEhXVUFSVCkgKyA0NywKKwkJLnN0YXJ0CT0gMHg0MTYwMDAwMCwKKwkJLmVuZAk9IDB4NDE2MDAwMkYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gSVJRX0hXVUFSVCwKQEAgLTI0OSwxOCArMjQ4LDUzIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YWkyY19yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHhhMjd4X2kyY19tZnBfY2ZnW10gPSB7Ci0JR1BJTzExN19JMkNfU0NMLAotCUdQSU8xMThfSTJDX1NEQSwKLX07Ci0KIHZvaWQgX19pbml0IHB4YV9zZXRfaTJjX2luZm8oc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqaW5mbykKIHsKLQlpZiAoY3B1X2lzX3B4YTI3eCgpKQotCQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShweGEyN3hfaTJjX21mcF9jZmcpKTsKIAlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGFfZGV2aWNlX2kyYywgaW5mbyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFhBMjd4CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTI3eF9yZXNvdXJjZXNfaTJjX3Bvd2VyW10gPSB7CisJeworCQkuc3RhcnQJPSAweDQwZjAwMTgwLAorCQkuZW5kCT0gMHg0MGYwMDFhMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBJUlFfUFdSSTJDLAorCQkuZW5kCT0gSVJRX1BXUkkyQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9pMmNfcG93ZXIgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1pMmMiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHB4YTI3eF9yZXNvdXJjZXNfaTJjX3Bvd2VyLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEyN3hfcmVzb3VyY2VzX2kyY19wb3dlciksCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBM3h4CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfaTJjX3Bvd2VyW10gPSB7CisJeworCQkuc3RhcnQgID0gMHg0MGY1MDBjMCwKKwkJLmVuZCAgICA9IDB4NDBmNTAwZDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gSVJRX1BXUkkyQywKKwkJLmVuZAk9IElSUV9QV1JJMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyID0geworCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2kyY19wb3dlciwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19pMmNfcG93ZXIpLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YWkyc19yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4NDA0MDAwMDAsCkBAIC0yOTYsMTEgKzMzMCwzNiBAQAogCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YV9kZXZpY2VfZmljcCwgaW5mbyk7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX2RldmljZV9ydGMgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9ydGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gMHg0MDkwMDAwMCwKKwkJLmVuZAk9IDB4NDA5MDAwMDAgKyAweDNiLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBJUlFfUlRDMUh6LAorCQkuZW5kICAgID0gSVJRX1JUQzFIeiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgID0gSVJRX1JUQ0Fscm0sCisJCS5lbmQgICAgPSBJUlFfUlRDQWxybSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhMTEwMF9kZXZpY2VfcnRjID0gewogCS5uYW1lCQk9ICJzYTExMDAtcnRjIiwKIAkuaWQJCT0gLTEsCiB9OwogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9kZXZpY2VfcnRjID0geworCS5uYW1lCQk9ICJweGEtcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShweGFfcnRjX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gcHhhX3J0Y19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9hYzk3X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ICA9IDB4NDA1MDAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKaW5kZXggYmIwNGFmNC4uZWNjMjRhNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKQEAgLTExLDYgKzExLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9kZXZpY2VfaTJjOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX2RldmljZV9pMnM7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGFfZGV2aWNlX2ZpY3A7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMDBfZGV2aWNlX3J0YzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9kZXZpY2VfcnRjOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX2RldmljZV9hYzk3OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCmluZGV4IGMwYmUxN2UuLmIxNTE0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYwppbmRleCBkNDg4ZWRlLi4xYmQ3Zjc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lMzMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgVG9zaGliYSBlc2VyaWVzIFBEQXMKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgVG9zaGliYSBlMzMwIFBEQXMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqCkBAIC0xMiw2ICsxMiw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3RjNjM4N3hiLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xOSwxMyArMjIsNDQgQEAKIAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImVzZXJpZXMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlMzMwIHRjNjM4N3hiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhIGUzMzBfdGM2Mzg3eGJfaW5mbyA9IHsKKwkuZW5hYmxlICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKKwkuZGlzYWJsZSAgPSAmZXNlcmllc190bWlvX2Rpc2FibGUsCisJLnN1c3BlbmQgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTMzMF90YzYzODd4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInRjNjM4N3hiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmUzMzBfdGM2Mzg3eGJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlMzMwX3RjNjM4N3hiX2RldmljZSwKK307CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlMzMwX2luaXQodm9pZCkKIHsKKwllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKKwllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTM1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTM1MC5jCmluZGV4IDhlY2JjNTQuLjI1MTEyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGVzZXJpZXMgUERBcworICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGUzNTAgUERBcwogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICoKQEAgLTEyLDIwICsxMiw1NCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90N2w2NnhiLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImVzZXJpZXMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlMzUwIHQ3bDY2eGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSBlMzUwX3Q3bDY2eGJfaW5mbyA9IHsKKwkuaXJxX2Jhc2UgICAgICAgICAgICAgICA9IElSUV9CT0FSRF9TVEFSVCwKKwkuZW5hYmxlICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAorCS5zdXNwZW5kICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlMzUwX3Q3bDY2eGJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ0N2w2NnhiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmUzNTBfdDdsNjZ4Yl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZSAgICAgID0gZXNlcmllc190bWlvX3Jlc291cmNlcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlMzUwX3Q3bDY2eGJfZGV2aWNlLAorfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGUzNTBfaW5pdCh2b2lkKQogeworCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOworCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMKaW5kZXggNTQ0YmJhYS4uYmVkMDMzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYwpAQCAtMTIsMjAgKzEyLDI2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3Q3bDY2eGIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJlc2VyaWVzLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEU0MDAgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC00Niw3ICs1Miw3IEBACiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBlNDAwX3B4YWZiX21hY2hfaW5mbyA9IHsKIAkubW9kZXMgICAgICAgICAgPSAmZTQwMF9weGFmYl9tb2RlX2luZm8sCiAJLm51bV9tb2RlcyAgICAgID0gMSwKLQkubGNjcjAgICAgICAgICAgPSBMQ0NSMF9Db2xvciB8IExDQ1IwX1NuZ2wgfCBMQ0NSMF9BY3QsCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCwKIAkubGNjcjMgICAgICAgICAgPSAwLAogCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIgID0gTlVMTCwKIH07CkBAIC02NSw3ICs3MSwxMCBAQAogCUdQSU80Ml9CVFVBUlRfUlhELAogCUdQSU80M19CVFVBUlRfVFhELAogCUdQSU80NF9CVFVBUlRfQ1RTLAotCUdQSU80NV9HUElPLCAvKiBVc2VkIGJ5IFRNSU8gZm9yICNTVVNQRU5EICovCisKKwkvKiBUTUlPIGNvbnRyb2xsZXIgKi8KKwlHUElPMTlfR1BJTywgLyogdDdsNjZ4YiAjUENMUiAqLworCUdQSU80NV9HUElPLCAvKiB0N2w2NnhiICNTVVNQRU5EIChOT1QgQlRVQVJUISkgKi8KIAogCS8qIHdha2V1cCAqLwogCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fRURHRV9SSVNFLApAQCAtNzMsMTAgKzgyLDYwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9hID0geworCS5uYW1lID0gIkludGVybmFsIE5BTkQgZmxhc2giLAorCS5vZmZzZXQgPSAgMCwKKwkuc2l6ZSA9ICBNVERQQVJUX1NJWl9GVUxMLAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBlNDAwX3Q3bDY2eGJfbmFuZF9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNCwKKwkubGVuID0gMiwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKworc3RhdGljIHN0cnVjdCB0bWlvX25hbmRfZGF0YSBlNDAwX3Q3bDY2eGJfbmFuZF9jb25maWcgPSB7CisJLm51bV9wYXJ0aXRpb25zID0gMSwKKwkucGFydGl0aW9uID0gJnBhcnRpdGlvbl9hLAorCS5iYWRibG9ja19wYXR0ZXJuID0gJmU0MDBfdDdsNjZ4Yl9uYW5kX2JidCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhIGU0MDBfdDdsNjZ4Yl9pbmZvID0geworCS5pcnFfYmFzZSAJCT0gSVJRX0JPQVJEX1NUQVJULAorCS5lbmFibGUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19lbmFibGUsCisJLnN1c3BlbmQgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3Jlc3VtZSwKKworCS5uYW5kX2RhdGEgICAgICAgICAgICAgID0gJmU0MDBfdDdsNjZ4Yl9uYW5kX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU0MDBfdDdsNjZ4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInQ3bDY2eGIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZTQwMF90N2w2NnhiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmU0MDBfdDdsNjZ4Yl9kZXZpY2UsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZTQwMF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZTQwMF9waW5fY29uZmlnKSk7CisJLyogRml4bWUgLSBlNDAwIG1heSBoYXZlIGEgc3dpdGNoZWQgY2xvY2sgKi8KKwllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKKwllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7CiAJc2V0X3B4YV9mYl9pbmZvKCZlNDAwX3B4YWZiX21hY2hfaW5mbyk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCmluZGV4IGM1N2ExNWIuLmIwMGQ2NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90N2w2NnhiLmg+CiAKICNpbmNsdWRlIDx2aWRlby93MTAwZmIuaD4KIApAQCAtMjMsMTIgKzI1LDE2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImVzZXJpZXMuaCIKLQorI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZTc0MCB2aWRlbyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMTYsNyArMTIyLDE3IEBACiAJR1BJTzQyX0JUVUFSVF9SWEQsCiAJR1BJTzQzX0JUVUFSVF9UWEQsCiAJR1BJTzQ0X0JUVUFSVF9DVFMsCi0JR1BJTzQ1X0dQSU8sIC8qIFVzZWQgYnkgVE1JTyBmb3IgI1NVU1BFTkQgKi8KKworCS8qIFRNSU8gY29udHJvbGxlciAqLworCUdQSU8xOV9HUElPLCAvKiB0N2w2NnhiICNQQ0xSICovCisJR1BJTzQ1X0dQSU8sIC8qIHQ3bDY2eGIgI1NVU1BFTkQgKE5PVCBCVFVBUlQhKSAqLworCisJLyogVURDICovCisJR1BJTzEzX0dQSU8sCisJR1BJTzNfR1BJTywKKworCS8qIElyREEgKi8KKwlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwpAQCAtMTQyLDE3ICsxNTgsNDMgQEAKIAlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIGU3NDAgdDdsNjZ4YiBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhIGU3NDBfdDdsNjZ4Yl9pbmZvID0geworCS5pcnFfYmFzZSAJCT0gSVJRX0JPQVJEX1NUQVJULAorCS5lbmFibGUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19lbmFibGUsCisJLnN1c3BlbmQgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU3NDBfdDdsNjZ4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInQ3bDY2eGIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZTc0MF90N2w2NnhiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZlNzQwX2ZiX2RldmljZSwKKwkmZTc0MF90N2w2NnhiX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlNzQwX2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNzQwX3Bpbl9jb25maWcpKTsKKwllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0s0OE0iLCAmZTc0MF90N2w2NnhiX2RldmljZS5kZXYsCisJCQkiVURDQ0xLIiwgJnB4YTI1eF9kZXZpY2VfdWRjLmRldiksCisJZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7CisJZTd4eF9pcmRhX2luaXQoKTsKKwlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOwogfQogCiBNQUNISU5FX1NUQVJUKEU3NDAsICJUb3NoaWJhIGU3NDAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCmluZGV4IDY0MGU3MzguLjg0ZDdjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90YzYzOTN4Yi5oPgogCiAjaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+CiAKQEAgLTIzLDExICsyNCwxNSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJlc2VyaWVzLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFNzUwIExDRCBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMDAsMTYgKzEwNSw0NSBAQAogCS5yZXNvdXJjZSAgICAgICA9IGU3NTBfZmJfcmVzb3VyY2VzLAogfTsKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tIGU3NTAgdGM2MzkzeGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIGU3NTBfdGM2MzkzeGJfaW5mbyA9IHsKKwkuaXJxX2Jhc2UgICAgICAgPSBJUlFfQk9BUkRfU1RBUlQsCisJLnNjcl9wbGwyY3IgICAgID0gMHgwY2MxLAorCS5zY3JfZ3BlciAgICAgICA9IDAsCisJLmdwaW9fYmFzZSAgICAgID0gLTEsCisJLnN1c3BlbmQgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAorCS5lbmFibGUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAorCS5kaXNhYmxlICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU3NTBfdGM2MzkzeGJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ0YzYzOTN4YiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlNzUwX3RjNjM5M3hiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmU3NTBfZmJfZGV2aWNlLAorCSZlNzUwX3RjNjM5M3hiX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlNzUwX2luaXQodm9pZCkKIHsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsICZlNzUwX3RjNjM5M3hiX2RldmljZS5kZXYsCisJCQkiR1BJTzExX0NMSyIsIE5VTEwpLAorCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOworCWU3eHhfaXJkYV9pbml0KCk7CisJcHhhX3NldF9maWNwX2luZm8oJmU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChFNzUwLCAiVG9zaGliYSBlNzUwIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYwppbmRleCBhMjkzZTA5Li45YTg2YTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGM2MzkzeGIuaD4KIAogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCkBAIC0yMywxMiArMjQsMTQgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZXNlcmllcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBlODAwIExDRCBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTE2MCwxNCArMTYzLDQxIEBACiAJLmdwaW9fcHVsbHVwX2ludmVydGVkID0gMQogfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0gZTgwMCB0YzYzOTN4YiBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgZTgwMF90YzYzOTN4Yl9pbmZvID0geworCS5pcnFfYmFzZSAgICAgICA9IElSUV9CT0FSRF9TVEFSVCwKKwkuc2NyX3BsbDJjciAgICAgPSAweDBjYzEsCisJLnNjcl9ncGVyICAgICAgID0gMCwKKwkuZ3Bpb19iYXNlICAgICAgPSAtMSwKKwkuc3VzcGVuZCAgICAgICAgPSAmZXNlcmllc190bWlvX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCisJLmVuYWJsZSAgICAgICAgID0gJmVzZXJpZXNfdG1pb19lbmFibGUsCisJLmRpc2FibGUgICAgICAgID0gJmVzZXJpZXNfdG1pb19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTgwMF90YzYzOTN4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInRjNjM5M3hiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmU4MDBfdGM2MzkzeGJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmU4MDBfZmJfZGV2aWNlLAorCSZlODAwX3RjNjM5M3hiX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlODAwX2luaXQodm9pZCkKIHsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsICZlODAwX3RjNjM5M3hiX2RldmljZS5kZXYsCisJCQkiR1BJTzExX0NMSyIsIE5VTEwpLAorCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X3VkY19pbmZvKCZlODAwX3VkY19tYWNoX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCmluZGV4IGQyODg0OWIuLmRmY2U3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKQEAgLTEyLDYgKzEyLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTIxLDggKzI0LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgogCiAvKiBPbmx5IGU4MDAgaGFzIDEyOE1CIFJBTSAqLwogdm9pZCBfX2luaXQgZXNlcmllc19maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLApAQCAtNDMsMyArNDgsMTIyIEBACiAJLmdwaW9fcHVsbHVwX2ludmVydGVkID0gMQogfTsKIAorc3RhdGljIHZvaWQgZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSAmIElSX09GRikgeworCQlncGlvX3NldF92YWx1ZShHUElPX0U3WFhfSVJfT0ZGLCAxKTsKKwkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKKwl9IGVsc2UgeworCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOworCQlncGlvX3NldF92YWx1ZShHUElPX0U3WFhfSVJfT0ZGLCAwKTsKKwl9Cit9CisKK2ludCBlN3h4X2lyZGFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FN1hYX0lSX09GRiwgIklyREEgcG93ZXIiKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3WFhfSVJfT0ZGLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWU3eHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKE5VTEwsIElSX1NJUk1PREUgfCBJUl9PRkYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGU3eHhfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoZGV2LCBJUl9TSVJNT0RFIHwgSVJfT0ZGKTsKKwlncGlvX2ZyZWUoR1BJT19FN1hYX0lSX09GRik7Cit9CisKK3N0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlID0gZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLnNodXRkb3duID0gZTd4eF9pcmRhX3NodXRkb3duLAorfTsKKworaW50IGVzZXJpZXNfdG1pb19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qIFJlc2V0IC0gYnJpbmcgU1VTUEVORCBoaWdoIGJlZm9yZSBQQ0xSICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FU0VSSUVTX1RNSU9fU1VTUEVORCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FU0VSSUVTX1RNSU9fUENMUiwgMCk7CisJbXNsZWVwKDEpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRVNFUklFU19UTUlPX1NVU1BFTkQsIDEpOworCW1zbGVlcCgxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0VTRVJJRVNfVE1JT19QQ0xSLCAxKTsKKwltc2xlZXAoMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlc2VyaWVzX3RtaW9fZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FU0VSSUVTX1RNSU9fU1VTUEVORCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FU0VSSUVTX1RNSU9fUENMUiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlc2VyaWVzX3RtaW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FU0VSSUVTX1RNSU9fU1VTUEVORCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlc2VyaWVzX3RtaW9fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX0VTRVJJRVNfVE1JT19TVVNQRU5ELCAxKTsKKwltc2xlZXAoMSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXNlcmllc19nZXRfdG1pb19ncGlvcyh2b2lkKQoreworCWdwaW9fcmVxdWVzdChHUElPX0VTRVJJRVNfVE1JT19TVVNQRU5ELCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19FU0VSSUVTX1RNSU9fUENMUiwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRVNFUklFU19UTUlPX1NVU1BFTkQsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0VTRVJJRVNfVE1JT19QQ0xSLCAwKTsKK30KKworLyogVE1JTyBjb250cm9sbGVyIHVzZXMgdGhlIHNhbWUgcmVzb3VyY2VzIG9uIGFsbCBlLXNlcmllcyBtYWNoaW5lcy4gKi8KK3N0cnVjdCByZXNvdXJjZSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gUFhBX0NTNF9QSFlTLAorCQkuZW5kICAgID0gUFhBX0NTNF9QSFlTICsgMHgxZmZmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IElSUV9HUElPKEdQSU9fRVNFUklFU19UTUlPX0lSUSksCisJCS5lbmQgICAgPSBJUlFfR1BJTyhHUElPX0VTRVJJRVNfVE1JT19JUlEpLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKy8qIFNvbWUgZS1zZXJpZXMgaGFyZHdhcmUgY2Fubm90IGNvbnRyb2wgdGhlIDMySyBjbG9jayAqLworc3RhdGljIHZvaWQgY2xrXzMya19kdW1teShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa18zMmtfZHVtbXlfb3BzID0geworCS5lbmFibGUgICAgICAgICA9IGNsa18zMmtfZHVtbXksCisJLmRpc2FibGUgICAgICAgID0gY2xrXzMya19kdW1teSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRtaW9fZHVtbXlfY2xrID0geworCS5vcHMJPSAmY2xrXzMya19kdW1teV9vcHMsCisJLnJhdGUJPSAzMjc2OCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBlc2VyaWVzX2Nsa3JlZ3NbXSA9IHsKKwlJTklUX0NMS1JFRygmdG1pb19kdW1teV9jbGssIE5VTEwsICJDTEtfQ0szMksiKSwKK307CisKK3ZvaWQgZXNlcmllc19yZWdpc3Rlcl9jbGtzKHZvaWQpCit7CisJY2xrc19yZWdpc3Rlcihlc2VyaWVzX2Nsa3JlZ3MsIEFSUkFZX1NJWkUoZXNlcmllc19jbGtyZWdzKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuaAppbmRleCBhODNmODhkLi41OTMwZjVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5oCkBAIC0yLDMgKzIsMTUgQEAKIAlzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKTsKIAogZXh0ZXJuIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBlN3h4X3VkY19tYWNoX2luZm87CitleHRlcm4gc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YTsKK2V4dGVybiBpbnQgZTd4eF9pcmRhX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgZXNlcmllc190bWlvX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBlc2VyaWVzX3RtaW9fZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBlc2VyaWVzX3RtaW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBlc2VyaWVzX3RtaW9fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBlc2VyaWVzX2dldF90bWlvX2dwaW9zKHZvaWQpOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBlMzAwX3RjNjM4N3hiX2RldmljZTsKK2V4dGVybiB2b2lkIGVzZXJpZXNfcmVnaXN0ZXJfY2xrcyh2b2lkKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwppbmRleCBjYzNkODUwLi5kZjVmODIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwpAQCAtMTYsMTEgKzE2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KQEAgLTEwMSwxMjAgKzEwNCw3MzIgQEAKIAlHUElPNDRfQlRVQVJUX0NUUywKIAlHUElPNDVfQlRVQVJUX1JUUywKIAotCS8qIFNUVUFSVCAqLwotCUdQSU80Nl9TVFVBUlRfUlhELAotCUdQSU80N19TVFVBUlRfVFhELAorCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCiAKLQkvKiBGb3IgQTc4MCBzdXBwb3J0IChjb25uZWN0ZWQgd2l0aCBOZXB0dW5lIEdTTSBjaGlwKSAqLwotCUdQSU8zMF9VU0JfUDNfMiwJLyogSUNMX1RYRU5CICovCi0JR1BJTzMxX1VTQl9QM182LAkvKiBJQ0xfVlBPVVQgKi8KLQlHUElPOTBfVVNCX1AzXzUsCS8qIElDTF9WUElOICovCi0JR1BJTzkxX1VTQl9QM18xLAkvKiBJQ0xfWFJYRCAqLwotCUdQSU81Nl9VU0JfUDNfNCwJLyogSUNMX1ZNT1VUICovCi0JR1BJTzExM19VU0JfUDNfMywJLyogL0lDTF9WTUlOICovCisJLyogUENBUCBTU1AgKi8KKwlHUElPMjlfU1NQMV9TQ0xLLAorCUdQSU8yNV9TU1AxX1RYRCwKKwlHUElPMjZfU1NQMV9SWEQsCisJR1BJTzI0X0dQSU8sCQkJCS8qIHBjYXAgY2hpcCBzZWxlY3QgKi8KKwlHUElPMV9HUElPLAkJCQkvKiBwY2FwIGludGVycnVwdCAqLworCUdQSU80X0dQSU8sCQkJCS8qIFdESV9BUCAqLworCUdQSU81NV9HUElPLAkJCQkvKiBTWVNfUkVTVEFSVCAqLworCisJLyogTU1DICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzExX0dQSU8sCQkJCS8qIG1tYyBkZXRlY3QgKi8KKworCS8qIHVzYiB0byBleHRlcm5hbCB0cmFuc2NlaXZlciAqLworCUdQSU8zNF9VU0JfUDJfMiwKKwlHUElPMzVfVVNCX1AyXzEsCisJR1BJTzM2X1VTQl9QMl80LAorCUdQSU8zOV9VU0JfUDJfNiwKKwlHUElPNDBfVVNCX1AyXzUsCisJR1BJTzUzX1VTQl9QMl8zLAorCisJLyogdXNiIHRvIE5lcHR1bmUgR1NNIGNoaXAgKi8KKwlHUElPMzBfVVNCX1AzXzIsCisJR1BJTzMxX1VTQl9QM182LAorCUdQSU85MF9VU0JfUDNfNSwKKwlHUElPOTFfVVNCX1AzXzEsCisJR1BJTzU2X1VTQl9QM180LAorCUdQSU8xMTNfVVNCX1AzXzMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZXp4X2luaXQodm9pZCkKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0VaWF9BNzgwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0VaWF9FNjgwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2VuMV9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBmbGlwIC8gbG9ja3N3aXRjaCAqLworCUdQSU8xMl9HUElPLAorCisJLyogYmx1ZXRvb3RoIChiY20yMDM1KSAqLworCUdQSU8xNF9HUElPIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCS8qIEhPU1RXQUtFICovCisJR1BJTzQ4X0dQSU8sCQkJCS8qIFJFU0VUICovCisJR1BJTzI4X0dQSU8sCQkJCS8qIFdBS0VVUCAqLworCisJLyogTmVwdHVuZSBoYW5kc2hha2UgKi8KKwlHUElPMF9HUElPIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCS8qIEJQX1JEWSAqLworCUdQSU81N19HUElPLAkJCQkvKiBBUF9SRFkgKi8KKwlHUElPMTNfR1BJTyB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAkvKiBXREkgKi8KKwlHUElPM19HUElPIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCS8qIFdESTIgKi8KKwlHUElPODJfR1BJTywJCQkJLyogUkVTRVQgKi8KKwlHUElPOTlfR1BJTywJCQkJLyogVENfTU1fRU4gKi8KKworCS8qIHNvdW5kICovCisJR1BJTzUyX1NTUDNfU0NMSywKKwlHUElPODNfU1NQM19TRlJNLAorCUdQSU84MV9TU1AzX1RYRCwKKwlHUElPODlfU1NQM19SWEQsCisKKwkvKiBzc3AyIHBpbnMgdG8gaW4gKi8KKwlHUElPMjJfR1BJTywJCQkJLyogU1NQMl9TQ0xLICovCisJR1BJTzM3X0dQSU8sCQkJCS8qIFNTUDJfU0ZSTSAqLworCUdQSU8zOF9HUElPLAkJCQkvKiBTU1AyX1RYRCAqLworCUdQSU84OF9HUElPLAkJCQkvKiBTU1AyX1JYRCAqLworCisJLyogY2FtZXJhICovCisJR1BJTzIzX0NJRl9NQ0xLLAorCUdQSU81NF9DSUZfUENMSywKKwlHUElPODVfQ0lGX0xWLAorCUdQSU84NF9DSUZfRlYsCisJR1BJTzI3X0NJRl9ERF8wLAorCUdQSU8xMTRfQ0lGX0REXzEsCisJR1BJTzUxX0NJRl9ERF8yLAorCUdQSU8xMTVfQ0lGX0REXzMsCisJR1BJTzk1X0NJRl9ERF80LAorCUdQSU85NF9DSUZfRERfNSwKKwlHUElPMTdfQ0lGX0REXzYsCisJR1BJTzEwOF9DSUZfRERfNywKKwlHUElPNTBfR1BJTywJCQkJLyogQ0FNX0VOICovCisJR1BJTzE5X0dQSU8sCQkJCS8qIENBTV9SU1QgKi8KKworCS8qIEVNVSAqLworCUdQSU8xMjBfR1BJTywJCQkJLyogRU1VX01VWDEgKi8KKwlHUElPMTE5X0dQSU8sCQkJCS8qIEVNVV9NVVgyICovCisJR1BJTzg2X0dQSU8sCQkJCS8qIFNOUF9JTlRfQ1RMICovCisJR1BJTzg3X0dQSU8sCQkJCS8qIFNOUF9JTlRfSU4gKi8KK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfRVpYX0ExMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0VaWF9BOTEwKSB8fCBcCisJZGVmaW5lZChDT05GSUdfTUFDSF9FWlhfRTIpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfRVpYX0U2KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2VuMl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBmbGlwIC8gbG9ja3N3aXRjaCAqLworCUdQSU8xNV9HUElPLAorCisJLyogRU9DICovCisJR1BJTzEwX0dQSU8sCisKKwkvKiBibHVldG9vdGggKGJjbTIwNDUpICovCisJR1BJTzEzX0dQSU8gfCBXQUtFVVBfT05fTEVWRUxfSElHSCwJLyogSE9TVFdBS0UgKi8KKwlHUElPMzdfR1BJTywJCQkJLyogUkVTRVQgKi8KKwlHUElPNTdfR1BJTywJCQkJLyogV0FLRVVQICovCisKKwkvKiBOZXB0dW5lIGhhbmRzaGFrZSAqLworCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fTEVWRUxfSElHSCwJLyogQlBfUkRZICovCisJR1BJTzk2X0dQSU8sCQkJCS8qIEFQX1JEWSAqLworCUdQSU8zX0dQSU8gfCBXQUtFVVBfT05fTEVWRUxfSElHSCwJLyogV0RJICovCisJR1BJTzExNl9HUElPLAkJCQkvKiBSRVNFVCAqLworCUdQSU80MV9HUElPLAkJCQkvKiBCUF9GTEFTSCAqLworCisJLyogc291bmQgKi8KKwlHUElPNTJfU1NQM19TQ0xLLAorCUdQSU84M19TU1AzX1NGUk0sCisJR1BJTzgxX1NTUDNfVFhELAorCUdQSU84Ml9TU1AzX1JYRCwKKworCS8qIHNzcDIgcGlucyB0byBpbiAqLworCUdQSU8yMl9HUElPLAkJCQkvKiBTU1AyX1NDTEsgKi8KKwlHUElPMTRfR1BJTywJCQkJLyogU1NQMl9TRlJNICovCisJR1BJTzM4X0dQSU8sCQkJCS8qIFNTUDJfVFhEICovCisJR1BJTzg4X0dQSU8sCQkJCS8qIFNTUDJfUlhEICovCisKKwkvKiBjYW1lcmEgKi8KKwlHUElPMjNfQ0lGX01DTEssCisJR1BJTzU0X0NJRl9QQ0xLLAorCUdQSU84NV9DSUZfTFYsCisJR1BJTzg0X0NJRl9GViwKKwlHUElPMjdfQ0lGX0REXzAsCisJR1BJTzExNF9DSUZfRERfMSwKKwlHUElPNTFfQ0lGX0REXzIsCisJR1BJTzExNV9DSUZfRERfMywKKwlHUElPOTVfQ0lGX0REXzQsCisJR1BJTzQ4X0NJRl9ERF81LAorCUdQSU85M19DSUZfRERfNiwKKwlHUElPMTJfQ0lGX0REXzcsCisJR1BJTzUwX0dQSU8sCQkJCS8qIENBTV9FTiAqLworCUdQSU8yOF9HUElPLAkJCQkvKiBDQU1fUlNUICovCisJR1BJTzE3X0dQSU8sCQkJCS8qIENBTV9GTEFTSCAqLworfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0E3ODAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGE3ODBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyoga2V5cGFkICovCisJR1BJTzkzX0tQX0RLSU5fMCB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDBfS1BfTUtJTl8wIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMiB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85N19LUF9NS0lOXzMgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOThfS1BfTUtJTl80IHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisJR1BJTzEwNl9LUF9NS09VVF8zLAorCUdQSU8xMDdfS1BfTUtPVVRfNCwKKworCS8qIGF0dGVudWF0ZSBzb3VuZCAqLworCUdQSU85Nl9HUElPLAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0U2ODAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGU2ODBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyoga2V5cGFkICovCisJR1BJTzkzX0tQX0RLSU5fMCB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85Nl9LUF9ES0lOXzMgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOTdfS1BfREtJTl80IHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzk4X0tQX0RLSU5fNSB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDBfS1BfTUtJTl8wIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMiB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCUdQSU8xMDZfS1BfTUtPVVRfMywKKworCS8qIE1JREkgKi8KKwlHUElPNzlfR1BJTywJCQkJLyogVkFfU0VMX0JVTCAqLworCUdQSU84MF9HUElPLAkJCQkvKiBGTFRfU0VMX0JVTCAqLworCUdQSU83OF9HUElPLAkJCQkvKiBNSURJX1JFU0VUICovCisJR1BJTzMzX0dQSU8sCQkJCS8qIE1JRElfQ1MgKi8KKwlHUElPMTVfR1BJTywJCQkJLyogTUlESV9JUlEgKi8KKwlHUElPNDlfR1BJTywJCQkJLyogTUlESV9OUFdFICovCisJR1BJTzE4X0dQSU8sCQkJCS8qIE1JRElfUkRZICovCisKKwkvKiBsZWRzICovCisJR1BJTzQ2X0dQSU8sCisJR1BJTzQ3X0dQSU8sCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FWlhfQTEyMDAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGExMjAwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIGtleXBhZCAqLworCUdQSU8xMDBfS1BfTUtJTl8wIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMiB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85N19LUF9NS0lOXzMgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOThfS1BfTUtJTl80IHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisJR1BJTzEwNl9LUF9NS09VVF8zLAorCUdQSU8xMDdfS1BfTUtPVVRfNCwKKwlHUElPMTA4X0tQX01LT1VUXzUsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FWlhfQTkxMAorc3RhdGljIHVuc2lnbmVkIGxvbmcgYTkxMF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBrZXlwYWQgKi8KKwlHUElPMTAwX0tQX01LSU5fMCB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDFfS1BfTUtJTl8xIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMl9LUF9NS0lOXzIgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOTdfS1BfTUtJTl8zIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzk4X0tQX01LSU5fNCB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCUdQSU8xMDZfS1BfTUtPVVRfMywKKwlHUElPMTA3X0tQX01LT1VUXzQsCisJR1BJTzEwOF9LUF9NS09VVF81LAorCisJLyogV0xBTiAqLworCUdQSU84OV9HUElPLAkJCQkvKiBSRVNFVCAqLworCUdQSU8zM19HUElPLAkJCQkvKiBXQUtFVVAgKi8KKwlHUElPOTRfR1BJTyB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAkvKiBIT1NUV0FLRSAqLworCisJLyogTU1DIENTICovCisJR1BJTzIwX0dQSU8sCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FWlhfRTIKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGUyX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIGtleXBhZCAqLworCUdQSU8xMDBfS1BfTUtJTl8wIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMiB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85N19LUF9NS0lOXzMgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOThfS1BfTUtJTl80IHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisJR1BJTzEwNl9LUF9NS09VVF8zLAorCUdQSU8xMDdfS1BfTUtPVVRfNCwKKwlHUElPMTA4X0tQX01LT1VUXzUsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FWlhfRTYKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGU2X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIGtleXBhZCAqLworCUdQSU8xMDBfS1BfTUtJTl8wIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwMV9LUF9NS0lOXzEgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPMTAyX0tQX01LSU5fMiB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAorCUdQSU85N19LUF9NS0lOXzMgfCBXQUtFVVBfT05fTEVWRUxfSElHSCwKKwlHUElPOThfS1BfTUtJTl80IHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisJR1BJTzEwM19LUF9NS09VVF8wLAorCUdQSU8xMDRfS1BfTUtPVVRfMSwKKwlHUElPMTA1X0tQX01LT1VUXzIsCisJR1BJTzEwNl9LUF9NS09VVF8zLAorCUdQSU8xMDdfS1BfTUtPVVRfNCwKKwlHUElPMTA4X0tQX01LT1VUXzUsCit9OworI2VuZGlmCisKKy8qIEtFWVBBRCAqLworI2lmZGVmIENPTkZJR19NQUNIX0VaWF9BNzgwCitzdGF0aWMgdW5zaWduZWQgaW50IGE3ODBfa2V5X21hcFtdID0geworCUtFWSgwLCAwLCBLRVlfU0VORCksCisJS0VZKDAsIDEsIEtFWV9CQUNLKSwKKwlLRVkoMCwgMiwgS0VZX0VORCksCisJS0VZKDAsIDMsIEtFWV9QQUdFVVApLAorCUtFWSgwLCA0LCBLRVlfVVApLAorCisJS0VZKDEsIDAsIEtFWV9OVU1FUklDXzEpLAorCUtFWSgxLCAxLCBLRVlfTlVNRVJJQ18yKSwKKwlLRVkoMSwgMiwgS0VZX05VTUVSSUNfMyksCisJS0VZKDEsIDMsIEtFWV9TRUxFQ1QpLAorCUtFWSgxLCA0LCBLRVlfS1BFTlRFUiksCisKKwlLRVkoMiwgMCwgS0VZX05VTUVSSUNfNCksCisJS0VZKDIsIDEsIEtFWV9OVU1FUklDXzUpLAorCUtFWSgyLCAyLCBLRVlfTlVNRVJJQ182KSwKKwlLRVkoMiwgMywgS0VZX1JFQ09SRCksCisJS0VZKDIsIDQsIEtFWV9MRUZUKSwKKworCUtFWSgzLCAwLCBLRVlfTlVNRVJJQ183KSwKKwlLRVkoMywgMSwgS0VZX05VTUVSSUNfOCksCisJS0VZKDMsIDIsIEtFWV9OVU1FUklDXzkpLAorCUtFWSgzLCAzLCBLRVlfSE9NRSksCisJS0VZKDMsIDQsIEtFWV9SSUdIVCksCisKKwlLRVkoNCwgMCwgS0VZX05VTUVSSUNfU1RBUiksCisJS0VZKDQsIDEsIEtFWV9OVU1FUklDXzApLAorCUtFWSg0LCAyLCBLRVlfTlVNRVJJQ19QT1VORCksCisJS0VZKDQsIDMsIEtFWV9QQUdFRE9XTiksCisJS0VZKDQsIDQsIEtFWV9ET1dOKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGE3ODBfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hdHJpeF9rZXlfcm93cyA9IDUsCisJLm1hdHJpeF9rZXlfY29scyA9IDUsCisJLm1hdHJpeF9rZXlfbWFwID0gYTc4MF9rZXlfbWFwLAorCS5tYXRyaXhfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShhNzgwX2tleV9tYXApLAorCisJLmRpcmVjdF9rZXlfbWFwID0geyBLRVlfQ0FNRVJBIH0sCisJLmRpcmVjdF9rZXlfbnVtID0gMSwKKworCS5kZWJvdW5jZV9pbnRlcnZhbCA9IDMwLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9FWlhfQTc4MCAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0U2ODAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZTY4MF9rZXlfbWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9VUCksCisJS0VZKDAsIDEsIEtFWV9SSUdIVCksCisJS0VZKDAsIDIsIEtFWV9SRVNFUlZFRCksCisJS0VZKDAsIDMsIEtFWV9TRU5EKSwKKworCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDEsIDEsIEtFWV9MRUZUKSwKKwlLRVkoMSwgMiwgS0VZX1BBR0VVUCksCisJS0VZKDEsIDMsIEtFWV9QQUdFRE9XTiksCisKKwlLRVkoMiwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMiwgMSwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMiwgMiwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMiwgMywgS0VZX0tQRU5URVIpLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgZTY4MF9rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWF0cml4X2tleV9yb3dzID0gMywKKwkubWF0cml4X2tleV9jb2xzID0gNCwKKwkubWF0cml4X2tleV9tYXAgPSBlNjgwX2tleV9tYXAsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGU2ODBfa2V5X21hcCksCisKKwkuZGlyZWN0X2tleV9tYXAgPSB7CisJCUtFWV9DQU1FUkEsCisJCUtFWV9SRVNFUlZFRCwKKwkJS0VZX1JFU0VSVkVELAorCQlLRVlfRjEsCisJCUtFWV9DQU5DRUwsCisJCUtFWV9GMiwKKwl9LAorCS5kaXJlY3Rfa2V5X251bSA9IDYsCisKKwkuZGVib3VuY2VfaW50ZXJ2YWwgPSAzMCwKK307CisjZW5kaWYgLyogQ09ORklHX01BQ0hfRVpYX0U2ODAgKi8KKworI2lmZGVmIENPTkZJR19NQUNIX0VaWF9BMTIwMAorc3RhdGljIHVuc2lnbmVkIGludCBhMTIwMF9rZXlfbWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9SRVNFUlZFRCksCisJS0VZKDAsIDEsIEtFWV9SSUdIVCksCisJS0VZKDAsIDIsIEtFWV9QQUdFRE9XTiksCisJS0VZKDAsIDMsIEtFWV9SRVNFUlZFRCksCisJS0VZKDAsIDQsIEtFWV9SRVNFUlZFRCksCisJS0VZKDAsIDUsIEtFWV9SRVNFUlZFRCksCisKKwlLRVkoMSwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMSwgMSwgS0VZX0RPV04pLAorCUtFWSgxLCAyLCBLRVlfQ0FNRVJBKSwKKwlLRVkoMSwgMywgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMSwgNCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMSwgNSwgS0VZX1JFU0VSVkVEKSwKKworCUtFWSgyLCAwLCBLRVlfUkVTRVJWRUQpLAorCUtFWSgyLCAxLCBLRVlfS1BFTlRFUiksCisJS0VZKDIsIDIsIEtFWV9SRUNPUkQpLAorCUtFWSgyLCAzLCBLRVlfUkVTRVJWRUQpLAorCUtFWSgyLCA0LCBLRVlfUkVTRVJWRUQpLAorCUtFWSgyLCA1LCBLRVlfU0VMRUNUKSwKKworCUtFWSgzLCAwLCBLRVlfUkVTRVJWRUQpLAorCUtFWSgzLCAxLCBLRVlfVVApLAorCUtFWSgzLCAyLCBLRVlfU0VORCksCisJS0VZKDMsIDMsIEtFWV9SRVNFUlZFRCksCisJS0VZKDMsIDQsIEtFWV9SRVNFUlZFRCksCisJS0VZKDMsIDUsIEtFWV9SRVNFUlZFRCksCisKKwlLRVkoNCwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgMSwgS0VZX0xFRlQpLAorCUtFWSg0LCAyLCBLRVlfUEFHRVVQKSwKKwlLRVkoNCwgMywgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgNCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgNSwgS0VZX1JFU0VSVkVEKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGExMjAwX2tleXBhZF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXRyaXhfa2V5X3Jvd3MgPSA1LAorCS5tYXRyaXhfa2V5X2NvbHMgPSA2LAorCS5tYXRyaXhfa2V5X21hcCA9IGExMjAwX2tleV9tYXAsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGExMjAwX2tleV9tYXApLAorCisJLmRlYm91bmNlX2ludGVydmFsID0gMzAsCit9OworI2VuZGlmIC8qIENPTkZJR19NQUNIX0VaWF9BMTIwMCAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0U2CitzdGF0aWMgdW5zaWduZWQgaW50IGU2X2tleV9tYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZX1BBR0VET1dOKSwKKwlLRVkoMCwgMywgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMCwgNCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMCwgNSwgS0VZX05FWFRTT05HKSwKKworCUtFWSgxLCAwLCBLRVlfUkVTRVJWRUQpLAorCUtFWSgxLCAxLCBLRVlfRE9XTiksCisJS0VZKDEsIDIsIEtFWV9QUk9HMSksCisJS0VZKDEsIDMsIEtFWV9SRVNFUlZFRCksCisJS0VZKDEsIDQsIEtFWV9SRVNFUlZFRCksCisJS0VZKDEsIDUsIEtFWV9SRVNFUlZFRCksCisKKwlLRVkoMiwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMiwgMSwgS0VZX0VOVEVSKSwKKwlLRVkoMiwgMiwgS0VZX0NBTUVSQSksCisJS0VZKDIsIDMsIEtFWV9SRVNFUlZFRCksCisJS0VZKDIsIDQsIEtFWV9SRVNFUlZFRCksCisJS0VZKDIsIDUsIEtFWV9XV1cpLAorCisJS0VZKDMsIDAsIEtFWV9SRVNFUlZFRCksCisJS0VZKDMsIDEsIEtFWV9VUCksCisJS0VZKDMsIDIsIEtFWV9TRU5EKSwKKwlLRVkoMywgMywgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMywgNCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMywgNSwgS0VZX1BMQVlQQVVTRSksCisKKwlLRVkoNCwgMCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgMSwgS0VZX0xFRlQpLAorCUtFWSg0LCAyLCBLRVlfUEFHRVVQKSwKKwlLRVkoNCwgMywgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgNCwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoNCwgNSwgS0VZX1BSRVZJT1VTU09ORyksCit9OworCitzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlNl9rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWF0cml4X2tleV9yb3dzID0gNSwKKwkubWF0cml4X2tleV9jb2xzID0gNiwKKwkubWF0cml4X2tleV9tYXAgPSBlNl9rZXlfbWFwLAorCS5tYXRyaXhfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShlNl9rZXlfbWFwKSwKKworCS5kZWJvdW5jZV9pbnRlcnZhbCA9IDMwLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9FWlhfRTYgKi8KKworI2lmZGVmIENPTkZJR19NQUNIX0VaWF9BOTEwCitzdGF0aWMgdW5zaWduZWQgaW50IGE5MTBfa2V5X21hcFtdID0geworCUtFWSgwLCAwLCBLRVlfTlVNRVJJQ182KSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZX1BBR0VET1dOKSwKKwlLRVkoMCwgMywgS0VZX0tQRU5URVIpLAorCUtFWSgwLCA0LCBLRVlfTlVNRVJJQ181KSwKKwlLRVkoMCwgNSwgS0VZX0NBTUVSQSksCisKKwlLRVkoMSwgMCwgS0VZX05VTUVSSUNfOCksCisJS0VZKDEsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMiwgS0VZX1JFU0VSVkVEKSwKKwlLRVkoMSwgMywgS0VZX0YxKSwgLyogTGVmdCBTb2Z0S2V5ICovCisJS0VZKDEsIDQsIEtFWV9OVU1FUklDX1NUQVIpLAorCUtFWSgxLCA1LCBLRVlfUkVTRVJWRUQpLAorCisJS0VZKDIsIDAsIEtFWV9OVU1FUklDXzcpLAorCUtFWSgyLCAxLCBLRVlfTlVNRVJJQ185KSwKKwlLRVkoMiwgMiwgS0VZX1JFQ09SRCksCisJS0VZKDIsIDMsIEtFWV9GMiksIC8qIFJpZ2h0IFNvZnRLZXkgKi8KKwlLRVkoMiwgNCwgS0VZX0JBQ0spLAorCUtFWSgyLCA1LCBLRVlfU0VMRUNUKSwKKworCUtFWSgzLCAwLCBLRVlfTlVNRVJJQ18yKSwKKwlLRVkoMywgMSwgS0VZX1VQKSwKKwlLRVkoMywgMiwgS0VZX1NFTkQpLAorCUtFWSgzLCAzLCBLRVlfTlVNRVJJQ18wKSwKKwlLRVkoMywgNCwgS0VZX05VTUVSSUNfMSksCisJS0VZKDMsIDUsIEtFWV9SRUNPUkQpLAorCisJS0VZKDQsIDAsIEtFWV9OVU1FUklDXzQpLAorCUtFWSg0LCAxLCBLRVlfTEVGVCksCisJS0VZKDQsIDIsIEtFWV9QQUdFVVApLAorCUtFWSg0LCAzLCBLRVlfTlVNRVJJQ19QT1VORCksCisJS0VZKDQsIDQsIEtFWV9OVU1FUklDXzMpLAorCUtFWSg0LCA1LCBLRVlfUkVTRVJWRUQpLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgYTkxMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWF0cml4X2tleV9yb3dzID0gNSwKKwkubWF0cml4X2tleV9jb2xzID0gNiwKKwkubWF0cml4X2tleV9tYXAgPSBhOTEwX2tleV9tYXAsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGE5MTBfa2V5X21hcCksCisKKwkuZGVib3VuY2VfaW50ZXJ2YWwgPSAzMCwKK307CisjZW5kaWYgLyogQ09ORklHX01BQ0hfRVpYX0E5MTAgKi8KKworI2lmZGVmIENPTkZJR19NQUNIX0VaWF9FMgorc3RhdGljIHVuc2lnbmVkIGludCBlMl9rZXlfbWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9OVU1FUklDXzYpLAorCUtFWSgwLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfTlVNRVJJQ185KSwKKwlLRVkoMCwgMywgS0VZX05FWFRTT05HKSwKKwlLRVkoMCwgNCwgS0VZX05VTUVSSUNfNSksCisJS0VZKDAsIDUsIEtFWV9GMSksIC8qIExlZnQgU29mdEtleSAqLworCisJS0VZKDEsIDAsIEtFWV9OVU1FUklDXzgpLAorCUtFWSgxLCAxLCBLRVlfRE9XTiksCisJS0VZKDEsIDIsIEtFWV9SRVNFUlZFRCksCisJS0VZKDEsIDMsIEtFWV9QQUdFVVApLAorCUtFWSgxLCA0LCBLRVlfTlVNRVJJQ19TVEFSKSwKKwlLRVkoMSwgNSwgS0VZX0YyKSwgLyogUmlnaHQgU29mdEtleSAqLworCisJS0VZKDIsIDAsIEtFWV9OVU1FUklDXzcpLAorCUtFWSgyLCAxLCBLRVlfS1BFTlRFUiksCisJS0VZKDIsIDIsIEtFWV9SRUNPUkQpLAorCUtFWSgyLCAzLCBLRVlfUEFHRURPV04pLAorCUtFWSgyLCA0LCBLRVlfQkFDSyksCisJS0VZKDIsIDUsIEtFWV9OVU1FUklDXzApLAorCisJS0VZKDMsIDAsIEtFWV9OVU1FUklDXzIpLAorCUtFWSgzLCAxLCBLRVlfVVApLAorCUtFWSgzLCAyLCBLRVlfU0VORCksCisJS0VZKDMsIDMsIEtFWV9QTEFZUEFVU0UpLAorCUtFWSgzLCA0LCBLRVlfTlVNRVJJQ18xKSwKKwlLRVkoMywgNSwgS0VZX1NPVU5EKSwgLyogTXVzaWMgU29mdEtleSAqLworCisJS0VZKDQsIDAsIEtFWV9OVU1FUklDXzQpLAorCUtFWSg0LCAxLCBLRVlfTEVGVCksCisJS0VZKDQsIDIsIEtFWV9OVU1FUklDX1BPVU5EKSwKKwlLRVkoNCwgMywgS0VZX1BSRVZJT1VTU09ORyksCisJS0VZKDQsIDQsIEtFWV9OVU1FUklDXzMpLAorCUtFWSg0LCA1LCBLRVlfUkVTRVJWRUQpLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgZTJfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hdHJpeF9rZXlfcm93cyA9IDUsCisJLm1hdHJpeF9rZXlfY29scyA9IDYsCisJLm1hdHJpeF9rZXlfbWFwID0gZTJfa2V5X21hcCwKKwkubWF0cml4X2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZTJfa2V5X21hcCksCisKKwkuZGVib3VuY2VfaW50ZXJ2YWwgPSAzMCwKK307CisjZW5kaWYgLyogQ09ORklHX01BQ0hfRVpYX0UyICovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FWlhfQTc4MAorc3RhdGljIHZvaWQgX19pbml0IGE3ODBfaW5pdCh2b2lkKQogewogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGV6eF9waW5fY29uZmlnKSk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZ2VuMV9waW5fY29uZmlnKSk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYTc4MF9waW5fY29uZmlnKSk7CisKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwotCWlmIChtYWNoaW5lX2lzX2V6eF9hNzgwKCkgfHwgbWFjaGluZV9pc19lenhfZTY4MCgpKQotCQlzZXRfcHhhX2ZiX2luZm8oJmV6eF9mYl9pbmZvXzEpOwotCWVsc2UKLQkJc2V0X3B4YV9mYl9pbmZvKCZlenhfZmJfaW5mb18yKTsKKworCXNldF9weGFfZmJfaW5mbygmZXp4X2ZiX2luZm9fMSk7CisKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZhNzgwX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZXp4X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCi0JCWNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCi17Ci0JLyogV2UgaGF2ZSB0d28gcmFtIGNoaXBzLiBGaXJzdCBvbmUgd2l0aCAzMk1CIGF0IDB4QTAwMDAwMDAgYW5kIGEgc2Vjb25kCi0JICogMTZNQiBvbmUgYXQgMHhBQzAwMDAwMAotCSAqLwotCW1pLT5ucl9iYW5rcyA9IDI7Ci0JbWktPmJhbmtbMF0uc3RhcnQgPSAweGEwMDAwMDAwOwotCW1pLT5iYW5rWzBdLm5vZGUgPSAwOwotCW1pLT5iYW5rWzBdLnNpemUgPSAoMzIqMTAyNCoxMDI0KTsKLQltaS0+YmFua1sxXS5zdGFydCA9IDB4YWMwMDAwMDA7Ci0JbWktPmJhbmtbMV0ubm9kZSA9IDE7Ci0JbWktPmJhbmtbMV0uc2l6ZSA9ICgxNioxMDI0KjEwMjQpOwotfQotCi0jaWZkZWYgQ09ORklHX01BQ0hfRVpYX0E3ODAKIE1BQ0hJTkVfU1RBUlQoRVpYX0E3ODAsICJNb3Rvcm9sYSBFWlggQTc4MCIpCiAJLnBoeXNfaW8gICAgICAgID0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QgICAgPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuZml4dXAJCQk9IGV6eF9maXh1cCwKIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAogCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCi0JLmluaXRfbWFjaGluZSAgID0gJmV6eF9pbml0LAorCS5pbml0X21hY2hpbmUgICA9IGE3ODBfaW5pdCwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NQUNIX0VaWF9FNjgwCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZTY4MF9pMmNfYm9hcmRfaW5mb1tdID0geworCXsgSTJDX0JPQVJEX0lORk8oInRlYTU3NjciLCAweDgxKSB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGU2ODBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGV6eF9waW5fY29uZmlnKSk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZ2VuMV9waW5fY29uZmlnKSk7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZTY4MF9waW5fY29uZmlnKSk7CisKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGU2ODBfaTJjX2JvYXJkX2luZm8pKTsKKworCXNldF9weGFfZmJfaW5mbygmZXp4X2ZiX2luZm9fMSk7CisKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZlNjgwX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCiBNQUNISU5FX1NUQVJUKEVaWF9FNjgwLCAiTW90b3JvbGEgRVpYIEU2ODAiKQogCS5waHlzX2lvICAgICAgICA9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmZpeHVwCQkJPSBlenhfZml4dXAsCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAotCS5pbml0X21hY2hpbmUgICA9ICZlenhfaW5pdCwKKwkuaW5pdF9tYWNoaW5lICAgPSBlNjgwX2luaXQsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFDSF9FWlhfQTEyMDAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhMTIwMF9pMmNfYm9hcmRfaW5mb1tdID0geworCXsgSTJDX0JPQVJEX0lORk8oInRlYTU3NjciLCAweDgxKSB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGExMjAwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlenhfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGdlbjJfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGExMjAwX3Bpbl9jb25maWcpKTsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUoYTEyMDBfaTJjX2JvYXJkX2luZm8pKTsKKworCXNldF9weGFfZmJfaW5mbygmZXp4X2ZiX2luZm9fMik7CisKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZhMTIwMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKwogTUFDSElORV9TVEFSVChFWlhfQTEyMDAsICJNb3Rvcm9sYSBFWlggQTEyMDAiKQogCS5waHlzX2lvICAgICAgICA9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmZpeHVwCQkJPSBlenhfZml4dXAsCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAotCS5pbml0X21hY2hpbmUgICA9ICZlenhfaW5pdCwKKwkuaW5pdF9tYWNoaW5lICAgPSBhMTIwMF9pbml0LAogTUFDSElORV9FTkQKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0E5MTAKK3N0YXRpYyB2b2lkIF9faW5pdCBhOTEwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlenhfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGdlbjJfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGE5MTBfcGluX2NvbmZpZykpOworCisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKworCXNldF9weGFfZmJfaW5mbygmZXp4X2ZiX2luZm9fMik7CisKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZhOTEwX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCiBNQUNISU5FX1NUQVJUKEVaWF9BOTEwLCAiTW90b3JvbGEgRVpYIEE5MTAiKQogCS5waHlzX2lvICAgICAgICA9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmZpeHVwCQkJPSBlenhfZml4dXAsCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAotCS5pbml0X21hY2hpbmUgICA9ICZlenhfaW5pdCwKKwkuaW5pdF9tYWNoaW5lICAgPSBhOTEwX2luaXQsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFDSF9FWlhfRTYKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlNl9pMmNfYm9hcmRfaW5mb1tdID0geworCXsgSTJDX0JPQVJEX0lORk8oInRlYTU3NjciLCAweDgxKSB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGU2X2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlenhfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGdlbjJfcGluX2NvbmZpZykpOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGU2X3Bpbl9jb25maWcpKTsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUoZTZfaTJjX2JvYXJkX2luZm8pKTsKKworCXNldF9weGFfZmJfaW5mbygmZXp4X2ZiX2luZm9fMik7CisKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZlNl9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKwogTUFDSElORV9TVEFSVChFWlhfRTYsICJNb3Rvcm9sYSBFWlggRTYiKQogCS5waHlzX2lvICAgICAgICA9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmZpeHVwCQkJPSBlenhfZml4dXAsCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAotCS5pbml0X21hY2hpbmUgICA9ICZlenhfaW5pdCwKKwkuaW5pdF9tYWNoaW5lICAgPSBlNl9pbml0LAogTUFDSElORV9FTkQKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BQ0hfRVpYX0UyCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZTJfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7IEkyQ19CT0FSRF9JTkZPKCJ0ZWE1NzY3IiwgMHg4MSkgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlMl9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZXp4X3Bpbl9jb25maWcpKTsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShnZW4yX3Bpbl9jb25maWcpKTsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlMl9waW5fY29uZmlnKSk7CisKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGUyX2kyY19ib2FyZF9pbmZvKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJmV6eF9mYl9pbmZvXzIpOworCisJcHhhX3NldF9rZXlwYWRfaW5mbygmZTJfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKIE1BQ0hJTkVfU1RBUlQoRVpYX0UyLCAiTW90b3JvbGEgRVpYIEUyIikKIAkucGh5c19pbyAgICAgICAgPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdCAgICA9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5maXh1cAkJCT0gZXp4X2ZpeHVwLAogCS5ib290X3BhcmFtcyAgICA9IDB4YTAwMDAxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKLQkuaW5pdF9tYWNoaW5lICAgPSAmZXp4X2luaXQsCisJLmluaXRfbWFjaGluZSAgID0gZTJfaW5pdCwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwppbmRleCA4NWVkMGIzLi4wY2NjOTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CkBAIC0zOSw2ICs0MCwyMSBAQAogCQlweGEzeHhfY2xlYXJfcmVzZXRfc3RhdHVzKG1hc2spOwogfQogCit1bnNpZ25lZCBsb25nIGdldF9jbG9ja190aWNrX3JhdGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsb2NrX3RpY2tfcmF0ZTsKKworCWlmIChjcHVfaXNfcHhhMjV4KCkpCisJCWNsb2NrX3RpY2tfcmF0ZSA9IDM2ODY0MDA7CisJZWxzZSBpZiAobWFjaGluZV9pc19tYWluc3RvbmUoKSkKKwkJY2xvY2tfdGlja19yYXRlID0gMzI0OTYwMDsKKwllbHNlCisJCWNsb2NrX3RpY2tfcmF0ZSA9IDMyNTAwMDA7CisKKwlyZXR1cm4gY2xvY2tfdGlja19yYXRlOworfQorRVhQT1JUX1NZTUJPTChnZXRfY2xvY2tfdGlja19yYXRlKTsKKwogLyoKICAqIEdldCB0aGUgY2xvY2sgZnJlcXVlbmN5IGFzIHJlZmxlY3RlZCBieSBDQ0NSIGFuZCB0aGUgdHVyYm8gZmxhZy4KICAqIFdlIGFzc3VtZSB0aGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGFwcGxpZWQgdmlhIGEgZmNzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCmluZGV4IDE0OTMwY2YuLjVmZWMxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMKQEAgLTI1LDYgKzI1LDE4IEBACiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKKyNkZWZpbmUgR1BJTzBfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDAwKSkKKyNkZWZpbmUgR1BJTzFfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA0KSkKKyNkZWZpbmUgR1BJTzJfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA4KSkKKyNkZWZpbmUgR1BJTzNfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMTAwKSkKKworI2RlZmluZSBHUExSX09GRlNFVAkweDAwCisjZGVmaW5lIEdQRFJfT0ZGU0VUCTB4MEMKKyNkZWZpbmUgR1BTUl9PRkZTRVQJMHgxOAorI2RlZmluZSBHUENSX09GRlNFVAkweDI0CisjZGVmaW5lIEdSRVJfT0ZGU0VUCTB4MzAKKyNkZWZpbmUgR0ZFUl9PRkZTRVQJMHgzQworI2RlZmluZSBHRURSX09GRlNFVAkweDQ4CiAKIHN0cnVjdCBweGFfZ3Bpb19jaGlwIHsKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CkBAIC0zMyw2ICs0NSwxOCBAQAogCiBpbnQgcHhhX2xhc3RfZ3BpbzsKIAorI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4CisvKiBHUElPODYvODcvODgvODkgb24gUFhBMjZ4IGhhdmUgdGhlaXIgZGlyZWN0aW9uIGJpdHMgaW4gR1BEUjIgaW52ZXJ0ZWQsCisgKiBhcyB3ZWxsIGFzIHRoZWlyIEFsdGVybmF0ZSBGdW5jdGlvbiB2YWx1ZSBiZWluZyAnMScgZm9yIEdQSU8gaW4gR0FGUnguCisgKi8KK3N0YXRpYyBpbnQgX19ncGlvX2lzX2ludmVydGVkKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIGNwdV9pc19weGEyNXgoKSAmJiBncGlvID4gODU7Cit9CisjZWxzZQorI2RlZmluZSBfX2dwaW9faXNfaW52ZXJ0ZWQoZ3BpbykJKDApCisjZW5kaWYKKwogLyoKICAqIENvbmZpZ3VyZSBwaW5zIGZvciBHUElPIG9yIG90aGVyIGZ1bmN0aW9ucwogICovCkBAIC03NSw3ICs5OSwxMCBAQAogCWdwZHIgPSBweGEtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVDsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdmFsdWUgPSBfX3Jhd19yZWFkbChncGRyKTsKLQl2YWx1ZSAmPSB+bWFzazsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGNoaXAtPmJhc2UgKyBvZmZzZXQpKQorCQl2YWx1ZSB8PSBtYXNrOworCWVsc2UKKwkJdmFsdWUgJj0gfm1hc2s7CiAJX19yYXdfd3JpdGVsKHZhbHVlLCBncGRyKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTk3LDcgKzEyNCwxMCBAQAogCWdwZHIgPSBweGEtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVDsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdG1wID0gX19yYXdfcmVhZGwoZ3Bkcik7Ci0JdG1wIHw9IG1hc2s7CisJaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChjaGlwLT5iYXNlICsgb2Zmc2V0KSkKKwkJdG1wICY9IH5tYXNrOworCWVsc2UKKwkJdG1wIHw9IG1hc2s7CiAJX19yYXdfd3JpdGVsKHRtcCwgZ3Bkcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0xNzMsMTAgKzIwMywxNyBAQAogICovCiBzdGF0aWMgaW50IF9fZ3Bpb19pc19vY2N1cGllZCh1bnNpZ25lZCBncGlvKQogewotCWlmIChjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKQotCQlyZXR1cm4gR0FGUihncGlvKSAmICgweDMgPDwgKCgoZ3BpbykgJiAweGYpICogMikpOwotCWVsc2UKLQkJcmV0dXJuIDA7CisJaWYgKGNwdV9pc19weGEyN3goKSB8fCBjcHVfaXNfcHhhMjV4KCkpIHsKKwkJaW50IGFmID0gKEdBRlIoZ3BpbykgPj4gKChncGlvICYgMHhmKSAqIDIpKSAmIDB4MzsKKwkJaW50IGRpciA9IEdQRFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKKworCQlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQkJcmV0dXJuIGFmICE9IDEgfHwgZGlyID09IDA7CisJCWVsc2UKKwkJCXJldHVybiBhZiAhPSAwIHx8IGRpciAhPSAwOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB4YV9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQpAQCAtMTkwLDkgKzIyNyw4IEBACiAJCS8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKIAkJICogR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBvciB0byBvdXRwdXQgZHVyaW5nIHByb2JlCiAJCSAqLwotCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gfAotCQkgICAgIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdIHwKLQkJICAgICBHUERSKGdwaW8pKSAmIEdQSU9fYml0KGdwaW8pKQorCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX2JpdChncGlvKSkgfHwKKwkJICAgIChHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSAmIEdQSU9fYml0KGdwaW8pKSkKIAkJCXJldHVybiAwOwogCiAJCWlmIChfX2dwaW9faXNfb2NjdXBpZWQoZ3BpbykpCkBAIC0yMDEsNyArMjM3LDEwIEBACiAJCXR5cGUgPSBJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORzsKIAl9CiAKLQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQlHUERSKGdwaW8pIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR1BEUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7CiAKIAlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfcmlzaW5nX2VkZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCmluZGV4IGQ4OTYyYTAuLmUyOTZjZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKQEAgLTE4NCwxNSArMTg0LDIyIEBACiAJR1BJTzZfTU1DX0NMSywKIAlHUElPNTNfTU1DX0NMSywKIAlHUElPOF9NTUNfQ1MwLAotCS8qIHRoZXNlIGFyZSB1c2VkIGJ5IEFNMjAwRVBEICovCi0JR1BJTzUxX0dQSU8sCi0JR1BJTzQ5X0dQSU8sCi0JR1BJTzQ4X0dQSU8sCi0JR1BJTzMyX0dQSU8sCi0JR1BJTzE3X0dQSU8sCi0JR1BJTzE2X0dQSU8sCiB9OwogCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGFtMjAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNhcnJpZXJfYm9hcmRfaW5pdCh2b2lkKQoreworCS8qCisJICogcHV0IGNhcnJpZXIvZXhwYW5zaW9uIGJvYXJkIGluaXQgaGVyZSBpZgorCSAqIHRoZXkgY2Fubm90IGJlIGRldGVjdGVkIHByb2dyYW1hdGljYWxseQorCSAqLworCWFtMjAwX2luaXQoKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGd1bXN0aXhfaW5pdCh2b2lkKQogewogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGd1bXN0aXhfcGluX2NvbmZpZykpOwpAQCAtMjAxLDYgKzIwOCw3IEBACiAJZ3Vtc3RpeF91ZGNfaW5pdCgpOwogCWd1bXN0aXhfbW1jX2luaXQoKTsKIAkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJY2Fycmllcl9ib2FyZF9pbml0KCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoR1VNU1RJWCwgIkd1bXN0aXgiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2ZTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgSFAgaVBBUSBoNXh4eCBIYW5kaGVsZCBDb21wdXRlcnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDAzICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueS4KKyAqIENvcHlyaWdodCAyMDAyICAgICAgIEphbWV5IEhpY2tzIDxqYW1leS5oaWNrc0BocC5jb20+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1ICBQaGlsIEJsdW5kZWxsIDxwYkBoYW5kaGVsZHMub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCAgQW50b24gVm9yb250c292IDxjYm91YXRtYWlscnVAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQ09NUEFRIENPTVBVVEVSIENPUlBPUkFUSU9OIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVELAorICogQVMgVE8gVEhFIFVTRUZVTE5FU1MgT1IgQ09SUkVDVE5FU1MgT0YgVEhJUyBDT0RFIE9SIElUUworICogRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBBdXRob3I6IEphbWV5IEhpY2tzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2g1MDAwLmg+CisjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyoKKyAqIEZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGg1MDAwX2ZsYXNoMF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bGRyIiwKKwkJLnNpemUgPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAorCX0sCisJeworCQkubmFtZSA9ICJyb290IiwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDUwMDBfZmxhc2gxX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gInNlY29uZCByb290IiwKKwkJLnNpemUgPSBTWl8xNk0gLSAweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXNzZXQiLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgaDUwMDBfZmxhc2gwX2RhdGEgPSB7CisJLndpZHRoID0gNCwKKwkucGFydHMgPSBoNTAwMF9mbGFzaDBfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGg1MDAwX2ZsYXNoMF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGg1MDAwX2ZsYXNoMV9kYXRhID0geworCS53aWR0aCA9IDQsCisJLnBhcnRzID0gaDUwMDBfZmxhc2gxX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShoNTAwMF9mbGFzaDFfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg1MDAwX2ZsYXNoMF9yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gUFhBX0NTMF9QSFlTLAorCS5lbmQgPSBQWEFfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg1MDAwX2ZsYXNoMV9yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gUFhBX0NTMF9QSFlTICsgU1pfMzJNLAorCS5lbmQgPSBQWEFfQ1MwX1BIWVMgKyBTWl8zMk0gKyBTWl8xNk0gLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNTAwMF9mbGFzaFtdID0geworCXsKKwkJLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZCA9IDAsCisJCS5yZXNvdXJjZSA9ICZoNTAwMF9mbGFzaDBfcmVzb3VyY2VzLAorCQkubnVtX3Jlc291cmNlcyA9IDEsCisJCS5kZXYgPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZoNTAwMF9mbGFzaDBfZGF0YSwKKwkJfSwKKwl9LAorCXsKKwkJLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCisJCS5pZCA9IDEsCisJCS5yZXNvdXJjZSA9ICZoNTAwMF9mbGFzaDFfcmVzb3VyY2VzLAorCQkubnVtX3Jlc291cmNlcyA9IDEsCisJCS5kZXYgPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZoNTAwMF9mbGFzaDFfZGF0YSwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIFVTQiBEZXZpY2UgQ29udHJvbGxlcgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gaDUwMDBfdWRjX21hY2hfaW5mbyBfX2luaXRkYXRhID0geworCS5ncGlvX3B1bGx1cCA9IEg1MDAwX0dQSU9fVVNCX1BVTExVUCwKK307CisKKy8qCisgKiBHUElPIHNldHVwCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaDUwMDBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogQ3J5c3RhbCBhbmQgQ2xvY2sgU2lnbmFscyAqLworCUdQSU8xMl8zMktIeiwKKworCS8qIFNEUkFNIGFuZCBTdGF0aWMgTWVtb3J5IEkvTyBTaWduYWxzICovCisJR1BJTzE1X25DU18xLAorCUdQSU83OF9uQ1NfMiwKKwlHUElPNzlfbkNTXzMsCisJR1BJTzgwX25DU180LAorCisJLyogRkZVQVJUICovCisJR1BJTzM0X0ZGVUFSVF9SWEQsCisJR1BJTzM1X0ZGVUFSVF9DVFMsCisJR1BJTzM2X0ZGVUFSVF9EQ0QsCisJR1BJTzM3X0ZGVUFSVF9EU1IsCisJR1BJTzM4X0ZGVUFSVF9SSSwKKwlHUElPMzlfRkZVQVJUX1RYRCwKKwlHUElPNDBfRkZVQVJUX0RUUiwKKwlHUElPNDFfRkZVQVJUX1JUUywKKworCS8qIEJUVUFSVCAqLworCUdQSU80Ml9CVFVBUlRfUlhELAorCUdQSU80M19CVFVBUlRfVFhELAorCUdQSU80NF9CVFVBUlRfQ1RTLAorCUdQSU80NV9CVFVBUlRfUlRTLAorCisJLyogU1NQMSAqLworCUdQSU8yM19TU1AxX1NDTEssCisJR1BJTzI1X1NTUDFfVFhELAorCUdQSU8yNl9TU1AxX1JYRCwKK307CisKKy8qCisgKiBMb2NhbGJ1cyBzZXR1cDoKKyAqIENTMDogRmxhc2g7CisgKiBDUzE6IE1lZGlhUSBjaGlwLCBzZWxlY3QgMTYtYml0IGJ1cyBhbmQgdmxpbzsKKyAqIENTNTogU0FNQ09QLgorICovCisKK3N0YXRpYyB2b2lkIGZpeF9tc2Modm9pZCkKK3sKKwlNU0MwID0gMHgxMjljMjRmMjsKKwlNU0MxID0gMHg3ZmY0MjRmYTsKKwlNU0MyID0gMHg3ZmY0N2ZmNDsKKworCU1EUkVGUiB8PSAweDAyMDgwMDAwOworfQorCisvKgorICogUGxhdGZvcm0gZGV2aWNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaDUwMDBfZmxhc2hbMF0sCisJJmg1MDAwX2ZsYXNoWzFdLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGg1MDAwX2luaXQodm9pZCkKK3sKKwlmaXhfbXNjKCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShoNTAwMF9waW5fY29uZmlnKSk7CisJcHhhX3NldF91ZGNfaW5mbygmaDUwMDBfdWRjX21hY2hfaW5mbyk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEg1NDAwLCAiSFAgaVBBUSBINTAwMCIpCisJLnBoeXNfaW8gPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdCA9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyA9IDB4YTAwMDAxMDAsCisJLm1hcF9pbyA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxID0gcHhhMjV4X2luaXRfaXJxLAorCS50aW1lciA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IGg1MDAwX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRjNWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKQEAgLTAsMCArMSw1NzUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYworICoKKyAqIEF1dGhvcjoJRWQgQy4gRXBwCisgKiBDcmVhdGVkOglOb3YgMDUsIDIwMDIKKyAqIENvcHlyaWdodDoJSW50ZWwgQ29ycC4KKyAqCisgKiBNb2RpZmllZCAyMDA4OiAgSm9uYXRoYW4gQ2FtZXJvbgorICoKKyAqIFRoZSBJbW90ZTIgaXMgYSB3aXJlbGVzcyBzZW5zb3Igbm9kZSBwbGF0Zm9ybSBzb2xkCisgKiBieSBDcm9zc2JvdyAod3d3Lnhib3cuY29tKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2RhOTAzeC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CisjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW1vdGUyX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCisJLyogRGV2aWNlIElkZW50aWZpY2F0aW9uIGZvciB3YWtldXAqLworCUdQSU8xMDJfR1BJTywKKworCS8qIEJ1dHRvbiAqLworCUdQSU85MV9HUElPLAorCisJLyogREE5MDMwICovCisJR1BJTzFfR1BJTywKKworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCisJLyogODAyLjE1LjQgcmFkaW8gLSBkcml2ZXIgb3V0IG9mIG1haW5saW5lICovCisJR1BJTzIyX0dQSU8sCQkJLyogQ0NfUlNUTiAqLworCUdQSU8xMTRfR1BJTywJCQkvKiBDQ19GSUZPICovCisJR1BJTzExNl9HUElPLAkJCS8qIENDX0NDQSAqLworCUdQSU8wX0dQSU8sCQkJLyogQ0NfRklGT1AgKi8KKwlHUElPMTZfR1BJTywJCQkvKiBDQ1NGRCAqLworCUdQSU8zOV9HUElPLAkJCS8qIENTbiAqLworCUdQSU8xMTVfR1BJTywJCQkvKiBQb3dlciBlbmFibGUgKi8KKworCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCisKKwkvKiBTU1AgMyAtIDgwMi4xNS40IHJhZGlvICovCisJR1BJTzM5X0dQSU8sIAkJCS8qIENoaXAgU2VsZWN0ICovCisJR1BJTzM0X1NTUDNfU0NMSywKKwlHUElPMzVfU1NQM19UWEQsCisJR1BJTzQxX1NTUDNfUlhELAorCisJLyogU1NQIDIgLSB0byBkYXVnaHRlciBib2FyZHMgKi8KKwlHUElPMzdfR1BJTywJCQkvKiBDaGlwIFNlbGVjdCAqLworCUdQSU8zNl9TU1AyX1NDTEssCisJR1BJTzM4X1NTUDJfVFhELAorCUdQSU8xMV9TU1AyX1JYRCwKKworCS8qIFNTUCAxIC0gdG8gZGF1Z2h0ZXIgYm9hcmRzICovCisJR1BJTzI0X0dQSU8sCQkJLyogQ2hpcCBTZWxlY3QgKi8KKwlHUElPMjNfU1NQMV9TQ0xLLAorCUdQSU8yNV9TU1AxX1RYRCwKKwlHUElPMjZfU1NQMV9SWEQsCisKKwkvKiBCVFVBUlQgQmFzaWMgQ29ubmVjdG9yKi8KKwlHUElPNDJfQlRVQVJUX1JYRCwKKwlHUElPNDNfQlRVQVJUX1RYRCwKKwlHUElPNDRfQlRVQVJUX0NUUywKKwlHUElPNDVfQlRVQVJUX1JUUywKKworCS8qIFNUVUFSVCBTZXJpYWwgY29uc29sZSB2aWEgZGVidWcgYm9hcmQqLworCUdQSU80Nl9TVFVBUlRfUlhELAorCUdQSU80N19TVFVBUlRfVFhELAorCisJLyogQmFzaWMgc2Vuc29yIGJvYXJkICovCisJR1BJTzk2X0dQSU8sCS8qIGFjY2VsZXJvbWV0ZXIgaW50ZXJydXB0ICovCisJR1BJTzk5X0dQSU8sCS8qIEFEQyBpbnRlcnJ1cHQgKi8KKworCS8qIENvbm5lY3RvciBwaW5zIHNwZWNpZmllZCBhcyBncGlvcyAqLworCUdQSU85NF9HUElPLCAvKiBsYXJnZSBiYXNpYyBjb25uZWN0b3IgcGluIDE0ICovCisJR1BJTzEwX0dQSU8sIC8qIGxhcmdlIGJhc2ljIGNvbm5lY3RvciBwaW4gMjMgKi8KKworCS8qIExFRFMgKi8KKwlHUElPMTAzX0dQSU8sIC8qIHJlZCBsZWQgKi8KKwlHUElPMTA0X0dQSU8sIC8qIGdyZWVuIGxlZCAqLworCUdQSU8xMDVfR1BJTywgLyogYmx1ZSBsZWQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgaW1vdGUyX2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICAiaW1vdGUyOnJlZCIsCisJCS5ncGlvICAgICAgID0gMTAzLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJpbW90ZTI6Z3JlZW4iLAorCQkuZ3BpbyAgICAgICA9IDEwNCwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAiaW1vdGUyOmJsdWUiLAorCQkuZ3BpbyAgICAgICA9IDEwNSwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgaW1vdGUyX2xlZF9kYXRhID0geworCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoaW1vdGUyX2xlZF9waW5zKSwKKwkubGVkcyAgICAgPSBpbW90ZTJfbGVkX3BpbnMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbW90ZTJfbGVkcyA9IHsKKwkubmFtZSA9ICJsZWRzLWdwaW8iLAorCS5pZCAgID0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xlZF9kYXRhLAorCX0sCit9OworCisvKiBSZXZlcnNlIGVuZ2luZWVyZWQgcGFydGx5IGZyb20gUGxhdGZvcm14IGRyaXZlcnMgKi8KK2VudW0gaW1vdGUyX2xkb3N7CisJdmNjX3ZyZWYsCisJdmNjX2NjMjQyMCwKKwl2Y2NfbWljYSwKKwl2Y2NfYnQsCisJLyogVGhlIHR3byB2b2x0YWdlcyBhdmFpbGFibGUgdG8gc2Vuc29yIGJvYXJkcyAqLworCXZjY19zZW5zb3JfMV84LAorCXZjY19zZW5zb3JfMywKKworCXZjY19zcmFtX2V4dCwgLyogZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBweGEyNzEgKi8KKwl2Y2NfcHhhX3BsbCwKKwl2Y2NfcHhhX3VzaW0sIC8qIFJlZmVyZW5jZSB2b2x0YWdlIGZvciBjZXJ0YWluIGdwaW9zICovCisJdmNjX3B4YV9tZW0sCisJdmNjX3B4YV9mbGFzaCwKKwl2Y2NfcHhhX2NvcmUsIC8qRGMtRGMgYnVjayBub3QgeWV0IHN1cHBvcnRlZCAqLworCXZjY19sY2QsCisJdmNjX2JiLAorCXZjY19iYmlvLAorCXZjY19pbywgLyogY2MyNDIwIDgwMi4xNS40IHJhZGlvIGFuZCBweGEgdmNjX2lvID8qLworfTsKKworLyogVGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyByZWd1bGF0b3IgY29uc3RyYWludHMgYXJlIG9idmlvdXNseSBkZXBlbmRlbnQKKyAqIG9uIGV4YWN0bHkgd2hhdCBpcyB3aXJlZCB0byBlYWNoIGxkby4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpbmZvcm1hdGlvbiBpcworICogbm90IGdlbmVyYWxseSBhdmFpbGFibGUuICBNb3JlIGluZm9ybWF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZCBmcm9tIFhib3cKKyAqIGJ1dCBhcyBvZiB5ZXQgdGhleSBoYXZlbid0IGJlZW4gZm9ydGhjb21pbmcuCisgKgorICogU29tZSBvZiB0aGVzZSBhcmUgY2xlYXJseSBTdGFyZ2F0ZSAyIHJlbGF0ZWQgKG5vIHdheSBvZiBwbHVnZ2luZworICogaW4gYW4gbGNkIG9uIHRoZSBJTTIgZm9yIGV4YW1wbGUhKS4KKyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGltb3RlMl9sZG9faW5pdF9kYXRhW10gPSB7CisJW3ZjY19iYmlvXSA9IHsKKwkJLmNvbnN0cmFpbnRzID0geyAvKiBib2FyZCBkZWZhdWx0IDEuOFYgKi8KKwkJCS5uYW1lID0gInZjY19iYmlvIiwKKwkJCS5taW5fdVYgPSAxODAwMDAwLAorCQkJLm1heF91ViA9IDE4MDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX2JiXSA9IHsKKwkJLmNvbnN0cmFpbnRzID0geyAvKiBib2FyZCBkZWZhdWx0IDIuOFYgKi8KKwkJCS5uYW1lID0gInZjY19iYiIsCisJCQkubWluX3VWID0gMjcwMDAwMCwKKwkJCS5tYXhfdVYgPSAzMDAwMDAwLAorCQl9LAorCX0sCisJW3ZjY19weGFfZmxhc2hdID0geworCQkuY29uc3RyYWludHMgPSB7LyogZGVmYXVsdCBpcyAxLjhWICovCisJCQkubmFtZSA9ICJ2Y2NfcHhhX2ZsYXNoIiwKKwkJCS5taW5fdVYgPSAxODAwMDAwLAorCQkJLm1heF91ViA9IDE4MDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX2NjMjQyMF0gPSB7IC8qIGFsc28gdmNjX2lvICovCisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS8qIGJvYXJkIGRlZmF1bHQgaXMgMi44ViAqLworCQkJLm5hbWUgPSAidmNjX2NjMjQyMCIsCisJCQkubWluX3VWID0gMjcwMDAwMCwKKwkJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQl9LAorCX0sCisJW3ZjY192cmVmXSA9IHsgLyogUmVmZXJlbmNlIGZvciB3aGF0PyAqLworCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMS44ViAqLworCQkJLm5hbWUgPSAidmNjX3ZyZWYiLAorCQkJLm1pbl91ViA9IDE4MDAwMDAsCisJCQkubWF4X3VWID0gMTgwMDAwMCwKKwkJfSwKKwl9LAorCVt2Y2Nfc3JhbV9leHRdID0geworCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLworCQkJLm5hbWUgPSAidmNjX3NyYW1fZXh0IiwKKwkJCS5taW5fdVYgPSAyODAwMDAwLAorCQkJLm1heF91ViA9IDI4MDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX21pY2FdID0geworCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLworCQkJLm5hbWUgPSAidmNjX21pY2EiLAorCQkJLm1pbl91ViA9IDI4MDAwMDAsCisJCQkubWF4X3VWID0gMjgwMDAwMCwKKwkJfSwKKwl9LAorCVt2Y2NfYnRdID0geworCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLworCQkJLm5hbWUgPSAidmNjX2J0IiwKKwkJCS5taW5fdVYgPSAyODAwMDAwLAorCQkJLm1heF91ViA9IDI4MDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX2xjZF0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAyLjhWICovCisJCQkubmFtZSA9ICJ2Y2NfbGNkIiwKKwkJCS5taW5fdVYgPSAyNzAwMDAwLAorCQkJLm1heF91ViA9IDMzMDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX2lvXSA9IHsgLyogU2FtZSBvciBoaWdoZXIgdGhhbiBldmVyeXRoaW5nCisJCQkgICogYmFyIHZjY2JhdCBhbmQgdmNjdXNiICovCisJCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAyLjhWICovCisJCQkubmFtZSA9ICJ2Y2NfaW8iLAorCQkJLm1pbl91ViA9IDI2OTIwMDAsCisJCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJfSwKKwl9LAorCVt2Y2Nfc2Vuc29yXzFfOF0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAxLjhWICovCisJCQkubmFtZSA9ICJ2Y2Nfc2Vuc29yXzFfOCIsCisJCQkubWluX3VWID0gMTgwMDAwMCwKKwkJCS5tYXhfdVYgPSAxODAwMDAwLAorCQl9LAorCX0sCisJW3ZjY19zZW5zb3JfM10gPSB7IC8qIGN1cmlvdXNseSBkZWZhdWx0IDIuOFYgKi8KKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUgPSAidmNjX3NlbnNvcl8zIiwKKwkJCS5taW5fdVYgPSAyODAwMDAwLAorCQkJLm1heF91ViA9IDMwMDAwMDAsCisJCX0sCisJfSwKKwlbdmNjX3B4YV9wbGxdID0geyAvKiAxLjE3ViAtIDEuNDNWLCBkZWZhdWx0IDEuM1YqLworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZSA9ICJ2Y2NfcHhhX3BsbCIsCisJCQkubWluX3VWID0gMTE3MDAwMCwKKwkJCS5tYXhfdVYgPSAxNDMwMDAwLAorCQl9LAorCX0sCisJW3ZjY19weGFfdXNpbV0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAxLjhWICovCisJCQkubmFtZSA9ICJ2Y2NfcHhhX3VzaW0iLAorCQkJLm1pbl91ViA9IDE3MTAwMDAsCisJCQkubWF4X3VWID0gMjE2MDAwMCwKKwkJfSwKKwl9LAorCVt2Y2NfcHhhX21lbV0gPSB7CisJCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAxLjhWICovCisJCQkubmFtZSA9ICJ2Y2NfcHhhX21lbSIsCisJCQkubWluX3VWID0gMTgwMDAwMCwKKwkJCS5tYXhfdVYgPSAxODAwMDAwLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyBpbW90ZTJfZGE5MDMwX3N1YmRldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPMiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX2JiaW9dLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8zLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfYmJdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE80LAorCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfcHhhX2ZsYXNoXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPNSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX2NjMjQyMF0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzYsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY192cmVmXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPNywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3NyYW1fZXh0XSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPOCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX21pY2FdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE85LAorCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfYnRdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3NlbnNvcl8xXzhdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3NlbnNvcl8zXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPMTIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19sY2RdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xNSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3B4YV9wbGxdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xNywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3B4YV91c2ltXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPMTgsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19pb10sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzE5LAorCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfcHhhX21lbV0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgaW1vdGUyX2RhOTAzMF9wZGF0YSA9IHsKKwkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKGltb3RlMl9kYTkwMzBfc3ViZGV2cyksCisJLnN1YmRldnMgPSBpbW90ZTJfZGE5MDMwX3N1YmRldnMsCit9OworCisvKiBBcyB0aGUgdGhlIGltb3RlMiBkb2Vzbid0IGN1cnJlbnRseSBoYXZlIGEgY29udmVudGlvbmFsIFNEIHNsb3QKKyAqIHRoZXJlIGlzIG5vIG9wdGlvbiB0byBob3RwbHVnIGNhcmRzLCBtYWtpbmcgYWxsIHRoaXMgcmF0aGVyIHNpbXBsZQorICovCitzdGF0aWMgaW50IGltb3RlMl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyogUmF0aGVyIHNpbXBsZSBjYXNlIGFzIGhvdHBsdWdnaW5nIG5vdCBwb3NzaWJsZSAqLworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBpbW90ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsIC8qIGRlZmF1bHQgYW55d2F5ICovCisJLmdldF9ybyA9IGltb3RlMl9tY2lfZ2V0X3JvLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGltb3RlMmZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gIkJvb3Rsb2FkZXIiLAorCQkuc2l6ZSA9IDB4MDAwNDAwMDAsCisJCS5vZmZzZXQgPSAwLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZSA9ICJLZXJuZWwiLAorCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCisJCS5vZmZzZXQgPSAweDAwMDQwMDAwLAorCQkubWFza19mbGFncyA9IDAsCisJfSwgeworCQkubmFtZSA9ICJGaWxlc3lzdGVtIiwKKwkJLnNpemUgPSAweDAxREMwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDI0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlcyA9IHsKKwkuc3RhcnQgPSBQWEFfQ1MwX1BIWVMsCisJLmVuZCA9IFBYQV9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaW1vdGUyX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lID0gImNmaV9wcm9iZSIsCisJLnBhcnRzID0gaW1vdGUyZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGltb3RlMmZsYXNoX3BhcnRpdGlvbnMpLAorCS5uYW1lID0gIlBYQTI3eE9uQ2hpcFJPTSIsCisJLndpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGltb3RlMl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUgPSAicHhhMnh4LWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisvKiBTb21lIG9mIHRoZSBkcml2ZXJzIGhlcmUgYXJlIG91dCBvZiBrZXJuZWwgYXQgdGhlIG1vbWVudCAocGFydHMgb2YgSUlPKQorICogYW5kIGl0IG1heSBiZSBhIHdoaWxlIGJlZm9yZSB0aGV5IGFyZSBpbiB0aGUgbWFpbmxpbmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpbW90ZTJfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7IC8qIFVDQU0gc2Vuc29yIGJvYXJkICovCisJCS50eXBlID0gIm1heDEyMzgiLAorCQkuYWRkciA9IDB4MzUsCisJfSwgeyAvKiBJVFM0MDAgU2Vuc29yIGJvYXJkIG9ubHkgKi8KKwkJLnR5cGUgPSAibWF4MTM2MyIsCisJCS5hZGRyID0gMHgzNCwKKwkJLyogVGhyb3VnaCBhIG5hbmQgZ2F0ZSAtIEFsc28gYmV3YXJlLCBvbiBWMiBzZW5zb3IgYm9hcmQgdGhlCisJCSAqIHB1bGwgdXAgcmVzaXN0b3JzIGFyZSBtaXNzaW5nLgorCQkgKi8KKwkJLmlycSA9IElSUV9HUElPKDk5KSwKKwl9LCB7IC8qIElUUzQwMCBTZW5zb3IgYm9hcmQgb25seSAqLworCQkudHlwZSA9ICJ0c2wyNTYxIiwKKwkJLmFkZHIgPSAweDQ5LAorCQkvKiBUaHJvdWdoIGEgbmFuZCBnYXRlIC0gQWxzbyBiZXdhcmUsIG9uIFYyIHNlbnNvciBib2FyZCB0aGUKKwkJICogcHVsbCB1cCByZXNpc3RvcnMgYXJlIG1pc3NpbmcuCisJCSAqLworCQkuaXJxID0gSVJRX0dQSU8oOTkpLAorCX0sIHsgLyogSVRTNDAwIFNlbnNvciBib2FyZCBvbmx5ICovCisJCS50eXBlID0gInRtcDE3NSIsCisJCS5hZGRyID0gMHg0QSwKKwkJLmlycSA9IElSUV9HUElPKDk2KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGltb3RlMl9wd3JfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS50eXBlID0gImRhOTAzMCIsCisJCS5hZGRyID0gMHg0OSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2RhOTAzMF9wZGF0YSwKKwkJLmlycSA9IGdwaW9fdG9faXJxKDEpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyXzBfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBweGFfc3NwX21hc3Rlcl8xX2luZm8gPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfMl9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsCit9OworCisvKiBQYXRjaCBwb3N0ZWQgYnkgRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+IHdpbGwgcmVtb3ZlCisgKiB0aGUgbmVlZCBmb3IgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgdm9pZCBzcGkxY29udHJvbCh1MzIgY29tbWFuZCkKK3sKKwlncGlvX3NldF92YWx1ZSgyNCwgY29tbWFuZCAmIFBYQTJYWF9DU19BU1NFUlQgPyAwIDogMSk7Cit9OworCitzdGF0aWMgdm9pZCBzcGkzY29udHJvbCh1MzIgY29tbWFuZCkKK3sKKwlncGlvX3NldF92YWx1ZSgzOSwgY29tbWFuZCAmIFBYQTJYWF9DU19BU1NFUlQgPyAwIDogMSk7Cit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBzdGFjY2VsX2NoaXBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gOCwKKwkucnhfdGhyZXNob2xkID0gOCwKKwkuZG1hX2J1cnN0X3NpemUgPSA4LAorCS50aW1lb3V0ID0gMjM1LAorCS5jc19jb250cm9sID0gc3BpMWNvbnRyb2wsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBjYzI0MjBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gOCwKKwkucnhfdGhyZXNob2xkID0gOCwKKwkuZG1hX2J1cnN0X3NpemUgPSA4LAorCS50aW1lb3V0ID0gMjM1LAorCS5jc19jb250cm9sID0gc3BpM2NvbnRyb2wsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7IC8qIERyaXZlciBpbiBJSU8gKi8KKwkJLm1vZGFsaWFzID0gImxpczNsMDJkcSIsCisJCS5tYXhfc3BlZWRfaHogPSA4MDAwMDAwLC8qIDhNSHogbWF4IHNwaSBmcmVxdWVuY3kgYXQgM1YgKi8KKwkJLmJ1c19udW0gPSAxLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnN0YWNjZWxfY2hpcF9pbmZvLAorCQkuaXJxID0gSVJRX0dQSU8oOTYpLAorCX0sIHsgLyogRHJpdmVyIG91dCBvZiBrZXJuZWwgYXMgaXQgbmVlZHMgY29uc2lkZXJhYmxlIHJld3JpdGluZyAqLworCQkubW9kYWxpYXMgPSAiY2MyNDIwIiwKKwkJLm1heF9zcGVlZF9oeiA9IDY1MDAwMDAsCisJCS5idXNfbnVtID0gMywKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZjYzI0MjBfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgaW0yX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCVVQMk9DUiB8PSAgVVAyT0NSX0hYT0UgfCBVUDJPQ1JfRFBQVUUgfCBVUDJPQ1JfRFBQVUJFOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+KFVQMk9DUl9IWE9FIHwgVVAyT0NSX0RQUFVFIHwgVVAyT0NSX0RQUFVCRSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBpbW90ZTJfdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKKwkudWRjX2NvbW1hbmQJCT0gaW0yX3VkY19jb21tYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmltb3RlMl9kZXZpY2VzW10gPSB7CisJJmltb3RlMl9mbGFzaF9kZXZpY2UsCisJJmltb3RlMl9sZWRzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgaTJjX3B3cl9wZGF0YSA9IHsKKwkuZmFzdF9tb2RlID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGkyY19wZGF0YSA9IHsKKwkuZmFzdF9tb2RlID0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbW90ZTJfaW5pdCh2b2lkKQoreworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoaW1vdGUyX3Bpbl9jb25maWcpKTsKKwkvKiBTUEkgY2hpcCBzZWxlY3QgZGlyZWN0aW9ucyAtIGFsbCBvdGhlciBkaXJlY3Rpb25zIHNob3VsZAorCSAqIGJlIGhhbmRsZWQgYnkgZHJpdmVycy4qLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgzNywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDI0LCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMzksIDApOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoaW1vdGUyX2RldmljZXMsIEFSUkFZX1NJWkUoaW1vdGUyX2RldmljZXMpKTsKKworCXB4YTJ4eF9zZXRfc3BpX2luZm8oMSwgJnB4YV9zc3BfbWFzdGVyXzBfaW5mbyk7CisJcHhhMnh4X3NldF9zcGlfaW5mbygyLCAmcHhhX3NzcF9tYXN0ZXJfMV9pbmZvKTsKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDMsICZweGFfc3NwX21hc3Rlcl8yX2luZm8pOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGltb3RlMl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGltb3RlMl9pMmNfYm9hcmRfaW5mbykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGltb3RlMl9wd3JfaTJjX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShpbW90ZTJfcHdyX2kyY19ib2FyZF9pbmZvKSk7CisKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKCZpMmNfcHdyX3BkYXRhKTsKKwlweGFfc2V0X2kyY19pbmZvKCZpMmNfcGRhdGEpOworCisJcHhhX3NldF9tY2lfaW5mbygmaW1vdGUyX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X3VkY19pbmZvKCZpbW90ZTJfdWRjX2luZm8pOworfQorCitNQUNISU5FX1NUQVJUKElOVEVMTU9URTIsICJJTU9URSAyIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gaW1vdGUyX2luaXQsCisJLmJvb3RfcGFyYW1zCT0gMHhBMDAwMDEwMCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCA5NTViZmU2Li43ODA0NjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0zMCwxMCArMzAsNiBAQAogCURNQV9QUklPX0xPVyA9IDIKIH0gcHhhX2RtYV9wcmlvOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9BUk1DT1JFKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCi0jZGVmaW5lIEhBVkVfQVJDSF9QQ0lfU0VUX0RNQV9NQVNLCTEKLSNlbmRpZgotCiAvKgogICogRE1BIHJlZ2lzdHJhdGlvbgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKaW5kZXggNGM5MGIxMy4uZWZiZDJhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaApAQCAtNDMsOCArNDMsMTAgQEAKICNkZWZpbmUgR1BJT19FODAwX1BDTUNJQV9QV1IxICAgIDczCiAKIC8qIGU3eHggSXJEQSBwb3dlciBjb250cm9sICovCi0jZGVmaW5lIEdQSU9fRTdYWF9JUl9PTiAgICAgICAgICAzOAorI2RlZmluZSBHUElPX0U3WFhfSVJfT0ZGICAgICAgICAgMzgKIAogLyogQVNJQyByZWxhdGVkIEdQSU9zICovCiAjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX0lSUSAgICAgICAgNQorI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19QQ0xSICAgICAgMTkKKyNkZWZpbmUgR1BJT19FU0VSSUVTX1RNSU9fU1VTUEVORCAgIDQ1CiAjZGVmaW5lIEdQSU9fRTgwMF9BTkdFTFhfSVJRICAgICAgOApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmgKaW5kZXggNDJlZTE5NS4uMDk5ZjU0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oCkBAIC05NCwzICs5NCw3IEBACiAjZGVmaW5lIEdQSU8yNl9QUkRZX25CU1lfTUQJCShHUElPMjZfUFJEWV9uQlNZIHwgR1BJT19JTikKICNkZWZpbmUgR1BJTzI3X1BSRFlfbkJTWV9NRAkJKEdQSU8yN19QUkRZX25CU1kgfCBHUElPX0lOKQogI2RlZmluZSBHUElPMzZfbkNEX01ECQkJKEdQSU8zNl9uQ0QgfCBHUElPX0lOKQorCisvKiBmb3IgZXhwYW5zaW9uIGJvYXJkcyB0aGF0IGNhbid0IGJlIHByb2dyYW1hdGljYWxseSBkZXRlY3RlZCAqLworZXh0ZXJuIGludCBhbTIwMF9pbml0KHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaDUwMDAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oNTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWFlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaDUwMDAuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBIUCBpUEFRIGg1eHh4IEhhbmRoZWxkIENvbXB1dGVycworICoKKyAqIENvcHlyaWdodCgyMCkwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKyAqIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKKyAqIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogQXV0aG9yOiBKYW1leSBIaWNrcworICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9INTAwMF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSDUwMDBfSAorCisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisKKy8qCisgKiBDUFUgR1BJT3MKKyAqLworCisjZGVmaW5lIEg1MDAwX0dQSU9fUE9XRVJfQlVUVE9OICAgKDApCisjZGVmaW5lIEg1MDAwX0dQSU9fUkVTRVRfQlVUVE9OX04gKDEpCisjZGVmaW5lIEg1MDAwX0dQSU9fT1BUX0lOVCAgICAgICAgKDIpCisjZGVmaW5lIEg1MDAwX0dQSU9fQkFDS1VQX1BPV0VSICAgKDMpCisjZGVmaW5lIEg1MDAwX0dQSU9fQUNUSU9OX0JVVFRPTiAgKDQpCisjZGVmaW5lIEg1MDAwX0dQSU9fQ09NX0RDRF9TT01FVEhJTkcgICg1KSAvKiB3aGF0IGlzIHRoaXMgcmVhbGx5ID8gKi8KKy8qIDYgbm90IGNvbm5lY3RlZCAqLworI2RlZmluZSBINTAwMF9HUElPX1JFU0VUX0JVVFRPTl9BR0FJTl9OICg3KSAvKiBjb25uZWN0ZWQgdG8gZ3BpbyAxIGFzIHdlbGwgKi8KKy8qIDggbm90IGNvbm5lY3RlZCAqLworI2RlZmluZSBINTAwMF9HUElPX1JTT19OICAgICAgICAgICg5KSAgICAgICAvKiByZXNldCBvdXRwdXQgZnJvbSBtYXgxNzAyIHdoaWNoIHJlZ3VsYXRlcyAzLjMgYW5kIDIuNSAqLworI2RlZmluZSBINTAwMF9HUElPX0FTSUNfSU5UX04gICAoMTApICAgICAgIC8qIGZyb20gY29tcGFuaW9uIGFzaWMgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19CVF9FTlZfMCAgICAgKDExKSAgICAgICAvKiB0byBMTVg5ODE0LCBzZXQgdG8gMSBhY2NvcmRpbmcgdG8gcmVnZHVtcCAqLworLyooMTIpIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19CVF9FTlZfMSAgICAgKDEzKSAgICAgICAvKiB0byBMTVg5ODE0LCBzZXQgdG8gMSBhY2NvcmRpbmcgdG8gcmVnZHVtcCAqLworI2RlZmluZSBINTAwMF9HUElPX0JUX1dVICAgICAgICAoMTQpICAgICAgIC8qIGZyb20gTE1YOTgxNCwgRGVmaW5lZCBhcyBIT1NUX1dBS0VVUCBpbiB0aGUgTE1YOTgyMCBkYXRhIHNoZWV0ICovCisvKigxNSkgaXMgQ1MxIyAqLworLyooMTYpIG5vdCBjb25uZWN0ZWQgKi8KKy8qKDE3KSBub3QgY29ubmVjdGVkICovCisvKigxOCkgaXMgcGNtY2lhIHJlYWR5ICovCisvKigxOSkgaXMgZHJlcTEgKi8KKy8qKDIwKSBpcyBkcmVxMCAqLworI2RlZmluZSBINTAwMF9HUElPX09FX1JEX05XUgkoMjEpICAgICAgIC8qIG91dHB1dCBlbmFibGUgb24gcmQvbndyIHNpZ25hbCB0byBjb21wYW5pb24gYXNpYyAqLworLyooMjIpIGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19PUFRfU1BJX0NMSyAgKDIzKSAgICAgICAvKiB0byBleHRlbnNpb24gcGFjayAqLworI2RlZmluZSBINTAwMF9HUElPX09QVF9TUElfQ1NfTiAoMjQpICAgICAgIC8qIHRvIGV4dGVuc2lvbiBwYWNrICovCisjZGVmaW5lIEg1MDAwX0dQSU9fT1BUX1NQSV9ET1VUICgyNSkgICAgICAgLyogdG8gZXh0ZW5zaW9uIHBhY2sgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19PUFRfU1BJX0RJTiAgKDI2KSAgICAgICAvKiB0byBleHRlbnNpb24gcGFjayAqLworLyooMjcpIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19JMlNfQklUQ0xLICAgKDI4KSAgICAgICAvKiBjb25uZWN0ZWQgdG8gQUM5NyBjb2RlYyAqLworI2RlZmluZSBINTAwMF9HUElPX0kyU19EQVRBT1VUICAoMjkpICAgICAgIC8qIGNvbm5lY3RlZCB0byBBQzk3IGNvZGVjICovCisjZGVmaW5lIEg1MDAwX0dQSU9fSTJTX0RBVEFJTiAgICgzMCkgICAgICAgLyogY29ubmVjdGVkIHRvIEFDOTcgY29kZWMgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19JMlNfTFJDTEsgICAgKDMxKSAgICAgICAvKiBjb25uZWN0ZWQgdG8gQUM5NyBjb2RlYyAqLworI2RlZmluZSBINTAwMF9HUElPX0kyU19TWVNDTEsgICAoMzIpICAgICAgIC8qIGNvbm5lY3RlZCB0byBBQzk3IGNvZGVjICovCisvKigzMykgaXMgQ1M1IyAqLworI2RlZmluZSBINTAwMF9HUElPX0NPTV9SWEQgICAgICAoMzQpICAgICAgIC8qIGNvbm5lY3RlZCB0byBjcmFkbGUvY2FibGUgY29ubmVjdG9yICovCisjZGVmaW5lIEg1MDAwX0dQSU9fQ09NX0NUUyAgICAgICgzNSkgICAgICAgLyogY29ubmVjdGVkIHRvIGNyYWRsZS9jYWJsZSBjb25uZWN0b3IgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19DT01fRENEICAgICAgKDM2KSAgICAgICAvKiBjb25uZWN0ZWQgdG8gY3JhZGxlL2NhYmxlIGNvbm5lY3RvciAqLworI2RlZmluZSBINTAwMF9HUElPX0NPTV9EU1IgICAgICAoMzcpICAgICAgIC8qIGNvbm5lY3RlZCB0byBjcmFkbGUvY2FibGUgY29ubmVjdG9yICovCisjZGVmaW5lIEg1MDAwX0dQSU9fQ09NX1JJICAgICAgICgzOCkgICAgICAgLyogY29ubmVjdGVkIHRvIGNyYWRsZS9jYWJsZSBjb25uZWN0b3IgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19DT01fVFhEICAgICAgKDM5KSAgICAgICAvKiBjb25uZWN0ZWQgdG8gY3JhZGxlL2NhYmxlIGNvbm5lY3RvciAqLworI2RlZmluZSBINTAwMF9HUElPX0NPTV9EVFIgICAgICAoNDApICAgICAgIC8qIGNvbm5lY3RlZCB0byBjcmFkbGUvY2FibGUgY29ubmVjdG9yICovCisjZGVmaW5lIEg1MDAwX0dQSU9fQ09NX1JUUyAgICAgICg0MSkgICAgICAgLyogY29ubmVjdGVkIHRvIGNyYWRsZS9jYWJsZSBjb25uZWN0b3IgKi8KKworI2RlZmluZSBINTAwMF9HUElPX0JUX1JYRCAgICAgICAoNDIpICAgICAgIC8qIGNvbm5lY3RlZCB0byBCVCAoTE1YOTgxNCkgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19CVF9UWEQgICAgICAgKDQzKSAgICAgICAvKiBjb25uZWN0ZWQgdG8gQlQgKExNWDk4MTQpICovCisjZGVmaW5lIEg1MDAwX0dQSU9fQlRfQ1RTICAgICAgICg0NCkgICAgICAgLyogY29ubmVjdGVkIHRvIEJUIChMTVg5ODE0KSAqLworI2RlZmluZSBINTAwMF9HUElPX0JUX1JUUyAgICAgICAoNDUpICAgICAgIC8qIGNvbm5lY3RlZCB0byBCVCAoTE1YOTgxNCkgKi8KKworI2RlZmluZSBINTAwMF9HUElPX0lSREFfUlhEICAgICAoNDYpCisjZGVmaW5lIEg1MDAwX0dQSU9fSVJEQV9UWEQgICAgICg0NykKKworI2RlZmluZSBINTAwMF9HUElPX1BPRV9OICAgICAgICAoNDgpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BXRV9OICAgICAgICAoNDkpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BJT1JfTiAgICAgICAoNTApICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BJT1dfTiAgICAgICAoNTEpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BDRTFfTiAgICAgICAoNTIpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BDRTJfTiAgICAgICAoNTMpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BTS1RTRUwgICAgICAoNTQpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BSRUdfTiAgICAgICAoNTUpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX1BXQUlUX04gICAgICAoNTYpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworI2RlZmluZSBINTAwMF9HUElPX0lPSVMxNl9OICAgICAoNTcpICAgICAgIC8qIHVzZWQgZm9yIHBjbWNpYSAqLworCisjZGVmaW5lIEg1MDAwX0dQSU9fSVJEQV9TRCAgICAgICg1OCkgICAgICAgLyogdG8gaHNkbDMwMDIgc2QgKi8KKy8qKDU5KSBub3QgY29ubmVjdGVkICovCisjZGVmaW5lIEg1MDAwX0dQSU9fUE9XRVJfU0RfTiAgICg2MCkgICAgICAgLyogY29udHJvbHMgcG93ZXIgdG8gU0QgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19QT1dFUl9SUzIzMl9OCSg2MSkgICAgICAgLyogaW52ZXJ0ZWQgRk9SQ0VPTiB0byByczIzMiB0cmFuc2NlaXZlciAqLworI2RlZmluZSBINTAwMF9HUElPX1BPV0VSX0FDQ0VMX04JKDYyKSAgICAgICAvKiBjb250cm9scyBwb3dlciB0byBhY2NlbCAqLworLyooNjMpIGlzIG5vdCBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19PUFRfTlZSQU0gICAgKDY0KSAgICAgICAvKiBjb250cm9scyBwb3dlciB0byBleHBhbnNpb24gcGFjayAqLworI2RlZmluZSBINTAwMF9HUElPX0NIR19FTiAgICAgICAoNjUpICAgICAgIC8qIHRvIHNjODAxIGVuICovCisjZGVmaW5lIEg1MDAwX0dQSU9fVVNCX1BVTExVUCAgICg2NikgICAgICAgLyogVVNCIGQrIHB1bGx1cCB2aWEgMS41SyByZXNpc3RvciAqLworI2RlZmluZSBINTAwMF9HUElPX0JUXzJWOF9OICAgICAoNjcpICAgICAgIC8qIDIuOFYgdXNlZCBieSBibHVldG9vdGggKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19FWFRfQ0hHX1JBVEUgKDY4KSAgICAgICAvKiBlbmFibGVzIGV4dGVybmFsIGNoYXJnaW5nIHJhdGUgKi8KKy8qKDY5KSBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lIEg1MDAwX0dQSU9fQ0lSX1JFU0VUICAgICg3MCkgICAgICAgLyogY29uc3VtZXIgSVIgcmVzZXQgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19QT1dFUl9MSUdIVF9TRU5TT1JfTgkoNzEpCisjZGVmaW5lIEg1MDAwX0dQSU9fQlRfTV9SRVNFVCAgICg3MikKKyNkZWZpbmUgSDUwMDBfR1BJT19TVERfQ0hHX1JBVEUgKDczKQorI2RlZmluZSBINTAwMF9HUElPX1NEX1dQX04gICAgICAoNzQpCisjZGVmaW5lIEg1MDAwX0dQSU9fTU9UT1JfT05fTiAgICg3NSkgICAgICAgLyogZXh0ZXJuYWwgcHVsbHVwIG9uIHRoaXMgKi8KKyNkZWZpbmUgSDUwMDBfR1BJT19IRUFEUEhPTkVfREVURUNUCSg3NikKKyNkZWZpbmUgSDUwMDBfR1BJT19VU0JfQ0hHX1JBVEUgKDc3KSAgICAgICAvKiBzZWxlY3QgcmF0ZSBmb3IgY2hhcmdpbmcgdmlhIHVzYiAqLworLyooNzgpIGlzIENTMiMgKi8KKy8qKDc5KSBpcyBDUzMjICovCisvKig4MCkgaXMgQ1M0IyAqLworCisjZW5kaWYgLyogX19BU01fQVJDSF9INTAwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGE1ODJhNmQuLjE2YWI3OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xMDIsNiArMTAyLDkgQEAKICAqICBQWEE5MzAJQjAJMHg2OTA1NjgzNQkweDVFNjQzMDEzCiAgKiAgUFhBOTMwCUIxCTB4NjkwNTY4MzcJMHg3RTY0MzAxMwogICogIFBYQTkzMAlCMgkweDY5MDU2ODM4CTB4OEU2NDMwMTMKKyAqCisgKiAgUFhBOTM1CUEwCTB4NTYwNTY5MzEJMHgxRTY1MzAxMworICogIFBYQTkzNQlCMAkweDU2MDU2OTM2CTB4NkU2NTMwMTMKICAqLwogI2lmZGVmIENPTkZJR19QWEEyNXgKICNkZWZpbmUgX19jcHVfaXNfcHhhMjEwKGlkKQkJCQlcCkBAIC0xNzgsMTIgKzE4MSwyMiBAQAogI2RlZmluZSBfX2NwdV9pc19weGE5MzAoaWQpCQkJCVwKIAkoewkJCQkJCVwKIAkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gNCAmIDB4ZmZmOwlcCi0JCV9pZCA9PSAweDY4MzsJCVwKKwkJX2lkID09IDB4NjgzOwkJCQlcCiAJIH0pCiAjZWxzZQogI2RlZmluZSBfX2NwdV9pc19weGE5MzAoaWQpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkzNQorI2RlZmluZSBfX2NwdV9pc19weGE5MzUoaWQpCQkJCVwKKwkoewkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gNCAmIDB4ZmZmOwlcCisJCV9pZCA9PSAweDY5MzsJCQkJXAorCSB9KQorI2Vsc2UKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTM1KGlkKQkoMCkKKyNlbmRpZgorCiAjZGVmaW5lIGNwdV9pc19weGEyMTAoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyMTAocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMjA0LDggKzIxNyw2IEBACiAJCV9fY3B1X2lzX3B4YTI1eChyZWFkX2NwdWlkX2lkKCkpOwlcCiAJfSkKIAotZXh0ZXJuIGludCBjcHVfaXNfcHhhMjZ4KHZvaWQpOwotCiAjZGVmaW5lIGNwdV9pc19weGEyN3goKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyN3gocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMjMyLDYgKzI0MywxMiBAQAogCQlfX2NwdV9pc19weGE5MzAoaWQpOwkJCVwKIAkgfSkKIAorI2RlZmluZSBjcHVfaXNfcHhhOTM1KCkJCQkJCVwKKwkoewkJCQkJCVwKKwkJdW5zaWduZWQgaW50IGlkID0gcmVhZF9jcHVpZChDUFVJRF9JRCk7CVwKKwkJX19jcHVfaXNfcHhhOTM1KGlkKTsJCQlcCisJIH0pCisKIC8qCiAgKiBDUFVJRCBDb3JlIEdlbmVyYXRpb24gQml0CiAgKiA8PSAweDIgZm9yIHB4YTIxeC9weGEyNXgvcHhhMjZ4L3B4YTI3eApAQCAtMjQ5LDYgKzI2NiwxMiBAQAogCQlfaWQgPT0gMHgzOwkJCQlcCiAJIH0pCiAKKyNkZWZpbmUgX19jcHVfaXNfcHhhOXh4KGlkKQkJCQlcCisJKHsJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfaWQgPSAoaWQpID4+IDQgJiAweGZmZjsJXAorCQlfaWQgPT0gMHg2ODMgfHwgX2lkID09IDB4NjkzOwkJXAorCSB9KQorCiAjZGVmaW5lIGNwdV9pc19weGEyeHgoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyeHgocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMjU5LDMyICsyODIsMjUgQEAKIAkJX19jcHVfaXNfcHhhM3h4KHJlYWRfY3B1aWRfaWQoKSk7CVwKIAkgfSkKIAotLyoKLSAqIEhhbmR5IHJvdXRpbmUgdG8gc2V0IEdQSU8gYWx0ZXJuYXRlIGZ1bmN0aW9ucwotICovCi1leHRlcm4gaW50IHB4YV9ncGlvX21vZGUoIGludCBncGlvX21vZGUgKTsKLQotLyoKLSAqIFJldHVybiBHUElPIGxldmVsLCBub256ZXJvIG1lYW5zIGhpZ2gsIHplcm8gaXMgbG93Ci0gKi8KLWV4dGVybiBpbnQgcHhhX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotCi0vKgotICogU2V0IG91dHB1dCBHUElPIGxldmVsCi0gKi8KLWV4dGVybiB2b2lkIHB4YV9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotCisjZGVmaW5lIGNwdV9pc19weGE5eHgoKQkJCQkJXAorCSh7CQkJCQkJXAorCQlfX2NwdV9pc19weGE5eHgocmVhZF9jcHVpZF9pZCgpKTsJXAorCSB9KQogLyoKICAqIHJldHVybiBjdXJyZW50IG1lbW9yeSBhbmQgTENEIGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIegogICovCiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KHZvaWQpOwogCisvKiByZXR1cm4gdGhlIGNsb2NrIHRpY2sgcmF0ZSBvZiB0aGUgT1MgdGltZXIgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9jbG9ja190aWNrX3JhdGUodm9pZCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQVJNQ09SRSkgJiYgZGVmaW5lZChDT05GSUdfUENJKQogI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMAogI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCTAKICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKyNkZWZpbmUgSEFWRV9BUkNIX1BDSV9TRVRfRE1BX01BU0sJMQogI2VuZGlmCiAKKwogI2VuZGlmICAvKiBfQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaW8uaAppbmRleCA2MDBmZDRmLi4yNjI2OTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaW8uaApAQCAtNiwxNSArNiwxMyBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKIC8qCiAgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55CiAgKiBkcml2ZXJzIG91dCB0aGVyZSB0aGF0IG1pZ2h0IGp1c3Qgd29yayBpZiB3ZSBmYWtlIHRoZW0uLi4KICAqLwotI2RlZmluZSBfX2lvKGEpCQkJKCh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9saXR0bGV0b24uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9saXR0bGV0b24uaAppbmRleCA1YzRlMzIwLi42YzliMjFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbGl0dGxldG9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2xpdHRsZXRvbi5oCkBAIC0xLDggKzEsMTMgQEAKLSNpZm5kZWYgX19BU01fQVJDSF9aWUxPTklURV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfWllMT05JVEVfSAorI2lmbmRlZiBfX0FTTV9BUkNIX0xJVFRMRVRPTl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTElUVExFVE9OX0gKKworI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCiAjZGVmaW5lIExJVFRMRVRPTl9FVEhfUEhZUwkweDMwMDAwMDAwCiAKICNkZWZpbmUgTElUVExFVE9OX0dQSU9fTENEX0NTCSgxNykKIAotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfWllMT05JVEVfSCAqLworI2RlZmluZSBFWFQwX0dQSU9fQkFTRQkoTlJfQlVJTFRJTl9HUElPKQorI2RlZmluZSBFWFQwX0dQSU8oeCkJKEVYVDBfR1BJT19CQVNFICsgKHgpKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9MSVRUTEVUT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDU5YWVmODkuLmY2MjY3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTE4LDE2ICsxOCw2IEBACiAjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4YTAwMDAwMDApCiAKIC8qCi0gKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwotICogdmlydF90b19idXM6IFVzZWQgdG8gdHJhbnNsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gYW4KLSAqCQlhZGRyZXNzIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIKLSAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKLSAqCQl0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgotICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJIF9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJIF9fcGh5c190b192aXJ0KHgpCi0KLS8qCiAgKiBUaGUgbm9kZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgcGh5c2ljYWwgU0RSQU0gYmFua3MgYXMgZm9sbG93czoKICAqCiAgKiAJbm9kZSAwOiAgMHhhMDAwMDAwMC0weGEzZmZmZmZmCS0tPiAgMHhjMDAwMDAwMC0weGMzZmZmZmZmCkBAIC00Nyw2ICszNyw3IEBACiAJY214Mnh4X3BjaV9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZXMpCiAKICNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfNjRNIC0gMSkKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl82NE0pCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyNXguaAppbmRleCA2MTdjYWIyLi5hNzI4NjliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKQEAgLTE1OCw0ICsxNTgsMzUgQEAKICNkZWZpbmUgR1BJTzc2X0xDRF9QQ0xLCQlNRlBfQ0ZHX09VVChHUElPNzYsIEFGMiwgRFJJVkVfTE9XKQogI2RlZmluZSBHUElPNzdfTENEX0JJQVMJCU1GUF9DRkdfT1VUKEdQSU83NywgQUYyLCBEUklWRV9MT1cpCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAorLyogR1BJTyAqLworI2RlZmluZSBHUElPODVfR1BJTwkJTUZQX0NGR19JTihHUElPODUsIEFGMCkKKyNkZWZpbmUgR1BJTzg2X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzg2LCBBRjEpCisjZGVmaW5lIEdQSU84N19HUElPCQlNRlBfQ0ZHX0lOKEdQSU84NywgQUYxKQorI2RlZmluZSBHUElPODhfR1BJTwkJTUZQX0NGR19JTihHUElPODgsIEFGMSkKKyNkZWZpbmUgR1BJTzg5X0dQSU8JCU1GUF9DRkdfSU4oR1BJTzg5LCBBRjEpCisKKy8qIFNEUkFNICovCisjZGVmaW5lIEdQSU84Nl9uU0RDUzIJCU1GUF9DRkdfT1VUKEdQSU84NiwgQUYwLCBEUklWRV9ISUdIKQorI2RlZmluZSBHUElPODdfblNEQ1MzCQlNRlBfQ0ZHX09VVChHUElPODcsIEFGMCwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzg4X1JEbldSCQlNRlBfQ0ZHX09VVChHUElPODgsIEFGMCwgRFJJVkVfSElHSCkKKyNkZWZpbmUgR1BJTzg5X25BQ1JFU0VUCQlNRlBfQ0ZHX09VVChHUElPODksIEFGMCwgRFJJVkVfSElHSCkKKworLyogVVNCICovCisjZGVmaW5lIEdQSU85X1VTQl9SQ1YJCU1GUF9DRkdfSU4oR1BJTzksIEFGMSkKKyNkZWZpbmUgR1BJTzMyX1VTQl9WUAkJTUZQX0NGR19JTihHUElPMzIsIEFGMikKKyNkZWZpbmUgR1BJTzM0X1VTQl9WTQkJTUZQX0NGR19JTihHUElPMzQsIEFGMikKKyNkZWZpbmUgR1BJTzM5X1VTQl9WUE8JCU1GUF9DRkdfT1VUKEdQSU8zOSwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU81Nl9VU0JfVk1PCQlNRlBfQ0ZHX09VVChHUElPNTYsIEFGMSwgRFJJVkVfTE9XKQorI2RlZmluZSBHUElPNTdfVVNCX25PRQkJTUZQX0NGR19PVVQoR1BJTzU3LCBBRjEsIERSSVZFX0hJR0gpCisKKy8qIEFTU1AgKi8KKyNkZWZpbmUgR1BJTzI4X0FTU1BfQklUQ0xLX0lOCU1GUF9DRkdfSU4oR1BJTzI4LCBBRjMpCisjZGVmaW5lIEdQSU8yOF9BU1NQX0JJVENMS19PVVQJTUZQX0NGR19PVVQoR1BJTzI4LCBBRjMsIERSSVZFX0xPVykKKyNkZWZpbmUgR1BJTzI5X0FTU1BfUlhECQlNRlBfQ0ZHX0lOKEdQSU8yOSwgQUYzKQorI2RlZmluZSBHUElPMzBfQVNTUF9UWEQJCU1GUF9DRkdfT1VUKEdQSU8zMCwgQUYzLCBEUklWRV9MT1cpCisjZGVmaW5lIEdQSU8zMV9BU1NQX1NGUk1fSU4JTUZQX0NGR19JTihHUElPMzEsIEFGMSkKKyNkZWZpbmUgR1BJTzMxX0FTU1BfU0ZSTV9PVVQJTUZQX0NGR19PVVQoR1BJTzMxLCBBRjMsIERSSVZFX0xPVykKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU01fQVJDSF9NRlBfUFhBMjVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCmluZGV4IDEyMmJkYmQuLmRhNGY4NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaApAQCAtMTEsNiArMTEsMTIgQEAKICNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTJ4eC5oPgogCisvKiBOb3RlOiBHUElPMy9HUElPNCB3aWxsIGJlIGRyaXZlbiBieSBQb3dlciBJMkMgd2hlbiBQQ0ZSL1BJMkNfRU4KKyAqIGJpdCBpcyBzZXQsIHJlZ2FyZGxlc3Mgb2YgdGhlIEdQSU8gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIEdQSU8zX0dQSU8JCU1GUF9DRkdfSU4oR1BJTzMsIEFGMCkKKyNkZWZpbmUgR1BJTzRfR1BJTwkJTUZQX0NGR19JTihHUElPNCwgQUYwKQorCiAvKiBHUElPICovCiAjZGVmaW5lIEdQSU84NV9HUElPCQlNRlBfQ0ZHX0lOKEdQSU84NSwgQUYwKQogI2RlZmluZSBHUElPODZfR1BJTwkJTUZQX0NGR19JTihHUElPODYsIEFGMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTMwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oCmluZGV4IGZhYmQ5YjQuLmZhNzNmNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTMwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaApAQCAtNDIxLDYgKzQyMSw3IEBACiAjZGVmaW5lIEdQSU8yMF9QV00wCQlNRlBfQ0ZHX0xQTShHUElPMjAsIEFGMiwgUFVMTF9MT1cpCiAjZGVmaW5lIEdQSU8yMV9QV00yCQlNRlBfQ0ZHX0xQTShHUElPMjEsIEFGMywgUFVMTF9MT1cpCiAjZGVmaW5lIEdQSU8yMl9QV00zCQlNRlBfQ0ZHX0xQTShHUElPMjIsIEFGMywgUFVMTF9MT1cpCisjZGVmaW5lIEdQSU8zMl9QV00wCQlNRlBfQ0ZHX0xQTShHUElPMzIsIEFGNCwgUFVMTF9MT1cpCiAKIC8qIENJUiAqLwogI2RlZmluZSBHUElPNDZfQ0lSX09VVAkJTUZQX0NGRyhHUElPNDYsIEFGMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9taW9hNzAxLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWlvYTcwMS5oCmluZGV4IDg0ODNjYjUuLjAyODY4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9taW9hNzAxLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21pb2E3MDEuaApAQCAtMTAsMTIgKzEwLDE0IEBACiAJIChNRlBfUElOKHBpbikgfCBNRlBfIyNhZiB8IE1GUF9ESVJfT1VUIHwgTUZQX0xQTV8jI3N0YXRlKSkKIAogLyogR2xvYmFsIEdQSU9zICovCi0jZGVmaW5lIEdQSU85X0NIQVJHRV9uRU4JCQk5CisjZGVmaW5lIEdQSU85X0NIQVJHRV9FTgkJCQk5CiAjZGVmaW5lIEdQSU8xOF9QT1dFUk9GRgkJCQkxOAogI2RlZmluZSBHUElPODdfTENEX1BPV0VSCQkJODcKKyNkZWZpbmUgR1BJTzk2X0FDX0RFVEVDVAkJCTk2CisjZGVmaW5lIEdQSU84MF9NQVlCRV9DSEFSR0VfVkRST1AJCTgwCS8qIERyb3Agb2YgODhtViAqLwogCiAvKiBVU0IgKi8KLSNkZWZpbmUgR1BJTzEzX1VTQl9ERVRFQ1QJCQkxMworI2RlZmluZSBHUElPMTNfblVTQl9ERVRFQ1QJCQkxMwogI2RlZmluZSBHUElPMjJfVVNCX0VOQUJMRQkJCTIyCiAKIC8qIFNESU8gYml0cyAqLwpAQCAtMjQsNyArMjYsMTAgQEAKICNkZWZpbmUgR1BJTzkxX1NESU9fRU4JCQkJOTEKIAogLyogQmx1ZXRvb3RoICovCisjZGVmaW5lIEdQSU8xNF9CVF9uQUNUSVZJVFkJCQkxNAogI2RlZmluZSBHUElPODNfQlRfT04JCQkJODMKKyNkZWZpbmUgR1BJTzc3X0JUX1VOS05PV04xCQkJNzcKKyNkZWZpbmUgR1BJTzg2X0JUX01BWUJFX25SRVNFVAkJCTg2CiAKIC8qIEdQUyAqLwogI2RlZmluZSBHUElPMjNfR1BTX1VOS05PV04xCQkJMjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCmluZGV4IDRkNDUyZmMuLmNmY2E4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL210ZC14aXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2lmbmRlZiBfX0FSQ0hfUFhBX01URF9YSVBfSF9fCiAjZGVmaW5lIF9fQVJDSF9QWEFfTVREX1hJUF9IX18KIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNkZWZpbmUgeGlwX2lycXBlbmRpbmcoKQkoSUNJUCAmIElDTVIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCmluZGV4IDE1Mjk1ZDkuLjMxZDYxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIF9fUFhBX1JFR1NfSAogI2RlZmluZSBfX1BYQV9SRUdTX0gKIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyoKICAqIFBYQSBDaGlwIHNlbGVjdHMKQEAgLTEyMywyOTggKzEyNCw2IEBACiAjZGVmaW5lIERDTURfV0lEVEg0CSgzIDw8IDE0KQkvKiA0IGJ5dGUgd2lkdGggKFdvcmQpICovCiAjZGVmaW5lIERDTURfTEVOR1RICTB4MDFmZmYJCS8qIGxlbmd0aCBtYXNrIChtYXggPSA4SyAtIDEpICovCiAKLQotLyoKLSAqIFVBUlRzCi0gKi8KLQotLyogRnVsbCBGdW5jdGlvbiBVQVJUIChGRlVBUlQpICovCi0jZGVmaW5lIEZGVUFSVAkJRkZSQlIKLSNkZWZpbmUgRkZSQlIJCV9fUkVHKDB4NDAxMDAwMDApICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBGRlRIUgkJX19SRUcoMHg0MDEwMDAwMCkgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEZGSUVSCQlfX1JFRygweDQwMTAwMDA0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZJSVIJCV9fUkVHKDB4NDAxMDAwMDgpICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZGQ1IJCV9fUkVHKDB4NDAxMDAwMDgpICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEZGTENSCQlfX1JFRygweDQwMTAwMDBDKSAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBGRk1DUgkJX19SRUcoMHg0MDEwMDAxMCkgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGTFNSCQlfX1JFRygweDQwMTAwMDE0KSAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZNU1IJCV9fUkVHKDB4NDAxMDAwMTgpICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZTUFIJCV9fUkVHKDB4NDAxMDAwMUMpICAvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZJU1IJCV9fUkVHKDB4NDAxMDAwMjApICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGRExMCQlfX1JFRygweDQwMTAwMDAwKSAgLyogRGl2aXNvciBMYXRjaCBMb3cgUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgRkZETEgJCV9fUkVHKDB4NDAxMDAwMDQpICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KLQotLyogQmx1ZXRvb3RoIFVBUlQgKEJUVUFSVCkgKi8KLSNkZWZpbmUgQlRVQVJUCQlCVFJCUgotI2RlZmluZSBCVFJCUgkJX19SRUcoMHg0MDIwMDAwMCkgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEJUVEhSCQlfX1JFRygweDQwMjAwMDAwKSAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgQlRJRVIJCV9fUkVHKDB4NDAyMDAwMDQpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVElJUgkJX19SRUcoMHg0MDIwMDAwOCkgIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBCVEZDUgkJX19SRUcoMHg0MDIwMDAwOCkgIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KLSNkZWZpbmUgQlRMQ1IJCV9fUkVHKDB4NDAyMDAwMEMpICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEJUTUNSCQlfX1JFRygweDQwMjAwMDEwKSAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgQlRMU1IJCV9fUkVHKDB4NDAyMDAwMTQpICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBCVE1TUgkJX19SRUcoMHg0MDIwMDAxOCkgIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBCVFNQUgkJX19SRUcoMHg0MDIwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVElTUgkJX19SRUcoMHg0MDIwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgQlRETEwJCV9fUkVHKDB4NDAyMDAwMDApICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVERMSAkJX19SRUcoMHg0MDIwMDAwNCkgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotCi0vKiBTdGFuZGFyZCBVQVJUIChTVFVBUlQpICovCi0jZGVmaW5lIFNUVUFSVAkJU1RSQlIKLSNkZWZpbmUgU1RSQlIJCV9fUkVHKDB4NDA3MDAwMDApICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBTVFRIUgkJX19SRUcoMHg0MDcwMDAwMCkgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFNUSUVSCQlfX1JFRygweDQwNzAwMDA0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RJSVIJCV9fUkVHKDB4NDA3MDAwMDgpICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgU1RGQ1IJCV9fUkVHKDB4NDA3MDAwMDgpICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFNUTENSCQlfX1JFRygweDQwNzAwMDBDKSAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVE1DUgkJX19SRUcoMHg0MDcwMDAxMCkgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIFNUTFNSCQlfX1JFRygweDQwNzAwMDE0KSAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgU1RNU1IJCV9fUkVHKDB4NDA3MDAwMTgpICAvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBTVFNQUgkJX19SRUcoMHg0MDcwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVElTUgkJX19SRUcoMHg0MDcwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RETEwJCV9fUkVHKDB4NDA3MDAwMDApICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVERMSAkJX19SRUcoMHg0MDcwMDAwNCkgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotCi0vKiBIYXJkd2FyZSBVQVJUIChIV1VBUlQpICovCi0jZGVmaW5lIEhXVUFSVAkJSFdSQlIKLSNkZWZpbmUgSFdSQlIJCV9fUkVHKDB4NDE2MDAwMDApICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBIV1RIUgkJX19SRUcoMHg0MTYwMDAwMCkgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEhXSUVSCQlfX1JFRygweDQxNjAwMDA0KSAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgSFdJSVIJCV9fUkVHKDB4NDE2MDAwMDgpICAvKiBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgSFdGQ1IJCV9fUkVHKDB4NDE2MDAwMDgpICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEhXTENSCQlfX1JFRygweDQxNjAwMDBDKSAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBIV01DUgkJX19SRUcoMHg0MTYwMDAxMCkgIC8qIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEhXTFNSCQlfX1JFRygweDQxNjAwMDE0KSAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgSFdNU1IJCV9fUkVHKDB4NDE2MDAwMTgpICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgSFdTUFIJCV9fUkVHKDB4NDE2MDAwMUMpICAvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgSFdJU1IJCV9fUkVHKDB4NDE2MDAwMjApICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEhXRk9SCQlfX1JFRygweDQxNjAwMDI0KSAgLyogUmVjZWl2ZSBGSUZPIE9jY3VwYW5jeSBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBIV0FCUgkJX19SRUcoMHg0MTYwMDAyOCkgIC8qIEF1dG8tQmF1ZCBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBIV0FDUgkJX19SRUcoMHg0MTYwMDAyQykgIC8qIEF1dG8tQmF1ZCBDb3VudCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBIV0RMTAkJX19SRUcoMHg0MTYwMDAwMCkgIC8qIERpdmlzb3IgTGF0Y2ggTG93IFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEhXRExICQlfX1JFRygweDQxNjAwMDA0KSAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0KLSNkZWZpbmUgSUVSX0RNQUUJKDEgPDwgNykJLyogRE1BIFJlcXVlc3RzIEVuYWJsZSAqLwotI2RlZmluZSBJRVJfVVVFCQkoMSA8PCA2KQkvKiBVQVJUIFVuaXQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9OUlpFCSgxIDw8IDUpCS8qIE5SWiBjb2RpbmcgRW5hYmxlICovCi0jZGVmaW5lIElFUl9SVElPRQkoMSA8PCA0KQkvKiBSZWNlaXZlciBUaW1lIE91dCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9NSUUJCSgxIDw8IDMpCS8qIE1vZGVtIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgSUVSX1JMU0UJKDEgPDwgMikJLyogUmVjZWl2ZXIgTGluZSBTdGF0dXMgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBJRVJfVElFCQkoMSA8PCAxKQkvKiBUcmFuc21pdCBEYXRhIHJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBJRVJfUkFWSUUJKDEgPDwgMCkJLyogUmVjZWl2ZXIgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0jZGVmaW5lIElJUl9GSUZPRVMxCSgxIDw8IDcpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCi0jZGVmaW5lIElJUl9GSUZPRVMwCSgxIDw8IDYpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCi0jZGVmaW5lIElJUl9UT0QJCSgxIDw8IDMpCS8qIFRpbWUgT3V0IERldGVjdGVkICovCi0jZGVmaW5lIElJUl9JSUQyCSgxIDw8IDIpCS8qIEludGVycnVwdCBTb3VyY2UgRW5jb2RlZCAqLwotI2RlZmluZSBJSVJfSUlEMQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KLSNkZWZpbmUgSUlSX0lQCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgUGVuZGluZyAoYWN0aXZlIGxvdykgKi8KLQotI2RlZmluZSBGQ1JfSVRMMgkoMSA8PCA3KQkvKiBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCAqLwotI2RlZmluZSBGQ1JfSVRMMQkoMSA8PCA2KQkvKiBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCAqLwotI2RlZmluZSBGQ1JfUkVTRVRURgkoMSA8PCAyKQkvKiBSZXNldCBUcmFuc21pdHRlciBGSUZPICovCi0jZGVmaW5lIEZDUl9SRVNFVFJGCSgxIDw8IDEpCS8qIFJlc2V0IFJlY2VpdmVyIEZJRk8gKi8KLSNkZWZpbmUgRkNSX1RSRklGT0UJKDEgPDwgMCkJLyogVHJhbnNtaXQgYW5kIFJlY2VpdmUgRklGTyBFbmFibGUgKi8KLSNkZWZpbmUgRkNSX0lUTF8xCSgwKQotI2RlZmluZSBGQ1JfSVRMXzgJKEZDUl9JVEwxKQotI2RlZmluZSBGQ1JfSVRMXzE2CShGQ1JfSVRMMikKLSNkZWZpbmUgRkNSX0lUTF8zMgkoRkNSX0lUTDJ8RkNSX0lUTDEpCi0KLSNkZWZpbmUgTENSX0RMQUIJKDEgPDwgNykJLyogRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0ICovCi0jZGVmaW5lIExDUl9TQgkJKDEgPDwgNikJLyogU2V0IEJyZWFrICovCi0jZGVmaW5lIExDUl9TVEtZUAkoMSA8PCA1KQkvKiBTdGlja3kgUGFyaXR5ICovCi0jZGVmaW5lIExDUl9FUFMJCSgxIDw8IDQpCS8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLwotI2RlZmluZSBMQ1JfUEVOCQkoMSA8PCAzKQkvKiBQYXJpdHkgRW5hYmxlICovCi0jZGVmaW5lIExDUl9TVEIJCSgxIDw8IDIpCS8qIFN0b3AgQml0ICovCi0jZGVmaW5lIExDUl9XTFMxCSgxIDw8IDEpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotI2RlZmluZSBMQ1JfV0xTMAkoMSA8PCAwKQkvKiBXb3JkIExlbmd0aCBTZWxlY3QgKi8KLQotI2RlZmluZSBMU1JfRklGT0UJKDEgPDwgNykJLyogRklGTyBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgTFNSX1RFTVQJKDEgPDwgNikJLyogVHJhbnNtaXR0ZXIgRW1wdHkgKi8KLSNkZWZpbmUgTFNSX1REUlEJKDEgPDwgNSkJLyogVHJhbnNtaXQgRGF0YSBSZXF1ZXN0ICovCi0jZGVmaW5lIExTUl9CSQkJKDEgPDwgNCkJLyogQnJlYWsgSW50ZXJydXB0ICovCi0jZGVmaW5lIExTUl9GRQkJKDEgPDwgMykJLyogRnJhbWluZyBFcnJvciAqLwotI2RlZmluZSBMU1JfUEUJCSgxIDw8IDIpCS8qIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBMU1JfT0UJCSgxIDw8IDEpCS8qIE92ZXJydW4gRXJyb3IgKi8KLSNkZWZpbmUgTFNSX0RSCQkoMSA8PCAwKQkvKiBEYXRhIFJlYWR5ICovCi0KLSNkZWZpbmUgTUNSX0xPT1AJKDEgPDwgNCkKLSNkZWZpbmUgTUNSX09VVDIJKDEgPDwgMykJLyogZm9yY2UgTVNSX0RDRCBpbiBsb29wYmFjayBtb2RlICovCi0jZGVmaW5lIE1DUl9PVVQxCSgxIDw8IDIpCS8qIGZvcmNlIE1TUl9SSSBpbiBsb29wYmFjayBtb2RlICovCi0jZGVmaW5lIE1DUl9SVFMJCSgxIDw8IDEpCS8qIFJlcXVlc3QgdG8gU2VuZCAqLwotI2RlZmluZSBNQ1JfRFRSCQkoMSA8PCAwKQkvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0KLSNkZWZpbmUgTVNSX0RDRAkJKDEgPDwgNykJLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLwotI2RlZmluZSBNU1JfUkkJCSgxIDw8IDYpCS8qIFJpbmcgSW5kaWNhdG9yICovCi0jZGVmaW5lIE1TUl9EU1IJCSgxIDw8IDUpCS8qIERhdGEgU2V0IFJlYWR5ICovCi0jZGVmaW5lIE1TUl9DVFMJCSgxIDw8IDQpCS8qIENsZWFyIFRvIFNlbmQgKi8KLSNkZWZpbmUgTVNSX0REQ0QJKDEgPDwgMykJLyogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAqLwotI2RlZmluZSBNU1JfVEVSSQkoMSA8PCAyKQkvKiBUcmFpbGluZyBFZGdlIFJpbmcgSW5kaWNhdG9yICovCi0jZGVmaW5lIE1TUl9ERFNSCSgxIDw8IDEpCS8qIERlbHRhIERhdGEgU2V0IFJlYWR5ICovCi0jZGVmaW5lIE1TUl9EQ1RTCSgxIDw8IDApCS8qIERlbHRhIENsZWFyIFRvIFNlbmQgKi8KLQotLyoKLSAqIElyU1IgKEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlcikKLSAqLwotI2RlZmluZSBTVElTUl9SWFBMICAgICAgKDEgPDwgNCkgICAgICAgIC8qIFJlY2VpdmUgRGF0YSBQb2xhcml0eSAqLwotI2RlZmluZSBTVElTUl9UWFBMICAgICAgKDEgPDwgMykgICAgICAgIC8qIFRyYW5zbWl0IERhdGEgUG9sYXJpdHkgKi8KLSNkZWZpbmUgU1RJU1JfWE1PREUgICAgICgxIDw8IDIpICAgICAgICAvKiBUcmFuc21pdCBQdWxzZSBXaWR0aCBTZWxlY3QgKi8KLSNkZWZpbmUgU1RJU1JfUkNWRUlSICAgICgxIDw8IDEpICAgICAgICAvKiBSZWNlaXZlciBTSVIgRW5hYmxlICovCi0jZGVmaW5lIFNUSVNSX1hNSVRJUiAgICAoMSA8PCAwKSAgICAgICAgLyogVHJhbnNtaXR0ZXIgU0lSIEVuYWJsZSAqLwotCi0KLS8qCi0gKiBJMkMgcmVnaXN0ZXJzIC0gbW92ZWQgaW50byBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCi0gKi8KLQotLyoKLSAqIFNlcmlhbCBBdWRpbyBDb250cm9sbGVyIC0gbW92ZWQgaW50byBzb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwotICovCi0KLS8qCi0gKiBBQzk3IENvbnRyb2xsZXIgcmVnaXN0ZXJzCi0gKi8KLQotI2RlZmluZSBQT0NSCQlfX1JFRygweDQwNTAwMDAwKSAgLyogUENNIE91dCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgUE9DUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgUElDUgkJX19SRUcoMHg0MDUwMDAwNCkgIC8qIFBDTSBJbiBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBJQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgUElDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgTUNDUgkJX19SRUcoMHg0MDUwMDAwOCkgIC8qIE1pYyBJbiBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1DQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgTUNDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgR0NSCQlfX1JFRygweDQwNTAwMDBDKSAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNpZmRlZiBDT05GSUdfUFhBM3h4Ci0jZGVmaW5lIEdDUl9DTEtCUEIJKDEgPDwgMzEpCS8qIEludGVybmFsIGNsb2NrIGVuYWJsZSAqLwotI2VuZGlmCi0jZGVmaW5lIEdDUl9uRE1BRU4JKDEgPDwgMjQpCS8qIG5vbiBETUEgRW5hYmxlICovCi0jZGVmaW5lIEdDUl9DRE9ORV9JRQkoMSA8PCAxOSkJLyogQ29tbWFuZCBEb25lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgR0NSX1NET05FX0lFCSgxIDw8IDE4KQkvKiBTdGF0dXMgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIEdDUl9TRUNSRFlfSUVOCSgxIDw8IDkpCS8qIFNlY29uZGFyeSBSZWFkeSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIEdDUl9QUklSRFlfSUVOCSgxIDw8IDgpCS8qIFByaW1hcnkgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBHQ1JfU0VDUkVTX0lFTgkoMSA8PCA1KQkvKiBTZWNvbmRhcnkgUmVzdW1lIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgR0NSX1BSSVJFU19JRU4JKDEgPDwgNCkJLyogUHJpbWFyeSBSZXN1bWUgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBHQ1JfQUNMSU5LX09GRgkoMSA8PCAzKQkvKiBBQy1saW5rIFNodXQgT2ZmICovCi0jZGVmaW5lIEdDUl9XQVJNX1JTVAkoMSA8PCAyKQkvKiBBQzk3IFdhcm0gUmVzZXQgKi8KLSNkZWZpbmUgR0NSX0NPTERfUlNUCSgxIDw8IDEpCS8qIEFDJzk3IENvbGQgUmVzZXQgKDAgPSBhY3RpdmUpICovCi0jZGVmaW5lIEdDUl9HSUUJCSgxIDw8IDApCS8qIENvZGVjIEdQSSBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgUE9TUgkJX19SRUcoMHg0MDUwMDAxMCkgIC8qIFBDTSBPdXQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBPU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLwotI2RlZmluZSBQT1NSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLwotCi0jZGVmaW5lIFBJU1IJCV9fUkVHKDB4NDA1MDAwMTQpICAvKiBQQ00gSW4gU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFBJU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLwotI2RlZmluZSBQSVNSX0VPQwkoMSA8PCAzKQkvKiBETUEgRW5kLW9mLUNoYWluIChleGNsdXNpdmUgY2xlYXIpICovCi0jZGVmaW5lIFBJU1JfRlNSCSgxIDw8IDIpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCi0KLSNkZWZpbmUgTUNTUgkJX19SRUcoMHg0MDUwMDAxOCkgIC8qIE1pYyBJbiBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUNTUl9GSUZPRQkoMSA8PCA0KQkvKiBGSUZPIGVycm9yICovCi0jZGVmaW5lIE1DU1JfRU9DCSgxIDw8IDMpCS8qIERNQSBFbmQtb2YtQ2hhaW4gKGV4Y2x1c2l2ZSBjbGVhcikgKi8KLSNkZWZpbmUgTUNTUl9GU1IJKDEgPDwgMikJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KLQotI2RlZmluZSBHU1IJCV9fUkVHKDB4NDA1MDAwMUMpICAvKiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEdTUl9DRE9ORQkoMSA8PCAxOSkJLyogQ29tbWFuZCBEb25lICovCi0jZGVmaW5lIEdTUl9TRE9ORQkoMSA8PCAxOCkJLyogU3RhdHVzIERvbmUgKi8KLSNkZWZpbmUgR1NSX1JEQ1MJKDEgPDwgMTUpCS8qIFJlYWQgQ29tcGxldGlvbiBTdGF0dXMgKi8KLSNkZWZpbmUgR1NSX0JJVDNTTFQxMgkoMSA8PCAxNCkJLyogQml0IDMgb2Ygc2xvdCAxMiAqLwotI2RlZmluZSBHU1JfQklUMlNMVDEyCSgxIDw8IDEzKQkvKiBCaXQgMiBvZiBzbG90IDEyICovCi0jZGVmaW5lIEdTUl9CSVQxU0xUMTIJKDEgPDwgMTIpCS8qIEJpdCAxIG9mIHNsb3QgMTIgKi8KLSNkZWZpbmUgR1NSX1NFQ1JFUwkoMSA8PCAxMSkJLyogU2Vjb25kYXJ5IFJlc3VtZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR1NSX1BSSVJFUwkoMSA8PCAxMCkJLyogUHJpbWFyeSBSZXN1bWUgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdTUl9TQ1IJCSgxIDw8IDkpCS8qIFNlY29uZGFyeSBDb2RlYyBSZWFkeSAqLwotI2RlZmluZSBHU1JfUENSCQkoMSA8PCA4KQkvKiAgUHJpbWFyeSBDb2RlYyBSZWFkeSAqLwotI2RlZmluZSBHU1JfTUNJTlQJKDEgPDwgNykJLyogTWljIEluIEludGVycnVwdCAqLwotI2RlZmluZSBHU1JfUE9JTlQJKDEgPDwgNikJLyogUENNIE91dCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR1NSX1BJSU5UCSgxIDw8IDUpCS8qIFBDTSBJbiBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR1NSX0FDT0ZGRAkoMSA8PCAzKQkvKiBBQy1saW5rIFNodXQgT2ZmIERvbmUgKi8KLSNkZWZpbmUgR1NSX01PSU5UCSgxIDw8IDIpCS8qIE1vZGVtIE91dCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR1NSX01JSU5UCSgxIDw8IDEpCS8qIE1vZGVtIEluIEludGVycnVwdCAqLwotI2RlZmluZSBHU1JfR1NDSQkoMSA8PCAwKQkvKiBDb2RlYyBHUEkgU3RhdHVzIENoYW5nZSBJbnRlcnJ1cHQgKi8KLQotI2RlZmluZSBDQVIJCV9fUkVHKDB4NDA1MDAwMjApICAvKiBDT0RFQyBBY2Nlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ0FSX0NBSVAJKDEgPDwgMCkJLyogQ29kZWMgQWNjZXNzIEluIFByb2dyZXNzICovCi0KLSNkZWZpbmUgUENEUgkJX19SRUcoMHg0MDUwMDA0MCkgIC8qIFBDTSBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUNEUgkJX19SRUcoMHg0MDUwMDA2MCkgIC8qIE1pYy1pbiBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBNT0NSCQlfX1JFRygweDQwNTAwMTAwKSAgLyogTW9kZW0gT3V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTU9DUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgKi8KLSNkZWZpbmUgTU9DUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgTUlDUgkJX19SRUcoMHg0MDUwMDEwOCkgIC8qIE1vZGVtIEluIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlDUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgKi8KLSNkZWZpbmUgTUlDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLSNkZWZpbmUgTU9TUgkJX19SRUcoMHg0MDUwMDExMCkgIC8qIE1vZGVtIE91dCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTU9TUl9GSUZPRQkoMSA8PCA0KQkvKiBGSUZPIGVycm9yICovCi0jZGVmaW5lIE1PU1JfRlNSCSgxIDw8IDIpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCi0KLSNkZWZpbmUgTUlTUgkJX19SRUcoMHg0MDUwMDExOCkgIC8qIE1vZGVtIEluIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBNSVNSX0ZJRk9FCSgxIDw8IDQpCS8qIEZJRk8gZXJyb3IgKi8KLSNkZWZpbmUgTUlTUl9FT0MJKDEgPDwgMykJLyogRE1BIEVuZC1vZi1DaGFpbiAoZXhjbHVzaXZlIGNsZWFyKSAqLwotI2RlZmluZSBNSVNSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLwotCi0jZGVmaW5lIE1PRFIJCV9fUkVHKDB4NDA1MDAxNDApICAvKiBNb2RlbSBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBQQUNfUkVHX0JBU0UJX19SRUcoMHg0MDUwMDIwMCkgIC8qIFByaW1hcnkgQXVkaW8gQ29kZWMgKi8KLSNkZWZpbmUgU0FDX1JFR19CQVNFCV9fUkVHKDB4NDA1MDAzMDApICAvKiBTZWNvbmRhcnkgQXVkaW8gQ29kZWMgKi8KLSNkZWZpbmUgUE1DX1JFR19CQVNFCV9fUkVHKDB4NDA1MDA0MDApICAvKiBQcmltYXJ5IE1vZGVtIENvZGVjICovCi0jZGVmaW5lIFNNQ19SRUdfQkFTRQlfX1JFRygweDQwNTAwNTAwKSAgLyogU2Vjb25kYXJ5IE1vZGVtIENvZGVjICovCi0KLQotLyoKLSAqIEZhc3QgSW5mcmFyZWQgQ29tbXVuaWNhdGlvbiBQb3J0Ci0gKi8KLQotI2RlZmluZSBGSUNQCQlfX1JFRygweDQwODAwMDAwKSAgLyogU3RhcnQgb2YgRklDUCBhcmVhICovCi0jZGVmaW5lIElDQ1IwCQlfX1JFRygweDQwODAwMDAwKSAgLyogSUNQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBJQ0NSMQkJX19SRUcoMHg0MDgwMDAwNCkgIC8qIElDUCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgSUNDUjIJCV9fUkVHKDB4NDA4MDAwMDgpICAvKiBJQ1AgQ29udHJvbCBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDRFIJCV9fUkVHKDB4NDA4MDAwMGMpICAvKiBJQ1AgRGF0YSBSZWdpc3RlciAqLwotI2RlZmluZSBJQ1NSMAkJX19SRUcoMHg0MDgwMDAxNCkgIC8qIElDUCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBJQ1NSMQkJX19SRUcoMHg0MDgwMDAxOCkgIC8qIElDUCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwotCi0jZGVmaW5lIElDQ1IwX0FNRQkoMSA8PCA3KQkvKiBBZGRyZXNzIG1hdGNoIGVuYWJsZSAqLwotI2RlZmluZSBJQ0NSMF9USUUJKDEgPDwgNikJLyogVHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIElDQ1IwX1JJRQkoMSA8PCA1KQkvKiBSZWNpZXZlIEZJRk8gaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBJQ0NSMF9SWEUJKDEgPDwgNCkJLyogUmVjZWl2ZSBlbmFibGUgKi8KLSNkZWZpbmUgSUNDUjBfVFhFCSgxIDw8IDMpCS8qIFRyYW5zbWl0IGVuYWJsZSAqLwotI2RlZmluZSBJQ0NSMF9UVVMJKDEgPDwgMikJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBzZWxlY3QgKi8KLSNkZWZpbmUgSUNDUjBfTEJNCSgxIDw8IDEpCS8qIExvb3BiYWNrIG1vZGUgKi8KLSNkZWZpbmUgSUNDUjBfSVRSCSgxIDw8IDApCS8qIElyREEgdHJhbnNtaXNzaW9uICovCi0KLSNkZWZpbmUgSUNDUjJfUlhQICAgICAgICgxIDw8IDMpCS8qIFJlY2VpdmUgUGluIFBvbGFyaXR5IHNlbGVjdCAqLwotI2RlZmluZSBJQ0NSMl9UWFAgICAgICAgKDEgPDwgMikJLyogVHJhbnNtaXQgUGluIFBvbGFyaXR5IHNlbGVjdCAqLwotI2RlZmluZSBJQ0NSMl9UUklHCSgzIDw8IDApCS8qIFJlY2VpdmUgRklGTyBUcmlnZ2VyIHRocmVzaG9sZCAqLwotI2RlZmluZSBJQ0NSMl9UUklHXzggICAgKDAgPDwgMCkJLyogCT49IDggYnl0ZXMgKi8KLSNkZWZpbmUgSUNDUjJfVFJJR18xNiAgICgxIDw8IDApCS8qCT49IDE2IGJ5dGVzICovCi0jZGVmaW5lIElDQ1IyX1RSSUdfMzIgICAoMiA8PCAwKQkvKgk+PSAzMiBieXRlcyAqLwotCi0jaWZkZWYgQ09ORklHX1BYQTI3eAotI2RlZmluZSBJQ1NSMF9FT0MJKDEgPDwgNikJLyogRE1BIEVuZCBvZiBEZXNjcmlwdG9yIENoYWluICovCi0jZW5kaWYKLSNkZWZpbmUgSUNTUjBfRlJFCSgxIDw8IDUpCS8qIEZyYW1pbmcgZXJyb3IgKi8KLSNkZWZpbmUgSUNTUjBfUkZTCSgxIDw8IDQpCS8qIFJlY2VpdmUgRklGTyBzZXJ2aWNlIHJlcXVlc3QgKi8KLSNkZWZpbmUgSUNTUjBfVEZTCSgxIDw8IDMpCS8qIFRyYW5zbml0IEZJRk8gc2VydmljZSByZXF1ZXN0ICovCi0jZGVmaW5lIElDU1IwX1JBQgkoMSA8PCAyKQkvKiBSZWNlaXZlciBhYm9ydCAqLwotI2RlZmluZSBJQ1NSMF9UVVIJKDEgPDwgMSkJLyogVHJ1bnNtaXQgRklGTyB1bmRlcnVuICovCi0jZGVmaW5lIElDU1IwX0VJRgkoMSA8PCAwKQkvKiBFbmQvRXJyb3IgaW4gRklGTyAqLwotCi0jZGVmaW5lIElDU1IxX1JPUgkoMSA8PCA2KQkvKiBSZWNlaXZlciBGSUZPIHVuZGVycnVuICAqLwotI2RlZmluZSBJQ1NSMV9DUkUJKDEgPDwgNSkJLyogQ1JDIGVycm9yICovCi0jZGVmaW5lIElDU1IxX0VPRgkoMSA8PCA0KQkvKiBFbmQgb2YgZnJhbWUgKi8KLSNkZWZpbmUgSUNTUjFfVE5GCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KLSNkZWZpbmUgSUNTUjFfUk5FCSgxIDw8IDIpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KLSNkZWZpbmUgSUNTUjFfVEJZCSgxIDw8IDEpCS8qIFRyYW1zbWl0ZXIgYnVzeSBmbGFnICovCi0jZGVmaW5lIElDU1IxX1JTWQkoMSA8PCAwKQkvKiBSZWNldmllciBzeW5jaHJvbml6ZWQgZmxhZyAqLwotCi0KIC8qCiAgKiBSZWFsIFRpbWUgQ2xvY2sKICAqLwpAQCAtNDYzLDE5ICsxNzIsNiBAQAogCiAKIC8qCi0gKiBQdWxzZSBXaWR0aCBNb2R1bGF0b3IKLSAqLwotCi0jZGVmaW5lIFBXTV9DVFJMMAlfX1JFRygweDQwQjAwMDAwKSAgLyogUFdNIDAgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBQV01fUFdEVVRZMAlfX1JFRygweDQwQjAwMDA0KSAgLyogUFdNIDAgRHV0eSBDeWNsZSBSZWdpc3RlciAqLwotI2RlZmluZSBQV01fUEVSVkFMMAlfX1JFRygweDQwQjAwMDA4KSAgLyogUFdNIDAgUGVyaW9kIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBQV01fQ1RSTDEJX19SRUcoMHg0MEMwMDAwMCkgIC8qIFBXTSAxQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBQV01fUFdEVVRZMQlfX1JFRygweDQwQzAwMDA0KSAgLyogUFdNIDEgRHV0eSBDeWNsZSBSZWdpc3RlciAqLwotI2RlZmluZSBQV01fUEVSVkFMMQlfX1JFRygweDQwQzAwMDA4KSAgLyogUFdNIDEgUGVyaW9kIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQotCi0vKgogICogSW50ZXJydXB0IENvbnRyb2xsZXIKICAqLwogCkBAIC00OTYsMTkgKzE5Miw2IEBACiAgKiBHZW5lcmFsIFB1cnBvc2UgSS9PCiAgKi8KIAotI2RlZmluZSBHUElPMF9CQVNFCSgodm9pZCBfX2lvbWVtICopaW9fcDJ2KDB4NDBFMDAwMDApKQotI2RlZmluZSBHUElPMV9CQVNFCSgodm9pZCBfX2lvbWVtICopaW9fcDJ2KDB4NDBFMDAwMDQpKQotI2RlZmluZSBHUElPMl9CQVNFCSgodm9pZCBfX2lvbWVtICopaW9fcDJ2KDB4NDBFMDAwMDgpKQotI2RlZmluZSBHUElPM19CQVNFCSgodm9pZCBfX2lvbWVtICopaW9fcDJ2KDB4NDBFMDAxMDApKQotCi0jZGVmaW5lIEdQTFJfT0ZGU0VUCTB4MDAKLSNkZWZpbmUgR1BEUl9PRkZTRVQJMHgwQwotI2RlZmluZSBHUFNSX09GRlNFVAkweDE4Ci0jZGVmaW5lIEdQQ1JfT0ZGU0VUCTB4MjQKLSNkZWZpbmUgR1JFUl9PRkZTRVQJMHgzMAotI2RlZmluZSBHRkVSX09GRlNFVAkweDNDCi0jZGVmaW5lIEdFRFJfT0ZGU0VUCTB4NDgKLQogI2RlZmluZSBHUExSMAkJX19SRUcoMHg0MEUwMDAwMCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KICNkZWZpbmUgR1BMUjEJCV9fUkVHKDB4NDBFMDAwMDQpICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDYzOjMyPiAqLwogI2RlZmluZSBHUExSMgkJX19SRUcoMHg0MEUwMDAwOCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCkBAIC01NTgsMTAgKzI0MSw2IEBACiAKICNkZWZpbmUgR1BJT19iaXQoeCkJKDEgPDwgKCh4KSAmIDB4MWYpKQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCi0KLS8qIEludGVycnVwdCBDb250cm9sbGVyICovCi0KICNkZWZpbmUgX0dQTFIoeCkJX19SRUcyKDB4NDBFMDAwMDAsICgoeCkgJiAweDYwKSA+PiAzKQogI2RlZmluZSBfR1BEUih4KQlfX1JFRzIoMHg0MEUwMDAwQywgKCh4KSAmIDB4NjApID4+IDMpCiAjZGVmaW5lIF9HUFNSKHgpCV9fUkVHMigweDQwRTAwMDE4LCAoKHgpICYgMHg2MCkgPj4gMykKQEAgLTU4MCwxODkgKzI1OSw1IEBACiAjZGVmaW5lIEdFRFIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dFRFIoeCkgOiAmR0VEUjMpKQogI2RlZmluZSBHQUZSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HQUZSKHgpIDogXAogCQkJICgoKCh4KSAmIDB4N2YpIDwgMTEyKSA/ICZHQUZSM19MIDogJkdBRlIzX1UpKSkKLSNlbHNlCi0KLSNkZWZpbmUgR1BMUih4KQkJX19SRUcyKDB4NDBFMDAwMDAsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBHUERSKHgpCQlfX1JFRzIoMHg0MEUwMDAwQywgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIEdQU1IoeCkJCV9fUkVHMigweDQwRTAwMDE4LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgR1BDUih4KQkJX19SRUcyKDB4NDBFMDAwMjQsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBHUkVSKHgpCQlfX1JFRzIoMHg0MEUwMDAzMCwgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIEdGRVIoeCkJCV9fUkVHMigweDQwRTAwMDNDLCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgR0VEUih4KQkJX19SRUcyKDB4NDBFMDAwNDgsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBHQUZSKHgpCQlfX1JFRzIoMHg0MEUwMDA1NCwgKCh4KSAmIDB4NzApID4+IDIpCi0KLSNlbmRpZgotCi0vKgotICogUG93ZXIgTWFuYWdlciAtIHNlZSBweGEyeHgtcmVncy5oCi0gKi8KLQotLyoKLSAqIFNTUCBTZXJpYWwgUG9ydCBSZWdpc3RlcnMgLSBzZWUgYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKLSAqLwotCi0vKgotICogTXVsdGlNZWRpYUNhcmQgKE1NQykgY29udHJvbGxlciAtIHNlZSBkcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5oCi0gKi8KLQotLyoKLSAqIENvcmUgQ2xvY2sgLSBzZWUgYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKLSAqLwotCi0jaWZkZWYgQ09ORklHX1BYQTI3eAotCi0vKiBDYW1lcmEgSW50ZXJmYWNlICovCi0jZGVmaW5lIENJQ1IwCQlfX1JFRygweDUwMDAwMDAwKQotI2RlZmluZSBDSUNSMQkJX19SRUcoMHg1MDAwMDAwNCkKLSNkZWZpbmUgQ0lDUjIJCV9fUkVHKDB4NTAwMDAwMDgpCi0jZGVmaW5lIENJQ1IzCQlfX1JFRygweDUwMDAwMDBDKQotI2RlZmluZSBDSUNSNAkJX19SRUcoMHg1MDAwMDAxMCkKLSNkZWZpbmUgQ0lTUgkJX19SRUcoMHg1MDAwMDAxNCkKLSNkZWZpbmUgQ0lGUgkJX19SRUcoMHg1MDAwMDAxOCkKLSNkZWZpbmUgQ0lUT1IJCV9fUkVHKDB4NTAwMDAwMUMpCi0jZGVmaW5lIENJQlIwCQlfX1JFRygweDUwMDAwMDI4KQotI2RlZmluZSBDSUJSMQkJX19SRUcoMHg1MDAwMDAzMCkKLSNkZWZpbmUgQ0lCUjIJCV9fUkVHKDB4NTAwMDAwMzgpCi0KLSNkZWZpbmUgQ0lDUjBfRE1BRU4JKDEgPDwgMzEpCS8qIERNQSByZXF1ZXN0IGVuYWJsZSAqLwotI2RlZmluZSBDSUNSMF9QQVJfRU4JKDEgPDwgMzApCS8qIFBhcml0eSBlbmFibGUgKi8KLSNkZWZpbmUgQ0lDUjBfU0xfQ0FQX0VOCSgxIDw8IDI5KQkvKiBDYXB0dXJlIGVuYWJsZSBmb3Igc2xhdmUgbW9kZSAqLwotI2RlZmluZSBDSUNSMF9FTkIJKDEgPDwgMjgpCS8qIENhbWVyYSBpbnRlcmZhY2UgZW5hYmxlICovCi0jZGVmaW5lIENJQ1IwX0RJUwkoMSA8PCAyNykJLyogQ2FtZXJhIGludGVyZmFjZSBkaXNhYmxlICovCi0jZGVmaW5lIENJQ1IwX1NJTQkoMHg3IDw8IDI0KQkvKiBTZW5zb3IgaW50ZXJmYWNlIG1vZGUgbWFzayAqLwotI2RlZmluZSBDSUNSMF9UT00JKDEgPDwgOSkJLyogVGltZS1vdXQgbWFzayAqLwotI2RlZmluZSBDSUNSMF9SREFWTQkoMSA8PCA4KQkvKiBSZWNlaXZlLWRhdGEtYXZhaWxhYmxlIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjBfRkVNCSgxIDw8IDcpCS8qIEZJRk8tZW1wdHkgbWFzayAqLwotI2RlZmluZSBDSUNSMF9FT0xNCSgxIDw8IDYpCS8qIEVuZC1vZi1saW5lIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjBfUEVSUk0JKDEgPDwgNSkJLyogUGFyaXR5LWVycm9yIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjBfUURNCSgxIDw8IDQpCS8qIFF1aWNrLWRpc2FibGUgbWFzayAqLwotI2RlZmluZSBDSUNSMF9DRE0JKDEgPDwgMykJLyogRGlzYWJsZS1kb25lIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjBfU09GTQkoMSA8PCAyKQkvKiBTdGFydC1vZi1mcmFtZSBtYXNrICovCi0jZGVmaW5lIENJQ1IwX0VPRk0JKDEgPDwgMSkJLyogRW5kLW9mLWZyYW1lIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjBfRk9NCSgxIDw8IDApCS8qIEZJRk8tb3ZlcnJ1biBtYXNrICovCi0KLSNkZWZpbmUgQ0lDUjFfVEJJVAkoMSA8PCAzMSkJLyogVHJhbnNwYXJlbmN5IGJpdCAqLwotI2RlZmluZSBDSUNSMV9SR0JUX0NPTlYJKDB4MyA8PCAyOSkJLyogUkdCVCBjb252ZXJzaW9uIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjFfUFBMCSgweDdmZiA8PCAxNSkJLyogUGl4ZWxzIHBlciBsaW5lIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjFfUkdCX0NPTlYJKDB4NyA8PCAxMikJLyogUkdCIGNvbnZlcnNpb24gbWFzayAqLwotI2RlZmluZSBDSUNSMV9SR0JfRgkoMSA8PCAxMSkJLyogUkdCIGZvcm1hdCAqLwotI2RlZmluZSBDSUNSMV9ZQ0JDUl9GCSgxIDw8IDEwKQkvKiBZQ2JDciBmb3JtYXQgKi8KLSNkZWZpbmUgQ0lDUjFfUkdCX0JQUAkoMHg3IDw8IDcpCS8qIFJHQiBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjFfUkFXX0JQUAkoMHgzIDw8IDUpCS8qIFJhdyBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjFfQ09MT1JfU1AJKDB4MyA8PCAzKQkvKiBDb2xvciBzcGFjZSBtYXNrICovCi0jZGVmaW5lIENJQ1IxX0RXCSgweDcgPDwgMCkJLyogRGF0YSB3aWR0aCBtYXNrICovCi0KLSNkZWZpbmUgQ0lDUjJfQkxXCSgweGZmIDw8IDI0KQkvKiBCZWdpbm5pbmctb2YtbGluZSBwaXhlbCBjbG9jawotCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjJfRUxXCSgweGZmIDw8IDE2KQkvKiBFbmQtb2YtbGluZSBwaXhlbCBjbG9jawotCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjJfSFNXCSgweDNmIDw8IDEwKQkvKiBIb3Jpem9udGFsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLwotI2RlZmluZSBDSUNSMl9CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jawotCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjJfRlNXCSgweDcgPDwgMCkJLyogRnJhbWUgc3RhYmlsaXphdGlvbgotCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KLQotI2RlZmluZSBDSUNSM19CRlcJKDB4ZmYgPDwgMjQpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBsaW5lIGNsb2NrCi0JCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLwotI2RlZmluZSBDSUNSM19FRlcJKDB4ZmYgPDwgMTYpCS8qIEVuZC1vZi1mcmFtZSBsaW5lIGNsb2NrCi0JCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLwotI2RlZmluZSBDSUNSM19WU1cJKDB4M2YgPDwgMTApCS8qIFZlcnRpY2FsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLwotI2RlZmluZSBDSUNSM19CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jawotCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjNfTFBGCSgweDdmZiA8PCAwKQkvKiBMaW5lcyBwZXIgZnJhbWUgbWFzayAqLwotCi0jZGVmaW5lIENJQ1I0X01DTEtfRExZCSgweDMgPDwgMjQpCS8qIE1DTEsgRGF0YSBDYXB0dXJlIERlbGF5IG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjRfUENMS19FTgkoMSA8PCAyMykJLyogUGl4ZWwgY2xvY2sgZW5hYmxlICovCi0jZGVmaW5lIENJQ1I0X1BDUAkoMSA8PCAyMikJLyogUGl4ZWwgY2xvY2sgcG9sYXJpdHkgKi8KLSNkZWZpbmUgQ0lDUjRfSFNQCSgxIDw8IDIxKQkvKiBIb3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KLSNkZWZpbmUgQ0lDUjRfVlNQCSgxIDw8IDIwKQkvKiBWZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCi0jZGVmaW5lIENJQ1I0X01DTEtfRU4JKDEgPDwgMTkpCS8qIE1DTEsgZW5hYmxlICovCi0jZGVmaW5lIENJQ1I0X0ZSX1JBVEUJKDB4NyA8PCA4KQkvKiBGcmFtZSByYXRlIG1hc2sgKi8KLSNkZWZpbmUgQ0lDUjRfRElWCSgweGZmIDw8IDApCS8qIENsb2NrIGRpdmlzb3IgbWFzayAqLwotCi0jZGVmaW5lIENJU1JfRlRPCSgxIDw8IDE1KQkvKiBGSUZPIHRpbWUtb3V0ICovCi0jZGVmaW5lIENJU1JfUkRBVl8yCSgxIDw8IDE0KQkvKiBDaGFubmVsIDIgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLwotI2RlZmluZSBDSVNSX1JEQVZfMQkoMSA8PCAxMykJLyogQ2hhbm5lbCAxIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgKi8KLSNkZWZpbmUgQ0lTUl9SREFWXzAJKDEgPDwgMTIpCS8qIENoYW5uZWwgMCByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCi0jZGVmaW5lIENJU1JfRkVNUFRZXzIJKDEgPDwgMTEpCS8qIENoYW5uZWwgMiBGSUZPIGVtcHR5ICovCi0jZGVmaW5lIENJU1JfRkVNUFRZXzEJKDEgPDwgMTApCS8qIENoYW5uZWwgMSBGSUZPIGVtcHR5ICovCi0jZGVmaW5lIENJU1JfRkVNUFRZXzAJKDEgPDwgOSkJLyogQ2hhbm5lbCAwIEZJRk8gZW1wdHkgKi8KLSNkZWZpbmUgQ0lTUl9FT0wJKDEgPDwgOCkJLyogRW5kIG9mIGxpbmUgKi8KLSNkZWZpbmUgQ0lTUl9QQVJfRVJSCSgxIDw8IDcpCS8qIFBhcml0eSBlcnJvciAqLwotI2RlZmluZSBDSVNSX0NRRAkoMSA8PCA2KQkvKiBDYW1lcmEgaW50ZXJmYWNlIHF1aWNrIGRpc2FibGUgKi8KLSNkZWZpbmUgQ0lTUl9DREQJKDEgPDwgNSkJLyogQ2FtZXJhIGludGVyZmFjZSBkaXNhYmxlIGRvbmUgKi8KLSNkZWZpbmUgQ0lTUl9TT0YJKDEgPDwgNCkJLyogU3RhcnQgb2YgZnJhbWUgKi8KLSNkZWZpbmUgQ0lTUl9FT0YJKDEgPDwgMykJLyogRW5kIG9mIGZyYW1lICovCi0jZGVmaW5lIENJU1JfSUZPXzIJKDEgPDwgMikJLyogRklGTyBvdmVycnVuIGZvciBDaGFubmVsIDIgKi8KLSNkZWZpbmUgQ0lTUl9JRk9fMQkoMSA8PCAxKQkvKiBGSUZPIG92ZXJydW4gZm9yIENoYW5uZWwgMSAqLwotI2RlZmluZSBDSVNSX0lGT18wCSgxIDw8IDApCS8qIEZJRk8gb3ZlcnJ1biBmb3IgQ2hhbm5lbCAwICovCi0KLSNkZWZpbmUgQ0lGUl9GTFZMMgkoMHg3ZiA8PCAyMykJLyogRklGTyAyIGxldmVsIG1hc2sgKi8KLSNkZWZpbmUgQ0lGUl9GTFZMMQkoMHg3ZiA8PCAxNikJLyogRklGTyAxIGxldmVsIG1hc2sgKi8KLSNkZWZpbmUgQ0lGUl9GTFZMMAkoMHhmZiA8PCA4KQkvKiBGSUZPIDAgbGV2ZWwgbWFzayAqLwotI2RlZmluZSBDSUZSX1RITF8wCSgweDMgPDwgNCkJLyogVGhyZXNob2xkIExldmVsIGZvciBDaGFubmVsIDAgRklGTyAqLwotI2RlZmluZSBDSUZSX1JFU0VUX0YJKDEgPDwgMykJLyogUmVzZXQgaW5wdXQgRklGT3MgKi8KLSNkZWZpbmUgQ0lGUl9GRU4yCSgxIDw8IDIpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDIgKi8KLSNkZWZpbmUgQ0lGUl9GRU4xCSgxIDw8IDEpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDEgKi8KLSNkZWZpbmUgQ0lGUl9GRU4wCSgxIDw8IDApCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDAgKi8KLQotI2RlZmluZSBTUkFNX1NJWkUJCTB4NDAwMDAgLyogNHg2NEsgICovCi0KLSNkZWZpbmUgU1JBTV9NRU1fUEhZUwkJMHg1QzAwMDAwMAotCi0jZGVmaW5lIElNUE1DUgkJX19SRUcoMHg1ODAwMDAwMCkgLyogSU0gUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIFJlZyAqLwotI2RlZmluZSBJTVBNU1IJCV9fUkVHKDB4NTgwMDAwMDgpIC8qIElNIFBvd2VyIE1hbmFnZW1lbnQgU3RhdHVzIFJlZyAqLwotCi0jZGVmaW5lIElNUE1DUl9QQzMJCSgweDMgPDwgMjIpIC8qIEJhbmsgMyBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIElNUE1DUl9QQzNfUlVOX01PREUJKDB4MCA8PCAyMikgLyogICBSdW4gbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMzX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIyKSAvKiAgIFN0YW5kYnkgbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMzX0FVVE9fTU9ERQkoMHgzIDw8IDIyKSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLwotCi0jZGVmaW5lIElNUE1DUl9QQzIJCSgweDMgPDwgMjApIC8qIEJhbmsgMiBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIElNUE1DUl9QQzJfUlVOX01PREUJKDB4MCA8PCAyMCkgLyogICBSdW4gbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMyX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIwKSAvKiAgIFN0YW5kYnkgbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMyX0FVVE9fTU9ERQkoMHgzIDw8IDIwKSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLwotCi0jZGVmaW5lIElNUE1DUl9QQzEJCSgweDMgPDwgMTgpIC8qIEJhbmsgMSBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIElNUE1DUl9QQzFfUlVOX01PREUJKDB4MCA8PCAxOCkgLyogICBSdW4gbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMxX1NUQU5EQllfTU9ERQkoMHgxIDw8IDE4KSAvKiAgIFN0YW5kYnkgbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMxX0FVVE9fTU9ERQkoMHgzIDw8IDE4KSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLwotCi0jZGVmaW5lIElNUE1DUl9QQzAJCSgweDMgPDwgMTYpIC8qIEJhbmsgMCBQb3dlciBDb250cm9sICovCi0jZGVmaW5lIElNUE1DUl9QQzBfUlVOX01PREUJKDB4MCA8PCAxNikgLyogICBSdW4gbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMwX1NUQU5EQllfTU9ERQkoMHgxIDw8IDE2KSAvKiAgIFN0YW5kYnkgbW9kZSAqLwotI2RlZmluZSBJTVBNQ1JfUEMwX0FVVE9fTU9ERQkoMHgzIDw8IDE2KSAvKiAgIEF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCAqLwotCi0jZGVmaW5lIElNUE1DUl9BVzMJCSgxIDw8IDExKSAvKiBCYW5rIDMgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCi0jZGVmaW5lIElNUE1DUl9BVzIJCSgxIDw8IDEwKSAvKiBCYW5rIDIgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCi0jZGVmaW5lIElNUE1DUl9BVzEJCSgxIDw8IDkpICAvKiBCYW5rIDEgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCi0jZGVmaW5lIElNUE1DUl9BVzAJCSgxIDw8IDgpICAvKiBCYW5rIDAgQXV0b21hdGljIFdha2UtdXAgZW5hYmxlICovCi0KLSNkZWZpbmUgSU1QTUNSX0RTVAkJKDB4RkYgPDwgMCkgLyogRGVsYXkgU3RhbmRieSBUaW1lLCBtcyAqLwotCi0jZGVmaW5lIElNUE1TUl9QUzMJCSgweDMgPDwgNikgLyogQmFuayAzIFBvd2VyIFN0YXR1czogKi8KLSNkZWZpbmUgSU1QTVNSX1BTM19SVU5fTU9ERQkoMHgwIDw8IDYpIC8qICAgIFJ1biBtb2RlICovCi0jZGVmaW5lIElNUE1TUl9QUzNfU1RBTkRCWV9NT0RFCSgweDEgPDwgNikgLyogICAgU3RhbmRieSBtb2RlICovCi0KLSNkZWZpbmUgSU1QTVNSX1BTMgkJKDB4MyA8PCA0KSAvKiBCYW5rIDIgUG93ZXIgU3RhdHVzOiAqLwotI2RlZmluZSBJTVBNU1JfUFMyX1JVTl9NT0RFCSgweDAgPDwgNCkgLyogICAgUnVuIG1vZGUgKi8KLSNkZWZpbmUgSU1QTVNSX1BTMl9TVEFOREJZX01PREUJKDB4MSA8PCA0KSAvKiAgICBTdGFuZGJ5IG1vZGUgKi8KLQotI2RlZmluZSBJTVBNU1JfUFMxCQkoMHgzIDw8IDIpIC8qIEJhbmsgMSBQb3dlciBTdGF0dXM6ICovCi0jZGVmaW5lIElNUE1TUl9QUzFfUlVOX01PREUJKDB4MCA8PCAyKSAvKiAgICBSdW4gbW9kZSAqLwotI2RlZmluZSBJTVBNU1JfUFMxX1NUQU5EQllfTU9ERQkoMHgxIDw8IDIpIC8qICAgIFN0YW5kYnkgbW9kZSAqLwotCi0jZGVmaW5lIElNUE1TUl9QUzAJCSgweDMgPDwgMCkgLyogQmFuayAwIFBvd2VyIFN0YXR1czogKi8KLSNkZWZpbmUgSU1QTVNSX1BTMF9SVU5fTU9ERQkoMHgwIDw8IDApIC8qICAgIFJ1biBtb2RlICovCi0jZGVmaW5lIElNUE1TUl9QUzBfU1RBTkRCWV9NT0RFCSgweDEgPDwgMCkgLyogICAgU3RhbmRieSBtb2RlICovCi0KLSNlbmRpZgotCi0vKiBQV1JNT0RFIHJlZ2lzdGVyIE0gZmllbGQgdmFsdWVzICovCi0KLSNkZWZpbmUgUFdSTU9ERV9JRExFCQkweDEKLSNkZWZpbmUgUFdSTU9ERV9TVEFOREJZCQkweDIKLSNkZWZpbmUgUFdSTU9ERV9TTEVFUAkJMHgzCi0jZGVmaW5lIFBXUk1PREVfREVFUFNMRUVQCTB4NwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1ncGlvLmgKaW5kZXggNmVmMWRkMC4uZDgzMzkzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1ncGlvLmgKQEAgLTM2NSw0ICszNjUsOSBAQAogI2RlZmluZSBHUElPMTE3X0kyQ1NDTF9NRAkoMTE3IHwgR1BJT19BTFRfRk5fMV9JTikKICNkZWZpbmUgR1BJTzExOF9JMkNTREFfTUQJKDExOCB8IEdQSU9fQUxUX0ZOXzFfSU4pCiAKKy8qCisgKiBIYW5keSByb3V0aW5lIHRvIHNldCBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIGludCBweGFfZ3Bpb19tb2RlKCBpbnQgZ3Bpb19tb2RlICk7CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1BYQTJYWF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKaW5kZXggODA2ZWNmZS4uNzcxMDJkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKQEAgLTQ5LDYgKzQ5LDExIEBACiAjZGVmaW5lIE1FQ1JfTk9TCSgxIDw8IDApCS8qIE51bWJlciBPZiBTb2NrZXRzOiAwIC0+IDEgc29jaywgMSAtPiAyIHNvY2sgKi8KICNkZWZpbmUgTUVDUl9DSVQJKDEgPDwgMSkJLyogQ2FyZCBJcyBUaGVyZTogMCAtPiBubyBjYXJkLCAxIC0+IGNhcmQgaW5zZXJ0ZWQgKi8KIAorI2RlZmluZSBNRENORkdfREUwCSgxIDw8IDApCS8qIFNEUkFNIEJhbmsgMCBFbmFibGUgKi8KKyNkZWZpbmUgTURDTkZHX0RFMQkoMSA8PCAxKQkvKiBTRFJBTSBCYW5rIDEgRW5hYmxlICovCisjZGVmaW5lIE1EQ05GR19ERTIJKDEgPDwgMTYpCS8qIFNEUkFNIEJhbmsgMiBFbmFibGUgKi8KKyNkZWZpbmUgTURDTkZHX0RFMwkoMSA8PCAxNykJLyogU0RSQU0gQmFuayAzIEVuYWJsZSAqLworCiAjZGVmaW5lIE1EUkVGUl9LMERCNAkoMSA8PCAyOSkJLyogU0RDTEswIERpdmlkZSBieSA0IENvbnRyb2wvU3RhdHVzICovCiAjZGVmaW5lIE1EUkVGUl9LMkZSRUUJKDEgPDwgMjUpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCiAjZGVmaW5lIE1EUkVGUl9LMUZSRUUJKDEgPDwgMjQpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCkBAIC0yNDMsNCArMjQ4LDExIEBACiAjZGVmaW5lIE9TQ0NfT09OCSgxIDw8IDEpCS8qIDMyLjc2OGtIeiBPT04gKHdyaXRlLW9uY2Ugb25seSBiaXQpICovCiAjZGVmaW5lIE9TQ0NfT09LCSgxIDw8IDApCS8qIDMyLjc2OGtIeiBPT0sgKHJlYWQtb25seSBiaXQpICovCiAKKy8qIFBXUk1PREUgcmVnaXN0ZXIgTSBmaWVsZCB2YWx1ZXMgKi8KKworI2RlZmluZSBQV1JNT0RFX0lETEUJCTB4MQorI2RlZmluZSBQV1JNT0RFX1NUQU5EQlkJCTB4MgorI2RlZmluZSBQV1JNT0RFX1NMRUVQCQkweDMKKyNkZWZpbmUgUFdSTU9ERV9ERUVQU0xFRVAJMHg3CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAppbmRleCBjYmRhNGQzLi42OTMyNzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhZmIuaApAQCAtNDgsNiArNDgsNyBAQAogI2RlZmluZSBMQ0RfTU9OT19EU1ROXzhCUFAJKCg4ICA8PCA0KSB8IExDRF9UWVBFX01PTk9fRFNUTikKICNkZWZpbmUgTENEX0NPTE9SX1NUTl84QlBQCSgoOCAgPDwgNCkgfCBMQ0RfVFlQRV9DT0xPUl9TVE4pCiAjZGVmaW5lIExDRF9DT0xPUl9EU1ROXzE2QlBQCSgoMTYgPDwgNCkgfCBMQ0RfVFlQRV9DT0xPUl9EU1ROKQorI2RlZmluZSBMQ0RfQ09MT1JfVEZUXzhCUFAJKCg4ICA8PCA0KSB8IExDRF9UWVBFX0NPTE9SX1RGVCkKICNkZWZpbmUgTENEX0NPTE9SX1RGVF8xNkJQUAkoKDE2IDw8IDQpIHwgTENEX1RZUEVfQ09MT1JfVEZUKQogI2RlZmluZSBMQ0RfQ09MT1JfVEZUXzE4QlBQCSgoMTggPDwgNCkgfCBMQ0RfVFlQRV9DT0xPUl9URlQpCiAjZGVmaW5lIExDRF9TTUFSVF9QQU5FTF84QlBQCSgoOCAgPDwgNCkgfCBMQ0RfVFlQRV9TTUFSVF9QQU5FTCkKQEAgLTk0LDYgKzk1LDEwIEBACiAJICogICAgaW4gcHhhMjd4IGFuZCBweGEzeHgsIGluaXRpYWxpemUgdGhlbSB0byB0aGUgc2FtZSB2YWx1ZSBvcgogCSAqICAgIHRoZSBsYXJnZXIgb25lIHdpbGwgYmUgdXNlZAogCSAqIDMuIHNhbWUgdG8ge3JkLHdyfV9wdWxzZV93aWR0aAorCSAqCisJICogNC4gTENEX1BDTEtfRURHRV97UklTRSxGQUxMfSBjb250cm9scyB0aGUgTF9QQ0xLX1dSIHBvbGFyaXR5CisJICogNS4gc3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUIGNvbnRyb2xzIHRoZSBMX0xDTEtfQTAKKwkgKiA2LiBzeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUIGNvbnRyb2xzIHRoZSBMX0xDTEtfUkQKIAkgKi8KIAl1bnNpZ25lZAlhMGNzcmRfc2V0X2hsZDsJLyogQTAgYW5kIENTIFNldHVwL0hvbGQgVGltZSBiZWZvcmUvYWZ0ZXIgTF9GQ0xLX1JEICovCiAJdW5zaWduZWQJYTBjc3dyX3NldF9obGQ7CS8qIEEwIGFuZCBDUyBTZXR1cC9Ib2xkIFRpbWUgYmVmb3JlL2FmdGVyIExfUENMS19XUiAqLwpAQCAtMTA4LDYgKzExMyw3IEBACiAJdW5zaWduZWQgaW50IG51bV9tb2RlczsKIAogCXVuc2lnbmVkIGludAlsY2RfY29ubjsKKwl1bnNpZ25lZCBsb25nCXZpZGVvX21lbV9zaXplOwogCiAJdV9pbnQJCWZpeGVkX21vZGVzOjEsCiAJCQljbWFwX2ludmVyc2U6MSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWFjOTcuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWFjOTcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDFiOWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtYWM5Ny5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0FDOTdfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfQUM5N19ICisKKy8qCisgKiBBQzk3IENvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBQT0NSCQlfX1JFRygweDQwNTAwMDAwKSAgLyogUENNIE91dCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUE9DUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgUElDUgkJX19SRUcoMHg0MDUwMDAwNCkgIC8qIFBDTSBJbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUElDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgTUNDUgkJX19SRUcoMHg0MDUwMDAwOCkgIC8qIE1pYyBJbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1DQ1JfRkVJRQkoMSA8PCAzKQkvKiBGSUZPIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUNDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgR0NSCQlfX1JFRygweDQwNTAwMDBDKSAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNpZmRlZiBDT05GSUdfUFhBM3h4CisjZGVmaW5lIEdDUl9DTEtCUEIJKDEgPDwgMzEpCS8qIEludGVybmFsIGNsb2NrIGVuYWJsZSAqLworI2VuZGlmCisjZGVmaW5lIEdDUl9uRE1BRU4JKDEgPDwgMjQpCS8qIG5vbiBETUEgRW5hYmxlICovCisjZGVmaW5lIEdDUl9DRE9ORV9JRQkoMSA8PCAxOSkJLyogQ29tbWFuZCBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgR0NSX1NET05FX0lFCSgxIDw8IDE4KQkvKiBTdGF0dXMgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEdDUl9TRUNSRFlfSUVOCSgxIDw8IDkpCS8qIFNlY29uZGFyeSBSZWFkeSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEdDUl9QUklSRFlfSUVOCSgxIDw8IDgpCS8qIFByaW1hcnkgUmVhZHkgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHQ1JfU0VDUkVTX0lFTgkoMSA8PCA1KQkvKiBTZWNvbmRhcnkgUmVzdW1lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgR0NSX1BSSVJFU19JRU4JKDEgPDwgNCkJLyogUHJpbWFyeSBSZXN1bWUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHQ1JfQUNMSU5LX09GRgkoMSA8PCAzKQkvKiBBQy1saW5rIFNodXQgT2ZmICovCisjZGVmaW5lIEdDUl9XQVJNX1JTVAkoMSA8PCAyKQkvKiBBQzk3IFdhcm0gUmVzZXQgKi8KKyNkZWZpbmUgR0NSX0NPTERfUlNUCSgxIDw8IDEpCS8qIEFDJzk3IENvbGQgUmVzZXQgKDAgPSBhY3RpdmUpICovCisjZGVmaW5lIEdDUl9HSUUJCSgxIDw8IDApCS8qIENvZGVjIEdQSSBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgUE9TUgkJX19SRUcoMHg0MDUwMDAxMCkgIC8qIFBDTSBPdXQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBPU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLworI2RlZmluZSBQT1NSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworCisjZGVmaW5lIFBJU1IJCV9fUkVHKDB4NDA1MDAwMTQpICAvKiBQQ00gSW4gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJU1JfRklGT0UJKDEgPDwgNCkJLyogRklGTyBlcnJvciAqLworI2RlZmluZSBQSVNSX0VPQwkoMSA8PCAzKQkvKiBETUEgRW5kLW9mLUNoYWluIChleGNsdXNpdmUgY2xlYXIpICovCisjZGVmaW5lIFBJU1JfRlNSCSgxIDw8IDIpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisKKyNkZWZpbmUgTUNTUgkJX19SRUcoMHg0MDUwMDAxOCkgIC8qIE1pYyBJbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNTUl9GSUZPRQkoMSA8PCA0KQkvKiBGSUZPIGVycm9yICovCisjZGVmaW5lIE1DU1JfRU9DCSgxIDw8IDMpCS8qIERNQSBFbmQtb2YtQ2hhaW4gKGV4Y2x1c2l2ZSBjbGVhcikgKi8KKyNkZWZpbmUgTUNTUl9GU1IJKDEgPDwgMikJLyogRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KKworI2RlZmluZSBHU1IJCV9fUkVHKDB4NDA1MDAwMUMpICAvKiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEdTUl9DRE9ORQkoMSA8PCAxOSkJLyogQ29tbWFuZCBEb25lICovCisjZGVmaW5lIEdTUl9TRE9ORQkoMSA8PCAxOCkJLyogU3RhdHVzIERvbmUgKi8KKyNkZWZpbmUgR1NSX1JEQ1MJKDEgPDwgMTUpCS8qIFJlYWQgQ29tcGxldGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgR1NSX0JJVDNTTFQxMgkoMSA8PCAxNCkJLyogQml0IDMgb2Ygc2xvdCAxMiAqLworI2RlZmluZSBHU1JfQklUMlNMVDEyCSgxIDw8IDEzKQkvKiBCaXQgMiBvZiBzbG90IDEyICovCisjZGVmaW5lIEdTUl9CSVQxU0xUMTIJKDEgPDwgMTIpCS8qIEJpdCAxIG9mIHNsb3QgMTIgKi8KKyNkZWZpbmUgR1NSX1NFQ1JFUwkoMSA8PCAxMSkJLyogU2Vjb25kYXJ5IFJlc3VtZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX1BSSVJFUwkoMSA8PCAxMCkJLyogUHJpbWFyeSBSZXN1bWUgSW50ZXJydXB0ICovCisjZGVmaW5lIEdTUl9TQ1IJCSgxIDw8IDkpCS8qIFNlY29uZGFyeSBDb2RlYyBSZWFkeSAqLworI2RlZmluZSBHU1JfUENSCQkoMSA8PCA4KQkvKiAgUHJpbWFyeSBDb2RlYyBSZWFkeSAqLworI2RlZmluZSBHU1JfTUNJTlQJKDEgPDwgNykJLyogTWljIEluIEludGVycnVwdCAqLworI2RlZmluZSBHU1JfUE9JTlQJKDEgPDwgNikJLyogUENNIE91dCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX1BJSU5UCSgxIDw8IDUpCS8qIFBDTSBJbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX0FDT0ZGRAkoMSA8PCAzKQkvKiBBQy1saW5rIFNodXQgT2ZmIERvbmUgKi8KKyNkZWZpbmUgR1NSX01PSU5UCSgxIDw8IDIpCS8qIE1vZGVtIE91dCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgR1NSX01JSU5UCSgxIDw8IDEpCS8qIE1vZGVtIEluIEludGVycnVwdCAqLworI2RlZmluZSBHU1JfR1NDSQkoMSA8PCAwKQkvKiBDb2RlYyBHUEkgU3RhdHVzIENoYW5nZSBJbnRlcnJ1cHQgKi8KKworI2RlZmluZSBDQVIJCV9fUkVHKDB4NDA1MDAwMjApICAvKiBDT0RFQyBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSX0NBSVAJKDEgPDwgMCkJLyogQ29kZWMgQWNjZXNzIEluIFByb2dyZXNzICovCisKKyNkZWZpbmUgUENEUgkJX19SRUcoMHg0MDUwMDA0MCkgIC8qIFBDTSBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNEUgkJX19SRUcoMHg0MDUwMDA2MCkgIC8qIE1pYy1pbiBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBNT0NSCQlfX1JFRygweDQwNTAwMTAwKSAgLyogTW9kZW0gT3V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU9DUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgKi8KKyNkZWZpbmUgTU9DUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgTUlDUgkJX19SRUcoMHg0MDUwMDEwOCkgIC8qIE1vZGVtIEluIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlDUl9GRUlFCSgxIDw8IDMpCS8qIEZJRk8gRXJyb3IgKi8KKyNkZWZpbmUgTUlDUl9GU1JJRQkoMSA8PCAxKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgTU9TUgkJX19SRUcoMHg0MDUwMDExMCkgIC8qIE1vZGVtIE91dCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU9TUl9GSUZPRQkoMSA8PCA0KQkvKiBGSUZPIGVycm9yICovCisjZGVmaW5lIE1PU1JfRlNSCSgxIDw8IDIpCS8qIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisKKyNkZWZpbmUgTUlTUgkJX19SRUcoMHg0MDUwMDExOCkgIC8qIE1vZGVtIEluIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSVNSX0ZJRk9FCSgxIDw8IDQpCS8qIEZJRk8gZXJyb3IgKi8KKyNkZWZpbmUgTUlTUl9FT0MJKDEgPDwgMykJLyogRE1BIEVuZC1vZi1DaGFpbiAoZXhjbHVzaXZlIGNsZWFyKSAqLworI2RlZmluZSBNSVNSX0ZTUgkoMSA8PCAyKQkvKiBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworCisjZGVmaW5lIE1PRFIJCV9fUkVHKDB4NDA1MDAxNDApICAvKiBNb2RlbSBGSUZPIERhdGEgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBQQUNfUkVHX0JBU0UJX19SRUcoMHg0MDUwMDIwMCkgIC8qIFByaW1hcnkgQXVkaW8gQ29kZWMgKi8KKyNkZWZpbmUgU0FDX1JFR19CQVNFCV9fUkVHKDB4NDA1MDAzMDApICAvKiBTZWNvbmRhcnkgQXVkaW8gQ29kZWMgKi8KKyNkZWZpbmUgUE1DX1JFR19CQVNFCV9fUkVHKDB4NDA1MDA0MDApICAvKiBQcmltYXJ5IE1vZGVtIENvZGVjICovCisjZGVmaW5lIFNNQ19SRUdfQkFTRQlfX1JFRygweDQwNTAwNTAwKSAgLyogU2Vjb25kYXJ5IE1vZGVtIENvZGVjICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfQUM5N19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1sY2QuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWxjZC5oCmluZGV4IGM2ODljNGUuLmY4MmRjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWxjZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWxjZC5oCkBAIC0xMiwyNyArMTIsMjkgQEAKICNkZWZpbmUgTENDUjMJCSgweDAwQykJLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAzICovCiAjZGVmaW5lIExDQ1I0CQkoMHgwMTApCS8qIExDRCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgNCAqLwogI2RlZmluZSBMQ0NSNQkJKDB4MDE0KQkvKiBMQ0QgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUgREZCUjAJCSgweDAyMCkJLyogRE1BIENoYW5uZWwgMCBGcmFtZSBCcmFuY2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgREZCUjEJCSgweDAyNCkJLyogRE1BIENoYW5uZWwgMSBGcmFtZSBCcmFuY2ggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTENTUgkJKDB4MDM4KQkvKiBMQ0QgQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENTUgkJKDB4MDM4KQkvKiBMQ0QgQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBMQ1NSMQkJKDB4MDM0KQkvKiBMQ0QgQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBMSUlEUgkJKDB4MDNDKQkvKiBMQ0QgQ29udHJvbGxlciBJbnRlcnJ1cHQgSUQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVE1FRFJHQlIJKDB4MDQwKQkvKiBUTUVEIFJHQiBTZWVkIFJlZ2lzdGVyICovCiAjZGVmaW5lIFRNRURDUgkJKDB4MDQ0KQkvKiBUTUVEIENvbnRyb2wgUmVnaXN0ZXIgKi8KIAorI2RlZmluZSBGQlIwCQkoMHgwMjApCS8qIERNQSBDaGFubmVsIDAgRnJhbWUgQnJhbmNoIFJlZ2lzdGVyICovCisjZGVmaW5lIEZCUjEJCSgweDAyNCkJLyogRE1BIENoYW5uZWwgMSBGcmFtZSBCcmFuY2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkJSMgkJKDB4MDI4KSAvKiBETUEgQ2hhbm5lbCAyIEZyYW1lIEJyYW5jaCBSZWdpc3RlciAqLworI2RlZmluZSBGQlIzCQkoMHgwMkMpIC8qIERNQSBDaGFubmVsIDIgRnJhbWUgQnJhbmNoIFJlZ2lzdGVyICovCisjZGVmaW5lIEZCUjQJCSgweDAzMCkgLyogRE1BIENoYW5uZWwgMiBGcmFtZSBCcmFuY2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkJSNQkJKDB4MTEwKSAvKiBETUEgQ2hhbm5lbCAyIEZyYW1lIEJyYW5jaCBSZWdpc3RlciAqLworI2RlZmluZSBGQlI2CQkoMHgxMTQpIC8qIERNQSBDaGFubmVsIDIgRnJhbWUgQnJhbmNoIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgT1ZMMUMxCQkoMHgwNTApCS8qIE92ZXJsYXkgMSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgT1ZMMUMyCQkoMHgwNjApCS8qIE92ZXJsYXkgMSBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgT1ZMMkMxCQkoMHgwNzApCS8qIE92ZXJsYXkgMiBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgT1ZMMkMyCQkoMHgwODApCS8qIE92ZXJsYXkgMiBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKwogI2RlZmluZSBDTURDUgkJKDB4MTAwKQkvKiBDb21tYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUFJTUgkJKDB4MTA0KQkvKiBQYW5lbCBSZWFkIFN0YXR1cyBSZWdpc3RlciAqLwogCi0jZGVmaW5lIExDQ1IzXzFCUFAJKDAgPDwgMjQpCi0jZGVmaW5lIExDQ1IzXzJCUFAJKDEgPDwgMjQpCi0jZGVmaW5lIExDQ1IzXzRCUFAJKDIgPDwgMjQpCi0jZGVmaW5lIExDQ1IzXzhCUFAJKDMgPDwgMjQpCi0jZGVmaW5lIExDQ1IzXzE2QlBQCSg0IDw8IDI0KQotI2RlZmluZSBMQ0NSM18xOEJQUAkoNSA8PCAyNCkKLSNkZWZpbmUgTENDUjNfMThCUFBfUAkoNiA8PCAyNCkKLSNkZWZpbmUgTENDUjNfMTlCUFAJKDcgPDwgMjQpCi0jZGVmaW5lIExDQ1IzXzE5QlBQX1AJKDEgPDwgMjkpCi0jZGVmaW5lIExDQ1IzXzI0QlBQCSgoMSA8PCAyOSkgfCAoMSA8PCAyNCkpCi0jZGVmaW5lIExDQ1IzXzI1QlBQCSgoMSA8PCAyOSkgfCAoMiA8PCAyNCkpCisjZGVmaW5lIExDQ1IzX0JQUCh4KQkoKCgoeCkgJiAweDcpIDw8IDI0KSB8ICgoKHgpICYgMHg4KSA/ICgxIDw8IDI5KSA6IDApKQogCiAjZGVmaW5lIExDQ1IzX1BERk9SXzAJKDAgPDwgMzApCiAjZGVmaW5lIExDQ1IzX1BERk9SXzEJKDEgPDwgMzApCkBAIC00MiwxOSArNDQsMTYgQEAKICNkZWZpbmUgTENDUjRfUEFMX0ZPUl8wCSgwIDw8IDE1KQogI2RlZmluZSBMQ0NSNF9QQUxfRk9SXzEJKDEgPDwgMTUpCiAjZGVmaW5lIExDQ1I0X1BBTF9GT1JfMgkoMiA8PCAxNSkKKyNkZWZpbmUgTENDUjRfUEFMX0ZPUl8zCSgzIDw8IDE1KQogI2RlZmluZSBMQ0NSNF9QQUxfRk9SX01BU0sJKDMgPDwgMTUpCiAKICNkZWZpbmUgRkRBRFIwCQkoMHgyMDApCS8qIERNQSBDaGFubmVsIDAgRnJhbWUgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEZTQURSMAkJKDB4MjA0KQkvKiBETUEgQ2hhbm5lbCAwIEZyYW1lIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0jZGVmaW5lIEZJRFIwCQkoMHgyMDgpCS8qIERNQSBDaGFubmVsIDAgRnJhbWUgSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTERDTUQwCQkoMHgyMEMpCS8qIERNQSBDaGFubmVsIDAgQ29tbWFuZCBSZWdpc3RlciAqLwogI2RlZmluZSBGREFEUjEJCSgweDIxMCkJLyogRE1BIENoYW5uZWwgMSBGcmFtZSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRlNBRFIxCQkoMHgyMTQpCS8qIERNQSBDaGFubmVsIDEgRnJhbWUgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRklEUjEJCSgweDIxOCkJLyogRE1BIENoYW5uZWwgMSBGcmFtZSBJRCBSZWdpc3RlciAqLwotI2RlZmluZSBMRENNRDEJCSgweDIxQykJLyogRE1BIENoYW5uZWwgMSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEZEQURSMgkJKDB4MjIwKQkvKiBETUEgQ2hhbm5lbCAyIEZyYW1lIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBGREFEUjMJCSgweDIzMCkJLyogRE1BIENoYW5uZWwgMyBGcmFtZSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkRBRFI0CQkoMHgyNDApCS8qIERNQSBDaGFubmVsIDQgRnJhbWUgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIEZEQURSNQkJKDB4MjUwKQkvKiBETUEgQ2hhbm5lbCA1IEZyYW1lIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBGREFEUjYJCSgweDI2MCkgLyogRE1BIENoYW5uZWwgNiBGcmFtZSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRlNBRFI2CQkoMHgyNjQpIC8qIERNQSBDaGFubmVsIDYgRnJhbWUgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRklEUjYJCSgweDI2OCkgLyogRE1BIENoYW5uZWwgNiBGcmFtZSBJRCBSZWdpc3RlciAqLwogCiAjZGVmaW5lIExDQ1IwX0VOQgkoMSA8PCAwKQkvKiBMQ0QgQ29udHJvbGxlciBlbmFibGUgKi8KICNkZWZpbmUgTENDUjBfQ01TCSgxIDw8IDEpCS8qIENvbG9yL01vbm9jaHJvbWUgRGlzcGxheSBTZWxlY3QgKi8KQEAgLTEyNiw5ICsxMjUsNiBAQAogI2RlZmluZSBMQ0NSM19QQ0QJRmxkICg4LCAwKQkvKiBQaXhlbCBDbG9jayBEaXZpc29yICovCiAjZGVmaW5lIExDQ1IzX1BpeENsa0RpdihEaXYpCSgoKERpdikgPDwgRlNoZnQgKExDQ1IzX1BDRCkpKQogCi0jZGVmaW5lIExDQ1IzX0JQUAlGbGQgKDMsIDI0KQkvKiBCaXQgUGVyIFBpeGVsICovCi0jZGVmaW5lIExDQ1IzX0JwcChCcHApCSgoKEJwcCkgPDwgRlNoZnQgKExDQ1IzX0JQUCkpKQotCiAjZGVmaW5lIExDQ1IzX0FDQglGbGQgKDgsIDgpCS8qIEFDIEJpYXMgKi8KICNkZWZpbmUgTENDUjNfQWNiKEFjYikJKCgoQWNiKSA8PCBGU2hmdCAoTENDUjNfQUNCKSkpCiAKQEAgLTE1Nyw4ICsxNTMsMjIgQEAKICNkZWZpbmUgTENTUl9SRF9TVAkoMSA8PCAxMSkJLyogcmVhZCBzdGF0dXMgKi8KICNkZWZpbmUgTENTUl9DTURfSU5UCSgxIDw8IDEyKQkvKiBjb21tYW5kIGludGVycnVwdCAqLwogCisjZGVmaW5lIExDU1IxX0lVKHgpCSgxIDw8ICgoeCkgKyAyMykpIC8qIElucHV0IEZJRk8gdW5kZXJydW4gKi8KKyNkZWZpbmUgTENTUjFfQlMoeCkJKDEgPDwgKCh4KSArIDE1KSkgLyogQnJhbmNoIFN0YXR1cyAqLworI2RlZmluZSBMQ1NSMV9FT0YoeCkJKDEgPDwgKCh4KSArIDcpKSAgLyogRW5kIG9mIEZyYW1lIFN0YXR1cyAqLworI2RlZmluZSBMQ1NSMV9TT0YoeCkJKDEgPDwgKCh4KSAtIDEpKSAgLyogU3RhcnQgb2YgRnJhbWUgU3RhdHVzICovCisKICNkZWZpbmUgTERDTURfUEFMCSgxIDw8IDI2KQkvKiBpbnN0cnVjdHMgRE1BIHRvIGxvYWQgcGFsZXR0ZSBidWZmZXIgKi8KIAorLyogb3ZlcmxheSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVkx4QzFfUFBMKHgpCSgoKCh4KSAtIDEpICYgMHgzZmYpIDw8IDApCS8qIFBpeGVscyBQZXIgTGluZSAqLworI2RlZmluZSBPVkx4QzFfTFBPKHgpCSgoKCh4KSAtIDEpICYgMHgzZmYpIDw8IDEwKQkvKiBOdW1iZXIgb2YgTGluZXMgKi8KKyNkZWZpbmUgT1ZMeEMxX0JQUCh4KQkoKCh4KSAmIDB4ZikgPDwgMjApCS8qIEJpdHMgUGVyIFBpeGVsICovCisjZGVmaW5lIE9WTHhDMV9PRU4JKDEgPDwgMzEpCQkvKiBFbmFibGUgYml0IGZvciBPdmVybGF5ICovCisjZGVmaW5lIE9WTHhDMl9YUE9TKHgpCSgoKHgpICYgMHgzZmYpIDw8IDApCS8qIEhvcml6b250YWwgUG9zaXRpb24gKi8KKyNkZWZpbmUgT1ZMeEMyX1lQT1MoeCkJKCgoeCkgJiAweDNmZikgPDwgMTApCS8qIFZlcnRpY2FsIFBvc2l0aW9uICovCisjZGVmaW5lIE9WTDJDMl9QRk9SKHgpCSgoKHgpICYgMHg3KSA8PCAyMCkJLyogUGl4ZWwgRm9ybWF0ICovCisKIC8qIHNtYXJ0cGFuZWwgcmVsYXRlZCAqLwogI2RlZmluZSBQUlNSX0RBVEEoeCkJKCh4KSAmIDB4ZmYpCS8qIFBhbmVsIERhdGEgKi8KICNkZWZpbmUgUFJTUl9BMAkJKDEgPDwgOCkJLyogUmVhZCBEYXRhIFNvdXJjZSAqLwpAQCAtMTc3LDQgKzE4NywxMSBAQAogCiAjZGVmaW5lIFNNQVJUX0NNRCh4KQkoU01BUlRfQ01EX1dSSVRFX0NPTU1BTkQgfCAoKHgpICYgMHhmZikpCiAjZGVmaW5lIFNNQVJUX0RBVCh4KQkoU01BUlRfQ01EX1dSSVRFX0RBVEEgfCAoKHgpICYgMHhmZikpCisKKy8qIFNNQVJUX0RFTEFZKCkgaXMgaW50cm9kdWNlZCBmb3Igc29mdHdhcmUgY29udHJvbGxlZCBkZWxheSBwcmltaXRpdmUgd2hpY2gKKyAqIGNhbiBiZSBpbnNlcnRlZCBiZXR3ZWVuIGNvbW1hbmQgc2VxdWVuY2VzLCB1bnVzZWQgY29tbWFuZCAweDYgaXMgdXNlZCBoZXJlCisgKiBhbmQgZGVsYXkgcmFuZ2VzIGZyb20gMG1zIH4gMjU1bXMKKyAqLworI2RlZmluZSBTTUFSVF9DTURfREVMQVkJCSgweDYgPDwgOSkKKyNkZWZpbmUgU01BUlRfREVMQVkobXMpCQkoU01BUlRfQ01EX0RFTEFZIHwgKChtcykgJiAweGZmKSkKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfTENEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXVhcnQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXVhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFlYjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtdWFydC5oCkBAIC0wLDAgKzEsMTQzIEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19VQVJUX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1VBUlRfSAorCisvKgorICogVUFSVHMKKyAqLworCisvKiBGdWxsIEZ1bmN0aW9uIFVBUlQgKEZGVUFSVCkgKi8KKyNkZWZpbmUgRkZVQVJUCQlGRlJCUgorI2RlZmluZSBGRlJCUgkJX19SRUcoMHg0MDEwMDAwMCkgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEZGVEhSCQlfX1JFRygweDQwMTAwMDAwKSAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgRkZJRVIJCV9fUkVHKDB4NDAxMDAwMDQpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBGRklJUgkJX19SRUcoMHg0MDEwMDAwOCkgIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBGRkZDUgkJX19SRUcoMHg0MDEwMDAwOCkgIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgRkZMQ1IJCV9fUkVHKDB4NDAxMDAwMEMpICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEZGTUNSCQlfX1JFRygweDQwMTAwMDEwKSAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgRkZMU1IJCV9fUkVHKDB4NDAxMDAwMTQpICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBGRk1TUgkJX19SRUcoMHg0MDEwMDAxOCkgIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBGRlNQUgkJX19SRUcoMHg0MDEwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBGRklTUgkJX19SRUcoMHg0MDEwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgRkZETEwJCV9fUkVHKDB4NDAxMDAwMDApICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBGRkRMSAkJX19SRUcoMHg0MDEwMDAwNCkgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLworCisvKiBCbHVldG9vdGggVUFSVCAoQlRVQVJUKSAqLworI2RlZmluZSBCVFVBUlQJCUJUUkJSCisjZGVmaW5lIEJUUkJSCQlfX1JFRygweDQwMjAwMDAwKSAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgQlRUSFIJCV9fUkVHKDB4NDAyMDAwMDApICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLworI2RlZmluZSBCVElFUgkJX19SRUcoMHg0MDIwMDAwNCkgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEJUSUlSCQlfX1JFRygweDQwMjAwMDA4KSAgLyogSW50ZXJydXB0IElEIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEJURkNSCQlfX1JFRygweDQwMjAwMDA4KSAgLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLworI2RlZmluZSBCVExDUgkJX19SRUcoMHg0MDIwMDAwQykgIC8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgQlRNQ1IJCV9fUkVHKDB4NDAyMDAwMTApICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBCVExTUgkJX19SRUcoMHg0MDIwMDAxNCkgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEJUTVNSCQlfX1JFRygweDQwMjAwMDE4KSAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEJUU1BSCQlfX1JFRygweDQwMjAwMDFDKSAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEJUSVNSCQlfX1JFRygweDQwMjAwMDIwKSAgLyogSW5mcmFyZWQgU2VsZWN0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBCVERMTAkJX19SRUcoMHg0MDIwMDAwMCkgIC8qIERpdmlzb3IgTGF0Y2ggTG93IFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEJURExICQlfX1JFRygweDQwMjAwMDA0KSAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCisKKy8qIFN0YW5kYXJkIFVBUlQgKFNUVUFSVCkgKi8KKyNkZWZpbmUgU1RVQVJUCQlTVFJCUgorI2RlZmluZSBTVFJCUgkJX19SRUcoMHg0MDcwMDAwMCkgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIFNUVEhSCQlfX1JFRygweDQwNzAwMDAwKSAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgU1RJRVIJCV9fUkVHKDB4NDA3MDAwMDQpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBTVElJUgkJX19SRUcoMHg0MDcwMDAwOCkgIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBTVEZDUgkJX19SRUcoMHg0MDcwMDAwOCkgIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgU1RMQ1IJCV9fUkVHKDB4NDA3MDAwMEMpICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIFNUTUNSCQlfX1JFRygweDQwNzAwMDEwKSAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgU1RMU1IJCV9fUkVHKDB4NDA3MDAwMTQpICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBTVE1TUgkJX19SRUcoMHg0MDcwMDAxOCkgIC8qIFJlc2VydmVkICovCisjZGVmaW5lIFNUU1BSCQlfX1JFRygweDQwNzAwMDFDKSAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIFNUSVNSCQlfX1JFRygweDQwNzAwMDIwKSAgLyogSW5mcmFyZWQgU2VsZWN0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBTVERMTAkJX19SRUcoMHg0MDcwMDAwMCkgIC8qIERpdmlzb3IgTGF0Y2ggTG93IFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIFNURExICQlfX1JFRygweDQwNzAwMDA0KSAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCisKKy8qIEhhcmR3YXJlIFVBUlQgKEhXVUFSVCkgKi8KKyNkZWZpbmUgSFdVQVJUCQlIV1JCUgorI2RlZmluZSBIV1JCUgkJX19SRUcoMHg0MTYwMDAwMCkgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEhXVEhSCQlfX1JFRygweDQxNjAwMDAwKSAgLyogVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgSFdJRVIJCV9fUkVHKDB4NDE2MDAwMDQpICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBIV0lJUgkJX19SRUcoMHg0MTYwMDAwOCkgIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBIV0ZDUgkJX19SRUcoMHg0MTYwMDAwOCkgIC8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciAod3JpdGUgb25seSkgKi8KKyNkZWZpbmUgSFdMQ1IJCV9fUkVHKDB4NDE2MDAwMEMpICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEhXTUNSCQlfX1JFRygweDQxNjAwMDEwKSAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgSFdMU1IJCV9fUkVHKDB4NDE2MDAwMTQpICAvKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBIV01TUgkJX19SRUcoMHg0MTYwMDAxOCkgIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBIV1NQUgkJX19SRUcoMHg0MTYwMDAxQykgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLworI2RlZmluZSBIV0lTUgkJX19SRUcoMHg0MTYwMDAyMCkgIC8qIEluZnJhcmVkIFNlbGVjdGlvbiBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgSFdGT1IJCV9fUkVHKDB4NDE2MDAwMjQpICAvKiBSZWNlaXZlIEZJRk8gT2NjdXBhbmN5IFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEhXQUJSCQlfX1JFRygweDQxNjAwMDI4KSAgLyogQXV0by1CYXVkIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCisjZGVmaW5lIEhXQUNSCQlfX1JFRygweDQxNjAwMDJDKSAgLyogQXV0by1CYXVkIENvdW50IFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIEhXRExMCQlfX1JFRygweDQxNjAwMDAwKSAgLyogRGl2aXNvciBMYXRjaCBMb3cgUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KKyNkZWZpbmUgSFdETEgJCV9fUkVHKDB4NDE2MDAwMDQpICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KKworI2RlZmluZSBJRVJfRE1BRQkoMSA8PCA3KQkvKiBETUEgUmVxdWVzdHMgRW5hYmxlICovCisjZGVmaW5lIElFUl9VVUUJCSgxIDw8IDYpCS8qIFVBUlQgVW5pdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX05SWkUJKDEgPDwgNSkJLyogTlJaIGNvZGluZyBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1JUSU9FCSgxIDw8IDQpCS8qIFJlY2VpdmVyIFRpbWUgT3V0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX01JRQkJKDEgPDwgMykJLyogTW9kZW0gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfUkxTRQkoMSA8PCAyKQkvKiBSZWNlaXZlciBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9USUUJCSgxIDw8IDEpCS8qIFRyYW5zbWl0IERhdGEgcmVxdWVzdCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9SQVZJRQkoMSA8PCAwKQkvKiBSZWNlaXZlciBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgSUlSX0ZJRk9FUzEJKDEgPDwgNykJLyogRklGTyBNb2RlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgSUlSX0ZJRk9FUzAJKDEgPDwgNikJLyogRklGTyBNb2RlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgSUlSX1RPRAkJKDEgPDwgMykJLyogVGltZSBPdXQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDIJKDEgPDwgMikJLyogSW50ZXJydXB0IFNvdXJjZSBFbmNvZGVkICovCisjZGVmaW5lIElJUl9JSUQxCSgxIDw8IDEpCS8qIEludGVycnVwdCBTb3VyY2UgRW5jb2RlZCAqLworI2RlZmluZSBJSVJfSVAJCSgxIDw8IDApCS8qIEludGVycnVwdCBQZW5kaW5nIChhY3RpdmUgbG93KSAqLworCisjZGVmaW5lIEZDUl9JVEwyCSgxIDw8IDcpCS8qIEludGVycnVwdCBUcmlnZ2VyIExldmVsICovCisjZGVmaW5lIEZDUl9JVEwxCSgxIDw8IDYpCS8qIEludGVycnVwdCBUcmlnZ2VyIExldmVsICovCisjZGVmaW5lIEZDUl9SRVNFVFRGCSgxIDw8IDIpCS8qIFJlc2V0IFRyYW5zbWl0dGVyIEZJRk8gKi8KKyNkZWZpbmUgRkNSX1JFU0VUUkYJKDEgPDwgMSkJLyogUmVzZXQgUmVjZWl2ZXIgRklGTyAqLworI2RlZmluZSBGQ1JfVFJGSUZPRQkoMSA8PCAwKQkvKiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBGSUZPIEVuYWJsZSAqLworI2RlZmluZSBGQ1JfSVRMXzEJKDApCisjZGVmaW5lIEZDUl9JVExfOAkoRkNSX0lUTDEpCisjZGVmaW5lIEZDUl9JVExfMTYJKEZDUl9JVEwyKQorI2RlZmluZSBGQ1JfSVRMXzMyCShGQ1JfSVRMMnxGQ1JfSVRMMSkKKworI2RlZmluZSBMQ1JfRExBQgkoMSA8PCA3KQkvKiBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgKi8KKyNkZWZpbmUgTENSX1NCCQkoMSA8PCA2KQkvKiBTZXQgQnJlYWsgKi8KKyNkZWZpbmUgTENSX1NUS1lQCSgxIDw8IDUpCS8qIFN0aWNreSBQYXJpdHkgKi8KKyNkZWZpbmUgTENSX0VQUwkJKDEgPDwgNCkJLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCisjZGVmaW5lIExDUl9QRU4JCSgxIDw8IDMpCS8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgTENSX1NUQgkJKDEgPDwgMikJLyogU3RvcCBCaXQgKi8KKyNkZWZpbmUgTENSX1dMUzEJKDEgPDwgMSkJLyogV29yZCBMZW5ndGggU2VsZWN0ICovCisjZGVmaW5lIExDUl9XTFMwCSgxIDw8IDApCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLworCisjZGVmaW5lIExTUl9GSUZPRQkoMSA8PCA3KQkvKiBGSUZPIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBMU1JfVEVNVAkoMSA8PCA2KQkvKiBUcmFuc21pdHRlciBFbXB0eSAqLworI2RlZmluZSBMU1JfVERSUQkoMSA8PCA1KQkvKiBUcmFuc21pdCBEYXRhIFJlcXVlc3QgKi8KKyNkZWZpbmUgTFNSX0JJCQkoMSA8PCA0KQkvKiBCcmVhayBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTFNSX0ZFCQkoMSA8PCAzKQkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExTUl9QRQkJKDEgPDwgMikJLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lIExTUl9PRQkJKDEgPDwgMSkJLyogT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZSBMU1JfRFIJCSgxIDw8IDApCS8qIERhdGEgUmVhZHkgKi8KKworI2RlZmluZSBNQ1JfTE9PUAkoMSA8PCA0KQorI2RlZmluZSBNQ1JfT1VUMgkoMSA8PCAzKQkvKiBmb3JjZSBNU1JfRENEIGluIGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgTUNSX09VVDEJKDEgPDwgMikJLyogZm9yY2UgTVNSX1JJIGluIGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgTUNSX1JUUwkJKDEgPDwgMSkJLyogUmVxdWVzdCB0byBTZW5kICovCisjZGVmaW5lIE1DUl9EVFIJCSgxIDw8IDApCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKworI2RlZmluZSBNU1JfRENECQkoMSA8PCA3KQkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIE1TUl9SSQkJKDEgPDwgNikJLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgTVNSX0RTUgkJKDEgPDwgNSkJLyogRGF0YSBTZXQgUmVhZHkgKi8KKyNkZWZpbmUgTVNSX0NUUwkJKDEgPDwgNCkJLyogQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSBNU1JfRERDRAkoMSA8PCAzKQkvKiBEZWx0YSBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIE1TUl9URVJJCSgxIDw8IDIpCS8qIFRyYWlsaW5nIEVkZ2UgUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgTVNSX0REU1IJKDEgPDwgMSkJLyogRGVsdGEgRGF0YSBTZXQgUmVhZHkgKi8KKyNkZWZpbmUgTVNSX0RDVFMJKDEgPDwgMCkJLyogRGVsdGEgQ2xlYXIgVG8gU2VuZCAqLworCisvKgorICogSXJTUiAoSW5mcmFyZWQgU2VsZWN0aW9uIFJlZ2lzdGVyKQorICovCisjZGVmaW5lIFNUSVNSX1JYUEwgICAgICAoMSA8PCA0KSAgICAgICAgLyogUmVjZWl2ZSBEYXRhIFBvbGFyaXR5ICovCisjZGVmaW5lIFNUSVNSX1RYUEwgICAgICAoMSA8PCAzKSAgICAgICAgLyogVHJhbnNtaXQgRGF0YSBQb2xhcml0eSAqLworI2RlZmluZSBTVElTUl9YTU9ERSAgICAgKDEgPDwgMikgICAgICAgIC8qIFRyYW5zbWl0IFB1bHNlIFdpZHRoIFNlbGVjdCAqLworI2RlZmluZSBTVElTUl9SQ1ZFSVIgICAgKDEgPDwgMSkgICAgICAgIC8qIFJlY2VpdmVyIFNJUiBFbmFibGUgKi8KKyNkZWZpbmUgU1RJU1JfWE1JVElSICAgICgxIDw8IDApICAgICAgICAvKiBUcmFuc21pdHRlciBTSVIgRW5hYmxlICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfVUFSVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IGIwNWZjNjYuLmFmNjc2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCwxNCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorLyogVmFyaW91cyBkcml2ZXJzIGFyZSBzdGlsbCB1c2luZyB0aGUgY29uc3RhbnQgb2YgQ0xPQ0tfVElDS19SQVRFLCBmb3IKKyAqIHRob3NlIGRyaXZlcnMgdG8gYXQgbGVhc3Qgd29yaywgdGhlIGRlZmluaXRpb24gaXMgcHJvdmlkZWQgaGVyZS4KKyAqCisgKiBOT1RFOiB0aGlzIGlzIG5vIGxvbmdlciBhY2N1cmF0ZSB3aGVuIG11bHRpcGxlIHByb2Nlc3NvcnMgYW5kIGJvYXJkcworICogYXJlIHNlbGVjdGVkLCBuZXdlciBkcml2ZXJzIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoaXMgYW55IG1vcmUuICBVc2UKKyAqIGVpdGhlciB0aGUgY2xvY2tzb3VyY2UvY2xvY2tldmVudCBvciBnZXQgdGhpcyBhdCBydW4tdGltZSBieSBjYWxsaW5nCisgKiBnZXRfY2xvY2tfdGlja19yYXRlKCkgKGFzIGRlZmluZWQgaW4gZ2VuZXJpYy5jKS4KKyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfUFhBMjV4KQogLyogUFhBMjUwLzIxMCB0aW1lciBiYXNlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAyMWUzZTg5Li5mNGIwMjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtdWFydC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNkZWZpbmUgX19SRUcoeCkgICAgICAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopeCkKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCiB7Ci0JaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkpCisJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkpCiAJCVVBUlQgPSBTVFVBUlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKaW5kZXggYjRkMDBhYi4uMzFkYTdmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKQEAgLTIwLDggKzIwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjL21heDczMnguaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMzYsMTAgKzQxLDEwIEBACiAKICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eF9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9saXR0bGV0b24uaD4KQEAgLTMxNCw2ICszMTksNzMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXR0bGV0b25faW5pdF9uYW5kKHZvaWQpIHt9CiAjZW5kaWYgLyogQ09ORklHX01URF9OQU5EX1BYQTN4eCB8fCBDT05GSUdfTVREX05BTkRfUFhBM3h4X01PRFVMRSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGxlZF9pbmZvIGxpdHRsZXRvbl9kYTkwMzRfbGVkc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAibGl0dGxldG9uOmtleXBhZDEiLAorCQkuZmxhZ3MJPSBEQTkwMzRfTEVEX1JBTVAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gImxpdHRsZXRvbjprZXlwYWQyIiwKKwkJLmZsYWdzCT0gREE5MDM0X0xFRF9SQU1QLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJsaXR0bGV0b246dmlicmEiLAorCQkuZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyBsaXR0bGV0b25fZGE5MDM0X3N1YmRldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJkYTkwM3gtbGVkIiwKKwkJLmlkCQk9IERBOTAzNF9JRF9MRURfMSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbGl0dGxldG9uX2RhOTAzNF9sZWRzWzBdLAorCX0sIHsKKwkJLm5hbWUJCT0gImRhOTAzeC1sZWQiLAorCQkuaWQJCT0gREE5MDM0X0lEX0xFRF8yLAorCQkucGxhdGZvcm1fZGF0YQk9ICZsaXR0bGV0b25fZGE5MDM0X2xlZHNbMV0sCisJfSwgeworCQkubmFtZQkJPSAiZGE5MDN4LWxlZCIsCisJCS5pZAkJPSBEQTkwMzRfSURfVklCUkEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxpdHRsZXRvbl9kYTkwMzRfbGVkc1syXSwKKwl9LCB7CisJCS5uYW1lCQk9ICJkYTkwM3gtYmFja2xpZ2h0IiwKKwkJLmlkCQk9IERBOTAzNF9JRF9XTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIGxpdHRsZXRvbl9kYTkwMzRfaW5mbyA9IHsKKwkubnVtX3N1YmRldnMJPSBBUlJBWV9TSVpFKGxpdHRsZXRvbl9kYTkwMzRfc3ViZGV2cyksCisJLnN1YmRldnMJPSBsaXR0bGV0b25fZGE5MDM0X3N1YmRldnMsCit9OworCitzdGF0aWMgc3RydWN0IG1heDczMnhfcGxhdGZvcm1fZGF0YSBsaXR0bGV0b25fbWF4NzMyMF9pbmZvID0geworCS5ncGlvX2Jhc2UJPSBFWFQwX0dQSU9fQkFTRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbGl0dGxldG9uX2kyY19pbmZvW10gPSB7CisJWzBdID0geworCQkudHlwZQkJPSAiZGE5MDM0IiwKKwkJLmFkZHIJCT0gMHgzNCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbGl0dGxldG9uX2RhOTAzNF9pbmZvLAorCQkuaXJxCQk9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzE4KSksCisJfSwKKwlbMV0gPSB7CisJCS50eXBlCQk9ICJtYXg3MzIwIiwKKwkJLmFkZHIJCT0gMHg1MCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbGl0dGxldG9uX21heDczMjBfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGxpdHRsZXRvbl9pbml0X2kyYyh2b2lkKQoreworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUobGl0dGxldG9uX2kyY19pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGxpdHRsZXRvbl9pbml0X2kyYyh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19JMkNfUFhBIHx8IENPTkZJR19JMkNfUFhBX01PRFVMRSAqLworCiBzdGF0aWMgdm9pZCBfX2luaXQgbGl0dGxldG9uX2luaXQodm9pZCkKIHsKIAkvKiBpbml0aWFsaXplIE1GUCBjb25maWd1cmF0aW9ucyAqLwpAQCAtMzI2LDYgKzM5OCw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKIAogCWxpdHRsZXRvbl9pbml0X3NwaSgpOworCWxpdHRsZXRvbl9pbml0X2kyYygpOwogCWxpdHRsZXRvbl9pbml0X2xjZCgpOwogCWxpdHRsZXRvbl9pbml0X2tleXBhZCgpOwogCWxpdHRsZXRvbl9pbml0X25hbmQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IDUxOTEzOGIuLjIxYjgyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtMTIzLDYgKzEyMywxMCBAQAogCUdQSU8xMDdfR1BJTywJLyogRFMxV01fSVJRICovCiAJR1BJTzEwOF9HUElPLAkvKiBHU01fUkVBRFkgKi8KIAlHUElPMTE1X0dQSU8sCS8qIG5QRU5fSVJRICovCisKKwkvKiBJMkMgKi8KKwlHUElPMTE3X0kyQ19TQ0wsCisJR1BJTzExOF9JMkNfU0RBLAogfTsKIAogLyoKQEAgLTMzMiw4ICszMzYsNyBAQAogCS5tb2RlcyAgICAgICAgICAgPSB0b3Bwb2x5X21vZGVzLAogCS5udW1fbW9kZXMgICAgICAgPSAxLAogCS5maXhlZF9tb2RlcyAgICAgPSAxLAotCS5sY2NyMCAgICAgICAgICAgPSBMQ0NSMF9Db2xvciB8IExDQ1IwX1NuZ2wgfCBMQ0NSMF9BY3QsCi0JLmxjY3IzICAgICAgICAgICA9IExDQ1IzX1BpeFJzRWRnLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAsCiAJLnB4YWZiX2xjZF9wb3dlciA9IHRvcHBvbHlfbGNkX3Bvd2VyLAogfTsKIApAQCAtMzQxLDggKzM0NCw4IEBACiAJLm1vZGVzICAgICAgICAgICA9IHNhbXN1bmdfbW9kZXMsCiAJLm51bV9tb2RlcyAgICAgICA9IDEsCiAJLmZpeGVkX21vZGVzICAgICA9IDEsCi0JLmxjY3IwICAgICAgICAgICA9IExDQ1IwX0xEREFMVCB8IExDQ1IwX0NvbG9yIHwgTENDUjBfU25nbCB8IExDQ1IwX0FjdCwKLQkubGNjcjMgICAgICAgICAgID0gTENDUjNfUGl4RmxFZGcsCisJLmxjZF9jb25uCSA9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwgfFwKKwkJCSAgIExDRF9BTFRFUk5BVEVfTUFQUElORywKIAkucHhhZmJfbGNkX3Bvd2VyID0gc2Ftc3VuZ19sY2RfcG93ZXIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IGYyYzdhZDguLjVmMjI0OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC0xMjgsNiArMTI4LDEwIEBACiAJR1BJTzEwOF9LUF9NS09VVF81LAogCUdQSU85Nl9LUF9NS09VVF82LAogCisJLyogSTJDICovCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKKwogCS8qIEdQSU8gKi8KIAlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKaW5kZXggMjA2MWMwMC4uMzM2MjZkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtMzgsMTIgKzM4LDEzIEBACiAJdW5zaWduZWQJdmFsaWQJCTogMTsKIAl1bnNpZ25lZAljYW5fd2FrZXVwCTogMTsKIAl1bnNpZ25lZAlrZXlwYWRfZ3Bpbwk6IDE7CisJdW5zaWduZWQJZGlyX2ludmVydGVkCTogMTsKIAl1bnNpZ25lZCBpbnQJbWFzazsgLyogYml0IG1hc2sgaW4gUFdFUiBvciBQS1dSICovCisJdW5zaWduZWQgaW50CW11eF9tYXNrOyAvKiBiaXQgbWFzayBvZiBtdXhlZCBncGlvIGJpdHMsIDAgaWYgbm8gbXV4ICovCiAJdW5zaWduZWQgbG9uZwljb25maWc7CiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fZGVzYyBncGlvX2Rlc2NbTUZQX1BJTl9HUElPMTI3ICsgMV07Ci1zdGF0aWMgaW50IGdwaW9fbnI7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdwZHJfbHBtWzRdOwogCkBAIC01NCw3ICs1NSw3IEBACiAJaW50IHVvcmwgPSAhIShncGlvICYgMHgxMCk7IC8qIEdBRlJ4X1Ugb3IgR0FGUnhfTCA/ICovCiAJaW50IHNoZnQgPSAoZ3BpbyAmIDB4ZikgPDwgMTsKIAlpbnQgZm4gPSBNRlBfQUYoYyk7Ci0JaW50IGRpciA9IGMgJiBNRlBfRElSX09VVDsKKwlpbnQgaXNfb3V0ID0gKGMgJiBNRlBfRElSX09VVCkgPyAxIDogMDsKIAogCWlmIChmbiA+IDMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjgsNyArNjksNyBAQAogCWVsc2UKIAkJR0FGUl9VKGJhbmspID0gZ2FmcjsKIAotCWlmIChkaXIgPT0gTUZQX0RJUl9PVVQpCisJaWYgKGlzX291dCBeIGdwaW9fZGVzY1tncGlvXS5kaXJfaW52ZXJ0ZWQpCiAJCUdQRFIoZ3BpbykgfD0gbWFzazsKIAllbHNlCiAJCUdQRFIoZ3BpbykgJj0gfm1hc2s7CkBAIC03NywxMSArNzgsMTEgQEAKIAlzd2l0Y2ggKGMgJiBNRlBfTFBNX1NUQVRFX01BU0spIHsKIAljYXNlIE1GUF9MUE1fRFJJVkVfSElHSDoKIAkJUEdTUihiYW5rKSB8PSBtYXNrOwotCQlkaXIgPSBNRlBfRElSX09VVDsKKwkJaXNfb3V0ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBNRlBfTFBNX0RSSVZFX0xPVzoKIAkJUEdTUihiYW5rKSAmPSB+bWFzazsKLQkJZGlyID0gTUZQX0RJUl9PVVQ7CisJCWlzX291dCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgTUZQX0xQTV9ERUZBVUxUOgogCQlicmVhazsKQEAgLTkyLDcgKzkzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGRpciA9PSBNRlBfRElSX09VVCkKKwlpZiAoaXNfb3V0IF4gZ3Bpb19kZXNjW2dwaW9dLmRpcl9pbnZlcnRlZCkKIAkJZ3Bkcl9scG1bYmFua10gfD0gbWFzazsKIAllbHNlCiAJCWdwZHJfbHBtW2JhbmtdICY9IH5tYXNrOwpAQCAtMTA2LDcgKzEwNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICgoYyAmIE1GUF9MUE1fQ0FOX1dBS0VVUCkgJiYgKGRpciA9PSBNRlBfRElSX09VVCkpIHsKKwlpZiAoKGMgJiBNRlBfTFBNX0NBTl9XQUtFVVApICYmIGlzX291dCkgewogCQlwcl93YXJuaW5nKCIlczogb3V0cHV0IEdQSU8lZCB1bmFibGUgdG8gd2FrZXVwXG4iLAogCQkJCV9fZnVuY19fLCBncGlvKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjksNyArMTcwLDcgQEAKIGludCBncGlvX3NldF93YWtlKHVuc2lnbmVkIGludCBncGlvLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJc3RydWN0IGdwaW9fZGVzYyAqZDsKLQl1bnNpZ25lZCBsb25nIGM7CisJdW5zaWduZWQgbG9uZyBjLCBtdXhfdGFrZW47CiAKIAlpZiAoZ3BpbyA+IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzEyNykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgzLDkgKzE4NCwxMyBAQAogCWlmIChkLT5rZXlwYWRfZ3BpbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXhfdGFrZW4gPSAoUFdFUiAmIGQtPm11eF9tYXNrKSAmICh+ZC0+bWFzayk7CisJaWYgKG9uICYmIG11eF90YWtlbikKKwkJcmV0dXJuIC1FQlVTWTsKKwogCWlmIChkLT5jYW5fd2FrZXVwICYmIChjICYgTUZQX0xQTV9DQU5fV0FLRVVQKSkgewogCQlpZiAob24pIHsKLQkJCVBXRVIgfD0gZC0+bWFzazsKKwkJCVBXRVIgPSAoUFdFUiAmIH5kLT5tdXhfbWFzaykgfCBkLT5tYXNrOwogCiAJCQlpZiAoYyAmIE1GUF9MUE1fRURHRV9SSVNFKQogCQkJCVBSRVIgfD0gZC0+bWFzazsKQEAgLTIxMCw3ICsyMTUsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8PSA4NDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPD0gcHhhX2xhc3RfZ3BpbzsgaSsrKQogCQlncGlvX2Rlc2NbaV0udmFsaWQgPSAxOwogCiAJZm9yIChpID0gMDsgaSA8PSAxNTsgaSsrKSB7CkBAIC0yMTgsNyArMjIzLDExIEBACiAJCWdwaW9fZGVzY1tpXS5tYXNrID0gR1BJT19iaXQoaSk7CiAJfQogCi0JZ3Bpb19uciA9IDg1OworCS8qIFBYQTI2eCBoYXMgYWRkaXRpb25hbCA0IEdQSU9zICg4Ni84Ny84OC84OSkgd2hpY2ggaGFzIHRoZQorCSAqIGRpcmVjdGlvbiBiaXQgaW52ZXJ0ZWQgaW4gR1BEUjIuIFNlZSBQWEEyNnggRE0gNC4xLjEuCisJICovCisJZm9yIChpID0gODY7IGkgPD0gcHhhX2xhc3RfZ3BpbzsgaSsrKQorCQlncGlvX2Rlc2NbaV0uZGlyX2ludmVydGVkID0gMTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcHhhMjV4X21mcF9pbml0KHZvaWQpIHt9CkBAIC0yNTEsMTEgKzI2MCwyNyBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIFBXRVJfV0VNVVgyX0dQSU8zOAkoMSA8PCAxNikKKyNkZWZpbmUgUFdFUl9XRU1VWDJfR1BJTzUzCSgyIDw8IDE2KQorI2RlZmluZSBQV0VSX1dFTVVYMl9HUElPNDAJKDMgPDwgMTYpCisjZGVmaW5lIFBXRVJfV0VNVVgyX0dQSU8zNgkoNCA8PCAxNikKKyNkZWZpbmUgUFdFUl9XRU1VWDJfTUFTSwkoNyA8PCAxNikKKyNkZWZpbmUgUFdFUl9XRU1VWDNfR1BJTzMxCSgxIDw8IDE5KQorI2RlZmluZSBQV0VSX1dFTVVYM19HUElPMTEzCSgyIDw8IDE5KQorI2RlZmluZSBQV0VSX1dFTVVYM19NQVNLCSgzIDw8IDE5KQorCisjZGVmaW5lIElOSVRfR1BJT19ERVNDX01VWEVEKG11eCwgZ3BpbykJCQkJXAorZG8gewkJCQkJCQkJXAorCWdwaW9fZGVzY1soZ3BpbyldLmNhbl93YWtldXAgPSAxOwkJCVwKKwlncGlvX2Rlc2NbKGdwaW8pXS5tYXNrID0gUFdFUl8gIyMgbXV4ICMjIF9HUElPICMjZ3BpbzsJXAorCWdwaW9fZGVzY1soZ3BpbyldLm11eF9tYXNrID0gUFdFUl8gIyMgbXV4ICMjIF9NQVNLOwlcCit9IHdoaWxlICgwKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcHhhMjd4X21mcF9pbml0KHZvaWQpCiB7CiAJaW50IGksIGdwaW87CiAKLQlmb3IgKGkgPSAwOyBpIDw9IDEyMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8PSBweGFfbGFzdF9ncGlvOyBpKyspIHsKIAkJLyogc2tpcCBHUElPMiwgNSwgNiwgNywgOCwgdGhleSBhcmUgbm90CiAJCSAqIHZhbGlkIHBpbnMgYWxsb3cgY29uZmlndXJhdGlvbgogCQkgKi8KQEAgLTI4Niw3ICszMTEsMTIgQEAKIAlncGlvX2Rlc2NbMzVdLmNhbl93YWtldXAgPSAxOwogCWdwaW9fZGVzY1szNV0ubWFzayA9IFBXRVJfV0UzNTsKIAotCWdwaW9fbnIgPSAxMjE7CisJSU5JVF9HUElPX0RFU0NfTVVYRUQoV0VNVVgzLCAzMSk7CisJSU5JVF9HUElPX0RFU0NfTVVYRUQoV0VNVVgzLCAxMTMpOworCUlOSVRfR1BJT19ERVNDX01VWEVEKFdFTVVYMiwgMzgpOworCUlOSVRfR1BJT19ERVNDX01VWEVEKFdFTVVYMiwgNTMpOworCUlOSVRfR1BJT19ERVNDX01VWEVEKFdFTVVYMiwgNDApOworCUlOSVRfR1BJT19ERVNDX01VWEVEKFdFTVVYMiwgMzYpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBweGEyN3hfbWZwX2luaXQodm9pZCkge30KQEAgLTMwMCw3ICszMzAsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8PSBncGlvX3RvX2JhbmsoZ3Bpb19ucik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPD0gZ3Bpb190b19iYW5rKHB4YV9sYXN0X2dwaW8pOyBpKyspIHsKIAogCQlzYXZlZF9nYWZyWzBdW2ldID0gR0FGUl9MKGkpOwogCQlzYXZlZF9nYWZyWzFdW2ldID0gR0FGUl9VKGkpOwpAQCAtMzE1LDcgKzM0NSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IGdwaW9fdG9fYmFuayhncGlvX25yKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8PSBncGlvX3RvX2JhbmsocHhhX2xhc3RfZ3Bpbyk7IGkrKykgewogCQlHQUZSX0woaSkgPSBzYXZlZF9nYWZyWzBdW2ldOwogCQlHQUZSX1UoaSkgPSBzYXZlZF9nYWZyWzFdW2ldOwogCQlHUERSKGkgKiAzMikgPSBzYXZlZF9ncGRyW2ldOwpAQCAtMzQ4LDcgKzM3OCw3IEBACiAJCXB4YTI3eF9tZnBfaW5pdCgpOwogCiAJLyogaW5pdGlhbGl6ZSBnYWZyX3J1bltdLCBwZ3NyX2xwbVtdIGZyb20gZXhpc3RpbmcgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8PSBncGlvX3RvX2JhbmsoZ3Bpb19ucik7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDw9IGdwaW9fdG9fYmFuayhweGFfbGFzdF9ncGlvKTsgaSsrKQogCQlncGRyX2xwbVtpXSA9IEdQRFIoaSAqIDMyKTsKIAogCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnB4YTJ4eF9tZnBfc3lzY2xhc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCmluZGV4IDc4MjkwM2YuLjJiNDI3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KLSNpbmNsdWRlIDxsaW51eC93bTk3eHguaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDYsNiArNDYsOSBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAjaW5jbHVkZSA8bWFjaC9taW9hNzAxLmg+CiAKQEAgLTU0LDEwICs1NywxMSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW9hNzAxX3Bpbl9jb25maWdbXSA9IHsKIAkvKiBNaW8gZ2xvYmFsICovCi0JTUlPX0NGR19PVVQoR1BJTzlfQ0hBUkdFX25FTiwgQUYwLCBEUklWRV9MT1cpLAorCU1JT19DRkdfT1VUKEdQSU85X0NIQVJHRV9FTiwgQUYwLCBEUklWRV9MT1cpLAogCU1JT19DRkdfT1VUKEdQSU8xOF9QT1dFUk9GRiwgQUYwLCBEUklWRV9MT1cpLAogCU1GUF9DRkdfT1VUKEdQSU8zLCBBRjAsIERSSVZFX0hJR0gpLAogCU1GUF9DRkdfT1VUKEdQSU80LCBBRjAsIERSSVZFX0hJR0gpLAorCU1JT19DRkdfSU4oR1BJTzgwX01BWUJFX0NIQVJHRV9WRFJPUCwgQUYwKSwKIAogCS8qIEJhY2tsaWdodCBQV00gMCAqLwogCUdQSU8xNl9QV00wX09VVCwKQEAgLTc0LDcgKzc4LDcgQEAKIAlNSU9fQ0ZHX09VVChHUElPOTFfU0RJT19FTiwgQUYwLCBEUklWRV9MT1cpLAogCiAJLyogVVNCICovCi0JTUlPX0NGR19JTihHUElPMTNfVVNCX0RFVEVDVCwgQUYwKSwKKwlNSU9fQ0ZHX0lOKEdQSU8xM19uVVNCX0RFVEVDVCwgQUYwKSwKIAlNSU9fQ0ZHX09VVChHUElPMjJfVVNCX0VOQUJMRSwgQUYwLCBEUklWRV9MT1cpLAogCiAJLyogTENEICovCkBAIC05OCwxMiArMTAyLDI5IEBACiAJR1BJTzc1X0xDRF9MQ0xLLAogCUdQSU83Nl9MQ0RfUENMSywKIAorCS8qIFFDSSAqLworCUdQSU8xMl9DSUZfRERfNywKKwlHUElPMTdfQ0lGX0REXzYsCisJR1BJTzUwX0NJRl9ERF8zLAorCUdQSU81MV9DSUZfRERfMiwKKwlHUElPNTJfQ0lGX0REXzQsCisJR1BJTzUzX0NJRl9NQ0xLLAorCUdQSU81NF9DSUZfUENMSywKKwlHUElPNTVfQ0lGX0REXzEsCisJR1BJTzgxX0NJRl9ERF8wLAorCUdQSU84Ml9DSUZfRERfNSwKKwlHUElPODRfQ0lGX0ZWLAorCUdQSU84NV9DSUZfTFYsCisKIAkvKiBCbHVldG9vdGggKi8KKwlNSU9fQ0ZHX0lOKEdQSU8xNF9CVF9uQUNUSVZJVFksIEFGMCksCiAJR1BJTzQ0X0JUVUFSVF9DVFMsCiAJR1BJTzQyX0JUVUFSVF9SWEQsCiAJR1BJTzQ1X0JUVUFSVF9SVFMsCiAJR1BJTzQzX0JUVUFSVF9UWEQsCiAJTUlPX0NGR19PVVQoR1BJTzgzX0JUX09OLCBBRjAsIERSSVZFX0xPVyksCisJTUlPX0NGR19PVVQoR1BJTzc3X0JUX1VOS05PV04xLCBBRjAsIERSSVZFX0hJR0gpLAorCU1JT19DRkdfT1VUKEdQSU84Nl9CVF9NQVlCRV9uUkVTRVQsIEFGMCwgRFJJVkVfSElHSCksCiAKIAkvKiBHUFMgKi8KIAlNSU9fQ0ZHX09VVChHUElPMjNfR1BTX1VOS05PV04xLCBBRjAsIERSSVZFX0xPVyksCkBAIC0xNTEsMTYgKzE3MiwxNiBAQAogCUdQSU8xMDRfS1BfTUtPVVRfMSwKIAlHUElPMTA1X0tQX01LT1VUXzIsCiAKKwkvKiBJMkMgKi8KKwlHUElPMTE3X0kyQ19TQ0wsCisJR1BJTzExOF9JMkNfU0RBLAorCiAJLyogVW5rbm93biAqLwotCU1GUF9DRkdfSU4oR1BJTzE0LCBBRjApLAogCU1GUF9DRkdfSU4oR1BJTzIwLCBBRjApLAogCU1GUF9DRkdfSU4oR1BJTzIxLCBBRjApLAogCU1GUF9DRkdfSU4oR1BJTzMzLCBBRjApLAogCU1GUF9DRkdfT1VUKEdQSU80OSwgQUYwLCBEUklWRV9ISUdIKSwKIAlNRlBfQ0ZHX09VVChHUElPNTcsIEFGMCwgRFJJVkVfSElHSCksCi0JTUZQX0NGR19PVVQoR1BJTzc3LCBBRjAsIERSSVZFX0hJR0gpLAotCU1GUF9DRkdfSU4oR1BJTzgwLCBBRjApLAotCU1GUF9DRkdfT1VUKEdQSU84NiwgQUYwLCBEUklWRV9ISUdIKSwKIAlNRlBfQ0ZHX0lOKEdQSU85NiwgQUYwKSwKIAlNRlBfQ0ZHX09VVChHUElPMTE2LCBBRjAsIERSSVZFX0hJR0gpLAogfTsKQEAgLTQwNyw3ICs0MjgsNyBAQAogCiBzdGF0aWMgaW50IGlzX3VzYl9jb25uZWN0ZWQodm9pZCkKIHsKLQlyZXR1cm4gISFncGlvX2dldF92YWx1ZShHUElPMTNfVVNCX0RFVEVDVCk7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPMTNfblVTQl9ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIG1pb2E3MDFfdWRjX2luZm8gPSB7CkBAIC02NTksMTMgKzY4MCwxOSBAQAogCSJtaW9hNzAxX2JhdHRlcnkiCiB9OwogCitzdGF0aWMgaW50IGlzX2FjX2Nvbm5lY3RlZCh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPOTZfQUNfREVURUNUKTsKK30KKwogc3RhdGljIHZvaWQgbWlvYTcwMV9zZXRfY2hhcmdlKGludCBmbGFncykKIHsKLQlncGlvX3NldF92YWx1ZShHUElPOV9DSEFSR0VfbkVOLCAhZmxhZ3MpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU85X0NIQVJHRV9FTiwgKGZsYWdzID09IFBEQV9QT1dFUl9DSEFSR0VfVVNCKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBvd2VyX3BkYXRhID0gewotCS5pc19hY19vbmxpbmUJPSBpc191c2JfY29ubmVjdGVkLAorCS5pc19hY19vbmxpbmUJPSBpc19hY19jb25uZWN0ZWQsCisJLmlzX3VzYl9vbmxpbmUJPSBpc191c2JfY29ubmVjdGVkLAogCS5zZXRfY2hhcmdlID0gbWlvYTcwMV9zZXRfY2hhcmdlLAogCS5zdXBwbGllZF90byA9IHN1cHBsaWNhbnRzLAogCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHN1cHBsaWNhbnRzKSwKQEAgLTY3NCw4ICs3MDEsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJhYyIsCi0JCS5zdGFydAk9IGdwaW9fdG9faXJxKEdQSU8xM19VU0JfREVURUNUKSwKLQkJLmVuZAk9IGdwaW9fdG9faXJxKEdQSU8xM19VU0JfREVURUNUKSwKKwkJLnN0YXJ0CT0gZ3Bpb190b19pcnEoR1BJTzk2X0FDX0RFVEVDVCksCisJCS5lbmQJPSBncGlvX3RvX2lycShHUElPOTZfQUNfREVURUNUKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCUlPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gInVzYiIsCisJCS5zdGFydAk9IGdwaW9fdG9faXJxKEdQSU8xM19uVVNCX0RFVEVDVCksCisJCS5lbmQJPSBncGlvX3RvX2lycShHUElPMTNfblVTQl9ERVRFQ1QpLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwKIAkJSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKIAl9LApAQCAtNjkxLDEyMCArNzI1LDQzIEBACiAJfSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QREFfUE9XRVIpICYmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCkKLXN0YXRpYyBzdHJ1Y3Qgd205N3h4ICpiYXR0ZXJ5X3dtOwotCi1zdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYmF0dGVyeV9wcm9wc1tdID0gewotCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKLQlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR04sCi0JUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOLAotCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAotCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTiwJLyogTmVjZXNzYXJ5IGZvciBhcG0gKi8KK3N0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyBtaW9hNzAxX2JhdHRlcnlfZGF0YSA9IHsKKwkuYmF0dF9hdXgJPSBXTTk3WFhfQVVYX0lEMSwKKwkudGVtcF9hdXgJPSAtMSwKKwkuY2hhcmdlX2dwaW8JPSAtMSwKKwkubWluX3ZvbHRhZ2UJPSAweGMwMCwKKwkubWF4X3ZvbHRhZ2UJPSAweGZjMCwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElPTiwKKwkuYmF0dF9kaXYJPSAxLAorCS5iYXR0X211bHQJPSAxLAorCS5iYXR0X25hbWUJPSAibWlvYTcwMV9iYXR0ZXJ5IiwKIH07CiAKLXN0YXRpYyBpbnQgZ2V0X2JhdHRlcnlfdm9sdGFnZSh2b2lkKQotewotCWludCBhZGMgPSAtMTsKLQotCWlmIChiYXR0ZXJ5X3dtKQotCQlhZGMgPSB3bTk3eHhfcmVhZF9hdXhfYWRjKGJhdHRlcnlfd20sIFdNOTdYWF9BVVhfSUQxKTsKLQlyZXR1cm4gYWRjOwotfQotCi1zdGF0aWMgaW50IGdldF9iYXR0ZXJ5X3N0YXR1cyhzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpiKQotewotCWludCBzdGF0dXM7Ci0KLQlpZiAoaXNfdXNiX2Nvbm5lY3RlZCgpKQotCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOwotCWVsc2UKLQkJc3RhdHVzID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKmIsCi0JCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCi0JCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQotewotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKHBzcCkgewotCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgotCQl2YWwtPmludHZhbCA9IGdldF9iYXR0ZXJ5X3N0YXR1cyhiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR046Ci0JCXZhbC0+aW50dmFsID0gMHhmZDA7Ci0JCWJyZWFrOwotCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOOgotCQl2YWwtPmludHZhbCA9IDB4YzAwOwotCQlicmVhazsKLQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgotCQl2YWwtPmludHZhbCA9IGdldF9iYXR0ZXJ5X3ZvbHRhZ2UoKTsKLQkJYnJlYWs7Ci0JY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJR046Ci0JCXZhbC0+aW50dmFsID0gMTAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl2YWwtPmludHZhbCA9IC0xOwotCQlyYyA9IC0xOwotCX0KLQotCXJldHVybiByYzsKKy8qCisgKiBDYW1lcmEgaW50ZXJmYWNlCisgKi8KK3N0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSBtaW9hNzAxX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhID0geworCS5mbGFncyAgPSBQWEFfQ0FNRVJBX01BU1RFUiB8IFBYQV9DQU1FUkFfREFUQVdJRFRIXzggfAorCQlQWEFfQ0FNRVJBX1BDTEtfRU4gfCBQWEFfQ0FNRVJBX01DTEtfRU4sCisJLm1jbGtfMTBraHogPSA1MDAwLAogfTsKIAotc3RhdGljIHN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeV9wcyA9IHsKLQkubmFtZSA9ICJtaW9hNzAxX2JhdHRlcnkiLAotCS50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWSwKLQkuZ2V0X3Byb3BlcnR5ID0gZ2V0X3Byb3BlcnR5LAotCS5wcm9wZXJ0aWVzID0gYmF0dGVyeV9wcm9wcywKLQkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKGJhdHRlcnlfcHJvcHMpLAorc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIGlkIGluIHB4YTI3eF9kZXZpY2VfY2FtZXJhIGluIGRldmljZS5jICovCiB9OwogCi1zdGF0aWMgaW50IGJhdHRlcnlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgd205N3h4ICp3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCByYzsKLQotCWJhdHRlcnlfd20gPSB3bTsKLQotCXJjID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKE5VTEwsICZiYXR0ZXJ5X3BzKTsKLQlpZiAocmMpCi0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJIkNvdWxkIG5vdCByZWdpc3RlciBtaW9hNzAxIGJhdHRlcnkgLT4gJWRcbiIsIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYmF0dGVyeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQliYXR0ZXJ5X3dtID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWlvYTcwMV9iYXR0ZXJ5X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3bTk3eHgtYmF0dGVyeSIsCisvKiBCb2FyZCBJMkMgZGV2aWNlcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtaW9hNzAxX2kyY19kZXZpY2VzW10gPSB7CisJeworCQkvKiBNdXN0IGluaXRpYWxpemUgYmVmb3JlIHRoZSBjYW1lcmEocykgKi8KKwkJSTJDX0JPQVJEX0lORk8oIm10OW0xMTEiLCAweDVkKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLAogCX0sCi0JLnByb2JlID0gYmF0dGVyeV9wcm9iZSwKLQkucmVtb3ZlID0gYmF0dGVyeV9yZW1vdmUKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG1pb2E3MDFfYmF0dGVyeV9pbml0KHZvaWQpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pb2E3MDFfYmF0dGVyeV9kcml2ZXIpOwotCWlmIChyYykKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgbWlvYTcwMSBiYXR0ZXJ5IGRyaXZlclxuIik7Ci0JcmV0dXJuIHJjOwotfQotCi0jZWxzZQotc3RhdGljIGludCBfX2luaXQgbWlvYTcwMV9iYXR0ZXJ5X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgorc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CisJLmZhc3RfbW9kZSA9IDEsCit9OwogCiAvKgogICogTWlvIGdsb2JhbApAQCAtODUxLDE3ICs4MDgsMTcgQEAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfcG93ZXJvZmYodm9pZCkKIHsKIAltaW9hNzAxX21hY2hpbmVfZXhpdCgpOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU8xOF9QT1dFUk9GRiwgMSk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgncycpOwogfQogCiBzdGF0aWMgdm9pZCBtaW9hNzAxX3Jlc3RhcnQoY2hhciBjKQogewogCW1pb2E3MDFfbWFjaGluZV9leGl0KCk7Ci0JYXJtX21hY2hpbmVfcmVzdGFydChjKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJyk7CiB9CiAKIHN0cnVjdCBncGlvX3Jlc3MgZ2xvYmFsX2dwaW9zW10gPSB7Ci0JTUlPX0dQSU9fT1VUKEdQSU85X0NIQVJHRV9uRU4sIDEsICJDaGFyZ2VyIGVuYWJsZSIpLAorCU1JT19HUElPX09VVChHUElPOV9DSEFSR0VfRU4sIDEsICJDaGFyZ2VyIGVuYWJsZSIpLAogCU1JT19HUElPX09VVChHUElPMThfUE9XRVJPRkYsIDAsICJQb3dlciBPZmYiKSwKIAlNSU9fR1BJT19PVVQoR1BJTzg3X0xDRF9QT1dFUiwgMCwgIkxDRCBQb3dlciIpCiB9OwpAQCAtODc5LDEyICs4MzYsMTYgQEAKIAlzZXRfcHhhX2ZiX2luZm8oJm1pb2E3MDFfcHhhZmJfaW5mbyk7CiAJcHhhX3NldF9tY2lfaW5mbygmbWlvYTcwMV9tY2lfaW5mbyk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmbWlvYTcwMV9rZXlwYWRfaW5mbyk7CisJd205N3h4X2JhdF9zZXRfcGRhdGEoJm1pb2E3MDFfYmF0dGVyeV9kYXRhKTsKIAl1ZGNfaW5pdCgpOwogCXBtX3Bvd2VyX29mZiA9IG1pb2E3MDFfcG93ZXJvZmY7CiAJYXJtX3BtX3Jlc3RhcnQgPSBtaW9hNzAxX3Jlc3RhcnQ7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJZ3NtX2luaXQoKTsKLQltaW9hNzAxX2JhdHRlcnlfaW5pdCgpOworCisJcHhhX3NldF9pMmNfaW5mbygmaTJjX3BkYXRhKTsKKwlweGFfc2V0X2NhbWVyYV9pbmZvKCZtaW9hNzAxX3B4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShtaW9hNzAxX2kyY19kZXZpY2VzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggYjM2Y2VjNWMuLjM0ODQxYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKQEAgLTU1LDYgKzU1LDEwIEBACiAJR1BJTzg5X1VTQkgxX1BFTiwKIAkvKiBQV00wICovCiAJR1BJTzE2X1BXTTBfT1VULAorCisJLyogSTJDICovCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKIH07CiAKIC8qCkBAIC0xMDAsOCArMTA0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBjbTk5MF9mYmluZm8gX19pbml0ZGF0YSA9IHsKIAkubW9kZXMJCQk9ICZmYl9pbmZvX3NoYXJwX2xxMDg0djFkZzIxLAogCS5udW1fbW9kZXMJCT0gMSwKLQkubGNjcjAJCQk9IExDQ1IwX1BBUywKLQkubGNjcjMJCQk9IExDQ1IzX1BDUCwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKIAkucHhhZmJfbGNkX3Bvd2VyCT0gcGNtOTkwX2xjZF9wb3dlciwKIH07CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QQ005OTBfRElTUExBWV9ORUMpCkBAIC0xMjMsOCArMTI2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBjbTk5MF9mYmluZm8gX19pbml0ZGF0YSA9IHsKIAkubW9kZXMJCQk9ICZmYl9pbmZvX25lY19ubDY0NDhiYzIwXzE4ZCwKIAkubnVtX21vZGVzCQk9IDEsCi0JLmxjY3IwCQkJPSBMQ0NSMF9BY3QsCi0JLmxjY3IzCQkJPSBMQ0NSM19QaXhGbEVkZywKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKIAkucHhhZmJfbGNkX3Bvd2VyCT0gcGNtOTkwX2xjZF9wb3dlciwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggMmUzYmQ4Yi4uYWU4ODg1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KQEAgLTQxMyw5ICs0MTQsNDAgQEAKIAkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNoYXJwc2xfcm9tX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9IkJvb3QgUFJPTSBGaWxlc3lzdGVtIiwKKwkJLm9mZnNldAk9IDB4MDAxMjAwMDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2hhcnBzbF9yb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHNoYXJwc2xfcm9tX3BhcnRzKSwKKwkucGFydHMJCT0gc2hhcnBzbF9yb21fcGFydHMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoYXJwc2xfcm9tX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgwMDAwMDAwMCwKKwkJLmVuZAk9IDB4MDA3ZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGFycHNsX3JvbV9kZXZpY2UgPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gLTEsCisJLnJlc291cmNlID0gc2hhcnBzbF9yb21fcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzaGFycHNsX3JvbV9yZXNvdXJjZXMpLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZzaGFycHNsX3JvbV9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwb29kbGVfbG9jb21vX2RldmljZSwKIAkmcG9vZGxlX3Njb29wX2RldmljZSwKKwkmc2hhcnBzbF9yb21fZGV2aWNlLAogfTsKIAogc3RhdGljIHZvaWQgcG9vZGxlX3Bvd2Vyb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wd20uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B3bS5jCmluZGV4IDc0ZTJlYWQuLjNjYTdmZmM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wd20uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wd20uYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCXB3bS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiUFdNQ0xLIik7CisJcHdtLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIocHdtLT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIocHdtLT5jbGspOwogCQlnb3RvIGVycl9mcmVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCAyNWQxN2ExLi42YzU3NTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMzYsMTIgKzM2LDYgQEAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKIAotaW50IGNwdV9pc19weGEyNngodm9pZCkKLXsKLQlyZXR1cm4gY3B1X2lzX3B4YTI1MCgpICYmICgoQk9PVF9ERUYgJiAweDgpID09IDApOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2lzX3B4YTI2eCk7Ci0KIC8qCiAgKiBWYXJpb3VzIGNsb2NrIGZhY3RvcnMgZHJpdmVuIGJ5IHRoZSBDQ0NSIHJlZ2lzdGVyLgogICovCkBAIC0xNjcsMzYgKzE2MSw1MSBAQAogICogOTUuODQyTUh6IC0+IE1NQyAxOS4xNjlNSHosIEkyQyAzMS45NDlNSHosIEZJQ1AgNDcuOTIzTUh6LCBVU0IgNDcuOTIzTUh6CiAgKiAxNDcuNDU2TUh6IC0+IFVBUlQgMTQuNzQ1Nk1IeiwgQUM5NyAxMi4yODhNSHosIEkyUyA1LjY3Mk1IeiAoYWxsZWdlZGx5KQogICovCi1zdGF0aWMgc3RydWN0IGNsayBweGEyNXhfaHd1YXJ0X2NsayA9Ci0JSU5JVF9DS0VOKCJVQVJUQ0xLIiwgSFdVQVJULCAxNDc0NTYwMCwgMSwgJnB4YV9kZXZpY2VfaHd1YXJ0LmRldikKLTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfaHd1YXJ0LCBIV1VBUlQsIDE0NzQ1NjAwLCAxKTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTI1eF9od3VhcnRfY2xrcmVnID0KKwlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9od3VhcnQsICJweGEyeHgtdWFydC4zIiwgTlVMTCk7CiAKIC8qCiAgKiBQWEEgMnh4IGNsb2NrIGRlY2xhcmF0aW9ucy4KICAqLwotc3RhdGljIHN0cnVjdCBjbGsgcHhhMjV4X2Nsa3NbXSA9IHsKLQlJTklUX0NLKCJMQ0RDTEsiLCBMQ0QsICZjbGtfcHhhMjV4X2xjZF9vcHMsICZweGFfZGV2aWNlX2ZiLmRldiksCi0JSU5JVF9DS0VOKCJVQVJUQ0xLIiwgRkZVQVJULCAxNDc0NTYwMCwgMSwgJnB4YV9kZXZpY2VfZmZ1YXJ0LmRldiksCi0JSU5JVF9DS0VOKCJVQVJUQ0xLIiwgQlRVQVJULCAxNDc0NTYwMCwgMSwgJnB4YV9kZXZpY2VfYnR1YXJ0LmRldiksCi0JSU5JVF9DS0VOKCJVQVJUQ0xLIiwgU1RVQVJULCAxNDc0NTYwMCwgMSwgTlVMTCksCi0JSU5JVF9DS0VOKCJVRENDTEsiLCBVU0IsIDQ3OTIzMDAwLCA1LCAmcHhhMjV4X2RldmljZV91ZGMuZGV2KSwKLQlJTklUX0NMSygiR1BJTzExX0NMSyIsICZjbGtfcHhhMjV4X2dwaW8xMV9vcHMsIDM2ODY0MDAsIDAsIE5VTEwpLAotCUlOSVRfQ0xLKCJHUElPMTJfQ0xLIiwgJmNsa19weGEyNXhfZ3BpbzEyX29wcywgMzI3NjgsIDAsIE5VTEwpLAotCUlOSVRfQ0tFTigiTU1DQ0xLIiwgTU1DLCAxOTE2OTAwMCwgMCwgJnB4YV9kZXZpY2VfbWNpLmRldiksCi0JSU5JVF9DS0VOKCJJMkNDTEsiLCBJMkMsIDMxOTQ5MDAwLCAwLCAmcHhhX2RldmljZV9pMmMuZGV2KSwKK3N0YXRpYyBERUZJTkVfQ0socHhhMjV4X2xjZCwgTENELCAmY2xrX3B4YTI1eF9sY2Rfb3BzKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfZmZ1YXJ0LCBGRlVBUlQsIDE0NzQ1NjAwLCAxKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfYnR1YXJ0LCBCVFVBUlQsIDE0NzQ1NjAwLCAxKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfc3R1YXJ0LCBTVFVBUlQsIDE0NzQ1NjAwLCAxKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfdXNiLCBVU0IsIDQ3OTIzMDAwLCA1KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHB4YTI1eF9ncGlvMTEsICZjbGtfcHhhMjV4X2dwaW8xMV9vcHMsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9DTEsocHhhMjV4X2dwaW8xMiwgJmNsa19weGEyNXhfZ3BpbzEyX29wcywgMzI3NjgsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9tbWMsIE1NQywgMTkxNjkwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9pMmMsIEkyQywgMzE5NDkwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9zc3AsIFNTUCwgMzY4NjQwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X25zc3AsIE5TU1AsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9hc3NwLCBBU1NQLCAzNjg2NDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfcHdtMCwgUFdNMCwgMzY4NjQwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X3B3bTEsIFBXTTEsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9hYzk3LCBBQzk3LCAyNDU3NjAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X2kycywgSTJTLCAxNDc0NTYwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X2ZpY3AsIEZJQ1AsIDQ3OTIzMDAwLCAwKTsKIAotCUlOSVRfQ0tFTigiU1NQQ0xLIiwgIFNTUCwgMzY4NjQwMCwgMCwgJnB4YTI1eF9kZXZpY2Vfc3NwLmRldiksCi0JSU5JVF9DS0VOKCJTU1BDTEsiLCBOU1NQLCAzNjg2NDAwLCAwLCAmcHhhMjV4X2RldmljZV9uc3NwLmRldiksCi0JSU5JVF9DS0VOKCJTU1BDTEsiLCBBU1NQLCAzNjg2NDAwLCAwLCAmcHhhMjV4X2RldmljZV9hc3NwLmRldiksCi0JSU5JVF9DS0VOKCJQV01DTEsiLCBQV00wLCAzNjg2NDAwLCAwLCAmcHhhMjV4X2RldmljZV9wd20wLmRldiksCi0JSU5JVF9DS0VOKCJQV01DTEsiLCBQV00xLCAzNjg2NDAwLCAwLCAmcHhhMjV4X2RldmljZV9wd20xLmRldiksCi0KLQlJTklUX0NLRU4oIkFDOTdDTEsiLCAgICAgQUM5NywgICAgIDI0NTc2MDAwLCAwLCBOVUxMKSwKLQotCS8qCi0JSU5JVF9DS0VOKCJJMlNDTEsiLCAgSTJTLCAgMTQ3NDU2MDAsIDAsIE5VTEwpLAotCSovCi0JSU5JVF9DS0VOKCJGSUNQQ0xLIiwgRklDUCwgNDc5MjMwMDAsIDAsIE5VTEwpLAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTI1eF9jbGtyZWdzW10gPSB7CisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfbGNkLCAicHhhMnh4LWZiIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfZmZ1YXJ0LCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2J0dWFydCwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9zdHVhcnQsICJweGEyeHgtdWFydC4yIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfdXNiLCAicHhhMjV4LXVkYyIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X21tYywgInB4YTJ4eC1tY2kuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2kyYywgInB4YTJ4eC1pMmMuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X3NzcCwgInB4YTI1eC1zc3AuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X25zc3AsICJweGEyNXgtbnNzcC4xIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfYXNzcCwgInB4YTI1eC1uc3NwLjIiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9wd20wLCAicHhhMjV4LXB3bS4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfcHdtMSwgInB4YTI1eC1wd20uMSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2kycywgInB4YTJ4eC1pMnMiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9zdHVhcnQsICJweGEyeHgtaXIiLCAiVUFSVENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2ZpY3AsICJweGEyeHgtaXIiLCAiRklDUENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2FjOTcsIE5VTEwsICJBQzk3Q0xLIiksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfZ3BpbzExLCBOVUxMLCAiR1BJTzExX0NMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2dwaW8xMiwgTlVMTCwgIkdQSU8xMl9DTEsiKSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMwNCwxMyArMzEzLDIxIEBACiAJcHhhX2luaXRfZ3Bpbyg4NSwgcHhhMjV4X3NldF93YWtlKTsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4Cit2b2lkIF9faW5pdCBweGEyNnhfaW5pdF9pcnEodm9pZCkKK3sKKwlweGFfaW5pdF9pcnEoMzIsIHB4YTI1eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3Bpbyg5MCwgcHhhMjV4X3NldF93YWtlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcHhhMjV4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZweGEyNXhfZGV2aWNlX3VkYywKIAkmcHhhX2RldmljZV9mZnVhcnQsCiAJJnB4YV9kZXZpY2VfYnR1YXJ0LAogCSZweGFfZGV2aWNlX3N0dWFydCwKIAkmcHhhX2RldmljZV9pMnMsCi0JJnB4YV9kZXZpY2VfcnRjLAorCSZzYTExMDBfZGV2aWNlX3J0YywKIAkmcHhhMjV4X2RldmljZV9zc3AsCiAJJnB4YTI1eF9kZXZpY2VfbnNzcCwKIAkmcHhhMjV4X2RldmljZV9hc3NwLApAQCAtMzM2LDcgKzM1Myw3IEBACiAKIAkJcmVzZXRfc3RhdHVzID0gUkNTUjsKIAotCQljbGtzX3JlZ2lzdGVyKHB4YTI1eF9jbGtzLCBBUlJBWV9TSVpFKHB4YTI1eF9jbGtzKSk7CisJCWNsa3NfcmVnaXN0ZXIocHhhMjV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjV4X2Nsa3JlZ3MpKTsKIAogCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYSgxNikpKQogCQkJcmV0dXJuIHJldDsKQEAgLTM1Niw4ICszNzMsOCBAQAogCX0KIAogCS8qIE9ubHkgYWRkIEhXVUFSVCBmb3IgUFhBMjU1LzI2eDsgUFhBMjEwLzI1MCBkbyBub3QgaGF2ZSBpdC4gKi8KLQlpZiAoY3B1X2lzX3B4YTI1NSgpIHx8IGNwdV9pc19weGEyNngoKSkgewotCQljbGtzX3JlZ2lzdGVyKCZweGEyNXhfaHd1YXJ0X2NsaywgMSk7CisJaWYgKGNwdV9pc19weGEyNTUoKSkgeworCQljbGtzX3JlZ2lzdGVyKCZweGEyNXhfaHd1YXJ0X2Nsa3JlZywgMSk7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcHhhX2RldmljZV9od3VhcnQpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCAzZTRhYjIyLi40MTFiZWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMTQ0LDQwICsxNDQsNTkgQEAKIAkuZ2V0cmF0ZQk9IGNsa19weGEyN3hfbGNkX2dldHJhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBweGEyN3hfY2xrc1tdID0gewotCUlOSVRfQ0soIkxDRENMSyIsIExDRCwgICAgJmNsa19weGEyN3hfbGNkX29wcywgJnB4YV9kZXZpY2VfZmIuZGV2KSwKLQlJTklUX0NLKCJDQU1DTEsiLCBDQU1FUkEsICZjbGtfcHhhMjd4X2xjZF9vcHMsIE5VTEwpLAorc3RhdGljIERFRklORV9DSyhweGEyN3hfbGNkLCBMQ0QsICZjbGtfcHhhMjd4X2xjZF9vcHMpOworc3RhdGljIERFRklORV9DSyhweGEyN3hfY2FtZXJhLCBDQU1FUkEsICZjbGtfcHhhMjd4X2xjZF9vcHMpOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9mZnVhcnQsIEZGVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9idHVhcnQsIEJUVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9zdHVhcnQsIFNUVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9pMnMsIEkyUywgMTQ2ODIwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9pMmMsIEkyQywgMzI4NDIwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF91c2IsIFVTQiwgNDgwMDAwMDAsIDUpOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9tbWMsIE1NQywgMTk1MDAwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9maWNwLCBGSUNQLCA0ODAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3VzYmhvc3QsIFVTQkhPU1QsIDQ4MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfcHdyaTJjLCBQV1JJMkMsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfa2V5cGFkLCBLRVlQQUQsIDMyNzY4LCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfc3NwMSwgU1NQMSwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9zc3AyLCBTU1AyLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3NzcDMsIFNTUDMsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfcHdtMCwgUFdNMCwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9wd20xLCBQV00xLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2FjOTcsIEFDOTcsIDI0NTc2MDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfYWM5N2NvbmYsIEFDOTdDT05GLCAyNDU3NjAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X21zbCwgTVNMLCA0ODAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3VzaW0sIFVTSU0sIDQ4MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfbWVtc3RrLCBNRU1TVEssIDE5NTAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfaW0sIElNLCAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfbWVtYywgTUVNQywgMCwgMCk7CiAKLQlJTklUX0NLRU4oIlVBUlRDTEsiLCBGRlVBUlQsIDE0ODU3MDAwLCAxLCAmcHhhX2RldmljZV9mZnVhcnQuZGV2KSwKLQlJTklUX0NLRU4oIlVBUlRDTEsiLCBCVFVBUlQsIDE0ODU3MDAwLCAxLCAmcHhhX2RldmljZV9idHVhcnQuZGV2KSwKLQlJTklUX0NLRU4oIlVBUlRDTEsiLCBTVFVBUlQsIDE0ODU3MDAwLCAxLCBOVUxMKSwKLQotCUlOSVRfQ0tFTigiSTJTQ0xLIiwgIEkyUywgIDE0NjgyMDAwLCAwLCAmcHhhX2RldmljZV9pMnMuZGV2KSwKLQlJTklUX0NLRU4oIkkyQ0NMSyIsICBJMkMsICAzMjg0MjAwMCwgMCwgJnB4YV9kZXZpY2VfaTJjLmRldiksCi0JSU5JVF9DS0VOKCJVRENDTEsiLCAgVVNCLCAgNDgwMDAwMDAsIDUsICZweGEyN3hfZGV2aWNlX3VkYy5kZXYpLAotCUlOSVRfQ0tFTigiTU1DQ0xLIiwgIE1NQywgIDE5NTAwMDAwLCAwLCAmcHhhX2RldmljZV9tY2kuZGV2KSwKLQlJTklUX0NLRU4oIkZJQ1BDTEsiLCBGSUNQLCA0ODAwMDAwMCwgMCwgJnB4YV9kZXZpY2VfZmljcC5kZXYpLAotCi0JSU5JVF9DS0VOKCJVU0JDTEsiLCBVU0JIT1NULCA0ODAwMDAwMCwgMCwgJnB4YTI3eF9kZXZpY2Vfb2hjaS5kZXYpLAotCUlOSVRfQ0tFTigiSTJDQ0xLIiwgUFdSSTJDLCAxMzAwMDAwMCwgMCwgJnB4YTI3eF9kZXZpY2VfaTJjX3Bvd2VyLmRldiksCi0JSU5JVF9DS0VOKCJLQkRDTEsiLCBLRVlQQUQsIDMyNzY4LCAwLCAmcHhhMjd4X2RldmljZV9rZXlwYWQuZGV2KSwKLQotCUlOSVRfQ0tFTigiU1NQQ0xLIiwgU1NQMSwgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX3NzcDEuZGV2KSwKLQlJTklUX0NLRU4oIlNTUENMSyIsIFNTUDIsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9zc3AyLmRldiksCi0JSU5JVF9DS0VOKCJTU1BDTEsiLCBTU1AzLCAxMzAwMDAwMCwgMCwgJnB4YTI3eF9kZXZpY2Vfc3NwMy5kZXYpLAotCUlOSVRfQ0tFTigiUFdNQ0xLIiwgUFdNMCwgMTMwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX3B3bTAuZGV2KSwKLQlJTklUX0NLRU4oIlBXTUNMSyIsIFBXTTEsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9wd20xLmRldiksCi0KLQlJTklUX0NLRU4oIkFDOTdDTEsiLCAgICAgQUM5NywgICAgIDI0NTc2MDAwLCAwLCBOVUxMKSwKLQlJTklUX0NLRU4oIkFDOTdDT05GQ0xLIiwgQUM5N0NPTkYsIDI0NTc2MDAwLCAwLCBOVUxMKSwKLQotCS8qCi0JSU5JVF9DS0VOKCJNU0xDTEsiLCAgTVNMLCAgNDgwMDAwMDAsIDAsIE5VTEwpLAotCUlOSVRfQ0tFTigiVVNJTUNMSyIsIFVTSU0sIDQ4MDAwMDAwLCAwLCBOVUxMKSwKLQlJTklUX0NLRU4oIk1TVEtDTEsiLCBNRU1TVEssIDE5NTAwMDAwLCAwLCBOVUxMKSwKLQlJTklUX0NLRU4oIklNQ0xLIiwgICBJTSwgICAwLCAwLCBOVUxMKSwKLQlJTklUX0NLRU4oIk1FTUNMSyIsICBNRU1DLCAwLCAwLCBOVUxMKSwKLQkqLworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTI3eF9jbGtyZWdzW10gPSB7CisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfbGNkLCAicHhhMnh4LWZiIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfY2FtZXJhLCAicHhhMjd4LWNhbWVyYS4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfZmZ1YXJ0LCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2J0dWFydCwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9zdHVhcnQsICJweGEyeHgtdWFydC4yIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfaTJzLCAicHhhMnh4LWkycyIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2kyYywgInB4YTJ4eC1pMmMuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X3VzYiwgInB4YTI3eC11ZGMiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9tbWMsICJweGEyeHgtbWNpLjAiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9zdHVhcnQsICJweGEyeHgtaXIiLCAiVUFSVENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2ZpY3AsICJweGEyeHgtaXIiLCAiRklDUENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X3VzYmhvc3QsICJweGEyN3gtb2hjaSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X3B3cmkyYywgInB4YTJ4eC1pMmMuMSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2tleXBhZCwgInB4YTI3eC1rZXlwYWQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9zc3AxLCAicHhhMjd4LXNzcC4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfc3NwMiwgInB4YTI3eC1zc3AuMSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X3NzcDMsICJweGEyN3gtc3NwLjIiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9wd20wLCAicHhhMjd4LXB3bS4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfcHdtMSwgInB4YTI3eC1wd20uMSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2FjOTcsIE5VTEwsICJBQzk3Q0xLIiksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfYWM5N2NvbmYsIE5VTEwsICJBQzk3Q09ORkNMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X21zbCwgTlVMTCwgIk1TTENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X3VzaW0sIE5VTEwsICJVU0lNQ0xLIiksCisJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfbWVtc3RrLCBOVUxMLCAiTVNUS0NMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X2ltLCBOVUxMLCAiSU1DTEsiKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9tZW1jLCBOVUxMLCAiTUVNQ0xLIiksCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0zMTMsMzggKzMzMiwxOCBAQAogdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpCiB7CiAJcHhhX2luaXRfaXJxKDM0LCBweGEyN3hfc2V0X3dha2UpOwotCXB4YV9pbml0X2dwaW8oMTI4LCBweGEyN3hfc2V0X3dha2UpOworCXB4YV9pbml0X2dwaW8oMTIxLCBweGEyN3hfc2V0X3dha2UpOwogfQogCiAvKgogICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBzcGVjaWZpYyB0byBQWEEyN3guCiAgKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcG93ZXJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSAweDQwZjAwMTgwLAotCQkuZW5kCT0gMHg0MGYwMDFhMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBJUlFfUFdSSTJDLAotCQkuZW5kCT0gSVJRX1BXUkkyQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9pMmNfcG93ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1pMmMiLAotCS5pZAkJPSAxLAotCS5yZXNvdXJjZQk9IGkyY19wb3dlcl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19wb3dlcl9yZXNvdXJjZXMpLAotfTsKLQogdm9pZCBfX2luaXQgcHhhMjd4X3NldF9pMmNfcG93ZXJfaW5mbyhzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhICppbmZvKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJUENGUiB8PSBQQ0ZSX1BJMkNFTjsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JcHhhMjd4X2RldmljZV9pMmNfcG93ZXIuZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvOworCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YTI3eF9kZXZpY2VfaTJjX3Bvd2VyLCBpbmZvKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMzUzLDggKzM1Miw4IEBACiAJJnB4YV9kZXZpY2VfYnR1YXJ0LAogCSZweGFfZGV2aWNlX3N0dWFydCwKIAkmcHhhX2RldmljZV9pMnMsCisJJnNhMTEwMF9kZXZpY2VfcnRjLAogCSZweGFfZGV2aWNlX3J0YywKLQkmcHhhMjd4X2RldmljZV9pMmNfcG93ZXIsCiAJJnB4YTI3eF9kZXZpY2Vfc3NwMSwKIAkmcHhhMjd4X2RldmljZV9zc3AyLAogCSZweGEyN3hfZGV2aWNlX3NzcDMsCkBAIC0zODAsNyArMzc5LDcgQEAKIAogCQlyZXNldF9zdGF0dXMgPSBSQ1NSOwogCi0JCWNsa3NfcmVnaXN0ZXIocHhhMjd4X2Nsa3MsIEFSUkFZX1NJWkUocHhhMjd4X2Nsa3MpKTsKKwkJY2xrc19yZWdpc3RlcihweGEyN3hfY2xrcmVncywgQVJSQVlfU0laRShweGEyN3hfY2xrcmVncykpOwogCiAJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDMyKSkpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwppbmRleCA5YWRjN2ZjLi5mNzM1ZTU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwpAQCAtODUsMTQgKzg1LDE2IEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY29tbW9uX2Nsa3NbXSA9IHsKLQlQWEEzeHhfQ0tFTigiTkFORENMSyIsIE5BTkQsIDE1NjAwMDAwMCwgMCwgJnB4YTN4eF9kZXZpY2VfbmFuZC5kZXYpLAorc3RhdGljIERFRklORV9QWEEzX0NLRU4oY29tbW9uX25hbmQsIE5BTkQsIDE1NjAwMDAwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjb21tb25fY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfY29tbW9uX25hbmQsICJweGEzeHgtbmFuZCIsICJOQU5EQ0xLIiksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBweGEzMTBfY2xrc1tdID0gewotI2lmZGVmIENPTkZJR19DUFVfUFhBMzEwCi0JUFhBM3h4X0NLRU4oIk1NQ0NMSyIsIE1NQzMsIDE5NTAwMDAwLCAwLCAmcHhhM3h4X2RldmljZV9tY2kzLmRldiksCi0jZW5kaWYKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTMxMF9tbWMzLCBNTUMzLCAxOTUwMDAwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzMTBfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMzEwX21tYzMsICJweGEyeHgtbWNpLjIiLCAiTU1DQ0xLIiksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGEzMDBfaW5pdCh2b2lkKQpAQCAtMTAwLDEyICsxMDIsMTIgQEAKIAlpZiAoY3B1X2lzX3B4YTMwMCgpIHx8IGNwdV9pc19weGEzMTAoKSkgewogCQlweGEzeHhfaW5pdF9tZnAoKTsKIAkJcHhhM3h4X21mcF9pbml0X2FkZHIocHhhMzAwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUoY29tbW9uX2Nsa3MpKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShjb21tb25fY2xrcmVncykpOwogCX0KIAogCWlmIChjcHVfaXNfcHhhMzEwKCkpIHsKIAkJcHhhM3h4X21mcF9pbml0X2FkZHIocHhhMzEwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzEwX2Nsa3MpKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMTBfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwppbmRleCAwMTZlYjE4Li5lZmZlNDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwpAQCAtODAsOCArODAsMTAgQEAKIAlNRlBfQUREUl9FTkQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBweGEzMjBfY2xrc1tdID0gewotCVBYQTN4eF9DS0VOKCJOQU5EQ0xLIiwgTkFORCwgMTA0MDAwMDAwLCAwLCAmcHhhM3h4X2RldmljZV9uYW5kLmRldiksCitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzMjBfbmFuZCwgTkFORCwgMTA0MDAwMDAwLCAwKTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTMyMF9jbGtyZWdzW10gPSB7CisJSU5JVF9DTEtSRUcoJmNsa19weGEzMjBfbmFuZCwgInB4YTN4eC1uYW5kIiwgIk5BTkRDTEsiKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTMyMF9pbml0KHZvaWQpCkBAIC04OSw3ICs5MSw3IEBACiAJaWYgKGNwdV9pc19weGEzMjAoKSkgewogCQlweGEzeHhfaW5pdF9tZnAoKTsKIAkJcHhhM3h4X21mcF9pbml0X2FkZHIocHhhMzIwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzIwX2Nsa3MpKTsKKwkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMjBfY2xrcmVncykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCBiM2NkNWQwLi40OTA4OTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0yMTYsNDMgKzIxNyw1OCBAQAogCS5kaXNhYmxlCT0gY2xrX2R1bW15X2Rpc2FibGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBweGEzeHhfY2xrc1tdID0gewotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkNMS19QT1VUIiwKLQkJLm9wcyAgICAgICAgICAgID0gJmNsa19wb3V0X29wcywKLQkJLnJhdGUgICAgICAgICAgID0gMTMwMDAwMDAsCi0JCS5kZWxheSAgICAgICAgICA9IDcwLAotCX0sCitzdGF0aWMgc3RydWN0IGNsayBjbGtfcHhhM3h4X3BvdXQgPSB7CisJLm9wcwkJPSAmY2xrX3BvdXRfb3BzLAorCS5yYXRlCQk9IDEzMDAwMDAwLAorCS5kZWxheQkJPSA3MCwKK307CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19kdW1teSA9IHsKKwkub3BzCQk9ICZjbGtfZHVtbXlfb3BzLAorfTsKKworc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9sY2QsIExDRCwgJmNsa19weGEzeHhfaHNpb19vcHMpOworc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9jYW1lcmEsIENBTUVSQSwgJmNsa19weGEzeHhfaHNpb19vcHMpOworc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9hYzk3LCBBQzk3LCAmY2xrX3B4YTN4eF9hYzk3X29wcyk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfZmZ1YXJ0LCBGRlVBUlQsIDE0ODU3MDAwLCAxKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9idHVhcnQsIEJUVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X3N0dWFydCwgU1RVQVJULCAxNDg1NzAwMCwgMSk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfaTJjLCBJMkMsIDMyODQyMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF91ZGMsIFVEQywgNDgwMDAwMDAsIDUpOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X3VzYmgsIFVTQkgsIDQ4MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9rZXlwYWQsIEtFWVBBRCwgMzI3NjgsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X3NzcDEsIFNTUDEsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9zc3AyLCBTU1AyLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfc3NwMywgU1NQMywgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X3NzcDQsIFNTUDQsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9wd20wLCBQV00wLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfcHdtMSwgUFdNMSwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X21tYzEsIE1NQzEsIDE5NTAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9tbWMyLCBNTUMyLCAxOTUwMDAwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzeHhfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3BvdXQsIE5VTEwsICJDTEtfUE9VVCIpLAogCS8qIFBvd2VyIEkyQyBjbG9jayBpcyBhbHdheXMgb24gKi8KLQl7Ci0JCS5uYW1lCQk9ICJJMkNDTEsiLAotCQkub3BzCQk9ICZjbGtfZHVtbXlfb3BzLAotCQkuZGV2CQk9ICZweGEzeHhfZGV2aWNlX2kyY19wb3dlci5kZXYsCi0JfSwKLQotCVBYQTN4eF9DSygiTENEQ0xLIiwgIExDRCwgICAgJmNsa19weGEzeHhfaHNpb19vcHMsICZweGFfZGV2aWNlX2ZiLmRldiksCi0JUFhBM3h4X0NLKCJDQU1DTEsiLCAgQ0FNRVJBLCAmY2xrX3B4YTN4eF9oc2lvX29wcywgTlVMTCksCi0JUFhBM3h4X0NLKCJBQzk3Q0xLIiwgQUM5NywgICAmY2xrX3B4YTN4eF9hYzk3X29wcywgTlVMTCksCi0KLQlQWEEzeHhfQ0tFTigiVUFSVENMSyIsIEZGVUFSVCwgMTQ4NTcwMDAsIDEsICZweGFfZGV2aWNlX2ZmdWFydC5kZXYpLAotCVBYQTN4eF9DS0VOKCJVQVJUQ0xLIiwgQlRVQVJULCAxNDg1NzAwMCwgMSwgJnB4YV9kZXZpY2VfYnR1YXJ0LmRldiksCi0JUFhBM3h4X0NLRU4oIlVBUlRDTEsiLCBTVFVBUlQsIDE0ODU3MDAwLCAxLCBOVUxMKSwKLQotCVBYQTN4eF9DS0VOKCJJMkNDTEsiLCBJMkMsICAzMjg0MjAwMCwgMCwgJnB4YV9kZXZpY2VfaTJjLmRldiksCi0JUFhBM3h4X0NLRU4oIlVEQ0NMSyIsIFVEQywgIDQ4MDAwMDAwLCA1LCAmcHhhMjd4X2RldmljZV91ZGMuZGV2KSwKLQlQWEEzeHhfQ0tFTigiVVNCQ0xLIiwgVVNCSCwgNDgwMDAwMDAsIDAsICZweGEyN3hfZGV2aWNlX29oY2kuZGV2KSwKLQlQWEEzeHhfQ0tFTigiS0JEQ0xLIiwgS0VZUEFELCAgMzI3NjgsIDAsICZweGEyN3hfZGV2aWNlX2tleXBhZC5kZXYpLAotCi0JUFhBM3h4X0NLRU4oIlNTUENMSyIsIFNTUDEsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9zc3AxLmRldiksCi0JUFhBM3h4X0NLRU4oIlNTUENMSyIsIFNTUDIsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9zc3AyLmRldiksCi0JUFhBM3h4X0NLRU4oIlNTUENMSyIsIFNTUDMsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9zc3AzLmRldiksCi0JUFhBM3h4X0NLRU4oIlNTUENMSyIsIFNTUDQsIDEzMDAwMDAwLCAwLCAmcHhhM3h4X2RldmljZV9zc3A0LmRldiksCi0JUFhBM3h4X0NLRU4oIlBXTUNMSyIsIFBXTTAsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9wd20wLmRldiksCi0JUFhBM3h4X0NLRU4oIlBXTUNMSyIsIFBXTTEsIDEzMDAwMDAwLCAwLCAmcHhhMjd4X2RldmljZV9wd20xLmRldiksCi0KLQlQWEEzeHhfQ0tFTigiTU1DQ0xLIiwgTU1DMSwgMTk1MDAwMDAsIDAsICZweGFfZGV2aWNlX21jaS5kZXYpLAotCVBYQTN4eF9DS0VOKCJNTUNDTEsiLCBNTUMyLCAxOTUwMDAwMCwgMCwgJnB4YTN4eF9kZXZpY2VfbWNpMi5kZXYpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZHVtbXksICJweGEyeHgtaTJjLjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9sY2QsICJweGEyeHgtZmIiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9jYW1lcmEsIE5VTEwsICJDQU1DTEsiKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9hYzk3LCBOVUxMLCAiQUM5N0NMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X2ZmdWFydCwgInB4YTJ4eC11YXJ0LjAiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9idHVhcnQsICJweGEyeHgtdWFydC4xIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfc3R1YXJ0LCAicHhhMnh4LXVhcnQuMiIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3N0dWFydCwgInB4YTJ4eC1pciIsICJVQVJUQ0xLIiksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfaTJjLCAicHhhMnh4LWkyYy4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfdWRjLCAicHhhMjd4LXVkYyIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3VzYmgsICJweGEyN3gtb2hjaSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X2tleXBhZCwgInB4YTI3eC1rZXlwYWQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9zc3AxLCAicHhhMjd4LXNzcC4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfc3NwMiwgInB4YTI3eC1zc3AuMSIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3NzcDMsICJweGEyN3gtc3NwLjIiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9zc3A0LCAicHhhMjd4LXNzcC4zIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfcHdtMCwgInB4YTI3eC1wd20uMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3B3bTEsICJweGEyN3gtcHdtLjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9tbWMxLCAicHhhMnh4LW1jaS4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfbW1jMiwgInB4YTJ4eC1tY2kuMSIsIE5VTEwpLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNTI5LDI4ICs1NDUsOSBAQAogICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBzcGVjaWZpYyB0byBQWEEzeHguCiAgKi8KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcG93ZXJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHg0MGY1MDBjMCwKLQkJLmVuZCAgICA9IDB4NDBmNTAwZDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gSVJRX1BXUkkyQywKLQkJLmVuZAk9IElSUV9QV1JJMkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyID0gewotCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKLQkuaWQJCT0gMSwKLQkucmVzb3VyY2UJPSBpMmNfcG93ZXJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcG93ZXJfcmVzb3VyY2VzKSwKLX07Ci0KIHZvaWQgX19pbml0IHB4YTN4eF9zZXRfaTJjX3Bvd2VyX2luZm8oc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqaW5mbykKIHsKLQlweGEzeHhfZGV2aWNlX2kyY19wb3dlci5kZXYucGxhdGZvcm1fZGF0YSA9IGluZm87CisJcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhM3h4X2RldmljZV9pMmNfcG93ZXIsIGluZm8pOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01NTksNiArNTU2LDcgQEAKIAkmcHhhX2RldmljZV9idHVhcnQsCiAJJnB4YV9kZXZpY2Vfc3R1YXJ0LAogCSZweGFfZGV2aWNlX2kycywKKwkmc2ExMTAwX2RldmljZV9ydGMsCiAJJnB4YV9kZXZpY2VfcnRjLAogCSZweGEyN3hfZGV2aWNlX3NzcDEsCiAJJnB4YTI3eF9kZXZpY2Vfc3NwMiwKQEAgLTU2Niw3ICs1NjQsNiBAQAogCSZweGEzeHhfZGV2aWNlX3NzcDQsCiAJJnB4YTI3eF9kZXZpY2VfcHdtMCwKIAkmcHhhMjd4X2RldmljZV9wd20xLAotCSZweGEzeHhfZGV2aWNlX2kyY19wb3dlciwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGEzeHhfc3lzZGV2W10gPSB7CkBAIC01OTUsNyArNTkyLDcgQEAKIAkJICovCiAJCUFTQ1IgJj0gfihBU0NSX1JESCB8IEFTQ1JfRDFTIHwgQVNDUl9EMlMgfCBBU0NSX0QzUyk7CiAKLQkJY2xrc19yZWdpc3RlcihweGEzeHhfY2xrcywgQVJSQVlfU0laRShweGEzeHhfY2xrcykpOworCQljbGtzX3JlZ2lzdGVyKHB4YTN4eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTN4eF9jbGtyZWdzKSk7CiAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoMzIpKSkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKaW5kZXggZTdlYTkxYy4uNWQwMmE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwpAQCAtMTcsMTkgKzE3LDQ0IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTkzMC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKKyNkZWZpbmUgR1BJT19MQ0RfUkVTRVQJKDE2KQorCiAvKiBTQUFSIE1GUCBjb25maWd1cmF0aW9ucyAqLwogc3RhdGljIG1mcF9jZmdfdCBzYWFyX21mcF9jZmdbXSBfX2luaXRkYXRhID0geworCS8qIExDRCAqLworCUdQSU8yM19MQ0RfREQwLAorCUdQSU8yNF9MQ0RfREQxLAorCUdQSU8yNV9MQ0RfREQyLAorCUdQSU8yNl9MQ0RfREQzLAorCUdQSU8yN19MQ0RfREQ0LAorCUdQSU8yOF9MQ0RfREQ1LAorCUdQSU8yOV9MQ0RfREQ2LAorCUdQSU80NF9MQ0RfREQ3LAorCUdQSU8yMV9MQ0RfQ1MsCisJR1BJTzIyX0xDRF9WU1lOQywKKwlHUElPMTdfTENEX0ZDTEtfUkQsCisJR1BJTzE4X0xDRF9MQ0xLX0EwLAorCUdQSU8xOV9MQ0RfUENMS19XUiwKKwlHUElPMTZfR1BJTywgLyogTENEIHJlc2V0ICovCisKIAkvKiBFdGhlcm5ldCAqLwogCURGX25DUzFfbkNTMywKIAlHUElPOTdfR1BJTywKQEAgLTY0LDEyICs4OSw0MDggQEAKIAl9LAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgKENPTkZJR19GQl9QWEFfTU9EVUxFKQorc3RhdGljIHVpbnQxNl90IGxjZF9wb3dlcl9vbltdID0geworCS8qIHNpbmdsZSBmcmFtZSAqLworCVNNQVJUX0NNRF9OT09QLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9ERUxBWSgwKSwKKworCVNNQVJUX0NNRF9OT09QLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9ERUxBWSgwKSwKKworCVNNQVJUX0NNRF9OT09QLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9ERUxBWSgwKSwKKworCVNNQVJUX0NNRF9OT09QLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9ERUxBWSgxMCksCisKKwkvKiBjYWxpYnJhdGlvbiBjb250cm9sICovCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweEE0KSwKKwlTTUFSVF9EQVQoMHg4MCksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0RFTEFZKDE1MCksCisKKwkvKlBvd2VyLU9uIEluaXQgc2VxdWVuY2UqLworCVNNQVJUX0NNRCgweDAwKSwJLyogb3V0cHV0IGN0cmwgKi8KKwlTTUFSVF9DTUQoMHgwMSksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksCS8qIHdhdmUgY3RybCAqLworCVNNQVJUX0NNRCgweDAyKSwKKwlTTUFSVF9EQVQoMHgwNyksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMyksCS8qIGVudHJ5IG1vZGUgKi8KKwlTTUFSVF9EQVQoMHhEMCksCisJU01BUlRfREFUKDB4MzApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwOCksCS8qIGRpc3BsYXkgY3RybCAyICovCisJU01BUlRfREFUKDB4MDgpLAorCVNNQVJUX0RBVCgweDA4KSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MDkpLAkvKiBkaXNwbGF5IGN0cmwgMyAqLworCVNNQVJUX0RBVCgweDA0KSwKKwlTTUFSVF9EQVQoMHgyRiksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDBBKSwJLyogZGlzcGxheSBjdHJsIDQgKi8KKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDgpLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwRCksCS8qIEZyYW1lIE1hcmtlciBwb3NpdGlvbiAqLworCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwOCksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDYwKSwJLyogRHJpdmVyIG91dHB1dCBjb250cm9sICovCisJU01BUlRfREFUKDB4MjcpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4NjEpLAkvKiBCYXNlIGltYWdlIGRpc3BsYXkgY29udHJvbCAqLworCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDMwKSwJLyogWSBzZXR0aW5ncyAzMGgtM0RoICovCisJU01BUlRfREFUKDB4MDcpLAorCVNNQVJUX0RBVCgweDA3KSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MzEpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwNyksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDMyKSwJLyogVGltaW5nKDMpLCBBU1cgSE9MRD0wLjVDTEsgKi8KKwlTTUFSVF9EQVQoMHgwNCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgzMyksCS8qIFRpbWluZyg0KSwgQ0tWIFNUPTBDTEssIENLViBFRD0xQ0xLICovCisJU01BUlRfREFUKDB4MDMpLAorCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MzQpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDM1KSwKKwlTTUFSVF9EQVQoMHgwMiksCisJU01BUlRfREFUKDB4MDUpLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgzNiksCisJU01BUlRfREFUKDB4MUYpLAorCVNNQVJUX0RBVCgweDFGKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MzcpLAorCVNNQVJUX0RBVCgweDA3KSwKKwlTTUFSVF9EQVQoMHgwNyksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDM4KSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDcpLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgzOSksCisJU01BUlRfREFUKDB4MDQpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4M0EpLAorCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9EQVQoMHgwMyksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDNCKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgzQyksCisJU01BUlRfREFUKDB4MDIpLAorCVNNQVJUX0RBVCgweDA1KSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4M0QpLAorCVNNQVJUX0RBVCgweDFGKSwKKwlTTUFSVF9EQVQoMHgxRiksCisJU01BUlRfQ01EKDB4MDApLAkvKiBEaXNwbGF5IGNvbnRyb2wgMSAqLworCVNNQVJUX0NNRCgweDA3KSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0NNRCgweDAwKSwJLyogUG93ZXIgY29udHJvbCA1ICovCisJU01BUlRfQ01EKDB4MTcpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfQ01EKDB4MDApLAkvKiBQb3dlciBjb250cm9sIDEgKi8KKwlTTUFSVF9DTUQoMHgxMCksCisJU01BUlRfREFUKDB4MTApLAorCVNNQVJUX0RBVCgweEIwKSwKKwlTTUFSVF9DTUQoMHgwMCksCS8qIFBvd2VyIGNvbnRyb2wgMiAqLworCVNNQVJUX0NNRCgweDExKSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfREFUKDB4MzApLAorCVNNQVJUX0NNRCgweDAwKSwJLyogUG93ZXIgY29udHJvbCAzICovCisJU01BUlRfQ01EKDB4MTIpLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHg5RSksCisJU01BUlRfQ01EKDB4MDApLAkvKiBQb3dlciBjb250cm9sIDQgKi8KKwlTTUFSVF9DTUQoMHgxMyksCisJU01BUlRfREFUKDB4MTcpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksCS8qIFBvd2VyIGNvbnRyb2wgMyAqLworCVNNQVJUX0NNRCgweDEyKSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfREFUKDB4QkUpLAorCVNNQVJUX0RFTEFZKDEwMCksCisKKwkvKiBkaXNwbGF5IG1vZGUgOiAyNDAqMzIwICovCisJU01BUlRfQ01EKDB4MDApLAkvKiBSQU0gYWRkcmVzcyBzZXQoSCkgMCovCisJU01BUlRfQ01EKDB4MjApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDApLAkvKiBSQU0gYWRkcmVzcyBzZXQoVikgICA0Ki8KKwlTTUFSVF9DTUQoMHgyMSksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksCS8qIFN0YXJ0IG9mIFdpbmRvdyBSQU0gYWRkcmVzcyBzZXQoSCkgOCovCisJU01BUlRfQ01EKDB4NTApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDApLCAJLyogRW5kIG9mIFdpbmRvdyBSQU0gYWRkcmVzcyBzZXQoSCkgMTIqLworCVNNQVJUX0NNRCgweDUxKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4RUYpLAorCVNNQVJUX0NNRCgweDAwKSwJLyogU3RhcnQgb2YgV2luZG93IFJBTSBhZGRyZXNzIHNldChWKSAxNiovCisJU01BUlRfQ01EKDB4NTIpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDApLAkvKiBFbmQgb2YgV2luZG93IFJBTSBhZGRyZXNzIHNldChWKSAyMCovCisJU01BUlRfQ01EKDB4NTMpLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHgzRiksCisJU01BUlRfQ01EKDB4MDApLCAJLyogUGFuZWwgaW50ZXJmYWNlIGNvbnRyb2wgMSAqLworCVNNQVJUX0NNRCgweDkwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MUEpLAorCVNNQVJUX0NNRCgweDAwKSwgCS8qIFBhbmVsIGludGVyZmFjZSBjb250cm9sIDIgKi8KKwlTTUFSVF9DTUQoMHg5MiksCisJU01BUlRfREFUKDB4MDQpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksIAkvKiBQYW5lbCBpbnRlcmZhY2UgY29udHJvbCAzICovCisJU01BUlRfQ01EKDB4OTMpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwNSksCisJU01BUlRfREVMQVkoMjApLAorfTsKKworc3RhdGljIHVpbnQxNl90IGxjZF9wYW5lbF9vbltdID0geworCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwNyksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDIxKSwKKwlTTUFSVF9ERUxBWSgxKSwKKworCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwNyksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDYxKSwKKwlTTUFSVF9ERUxBWSgxMDApLAorCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDA3KSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfREFUKDB4NzMpLAorCVNNQVJUX0RFTEFZKDEpLAorfTsKKworc3RhdGljIHVpbnQxNl90IGxjZF9wYW5lbF9vZmZbXSA9IHsKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MDcpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHg3MiksCisJU01BUlRfREVMQVkoNDApLAorCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDA3KSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0RFTEFZKDEpLAorCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDA3KSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RFTEFZKDEpLAorfTsKKworc3RhdGljIHVpbnQxNl90IGxjZF9wb3dlcl9vZmZbXSA9IHsKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MTApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHg4MCksCisKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MTEpLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHg2MCksCisKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MTIpLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHhBRSksCisJU01BUlRfREVMQVkoNDApLAorCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDEwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorfTsKKworc3RhdGljIHVpbnQxNl90IHVwZGF0ZV9mcmFtZWRhdGFbXSA9IHsKKwkvKiBzZXQgZGlzcGxheSByYW06IDI0MCozMjAgKi8KKwlTTUFSVF9DTUQoMHgwMCksIC8qIFJBTSBhZGRyZXNzIHNldChIKSAwKi8KKwlTTUFSVF9DTUQoMHgyMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksIC8qIFJBTSBhZGRyZXNzIHNldChWKSA0Ki8KKwlTTUFSVF9DTUQoMHgyMSksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksIC8qIFN0YXJ0IG9mIFdpbmRvdyBSQU0gYWRkcmVzcyBzZXQoSCkgOCAqLworCVNNQVJUX0NNRCgweDUwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwgLyogRW5kIG9mIFdpbmRvdyBSQU0gYWRkcmVzcyBzZXQoSCkgMTIgKi8KKwlTTUFSVF9DTUQoMHg1MSksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweEVGKSwKKwlTTUFSVF9DTUQoMHgwMCksIC8qIFN0YXJ0IG9mIFdpbmRvdyBSQU0gYWRkcmVzcyBzZXQoVikgMTYgKi8KKwlTTUFSVF9DTUQoMHg1MiksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMCksIC8qIEVuZCBvZiBXaW5kb3cgUkFNIGFkZHJlc3Mgc2V0KFYpIDIwICovCisJU01BUlRfQ01EKDB4NTMpLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHgzRiksCisKKwkvKiB3YWl0IGZvciB2c3luYyBjbWQgYmVmb3JlIHRyYW5zZmVycmluZyBmcmFtZSBkYXRhICovCisJU01BUlRfQ01EX1dBSVRfRk9SX1ZTWU5DLAorCisJLyogd3JpdGUgcmFtICovCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDIyKSwKKworCS8qIHdyaXRlIGZyYW1lIGRhdGEgKi8KKwlTTUFSVF9DTURfV1JJVEVfRlJBTUUsCit9OworCitzdGF0aWMgdm9pZCBsdG0wMjJhOTdhX2xjZF9wb3dlcihpbnQgb24sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXN0YXRpYyBpbnQgcGluX3JlcXVlc3RlZCA9IDA7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YodmFyLCBzdHJ1Y3QgZmJfaW5mbywgdmFyKTsKKwlpbnQgZXJyOworCisJaWYgKCFwaW5fcmVxdWVzdGVkKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX0xDRF9SRVNFVCwgImxjZCByZXNldCIpOworCQlpZiAoZXJyKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byByZXF1ZXN0IGdwaW8gZm9yIExDRCByZXNldFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RfUkVTRVQsIDApOworCQlwaW5fcmVxdWVzdGVkID0gMTsKKwl9CisKKwlpZiAob24pIHsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19MQ0RfUkVTRVQsIDApOyBtc2xlZXAoMTAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19MQ0RfUkVTRVQsIDEpOyBtc2xlZXAoMTApOworCisJCXB4YWZiX3NtYXJ0X3F1ZXVlKGluZm8sIEFSUkFZX0FORF9TSVpFKGxjZF9wb3dlcl9vbikpOworCQlweGFmYl9zbWFydF9xdWV1ZShpbmZvLCBBUlJBWV9BTkRfU0laRShsY2RfcGFuZWxfb24pKTsKKwl9IGVsc2UgeworCQlweGFmYl9zbWFydF9xdWV1ZShpbmZvLCBBUlJBWV9BTkRfU0laRShsY2RfcGFuZWxfb2ZmKSk7CisJCXB4YWZiX3NtYXJ0X3F1ZXVlKGluZm8sIEFSUkFZX0FORF9TSVpFKGxjZF9wb3dlcl9vZmYpKTsKKwl9CisKKwllcnIgPSBweGFmYl9zbWFydF9mbHVzaChpbmZvKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIiVzOiB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgbHRtMDIyYTk3YV91cGRhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJcHhhZmJfc21hcnRfcXVldWUoaW5mbywgQVJSQVlfQU5EX1NJWkUodXBkYXRlX2ZyYW1lZGF0YSkpOworCXB4YWZiX3NtYXJ0X2ZsdXNoKGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyB0b3NoaWJhX2x0bTAyMmE5N2FfbW9kZXNbXSA9IHsKKwlbMF0gPSB7CisJCS54cmVzCQkJPSAyNDAsCisJCS55cmVzCQkJPSAzMjAsCisJCS5icHAJCQk9IDE2LAorCQkuYTBjc3JkX3NldF9obGQJCT0gMzAsCisJCS5hMGNzd3Jfc2V0X2hsZAkJPSAzMCwKKwkJLndyX3B1bHNlX3dpZHRoCQk9IDMwLAorCQkucmRfcHVsc2Vfd2lkdGggCT0gMzAsCisJCS5vcF9ob2xkX3RpbWUgCQk9IDMwLAorCQkuY21kX2luaF90aW1lCQk9IDYwLAorCisJCS8qIExfTENMS19BMCBhbmQgTF9MQ0xLX1JEIGFjdGl2ZSBsb3cgKi8KKwkJLnN5bmMJCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwKKwkJCQkJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHNhYXJfbGNkX2luZm8gPSB7CisJLm1vZGVzCQkJPSB0b3NoaWJhX2x0bTAyMmE5N2FfbW9kZXMsCisJLm51bV9tb2RlcwkJPSAxLAorCS5sY2RfY29ubgkJPSBMQ0RfU01BUlRfUEFORUxfOEJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfbGNkX3Bvd2VyCT0gbHRtMDIyYTk3YV9sY2RfcG93ZXIsCisJLnNtYXJ0X3VwZGF0ZQkJPSBsdG0wMjJhOTdhX3VwZGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzYWFyX2luaXRfbGNkKHZvaWQpCit7CisJc2V0X3B4YV9mYl9pbmZvKCZzYWFyX2xjZF9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2Fhcl9pbml0X2xjZCh2b2lkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfUFhBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvIHNhYXJfZGE5MDM0X3N1YmRldnNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJkYTkwM3gtYmFja2xpZ2h0IiwKKwkJLmlkCQk9IERBOTAzNF9JRF9XTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIHNhYXJfZGE5MDM0X2luZm8gPSB7CisJLm51bV9zdWJkZXZzCT0gQVJSQVlfU0laRShzYWFyX2RhOTAzNF9zdWJkZXZzKSwKKwkuc3ViZGV2cwk9IHNhYXJfZGE5MDM0X3N1YmRldnMsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNhYXJfaTJjX2luZm9bXSA9IHsKKwlbMF0gPSB7CisJCS50eXBlCQk9ICJkYTkwMzQiLAorCQkuYWRkcgkJPSAweDM0LAorCQkucGxhdGZvcm1fZGF0YQk9ICZzYWFyX2RhOTAzNF9pbmZvLAorCQkuaXJxCQk9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzgzKSksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzYWFyX2luaXRfaTJjKHZvaWQpCit7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShzYWFyX2kyY19pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNhYXJfaW5pdF9pMmModm9pZCkge30KKyNlbmRpZgogc3RhdGljIHZvaWQgX19pbml0IHNhYXJfaW5pdCh2b2lkKQogewogCS8qIGluaXRpYWxpemUgTUZQIGNvbmZpZ3VyYXRpb25zICovCiAJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoc2Fhcl9tZnBfY2ZnKSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworCisJc2Fhcl9pbml0X2kyYygpOworCXNhYXJfaW5pdF9sY2QoKTsKIH0KIAogTUFDSElORV9TVEFSVChTQUFSLCAiUFhBOTMwIEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUikiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc21lbWMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NtZW1jLmMKaW5kZXggYWQzNDZhZC4uZDZmNjkwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc21lbWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKICNkZWZpbmUgU01FTUNfUEhZU19CQVNFCSgweDRBMDAwMDAwKQogI2RlZmluZSBTTUVNQ19QSFlTX1NJWkUJKDB4OTApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDNiZTc2ZWUuLjcyOTlkODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTEyMiw2ICsxMjMsMTAgQEAKIAlHUElPMTA1X0dQSU8sCS8qIFNQSVRaX0dQSU9fQ0ZfSVJRICovCiAJR1BJTzEwNl9HUElPLAkvKiBTUElUWl9HUElPX0NGMl9JUlEgKi8KIAorCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCisKIAlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwKIH07CiAKQEAgLTYwOSwxMCArNjE0LDQxIEBACiB9OwogCiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzaGFycHNsX3JvbV9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJPSJCb290IFBST00gRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJPSAweDAwMTQwMDAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNoYXJwc2xfcm9tX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShzaGFycHNsX3JvbV9wYXJ0cyksCisJLnBhcnRzCQk9IHNoYXJwc2xfcm9tX3BhcnRzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGFycHNsX3JvbV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDAwN2ZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hhcnBzbF9yb21fZGV2aWNlID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IC0xLAorCS5yZXNvdXJjZSA9IHNoYXJwc2xfcm9tX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc2hhcnBzbF9yb21fcmVzb3VyY2VzKSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmc2hhcnBzbF9yb21fZGF0YSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc3BpdHpzY29vcF9kZXZpY2UsCiAJJnNwaXR6a2JkX2RldmljZSwKIAkmc3BpdHpsZWRfZGV2aWNlLAorCSZzaGFycHNsX3JvbV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBzcGl0el9wb3dlcm9mZih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCAyYzMxZWM3Li42ZjQyMDA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJfQogCXNzcC0+cGRldiA9IHBkZXY7CiAKLQlzc3AtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIlNTUENMSyIpOworCXNzcC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHNzcC0+Y2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKHNzcC0+Y2xrKTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCmluZGV4IDU4OWQzMmIuLjU4ZWYwOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYwpAQCAtMTgsMTIgKzE4LDE1IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKQEAgLTMzLDYgKzM2LDQ1IEBACiAJLyogRXRoZXJuZXQgKi8KIAlERl9uQ1MxX25DUzMsCiAJR1BJTzQ3X0dQSU8sCisKKwkvKiBMQ0QgKi8KKwlHUElPMjNfTENEX0REMCwKKwlHUElPMjRfTENEX0REMSwKKwlHUElPMjVfTENEX0REMiwKKwlHUElPMjZfTENEX0REMywKKwlHUElPMjdfTENEX0RENCwKKwlHUElPMjhfTENEX0RENSwKKwlHUElPMjlfTENEX0RENiwKKwlHUElPNDRfTENEX0RENywKKwlHUElPMjFfTENEX0NTLAorCUdQSU8yMl9MQ0RfQ1MyLAorCisJR1BJTzE3X0xDRF9GQ0xLX1JELAorCUdQSU8xOF9MQ0RfTENMS19BMCwKKwlHUElPMTlfTENEX1BDTEtfV1IsCisKKwkvKiBMQ0QgQmFja2xpZ2h0ICovCisJR1BJTzQzX1BXTTMsCS8qIHByaW1hcnkgYmFja2xpZ2h0ICovCisJR1BJTzMyX1BXTTAsCS8qIHNlY29uZGFyeSBiYWNrbGlnaHQgKi8KKworCS8qIEtleXBhZCAqLworCUdQSU8wX0tQX01LSU5fMCwKKwlHUElPMl9LUF9NS0lOXzEsCisJR1BJTzRfS1BfTUtJTl8yLAorCUdQSU82X0tQX01LSU5fMywKKwlHUElPOF9LUF9NS0lOXzQsCisJR1BJTzEwX0tQX01LSU5fNSwKKwlHUElPMTJfS1BfTUtJTl82LAorCUdQSU8xX0tQX01LT1VUXzAsCisJR1BJTzNfS1BfTUtPVVRfMSwKKwlHUElPNV9LUF9NS09VVF8yLAorCUdQSU83X0tQX01LT1VUXzMsCisJR1BJTzlfS1BfTUtPVVRfNCwKKwlHUElPMTFfS1BfTUtPVVRfNSwKKwlHUElPMTNfS1BfTUtPVVRfNiwKKworCUdQSU8xNF9LUF9ES0lOXzIsCisJR1BJTzE1X0tQX0RLSU5fMywKIH07CiAKICNkZWZpbmUgVEFWT1JFVkJfRVRIX1BIWVMJKDB4MTQwMDAwMDApCkBAIC02NCwxMiArMTA2LDM4MiBAQAogCX0sCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQorc3RhdGljIHVuc2lnbmVkIGludCB0YXZvcmV2Yl9tYXRyaXhfa2V5X21hcFtdID0geworCS8qIEtFWShyb3csIGNvbCwga2V5X2NvZGUpICovCisJS0VZKDAsIDQsIEtFWV9BKSwgS0VZKDAsIDUsIEtFWV9CKSwgS0VZKDAsIDYsIEtFWV9DKSwKKwlLRVkoMSwgNCwgS0VZX0UpLCBLRVkoMSwgNSwgS0VZX0YpLCBLRVkoMSwgNiwgS0VZX0cpLAorCUtFWSgyLCA0LCBLRVlfSSksIEtFWSgyLCA1LCBLRVlfSiksIEtFWSgyLCA2LCBLRVlfSyksCisJS0VZKDMsIDQsIEtFWV9NKSwgS0VZKDMsIDUsIEtFWV9OKSwgS0VZKDMsIDYsIEtFWV9PKSwKKwlLRVkoNCwgNSwgS0VZX1IpLCBLRVkoNCwgNiwgS0VZX1MpLAorCUtFWSg1LCA0LCBLRVlfVSksIEtFWSg1LCA0LCBLRVlfViksIEtFWSg1LCA2LCBLRVlfVyksCisKKwlLRVkoNiwgNCwgS0VZX1kpLCBLRVkoNiwgNSwgS0VZX1opLAorCisJS0VZKDAsIDMsIEtFWV8wKSwgS0VZKDIsIDAsIEtFWV8xKSwgS0VZKDIsIDEsIEtFWV8yKSwgS0VZKDIsIDIsIEtFWV8zKSwKKwlLRVkoMiwgMywgS0VZXzQpLCBLRVkoMSwgMCwgS0VZXzUpLCBLRVkoMSwgMSwgS0VZXzYpLCBLRVkoMSwgMiwgS0VZXzcpLAorCUtFWSgxLCAzLCBLRVlfOCksIEtFWSgwLCAyLCBLRVlfOSksCisKKwlLRVkoNiwgNiwgS0VZX1NQQUNFKSwKKwlLRVkoMCwgMCwgS0VZX0tQQVNURVJJU0spLCAJLyogKiAqLworCUtFWSgwLCAxLCBLRVlfS1BET1QpLCAJCS8qICMgKi8KKworCUtFWSg0LCAxLCBLRVlfVVApLAorCUtFWSg0LCAzLCBLRVlfRE9XTiksCisJS0VZKDQsIDAsIEtFWV9MRUZUKSwKKwlLRVkoNCwgMiwgS0VZX1JJR0hUKSwKKwlLRVkoNiwgMCwgS0VZX0hPTUUpLAorCUtFWSgzLCAyLCBLRVlfRU5EKSwKKwlLRVkoNiwgMSwgS0VZX0RFTEVURSksCisJS0VZKDUsIDIsIEtFWV9CQUNLKSwKKwlLRVkoNiwgMywgS0VZX0NBUFNMT0NLKSwJLyogS0VZX0xFRlRTSElGVCksICovCisKKwlLRVkoNCwgNCwgS0VZX0VOVEVSKSwJCS8qIHNjcm9sbCBwdXNoICovCisJS0VZKDYsIDIsIEtFWV9FTlRFUiksCQkvKiBrZXlwYWQgYWN0aW9uICovCisKKwlLRVkoMywgMSwgS0VZX1NFTkQpLAorCUtFWSg1LCAzLCBLRVlfUkVDT1JEKSwKKwlLRVkoNSwgMCwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNSwgMSwgS0VZX1ZPTFVNRURPV04pLAorCisJS0VZKDMsIDAsIEtFWV9GMjIpLAkvKiBzb2Z0MSAqLworCUtFWSgzLCAzLCBLRVlfRjIzKSwJLyogc29mdDIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHRhdm9yZXZiX2tleXBhZF9pbmZvID0geworCS5tYXRyaXhfa2V5X3Jvd3MJPSA3LAorCS5tYXRyaXhfa2V5X2NvbHMJPSA3LAorCS5tYXRyaXhfa2V5X21hcAkJPSB0YXZvcmV2Yl9tYXRyaXhfa2V5X21hcCwKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUodGF2b3JldmJfbWF0cml4X2tleV9tYXApLAorCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRhdm9yZXZiX2luaXRfa2V5cGFkKHZvaWQpCit7CisJcHhhX3NldF9rZXlwYWRfaW5mbygmdGF2b3JldmJfa2V5cGFkX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXZvcmV2Yl9pbml0X2tleXBhZCh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggfHwgQ09ORklHX0tFWUJPQVJEX1BYQTI3eF9NT0RVTEUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHRhdm9yZXZiX2JhY2tsaWdodF9kYXRhW10gPSB7CisJWzBdID0geworCQkvKiBwcmltYXJ5IGJhY2tsaWdodCAqLworCQkucHdtX2lkCQk9IDIsCisJCS5tYXhfYnJpZ2h0bmVzcwk9IDEwMCwKKwkJLmRmdF9icmlnaHRuZXNzCT0gMTAwLAorCQkucHdtX3BlcmlvZF9ucwk9IDEwMDAwMCwKKwl9LAorCVsxXSA9IHsKKwkJLyogc2Vjb25kYXJ5IGJhY2tsaWdodCAqLworCQkucHdtX2lkCQk9IDAsCisJCS5tYXhfYnJpZ2h0bmVzcwk9IDEwMCwKKwkJLmRmdF9icmlnaHRuZXNzCT0gMTAwLAorCQkucHdtX3BlcmlvZF9ucwk9IDEwMDAwMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGF2b3JldmJfYmFja2xpZ2h0X2RldmljZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkJLmlkCQk9IDAsCisJCS5kZXYJCT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmdGF2b3JldmJfYmFja2xpZ2h0X2RhdGFbMF0sCisJCX0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkJLmlkCQk9IDEsCisJCS5kZXYJCT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmdGF2b3JldmJfYmFja2xpZ2h0X2RhdGFbMV0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyB1aW50MTZfdCBwYW5lbF9pbml0W10gPSB7CisJLyogRFNUQiBPVVQgKi8KKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EX05PT1AsCisJU01BUlRfREVMQVkoMSksCisKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EX05PT1AsCisJU01BUlRfREVMQVkoMSksCisKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EX05PT1AsCisJU01BUlRfREVMQVkoMSksCisKKwkvKiBTVEIgT1VUICovCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDFEKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDUpLAorCVNNQVJUX0RFTEFZKDEpLAorCisJLyogUC1PTiBJbml0IHNlcXVlbmNlICovCisJU01BUlRfQ01EKDB4MDApLCAvKiBPU0MgT04gKi8KKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MDEpLCAvKiBTT1VSQ0UgRFJJVkVSIFNISUZUIERJUkVDVElPTiBhbmQgZGlzcGxheSBSQU0gc2V0dGluZyAqLworCVNNQVJUX0RBVCgweDAxKSwKKwlTTUFSVF9EQVQoMHgyNyksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDAyKSwgLyogTElORSBJTlYgKi8KKwlTTUFSVF9EQVQoMHgwMiksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMyksIC8qIElGIG1vZGUoMSkgKi8KKwlTTUFSVF9EQVQoMHgwMSksIC8qIDhiaXQgc21hcnQgbW9kZSg4LTgpLGhpZ2ggc3BlZWQgd3JpdGUgbW9kZSAqLworCVNNQVJUX0RBVCgweDMwKSwKKwlTTUFSVF9DTUQoMHgwNyksCisJU01BUlRfQ01EKDB4MDApLCAvKiBSQU0gV3JpdGUgTW9kZSAqLworCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMyksCisJU01BUlRfQ01EKDB4MDApLAorCisJLyogRElTUExBWSBTZXR0aW5nLCAgMjYySywgZml4ZWQoTk8gc2Nyb2xsKSwgbm8gc3BsaXQgc2NyZWVuICovCisJU01BUlRfQ01EKDB4MDcpLAorCVNNQVJUX0RBVCgweDQwKSwgLyogMTYvMTgvMTkgQlBQICovCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwOCksIC8qIEJQLCBGUCBTZXRpbmcsIEJQPTJILCBGUD0zSCAqLworCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9EQVQoMHgwMiksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDBDKSwgLyogSUYgbW9kZSgyKSwgdXNpbmcgaW50ZXJuYWwgY2xvY2sgJiBNUFUgKi8KKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwRCksIC8qIEZyYW1lIHNldHRpbmcsIDFNaW4uIEZyZXF1ZW5jZSwgMTZDTEsgKi8KKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MTApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgxMiksIC8qIFRpbWluZygxKSxBU1cgVz00Q0xLLCBBU1cgU1Q9MUNMSyAqLworCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9EQVQoMHgwMiksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDEzKSwgLyogVGltaW5nKDIpLE9FViBTVD0wLjVDTEssIE9FViBFRD0xQ0xLICovCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0RBVCgweDAyKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfQ01EKDB4MTQpLCAvKiBUaW1pbmcoMyksIEFTVyBIT0xEPTAuNUNMSyAqLworCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0NNRCgweDE1KSwgLyogVGltaW5nKDQpLCBDS1YgU1Q9MENMSywgQ0tWIEVEPTFDTEsgKi8KKwlTTUFSVF9EQVQoMHgyMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgxQyksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwMyksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0RBVCgweDA0KSwKKwlTTUFSVF9EQVQoMHgwMyksCisJU01BUlRfQ01EKDB4MDMpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9EQVQoMHgwMyksCisJU01BUlRfREFUKDB4MDQpLAorCVNNQVJUX0NNRCgweDAzKSwKKwlTTUFSVF9DTUQoMHgwMiksCisJU01BUlRfREFUKDB4MDQpLAorCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9DTUQoMHgwMyksCisJU01BUlRfQ01EKDB4MDMpLAorCVNNQVJUX0RBVCgweDAzKSwKKwlTTUFSVF9EQVQoMHgwMyksCisJU01BUlRfQ01EKDB4MDMpLAorCVNNQVJUX0NNRCgweDA0KSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0NNRCgweDAzKSwKKwlTTUFSVF9DTUQoMHgwNSksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9DTUQoMHgwNCksCisJU01BUlRfQ01EKDB4MDIpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDQpLAorCVNNQVJUX0NNRCgweDAzKSwKKwlTTUFSVF9EQVQoMHgwMSksCisJU01BUlRfREFUKDB4M0YpLAorCVNNQVJUX0RFTEFZKDApLAorCisJLyogRElTUCBSQU0gc2V0dGluZzogMjQwKjMyMCAqLworCVNNQVJUX0NNRCgweDA0KSwgLyogSEFERFIsIFNUQVJUIDAgKi8KKwlTTUFSVF9DTUQoMHgwNiksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwgLyogeDEsMyAqLworCVNNQVJUX0NNRCgweDA0KSwgLyogSEFERFIsICBFTkQgICA0ICovCisJU01BUlRfQ01EKDB4MDcpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHhFRiksIC8qIHgyLCA3ICovCisJU01BUlRfQ01EKDB4MDQpLCAvKiBWQUREUiwgU1RBUlQgOCAqLworCVNNQVJUX0NNRCgweDA4KSwKKwlTTUFSVF9EQVQoMHgwMCksIC8qIHkxLCAxMCAqLworCVNNQVJUX0RBVCgweDAwKSwgLyogeTEsIDExICovCisJU01BUlRfQ01EKDB4MDQpLCAvKiBWQUREUiwgRU5EIDEyICovCisJU01BUlRfQ01EKDB4MDkpLAorCVNNQVJUX0RBVCgweDAxKSwgLyogeTIsIDE0ICovCisJU01BUlRfREFUKDB4M0YpLCAvKiB5MiwgMTUgKi8KKwlTTUFSVF9DTUQoMHgwMiksIC8qIFJBTSBBRERSIFNFVFRJTkcgMTYgKi8KKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDAwKSwgLyogeDEsIDE5ICovCisJU01BUlRfQ01EKDB4MDIpLCAvKiBSQU0gQUREUiBTRVRUSU5HIDIwICovCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0RBVCgweDAwKSwgLyogeTEsIDIyICovCisJU01BUlRfREFUKDB4MDApLCAvKiB5MSwgMjMgKi8KK307CisKK3N0YXRpYyB1aW50MTZfdCBwYW5lbF9vbltdID0geworCS8qIFBvd2VyLUlDIE9OICovCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0NNRCgweDAyKSwKKwlTTUFSVF9EQVQoMHgwNyksCisJU01BUlRfREFUKDB4N0QpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMyksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDA1KSwKKwlTTUFSVF9DTUQoMHgwMSksCisJU01BUlRfQ01EKDB4MDQpLAorCVNNQVJUX0RBVCgweDAwKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0NNRCgweDA1KSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MTUpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4QzApLAorCVNNQVJUX0RBVCgweDEwKSwKKwlTTUFSVF9ERUxBWSgzMCksCisKKwkvKiBESVNQIE9OICovCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9EQVQoMHgwMCksCisJU01BUlRfREFUKDB4MDEpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4RkYpLAorCVNNQVJUX0RBVCgweEZFKSwKKwlTTUFSVF9ERUxBWSgxNTApLAorfTsKKworc3RhdGljIHVpbnQxNl90IHBhbmVsX29mZltdID0geworCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9DTUQoMHgxRSksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDBBKSwKKwlTTUFSVF9DTUQoMHgwMSksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0RBVCgweEZGKSwKKwlTTUFSVF9EQVQoMHhFRSksCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9EQVQoMHhGOCksCisJU01BUlRfREFUKDB4MTIpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4RTgpLAorCVNNQVJUX0RBVCgweDExKSwKKwlTTUFSVF9DTUQoMHgwMSksCisJU01BUlRfQ01EKDB4MDApLAorCVNNQVJUX0RBVCgweEMwKSwKKwlTTUFSVF9EQVQoMHgxMSksCisJU01BUlRfQ01EKDB4MDEpLAorCVNNQVJUX0NNRCgweDAwKSwKKwlTTUFSVF9EQVQoMHg0MCksCisJU01BUlRfREFUKDB4MTEpLAorCVNNQVJUX0NNRCgweDAxKSwKKwlTTUFSVF9DTUQoMHgwMCksCisJU01BUlRfREFUKDB4MDApLAorCVNNQVJUX0RBVCgweDEwKSwKK307CisKK3N0YXRpYyB1aW50MTZfdCB1cGRhdGVfZnJhbWVkYXRhW10gPSB7CisJLyogd3JpdGUgcmFtICovCisJU01BUlRfQ01EKDB4MDIpLAorCVNNQVJUX0NNRCgweDAyKSwKKworCS8qIHdyaXRlIGZyYW1lIGRhdGEgKi8KKwlTTUFSVF9DTURfV1JJVEVfRlJBTUUsCit9OworCitzdGF0aWMgdm9pZCBsdG0wMjBkNTUwX2xjZF9wb3dlcihpbnQgb24sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gY29udGFpbmVyX29mKHZhciwgc3RydWN0IGZiX2luZm8sIHZhcik7CisKKwlpZiAob24pIHsKKwkJcHhhZmJfc21hcnRfcXVldWUoaW5mbywgQVJSQVlfQU5EX1NJWkUocGFuZWxfaW5pdCkpOworCQlweGFmYl9zbWFydF9xdWV1ZShpbmZvLCBBUlJBWV9BTkRfU0laRShwYW5lbF9vbikpOworCX0gZWxzZSB7CisJCXB4YWZiX3NtYXJ0X3F1ZXVlKGluZm8sIEFSUkFZX0FORF9TSVpFKHBhbmVsX29mZikpOworCX0KKworCWlmIChweGFmYl9zbWFydF9mbHVzaChpbmZvKSkKKwkJcHJfZXJyKCIlczogdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIGx0bTAyMGQ1NTBfdXBkYXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXB4YWZiX3NtYXJ0X3F1ZXVlKGluZm8sIEFSUkFZX0FORF9TSVpFKHVwZGF0ZV9mcmFtZWRhdGEpKTsKKwlweGFmYl9zbWFydF9mbHVzaChpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gdG9zaGliYV9sdG0wMjBkNTUwX21vZGVzW10gPSB7CisJWzBdID0geworCQkueHJlcwkJCT0gMjQwLAorCQkueXJlcwkJCT0gMzIwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmEwY3NyZF9zZXRfaGxkCQk9IDMwLAorCQkuYTBjc3dyX3NldF9obGQJCT0gMzAsCisJCS53cl9wdWxzZV93aWR0aAkJPSAzMCwKKwkJLnJkX3B1bHNlX3dpZHRoIAk9IDE3MCwKKwkJLm9wX2hvbGRfdGltZSAJCT0gMzAsCisJCS5jbWRfaW5oX3RpbWUJCT0gNjAsCisKKwkJLyogTF9MQ0xLX0EwIGFuZCBMX0xDTEtfUkQgYWN0aXZlIGxvdyAqLworCQkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfAorCQkJCQkgIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gdGF2b3JldmJfbGNkX2luZm8gPSB7CisJLm1vZGVzCQkJPSB0b3NoaWJhX2x0bTAyMGQ1NTBfbW9kZXMsCisJLm51bV9tb2RlcwkJPSAxLAorCS5sY2RfY29ubgkJPSBMQ0RfU01BUlRfUEFORUxfOEJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfbGNkX3Bvd2VyCT0gbHRtMDIwZDU1MF9sY2RfcG93ZXIsCisJLnNtYXJ0X3VwZGF0ZQkJPSBsdG0wMjBkNTUwX3VwZGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0YXZvcmV2Yl9pbml0X2xjZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdGF2b3JldmJfYmFja2xpZ2h0X2RldmljZXNbMF0pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdGF2b3JldmJfYmFja2xpZ2h0X2RldmljZXNbMV0pOworCXNldF9weGFfZmJfaW5mbygmdGF2b3JldmJfbGNkX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXZvcmV2Yl9pbml0X2xjZCh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19GQl9QWEEgfHwgQ09ORklHX0ZCX1BYQV9NT0RVTEUgKi8KKwogc3RhdGljIHZvaWQgX19pbml0IHRhdm9yZXZiX2luaXQodm9pZCkKIHsKIAkvKiBpbml0aWFsaXplIE1GUCBjb25maWd1cmF0aW9ucyAqLwogCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRhdm9yZXZiX21mcF9jZmcpKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CisKKwl0YXZvcmV2Yl9pbml0X2xjZCgpOworCXRhdm9yZXZiX2luaXRfa2V5cGFkKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVEFWT1JFVkIsICJQWEE5MzAgRXZhbHVhdGlvbiBCb2FyZCAoYWthIFRhdm9yRVZCKSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKaW5kZXggZjhhOWE2Mi4uMDAxNjI0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIC8qCiAgKiBUaGlzIGlzIFBYQSdzIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBhIHJlc29sdXRpb24KQEAgLTE1MCwxOCArMTUwLDExIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBweGFfdGltZXJfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgY2xvY2tfdGlja19yYXRlOworCXVuc2lnbmVkIGxvbmcgY2xvY2tfdGlja19yYXRlID0gZ2V0X2Nsb2NrX3RpY2tfcmF0ZSgpOwogCiAJT0lFUiA9IDA7CiAJT1NTUiA9IE9TU1JfTTAgfCBPU1NSX00xIHwgT1NTUl9NMiB8IE9TU1JfTTM7CiAKLQlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQljbG9ja190aWNrX3JhdGUgPSAzNjg2NDAwOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfbWFpbnN0b25lKCkpCi0JCWNsb2NrX3RpY2tfcmF0ZSA9IDMyNDk2MDA7Ci0JZWxzZQotCQljbG9ja190aWNrX3JhdGUgPSAzMjUwMDAwOwotCiAJc2V0X29zY3IybnNfc2NhbGUoY2xvY2tfdGlja19yYXRlKTsKIAogCWNrZXZ0X3B4YV9vc21yMC5tdWx0ID0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAyMjQ4OTdhLi4zMzMyZTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CkBAIC03MzMsNiArNzM0LDQ1IEBACiAJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUZEX1RDNjM5M1hCCitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSB0b3NhX3RjNjM5M3hiX2xjZF9tb2RlW10gPSB7CisJeworCQkueHJlcyA9IDQ4MCwKKwkJLnlyZXMgPSA2NDAsCisJCS5waXhjbG9jayA9IDB4MDAyY2RmMDAsLyogUExMIGRpdmlzb3IgKi8KKwkJLmxlZnRfbWFyZ2luID0gMHgwMDRjLAorCQkucmlnaHRfbWFyZ2luID0gMHgwMDViLAorCQkudXBwZXJfbWFyZ2luID0gMHgwMDAxLAorCQkubG93ZXJfbWFyZ2luID0gMHgwMDBkLAorCQkuaHN5bmNfbGVuID0gMHgwMDAyLAorCQkudnN5bmNfbGVuID0gMHgwMDAxLAorCQkuc3luYyA9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCQkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0seworCQkueHJlcyA9IDI0MCwKKwkJLnlyZXMgPSAzMjAsCisJCS5waXhjbG9jayA9IDB4MDBlN2YyMDMsLyogUExMIGRpdmlzb3IgKi8KKwkJLmxlZnRfbWFyZ2luID0gMHgwMDI0LAorCQkucmlnaHRfbWFyZ2luID0gMHgwMDJmLAorCQkudXBwZXJfbWFyZ2luID0gMHgwMDAxLAorCQkubG93ZXJfbWFyZ2luID0gMHgwMDBkLAorCQkuaHN5bmNfbGVuID0gMHgwMDAyLAorCQkudnN5bmNfbGVuID0gMHgwMDAxLAorCQkuc3luYyA9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCQkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdG1pb19mYl9kYXRhIHRvc2FfdGM2MzkzeGJfZmJfY29uZmlnID0geworCS5sY2Rfc2V0X3Bvd2VyCT0gdGM2MzkzeGJfbGNkX3NldF9wb3dlciwKKwkubGNkX21vZGUJPSB0YzYzOTN4Yl9sY2RfbW9kZSwKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRSh0b3NhX3RjNjM5M3hiX2xjZF9tb2RlKSwKKwkubW9kZXMJCT0gJnRvc2FfdGM2MzkzeGJfbGNkX21vZGVbMF0sCisJLmhlaWdodAkJPSA4MiwKKwkud2lkdGgJCT0gNjAsCit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB0b3NhX3RjNjM5M3hiX2RhdGEgPSB7CiAJLnNjcl9wbGwyY3IJPSAweDBjYzEsCiAJLnNjcl9ncGVyCT0gMHgzMzAwLApAQCAtNzQ4LDYgKzc4OCw5IEBACiAJLnJlc3VtZQkJPSB0b3NhX3RjNjM5M3hiX3Jlc3VtZSwKIAogCS5uYW5kX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9uYW5kX2NvbmZpZywKKyNpZmRlZiBDT05GSUdfTUZEX1RDNjM5M1hCCisJLmZiX2RhdGEJPSAmdG9zYV90YzYzOTN4Yl9mYl9jb25maWcsCisjZW5kaWYKIAogCS5yZXN1bWVfcmVzdG9yZSA9IDEsCiB9OwpAQCAtNzg5LDYgKzgzMiwzNiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9yb21fcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0iQm9vdCBQUk9NIEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CT0gMHgwMDE2MDAwMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzaGFycHNsX3JvbV9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc2hhcnBzbF9yb21fcGFydHMpLAorCS5wYXJ0cwkJPSBzaGFycHNsX3JvbV9wYXJ0cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hhcnBzbF9yb21fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDAwMDAwMDAwLAorCQkuZW5kCT0gMHgwMDdmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoYXJwc2xfcm9tX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAtMSwKKwkucmVzb3VyY2UgPSBzaGFycHNsX3JvbV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHNoYXJwc2xfcm9tX3Jlc291cmNlcyksCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcm9tX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRvc2FzY29vcF9kZXZpY2UsCiAJJnRvc2FzY29vcF9qY19kZXZpY2UsCkBAIC03OTgsNiArODcxLDcgQEAKIAkmdG9zYV9ncGlvX2tleXNfZGV2aWNlLAogCSZ0b3NhbGVkX2RldmljZSwKIAkmdG9zYV9idF9kZXZpY2UsCisJJnNoYXJwc2xfcm9tX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIHRvc2FfcG93ZXJvZmYodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCmluZGV4IDgxMzgwNDQuLjIxOGQyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCkBAIC0yNSw3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCAwZjI0NDc0Li4yOGU0ZTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMTYsOCArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KICNpbmNsdWRlIDxtYWNoL3p5bG9uaXRlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCA1Y2NkZTdjLi5hZDkxMTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC03LDkgKzcsMTcgQEAKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KIAorY29uZmlnIFJFQUxWSUVXX0VCX0E5TVAKKwlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkiCisJZGVwZW5kcyBvbiBNQUNIX1JFQUxWSUVXX0VCCisJc2VsZWN0IENQVV9WNworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ29ydGV4LUE5TVBDb3JlIHRpbGUgb24gdGhlIFJlYWx2aWV3IHBsYXRmb3JtLgorCiBjb25maWcgUkVBTFZJRVdfRUJfQVJNMTFNUAogCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgdGlsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfUkVBTFZJRVdfRUIKKwlzZWxlY3QgQ1BVX1Y2CiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSB0aWxlIG9uIHRoZSBSZWFsdmlldyBwbGF0Zm9ybS4KIApAQCAtMjUsNiArMzMsNyBAQAogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQjExTVAKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTFNUENvcmUgcGxhdGZvcm0iCisJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IE1QQ29yZSBQbGF0Zm9ybSBCYXNlYm9hcmQuCkBAIC0zMyw4ICs0MiwyOSBAQAogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQjExNzYKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTE3NiBwbGF0Zm9ybSIKKwlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQVJNMTE3NiBQbGF0Zm9ybSBCYXNlYm9hcmQuCiAKK2NvbmZpZyBNQUNIX1JFQUxWSUVXX1BCQTgKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCLUE4IHBsYXRmb3JtIgorCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgQVJNX0dJQworCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBDb3J0ZXgtQTggUGxhdGZvcm0gQmFzZWJvYXJkLgorCSAgUEItQTggaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzIHN1cHBvcnQgZm9yCisJICBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KKworY29uZmlnIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKKwlib29sICJIaWdoIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBmb3IgdGhlIFJlYWxWaWV3IHBsYXRmb3JtIgorCWRlcGVuZHMgb24gIU1BQ0hfUkVBTFZJRVdfUEIxMTc2CisJZGVmYXVsdCB5CisJaGVscAorCSAgUmVhbFZpZXcgYm9hcmRzIG90aGVyIHRoYW4gUEIxMTc2IGhhdmUgdGhlIFJBTSBhdmFpbGFibGUgYXQKKwkgIDB4NzAwMDAwMDAsIDI1Nk1CIG9mIHdoaWNoIGJlaW5nIG1pcnJvcmVkIGF0IDB4MDAwMDAwMDAuIElmCisJICB0aGUgYm9hcmQgc3VwcG9ydHMgNTEyTUIgb2YgUkFNLCB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlCisJICBtZW1vcnkgdG8gYmUgYWNjZXNzZWQgY29udGlndW91c2x5IGF0IHRoZSBoaWdoIHBoeXNpY2FsCisJICBvZmZzZXQuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCmluZGV4IGQyYWUwNzcuLjdiZWE4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQpAQCAtNiw1ICs2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX1JFQUxWSUVXX0VCKQkJKz0gcmVhbHZpZXdfZWIubwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMU1QKQkrPSByZWFsdmlld19wYjExbXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMTc2KQkrPSByZWFsdmlld19wYjExNzYubworb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEJBOCkJKz0gcmVhbHZpZXdfcGJhOC5vCiBvYmotJChDT05GSUdfU01QKQkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8gbG9jYWx0aW1lci5vCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpCQkrPSBob3RwbHVnLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUuYm9vdAppbmRleCBjN2U3NWFjLi5kOTdlMDAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZS5ib290CkBAIC0xLDQgKzEsOSBAQAoraWZlcSAoJChDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVCkseSkKKyAgIHpyZWxhZGRyLXkJOj0gMHg3MDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDcwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4NzA4MDAwMDAKK2Vsc2UKICAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAogcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCiBpbml0cmRfcGh5cy15CTo9IDB4MDA4MDAwMDAKLQorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY2xvY2suYwppbmRleCAzMzQ3YzQyLi5hNzA0MzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jbG9jay5jCkBAIC0xMCw5ICsxMCwxMSBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtMjAsMzIgKzIyLDYgQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAKLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKLQotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQotewotCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCWNsayA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLQogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiAwOwpAQCAtNjUsNyArNDEsOSBAQAogCiBsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCXJldHVybiByYXRlOworCXN0cnVjdCBpY3N0MzA3X3ZjbyB2Y287CisJdmNvID0gaWNzdDMwN19raHpfdG9fdmNvKGNsay0+cGFyYW1zLCByYXRlIC8gMTAwMCk7CisJcmV0dXJuIGljc3QzMDdfa2h6KGNsay0+cGFyYW1zLCB2Y28pICogMTAwMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwogCkBAIC03OCw1NyArNTYsOSBAQAogCiAJCXZjbyA9IGljc3QzMDdfa2h6X3RvX3ZjbyhjbGstPnBhcmFtcywgcmF0ZSAvIDEwMDApOwogCQljbGstPnJhdGUgPSBpY3N0MzA3X2toeihjbGstPnBhcmFtcywgdmNvKSAqIDEwMDA7Ci0KLQkJcHJpbnRrKCJDbG9jayAlczogc2V0dGluZyBWQ08gcmVnIHBhcmFtczogUz0lZCBSPSVkIFY9JWRcbiIsCi0JCQljbGstPm5hbWUsIHZjby5zLCB2Y28uciwgdmNvLnYpOwotCiAJCWNsay0+c2V0dmNvKGNsaywgdmNvKTsKIAkJcmV0ID0gMDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLQotLyoKLSAqIFRoZXNlIGFyZSBmaXhlZCBjbG9ja3MuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGttaV9jbGsgPSB7Ci0JLm5hbWUJPSAiS01JUkVGQ0xLIiwKLQkucmF0ZQk9IDI0MDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7Ci0JLm5hbWUJPSAiVUFSVENMSyIsCi0JLnJhdGUJPSAyNDAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2lfY2xrID0gewotCS5uYW1lCT0gIk1DTEsiLAotCS5yYXRlCT0gMjQwMDAwMDAsCi19OwotCi1pbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKLQotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKLQotc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKLXsKLQljbGtfcmVnaXN0ZXIoJmttaV9jbGspOwotCWNsa19yZWdpc3RlcigmdWFydF9jbGspOwotCWNsa19yZWdpc3RlcigmbW1jaV9jbGspOwotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2Nsb2NrLmgKaW5kZXggZGFkYmE2OS4uZWJiYjBmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY2xvY2suaApAQCAtMTIsMTQgKzEyLDggQEAKIHN0cnVjdCBpY3N0MzA3X3BhcmFtczsKIAogc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0Jc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIJCSpuYW1lOwogCWNvbnN0IHN0cnVjdCBpY3N0MzA3X3BhcmFtcyAqcGFyYW1zOwogCXZvaWQJCQkqZGF0YTsKIAl2b2lkCQkJKCpzZXR2Y28pKHN0cnVjdCBjbGsgKiwgc3RydWN0IGljc3QzMDdfdmNvIHZjbyk7CiB9OwotCi1pbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IDJmMDRkNTQuLjVmMWQ1NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0yOCwxMSArMjgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KIAorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0MzA3Lmg+CiAKQEAgLTQ5LDcgKzUyLDcgQEAKIAogI2RlZmluZSBSRUFMVklFV19SRUZDT1VOVEVSCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTXzI0TUh6X09GRlNFVCkKIAotLyogdXNlZCBieSBlbnRyeS1tYWNyby5TICovCisvKiB1c2VkIGJ5IGVudHJ5LW1hY3JvLlMgYW5kIHBsYXRzbXAuYyAqLwogdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKIAogLyoKQEAgLTEyNCw2ICsxMjcsMjkgQEAKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19mbGFzaF9kZXZpY2UpOwogfQogCitzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgcmVhbHZpZXdfc21jOTExeF9wbGF0ZGF0YSA9IHsKKwkuZmxhZ3MJCT0gU01DOTExWF9VU0VfMzJCSVQsCisJLmlycV9mbGFncwk9IElSUUZfU0hBUkVELAorCS5pcnFfcG9sYXJpdHkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfZXRoX2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTExeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSAyLAorfTsKKworaW50IHJlYWx2aWV3X2V0aF9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlpZiAobmFtZSkKKwkJcmVhbHZpZXdfZXRoX2RldmljZS5uYW1lID0gbmFtZTsKKwlyZWFsdmlld19ldGhfZGV2aWNlLnJlc291cmNlID0gcmVzOworCWlmIChzdHJjbXAocmVhbHZpZXdfZXRoX2RldmljZS5uYW1lLCAic21jOTExeCIpID09IDApCisJCXJlYWx2aWV3X2V0aF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcmVhbHZpZXdfc21jOTExeF9wbGF0ZGF0YTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2V0aF9kZXZpY2UpOworfQorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X2kyY19yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gUkVBTFZJRVdfSTJDX0JBU0UsCiAJLmVuZAkJPSBSRUFMVklFV19JMkNfQkFTRSArIFNaXzRLIC0gMSwKQEAgLTE3Nyw5ICsyMDMsMTQgQEAKIHN0YXRpYyB2b2lkIHJlYWx2aWV3X29zY3Zjb19zZXQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKQogewogCXZvaWQgX19pb21lbSAqc3lzX2xvY2sgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUOwotCXZvaWQgX19pb21lbSAqc3lzX29zYyA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfT1NDNF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpzeXNfb3NjOwogCXUzMiB2YWw7CiAKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19wYjExNzYoKSkKKwkJc3lzX29zYyA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfT1NDMF9PRkZTRVQ7CisJZWxzZQorCQlzeXNfb3NjID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19PU0M0X09GRlNFVDsKKwogCXZhbCA9IHJlYWRsKHN5c19vc2MpICYgfjB4N2ZmZmY7CiAJdmFsIHw9IHZjby52IHwgKHZjby5yIDw8IDkpIHwgKHZjby5zIDw8IDE2KTsKIApAQCAtMTg4LDEzICsyMTksNjAgQEAKIAl3cml0ZWwoMCwgc3lzX2xvY2spOwogfQogCi1zdHJ1Y3QgY2xrIHJlYWx2aWV3X2NsY2RfY2xrID0gewotCS5uYW1lCT0gIkNMQ0RDTEsiLAorc3RhdGljIHN0cnVjdCBjbGsgb3NjdmNvX2NsayA9IHsKIAkucGFyYW1zCT0gJnJlYWx2aWV3X29zY3Zjb19wYXJhbXMsCiAJLnNldHZjbyA9IHJlYWx2aWV3X29zY3Zjb19zZXQsCiB9OwogCiAvKgorICogVGhlc2UgYXJlIGZpeGVkIGNsb2Nrcy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgcmVmMjRfY2xrID0geworCS5yYXRlCT0gMjQwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0geworCXsJLyogVUFSVDAgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYxIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDEgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYyIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDIgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYzIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDMgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowOSIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIEtNSTAgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNiIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIEtNSTEgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNyIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIE1NQzAgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNSIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIEVCOkNMQ0QgKi8KKwkJLmRldl9pZAkJPSAiZGV2OjIwIiwKKwkJLmNsawkJPSAmb3NjdmNvX2NsaywKKwl9LCB7CS8qIFBCOkNMQ0QgKi8KKwkJLmRldl9pZAkJPSAiaXNzcDoyMCIsCisJCS5jbGsJCT0gJm9zY3Zjb19jbGssCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CisKKy8qCiAgKiBDTENEIHN1cHBvcnQuCiAgKi8KICNkZWZpbmUgU1lTX0NMQ0RfTkxDRElPT04JKDEgPDwgMikKQEAgLTIyNiw3ICszMDQsMzAgQEAKIAkud2lkdGgJCT0gLTEsCiAJLmhlaWdodAkJPSAtMSwKIAkudGltMgkJPSBUSU0yX0JDRCB8IFRJTTJfSVBDLAotCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfQkdSIHwgQ05UTF9MQ0RWQ09NUCgxKSwKKwkuYnBwCQk9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIHh2Z2EgPSB7CisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiWFZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDEwMjQsCisJCS55cmVzCQk9IDc2OCwKKwkJLnBpeGNsb2NrCT0gMTU3NDgsCisJCS5sZWZ0X21hcmdpbgk9IDE1MiwKKwkJLnJpZ2h0X21hcmdpbgk9IDQ4LAorCQkudXBwZXJfbWFyZ2luCT0gMjMsCisJCS5sb3dlcl9tYXJnaW4JPSAzLAorCQkuaHN5bmNfbGVuCT0gMTA0LAorCQkudnN5bmNfbGVuCT0gNCwKKwkJLnN5bmMJCT0gMCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0JDRCB8IFRJTTJfSVBDLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9CR1IgfCBDTlRMX0xDRFZDT01QKDEpLAogCS5icHAJCT0gMTYsCiB9OwogCkBAIC0yNDksNyArMzUwLDcgQEAKIAkud2lkdGgJCT0gLTEsCiAJLmhlaWdodAkJPSAtMSwKIAkudGltMgkJPSBUSU0yX0JDRCwKLQkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfTENEVkNPTVAoMSksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0JHUiB8IENOVExfTENEVkNPTVAoMSksCiAJLmJwcAkJPSAxNiwKIH07CiAKQEAgLTI3Miw3ICszNzMsNyBAQAogCS53aWR0aAkJPSAtMSwKIAkuaGVpZ2h0CQk9IC0xLAogCS50aW0yCQk9IFRJTTJfSVZTIHwgVElNMl9JSFMgfCBUSU0yX0lQQywKLQkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfTENEVkNPTVAoMSksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0JHUiB8IENOVExfTENEVkNPTVAoMSksCiAJLmJwcAkJPSAxNiwKIH07CiAKQEAgLTI5NSw3ICszOTYsNyBAQAogCS53aWR0aAkJPSAtMSwKIAkuaGVpZ2h0CQk9IC0xLAogCS50aW0yCQk9IFRJTTJfQkNEIHwgVElNMl9JUEMsCi0JLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX0xDRFZDT01QKDEpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9CR1IgfCBDTlRMX0xDRFZDT01QKDEpLAogCS5icHAJCT0gMTYsCiB9OwogCkBAIC0zMDgsOSArNDA5LDE1IEBACiBzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgKnJlYWx2aWV3X2NsY2RfcGFuZWwodm9pZCkKIHsKIAl2b2lkIF9faW9tZW0gKnN5c19jbGNkID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19DTENEX09GRlNFVDsKLQlzdHJ1Y3QgY2xjZF9wYW5lbCAqcGFuZWwgPSAmdmdhOworCXN0cnVjdCBjbGNkX3BhbmVsICp2Z2FfcGFuZWw7CisJc3RydWN0IGNsY2RfcGFuZWwgKnBhbmVsOwogCXUzMiB2YWw7CiAKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpKQorCQl2Z2FfcGFuZWwgPSAmdmdhOworCWVsc2UKKwkJdmdhX3BhbmVsID0gJnh2Z2E7CisKIAl2YWwgPSByZWFkbChzeXNfY2xjZCkgJiBTWVNfQ0xDRF9JRF9NQVNLOwogCWlmICh2YWwgPT0gU1lTX0NMQ0RfSURfU0FOWU9fM184KQogCQlwYW5lbCA9ICZzYW55b18zXzhfaW47CkBAIC0zMTksMTEgKzQyNiwxMSBAQAogCWVsc2UgaWYgKHZhbCA9PSBTWVNfQ0xDRF9JRF9FUFNPTl8yXzIpCiAJCXBhbmVsID0gJmVwc29uXzJfMl9pbjsKIAllbHNlIGlmICh2YWwgPT0gU1lTX0NMQ0RfSURfVkdBKQotCQlwYW5lbCA9ICZ2Z2E7CisJCXBhbmVsID0gdmdhX3BhbmVsOwogCWVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IHVua25vd24gTENEIHBhbmVsIElEIDB4JTA4eCwgdXNpbmcgVkdBXG4iLAogCQkJdmFsKTsKLQkJcGFuZWwgPSAmdmdhOworCQlwYW5lbCA9IHZnYV9wYW5lbDsKIAl9CiAKIAlyZXR1cm4gcGFuZWw7CkBAIC0zNTgsMTIgKzQ2NSwxOCBAQAogCXdyaXRlbCh2YWwsIHN5c19jbGNkKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gU1pfMU07Ci0KIHN0YXRpYyBpbnQgcmVhbHZpZXdfY2xjZF9zZXR1cChzdHJ1Y3QgY2xjZF9mYiAqZmIpCiB7CisJdW5zaWduZWQgbG9uZyBmcmFtZXNpemU7CiAJZG1hX2FkZHJfdCBkbWE7CiAKKwlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpKQorCQkvKiBWR0EsIDE2YnBwICovCisJCWZyYW1lc2l6ZSA9IDY0MCAqIDQ4MCAqIDI7CisJZWxzZQorCQkvKiBYVkdBLCAxNmJwcCAqLworCQlmcmFtZXNpemUgPSAxMDI0ICogNzY4ICogMjsKKwogCWZiLT5wYW5lbAkJPSByZWFsdmlld19jbGNkX3BhbmVsKCk7CiAKIAlmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIGZyYW1lc2l6ZSwKQEAgLTU4OCw3ICs3MDEsNyBAQAogCSAqIFRoZSBkdW1teSBjbG9jayBkZXZpY2UgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBtYWluIGRldmljZQogCSAqIHNvIHRoYXQgdGhlIGxhdHRlciB3aWxsIGJyb2FkY2FzdCB0aGUgY2xvY2sgZXZlbnRzCiAJICovCi0JbG9jYWxfdGltZXJfc2V0dXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlsb2NhbF90aW1lcl9zZXR1cCgpOwogI2VuZGlmCiAKIAkvKiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKaW5kZXggM2NlYTkyYy4uNjNiZTJhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKQEAgLTQ4LDEyICs0OCwxMCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfaTJjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGE7CiBleHRlcm4gc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwotZXh0ZXJuIHN0cnVjdCBjbGsgcmVhbHZpZXdfY2xjZF9jbGs7CiBleHRlcm4gc3RydWN0IGNsY2RfYm9hcmQgY2xjZF9wbGF0X2RhdGE7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKICNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCi1leHRlcm4gdm9pZCBfX2lvbWVtICp0d2RfYmFzZV9hZGRyOwotZXh0ZXJuIHVuc2lnbmVkIGludCB0d2Rfc2l6ZTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnR3ZF9iYXNlOwogI2VuZGlmCiBleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKnRpbWVyMV92YV9iYXNlOwpAQCAtNjMsNSArNjEsNiBAQAogZXh0ZXJuIHZvaWQgcmVhbHZpZXdfbGVkc19ldmVudChsZWRfZXZlbnRfdCBsZWRldnQpOwogZXh0ZXJuIHZvaWQgcmVhbHZpZXdfdGltZXJfaW5pdCh1bnNpZ25lZCBpbnQgdGltZXJfaXJxKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBudW0pOworZXh0ZXJuIGludCByZWFsdmlld19ldGhfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9ob3RwbHVnLmMKaW5kZXggMDk3NDhjYi4uYmUwNDhlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9ob3RwbHVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9ob3RwbHVnLmMKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCiBleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOwogCiBzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOwpAQCAtMjEsNyArMjMsOCBAQAogewogCXVuc2lnbmVkIGludCB2OwogCi0JYXNtIHZvbGF0aWxlKAkibWNyCXAxNSwgMCwgJTEsIGM3LCBjMTQsIDBcbiIKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlhc20gdm9sYXRpbGUoCiAJIgltY3IJcDE1LCAwLCAlMSwgYzcsIGM1LCAwXG4iCiAJIgltY3IJcDE1LCAwLCAlMSwgYzcsIGMxMCwgNFxuIgogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1lYi5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtZWIuaAppbmRleCA4ZDY5OWZkLi4yNjhkNzcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1lYi5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLWViLmgKQEAgLTQ5LDE2ICs0OSwxNCBAQAogI2lmZGVmIENPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QX1JFVkIKICNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX1NDVV9CQVNFCTB4MTAxMDAwMDAJLyogU0NVIHJlZ2lzdGVycyAqLwogI2RlZmluZSBSRUFMVklFV19FQjExTVBfR0lDX0NQVV9CQVNFCTB4MTAxMDAxMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCi0jZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9UV0RfQkFTRQkweDEwMTAwNzAwCi0jZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9UV0RfU0laRQkweDAwMDAwMTAwCisjZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9UV0RfQkFTRQkweDEwMTAwNjAwCiAjZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9HSUNfRElTVF9CQVNFCTB4MTAxMDEwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2RlZmluZSBSRUFMVklFV19FQjExTVBfTDIyMF9CQVNFCTB4MTAxMDIwMDAJLyogTDIyMCByZWdpc3RlcnMgKi8KICNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX1NZU19QTERfQ1RSTDEJMHhEOAkJLyogUmVnaXN0ZXIgb2Zmc2V0IGZvciBNUENvcmUgc3lzY3RsICovCiAjZWxzZQogI2RlZmluZSBSRUFMVklFV19FQjExTVBfU0NVX0JBU0UJMHgxRjAwMDAwMAkvKiBTQ1UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9HSUNfQ1BVX0JBU0UJMHgxRjAwMDEwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIENQVSBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX1RXRF9CQVNFCTB4MUYwMDA3MDAKLSNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX1RXRF9TSVpFCTB4MDAwMDAxMDAKKyNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX1RXRF9CQVNFCTB4MUYwMDA2MDAKICNkZWZpbmUgUkVBTFZJRVdfRUIxMU1QX0dJQ19ESVNUX0JBU0UJMHgxRjAwMTAwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIGRpc3RyaWJ1dG9yICovCiAjZGVmaW5lIFJFQUxWSUVXX0VCMTFNUF9MMjIwX0JBU0UJMHgxRjAwMjAwMAkvKiBMMjIwIHJlZ2lzdGVycyAqLwogI2RlZmluZSBSRUFMVklFV19FQjExTVBfU1lTX1BMRF9DVFJMMQkweDc0CQkvKiBSZWdpc3RlciBvZmZzZXQgZm9yIE1QQ29yZSBzeXNjdGwgKi8KQEAgLTE2Myw3ICsxNjEsNyBAQAogI2RlZmluZSBOUl9JUlFTCQkJTlJfSVJRU19FQgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRUFMVklFV19FQl9BUk0xMU1QKSBcCisjaWYgZGVmaW5lZChDT05GSUdfUkVBTFZJRVdfRUJfQVJNMTFNUCkgfHwgZGVmaW5lZChDT05GSUdfUkVBTFZJRVdfRUJfQTlNUCkgXAogCSYmICghZGVmaW5lZChNQVhfR0lDX05SKSB8fCAoTUFYX0dJQ19OUiA8IE5SX0dJQ19FQjExTVApKQogI3VuZGVmIE1BWF9HSUNfTlIKICNkZWZpbmUgTUFYX0dJQ19OUgkJTlJfR0lDX0VCMTFNUApAQCAtMTc3LDYgKzE3NSw3IEBACiAjZGVmaW5lIFJFQUxWSUVXX0VCX1BST0NfQVJNOQkJMHgwMjAwMDAwMAogI2RlZmluZSBSRUFMVklFV19FQl9QUk9DX0FSTTExCQkweDA0MDAwMDAwCiAjZGVmaW5lIFJFQUxWSUVXX0VCX1BST0NfQVJNMTFNUAkweDA2MDAwMDAwCisjZGVmaW5lIFJFQUxWSUVXX0VCX1BST0NfQTlNUAkJMHgwQzAwMDAwMAogCiAjZGVmaW5lIGNoZWNrX2ViX3Byb2MocHJvY190eXBlKQkJCQkJCVwKIAkoKHJlYWRsKF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfUFJPQ0lEKSkgJiBSRUFMVklFV19FQl9QUk9DX01BU0spCVwKQEAgLTE4OCw0ICsxODcsMTMgQEAKICNkZWZpbmUgY29yZV90aWxlX2ViMTFtcCgpCTAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX0VCX0E5TVAKKyNkZWZpbmUgY29yZV90aWxlX2E5bXAoKQljaGVja19lYl9wcm9jKFJFQUxWSUVXX0VCX1BST0NfQTlNUCkKKyNlbHNlCisjZGVmaW5lIGNvcmVfdGlsZV9hOW1wKCkJMAorI2VuZGlmCisKKyNkZWZpbmUgbWFjaGluZV9pc19yZWFsdmlld19lYl9tcCgpIFwKKwkobWFjaGluZV9pc19yZWFsdmlld19lYigpICYmIChjb3JlX3RpbGVfZWIxMW1wKCkgfHwgY29yZV90aWxlX2E5bXAoKSkpCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX0VCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKaW5kZXggZWNkODBlNS4uNTNlYTBlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKQEAgLTc3LDggKzc3LDcgQEAKICAqLwogI2RlZmluZSBSRUFMVklFV19UQzExTVBfU0NVX0JBU0UJCTB4MUYwMDAwMDAJLyogSVJRLCBUZXN0IGNoaXAgKi8KICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0dJQ19DUFVfQkFTRQkJMHgxRjAwMDEwMAkvKiBUZXN0IGNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLwotI2RlZmluZSBSRUFMVklFV19UQzExTVBfVFdEX0JBU0UJCTB4MUYwMDA3MDAKLSNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX1RXRF9TSVpFCQkweDAwMDAwMTAwCisjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9UV0RfQkFTRQkJMHgxRjAwMDYwMAogI2RlZmluZSBSRUFMVklFV19UQzExTVBfR0lDX0RJU1RfQkFTRQkJMHgxRjAwMTAwMAkvKiBUZXN0IGNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRQkJMHgxRjAwMjAwMAkvKiBMMjIwIHJlZ2lzdGVycyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYmE4LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYmE4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiZWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiYTguaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2JvYXJkLXBiYTguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQk9BUkRfUEJBOF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQk9BUkRfUEJBOF9ICisKKyNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CisKKy8qCisgKiBQZXJpcGhlcmFsIGFkZHJlc3NlcworICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfVUFSVDBfQkFTRQkJMHgxMDAwOTAwMAkvKiBVQVJUIDAgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9VQVJUMV9CQVNFCQkweDEwMDBBMDAwCS8qIFVBUlQgMSAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1VBUlQyX0JBU0UJCTB4MTAwMEIwMDAJLyogVUFSVCAyICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfVUFSVDNfQkFTRQkJMHgxMDAwQzAwMAkvKiBVQVJUIDMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9TU1BfQkFTRQkJCTB4MTAwMEQwMDAJLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9XQVRDSERPRzBfQkFTRQkJMHgxMDAwRjAwMAkvKiBXYXRjaGRvZyAwICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfV0FUQ0hET0dfQkFTRQkJMHgxMDAxMDAwMAkvKiB3YXRjaGRvZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9USU1FUjBfMV9CQVNFCQkweDEwMDExMDAwCS8qIFRpbWVyIDAgYW5kIDEgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9USU1FUjJfM19CQVNFCQkweDEwMDEyMDAwCS8qIFRpbWVyIDIgYW5kIDMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9HUElPMF9CQVNFCQkweDEwMDEzMDAwCS8qIEdQSU8gcG9ydCAwICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfUlRDX0JBU0UJCQkweDEwMDE3MDAwCS8qIFJlYWwgVGltZSBDbG9jayAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1RJTUVSNF81X0JBU0UJCTB4MTAwMTgwMDAJLyogVGltZXIgNC81ICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfVElNRVI2XzdfQkFTRQkJMHgxMDAxOTAwMAkvKiBUaW1lciA2LzcgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9TQ1RMX0JBU0UJCQkweDEwMDFBMDAwCS8qIFN5c3RlbSBDb250cm9sbGVyICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfQ0xDRF9CQVNFCQkJMHgxMDAyMDAwMAkvKiBDTENEICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfT05CX1NSQU1fQkFTRQkJMHgxMDA2MDAwMAkvKiBPbi1ib2FyZCBTUkFNICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfRE1DX0JBU0UJCQkweDEwMEUwMDAwCS8qIERNQyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfU01DX0JBU0UJCQkweDEwMEUxMDAwCS8qIFNNQyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfQ0FOX0JBU0UJCQkweDEwMEUyMDAwCS8qIENBTiBidXMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DRl9CQVNFCQkJMHgxODAwMDAwMAkvKiBDb21wYWN0IGZsYXNoICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UJCTB4MTgwMDMwMDAJLyogU01DIGZvciBDb21wYWN0IGZsYXNoICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfR0lDX0NQVV9CQVNFCQkweDFFMDAwMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X0ZMQVNIMF9CQVNFCQkweDQwMDAwMDAwCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfRkxBU0gwX1NJWkUJCVNaXzY0TQorI2RlZmluZSBSRUFMVklFV19QQkE4X0ZMQVNIMV9CQVNFCQkweDQ0MDAwMDAwCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfRkxBU0gxX1NJWkUJCVNaXzY0TQorI2RlZmluZSBSRUFMVklFV19QQkE4X0VUSF9CQVNFCQkJMHg0RTAwMDAwMAkvKiBFdGhlcm5ldCAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1VTQl9CQVNFCQkJMHg0RjAwMDAwMAkvKiBVU0IgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9HSUNfRElTVF9CQVNFCQkweDFFMDAxMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9MVF9CQVNFCQkJMHhDMDAwMDAwMAkvKiBMb2dpYyBUaWxlIGV4cGFuc2lvbiAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1NEUkFNNl9CQVNFCQkweDcwMDAwMDAwCS8qIFNEUkFNIGJhbmsgNiAyNTZNQiAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1NEUkFNN19CQVNFCQkweDgwMDAwMDAwCS8qIFNEUkFNIGJhbmsgNyAyNTZNQiAqLworCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfU1lTX1BMRF9DVFJMMQkJMHg3NAorCisvKgorICogUEJBOCBQQ0kgcmVnaW9ucworICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfUENJX0JBU0UJCQkweDkwMDQwMDAwCS8qIFBDSS1YIFVuaXQgYmFzZSAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1BDSV9JT19CQVNFCQkweDkwMDUwMDAwCS8qIElPIFJlZ2lvbiBvbiBBSEIgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEJBOF9QQ0lfTUVNX0JBU0UJCTB4QTAwMDAwMDAJLyogTUVNIFJlZ2lvbiBvbiBBSEIgKi8KKworI2RlZmluZSBSRUFMVklFV19QQkE4X1BDSV9CQVNFX1NJWkUJCTB4MTAwMDAJCS8qIDE2IEtiICovCisjZGVmaW5lIFJFQUxWSUVXX1BCQThfUENJX0lPX1NJWkUJCTB4MTAwMAkJLyogNCBLYiAqLworI2RlZmluZSBSRUFMVklFV19QQkE4X1BDSV9NRU1fU0laRQkJMHgyMDAwMDAwMAkvKiA1MTIgTUIgKi8KKworLyoKKyAqIElycXMKKyAqLworI2RlZmluZSBJUlFfUEJBOF9HSUNfU1RBUlQJCQkzMgorCisvKiBMMjIwCisjZGVmaW5lIElSUV9QQkE4X0wyMjBfRVZFTlQJKElSUV9QQkE4X0dJQ19TVEFSVCArIDI5KQorI2RlZmluZSBJUlFfUEJBOF9MMjIwX1NMQVZFCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAzMCkKKyNkZWZpbmUgSVJRX1BCQThfTDIyMF9ERUNPREUJKElSUV9QQkE4X0dJQ19TVEFSVCArIDMxKQorKi8KKworLyoKKyAqIFBCLUE4IG9uLWJvYXJkIGdpYyBpcnEgc291cmNlcworICovCisjZGVmaW5lIElSUV9QQkE4X1dBVENIRE9HCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAwKQkvKiBXYXRjaGRvZyB0aW1lciAqLworI2RlZmluZSBJUlFfUEJBOF9TT0ZUCQkoSVJRX1BCQThfR0lDX1NUQVJUICsgMSkJLyogU29mdHdhcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9QQkE4X0NPTU1SeAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDIpCS8qIERlYnVnIENvbW0gUnggaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9QQkE4X0NPTU1UeAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDMpCS8qIERlYnVnIENvbW0gVHggaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9QQkE4X1RJTUVSMF8xCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA0KQkvKiBUaW1lciAwLzEgKGRlZmF1bHQgdGltZXIpICovCisjZGVmaW5lIElSUV9QQkE4X1RJTUVSMl8zCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA1KQkvKiBUaW1lciAyLzMgKi8KKyNkZWZpbmUgSVJRX1BCQThfR1BJTzAJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA2KQkvKiBHUElPIDAgKi8KKyNkZWZpbmUgSVJRX1BCQThfR1BJTzEJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA3KQkvKiBHUElPIDEgKi8KKyNkZWZpbmUgSVJRX1BCQThfR1BJTzIJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA4KQkvKiBHUElPIDIgKi8KKwkJCQkJCQkJLyogOSByZXNlcnZlZCAqLworI2RlZmluZSBJUlFfUEJBOF9SVEMJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAxMCkJLyogUmVhbCBUaW1lIENsb2NrICovCisjZGVmaW5lIElSUV9QQkE4X1NTUAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDExKQkvKiBTeW5jaHJvbm91cyBTZXJpYWwgUG9ydCAqLworI2RlZmluZSBJUlFfUEJBOF9VQVJUMAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDEyKQkvKiBVQVJUIDAgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEJBOF9VQVJUMQkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDEzKQkvKiBVQVJUIDEgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEJBOF9VQVJUMgkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDE0KQkvKiBVQVJUIDIgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEJBOF9VQVJUMwkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDE1KQkvKiBVQVJUIDMgb24gZGV2ZWxvcG1lbnQgY2hpcCAqLworI2RlZmluZSBJUlFfUEJBOF9TQ0kJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAxNikJLyogU21hcnQgQ2FyZCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX1BCQThfTU1DSTBBCQkoSVJRX1BCQThfR0lDX1NUQVJUICsgMTcpCS8qIE11bHRpbWVkaWEgQ2FyZCAwQSAqLworI2RlZmluZSBJUlFfUEJBOF9NTUNJMEIJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAxOCkJLyogTXVsdGltZWRpYSBDYXJkIDBCICovCisjZGVmaW5lIElSUV9QQkE4X0FBQ0kJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAxOSkJLyogQXVkaW8gQ29kZWMgKi8KKyNkZWZpbmUgSVJRX1BCQThfS01JMAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDIwKQkvKiBLZXlib2FyZC9Nb3VzZSBwb3J0IDAgKi8KKyNkZWZpbmUgSVJRX1BCQThfS01JMQkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDIxKQkvKiBLZXlib2FyZC9Nb3VzZSBwb3J0IDEgKi8KKyNkZWZpbmUgSVJRX1BCQThfQ0hBUkxDRAkoSVJRX1BCQThfR0lDX1NUQVJUICsgMjIpCS8qIENoYXJhY3RlciBMQ0QgKi8KKyNkZWZpbmUgSVJRX1BCQThfQ0xDRAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDIzKQkvKiBDTENEIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1BCQThfRE1BQwkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDI0KQkvKiBETUEgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEJBOF9QV1JGQUlMCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAyNSkJLyogUG93ZXIgZmFpbHVyZSAqLworI2RlZmluZSBJUlFfUEJBOF9QSVNNTwkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDI2KQkvKiBQSVNNTyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX1BCQThfRG9DCQkoSVJRX1BCQThfR0lDX1NUQVJUICsgMjcpCS8qIERpc2sgb24gQ2hpcCBtZW1vcnkgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEJBOF9FVEgJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAyOCkJLyogRXRoZXJuZXQgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUEJBOF9VU0IJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAyOSkJLyogVVNCIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1BCQThfVFNQRU4JCShJUlFfUEJBOF9HSUNfU1RBUlQgKyAzMCkJLyogVG91Y2hzY3JlZW4gcGVuICovCisjZGVmaW5lIElSUV9QQkE4X1RTS1BBRAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDMxKQkvKiBUb3VjaHNjcmVlbiBrZXlwYWQgKi8KKworLyogLi4uICovCisjZGVmaW5lIElSUV9QQkE4X1BDSTAJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA1MCkKKyNkZWZpbmUgSVJRX1BCQThfUENJMQkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDUxKQorI2RlZmluZSBJUlFfUEJBOF9QQ0kyCQkoSVJRX1BCQThfR0lDX1NUQVJUICsgNTIpCisjZGVmaW5lIElSUV9QQkE4X1BDSTMJCShJUlFfUEJBOF9HSUNfU1RBUlQgKyA1MykKKworI2RlZmluZSBJUlFfUEJBOF9TTUMJCS0xCisjZGVmaW5lIElSUV9QQkE4X1NDVEwJCS0xCisKKyNkZWZpbmUgTlJfR0lDX1BCQTgJCTEKKworLyoKKyAqIE9ubHkgZGVmaW5lIE5SX0lSUVMgaWYgbGVzcyB0aGFuIE5SX0lSUVNfUEJBOAorICovCisjZGVmaW5lIE5SX0lSUVNfUEJBOAkJKElSUV9QQkE4X0dJQ19TVEFSVCArIDY0KQorCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19QQkE4KQorCisjaWYgIWRlZmluZWQoTlJfSVJRUykgfHwgKE5SX0lSUVMgPCBOUl9JUlFTX1BCQTgpCisjdW5kZWYgTlJfSVJRUworI2RlZmluZSBOUl9JUlFTCQkJTlJfSVJRU19QQkE4CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1BWF9HSUNfTlIpIHx8IChNQVhfR0lDX05SIDwgTlJfR0lDX1BCQTgpCisjdW5kZWYgTUFYX0dJQ19OUgorI2RlZmluZSBNQVhfR0lDX05SCQlOUl9HSUNfUEJBOAorI2VuZGlmCisKKyNlbmRpZgkvKiBDT05GSUdfTUFDSF9SRUFMVklFV19QQkE4ICovCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCQThfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIzN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA3MTk2YmNhLi45MmRiY2I5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsMTUgKzgsMzYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotKi8KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19FQikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX01BQ0hfUkVBTFZJRVdfUEIxMU1QKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19QQkE4KQorI2lmbmRlZiBERUJVR19MTF9VQVJUX09GRlNFVAorI2RlZmluZSBERUJVR19MTF9VQVJUX09GRlNFVAkweDAwMDA5MDAwCisjZWxpZiBERUJVR19MTF9VQVJUX09GRlNFVCAhPSAweDAwMDA5MDAwCisjd2FybmluZyAiREVCVUdfTExfVUFSVF9PRkZTRVQgYWxyZWFkeSBkZWZpbmVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1JFQUxWSUVXX1BCMTE3NgorI2lmbmRlZiBERUJVR19MTF9VQVJUX09GRlNFVAorI2RlZmluZSBERUJVR19MTF9VQVJUX09GRlNFVAkweDAwMTBjMDAwCisjZWxpZiBERUJVR19MTF9VQVJUX09GRlNFVCAhPSAweDAwMTBjMDAwCisjd2FybmluZyAiREVCVUdfTExfVUFSVF9PRkZTRVQgYWxyZWFkeSBkZWZpbmVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBERUJVR19MTF9VQVJUX09GRlNFVAorI2Vycm9yICJVbmtub3duIFJlYWxWaWV3IHBsYXRmb3JtIgorI2VuZGlmCiAKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAgICAgICMweDEwMDAwMDAwCi0JCW1vdm5lCVxyeCwgICAgICAjMHhmMDAwMDAwMAlAIHZpcnR1YWwgYmFzZQotCQlvcnIJXHJ4LCBccngsICMweDAwMDA5MDAwCisJCW1vdm5lCVxyeCwgICAgICAjMHhmYjAwMDAwMAlAIHZpcnR1YWwgYmFzZQorCQlvcnIJXHJ4LCBccngsICNERUJVR19MTF9VQVJUX09GRlNFVAogCQkuZW5kbQogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLXBsMDF4LlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE1YTFhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kbWEuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQVJNIExpbWl0ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA3OWE5M2IzLi5iNDJjMTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTI1LDcgKzI1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIC8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkJCSgoKHgpICYgMHgwZmZmZmZmZikgKyAweGYwMDAwMDAwKQorLyoKKyAqIFN0YXRpY2FsbHkgbWFwcGVkIGFkZHJlc3NlczoKKyAqCisgKiAxMHh4IHh4eHggLT4gZmJ4eCB4eHh4CisgKiAxZXh4IHh4eHggLT4gZmR4eCB4eHh4CisgKiAxZnh4IHh4eHggLT4gZmV4eCB4eHh4CisgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KQkJKCgoeCkgJiAweDAzZmZmZmZmKSArIDB4ZmIwMDAwMDApCiAjZGVmaW5lIF9faW9fYWRkcmVzcyhuKQkJX19pbyhJT19BRERSRVNTKG4pKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGFhMDY5NDIuLmYwNWJjZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaW8uaApAQCAtMjIsMTIgKzIyLDcgQEAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Ci19Ci0KLSNkZWZpbmUgX19pbyhhKQkJCV9faW8oYSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDAyYTkxODUuLmZlNWNiOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLWViLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYjExbXAuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTE3Ni5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGJhOC5oPgogCiAjZGVmaW5lIElSUV9MT0NBTFRJTUVSCQkyOQogI2RlZmluZSBJUlFfTE9DQUxXRE9HCQkzMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAwZTY3MzQ4Li4yOTNjMzAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjMsMTYgKzIzLDEwIEBACiAvKgogICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCiAgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHg3MDAwMDAwMCkKKyNlbHNlCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDAwMDAwMDAwKQotCi0vKgotICogVmlydHVhbCB2aWV3IDwtPiBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKiAgICAgICAgICAgICAgYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKiAgICAgICAgICAgICAgdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoeCkgLSBQQUdFX09GRlNFVCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkoKHgpICsgUEFHRV9PRkZTRVQpCisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggNzlmNTBmMi4uNDE1ZDYzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtZWIuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTFtcC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGIxMTc2Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYmE4Lmg+CiAKICNkZWZpbmUgQU1CQV9VQVJUX0RSKGJhc2UpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGJhc2UpICsgMHgwMCkpCiAjZGVmaW5lIEFNQkFfVUFSVF9MQ1JIKGJhc2UpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGJhc2UpICsgMHgyYykpCkBAIC00MCw2ICs0MSw4IEBACiAJCXJldHVybiBSRUFMVklFV19QQjExTVBfVUFSVDBfQkFTRTsKIAllbHNlIGlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X3BiMTE3NigpKQogCQlyZXR1cm4gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0U7CisJZWxzZSBpZiAobWFjaGluZV9pc19yZWFsdmlld19wYmE4KCkpCisJCXJldHVybiBSRUFMVklFV19QQkE4X1VBUlQwX0JBU0U7CiAJZWxzZQogCQlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA0OGNiY2M4Ny4uZmUwZGUxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTgsNCArMTgsNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORAkJKFBBR0VfT0ZGU0VUICsgMHgxODAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJCTB4ZjgwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvbG9jYWx0aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKaW5kZXggNDRkMTc4Yy4uOTAxOWVmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKQEAgLTM4LDE4ICszOCwxNCBAQAogCiAjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUwogCi0jZGVmaW5lIFRXRF9CQVNFKGNwdSkJKHR3ZF9iYXNlX2FkZHIgKyAoY3B1KSAqIHR3ZF9zaXplKQotCiAvKiBzZXQgdXAgYnkgdGhlIHBsYXRmb3JtIGNvZGUgKi8KLXZvaWQgX19pb21lbSAqdHdkX2Jhc2VfYWRkcjsKLXVuc2lnbmVkIGludCB0d2Rfc2l6ZTsKK3ZvaWQgX19pb21lbSAqdHdkX2Jhc2U7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1wY29yZV90aW1lcl9yYXRlOwogCiBzdGF0aWMgdm9pZCBsb2NhbF90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCQkgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJdW5zaWduZWQgbG9uZyBjdHJsOwogCiAJc3dpdGNoKG1vZGUpIHsKQEAgLTY4LDE3ICs2NCwxNiBAQAogCQljdHJsID0gMDsKIAl9CiAKLQlfX3Jhd193cml0ZWwoY3RybCwgYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKKwlfX3Jhd193cml0ZWwoY3RybCwgdHdkX2Jhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyBpbnQgbG9jYWxfdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCiAJCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqdW51c2VkKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JdW5zaWduZWQgbG9uZyBjdHJsID0gX19yYXdfcmVhZGwoYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKKwl1bnNpZ25lZCBsb25nIGN0cmwgPSBfX3Jhd19yZWFkbCh0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIAotCV9fcmF3X3dyaXRlbChldnQsIGJhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7Ci0JX19yYXdfd3JpdGVsKGN0cmwgfCBUV0RfVElNRVJfQ09OVFJPTF9FTkFCTEUsIGJhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CisJX19yYXdfd3JpdGVsKGV2dCwgdHdkX2Jhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7CisJX19yYXdfd3JpdGVsKGN0cmwgfCBUV0RfVElNRVJfQ09OVFJPTF9FTkFCTEUsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MSwxOSArODYsMTYgQEAKICAqLwogaW50IGxvY2FsX3RpbWVyX2Fjayh2b2lkKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlpZiAoX19yYXdfcmVhZGwoYmFzZSArIFRXRF9USU1FUl9JTlRTVEFUKSkgewotCQlfX3Jhd193cml0ZWwoMSwgYmFzZSArIFRXRF9USU1FUl9JTlRTVEFUKTsKKwlpZiAoX19yYXdfcmVhZGwodHdkX2Jhc2UgKyBUV0RfVElNRVJfSU5UU1RBVCkpIHsKKwkJX19yYXdfd3JpdGVsKDEsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0lOVFNUQVQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHR3ZF9jYWxpYnJhdGVfcmF0ZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHZvaWQgX19jcHVpbml0IHR3ZF9jYWxpYnJhdGVfcmF0ZSh2b2lkKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBsb2FkLCBjb3VudDsKIAl1NjQgd2FpdGppZmZpZXM7CiAKQEAgLTEyNCwxNSArMTE2LDE1IEBACiAJCXdhaXRqaWZmaWVzICs9IDU7CiAKIAkJCQkgLyogZW5hYmxlLCBubyBpbnRlcnJ1cHQgb3IgcmVsb2FkICovCi0JCV9fcmF3X3dyaXRlbCgweDEsIGJhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CisJCV9fcmF3X3dyaXRlbCgweDEsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOwogCiAJCQkJIC8qIG1heGltdW0gdmFsdWUgKi8KLQkJX19yYXdfd3JpdGVsKDB4RkZGRkZGRkZVLCBiYXNlICsgVFdEX1RJTUVSX0NPVU5URVIpOworCQlfX3Jhd193cml0ZWwoMHhGRkZGRkZGRlUsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPVU5URVIpOwogCiAJCXdoaWxlIChnZXRfamlmZmllc182NCgpIDwgd2FpdGppZmZpZXMpCiAJCQl1ZGVsYXkoMTApOwogCi0JCWNvdW50ID0gX19yYXdfcmVhZGwoYmFzZSArIFRXRF9USU1FUl9DT1VOVEVSKTsKKwkJY291bnQgPSBfX3Jhd19yZWFkbCh0d2RfYmFzZSArIFRXRF9USU1FUl9DT1VOVEVSKTsKIAogCQltcGNvcmVfdGltZXJfcmF0ZSA9ICgweEZGRkZGRkZGVSAtIGNvdW50KSAqIChIWiAvIDUpOwogCkBAIC0xNDIsMTggKzEzNCwxOSBAQAogCiAJbG9hZCA9IG1wY29yZV90aW1lcl9yYXRlIC8gSFo7CiAKLQlfX3Jhd193cml0ZWwobG9hZCwgYmFzZSArIFRXRF9USU1FUl9MT0FEKTsKKwlfX3Jhd193cml0ZWwobG9hZCwgdHdkX2Jhc2UgKyBUV0RfVElNRVJfTE9BRCk7CiB9CiAKIC8qCiAgKiBTZXR1cCB0aGUgbG9jYWwgY2xvY2sgZXZlbnRzIGZvciBhIENQVS4KICAqLwotdm9pZCBfX2NwdWluaXQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQgX19jcHVpbml0IGxvY2FsX3RpbWVyX3NldHVwKHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGsgPSAmcGVyX2NwdShsb2NhbF9jbG9ja2V2ZW50LCBjcHUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQl0d2RfY2FsaWJyYXRlX3JhdGUoY3B1KTsKKwl0d2RfY2FsaWJyYXRlX3JhdGUoKTsKIAogCWNsay0+bmFtZQkJPSAibG9jYWxfdGltZXIiOwogCWNsay0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwpAQCAtMTc4LDkgKzE3MSw5IEBACiAvKgogICogdGFrZSBhIGxvY2FsIHRpbWVyIGRvd24KICAqLwotdm9pZCBfX2NwdWV4aXQgbG9jYWxfdGltZXJfc3RvcCh1bnNpZ25lZCBpbnQgY3B1KQordm9pZCBfX2NwdWV4aXQgbG9jYWxfdGltZXJfc3RvcCh2b2lkKQogewotCV9fcmF3X3dyaXRlbCgwLCBUV0RfQkFTRShjcHUpICsgVFdEX1RJTUVSX0NPTlRST0wpOworCV9fcmF3X3dyaXRlbCgwLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIH0KIAogI2Vsc2UJLyogQ09ORklHX0xPQ0FMX1RJTUVSUyAqLwpAQCAtMTkwLDggKzE4Myw5IEBACiB7CiB9CiAKLXZvaWQgX19jcHVpbml0IGxvY2FsX3RpbWVyX3NldHVwKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cCh2b2lkKQogeworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrID0gJnBlcl9jcHUobG9jYWxfY2xvY2tldmVudCwgY3B1KTsKIAogCWNsay0+bmFtZQkJPSAiZHVtbXlfdGltZXIiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBlMTAyYWViLi44ZmNlODVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGIxMW1wLmg+CiAjaW5jbHVkZSA8bWFjaC9zY3UuaD4KIAorI2luY2x1ZGUgImNvcmUuaCIKKwogZXh0ZXJuIHZvaWQgcmVhbHZpZXdfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CiAKIC8qCkBAIC0zMSwxNSArMzMsMjAgQEAKICAqLwogdm9sYXRpbGUgaW50IF9fY3B1aW5pdGRhdGEgcGVuX3JlbGVhc2UgPSAtMTsKIAorc3RhdGljIHZvaWQgX19pb21lbSAqc2N1X2Jhc2VfYWRkcih2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X2ViX21wKCkpCisJCXJldHVybiBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX1NDVV9CQVNFKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X3BiMTFtcCgpKQorCQlyZXR1cm4gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9TQ1VfQkFTRSk7CisJZWxzZQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKTA7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGdldF9jb3JlX2NvdW50KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IG5jb3JlczsKLQl2b2lkIF9faW9tZW0gKnNjdV9iYXNlID0gMDsKLQotCWlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X2ViKCkgJiYgY29yZV90aWxlX2ViMTFtcCgpKQotCQlzY3VfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfU0NVX0JBU0UpOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfcmVhbHZpZXdfcGIxMW1wKCkpCi0JCXNjdV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9TQ1VfQkFTRSk7CisJdm9pZCBfX2lvbWVtICpzY3VfYmFzZSA9IHNjdV9iYXNlX2FkZHIoKTsKIAogCWlmIChzY3VfYmFzZSkgewogCQluY29yZXMgPSBfX3Jhd19yZWFkbChzY3VfYmFzZSArIFNDVV9DT05GSUcpOwpAQCAtNTYsMTQgKzYzLDcgQEAKIHN0YXRpYyB2b2lkIHNjdV9lbmFibGUodm9pZCkKIHsKIAl1MzIgc2N1X2N0cmw7Ci0Jdm9pZCBfX2lvbWVtICpzY3VfYmFzZTsKLQotCWlmIChtYWNoaW5lX2lzX3JlYWx2aWV3X2ViKCkgJiYgY29yZV90aWxlX2ViMTFtcCgpKQotCQlzY3VfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfU0NVX0JBU0UpOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfcmVhbHZpZXdfcGIxMW1wKCkpCi0JCXNjdV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9TQ1VfQkFTRSk7Ci0JZWxzZQotCQlCVUcoKTsKKwl2b2lkIF9faW9tZW0gKnNjdV9iYXNlID0gc2N1X2Jhc2VfYWRkcigpOwogCiAJc2N1X2N0cmwgPSBfX3Jhd19yZWFkbChzY3VfYmFzZSArIFNDVV9DVFJMKTsKIAlzY3VfY3RybCB8PSAxOwpAQCAtODgsMTAgKzg4LDcgQEAKIAkgKiBjb3JlIChlLmcuIHRpbWVyIGlycSksIHRoZW4gdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gZW5hYmxlZAogCSAqIGZvciB1czogZG8gc28KIAkgKi8KLQlpZiAobWFjaGluZV9pc19yZWFsdmlld19lYigpICYmIGNvcmVfdGlsZV9lYjExbXAoKSkKLQkJZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfR0lDX0NQVV9CQVNFKSk7Ci0JZWxzZSBpZiAobWFjaGluZV9pc19yZWFsdmlld19wYjExbXAoKSkKLQkJZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19UQzExTVBfR0lDX0NQVV9CQVNFKSk7CisJZ2ljX2NwdV9pbml0KDAsIGdpY19jcHVfYmFzZV9hZGRyKTsKIAogCS8qCiAJICogbGV0IHRoZSBwcmltYXJ5IHByb2Nlc3NvciBrbm93IHdlJ3JlIG91dCBvZiB0aGUKQEAgLTIzMiw5ICsyMjksNyBAQAogCSAqIGR1bW15ICghQ09ORklHX0xPQ0FMX1RJTUVSUyksIGl0IHdhcyBhbHJlYWR5IHJlZ2lzdGVycyBpbgogCSAqIHJlYWx2aWV3X3RpbWVyX2luaXQKIAkgKi8KLQlpZiAoKG1hY2hpbmVfaXNfcmVhbHZpZXdfZWIoKSAmJiBjb3JlX3RpbGVfZWIxMW1wKCkpIHx8Ci0JICAgIG1hY2hpbmVfaXNfcmVhbHZpZXdfcGIxMW1wKCkpCi0JCWxvY2FsX3RpbWVyX3NldHVwKGNwdSk7CisJbG9jYWxfdGltZXJfc2V0dXAoKTsKICNlbmRpZgogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBlYjgyOWViLi5iZWQzOWVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19lYl9tYXBfaW8odm9pZCkKIHsKIAlpb3RhYmxlX2luaXQocmVhbHZpZXdfZWJfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19lYl9pb19kZXNjKSk7Ci0JaWYgKGNvcmVfdGlsZV9lYjExbXAoKSkKKwlpZiAoY29yZV90aWxlX2ViMTFtcCgpIHx8IGNvcmVfdGlsZV9hOW1wKCkpCiAJCWlvdGFibGVfaW5pdChyZWFsdmlld19lYjExbXBfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19lYjExbXBfaW9fZGVzYykpOwogfQogCkBAIC0yNDIsMTIgKzI0Miw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ViX2V0aF9kZXZpY2UgPSB7Ci0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXMsCi19OwotCiAvKgogICogRGV0ZWN0IGFuZCByZWdpc3RlciB0aGUgY29ycmVjdCBFdGhlcm5ldCBkZXZpY2UuIFJlYWxWaWV3L0VCIHJldiBECiAgKiBwbGF0Zm9ybXMgdXNlIHRoZSBuZXdlciBTTVNDIExBTjkxMTggRXRoZXJuZXQgY2hpcApAQCAtMjU1LDI2ICsyNDksMjQgQEAKIHN0YXRpYyBpbnQgZXRoX2RldmljZV9yZWdpc3Rlcih2b2lkKQogewogCXZvaWQgX19pb21lbSAqZXRoX2FkZHIgPSBpb3JlbWFwKFJFQUxWSUVXX0VCX0VUSF9CQVNFLCBTWl80Syk7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CiAJdTMyIGlkcmV2OwogCiAJaWYgKCFldGhfYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZHJldiA9IHJlYWRsKGV0aF9hZGRyICsgMHg1MCk7Ci0JaWYgKChpZHJldiAmIDB4RkZGRjAwMDApID09IDB4MDExODAwMDApCi0JCS8qIFNNU0MgTEFOOTExOCBjaGlwIHByZXNlbnQgKi8KLQkJcmVhbHZpZXdfZWJfZXRoX2RldmljZS5uYW1lID0gInNtYzkxMXgiOwotCWVsc2UKLQkJLyogU01TQyA5MUMxMTEgY2hpcCBwcmVzZW50ICovCi0JCXJlYWx2aWV3X2ViX2V0aF9kZXZpY2UubmFtZSA9ICJzbWM5MXgiOworCWlmICgoaWRyZXYgJiAweEZGRkYwMDAwKSAhPSAweDAxMTgwMDAwKQorCQkvKiBTTVNDIExBTjkxMTggbm90IHByZXNlbnQsIHVzZSBMQU45MUMxMTEgaW5zdGVhZCAqLworCQluYW1lID0gInNtYzkxeCI7CiAKIAlpb3VubWFwKGV0aF9hZGRyKTsKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9ldGhfZGV2aWNlKTsKKwlyZXR1cm4gcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKG5hbWUsIHJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7Ci0JaWYgKGNvcmVfdGlsZV9lYjExbXAoKSkgeworCWlmIChjb3JlX3RpbGVfZWIxMW1wKCkgfHwgY29yZV90aWxlX2E5bXAoKSkgewogCQl1bnNpZ25lZCBpbnQgcGxkY3RybDsKIAogCQkvKiBuZXcgaXJxIG1vZGUgKi8KQEAgLTM0MiwxMCArMzM0LDkgQEAKIAl0aW1lcjJfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9USU1FUjJfM19CQVNFKTsKIAl0aW1lcjNfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9USU1FUjJfM19CQVNFKSArIDB4MjA7CiAKLQlpZiAoY29yZV90aWxlX2ViMTFtcCgpKSB7CisJaWYgKGNvcmVfdGlsZV9lYjExbXAoKSB8fCBjb3JlX3RpbGVfYTltcCgpKSB7CiAjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUwotCQl0d2RfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCMTFNUF9UV0RfQkFTRSk7Ci0JCXR3ZF9zaXplID0gUkVBTFZJRVdfRUIxMU1QX1RXRF9TSVpFOworCQl0d2RfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfVFdEX0JBU0UpOwogI2VuZGlmCiAJCXRpbWVyX2lycSA9IElSUV9FQjExTVBfVElNRVIwXzE7CiAJfSBlbHNlCkBAIC0zNjIsNyArMzUzLDcgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChjb3JlX3RpbGVfZWIxMW1wKCkpIHsKKwlpZiAoY29yZV90aWxlX2ViMTFtcCgpIHx8IGNvcmVfdGlsZV9hOW1wKCkpIHsKIAkJcmVhbHZpZXdfZWIxMW1wX2ZpeHVwKCk7CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMApAQCAtMzcyLDggKzM2Myw2IEBACiAjZW5kaWYKIAl9CiAKLQljbGtfcmVnaXN0ZXIoJnJlYWx2aWV3X2NsY2RfY2xrKTsKLQogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9mbGFzaF9yZXNvdXJjZSwgMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlldGhfZGV2aWNlX3JlZ2lzdGVyKCk7CkBAIC0zOTIsNyArMzgxLDcgQEAKIAkvKiBNYWludGFpbmVyOiBBUk0gTHRkL0RlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkICovCiAJLnBoeXNfaW8JPSBSRUFMVklFV19FQl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X2ViX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19lYl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IGNjY2RiM2UuLjhmMDY4M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMjIyLDEzICsyMjIsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19wYjExNzZfc21zYzkxMXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MTF4IiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMTc2X3Ntc2M5MTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfcGIxMTc2X3Ntc2M5MTF4X3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAkvKiBBUk0xMTc2IERldkNoaXAgR0lDLCBwcmltYXJ5ICovCkBAIC0yNjUsMTAgKzI1OCw4IEBACiAJbDJ4MF9pbml0KF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExNzZfTDIyMF9CQVNFKSwgMHgwMDczMDAwMCwgMHhmZTAwMGZmZik7CiAjZW5kaWYKIAotCWNsa19yZWdpc3RlcigmcmVhbHZpZXdfY2xjZF9jbGspOwotCiAJcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoJnJlYWx2aWV3X3BiMTE3Nl9mbGFzaF9yZXNvdXJjZSwgMSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExNzZfc21zYzkxMXhfZGV2aWNlKTsKKwlyZWFsdmlld19ldGhfcmVnaXN0ZXIoTlVMTCwgcmVhbHZpZXdfcGIxMTc2X3Ntc2M5MTF4X3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpAQCAtMjg0LDcgKzI3NSw3IEBACiAJLyogTWFpbnRhaW5lcjogQVJNIEx0ZC9EZWVwIEJsdWUgU29sdXRpb25zIEx0ZCAqLwogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiMTE3Nl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGIxMTc2X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggOGI4NjMxNC4uM2ViZGIyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yMzAsMTMgKzIzMCw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSByZWFsdmlld19wYjExbXBfc21zYzkxMXhfcmVzb3VyY2VzLAotfTsKLQogc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfQkFTRSwKQEAgLTI5Miw4ICsyODUsNyBAQAogCXRpbWVyM192YV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTFNUF9USU1FUjJfM19CQVNFKSArIDB4MjA7CiAKICNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCi0JdHdkX2Jhc2VfYWRkciA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19UQzExTVBfVFdEX0JBU0UpOwotCXR3ZF9zaXplID0gUkVBTFZJRVdfVEMxMU1QX1RXRF9TSVpFOworCXR3ZF9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9UV0RfQkFTRSk7CiAjZW5kaWYKIAlyZWFsdmlld190aW1lcl9pbml0KElSUV9UQzExTVBfVElNRVIwXzEpOwogfQpAQCAtMzEyLDExICszMDQsOSBAQAogCWwyeDBfaW5pdChfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRSksIDB4MDA3OTAwMDAsIDB4ZmUwMDBmZmYpOwogI2VuZGlmCiAKLQljbGtfcmVnaXN0ZXIoJnJlYWx2aWV3X2NsY2RfY2xrKTsKLQogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKHJlYWx2aWV3X3BiMTFtcF9mbGFzaF9yZXNvdXJjZSwKIAkJCQlBUlJBWV9TSVpFKHJlYWx2aWV3X3BiMTFtcF9mbGFzaF9yZXNvdXJjZSkpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfcGIxMW1wX3Ntc2M5MTF4X2RldmljZSk7CisJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9yZXNvdXJjZXMpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExbXBfY2ZfZGV2aWNlKTsKIApAQCAtMzM0LDcgKzMyNCw3IEBACiAJLyogTWFpbnRhaW5lcjogQVJNIEx0ZC9EZWVwIEJsdWUgU29sdXRpb25zIEx0ZCAqLwogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiMTFtcF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGIxMW1wX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM5NDQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3QzMDcuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYmE4Lmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyByZWFsdmlld19wYmE4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1NZU19CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1NZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1BCQThfR0lDX0NQVV9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1BCQThfR0lDX0NQVV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1BCQThfR0lDX0RJU1RfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19QQkE4X0dJQ19ESVNUX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfU0NUTF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1NDVExfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19QQkE4X1RJTUVSMF8xX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEJBOF9USU1FUjBfMV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1BCQThfVElNRVIyXzNfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19QQkE4X1RJTUVSMl8zX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKKyNpZmRlZiBDT05GSUdfUENJCisJeworCQkudmlydHVhbAk9IFBDSVhfVU5JVF9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfUEJBOF9QQ0lfQkFTRSksCisJCS5sZW5ndGgJCT0gUkVBTFZJRVdfUEJBOF9QQ0lfQkFTRV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMCisJeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoUkVBTFZJRVdfUEJBOF9VQVJUMF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX1BCQThfVUFSVDBfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJhOF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQocmVhbHZpZXdfcGJhOF9pb19kZXNjLCBBUlJBWV9TSVpFKHJlYWx2aWV3X3BiYThfaW9fZGVzYykpOworfQorCisvKgorICogUmVhbFZpZXcgUEJBOENvcmUgQU1CQSBkZXZpY2VzCisgKi8KKworI2RlZmluZSBHUElPMl9JUlEJCXsgSVJRX1BCQThfR1BJTzIsIE5PX0lSUSB9CisjZGVmaW5lIEdQSU8yX0RNQQkJeyAwLCAwIH0KKyNkZWZpbmUgR1BJTzNfSVJRCQl7IElSUV9QQkE4X0dQSU8zLCBOT19JUlEgfQorI2RlZmluZSBHUElPM19ETUEJCXsgMCwgMCB9CisjZGVmaW5lIEFBQ0lfSVJRCQl7IElSUV9QQkE4X0FBQ0ksIE5PX0lSUSB9CisjZGVmaW5lIEFBQ0lfRE1BCQl7IDB4ODAsIDB4ODEgfQorI2RlZmluZSBNTUNJMF9JUlEJCXsgSVJRX1BCQThfTU1DSTBBLCBJUlFfUEJBOF9NTUNJMEIgfQorI2RlZmluZSBNTUNJMF9ETUEJCXsgMHg4NCwgMCB9CisjZGVmaW5lIEtNSTBfSVJRCQl7IElSUV9QQkE4X0tNSTAsIE5PX0lSUSB9CisjZGVmaW5lIEtNSTBfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBLTUkxX0lSUQkJeyBJUlFfUEJBOF9LTUkxLCBOT19JUlEgfQorI2RlZmluZSBLTUkxX0RNQQkJeyAwLCAwIH0KKyNkZWZpbmUgUEJBOF9TTUNfSVJRCQl7IE5PX0lSUSwgTk9fSVJRIH0KKyNkZWZpbmUgUEJBOF9TTUNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBNUE1DX0lSUQkJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIE1QTUNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBQQkE4X0NMQ0RfSVJRCQl7IElSUV9QQkE4X0NMQ0QsIE5PX0lSUSB9CisjZGVmaW5lIFBCQThfQ0xDRF9ETUEJCXsgMCwgMCB9CisjZGVmaW5lIERNQUNfSVJRCQl7IElSUV9QQkE4X0RNQUMsIE5PX0lSUSB9CisjZGVmaW5lIERNQUNfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBTQ1RMX0lSUQkJeyBOT19JUlEsIE5PX0lSUSB9CisjZGVmaW5lIFNDVExfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBQQkE4X1dBVENIRE9HX0lSUQl7IElSUV9QQkE4X1dBVENIRE9HLCBOT19JUlEgfQorI2RlZmluZSBQQkE4X1dBVENIRE9HX0RNQQl7IDAsIDAgfQorI2RlZmluZSBQQkE4X0dQSU8wX0lSUQkJeyBJUlFfUEJBOF9HUElPMCwgTk9fSVJRIH0KKyNkZWZpbmUgUEJBOF9HUElPMF9ETUEJCXsgMCwgMCB9CisjZGVmaW5lIEdQSU8xX0lSUQkJeyBJUlFfUEJBOF9HUElPMSwgTk9fSVJRIH0KKyNkZWZpbmUgR1BJTzFfRE1BCQl7IDAsIDAgfQorI2RlZmluZSBQQkE4X1JUQ19JUlEJCXsgSVJRX1BCQThfUlRDLCBOT19JUlEgfQorI2RlZmluZSBQQkE4X1JUQ19ETUEJCXsgMCwgMCB9CisjZGVmaW5lIFNDSV9JUlEJCQl7IElSUV9QQkE4X1NDSSwgTk9fSVJRIH0KKyNkZWZpbmUgU0NJX0RNQQkJCXsgNywgNiB9CisjZGVmaW5lIFBCQThfVUFSVDBfSVJRCQl7IElSUV9QQkE4X1VBUlQwLCBOT19JUlEgfQorI2RlZmluZSBQQkE4X1VBUlQwX0RNQQkJeyAxNSwgMTQgfQorI2RlZmluZSBQQkE4X1VBUlQxX0lSUQkJeyBJUlFfUEJBOF9VQVJUMSwgTk9fSVJRIH0KKyNkZWZpbmUgUEJBOF9VQVJUMV9ETUEJCXsgMTMsIDEyIH0KKyNkZWZpbmUgUEJBOF9VQVJUMl9JUlEJCXsgSVJRX1BCQThfVUFSVDIsIE5PX0lSUSB9CisjZGVmaW5lIFBCQThfVUFSVDJfRE1BCQl7IDExLCAxMCB9CisjZGVmaW5lIFBCQThfVUFSVDNfSVJRCQl7IElSUV9QQkE4X1VBUlQzLCBOT19JUlEgfQorI2RlZmluZSBQQkE4X1VBUlQzX0RNQQkJeyAweDg2LCAweDg3IH0KKyNkZWZpbmUgUEJBOF9TU1BfSVJRCQl7IElSUV9QQkE4X1NTUCwgTk9fSVJRIH0KKyNkZWZpbmUgUEJBOF9TU1BfRE1BCQl7IDksIDggfQorCisvKiBGUEdBIFByaW1lY2VsbHMgKi8KK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEJBOF9VQVJUMywJTlVMTCk7CisKKy8qIERldkNoaXAgUHJpbWVjZWxscyAqLworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEJBOF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQkE4X1dBVENIRE9HLCBOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJBOF9HUElPMCwJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJTlVMTCk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQkE4X1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCQThfVUFSVDAsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQkE4X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEJBOF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEJBOF9TU1AsCU5VTEwpOworCisvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0geworCSZkbWFjX2RldmljZSwKKwkmdWFydDBfZGV2aWNlLAorCSZ1YXJ0MV9kZXZpY2UsCisJJnVhcnQyX2RldmljZSwKKwkmdWFydDNfZGV2aWNlLAorCSZzbWNfZGV2aWNlLAorCSZjbGNkX2RldmljZSwKKwkmc2N0bF9kZXZpY2UsCisJJndkb2dfZGV2aWNlLAorCSZncGlvMF9kZXZpY2UsCisJJmdwaW8xX2RldmljZSwKKwkmZ3BpbzJfZGV2aWNlLAorCSZydGNfZGV2aWNlLAorCSZzY2kwX2RldmljZSwKKwkmc3NwMF9kZXZpY2UsCisJJmFhY2lfZGV2aWNlLAorCSZtbWMwX2RldmljZSwKKwkma21pMF9kZXZpY2UsCisJJmttaTFfZGV2aWNlLAorfTsKKworLyoKKyAqIFJlYWxWaWV3IFBCLUE4IHBsYXRmb3JtIGRldmljZXMKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYmE4X2ZsYXNoX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEJBOF9GTEFTSDBfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19QQkE4X0ZMQVNIMF9CQVNFICsgUkVBTFZJRVdfUEJBOF9GTEFTSDBfU0laRSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfRkxBU0gxX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9GTEFTSDFfQkFTRSArIFJFQUxWSUVXX1BCQThfRkxBU0gxX1NJWkUgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfcGJhOF9zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQkE4X0VUSF9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX1BCQThfRVRIX0JBU0UgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBJUlFfUEJBOF9FVEgsCisJCS5lbmQJCT0gSVJRX1BCQThfRVRILAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYmE4X2NmX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfQ0ZfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19QQkE4X0NGX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9DRl9NRU1fQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJCT0gLTEsCQkvKiBGSVhNRTogRmluZCBjb3JyZWN0IGlycSAqLworCQkuZW5kCQk9IC0xLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfcGJhOF9jZl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImNvbXBhY3RmbGFzaCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlYWx2aWV3X3BiYThfY2ZfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSByZWFsdmlld19wYmE4X2NmX3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBBUk0gUEItQTggb24tYm9hcmQgR0lDICovCisJZ2ljX2NwdV9iYXNlX2FkZHIgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJBOF9HSUNfQ1BVX0JBU0UpOworCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCQThfR0lDX0RJU1RfQkFTRSksIElSUV9QQkE4X0dJQ19TVEFSVCk7CisJZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQkE4X0dJQ19DUFVfQkFTRSkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJhOF90aW1lcl9pbml0KHZvaWQpCit7CisJdGltZXIwX3ZhX2Jhc2UgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJBOF9USU1FUjBfMV9CQVNFKTsKKwl0aW1lcjFfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQkE4X1RJTUVSMF8xX0JBU0UpICsgMHgyMDsKKwl0aW1lcjJfdmFfYmFzZSA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQkE4X1RJTUVSMl8zX0JBU0UpOworCXRpbWVyM192YV9iYXNlID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCQThfVElNRVIyXzNfQkFTRSkgKyAweDIwOworCisJcmVhbHZpZXdfdGltZXJfaW5pdChJUlFfUEJBOF9USU1FUjBfMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHJlYWx2aWV3X3BiYThfdGltZXIgPSB7CisJLmluaXQJCT0gcmVhbHZpZXdfcGJhOF90aW1lcl9pbml0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiYThfaW5pdCh2b2lkKQoreworCWludCBpOworCisJcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIocmVhbHZpZXdfcGJhOF9mbGFzaF9yZXNvdXJjZSwKKwkJCQlBUlJBWV9TSVpFKHJlYWx2aWV3X3BiYThfZmxhc2hfcmVzb3VyY2UpKTsKKwlyZWFsdmlld19ldGhfcmVnaXN0ZXIoTlVMTCwgcmVhbHZpZXdfcGJhOF9zbXNjOTExeF9yZXNvdXJjZXMpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYmE4X2NmX2RldmljZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKKwkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOworCQlhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmaW9tZW1fcmVzb3VyY2UpOworCX0KKworI2lmZGVmIENPTkZJR19MRURTCisJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CisjZW5kaWYKK30KKworTUFDSElORV9TVEFSVChSRUFMVklFV19QQkE4LCAiQVJNLVJlYWxWaWV3IFBCLUE4IikKKwkvKiBNYWludGFpbmVyOiBBUk0gTHRkL0RlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkICovCisJLnBoeXNfaW8JPSBSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJBOF9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJhOF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAorCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJhOF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcmVhbHZpZXdfcGJhOF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggOWYwNTUzYi4uMjBkYTdmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE4LDQ5ICsxOCw2IEBACiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAogLyoKLSAqIEdDQyBpcyB0b3RhbGx5IGNyYXAgYXQgbG9hZGluZy9zdG9yaW5nIGRhdGEuICBXZSB0cnkgdG8gcGVyc3VhZGUgaXQKLSAqIHRvIGRvIHRoZSByaWdodCB0aGluZyBieSB1c2luZyB0aGVzZSB3aGVyZWV2ZXIgcG9zc2libGUgaW5zdGVhZCBvZgotICogdGhlIGFib3ZlLgotICovCi0jZGVmaW5lIF9fYXJjaF9iYXNlX2dldGIoYixvKQkJCVwKLSAoewkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgX192LCBfX3IgPSAoYik7CQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAotCQkibGRyYgklMCwgWyUxLCAlMl0iCQlcCi0JCTogIj1yIiAoX192KQkJCVwKLQkJOiAiciIgKF9fciksICJJciIgKG8pKTsJCVwKLQlfX3Y7CQkJCQlcCi0gfSkKLQotI2RlZmluZSBfX2FyY2hfYmFzZV9nZXRsKGIsbykJCQlcCi0gKHsJCQkJCQlcCi0JdW5zaWduZWQgaW50IF9fdiwgX19yID0gKGIpOwkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKLQkJImxkcgklMCwgWyUxLCAlMl0iCQlcCi0JCTogIj1yIiAoX192KQkJCVwKLQkJOiAiciIgKF9fciksICJJciIgKG8pKTsJCVwKLQlfX3Y7CQkJCQlcCi0gfSkKLQotI2RlZmluZSBfX2FyY2hfYmFzZV9wdXRiKHYsYixvKQkJCVwKLSAoewkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgX19yID0gKGIpOwkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCi0JCSJzdHJiCSUwLCBbJTEsICUyXSIJCVwKLQkJOgkJCQlcCi0JCTogInIiICh2KSwgInIiIChfX3IpLCAiSXIiIChvKSk7XAotIH0pCi0KLSNkZWZpbmUgX19hcmNoX2Jhc2VfcHV0bCh2LGIsbykJCQlcCi0gKHsJCQkJCQlcCi0JdW5zaWduZWQgaW50IF9fciA9IChiKTsJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJXAotCQkic3RyCSUwLCBbJTEsICUyXSIJCVwKLQkJOgkJCQlcCi0JCTogInIiICh2KSwgInIiIChfX3IpLCAiSXIiIChvKSk7XAotIH0pCi0KLS8qCiAgKiBXZSB1c2UgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBhZGRyZXNzaW5nIC0gUEMgc3R5bGUgYWRkcmVzc2VzLCBhbmQgQVJNCiAgKiBhZGRyZXNzZXMuICBQQyBzdHlsZSBhY2Nlc3NlcyB0aGUgUEMgaGFyZHdhcmUgd2l0aCB0aGUgbm9ybWFsIFBDIElPCiAgKiBhZGRyZXNzZXMsIGVnIDB4M2Y4IGZvciBzZXJpYWwjMS4gIEFSTSBhZGRyZXNzZXMgYXJlIDB4ODAwMDAwMDArCkBAIC0yMzIsMTUgKzE4OSwxMyBAQAogCXJlc3VsdDsJCQkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIF9faW9hZGRyYyhwb3J0KQkJX19pb2FkZHIocG9ydCkKLQogI2RlZmluZSBpbmIocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5iYyhwKSAgICA6IF9faW5iKHApKQogI2RlZmluZSBpbncocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW53YyhwKSAgICA6IF9faW53KHApKQogI2RlZmluZSBpbmwocCkJIAkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW5sYyhwKSAgICA6IF9faW5sKHApKQogI2RlZmluZSBvdXRiKHYscCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKChwKSkgPyBfX291dGJjKHYscCkgOiBfX291dGIodixwKSkKICNkZWZpbmUgb3V0dyh2LHApCShfX2J1aWx0aW5fY29uc3RhbnRfcCgocCkpID8gX19vdXR3Yyh2LHApIDogX19vdXR3KHYscCkpCiAjZGVmaW5lIG91dGwodixwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9fb3V0bGModixwKSA6IF9fb3V0bCh2LHApKQotI2RlZmluZSBfX2lvYWRkcihwKQkoX19idWlsdGluX2NvbnN0YW50X3AoKHApKSA/IF9faW9hZGRyKHApICA6IF9faW9hZGRyYyhwKSkKKwogLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNhdGVkICovCiAjZGVmaW5lIGlvYWRkcihwb3J0KQkoKHVuc2lnbmVkIGxvbmcpX19pb2FkZHIoKHBvcnQpKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNGNlNmNhOS4uM2QyMDM3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC00NCwzICs0NCw0IEBACiAKICNkZWZpbmUgSVJRX1RJTUVSCQlJUlFfVElNRVIwCiAKKyNkZWZpbmUgTlJfSVJRUwkJCTEyOApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApzaW1pbGFyaXR5IGluZGV4IDcxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvZG1hLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKaW5kZXggMzYwYjU2Zi4uYmFkNzIwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGFyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9kbWEuaAorICogIGFyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk3IFJ1c3NlbGwgS2luZwogICoKQEAgLTEwLDEyICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0vKgotICogVGhpcyBpcyB0aGUgbWF4aW11bSBETUEgYWRkcmVzcyB0aGF0IGNhbiBiZSBETUFkIHRvLgotICogVGhlcmUgc2hvdWxkIG5vdCBiZSBtb3JlIHRoYW4gKDB4ZDAwMDAwMDAgLSAweGMwMDAwMDAwKQotICogYnl0ZXMgb2YgUkFNLgotICovCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhkMDAwMDAwMAogI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKIAogI2RlZmluZSBETUFfMAkJCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA5YmY3ZTQzLi43ODE5MWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yNCwxMyArMjQsNiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDEwMDAwMDAwKQogCiAvKgotICogVGhlc2UgYXJlIGV4YWN0bHkgdGhlIHNhbWUgb24gdGhlIFJpc2NQQyBhcyB0aGUKLSAqIHBoeXNpY2FsIG1lbW9yeSB2aWV3LgotICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQotCi0vKgogICogQ2FjaGUgZmx1c2hpbmcgYXJlYSAtIFJPTQogICovCiAjZGVmaW5lIEZMVVNIX0JBU0VfUEhZUwkJMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggOGY0ODc4ZS4uY2Y1OTAxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xNyw3ICsxNyw0IEBACiAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwQzAwMDAwMCkKIAotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IDk5ZmRjNzMuLjYzYTMwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogY29uZmlnIENQVV9TM0MyNDEwCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IFMzQzI0MTBfQ0xPQ0sKIAlzZWxlY3QgUzNDMjQxMF9HUElPCiAJc2VsZWN0IENQVV9MTFNFUklBTF9TM0MyNDEwCkBAIC0zMiwxMSArMzMsNiBAQAogCWhlbHAKIAkgIEdQSU8gY29kZSBmb3IgUzNDMjQxMCBhbmQgc2ltaWxhciBwcm9jZXNzb3JzCiAKLWNvbmZpZyBTM0MyNDEwX0NMT0NLCi0JYm9vbAotCWhlbHAKLQkgIENsb2NrIGNvZGUgZm9yIHRoZSBTM0MyNDEwLCBhbmQgc2ltaWxhciBwcm9jZXNzb3JzCi0KIGNvbmZpZyBTSU1URUNfTk9SCiAJYm9vbAogCWhlbHAKQEAgLTg0LDYgKzgwLDcgQEAKIAlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJc2VsZWN0IFNJTVRFQ19OT1IKIAlzZWxlY3QgTUFDSF9CQVNUX0lERQorCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgSVNBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCkBAIC0xMjEsNiArMTE4LDcgQEAKIGNvbmZpZyBNQUNIX1ZSMTAwMAogCWJvb2wgIlRob3Jjb20gVlIxMDAwIgogCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KKwlzZWxlY3QgUzNDMjRYWF9EQ0xLCiAJc2VsZWN0IFNJTVRFQ19OT1IKIAlzZWxlY3QgTUFDSF9CQVNUX0lERQogCXNlbGVjdCBDUFVfUzNDMjQxMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCmluZGV4IDAwZjMxZjguLmZjYTAyZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDYgQEAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMF9ETUEpCSs9IGRtYS5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gcG0ubyBzbGVlcC5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9HUElPKQkrPSBncGlvLm8KLW9iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKQkrPSBjbG9jay5vCiAKICMgTWFjaGluZSBzdXBwb3J0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA3ZDkxNGE0Li41NTJiNGM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KQEAgLTI1LDEyICsyNCwxMiBAQAogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIF9faW5pdGRhdGEgczNjMjQxMF9kbWFfbWFwcGluZ3NbXSA9IHsKIAlbRE1BQ0hfWEQwXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDg5MWI1M2MuLjEzMzU4Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTYsMTEgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLS8qCi0gKiBUaGlzIGlzIHRoZSBtYXhpbXVtIERNQSBhZGRyZXNzKHBoeXNpY2FsIGFkZHJlc3MpIHRoYXQgY2FuIGJlIERNQWQgdG8uCi0gKgotICovCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHg0MDAwMDAwMAogI2RlZmluZSBNQVhfRE1BX1RSQU5TRkVSX1NJWkUgICAweDEwMDAwMCAvKiBEYXRhIFVuaXQgaXMgaGFsZiB3b3JkICAqLwogCiAvKiBXZSB1c2UgYHZpcnR1YWxgIGRtYSBjaGFubmVscyB0byBoaWRlIHRoZSBmYWN0IHdlIGhhdmUgb25seSBhIGxpbWl0ZWQKQEAgLTI1NCw3ICsyNDksNyBAQAogICogcmVxdWVzdCBhIGRtYSBjaGFubmVsIGV4Y2x1c2l2bGV5CiAqLwogCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX3JlcXVlc3QoZG1hY2hfdCBjaGFubmVsLAorZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJICAgICAgIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKiwgdm9pZCAqZGV2KTsKIAogCkBAIC0yNjMsMTQgKzI1OCwxNCBAQAogICogY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZG1hIGNoYW5uZWwKICovCiAKLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfY3RybChkbWFjaF90IGNoYW5uZWwsIGVudW0gczNjMjQxMF9jaGFuX29wIG9wKTsKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfY3RybCh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApOwogCiAvKiBzM2MyNDEwX2RtYV9zZXRmbGFncwogICoKICAqIHNldCB0aGUgY2hhbm5lbCdzIGZsYWdzIHRvIGEgZ2l2ZW4gc3RhdGUKICovCiAKLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0ZmxhZ3MoZG1hY2hfdCBjaGFubmVsLAorZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9zZXRmbGFncyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiAvKiBzM2MyNDEwX2RtYV9mcmVlCkBAIC0yNzgsNyArMjczLDcgQEAKICAqIGZyZWUgdGhlIGRtYSBjaGFubmVsICh3aWxsIGFsc28gYWJvcnQgYW55IG91dHN0YW5kaW5nIG9wZXJhdGlvbnMpCiAqLwogCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX2ZyZWUoZG1hY2hfdCBjaGFubmVsLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICopOworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9mcmVlKHVuc2lnbmVkIGludCBjaGFubmVsLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICopOwogCiAvKiBzM2MyNDEwX2RtYV9lbnF1ZXVlCiAgKgpAQCAtMjg3LDcgKzI4Miw3IEBACiAgKiBkcmFpbmVkIGJlZm9yZSB0aGUgYnVmZmVyIGlzIGdpdmVuIHRvIHRoZSBETUEgc3lzdGVtLgogKi8KIAotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9lbnF1ZXVlKGRtYWNoX3QgY2hhbm5lbCwgdm9pZCAqaWQsCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2VucXVldWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHZvaWQgKmlkLAogCQkJICAgICAgIGRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpOwogCiAvKiBzM2MyNDEwX2RtYV9jb25maWcKQEAgLTI5NSw3ICsyOTAsNyBAQAogICogY29uZmlndXJlIHRoZSBkbWEgY2hhbm5lbAogKi8KIAotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9jb25maWcoZG1hY2hfdCBjaGFubmVsLCBpbnQgeGZlcnVuaXQsIGludCBkY29uKTsKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfY29uZmlnKHVuc2lnbmVkIGludCBjaGFubmVsLCBpbnQgeGZlcnVuaXQsIGludCBkY29uKTsKIAogLyogczNjMjQxMF9kbWFfZGV2Y29uZmlnCiAgKgpAQCAtMzEwLDExICszMDUsMTEgQEAKICAqIGdldCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgZG1hIHRyYW5zZmVyIGlzIGN1cnJlbnRseSBhdAogKi8KIAotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihkbWFjaF90IGNoYW5uZWwsCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJCSAgIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZGVzdCk7CiAKLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4oZG1hY2hfdCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bik7Ci1leHRlcm4gaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihkbWFjaF90LCBzM2MyNDEwX2RtYV9jYmZuX3QgcnRuKTsKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4odW5zaWduZWQgaW50LCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKTsKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHVuc2lnbmVkIGludCwgczNjMjQxMF9kbWFfY2Jmbl90IHJ0bik7CiAKIC8qIERNQSBSZWdpc3RlciBkZWZpbml0aW9ucyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzlmYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaApAQCAtMCwwICsxLDM0IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzI0MTAgLSBHUElPIGNvcmUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9HUElPX0NPUkVfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorCitleHRlcm4gc3RydWN0IHMzY19ncGlvX2NoaXAgczNjMjR4eF9ncGlvc1tdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpzM2NfZ3Bpb2xpYl9nZXRjaGlwKHVuc2lnbmVkIGludCBwaW4pCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXA7CisKKwlpZiAocGluID4gUzNDMjQxMF9HUEcxMCkKKwkJcmV0dXJuIE5VTEw7CisKKwljaGlwID0gJnMzYzI0eHhfZ3Bpb3NbcGluLzMyXTsKKwlyZXR1cm4gKFMzQzI0MTBfR1BJT19PRkZTRVQocGluKSA+IGNoaXAtPmNoaXAubmdwaW8pID8gY2hpcCA6IE5VTEw7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDNiNTJiODYuLmUwMzQ5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xNSw0ICsxNSwxMCBAQAogI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCiAjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCiAKKy8qIHNvbWUgYm9hcmRzIHJlcXVpcmUgZXh0cmEgZ3BpbyBjYXBhY2l0eSB0byBzdXBwb3J0IGV4dGVybmFsCisgKiBkZXZpY2VzIHRoYXQgbmVlZCBHUElPLgorICovCisKKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkoMjU2ICsgQ09ORklHX1MzQzI0WFhfR1BJT19FWFRSQSkKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggOTUwYzcxYi4uOTU2NTkwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEzNCw2ICsxMzQsOCBAQAogI2RlZmluZSBJUlFfUzNDMjQ0M19IU01NQwlTM0MyNDEwX0lSUSgyMCkJCS8qIElSUV9TREkgKi8KICNkZWZpbmUgSVJRX1MzQzI0NDNfTkFORAlTM0MyNDEwX0lSUSgyNCkJCS8qIHJlc2VydmVkICovCiAKKyNkZWZpbmUgSVJRX0hTTU1DMAkJSVJRX1MzQzI0NDNfSFNNTUMKKwogI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QxCVMzQzI0MTBfSVJRU1VCKDE0KQogI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QyCVMzQzI0MTBfSVJRU1VCKDE1KQogI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QzCVMzQzI0MTBfSVJRU1VCKDE2KQpAQCAtMTYwLDYgKzE2MiwxMiBAQAogI2RlZmluZSBOUl9JUlFTIChJUlFfUzNDMjQ0MF9BQzk3KzEpCiAjZW5kaWYKIAorLyogY29tcGF0aWJpbGl0eSBkZWZpbmUuICovCisjZGVmaW5lIElSUV9VQVJUMwkJSVJRX1MzQzI0NDNfVUFSVDMKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgzCQlJUlFfUzNDMjQ0M19SWDMKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgzCQlJUlFfUzNDMjQ0M19UWDMKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMwlJUlFfUzNDMjQ0M19FUlIzCisKIC8qIE91ciBGSVFzIGFyZSByb3V0YWJsZSBmcm9tIElSUV9FSU5UMCB0byBJUlFfQURDUEFSRU5UICovCiAjZGVmaW5lIEZJUV9TVEFSVAkJSVJRX0VJTlQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDIzYzQ3MGMuLjI1NWZkZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMTMsMzQgKzEzLDIwIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NQVBfSAogCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9BRERSKHgpCQlTM0NfQUREUih4KQogCi0vKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyB0aGUgZmlyc3QgdGhpbmcgd2UgcHV0IGluLCB0byBtYWtlCi0gKiB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGlycSBkZXRlY3Rpb24gZWFzaWVyCi0gKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9JUlEJICAgUzNDX1ZBX0lSUQotI2RlZmluZSBTM0MyNDEwX1BBX0lSUQkgICAoMHg0QTAwMDAwMCkKLSNkZWZpbmUgUzNDMjRYWF9TWl9JUlEJICAgU1pfMU0KLQotLyogbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfTUVNQ1RSTCBTM0NfVkFfTUVNCi0jZGVmaW5lIFMzQzI0MTBfUEFfTUVNQ1RSTCAoMHg0ODAwMDAwMCkKLSNkZWZpbmUgUzNDMjRYWF9TWl9NRU1DVFJMIFNaXzFNCi0KIC8qIFVTQiBob3N0IGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUzNDMjQxMF9QQV9VU0JIT1NUICgweDQ5MDAwMDAwKQotI2RlZmluZSBTM0MyNFhYX1NaX1VTQkhPU1QgU1pfMU0KIAogLyogRE1BIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUzNDMjQxMF9QQV9ETUEJICAgKDB4NEIwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfRE1BCSAgIFNaXzFNCiAKIC8qIENsb2NrIGFuZCBQb3dlciBtYW5hZ2VtZW50ICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfQ0xLUFdSICBTM0NfVkFfU1lTCiAjZGVmaW5lIFMzQzI0MTBfUEFfQ0xLUFdSICAoMHg0QzAwMDAwMCkKLSNkZWZpbmUgUzNDMjRYWF9TWl9DTEtQV1IgIFNaXzFNCiAKIC8qIExDRCBjb250cm9sbGVyICovCiAjZGVmaW5lIFMzQzI0MTBfUEFfTENECSAgICgweDREMDAwMDAwKQpAQCAtNDgsNDggKzM0LDEyIEBACiAKIC8qIE5BTkQgZmxhc2ggY29udHJvbGxlciAqLwogI2RlZmluZSBTM0MyNDEwX1BBX05BTkQJICAgKDB4NEUwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfU1pfTkFORAkgICBTWl8xTQotCi0vKiBVQVJUcyAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQJICAgUzNDX1ZBX1VBUlQKLSNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUCSAgICgweDUwMDAwMDAwKQotI2RlZmluZSBTM0MyNFhYX1NaX1VBUlQJICAgU1pfMU0KLQotLyogVGltZXJzICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfVElNRVIgICBTM0NfVkFfVElNRVIKLSNkZWZpbmUgUzNDMjQxMF9QQV9USU1FUiAgICgweDUxMDAwMDAwKQotI2RlZmluZSBTM0MyNFhYX1NaX1RJTUVSICAgU1pfMU0KLQotLyogVVNCIERldmljZSBwb3J0ICovCi0jZGVmaW5lIFMzQzI0MTBfUEFfVVNCREVWICAoMHg1MjAwMDAwMCkKLSNkZWZpbmUgUzNDMjRYWF9TWl9VU0JERVYgIFNaXzFNCi0KLS8qIFdhdGNoZG9nICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfV0FUQ0hET0cgUzNDX1ZBX1dBVENIRE9HCi0jZGVmaW5lIFMzQzI0MTBfUEFfV0FUQ0hET0cgKDB4NTMwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfU1pfV0FUQ0hET0cgU1pfMU0KIAogLyogSUlDIGhhcmR3YXJlIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgUzNDMjQxMF9QQV9JSUMJICAgKDB4NTQwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfU1pfSUlDCSAgIFNaXzFNCiAKIC8qIElJUyBjb250cm9sbGVyICovCiAjZGVmaW5lIFMzQzI0MTBfUEFfSUlTCSAgICgweDU1MDAwMDAwKQotI2RlZmluZSBTM0MyNFhYX1NaX0lJUwkgICBTWl8xTQotCi0vKiBHUElPIHBvcnRzICovCi0KLS8qIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIFZBIG9mIHRoaXMgbXVzdCBlbnN1cmUgdGhhdAotICogaXQgaXMgdGhlIHNhbWUgZGlzdGFuY2UgYXBhcnQgZnJvbSB0aGUgVUFSVCBpbiB0aGUKLSAqIHBoc3lpY2FsIGFkZHJlc3Mgc3BhY2UsIGFzIHRoZSBpbml0aWFsIG1hcHBpbmcgZm9yIHRoZSBJTwotICogaXMgZG9uZSBhcyBhIDE6MSBtYXBpbmcuIFRoaXMgcHV0cyBpdCAoY3VycmVudGx5KSBhdAotICogMHhGQTgwMDAwMCwgd2hpY2ggaXMgbm90IGluIHRoZSB3YXkgb2YgYW55IGN1cnJlbnQgbWFwcGluZwotICogYnkgdGhlIGJhc2Ugc3lzdGVtLgotKi8KLQotI2RlZmluZSBTM0MyNDEwX1BBX0dQSU8JICAgKDB4NTYwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfVkFfR1BJTwkgICAoKFMzQzI0MTBfUEFfR1BJTyAtIFMzQzI0WFhfUEFfVUFSVCkgKyBTM0MyNFhYX1ZBX1VBUlQpCi0jZGVmaW5lIFMzQzI0WFhfU1pfR1BJTwkgICBTWl8xTQogCiAvKiBSVEMgKi8KICNkZWZpbmUgUzNDMjQxMF9QQV9SVEMJICAgKDB4NTcwMDAwMDApCkBAIC05NywxNSArNDcsMTIgQEAKIAogLyogQURDICovCiAjZGVmaW5lIFMzQzI0MTBfUEFfQURDCSAgICgweDU4MDAwMDAwKQotI2RlZmluZSBTM0MyNFhYX1NaX0FEQwkgICBTWl8xTQogCiAvKiBTUEkgKi8KICNkZWZpbmUgUzNDMjQxMF9QQV9TUEkJICAgKDB4NTkwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfU1pfU1BJCSAgIFNaXzFNCiAKIC8qIFNESSAqLwogI2RlZmluZSBTM0MyNDEwX1BBX1NESQkgICAoMHg1QTAwMDAwMCkKLSNkZWZpbmUgUzNDMjRYWF9TWl9TREkJICAgU1pfMU0KIAogLyogQ0FNSUYgKi8KICNkZWZpbmUgUzNDMjQ0MF9QQV9DQU1JRiAgICgweDRGMDAwMDAwKQpAQCAtMTIwLDEzICs2Nyw2IEBACiAjZGVmaW5lIFMzQzI0NDNfUEFfSFNNTUMgICAoMHg0QTgwMDAwMCkKICNkZWZpbmUgUzNDMjQ0M19TWl9IU01NQyAgICgyNTYpCiAKLS8qIElTQSBzdHlsZSBJTywgZm9yIGVhY2ggbWFjaGluZSB0byBzb3J0IG91dCBtYXBwaW5ncyBmb3IsIGlmIGl0Ci0gKiBpbXBsZW1lbnRzIGl0LiBXZSByZXNlcnZlIHR3byAxNk0gcmVnaW9ucyBmb3IgSVNBLgotICovCi0KLSNkZWZpbmUgUzNDMjRYWF9WQV9JU0FfV09SRCAgUzNDMjQxMF9BRERSKDB4MDIwMDAwMDApCi0jZGVmaW5lIFMzQzI0WFhfVkFfSVNBX0JZVEUgIFMzQzI0MTBfQUREUigweDAzMDAwMDAwKQotCiAvKiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYWxsIHRoZSBjaGlwLXNlbGVjdCBhcmVhcyAqLwogCiAjZGVmaW5lIFMzQzI0MTBfQ1MwICgweDAwMDAwMDAwKQpAQCAtMTUyLDI3ICs5MiwxNiBAQAogI2RlZmluZSBTM0MyNFhYX1BBX1RJTUVSICAgIFMzQzI0MTBfUEFfVElNRVIKICNkZWZpbmUgUzNDMjRYWF9QQV9VU0JERVYgICBTM0MyNDEwX1BBX1VTQkRFVgogI2RlZmluZSBTM0MyNFhYX1BBX1dBVENIRE9HIFMzQzI0MTBfUEFfV0FUQ0hET0cKLSNkZWZpbmUgUzNDMjRYWF9QQV9JSUMgICAgICBTM0MyNDEwX1BBX0lJQwogI2RlZmluZSBTM0MyNFhYX1BBX0lJUyAgICAgIFMzQzI0MTBfUEFfSUlTCiAjZGVmaW5lIFMzQzI0WFhfUEFfR1BJTyAgICAgUzNDMjQxMF9QQV9HUElPCiAjZGVmaW5lIFMzQzI0WFhfUEFfUlRDICAgICAgUzNDMjQxMF9QQV9SVEMKICNkZWZpbmUgUzNDMjRYWF9QQV9BREMgICAgICBTM0MyNDEwX1BBX0FEQwogI2RlZmluZSBTM0MyNFhYX1BBX1NQSSAgICAgIFMzQzI0MTBfUEFfU1BJCisjZGVmaW5lIFMzQzI0WFhfUEFfU0RJICAgICAgUzNDMjQxMF9QQV9TREkKKyNkZWZpbmUgUzNDMjRYWF9QQV9OQU5ECSAgICBTM0MyNDEwX1BBX05BTkQKIAotLyogZGVhbCB3aXRoIHRoZSByZWdpc3RlcnMgdGhhdCBtb3ZlIHVuZGVyIHRoZSAyNDEyLzI0MTMgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMykKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBfX2lvbWVtICpzM2MyNHh4X3ZhX2dwaW8yOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDEyX09OTFkKLSNkZWZpbmUgUzNDMjRYWF9WQV9HUElPMiAoUzNDMjRYWF9WQV9HUElPICsgMHgxMCkKLSNlbHNlCi0jZGVmaW5lIFMzQzI0WFhfVkFfR1BJTzIgczNjMjR4eF92YV9ncGlvMgotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBzM2MyNHh4X3ZhX2dwaW8yIFMzQzI0WFhfVkFfR1BJTwotI2RlZmluZSBTM0MyNFhYX1ZBX0dQSU8yIFMzQzI0WFhfVkFfR1BJTwotI2VuZGlmCisjZGVmaW5lIFMzQ19QQV9JSUMgICAgICAgICAgUzNDMjQxMF9QQV9JSUMKKyNkZWZpbmUgUzNDX1BBX1VBUlQJICAgIFMzQzI0WFhfUEFfVUFSVAorI2RlZmluZSBTM0NfUEFfSFNNTUMwCSAgICBTM0MyNDQzX1BBX0hTTU1DCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA5Mzc4MjYyLi42ZjFlNTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTEzLDcgKzEzLDQgQEAKIAogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDMwMDAwMDAwKQogCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKaW5kZXggYjNmOTBhYS4uMmE1ZDkwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKQEAgLTQyLDEzICs0Miw2IEBACiAjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX0lJUwkgICAgICgxPDwxNykKICNkZWZpbmUgUzNDMjQxMF9DTEtDT05fU1BJCSAgICAgKDE8PDE4KQogCi0jZGVmaW5lIFMzQzI0MTBfUExMQ09OX01ESVZTSElGVCAgICAgMTIKLSNkZWZpbmUgUzNDMjQxMF9QTExDT05fUERJVlNISUZUICAgICA0Ci0jZGVmaW5lIFMzQzI0MTBfUExMQ09OX1NESVZTSElGVCAgICAgMAotI2RlZmluZSBTM0MyNDEwX1BMTENPTl9NRElWTUFTSwkgICAgICgoMTw8KDErKDE5LTEyKSkpLTEpCi0jZGVmaW5lIFMzQzI0MTBfUExMQ09OX1BESVZNQVNLCSAgICAgKCgxPDw1KS0xKQotI2RlZmluZSBTM0MyNDEwX1BMTENPTl9TRElWTUFTSwkgICAgIDMKLQogLyogRENMS0NPTiByZWdpc3RlciBhZGRyZXNzZXMgaW4gZ3Bpby5oICovCiAKICNkZWZpbmUgUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4JICAgICAoMTw8MCkKQEAgLTc2LDMyICs2OSw2IEBACiAjZGVmaW5lIFMzQzI0MTBfQ0xLU0xPV19TTE9XVkFMKHgpCSh4KQogI2RlZmluZSBTM0MyNDEwX0NMS1NMT1dfR0VUX1NMT1dWQUwoeCkJKCh4KSAmIDcpCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLXMzYzI0MTBfZ2V0X3BsbCh1bnNpZ25lZCBpbnQgcGxsdmFsLCB1bnNpZ25lZCBpbnQgYmFzZWNsaykKLXsKLQl1bnNpZ25lZCBpbnQgbWRpdiwgcGRpdiwgc2RpdjsKLQl1aW50NjRfdCBmdmNvOwotCi0JbWRpdiA9IHBsbHZhbCA+PiBTM0MyNDEwX1BMTENPTl9NRElWU0hJRlQ7Ci0JcGRpdiA9IHBsbHZhbCA+PiBTM0MyNDEwX1BMTENPTl9QRElWU0hJRlQ7Ci0Jc2RpdiA9IHBsbHZhbCA+PiBTM0MyNDEwX1BMTENPTl9TRElWU0hJRlQ7Ci0KLQltZGl2ICY9IFMzQzI0MTBfUExMQ09OX01ESVZNQVNLOwotCXBkaXYgJj0gUzNDMjQxMF9QTExDT05fUERJVk1BU0s7Ci0Jc2RpdiAmPSBTM0MyNDEwX1BMTENPTl9TRElWTUFTSzsKLQotCWZ2Y28gPSAodWludDY0X3QpYmFzZWNsayAqIChtZGl2ICsgOCk7Ci0JZG9fZGl2KGZ2Y28sIChwZGl2ICsgMikgPDwgc2Rpdik7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIGludClmdmNvOwotfQotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCiAKIC8qIGV4dHJhIHJlZ2lzdGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKaW5kZXggNTI4MDgwYy4uMzIxMDc3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCkBAIC0xMDUzLDEzICsxMDUzLDYgQEAKICNkZWZpbmUgUzNDMjRYWF9FWFRJTlQxCSAgIFMzQzI0WFhfR1BJT1JFRzIoMHg4QykKICNkZWZpbmUgUzNDMjRYWF9FWFRJTlQyCSAgIFMzQzI0WFhfR1BJT1JFRzIoMHg5MCkKIAotLyogdmFsdWVzIGZvciBTM0MyNDEwX0VYVElOVDAvMS8yICovCi0jZGVmaW5lIFMzQzI0MTBfRVhUSU5UX0xPV0xFVgkgKDB4MDApCi0jZGVmaW5lIFMzQzI0MTBfRVhUSU5UX0hJTEVWCSAoMHgwMSkKLSNkZWZpbmUgUzNDMjQxMF9FWFRJTlRfRkFMTEVER0UJICgweDAyKQotI2RlZmluZSBTM0MyNDEwX0VYVElOVF9SSVNFRURHRQkgKDB4MDQpCi0jZGVmaW5lIFMzQzI0MTBfRVhUSU5UX0JPVEhFREdFCSAoMHgwNikKLQogLyogaW50ZXJydXB0IGZpbHRlcmluZyBjb25ycm9sIGZvciBFSU5UMTYuLkVJTlQyMyAqLwogI2RlZmluZSBTM0MyNDEwX0VJTkZMVDAJICAgUzNDMjQxMF9HUElPUkVHKDB4OTQpCiAjZGVmaW5lIFMzQzI0MTBfRUlORkxUMQkgICBTM0MyNDEwX0dQSU9SRUcoMHg5OCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCmluZGV4IDQ2ZDQ2ZjUuLjc3NGYzYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaApAQCAtMjIsNSArMjIsMTIgQEAKIAl2b2lkICgqc2V0X2NzKShzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBwb2wpOwogfTsKIAorLyogU3RhbmRhcmQgc2V0dXAgLyBzdXNwZW5kIHJvdXRpbmVzIGZvciBTUEkgR1BJTyBwaW5zLiAqLworCitleHRlcm4gdm9pZCBzM2MyNHh4X3NwaV9ncGlvY2ZnX2J1czBfZ3BlMTFfMTJfMTMoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKKwkJCQkJCSBpbnQgZW5hYmxlKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9zcGlfZ3Bpb2NmZ19idXMxX2dwZzVfNl83KHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksCisJCQkJCSAgICAgIGludCBlbmFibGUpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3lzdGVtLXJlc2V0LmgKaW5kZXggNDM1MzVhMC4uNzYxM2QwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS1yZXNldC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy13YXRjaGRvZy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy13YXRjaGRvZy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpY2suaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGRhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpY2suaApAQCAtMCwwICsxLDE1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpY2suaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDMjQxMCAtIHRpbWVyIHRpY2sgc3VwcG9ydAorICovCisKKyNkZWZpbmUgU1JDUE5EX1RJTUVSNCAoMTw8KElSUV9USU1FUjQgLSBJUlFfRUlOVDApKQorCitzdGF0aWMgaW5saW5lIGludCBzM2MyNHh4X29zdGltZXJfcGVuZGluZyh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCkgJiBTUkNQTkRfVElNRVI0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBhYjM5NDkxLi5jOTQzMjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMSwzICsxLDQgQEAKKwogLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwppbmRleCBkMDYxZmVhLi42ZDY5OTVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIApAQCAtMTUwLDcgKzE1MSw3IEBACiAjZW5kaWYKIAkmczNjX2RldmljZV9hZGMsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX3VzYiwKICAJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKQEAgLTIzMyw2ICsyMzQsNyBAQAogI2lmZGVmIENPTkZJR19GQl9TM0MyNDEwCiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJmFtbG01OTAwX2ZiX2luZm8pOwogI2VuZGlmCisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtbG01OTAwX2RldmljZXMsIEFSUkFZX1NJWkUoYW1sbTU5MDBfZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggOGRiOWM3MC4uMDFiZDc2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtNDQsOCArNDQsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTQwNiw3ICs0MDYsNyBAQAogICogc3RhbmRhcmQgMTAwS0h6IGkyYyBidXMgZnJlcXVlbmN5CiAqLwogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjIGJhc3RfaTJjX2luZm8gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjIF9faW5pdGRhdGEgYmFzdF9pMmNfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gMCwKIAkuc2xhdmVfYWRkcgk9IDB4MTAsCiAJLmJ1c19mcmVxCT0gMTAwKjEwMDAsCkBAIC01NTMsNyArNTUzLDcgQEAKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKICAJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX25hbmQsCiAJJmJhc3RfZGV2aWNlX2RtOWssCkBAIC01ODgsNyArNTg4LDggQEAKIAlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhiYXN0X2Nsb2NrcywgQVJSQVlfU0laRShiYXN0X2Nsb2NrcykpOwogCiAJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJmJhc3RfbmFuZF9pbmZvOwotCXMzY19kZXZpY2VfaTJjLmRldi5wbGF0Zm9ybV9kYXRhID0gJmJhc3RfaTJjX2luZm87CisKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoJmJhc3RfaTJjX2luZm8pOwogCiAJczNjMjR4eF9pbml0X2lvKGJhc3RfaW9kZXNjLCBBUlJBWV9TSVpFKGJhc3RfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDk4NzE2ZDAuLjgyMWExNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMzgsMTEgKzM4LDEzIEBACiAjaW5jbHVkZSA8bWFjaC9oMTk0MC5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAtbGF0Y2guaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KKyNpbmNsdWRlIDxwbGF0L3VkYy5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBoMTk0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtMTgzLDcgKzE4NSw3IEBACiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCi0JJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLAogCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKIAkmczNjX2RldmljZV9sZWRzLApAQCAtMjE1LDYgKzIxNyw3IEBACiAKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmaDE5NDBfZmJfaW5mbyk7CiAgCXMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YSgmaDE5NDBfdWRjX2NmZyk7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCiAJLyogVHVybiBvZmYgc3VzcGVuZCBvbiBib3RoIFVTQiBwb3J0cywgYW5kIHN3aXRjaCB0aGUKIAkgKiBzZWxlY3RhYmxlIFVTQiBwb3J0IHRvIFVTQiBkZXZpY2UgbW9kZS4gKi8KQEAgLTIyMywxMCArMjI2LDkgQEAKIAkJCSAgICAgIFMzQzI0MTBfTUlTQ0NSX1VTQlNVU1BORDAgfAogCQkJICAgICAgUzNDMjQxMF9NSVNDQ1JfVVNCU1VTUE5EMSwgMHgwKTsKIAotCXRtcCA9ICgKLQkJIDB4NzggPDwgUzNDMjQxMF9QTExDT05fTURJVlNISUZUKQotCSAgICAgIHwgKDB4MDIgPDwgUzNDMjQxMF9QTExDT05fUERJVlNISUZUKQotCSAgICAgIHwgKDB4MDMgPDwgUzNDMjQxMF9QTExDT05fU0RJVlNISUZUKTsKKwl0bXAgPSAgICgweDc4IDw8IFMzQzI0WFhfUExMQ09OX01ESVZTSElGVCkKKwkgICAgICB8ICgweDAyIDw8IFMzQzI0WFhfUExMQ09OX1BESVZTSElGVCkKKwkgICAgICB8ICgweDAzIDw8IFMzQzI0WFhfUExMQ09OX1NESVZTSElGVCk7CiAJd3JpdGVsKHRtcCwgUzNDMjQxMF9VUExMQ09OKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgxOTQwX2RldmljZXMsIEFSUkFZX1NJWkUoaDE5NDBfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCA4MjUwNTUxLi4wNWE1ZTg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpAQCAtNDAsMTQgKzM5LDE0IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3VkYy5oPgorI2luY2x1ZGUgPHBsYXQvdWRjLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbjMwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogbm90aGluZyBoZXJlIHlldCAqLwpAQCAtMzIwLDcgKzMxOSw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbjMwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCi0JJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLAogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV91c2JnYWRnZXQsCkBAIC0zMzIsNyArMzMxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuMzVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LAogCSZuMzVfYnV0dG9uX2RldmljZSwKQEAgLTUwMSw3ICs1MDAsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG4zMF9pbml0KHZvaWQpCiB7CiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJm4zMF9mYl9pbmZvKTsKLQlzM2NfZGV2aWNlX2kyYy5kZXYucGxhdGZvcm1fZGF0YSA9ICZuMzBfaTJjY2ZnOworCXMzY19kZXZpY2VfaTJjMC5kZXYucGxhdGZvcm1fZGF0YSA9ICZuMzBfaTJjY2ZnOwogCXMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YSgmbjMwX3VkY19jZmcpOwogCiAJLyogVHVybiBvZmYgc3VzcGVuZCBvbiBib3RoIFVTQiBwb3J0cywgYW5kIHN3aXRjaCB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBkODI1NWNmLi5mNmM3MjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvdG9tMTFfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTk0LDcgKzk1LDcgQEAKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCiAgCSZzM2NfZGV2aWNlX3J0YywKIAkmb3RvbV9kZXZpY2Vfbm9yLApAQCAtMTA5LDYgKzExMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdG9tMTFfaW5pdCh2b2lkKQogeworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvdG9tMTFfZGV2aWNlcywgQVJSQVlfU0laRShvdG9tMTFfZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCmluZGV4IDY2MTgwN2UuLjk2NzhhNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC01MCwxMCArNTAsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2xlZHMtZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3VkYy5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS1ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLXNtZGsuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KQEAgLTI0Nyw3ICsyNDgsNyBAQAogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX2lpcywKIAkmczNjX2RldmljZV9zZGksCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LApAQCAtMzQ5LDYgKzM1MCw3IEBACiAJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjAsIDEpOwogCiAJczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZxdDI0MTBfdWRjX2NmZyk7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjUsIFMzQzI0MTBfR1BJT19PVVRQVVQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwppbmRleCAxNTI1MjdiLi5jNDkxMjZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtODksNyArOTAsNyBAQAogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX2lpcywKIH07CiAKQEAgLTEwMiw2ICsxMDMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTBfaW5pdCh2b2lkKQogeworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrMjQxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGsyNDEwX2RldmljZXMpKTsKIAlzbWRrX21hY2hpbmVfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCmluZGV4IDMwOWRjZjQuLjhmZGIwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIApAQCAtMTI3LDcgKzEyOCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdGN0X2hhbW1lcl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV9hZGMsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LApAQCAtMTQ2LDYgKzE0Nyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0Y3RfaGFtbWVyX2luaXQodm9pZCkKIHsKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXModGN0X2hhbW1lcl9kZXZpY2VzLCBBUlJBWV9TSVpFKHRjdF9oYW1tZXJfZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCmluZGV4IDk0MTM1M2EuLjYxYTFlYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogI2luY2x1ZGUgInVzYi1zaW10ZWMuaCIKICNpbmNsdWRlICJub3Itc2ltdGVjLmgiCkBAIC0zMzQsNyArMzM1LDcgQEAKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9hZGMsCiAJJnNlcmlhbF9kZXZpY2UsCiAJJnZyMTAwMF9kbTlrMCwKQEAgLTM4NCw2ICszODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdnIxMDAwX2luaXQodm9pZCkKIHsKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXModnIxMDAwX2RldmljZXMsIEFSUkFZX1NJWkUodnIxMDAwX2RldmljZXMpKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHZyMTAwMF9pMmNfZGV2cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCmluZGV4IGFjNzliNTMuLmZlYjE0MWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTI4LDYgKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgorCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCkBAIC0zNSw2ICszOCw3IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KIAogLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLwogCkBAIC01OSwyNSArNjMsMjggQEAKICAqIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24uCiAqLwogCi12b2lkIF9faW5pdCBzM2MyNDEwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IG1hY2hfc2l6ZSkKK3ZvaWQgX19pbml0IHMzYzI0MTBfbWFwX2lvKHZvaWQpCiB7Ci0JLyogcmVnaXN0ZXIgb3VyIGlvLXRhYmxlcyAqLwotCiAJaW90YWJsZV9pbml0KHMzYzI0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzI0MTBfaW9kZXNjKSk7Ci0JaW90YWJsZV9pbml0KG1hY2hfZGVzYywgbWFjaF9zaXplKTsKIH0KIAotdm9pZCBfX2luaXQgczNjMjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQxMF9zZXR1cF9jbG9ja3Modm9pZCkKIHsKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKIAl1bnNpZ25lZCBsb25nIHRtcDsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CiAJdW5zaWduZWQgbG9uZyBmY2xrOwogCXVuc2lnbmVkIGxvbmcgaGNsazsKIAl1bnNpZ25lZCBsb25nIHBjbGs7CiAKKwl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKwogCS8qIG5vdyB3ZSd2ZSBnb3Qgb3VyIG1hY2hpbmUgYml0cyBpbml0aWFsaXNlZCwgd29yayBvdXQgd2hhdAogCSAqIGNsb2NrcyB3ZSd2ZSBnb3QgKi8KIAotCWZjbGsgPSBzM2MyNDEwX2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCk7CisJZmNsayA9IHMzYzI0eHhfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKTsKIAogCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CiAKQEAgLTk1LDcgKzEwMiwxMyBAQAogCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0KIAkgKi8KIAotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKHh0YWwsIGZjbGssIGhjbGssIHBjbGspOworCXMzYzI0eHhfc2V0dXBfY2xvY2tzKGZjbGssIGhjbGssIHBjbGspOworfQorCit2b2lkIF9faW5pdCBzM2MyNDEwX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKKwlzM2MyNDEwX3NldHVwX2Nsb2NrcygpOwogCXMzYzI0MTBfYmFzZWNsa19hZGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwppbmRleCBjNTlhOWQyLi5jYTk5NTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIGNvbmZpZyBDUFVfUzNDMjQxMgogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDEyX1BNIGlmIFBNCiAJc2VsZWN0IFMzQzI0MTJfRE1BIGlmIFMzQzI0MTBfRE1BCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jbG9jay5jCmluZGV4IDk2ZDllYjEuLmEwMzdkZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jbG9jay5jCkBAIC05MywxMiArOTMsNiBAQAogCiAvKiBjbG9jayBzZWxlY3Rpb25zICovCiAKLS8qIENQVSBFWFRDTEsgaW5wdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19leHQgPSB7Ci0JLm5hbWUJCT0gImV4dGNsayIsCi0JLmlkCQk9IC0xLAotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2VyZWZjbGsgPSB7CiAJLm5hbWUJCT0gImVyZWZjbGsiLAogCS5pZAkJPSAtMSwKQEAgLTc3Myw1ICs3NjcsNiBAQAogCQlzM2MyNDEyX2Nsa2Nvbl9lbmFibGUoY2xrcCwgMCk7CiAJfQogCisJczNjX3B3bWNsa19pbml0KCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKaW5kZXggYmEwNTkxZS4uOTE5ODU2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KQEAgLTI2LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKICNkZWZpbmUgTUFQKHgpIHsgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQgfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKaW5kZXggYjA4ZjE4Yy4uZWNkZGJiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTMxLDggKzMwLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLXBvd2VyLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KQEAgLTUyLDcgKzUxLDggQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3VkYy5oPgorI2luY2x1ZGUgPHBsYXQvdWRjLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBqaXZlX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiB9OwpAQCAtMzk4LDExICszOTgsMTIgQEAKIAkuYnVzX251bQk9IDEsCiAJLnBpbl9jbGsJPSBTM0MyNDEwX0dQRzgsCiAJLnBpbl9tb3NpCT0gUzNDMjQxMF9HUEI4LAorCS5udW1fY2hpcHNlbGVjdAk9IDEsCiAJLmNoaXBfc2VsZWN0CT0gaml2ZV9sY2Rfc3BpX2NoaXBzZWxlY3QsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqaXZlX2RldmljZV9sY2RzcGkgPSB7Ci0JLm5hbWUJCT0gInMzYzI0eHgtc3BpLWdwaW8iLAorCS5uYW1lCQk9ICJzcGlfczNjMjR4eF9ncGlvIiwKIAkuaWQJCT0gMSwKIAkubnVtX3Jlc291cmNlcyAgPSAwLAogCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZqaXZlX2xjZF9zcGksCkBAIC00MTksMTEgKzQyMCwxMiBAQAogCS5idXNfbnVtCT0gMiwKIAkucGluX2Nsawk9IFMzQzI0MTBfR1BCNCwKIAkucGluX21vc2kJPSBTM0MyNDEwX0dQQjksCisJLm51bV9jaGlwc2VsZWN0CT0gMSwKIAkuY2hpcF9zZWxlY3QJPSBqaXZlX3dtODc1MF9jaGlwc2VsZWN0LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugaml2ZV9kZXZpY2Vfd204NzUwID0gewotCS5uYW1lCQk9ICJzM2MyNHh4LXNwaS1ncGlvIiwKKwkubmFtZQkJPSAic3BpX3MzYzI0eHhfZ3BpbyIsCiAJLmlkCQk9IDIsCiAJLm51bV9yZXNvdXJjZXMgID0gMCwKIAkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmaml2ZV93bTg3NTBfc3BpLApAQCAtNDUwLDE0ICs0NTIsMTQgQEAKIAogLyogSTJDIGJ1cyBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICovCiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9pMmMgaml2ZV9pMmNfY2ZnID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyBqaXZlX2kyY19jZmcgX19pbml0ZGF0YSA9IHsKIAkubWF4X2ZyZXEJPSA4MCAqIDEwMDAsCiAJLmJ1c19mcmVxCT0gNTAgKiAxMDAwLAogCS5mbGFncwkJPSBTM0NfSUlDRkxHX0ZJTFRFUiwKIAkuc2RhX2RlbGF5CT0gMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaml2ZV9pMmNfZGV2c1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBqaXZlX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCUkyQ19CT0FSRF9JTkZPKCJsaXMzMDJkbCIsIDB4MWMpLAogCQkuaXJxCT0gSVJRX0VJTlQxNCwKQEAgLTQ3MCw3ICs0NzIsNyBAQAogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmaml2ZV9kZXZpY2VfbGNkc3BpLAogCSZqaXZlX2RldmljZV93bTg3NTAsCkBAIC02NjMsNyArNjY1LDcgQEAKIAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGppdmVfc3BpX2RldnMsIEFSUkFZX1NJWkUoaml2ZV9zcGlfZGV2cykpOwogCi0JczNjX2RldmljZV9pMmMuZGV2LnBsYXRmb3JtX2RhdGEgPSAmaml2ZV9pMmNfY2ZnOworCXMzY19pMmMwX3NldF9wbGF0ZGF0YSgmaml2ZV9pMmNfY2ZnKTsKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBqaXZlX2kyY19kZXZzLCBBUlJBWV9TSVpFKGppdmVfaTJjX2RldnMpKTsKIAogCXBtX3Bvd2VyX29mZiA9IGppdmVfcG93ZXJfb2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKaW5kZXggYzcxOWI1YTcuLmViYTY2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMzcsNyArMzcsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIAogI2luY2x1ZGUgPG1hY2gvaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CisjaW5jbHVkZSA8cGxhdC91ZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAogI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgpAQCAtMTA1LDcgKzEwNiw3IEBACiAJJnMzY19kZXZpY2VfdXNiLAogCS8vJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LAogfTsKQEAgLTE0Miw2ICsxNDMsNyBAQAogCiAKICAJczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZzbWRrMjQxM191ZGNfY2ZnKTsKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrMjQxM19kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGsyNDEzX2RldmljZXMpKTsKIAlzbWRrX21hY2hpbmVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKaW5kZXggNGNmYTE5YS4uMTFlOGFkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCkBAIC0zOSw3ICszOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogCiAjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CkBAIC0xMjIsNyArMTIzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp2c3Rtc19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX2lpcywKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfbmFuZCwKQEAgLTE1MSw2ICsxNTIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdnN0bXNfaW5pdCh2b2lkKQogeworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh2c3Rtc19kZXZpY2VzLCBBUlJBWV9TSVpFKHZzdG1zX2RldmljZXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKaW5kZXggMzEzNzU5Yy4uNWI1YWJhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KQEAgLTMzLDEzICszNCwxNSBAQAogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2lkbGUuaD4KIAorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKwogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtcG93ZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvai5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1kc2MuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3Mtc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLmg+CiAKICNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KQEAgLTQ3LDYgKzUwLDcgQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvcGxsLmg+CiAKICNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDEyX09OTFkKIHZvaWQgX19pb21lbSAqczNjMjR4eF92YV9ncGlvMiA9IFMzQzI0WFhfVkFfR1BJTzsKQEAgLTEzNiw3ICsxNDAsNyBAQAogICogbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbi4KICovCiAKLXZvaWQgX19pbml0IHMzYzI0MTJfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQordm9pZCBfX2luaXQgczNjMjQxMl9tYXBfaW8odm9pZCkKIHsKIAkvKiBtb3ZlIGJhc2Ugb2YgSU8gKi8KIApAQCAtMTUzLDIwICsxNTcsMjUgQEAKIAkvKiByZWdpc3RlciBvdXIgaW8tdGFibGVzICovCiAKIAlpb3RhYmxlX2luaXQoczNjMjQxMl9pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQxMl9pb2Rlc2MpKTsKLQlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBtYWNoX3NpemUpOwogfQogCi12b2lkIF9faW5pdCBzM2MyNDEyX2luaXRfY2xvY2tzKGludCB4dGFsKQordm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2MyNDEyX3NldHVwX2Nsb2Nrcyh2b2lkKQogeworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOwogCXVuc2lnbmVkIGxvbmcgdG1wOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKIAl1bnNpZ25lZCBsb25nIGZjbGs7CiAJdW5zaWduZWQgbG9uZyBoY2xrOwogCXVuc2lnbmVkIGxvbmcgcGNsazsKIAorCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCiAJLyogbm93IHdlJ3ZlIGdvdCBvdXIgbWFjaGluZSBiaXRzIGluaXRpYWxpc2VkLCB3b3JrIG91dCB3aGF0CiAJICogY2xvY2tzIHdlJ3ZlIGdvdCAqLwogCi0JZmNsayA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKjIpOworCWZjbGsgPSBzM2MyNHh4X2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCAqIDIpOwogCiAJY2xrX21wbGwucmF0ZSA9IGZjbGs7CiAKQEAgLTE4MywxMSArMTkyLDE3IEBACiAJcHJpbnRrKCJTM0MyNDEyOiBjb3JlICVsZC4lMDNsZCBNSHosIG1lbW9yeSAlbGQuJTAzbGQgTUh6LCBwZXJpcGhlcmFsICVsZC4lMDNsZCBNSHpcbiIsCiAJICAgICAgIHByaW50X21oeihmY2xrKSwgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOwogCisJczNjMjR4eF9zZXR1cF9jbG9ja3MoZmNsaywgaGNsaywgcGNsayk7Cit9CisKK3ZvaWQgX19pbml0IHMzYzI0MTJfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CiAJLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzIGhlcmUsIHRvIGFsbG93IG90aGVyIHRoaW5ncyBsaWtlIHRoZQogCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0KIAkgKi8KIAotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKHh0YWwsIGZjbGssIGhjbGssIHBjbGspOworCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKKwlzM2MyNDEyX3NldHVwX2Nsb2NrcygpOwogCXMzYzI0MTJfYmFzZWNsa19hZGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwppbmRleCAyNWRlMDQyLi5jZGU1YWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIGNvbmZpZyBDUFVfUzNDMjQ0MAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBDUFVfQVJNOTIwVAogCXNlbGVjdCBTM0MyNDEwX0NMT0NLCiAJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KIAlzZWxlY3QgUzNDMjQxMF9HUElPCkBAIC0yOCw4ICsyOSwxMCBAQAogY29uZmlnIE1BQ0hfQU5VQklTCiAJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUyIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgUzNDMjRYWF9EQ0xLCiAJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBNjQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMKIAkgIGRldmVsb3BtZW50IHN5c3RlbQpAQCAtMzcsNyArNDAsOSBAQAogY29uZmlnIE1BQ0hfT1NJUklTCiAJYm9vbCAiU2ltdGVjIElNMjQ0MEQyMCAoT1NJUklTKSBtb2R1bGUiCiAJc2VsZWN0IENQVV9TM0MyNDQwCisJc2VsZWN0IFMzQzI0WFhfRENMSwogCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBMTI4CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgSU0yNDQwRDIwIG1vZHVsZSwgYWxzbwogCSAga25vd24gYXMgdGhlIE9zaXJpcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwppbmRleCAzMjMwM2Y2Li41YjVlZTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KQEAgLTI1LDEyICsyNCwxMiBAQAogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIF9faW5pdGRhdGEgczNjMjQ0MF9kbWFfbWFwcGluZ3NbXSA9IHsKIAlbRE1BQ0hfWEQwXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKaW5kZXggZTJiZWNhNC4uYjA1ZDU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKQEAgLTM5LDcgKzM5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC0zNjYsNiArMzY3LDggQEAKIAkJLm1hc2sJPSAwLAogCX0sCiAKKwkuZGV2aWNlcwk9IFNNNTAxX1VTRV9HUElPLAorCiAJLyogc2V0IHRoZSBTRFJBTSBhbmQgYnVzIGNsb2NrcyAqLwogCS5tY2xrCQk9IDcyICogTUhaLAogCS5tMXhjbGsJCT0gMTQ0ICogTUhaLApAQCAtMzczLDEwICszNzYsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9ncGlvX2kyYyBhbnViaXNfc201MDFfZ3Bpb19pMmNbXSA9IHsKIAlbMF0gPSB7CisJCS5idXNfbnVtCT0gMSwKIAkJLnBpbl9zY2wJPSA0NCwKIAkJLnBpbl9zZGEJPSA0NSwKIAl9LAogCVsxXSA9IHsKKwkJLmJ1c19udW0JPSAyLAogCQkucGluX3NjbAk9IDQwLAogCQkucGluX3NkYQk9IDQxLAogCX0sCkBAIC0zODQsNiArMzg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbTUwMV9wbGF0ZGF0YSBhbnViaXNfc201MDFfcGxhdGRhdGEgPSB7CiAJLmluaXQJCT0gJmFudWJpc19zbTUwMV9pbml0ZGF0YSwKKwkuZ3Bpb19iYXNlCT0gLTEsCiAJLmdwaW9faTJjCT0gYW51YmlzX3NtNTAxX2dwaW9faTJjLAogCS5ncGlvX2kyY19ucgk9IEFSUkFZX1NJWkUoYW51YmlzX3NtNTAxX2dwaW9faTJjKSwKIH07CkBAIC00MDQsNyArNDEwLDcgQEAKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2FkYywKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKICAJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX25hbmQsCiAJJmFudWJpc19kZXZpY2VfaWRlMCwKQEAgLTQ2OCw2ICs0NzQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW51YmlzX2luaXQodm9pZCkKIHsKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW51YmlzX2RldmljZXMsIEFSUkFZX1NJWkUoYW51YmlzX2RldmljZXMpKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGFudWJpc19pMmNfZGV2cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYXQyNDQwZXZiLmMKaW5kZXggNjY4NzZjNi4uMGE2ZDBhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYXQyNDQwZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYXQyNDQwZXZiLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKQEAgLTM1LDcgKzM2LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC00NSw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9tY2kuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDI0NDBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBOb3RoaW5nIGhlcmUgKi8KQEAgLTE2MiwxOSArMTY1LDYwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgYXQyNDQwZXZiX21jaV9wZGF0YSA9IHsKKwkuZ3Bpb19kZXRlY3QJPSBTM0MyNDEwX0dQRzEwLAorfTsKKworLyogNyIgTENEIHBhbmVsICovCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX2Rpc3BsYXkgYXQyNDQwZXZiX2xjZF9jZmcgX19pbml0ZGF0YSA9IHsKKworCS5sY2Rjb241CT0gUzNDMjQxMF9MQ0RDT041X0ZSTTU2NSB8CisJCQkgIFMzQzI0MTBfTENEQ09ONV9JTlZWTElORSB8CisJCQkgIFMzQzI0MTBfTENEQ09ONV9JTlZWRlJBTUUgfAorCQkJICBTM0MyNDEwX0xDRENPTjVfUFdSRU4gfAorCQkJICBTM0MyNDEwX0xDRENPTjVfSFdTV1AsCisKKwkudHlwZQkJPSBTM0MyNDEwX0xDRENPTjFfVEZULAorCisJLndpZHRoCQk9IDgwMCwKKwkuaGVpZ2h0CQk9IDQ4MCwKKworCS5waXhjbG9jawk9IDMzMzMzLCAvKiBIQ0xLIDYwIE1IeiwgZGl2aXNvciAyICovCisJLnhyZXMJCT0gODAwLAorCS55cmVzCQk9IDQ4MCwKKwkuYnBwCQk9IDE2LAorCS5sZWZ0X21hcmdpbgk9IDg4LAorCS5yaWdodF9tYXJnaW4JPSA0MCwKKwkuaHN5bmNfbGVuCT0gMTI4LAorCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkubG93ZXJfbWFyZ2luCT0gMTEsCisJLnZzeW5jX2xlbgk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gYXQyNDQwZXZiX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKKwkuZGlzcGxheXMJPSAmYXQyNDQwZXZiX2xjZF9jZmcsCisJLm51bV9kaXNwbGF5cwk9IDEsCisJLmRlZmF1bHRfZGlzcGxheSA9IDAsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQyNDQwZXZiX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfYWRjLAotCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX3J0YywKIAkmczNjX2RldmljZV9uYW5kLAorCSZzM2NfZGV2aWNlX3NkaSwKKwkmczNjX2RldmljZV9sY2QsCiAJJmF0MjQ0MGV2Yl9kZXZpY2VfZXRoLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGF0MjQ0MGV2Yl9tYXBfaW8odm9pZCkKIHsKIAlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXQyNDQwZXZiX25hbmRfaW5mbzsKKwlzM2NfZGV2aWNlX3NkaS5uYW1lID0gInMzYzI0NDAtc2RpIjsKKwlzM2NfZGV2aWNlX3NkaS5kZXYucGxhdGZvcm1fZGF0YSA9ICZhdDI0NDBldmJfbWNpX3BkYXRhOwogCiAJczNjMjR4eF9pbml0X2lvKGF0MjQ0MGV2Yl9pb2Rlc2MsIEFSUkFZX1NJWkUoYXQyNDQwZXZiX2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTY5MzQ0MDApOwpAQCAtMTgzLDYgKzIyNyw5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDI0NDBldmJfaW5pdCh2b2lkKQogeworCXMzYzI0eHhfZmJfc2V0X3BsYXRkYXRhKCZhdDI0NDBldmJfZmJfaW5mbyk7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYXQyNDQwZXZiX2RldmljZXMsIEFSUkFZX1NJWkUoYXQyNDQwZXZiX2RldmljZXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKaW5kZXggYTU0NjMwNy4uN2FlYWE5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCkBAIC0zNyw2ICszNyw3IEBACiAvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CkBAIC0xMDcsNyArMTA4LDcgQEAKIAkmczNjX2RldmljZV91c2IsCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKLQkmczNjX2RldmljZV9pMmMsCisJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9paXMsCiAgCSZzM2NfZGV2aWNlX3J0YywKIAkmczNjX2RldmljZV9jYW1pZiwKQEAgLTE0Miw2ICsxNDMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbmV4Y29kZXJfaW5pdCh2b2lkKQogeworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuZXhjb2Rlcl9kZXZpY2VzLCBBUlJBWV9TSVpFKG5leGNvZGVyX2RldmljZXMpKTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggMjM2MWQ2MC4uNDFhMDBmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTM3LDcgKzM3LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L25hbmQuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CkBAIC0zMzUsNyArMzM2LDcgQEAKIC8qIFN0YW5kYXJkIE9zaXJpcyBkZXZpY2VzICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2lyaXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX25hbmQsCiAJJm9zaXJpc19wY21jaWEsCkBAIC0zOTgsNiArMzk5LDggQEAKIAlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm9zaXJpc19wbV9zeXNjbGFzcyk7CiAJc3lzZGV2X3JlZ2lzdGVyKCZvc2lyaXNfcG1fc3lzZGV2KTsKIAorCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKKwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG9zaXJpc19pMmNfZGV2cywKIAkJCQlBUlJBWV9TSVpFKG9zaXJpc19pMmNfZGV2cykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCmluZGV4IDRkMTRjN2MuLjEyZDM3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oMTk0MC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgpAQCAtMTc5LDcgKzE3OSw3IEBACiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCi0JJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLAogCSZzM2NfZGV2aWNlX25hbmQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggZmVmZWFhYS4uZGI2ZWFmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2lkbGUuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgogI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgpAQCAtMTUyLDcgKzE1Myw3IEBACiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCi0JJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLAogfTsKIApAQCAtMTY2LDYgKzE2Nyw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDBfbWFjaGluZV9pbml0KHZvaWQpCiB7CiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnNtZGsyNDQwX2ZiX2luZm8pOworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGsyNDQwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazI0NDBfZGV2aWNlcykpOwogCXNtZGtfbWFjaGluZV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnCmluZGV4IDI2ZDEzMWEuLmIyODlkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogY29uZmlnIENQVV9TM0MyNDQyCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IFMzQzI0MTBfQ0xPQ0sKIAlzZWxlY3QgUzNDMjQxMF9HUElPCiAJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcKaW5kZXggMTQyNTJmNS4uMjEyMTQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIAlib29sICJTTURLMjQ0MyIKIAlzZWxlY3QgQ1BVX1MzQzI0NDMKIAlzZWxlY3QgTUFDSF9TTURLCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gU01ESzI0NDMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCBmODU0ZTczLi4yNzg1ZDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKQEAgLTM5LDYgKzM4LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKICNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KQEAgLTE0NSwxMiArMTQ2LDYgQEAKIAogLyogY2xvY2sgc2VsZWN0aW9ucyAqLwogCi0vKiBDUFUgRVhUQ0xLIGlucHV0ICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfZXh0ID0gewotCS5uYW1lCQk9ICJleHQiLAotCS5pZAkJPSAtMSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tcGxscmVmID0gewogCS5uYW1lCQk9ICJtcGxscmVmIiwKIAkucGFyZW50CQk9ICZjbGtfeHRhbCwKQEAgLTE2NSwxNCArMTYwLDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2VwbGxyZWY7Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19lcGxsID0gewotCS5uYW1lCQk9ICJlcGxsIiwKLQkucGFyZW50CQk9ICZjbGtfZXBsbHJlZiwKLQkuaWQJCT0gLTEsCi19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzX2V4dCA9IHsKIAkubmFtZQkJPSAiaTJzLWV4dCIsCiAJLmlkCQk9IC0xLApAQCAtMTAxMSwyMiArOTk4LDIwIEBACiAJJmNsa19wcmVkaXYsCiB9OwogCi12b2lkIF9faW5pdCBzM2MyNDQzX2luaXRfY2xvY2tzKGludCB4dGFsKQordm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2MyNDQzX3NldHVwX2Nsb2Nrcyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfRVBMTENPTik7CiAJdW5zaWduZWQgbG9uZyBtcGxsY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19NUExMQ09OKTsKIAl1bnNpZ25lZCBsb25nIGNsa2RpdjAgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjApOworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKIAl1bnNpZ25lZCBsb25nIHBsbDsKIAl1bnNpZ25lZCBsb25nIGZjbGs7CiAJdW5zaWduZWQgbG9uZyBoY2xrOwogCXVuc2lnbmVkIGxvbmcgcGNsazsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWludCByZXQ7Ci0JaW50IHB0cjsKIAotCS8qIHMzYzI0NDMgcGFyZW50cyBoIGFuZCBwIGNsb2NrcyBmcm9tIHByZWRpdiAqLwotCWNsa19oLnBhcmVudCA9ICZjbGtfcHJlZGl2OwotCWNsa19wLnBhcmVudCA9ICZjbGtfcHJlZGl2OworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOwogCiAJcGxsID0gczNjMjQ0M19nZXRfbXBsbChtcGxsY29uLCB4dGFsKTsKIAljbGtfbXN5c2Nsay5yYXRlID0gcGxsOwpAQCAtMTAzNiwxMyArMTAyMSwyOSBAQAogCWhjbGsgLz0gczNjMjQ0M19nZXRfaGRpdihjbGtkaXYwKTsKICAJcGNsayA9IGhjbGsgLyAoKGNsa2RpdjAgJiBTM0MyNDQzX0NMS0RJVjBfSEFMRl9QQ0xLKSA/IDIgOiAxKTsKIAotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKHh0YWwsIGZjbGssIGhjbGssIHBjbGspOworCXMzYzI0eHhfc2V0dXBfY2xvY2tzKGZjbGssIGhjbGssIHBjbGspOwogCiAJcHJpbnRrKCJTM0MyNDQzOiBtcGxsICVzICVsZC4lMDNsZCBNSHosIGNwdSAlbGQuJTAzbGQgTUh6LCBtZW0gJWxkLiUwM2xkIE1IeiwgcGNsayAlbGQuJTAzbGQgTUh6XG4iLAogCSAgICAgICAobXBsbGNvbiAmIFMzQzI0NDNfUExMQ09OX09GRikgPyAib2ZmIjoib24iLAogCSAgICAgICBwcmludF9taHoocGxsKSwgcHJpbnRfbWh6KGZjbGspLAogCSAgICAgICBwcmludF9taHooaGNsayksIHByaW50X21oeihwY2xrKSk7CiAKKwlzM2MyNHh4X3NldHVwX2Nsb2NrcyhmY2xrLCBoY2xrLCBwY2xrKTsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0M19pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCXVuc2lnbmVkIGxvbmcgZXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfRVBMTENPTik7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJLyogczNjMjQ0MyBwYXJlbnRzIGggYW5kIHAgY2xvY2tzIGZyb20gcHJlZGl2ICovCisJY2xrX2gucGFyZW50ID0gJmNsa19wcmVkaXY7CisJY2xrX3AucGFyZW50ID0gJmNsa19wcmVkaXY7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczNjMjQ0M19zZXR1cF9jbG9ja3MoKTsKIAlzM2MyNDQzX2Nsa19pbml0cGFyZW50cygpOwogCiAJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3MpOyBwdHIrKykgewpAQCAtMTA1Niw3ICsxMDU3LDcgQEAKIAl9CiAKIAljbGtfZXBsbC5yYXRlID0gczNjMjQ0M19nZXRfZXBsbChlcGxsY29uLCB4dGFsKTsKLQorCWNsa19lcGxsLnBhcmVudCA9ICZjbGtfZXBsbHJlZjsKIAljbGtfdXNiX2J1cy5wYXJlbnQgPSAmY2xrX3VzYl9idXNfaG9zdDsKIAogCS8qIGVuc3VyZSB1c2IgYnVzIGNsb2NrIGlzIHdpdGhpbiBjb3JyZWN0IHJhdGUgb2YgNDhNSHogKi8KQEAgLTExMDUsNCArMTEwNiw2IEBACiAKIAkJKGNsa3AtPmVuYWJsZSkoY2xrcCwgMCk7CiAJfQorCisJczNjX3B3bWNsa19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggZjczY2NiMi4uMmE1OGE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KQEAgLTI2LDEyICsyNSwxMiBAQAogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKICNkZWZpbmUgTUFQKHgpIHsgXAogCQlbMF0JPSAoeCkgfCBETUFfQ0hfVkFMSUQsCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCmluZGV4IGE3ZmU2NWYuLjAzOWE0NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAKICNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KICNpbmNsdWRlIDxwbGF0L3MzYzI0NDAuaD4KQEAgLTEwMyw4ICsxMDQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazI0NDNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2Vfd2R0LAotCSZzM2NfZGV2aWNlX2kyYywKLQkmczNjX2RldmljZV9oc21tYywKKwkmczNjX2RldmljZV9pMmMwLAorCSZzM2NfZGV2aWNlX2hzbW1jMCwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQ0M19tYXBfaW8odm9pZCkKQEAgLTExNiw2ICsxMTcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0NDNfbWFjaGluZV9pbml0KHZvaWQpCiB7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGsyNDQzX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazI0NDNfZGV2aWNlcykpOwogCXNtZGtfbWFjaGluZV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYwppbmRleCBiYmVkZGY5Li5jZTJlYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKQEAgLTgxLDEwICs4MSw5IEBACiAgKiBtYWNoaW5lIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uLgogICovCiAKLXZvaWQgX19pbml0IHMzYzI0NDNfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQordm9pZCBfX2luaXQgczNjMjQ0M19tYXBfaW8odm9pZCkKIHsKIAlpb3RhYmxlX2luaXQoczNjMjQ0M19pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQ0M19pb2Rlc2MpKTsKLQlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBtYWNoX3NpemUpOwogfQogCiAvKiBuZWVkIHRvIHJlZ2lzdGVyIGNsYXNzIGJlZm9yZSB3ZSBhY3R1YWxseSByZWdpc3RlciB0aGUgZGV2aWNlLCBhbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVmMGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBwdWxsIGluIHRoZSByZWxldmFudCByZWdpc3RlciBhbmQgbWFwIGZpbGVzLiAqLworCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKwkubWFjcm8gYWRkcnVhcnQsIHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCisJCWxkcmVxCVxyeCwgPSBTM0MyNFhYX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IFMzQzI0WFhfVkFfVUFSVAorI2lmIENPTkZJR19ERUJVR19TM0NfVUFSVCAhPSAwCisJCWFkZAlccngsIFxyeCwgIyhTM0MyNDEwX1VBUlQxX09GRiAqIENPTkZJR19ERUJVR19TM0NfVUFSVCkKKyNlbmRpZgorCS5lbmRtCisKKy8qIGluY2x1ZGUgdGhlIHJlc2V0IG9mIHRoZSBjb2RlIHdoaWNoIHdpbGwgZG8gdGhlIHdvcmssIHdlJ3JlIG9ubHkKKyAqIGNvbXBpbGluZyBmb3IgYSBzaW5nbGUgY3B1IHByb2Nlc3NvciB0eXBlIHNvIHRoZSBkZWZhdWx0IG9mIHMzYzI0NDAKKyAqIHdpbGwgYmUgZmluZSB3aXRoIHVzLgorICovCisKKyNpbmNsdWRlIDxwbGF0L2RlYnVnLW1hY3JvLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOGMwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDExNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisKKyNpZm5kZWYgX19BU01fQVJDSF8yNEEwX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIXzI0QTBfSVJRU19IIF9fRklMRV9fCisKKyNkZWZpbmUgSVJRX0VJTlQwdDIJUzNDMjQxMF9JUlEoMCkJLyogMTYgKi8KKy8qIGZvciBnZW5lcmljIGVudHJ5LW1hY3JvLlMgKi8KKyNkZWZpbmUgSVJRX0VJTlQwCUlSUV9FSU5UMHQyCisKKyNkZWZpbmUgSVJRX0VJTlQzdDYJUzNDMjQxMF9JUlEoMSkKKyNkZWZpbmUgSVJRX0VJTlQ3dDEwCVMzQzI0MTBfSVJRKDIpCisjZGVmaW5lIElSUV9FSU5UMTF0MTQJUzNDMjQxMF9JUlEoMykKKyNkZWZpbmUgSVJRX0VJTlQxNXQxOAlTM0MyNDEwX0lSUSg0KQkvKiAyMCAqLworI2RlZmluZSBJUlFfVElDSwlTM0MyNDEwX0lSUSg1KQorI2RlZmluZSBJUlFfRENUUQlTM0MyNDEwX0lSUSg2KQorI2RlZmluZSBJUlFfTUMJCVMzQzI0MTBfSVJRKDcpCisjZGVmaW5lIElSUV9NRQkJUzNDMjQxMF9JUlEoOCkJLyogMjQgKi8KKyNkZWZpbmUgSVJRX0tFWVBBRAlTM0MyNDEwX0lSUSg5KQorI2RlZmluZSBJUlFfVElNRVIwCVMzQzI0MTBfSVJRKDEwKQorI2RlZmluZSBJUlFfVElNRVIxCVMzQzI0MTBfSVJRKDExKQorI2RlZmluZSBJUlFfVElNRVIyCVMzQzI0MTBfSVJRKDEyKQorI2RlZmluZSBJUlFfVElNRVIzXzQJUzNDMjQxMF9JUlEoMTMpCisjZGVmaW5lIElSUV9PU19USU1FUglJUlFfVElNRVIzXzQKKyNkZWZpbmUgSVJRX0xDRAkJUzNDMjQxMF9JUlEoMTQpCisjZGVmaW5lIElSUV9DQU1fQwlTM0MyNDEwX0lSUSgxNSkKKyNkZWZpbmUgSVJRX1dEVF9CQVRGTFQJUzNDMjQxMF9JUlEoMTYpCS8qIDMyICovCisjZGVmaW5lIElSUV9VQVJUMAlTM0MyNDEwX0lSUSgxNykKKyNkZWZpbmUgSVJRX0NBTV9QCVMzQzI0MTBfSVJRKDE4KQorI2RlZmluZSBJUlFfTU9ERU0JUzNDMjQxMF9JUlEoMTkpCisjZGVmaW5lIElSUV9ETUEJCVMzQzI0MTBfSVJRKDIwKQorI2RlZmluZSBJUlFfU0RJCQlTM0MyNDEwX0lSUSgyMSkKKyNkZWZpbmUgSVJRX1NQSTAJUzNDMjQxMF9JUlEoMjIpCisjZGVmaW5lIElSUV9VQVJUMQlTM0MyNDEwX0lSUSgyMykKKyNkZWZpbmUgSVJRX0FDOTdfTkZMQVNICVMzQzI0MTBfSVJRKDI0KQkvKiA0MCAqLworI2RlZmluZSBJUlFfVVNCRAlTM0MyNDEwX0lSUSgyNSkKKyNkZWZpbmUgSVJRX1VTQkgJUzNDMjQxMF9JUlEoMjYpCisjZGVmaW5lIElSUV9JSUMJCVMzQzI0MTBfSVJRKDI3KQorI2RlZmluZSBJUlFfSVJEQV9NU1RJQ0sJUzNDMjQxMF9JUlEoMjgpCS8qIDQ0ICovCisjZGVmaW5lIElSUV9WTFhfU1BJMQlTM0MyNDEwX0lSUSgyOSkKKyNkZWZpbmUgSVJRX1JUQwkJUzNDMjQxMF9JUlEoMzApCS8qIDQ2ICovCisjZGVmaW5lIElSUV9BRENfUEVOICAgICBTM0MyNDEwX0lSUSgzMSkKKworLyogaW50ZXJydXB0cyBnZW5lcmF0ZWQgZnJvbSB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0cyBzb3VyY2VzICovCisjZGVmaW5lIElSUV9FSU5UMDAJUzNDMjQxMF9JUlEoMzIpCS8qIDQ4ICovCisjZGVmaW5lIElSUV9FSU5UMQlTM0MyNDEwX0lSUSgzMykKKyNkZWZpbmUgSVJRX0VJTlQyCVMzQzI0MTBfSVJRKDM0KQorI2RlZmluZSBJUlFfRUlOVDMJUzNDMjQxMF9JUlEoMzUpCisjZGVmaW5lIElSUV9FSU5UNAlTM0MyNDEwX0lSUSgzNikKKyNkZWZpbmUgSVJRX0VJTlQ1CVMzQzI0MTBfSVJRKDM3KQorI2RlZmluZSBJUlFfRUlOVDYJUzNDMjQxMF9JUlEoMzgpCisjZGVmaW5lIElSUV9FSU5UNwlTM0MyNDEwX0lSUSgzOSkKKyNkZWZpbmUgSVJRX0VJTlQ4CVMzQzI0MTBfSVJRKDQwKQorI2RlZmluZSBJUlFfRUlOVDkJUzNDMjQxMF9JUlEoNDEpCisjZGVmaW5lIElSUV9FSU5UMTAJUzNDMjQxMF9JUlEoNDIpCisjZGVmaW5lIElSUV9FSU5UMTEJUzNDMjQxMF9JUlEoNDMpCisjZGVmaW5lIElSUV9FSU5UMTIJUzNDMjQxMF9JUlEoNDQpCisjZGVmaW5lIElSUV9FSU5UMTMJUzNDMjQxMF9JUlEoNDUpCisjZGVmaW5lIElSUV9FSU5UMTQJUzNDMjQxMF9JUlEoNDYpCisjZGVmaW5lIElSUV9FSU5UMTUJUzNDMjQxMF9JUlEoNDcpCisjZGVmaW5lIElSUV9FSU5UMTYJUzNDMjQxMF9JUlEoNDgpCisjZGVmaW5lIElSUV9FSU5UMTcJUzNDMjQxMF9JUlEoNDkpCisjZGVmaW5lIElSUV9FSU5UMTgJUzNDMjQxMF9JUlEoNTApCisKKy8qIFNVQiBJUlFTICovCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMAkJUzNDMjQxMF9JUlEoNTEpCS8qIDY3ICovCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJUzNDMjQxMF9JUlEoNTIpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjAJUzNDMjQxMF9JUlEoNTMpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgxCQlTM0MyNDEwX0lSUSg1NCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgxCQlTM0MyNDEwX0lSUSg1NSkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMQlTM0MyNDEwX0lSUSg1NikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDIJCSgweDApCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMgkJKDB4MCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMgkoMHgwKQorCisKKyNkZWZpbmUgSVJRX0lSREEJUzNDMjQxMF9JUlEoNTcpCisjZGVmaW5lIElSUV9NU1RJQ0sJUzNDMjQxMF9JUlEoNTgpCisjZGVmaW5lIElSUV9SRVNFUlZFRDAJUzNDMjQxMF9JUlEoNTkpCisjZGVmaW5lIElSUV9SRVNFUlZFRDEJUzNDMjQxMF9JUlEoNjApCisjZGVmaW5lIElSUV9SRVNFUlZFRDIJUzNDMjQxMF9JUlEoNjEpCisjZGVmaW5lIElSUV9USU1FUjMJUzNDMjQxMF9JUlEoNjIpCisjZGVmaW5lIElSUV9USU1FUjQJUzNDMjQxMF9JUlEoNjMpCisjZGVmaW5lIElSUV9XRFQJCVMzQzI0MTBfSVJRKDY0KQorI2RlZmluZSBJUlFfQkFURkxUCVMzQzI0MTBfSVJRKDY1KQorI2RlZmluZSBJUlFfUE9TVAlTM0MyNDEwX0lSUSg2NikKKyNkZWZpbmUgSVJRX0RJU1BfRklGTwlTM0MyNDEwX0lSUSg2NykKKyNkZWZpbmUgSVJRX1BFTlVQCVMzQzI0MTBfSVJRKDY4KQorI2RlZmluZSBJUlFfUEVORE4JUzNDMjQxMF9JUlEoNjkpCisjZGVmaW5lIElSUV9BREMJCVMzQzI0MTBfSVJRKDcwKQorI2RlZmluZSBJUlFfRElTUF9GUkFNRQlTM0MyNDEwX0lSUSg3MSkKKyNkZWZpbmUgSVJRX05GTEFTSAlTM0MyNDEwX0lSUSg3MikKKyNkZWZpbmUgSVJRX0FDOTcJUzNDMjQxMF9JUlEoNzMpCisjZGVmaW5lIElSUV9TUEkxCVMzQzI0MTBfSVJRKDc0KQorI2RlZmluZSBJUlFfVkxYCQlTM0MyNDEwX0lSUSg3NSkKKyNkZWZpbmUgSVJRX0RNQTAJUzNDMjQxMF9JUlEoNzYpCisjZGVmaW5lIElSUV9ETUExCVMzQzI0MTBfSVJRKDc3KQorI2RlZmluZSBJUlFfRE1BMglTM0MyNDEwX0lSUSg3OCkKKyNkZWZpbmUgSVJRX0RNQTMJUzNDMjQxMF9JUlEoNzkpCisKKyNkZWZpbmUgSVJRX1RDCQkoMHgwKQorCisjZGVmaW5lIE5SX0lSUVMJCShJUlFfRE1BMysxKQorCisjZW5kaWYgLyogX19BU01fQVJDSF8yNEEwX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxMTMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTAsMCArMSw4NSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAyMDAzLDIwMDcgIFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNEEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfMjRBMF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIXzI0QTBfTUFQX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KKyNpbmNsdWRlIDxwbGF0L21hcC5oPgorCisjZGVmaW5lIFMzQzI0QTBfUEFfSU9fQkFTRQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9DTEtQV1IJKDB4NDAwMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfSVJRCQkoMHg0MDIwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9ETUEJCSgweDQwNDAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX01FTUNUUkwJKDB4NDBDMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfTkFORAkJKDB4NDBDMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfU1JPTQkJKDB4NDBDMjAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfU0RSQU0JKDB4NDBDNDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfQlVTTQkJKDB4NDBDRTAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfVVNCSE9TVAkoMHg0MTAwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9NT0RFTUlGCSgweDQxMTgwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX0lSREEJCSgweDQxODAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1RJTUVSCSgweDQ0MDAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1dBVENIRE9HCSgweDQ0MTAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1JUQwkJKDB4NDQyMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfVUFSVAkJKDB4NDQ0MDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfVUFSVDAJKFMzQzI0QTBfUEFfVUFSVCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9VQVJUMQkoUzNDMjRBMF9QQV9VQVJUICsgMHg0MDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1NQSQkJKDB4NDQ1MDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfSUlDCQkoMHg0NDYwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9JSVMJCSgweDQ0NzAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX0dQSU8JCSgweDQ0ODAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX0tFWUlGCSgweDQ0OTAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1VTQkRFVgkoMHg0NEEwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9BQzk3CQkoMHg0NTAwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9QQV9BREMJCSgweDQ1ODAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX1NESQkJKDB4NDYwMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfTVMJCSgweDQ2MTAwMDAwKQorI2RlZmluZSBTM0MyNEEwX1BBX0xDRAkJKDB4NEEwMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfUEFfVlBPU1QJKDB4NEExMDAwMDApCisKKy8qIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBhbGwgdGhlIGNoaXAtc2VsZWN0IGFyZWFzICovCisKKyNkZWZpbmUgUzNDMjRBMF9DUzAJKDB4MDAwMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfQ1MxCSgweDA0MDAwMDAwKQorI2RlZmluZSBTM0MyNEEwX0NTMgkoMHgwODAwMDAwMCkKKyNkZWZpbmUgUzNDMjRBMF9DUzMJKDB4MEMwMDAwMDApCisjZGVmaW5lIFMzQzI0QTBfQ1M0CSgweDEwMDAwMDAwKQorI2RlZmluZSBTM0MyNEEwX0NTNQkoMHg0MDAwMDAwMCkKKworI2RlZmluZSBTM0MyNEEwX1NEUkFNX1BBCShTM0MyNEEwX0NTNCkKKworLyogVXNlIGEgc2luZ2xlIGludGVyZmFjZSBmb3IgY29tbW9uIHJlc291cmNlcyBiZXR3ZWVuIFMzQzI0WFggY3B1cyAqLworCisjZGVmaW5lIFMzQzI0WFhfUEFfSVJRCQlTM0MyNEEwX1BBX0lSUQorI2RlZmluZSBTM0MyNFhYX1BBX01FTUNUUkwJUzNDMjRBMF9QQV9NRU1DVFJMCisjZGVmaW5lIFMzQzI0WFhfUEFfVVNCSE9TVAlTM0MyNEEwX1BBX1VTQkhPU1QKKyNkZWZpbmUgUzNDMjRYWF9QQV9ETUEJCVMzQzI0QTBfUEFfRE1BCisjZGVmaW5lIFMzQzI0WFhfUEFfQ0xLUFdSCVMzQzI0QTBfUEFfQ0xLUFdSCisjZGVmaW5lIFMzQzI0WFhfUEFfTENECQlTM0MyNEEwX1BBX0xDRAorI2RlZmluZSBTM0MyNFhYX1BBX1VBUlQJCVMzQzI0QTBfUEFfVUFSVAorI2RlZmluZSBTM0MyNFhYX1BBX1RJTUVSCVMzQzI0QTBfUEFfVElNRVIKKyNkZWZpbmUgUzNDMjRYWF9QQV9VU0JERVYJUzNDMjRBMF9QQV9VU0JERVYKKyNkZWZpbmUgUzNDMjRYWF9QQV9XQVRDSERPRwlTM0MyNEEwX1BBX1dBVENIRE9HCisjZGVmaW5lIFMzQzI0WFhfUEFfSUlTCQlTM0MyNEEwX1BBX0lJUworI2RlZmluZSBTM0MyNFhYX1BBX0dQSU8JCVMzQzI0QTBfUEFfR1BJTworI2RlZmluZSBTM0MyNFhYX1BBX1JUQwkJUzNDMjRBMF9QQV9SVEMKKyNkZWZpbmUgUzNDMjRYWF9QQV9BREMJCVMzQzI0QTBfUEFfQURDCisjZGVmaW5lIFMzQzI0WFhfUEFfU1BJCQlTM0MyNEEwX1BBX1NQSQorI2RlZmluZSBTM0MyNFhYX1BBX1NESQkJUzNDMjRBMF9QQV9TREkKKyNkZWZpbmUgUzNDMjRYWF9QQV9OQU5ECQlTM0MyNEEwX1BBX05BTkQKKworI2RlZmluZSBTM0NfUEFfVUFSVAkJUzNDMjRBMF9QQV9VQVJUCisjZGVmaW5lIFMzQ19QQV9JSUMJCVMzQzI0QTBfUEFfSUlDCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzI0QTBfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTIxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqICBmcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NywxOTk4IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIXzI0QTBfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF8yNEEwX01FTU9SWV9IIF9fRklMRV9fCisKKyNkZWZpbmUgUEhZU19PRkZTRVQgVUwoMHgxMDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmFiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDg4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0LDIwMDUsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQkgICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjRBMCBjbG9jayByZWdpc3RlciBkZWZpbml0aW9ucworKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIXzI0QTBfUkVHU19DTE9DS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfMjRBMF9SRUdTX0NMT0NLX0ggX19GSUxFX18KKworI2RlZmluZSBTM0MyNEEwX01QTExDT04JCVMzQzI0MTBfQ0xLUkVHKDB4MTApCisjZGVmaW5lIFMzQzI0QTBfVVBMTENPTgkJUzNDMjQxMF9DTEtSRUcoMHgxNCkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT04JCVMzQzI0MTBfQ0xLUkVHKDB4MjApCisjZGVmaW5lIFMzQzI0QTBfQ0xLU1JDCQlTM0MyNDEwX0NMS1JFRygweDI0KQorI2RlZmluZSBTM0MyNEEwX0NMS0RJVk4JCVMzQzI0MTBfQ0xLUkVHKDB4MjgpCisKKy8qIENMS0NPTiByZWdpc3RlciBiaXRzICovCisKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fVkxYCSgxPDwyOSkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fVlBPU1QJKDE8PDI4KQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9XRFQJKDE8PDI3KQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9NUEVHRENUUQkoMTw8MjYpCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX1ZQT1NUSUYJKDE8PDI1KQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9NUEVHNElGCSgxPDwyNCkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fQ0FNX1VQTEwJKDE8PDIzKQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9MQ0RDCSgxPDwyMikKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fQ0FNX0hDTEsJKDE8PDIxKQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9NUEVHNAkoMTw8MjApCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX0tFWVBBRAkoMTw8MTkpCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX0FEQwkoMTw8MTgpCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX1NESQkoMTw8MTcpCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX01TCSgxPDwxNikgLyogbWVtb3J5IHN0aWNrICovCisjZGVmaW5lIFMzQzI0QTBfQ0xLQ09OX1VTQkQJKDE8PDE1KQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9HUElPCSgxPDwxNCkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fSUlTCSgxPDwxMykKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fSUlDCSgxPDwxMikKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fU1BJCSgxPDwxMSkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fVUFSVDEJKDE8PDEwKQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9VQVJUMAkoMTw8OSkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fUFdNVAkoMTw8OCkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fVVNCSAkoMTw8NykKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fQUM5NwkoMTw8NikKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fSXJEQQkoMTw8NCkKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fSURMRQkoMTw8MikKKyNkZWZpbmUgUzNDMjRBMF9DTEtDT05fTU9OCSgxPDwxKQorI2RlZmluZSBTM0MyNEEwX0NMS0NPTl9TVE9QCSgxPDwwKQorCisvKiBDTEtTUkMgcmVnaXN0ZXIgYml0cyAqLworCisjZGVmaW5lIFMzQzI0QTBfQ0xLU1JDX09TQwkoMTw8OCkgIC8qIENMS1NSQyAqLworI2RlZmluZSBTM0MyNEEwX0NMS1NSQ19VUExMCSgxPDw3KQorI2RlZmluZSBTM0MyNEEwX0NMS1NSQ19NUExMCSgxPDw1KQorI2RlZmluZSBTM0MyNEEwX0NMS1NSQ19FWFQJKDE8PDQpCisKKy8qIFVzZSBhIHNpbmdsZSBpbnRlcmZhY2Ugd2l0aCB0aGUgY29tbW9uIGNvZGUsIGZvciBzM2MyNHh4ICovCisKKyNkZWZpbmUgUzNDMjQxMF9NUExMQ09OCQlTM0MyNEEwX01QTExDT04KKyNkZWZpbmUgUzNDMjQxMF9VUExMQ09OCQlTM0MyNEEwX1VQTExDT04KKyNkZWZpbmUgUzNDMjQxMF9DTEtDT04JCVMzQzI0QTBfQ0xLQ09OCisjZGVmaW5lIFMzQzI0MTBfQ0xLU0xPVwkJUzNDMjRBMF9DTEtTUkMKKyNkZWZpbmUgUzNDMjQxMF9DTEtESVZOCQlTM0MyNEEwX0NMS0RJVk4KKworI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9JRExFCVMzQzI0QTBfQ0xLQ09OX0lETEUKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fUE9XRVIJUzNDMjRBMF9DTEtDT05fU1RPUAorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9MQ0RDCVMzQzI0QTBfQ0xLQ09OX0xDREMKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fVVNCSAlTM0MyNEEwX0NMS0NPTl9VU0JICisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX1VTQkQJUzNDMjRBMF9DTEtDT05fVVNCRAorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9QV01UCVMzQzI0QTBfQ0xLQ09OX1BXTVQKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fU0RJCVMzQzI0QTBfQ0xLQ09OX1NESQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9VQVJUMAlTM0MyNEEwX0NMS0NPTl9VQVJUMAorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9VQVJUMQlTM0MyNEEwX0NMS0NPTl9VQVJUMQorI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9HUElPCVMzQzI0QTBfQ0xLQ09OX0dQSU8KKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fQURDCVMzQzI0QTBfQ0xLQ09OX0FEQworI2RlZmluZSBTM0MyNDEwX0NMS0NPTl9JSUMJUzNDMjRBMF9DTEtDT05fSUlDCisjZGVmaW5lIFMzQzI0MTBfQ0xLQ09OX0lJUwlTM0MyNEEwX0NMS0NPTl9JSVMKKyNkZWZpbmUgUzNDMjQxMF9DTEtDT05fU1BJCVMzQzI0QTBfQ0xLQ09OX1NQSQorCisjZGVmaW5lIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRglTM0MyNEEwX0NMS1NSQ19VUExMCisjZGVmaW5lIFMzQzI0MTBfQ0xLU0xPV19NUExMX09GRglTM0MyNEEwX0NMS1NSQ19NUExMCisjZGVmaW5lIFMzQzI0MTBfQ0xLU0xPV19TTE9XCQkoMHhGRikKKyNkZWZpbmUgUzNDMjQxMF9DTEtTTE9XX0dFVF9TTE9XVkFMKHgpCSgweDEpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzI0QTBfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4NmY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDI1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworCisjaWZuZGVmIF9fX0FTTV9BUkNIXzI0QTBfUkVHU19JUlFfSAorI2RlZmluZSBfX19BU01fQVJDSF8yNEEwX1JFR1NfSVJRX0ggX19GSUxFX18KKworCisjZGVmaW5lIFMzQzI0MTBfRUlOVE1BU0sJUzNDMjQxMF9FSU5UUkVHKDB4MDM0KQorI2RlZmluZSBTM0MyNDEwX0VJTlRQRU5ECVMzQzI0MTBfRUlOVFJFRygwWDAzOCkKKworI2RlZmluZSBTM0MyNFhYX0VJTlRNQVNLCVMzQzI0WFhfRUlOVFJFRygweDAzNCkKKyNkZWZpbmUgUzNDMjRYWF9FSU5UUEVORAlTM0MyNFhYX0VJTlRSRUcoMFgwMzgpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzI0QTBfUkVHU19JUlFfSCAqLworCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxYmQxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0QTAgLSBTeXN0ZW0gZnVuY3Rpb24gZGVmaW5lcyBhbmQgaW5jbHVkZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCS8qIGN1cnJlbnRseSBubyBzcGVjaWZpYyBpZGxlIHN1cHBvcnQuICovCit9CisKK3ZvaWQgKCpzM2MyNHh4X3Jlc2V0X2hvb2spKHZvaWQpOworCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zeXN0ZW0tcmVzZXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGljay5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC90aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlYThiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGljay5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGljay5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MyNEEwIC0gdGltZXIgdGljayBzdXBwb3J0CisgKi8KKworI2RlZmluZSBTVUJTUkNfVElNRVI0CSgxIDw8IChJUlFfVElNRVI0IC0gSVJRX1MzQ1VBUlRfUlgwKSkKKworc3RhdGljIGlubGluZSBpbnQgczNjMjR4eF9vc3RpbWVyX3BlbmRpbmcodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoUzNDMjQxMF9TVUJTUkNQTkQpICYgU1VCU1JDX1RJTUVSNDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODU3MzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gdGltZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAxMjAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGZlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDE3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNGFvL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0QTAgdm1hbGxvYyBkZWZpbml0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTgyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyMJU2ltdGVjIEVsZWN0cm9uaWNzLCBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKKyMgQ3VycmVudGx5IG5vdGhpbmcgaGVyZSwgdGhpcyB3aWxsIGJlIGFkZGVkIGxhdGVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzOTdkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjIGFyY2gvYXJtL21hY2gtczNjNjQwMC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorIyBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCisjIENvcmUgc3VwcG9ydCBmb3IgUzNDNjQwMCBzeXN0ZW0KKworb2JqLW4JCQkJKz0gYmxhbmsubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxZmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4NTAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHg1MDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGFjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzOSBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogcHVsbCBpbiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgYW5kIG1hcCBmaWxlcy4gKi8KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisJLyogbm90ZSwgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gd29yayB3ZSBoYXZlIHRvIGtlZXAgdGhlIFVBUlQKKwkgKiB2aXJ0dWFsIGFkZHJlc3MgYWxpZ25lZCB0byBhbiAxTWlCIGJvdW5kYXJ5IGZvciB0aGUgTDEKKwkgKiBtYXBwaW5nIHRoZSBoZWFkIGNvZGUgbWFrZXMuIFdlIGtlZXAgdGhlIFVBUlQgdmlydHVhbCBhZGRyZXNzCisJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgorCSAqLworCisJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IChTM0NfVkFfVUFSVCArIFMzQ19QQV9VQVJUICYgMHhmZmZmZikKKyNpZiBDT05GSUdfREVCVUdfUzNDX1VBUlQgIT0gMAorCQlhZGQJXHJ4LCBccngsICMoMHg0MDAgKiBDT05GSUdfREVCVUdfUzNDX1VBUlQpCisjZW5kaWYKKwkuZW5kbQorCisvKiBpbmNsdWRlIHRoZSByZXNldCBvZiB0aGUgY29kZSB3aGljaCB3aWxsIGRvIHRoZSB3b3JrLCB3ZSdyZSBvbmx5CisgKiBjb21waWxpbmcgZm9yIGEgc2luZ2xlIGNwdSBwcm9jZXNzb3IgdHlwZSBzbyB0aGUgZGVmYXVsdCBvZiBzM2MyNDQwCisgKiB3aWxsIGJlIGZpbmUgd2l0aCB1cy4KKyAqLworCisjaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MWFjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSwxNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0MDAgLSBETUEgc3VwcG9ydAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSBub3RoaW5nIGhlcmUsIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkOTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDQ0IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgdGhlIFNhbXN1bmcgUzNDNjRYWCBzZXJpZXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1TM0NfVkFfVklDMAorCS5lbmRtCisKKwkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwlAIGNoZWNrIHRoZSB2aWMwCisJbW92CVxpcnFuciwgIyBTM0NfSVJRX09GRlNFVCArIDMxCisJbGRyCVxpcnFzdGF0LCBbIFxiYXNlLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXEJXGlycXN0YXQsICMwCisKKwlAIG90aGVyd2lzZSB0cnkgdmljMQorCWFkZGVxCVx0bXAsIFxiYXNlLCAjKFMzQ19WQV9WSUMxIC0gUzNDX1ZBX1ZJQzApCisJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMzMgorCWxkcmVxCVxpcnFzdGF0LCBbIFx0bXAsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcWVxCVxpcnFzdGF0LCAjMAorCisJY2x6bmUJXGlycXN0YXQsIFxpcnFzdGF0CisJc3VibmUJXGlycW5yLCBcaXJxbnIsIFxpcnFzdGF0CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OWFhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gR1BJTyBjb3JlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0ggX19GSUxFX18KKworLyogY3VycmVudGx5IHdlIGp1c3QgaW5jbHVkZSB0aGUgcGxhdGZvcm0gc3VwcG9ydCAqLworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDk2IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjQwMCAtIEdQSU8gbGliIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQorCisvKiBHUElPIGJhbmsgc2l6ZXMgKi8KKyNkZWZpbmUgUzNDNjRYWF9HUElPX0FfTlIJKDgpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19CX05SCSg3KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fQ19OUgkoOCkKKyNkZWZpbmUgUzNDNjRYWF9HUElPX0RfTlIJKDUpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19FX05SCSg1KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fRl9OUgkoMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19HX05SCSg3KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fSF9OUgkoMTApCisjZGVmaW5lIFMzQzY0WFhfR1BJT19JX05SCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9HUElPX0pfTlIJKDEyKQorI2RlZmluZSBTM0M2NFhYX0dQSU9fS19OUgkoMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19MX05SCSgxNSkKKyNkZWZpbmUgUzNDNjRYWF9HUElPX01fTlIJKDYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19OX05SCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9HUElPX09fTlIJKDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fUF9OUgkoMTUpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19RX05SCSg5KQorCisvKiBHUElPIGJhbmsgbnVtYmVzICovCisKKy8qIENPTkZJR19TM0NfR1BJT19TUEFDRSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGV4dHJhCisgKiBzcGFjZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHRoYXQgYW55IGFjY2lkZW50YWwKKyAqIGNoYW5nZSBmcm9tIG9uZSBncGlvIGJhbmsgdG8gYW5vdGhlciBjYW4gYmUgY2F1Z2h0LgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQSU9fTkVYVChfX2dwaW8pIFwKKwkoKF9fZ3BpbyMjX1NUQVJUKSArIChfX2dwaW8jI19OUikgKyBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgKyAxKQorCitlbnVtIHMzY19ncGlvX251bWJlciB7CisJUzNDNjRYWF9HUElPX0FfU1RBUlQgPSAwLAorCVMzQzY0WFhfR1BJT19CX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0EpLAorCVMzQzY0WFhfR1BJT19DX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0IpLAorCVMzQzY0WFhfR1BJT19EX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0MpLAorCVMzQzY0WFhfR1BJT19FX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0QpLAorCVMzQzY0WFhfR1BJT19GX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0UpLAorCVMzQzY0WFhfR1BJT19HX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0YpLAorCVMzQzY0WFhfR1BJT19IX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0cpLAorCVMzQzY0WFhfR1BJT19JX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0gpLAorCVMzQzY0WFhfR1BJT19KX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0kpLAorCVMzQzY0WFhfR1BJT19LX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0opLAorCVMzQzY0WFhfR1BJT19MX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0spLAorCVMzQzY0WFhfR1BJT19NX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0wpLAorCVMzQzY0WFhfR1BJT19OX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX00pLAorCVMzQzY0WFhfR1BJT19PX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX04pLAorCVMzQzY0WFhfR1BJT19QX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX08pLAorCVMzQzY0WFhfR1BJT19RX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX1ApLAorfTsKKworLyogUzNDNjRYWCBHUElPIG51bWJlciBkZWZpbml0aW9ucy4gKi8KKworI2RlZmluZSBTM0M2NFhYX0dQQShfbnIpCShTM0M2NFhYX0dQSU9fQV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQQihfbnIpCShTM0M2NFhYX0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQQyhfbnIpCShTM0M2NFhYX0dQSU9fQ19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRChfbnIpCShTM0M2NFhYX0dQSU9fRF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRShfbnIpCShTM0M2NFhYX0dQSU9fRV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRihfbnIpCShTM0M2NFhYX0dQSU9fRl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRyhfbnIpCShTM0M2NFhYX0dQSU9fR19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSChfbnIpCShTM0M2NFhYX0dQSU9fSF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSShfbnIpCShTM0M2NFhYX0dQSU9fSV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSihfbnIpCShTM0M2NFhYX0dQSU9fSl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSyhfbnIpCShTM0M2NFhYX0dQSU9fS19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTChfbnIpCShTM0M2NFhYX0dQSU9fTF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTShfbnIpCShTM0M2NFhYX0dQSU9fTV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTihfbnIpCShTM0M2NFhYX0dQSU9fTl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTyhfbnIpCShTM0M2NFhYX0dQSU9fT19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQUChfbnIpCShTM0M2NFhYX0dQSU9fUF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQUShfbnIpCShTM0M2NFhYX0dQSU9fUV9TVEFSVCArIChfbnIpKQorCisvKiB0aGUgZW5kIG9mIHRoZSBTM0M2NFhYIHNwZWNpZmljIGdwaW9zICovCisjZGVmaW5lIFMzQzY0WFhfR1BJT19FTkQJKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJUzNDNjRYWF9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQUSgpIHJhbmdlICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyZDAzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDE2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NDAwIC0gSGFyZHdhcmUgc3VwcG9ydAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSCBfX0ZJTEVfXworCisvKiBjdXJyZW50bHkgbm90aGluZyBoZXJlLCBwbGFjZWhvbGRlciAqLworCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzhjNDdjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwyMCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NDAwIC0gSVJRIGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSCBfX0ZJTEVfXworCisjaWZuZGVmIF9fQVNNX0FSTV9JUlFfSAorI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxhc20vaXJxLmg+IgorI2VuZGlmCisKKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjI3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0WFggLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01BUF9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CisKKy8qIEhTTU1DIHVuaXRzICovCisjZGVmaW5lIFMzQzY0WFhfUEFfSFNNTUMoeCkJKDB4N0MyMDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQorI2RlZmluZSBTM0M2NFhYX1BBX0hTTU1DMAlTM0M2NFhYX1BBX0hTTU1DKDApCisjZGVmaW5lIFMzQzY0WFhfUEFfSFNNTUMxCVMzQzY0WFhfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDNjRYWF9QQV9IU01NQzIJUzNDNjRYWF9QQV9IU01NQygyKQorCisjZGVmaW5lIFMzQ19QQV9VQVJUCQkoMHg3RjAwNTAwMCkKKyNkZWZpbmUgUzNDX1BBX1VBUlQwCQkoUzNDX1BBX1VBUlQgKyAweDAwKQorI2RlZmluZSBTM0NfUEFfVUFSVDEJCShTM0NfUEFfVUFSVCArIDB4NDAwKQorI2RlZmluZSBTM0NfUEFfVUFSVDIJCShTM0NfUEFfVUFSVCArIDB4ODAwKQorI2RlZmluZSBTM0NfUEFfVUFSVDMJCShTM0NfUEFfVUFSVCArIDB4QzAwKQorI2RlZmluZSBTM0NfVUFSVF9PRkZTRVQJCSgweDQwMCkKKworLyogU2VlIG5vdGVzIG9uIFVBUlQgVkEgbWFwcGluZyBpbiBkZWJ1Zy1tYWNyby5TICovCisjZGVmaW5lIFMzQ19WQV9VQVJUeCh4KQkoUzNDX1ZBX1VBUlQgKyAoUzNDX1BBX1VBUlQgJiAweGZmZmZmKSArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorCisjZGVmaW5lIFMzQ19WQV9VQVJUMAkJUzNDX1ZBX1VBUlR4KDApCisjZGVmaW5lIFMzQ19WQV9VQVJUMQkJUzNDX1ZBX1VBUlR4KDEpCisjZGVmaW5lIFMzQ19WQV9VQVJUMgkJUzNDX1ZBX1VBUlR4KDIpCisjZGVmaW5lIFMzQ19WQV9VQVJUMwkJUzNDX1ZBX1VBUlR4KDMpCisKKyNkZWZpbmUgUzNDNjRYWF9QQV9GQgkJKDB4NzcxMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfU1lTQ09OCSgweDdFMDBGMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1RJTUVSCSgweDdGMDA2MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJQzAJCSgweDdGMDA0MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJQzEJCSgweDdGMDBGMDAwKQorCisjZGVmaW5lIFMzQzY0WFhfUEFfR1BJTwkJKDB4N0YwMDgwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfR1BJTwkJUzNDX0FERFIoMHgwMDUwMDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9TWl9HUElPCQlTWl80SworCisjZGVmaW5lIFMzQzY0WFhfUEFfU0RSQU0JKDB4NTAwMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfVklDMAkJKDB4NzEyMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfVklDMQkJKDB4NzEzMDAwMDApCisKKy8qIHBsYWNlIFZJQ3MgY2xvc2UgdG9nZXRoZXIgKi8KKyNkZWZpbmUgUzNDX1ZBX1ZJQzAJCShTM0NfVkFfSVJRICsgMHgwMCkKKyNkZWZpbmUgUzNDX1ZBX1ZJQzEJCShTM0NfVkFfSVJRICsgMHgxMDAwMCkKKworLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLworI2RlZmluZSBTM0NfUEFfVElNRVIJCVMzQzY0WFhfUEFfVElNRVIKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJUzNDNjRYWF9QQV9IU01NQzAKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzNDNjRYWF9QQV9IU01NQzEKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzNDNjRYWF9QQV9IU01NQzIKKyNkZWZpbmUgUzNDX1BBX0lJQwkJUzNDNjRYWF9QQV9JSUMwCisjZGVmaW5lIFMzQ19QQV9JSUMxCQlTM0M2NFhYX1BBX0lJQzEKKyNkZWZpbmUgUzNDX1BBX0ZCCQlTM0M2NFhYX1BBX0ZCCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzY0MDBfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYWM4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2RlZmluZSBQSFlTX09GRlNFVCAgICAgVUwoMHg1MDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjViZWRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApAQCAtMCwwICsxLDU2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjR4eCAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAorICovCisKKy8qKgorICogcHdtX2NmZ19zcmNfaXNfdGNsaygpIC0gcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG11eCBjb25maWcgaXMgYSB0Y2xrCisgKiBAdGNmZzogVGhlIHRpbWVyIFRDRkcxIHJlZ2lzdGVyIGJpdHMgc2hpZnRlZCBkb3duIHRvIDAuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gZnJvbSBUQ0ZHMSBpcyBhIFRDTEsgaW5zdGVhZAorICogYW55IG9mIHRoZSBURElWIGNsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHdtX2NmZ19zcmNfaXNfdGNsayh1bnNpZ25lZCBsb25nIHRjZmcpCit7CisJcmV0dXJuIHRjZmcgPj0gUzNDNjRYWF9UQ0ZHMV9NVVhfVENMSzsKK30KKworLyoqCisgKiB0Y2ZnX3RvX2Rpdmlzb3IoKSAtIGNvbnZlcnQgdGNmZzEgc2V0dGluZyB0byBhIGRpdmlzb3IKKyAqIEB0Y2ZnMTogVGhlIHRjZmcxIHNldHRpbmcsIHNoaWZ0ZWQgZG93bi4KKyAqCisgKiBHZXQgdGhlIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBnaXZlbiB0Y2ZnMSBzZXR0aW5nLiBXZSBhc3N1bWUgdGhlCisgKiBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0byBzZWUgaWYgdGhpcyBpcyBub3QgYSBUQ0xLIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjZmdfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIHRjZmcxKQoreworCXJldHVybiAxIDw8IHRjZmcxOworfQorCisvKioKKyAqIHB3bV90ZGl2X2hhc19kaXYxKCkgLSBkb2VzIHRoZSB0ZGl2IHNldHRpbmcgaGF2ZSBhIC8xCisgKgorICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIC8xIGluIHRoZSB0ZGl2IHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB3bV90ZGl2X2hhc19kaXYxKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcHdtX3RkaXZfZGl2X2JpdHMoKSAtIGNhbGN1bGF0ZSBUQ0ZHMSBkaXZpc29yIHZhbHVlLgorICogQGRpdjogVGhlIGRpdmlzb3IgdG8gY2FsY3VsYXRlIHRoZSBiaXQgaW5mb3JtYXRpb24gZm9yLgorICoKKyAqIFR1cm4gYSBkaXZpc29yIGludG8gdGhlIG5lY2Vzc2FyeSBiaXQgZmllbGQgZm9yIFRDRkcxLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHdtX3RkaXZfZGl2X2JpdHModW5zaWduZWQgaW50IGRpdikKK3sKKwlyZXR1cm4gaWxvZzIoZGl2KTsKK30KKworI2RlZmluZSBTM0NfVENGRzFfTVVYX1RDTEsgUzNDNjRYWF9UQ0ZHMV9NVVhfVENMSwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9yZWdzLWZiLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAxOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9yZWdzLWZiLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjRYWCAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKKyAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBhbmQgc3BlY2lmaWNhbGx5IHRoZSBTM0M2NFhYIHNlcmllcworICogUzNDNjQwMCBhbmQgUzNDNjQxMC4KKyAqCisgKiBUaGUgZmlsZSBjb250YWlucyB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGNoYW5nZSBiZXR3ZWVuIHdoaWNoZXZlcgorICogYXJjaGl0ZWN0dXJlIGlzIHNlbGVjdGVkLiBTZWUgPHBsYXQvcmVncy1mYi5oPiBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMKKyAqIHRoYXQgYXJlIHRoZSBzYW1lLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBpbmNsdWRlIHRoZSBjb3JlIGRlZmluaXRpb25zIGhlcmUsIGluIGNhc2Ugd2UgcmVhbGx5IGRvIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZW0gYXQgYSBsYXRlciBkYXRlLgorKi8KKworI2luY2x1ZGUgPHBsYXQvcmVncy1mYi5oPgorCisjZGVmaW5lIFMzQ19GQl9NQVhfV0lOICg1KSAgLyogbnVtYmVyIG9mIGhhcmR3YXJlIHdpbmRvd3MgYXZhaWxhYmxlLiAqLworI2RlZmluZSBWSURDT04xX0ZTVEFUVVNfRVZFTgkoMSA8PCAxNSkKKworLyogVmlkZW8gdGltaW5nIGNvbnRyb2xzICovCisjZGVmaW5lIFZJRFRDT04wCQkJCSgweDEwKQorI2RlZmluZSBWSURUQ09OMQkJCQkoMHgxNCkKKyNkZWZpbmUgVklEVENPTjIJCQkJKDB4MTgpCisKKy8qIFdpbmRvdyBwb3NpdGlvbiBjb250cm9scyAqLworCisjZGVmaW5lIFdJTkNPTihfd2luKQkJCQkoMHgyMCArICgoX3dpbikgKiA0KSkKKworLyogT1NEMSBhbmQgT1NENCBkbyBub3QgaGF2ZSByZWdpc3RlciBEICovCisKKyNkZWZpbmUgVklET1NEX0EoX3dpbikJCQkJKDB4NDAgKyAoKF93aW4pICogMTYpKQorI2RlZmluZSBWSURPU0RfQihfd2luKQkJCQkoMHg0NCArICgoX3dpbikgKiAxNikpCisjZGVmaW5lIFZJRE9TRF9DKF93aW4pCQkJCSgweDQ4ICsgKChfd2luKSAqIDE2KSkKKyNkZWZpbmUgVklET1NEX0QoX3dpbikJCQkJKDB4NEMgKyAoKF93aW4pICogMTYpKQorCisvKiBWaWRlbyBidWZmZXIgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgVklEV19CVUZfU1RBUlQoX2J1ZmYpCQkJKDB4QTAgKyAoKF9idWZmKSAqIDgpKQorI2RlZmluZSBWSURXX0JVRl9TVEFSVDEoX2J1ZmYpCQkJKDB4QTQgKyAoKF9idWZmKSAqIDgpKQorI2RlZmluZSBWSURXX0JVRl9FTkQoX2J1ZmYpCQkJKDB4RDAgKyAoKF9idWZmKSAqIDgpKQorI2RlZmluZSBWSURXX0JVRl9FTkQxKF9idWZmKQkJCSgweEQ0ICsgKChfYnVmZikgKiA4KSkKKyNkZWZpbmUgVklEV19CVUZfU0laRShfYnVmZikJCQkoMHgxMDAgKyAoKF9idWZmKSAqIDQpKQorCisjZGVmaW5lIFZJRElOVENPTjAJCQkJKDB4MTMwKQorCisjZGVmaW5lIFd4S0VZQ09OeShfd2luLCBfY29uKQkJCSgoMHgxNDAgKyAoKF93aW4pICogOCkpICsgKChfY29uKSAqIDQpKQorCisvKiBXSU5DT054ICovCisKKyNkZWZpbmUgV0lOQ09OeF9DU0NXSURUSF9NQVNLCQkJKDB4MyA8PCAyNikKKyNkZWZpbmUgV0lOQ09OeF9DU0NXSURUSF9TSElGVAkJCSgyNikKKyNkZWZpbmUgV0lOQ09OeF9DU0NXSURUSF9XSURFCQkJKDB4MCA8PCAyNikKKyNkZWZpbmUgV0lOQ09OeF9DU0NXSURUSF9OQVJST1cJCQkoMHgzIDw8IDI2KQorCisjZGVmaW5lIFdJTkNPTnhfRU5MT0NBTAkJCQkoMSA8PCAyMikKKyNkZWZpbmUgV0lOQ09OeF9CVUZTVEFUVVMJCQkoMSA8PCAyMSkKKyNkZWZpbmUgV0lOQ09OeF9CVUZTRUwJCQkJKDEgPDwgMjApCisjZGVmaW5lIFdJTkNPTnhfQlVGQVVUT0VOCQkJKDEgPDwgMTkpCisjZGVmaW5lIFdJTkNPTnhfWUNiQ3IJCQkJKDEgPDwgMTMpCisKKyNkZWZpbmUgV0lOQ09OMV9MT0NBTFNFTF9DQU1JRgkJCSgxIDw8IDIzKQorCisjZGVmaW5lIFdJTkNPTjJfTE9DQUxTRUxfQ0FNSUYJCQkoMSA8PCAyMykKKyNkZWZpbmUgV0lOQ09OMl9CTERfUElYCQkJCSgxIDw8IDYpCisKKyNkZWZpbmUgV0lOQ09OMl9BTFBIQV9TRUwJCQkoMSA8PCAxKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfTUFTSwkJCSgweGYgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFX1NISUZUCQkJKDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8xQlBQCQkJKDB4MCA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMkJQUAkJCSgweDEgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzRCUFAJCQkoMHgyIDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV84QlBQXzEyMzIJCSgweDQgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMTZCUFBfQTE1NTUJCSgweDYgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE2QlBQX0kxNTU1CQkoMHg3IDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8xOEJQUF82NjYJCSgweDggPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE4QlBQX0ExNjY1CQkoMHg5IDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8xOUJQUF9BMTY2NgkJKDB4YSA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMjRCUFBfODg4CQkoMHhiIDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yNEJQUF9BMTg4NwkJKDB4YyA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMjVCUFBfQTE4ODgJCSgweGQgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzI4QlBQX0E0ODg4CQkoMHhkIDw8IDIpCisKKyNkZWZpbmUgV0lOQ09OM19CTERfUElYCQkJCSgxIDw8IDYpCisKKyNkZWZpbmUgV0lOQ09OM19BTFBIQV9TRUwJCQkoMSA8PCAxKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfTUFTSwkJCSgweGYgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFX1NISUZUCQkJKDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xQlBQCQkJKDB4MCA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMkJQUAkJCSgweDEgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzRCUFAJCQkoMHgyIDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xNkJQUF81NjUJCSgweDUgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE2QlBQX0ExNTU1CQkoMHg2IDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xNkJQUF9JMTU1NQkJKDB4NyA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xOEJQUF9BMTY2NQkJKDB4OSA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMTlCUFBfQTE2NjYJCSgweGEgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzI0QlBQXzg4OAkJKDB4YiA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMjRCUFBfQTE4ODcJCSgweGMgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzI1QlBQX0ExODg4CQkoMHhkIDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8yOEJQUF9BNDg4OAkJKDB4ZCA8PCAyKQorCisjZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfV0lORE9XMgkJKDB4MTAgPDwgNSkKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1czCQkoMHgyMCA8PCA1KQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzQJCSgweDQwIDw8IDUpCisKKyNkZWZpbmUgRElUSE1PREUJCQkJKDB4MTcwKQorI2RlZmluZSBXSU54TUFQKF93aW4pCQkJCSgweDE4MCArICgoX3dpbikgKiA0KSkKKworCisjZGVmaW5lIERJVEhNT0RFX1JfUE9TX01BU0sJCQkoMHgzIDw8IDUpCisjZGVmaW5lIERJVEhNT0RFX1JfUE9TX1NISUZUCQkJKDUpCisjZGVmaW5lIERJVEhNT0RFX1JfUE9TXzhCSVQJCQkoMHgwIDw8IDUpCisjZGVmaW5lIERJVEhNT0RFX1JfUE9TXzZCSVQJCQkoMHgxIDw8IDUpCisjZGVmaW5lIERJVEhNT0RFX1JfUE9TXzVCSVQJCQkoMHgyIDw8IDUpCisKKyNkZWZpbmUgRElUSE1PREVfR19QT1NfTUFTSwkJCSgweDMgPDwgMykKKyNkZWZpbmUgRElUSE1PREVfR19QT1NfU0hJRlQJCQkoMykKKyNkZWZpbmUgRElUSE1PREVfR19QT1NfOEJJVAkJCSgweDAgPDwgMykKKyNkZWZpbmUgRElUSE1PREVfR19QT1NfNkJJVAkJCSgweDEgPDwgMykKKyNkZWZpbmUgRElUSE1PREVfR19QT1NfNUJJVAkJCSgweDIgPDwgMykKKworI2RlZmluZSBESVRITU9ERV9CX1BPU19NQVNLCQkJKDB4MyA8PCAxKQorI2RlZmluZSBESVRITU9ERV9CX1BPU19TSElGVAkJCSgxKQorI2RlZmluZSBESVRITU9ERV9CX1BPU184QklUCQkJKDB4MCA8PCAxKQorI2RlZmluZSBESVRITU9ERV9CX1BPU182QklUCQkJKDB4MSA8PCAxKQorI2RlZmluZSBESVRITU9ERV9CX1BPU181QklUCQkJKDB4MiA8PCAxKQorCisjZGVmaW5lIERJVEhNT0RFX0RJVEhfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIFdQQUxDT04JCQkJCSgweDFBMCkKKworI2RlZmluZSBXUEFMQ09OX1c0UEFMXzE2QlBQX0E1NTUJCSgxIDw8IDgpCisjZGVmaW5lIFdQQUxDT05fVzNQQUxfMTZCUFBfQTU1NQkJKDEgPDwgNykKKyNkZWZpbmUgV1BBTENPTl9XMlBBTF8xNkJQUF9BNTU1CQkoMSA8PCA2KQorCisvKiBQYWxldHRlIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFdJTjJfUEFMKF9lbnRyeSkJCQkoMHgzMDAgKyAoKF9lbnRyeSkgKiAyKSkKKyNkZWZpbmUgV0lOM19QQUwoX2VudHJ5KQkJCSgweDMyMCArICgoX2VudHJ5KSAqIDIpKQorI2RlZmluZSBXSU40X1BBTChfZW50cnkpCQkJKDB4MzQwICsgKChfZW50cnkpICogMikpCisjZGVmaW5lIFdJTjBfUEFMKF9lbnRyeSkJCQkoMHg0MDAgKyAoKF9lbnRyeSkgKiA0KSkKKyNkZWZpbmUgV0lOMV9QQUwoX2VudHJ5KQkJCSgweDgwMCArICgoX2VudHJ5KSAqIDQpKQorCisvKiBzeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY29kZSBmb3IgcGFsZXR0ZSBzaXplcywgYW5kIG90aGVyCisgKiBpbmZvcm1hdGlvbiB0aGF0IGNoYW5nZXMgZGVwZW5kaW5nIG9uIHdoaWNoIGFyY2hpdGVjdHVyZSBpcyBiZWluZworICogY29tcGlsZWQuCisqLworCisvKiByZXR1cm4gdHJ1ZSBpZiB3aW5kb3cgX3dpbiBoYXMgT1NEIHJlZ2lzdGVyIEQgKi8KKyNkZWZpbmUgczNjX2ZiX2hhc19vc2RfZChfd2luKSAoKF93aW4pICE9IDQgJiYgKF93aW4pICE9IDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzY19mYl93aW5fcGFsX3NpemUodW5zaWduZWQgaW50IHdpbikKK3sKKwlpZiAod2luIDwgMikKKwkJcmV0dXJuIDI1NjsKKwlpZiAod2luIDwgNCkKKwkJcmV0dXJuIDE2OworCWlmICh3aW4gPT0gNCkKKwkJcmV0dXJuIDQ7CisKKwlCVUcoKTsJLyogc2hvdWxkbid0IGdldCBoZXJlICovCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19mYl92YWxpZGF0ZV93aW5fYnBwKHVuc2lnbmVkIGludCB3aW4sIHVuc2lnbmVkIGludCBicHApCit7CisJLyogYWxsIHdpbmRvd3MgY2FuIGRvIDEvMiBicHAgKi8KKworCWlmICgoYnBwID09IDI1IHx8IGJwcCA9PSAxOSkgJiYgd2luID09IDApCisJCXJldHVybiAwOwkvKiB3aW4gMCBkb2VzIG5vdCBoYXZlIDE5IG9yIDI1YnBwIG1vZGVzICovCisKKwlpZiAoYnBwID09IDQgJiYgd2luID09IDQpCisJCXJldHVybiAwOworCisJaWYgKGJwcCA9PSA4ICYmICh3aW4gPj0gMykpCisJCXJldHVybiAwOwkvKiB3aW4gMy80IGNhbm5vdCBkbyA4YnBwIGluIGFueSBtb2RlICovCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2ZiX3BhbF9yZWcodW5zaWduZWQgaW50IHdpbmRvdywgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHdpbmRvdykgeworCWNhc2UgMDogcmV0dXJuIFdJTjBfUEFMKHJlZyk7CisJY2FzZSAxOiByZXR1cm4gV0lOMV9QQUwocmVnKTsKKwljYXNlIDI6IHJldHVybiBXSU4yX1BBTChyZWcpOworCWNhc2UgMzogcmV0dXJuIFdJTjNfUEFMKHJlZyk7CisJY2FzZSA0OiByZXR1cm4gV0lONF9QQUwocmVnKTsKKwl9CisKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjX2ZiX3BhbF9pczE2KHVuc2lnbmVkIGludCB3aW5kb3cpCit7CisJcmV0dXJuIHdpbmRvdyA+IDE7Cit9CisKK3N0cnVjdCBzM2NfZmJfcGFsZXR0ZSB7CisJc3RydWN0IGZiX2JpdGZpZWxkCXI7CisJc3RydWN0IGZiX2JpdGZpZWxkCWc7CisJc3RydWN0IGZiX2JpdGZpZWxkCWI7CisJc3RydWN0IGZiX2JpdGZpZWxkCWE7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2ZiX2luaXRfcGFsZXR0ZSh1bnNpZ25lZCBpbnQgd2luZG93LAorCQkJCSAgICAgICBzdHJ1Y3QgczNjX2ZiX3BhbGV0dGUgKnBhbGV0dGUpCit7CisJaWYgKHdpbmRvdyA8IDIpIHsKKwkJLyogV2luZG93cyAwLzEgYXJlIDgvOC84IG9yIEEvOC84LzggKi8KKwkJcGFsZXR0ZS0+ci5vZmZzZXQgPSAxNjsKKwkJcGFsZXR0ZS0+ci5sZW5ndGggPSA4OworCQlwYWxldHRlLT5nLm9mZnNldCA9IDg7CisJCXBhbGV0dGUtPmcubGVuZ3RoID0gODsKKwkJcGFsZXR0ZS0+Yi5vZmZzZXQgPSAwOworCQlwYWxldHRlLT5iLmxlbmd0aCA9IDg7CisJfSBlbHNlIHsKKwkJLyogY3VycmVudGx5IHdlIGFzc3VtZSBSR0IgNS82LzUgKi8KKwkJcGFsZXR0ZS0+ci5vZmZzZXQgPSAxMTsKKwkJcGFsZXR0ZS0+ci5sZW5ndGggPSA1OworCQlwYWxldHRlLT5nLm9mZnNldCA9IDU7CisJCXBhbGV0dGUtPmcubGVuZ3RoID0gNjsKKwkJcGFsZXR0ZS0+Yi5vZmZzZXQgPSAwOworCQlwYWxldHRlLT5iLmxlbmd0aCA9IDU7CisJfQorfQorCisvKiBOb3RlcyBvbiBwZXItd2luZG93IGJwcCBzZXR0aW5ncworICoKKyAqIFZhbHVlCVdpbjAJIFdpbjEJICBXaW4yCSAgIFdpbjMJICAgIFdpbiA0CisgKiAwMDAwCQkxKFApCSAxKFApCSAgMShQKQkgICAxKFApCSAgICAxKFApCisgKiAwMDAxCQkyKFApCSAyKFApICAgICAyKFApCSAgIDIoUCkJICAgIDIoUCkKKyAqIDAwMTAJCTQoUCkJIDQoUCkgICAgIDQoUCkJICAgNChQKSAgICAgLW5vbmUtCisgKiAwMDExCQk4KFApCSA4KFApICAgICAtbm9uZS0gICAtbm9uZS0gICAtbm9uZS0KKyAqIDAxMDAJCS1ub25lLQkgOChBMjMyKSAgOChBMjMyKSAgLW5vbmUtICAgLW5vbmUtCisgKiAwMTAxCQkxNig1NjUpCSAxNig1NjUpICAxNig1NjUpICAxNig1NjUpICAgMTYoNTY1KQorICogMDExMAkJLW5vbmUtCSAxNihBNTU1KSAxNihBNTU1KSAxNihBNTU1KSAgMTYoQTU1NSkKKyAqIDAxMTEJCTE2KEk1NTUpIDE2KEk1NjUpIDE2KEk1NTUpIDE2KEk1NTUpICAxNihJNTU1KQorICogMTAwMAkJMTgoNjY2KQkgMTgoNjY2KSAgMTgoNjY2KSAgMTgoNjY2KSAgIDE4KDY2NikKKyAqIDEwMDEJCS1ub25lLQkgMTgoQTY2NSkgMTgoQTY2NSkgMTgoQTY2NSkgIDE2KEE2NjUpCisgKiAxMDEwCQktbm9uZS0JIDE5KEE2NjYpIDE5KEE2NjYpIDE5KEE2NjYpICAxOShBNjY2KQorICogMTAxMQkJMjQoODg4KQkgMjQoODg4KSAgMjQoODg4KSAgMjQoODg4KSAgIDI0KDg4OCkKKyAqIDExMDAJCS1ub25lLQkgMjQoQTg4NykgMjQoQTg4NykgMjQoQTg4NykgIDI0KEE4ODcpCisgKiAxMTAxCQktbm9uZS0JIDI1KEE4ODgpIDI1KEE4ODgpIDI1KEE4ODgpICAyNShBODg4KQorICogMTExMAkJLW5vbmUtCSAtbm9uZS0JICAtbm9uZS0gICAtbm9uZS0gICAgLW5vbmUtCisgKiAxMTExCQktbm9uZS0JIC1ub25lLSAgIC1ub25lLSAgIC1ub25lLSAgICAtbm9uZS0KKyovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjZTY4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDIwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0WFggLSBJUlEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lSUV9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzY0MDBfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyYmJjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NDAwIC0gc3lzdGVtIGltcGxlbWVudGF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0ggX19GSUxFX18KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzBkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaApAQCAtMCwwICsxLDI5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjRYWCAtIFRpbWVyIHRpY2sgc3VwcG9ydCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElDS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElDS19IIF9fRklMRV9fCisKKy8qIG5vdGUsIHRoZSB0aW1lciBpbnRlcnJ1dHBzIHR1cm4gdXAgaW4gMiBwbGFjZXMsIHRoZSB2aWMgYW5kIHRoZW4KKyAqIHRoZSB0aW1lciBibG9jay4gV2UgdGFrZSB0aGUgVklDIGFzIHRoZSBiYXNlIGF0IHRoZSBtb21lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCit7CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChTM0NfVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKKwlyZXR1cm4gcGVuZCAmIDEgPDwgKElSUV9USU1FUjRfVklDIC0gUzNDNjRYWF9JUlFfVklDMCgwKSk7Cit9CisKKyNkZWZpbmUgVElDS19NQVgJKDB4ZmZmZmZmZmYpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIXzY0MDBfVElDS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTgyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDI4IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjQwMCAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCkKK3sKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnkgY3B1IGRldGVjdGlvbiBoZXJlIGF0IHRoZSBtb21lbnQuICovCisJZmlmb19tYXNrID0gUzNDMjQ0MF9VRlNUQVRfVFhNQVNLOworCWZpZm9fbWF4ID0gNjMgPDwgUzNDMjQ0MF9VRlNUQVRfVFhTSElGVDsKK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTAxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtMCwwICsxLDYyIEBACisjIGFyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCisjCisjIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisjIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFMzQzY0MTAgQ1BVCisKK2NvbmZpZyBDUFVfUzNDNjQxMAorCWJvb2wKKwlzZWxlY3QgQ1BVX1MzQzY0MDBfSU5JVAorCXNlbGVjdCBDUFVfUzNDNjQwMF9DTE9DSworCWhlbHAKKwkgIEVuYWJsZSBTM0M2NDEwIENQVSBzdXBwb3J0CisKK2NvbmZpZyBTM0M2NDEwX1NFVFVQX1NESENJCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIFMzQzY0MTAgYmFzZWQgU0RIQ0kgc3lzdGVtcworCitjb25maWcgTUFDSF9TTURLNjQxMAorCWJvb2wgIlNNREs2NDEwIgorCXNlbGVjdCBDUFVfUzNDNjQxMAorCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMxCisJc2VsZWN0IFMzQ19ERVZfSTJDMQorCXNlbGVjdCBTM0NfREVWX0ZCCisJc2VsZWN0IFMzQzY0MTBfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCisJc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDEwCisKKyMgQXQgbGVhc3Qgc29tZSBvZiB0aGUgU01ESzY0MTBzIHdlcmUgc2hpcHBlZCB3aXRoIHRoZSBjYXJkIGRldGVjdAorIyBmb3IgdGhlIE1NQy9TRCBzbG90cyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgaW5wdXQuIFRoaXMgbWVhbnMgdGhhdAorIyBlaXRoZXIgdGhlIGJvYXJkcyBuZWVkIHRvIGJlIGFsdGVyZWQgdG8gaGF2ZSBjaGFubmVsMCB0byBhbiBhbHRlcm5hdGUKKyMgY29uZmlndXJhdGlvbiBvciB0aGF0IG9ubHkgb25lIHNsb3QgY2FuIGJlIHVzZWQuCisKK2Nob2ljZQorCXByb21wdCAiU01ESzY0MTAgTU1DL1NEIHNsb3Qgc2V0dXAiCisJZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCisKK2NvbmZpZyBTTURLNjQxMF9TRF9DSDAKKwlib29sICJVc2UgY2hhbm5lbCAwIG9ubHkiCisJZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCisJaGVscAorICAgICAgICAgIFNlbGVjdCBDT043IChjaGFubmVsIDApIGFzIHRoZSBNTUMvU0Qgc2xvdCwgYXMKKwkgIGF0IGxlYXN0IHNvbWUgU01ESzY0MTAgYm9hcmRzIGNvbWUgd2l0aCB0aGUKKwkgIHJlc2lzdG9ycyBmaXR0ZWQgc28gdGhhdCB0aGUgY2FyZCBkZXRlY3RzIGZvcgorCSAgY2hhbm5lbHMgMCBhbmQgMSBhcmUgdGhlIHNhbWUuCisgICAgICAgCitjb25maWcgU01ESzY0MTBfU0RfQ0gxCisJYm9vbCAiVXNlIGNoYW5uZWwgMSBvbmx5IgorCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAorCWhlbHAKKyAgICAgICAgICBTZWxlY3QgQ09ONiAoY2hhbm5lbCAxKSBhcyB0aGUgTU1DL1NEIHNsb3QsIGFzCisJICBhdCBsZWFzdCBzb21lIFNNREs2NDEwIGJvYXJkcyBjb21lIHdpdGggdGhlCisJICByZXNpc3RvcnMgZml0dGVkIHNvIHRoYXQgdGhlIGNhcmQgZGV0ZWN0cyBmb3IKKwkgIGNoYW5uZWxzIDAgYW5kIDEgYXJlIHRoZSBzYW1lLgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Q0ZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMgYXJjaC9hcm0vcGxhdC1zM2M2NDEwL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisjIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKKyMgQ29yZSBzdXBwb3J0IGZvciBTM0M2NDEwIHN5c3RlbQorCitvYmotJChDT05GSUdfQ1BVX1MzQzY0MTApCSs9IGNwdS5vCisKKyMgSGVscGVyIGFuZCBkZXZpY2Ugc3VwcG9ydAorCitvYmotJChDT05GSUdfUzNDNjQxMF9TRVRVUF9TREhDSSkJKz0gc2V0dXAtc2RoY2kubworCisjIG1hY2hpbmUgc3VwcG9ydAorCitvYmotJChDT05GSUdfTUFDSF9TTURLNjQxMCkJKz0gbWFjaC1zbWRrNjQxMC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3M2NhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9jcHUuYwpAQCAtMCwwICsxLDEwMSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NDAwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+CisKKy8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2M2NDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Cit9OworCisvKiBzM2M2NDEwX21hcF9pbworICoKKyAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKKyovCisKK3ZvaWQgX19pbml0IHMzYzY0MTBfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHMzYzY0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzY0MTBfaW9kZXNjKSk7CisKKwkvKiBpbml0aWFsaXNlIGRldmljZSBpbmZvcm1hdGlvbiBlYXJseSAqLworCXMzYzY0MTBfZGVmYXVsdF9zZGhjaTAoKTsKKwlzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKCk7CisKKwkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCisJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKKwlzM2NfaTJjMV9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOworfQorCit2b2lkIF9faW5pdCBzM2M2NDEwX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5pdGlhbGlzaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKKwlzM2M2NHh4X3JlZ2lzdGVyX2Nsb2NrcygpOworCXMzYzY0MDBfcmVnaXN0ZXJfY2xvY2tzKCk7CisJczNjNjQwMF9zZXR1cF9jbG9ja3MoKTsKK30KKwordm9pZCBfX2luaXQgczNjNjQxMF9pbml0X2lycSh2b2lkKQoreworCS8qIFZJQzAgaXMgbWlzc2luZyBJUlE3LCBWSUMxIGlzIGZ1bGx5IHBvcHVsYXRlZC4gKi8KKwlzM2M2NHh4X2luaXRfaXJxKH4wICYgfigxIDw8IDcpLCB+MCk7Cit9CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjNjQxMF9zeXNjbGFzcyA9IHsKKwkubmFtZQk9ICJzM2M2NDEwLWNvcmUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHMzYzY0MTBfc3lzZGV2ID0geworCS5jbHMJPSAmczNjNjQxMF9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzY0MTBfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjNjQxMF9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjNjQxMF9jb3JlX2luaXQpOworCitpbnQgX19pbml0IHMzYzY0MTBfaW5pdCh2b2lkKQoreworCXByaW50aygiUzNDNjQxMDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CisKKwlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2M2NDEwX3N5c2Rldik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRkNDcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwpAQCAtMCwwICsxLDE4NSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisKKyNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGs2NDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCit9OworCisvKiBmcmFtZWJ1ZmZlciBhbmQgTENEIHNldHVwLiAqLworCisvKiBHUEYxNSA9IExDRCBiYWNrbGlnaHQgY29udHJvbAorICogR1BGMTMgPT4gUGFuZWwgcG93ZXIKKyAqIEdQTjUgPSBMQ0QgblJFU0VUIHNpZ25hbAorICogUFdNX1RPVVQxID0+IGJhY2tsaWdodCBicmlnaHRuZXNzCisgKi8KKworc3RhdGljIHZvaWQgc21kazY0MTBfbGNkX3Bvd2VyX3NldChzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsCisJCQkJICAgdW5zaWduZWQgaW50IHBvd2VyKQoreworCWlmIChwb3dlcikgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTMpLCAxKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDE1KSwgMSk7CisKKwkJLyogZmlyZSBuUkVTRVQgb24gcG93ZXIgdXAgKi8KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BOKDUpLCAwKTsKKwkJbXNsZWVwKDEwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BOKDUpLCAxKTsKKwkJbXNsZWVwKDEpOworCX0gZWxzZSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxNSksIDApOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTMpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBzbWRrNjQxMF9sY2RfcG93ZXJfZGF0YSA9IHsKKwkuc2V0X3Bvd2VyCT0gc21kazY0MTBfbGNkX3Bvd2VyX3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGs2NDEwX2xjZF9wb3dlcmRldiA9IHsKKwkubmFtZQkJCT0gInBsYXRmb3JtLWxjZCIsCisJLmRldi5wYXJlbnQJCT0gJnMzY19kZXZpY2VfZmIuZGV2LAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZzbWRrNjQxMF9sY2RfcG93ZXJfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBzbWRrNjQxMF9mYl93aW4wID0geworCS8qIHRoaXMgaXMgdG8gZW5zdXJlIHdlIHVzZSB3aW4wICovCisJLndpbl9tb2RlCT0geworCQkucGl4Y2xvY2sJPSA0MTA5NCwKKwkJLmxlZnRfbWFyZ2luCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgk9IDEzLAorCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSAzLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnhyZXMJCT0gODAwLAorCQkueXJlcwkJPSA0ODAsCisJfSwKKwkubWF4X2JwcAk9IDMyLAorCS5kZWZhdWx0X2JwcAk9IDE2LAorfTsKKworLyogNDA1NTY2IGNsb2NrcyBwZXIgZnJhbWUgPT4gNjBIeiByZWZyZXNoIHJlcXVpcmVzIDI0MzMzOTYwSHogY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhIHNtZGs2NDEwX2xjZF9wZGF0YSBfX2luaXRkYXRhID0geworCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwLAorCS53aW5bMF0JCT0gJnNtZGs2NDEwX2ZiX3dpbjAsCisJLnZpZGNvbjAJPSBWSURDT04wX1ZJRE9VVF9SR0IgfCBWSURDT04wX1BOUk1PREVfUkdCLAorCS52aWRjb24xCT0gVklEQ09OMV9JTlZfSFNZTkMgfCBWSURDT04xX0lOVl9WU1lOQywKK307CisKK3N0cnVjdCBtYXBfZGVzYyBzbWRrNjQxMF9pb2Rlc2NbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisjaWZkZWYgQ09ORklHX1NNREs2NDEwX1NEX0NIMAorCSZzM2NfZGV2aWNlX2hzbW1jMCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTURLNjQxMF9TRF9DSDEKKwkmczNjX2RldmljZV9oc21tYzEsCisjZW5kaWYKKwkmczNjX2RldmljZV9pMmMwLAorCSZzM2NfZGV2aWNlX2kyYzEsCisJJnMzY19kZXZpY2VfZmIsCisJJnNtZGs2NDEwX2xjZF9wb3dlcmRldiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjX2RldnMwW10gX19pbml0ZGF0YSA9IHsKKwl7IEkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLCB9LAorCXsgSTJDX0JPQVJEX0lORk8oIldNODU4MCIsIDBYMWIpLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czFbXSBfX2luaXRkYXRhID0geworCXsgSTJDX0JPQVJEX0lORk8oIjI0YzEyOCIsIDB4NTcpLCB9LAkvKiBTYW1zdW5nIFM1MjRBRDBYRDEgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrNjQxMF9tYXBfaW8odm9pZCkKK3sKKwlzM2M2NHh4X2luaXRfaW8oc21kazY0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHNtZGs2NDEwX2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrNjQxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrNjQxMF91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazY0MTBfbWFjaGluZV9pbml0KHZvaWQpCit7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19pMmMxX3NldF9wbGF0ZGF0YShOVUxMKTsKKwlzM2NfZmJfc2V0X3BsYXRkYXRhKCZzbWRrNjQxMF9sY2RfcGRhdGEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2RldnMwLCBBUlJBWV9TSVpFKGkyY19kZXZzMCkpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyY19kZXZzMSwgQVJSQVlfU0laRShpMmNfZGV2czEpKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDEwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0MTBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFNNREs2NDEwLCAiU01ESzY0MTAiKQorCS8qIE1haW50YWluZXI6IEJlbiBEb29rcyA8YmVuQGZsdWZmLm9yZz4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCisKKwkuaW5pdF9pcnEJPSBzM2M2NDEwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazY0MTBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrNjQxMF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9zZXR1cC1zZGhjaS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL3NldHVwLXNkaGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1Nzg4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9zZXR1cC1zZGhjaS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MTAvc2V0dXAtc2RoY2kuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0MTAgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBzZXR0aWduIHVwIFNESENJIGRldmljZShzKSAoSFNNTUMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorCisvKiBjbG9jayBzb3VyY2VzIGZvciB0aGUgbW1jIGJ1cyBjbG9jaywgb3JkZXIgYXMgZm9yIHRoZSBjdHJsMls1Li40XSAqLworCitjaGFyICpzM2M2NDEwX2hzbW1jX2Nsa3NyY3NbNF0gPSB7CisJWzBdID0gImhzbW1jIiwKKwlbMV0gPSAiaHNtbWMiLAorCVsyXSA9ICJtbWNfYnVzIiwKKwkvKiBbM10gPSAiNDhtIiwgLSBub3RlIG5vdCBzdWNjZXNmdWxseSB1c2VkIHlldCAqLworfTsKKwordm9pZCBzM2M2NDEwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwl1bnNpZ25lZCBpbnQgZW5kOworCisJZW5kID0gUzNDNjRYWF9HUEcoMiArIHdpZHRoKTsKKworCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUEcgcGlucyB0byBzcGVjaWFsLWZ1bmN0aW9uIDAgKi8KKwlmb3IgKGdwaW8gPSBTM0M2NFhYX0dQRygwKTsgZ3BpbyA8IGVuZDsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJfQorCisJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQRyg2KSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BHKDYpLCBTM0NfR1BJT19TRk4oMikpOworfQorCit2b2lkIHMzYzY0MTBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgdm9pZCBfX2lvbWVtICpyLAorCQkJCSAgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAorCQkJCSAgICBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJdTMyIGN0cmwyLCBjdHJsMzsKKworCS8qIGRvbid0IG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgYWNvcmRpbmcgdG8gY2FyZC10eXBlICovCisKKwl3cml0ZWwoUzNDNjRYWF9TREhDSV9DT05UUk9MNF9EUklWRV85bUEsIHIgKyBTM0M2NFhYX1NESENJX0NPTlRST0w0KTsKKworCWN0cmwyID0gcmVhZGwociArIFMzQ19TREhDSV9DT05UUk9MMik7CisJY3RybDIgJj0gUzNDX1NESENJX0NUUkwyX1NFTEJBU0VDTEtfTUFTSzsKKwljdHJsMiB8PSAoUzNDNjRYWF9TREhDSV9DVFJMMl9FTlNUQUFTWU5DQ0xSIHwKKwkJICBTM0M2NFhYX1NESENJX0NUUkwyX0VOQ01EQ05GTVNLIHwKKwkJICBTM0NfU0RIQ0lfQ1RSTDJfRU5GQkNMS1JYIHwKKwkJICBTM0NfU0RIQ0lfQ1RSTDJfREZDTlRfTk9ORSB8CisJCSAgUzNDX1NESENJX0NUUkwyX0VOQ0xLT1VUSE9MRCk7CisKKwlpZiAoaW9zLT5jbG9jayA8IDI1ICogMTAwMDAwMCkKKwkJY3RybDMgPSAoUzNDX1NESENJX0NUUkwzX0ZDU0VMMyB8CisJCQkgUzNDX1NESENJX0NUUkwzX0ZDU0VMMiB8CisJCQkgUzNDX1NESENJX0NUUkwzX0ZDU0VMMSB8CisJCQkgUzNDX1NESENJX0NUUkwzX0ZDU0VMMCk7CisJZWxzZQorCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwgUzNDX1NESENJX0NUUkwzX0ZDU0VMMCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogQ1RSTCAyPSUwOHgsIDM9JTA4eFxuIiwgX19mdW5jX18sIGN0cmwyLCBjdHJsMyk7CisJd3JpdGVsKGN0cmwyLCByICsgUzNDX1NESENJX0NPTlRST0wyKTsKKwl3cml0ZWwoY3RybDMsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDMpOworfQorCit2b2lkIHMzYzY0MTBfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQoreworCXVuc2lnbmVkIGludCBncGlvOworCXVuc2lnbmVkIGludCBlbmQ7CisKKwllbmQgPSBTM0M2NFhYX0dQSCgyICsgd2lkdGgpOworCisJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQRyBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMCAqLworCWZvciAoZ3BpbyA9IFMzQzY0WFhfR1BIKDApOyBncGlvIDwgZW5kOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9CisKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BHKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEcoNiksIFMzQ19HUElPX1NGTigzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYwppbmRleCA0M2MzMGY4Li5kYWIzYzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE0LDc2ICsxNSwxMiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyoKLSAqIFZlcnkgc2ltcGxlIGNsb2NrIGltcGxlbWVudGF0aW9uIC0gd2Ugb25seSBoYXZlIG9uZSBjbG9jayB0bwotICogZGVhbCB3aXRoIGF0IHRoZSBtb21lbnQsIHNvIHdlIG9ubHkgbWF0Y2ggdXNpbmcgdGhlICJuYW1lIi4KKyAqIFZlcnkgc2ltcGxlIGNsb2NrIGltcGxlbWVudGF0aW9uIC0gd2Ugb25seSBoYXZlIG9uZSBjbG9jayB0byBkZWFsIHdpdGguCiAgKi8KIHN0cnVjdCBjbGsgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQl1bnNpZ25lZCBsb25nCQlyYXRlOwotCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKLQl2b2lkCQkJKCplbmFibGUpKHZvaWQpOwotCXZvaWQJCQkoKmRpc2FibGUpKHZvaWQpOwogfTsKIAotc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwotc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlzdHJ1Y3QgY2xrICpwLCAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDApIHsKLQkJCWNsayA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JaWYgKGNsay0+ZW5hYmxlZCsrID09IDApCi0JCWNsay0+ZW5hYmxlKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLXZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQotCQljbGstPmRpc2FibGUoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0KIHN0YXRpYyB2b2lkIGNsa19ncGlvMjdfZW5hYmxlKHZvaWQpCiB7CiAJLyoKQEAgLTEwMiwzMyArMzksNTAgQEAKIAlHQUZSICY9IH5HUElPXzMyXzc2OGtIejsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2dwaW8yNyA9IHsKLQkubmFtZQkJPSAiU0ExMTExX0NMSyIsCi0JLnJhdGUJCT0gMzY4NjQwMCwKLQkuZW5hYmxlCQk9IGNsa19ncGlvMjdfZW5hYmxlLAotCS5kaXNhYmxlCT0gY2xrX2dwaW8yN19kaXNhYmxlLAotfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19ncGlvMjc7CiAKLWludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwljb25zdCBjaGFyICpkZXZuYW1lID0gZGV2X25hbWUoZGV2KTsKKworCXJldHVybiBzdHJjbXAoZGV2bmFtZSwgInNhMTExMS4wIikgPyBFUlJfUFRSKC1FTk9FTlQpIDogJmNsa19ncGlvMjc7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5lbmFibGVkKysgPT0gMCkKKwkJY2xrX2dwaW8yN19lbmFibGUoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjbGtfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKIAotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfZGVsKCZjbGstPm5vZGUpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3VucmVnaXN0ZXIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLXN0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCi17Ci0JY2xrX3JlZ2lzdGVyKCZjbGtfZ3BpbzI3KTsKLQlyZXR1cm4gMDsKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQljbGtfZ3BpbzI3X2Rpc2FibGUoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogfQotYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAzNjg2NDAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCBmZTI4OTk5Li4yMDUyZWI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtNjgsMjMgKzY4LDIyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgY29sbGllX3BjbWNpYV9zY29vcFtdID0gewotewotICAgICAgIC5kZXYgICAgICAgID0gJmNvbGxpZXNjb29wX2RldmljZS5kZXYsCi0gICAgICAgLmlycSAgICAgICAgPSBDT0xMSUVfSVJRX0dQSU9fQ0ZfSVJRLAotICAgICAgIC5jZF9pcnEgICAgID0gQ09MTElFX0lSUV9HUElPX0NGX0NELAotICAgICAgIC5jZF9pcnFfc3RyID0gIlBDTUNJQTAgQ0QiLAotfSwKKwl7CisJLmRldgkJPSAmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwKKwkuaXJxCQk9IENPTExJRV9JUlFfR1BJT19DRl9JUlEsCisJLmNkX2lycQkJPSBDT0xMSUVfSVJRX0dQSU9fQ0ZfQ0QsCisJLmNkX2lycV9zdHIJPSAiUENNQ0lBMCBDRCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyBjb2xsaWVfcGNtY2lhX2NvbmZpZyA9IHsKLQkuZGV2cyAgICAgICAgID0gJmNvbGxpZV9wY21jaWFfc2Nvb3BbMF0sCi0JLm51bV9kZXZzICAgICA9IDEsCisJLmRldnMJCT0gJmNvbGxpZV9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzCT0gMSwKIH07CiAKLQogc3RhdGljIHN0cnVjdCBtY3BfcGxhdF9kYXRhIGNvbGxpZV9tY3BfZGF0YSA9IHsKLQkubWNjcjAgICAgICAgICAgPSBNQ0NSMF9BRE0gfCBNQ0NSMF9FeHRDbGssCi0JLnNjbGtfcmF0ZSAgICAgID0gOTIxNjAwMCwKKwkubWNjcjAJCT0gTUNDUjBfQURNIHwgTUNDUjBfRXh0Q2xrLAorCS5zY2xrX3JhdGUJPSA5MjE2MDAwLAogfTsKIAogI2lmZGVmIENPTkZJR19TSEFSUF9MT0NPTU8KQEAgLTk1LDE0ICs5NCwxNCBAQAogCiBzdGF0aWMgdm9pZCBjb2xsaWVfdWFydF9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgbWN0cmwpCiB7Ci0gCWlmIChtY3RybCAmIFRJT0NNX1JUUykKKwlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCiAJCWxvY29tb19ncGlvX3dyaXRlKCZjb2xsaWVfbG9jb21vX2RldmljZS5kZXYsIExPQ09NT19HUElPX1JUUywgMCk7Ci0gCWVsc2UKKwllbHNlCiAJCWxvY29tb19ncGlvX3dyaXRlKCZjb2xsaWVfbG9jb21vX2RldmljZS5kZXYsIExPQ09NT19HUElPX1JUUywgMSk7CiAKLSAJaWYgKG1jdHJsICYgVElPQ01fRFRSKQorCWlmIChtY3RybCAmIFRJT0NNX0RUUikKIAkJbG9jb21vX2dwaW9fd3JpdGUoJmNvbGxpZV9sb2NvbW9fZGV2aWNlLmRldiwgTE9DT01PX0dQSU9fRFRSLCAwKTsKLSAJZWxzZQorCWVsc2UKIAkJbG9jb21vX2dwaW9fd3JpdGUoJmNvbGxpZV9sb2NvbW9fZGV2aWNlLmRldiwgTE9DT01PX0dQSU9fRFRSLCAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllX3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYwppbmRleCBiMTE2MWZjLi5iMzkzMDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9jb2xsaWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NoYXJwc2xfcG0uaD4KQEAgLTI2MywyNCArMjYzLDI0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdWNiMXgwMF9kcml2ZXIgY29sbGllX3BtX3VjYl9kcml2ZXIgPSB7Ci0JLmFkZCAgICAgICAgICAgID0gY29sbGllX3BtX3VjYl9hZGQsCisJLmFkZAk9IGNvbGxpZV9wbV91Y2JfYWRkLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGxpZV9wbV9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNvbGxpZV9wbV9pbml0KHZvaWQpCiB7Ci0gICAgICAgIGludCByZXQ7CisJaW50IHJldDsKIAotICAgICAgICBjb2xsaWVfcG1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzaGFycHNsLXBtIiwgLTEpOwotICAgICAgICBpZiAoIWNvbGxpZV9wbV9kZXZpY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJY29sbGllX3BtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic2hhcnBzbC1wbSIsIC0xKTsKKwlpZiAoIWNvbGxpZV9wbV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOwogCi0gICAgICAgIGNvbGxpZV9wbV9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJmNvbGxpZV9wbV9tYWNoaW5mbzsKLSAgICAgICAgcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjb2xsaWVfcG1fZGV2aWNlKTsKKwljb2xsaWVfcG1fZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9ICZjb2xsaWVfcG1fbWFjaGluZm87CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjb2xsaWVfcG1fZGV2aWNlKTsKIAotICAgICAgICBpZiAocmV0KQotICAgICAgICAgICAgICAgIHBsYXRmb3JtX2RldmljZV9wdXQoY29sbGllX3BtX2RldmljZSk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChjb2xsaWVfcG1fZGV2aWNlKTsKIAogCWlmICghcmV0KQogCQlyZXQgPSB1Y2IxeDAwX3JlZ2lzdGVyX2RyaXZlcigmY29sbGllX3BtX3VjYl9kcml2ZXIpOwpAQCAtMjkxLDcgKzI5MSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY29sbGllX3BtX2V4aXQodm9pZCkKIHsKIAl1Y2IxeDAwX3VucmVnaXN0ZXJfZHJpdmVyKCZjb2xsaWVfcG1fdWNiX2RyaXZlcik7Ci0gICAgICAgIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNvbGxpZV9wbV9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNvbGxpZV9wbV9kZXZpY2UpOwogfQogCiBtb2R1bGVfaW5pdChjb2xsaWVfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKaW5kZXggMjQ0ZDU5NS4uZWY4MTc4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtMywxNyArMywxNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCAyMDAxLCBUaGUgRGVsZnQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5CiAgKgotICogQXV0aG9yczogCisgKiBBdXRob3JzOgogICogLSBKb2hhbiBQb3V3ZWxzZSAoSi5BLlBvdXdlbHNlQGl0cy50dWRlbGZ0Lm5sKTogaW5pdGlhbCB2ZXJzaW9uCiAgKiAtIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCk6CiAgKiAgIC0gbWFqb3IgcmV3cml0ZSBmb3IgbGludXgtMi4zLjk5Ci0gKiAgIC0gcmV3cml0dGVuIGZvciB0aGUgbW9yZSBnZW5lcmljIHBvd2VyIG1hbmFnZW1lbnQgc2NoZW1lIGluIAorICogICAtIHJld3JpdHRlbiBmb3IgdGhlIG1vcmUgZ2VuZXJpYyBwb3dlciBtYW5hZ2VtZW50IHNjaGVtZSBpbgogICogICAgIGxpbnV4LTIuNC41LXJtazEKICAqCiAgKiBUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIGRldmVsb3BlZCB3aGlsZSB3b3JraW5nIG9uIHRoZSBMQVJUCiAgKiBjb21wdXRpbmcgYm9hcmQgKGh0dHA6Ly93d3cubGFydG1ha2VyLm5sLyksIHdoaWNoIGlzCiAgKiBzcG9uc29yZWQgYnkgdGhlIE1vYmlsZSBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucwotICogKGh0dHA6Ly93d3cubW1jLnR1ZGVsZnQubmwvKSBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucyAKKyAqIChodHRwOi8vd3d3Lm1tYy50dWRlbGZ0Lm5sLykgYW5kIFViaXF1aXRvdXMgQ29tbXVuaWNhdGlvbnMKICAqIChodHRwOi8vd3d3LnViaWNvbS50dWRlbGZ0Lm5sLykgcHJvamVjdHMuCiAgKgogICogVGhlIGF1dGhvcnMgY2FuIGJlIHJlYWNoZWQgYXQ6CkBAIC0zNiw3ICszNiw3IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQpAQCAtNDQsNyArNDQsNyBAQAogICoKICAqIFRoZW9yeSBvZiBvcGVyYXRpb25zCiAgKiA9PT09PT09PT09PT09PT09PT09PQotICogCisgKgogICogQ2xvY2sgc2NhbGluZyBjYW4gYmUgdXNlZCB0byBsb3dlciB0aGUgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlIENQVQogICogY29yZS4gVGhpcyB3aWxsIGdpdmUgeW91IGEgc29tZXdoYXQgbG9uZ2VyIHJ1bm5pbmcgdGltZS4KICAqCkBAIC01OCwxMSArNTgsMTEgQEAKICAqICAgTURDTkZHICAgIDB4QTAwMDAwMDAgICAgRFJBTSBjb25maWcKICAqICAgTURDQVMwICAgIDB4QTAwMDAwMDQgICAgQWNjZXNzIHdhdmVmb3JtCiAgKiAgIE1EQ0FTMSAgICAweEEwMDAwMDA4ICAgIEFjY2VzcyB3YXZlZm9ybQotICogICBNRENBUzIgICAgMHhBMDAwMDAwQyAgICBBY2Nlc3Mgd2F2ZWZvcm0gCisgKiAgIE1EQ0FTMiAgICAweEEwMDAwMDBDICAgIEFjY2VzcyB3YXZlZm9ybQogICoKICAqIENhcmUgbXVzdCBiZSB0YWtlbiB0byBjaGFuZ2UgdGhlIERSQU0gcGFyYW1ldGVycyB0aGUgY29ycmVjdCB3YXksCiAgKiBiZWNhdXNlIG90aGVyd2lzZSB0aGUgRFJBTSBiZWNvbWVzIHVudXNhYmxlIGFuZCB0aGUga2VybmVsIHdpbGwKLSAqIGNyYXNoLiAKKyAqIGNyYXNoLgogICoKICAqIFRoZSBzaW1wbGUgc29sdXRpb24gdG8gYXZvaWQgYSBrZXJuZWwgY3Jhc2ggaXMgdG8gcHV0IHRoZSBhY3R1YWwKICAqIGNsb2NrIGNoYW5nZSBpbiBST00gYW5kIGp1bXAgdG8gdGhhdCBjb2RlIGZyb20gdGhlIGtlcm5lbC4gVGhlIG1haW4KQEAgLTc1LDcgKzc1LDcgQEAKICAqIGFzIGxvbmcgYXMgYWxsIHJlLWNvbmZpZ3VyYXRpb24gc3RlcHMgeWllbGQgYSB2YWxpZCBEUkFNCiAgKiBjb25maWd1cmF0aW9uLiBUaGUgYWR2YW50YWdlcyBhcmUgY2xlYXI6IGl0IHdpbGwgcnVuIG9uIGFsbCBTQS0xMTAwCiAgKiBwbGF0Zm9ybXMsIGFuZCB0aGUgY29kZSBpcyB2ZXJ5IHNpbXBsZS4KLSAqIAorICoKICAqIElmIHlvdSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24gaW4KICAqIHNhMTEwMF91cGRhdGVfZHJhbV90aW1pbmdzKCksIHlvdSdsbCBoYXZlIHRvIHJlYWQgc2VjdGlvbnMgOC4yLAogICogOS41LjcuMywgYW5kIDEwLjIgZnJvbSB0aGUgIkludGVsIFN0cm9uZ0FSTSBTQS0xMTAwIE1pY3JvcHJvY2Vzc29yCkBAIC05Nyw3ICs5Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJaW50IHNwZWVkOwogCXUzMiBtZGNuZmc7Ci0JdTMyIG1kY2FzMDsgCisJdTMyIG1kY2FzMDsKIAl1MzIgbWRjYXMxOwogCXUzMiBtZGNhczI7CiB9IHNhMTEwMF9kcmFtX3JlZ3NfdDsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCS8qIE5vIHJpc2ssIG5vIGZ1bjogcnVuIHdpdGggaW50ZXJydXB0cyBvbiEgKi8KIAlpZiAobmV3X3NwZWVkID4gY3VycmVudF9zcGVlZCkgewogCQkvKiBXZSdyZSBnb2luZyBGQVNURVIsIHNvIGZpcnN0IHJlbGF4IHRoZSBtZW1vcnkKLQkJICogdGltaW5ncyBiZWZvcmUgY2hhbmdpbmcgdGhlIGNvcmUgZnJlcXVlbmN5IAorCQkgKiB0aW1pbmdzIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29yZSBmcmVxdWVuY3kKIAkJICovCiAJCQogCQkvKiBIYWxmIHRoZSBtZW1vcnkgYWNjZXNzIGNsb2NrICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKaW5kZXggM2U0ZmIyMS4uNjNiMzJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTExMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYwpAQCAtODEsMTQgKzgxLDE0IEBACiAJCS50d3IJCT0gOSwKIAkJLnJlZnJlc2gJPSA2NDAwMCwKIAkJLmNhc19sYXRlbmN5CT0gMywKLQl9LCB7ICAgIC8qIFNhbXN1bmcgSzRTMjgxNjMyQi0xSCAqLwotCSAgICAgICAgLm5hbWUgICAgICAgICAgID0gIks0UzI4MTYzMkItMUgiLAotCQkucm93cyAgICAgICAgICAgPSAxMiwKLQkJLnRjayAgICAgICAgICAgID0gMTAsCi0JCS50cnAgICAgICAgICAgICA9IDIwLAotCQkudHdyICAgICAgICAgICAgPSAxMCwKLQkJLnJlZnJlc2ggICAgICAgID0gNjQwMDAsCi0JCS5jYXNfbGF0ZW5jeSAgICA9IDMsCisJfSwgewkvKiBTYW1zdW5nIEs0UzI4MTYzMkItMUggKi8KKwkJLm5hbWUgICAgICAgICAgID0gIks0UzI4MTYzMkItMUgiLAorCQkucm93cwkJPSAxMiwKKwkJLnRjawkJPSAxMCwKKwkJLnRycAkJPSAyMCwKKwkJLnR3cgkJPSAxMCwKKwkJLnJlZnJlc2gJPSA2NDAwMCwKKwkJLmNhc19sYXRlbmN5CT0gMywKIAl9LCB7CS8qIFNhbXN1bmcgS000MTZTNDAzMENUICovCiAJCS5uYW1lCQk9ICJLTTQxNlM0MDMwQ1QiLAogCQkucm93cwkJPSAxMywKQEAgLTIyMCw3ICsyMjAsNyBAQAogfQogCiAvKgotICogT2ssIHNldCB0aGUgQ1BVIGZyZXF1ZW5jeS4gIAorICogT2ssIHNldCB0aGUgQ1BVIGZyZXF1ZW5jeS4KICAqLwogc3RhdGljIGludCBzYTExMTBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMKaW5kZXggZjk5MGEzZS4uOTVmOWM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogCiAjdW5kZWYgREVCVUcKQEAgLTExMywxMCArMTEzLDEwIEBACiAJCX0KIAl9CiAJaWYgKCFlcnIpIHsKLQkgICAgICAgaWYgKGRtYSkKLQkJICAgICAgIGRtYS0+ZGV2aWNlID0gZGV2aWNlOwotCSAgICAgICBlbHNlCi0JCSAgICAgICBlcnIgPSAtRU5PU1I7CisJCWlmIChkbWEpCisJCQlkbWEtPmRldmljZSA9IGRldmljZTsKKwkJZWxzZQorCQkJZXJyID0gLUVOT1NSOwogCX0KIAlzcGluX3VubG9jaygmZG1hX2xpc3RfbG9jayk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKaW5kZXggM2NhMGVjZi4uOWNjNDdmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKQEAgLTMyLDE0ICszMiwxNCBAQAogI2RlZmluZSBtYWNoaW5lX2lzX2gzeHh4KCkgKG1hY2hpbmVfaXNfaDMxMDAoKSB8fCBtYWNoaW5lX2lzX2gzNjAwKCkgfHwgbWFjaGluZV9pc19oMzgwMCgpKQogCiAvKiBQaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBjb3JyZXNwb25kaW5nIHRvIGNoaXAgc2VsZWN0cyAqLwotI2RlZmluZSBIMzYwMF9FR1BJT19QSFlTICAgICAoU0ExMTAwX0NTNV9QSFlTICsgMHgwMTAwMDAwMCkKLSNkZWZpbmUgSDM2MDBfQkFOS18yX1BIWVMgICAgU0ExMTAwX0NTMl9QSFlTCi0jZGVmaW5lIEgzNjAwX0JBTktfNF9QSFlTICAgIFNBMTEwMF9DUzRfUEhZUworI2RlZmluZSBIMzYwMF9FR1BJT19QSFlTCShTQTExMDBfQ1M1X1BIWVMgKyAweDAxMDAwMDAwKQorI2RlZmluZSBIMzYwMF9CQU5LXzJfUEhZUwlTQTExMDBfQ1MyX1BIWVMKKyNkZWZpbmUgSDM2MDBfQkFOS180X1BIWVMJU0ExMTAwX0NTNF9QSFlTCiAKIC8qIFZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMgY29ycmVzcG9uZGluZyB0byBjaGlwIHNlbGVjdHMgMiAmIDQgKHVzZWQgb24gc2xlZXZlcykgKi8KLSNkZWZpbmUgSDM2MDBfRUdQSU9fVklSVCAgICAgMHhmMDAwMDAwMAotI2RlZmluZSBIMzYwMF9CQU5LXzJfVklSVCAgICAweGYxMDAwMDAwCi0jZGVmaW5lIEgzNjAwX0JBTktfNF9WSVJUICAgIDB4ZjM4MDAwMDAKKyNkZWZpbmUgSDM2MDBfRUdQSU9fVklSVAkweGYwMDAwMDAwCisjZGVmaW5lIEgzNjAwX0JBTktfMl9WSVJUCTB4ZjEwMDAwMDAKKyNkZWZpbmUgSDM2MDBfQkFOS180X1ZJUlQJMHhmMzgwMDAwMAogCiAvKgogICAgTWFjaGluZS1pbmRlcGVuZGVudCBHUElPIGRlZmluaXRpb25zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGI3MDg0NmMuLjYwNzExODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC01OSw2ICs1OSwxMCBAQAogIyBkZWZpbmUgX19SRUcoeCkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpb19wMnYoeCkpKQogIyBkZWZpbmUgX19QUkVHKHgpCShpb192MnAoKHVuc2lnbmVkIGxvbmcpJih4KSkpCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY2xvY2tfdGlja19yYXRlKHZvaWQpCit7CisJcmV0dXJuIDM2ODY0MDA7Cit9CiAjZWxzZQogCiAjIGRlZmluZSBfX1JFRyh4KQlpb19wMnYoeCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMGMwNzBhNi4uZDhiNDNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE2LDExICsxNiw3IEBACiAgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55IAogICogZHJpdmVycyBvdXQgdGhlcmUgdGhhdCBtaWdodCBqdXN0IHdvcmsgaWYgd2UgZmFrZSB0aGVtLi4uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Ci19Ci0jZGVmaW5lIF9faW8oYSkJCQlfX2lvKGEpCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAxYzEyN2I2Li5lOWY4ZWVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yMywyMyArMjMsMTIgQEAKIAlzYTExMTFfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKQogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArIFNaXzFNIC0gMSkKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl8xTSkKIAogI2VuZGlmCiAjZW5kaWYKIAogLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKgotICogT24gdGhlIFNBMTEwMCwgYnVzIGFkZHJlc3NlcyBhcmUgZXF1aXZhbGVudCB0byBwaHlzaWNhbCBhZGRyZXNzZXMuCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkgX192aXJ0X3RvX3BoeXMoeCkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KQkgX19waHlzX3RvX3ZpcnQoeCkKLQotLyoKICAqIEJlY2F1c2Ugb2YgdGhlIHdpZGUgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgYmV0d2VlbiBwaHlzaWNhbCBSQU0gYmFua3Mgb24gdGhlCiAgKiBTQTExMDAsIGl0J3MgbXVjaCBjb252ZW5pZW50IHRvIHVzZSBMaW51eCdzIFNwYXJzZU1FTSBzdXBwb3J0IHRvIGltcGxlbWVudAogICogb3VyIG1lbW9yeSBtYXAgcmVwcmVzZW50YXRpb24uICBBc3N1bWluZyBhbGwgbWVtb3J5IG5vZGVzIGhhdmUgZXF1YWwgYWNjZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbXRkLXhpcC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL210ZC14aXAuaAppbmRleCBlYWEwOWU4Li5iM2Q2ODQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKQEAgLTE1LDYgKzE1LDggQEAKICNpZm5kZWYgX19BUkNIX1NBMTEwMF9NVERfWElQX0hfXwogI2RlZmluZSBfX0FSQ0hfU0ExMTAwX01URF9YSVBfSF9fCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKICNkZWZpbmUgeGlwX2lycXBlbmRpbmcoKQkoSUNJUCAmIElDTVIpCiAKIC8qIHdlIHNhbXBsZSBPU0NSIGFuZCBjb252ZXJ0IGRlc2lyZWQgZGVsdGEgdG8gdXNlYyAoMS80IH49IDEwMDAwMDAvMzY4NjQwMCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BsZWIuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BsZWIuYwppbmRleCBlNDVkM2ExLi5lMTQ1OGJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGxlYi5jCkBAIC0xMjIsMTIgKzEyMiwxMiBAQAogCXNhMTEwMF9tYXBfaW8oKTsKIAogCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDMpOwotICAgICAgICBzYTExMDBfcmVnaXN0ZXJfdWFydCgxLCAxKTsKKwlzYTExMDBfcmVnaXN0ZXJfdWFydCgxLCAxKTsKIAotICAgICAgICBHQUZSIHw9IChHUElPX1VBUlRfVFhEIHwgR1BJT19VQVJUX1JYRCk7Ci0gICAgICAgIEdQRFIgfD0gR1BJT19VQVJUX1RYRDsKLSAgICAgICAgR1BEUiAmPSB+R1BJT19VQVJUX1JYRDsKLSAgICAgICAgUFBBUiB8PSBQUEFSX1VQUjsKKwlHQUZSIHw9IChHUElPX1VBUlRfVFhEIHwgR1BJT19VQVJUX1JYRCk7CisJR1BEUiB8PSBHUElPX1VBUlRfVFhEOworCUdQRFIgJj0gfkdQSU9fVUFSVF9SWEQ7CisJUFBBUiB8PSBQUEFSX1VQUjsKIAogCS8qCiAJICogRml4IGV4cGFuc2lvbiBtZW1vcnkgdGltaW5nIGZvciBuZXR3b3JrIGNhcmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NoYW5ub24uYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NoYW5ub24uYwppbmRleCA5Y2NkZDA5Li5kZGQ5MTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2hhbm5vbi5jCkBAIC0zMyw3ICszMyw3IEBACiAJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAogCQkuc2l6ZQkJPSAweGUwMDAwCiAJfSwKLQl7IAorCXsKIAkJLm5hbWUJCT0gImluaXRyZCIsCiAJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkKIAkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKaW5kZXggMTcxNDQxZi4uODBmMzFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zbGVlcC5TCkBAIC0xMDAsMzYgKzEwMCwzNiBAQAogCWxkcglyMSwgPU1TQzEKIAlsZHIJcjIsID1NU0MyCiAKLSAgICAgICAgbGRyICAgICByMywgW3IwXQotICAgICAgICBiaWMgICAgIHIzLCByMywgI0ZNc2soTVNDX1JUKQotICAgICAgICBiaWMgICAgIHIzLCByMywgI0ZNc2soTVNDX1JUKTw8MTYKKwlsZHIJcjMsIFtyMF0KKwliaWMJcjMsIHIzLCAjRk1zayhNU0NfUlQpCisJYmljCXIzLCByMywgI0ZNc2soTVNDX1JUKTw8MTYKIAotICAgICAgICBsZHIgICAgIHI0LCBbcjFdCi0gICAgICAgIGJpYyAgICAgcjQsIHI0LCAjRk1zayhNU0NfUlQpCi0gICAgICAgIGJpYyAgICAgcjQsIHI0LCAjRk1zayhNU0NfUlQpPDwxNgorCWxkcglyNCwgW3IxXQorCWJpYwlyNCwgcjQsICNGTXNrKE1TQ19SVCkKKwliaWMJcjQsIHI0LCAjRk1zayhNU0NfUlQpPDwxNgogCi0gICAgICAgIGxkciAgICAgcjUsIFtyMl0KLSAgICAgICAgYmljICAgICByNSwgcjUsICNGTXNrKE1TQ19SVCkKLSAgICAgICAgYmljICAgICByNSwgcjUsICNGTXNrKE1TQ19SVCk8PDE2CisJbGRyCXI1LCBbcjJdCisJYmljCXI1LCByNSwgI0ZNc2soTVNDX1JUKQorCWJpYwlyNSwgcjUsICNGTXNrKE1TQ19SVCk8PDE2CiAKLSAgICAgICAgbGRyICAgICByNiwgPU1EUkVGUgorCWxkcglyNiwgPU1EUkVGUgogCi0gICAgICAgIGxkciAgICAgcjcsIFtyNl0KLSAgICAgICAgYmljICAgICByNywgcjcsICMweDAwMDBGRjAwCi0gICAgICAgIGJpYyAgICAgcjcsIHI3LCAjMHgwMDAwMDBGMAotICAgICAgICBvcnIgICAgIHI4LCByNywgI01EUkVGUl9TTEZSU0gKKwlsZHIJcjcsIFtyNl0KK2JpYwlyNywgcjcsICMweDAwMDBGRjAwCitiaWMJcjcsIHI3LCAjMHgwMDAwMDBGMAorb3JyCXI4LCByNywgI01EUkVGUl9TTEZSU0gKIAotICAgICAgICBsZHIgICAgIHI5LCA9TURDTkZHCi0gICAgICAgIGxkciAgICAgcjEwLCBbcjldCi0gICAgICAgIGJpYyAgICAgcjEwLCByMTAsICMoTURDTkZHX0RFMCtNRENORkdfREUxKQotICAgICAgICBiaWMgICAgIHIxMCwgcjEwLCAjKE1EQ05GR19ERTIrTURDTkZHX0RFMykKKwlsZHIJcjksID1NRENORkcKKwlsZHIJcjEwLCBbcjldCisJYmljCXIxMCwgcjEwLCAjKE1EQ05GR19ERTArTURDTkZHX0RFMSkKKwliaWMJcjEwLCByMTAsICMoTURDTkZHX0RFMitNRENORkdfREUzKQogCi0gICAgICAgIGJpYyAgICAgcjExLCByOCwgI01EUkVGUl9TTEZSU0gKLSAgICAgICAgYmljICAgICByMTEsIHIxMSwgI01EUkVGUl9FMVBJTgorCWJpYwlyMTEsIHI4LCAjTURSRUZSX1NMRlJTSAorCWJpYwlyMTEsIHIxMSwgI01EUkVGUl9FMVBJTgogCi0gICAgICAgIGxkciAgICAgcjEyLCA9UE1DUgorCWxkcglyMTIsID1QTUNSCiAKLSAgICAgICAgbW92ICAgICByMTMsICNQTUNSX1NGCisJbW92CXIxMywgI1BNQ1JfU0YKIAogCWIJc2ExMTEwX3NkcmFtX2NvbnRyb2xsZXJfZml4CiAKQEAgLTE4OCwxMCArMTg4LDEwIEBACiAJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGZsdXNoIEkrRCBUTEJzCiAJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKIAltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IgICAgIHAxNSwgMCwgcjEsIGM5LCBjMCwgNQkJQCBhbGxvdyB1c2VyIHNwYWNlIHRvIHVzZSBSQgorCW1jcglwMTUsIDAsIHIxLCBjOSwgYzAsIDUJCUAgYWxsb3cgdXNlciBzcGFjZSB0byB1c2UgUkIKIAotCW1jciAJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1jciAJcDE1LCAwLCByNSwgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1jcglwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECisJbWNyCXAxNSwgMCwgcjUsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKIAltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAkJQCBQSUQKIAliCXJlc3VtZV90dXJuX29uX21tdQkJQCBjYWNoZSBhbGlnbiBleGVjdXRpb24KIApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAkudGV4dAogcmVzdW1lX2FmdGVyX21tdToKLQltY3IgICAgIHAxNSwgMCwgcjEsIGMxNSwgYzEsIDIJCUAgZW5hYmxlIGNsb2NrIHN3aXRjaGluZworCW1jcglwMTUsIDAsIHIxLCBjMTUsIGMxLCAyCQlAIGVuYWJsZSBjbG9jayBzd2l0Y2hpbmcKIAlsZG1mZAlzcCEsIHtyNCAtIHIxMiwgcGN9CQlAIHJldHVybiB0byBjYWxsZXIKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKaW5kZXggMjRjMGE0Yi4uOGM1ZTcyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMiw4ICsyLDggQEAKICAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OCBEZWJvcmFoIFdhbGxhY2guCi0gKiBUd2lkZGxlcyAgKEMpIDE5OTkgCUh1Z28gRmllbm5lcyA8aHVnb0BlbXBlZy5jb20+Ci0gKiAKKyAqIFR3aWRkbGVzICAoQykgMTk5OSBIdWdvIEZpZW5uZXMgPGh1Z29AZW1wZWcuY29tPgorICoKICAqIDIwMDAvMDMvMjkgKEMpIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KICAqCVJld3JpdHRlbjogYmlnIGNsZWFudXAsIG11Y2ggc2ltcGxlciwgYmV0dGVyIEhaIGFjY3VyYWN5LgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMKaW5kZXggYTk0MDBkOS4uYTIzZmQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGNiMGVlMjkuLjAxYmY3NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjgsOCArMjgsNiBAQAogI2RlZmluZSBST01DQVJEX1NJWkUJCTB4MDgwMDAwMDAKICNkZWZpbmUgUk9NQ0FSRF9TVEFSVAkJMHgxMDAwMDAwMAogCi0jZGVmaW5lIFBDSU9fQkFTRQkJMHhlMDAwMDAwMAotCiAKIC8qIGRlZmluZXMgZm9yIHRoZSBGcmFtZWJ1ZmZlciAqLwogI2RlZmluZSBGQl9TVEFSVAkJMHgwNjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggOTI0NzU5Mi4uYzVjZWU4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xMSw0NiArMTEsMTAgQEAKICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjZGVmaW5lIFBDSU9fQkFTRQkweGUwMDAwMDAwCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUCTB4ZmZmZmZmZmYKIAotI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCi0KLS8qCi0gKiBXZSB1c2UgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBhZGRyZXNzaW5nIC0gUEMgc3R5bGUgYWRkcmVzc2VzLCBhbmQgQVJNCi0gKiBhZGRyZXNzZXMuICBQQyBzdHlsZSBhY2Nlc3NlcyB0aGUgUEMgaGFyZHdhcmUgd2l0aCB0aGUgbm9ybWFsIFBDIElPCi0gKiBhZGRyZXNzZXMsIGVnIDB4M2Y4IGZvciBzZXJpYWwjMS4gIEFSTSBhZGRyZXNzZXMgYXJlIDB4ODAwMDAwMDArCi0gKiBhbmQgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIHN0YXJ0IG9mIElPLgotICovCi0jZGVmaW5lIF9fUE9SVF9QQ0lPKHgpCSghKCh4KSAmIDB4ODAwMDAwMDApKQotCi0jZGVmaW5lIF9faW8oYSkgICAgICAgICAgICAgICAgICgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCi0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pb2FkZHIgKHVuc2lnbmVkIGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCQkJXAotCWlmIChfX1BPUlRfUENJTyhwb3J0KSkJCQkJCQkJXAotCQlyZXR1cm4gKHVuc2lnbmVkIGludCkoUENJT19CQVNFICsgKHBvcnQpKTsJCQlcCi0JZWxzZQkJCQkJCQkJCVwKLQkJcmV0dXJuICh1bnNpZ25lZCBpbnQpKElPX0JBU0UgKyAocG9ydCkpOwkJCVwKLX0KLQotI2RlZmluZSBfX21lbV9wY2koYWRkcikgKGFkZHIpCi0KLS8qCi0gKiBUcmFuc2xhdGVkIGFkZHJlc3MgSU8gZnVuY3Rpb25zCi0gKgotICogSU8gYWRkcmVzcyBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQgdG8gYSB2aXJ0dWFsIGFkZHJlc3MKLSAqLwotI2RlZmluZSBvdXRiX3QodixwKQkJCQkJCQkJXAotCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocCkgPSAodikpCi0KLSNkZWZpbmUgaW5iX3QocCkJCQkJCQkJCVwKLQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHApKQotCi0jZGVmaW5lIG91dGxfdCh2LHApCQkJCQkJCQlcCi0JKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShwKSA9ICh2KSkKLQotI2RlZmluZSBpbmxfdChwKQkJCQkJCQkJXAotCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikocCkpCisjZGVmaW5lIF9faW8oYSkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCisjZGVmaW5lIF9fbWVtX3BjaShhZGRyKQkoYWRkcikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kbWEuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IGMwYTI5YmQuLjg2NDI5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kbWEuaAorICogYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCiAgKgogICogYnkgQWxleGFuZGVyIFNjaHVsegogICovCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBUaGUgcmVzdCBpcyBub3QgRE1BYWJsZS4gU2VlIGRldiAvICAucHJvcGVydGllcwogICogaW4gT3BlbkZpcm13YXJlLgogICovCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhDMDQwMDAwMAogI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTgKICNkZWZpbmUgRE1BX0lTQV9DQVNDQURFICAgICAgICAgNAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGI3ODc0YWQuLmM1YWIwMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0zMywxMiArMzMsMTAgQEAKIAlfX2FyY2hfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGVzKQogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArIFNaXzRNIC0gMSkKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBTWl80TSkKIAogI2VuZGlmCiAKLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0KHgpCV9fcGh5c190b192aXJ0KHgpCi0KIC8qCiAgKiBDYWNoZSBmbHVzaGluZyBhcmVhCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCmluZGV4IDk1MDk2YWYuLmM3ODFmMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwpAQCAtMywxMiArMywxNCBAQAogCiBjb25maWcgQVJDSF9WRVJTQVRJTEVfUEIKIAlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9QQiBwbGF0Zm9ybSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL1BCIHBsYXRmb3JtLgogCiBjb25maWcgTUFDSF9WRVJTQVRJTEVfQUIKIAlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9BQiBwbGF0Zm9ybSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL0FQIHBsYXRmb3JtLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYwppbmRleCA1ODkzN2YxLi5jNTBhNDRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTcsMzYgKzE4LDExIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaWNzdDMwNy5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKIAotc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwotc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwotCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAoc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiBjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotCi12b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQotewotCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDA7CkBAIC02Niw3ICs0Miw5IEBACiAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JcmV0dXJuIHJhdGU7CisJc3RydWN0IGljc3QzMDdfdmNvIHZjbzsKKwl2Y28gPSBpY3N0MzA3X2toel90b192Y28oY2xrLT5wYXJhbXMsIHJhdGUgLyAxMDAwKTsKKwlyZXR1cm4gaWNzdDMwN19raHooY2xrLT5wYXJhbXMsIHZjbykgKiAxMDAwOwogfQogRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CiAKQEAgLTc5LDU3ICs1Nyw5IEBACiAKIAkJdmNvID0gaWNzdDMwN19raHpfdG9fdmNvKGNsay0+cGFyYW1zLCByYXRlIC8gMTAwMCk7CiAJCWNsay0+cmF0ZSA9IGljc3QzMDdfa2h6KGNsay0+cGFyYW1zLCB2Y28pICogMTAwMDsKLQotCQlwcmludGsoIkNsb2NrICVzOiBzZXR0aW5nIFZDTyByZWcgcGFyYW1zOiBTPSVkIFI9JWQgVj0lZFxuIiwKLQkJCWNsay0+bmFtZSwgdmNvLnMsIHZjby5yLCB2Y28udik7Ci0KIAkJY2xrLT5zZXR2Y28oY2xrLCB2Y28pOwogCQlyZXQgPSAwOwogCX0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOwotCi0vKgotICogVGhlc2UgYXJlIGZpeGVkIGNsb2Nrcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsga21pX2NsayA9IHsKLQkubmFtZQk9ICJLTUlSRUZDTEsiLAotCS5yYXRlCT0gMjQwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsKLQkubmFtZQk9ICJVQVJUQ0xLIiwKLQkucmF0ZQk9IDI0MDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaV9jbGsgPSB7Ci0JLm5hbWUJPSAiTUNMSyIsCi0JLnJhdGUJPSAyNDAwMDAwMCwKLX07Ci0KLWludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfcmVnaXN0ZXIpOwotCi12b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWxpc3RfZGVsKCZjbGstPm5vZGUpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3VucmVnaXN0ZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQotewotCWNsa19yZWdpc3Rlcigma21pX2Nsayk7Ci0JY2xrX3JlZ2lzdGVyKCZ1YXJ0X2Nsayk7Ci0JY2xrX3JlZ2lzdGVyKCZtbWNpX2Nsayk7Ci0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5oCmluZGV4IDhiMGI2MWQuLjAzNDY4ZmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmgKQEAgLTEyLDE0ICsxMiw5IEBACiBzdHJ1Y3QgaWNzdDMwN19wYXJhbXM7CiAKIHN0cnVjdCBjbGsgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAl1bnNpZ25lZCBsb25nCQlyYXRlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyCQkqbmFtZTsKIAljb25zdCBzdHJ1Y3QgaWNzdDMwN19wYXJhbXMgKnBhcmFtczsKKwl1MzIJCQlvc2NvZmY7CiAJdm9pZAkJCSpkYXRhOwogCXZvaWQJCQkoKnNldHZjbykoc3RydWN0IGNsayAqLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKTsKIH07Ci0KLWludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA1NjVlMGJhLi5kZjI1YWExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzczLDIyICszNzQsNjAgQEAKIAogc3RhdGljIHZvaWQgdmVyc2F0aWxlX29zY3Zjb19zZXQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgaWNzdDMwN192Y28gdmNvKQogewotCXZvaWQgX19pb21lbSAqc3lzX2xvY2sgPSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfTE9DS19PRkZTRVQ7Ci0Jdm9pZCBfX2lvbWVtICpzeXNfb3NjID0gX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX09TQ0NMQ0RfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqc3lzID0gX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSk7CisJdm9pZCBfX2lvbWVtICpzeXNfbG9jayA9IHN5cyArIFZFUlNBVElMRV9TWVNfTE9DS19PRkZTRVQ7CiAJdTMyIHZhbDsKIAotCXZhbCA9IHJlYWRsKHN5c19vc2MpICYgfjB4N2ZmZmY7CisJdmFsID0gcmVhZGwoc3lzICsgY2xrLT5vc2NvZmYpICYgfjB4N2ZmZmY7CiAJdmFsIHw9IHZjby52IHwgKHZjby5yIDw8IDkpIHwgKHZjby5zIDw8IDE2KTsKIAogCXdyaXRlbCgweGEwNWYsIHN5c19sb2NrKTsKLQl3cml0ZWwodmFsLCBzeXNfb3NjKTsKKwl3cml0ZWwodmFsLCBzeXMgKyBjbGstPm9zY29mZik7CiAJd3JpdGVsKDAsIHN5c19sb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgdmVyc2F0aWxlX2NsY2RfY2xrID0gewotCS5uYW1lCT0gIkNMQ0RDTEsiLAorc3RhdGljIHN0cnVjdCBjbGsgb3NjNF9jbGsgPSB7CiAJLnBhcmFtcwk9ICZ2ZXJzYXRpbGVfb3NjdmNvX3BhcmFtcywKLQkuc2V0dmNvID0gdmVyc2F0aWxlX29zY3Zjb19zZXQsCisJLm9zY29mZgk9IFZFUlNBVElMRV9TWVNfT1NDQ0xDRF9PRkZTRVQsCisJLnNldHZjbwk9IHZlcnNhdGlsZV9vc2N2Y29fc2V0LAorfTsKKworLyoKKyAqIFRoZXNlIGFyZSBmaXhlZCBjbG9ja3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHJlZjI0X2NsayA9IHsKKwkucmF0ZQk9IDI0MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCXsJLyogVUFSVDAgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYxIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDEgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYyIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDIgKi8KKwkJLmRldl9pZAkJPSAiZGV2OmYzIiwKKwkJLmNsawkJPSAmcmVmMjRfY2xrLAorCX0sIHsJLyogVUFSVDMgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowOSIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIEtNSTAgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNiIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIEtNSTEgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNyIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIE1NQzAgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowNSIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIE1NQzEgKi8KKwkJLmRldl9pZAkJPSAiZnBnYTowYiIsCisJCS5jbGsJCT0gJnJlZjI0X2NsaywKKwl9LCB7CS8qIENMQ0QgKi8KKwkJLmRldl9pZAkJPSAiZGV2OjIwIiwKKwkJLmNsawkJPSAmb3NjNF9jbGssCisJfQogfTsKIAogLyoKQEAgLTc4Niw3ICs4MjUsOCBAQAogewogCWludCBpOwogCi0JY2xrX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfY2xjZF9jbGspOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfZmxhc2hfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9pMmNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIzN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWFiZjEyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2RtYS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBBUk0gTGltaXRlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYzBiOWRkMS4uZjA2N2MxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTIyLDExICsyMiw3IEBACiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOwotfQotI2RlZmluZSBfX2lvKGEpCV9faW8oYSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggMjE2YTEzMS4uOWJmZGIzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC02MCwzOSArNjAsNiBAQAogI2RlZmluZSBJUlFfVklDU09VUkNFMzEJCShJUlFfVklDX1NUQVJUICsgSU5UX1ZJQ1NPVVJDRTMxKQogI2RlZmluZSBJUlFfVklDX0VORAkJKElSUV9WSUNfU1RBUlQgKyAzMSkKIAotI2RlZmluZSBJUlFNQVNLX1dET0dJTlQJCUlOVE1BU0tfV0RPR0lOVAotI2RlZmluZSBJUlFNQVNLX1NPRlRJTlQJCUlOVE1BU0tfU09GVElOVAotI2RlZmluZSBJUlFNQVNLX0NPTU1SeCAJCUlOVE1BU0tfQ09NTVJ4Ci0jZGVmaW5lIElSUU1BU0tfQ09NTVR4IAkJSU5UTUFTS19DT01NVHgKLSNkZWZpbmUgSVJRTUFTS19USU1FUklOVDBfMQlJTlRNQVNLX1RJTUVSSU5UMF8xCi0jZGVmaW5lIElSUU1BU0tfVElNRVJJTlQyXzMJSU5UTUFTS19USU1FUklOVDJfMwotI2RlZmluZSBJUlFNQVNLX0dQSU9JTlQwCUlOVE1BU0tfR1BJT0lOVDAKLSNkZWZpbmUgSVJRTUFTS19HUElPSU5UMQlJTlRNQVNLX0dQSU9JTlQxCi0jZGVmaW5lIElSUU1BU0tfR1BJT0lOVDIJSU5UTUFTS19HUElPSU5UMgotI2RlZmluZSBJUlFNQVNLX0dQSU9JTlQzCUlOVE1BU0tfR1BJT0lOVDMKLSNkZWZpbmUgSVJRTUFTS19SVENJTlQgCQlJTlRNQVNLX1JUQ0lOVAotI2RlZmluZSBJUlFNQVNLX1NTUElOVCAJCUlOVE1BU0tfU1NQSU5UCi0jZGVmaW5lIElSUU1BU0tfVUFSVElOVDAJSU5UTUFTS19VQVJUSU5UMAotI2RlZmluZSBJUlFNQVNLX1VBUlRJTlQxCUlOVE1BU0tfVUFSVElOVDEKLSNkZWZpbmUgSVJRTUFTS19VQVJUSU5UMglJTlRNQVNLX1VBUlRJTlQyCi0jZGVmaW5lIElSUU1BU0tfU0NJSU5UIAkJSU5UTUFTS19TQ0lJTlQKLSNkZWZpbmUgSVJRTUFTS19DTENESU5UCQlJTlRNQVNLX0NMQ0RJTlQKLSNkZWZpbmUgSVJRTUFTS19ETUFJTlQgCQlJTlRNQVNLX0RNQUlOVAotI2RlZmluZSBJUlFNQVNLX1BXUkZBSUxJTlQJSU5UTUFTS19QV1JGQUlMSU5UCi0jZGVmaW5lIElSUU1BU0tfTUJYSU5UIAkJSU5UTUFTS19NQlhJTlQKLSNkZWZpbmUgSVJRTUFTS19HTkRJTlQgCQlJTlRNQVNLX0dORElOVAotI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTIxCUlOVE1BU0tfVklDU09VUkNFMjEKLSNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyMglJTlRNQVNLX1ZJQ1NPVVJDRTIyCi0jZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjMJSU5UTUFTS19WSUNTT1VSQ0UyMwotI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTI0CUlOVE1BU0tfVklDU09VUkNFMjQKLSNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyNQlJTlRNQVNLX1ZJQ1NPVVJDRTI1Ci0jZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjYJSU5UTUFTS19WSUNTT1VSQ0UyNgotI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTI3CUlOVE1BU0tfVklDU09VUkNFMjcKLSNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UyOAlJTlRNQVNLX1ZJQ1NPVVJDRTI4Ci0jZGVmaW5lIElSUU1BU0tfVklDU09VUkNFMjkJSU5UTUFTS19WSUNTT1VSQ0UyOQotI2RlZmluZSBJUlFNQVNLX1ZJQ1NPVVJDRTMwCUlOVE1BU0tfVklDU09VUkNFMzAKLSNkZWZpbmUgSVJRTUFTS19WSUNTT1VSQ0UzMQlJTlRNQVNLX1ZJQ1NPVVJDRTMxCi0KIC8qIAogICogIEZJUSBpbnRlcnJ1cHRzIGRlZmluaXRpb25zIGFyZSB0aGUgc2FtZSBhcyB0aGUgSU5UIGRlZmluaXRpb25zLgogICovCkBAIC0xMzAsMzkgKzk3LDYgQEAKICNkZWZpbmUgRklRX1ZJQ1NPVVJDRTMxCQlJTlRfVklDU09VUkNFMzEKIAogCi0jZGVmaW5lIEZJUU1BU0tfV0RPR0lOVAkJSU5UTUFTS19XRE9HSU5UCi0jZGVmaW5lIEZJUU1BU0tfU09GVElOVAkJSU5UTUFTS19TT0ZUSU5UCi0jZGVmaW5lIEZJUU1BU0tfQ09NTVJ4IAkJSU5UTUFTS19DT01NUngKLSNkZWZpbmUgRklRTUFTS19DT01NVHggCQlJTlRNQVNLX0NPTU1UeAotI2RlZmluZSBGSVFNQVNLX1RJTUVSSU5UMF8xCUlOVE1BU0tfVElNRVJJTlQwXzEKLSNkZWZpbmUgRklRTUFTS19USU1FUklOVDJfMwlJTlRNQVNLX1RJTUVSSU5UMl8zCi0jZGVmaW5lIEZJUU1BU0tfR1BJT0lOVDAJSU5UTUFTS19HUElPSU5UMAotI2RlZmluZSBGSVFNQVNLX0dQSU9JTlQxCUlOVE1BU0tfR1BJT0lOVDEKLSNkZWZpbmUgRklRTUFTS19HUElPSU5UMglJTlRNQVNLX0dQSU9JTlQyCi0jZGVmaW5lIEZJUU1BU0tfR1BJT0lOVDMJSU5UTUFTS19HUElPSU5UMwotI2RlZmluZSBGSVFNQVNLX1JUQ0lOVCAJCUlOVE1BU0tfUlRDSU5UCi0jZGVmaW5lIEZJUU1BU0tfU1NQSU5UIAkJSU5UTUFTS19TU1BJTlQKLSNkZWZpbmUgRklRTUFTS19VQVJUSU5UMAlJTlRNQVNLX1VBUlRJTlQwCi0jZGVmaW5lIEZJUU1BU0tfVUFSVElOVDEJSU5UTUFTS19VQVJUSU5UMQotI2RlZmluZSBGSVFNQVNLX1VBUlRJTlQyCUlOVE1BU0tfVUFSVElOVDIKLSNkZWZpbmUgRklRTUFTS19TQ0lJTlQgCQlJTlRNQVNLX1NDSUlOVAotI2RlZmluZSBGSVFNQVNLX0NMQ0RJTlQJCUlOVE1BU0tfQ0xDRElOVAotI2RlZmluZSBGSVFNQVNLX0RNQUlOVCAJCUlOVE1BU0tfRE1BSU5UCi0jZGVmaW5lIEZJUU1BU0tfUFdSRkFJTElOVAlJTlRNQVNLX1BXUkZBSUxJTlQKLSNkZWZpbmUgRklRTUFTS19NQlhJTlQgCQlJTlRNQVNLX01CWElOVAotI2RlZmluZSBGSVFNQVNLX0dORElOVCAJCUlOVE1BU0tfR05ESU5UCi0jZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjEJSU5UTUFTS19WSUNTT1VSQ0UyMQotI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTIyCUlOVE1BU0tfVklDU09VUkNFMjIKLSNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyMwlJTlRNQVNLX1ZJQ1NPVVJDRTIzCi0jZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjQJSU5UTUFTS19WSUNTT1VSQ0UyNAotI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTI1CUlOVE1BU0tfVklDU09VUkNFMjUKLSNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyNglJTlRNQVNLX1ZJQ1NPVVJDRTI2Ci0jZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMjcJSU5UTUFTS19WSUNTT1VSQ0UyNwotI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTI4CUlOVE1BU0tfVklDU09VUkNFMjgKLSNkZWZpbmUgRklRTUFTS19WSUNTT1VSQ0UyOQlJTlRNQVNLX1ZJQ1NPVVJDRTI5Ci0jZGVmaW5lIEZJUU1BU0tfVklDU09VUkNFMzAJSU5UTUFTS19WSUNTT1VSQ0UzMAotI2RlZmluZSBGSVFNQVNLX1ZJQ1NPVVJDRTMxCUlOVE1BU0tfVklDU09VUkNFMzEKLQogLyoKICAqIFNlY29uZGFyeSBpbnRlcnJ1cHQgY29udHJvbGxlcgogICovCkBAIC0xODgsMjQgKzEyMiw0IEBACiAjZGVmaW5lIElSUV9TSUNfUENJMwkJKElSUV9TSUNfU1RBUlQgKyBTSUNfSU5UX1BDSTMpCiAjZGVmaW5lIElSUV9TSUNfRU5ECQk2MwogCi0jZGVmaW5lIFNJQ19JUlFNQVNLX01NQ0kwQglTSUNfSU5UTUFTS19NTUNJMEIKLSNkZWZpbmUgU0lDX0lSUU1BU0tfTU1DSTFCCVNJQ19JTlRNQVNLX01NQ0kxQgotI2RlZmluZSBTSUNfSVJRTUFTS19LTUkwCVNJQ19JTlRNQVNLX0tNSTAKLSNkZWZpbmUgU0lDX0lSUU1BU0tfS01JMQlTSUNfSU5UTUFTS19LTUkxCi0jZGVmaW5lIFNJQ19JUlFNQVNLX1NDSTMJU0lDX0lOVE1BU0tfU0NJMwotI2RlZmluZSBTSUNfSVJRTUFTS19VQVJUMwlTSUNfSU5UTUFTS19VQVJUMwotI2RlZmluZSBTSUNfSVJRTUFTS19DTENECVNJQ19JTlRNQVNLX0NMQ0QKLSNkZWZpbmUgU0lDX0lSUU1BU0tfVE9VQ0gJU0lDX0lOVE1BU0tfVE9VQ0gKLSNkZWZpbmUgU0lDX0lSUU1BU0tfS0VZUEFECVNJQ19JTlRNQVNLX0tFWVBBRAotI2RlZmluZSBTSUNfSVJRTUFTS19Eb0MJCVNJQ19JTlRNQVNLX0RvQwotI2RlZmluZSBTSUNfSVJRTUFTS19NTUNJMEEJU0lDX0lOVE1BU0tfTU1DSTBBCi0jZGVmaW5lIFNJQ19JUlFNQVNLX01NQ0kxQQlTSUNfSU5UTUFTS19NTUNJMUEKLSNkZWZpbmUgU0lDX0lSUU1BU0tfQUFDSQlTSUNfSU5UTUFTS19BQUNJCi0jZGVmaW5lIFNJQ19JUlFNQVNLX0VUSAkJU0lDX0lOVE1BU0tfRVRICi0jZGVmaW5lIFNJQ19JUlFNQVNLX1VTQgkJU0lDX0lOVE1BU0tfVVNCCi0jZGVmaW5lIFNJQ19JUlFNQVNLX1BDSTAJU0lDX0lOVE1BU0tfUENJMAotI2RlZmluZSBTSUNfSVJRTUFTS19QQ0kxCVNJQ19JTlRNQVNLX1BDSTEKLSNkZWZpbmUgU0lDX0lSUU1BU0tfUENJMglTSUNfSU5UTUFTS19QQ0kyCi0jZGVmaW5lIFNJQ19JUlFNQVNLX1BDSTMJU0lDX0lOVE1BU0tfUENJMwotCiAjZGVmaW5lIE5SX0lSUVMJCQk2NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGI2MzE1YzAuLjc5YWVhYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI1LDE0ICsyNSw0IEBACiAgKi8KICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKIAotLyoKLSAqIFZpcnR1YWwgdmlldyA8LT4gRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCi0gKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgotICogICAgICAgICAgICAgIGFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgotICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucwotICogICAgICAgICAgICAgIHRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCi0gKi8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKCh4KSArIFBBR0VfT0ZGU0VUKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggZjkxYmE5My4uODMyMDczOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTM0Nyw0NCArMzQ3LDYgQEAKICNkZWZpbmUgSU5UX1ZJQ1NPVVJDRTMwICAgICAgICAgICAgICAgICAzMAkvKiBQQ0kgMyAqLwogI2RlZmluZSBJTlRfVklDU09VUkNFMzEgICAgICAgICAgICAgICAgIDMxCS8qIFNJQyBzb3VyY2UgKi8KIAotLyogCi0gKiAgSW50ZXJydXB0IGJpdCBwb3NpdGlvbnMKLSAqIAotICovCi0jZGVmaW5lIElOVE1BU0tfV0RPR0lOVCAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1dET0dJTlQpCi0jZGVmaW5lIElOVE1BU0tfU09GVElOVCAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1NPRlRJTlQpCi0jZGVmaW5lIElOVE1BU0tfQ09NTVJ4ICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0NPTU1SeCkKLSNkZWZpbmUgSU5UTUFTS19DT01NVHggICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfQ09NTVR4KQotI2RlZmluZSBJTlRNQVNLX1RJTUVSSU5UMF8xICAgICAgICAgICAgICgxIDw8IElOVF9USU1FUklOVDBfMSkKLSNkZWZpbmUgSU5UTUFTS19USU1FUklOVDJfMyAgICAgICAgICAgICAoMSA8PCBJTlRfVElNRVJJTlQyXzMpCi0jZGVmaW5lIElOVE1BU0tfR1BJT0lOVDAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0dQSU9JTlQwKQotI2RlZmluZSBJTlRNQVNLX0dQSU9JTlQxICAgICAgICAgICAgICAgICgxIDw8IElOVF9HUElPSU5UMSkKLSNkZWZpbmUgSU5UTUFTS19HUElPSU5UMiAgICAgICAgICAgICAgICAoMSA8PCBJTlRfR1BJT0lOVDIpCi0jZGVmaW5lIElOVE1BU0tfR1BJT0lOVDMgICAgICAgICAgICAgICAgKDEgPDwgSU5UX0dQSU9JTlQzKQotI2RlZmluZSBJTlRNQVNLX1JUQ0lOVCAgICAgICAgICAgICAgICAgICgxIDw8IElOVF9SVENJTlQpCi0jZGVmaW5lIElOVE1BU0tfU1NQSU5UICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1NTUElOVCkKLSNkZWZpbmUgSU5UTUFTS19VQVJUSU5UMCAgICAgICAgICAgICAgICAoMSA8PCBJTlRfVUFSVElOVDApCi0jZGVmaW5lIElOVE1BU0tfVUFSVElOVDEgICAgICAgICAgICAgICAgKDEgPDwgSU5UX1VBUlRJTlQxKQotI2RlZmluZSBJTlRNQVNLX1VBUlRJTlQyICAgICAgICAgICAgICAgICgxIDw8IElOVF9VQVJUSU5UMikKLSNkZWZpbmUgSU5UTUFTS19TQ0lJTlQgICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfU0NJSU5UKQotI2RlZmluZSBJTlRNQVNLX0NMQ0RJTlQgICAgICAgICAgICAgICAgICgxIDw8IElOVF9DTENESU5UKQotI2RlZmluZSBJTlRNQVNLX0RNQUlOVCAgICAgICAgICAgICAgICAgICgxIDw8IElOVF9ETUFJTlQpCi0jZGVmaW5lIElOVE1BU0tfUFdSRkFJTElOVCAgICAgICAgICAgICAgKDEgPDwgSU5UX1BXUkZBSUxJTlQpCi0jZGVmaW5lIElOVE1BU0tfTUJYSU5UICAgICAgICAgICAgICAgICAgKDEgPDwgSU5UX01CWElOVCkKLSNkZWZpbmUgSU5UTUFTS19HTkRJTlQgICAgICAgICAgICAgICAgICAoMSA8PCBJTlRfR05ESU5UKQotI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTIxICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyMSkKLSNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyMiAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjIpCi0jZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjMgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTIzKQotI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTI0ICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyNCkKLSNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyNSAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjUpCi0jZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjYgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTI2KQotI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTI3ICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UyNykKLSNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UyOCAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMjgpCi0jZGVmaW5lIElOVE1BU0tfVklDU09VUkNFMjkgICAgICAgICAgICAgKDEgPDwgSU5UX1ZJQ1NPVVJDRTI5KQotI2RlZmluZSBJTlRNQVNLX1ZJQ1NPVVJDRTMwICAgICAgICAgICAgICgxIDw8IElOVF9WSUNTT1VSQ0UzMCkKLSNkZWZpbmUgSU5UTUFTS19WSUNTT1VSQ0UzMSAgICAgICAgICAgICAoMSA8PCBJTlRfVklDU09VUkNFMzEpCi0KLQogI2RlZmluZSBWRVJTQVRJTEVfU0NfVkFMSURfSU5UICAgICAgICAgICAgICAgMHgwMDNGRkZGRgogCiAjZGVmaW5lIE1BWElSUU5VTSAgICAgICAgICAgICAgICAgICAgICAgMzEKQEAgLTQxNywyNiArMzc5LDYgQEAKICNkZWZpbmUgU0lDX0lOVF9QQ0kzICAgICAgICAgICAgICAgICAgICAzMAogCiAKLSNkZWZpbmUgU0lDX0lOVE1BU0tfTU1DSTBCICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX01NQ0kwQikKLSNkZWZpbmUgU0lDX0lOVE1BU0tfTU1DSTFCICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX01NQ0kxQikKLSNkZWZpbmUgU0lDX0lOVE1BU0tfS01JMCAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0tNSTApCi0jZGVmaW5lIFNJQ19JTlRNQVNLX0tNSTEgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9LTUkxKQotI2RlZmluZSBTSUNfSU5UTUFTS19TQ0kzICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfU0NJMykKLSNkZWZpbmUgU0lDX0lOVE1BU0tfVUFSVDMgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1VBUlQzKQotI2RlZmluZSBTSUNfSU5UTUFTS19DTENEICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfQ0xDRCkKLSNkZWZpbmUgU0lDX0lOVE1BU0tfVE9VQ0ggICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1RPVUNIKQotI2RlZmluZSBTSUNfSU5UTUFTS19LRVlQQUQgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfS0VZUEFEKQotI2RlZmluZSBTSUNfSU5UTUFTS19Eb0MgICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfRG9DKQotI2RlZmluZSBTSUNfSU5UTUFTS19NTUNJMEEgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfTU1DSTBBKQotI2RlZmluZSBTSUNfSU5UTUFTS19NTUNJMUEgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfTU1DSTFBKQotI2RlZmluZSBTSUNfSU5UTUFTS19BQUNJICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfQUFDSSkKLSNkZWZpbmUgU0lDX0lOVE1BU0tfRVRIICAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX0VUSCkKLSNkZWZpbmUgU0lDX0lOVE1BU0tfVVNCICAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1VTQikKLSNkZWZpbmUgU0lDX0lOVE1BU0tfUENJMCAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1BDSTApCi0jZGVmaW5lIFNJQ19JTlRNQVNLX1BDSTEgICAgICAgICAgICAgICAgKDEgPDwgU0lDX0lOVF9QQ0kxKQotI2RlZmluZSBTSUNfSU5UTUFTS19QQ0kyICAgICAgICAgICAgICAgICgxIDw8IFNJQ19JTlRfUENJMikKLSNkZWZpbmUgU0lDX0lOVE1BU0tfUENJMyAgICAgICAgICAgICAgICAoMSA8PCBTSUNfSU5UX1BDSTMpCi0KIC8qIAogICogIENsZWFuIGJhc2UgLSBkdW1teQogICogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDE3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZwpAQCAtMCwwICsxLDE5IEBACitpZiBBUkNIX1c5MFg5MDAKKworY29uZmlnIENQVV9XOTBQOTEwCisJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFc5MFA5MTAgb2YgTnV2b3RvbiBXOTBYOTAwIENQVXMuCisKK21lbnUgIlc5MFA5MTAgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX1c5MFA5MTBFVkIKKwlib29sICJOdXZvdG9uIFc5MFA5MTAgRXZhbHVhdGlvbiBCb2FyZCIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgQ1BVX1c5MFA5MTAKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOdXZvdG9uIFc5MFA5MTBFVkIKKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMGMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQkJOj0gaXJxLm8gdGltZS5vCisKKyMgVzkwWDkwMCBDUFUgc3VwcG9ydCBmaWxlcworCitvYmotJChDT05GSUdfQ1BVX1c5MFA5MTApCSs9IHc5MHA5MTAubworCisjIG1hY2hpbmUgc3VwcG9ydAorCitvYmotJChDT05GSUdfTUFDSF9XOTBQOTEwRVZCKQkrPSBtYWNoLXc5MHA5MTBldmIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDU3YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACit6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmZjQwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCisgKgorICogQmFzZWQgb24gbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jcHUuaCBieSBCZW4gRG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBXOTBYOTAwIENQVSBzdXBwb3J0CisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgSU9ERVNDX0VOVCh5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIC52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpVzkwWDkwMF9WQV8jI3ksICAgICAgIFwKKyAgICAgICAucGZuICAgICA9IF9fcGh5c190b19wZm4oVzkwWDkwMF9QQV8jI3kpLCAgICAgICBcCisgICAgICAgLmxlbmd0aCAgPSBXOTBYOTAwX1NaXyMjeSwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIC50eXBlICAgID0gTVRfREVWSUNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLypDcHUgaWRlbnRpZmllciByZWdpc3RlciovCisKKyNkZWZpbmUgVzkwWDkwMFBESUQJVzkwWDkwMF9WQV9HQ1IKKyNkZWZpbmUgVzkwUDkxMF9DUFVJRAkweDAyOTAwOTEwCisjZGVmaW5lIFc5MFA5MjBfQ1BVSUQJMHgwMjkwMDkyMAorI2RlZmluZSBXOTBQOTUwX0NQVUlECTB4MDI5MDA5NTAKKyNkZWZpbmUgVzkwTjk2MF9DUFVJRAkweDAyOTAwOTYwCisKK3N0cnVjdCB3OTB4OTAwX3VhcnRjZmc7CitzdHJ1Y3QgbWFwX2Rlc2M7CitzdHJ1Y3Qgc3lzX3RpbWVyOworCisvKiBjb3JlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCB3OTB4OTAwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCB3OTBwOTEwX2luaXRfdWFydHMoc3RydWN0IHc5MHg5MDBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOworZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CitleHRlcm4gdm9pZCB3OTBwOTEwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgdzkweDkwMF90aW1lcjsKKworI2RlZmluZSBXOTBYOTAwX1JFUyhuYW1lKQkJCQlcCitzdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF8jI25hbWUjI19yZXNvdXJjZVtdID0gewkJXAorCVswXSA9IHsJCQkJCQlcCisJCS5zdGFydCA9IG5hbWUjI19QQSwJCQlcCisJCS5lbmQgICA9IG5hbWUjI19QQSArIDB4MGZmLAkJXAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCVwKKwl9LAkJCQkJCVwKKwlbMV0gPSB7CQkJCQkJXAorCQkuc3RhcnQgPSBJUlFfIyNuYW1lLAkJCVwKKwkJLmVuZCAgID0gSVJRXyMjbmFtZSwJCQlcCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJXAorCX0JCQkJCQlcCit9CisKKyNkZWZpbmUgVzkwWDkwMF9ERVZJQ0UoZGV2bmFtZSwgcmVnbmFtZSwgZGV2aWQsIHBsYXRkZXZuYW1lKQkJXAorc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwXyMjZGV2bmFtZSA9IHsJCQkJXAorCS5uYW1lCQk9IHBsYXRkZXZuYW1lLAkJCQkJXAorCS5pZAkJPSBkZXZpZCwJCQkJCVwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKHc5MHg5MDBfIyNyZWduYW1lIyNfcmVzb3VyY2UpLAlcCisJLnJlc291cmNlIAk9IHc5MHg5MDBfIyNyZWduYW1lIyNfcmVzb3VyY2UsCQkJXAorfQorCisjZGVmaW5lIFc5MFg5MDBfVUFSVENGRyhwb3J0LCBmbGFnLCB1YywgdWxjLCB1ZmMpCVwKK3sJCQkJCQkJXAorCQkuaHdwb3J0CT0gcG9ydCwJCQkJXAorCQkuZmxhZ3MJPSBmbGFnLAkJCQlcCisJCS51Y29uCT0gdWMsCQkJCVwKKwkJLnVsY29uCT0gdWxjLAkJCQlcCisJCS51ZmNvbgk9IHVmYywJCQkJXAorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOWFjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgVzkwUDkxMC1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwkJbW92CVxiYXNlLCAjQUlDX0JBCisKKwkJbGRyCVxpcnFuciwgWyBcYmFzZSwgI0FJQ19JUEVSXQorCQlsZHIJXGlycW5yLCBbIFxiYXNlLCAjQUlDX0lTTlJdCisJCWNtcAlcaXJxbnIsICMwCisKKwkuZW5kbQorCisJLyogY3VycmVudGx5IGRvbid0IG5lZWQgYW4gZGlzYWJsZV9maXEgbWFjcm8gKi8KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzYzYyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2YWI5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkweGZmZmZmZmZmCisKKy8qCisgKiAxOjEgbWFwcGluZyBmb3IgaW9yZW1hcHBlZCByZWdpb25zLgorICovCisKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU4M2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKy8qCisgKiB3ZSBrZWVwIHRoZSBmaXJzdCBzZXQgb2YgQ1BVIElSUXMgb3V0IG9mIHRoZSByYW5nZSBvZgorICogdGhlIElTQSBzcGFjZSwgc28gdGhhdCB0aGUgUEMxMDQgaGFzIHRoZW0gdG8gaXRzZWxmCisgKiBhbmQgd2UgZG9uJ3QgZW5kIHVwIGhhdmluZyB0byBkbyBob3JyaWJsZSB0aGluZ3MgdG8gdGhlCisgKiBzdGFuZGFyZCBJU0EgZHJpdmVycy4uLi4KKyAqCisgKi8KKworI2RlZmluZSBXOTBYOTAwX0lSUSh4KQkoeCkKKworLyogTWFpbiBjcHUgaW50ZXJydXB0cyAqLworCisjZGVmaW5lIElSUV9XRFQJCVc5MFg5MDBfSVJRKDEpCisjZGVmaW5lIElSUV9VQVJUMAlXOTBYOTAwX0lSUSg3KQorI2RlZmluZSBJUlFfVUFSVDEJVzkwWDkwMF9JUlEoOCkKKyNkZWZpbmUgSVJRX1VBUlQyCVc5MFg5MDBfSVJRKDkpCisjZGVmaW5lIElSUV9VQVJUMwlXOTBYOTAwX0lSUSgxMCkKKyNkZWZpbmUgSVJRX1VBUlQ0CVc5MFg5MDBfSVJRKDExKQorI2RlZmluZSBJUlFfVElNRVIwCVc5MFg5MDBfSVJRKDEyKQorI2RlZmluZSBJUlFfVElNRVIxCVc5MFg5MDBfSVJRKDEzKQorI2RlZmluZSBJUlFfVF9JTlRfR1JPVVAJVzkwWDkwMF9JUlEoMTQpCisjZGVmaW5lIElSUV9BREMJCVc5MFg5MDBfSVJRKDMxKQorI2RlZmluZSBOUl9JUlFTCQkoSVJRX0FEQysxKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzMjBlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWFwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUFQX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVzkwWDkwMF9BRERSKHgpCQkoKHZvaWQgX19pb21lbSAqKSgweEYwMDAwMDAwICsgKHgpKSkKKyNlbHNlCisjZGVmaW5lIFc5MFg5MDBfQUREUih4KQkJKDB4RjAwMDAwMDAgKyAoeCkpCisjZW5kaWYKKworI2RlZmluZSBBSEJfSU9fQkFTRQkJMHhCMDAwMDAwMAorI2RlZmluZSBBUEJfSU9fQkFTRQkJMHhCODAwMDAwMAorI2RlZmluZSBDTE9DS1BXX0JBU0UJCShBUEJfSU9fQkFTRSsweDIwMCkKKyNkZWZpbmUgQUlDX0lPX0JBU0UJCShBUEJfSU9fQkFTRSsweDIwMDApCisjZGVmaW5lIFRJTUVSX0lPX0JBU0UJCShBUEJfSU9fQkFTRSsweDEwMDApCisKKy8qCisgKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpcyB0aGUgZmlyc3QgdGhpbmcgd2UgcHV0IGluLCB0byBtYWtlCisgKiB0aGUgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGlycSBkZXRlY3Rpb24gZWFzaWVyCisgKi8KKworI2RlZmluZSBXOTBYOTAwX1ZBX0lSUQkJVzkwWDkwMF9BRERSKDB4MDAwMDAwMDApCisjZGVmaW5lIFc5MFg5MDBfUEFfSVJRCQkoMHhCODAwMjAwMCkKKyNkZWZpbmUgVzkwWDkwMF9TWl9JUlEJCVNaXzRLCisKKyNkZWZpbmUgVzkwWDkwMF9WQV9HQ1IJCVc5MFg5MDBfQUREUigweDA4MDAyMDAwKQorI2RlZmluZSBXOTBYOTAwX1BBX0dDUgkJKDB4QjAwMDAwMDApCisjZGVmaW5lIFc5MFg5MDBfU1pfR0NSCQlTWl80SworCisvKiBDbG9jayBhbmQgUG93ZXIgbWFuYWdlbWVudCAqLworCisjZGVmaW5lIFc5MFg5MDBfVkFfQ0xLUFdSCShXOTBYOTAwX1ZBX0dDUisweDIwMCkKKyNkZWZpbmUgVzkwWDkwMF9QQV9DTEtQV1IJKDB4QjAwMDAyMDApCisjZGVmaW5lIFc5MFg5MDBfU1pfQ0xLUFdSCVNaXzRLCisKKy8qIEVCSSBtYW5hZ2VtZW50ICovCisKKyNkZWZpbmUgVzkwWDkwMF9WQV9FQkkJCVc5MFg5MDBfQUREUigweDAwMDAxMDAwKQorI2RlZmluZSBXOTBYOTAwX1BBX0VCSQkJKDB4QjAwMDEwMDApCisjZGVmaW5lIFc5MFg5MDBfU1pfRUJJCQlTWl80SworCisvKiBVQVJUcyAqLworCisjZGVmaW5lIFc5MFg5MDBfVkFfVUFSVAkJVzkwWDkwMF9BRERSKDB4MDgwMDAwMDApCisjZGVmaW5lIFc5MFg5MDBfUEFfVUFSVAkJKDB4QjgwMDAwMDApCisjZGVmaW5lIFc5MFg5MDBfU1pfVUFSVAkJU1pfNEsKKworLyogVGltZXJzICovCisKKyNkZWZpbmUgVzkwWDkwMF9WQV9USU1FUglXOTBYOTAwX0FERFIoMHgwODAwMTAwMCkKKyNkZWZpbmUgVzkwWDkwMF9QQV9USU1FUgkoMHhCODAwMTAwMCkKKyNkZWZpbmUgVzkwWDkwMF9TWl9USU1FUglTWl80SworCisvKiBHUElPIHBvcnRzICovCisKKyNkZWZpbmUgVzkwWDkwMF9WQV9HUElPCQlXOTBYOTAwX0FERFIoMHgwODAwMzAwMCkKKyNkZWZpbmUgVzkwWDkwMF9QQV9HUElPCQkoMHhCODAwMzAwMCkKKyNkZWZpbmUgVzkwWDkwMF9TWl9HUElPCQlTWl80SworCisjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxYjgwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTMxODVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19fQVNNX0FSQ0hfUkVHU19JUlFfSAorCisvKiBBZHZhbmNlIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEFJQ19CQSAgICAJCVc5MFg5MDBfVkFfSVJRCisKKyNkZWZpbmUgUkVHX0FJQ19JUlFTQwkJKEFJQ19CQSsweDgwKQorI2RlZmluZSBSRUdfQUlDX0dFTgkJKEFJQ19CQSsweDg0KQorI2RlZmluZSBSRUdfQUlDX0dBU1IJCShBSUNfQkErMHg4OCkKKyNkZWZpbmUgUkVHX0FJQ19HU0NSCQkoQUlDX0JBKzB4OEMpCisjZGVmaW5lIFJFR19BSUNfSVJTUgkJKEFJQ19CQSsweDEwMCkKKyNkZWZpbmUgUkVHX0FJQ19JQVNSCQkoQUlDX0JBKzB4MTA0KQorI2RlZmluZSBSRUdfQUlDX0lTUgkJKEFJQ19CQSsweDEwOCkKKyNkZWZpbmUgUkVHX0FJQ19JUEVSCQkoQUlDX0JBKzB4MTBDKQorI2RlZmluZSBSRUdfQUlDX0lTTlIJCShBSUNfQkErMHgxMTApCisjZGVmaW5lIFJFR19BSUNfSU1SCQkoQUlDX0JBKzB4MTE0KQorI2RlZmluZSBSRUdfQUlDX09JU1IJCShBSUNfQkErMHgxMTgpCisjZGVmaW5lIFJFR19BSUNfTUVDUgkJKEFJQ19CQSsweDEyMCkKKyNkZWZpbmUgUkVHX0FJQ19NRENSCQkoQUlDX0JBKzB4MTI0KQorI2RlZmluZSBSRUdfQUlDX1NTQ1IJCShBSUNfQkErMHgxMjgpCisjZGVmaW5lIFJFR19BSUNfU0NDUgkJKEFJQ19CQSsweDEyQykKKyNkZWZpbmUgUkVHX0FJQ19FT1NDUgkJKEFJQ19CQSsweDEzMCkKKyNkZWZpbmUgQUlDX0lQRVIJCSgweDEwQykKKyNkZWZpbmUgQUlDX0lTTlIJCSgweDExMCkKKworLyoxNi0xOCBiaXRzIG9mIFJFR19BSUNfR0VOIGRlZmluZSBpcnEoMi00KSBncm91cCovCisKKyNkZWZpbmUgVElNRVIyX0lSUQkJKDEgPDwgMTYpCisjZGVmaW5lIFRJTUVSM19JUlEJCSgxIDw8IDE3KQorI2RlZmluZSBUSU1FUjRfSVJRCQkoMSA8PCAxOCkKKyNkZWZpbmUgVElNRV9HUk9VUF9JUlEJCShUSU1FUjJfSVJRfFRJTUVSM19JUlF8VElNRVI0X0lSUSkKKworI2VuZGlmIC8qIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhmYTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLXNlcmlhbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisKKyNkZWZpbmUgVUFSVDBfQkEJVzkwWDkwMF9WQV9VQVJUCisjZGVmaW5lIFVBUlQxX0JBCShXOTBYOTAwX1ZBX1VBUlQrMHgxMDApCisjZGVmaW5lIFVBUlQyX0JBCShXOTBYOTAwX1ZBX1VBUlQrMHgyMDApCisjZGVmaW5lIFVBUlQzX0JBCShXOTBYOTAwX1ZBX1VBUlQrMHgzMDApCisjZGVmaW5lIFVBUlQ0X0JBCShXOTBYOTAwX1ZBX1VBUlQrMHg0MDApCisKKyNkZWZpbmUgVUFSVDBfUEEJVzkwWDkwMF9QQV9VQVJUCisjZGVmaW5lIFVBUlQxX1BBCShXOTBYOTAwX1BBX1VBUlQrMHgxMDApCisjZGVmaW5lIFVBUlQyX1BBCShXOTBYOTAwX1BBX1VBUlQrMHgyMDApCisjZGVmaW5lIFVBUlQzX1BBCShXOTBYOTAwX1BBX1VBUlQrMHgzMDApCisjZGVmaW5lIFVBUlQ0X1BBCShXOTBYOTAwX1BBX1VBUlQrMHg0MDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCB3OTB4OTAwX3VhcnRfY2xrc3JjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAlkaXZpc29yOworCXVuc2lnbmVkIGludAltaW5fYmF1ZDsKKwl1bnNpZ25lZCBpbnQJbWF4X2JhdWQ7Cit9OworCitzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnIHsKKwl1bnNpZ25lZCBjaGFyCWh3cG9ydDsKKwl1bnNpZ25lZCBjaGFyCXVudXNlZDsKKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsKKwl1bnNpZ25lZCBsb25nCXVhcnRfZmxhZ3M7CisKKwl1bnNpZ25lZCBsb25nCXVjb247CisJdW5zaWduZWQgbG9uZwl1bGNvbjsKKwl1bnNpZ25lZCBsb25nCXVmY29uOworCisJc3RydWN0IHc5MHg5MDBfdWFydF9jbGtzcmMgKmNsb2NrczsKKwl1bnNpZ25lZCBpbnQJY2xvY2tzX3NpemU7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXIuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy10aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzkwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXIuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1RJTUVSX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1RJTUVSX0gKKworLyogVGltZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgVE1SX0JBCQkJVzkwWDkwMF9WQV9USU1FUgorI2RlZmluZSBSRUdfVENTUjAJCShUTVJfQkErMHgwMCkKKyNkZWZpbmUgUkVHX1RDU1IxCQkoVE1SX0JBKzB4MDQpCisjZGVmaW5lIFJFR19USUNSMAkJKFRNUl9CQSsweDA4KQorI2RlZmluZSBSRUdfVElDUjEJCShUTVJfQkErMHgwQykKKyNkZWZpbmUgUkVHX1REUjAJCShUTVJfQkErMHgxMCkKKyNkZWZpbmUgUkVHX1REUjEJCShUTVJfQkErMHgxNCkKKyNkZWZpbmUgUkVHX1RJU1IJCShUTVJfQkErMHgxOCkKKyNkZWZpbmUgUkVHX1dUQ1IJCShUTVJfQkErMHgxQykKKyNkZWZpbmUgUkVHX1RDU1IyCQkoVE1SX0JBKzB4MjApCisjZGVmaW5lIFJFR19UQ1NSMwkJKFRNUl9CQSsweDI0KQorI2RlZmluZSBSRUdfVElDUjIJCShUTVJfQkErMHgyOCkKKyNkZWZpbmUgUkVHX1RJQ1IzCQkoVE1SX0JBKzB4MkMpCisjZGVmaW5lIFJFR19URFIyCQkoVE1SX0JBKzB4MzApCisjZGVmaW5lIFJFR19URFIzCQkoVE1SX0JBKzB4MzQpCisjZGVmaW5lIFJFR19UQ1NSNAkJKFRNUl9CQSsweDQwKQorI2RlZmluZSBSRUdfVElDUjQJCShUTVJfQkErMHg0OCkKKyNkZWZpbmUgUkVHX1REUjQJCShUTVJfQkErMHg1MCkKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX1JFR1NfVElNRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NTNmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJY3B1X3Jlc2V0KDApOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0ZGNlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIENMT0NLX1RJQ0tfUkFURSBOb3csIEkgZG9uJ3QgdXNlIGl0LiAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAxNTAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworLyogRGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCitzdGF0aWMgdm9pZCBwdXRjKGludCBjaCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7Cit9CisKKyNlbmRpZi8qIF9fQVNNX1c5MFg5MDBfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOWRmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKKyNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKKworI2RlZmluZSBWTUFMTE9DX0VORAkgICgweEUwMDAwMDAwKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjRmYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2lycS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaXJxLmMKKyAqCisgKiBiYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYnkgQmVuIERvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKworc3RhdGljIHZvaWQgdzkweDkwMF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgUkVHX0FJQ19NRENSKTsKK30KKworLyoKKyAqIEJ5IHRoZSB3OTBwOTEwIHNwZWMsYW55IGlycSxvbmx5IHdyaXRlIDEKKyAqIHRvIFJFR19BSUNfRU9TQ1IgZm9yIEFDSworICovCisKK3N0YXRpYyB2b2lkIHc5MHg5MDBfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbCgweDAxLCBSRUdfQUlDX0VPU0NSKTsKK30KKworc3RhdGljIHZvaWQgdzkweDkwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaWYgKGlycSA9PSBJUlFfVF9JTlRfR1JPVVApIHsKKwkJbWFzayA9IF9fcmF3X3JlYWRsKFJFR19BSUNfR0VOKTsKKwkJX19yYXdfd3JpdGVsKFRJTUVfR1JPVVBfSVJRIHwgbWFzaywgUkVHX0FJQ19HRU4pOworCQlfX3Jhd193cml0ZWwoMSA8PCBJUlFfVF9JTlRfR1JPVVAsIFJFR19BSUNfTUVDUik7CisJfQorCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgUkVHX0FJQ19NRUNSKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3OTB4OTAwX2lycV9jaGlwID0geworCS5hY2sJICAgPSB3OTB4OTAwX2lycV9hY2ssCisJLm1hc2sJICAgPSB3OTB4OTAwX2lycV9tYXNrLAorCS51bm1hc2sJICAgPSB3OTB4OTAwX2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCB3OTB4OTAwX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycW5vOworCisJX19yYXdfd3JpdGVsKDB4RkZGRkZGRkUsIFJFR19BSUNfTURDUik7CisKKwlmb3IgKGlycW5vID0gSVJRX1dEVDsgaXJxbm8gPD0gSVJRX0FEQzsgaXJxbm8rKykgeworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZ3OTB4OTAwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDdhMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYworICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgImNwdS5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHc5MHA5MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnIHc5MHA5MTBfdWFydGNmZ3NbXSA9IHsKKwlXOTBYOTAwX1VBUlRDRkcoMCwgMCwgMCwgMCwgMCksCisJVzkwWDkwMF9VQVJUQ0ZHKDEsIDAsIDAsIDAsIDApLAorCVc5MFg5MDBfVUFSVENGRygyLCAwLCAwLCAwLCAwKSwKKwlXOTBYOTAwX1VBUlRDRkcoMywgMCwgMCwgMCwgMCksCisJVzkwWDkwMF9VQVJUQ0ZHKDQsIDAsIDAsIDAsIDApLAorfTsKKworLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3OTBwOTEwZXZiX2RldltdIF9faW5pdGRhdGEgPSB7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9tYXBfaW8odm9pZCkKK3sKKwl3OTBwOTEwX21hcF9pbyh3OTBwOTEwX2lvZGVzYywgQVJSQVlfU0laRSh3OTBwOTEwX2lvZGVzYykpOworCXc5MHA5MTBfaW5pdF9jbG9ja3MoMCk7CisJdzkwcDkxMF9pbml0X3VhcnRzKHc5MHA5MTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUodzkwcDkxMF91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXModzkwcDkxMGV2Yl9kZXYsIEFSUkFZX1NJWkUodzkwcDkxMGV2Yl9kZXYpKTsKK30KKworTUFDSElORV9TVEFSVChXOTBQOTEwRVZCLCAiVzkwUDkxMEVWQiIpCisJLyogTWFpbnRhaW5lcjogV2FuIFpvbmdTaHVuICovCisJLnBoeXNfaW8JPSBXOTBYOTAwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVc5MFg5MDBfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDAsCisJLm1hcF9pbwkJPSB3OTBwOTEwZXZiX21hcF9pbywKKwkuaW5pdF9pcnEJPSB3OTB4OTAwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSB3OTBwOTEwZXZiX2luaXQsCisJLnRpbWVyCQk9ICZ3OTB4OTAwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjllMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCisgKgorICogQmFzZWQgb24gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYyBieSBCZW4gRG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3lzdGVtLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXIuaD4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdzkweDkwMF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lciovCisKK3N0YXRpYyBpcnFyZXR1cm5fdAordzkweDkwMF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXRpbWVyX3RpY2soKTsKKwlfX3Jhd193cml0ZWwoMHgwMSwgUkVHX1RJU1IpOyAvKiBjbGVhciBUSUYwICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB3OTB4OTAwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAidzkweDkwMCBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSB3OTB4OTAwX3RpbWVyX2ludGVycnVwdCwKK307CisKKy8qU2V0IHVwIHRpbWVyIHJlZy4qLworCitzdGF0aWMgdm9pZCB3OTB4OTAwX3RpbWVyX3NldHVwKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKDAsIFJFR19UQ1NSMCk7CisJX19yYXdfd3JpdGVsKDAsIFJFR19UQ1NSMSk7CisJX19yYXdfd3JpdGVsKDAsIFJFR19UQ1NSMik7CisJX19yYXdfd3JpdGVsKDAsIFJFR19UQ1NSMyk7CisJX19yYXdfd3JpdGVsKDAsIFJFR19UQ1NSNCk7CisJX19yYXdfd3JpdGVsKDB4MUYsIFJFR19USVNSKTsKKwlfX3Jhd193cml0ZWwoMTUwMDAwMDAvKDEwMCAqIDEwMCksIFJFR19USUNSMCk7CisJX19yYXdfd3JpdGVsKDB4NjgwMDAwNjMsIFJFR19UQ1NSMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB3OTB4OTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwl3OTB4OTAwX3RpbWVyX3NldHVwKCk7CisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZ3OTB4OTAwX3RpbWVyX2lycSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgdzkweDkwMF90aW1lciA9IHsKKwkuaW5pdAkJPSB3OTB4OTAwX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSB3OTB4OTAwX2dldHRpbWVvZmZzZXQsCisJLnJlc3VtZQkJPSB3OTB4OTAwX3RpbWVyX3NldHVwCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3ODNiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jCisgKgorICogQmFzZWQgb24gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYyBieSBCZW4gRG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBXOTBQOTEwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgImNwdS5oIgorCisvKlc5MFA5MTAgaGFzIGZpdmUgdWFydHMqLworCisjZGVmaW5lIE1BWF9VQVJUX0NPVU5UIDUKK3N0YXRpYyBpbnQgdWFydF9jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1YXJ0X2RldnNbTUFYX1VBUlRfQ09VTlQtMV07CisKKy8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChJUlEpLAorCUlPREVTQ19FTlQoR0NSKSwKKwlJT0RFU0NfRU5UKFVBUlQpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoRUJJKSwKKwkvKklPREVTQ19FTlQoTENEKSwqLworfTsKKworLypJbml0IHRoZSBkZXYgcmVzb3VyY2UqLworCitzdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDApOworc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQxKTsKK3N0YXRpYyBXOTBYOTAwX1JFUyhVQVJUMik7CitzdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDMpOworc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQ0KTsKK3N0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MCwgVUFSVDAsIDAsICJ3OTB4OTAwLXVhcnQiKTsKK3N0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MSwgVUFSVDEsIDEsICJ3OTB4OTAwLXVhcnQiKTsKK3N0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MiwgVUFSVDIsIDIsICJ3OTB4OTAwLXVhcnQiKTsKK3N0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MywgVUFSVDMsIDMsICJ3OTB4OTAwLXVhcnQiKTsKK3N0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0NCwgVUFSVDQsIDQsICJ3OTB4OTAwLXVhcnQiKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnc5MHg5MDBfdWFydDAsCisJJnc5MHg5MDBfdWFydDEsCisJJnc5MHg5MDBfdWFydDIsCisJJnc5MHg5MDBfdWFydDMsCisJJnc5MHg5MDBfdWFydDQKK307CisKKy8qSW5pdCBXOTBQOTEwIHVhcnQgZGV2aWNlKi8KKwordm9pZCBfX2luaXQgdzkwcDkxMF9pbml0X3VhcnRzKHN0cnVjdCB3OTB4OTAwX3VhcnRjZmcgKmNmZywgaW50IG5vKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRkZXY7CisJaW50IHVhcnQsIHVhcnRkZXY7CisKKwkvKkJ5IG1pbigpIHRvIGp1ZGdlIGNvdW50IG9mIHVhcnQgYmUgdXNlZCBpbmRlZWQqLworCisJdWFydGRldiA9IEFSUkFZX1NJWkUodWFydF9kZXZpY2VzKTsKKwlubyA9IG1pbih1YXJ0ZGV2LCBubyk7CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgbm87IHVhcnQrKywgY2ZnKyspIHsKKwkJaWYgKGNmZy0+aHdwb3J0ICE9IHVhcnQpCisJCQlwcmludGsoS0VSTl9FUlIgInc5MHg5MDBfdWFydGNmZ1slZF0gZXJyb3JcbiIsIHVhcnQpOworCQlwbGF0ZGV2ID0gdWFydF9kZXZpY2VzW2NmZy0+aHdwb3J0XTsKKwkJdWFydF9kZXZzW3VhcnRdID0gcGxhdGRldjsKKwkJcGxhdGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmc7CisJfQorCXVhcnRfY291bnQgPSB1YXJ0OworfQorCisvKkluaXQgVzkwUDkxMCBldmIgaW8qLworCit2b2lkIF9faW5pdCB3OTBwOTEwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IG1hY2hfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlkY29kZSA9IDB4MDsKKworCWlvdGFibGVfaW5pdCh3OTBwOTEwX2lvZGVzYywgQVJSQVlfU0laRSh3OTBwOTEwX2lvZGVzYykpOworCisJaWRjb2RlID0gX19yYXdfcmVhZGwoVzkwWDkwMFBESUQpOworCWlmIChpZGNvZGUgIT0gVzkwUDkxMF9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDUFUgdHlwZSAweCUwOGx4IGlzIG5vdCBXOTBQOTEwXG4iLCBpZGNvZGUpOworfQorCisvKkluaXQgVzkwUDkxMCBjbG9jayovCisKK3ZvaWQgX19pbml0IHc5MHA5MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHc5MHA5MTBfaW5pdF9jcHUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgdzkweDkwMF9hcmNoX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdzkwcDkxMF9pbml0X2NwdSgpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1YXJ0X2RldnMsIHVhcnRfY291bnQpOworCit9CithcmNoX2luaXRjYWxsKHc5MHg5MDBfYXJjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGFiNWY3YTIuLmQ0OTBmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTAsOCArMTAsNyBAQAogCiAjIEFSTTYxMAogY29uZmlnIENQVV9BUk02MTAKLQlib29sICJTdXBwb3J0IEFSTTYxMCBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX1JQQworCWJvb2wgIlN1cHBvcnQgQVJNNjEwIHByb2Nlc3NvciIgaWYgQVJDSF9SUEMKIAlzZWxlY3QgQ1BVXzMydjMKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC00Myw4ICs0Miw3IEBACiAKICMgQVJNNzEwCiBjb25maWcgQ1BVX0FSTTcxMAotCWJvb2wgIlN1cHBvcnQgQVJNNzEwIHByb2Nlc3NvciIgaWYgIUFSQ0hfQ0xQUzc1MDAgJiYgQVJDSF9SUEMKLQlkZWZhdWx0IHkgaWYgQVJDSF9DTFBTNzUwMAorCWJvb2wgIlN1cHBvcnQgQVJNNzEwIHByb2Nlc3NvciIgaWYgQVJDSF9SUEMKIAlzZWxlY3QgQ1BVXzMydjMKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC02Myw4ICs2MSw3IEBACiAKICMgQVJNNzIwVAogY29uZmlnIENQVV9BUk03MjBUCi0JYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgIUFSQ0hfQ0xQUzcxMVggJiYgIUFSQ0hfTDcyMDAgJiYgIUFSQ0hfQ0RCODk3MTIgJiYgQVJDSF9JTlRFR1JBVE9SCi0JZGVmYXVsdCB5IGlmIEFSQ0hfQ0xQUzcxMVggfHwgQVJDSF9MNzIwMCB8fCBBUkNIX0NEQjg5NzEyIHx8IEFSQ0hfSDcyMFgKKwlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMTE0LDkgKzExMSw3IEBACiAKICMgQVJNOTIwVAogY29uZmlnIENQVV9BUk05MjBUCi0JYm9vbCAiU3VwcG9ydCBBUk05MjBUIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBDUFVfUzNDMjQxMCB8fCBDUFVfUzNDMjQ0MCB8fCBDUFVfUzNDMjQ0MiB8fCBBUkNIX0lNWCB8fCBBUkNIX0FBRUMyMDAwIHx8IEFSQ0hfQVQ5MVJNOTIwMAotCWRlZmF1bHQgeSBpZiBDUFVfUzNDMjQxMCB8fCBDUFVfUzNDMjQ0MCB8fCBDUFVfUzNDMjQ0MiB8fCBBUkNIX0FUOTFSTTkyMDAKKwlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMTM4LDggKzEzMyw2IEBACiAjIEFSTTkyMlQKIGNvbmZpZyBDUFVfQVJNOTIyVAogCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgotCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX0tTODY5NQotCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MFggfHwgQVJDSF9LUzg2OTUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMTU5LDggKzE1Miw2IEBACiAjIEFSTTkyNVQKIGNvbmZpZyBDUFVfQVJNOTI1VAogIAlib29sICJTdXBwb3J0IEFSTTkyNVQgcHJvY2Vzc29yIiBpZiBBUkNIX09NQVAxCi0gCWRlcGVuZHMgb24gQVJDSF9PTUFQMTVYWAotIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMTVYWAogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCkBAIC0xNzksMjIgKzE3MCw3IEBACiAKICMgQVJNOTI2VAogY29uZmlnIENQVV9BUk05MjZUCi0JYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBcCi0JCU1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBcCi0JCUFSQ0hfT01BUDE2WFggfHwgTUFDSF9SRUFMVklFV19FQiB8fCBcCi0JCUFSQ0hfUE5YNDAwOCB8fCBBUkNIX05FVFggfHwgQ1BVX1MzQzI0MTIgfHwgXAotCQlBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjEgfHwgXAotCQlBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBcCi0JCUFSQ0hfQVQ5MVNBTTlHMjAgfHwgQVJDSF9BVDkxQ0FQOSB8fCBcCi0JCUFSQ0hfTlM5WFhYIHx8IEFSQ0hfREFWSU5DSSB8fCBBUkNIX01YMgotCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBcCi0JCUFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IFwKLQkJQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMiB8fCBcCi0JCUFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MSB8fCBcCi0JCUFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9BVDkxU0FNOVJMIHx8IFwKLQkJQVJDSF9BVDkxU0FNOUcyMCB8fCBBUkNIX0FUOTFDQVA5IHx8IFwKLQkJQVJDSF9OUzlYWFggfHwgQVJDSF9EQVZJTkNJIHx8IEFSQ0hfTVgyCisJYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMjQ3LDggKzIyMyw3IEBACiAKICMgQVJNMTAyMCAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMAotCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTEwMjBUIChyZXYgMCkgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCkBAIC0yNjYsOCArMjQxLDcgQEAKIAogIyBBUk0xMDIwRSAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMEUKLQlib29sICJTdXBwb3J0IEFSTTEwMjBFIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUgorCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCkBAIC0yODAsOCArMjU0LDcgQEAKIAogIyBBUk0xMDIyRQogY29uZmlnIENQVV9BUk0xMDIyCi0JYm9vbCAiU3VwcG9ydCBBUk0xMDIyRSBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IKKwlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMjk5LDggKzI3Miw3IEBACiAKICMgQVJNMTAyNkVKLVMKIGNvbmZpZyBDUFVfQVJNMTAyNgotCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCisJYm9vbCAiU3VwcG9ydCBBUk0xMDI2RUotUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUICMgQnV0IG5lZWQgSmF6ZWxsZSwgYnV0IEVWNVRKIGlnbm9yZXMgYml0IDEwCiAJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKQEAgLTMxNyw4ICsyODksNyBAQAogCiAjIFNBMTEwCiBjb25maWcgQ1BVX1NBMTEwCi0JYm9vbCAiU3VwcG9ydCBTdHJvbmdBUk0oUikgU0EtMTEwIHByb2Nlc3NvciIgaWYgIUFSQ0hfRUJTQTExMCAmJiAhRk9PVEJSSURHRSAmJiAhQVJDSF9UQk9YICYmICFBUkNIX1NIQVJLICYmICFBUkNIX05FWFVTUENJICYmIEFSQ0hfUlBDCi0JZGVmYXVsdCB5IGlmIEFSQ0hfRUJTQTExMCB8fCBGT09UQlJJREdFIHx8IEFSQ0hfVEJPWCB8fCBBUkNIX1NIQVJLIHx8IEFSQ0hfTkVYVVNQQ0kKKwlib29sICJTdXBwb3J0IFN0cm9uZ0FSTShSKSBTQS0xMTAgcHJvY2Vzc29yIiBpZiBBUkNIX1JQQwogCXNlbGVjdCBDUFVfMzJ2MyBpZiBBUkNIX1JQQwogCXNlbGVjdCBDUFVfMzJ2NCBpZiAhQVJDSF9SUEMKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0CkBAIC0zNDAsOCArMzExLDYgQEAKICMgU0ExMTAwCiBjb25maWcgQ1BVX1NBMTEwMAogCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwCi0JZGVmYXVsdCB5CiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNAogCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCkBAIC0zNTMsOCArMzIyLDYgQEAKICMgWFNjYWxlCiBjb25maWcgQ1BVX1hTQ0FMRQogCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfSU9QMzJYIHx8IEFSQ0hfSU9QMzNYIHx8IFBYQTI1eCB8fCBQWEEyN3ggfHwgQVJDSF9JWFA0WFggfHwgQVJDSF9JWFAyMDAwCi0JZGVmYXVsdCB5CiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMzY1LDggKzMzMiw2IEBACiAjIFhTY2FsZSBDb3JlIFZlcnNpb24gMwogY29uZmlnIENQVV9YU0MzCiAJYm9vbAotCWRlcGVuZHMgb24gQVJDSF9JWFAyM1hYIHx8IEFSQ0hfSU9QMTNYWCB8fCBQWEEzeHgKLQlkZWZhdWx0IHkKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAogCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCkBAIC0zNzgsOCArMzQzLDYgQEAKICMgRmVyb2Nlb24KIGNvbmZpZyBDUFVfRkVST0NFT04KIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX09SSU9ONVggfHwgQVJDSF9MT0tJIHx8IEFSQ0hfS0lSS1dPT0QgfHwgQVJDSF9NVjc4WFgwCi0JZGVmYXVsdCB5CiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKIAlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgpAQCAtMzk5LDEwICszNjIsNyBAQAogCiAjIEFSTXY2CiBjb25maWcgQ1BVX1Y2Ci0JYm9vbCAiU3VwcG9ydCBBUk0gVjYgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9PTUFQMiB8fCBBUkNIX01YMyB8fCBBUkNIX01TTSB8fCBNQUNIX1JFQUxWSUVXX1BCMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCMTE3NgotCWRlZmF1bHQgeSBpZiBBUkNIX01YMwotCWRlZmF1bHQgeSBpZiBBUkNIX01TTQorCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CiAJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKQEAgLTQyNyw4ICszODcsNyBAQAogCiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3Ci0JYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9PTUFQMworCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwpAQCAtNzQ1LDcgKzcwNCw3IEBACiAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2CisJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFJFQUxWSUVXX0VCX0E5TVAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IDJkNTg4NGMuLjNhMzk4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCisrKyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCmluZGV4IDNiMzYzOWUuLjhhNGFiZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpAQCAtOSw3ICs5LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKaW5kZXggNTc4NmFkZjEuLjM2Njg2MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUwpAQCAtOSw3ICs5LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCmluZGV4IDUxYTliMGIuLmM1NGZhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKQEAgLTEzLDcgKzEzLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKaW5kZXggZDE5YzJiZS4uYmU5M2ZmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCkBAIC0yNiw2ICsyNiw3IEBACiAgKgktIG1tICAgIC0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQogICovCiBFTlRSWSh2N19mbHVzaF9kY2FjaGVfYWxsKQorCWRtYgkJCQkJQCBlbnN1cmUgb3JkZXJpbmcgd2l0aCBwcmV2aW91cyBtZW1vcnkgYWNjZXNzZXMKIAltcmMJcDE1LCAxLCByMCwgYzAsIGMwLCAxCQlAIHJlYWQgY2xpZHIKIAlhbmRzCXIzLCByMCwgIzB4NzAwMDAwMAkJQCBleHRyYWN0IGxvYyBmcm9tIGNsaWRyCiAJbW92CXIzLCByMywgbHNyICMyMwkJCUAgbGVmdCBhbGlnbiBsb2MgYml0IGZpZWxkCkBAIC02NCw2ICs2NSw3IEBACiBmaW5pc2hlZDoKIAltb3YJcjEwLCAjMAkJCQlAIHN3aXRoIGJhY2sgdG8gY2FjaGUgbGV2ZWwgMAogCW1jcglwMTUsIDIsIHIxMCwgYzAsIGMwLCAwCQlAIHNlbGVjdCBjdXJyZW50IGNhY2hlIGxldmVsIGluIGNzc3IKKwlkc2IKIAlpc2IKIAltb3YJcGMsIGxyCiBFTkRQUk9DKHY3X2ZsdXNoX2RjYWNoZV9hbGwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViMGQzMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5TCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9saWIvY29weXBhZ2UtZmVyb2Nlb24uUwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9ycwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBoYW5kbGVzIGNvcHlfdXNlcl9wYWdlIGFuZCBjbGVhcl91c2VyX3BhZ2Ugb24gRmVyb2Nlb24KLSAqIG1vcmUgb3B0aW1hbGx5IHRoYW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zLgotICovCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLQotCS50ZXh0Ci0JLmFsaWduCTUKLQotRU5UUlkoZmVyb2Nlb25fY29weV91c2VyX3BhZ2UpCi0Jc3RtZmQJc3AhLCB7cjQtcjksIGxyfQotCW1vdglpcCwgI1BBR0VfU1oKLTE6CW1vdglsciwgcjEKLQlsZG1pYQlyMSEsIHtyMiAtIHI5fQotCXBsZAlbbHIsICMzMl0KLQlwbGQJW2xyLCAjNjRdCi0JcGxkCVtsciwgIzk2XQotCXBsZAlbbHIsICMxMjhdCi0JcGxkCVtsciwgIzE2MF0KLQlwbGQJW2xyLCAjMTkyXQotCXBsZAlbbHIsICMyMjRdCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCWxkbWlhCXIxISwge3IyIC0gcjl9Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0Jc3RtaWEJcjAsIHtyMiAtIHI5fQotCXN1YnMJaXAsIGlwLCAjKDMyICogOCkKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmUKLQlhZGQJcjAsIHIwLCAjMzIKLQlibmUJMWIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgotCWxkbWZkCXNwISwge3I0LXI5LCBwY30KLQotCS5hbGlnbgk1Ci0KLUVOVFJZKGZlcm9jZW9uX2NsZWFyX3VzZXJfcGFnZSkKLQlzdG1mZAlzcCEsIHtyNC1yNywgbHJ9Ci0JbW92CXIxLCAjUEFHRV9TWi8zMgotCW1vdglyMiwgIzAKLQltb3YJcjMsICMwCi0JbW92CXI0LCAjMAotCW1vdglyNSwgIzAKLQltb3YJcjYsICMwCi0JbW92CXI3LCAjMAotCW1vdglpcCwgIzAKLQltb3YJbHIsICMwCi0xOglzdG1pYQlyMCwge3IyLXI3LCBpcCwgbHJ9Ci0Jc3VicwlyMSwgcjEsICMxCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lCi0JYWRkCXIwLCByMCwgIzMyCi0JYm5lCTFiCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKLQlsZG1mZAlzcCEsIHtyNC1yNywgcGN9Ci0KLQlfX0lOSVREQVRBCi0KLQkudHlwZQlmZXJvY2Vvbl91c2VyX2ZucywgI29iamVjdAotRU5UUlkoZmVyb2Nlb25fdXNlcl9mbnMpCi0JLmxvbmcJZmVyb2Nlb25fY2xlYXJfdXNlcl9wYWdlCi0JLmxvbmcJZmVyb2Nlb25fY29weV91c2VyX3BhZ2UKLQkuc2l6ZQlmZXJvY2Vvbl91c2VyX2ZucywgLiAtIGZlcm9jZW9uX3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JhNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGhhbmRsZXMgY29weV91c2VyX2hpZ2hwYWdlIGFuZCBjbGVhcl91c2VyX3BhZ2Ugb24gRmVyb2Nlb24KKyAqIG1vcmUgb3B0aW1hbGx5IHRoYW4gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobmFrZWQpKQorZmVyb2Nlb25fY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKK3sKKwlhc20oIlwKKwlzdG1mZAlzcCEsIHtyNC1yOSwgbHJ9CQlcblwKKwltb3YJaXAsICUwCQkJCVxuXAorMToJbW92CWxyLCByMQkJCQlcblwKKwlsZG1pYQlyMSEsIHtyMiAtIHI5fQkJCVxuXAorCXBsZAlbbHIsICMzMl0JCQlcblwKKwlwbGQJW2xyLCAjNjRdCQkJXG5cCisJcGxkCVtsciwgIzk2XQkJCVxuXAorCXBsZAlbbHIsICMxMjhdCQkJXG5cCisJcGxkCVtsciwgIzE2MF0JCQlcblwKKwlwbGQJW2xyLCAjMTkyXQkJCVxuXAorCXBsZAlbbHIsICMyMjRdCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCWxkbWlhCXIxISwge3IyIC0gcjl9CQkJXG5cCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzMyCQkJXG5cCisJc3RtaWEJcjAsIHtyMiAtIHI5fQkJCVxuXAorCXN1YnMJaXAsIGlwLCAjKDMyICogOCkJCVxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgbGluZVxuXAorCWFkZAlyMCwgcjAsICMzMgkJCVxuXAorCWJuZQkxYgkJCQlcblwKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQlxuXAorCWxkbWZkCXNwISwge3I0LXI5LCBwY30iCisJOgorCTogIkkiIChQQUdFX1NJWkUpKTsKK30KKwordm9pZCBmZXJvY2Vvbl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKKwl1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKmt0bywgKmtmcm9tOworCisJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKKwlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmZXJvY2Vvbl9jb3B5X3VzZXJfcGFnZShrdG8sIGtmcm9tKTsKKwlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMSk7CisJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIwKTsKK30KKwordm9pZCBmZXJvY2Vvbl9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKnB0ciwgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWFzbSB2b2xhdGlsZSAoIlwKKwltb3YJcjEsICUyCQkJCVxuXAorCW1vdglyMiwgIzAJCQkJXG5cCisJbW92CXIzLCAjMAkJCQlcblwKKwltb3YJcjQsICMwCQkJCVxuXAorCW1vdglyNSwgIzAJCQkJXG5cCisJbW92CXI2LCAjMAkJCQlcblwKKwltb3YJcjcsICMwCQkJCVxuXAorCW1vdglpcCwgIzAJCQkJXG5cCisJbW92CWxyLCAjMAkJCQlcblwKKzE6CXN0bWlhCSUwLCB7cjItcjcsIGlwLCBscn0JCVxuXAorCXN1YnMJcjEsIHIxLCAjMQkJCVxuXAorCW1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgbGluZVxuXAorCWFkZAklMCwgJTAsICMzMgkJCVxuXAorCWJuZQkxYgkJCQlcblwKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQiIKKwk6ICI9ciIgKHB0cikKKwk6ICIwIiAoa2FkZHIpLCAiSSIgKFBBR0VfU0laRSAvIDMyKQorCTogInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgInI2IiwgInI3IiwgImlwIiwgImxyIik7CisJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworfQorCitzdHJ1Y3QgY3B1X3VzZXJfZm5zIGZlcm9jZW9uX3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7CisJLmNwdV9jbGVhcl91c2VyX2hpZ2hwYWdlID0gZmVyb2Nlb25fY2xlYXJfdXNlcl9oaWdocGFnZSwKKwkuY3B1X2NvcHlfdXNlcl9oaWdocGFnZQk9IGZlcm9jZW9uX2NvcHlfdXNlcl9oaWdocGFnZSwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLlMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWUzOTRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jb3B5cGFnZS5TCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIEFTTSBvcHRpbWlzZWQgc3RyaW5nIGZ1bmN0aW9ucwotICovCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0KLQkJLnRleHQKLQkJLmFsaWduCTUKLS8qCi0gKiBBUk12MyBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKLSAqCi0gKiBGSVhNRTogZG8gd2UgbmVlZCB0byBoYW5kbGUgY2FjaGUgc3R1ZmYuLi4KLSAqLwotRU5UUlkodjNfY29weV91c2VyX3BhZ2UpCi0Jc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAJMgotCW1vdglyMiwgI1BBR0VfU1ovNjQJCQlACTEKLQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxCi0xOglzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0Ci0Jc3VicwlyMiwgcjIsICMxCQkJQAkxCi0Jc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQlsZG1uZWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0Ci0JYm5lCTFiCQkJCUAJMQotCWxkbWZkCXNwISwge3I0LCBwY30JCQlACTMKLQotCS5hbGlnbgk1Ci0vKgotICogQVJNdjMgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQotICoKLSAqIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGhhbmRsZSBjYWNoZSBzdHVmZi4uLgotICovCi1FTlRSWSh2M19jbGVhcl91c2VyX3BhZ2UpCi0Jc3RyCWxyLCBbc3AsICMtNF0hCi0JbW92CXIxLCAjUEFHRV9TWi82NAkJCUAgMQotCW1vdglyMiwgIzAJCQkJQCAxCi0JbW92CXIzLCAjMAkJCQlAIDEKLQltb3YJaXAsICMwCQkJCUAgMQotCW1vdglsciwgIzAJCQkJQCAxCi0xOglzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAotCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0Ci0Jc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAotCXN1YnMJcjEsIHIxLCAjMQkJCUAgMQotCWJuZQkxYgkJCQlAIDEKLQlsZHIJcGMsIFtzcF0sICM0Ci0KLQlfX0lOSVREQVRBCi0KLQkudHlwZQl2M191c2VyX2ZucywgI29iamVjdAotRU5UUlkodjNfdXNlcl9mbnMpCi0JLmxvbmcJdjNfY2xlYXJfdXNlcl9wYWdlCi0JLmxvbmcJdjNfY29weV91c2VyX3BhZ2UKLQkuc2l6ZQl2M191c2VyX2ZucywgLiAtIHYzX3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVkOTZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKy8qCisgKiBBUk12MyBvcHRpbWlzZWQgY29weV91c2VyX2hpZ2hwYWdlCisgKgorICogRklYTUU6IGRvIHdlIG5lZWQgdG8gaGFuZGxlIGNhY2hlIHN0dWZmLi4uCisgKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK3YzX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCit7CisJYXNtKCJcblwKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQAkyXG5cCisJbW92CXIyLCAlMgkJCQlACTFcblwKKwlsZG1pYQklMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxXG5cCisxOglzdG1pYQklMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNFxuXAorCWxkbWlhCSUwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzFcblwKKwlzdG1pYQklMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNFxuXAorCWxkbWlhCSUwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzFcblwKKwlzdG1pYQklMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNFxuXAorCWxkbWlhCSUwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0XG5cCisJc3VicwlyMiwgcjIsICMxCQkJQAkxXG5cCisJc3RtaWEJJTEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTRcblwKKwlsZG1uZWlhCSUwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0XG5cCisJYm5lCTFiCQkJCUAJMVxuXAorCWxkbWZkCXNwISwge3I0LCBwY30JCQlACTMiCisJOgorCTogInIiIChrZnJvbSksICJyIiAoa3RvKSwgIkkiIChQQUdFX1NJWkUgLyA2NCkpOworfQorCit2b2lkIHYzX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqa3RvLCAqa2Zyb207CisKKwlrdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjApOworCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjEpOworCXYzX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOworfQorCisvKgorICogQVJNdjMgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICoKKyAqIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGhhbmRsZSBjYWNoZSBzdHVmZi4uLgorICovCit2b2lkIHYzX2NsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqcHRyLCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJYXNtIHZvbGF0aWxlKCJcblwKKwltb3YJcjEsICUyCQkJCUAgMVxuXAorCW1vdglyMiwgIzAJCQkJQCAxXG5cCisJbW92CXIzLCAjMAkJCQlAIDFcblwKKwltb3YJaXAsICMwCQkJCUAgMVxuXAorCW1vdglsciwgIzAJCQkJQCAxXG5cCisxOglzdG1pYQklMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCXN0bWlhCSUwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwlzdG1pYQklMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMVxuXAorCWJuZQkxYgkJCQlAIDEiCisJOiAiPXIiIChwdHIpCisJOiAiMCIgKGthZGRyKSwgIkkiIChQQUdFX1NJWkUgLyA2NCkKKwk6ICJyMSIsICJyMiIsICJyMyIsICJpcCIsICJsciIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKK30KKworc3RydWN0IGNwdV91c2VyX2ZucyB2M191c2VyX2ZucyBfX2luaXRkYXRhID0geworCS5jcHVfY2xlYXJfdXNlcl9oaWdocGFnZSA9IHYzX2NsZWFyX3VzZXJfaGlnaHBhZ2UsCisJLmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UJPSB2M19jb3B5X3VzZXJfaGlnaHBhZ2UsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCmluZGV4IDhkMzNlMjUuLmJkYjVmZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKQEAgLTE1LDggKzE1LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhtaW5pY2FjaGVfbG9jayk7CiAKIC8qCi0gKiBBUk12NCBtaW5pLWRjYWNoZSBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKKyAqIEFSTXY0IG1pbmktZGNhY2hlIG9wdGltaXNlZCBjb3B5X3VzZXJfaGlnaHBhZ2UKICAqCiAgKiBXZSBmbHVzaCB0aGUgZGVzdGluYXRpb24gY2FjaGUgbGluZXMganVzdCBiZWZvcmUgd2Ugd3JpdGUgdGhlIGRhdGEgaW50byB0aGUKICAqIGNvcnJlc3BvbmRpbmcgYWRkcmVzcy4gIFNpbmNlIHRoZSBEY2FjaGUgaXMgcmVhZC1hbGxvY2F0ZSwgdGhpcyByZW1vdmVzIHRoZQpAQCAtNDIsNyArNDIsNyBAQAogICoKICAqIE5vdGU6IFdlIHJlbHkgb24gYWxsIEFSTXY0IHByb2Nlc3NvcnMgaW1wbGVtZW50aW5nIHRoZSAiaW52YWxpZGF0ZSBEIGxpbmUiCiAgKiBpbnN0cnVjdGlvbi4gIElmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBseSB0aGlzLCB5b3UgaGF2ZSB0byB3cml0ZSB5b3VyCi0gKiBvd24gY29weV91c2VyX3BhZ2UgdGhhdCBkb2VzIHRoZSByaWdodCB0aGluZy4KKyAqIG93biBjb3B5X3VzZXJfaGlnaHBhZ2UgdGhhdCBkb2VzIHRoZSByaWdodCB0aGluZy4KICAqLwogc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobmFrZWQpKQogbWNfY29weV91c2VyX3BhZ2Uodm9pZCAqZnJvbSwgdm9pZCAqdG8pCkBAIC02OCw1MCArNjgsNTMgQEAKIAk6ICJyIiAoZnJvbSksICJyIiAodG8pLCAiSSIgKFBBR0VfU0laRSAvIDY0KSk7CiB9CiAKLXZvaWQgdjRfbWNfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3ZvaWQgdjRfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpmcm9tLCBzdHJ1Y3QgcGFnZSAqdG8sCisJdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShrZnJvbSk7CisJdm9pZCAqa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIxKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpKQotCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfbWFwcGluZyhwYWdlKSwgcGFnZSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZmcm9tLT5mbGFncykpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9tYXBwaW5nKGZyb20pLCBmcm9tKTsKIAogCXNwaW5fbG9jaygmbWluaWNhY2hlX2xvY2spOwogCi0Jc2V0X3B0ZV9leHQoVE9QX1BURSgweGZmZmY4MDAwKSwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBtaW5pY2FjaGVfcGdwcm90KSwgMCk7CisJc2V0X3B0ZV9leHQoVE9QX1BURSgweGZmZmY4MDAwKSwgcGZuX3B0ZShwYWdlX3RvX3Bmbihmcm9tKSwgbWluaWNhY2hlX3BncHJvdCksIDApOwogCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSgweGZmZmY4MDAwKTsKIAogCW1jX2NvcHlfdXNlcl9wYWdlKCh2b2lkICopMHhmZmZmODAwMCwga3RvKTsKIAogCXNwaW5fdW5sb2NrKCZtaW5pY2FjaGVfbG9jayk7CisKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjEpOwogfQogCiAvKgogICogQVJNdjQgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQogICovCi12b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKLXY0X21jX2NsZWFyX3VzZXJfcGFnZSh2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3ZvaWQgdjRfbWNfY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKLQlhc20gdm9sYXRpbGUoCi0JInN0cglsciwgW3NwLCAjLTRdIVxuXAotCW1vdglyMSwgJTAJCQkJQCAxXG5cCisJdm9pZCAqcHRyLCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJYXNtIHZvbGF0aWxlKCJcCisJbW92CXIxLCAlMgkJCQlAIDFcblwKIAltb3YJcjIsICMwCQkJCUAgMVxuXAogCW1vdglyMywgIzAJCQkJQCAxXG5cCiAJbW92CWlwLCAjMAkJCQlAIDFcblwKIAltb3YJbHIsICMwCQkJCUAgMVxuXAotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmVcblwKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAotCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmVcblwKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAotCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisxOgltY3IJcDE1LCAwLCAlMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZVxuXAorCXN0bWlhCSUwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwltY3IJcDE1LCAwLCAlMCwgYzcsIGM2LCAxCQlAIDEgICBpbnZhbGlkYXRlIEQgbGluZVxuXAorCXN0bWlhCSUwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKIAlzdWJzCXIxLCByMSwgIzEJCQlAIDFcblwKLQlibmUJMWIJCQkJQCAxXG5cCi0JbGRyCXBjLCBbc3BdLCAjNCIKLQk6Ci0JOiAiSSIgKFBBR0VfU0laRSAvIDY0KSk7CisJYm5lCTFiCQkJCUAgMSIKKwk6ICI9ciIgKHB0cikKKwk6ICIwIiAoa2FkZHIpLCAiSSIgKFBBR0VfU0laRSAvIDY0KQorCTogInIxIiwgInIyIiwgInIzIiwgImlwIiwgImxyIik7CisJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogfQogCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zIHY0X21jX3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7Ci0JLmNwdV9jbGVhcl91c2VyX3BhZ2UJPSB2NF9tY19jbGVhcl91c2VyX3BhZ2UsIAotCS5jcHVfY29weV91c2VyX3BhZ2UJPSB2NF9tY19jb3B5X3VzZXJfcGFnZSwKKwkuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSB2NF9tY19jbGVhcl91c2VyX2hpZ2hwYWdlLAorCS5jcHVfY29weV91c2VyX2hpZ2hwYWdlCT0gdjRfbWNfY29weV91c2VyX2hpZ2hwYWdlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuUyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxMTczNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jb3B5cGFnZS5TCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIEFTTSBvcHRpbWlzZWQgc3RyaW5nIGZ1bmN0aW9ucwotICovCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLQotCS50ZXh0Ci0JLmFsaWduCTUKLS8qCi0gKiBBUk12NCBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKLSAqCi0gKiBXZSBmbHVzaCB0aGUgZGVzdGluYXRpb24gY2FjaGUgbGluZXMganVzdCBiZWZvcmUgd2Ugd3JpdGUgdGhlIGRhdGEgaW50byB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWRkcmVzcy4gIFNpbmNlIHRoZSBEY2FjaGUgaXMgcmVhZC1hbGxvY2F0ZSwgdGhpcyByZW1vdmVzIHRoZQotICogRGNhY2hlIGFsaWFzaW5nIGlzc3VlLiAgVGhlIHdyaXRlcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgd3JpdGUgYnVmZmVyLAotICogYW5kIG1lcmdlZCBhcyBhcHByb3ByaWF0ZS4KLSAqCi0gKiBOb3RlOiBXZSByZWx5IG9uIGFsbCBBUk12NCBwcm9jZXNzb3JzIGltcGxlbWVudGluZyB0aGUgImludmFsaWRhdGUgRCBsaW5lIgotICogaW5zdHJ1Y3Rpb24uICBJZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwbHkgdGhpcywgeW91IGhhdmUgdG8gd3JpdGUgeW91cgotICogb3duIGNvcHlfdXNlcl9wYWdlIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCi0gKi8KLUVOVFJZKHY0d2JfY29weV91c2VyX3BhZ2UpCi0Jc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAgMgotCW1vdglyMiwgI1BBR0VfU1ovNjQJCQlAIDEKLQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmUKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0KzEKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCAxICAgaW52YWxpZGF0ZSBEIGxpbmUKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0Jc3VicwlyMiwgcjIsICMxCQkJQCAxCi0Jc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKLQlsZG1uZWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0JYm5lCTFiCQkJCUAgMQotCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIDEgICBkcmFpbiBXQgotCWxkbWZkCSBzcCEsIHtyNCwgcGN9CQkJQCAzCi0KLQkuYWxpZ24JNQotLyoKLSAqIEFSTXY0IG9wdGltaXNlZCBjbGVhcl91c2VyX3BhZ2UKLSAqCi0gKiBTYW1lIHN0b3J5IGFzIGFib3ZlLgotICovCi1FTlRSWSh2NHdiX2NsZWFyX3VzZXJfcGFnZSkKLQlzdHIJbHIsIFtzcCwgIy00XSEKLQltb3YJcjEsICNQQUdFX1NaLzY0CQkJQCAxCi0JbW92CXIyLCAjMAkJCQlAIDEKLQltb3YJcjMsICMwCQkJCUAgMQotCW1vdglpcCwgIzAJCQkJQCAxCi0JbW92CWxyLCAjMAkJCQlAIDEKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lCi0Jc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lCi0Jc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAotCXN1YnMJcjEsIHIxLCAjMQkJCUAgMQotCWJuZQkxYgkJCQlAIDEKLQltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCAxICAgZHJhaW4gV0IKLQlsZHIJcGMsIFtzcF0sICM0Ci0KLQlfX0lOSVREQVRBCi0KLQkudHlwZQl2NHdiX3VzZXJfZm5zLCAjb2JqZWN0Ci1FTlRSWSh2NHdiX3VzZXJfZm5zKQotCS5sb25nCXY0d2JfY2xlYXJfdXNlcl9wYWdlCi0JLmxvbmcJdjR3Yl9jb3B5X3VzZXJfcGFnZQotCS5zaXplCXY0d2JfdXNlcl9mbnMsIC4gLSB2NHdiX3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjOTNkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworLyoKKyAqIEFSTXY0IG9wdGltaXNlZCBjb3B5X3VzZXJfaGlnaHBhZ2UKKyAqCisgKiBXZSBmbHVzaCB0aGUgZGVzdGluYXRpb24gY2FjaGUgbGluZXMganVzdCBiZWZvcmUgd2Ugd3JpdGUgdGhlIGRhdGEgaW50byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWRkcmVzcy4gIFNpbmNlIHRoZSBEY2FjaGUgaXMgcmVhZC1hbGxvY2F0ZSwgdGhpcyByZW1vdmVzIHRoZQorICogRGNhY2hlIGFsaWFzaW5nIGlzc3VlLiAgVGhlIHdyaXRlcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgd3JpdGUgYnVmZmVyLAorICogYW5kIG1lcmdlZCBhcyBhcHByb3ByaWF0ZS4KKyAqCisgKiBOb3RlOiBXZSByZWx5IG9uIGFsbCBBUk12NCBwcm9jZXNzb3JzIGltcGxlbWVudGluZyB0aGUgImludmFsaWRhdGUgRCBsaW5lIgorICogaW5zdHJ1Y3Rpb24uICBJZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwbHkgdGhpcywgeW91IGhhdmUgdG8gd3JpdGUgeW91cgorICogb3duIGNvcHlfdXNlcl9oaWdocGFnZSB0aGF0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCit2NHdiX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCit7CisJYXNtKCJcCisJc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAgMlxuXAorCW1vdglyMiwgJTAJCQkJQCAxXG5cCisJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lXG5cCisJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNCsxXG5cCisJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lXG5cCisJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCXN1YnMJcjIsIHIyLCAjMQkJCUAgMVxuXAorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJbGRtbmVpYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCWJuZQkxYgkJCQlAIDFcblwKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCAxICAgZHJhaW4gV0JcblwKKwlsZG1mZAkgc3AhLCB7cjQsIHBjfQkJCUAgMyIKKwk6CisJOiAiSSIgKFBBR0VfU0laRSAvIDY0KSk7Cit9CisKK3ZvaWQgdjR3Yl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKKwl1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKmt0bywgKmtmcm9tOworCisJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKKwlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwl2NHdiX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOworfQorCisvKgorICogQVJNdjQgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICoKKyAqIFNhbWUgc3RvcnkgYXMgYWJvdmUuCisgKi8KK3ZvaWQgdjR3Yl9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKnB0ciwgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWFzbSB2b2xhdGlsZSgiXAorCW1vdglyMSwgJTIJCQkJQCAxXG5cCisJbW92CXIyLCAjMAkJCQlAIDFcblwKKwltb3YJcjMsICMwCQkJCUAgMVxuXAorCW1vdglpcCwgIzAJCQkJQCAxXG5cCisJbW92CWxyLCAjMAkJCQlAIDFcblwKKzE6CW1jcglwMTUsIDAsICUwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lXG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwlzdG1pYQklMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsICUwLCBjNywgYzYsIDEJCUAgMSAgIGludmFsaWRhdGUgRCBsaW5lXG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwlzdG1pYQklMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCXN1YnMJcjEsIHIxLCAjMQkJCUAgMVxuXAorCWJuZQkxYgkJCQlAIDFcblwKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCAxICAgZHJhaW4gV0IiCisJOiAiPXIiIChwdHIpCisJOiAiMCIgKGthZGRyKSwgIkkiIChQQUdFX1NJWkUgLyA2NCkKKwk6ICJyMSIsICJyMiIsICJyMyIsICJpcCIsICJsciIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKK30KKworc3RydWN0IGNwdV91c2VyX2ZucyB2NHdiX3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7CisJLmNwdV9jbGVhcl91c2VyX2hpZ2hwYWdlID0gdjR3Yl9jbGVhcl91c2VyX2hpZ2hwYWdlLAorCS5jcHVfY29weV91c2VyX2hpZ2hwYWdlCT0gdjR3Yl9jb3B5X3VzZXJfaGlnaHBhZ2UsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWYyYWYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuUworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLXY0LlMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgQVNNIG9wdGltaXNlZCBzdHJpbmcgZnVuY3Rpb25zCi0gKgotICogIFRoaXMgaXMgZm9yIENQVXMgd2l0aCBhIHdyaXRldGhyb3VnaCBjYWNoZSBhbmQgJ2ZsdXNoIElEIGNhY2hlJyBpcwotICogIHRoZSBvbmx5IHN1cHBvcnRlZCBjYWNoZSBvcGVyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotCi0JLnRleHQKLQkuYWxpZ24JNQotLyoKLSAqIEFSTXY0IG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQotICoKLSAqIFNpbmNlIHdlIGhhdmUgd3JpdGV0aHJvdWdoIGNhY2hlcywgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAotICogZGlydHkgZGF0YSBpbiB0aGUgY2FjaGUuICBIb3dldmVyLCB3ZSBkbyBoYXZlIHRvIGVuc3VyZSB0aGF0Ci0gKiBzdWJzZXF1ZW50IHJlYWRzIGFyZSB1cCB0byBkYXRlLgotICovCi1FTlRSWSh2NHd0X2NvcHlfdXNlcl9wYWdlKQotCXN0bWZkCXNwISwge3I0LCBscn0JCQlAIDIKLQltb3YJcjIsICNQQUdFX1NaLzY0CQkJQCAxCi0JbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKLTE6CXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0JbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQrMQotCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0JbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKLQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNAotCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0Jc3VicwlyMiwgcjIsICMxCQkJQCAxCi0Jc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDQKLQlsZG1uZWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0Ci0JYm5lCTFiCQkJCUAgMQotCW1jcglwMTUsIDAsIHIyLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUKLQlsZG1mZAlzcCEsIHtyNCwgcGN9CQkJQCAzCi0KLQkuYWxpZ24JNQotLyoKLSAqIEFSTXY0IG9wdGltaXNlZCBjbGVhcl91c2VyX3BhZ2UKLSAqCi0gKiBTYW1lIHN0b3J5IGFzIGFib3ZlLgotICovCi1FTlRSWSh2NHd0X2NsZWFyX3VzZXJfcGFnZSkKLQlzdHIJbHIsIFtzcCwgIy00XSEKLQltb3YJcjEsICNQQUdFX1NaLzY0CQkJQCAxCi0JbW92CXIyLCAjMAkJCQlAIDEKLQltb3YJcjMsICMwCQkJCUAgMQotCW1vdglpcCwgIzAJCQkJQCAxCi0JbW92CWxyLCAjMAkJCQlAIDEKLTE6CXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0Ci0Jc3RtaWEJcjAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDQKLQlzdG1pYQlyMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNAotCXN0bWlhCXIwISwge3IyLCByMywgaXAsIGxyfQkJQCA0Ci0Jc3VicwlyMSwgcjEsICMxCQkJQCAxCi0JYm5lCTFiCQkJCUAgMQotCW1jcglwMTUsIDAsIHIyLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUKLQlsZHIJcGMsIFtzcF0sICM0Ci0KLQlfX0lOSVREQVRBCi0KLQkudHlwZQl2NHd0X3VzZXJfZm5zLCAjb2JqZWN0Ci1FTlRSWSh2NHd0X3VzZXJfZm5zKQotCS5sb25nCXY0d3RfY2xlYXJfdXNlcl9wYWdlCi0JLmxvbmcJdjR3dF9jb3B5X3VzZXJfcGFnZQotCS5zaXplCXY0d3RfdXNlcl9mbnMsIC4gLSB2NHd0X3VzZXJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxMTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIGlzIGZvciBDUFVzIHdpdGggYSB3cml0ZXRocm91Z2ggY2FjaGUgYW5kICdmbHVzaCBJRCBjYWNoZScgaXMKKyAqICB0aGUgb25seSBzdXBwb3J0ZWQgY2FjaGUgb3BlcmF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKworLyoKKyAqIEFSTXY0IG9wdGltaXNlZCBjb3B5X3VzZXJfaGlnaHBhZ2UKKyAqCisgKiBTaW5jZSB3ZSBoYXZlIHdyaXRldGhyb3VnaCBjYWNoZXMsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIGRpcnR5IGRhdGEgaW4gdGhlIGNhY2hlLiAgSG93ZXZlciwgd2UgZG8gaGF2ZSB0byBlbnN1cmUgdGhhdAorICogc3Vic2VxdWVudCByZWFkcyBhcmUgdXAgdG8gZGF0ZS4KKyAqLworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobmFrZWQpKQordjR3dF9jb3B5X3VzZXJfcGFnZSh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tKQoreworCWFzbSgiXAorCXN0bWZkCXNwISwge3I0LCBscn0JCQlAIDJcblwKKwltb3YJcjIsICUwCQkJCUAgMVxuXAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisxOglzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0KzFcblwKKwlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCXN1YnMJcjIsIHIyLCAjMQkJCUAgMVxuXAorCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJbGRtbmVpYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCWJuZQkxYgkJCQlAIDFcblwKKwltY3IJcDE1LCAwLCByMiwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlXG5cCisJbGRtZmQJc3AhLCB7cjQsIHBjfQkJCUAgMyIKKwk6CisJOiAiSSIgKFBBR0VfU0laRSAvIDY0KSk7Cit9CisKK3ZvaWQgdjR3dF9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKKwl1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKmt0bywgKmtmcm9tOworCisJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKKwlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwl2NHd0X2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOworfQorCisvKgorICogQVJNdjQgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICoKKyAqIFNhbWUgc3RvcnkgYXMgYWJvdmUuCisgKi8KK3ZvaWQgdjR3dF9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKnB0ciwgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWFzbSB2b2xhdGlsZSgiXAorCW1vdglyMSwgJTIJCQkJQCAxXG5cCisJbW92CXIyLCAjMAkJCQlAIDFcblwKKwltb3YJcjMsICMwCQkJCUAgMVxuXAorCW1vdglpcCwgIzAJCQkJQCAxXG5cCisJbW92CWxyLCAjMAkJCQlAIDFcblwKKzE6CXN0bWlhCSUwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJJTAhLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwlzdG1pYQklMCEsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCXN0bWlhCSUwISwge3IyLCByMywgaXAsIGxyfQkJQCA0XG5cCisJc3VicwlyMSwgcjEsICMxCQkJQCAxXG5cCisJYm5lCTFiCQkJCUAgMVxuXAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzcsIDAJCUAgZmx1c2ggSUQgY2FjaGUiCisJOiAiPXIiIChwdHIpCisJOiAiMCIgKGthZGRyKSwgIkkiIChQQUdFX1NJWkUgLyA2NCkKKwk6ICJyMSIsICJyMiIsICJyMyIsICJpcCIsICJsciIpOworCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKK30KKworc3RydWN0IGNwdV91c2VyX2ZucyB2NHd0X3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7CisJLmNwdV9jbGVhcl91c2VyX2hpZ2hwYWdlID0gdjR3dF9jbGVhcl91c2VyX2hpZ2hwYWdlLAorCS5jcHVfY29weV91c2VyX2hpZ2hwYWdlCT0gdjR3dF9jb3B5X3VzZXJfaGlnaHBhZ2UsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggMGUyMWMwNy4uNDEyN2E3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC0xMCw4ICsxMCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NobXBhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CkBAIC0zMyw0MSArMzMsNTYgQEAKICAqIENvcHkgdGhlIHVzZXIgcGFnZS4gIE5vIGFsaWFzaW5nIHRvIGRlYWwgd2l0aCBzbyB3ZSBjYW4ganVzdAogICogYXR0YWNrIHRoZSBrZXJuZWwncyBleGlzdGluZyBtYXBwaW5nIG9mIHRoZXNlIHBhZ2VzLgogICovCi1zdGF0aWMgdm9pZCB2Nl9jb3B5X3VzZXJfcGFnZV9ub25hbGlhc2luZyh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQorc3RhdGljIHZvaWQgdjZfY29weV91c2VyX2hpZ2hwYWdlX25vbmFsaWFzaW5nKHN0cnVjdCBwYWdlICp0bywKKwlzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKKwl2b2lkICprdG8sICprZnJvbTsKKworCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjApOworCWt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMSk7CiAJY29weV9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa3RvLCBLTV9VU0VSMSk7CisJa3VubWFwX2F0b21pYyhrZnJvbSwgS01fVVNFUjApOwogfQogCiAvKgogICogQ2xlYXIgdGhlIHVzZXIgcGFnZS4gIE5vIGFsaWFzaW5nIHRvIGRlYWwgd2l0aCBzbyB3ZSBjYW4ganVzdAogICogYXR0YWNrIHRoZSBrZXJuZWwncyBleGlzdGluZyBtYXBwaW5nIG9mIHRoaXMgcGFnZS4KICAqLwotc3RhdGljIHZvaWQgdjZfY2xlYXJfdXNlcl9wYWdlX25vbmFsaWFzaW5nKHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKQorc3RhdGljIHZvaWQgdjZfY2xlYXJfdXNlcl9oaWdocGFnZV9ub25hbGlhc2luZyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKKwl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAljbGVhcl9wYWdlKGthZGRyKTsKKwlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiB9CiAKIC8qCi0gKiBDb3B5IHRoZSBwYWdlLCB0YWtpbmcgYWNjb3VudCBvZiB0aGUgY2FjaGUgY29sb3VyLgorICogRGlzY2FyZCBkYXRhIGluIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIG5ldyBwYWdlLgorICogRklYTUU6IG5lZWRzIHRoaXMgTUNSUiB0byBiZSBzdXBwb3J0ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHY2X2NvcHlfdXNlcl9wYWdlX2FsaWFzaW5nKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgdm9pZCBkaXNjYXJkX29sZF9rZXJuZWxfZGF0YSh2b2lkICprdG8pCiB7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IENBQ0hFX0NPTE9VUih2YWRkcik7Ci0JdW5zaWduZWQgbG9uZyBmcm9tLCB0bzsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShrZnJvbSk7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkKLQkJX19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX21hcHBpbmcocGFnZSksIHBhZ2UpOwotCi0JLyoKLQkgKiBEaXNjYXJkIGRhdGEgaW4gdGhlIGtlcm5lbCBtYXBwaW5nIGZvciB0aGUgbmV3IHBhZ2UuCi0JICogRklYTUU6IG5lZWRzIHRoaXMgTUNSUiB0byBiZSBzdXBwb3J0ZWQuCi0JICovCiAJX19hc21fXygibWNycglwMTUsIDAsICUxLCAlMCwgYzYJQCAweGVjNDAxZjA2IgogCSAgIDoKIAkgICA6ICJyIiAoa3RvKSwKIAkgICAgICJyIiAoKHVuc2lnbmVkIGxvbmcpa3RvICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpCiAJICAgOiAiY2MiKTsKK30KKworLyoKKyAqIENvcHkgdGhlIHBhZ2UsIHRha2luZyBhY2NvdW50IG9mIHRoZSBjYWNoZSBjb2xvdXIuCisgKi8KK3N0YXRpYyB2b2lkIHY2X2NvcHlfdXNlcl9oaWdocGFnZV9hbGlhc2luZyhzdHJ1Y3QgcGFnZSAqdG8sCisJc3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IENBQ0hFX0NPTE9VUih2YWRkcik7CisJdW5zaWduZWQgbG9uZyBrZnJvbSwga3RvOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZmcm9tLT5mbGFncykpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9tYXBwaW5nKGZyb20pLCBmcm9tKTsKKworCS8qIEZJWE1FOiBub3QgaGlnaG1lbSBzYWZlICovCisJZGlzY2FyZF9vbGRfa2VybmVsX2RhdGEocGFnZV9hZGRyZXNzKHRvKSk7CiAKIAkvKgogCSAqIE5vdyBjb3B5IHRoZSBwYWdlIHVzaW5nIHRoZSBzYW1lIGNhY2hlIGNvbG91ciBhcyB0aGUKQEAgLTc1LDE2ICs5MCwxNiBAQAogCSAqLwogCXNwaW5fbG9jaygmdjZfbG9jayk7CiAKLQlzZXRfcHRlX2V4dChUT1BfUFRFKGZyb21fYWRkcmVzcykgKyBvZmZzZXQsIHBmbl9wdGUoX19wYShrZnJvbSkgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpLCAwKTsKLQlzZXRfcHRlX2V4dChUT1BfUFRFKHRvX2FkZHJlc3MpICsgb2Zmc2V0LCBwZm5fcHRlKF9fcGEoa3RvKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOworCXNldF9wdGVfZXh0KFRPUF9QVEUoZnJvbV9hZGRyZXNzKSArIG9mZnNldCwgcGZuX3B0ZShwYWdlX3RvX3Bmbihmcm9tKSwgUEFHRV9LRVJORUwpLCAwKTsKKwlzZXRfcHRlX2V4dChUT1BfUFRFKHRvX2FkZHJlc3MpICsgb2Zmc2V0LCBwZm5fcHRlKHBhZ2VfdG9fcGZuKHRvKSwgUEFHRV9LRVJORUwpLCAwKTsKIAotCWZyb20gPSBmcm9tX2FkZHJlc3MgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOwotCXRvICAgPSB0b19hZGRyZXNzICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKKwlrZnJvbSA9IGZyb21fYWRkcmVzcyArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7CisJa3RvICAgPSB0b19hZGRyZXNzICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKIAotCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShmcm9tKTsKLQlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOworCWZsdXNoX3RsYl9rZXJuZWxfcGFnZShrZnJvbSk7CisJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKGt0byk7CiAKLQljb3B5X3BhZ2UoKHZvaWQgKil0bywgKHZvaWQgKilmcm9tKTsKKwljb3B5X3BhZ2UoKHZvaWQgKilrdG8sICh2b2lkICopa2Zyb20pOwogCiAJc3Bpbl91bmxvY2soJnY2X2xvY2spOwogfQpAQCAtOTQsMjAgKzEwOSwxMyBAQAogICogc28gcmVtYXAgdGhlIGtlcm5lbCBwYWdlIGludG8gdGhlIHNhbWUgY2FjaGUgY29sb3VyIGFzIHRoZSB1c2VyCiAgKiBwYWdlLgogICovCi1zdGF0aWMgdm9pZCB2Nl9jbGVhcl91c2VyX3BhZ2VfYWxpYXNpbmcodm9pZCAqa2FkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgdm9pZCB2Nl9jbGVhcl91c2VyX2hpZ2hwYWdlX2FsaWFzaW5nKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQogewogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBDQUNIRV9DT0xPVVIodmFkZHIpOwogCXVuc2lnbmVkIGxvbmcgdG8gPSB0b19hZGRyZXNzICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKIAotCS8qCi0JICogRGlzY2FyZCBkYXRhIGluIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIG5ldyBwYWdlCi0JICogRklYTUU6IG5lZWRzIHRoaXMgTUNSUiB0byBiZSBzdXBwb3J0ZWQuCi0JICovCi0JX19hc21fXygibWNycglwMTUsIDAsICUxLCAlMCwgYzYJQCAweGVjNDAxZjA2IgotCSAgIDoKLQkgICA6ICJyIiAoa2FkZHIpLAotCSAgICAgInIiICgodW5zaWduZWQgbG9uZylrYWRkciArIFBBR0VfU0laRSAtIEwxX0NBQ0hFX0JZVEVTKQotCSAgIDogImNjIik7CisJLyogRklYTUU6IG5vdCBoaWdobWVtIHNhZmUgKi8KKwlkaXNjYXJkX29sZF9rZXJuZWxfZGF0YShwYWdlX2FkZHJlc3MocGFnZSkpOwogCiAJLyoKIAkgKiBOb3cgY2xlYXIgdGhlIHBhZ2UgdXNpbmcgdGhlIHNhbWUgY2FjaGUgY29sb3VyIGFzCkBAIC0xMTUsNyArMTIzLDcgQEAKIAkgKi8KIAlzcGluX2xvY2soJnY2X2xvY2spOwogCi0Jc2V0X3B0ZV9leHQoVE9QX1BURSh0b19hZGRyZXNzKSArIG9mZnNldCwgcGZuX3B0ZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOworCXNldF9wdGVfZXh0KFRPUF9QVEUodG9fYWRkcmVzcykgKyBvZmZzZXQsIHBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIFBBR0VfS0VSTkVMKSwgMCk7CiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKIAljbGVhcl9wYWdlKCh2b2lkICopdG8pOwogCkBAIC0xMjMsMTUgKzEzMSwxNSBAQAogfQogCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zIHY2X3VzZXJfZm5zIF9faW5pdGRhdGEgPSB7Ci0JLmNwdV9jbGVhcl91c2VyX3BhZ2UJPSB2Nl9jbGVhcl91c2VyX3BhZ2Vfbm9uYWxpYXNpbmcsCi0JLmNwdV9jb3B5X3VzZXJfcGFnZQk9IHY2X2NvcHlfdXNlcl9wYWdlX25vbmFsaWFzaW5nLAorCS5jcHVfY2xlYXJfdXNlcl9oaWdocGFnZSA9IHY2X2NsZWFyX3VzZXJfaGlnaHBhZ2Vfbm9uYWxpYXNpbmcsCisJLmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UJPSB2Nl9jb3B5X3VzZXJfaGlnaHBhZ2Vfbm9uYWxpYXNpbmcsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB2Nl91c2VycGFnZV9pbml0KHZvaWQpCiB7CiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewotCQljcHVfdXNlci5jcHVfY2xlYXJfdXNlcl9wYWdlID0gdjZfY2xlYXJfdXNlcl9wYWdlX2FsaWFzaW5nOwotCQljcHVfdXNlci5jcHVfY29weV91c2VyX3BhZ2UgPSB2Nl9jb3B5X3VzZXJfcGFnZV9hbGlhc2luZzsKKwkJY3B1X3VzZXIuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSB2Nl9jbGVhcl91c2VyX2hpZ2hwYWdlX2FsaWFzaW5nOworCQljcHVfdXNlci5jcHVfY29weV91c2VyX2hpZ2hwYWdlID0gdjZfY29weV91c2VyX2hpZ2hwYWdlX2FsaWFzaW5nOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5TIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTJjYjQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuUworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbGliL2NvcHlwYWdlLXhzYzMuUwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIEFkYXB0ZWQgZm9yIDNyZCBnZW4gWFNjYWxlIGNvcmUsIG5vIG1vcmUgbWluaS1kY2FjaGUKLSAqIEF1dGhvcjogTWF0dCBHaWxiZXJ0IChtYXR0aGV3Lm0uZ2lsYmVydEBpbnRlbC5jb20pCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0KLS8qCi0gKiBHZW5lcmFsIG5vdGU6Ci0gKiAgV2UgZG9uJ3QgcmVhbGx5IHdhbnQgd3JpdGUtYWxsb2NhdGUgY2FjaGUgYmVoYXZpb3VyIGZvciB0aGVzZSBmdW5jdGlvbnMKLSAqICBzaW5jZSB0aGF0IHdpbGwganVzdCBlYXQgdGhyb3VnaCA4SyBvZiB0aGUgY2FjaGUuCi0gKi8KLQotCS50ZXh0Ci0JLmFsaWduCTUKLS8qCi0gKiBYU0MzIG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQotICogIHIwID0gZGVzdGluYXRpb24KLSAqICByMSA9IHNvdXJjZQotICogIHIyID0gdmlydHVhbCB1c2VyIGFkZHJlc3Mgb2YgdWx0aW1hdGUgZGVzdGluYXRpb24gcGFnZQotICoKLSAqIFRoZSBzb3VyY2UgcGFnZSBtYXkgaGF2ZSBzb21lIGNsZWFuIGVudHJpZXMgaW4gdGhlIGNhY2hlIGFscmVhZHksIGJ1dCB3ZQotICogY2FuIHNhZmVseSBpZ25vcmUgdGhlbSAtIGJyZWFrX2NvdygpIHdpbGwgZmx1c2ggdGhlbSBvdXQgb2YgdGhlIGNhY2hlCi0gKiBpZiB3ZSBldmVudHVhbGx5IGVuZCB1cCB1c2luZyBvdXIgY29waWVkIHBhZ2UuCi0gKgotICovCi1FTlRSWSh4c2MzX21jX2NvcHlfdXNlcl9wYWdlKQotCXN0bWZkCXNwISwge3I0LCByNSwgbHJ9Ci0JbW92CWxyLCAjUEFHRV9TWi82NC0xCi0KLQlwbGQJW3IxLCAjMF0KLQlwbGQJW3IxLCAjMzJdCi0xOglwbGQJW3IxLCAjNjRdCi0JcGxkCVtyMSwgIzk2XQotCi0yOglsZHJkCXIyLCBbcjFdLCAjOAotCW1vdglpcCwgcjAKLQlsZHJkCXI0LCBbcjFdLCAjOAotCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZQotCXN0cmQJcjIsIFtyMF0sICM4Ci0JbGRyZAlyMiwgW3IxXSwgIzgKLQlzdHJkCXI0LCBbcjBdLCAjOAotCWxkcmQJcjQsIFtyMV0sICM4Ci0Jc3RyZAlyMiwgW3IwXSwgIzgKLQlzdHJkCXI0LCBbcjBdLCAjOAotCWxkcmQJcjIsIFtyMV0sICM4Ci0JbW92CWlwLCByMAotCWxkcmQJcjQsIFtyMV0sICM4Ci0JbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlCi0Jc3RyZAlyMiwgW3IwXSwgIzgKLQlsZHJkCXIyLCBbcjFdLCAjOAotCXN1YnMJbHIsIGxyLCAjMQotCXN0cmQJcjQsIFtyMF0sICM4Ci0JbGRyZAlyNCwgW3IxXSwgIzgKLQlzdHJkCXIyLCBbcjBdLCAjOAotCXN0cmQJcjQsIFtyMF0sICM4Ci0JYmd0CTFiCi0JYmVxCTJiCi0KLQlsZG1mZAlzcCEsIHtyNCwgcjUsIHBjfQotCi0JLmFsaWduCTUKLS8qCi0gKiBYU2NhbGUgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQotICogIHIwID0gZGVzdGluYXRpb24KLSAqICByMSA9IHZpcnR1YWwgdXNlciBhZGRyZXNzIG9mIHVsdGltYXRlIGRlc3RpbmF0aW9uIHBhZ2UKLSAqLwotRU5UUlkoeHNjM19tY19jbGVhcl91c2VyX3BhZ2UpCi0JbW92CXIxLCAjUEFHRV9TWi8zMgotCW1vdglyMiwgIzAKLQltb3YJcjMsICMwCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgbGluZQotCXN0cmQJcjIsIFtyMF0sICM4Ci0Jc3RyZAlyMiwgW3IwXSwgIzgKLQlzdHJkCXIyLCBbcjBdLCAjOAotCXN0cmQJcjIsIFtyMF0sICM4Ci0Jc3VicwlyMSwgcjEsICMxCi0JYm5lCTFiCi0JbW92CXBjLCBscgotCi0JX19JTklUREFUQQotCi0JLnR5cGUJeHNjM19tY191c2VyX2ZucywgI29iamVjdAotRU5UUlkoeHNjM19tY191c2VyX2ZucykKLQkubG9uZwl4c2MzX21jX2NsZWFyX3VzZXJfcGFnZQotCS5sb25nCXhzYzNfbWNfY29weV91c2VyX3BhZ2UKLQkuc2l6ZQl4c2MzX21jX3VzZXJfZm5zLCAuIC0geHNjM19tY191c2VyX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTk5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQWRhcHRlZCBmb3IgM3JkIGdlbiBYU2NhbGUgY29yZSwgbm8gbW9yZSBtaW5pLWRjYWNoZQorICogQXV0aG9yOiBNYXR0IEdpbGJlcnQgKG1hdHRoZXcubS5naWxiZXJ0QGludGVsLmNvbSkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKy8qCisgKiBHZW5lcmFsIG5vdGU6CisgKiAgV2UgZG9uJ3QgcmVhbGx5IHdhbnQgd3JpdGUtYWxsb2NhdGUgY2FjaGUgYmVoYXZpb3VyIGZvciB0aGVzZSBmdW5jdGlvbnMKKyAqICBzaW5jZSB0aGF0IHdpbGwganVzdCBlYXQgdGhyb3VnaCA4SyBvZiB0aGUgY2FjaGUuCisgKi8KKworLyoKKyAqIFhTQzMgb3B0aW1pc2VkIGNvcHlfdXNlcl9oaWdocGFnZQorICogIHIwID0gZGVzdGluYXRpb24KKyAqICByMSA9IHNvdXJjZQorICoKKyAqIFRoZSBzb3VyY2UgcGFnZSBtYXkgaGF2ZSBzb21lIGNsZWFuIGVudHJpZXMgaW4gdGhlIGNhY2hlIGFscmVhZHksIGJ1dCB3ZQorICogY2FuIHNhZmVseSBpZ25vcmUgdGhlbSAtIGJyZWFrX2NvdygpIHdpbGwgZmx1c2ggdGhlbSBvdXQgb2YgdGhlIGNhY2hlCisgKiBpZiB3ZSBldmVudHVhbGx5IGVuZCB1cCB1c2luZyBvdXIgY29waWVkIHBhZ2UuCisgKgorICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCit4c2MzX21jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20pCit7CisJYXNtKCJcCisJc3RtZmQJc3AhLCB7cjQsIHI1LCBscn0JCVxuXAorCW1vdglsciwgJTAJCQkJXG5cCisJCQkJCQlcblwKKwlwbGQJW3IxLCAjMF0JCQlcblwKKwlwbGQJW3IxLCAjMzJdCQkJXG5cCisxOglwbGQJW3IxLCAjNjRdCQkJXG5cCisJcGxkCVtyMSwgIzk2XQkJCVxuXAorCQkJCQkJXG5cCisyOglsZHJkCXIyLCBbcjFdLCAjOAkJCVxuXAorCW1vdglpcCwgcjAJCQkJXG5cCisJbGRyZAlyNCwgW3IxXSwgIzgJCQlcblwKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGVcblwKKwlzdHJkCXIyLCBbcjBdLCAjOAkJCVxuXAorCWxkcmQJcjIsIFtyMV0sICM4CQkJXG5cCisJc3RyZAlyNCwgW3IwXSwgIzgJCQlcblwKKwlsZHJkCXI0LCBbcjFdLCAjOAkJCVxuXAorCXN0cmQJcjIsIFtyMF0sICM4CQkJXG5cCisJc3RyZAlyNCwgW3IwXSwgIzgJCQlcblwKKwlsZHJkCXIyLCBbcjFdLCAjOAkJCVxuXAorCW1vdglpcCwgcjAJCQkJXG5cCisJbGRyZAlyNCwgW3IxXSwgIzgJCQlcblwKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGVcblwKKwlzdHJkCXIyLCBbcjBdLCAjOAkJCVxuXAorCWxkcmQJcjIsIFtyMV0sICM4CQkJXG5cCisJc3VicwlsciwgbHIsICMxCQkJXG5cCisJc3RyZAlyNCwgW3IwXSwgIzgJCQlcblwKKwlsZHJkCXI0LCBbcjFdLCAjOAkJCVxuXAorCXN0cmQJcjIsIFtyMF0sICM4CQkJXG5cCisJc3RyZAlyNCwgW3IwXSwgIzgJCQlcblwKKwliZ3QJMWIJCQkJXG5cCisJYmVxCTJiCQkJCVxuXAorCQkJCQkJXG5cCisJbGRtZmQJc3AhLCB7cjQsIHI1LCBwY30iCisJOgorCTogIkkiIChQQUdFX1NJWkUgLyA2NCAtIDEpKTsKK30KKwordm9pZCB4c2MzX21jX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqa3RvLCAqa2Zyb207CisKKwlrdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjApOworCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjEpOworCXhzYzNfbWNfY29weV91c2VyX3BhZ2Uoa3RvLCBrZnJvbSk7CisJa3VubWFwX2F0b21pYyhrZnJvbSwgS01fVVNFUjEpOworCWt1bm1hcF9hdG9taWMoa3RvLCBLTV9VU0VSMCk7Cit9CisKKy8qCisgKiBYU2NhbGUgb3B0aW1pc2VkIGNsZWFyX3VzZXJfcGFnZQorICogIHIwID0gZGVzdGluYXRpb24KKyAqICByMSA9IHZpcnR1YWwgdXNlciBhZGRyZXNzIG9mIHVsdGltYXRlIGRlc3RpbmF0aW9uIHBhZ2UKKyAqLwordm9pZCB4c2MzX21jX2NsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqcHRyLCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJYXNtIHZvbGF0aWxlICgiXAorCW1vdglyMSwgJTIJCQkJXG5cCisJbW92CXIyLCAjMAkJCQlcblwKKwltb3YJcjMsICMwCQkJCVxuXAorMToJbWNyCXAxNSwgMCwgJTAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIGxpbmVcblwKKwlzdHJkCXIyLCBbJTBdLCAjOAkJCVxuXAorCXN0cmQJcjIsIFslMF0sICM4CQkJXG5cCisJc3RyZAlyMiwgWyUwXSwgIzgJCQlcblwKKwlzdHJkCXIyLCBbJTBdLCAjOAkJCVxuXAorCXN1YnMJcjEsIHIxLCAjMQkJCVxuXAorCWJuZQkxYiIKKwk6ICI9ciIgKHB0cikKKwk6ICIwIiAoa2FkZHIpLCAiSSIgKFBBR0VfU0laRSAvIDMyKQorCTogInIxIiwgInIyIiwgInIzIik7CisJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworfQorCitzdHJ1Y3QgY3B1X3VzZXJfZm5zIHhzYzNfbWNfdXNlcl9mbnMgX19pbml0ZGF0YSA9IHsKKwkuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSB4c2MzX21jX2NsZWFyX3VzZXJfaGlnaHBhZ2UsCisJLmNwdV9jb3B5X3VzZXJfaGlnaHBhZ2UJPSB4c2MzX21jX2NvcHlfdXNlcl9oaWdocGFnZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCmluZGV4IGJhZDQ5MzMuLmQxOGYyMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCkBAIC0xNSw4ICsxNSw4IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTM1LDcgKzM1LDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWluaWNhY2hlX2xvY2spOwogCiAvKgotICogWFNjYWxlIG1pbmktZGNhY2hlIG9wdGltaXNlZCBjb3B5X3VzZXJfcGFnZQorICogWFNjYWxlIG1pbmktZGNhY2hlIG9wdGltaXNlZCBjb3B5X3VzZXJfaGlnaHBhZ2UKICAqCiAgKiBXZSBmbHVzaCB0aGUgZGVzdGluYXRpb24gY2FjaGUgbGluZXMganVzdCBiZWZvcmUgd2Ugd3JpdGUgdGhlIGRhdGEgaW50byB0aGUKICAqIGNvcnJlc3BvbmRpbmcgYWRkcmVzcy4gIFNpbmNlIHRoZSBEY2FjaGUgaXMgcmVhZC1hbGxvY2F0ZSwgdGhpcyByZW1vdmVzIHRoZQpAQCAtOTAsNDggKzkwLDUzIEBACiAJOiAiciIgKGZyb20pLCAiciIgKHRvKSwgIkkiIChQQUdFX1NJWkUgLyA2NCAtIDEpKTsKIH0KIAotdm9pZCB4c2NhbGVfbWNfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKK3ZvaWQgeHNjYWxlX21jX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIpCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoa2Zyb20pOworCXZvaWQgKmt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMSk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkKLQkJX19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX21hcHBpbmcocGFnZSksIHBhZ2UpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmZnJvbS0+ZmxhZ3MpKQorCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfbWFwcGluZyhmcm9tKSwgZnJvbSk7CiAKIAlzcGluX2xvY2soJm1pbmljYWNoZV9sb2NrKTsKIAotCXNldF9wdGVfZXh0KFRPUF9QVEUoQ09QWVBBR0VfTUlOSUNBQ0hFKSwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBtaW5pY2FjaGVfcGdwcm90KSwgMCk7CisJc2V0X3B0ZV9leHQoVE9QX1BURShDT1BZUEFHRV9NSU5JQ0FDSEUpLCBwZm5fcHRlKHBhZ2VfdG9fcGZuKGZyb20pLCBtaW5pY2FjaGVfcGdwcm90KSwgMCk7CiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKENPUFlQQUdFX01JTklDQUNIRSk7CiAKIAltY19jb3B5X3VzZXJfcGFnZSgodm9pZCAqKUNPUFlQQUdFX01JTklDQUNIRSwga3RvKTsKIAogCXNwaW5fdW5sb2NrKCZtaW5pY2FjaGVfbG9jayk7CisKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjEpOwogfQogCiAvKgogICogWFNjYWxlIG9wdGltaXNlZCBjbGVhcl91c2VyX3BhZ2UKICAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCi14c2NhbGVfbWNfY2xlYXJfdXNlcl9wYWdlKHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIHZhZGRyKQordm9pZAoreHNjYWxlX21jX2NsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCiB7CisJdm9pZCAqcHRyLCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJYXNtIHZvbGF0aWxlKAotCSJtb3YJcjEsICUwCQkJCVxuXAorCSJtb3YJcjEsICUyCQkJCVxuXAogCW1vdglyMiwgIzAJCQkJXG5cCiAJbW92CXIzLCAjMAkJCQlcblwKLTE6CW1vdglpcCwgcjAJCQkJXG5cCi0Jc3RyZAlyMiwgW3IwXSwgIzgJCQlcblwKLQlzdHJkCXIyLCBbcjBdLCAjOAkJCVxuXAotCXN0cmQJcjIsIFtyMF0sICM4CQkJXG5cCi0Jc3RyZAlyMiwgW3IwXSwgIzgJCQlcblwKKzE6CW1vdglpcCwgJTAJCQkJXG5cCisJc3RyZAlyMiwgWyUwXSwgIzgJCQlcblwKKwlzdHJkCXIyLCBbJTBdLCAjOAkJCVxuXAorCXN0cmQJcjIsIFslMF0sICM4CQkJXG5cCisJc3RyZAlyMiwgWyUwXSwgIzgJCQlcblwKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmVcblwKIAlzdWJzCXIxLCByMSwgIzEJCQlcblwKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBsaW5lXG5cCi0JYm5lCTFiCQkJCVxuXAotCW1vdglwYywgbHIiCi0JOgotCTogIkkiIChQQUdFX1NJWkUgLyAzMikpOworCWJuZQkxYiIKKwk6ICI9ciIgKHB0cikKKwk6ICIwIiAoa2FkZHIpLCAiSSIgKFBBR0VfU0laRSAvIDMyKQorCTogInIxIiwgInIyIiwgInIzIiwgImlwIik7CisJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogfQogCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zIHhzY2FsZV9tY191c2VyX2ZucyBfX2luaXRkYXRhID0gewotCS5jcHVfY2xlYXJfdXNlcl9wYWdlCT0geHNjYWxlX21jX2NsZWFyX3VzZXJfcGFnZSwgCi0JLmNwdV9jb3B5X3VzZXJfcGFnZQk9IHhzY2FsZV9tY19jb3B5X3VzZXJfcGFnZSwKKwkuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSB4c2NhbGVfbWNfY2xlYXJfdXNlcl9oaWdocGFnZSwKKwkuY3B1X2NvcHlfdXNlcl9oaWdocGFnZQk9IHhzY2FsZV9tY19jb3B5X3VzZXJfaGlnaHBhZ2UsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggMjJjOTUzMC4uMDQ1NTU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC04NCwxMyArODUsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAKLSNpZm5kZWYgQ09ORklHX0hJR0hNRU0KIAkJLyogV2UgbXVzdCBub3QgbWFwIHRoaXMgaWYgd2UgaGF2ZSBoaWdobWVtIGVuYWJsZWQgKi8KKwkJaWYgKFBhZ2VIaWdoTWVtKHBmbl90b19wYWdlKHBtZF92YWwoKnBtZCkgPj4gUEFHRV9TSElGVCkpKQorCQkJYnJlYWs7CisKIAkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKIAkJcHJpbnRrKCIsICpwdGU9JTA4bHgiLCBwdGVfdmFsKCpwdGUpKTsKIAkJcHJpbnRrKCIsICpwcHRlPSUwOGx4IiwgcHRlX3ZhbChwdGVbLVBUUlNfUEVSX1BURV0pKTsKIAkJcHRlX3VubWFwKHB0ZSk7Ci0jZW5kaWYKIAl9IHdoaWxlKDApOwogCiAJcHJpbnRrKCJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDgyYzRiNDIuLjM0ZGY0ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgpAQCAtNjQsMTAgKzY1LDExIEBACiBfX3RhZ3RhYmxlKEFUQUdfSU5JVFJEMiwgcGFyc2VfdGFnX2luaXRyZDIpOwogCiAvKgotICogVGhpcyBpcyB1c2VkIHRvIHBhc3MgbWVtb3J5IGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHBhZ2luZ19pbml0Ci0gKiB0byBtZW1faW5pdCwgYW5kIGJ5IHNob3dfbWVtKCkgdG8gc2tpcCBob2xlcyBpbiB0aGUgbWVtb3J5IG1hcC4KKyAqIFRoaXMga2VlcHMgbWVtb3J5IGNvbmZpZ3VyYXRpb24gZGF0YSB1c2VkIGJ5IGEgY291cGxlIG1lbW9yeQorICogaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHNob3dfbWVtKCkgZm9yIHRoZSBza2lwcGluZworICogb2YgaG9sZXMgaW4gdGhlIG1lbW9yeSBtYXAuICBJdCBpcyBwb3B1bGF0ZWQgYnkgYXJtX2FkZF9tZW1vcnkoKS4KICAqLwotc3RhdGljIHN0cnVjdCBtZW1pbmZvIG1lbWluZm8gPSB7IDAsIH07CitzdHJ1Y3QgbWVtaW5mbyBtZW1pbmZvOwogCiB2b2lkIHNob3dfbWVtKHZvaWQpCiB7CkBAIC0xMjgsNyArMTMwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc3RhcnRfcGZuLCBpLCBib290bWFwX3BmbjsKIAotCXN0YXJ0X3BmbiAgID0gUEFHRV9BTElHTihfX3BhKCZfZW5kKSkgPj4gUEFHRV9TSElGVDsKKwlzdGFydF9wZm4gICA9IFBBR0VfQUxJR04oX19wYShfZW5kKSkgPj4gUEFHRV9TSElGVDsKIAlib290bWFwX3BmbiA9IDA7CiAKIAlmb3JfZWFjaF9ub2RlYmFuayhpLCBtaSwgbm9kZSkgewpAQCAtMzMxLDEzICszMzMsMTIgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGUsIHpvbmVfc2l6ZSwgc3RhcnRfcGZuLCB6aG9sZV9zaXplKTsKIH0KIAotdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHN0cnVjdCBtZW1pbmZvICptaSkKK3ZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKQogeworCXN0cnVjdCBtZW1pbmZvICptaSA9ICZtZW1pbmZvOwogCXVuc2lnbmVkIGxvbmcgbWVtZW5kX3BmbiA9IDA7CiAJaW50IG5vZGUsIGluaXRyZF9ub2RlOwogCi0JbWVtY3B5KCZtZW1pbmZvLCBtaSwgc2l6ZW9mKG1lbWluZm8pKTsKLQogCS8qCiAJICogTG9jYXRlIHdoaWNoIG5vZGUgY29udGFpbnMgdGhlIHJhbWRpc2sgaW1hZ2UsIGlmIGFueS4KIAkgKi8KQEAgLTM5NCwyMCArMzk1LDIyIEBACiAJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gbWVtZW5kX3BmbiAtIFBIWVNfUEZOX09GRlNFVDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBjaGFyICpzKQorc3RhdGljIGlubGluZSBpbnQgZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGVuZCwgY2hhciAqcykKIHsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IChlbmQgLSBhZGRyKSA+PiAxMDsKKwl1bnNpZ25lZCBpbnQgcGFnZXMgPSAwLCBzaXplID0gKGVuZCAtIHBmbikgPDwgKFBBR0VfU0hJRlQgLSAxMCk7CiAKLQlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CisJZm9yICg7IHBmbiA8IGVuZDsgcGZuKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKIAkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwotCQlmcmVlX3BhZ2UoYWRkcik7Ci0JCXRvdGFscmFtX3BhZ2VzKys7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQlwYWdlcysrOwogCX0KIAogCWlmIChzaXplICYmIHMpCiAJCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXMgbWVtb3J5OiAlZEtcbiIsIHMsIHNpemUpOworCisJcmV0dXJuIHBhZ2VzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQ3OCwxMyArNDgxLDkgQEAKICAqLwogdm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgY29kZXBhZ2VzLCBkYXRhcGFnZXMsIGluaXRwYWdlczsKKwl1bnNpZ25lZCBpbnQgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAlpbnQgaSwgbm9kZTsKIAotCWNvZGVwYWdlcyA9ICZfZXRleHQgLSAmX3RleHQ7Ci0JZGF0YXBhZ2VzID0gJl9lbmQgLSAmX19kYXRhX3N0YXJ0OwotCWluaXRwYWdlcyA9ICZfX2luaXRfZW5kIC0gJl9faW5pdF9iZWdpbjsKLQogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAJbWF4X21hcG5yICAgPSB2aXJ0X3RvX3BhZ2UoaGlnaF9tZW1vcnkpIC0gbWVtX21hcDsKICNlbmRpZgpAQCAtNTAxLDcgKzUwMCw4IEBACiAKICNpZmRlZiBDT05GSUdfU0ExMTExCiAJLyogbm93IHRoYXQgb3VyIERNQSBtZW1vcnkgaXMgYWN0dWFsbHkgc28gZGVzaWduYXRlZCwgd2UgY2FuIGZyZWUgaXQgKi8KLQlmcmVlX2FyZWEoUEFHRV9PRkZTRVQsICh1bnNpZ25lZCBsb25nKXN3YXBwZXJfcGdfZGlyLCBOVUxMKTsKKwl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FyZWEoUEhZU19QRk5fT0ZGU0VULAorCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSwgTlVMTCk7CiAjZW5kaWYKIAogCS8qCkBAIC01MDksMTggKzUwOSwyMSBAQAogCSAqIHJlYWwgbnVtYmVyIG9mIHBhZ2VzIHdlIGhhdmUgaW4gdGhpcyBzeXN0ZW0KIAkgKi8KIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6Iik7Ci0KIAludW1fcGh5c3BhZ2VzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbWVtaW5mby5ucl9iYW5rczsgaSsrKSB7CiAJCW51bV9waHlzcGFnZXMgKz0gYmFua19wZm5fc2l6ZSgmbWVtaW5mby5iYW5rW2ldKTsKIAkJcHJpbnRrKCIgJWxkTUIiLCBiYW5rX3BoeXNfc2l6ZSgmbWVtaW5mby5iYW5rW2ldKSA+PiAyMCk7CiAJfQotCiAJcHJpbnRrKCIgPSAlbHVNQiB0b3RhbFxuIiwgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CisKKwljb2Rlc2l6ZSA9IF9ldGV4dCAtIF90ZXh0OworCWRhdGFzaXplID0gX2VuZCAtIF9kYXRhOworCWluaXRzaXplID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKKwogCXByaW50ayhLRVJOX05PVElDRSAiTWVtb3J5OiAlbHVLQiBhdmFpbGFibGUgKCVkSyBjb2RlLCAiCiAJCSIlZEsgZGF0YSwgJWRLIGluaXQpXG4iLAogCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkJY29kZXBhZ2VzID4+IDEwLCBkYXRhcGFnZXMgPj4gMTAsIGluaXRwYWdlcyA+PiAxMCk7CisJCWNvZGVzaXplID4+IDEwLCBkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTApOwogCiAJaWYgKFBBR0VfU0laRSA+PSAxNjM4NCAmJiBudW1fcGh5c3BhZ2VzIDw9IDEyOCkgewogCQlleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsKQEAgLTUzNSwxMSArNTM4LDEwIEBACiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7Ci0JaWYgKCFtYWNoaW5lX2lzX2ludGVncmF0b3IoKSAmJiAhbWFjaGluZV9pc19jaW50ZWdyYXRvcigpKSB7Ci0JCWZyZWVfYXJlYSgodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbiksCi0JCQkgICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCksCi0JCQkgICJpbml0Iik7Ci0JfQorCWlmICghbWFjaGluZV9pc19pbnRlZ3JhdG9yKCkgJiYgIW1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkKKwkJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hcmVhKF9fcGh5c190b19wZm4oX19wYShfX2luaXRfYmVnaW4pKSwKKwkJCQkJICAgIF9fcGh5c190b19wZm4oX19wYShfX2luaXRfZW5kKSksCisJCQkJCSAgICAiaW5pdCIpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECkBAIC01NDksNyArNTUxLDkgQEAKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWlmICgha2VlcF9pbml0cmQpCi0JCWZyZWVfYXJlYShzdGFydCwgZW5kLCAiaW5pdHJkIik7CisJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYXJlYShfX3BoeXNfdG9fcGZuKF9fcGEoc3RhcnQpKSwKKwkJCQkJICAgIF9fcGh5c190b19wZm4oX19wYShlbmQpKSwKKwkJCQkJICAgICJpbml0cmQiKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQga2VlcGluaXRyZF9zZXR1cChjaGFyICpfX3VudXNlZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tLmggYi9hcmNoL2FybS9tbS9tbS5oCmluZGV4IDVkOWY1MzkuLjk1YmJlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLmgKKysrIGIvYXJjaC9hcm0vbW0vbW0uaApAQCAtMzIsNyArMzIsNSBAQAogc3RydWN0IHBnbGlzdF9kYXRhOwogCiB2b2lkIF9faW5pdCBjcmVhdGVfbWFwcGluZyhzdHJ1Y3QgbWFwX2Rlc2MgKm1kKTsKLXZvaWQgX19pbml0IGJvb3RtZW1faW5pdChzdHJ1Y3QgbWVtaW5mbyAqbWkpOwordm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpOwogdm9pZCByZXNlcnZlX25vZGVfemVybyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKLQotZXh0ZXJuIHZvaWQgX3RleHQsIF9zdGV4dCwgX2V0ZXh0LCBfX2RhdGFfc3RhcnQsIF9lbmQsIF9faW5pdF9iZWdpbiwgX19pbml0X2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggN2YzNmM4Mi4uOWIzNmM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CkBAIC02NDYsNjEgKzY0Nyw3OSBAQAogCQkJInZtYWxsb2MgYXJlYSB0b28gc21hbGwsIGxpbWl0aW5nIHRvICVsdU1CXG4iLAogCQkJdm1hbGxvY19yZXNlcnZlID4+IDIwKTsKIAl9CisKKwlpZiAodm1hbGxvY19yZXNlcnZlID4gVk1BTExPQ19FTkQgLSAoUEFHRV9PRkZTRVQgKyBTWl8zMk0pKSB7CisJCXZtYWxsb2NfcmVzZXJ2ZSA9IFZNQUxMT0NfRU5EIC0gKFBBR0VfT0ZGU0VUICsgU1pfMzJNKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInZtYWxsb2MgYXJlYSBpcyB0b28gYmlnLCBsaW1pdGluZyB0byAlbHVNQlxuIiwKKwkJCXZtYWxsb2NfcmVzZXJ2ZSA+PiAyMCk7CisJfQogfQogX19lYXJseV9wYXJhbSgidm1hbGxvYz0iLCBlYXJseV92bWFsbG9jKTsKIAogI2RlZmluZSBWTUFMTE9DX01JTgkodm9pZCAqKShWTUFMTE9DX0VORCAtIHZtYWxsb2NfcmVzZXJ2ZSkKIAotc3RhdGljIGludCBfX2luaXQgY2hlY2tfbWVtYmFua192YWxpZChzdHJ1Y3QgbWVtYmFuayAqbWIpCi17Ci0JLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHJlZ2lvbiBoYXMgbm9uLXplcm8gc2l6ZSBvcgotCSAqIGludmFsaWQgbm9kZSBudW1iZXIuCi0JICovCi0JaWYgKG1iLT5zaXplID09IDAgfHwgbWItPm5vZGUgPj0gTUFYX05VTU5PREVTKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGlzIG1lbW9yeSByZWdpb24gd291bGQgZW50aXJlbHkgb3ZlcmxhcAotCSAqIHRoZSB2bWFsbG9jIGFyZWEuCi0JICovCi0JaWYgKHBoeXNfdG9fdmlydChtYi0+c3RhcnQpID49IFZNQUxMT0NfTUlOKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiSWdub3JpbmcgUkFNIGF0ICUuOGx4LSUuOGx4ICIKLQkJCSIodm1hbGxvYyByZWdpb24gb3ZlcmxhcCkuXG4iLAotCQkJbWItPnN0YXJ0LCBtYi0+c3RhcnQgKyBtYi0+c2l6ZSAtIDEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBtZW1vcnkgcmVnaW9uIHdvdWxkIHBhcnRpYWxseSBvdmVybGFwCi0JICogdGhlIHZtYWxsb2MgYXJlYS4KLQkgKi8KLQlpZiAocGh5c190b192aXJ0KG1iLT5zdGFydCArIG1iLT5zaXplKSA8IHBoeXNfdG9fdmlydChtYi0+c3RhcnQpIHx8Ci0JICAgIHBoeXNfdG9fdmlydChtYi0+c3RhcnQgKyBtYi0+c2l6ZSkgPiBWTUFMTE9DX01JTikgewotCQl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSBWTUFMTE9DX01JTiAtIHBoeXNfdG9fdmlydChtYi0+c3RhcnQpOwotCi0JCXByaW50ayhLRVJOX05PVElDRSAiVHJ1bmNhdGluZyBSQU0gYXQgJS44bHgtJS44bHggIgotCQkJInRvIC0lLjhseCAodm1hbGxvYyByZWdpb24gb3ZlcmxhcCkuXG4iLAotCQkJbWItPnN0YXJ0LCBtYi0+c3RhcnQgKyBtYi0+c2l6ZSAtIDEsCi0JCQltYi0+c3RhcnQgKyBuZXdzaXplIC0gMSk7Ci0JCW1iLT5zaXplID0gbmV3c2l6ZTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNhbml0eV9jaGVja19tZW1pbmZvKHN0cnVjdCBtZW1pbmZvICptaSkKK3N0YXRpYyB2b2lkIF9faW5pdCBzYW5pdHlfY2hlY2tfbWVtaW5mbyh2b2lkKQogewogCWludCBpLCBqOwogCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBtaS0+bnJfYmFua3M7IGkrKykgewotCQlpZiAoY2hlY2tfbWVtYmFua192YWxpZCgmbWktPmJhbmtbaV0pKQotCQkJbWktPmJhbmtbaisrXSA9IG1pLT5iYW5rW2ldOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbWVtaW5mby5ucl9iYW5rczsgaSsrKSB7CisJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1lbWluZm8uYmFua1tqXTsKKwkJKmJhbmsgPSBtZW1pbmZvLmJhbmtbaV07CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQkvKgorCQkgKiBTcGxpdCB0aG9zZSBtZW1vcnkgYmFua3Mgd2hpY2ggYXJlIHBhcnRpYWxseSBvdmVybGFwcGluZworCQkgKiB0aGUgdm1hbGxvYyBhcmVhIGdyZWF0bHkgc2ltcGxpZnlpbmcgdGhpbmdzIGxhdGVyLgorCQkgKi8KKwkJaWYgKF9fdmEoYmFuay0+c3RhcnQpIDwgVk1BTExPQ19NSU4gJiYKKwkJICAgIGJhbmstPnNpemUgPiBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpKSB7CisJCQlpZiAobWVtaW5mby5ucl9iYW5rcyA+PSBOUl9CQU5LUykgeworCQkJCXByaW50ayhLRVJOX0NSSVQgIk5SX0JBTktTIHRvbyBsb3csICIKKwkJCQkJCSAiaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIpOworCQkJfSBlbHNlIHsKKwkJCQltZW1tb3ZlKGJhbmsgKyAxLCBiYW5rLAorCQkJCQkobWVtaW5mby5ucl9iYW5rcyAtIGkpICogc2l6ZW9mKCpiYW5rKSk7CisJCQkJbWVtaW5mby5ucl9iYW5rcysrOworCQkJCWkrKzsKKwkJCQliYW5rWzFdLnNpemUgLT0gVk1BTExPQ19NSU4gLSBfX3ZhKGJhbmstPnN0YXJ0KTsKKwkJCQliYW5rWzFdLnN0YXJ0ID0gX19wYShWTUFMTE9DX01JTiAtIDEpICsgMTsKKwkJCQlqKys7CisJCQl9CisJCQliYW5rLT5zaXplID0gVk1BTExPQ19NSU4gLSBfX3ZhKGJhbmstPnN0YXJ0KTsKKwkJfQorI2Vsc2UKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciB0aGlzIG1lbW9yeSBiYW5rIHdvdWxkIGVudGlyZWx5IG92ZXJsYXAKKwkJICogdGhlIHZtYWxsb2MgYXJlYS4KKwkJICovCisJCWlmIChfX3ZhKGJhbmstPnN0YXJ0KSA+PSBWTUFMTE9DX01JTikgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJJZ25vcmluZyBSQU0gYXQgJS44bHgtJS44bHggIgorCQkJICAgICAgICIodm1hbGxvYyByZWdpb24gb3ZlcmxhcCkuXG4iLAorCQkJICAgICAgIGJhbmstPnN0YXJ0LCBiYW5rLT5zdGFydCArIGJhbmstPnNpemUgLSAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciB0aGlzIG1lbW9yeSBiYW5rIHdvdWxkIHBhcnRpYWxseSBvdmVybGFwCisJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCisJCSAqLworCQlpZiAoX192YShiYW5rLT5zdGFydCArIGJhbmstPnNpemUpID4gVk1BTExPQ19NSU4gfHwKKwkJICAgIF9fdmEoYmFuay0+c3RhcnQgKyBiYW5rLT5zaXplKSA8IF9fdmEoYmFuay0+c3RhcnQpKSB7CisJCQl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJUcnVuY2F0aW5nIFJBTSBhdCAlLjhseC0lLjhseCAiCisJCQkgICAgICAgInRvIC0lLjhseCAodm1hbGxvYyByZWdpb24gb3ZlcmxhcCkuXG4iLAorCQkJICAgICAgIGJhbmstPnN0YXJ0LCBiYW5rLT5zdGFydCArIGJhbmstPnNpemUgLSAxLAorCQkJICAgICAgIGJhbmstPnN0YXJ0ICsgbmV3c2l6ZSAtIDEpOworCQkJYmFuay0+c2l6ZSA9IG5ld3NpemU7CisJCX0KKyNlbmRpZgorCQlqKys7CiAJfQotCW1pLT5ucl9iYW5rcyA9IGo7CisJbWVtaW5mby5ucl9iYW5rcyA9IGo7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3BhZ2VfdGFibGUoc3RydWN0IG1lbWluZm8gKm1pKQorc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfcGFnZV90YWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIApAQCAtNzEyLDcgKzczMSw3IEBACiAKICNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAogCS8qIFRoZSBYSVAga2VybmVsIGlzIG1hcHBlZCBpbiB0aGUgbW9kdWxlIGFyZWEgLS0gc2tpcCBvdmVyIGl0ICovCi0JYWRkciA9ICgodW5zaWduZWQgbG9uZykmX2V0ZXh0ICsgUEdESVJfU0laRSAtIDEpICYgUEdESVJfTUFTSzsKKwlhZGRyID0gKCh1bnNpZ25lZCBsb25nKV9ldGV4dCArIFBHRElSX1NJWkUgLSAxKSAmIFBHRElSX01BU0s7CiAjZW5kaWYKIAlmb3IgKCA7IGFkZHIgPCBQQUdFX09GRlNFVDsgYWRkciArPSBQR0RJUl9TSVpFKQogCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKQEAgLTcyMSw3ICs3NDAsNyBAQAogCSAqIENsZWFyIG91dCBhbGwgdGhlIGtlcm5lbCBzcGFjZSBtYXBwaW5ncywgZXhjZXB0IGZvciB0aGUgZmlyc3QKIAkgKiBtZW1vcnkgYmFuaywgdXAgdG8gdGhlIGVuZCBvZiB0aGUgdm1hbGxvYyByZWdpb24uCiAJICovCi0JZm9yIChhZGRyID0gX19waHlzX3RvX3ZpcnQobWktPmJhbmtbMF0uc3RhcnQgKyBtaS0+YmFua1swXS5zaXplKTsKKwlmb3IgKGFkZHIgPSBfX3BoeXNfdG9fdmlydChiYW5rX3BoeXNfZW5kKCZtZW1pbmZvLmJhbmtbMF0pKTsKIAkgICAgIGFkZHIgPCBWTUFMTE9DX0VORDsgYWRkciArPSBQR0RJUl9TSVpFKQogCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKIH0KQEAgLTczOCwxMCArNzU3LDEwIEBACiAJICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgYmUgaW4gbm9kZSAwLgogCSAqLwogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9fZGF0YV9zdGFydCksICZfZW5kIC0gJl9fZGF0YV9zdGFydCwKKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19wYShfZGF0YSksIF9lbmQgLSBfZGF0YSwKIAkJCUJPT1RNRU1fREVGQVVMVCk7CiAjZWxzZQotCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKCZfc3RleHQpLCAmX2VuZCAtICZfc3RleHQsCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoX3N0ZXh0KSwgX2VuZCAtIF9zdGV4dCwKIAkJCUJPT1RNRU1fREVGQVVMVCk7CiAjZW5kaWYKIApAQCAtODA4LDcgKzgyNyw2IEBACiAJICogQWxsb2NhdGUgdGhlIHZlY3RvciBwYWdlIGVhcmx5LgogCSAqLwogCXZlY3RvcnMgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCUJVR19PTighdmVjdG9ycyk7CiAKIAlmb3IgKGFkZHIgPSBWTUFMTE9DX0VORDsgYWRkcjsgYWRkciArPSBQR0RJUl9TSVpFKQogCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKQEAgLTgyMCw3ICs4MzgsNyBAQAogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCiAJbWFwLnBmbiA9IF9fcGh5c190b19wZm4oQ09ORklHX1hJUF9QSFlTX0FERFIgJiBTRUNUSU9OX01BU0spOwogCW1hcC52aXJ0dWFsID0gTU9EVUxFU19WQUREUjsKLQltYXAubGVuZ3RoID0gKCh1bnNpZ25lZCBsb25nKSZfZXRleHQgLSBtYXAudmlydHVhbCArIH5TRUNUSU9OX01BU0spICYgU0VDVElPTl9NQVNLOworCW1hcC5sZW5ndGggPSAoKHVuc2lnbmVkIGxvbmcpX2V0ZXh0IC0gbWFwLnZpcnR1YWwgKyB+U0VDVElPTl9NQVNLKSAmIFNFQ1RJT05fTUFTSzsKIAltYXAudHlwZSA9IE1UX1JPTTsKIAljcmVhdGVfbWFwcGluZygmbWFwKTsKICNlbmRpZgpAQCAtODgwLDIzICs4OTgsMjMgQEAKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMsIGluaXRpYWxpc2VzIHRoZSB6b25lIG1lbW9yeQogICogbWFwcywgYW5kIHNldHMgdXAgdGhlIHplcm8gcGFnZSwgYmFkIHBhZ2UgYW5kIGJhZCBwYWdlIHRhYmxlcy4KICAqLwotdm9pZCBfX2luaXQgcGFnaW5nX2luaXQoc3RydWN0IG1lbWluZm8gKm1pLCBzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYykKK3ZvaWQgX19pbml0IHBhZ2luZ19pbml0KHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKQogewogCXZvaWQgKnplcm9fcGFnZTsKIAogCWJ1aWxkX21lbV90eXBlX3RhYmxlKCk7Ci0Jc2FuaXR5X2NoZWNrX21lbWluZm8obWkpOwotCXByZXBhcmVfcGFnZV90YWJsZShtaSk7Ci0JYm9vdG1lbV9pbml0KG1pKTsKKwlzYW5pdHlfY2hlY2tfbWVtaW5mbygpOworCXByZXBhcmVfcGFnZV90YWJsZSgpOworCWJvb3RtZW1faW5pdCgpOwogCWRldmljZW1hcHNfaW5pdChtZGVzYyk7CiAKIAl0b3BfcG1kID0gcG1kX29mZl9rKDB4ZmZmZjAwMDApOwogCiAJLyoKLQkgKiBhbGxvY2F0ZSB0aGUgemVybyBwYWdlLiAgTm90ZSB0aGF0IHdlIGNvdW50IG9uIHRoaXMgZ29pbmcgb2suCisJICogYWxsb2NhdGUgdGhlIHplcm8gcGFnZS4gIE5vdGUgdGhhdCB0aGlzIGFsd2F5cyBzdWNjZWVkcyBhbmQKKwkgKiByZXR1cm5zIGEgemVyb2VkIHJlc3VsdC4KIAkgKi8KIAl6ZXJvX3BhZ2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCW1lbXplcm8oemVyb19wYWdlLCBQQUdFX1NJWkUpOwogCWVtcHR5X3plcm9fcGFnZSA9IHZpcnRfdG9fcGFnZSh6ZXJvX3BhZ2UpOwogCWZsdXNoX2RjYWNoZV9wYWdlKGVtcHR5X3plcm9fcGFnZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwppbmRleCAwN2I2MmIyLi5hZDdiYWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9ub21tdS5jCisrKyBiL2FyY2gvYXJtL21tL25vbW11LmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIApAQCAtMjUsMTAgKzI2LDEwIEBACiAJICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgYmUgaW4gbm9kZSAwLgogCSAqLwogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9fZGF0YV9zdGFydCksICZfZW5kIC0gJl9fZGF0YV9zdGFydCwKKwlyZXNlcnZlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgX19wYShfZGF0YSksIF9lbmQgLSBfZGF0YSwKIAkJCUJPT1RNRU1fREVGQVVMVCk7CiAjZWxzZQotCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKCZfc3RleHQpLCAmX2VuZCAtICZfc3RleHQsCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoX3N0ZXh0KSwgX2VuZCAtIF9zdGV4dCwKIAkJCUJPT1RNRU1fREVGQVVMVCk7CiAjZW5kaWYKIApAQCAtNDEsMjcgKzQyLDEzIEBACiAJCQlCT09UTUVNX0RFRkFVTFQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2FuaXR5X2NoZWNrX21lbWluZm8oc3RydWN0IG1lbWluZm8gKm1pKQotewotCWludCBpLCBqOwotCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBtaS0+bnJfYmFua3M7IGkrKykgewotCQlzdHJ1Y3QgbWVtYmFuayAqbWIgPSAmbWktPmJhbmtbaV07Ci0KLQkJaWYgKG1iLT5zaXplICE9IDAgJiYgbWItPm5vZGUgPCBNQVhfTlVNTk9ERVMpCi0JCQltaS0+YmFua1tqKytdID0gbWktPmJhbmtbaV07Ci0JfQotCW1pLT5ucl9iYW5rcyA9IGo7Ci19Ci0KIC8qCiAgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzLCBpbml0aWFsaXNlcyB0aGUgem9uZSBtZW1vcnkKICAqIG1hcHMsIGFuZCBzZXRzIHVwIHRoZSB6ZXJvIHBhZ2UsIGJhZCBwYWdlIGFuZCBiYWQgcGFnZSB0YWJsZXMuCiAgKi8KLXZvaWQgX19pbml0IHBhZ2luZ19pbml0KHN0cnVjdCBtZW1pbmZvICptaSwgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYykKIHsKLQlzYW5pdHlfY2hlY2tfbWVtaW5mbyhtaSk7Ci0JYm9vdG1lbV9pbml0KG1pKTsKKwlib290bWVtX2luaXQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BnZC5jIGIvYXJjaC9hcm0vbW0vcGdkLmMKaW5kZXggZTBmMTlhYi4uMjY5MDE0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcGdkLmMKKysrIGIvYXJjaC9hcm0vbW0vcGdkLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpZiAoIW5ld19wZ2QpCiAJCWdvdG8gbm9fcGdkOwogCi0JbWVtemVybyhuZXdfcGdkLCBGSVJTVF9LRVJORUxfUEdEX05SICogc2l6ZW9mKHBnZF90KSk7CisJbWVtc2V0KG5ld19wZ2QsIDAsIEZJUlNUX0tFUk5FTF9QR0RfTlIgKiBzaXplb2YocGdkX3QpKTsKIAogCS8qCiAJICogQ29weSBvdmVyIHRoZSBrZXJuZWwgYW5kIElPIFBHRCBlbnRyaWVzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXN5bXMuYyBiL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCmluZGV4IDJiNWJhMzkuLjRhZDNiZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCkBAIC0zMyw4ICszMyw4IEBACiAKICNpZmRlZiBDT05GSUdfTU1VCiAjaWZuZGVmIE1VTFRJX1VTRVIKLUVYUE9SVF9TWU1CT0woX19jcHVfY2xlYXJfdXNlcl9wYWdlKTsKLUVYUE9SVF9TWU1CT0woX19jcHVfY29weV91c2VyX3BhZ2UpOworRVhQT1JUX1NZTUJPTChfX2NwdV9jbGVhcl91c2VyX2hpZ2hwYWdlKTsKK0VYUE9SVF9TWU1CT0woX19jcHVfY29weV91c2VyX2hpZ2hwYWdlKTsKICNlbHNlCiBFWFBPUlRfU1lNQk9MKGNwdV91c2VyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDI5NDk0M2IuLmYwY2M1OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTcxLDYgKzcxLDggQEAKICAqCUlSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuCiAgKi8KIEVOVFJZKGNwdV92Nl9kb19pZGxlKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkJQCBEV0IgLSBXRkkgbWF5IGVudGVyIGEgbG93LXBvd2VyIG1vZGUKIAltY3IJcDE1LCAwLCByMSwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAogCW1vdglwYywgbHIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDRkM2MwYTcuLmQxZWJlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTIwLDkgKzIwLDE3IEBACiAKICNkZWZpbmUgVFRCX0MJCSgxIDw8IDApCiAjZGVmaW5lIFRUQl9TCQkoMSA8PCAxKQorI2RlZmluZSBUVEJfUkdOX05DCSgwIDw8IDMpCisjZGVmaW5lIFRUQl9SR05fT0NfV0JXQQkoMSA8PCAzKQogI2RlZmluZSBUVEJfUkdOX09DX1dUCSgyIDw8IDMpCiAjZGVmaW5lIFRUQl9SR05fT0NfV0IJKDMgPDwgMykKIAorI2lmbmRlZiBDT05GSUdfU01QCisjZGVmaW5lIFRUQl9GTEFHUwlUVEJfQ3xUVEJfUkdOX09DX1dCCQlAIG1hcmsgUFRXcyBjYWNoZWFibGUsIG91dGVyIFdCCisjZWxzZQorI2RlZmluZSBUVEJfRkxBR1MJVFRCX0N8VFRCX1N8VFRCX1JHTl9PQ19XQldBCUAgbWFyayBQVFdzIGNhY2hlYWJsZSBhbmQgc2hhcmVkLCBvdXRlciBXQldBCisjZW5kaWYKKwogRU5UUlkoY3B1X3Y3X3Byb2NfaW5pdCkKIAltb3YJcGMsIGxyCiBFTkRQUk9DKGNwdV92N19wcm9jX2luaXQpCkBAIC01NSw2ICs2Myw3IEBACiAgKglJUlFzIGFyZSBhbHJlYWR5IGRpc2FibGVkLgogICovCiBFTlRSWShjcHVfdjdfZG9faWRsZSkKKwlkc2IJCQkJCUAgV0ZJIG1heSBlbnRlciBhIGxvdy1wb3dlciBtb2RlCiAJd2ZpCiAJbW92CXBjLCBscgogRU5EUFJPQyhjcHVfdjdfZG9faWRsZSkKQEAgLTg1LDcgKzk0LDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAJbW92CXIyLCAjMAogCWxkcglyMSwgW3IxLCAjTU1fQ09OVEVYVF9JRF0JQCBnZXQgbW0tPmNvbnRleHQuaWQKLQlvcnIJcjAsIHIwLCAjVFRCX1JHTl9PQ19XQgkJQCBtYXJrIFBUV3Mgb3V0ZXIgY2FjaGVhYmxlLCBXQgorCW9ycglyMCwgcjAsICNUVEJfRkxBR1MKIAltY3IJcDE1LCAwLCByMiwgYzEzLCBjMCwgMQkJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRAogCWlzYgogMToJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKQEAgLTE2Miw2ICsxNzEsMTEgQEAKICAqCS0gY2FjaGUgdHlwZSByZWdpc3RlciBpcyBpbXBsZW1lbnRlZAogICovCiBfX3Y3X3NldHVwOgorI2lmZGVmIENPTkZJR19TTVAKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIEVuYWJsZSBTTVAvbkFNUCBtb2RlCisJb3JyCXIwLCByMCwgIygweDEgPDwgNikKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCisjZW5kaWYKIAlhZHIJcjEyLCBfX3Y3X3NldHVwX3N0YWNrCQlAIHRoZSBsb2NhbCBzdGFjawogCXN0bWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CiAJYmwJdjdfZmx1c2hfZGNhY2hlX2FsbApAQCAtMTc0LDggKzE4OCw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHIxMCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSArIEQgVExCcwogCW1jcglwMTUsIDAsIHIxMCwgYzIsIGMwLCAyCQlAIFRUQiBjb250cm9sIHJlZ2lzdGVyCi0Jb3JyCXI0LCByNCwgI1RUQl9SR05fT0NfV0IJCUAgbWFyayBQVFdzIG91dGVyIGNhY2hlYWJsZSwgV0IKLQltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAwCQlAIGxvYWQgVFRCMAorCW9ycglyNCwgcjQsICNUVEJfRkxBR1MKIAltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAxCQlAIGxvYWQgVFRCMQogCW1vdglyMTAsICMweDFmCQkJQCBkb21haW5zIDAsIDEgPSBtYW5hZ2VyCiAJbWNyCXAxNSwgMCwgcjEwLCBjMywgYzAsIDAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IDhmNmNmNTYuLjMzNTE1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC00ODEsMyArNDgxLDI4IEBACiAJLmxvbmcJeHNjM19tY191c2VyX2ZucwogCS5sb25nCXhzYzNfY2FjaGVfZm5zCiAJLnNpemUJX194c2MzX3Byb2NfaW5mbywgLiAtIF9feHNjM19wcm9jX2luZm8KKworLyogTm90ZTogUFhBOTM1IGNoYW5nZWQgaXRzIGltcGxlbWVudG9yIElEIGZyb20gSW50ZWwgdG8gTWFydmVsbCAqLworCisJLnR5cGUJX194c2MzX3B4YTkzNV9wcm9jX2luZm8sI29iamVjdAorX194c2MzX3B4YTkzNV9wcm9jX2luZm86CisJLmxvbmcJMHg1NjA1NjAwMAorCS5sb25nCTB4ZmZmZmUwMDAKKwkubG9uZwlQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcJUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwliCV9feHNjM19zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV94c2MzX25hbWUKKwkubG9uZwl4c2MzX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjM19tY191c2VyX2ZucworCS5sb25nCXhzYzNfY2FjaGVfZm5zCisJLnNpemUJX194c2MzX3B4YTkzNV9wcm9jX2luZm8sIC4gLSBfX3hzYzNfcHhhOTM1X3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKaW5kZXggYjJhN2UzZi4uOWNjMmIxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCkBAIC02LDE4ICs2LDI3IEBACiAJcHJvbXB0ICJNWEMvaU1YIEJhc2UgVHlwZSIKIAlkZWZhdWx0IEFSQ0hfTVgzCiAKK2NvbmZpZyBBUkNIX01YMQorCWJvb2wgIk1YMS1iYXNlZCIKKwlzZWxlY3QgQ1BVX0FSTTkyMFQKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgxIGZhbWlseQorCiBjb25maWcgQVJDSF9NWDIKIAlib29sICJNWDItYmFzZWQiCisJc2VsZWN0IENQVV9BUk05MjZUCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMiBmYW1pbHkKIAogY29uZmlnIEFSQ0hfTVgzCiAJYm9vbCAiTVgzLWJhc2VkIgorCXNlbGVjdCBDUFVfVjYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgzIGZhbWlseQogCiBlbmRjaG9pY2UKIAorc291cmNlICJhcmNoL2FybS9tYWNoLW14MS9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9tYWNoLW14My9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCmluZGV4IDA2NzU1NmYuLmRiNzRhOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCkBAIC01LDQgKzUsNSBAQAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gaXJxLm8gY2xvY2subyBncGlvLm8gdGltZS5vIGRldmljZXMubwogCitvYmotJChDT05GSUdfQVJDSF9NWDEpICs9IGlvbXV4LW14MS1teDIubyBkbWEtbXgxLW14Mi5vCiBvYmotJChDT05GSUdfQVJDSF9NWDIpICs9IGlvbXV4LW14MS1teDIubyBkbWEtbXgxLW14Mi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwppbmRleCBiMjk2ZjE5Li4yOTA1ZWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgogCiAjZGVmaW5lIERNQV9EQ1IgICAgIDB4MDAJCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTExNCw3ICsxMTMsNyBAQAogCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBpbnQgZXJyY29kZSk7CiAJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CiAJdm9pZCAqZGF0YTsKLQlkbWFtb2RlX3QgIGRtYV9tb2RlOworCXVuc2lnbmVkIGludCAgZG1hX21vZGU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAl1bnNpZ25lZCBpbnQgcmVzYnl0ZXM7CiAJaW50IGRtYV9udW07CkBAIC0xOTMsNyArMTkyLDcgQEAKIGludAogaW14X2RtYV9zZXR1cF9zaW5nbGUoaW50IGNoYW5uZWwsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCiAJCSAgICAgdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKLQkJICAgICBkbWFtb2RlX3QgZG1hbW9kZSkKKwkJICAgICB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKIHsKIAlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKIApAQCAtMjg4LDcgKzI4Nyw3IEBACiBpbXhfZG1hX3NldHVwX3NnKGludCBjaGFubmVsLAogCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnY291bnQsCiAJCSB1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aCwgdW5zaWduZWQgaW50IGRldl9hZGRyLAotCQkgZG1hbW9kZV90IGRtYW1vZGUpCisJCSB1bnNpZ25lZCBpbnQgZG1hbW9kZSkKIHsKIAlzdHJ1Y3QgaW14X2RtYV9jaGFubmVsICppbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tjaGFubmVsXTsKIApAQCAtNTEyLDYgKzUxMSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlteF9kbWFfZGlzYWJsZSk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKIHN0YXRpYyB2b2lkIGlteF9kbWFfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBjaG5vKQogewogCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2Nobm9dOwpAQCAtNTIzLDYgKzUyMyw3IEBACiAJaWYgKGlteGRtYS0+ZXJyX2hhbmRsZXIpCiAJCWlteGRtYS0+ZXJyX2hhbmRsZXIoY2hubywgaW14ZG1hLT5kYXRhLCBJTVhfRE1BX0VSUl9USU1FT1VUKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTY3NSw3ICs2NzYsNyBAQAogewogCXN0cnVjdCBpbXhfZG1hX2NoYW5uZWwgKmlteGRtYSA9ICZpbXhfZG1hX2NoYW5uZWxzW2NoYW5uZWxdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KIAlpZiAoIW5hbWUpCkBAIC02OTcsNiArNjk4LDcgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShNWENfSU5UX0RNQUNIMCArIGNoYW5uZWwsIGRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsCiAJCQlOVUxMKTsKIAlpZiAocmV0KSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiQ2FuJ3QgcmVnaXN0ZXIgSVJRICVkIGZvciBETUEgY2hhbm5lbCAlZFxuIiwKIAkJCQlNWENfSU5UX0RNQUNIMCArIGNoYW5uZWwsIGNoYW5uZWwpOwogCQlyZXR1cm4gcmV0OwpAQCAtNzEzLDcgKzcxNSw3IEBACiAJaW14ZG1hLT5zZyA9IE5VTEw7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaW14X2RtYV9yZXF1ZXN0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCmluZGV4IGRlNWM0NzQuLmNjYmQ5NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKQEAgLTExNSw4ICsxMTUsOCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMwotLyogTVgzIGhhcyBvbmUgaW50ZXJydXB0ICpwZXIqIGdwaW8gcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YMSkKKy8qIE1YMSBhbmQgTVgzIGhhcyBvbmUgaW50ZXJydXB0ICpwZXIqIGdwaW8gcG9ydCAqLwogc3RhdGljIHZvaWQgbXgzX2dwaW9faXJxX2hhbmRsZXIodTMyIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXUzMiBpcnFfc3RhdDsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCQkvKiBpdHMgYSBzZXJpb3VzIGNvbmZpZ3VyYXRpb24gYnVnIHdoZW4gaXQgZmFpbHMgKi8KIAkJQlVHX09OKCBncGlvY2hpcF9hZGQoJnBvcnRbaV0uY2hpcCkgPCAwICk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDMKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWDEpCiAJCS8qIHNldHVwIG9uZSBoYW5kbGVyIGZvciBlYWNoIGVudHJ5ICovCiAJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBvcnRbaV0uaXJxLCBteDNfZ3Bpb19pcnFfaGFuZGxlcik7CiAJCXNldF9pcnFfZGF0YShwb3J0W2ldLmlycSwgJnBvcnRbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKaW5kZXggNjFlNjZkYS4uOGYzNGEwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCkBAIC0xNSw3ICsxNSw3IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdBRFNfSF9fCiAKIC8qIGV4dGVybmFsIGludGVycnVwdCBtdWx0aXBsZXhlciAqLwotI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfR1BJT19CQVNFICsgTVhDX01BWF9HUElPX0xJTkVTKQorI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfQk9BUkRfSVJRX1NUQVJUKQogCiAjZGVmaW5lIE1YQ19WSVJUVUFMX0lOVFNfQkFTRQkoTVhDX0VYUF9JT19CQVNFICsgTVhDX01BWF9FWFBfSU9fTElORVMpCiAjZGVmaW5lIE1YQ19TRElPMV9DQVJEX0lSUQlNWENfVklSVFVBTF9JTlRTX0JBU0UKQEAgLTI4LDExICsyOCw2IEBACiAvKgogICogTVhDIFVBUlQgRVZCIGJvYXJkIGxldmVsIGNvbmZpZ3VyYXRpb25zCiAgKi8KLQotI2RlZmluZSBNWENfTExfRVhUVUFSVF9QQUREUgkoQ1M0X0JBU0VfQUREUiArIDB4MjAwMDApCi0jZGVmaW5lIE1YQ19MTF9FWFRVQVJUX1ZBRERSCShDUzRfQkFTRV9BRERSX1ZJUlQgKyAweDIwMDAwKQotI2RlZmluZSBNWENfTExfRVhUVUFSVF8xNkJJVF9CVVMKLQogI2RlZmluZSBNWENfTExfVUFSVF9QQUREUiAgICAgICBVQVJUMV9CQVNFX0FERFIKICNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIgICAgICAgQUlQSV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKaW5kZXggNzQ1YjQ4OC4uNDUxZDUxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCkBAIC05MCw3ICs5MCw3IEBACiAjZGVmaW5lIFBCQ19JTlRNQVNLX0NMRUFSX1JFRwkoUEJDX0lOVE1BU0tfQ0xFQVIgKyBQQkNfQkFTRV9BRERSRVNTKQogI2RlZmluZSBFWFBJT19QQVJFTlRfSU5UCUlPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV80KQogCi0jZGVmaW5lIE1YQ19FWFBfSU9fQkFTRQkJKE1YQ19NQVhfSU5UX0xJTkVTICsgTVhDX01BWF9HUElPX0xJTkVTKQorI2RlZmluZSBNWENfRVhQX0lPX0JBU0UJCShNWENfQk9BUkRfSVJRX1NUQVJUKQogI2RlZmluZSBNWENfSVJRX1RPX0VYUElPKGlycSkJKChpcnEpIC0gTVhDX0VYUF9JT19CQVNFKQogCiAjZGVmaW5lIEVYUElPX0lOVF9MT1dfQkFUCShNWENfRVhQX0lPX0JBU0UgKyAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2YjMxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxUERLX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxUERLX0hfXworCisvKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLworCisjZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFQREtfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGI5OTA3YmUuLjYwMjc2OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yOCw2ICsyOCw5IEBACiAjaWZkZWYgQ09ORklHX01BQ0hfUENNMDM4CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzguaD4KICNlbmRpZgorI2lmZGVmIENPTkZJR19NQUNIX01YMzFfM0RTCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxcGRrLmg+CisjZW5kaWYKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kbWEtbXgxLW14Mi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKaW5kZXggZTg1ZmQ5NC4uYjM4NzZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RtYS1teDEtbXgyLmgKQEAgLTIyLDEzICsyMiwxNSBAQAogICogTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KICNpZm5kZWYgX19BU01fQVJDSF9NWENfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9NWENfRE1BX0gKIAogI2RlZmluZSBJTVhfRE1BX0NIQU5ORUxTICAxNgogCisjZGVmaW5lIERNQV9NT0RFX1JFQUQJCTAKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUJCTEKKyNkZWZpbmUgRE1BX01PREVfTUFTSwkJMQorCiAjZGVmaW5lIERNQV9CQVNFIElPX0FERFJFU1MoRE1BX0JBU0VfQUREUikKIAogI2RlZmluZSBJTVhfRE1BX01FTVNJWkVfMzIJKDAgPDwgNCkKQEAgLTU0LDEyICs1NiwxMiBAQAogaW50CiBpbXhfZG1hX3NldHVwX3NpbmdsZShpbnQgY2hhbm5lbCwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKIAkJdW5zaWduZWQgaW50IGRtYV9sZW5ndGgsIHVuc2lnbmVkIGludCBkZXZfYWRkciwKLQkJZG1hbW9kZV90IGRtYW1vZGUpOworCQl1bnNpZ25lZCBpbnQgZG1hbW9kZSk7CiAKIGludAogaW14X2RtYV9zZXR1cF9zZyhpbnQgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJdW5zaWduZWQgaW50IHNnY291bnQsIHVuc2lnbmVkIGludCBkbWFfbGVuZ3RoLAotCQl1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGRtYW1vZGVfdCBkbWFtb2RlKTsKKwkJdW5zaWduZWQgaW50IGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgZG1hbW9kZSk7CiAKIGludAogaW14X2RtYV9zZXR1cF9oYW5kbGVycyhpbnQgY2hhbm5lbCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyMmQ1Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfRE1BX0hfXwotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19ETUFfSF9fCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCAxMTYzMjAyLi41ZjAxZDYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtOSw2ICs5LDggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKICNkZWZpbmUgQVZJQ19OSU1BU0sJMHgwNAogCiAJQCB0aGlzIG1hY3JvIGRpc2FibGVzIGZhc3QgaXJxIChub3QgaW1wbGVtZW50ZWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA2NWVlZGMwLi5lYTUwOWYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJCV9fZ3Bpb19zZXRfdmFsdWUKICNkZWZpbmUgZ3Bpb19jYW5zbGVlcAkJX19ncGlvX2NhbnNsZWVwCiAKLSNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJKE1YQ19NQVhfSU5UX0xJTkVTICsgKGdwaW8pKQotI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCSgoaXJxKSAtIE1YQ19NQVhfSU5UX0xJTkVTKQorI2RlZmluZSBncGlvX3RvX2lycShncGlvKQkoTVhDX0dQSU9fSVJRX1NUQVJUICsgKGdwaW8pKQorI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCSgoaXJxKSAtIE1YQ19HUElPX0lSUV9TVEFSVCkKIAogc3RydWN0IG14Y19ncGlvX3BvcnQgewogCXZvaWQgX19pb21lbSAqYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggM2NhYWRlZS4uYTYxMmQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX01YMQorIyBpbmNsdWRlIDxtYWNoL214MS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxtYWNoL214Yy5oPgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDVkNGNiMTEuLmI0ZjJkZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0yNSw4ICsyNSw4IEBACiAJCS8qIEFjY2VzcyBhbGwgcGVyaXBoZXJhbHMgYmVsb3cgMHg4MDAwMDAwMCBhcyBub25zaGFyZWQgZGV2aWNlCiAJCSAqIGJ1dCBsZWF2ZSBsMmNjIGFsb25lLgogCQkgKi8KLQkJaWYgKChwaHlzX2FkZHIgPCAweDgwMDAwMDAwKSAmJiAoKHBoeXNfYWRkciA8IEwyQ0NfQkFTRV9BRERSKSB8fAotCQkJKHBoeXNfYWRkciA+PSBMMkNDX0JBU0VfQUREUiArIEwyQ0NfU0laRSkpKQorCQlpZiAoKHBoeXNfYWRkciA8IDB4ODAwMDAwMDApICYmICgocGh5c19hZGRyIDwgMHgzMDAwMDAwMCkgfHwKKwkJCShwaHlzX2FkZHIgPj0gMHgzMDAwMDAwMCArIFNaXzFNKSkpCiAJCQltdHlwZSA9IE1UX0RFVklDRV9OT05TSEFSRUQ7CiAJfQogCkBAIC0zNSw4ICszNSw4IEBACiAjZW5kaWYKIAogLyogaW8gYWRkcmVzcyBtYXBwaW5nIG1hY3JvICovCi0jZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQogCi0jZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLW14Mi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS1teDIuaAppbmRleCAzZDA5YmZkLi45NWEzODNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLW14Mi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEtbXgyLmgKQEAgLTIxLDEyICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jZGVmaW5lIE1YQ19HUElPX0FMTE9DX01PREVfTk9STUFMCTAKLSNkZWZpbmUgTVhDX0dQSU9fQUxMT0NfTU9ERV9OT19BTExPQwkxCi0jZGVmaW5lIE1YQ19HUElPX0FMTE9DX01PREVfVFJZX0FMTE9DCTIKLSNkZWZpbmUgTVhDX0dQSU9fQUxMT0NfTU9ERV9BTExPQ19PTkxZCTQKLSNkZWZpbmUgTVhDX0dQSU9fQUxMT0NfTU9ERV9SRUxFQVNFCTgKLQogLyoKICAqICBHUElPIE1vZHVsZSBhbmQgSS9PIE11bHRpcGxleGVyCiAgKiAgeCA9IDAuLjMgZm9yIHJlZ19BLCByZWdfQiwgcmVnX0MsIHJlZ19ECkBAIC0xMDMsNyArOTcsOCBAQAogCiBleHRlcm4gdm9pZCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpOwogZXh0ZXJuIGludCBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAotCQkJCQlpbnQgYWxsb2NfbW9kZSwgY29uc3QgY2hhciAqbGFiZWwpOworCQkJCQljb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTEzLDkgKzEwOCw5IEBACiAgKiBtaXNzaW5nIG9uIHNvbWUgKG1hbnkpIHBpbnMKICAqLwogI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2RlZmluZSBQQTBfQUlOX1NQSTJfQ0xLICAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEEwX0FJTl9TUEkyX0NMSyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDApCiAjZGVmaW5lIFBBMF9BRl9FVE1UUkFDRVNZTkMgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDApCi0jZGVmaW5lIFBBMV9BT1VUX1NQSTJfUlhEICAgIChHUElPX0dJVVMgfCBHUElPX1BPUlRBIHwgR1BJT19JTiB8IDEpCisjZGVmaW5lIFBBMV9BT1VUX1NQSTJfUlhEICAgIChHUElPX1BPUlRBIHwgR1BJT19JTiB8IDEpCiAjZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEpCiAjZGVmaW5lIFBBMl9QRl9QV00wICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMikKICNkZWZpbmUgUEEzX1BGX0NTSV9NQ0xLICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKQEAgLTEzMyw3ICsxMjgsNyBAQAogI2RlZmluZSBQQTE1X1BGX0kyQ19TREEgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1KQogI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQogI2RlZmluZSBQQTE3X0FGX0VUTVRSQUNFUEtUNCAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNykKLSNkZWZpbmUgUEExN19BSU5fU1BJMl9TUyAgICAgKEdQSU9fR0lVUyB8IEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE3X0FJTl9TUEkyX1NTICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgMTcpCiAjZGVmaW5lIFBBMThfQUZfRVRNVFJBQ0VQS1Q1IChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE4KQogI2RlZmluZSBQQTE5X0FGX0VUTVRSQUNFUEtUNiAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOSkKICNkZWZpbmUgUEEyMF9BRl9FVE1UUkFDRVBLVDcgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjApCkBAIC0yMDEsMjcgKzE5NiwyNyBAQAogI2RlZmluZSBQQzE1X1BGX1NQSTFfU1MgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSkKICNkZWZpbmUgUEMxNl9QRl9TUEkxX01JU08gICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCiAjZGVmaW5lIFBDMTdfUEZfU1BJMV9NT1NJICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQzI0X0JJTl9VQVJUM19SSSAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNCkKLSNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgKEdQSU9fR0lVUyB8IEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjUpCi0jZGVmaW5lIFBDMjZfQU9VVF9VQVJUM19EVFIgIChHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI2KQotI2RlZmluZSBQQzI3X0JJTl9VQVJUM19EQ0QgICAoR1BJT19HSVVTIHwgR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNykKLSNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgKEdQSU9fR0lVUyB8IEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjgpCi0jZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMgIChHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI5KQotI2RlZmluZSBQQzMwX0JJTl9VQVJUM19UWCAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgMzApCi0jZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgIChHUElPX0dJVVMgfCBHUElPX1BPUlRDIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQQzI0X0JJTl9VQVJUM19SSSAgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNCkKKyNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjUpCisjZGVmaW5lIFBDMjZfQU9VVF9VQVJUM19EVFIgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQzI3X0JJTl9VQVJUM19EQ0QgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19CSU4gfCAyNykKKyNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjgpCisjZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQzMwX0JJTl9VQVJUM19UWCAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgMzApCisjZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IDMxKQogI2RlZmluZSBQRDZfUEZfTFNDTEsgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYpCiAjZGVmaW5lIFBEN19QRl9SRVYgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBEN19BRl9VQVJUMl9EVFIgICAgIChHUElPX0dJVVMgfCBHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQUYgfCA3KQotI2RlZmluZSBQRDdfQUlOX1NQSTJfU0NMSyAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgNykKKyNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBEN19BSU5fU1BJMl9TQ0xLICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCA3KQogI2RlZmluZSBQRDhfUEZfQ0xTICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4KQogI2RlZmluZSBQRDhfQUZfVUFSVDJfRENEICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBEOF9BSU5fU1BJMl9TUyAgICAgIChHUElPX0dJVVMgfCBHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4KQorI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgOCkKICNkZWZpbmUgUEQ5X1BGX1BTICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKICNkZWZpbmUgUEQ5X0FGX1VBUlQyX1JJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCA5KQotI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JURCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAoR1BJT19QT1JURCB8IEdQSU9fSU4gfCA5KQogI2RlZmluZSBQRDEwX1BGX1NQTF9TUFIgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQogI2RlZmluZSBQRDEwX0FGX1VBUlQyX0RTUiAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDEwKQotI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAoR1BJT19HSVVTIHwgR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTBfQUlOX1NQSTJfVFhEICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCAxMCkKICNkZWZpbmUgUEQxMV9QRl9DT05UUkFTVCAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKICNkZWZpbmUgUEQxMl9QRl9BQ0RfT0UgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKICNkZWZpbmUgUEQxM19QRl9MUF9IU1lOQyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMykKQEAgLTI0Myw3ICsyMzgsNyBAQAogI2RlZmluZSBQRDI5X1BGX0xEMTQgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI5KQogI2RlZmluZSBQRDMwX1BGX0xEMTUgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwKQogI2RlZmluZSBQRDMxX1BGX1RNUjJPVVQgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEQzMV9CSU5fU1BJMl9UWEQgICAgKEdQSU9fR0lVUyB8IEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IDMxKQorI2RlZmluZSBQRDMxX0JJTl9TUEkyX1RYRCAgICAoR1BJT19QT1JURCB8IEdQSU9fQklOIHwgMzEpCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMgpAQCAtMjc5LDYgKzI3NCwxMiBAQAogI2RlZmluZSBQQTI5X1BGX1ZTWU5DCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI5KQogI2RlZmluZSBQQTMwX1BGX0NPTlRSQVNUCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzApCiAjZGVmaW5lIFBBMzFfUEZfT0VfQUNECQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQQjRfUEZfU0QyX0QwCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNCkKKyNkZWZpbmUgUEI1X1BGX1NEMl9EMQkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDUpCisjZGVmaW5lIFBCNl9QRl9TRDJfRDIJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA2KQorI2RlZmluZSBQQjdfUEZfU0QyX0QzCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNykKKyNkZWZpbmUgUEI4X1BGX1NEMl9DTUQJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA4KQorI2RlZmluZSBQQjlfUEZfU0QyX0NMSwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDkpCiAjZGVmaW5lIFBCMTBfUEZfQ1NJX0QwCQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQogI2RlZmluZSBQQjEwX0FGX1VBUlQ2X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDEwKQogI2RlZmluZSBQQjExX1BGX0NTSV9EMQkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKQEAgLTMxNSw2ICszMTYsMTMgQEAKICNkZWZpbmUgUEIzMV9BRl9VQVJUNF9SWEQJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAzMSkKICNkZWZpbmUgUEM1X1BGX0kyQzJfU0RBCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDUpCiAjZGVmaW5lIFBDNl9QRl9JMkMyX1NDTAkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQQzdfUEZfVVNCT1RHX0RBVEE1CShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEM4X1BGX1VTQk9UR19EQVRBNgkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBDOV9QRl9VU0JPVEdfREFUQTAJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VTQk9UR19EQVRBMgkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VTQk9UR19EQVRBMQkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VTQk9UR19EQVRBNAkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1VTQk9UR19EQVRBMwkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzKQogI2RlZmluZSBQQzE2X1BGX1NTSTRfRlMJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTYpCiAjZGVmaW5lIFBDMTdfUEZfU1NJNF9SWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxNykKICNkZWZpbmUgUEMxOF9QRl9TU0k0X1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE4KQpAQCAtMzY1LDYgKzM3Myw5IEBACiAjZGVmaW5lIFBEMzBfUEZfQ1NQSTFfTUlTTwkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX1BGICB8IDMwKQogI2RlZmluZSBQRDMxX1BGX0NTUEkxX01PU0kJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgIHwgMzEpCiAjZGVmaW5lIFBGMjNfQUlOX0ZFQ19UWF9FTgkoR1BJT19QT1JURiB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAyMykKKyNkZWZpbmUgUEUwX1BGX1VTQk9UR19OWFQJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQRTFfUEZfVVNCT1RHX1NUUAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBFMl9QRl9VU0JPVEdfRElSCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMikKICNkZWZpbmUgUEUzX1BGX1VBUlQyX0NUUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMpCiAjZGVmaW5lIFBFNF9QRl9VQVJUMl9SVFMJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA0KQogI2RlZmluZSBQRTZfUEZfVUFSVDJfVFhECShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNikKQEAgLTM3OSwxOCArMzkwLDI3IEBACiAjZGVmaW5lIFBFMTVfUEZfVUFSVDFfUlRTCShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTUpCiAjZGVmaW5lIFBFMTZfQUZfUlRDSwkJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxNikKICNkZWZpbmUgUEUxNl9QRl9SVENLCQkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQRTE4X1BGX1NESEMxX0QwCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE4KQogI2RlZmluZSBQRTE4X0FGX0NTUEkzX01JU08JKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEUxOV9QRl9TREhDMV9EMQkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEUyMF9QRl9TREhDMV9EMgkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEUyMV9QRl9TREhDMV9EMwkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMSkKICNkZWZpbmUgUEUyMV9BRl9DU1BJM19TUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDIxKQorI2RlZmluZSBQRTIyX1BGX1NESEMxX0NNRAkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMikKICNkZWZpbmUgUEUyMl9BRl9DU1BJM19NT1NJCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjIpCisjZGVmaW5lIFBFMjJfUEZfU0RIQzFfQ0xLCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIzKQogI2RlZmluZSBQRTIzX0FGX0NTUEkzX1NDTEsJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyMykKKyNkZWZpbmUgUEUyNF9QRl9VU0JPVEdfQ0xLCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjQpCisjZGVmaW5lIFBFMjVfUEZfVVNCT1RHX0RBVEE3CShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjUpCiAjZW5kaWYKIAogLyogZGVjb2RlIGlycSBudW1iZXIgdG8gdXNlIHdpdGggSU1SKHgpLCBJU1IoeCkgYW5kIGZyaWVuZHMgKi8KLSNkZWZpbmUgSVJRX1RPX1JFRyhpcnEpICgoaXJxIC0gTVhDX01BWF9JTlRfTElORVMpID4+IDUpCisjZGVmaW5lIElSUV9UT19SRUcoaXJxKSAoKGlycSAtIE1YQ19JTlRFUk5BTF9JUlFTKSA+PiA1KQogCi0jZGVmaW5lIElSUV9HUElPQSh4KSAgKE1YQ19NQVhfSU5UX0xJTkVTICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9BKHgpICAoTVhDX0dQSU9fSVJRX1NUQVJUICsgeCkKICNkZWZpbmUgSVJRX0dQSU9CKHgpICAoSVJRX0dQSU9BKDMyKSArIHgpCiAjZGVmaW5lIElSUV9HUElPQyh4KSAgKElSUV9HUElPQigzMikgKyB4KQogI2RlZmluZSBJUlFfR1BJT0QoeCkgIChJUlFfR1BJT0MoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9FKHgpICAoSVJRX0dQSU9EKDMyKSArIHgpCiAKICNlbmRpZiAvKiBfTVhDX0dQSU9fTVgxX01YMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKaW5kZXggYzlmMzljMi4uYzkxOThjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaApAQCAtMTQxLDcgKzE0MSw3IEBACiAJKChpb211eF9waW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQpCiAjZGVmaW5lIElPTVVYX1RPX0lSUShpb211eF9waW4pIFwKIAkoKChpb211eF9waW4gJiBJT01VWF9HUElPTlVNX01BU0spID4+IElPTVVYX0dQSU9OVU1fU0hJRlQpICsgXAotCU1YQ19HUElPX0lOVF9CQVNFKQorCU1YQ19HUElPX0lSUV9TVEFSVCkKIAogLyoKICAqIFRoaXMgZW51bWVyYXRpb24gaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIFNlY3Rpb24KQEAgLTQ5MSw2ICs0OTEsMTQgQEAKICNkZWZpbmUgTVgzMV9QSU5fUlRTMV9fUlRTMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9SVFMxLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fVFhEMV9fVFhEMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9UWEQxLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fUlhEMV9fUlhEMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9SWEQxLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1RTMl9fQ1RTMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9DVFMyLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fUlRTMl9fUlRTMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9SVFMyLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVFhEMl9fVFhEMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9UWEQyLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fUlhEMl9fUlhEMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9SWEQyLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fUENfUlNUX19DVFM1CQlJT01VWF9NT0RFKE1YMzFfUElOX1BDX1JTVCwgSU9NVVhfQ09ORklHX0FMVDIpCisjZGVmaW5lIE1YMzFfUElOX1BDX1ZTMl9fUlRTNQkJSU9NVVhfTU9ERShNWDMxX1BJTl9QQ19WUzIsIElPTVVYX0NPTkZJR19BTFQyKQorI2RlZmluZSBNWDMxX1BJTl9QQ19CVkQyX19UWEQ1CQlJT01VWF9NT0RFKE1YMzFfUElOX1BDX0JWRDIsIElPTVVYX0NPTkZJR19BTFQyKQorI2RlZmluZSBNWDMxX1BJTl9QQ19CVkQxX19SWEQ1CQlJT01VWF9NT0RFKE1YMzFfUElOX1BDX0JWRDEsIElPTVVYX0NPTkZJR19BTFQyKQogI2RlZmluZSBNWDMxX1BJTl9DU1BJMV9NT1NJX19NT1NJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTU9TSSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01JU09fX01JU08JSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9NSVNPLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU0NMS19fU0NMSwlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NDTEssIElPTVVYX0NPTkZJR19GVU5DKQpAQCAtNTA5LDYgKzUxNywxNSBAQAogI2RlZmluZSBNWDMxX1BJTl9DU1BJM19NSVNPX19NSVNPCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTNfTUlTTywgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkzX1NDTEtfX1NDTEsJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJM19TQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTNfU1BJX1JEWV9fU1BJX1JEWQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkzX1NQSV9SRFksIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9CQVRUX0xJTkVfX09XSVJFCUlPTVVYX01PREUoTVgzMV9QSU5fQkFUVF9MSU5FLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1M0X19DUzQJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1M0LCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fU0QxX0RBVEEzX19TRDFfREFUQTMJSU9NVVhfTU9ERShNWDMxX1BJTl9TRDFfREFUQTMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9TRDFfREFUQTJfX1NEMV9EQVRBMglJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9EQVRBMiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1NEMV9EQVRBMV9fU0QxX0RBVEExCUlPTVVYX01PREUoTVgzMV9QSU5fU0QxX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAJSU9NVVhfTU9ERShNWDMxX1BJTl9TRDFfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9TRDFfQ0xLX19TRDFfQ0xLCUlPTVVYX01PREUoTVgzMV9QSU5fU0QxX0NMSywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1NEMV9DTURfX1NEMV9DTUQJSU9NVVhfTU9ERShNWDMxX1BJTl9TRDFfQ01ELCBJT01VWF9DT05GSUdfRlVOQykKKwogLypYWFg6IFRoZSBTUzAsIFNTMSwgU1MyLCBTUzMgbGluZXMgb2Ygc3BpMyBhcmUgbXVsdGlwbGV4ZWQgYnkgY3NwaTJfc3MwLCBjc3BpMl9zczEsIGNzcGkxX3NzMAogICogY3NwaTFfc3MxKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYjU1YmJhMy4uZTA2ZDNjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMSw3ICsxMSwzNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19JUlFTX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19JUlFTX0hfXwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorLyoKKyAqIFNvIGZhciBhbGwgaS5NWCBTb0NzIGhhdmUgNjQgaW50ZXJuYWwgaW50ZXJydXB0cworICovCisjZGVmaW5lIE1YQ19JTlRFUk5BTF9JUlFTCTY0CisKKyNkZWZpbmUgTVhDX0dQSU9fSVJRX1NUQVJUCU1YQ19JTlRFUk5BTF9JUlFTCisKKyNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKKyNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNikKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCisjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDMpCisjZW5kaWYKKworLyoKKyAqIFRoZSBuZXh0IDE2IGludGVycnVwdHMgYXJlIGZvciBib2FyZCBzcGVjaWZpYyBwdXJwb3Nlcy4gIFNpbmNlCisgKiB0aGUga2VybmVsIGNhbiBvbmx5IHJ1biBvbiBvbmUgbWFjaGluZSBhdCBhIHRpbWUsIHdlIGNhbiByZS11c2UKKyAqIHRoZXNlLiAgSWYgeW91IG5lZWQgbW9yZSwgaW5jcmVhc2UgTVhDX0JPQVJEX0lSUVMsIGJ1dCBrZWVwIGl0CisgKiB3aXRoaW4gc2Vuc2libGUgbGltaXRzLgorICovCisjZGVmaW5lIE1YQ19CT0FSRF9JUlFfU1RBUlQJKE1YQ19JTlRFUk5BTF9JUlFTICsgTVhDX0dQSU9fSVJRUykKKyNkZWZpbmUgTVhDX0JPQVJEX0lSUVMJMTYKKworI2RlZmluZSBOUl9JUlFTCQkoTVhDX0JPQVJEX0lSUV9TVEFSVCArIE1YQ19CT0FSRF9JUlFTKQorCiBleHRlcm4gdm9pZCBpbXhfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGlycSwgdW5zaWduZWQgY2hhciBwcmlvKTsKIAorLyogYWxsIG5vcm1hbCBJUlFzIGNhbiBiZSBGSVFzICovCisjZGVmaW5lIEZJUV9TVEFSVAkwCisvKiBzd2l0Y2ggYmV0d2VhbiBJUlEgYW5kIEZJUSAqLworZXh0ZXJuIGludCBteGNfc2V0X2lycV9maXEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpOworCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBkN2E4ZDNlLi4wYjgwODM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0xMSwxOSArMTEsMTIgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfTUVNT1JZX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NRU1PUllfSF9fCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLS8qCi0gKiBWaXJ0dWFsIHZpZXcgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwotICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuIGFkZHJlc3MKLSAqIHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBzZXRfZG1hX2FkZHIoKQotICovCi0jZGVmaW5lIF9fdmlydF90b19idXMoYSkJX192aXJ0X3RvX3BoeXMoYSkKLQotLyoKLSAqIFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucyB0byBhbiBhZGRyZXNzIHRoYXQgdGhlCi0gKiBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2RlZmluZSBfX2J1c190b192aXJ0KGEpCV9fcGh5c190b192aXJ0KGEpCisjaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDgwMDAwMDApCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMgorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhBMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDgwMDAwMDAwKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19NRU1PUllfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXRkLXhpcC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL210ZC14aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWIxYmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL210ZC14aXAuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogTVREIHByaW1pdGl2ZXMgZm9yIFhJUCBzdXBwb3J0LiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb25zCisgKgorICogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiBJdCdzIGluY2x1ZGVkIGZyb20gbGludXgvbXRkL3hpcC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhcml1cyBBdWd1bGlzIDxhdWd1bGlzLmRhcml1c0BnbWFpbC5jb20+LCBUZWx0b25pa2EsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bWFjaC9teGNfdGltZXIuaD4KKworI2lmbmRlZiBfX0FSQ0hfSU1YX01URF9YSVBfSF9fCisjZGVmaW5lIF9fQVJDSF9JTVhfTVREX1hJUF9IX18KKworI2lmZGVmIENPTkZJR19BUkNIX01YMQorLyogQUlUQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUlUQ19CQVNFCUlPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpCisjZGVmaW5lIE5JUE5ESAkJKEFJVENfQkFTRSArIDB4NTgpCisjZGVmaW5lIE5JUE5ETAkJKEFJVENfQkFTRSArIDB4NUMpCisjZGVmaW5lIElOVEVOQUJMRUgJKEFJVENfQkFTRSArIDB4MTApCisjZGVmaW5lIElOVEVOQUJMRUwJKEFJVENfQkFTRSArIDB4MTQpCisvKiBNVEQgbWFjcm9zICovCisjZGVmaW5lIHhpcF9pcnFwZW5kaW5nKCkgKChfX3Jhd19yZWFkbChJTlRFTkFCTEVIKSAmICBfX3Jhd19yZWFkbChOSVBOREgpKSBcCisJCQl8fCAoX19yYXdfcmVhZGwoSU5URU5BQkxFTCkgJiAgX19yYXdfcmVhZGwoTklQTkRMKSkpCisjZGVmaW5lIHhpcF9jdXJydGltZSgpCQkoX19yYXdfcmVhZGwoVElNRVJfQkFTRSArIE1YQ19UQ04pKQorI2RlZmluZSB4aXBfZWxhcHNlZF9zaW5jZSh4KQkoc2lnbmVkKSgoX19yYXdfcmVhZGwoVElNRVJfQkFTRSArIE1YQ19UQ04pIC0gKHgpKSAvIDk2KQorI2RlZmluZSB4aXBfY3B1X2lkbGUoKQkJYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICgwKSkKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9NWDEgKi8KKworI2VuZGlmIC8qIF9fQVJDSF9JTVhfTVREX1hJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJlMDIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggUnVzc2VsbCBLaW5nCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgxX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDFfSF9fCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaW5jbHVkZSA8bWFjaC92bWFsbG9jLmg+CisKKy8qCisgKiBNZW1vcnkgbWFwCisgKi8KKyNkZWZpbmUgSU1YX0lPX1BIWVMJMHgwMDIwMDAwMAorI2RlZmluZSBJTVhfSU9fU0laRQkweDAwMTAwMDAwCisjZGVmaW5lIElNWF9JT19CQVNFCVZNQUxMT0NfRU5ECisKKyNkZWZpbmUgSU1YX0NTMF9QSFlTCTB4MTAwMDAwMDAKKyNkZWZpbmUgSU1YX0NTMF9TSVpFCTB4MDIwMDAwMDAKKworI2RlZmluZSBJTVhfQ1MxX1BIWVMJMHgxMjAwMDAwMAorI2RlZmluZSBJTVhfQ1MxX1NJWkUJMHgwMTAwMDAwMAorCisjZGVmaW5lIElNWF9DUzJfUEhZUwkweDEzMDAwMDAwCisjZGVmaW5lIElNWF9DUzJfU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUgSU1YX0NTM19QSFlTCTB4MTQwMDAwMDAKKyNkZWZpbmUgSU1YX0NTM19TSVpFCTB4MDEwMDAwMDAKKworI2RlZmluZSBJTVhfQ1M0X1BIWVMJMHgxNTAwMDAwMAorI2RlZmluZSBJTVhfQ1M0X1NJWkUJMHgwMTAwMDAwMAorCisjZGVmaW5lIElNWF9DUzVfUEhZUwkweDE2MDAwMDAwCisjZGVmaW5lIElNWF9DUzVfU0laRQkweDAxMDAwMDAwCisKKy8qCisgKiAgUmVnaXN0ZXIgQkFTRXMsIGJhc2VkIG9uIE9GRlNFVHMKKyAqLworI2RlZmluZSBBSVBJMV9CQVNFX0FERFIJCSgweDAwMDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIFdEVF9CQVNFX0FERFIJCSgweDAxMDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIFRJTTFfQkFTRV9BRERSCQkoMHgwMjAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBUSU0yX0JBU0VfQUREUgkJKDB4MDMwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgUlRDX0JBU0VfQUREUgkJKDB4MDQwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgTENEQ19CQVNFX0FERFIJCSgweDA1MDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIFVBUlQxX0JBU0VfQUREUgkJKDB4MDYwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgVUFSVDJfQkFTRV9BRERSCQkoMHgwNzAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBQV01fQkFTRV9BRERSCQkoMHgwODAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBETUFfQkFTRV9BRERSCQkoMHgwOTAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBBSVBJMl9CQVNFX0FERFIJCSgweDEwMDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIFNJTV9CQVNFX0FERFIJCSgweDExMDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIFVTQkRfQkFTRV9BRERSCQkoMHgxMjAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBTUEkxX0JBU0VfQUREUgkJKDB4MTMwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgTU1DX0JBU0VfQUREUgkJKDB4MTQwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgQVNQX0JBU0VfQUREUgkJKDB4MTUwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgQlRBX0JBU0VfQUREUgkJKDB4MTYwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgSTJDX0JBU0VfQUREUgkJKDB4MTcwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgU1NJX0JBU0VfQUREUgkJKDB4MTgwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgU1BJMl9CQVNFX0FERFIJCSgweDE5MDAwICsgSU1YX0lPX1BIWVMpCisjZGVmaW5lIE1TSENfQkFTRV9BRERSCQkoMHgxQTAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBDQ01fQkFTRV9BRERSCQkoMHgxQjAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBTQ01fQkFTRV9BRERSCQkoMHgxQjgwNCArIElNWF9JT19QSFlTKQorI2RlZmluZSBHUElPX0JBU0VfQUREUgkJKDB4MUMwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgRUlNX0JBU0VfQUREUgkJKDB4MjAwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgU0RSQU1DX0JBU0VfQUREUgkoMHgyMTAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBNTUFfQkFTRV9BRERSCQkoMHgyMjAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBBVklDX0JBU0VfQUREUgkJKDB4MjMwMDAgKyBJTVhfSU9fUEhZUykKKyNkZWZpbmUgQ1NJX0JBU0VfQUREUgkJKDB4MjQwMDAgKyBJTVhfSU9fUEhZUykKKworLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KQkoKHgpIC0gSU1YX0lPX1BIWVMgKyBJTVhfSU9fQkFTRSkKKworLyogZGVmaW5lIG1hY3JvcyBuZWVkZWQgZm9yIGVudHJ5LW1hY3JvLlMgKi8KKyNkZWZpbmUgQVZJQ19JT19BRERSRVNTKHgpCUlPX0FERFJFU1MoeCkKKworLyogZml4ZWQgaW50ZXJycHV0IG51bWJlcnMgKi8KKyNkZWZpbmUgSU5UX1NPRlRJTlQJCTAKKyNkZWZpbmUgQ1NJX0lOVAkJCTYKKyNkZWZpbmUgRFNQQV9NQUNfSU5UCQk3CisjZGVmaW5lIERTUEFfSU5UCQk4CisjZGVmaW5lIENPTVBfSU5UCQk5CisjZGVmaW5lIE1TSENfWElOVAkJMTAKKyNkZWZpbmUgR1BJT19JTlRfUE9SVEEJCTExCisjZGVmaW5lIEdQSU9fSU5UX1BPUlRCCQkxMgorI2RlZmluZSBHUElPX0lOVF9QT1JUQwkJMTMKKyNkZWZpbmUgTENEQ19JTlQJCTE0CisjZGVmaW5lIFNJTV9JTlQJCQkxNQorI2RlZmluZSBTSU1fREFUQV9JTlQJCTE2CisjZGVmaW5lIFJUQ19JTlQJCQkxNworI2RlZmluZSBSVENfU0FNSU5UCQkxOAorI2RlZmluZSBVQVJUMl9NSU5UX1BGRVJSCTE5CisjZGVmaW5lIFVBUlQyX01JTlRfUlRTCQkyMAorI2RlZmluZSBVQVJUMl9NSU5UX0RUUgkJMjEKKyNkZWZpbmUgVUFSVDJfTUlOVF9VQVJUQwkyMgorI2RlZmluZSBVQVJUMl9NSU5UX1RYCQkyMworI2RlZmluZSBVQVJUMl9NSU5UX1JYCQkyNAorI2RlZmluZSBVQVJUMV9NSU5UX1BGRVJSCTI1CisjZGVmaW5lIFVBUlQxX01JTlRfUlRTCQkyNgorI2RlZmluZSBVQVJUMV9NSU5UX0RUUgkJMjcKKyNkZWZpbmUgVUFSVDFfTUlOVF9VQVJUQwkyOAorI2RlZmluZSBVQVJUMV9NSU5UX1RYCQkyOQorI2RlZmluZSBVQVJUMV9NSU5UX1JYCQkzMAorI2RlZmluZSBWT0lDRV9EQUNfSU5UCQkzMQorI2RlZmluZSBWT0lDRV9BRENfSU5UCQkzMgorI2RlZmluZSBQRU5fREFUQV9JTlQJCTMzCisjZGVmaW5lIFBXTV9JTlQJCQkzNAorI2RlZmluZSBTREhDX0lOVAkJMzUKKyNkZWZpbmUgSTJDX0lOVAkJCTM5CisjZGVmaW5lIENTUElfSU5UCQk0MQorI2RlZmluZSBTU0lfVFhfSU5UCQk0MgorI2RlZmluZSBTU0lfVFhfRVJSX0lOVAkJNDMKKyNkZWZpbmUgU1NJX1JYX0lOVAkJNDQKKyNkZWZpbmUgU1NJX1JYX0VSUl9JTlQJCTQ1CisjZGVmaW5lIFRPVUNIX0lOVAkJNDYKKyNkZWZpbmUgVVNCRF9JTlQwCQk0NworI2RlZmluZSBVU0JEX0lOVDEJCTQ4CisjZGVmaW5lIFVTQkRfSU5UMgkJNDkKKyNkZWZpbmUgVVNCRF9JTlQzCQk1MAorI2RlZmluZSBVU0JEX0lOVDQJCTUxCisjZGVmaW5lIFVTQkRfSU5UNQkJNTIKKyNkZWZpbmUgVVNCRF9JTlQ2CQk1MworI2RlZmluZSBCVFNZU19JTlQJCTU1CisjZGVmaW5lIEJUVElNX0lOVAkJNTYKKyNkZWZpbmUgQlRXVUlfSU5UCQk1NworI2RlZmluZSBUSU0yX0lOVAkJNTgKKyNkZWZpbmUgVElNMV9JTlQJCTU5CisjZGVmaW5lIERNQV9FUlIJCQk2MAorI2RlZmluZSBETUFfSU5UCQkJNjEKKyNkZWZpbmUgR1BJT19JTlRfUE9SVEQJCTYyCisjZGVmaW5lIFdEVF9JTlQJCQk2MworCisvKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLworI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKKyNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAorI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKKyNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAorI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCisjZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAorI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKKyNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0CisKKy8qIERNQSAqLworI2RlZmluZSBETUFfUkVRX1VBUlQzX1QJCTIKKyNkZWZpbmUgRE1BX1JFUV9VQVJUM19SCQkzCisjZGVmaW5lIERNQV9SRVFfU1NJMl9UCQk0CisjZGVmaW5lIERNQV9SRVFfU1NJMl9SCQk1CisjZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQJNgorI2RlZmluZSBETUFfUkVRX0NTSV9SCQk3CisjZGVmaW5lIERNQV9SRVFfTVNIQwkJOAorI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RPVVQJOQorI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RJTgkxMAorI2RlZmluZSBETUFfUkVRX0RTUEFfTUFDCTExCisjZGVmaW5lIERNQV9SRVFfRVhUCQkxMgorI2RlZmluZSBETUFfUkVRX1NESEMJCTEzCisjZGVmaW5lIERNQV9SRVFfU1BJMV9SCQkxNAorI2RlZmluZSBETUFfUkVRX1NQSTFfVAkJMTUKKyNkZWZpbmUgRE1BX1JFUV9TU0lfVAkJMTYKKyNkZWZpbmUgRE1BX1JFUV9TU0lfUgkJMTcKKyNkZWZpbmUgRE1BX1JFUV9BU1BfREFDCQkxOAorI2RlZmluZSBETUFfUkVRX0FTUF9BREMJCTE5CisjZGVmaW5lIERNQV9SRVFfVVNQX0VQKHgpCSgyMCArICh4KSkKKyNkZWZpbmUgRE1BX1JFUV9TUEkyX1IJCTI2CisjZGVmaW5lIERNQV9SRVFfU1BJMl9UCQkyNworI2RlZmluZSBETUFfUkVRX1VBUlQyX1QJCTI4CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfUgkJMjkKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UCQkzMAorI2RlZmluZSBETUFfUkVRX1VBUlQxX1IJCTMxCisKKy8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0xMX0RFQlVHICovCisjZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglJT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19NWDFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAppbmRleCBhODZkYjY0Li4wMzEzYmU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKQEAgLTcyLDcgKzcyLDggQEAKIC8qIGZvciBteDI3Ki8KICNkZWZpbmUgT1RHX0JBU0VfQUREUiAgICAgICAgICAgVVNCT1RHX0JBU0VfQUREUgogI2RlZmluZSBTQUhBUkFfQkFTRV9BRERSICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI1MDAwKQotI2RlZmluZSBFTU1BX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI2NDAwKQorI2RlZmluZSBFTU1BX1BQX0JBU0VfQUREUiAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI2MDAwKQorI2RlZmluZSBFTU1BX1BSUF9CQVNFX0FERFIgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI2NDAwKQogI2RlZmluZSBDQ01fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI3MDAwKQogI2RlZmluZSBTWVNDVFJMX0JBU0VfQUREUiAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI3ODAwKQogI2RlZmluZSBJSU1fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI4MDAwKQpAQCAtMjg4LDE2ICsyODksNCBAQAogLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gMTkyIEdQSU9zIChkb24ndCBmb3JnZXQgdGhlIGJhc2Vib2FyZCEpICovCiAjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCSgxOTIgKyAxNikKIAotLyogT1MgY2xvY2sgdGljayByYXRlICovCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAgICAgICAgIDEzMzAwMDAwCi0KLS8qIFN0YXJ0IG9mIFJBTSAqLwotI2RlZmluZSBQSFlTX09GRlNFVAkJU0RSQU1fQkFTRV9BRERSCi0KLS8qIG1heCBpbnRlcnJ1cHQgbGluZXMgY291bnQgKi8KLSNkZWZpbmUgTlJfSVJRUwkJCTI1NgotCi0vKiBjb3VudCBvZiBpbnRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyAqLwotI2RlZmluZSBNWENfTUFYX0lOVF9MSU5FUwk2NAotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfTVgyN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCmluZGV4IDA1MzZmODkuLmRlMDI2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaApAQCAtMTUsMTEgKzE1LDYgQEAKICNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLS8qIQotICogZGVmaW5lcyB0aGUgaGFyZHdhcmUgY2xvY2sgdGljayByYXRlCi0gKi8KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxNjYyNTAwMAotCiAvKgogICogTVgzMSBtZW1vcnkgbWFwOgogICoKQEAgLTI0NCw5ICsyMzksNiBAQAogI2RlZmluZSBQQ01DSUFfSU9fQUREUkVTUyh4KSBcCiAJKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKIAotLyogU3RhcnQgb2YgcGh5c2ljYWwgUkFNIC0gT24gbWFueSBNWDMxIHBsYXRmb3JtcywgdGhpcyBpcyB0aGUgZmlyc3QgU0RSQU0gYmFuayAoQ1NEMCkgKi8KLSNkZWZpbmUgUEhZU19PRkZTRVQgICAgICAgICAgICAgQ1NEMF9CQVNFX0FERFIKLQogLyoKICAqIEludGVycnVwdCBudW1iZXJzCiAgKi8KQEAgLTMxNSwyMyArMzA3LDYgQEAKICNkZWZpbmUgTVhDX0lOVF9FWFRfV0RPRwk2MgogI2RlZmluZSBNWENfSU5UX0VYVF9UVgkJNjMKIAotI2RlZmluZSBNWENfTUFYX0lOVF9MSU5FUwk2NAotCi0jZGVmaW5lIE1YQ19HUElPX0lOVF9CQVNFCU1YQ19NQVhfSU5UX0xJTkVTCi0jZGVmaW5lIE1YQ19NQVhfR1BJT19MSU5FUyAgICAgIChHUElPX05VTV9QSU4gKiBHUElPX1BPUlRfTlVNKQotI2RlZmluZSBNWENfTUFYX1ZJUlRVQUxfSU5UUwkxNgotCi0jZGVmaW5lIE5SX0lSUVMgKE1YQ19NQVhfSU5UX0xJTkVTICsgTVhDX01BWF9HUElPX0xJTkVTICsgTVhDX01BWF9WSVJUVUFMX0lOVFMpCi0KLS8qIQotICogTnVtYmVyIG9mIEdQSU8gcG9ydCBhcyBkZWZpbmVkIGluIHRoZSBJQyBTcGVjCi0gKi8KLSNkZWZpbmUgR1BJT19QT1JUX05VTQkJMwotLyohCi0gKiBOdW1iZXIgb2YgR1BJTyBwaW5zIHBlciBwb3J0Ci0gKi8KLSNkZWZpbmUgR1BJT19OVU1fUElOCQkzMgotCiAjZGVmaW5lIFBST0RfU0lHTkFUVVJFCQkweDEJLyogRm9yIE1YMzEgKi8KIAogLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDMxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX3RpbWVyLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX3RpbWVyLmgKaW5kZXggMTMwYWViZi4uNmMxOWExMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y190aW1lci5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfdGltZXIuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2lmZGVmIENPTkZJR19BUkNIX0lNWAorI2lmZGVmIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBUSU1FUl9CQVNFCQlJT19BRERSRVNTKFRJTTFfQkFTRV9BRERSKQogI2RlZmluZSBUSU1FUl9JTlRFUlJVUFQJCVRJTTFfSU5UCiAKQEAgLTY1LDcgKzY1LDcgQEAKIHsKIAlfX3Jhd193cml0ZWwoMCwgVElNRVJfQkFTRSArIE1YQ19UU1RBVCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfSU1YICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgxICovCiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDIKICNkZWZpbmUgVElNRVJfQkFTRQkJSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggMGIwYWYwMi4uMDdiNGE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTIwLDYgKzIwLDEyIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX1RJTUVYX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19USU1FWF9IX18KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4JLyogZm9yIENMT0NLX1RJQ0tfUkFURSAqLworI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTYwMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTMzMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTY2MjUwMDAKKyNlbmRpZgogCiAjZW5kaWYJCQkJLyogX19BU01fQVJDSF9NWENfVElNRVhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMKaW5kZXggZDk3Mzg3YS4uZGY2ZjE4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LW14MS1teDIuYwpAQCAtMTEwLDEyICsxMTAsMTMgQEAKIEVYUE9SVF9TWU1CT0wobXhjX2dwaW9fbW9kZSk7CiAKIGludCBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAotCQkJCWludCBhbGxvY19tb2RlLCBjb25zdCBjaGFyICpsYWJlbCkKKwkJY29uc3QgY2hhciAqbGFiZWwpCiB7CiAJY29uc3QgaW50ICpwID0gcGluX2xpc3Q7CiAJaW50IGk7CiAJdW5zaWduZWQgZ3BpbzsKIAl1bnNpZ25lZCBtb2RlOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZ3BpbyA9ICpwICYgKEdQSU9fUElOX01BU0sgfCBHUElPX1BPUlRfTUFTSyk7CkBAIC0xMjQsMzMgKzEyNSwzMyBAQAogCQlpZiAoZ3BpbyA+PSAoR1BJT19QT1JUX01BWCArIDEpICogMzIpCiAJCQlnb3RvIHNldHVwX2Vycm9yOwogCi0JCWlmIChhbGxvY19tb2RlICYgTVhDX0dQSU9fQUxMT0NfTU9ERV9SRUxFQVNFKQotCQkJZ3Bpb19mcmVlKGdwaW8pOwotCQllbHNlIGlmICghKGFsbG9jX21vZGUgJiBNWENfR1BJT19BTExPQ19NT0RFX05PX0FMTE9DKSkKLQkJCWlmIChncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpCi0JCQkgICAmJiAhKGFsbG9jX21vZGUgJiBNWENfR1BJT19BTExPQ19NT0RFX1RSWV9BTExPQykpCi0JCQkJZ290byBzZXR1cF9lcnJvcjsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGxhYmVsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gc2V0dXBfZXJyb3I7CiAKLQkJaWYgKCEoYWxsb2NfbW9kZSAmIChNWENfR1BJT19BTExPQ19NT0RFX0FMTE9DX09OTFkgfAotCQkJCSAgICBNWENfR1BJT19BTExPQ19NT0RFX1JFTEVBU0UpKSkKLQkJCW14Y19ncGlvX21vZGUoZ3BpbyB8IG1vZGUpOworCQlteGNfZ3Bpb19tb2RlKGdwaW8gfCBtb2RlKTsKIAogCQlwKys7CiAJfQogCXJldHVybiAwOwogCiBzZXR1cF9lcnJvcjoKLQlpZiAoYWxsb2NfbW9kZSAmIChNWENfR1BJT19BTExPQ19NT0RFX05PX0FMTE9DIHwKLQkgICAgTVhDX0dQSU9fQUxMT0NfTU9ERV9UUllfQUxMT0MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdoaWxlIChwICE9IHBpbl9saXN0KSB7Ci0JCXAtLTsKLQkJZ3BpbyA9ICpwICYgKEdQSU9fUElOX01BU0sgfCBHUElPX1BPUlRfTUFTSyk7Ci0JCWdwaW9fZnJlZShncGlvKTsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMocGluX2xpc3QsIGkpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMpOwogCit2b2lkIG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCit7CisJY29uc3QgaW50ICpwID0gcGluX2xpc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1bnNpZ25lZCBncGlvID0gKnAgJiAoR1BJT19QSU5fTUFTSyB8IEdQSU9fUE9SVF9NQVNLKTsKKwkJZ3Bpb19mcmVlKGdwaW8pOworCQlwKys7CisJfQorCit9CitFWFBPUlRfU1lNQk9MKG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lycS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMKaW5kZXggZDg2MmM5ZS4uNmU3NTc4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMKQEAgLTE3LDkgKzE3LDEyIEBACiAgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjZGVmaW5lIEFWSUNfQkFTRQkJSU9fQUREUkVTUyhBVklDX0JBU0VfQUREUikKICNkZWZpbmUgQVZJQ19JTlRDTlRMCQkoQVZJQ19CQVNFICsgMHgwMCkJLyogaW50IGNvbnRyb2wgcmVnICovCkBAIC02NSw2ICs2OCwyOCBAQAogRVhQT1JUX1NZTUJPTChpbXhfaXJxX3NldF9wcmlvcml0eSk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19GSVEKK2ludCBteGNfc2V0X2lycV9maXEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlycXQ7CisKKwlpZiAoaXJxID49IE1YQ19JTlRFUk5BTF9JUlFTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpcnEgPCBNWENfSU5URVJOQUxfSVJRUyAvIDIpIHsKKwkJaXJxdCA9IF9fcmF3X3JlYWRsKEFWSUNfSU5UVFlQRUwpICYgfigxIDw8IGlycSk7CisJCV9fcmF3X3dyaXRlbChpcnF0IHwgKCEhdHlwZSA8PCBpcnEpLCBBVklDX0lOVFRZUEVMKTsKKwl9IGVsc2UgeworCQlpcnEgLT0gTVhDX0lOVEVSTkFMX0lSUVMgLyAyOworCQlpcnF0ID0gX19yYXdfcmVhZGwoQVZJQ19JTlRUWVBFSCkgJiB+KDEgPDwgaXJxKTsKKwkJX19yYXdfd3JpdGVsKGlycXQgfCAoISF0eXBlIDw8IGlycSksIEFWSUNfSU5UVFlQRUgpOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChteGNfc2V0X2lycV9maXEpOworI2VuZGlmIC8qIENPTkZJR19GSVEgKi8KKwogLyogRGlzYWJsZSBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBBVklDICovCiBzdGF0aWMgdm9pZCBteGNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTkxLDcgKzExNiw2IEBACiB2b2lkIF9faW5pdCBteGNfaW5pdF9pcnEodm9pZCkKIHsKIAlpbnQgaTsKLQl1MzIgcmVnOwogCiAJLyogcHV0IHRoZSBBVklDIGludG8gdGhlIHJlc2V0IHZhbHVlIHdpdGgKIAkgKiBhbGwgaW50ZXJydXB0cyBkaXNhYmxlZApAQCAtMTA2LDcgKzEzMCw3IEBACiAJLyogYWxsIElSUSBubyBGSVEgKi8KIAlfX3Jhd193cml0ZWwoMCwgQVZJQ19JTlRUWVBFSCk7CiAJX19yYXdfd3JpdGVsKDAsIEFWSUNfSU5UVFlQRUwpOwotCWZvciAoaSA9IDA7IGkgPCBNWENfTUFYX0lOVF9MSU5FUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1YQ19JTlRFUk5BTF9JUlFTOyBpKyspIHsKIAkJc2V0X2lycV9jaGlwKGksICZteGNfYXZpY19jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwpAQCAtMTE5LDUgKzE0MywxMCBAQAogCS8qIGluaXQgYXJjaGl0ZWN0dXJlcyBjaGFpbmVkIGludGVycnVwdCBoYW5kbGVyICovCiAJbXhjX3JlZ2lzdGVyX2dwaW9zKCk7CiAKKyNpZmRlZiBDT05GSUdfRklRCisJLyogSW5pdGlhbGl6ZSBGSVEgKi8KKwlpbml0X0ZJUSgpOworI2VuZGlmCisKIAlwcmludGsoS0VSTl9JTkZPICJNWEMgSVJRIGluaXRpYWxpemVkXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggYTk0ZjBjNC4uNDZkM2IwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTE0LDkgKzE0LDExIEBACiAKIGNvbmZpZyBBUkNIX09NQVAyCiAJYm9vbCAiVEkgT01BUDIiCisJc2VsZWN0IENQVV9WNgogCiBjb25maWcgQVJDSF9PTUFQMwogCWJvb2wgIlRJIE9NQVAzIgorCXNlbGVjdCBDUFVfVjcKIAogZW5kY2hvaWNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctZGV2aWNlcy5jCmluZGV4IGUzMTE1NGIuLmY2Njg0ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWRldmljZXMuYwpAQCAtNjksMTUgKzY5LDE1IEBACiAJc21jOTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGFkZHIgKyAweDMwMDsKIAlzbWM5MXhfcmVzb3VyY2VzWzBdLmVuZCAgID0gYWRkciArIDB4MzBmOwogCi0Jc21jOTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IE9NQVBfR1BJT19JUlEoZ3Bpbyk7Ci0Jc21jOTF4X3Jlc291cmNlc1sxXS5lbmQgICA9IE9NQVBfR1BJT19JUlEoZ3Bpbyk7CisJc21jOTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IGdwaW9fdG9faXJxKGdwaW8pOworCXNtYzkxeF9yZXNvdXJjZXNbMV0uZW5kICAgPSBncGlvX3RvX2lycShncGlvKTsKIAotCXN0YXR1cyA9IG9tYXBfcmVxdWVzdF9ncGlvKGdwaW8pOworCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvLCAiU01DOTF4IGlycSIpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiR1BJTyVkIHVuYXZhaWxhYmxlIGZvciBzbWM5MXggSVJRXG4iLCBncGlvKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oZ3BpbywgMSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CiAKIAlsZWRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gYWRkcjsKIAlsZWRfcmVzb3VyY2VzWzBdLmVuZCAgID0gYWRkciArIFNaXzRLIC0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCmluZGV4IDJmNGMwY2EuLmJlNGVlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwpAQCAtODMsOCArODMsOCBAQAogCQkvKiBhbGwgbGVkcyBvZmYgZHVyaW5nIHN1c3BlbmQgb3Igc2h1dGRvd24gKi8KIAogCQlpZiAoIShtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDQoKSkpIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCAwKTsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19USU1FUiwgMCk7CisJCQlncGlvX3NldF92YWx1ZShHUElPX0lETEUsIDApOwogCQl9CiAKIAkJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oNCgpKQogCQkJaHdfbGVkX3N0YXRlIF49IEgyUDJfREJHX0ZQR0FfUDJfTEVEX1RJTUVSOwogCQllbHNlIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLAorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19USU1FUiwKIAkJCQkJbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDQoKSkKIAkJCWh3X2xlZF9zdGF0ZSAmPSB+SDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRTsKIAkJZWxzZSB7Ci0JCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAxKTsKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fSURMRSwgMSk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMTMxLDcgKzEzMSw3IEBACiAJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDQoKSkKIAkJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOwogCQllbHNlIHsKLQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19JRExFLCAwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCAwY2IyYjIyLi5hYzE1YzIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTE5MiwyMDIgKzE5Miw0OCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWYJZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkgfHwgXAorI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLSNkZWZpbmUJT01BUF9NTUMxX0JBU0UJCTB4NDgwOWMwMDAKLSNkZWZpbmUJT01BUF9NTUMxX0VORAkJKE9NQVBfTU1DMV9CQVNFICsgMHgxZmMpCi0jZGVmaW5lCU9NQVBfTU1DMV9JTlQJCUlOVF8yNFhYX01NQ19JUlEKKyNkZWZpbmUgT01BUF9NTUNfTlJfUkVTCQkyCiAKLSNkZWZpbmUJT01BUF9NTUMyX0JBU0UJCTB4NDgwYjQwMDAKLSNkZWZpbmUJT01BUF9NTUMyX0VORAkJKE9NQVBfTU1DMl9CQVNFICsgMHgxZmMpCi0jZGVmaW5lCU9NQVBfTU1DMl9JTlQJCUlOVF8yNFhYX01NQzJfSVJRCi0KLSNlbHNlCi0KLSNkZWZpbmUJT01BUF9NTUMxX0JBU0UJCTB4ZmZmYjc4MDAKLSNkZWZpbmUJT01BUF9NTUMxX0VORAkJKE9NQVBfTU1DMV9CQVNFICsgMHg3ZikKLSNkZWZpbmUgT01BUF9NTUMxX0lOVAkJSU5UX01NQwotCi0jZGVmaW5lCU9NQVBfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KLSNkZWZpbmUJT01BUF9NTUMyX0VORAkJKE9NQVBfTU1DMl9CQVNFICsgMHg3ZikKLSNkZWZpbmUJT01BUF9NTUMyX0lOVAkJSU5UXzE2MTBfTU1DMgotCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhIG1tYzFfZGF0YTsKLQotc3RhdGljIHU2NCBtbWMxX2RtYW1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUF9NTUMxX0JBU0UsCi0JCS5lbmQJCT0gT01BUF9NTUMxX0VORCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gT01BUF9NTUMxX0lOVCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UxID0gewotCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAotCS5pZAkJPSAxLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzawk9ICZtbWMxX2RtYW1hc2ssCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzFfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbW1jMV9yZXNvdXJjZXMsCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgXAotCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMyX2RhdGE7Ci0KLXN0YXRpYyB1NjQgbW1jMl9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVBfTU1DMl9CQVNFLAotCQkuZW5kCQk9IE9NQVBfTU1DMl9FTkQsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE9NQVBfTU1DMl9JTlQsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jX29tYXBfZGV2aWNlMiA9IHsKLQkubmFtZQkJPSAibW1jaS1vbWFwIiwKLQkuaWQJCT0gMiwKLQkuZGV2ID0gewotCQkuZG1hX21hc2sJPSAmbW1jMl9kbWFtYXNrLAotCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMyX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1tYzJfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21tY19jb25mKGNvbnN0IHN0cnVjdCBvbWFwX21tY19jb25maWcgKm1tY19jb25mKQorLyoKKyAqIFJlZ2lzdGVyIE1NQyBkZXZpY2VzLiBDYWxsZWQgZnJvbSBtYWNoLW9tYXAxIGFuZCBtYWNoLW9tYXAyIGRldmljZSBpbml0LgorICovCitpbnQgX19pbml0IG9tYXBfbW1jX2FkZChpbnQgaWQsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQl1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSByZXNbT01BUF9NTUNfTlJfUkVTXTsKKwlpbnQgcmV0OwogCi0JaWYgKG1tY19jb25mLT5tbWNbMF0uZW5hYmxlZCkgewotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJCW9tYXBfY2ZnX3JlZyhIMThfMjRYWF9NTUNfQ01EKTsKLQkJCW9tYXBfY2ZnX3JlZyhIMTVfMjRYWF9NTUNfQ0xLSSk7Ci0JCQlvbWFwX2NmZ19yZWcoRzE5XzI0WFhfTU1DX0NMS08pOwotCQkJb21hcF9jZmdfcmVnKEYyMF8yNFhYX01NQ19EQVQwKTsKLQkJCW9tYXBfY2ZnX3JlZyhGMTlfMjRYWF9NTUNfREFUX0RJUjApOwotCQkJb21hcF9jZmdfcmVnKEcxOF8yNFhYX01NQ19DTURfRElSKTsKLQkJfSBlbHNlIHsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfQ01EKTsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7Ci0JCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoTTE1XzE3MTBfTU1DX0NMS0kpOwotCQkJCW9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKLQkJCQlvbWFwX2NmZ19yZWcoUDIwXzE3MTBfTU1DX0RBVERJUjApOwotCQkJfQotCQl9Ci0JCWlmIChtbWNfY29uZi0+bW1jWzBdLndpcmU0KSB7Ci0JCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoSDE0XzI0WFhfTU1DX0RBVDEpOwotCQkJCW9tYXBfY2ZnX3JlZyhFMTlfMjRYWF9NTUNfREFUMik7Ci0JCQkJb21hcF9jZmdfcmVnKEQxOV8yNFhYX01NQ19EQVQzKTsKLQkJCQlvbWFwX2NmZ19yZWcoRTIwXzI0WFhfTU1DX0RBVF9ESVIxKTsKLQkJCQlvbWFwX2NmZ19yZWcoRjE4XzI0WFhfTU1DX0RBVF9ESVIyKTsKLQkJCQlvbWFwX2NmZ19yZWcoRTE4XzI0WFhfTU1DX0RBVF9ESVIzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQxKTsKLQkJCQkvKiBOT1RFOiAgREFUMiBjYW4gYmUgb24gVzEwIChoZXJlKSBvciBNMTUgKi8KLQkJCQlpZiAoIW1tY19jb25mLT5tbWNbMF0ubm9tdXgpCi0JCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMik7Ci0JCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQzKTsKLQkJCX0KLQkJfQotCX0KKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtbWNpLW9tYXAiLCBpZCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKIAotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAxNlhYCi0JLyogYmxvY2sgMiBpcyBvbiBuZXdlciBjaGlwcywgYW5kIGhhcyBtYW55IHBpbm91dCBvcHRpb25zICovCi0JaWYgKG1tY19jb25mLT5tbWNbMV0uZW5hYmxlZCkgewotCQlpZiAoIW1tY19jb25mLT5tbWNbMV0ubm9tdXgpIHsKLQkJCW9tYXBfY2ZnX3JlZyhZOF8xNjEwX01NQzJfQ01EKTsKLQkJCW9tYXBfY2ZnX3JlZyhZMTBfMTYxMF9NTUMyX0NMSyk7Ci0JCQlvbWFwX2NmZ19yZWcoUjE4XzE2MTBfTU1DMl9DTEtJTik7Ci0JCQlvbWFwX2NmZ19yZWcoVzhfMTYxMF9NTUMyX0RBVDApOwotCQkJaWYgKG1tY19jb25mLT5tbWNbMV0ud2lyZTQpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVjhfMTYxMF9NTUMyX0RBVDEpOwotCQkJCW9tYXBfY2ZnX3JlZyhXMTVfMTYxMF9NTUMyX0RBVDIpOwotCQkJCW9tYXBfY2ZnX3JlZyhSMTBfMTYxMF9NTUMyX0RBVDMpOwotCQkJfQorCW1lbXNldChyZXMsIDAsIE9NQVBfTU1DX05SX1JFUyAqIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlyZXNbMF0uc3RhcnQgPSBiYXNlOworCXJlc1swXS5lbmQgPSBiYXNlICsgc2l6ZSAtIDE7CisJcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzWzFdLnN0YXJ0ID0gcmVzWzFdLmVuZCA9IGlycTsKKwlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAotCQkJLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIGxldmVsIHNoaWZ0ZXIgKi8KLQkJCW9tYXBfY2ZnX3JlZyhWOV8xNjEwX01NQzJfQ01ERElSKTsKLQkJCW9tYXBfY2ZnX3JlZyhWNV8xNjEwX01NQzJfREFURElSMCk7Ci0JCQlvbWFwX2NmZ19yZWcoVzE5XzE2MTBfTU1DMl9EQVRESVIxKTsKLQkJfQorCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgQVJSQVlfU0laRShyZXMpKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplb2YoKmRhdGEpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CiAKLQkJLyogRmVlZGJhY2sgY2xvY2sgbXVzdCBiZSBzZXQgb24gT01BUC0xNzEwIE1NQzIgKi8KLQkJaWYgKGNwdV9pc19vbWFwMTcxMCgpKQotCQkJb21hcF93cml0ZWwob21hcF9yZWFkbChNT0RfQ09ORl9DVFJMXzEpIHwgKDEgPDwgMjQpLAotCQkJCSAgICAgTU9EX0NPTkZfQ1RSTF8xKTsKLQl9Ci0jZW5kaWYKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfbW1jKHZvaWQpCi17Ci0JY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmZpZwkqbW1jX2NvbmY7Ci0KLQkvKiBOT1RFOiAgYXNzdW1lcyBNTUMgd2FzIG5ldmVyICh3cm9uZ2x5KSBlbmFibGVkICovCi0JbW1jX2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfTU1DLCBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnKTsKLQlpZiAoIW1tY19jb25mKQotCQlyZXR1cm47Ci0KLQlvbWFwX2luaXRfbW1jX2NvbmYobW1jX2NvbmYpOwotCi0JaWYgKG1tY19jb25mLT5tbWNbMF0uZW5hYmxlZCkgewotCQltbWMxX2RhdGEuY29uZiA9IG1tY19jb25mLT5tbWNbMF07Ci0JCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1tY19vbWFwX2RldmljZTEpOwotCX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotCWlmIChtbWNfY29uZi0+bW1jWzFdLmVuYWJsZWQpIHsKLQkJbW1jMl9kYXRhLmNvbmYgPSBtbWNfY29uZi0+bW1jWzFdOwotCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UyKTsKLQl9Ci0jZW5kaWYKLX0KLQotdm9pZCBvbWFwX3NldF9tbWNfaW5mbyhpbnQgaG9zdCwgY29uc3Qgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmluZm8pCi17Ci0Jc3dpdGNoIChob3N0KSB7Ci0JY2FzZSAxOgotCQltbWMxX2RhdGEgPSAqaW5mbzsKLQkJYnJlYWs7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgXAotCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JY2FzZSAyOgotCQltbWMyX2RhdGEgPSAqaW5mbzsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21tYyh2b2lkKSB7fQotdm9pZCBvbWFwX3NldF9tbWNfaW5mbyhpbnQgaG9zdCwgY29uc3Qgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmluZm8pIHt9CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUzMiw3ICszNzgsNiBAQAogCSAqLwogCW9tYXBfaW5pdF9kc3AoKTsKIAlvbWFwX2luaXRfa3AoKTsKLQlvbWFwX2luaXRfbW1jKCk7CiAJb21hcF9pbml0X3V3aXJlKCk7CiAJb21hcF9pbml0X3dkdCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA1MGY4YjRhLi42OTJkMmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSA8bWFjaC90Yy5oPgogCkBAIC0xODQ4LDkgKzE4NDgsMjIgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgIkRNQSBzeW5jaHJvbml6YXRpb24gZXZlbnQgZHJvcCBvY2N1cnJlZCB3aXRoIGRldmljZSAiCiAJCSAgICAgICAiJWRcbiIsIGRtYV9jaGFuW2NoXS5kZXZfaWQpOwotCWlmICh1bmxpa2VseShzdGF0dXMgJiBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUSkpCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwkJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CisJCQkvKiBFcnJhdGE6IHNETUEgQ2hhbm5lbCBpcyBub3QgZGlzYWJsZWQKKwkJCSAqIGFmdGVyIGEgdHJhbnNhY3Rpb24gZXJyb3IuIFNvIHdlIGV4cGxpY2l0ZWx5CisJCQkgKiBkaXNhYmxlIHRoZSBjaGFubmVsCisJCQkgKi8KKwkJCXUzMiBjY3I7CisKKwkJCWNjciA9IGRtYV9yZWFkKENDUihjaCkpOworCQkJY2NyICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJCQlkbWFfd3JpdGUoY2NyLCBDQ1IoY2gpKTsKKwkJCWRtYV9jaGFuW2NoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOworCQl9CisJfQogCWlmICh1bmxpa2VseShzdGF0dXMgJiBPTUFQMl9ETUFfU0VDVVJFX0VSUl9JUlEpKQogCQlwcmludGsoS0VSTl9JTkZPICJETUEgc2VjdXJlIGVycm9yIHdpdGggZGV2aWNlICVkXG4iLAogCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCA5NjNjMzFjLi5lNGYwY2UwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTUzOSwxMCArNTM5LDYgQEAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTE9BRF9SRUcsIGxvYWQpOwogCi0JLyogUkVWSVNJVDogaHcgZmVhdHVyZSwgdHRnciBvdmVydGFraW5nIHRsZHI/ICovCi0Jd2hpbGUgKHJlYWRsKHRpbWVyLT5pb19iYXNlICsgKE9NQVBfVElNRVJfV1JJVEVfUEVORF9SRUcgJiAweGZmKSkpCi0JCWNwdV9yZWxheCgpOwotCiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDApOwogfQogCkBAIC01NTMsMTQgKzU0OSwxNSBAQAogCXUzMiBsOwogCiAJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOwotCWlmIChhdXRvcmVsb2FkKQorCWlmIChhdXRvcmVsb2FkKSB7CiAJCWwgfD0gT01BUF9USU1FUl9DVFJMX0FSOwotCWVsc2UKKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTE9BRF9SRUcsIGxvYWQpOworCX0gZWxzZSB7CiAJCWwgJj0gfk9NQVBfVElNRVJfQ1RSTF9BUjsKKwl9CiAJbCB8PSBPTUFQX1RJTUVSX0NUUkxfU1Q7CiAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRywgbG9hZCk7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTE9BRF9SRUcsIGxvYWQpOwogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNDI0MDQ5ZC4uMDdiNjk2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0xNTIsNiArMTUyLDcgQEAKIAl1MzIgbGV2ZWxfbWFzazsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworCXN0cnVjdCBjbGsgKmRiY2s7CiB9OwogCiAjZGVmaW5lIE1FVEhPRF9NUFVJTwkJMApAQCAtMjQ0LDYgKzI0NSw4IEBACiAJCXJldHVybiAmZ3Bpb19iYW5rW2dwaW8gPj4gNV07CiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm4gJmdwaW9fYmFua1tncGlvID4+IDVdOworCUJVRygpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZ3Bpb19pbmRleChpbnQgZ3BpbykKQEAgLTMzMiwxOSArMzM1LDYgQEAKIAlfX3Jhd193cml0ZWwobCwgcmVnKTsKIH0KIAotdm9pZCBvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihpbnQgZ3BpbywgaW50IGlzX2lucHV0KQotewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChjaGVja19ncGlvKGdwaW8pIDwgMCkKLQkJcmV0dXJuOwotCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7Ci0JX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgaXNfaW5wdXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIHZvaWQgX3NldF9ncGlvX2RhdGFvdXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBlbmFibGUpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlOwpAQCAtNDA2LDIwICszOTYsNyBAQAogCV9fcmF3X3dyaXRlbChsLCByZWcpOwogfQogCi12b2lkIG9tYXBfc2V0X2dwaW9fZGF0YW91dChpbnQgZ3BpbywgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCi0JCXJldHVybjsKLQliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwotCV9zZXRfZ3Bpb19kYXRhb3V0KGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBlbmFibGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKLX0KLQotaW50IG9tYXBfZ2V0X2dwaW9fZGF0YWluKGludCBncGlvKQorc3RhdGljIGludCBfX29tYXBfZ2V0X2dwaW9fZGF0YWluKGludCBncGlvKQogewogCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CiAJdm9pZCBfX2lvbWVtICpyZWc7CkBAIC00NzMsNiArNDUwLDcgQEAKIHsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwogCXZvaWQgX19pb21lbSAqcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHZhbCwgbCA9IDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3Bpbyk7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCkBAIC00ODAsMTYgKzQ1OCwyOCBAQAogCiAJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CiAJcmVnID0gYmFuay0+YmFzZTsKLQogCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCi0JaWYgKGVuYWJsZSkKKwlpZiAoZW5hYmxlICYmICEodmFsICYgbCkpCiAJCXZhbCB8PSBsOwotCWVsc2UKKwllbHNlIGlmICghZW5hYmxlICYmICh2YWwgJiBsKSkKIAkJdmFsICY9IH5sOworCWVsc2UKKwkJZ290byBkb25lOworCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQljbGtfZW5hYmxlKGJhbmstPmRiY2spOworCQllbHNlCisJCQljbGtfZGlzYWJsZShiYW5rLT5kYmNrKTsKKwl9CiAKIAlfX3Jhd193cml0ZWwodmFsLCByZWcpOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2dwaW9fZGVib3VuY2UpOwogCkBAIC05MDYsMjYgKzg5NiwxNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBvbWFwX3JlcXVlc3RfZ3BpbyhpbnQgZ3BpbykKK3N0YXRpYyBpbnQgb21hcF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZ3Bpb19iYW5rLCBjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXM7CiAKLQlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIE5VTEwpOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNldCB0cmlnZ2VyIHRvIG5vbmUuIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgZGVzaXJlZCB0cmlnZ2VyIHdpdGgKIAkgKiByZXF1ZXN0X2lycSgpIG9yIHNldF9pcnFfdHlwZSgpLgogCSAqLwotCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBJUlFfVFlQRV9OT05FKTsKKwlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBvZmZzZXQsIElSUV9UWVBFX05PTkUpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApIHsKQEAgLTkzMyw3ICs5MTQsNyBAQAogCiAJCS8qIENsYWltIHRoZSBwaW4gZm9yIE1QVSAqLwogCQlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19QSU5fQ09OVFJPTDsKLQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJlZykgfCAoMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSksIHJlZyk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpIHwgKDEgPDwgb2Zmc2V0KSwgcmVnKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CkBAIC05NDEsMzkgKzkyMiwyOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG9tYXBfZnJlZV9ncGlvKGludCBncGlvKQorc3RhdGljIHZvaWQgb21hcF9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZ3Bpb19iYW5rLCBjaGlwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGNoZWNrX2dwaW8oZ3BpbykgPCAwKQotCQlyZXR1cm47Ci0JYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoIWdwaW9jaGlwX2lzX3JlcXVlc3RlZCgmYmFuay0+Y2hpcCwKLQkJCQlnZXRfZ3Bpb19pbmRleChncGlvKSkpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbWFwLWdwaW86IEdQSU8gJWQgd2Fzbid0IHJlc2VydmVkIVxuIiwgZ3Bpbyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuOwotCX0KICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkgewogCQkvKiBEaXNhYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLwogCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0NMRUFSX1dBS0VVUEVOQTsKLQkJX19yYXdfd3JpdGVsKDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHJlZyk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IG9mZnNldCwgcmVnKTsKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgewogCQkvKiBEaXNhYmxlIHdha2UtdXAgZHVyaW5nIGlkbGUgZm9yIGR5bmFtaWMgdGljayAqLwogCQl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NMRUFSV0tVRU5BOwotCQlfX3Jhd193cml0ZWwoMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSwgcmVnKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgb2Zmc2V0LCByZWcpOwogCX0KICNlbmRpZgotCV9yZXNldF9ncGlvKGJhbmssIGdwaW8pOworCV9yZXNldF9ncGlvKGJhbmssIGJhbmstPmNoaXAuYmFzZSArIG9mZnNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwotCWdwaW9fZnJlZShncGlvKTsKIH0KIAogLyoKQEAgLTEyNTIsNyArMTIyMiw3IEBACiAKIHN0YXRpYyBpbnQgZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXJldHVybiBvbWFwX2dldF9ncGlvX2RhdGFpbihjaGlwLT5iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gX19vbWFwX2dldF9ncGlvX2RhdGFpbihjaGlwLT5iYXNlICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGludCBncGlvX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKQEAgLTEyNzksNiArMTI0OSwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBncGlvXzJpcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBncGlvX2JhbmsgKmJhbms7CisKKwliYW5rID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBncGlvX2JhbmssIGNoaXApOworCXJldHVybiBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCArIG9mZnNldDsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGluaXRpYWxpemVkOwpAQCAtMTI5Niw3ICsxMjc0LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLXN0YXRpYyBzdHJ1Y3QgY2xrICpncGlvX2ZjbGtzW09NQVAzNFhYX05SX0dQSU9TXTsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpncGlvX2ljbGtzW09NQVAzNFhYX05SX0dQSU9TXTsKICNlbmRpZgogCkBAIC0xMzEwLDkgKzEyODcsNyBAQAogCWludCBpOwogCWludCBncGlvID0gMDsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJY2hhciBjbGtfbmFtZVsxMV07Ci0jZW5kaWYKIAogCWluaXRpYWxpemVkID0gMTsKIApAQCAtMTM2NywxMiArMTM0Miw2IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0ICVzXG4iLCBjbGtfbmFtZSk7CiAJCQllbHNlCiAJCQkJY2xrX2VuYWJsZShncGlvX2ljbGtzW2ldKTsKLQkJCXNwcmludGYoY2xrX25hbWUsICJncGlvJWRfZmNrIiwgaSArIDEpOwotCQkJZ3Bpb19mY2xrc1tpXSA9IGNsa19nZXQoTlVMTCwgY2xrX25hbWUpOwotCQkJaWYgKElTX0VSUihncGlvX2ZjbGtzW2ldKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgJXNcbiIsIGNsa19uYW1lKTsKLQkJCWVsc2UKLQkJCQljbGtfZW5hYmxlKGdwaW9fZmNsa3NbaV0pOwogCQl9CiAJfQogI2VuZGlmCkBAIC0xNDc5LDEwICsxNDQ4LDEzIEBACiAJCS8qIFJFVklTSVQgZXZlbnR1YWxseSBzd2l0Y2ggZnJvbSBPTUFQLXNwZWNpZmljIGdwaW8gc3RydWN0cwogCQkgKiBvdmVyIHRvIHRoZSBnZW5lcmljIG9uZXMKIAkJICovCisJCWJhbmstPmNoaXAucmVxdWVzdCA9IG9tYXBfZ3Bpb19yZXF1ZXN0OworCQliYW5rLT5jaGlwLmZyZWUgPSBvbWFwX2dwaW9fZnJlZTsKIAkJYmFuay0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBncGlvX2lucHV0OwogCQliYW5rLT5jaGlwLmdldCA9IGdwaW9fZ2V0OwogCQliYW5rLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBncGlvX291dHB1dDsKIAkJYmFuay0+Y2hpcC5zZXQgPSBncGlvX3NldDsKKwkJYmFuay0+Y2hpcC50b19pcnEgPSBncGlvXzJpcnE7CiAJCWlmIChiYW5rX2lzX21wdWlvKGJhbmspKSB7CiAJCQliYW5rLT5jaGlwLmxhYmVsID0gIm1wdWlvIjsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWApAQCAtMTUxMSw2ICsxNDgzLDEzIEBACiAJCX0KIAkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoYmFuay0+aXJxLCBncGlvX2lycV9oYW5kbGVyKTsKIAkJc2V0X2lycV9kYXRhKGJhbmstPmlycSwgYmFuayk7CisKKwkJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQlzcHJpbnRmKGNsa19uYW1lLCAiZ3BpbyVkX2RiY2siLCBpICsgMSk7CisJCQliYW5rLT5kYmNrID0gY2xrX2dldChOVUxMLCBjbGtfbmFtZSk7CisJCQlpZiAoSVNfRVJSKGJhbmstPmRiY2spKQorCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCAlc1xuIiwgY2xrX25hbWUpOworCQl9CiAJfQogCiAJLyogRW5hYmxlIHN5c3RlbSBjbG9jayBmb3IgR1BJTyBtb2R1bGUuCkBAIC0xNzM5LDEyICsxNzE4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKG9tYXBfcmVxdWVzdF9ncGlvKTsKLUVYUE9SVF9TWU1CT0wob21hcF9mcmVlX2dwaW8pOwotRVhQT1JUX1NZTUJPTChvbWFwX3NldF9ncGlvX2RpcmVjdGlvbik7Ci1FWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2dwaW9fZGF0YW91dCk7Ci1FWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2dwaW9fZGF0YWluKTsKLQogYXJjaF9pbml0Y2FsbChvbWFwX2dwaW9fc3lzaW5pdCk7CiAKIApAQCAtMTgwMSwxNCArMTc3NCwxNCBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlpcnEgPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCArIGo7Ci0JCQl2YWx1ZSA9IG9tYXBfZ2V0X2dwaW9fZGF0YWluKGdwaW8pOworCQkJdmFsdWUgPSBncGlvX2dldF92YWx1ZShncGlvKTsKIAkJCWlzX2luID0gZ3Bpb19pc19pbnB1dChiYW5rLCBtYXNrKTsKIAogCQkJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpCiAJCQkJc2VxX3ByaW50ZihzLCAiTVBVSU8gJTJkICIsIGopOwogCQkJZWxzZQogCQkJCXNlcV9wcmludGYocywgIkdQSU8gJTNkICIsIGdwaW8pOwotCQkJc2VxX3ByaW50ZihzLCAiKCUxMHMpOiAlcyAlcyIsCisJCQlzZXFfcHJpbnRmKHMsICIoJS0yMC4yMHMpOiAlcyAlcyIsCiAJCQkJCWxhYmVsLAogCQkJCQlpc19pbiA/ICJpbiAiIDogIm91dCIsCiAJCQkJCXZhbHVlID8gImhpIiAgOiAibG8iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwppbmRleCAwZTZkMTQ3Li44OWE2YWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCkBAIC03OSwyNiArNzksNDMgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaTJjX211eF9waW5zKGludCBidXNfaWQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKK3N0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfcGluc1tdWzJdID0geworCXsgTTE5XzI0WFhfSTJDMV9TQ0wsIEwxNV8yNFhYX0kyQzFfU0RBIH0sCisJeyBKMTVfMjRYWF9JMkMyX1NDTCwgSDE5XzI0WFhfSTJDMl9TREEgfSwKK307CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBvbWFwMjR4eF9waW5zW11bMl0gPSB7fTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCitzdGF0aWMgY29uc3QgaW50IG9tYXAzNHh4X3BpbnNbXVsyXSA9IHsKKwl7IEsyMV8zNFhYX0kyQzFfU0NMLCBKMjFfMzRYWF9JMkMxX1NEQX0sCisJeyBBRjE1XzM0WFhfSTJDMl9TQ0wsIEFFMTVfMzRYWF9JMkMyX1NEQX0sCisJeyBBRjE0XzM0WFhfSTJDM19TQ0wsIEFHMTRfMzRYWF9JMkMzX1NEQX0sCit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCBpbnQgb21hcDM0eHhfcGluc1tdWzJdID0ge307CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaTJjX211eF9waW5zKGludCBidXMpCiB7Ci0JLyogVE9ETzogTXV4aW5nIGZvciBPTUFQMyAqLwotCXN3aXRjaCAoYnVzX2lkKSB7Ci0JY2FzZSAxOgotCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKLQkJCW9tYXBfY2ZnX3JlZyhJMkNfU0NMKTsKLQkJCW9tYXBfY2ZnX3JlZyhJMkNfU0RBKTsKLQkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQkJb21hcF9jZmdfcmVnKE0xOV8yNFhYX0kyQzFfU0NMKTsKLQkJCW9tYXBfY2ZnX3JlZyhMMTVfMjRYWF9JMkMxX1NEQSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJCW9tYXBfY2ZnX3JlZyhKMTVfMjRYWF9JMkMyX1NDTCk7Ci0JCQlvbWFwX2NmZ19yZWcoSDE5XzI0WFhfSTJDMl9TREEpOwotCQl9Ci0JCWJyZWFrOworCWludCBzY2wsIHNkYTsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlzY2wgPSBJMkNfU0NMOworCQlzZGEgPSBJMkNfU0RBOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJc2NsID0gb21hcDI0eHhfcGluc1tidXNdWzBdOworCQlzZGEgPSBvbWFwMjR4eF9waW5zW2J1c11bMV07CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlzY2wgPSBvbWFwMzR4eF9waW5zW2J1c11bMF07CisJCXNkYSA9IG9tYXAzNHh4X3BpbnNbYnVzXVsxXTsKKwl9IGVsc2UgeworCQlyZXR1cm47CiAJfQorCisJb21hcF9jZmdfcmVnKHNkYSk7CisJb21hcF9jZmdfcmVnKHNjbCk7CiB9CiAKIGludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLApAQCAtMTQyLDYgKzE1OSw2IEBACiAJCXJlc1sxXS5zdGFydCA9IGlycTsKIAl9CiAKLQlvbWFwX2kyY19tdXhfcGlucyhidXNfaWQpOworCW9tYXBfaTJjX211eF9waW5zKGJ1c19pZCAtIDEpOwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCmluZGV4IDczMWM4NTguLjYxYmQ1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCkBAIC0yOSwxMiArMjksMTQgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9ICiAKKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorCiBleHRlcm4gdm9pZCBhcG9sbG9uX21tY19pbml0KHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIGludCBhcG9sbG9uX3BsdXModm9pZCkKIHsKIAkvKiBUaGUgYXBvbGxvbiBwbHVzIGhhcyBJRENPREUgcmV2aXNpb24gNSAqLwotCXJldHVybiBzeXN0ZW1fcmV2ICYgMHhjMDsKKwlyZXR1cm4gb21hcF9yZXYoKSAmIDB4YzA7CiB9CiAKIC8qIFBsYWNlaG9sZGVyIGZvciBBUE9MTE9OIHNwZWNpZmljIGRlZmluZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaAppbmRleCAyYTA1MGU5Li4xNTUzMWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgyLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oCkBAIC0yOSwxMyArMjksMTMgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gyX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gyX0gKIAotLyogUGxhY2Vob2xkZXIgZm9yIEgyIHNwZWNpZmljIGRlZmluZXMgKi8KLQogLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCiAjZGVmaW5lIE9NQVAxNjEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKIAorI2RlZmluZSBIMl9UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQorIwlkZWZpbmUgSDJfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDJfVFBTX0dQSU9fQkFTRSArIDMpCisKIGV4dGVybiB2b2lkIGgyX21tY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaDJfbW1jX3Nsb3RfY292ZXJfaGFuZGxlcih2b2lkICphcmcsIGludCBzdGF0ZSk7CiAKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0gyX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmgKaW5kZXggNjZlMjc0Ni4uZjIzMzk5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCkBAIC0zMiw1ICszMiw4IEBACiBleHRlcm4gdm9pZCB0d2w0MDMwX2JjaV9iYXR0ZXJ5X2luaXQodm9pZCk7CiAKICNkZWZpbmUgVFdMNDAzMF9JUlFOVU0JCUlOVF8zNFhYX1NZU19OSVJRCi0KKyNkZWZpbmUgTERQX1NNQzkxMVhfQ1MgICAgICAgICAxCisjZGVmaW5lIExEUF9TTUM5MTFYX0dQSU8gICAgICAgMTUyCisjZGVmaW5lIERFQlVHX0JBU0UgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBPTUFQMzRYWF9FVEhSX1NUQVJUICAgIERFQlVHX0JBU0UKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfTERQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCBjMjNjMTJjLi45NDY2NzcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0xNiw3ICsxNiw2IEBACiAKIC8qIERpZmZlcmVudCBwZXJpcGhlcmFsIGlkcyAqLwogI2RlZmluZSBPTUFQX1RBR19DTE9DSwkJMHg0ZjAxCi0jZGVmaW5lIE9NQVBfVEFHX01NQwkJMHg0ZjAyCiAjZGVmaW5lIE9NQVBfVEFHX1NFUklBTF9DT05TT0xFIDB4NGYwMwogI2RlZmluZSBPTUFQX1RBR19VU0IJCTB4NGYwNAogI2RlZmluZSBPTUFQX1RBR19MQ0QJCTB4NGYwNQpAQCAtMzUsMjcgKzM0LDYgQEAKIAl1OCBzeXN0ZW1fY2xvY2tfdHlwZTsKIH07CiAKLXN0cnVjdCBvbWFwX21tY19jb25mIHsKLQl1bnNpZ25lZCBlbmFibGVkOjE7Ci0JLyogbm9tdXggbWVhbnMgInN0YW5kYXJkIiBtdXhpbmcgaXMgd3Jvbmcgb24gdGhpcyBib2FyZCwgYW5kIHRoYXQKLQkgKiBib2FyZC1zcGVjaWZpYyBjb2RlIGhhbmRsZWQgaXQgYmVmb3JlIGNvbW1vbiBpbml0IGxvZ2ljLgotCSAqLwotCXVuc2lnbmVkIG5vbXV4OjE7Ci0JLyogc3dpdGNoIHBpbiBjYW4gYmUgZm9yIGNhcmQgZGV0ZWN0IChkZWZhdWx0KSBvciBjYXJkIGNvdmVyICovCi0JdW5zaWduZWQgY292ZXI6MTsKLQkvKiA0IHdpcmUgc2lnbmFsaW5nIGlzIG9wdGlvbmFsLCBhbmQgaXMgb25seSB1c2VkIGZvciBTRC9TRElPICovCi0JdW5zaWduZWQgd2lyZTQ6MTsKLQkvKiB1c2UgdGhlIGludGVybmFsIGNsb2NrICovCi0JdW5zaWduZWQgaW50ZXJuYWxfY2xvY2s6MTsKLQlzMTYgcG93ZXJfcGluOwotCXMxNiBzd2l0Y2hfcGluOwotCXMxNiB3cF9waW47Ci19OwotCi1zdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHsKLQlzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWNbMl07Ci19OwotCiBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgewogCXU4IGNvbnNvbGVfdWFydDsKIAl1MzIgY29uc29sZV9zcGVlZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmgKaW5kZXggZGM5ODg2NzYuLjI2OTE0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCkBAIC03NCw2ICs3NCw3IEBACiAjZGVmaW5lIE9NQVAyNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQogI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQogI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0lWQTJfR0VNQ0ZHCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTgpCisjZGVmaW5lIE9NQVAyNDNYX0NPTlRST0xfUEJJQVNfTElURQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMjMwKQogCiAvKiAyNHh4LW9ubHkgQ09OVFJPTF9HRU5FUkFMIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9ERUJPQlMJCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMDApCkBAIC0xNDAsNiArMTQxLDcgQEAKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV8xMwkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGZjKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVEFERFIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDE5MCkKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9JVkEyX0JPT1RNT0QJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDE5NCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9QQklBU19MSVRFCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAyYjApCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVNUF9TRU5TT1IJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDJiNCkKIAogLyoKQEAgLTE1NCwxMSArMTU2LDE0IEBACiAgKiBhbmQgdGhlIHNlY3VyaXR5IG1vZGUgKHNlY3VyZSwgbm9uLXNlY3VyZSwgZG9uJ3QgY2FyZSkKICAqLwogLyogQ09OVFJPTF9ERVZDT05GMCBiaXRzICovCisjZGVmaW5lIE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTAkoMSA8PCAyNCkgLyogTU1DMSBsb29wIGJhY2sgY2xvY2sgKi8KICNkZWZpbmUgT01BUDI0WFhfVVNCU1RBTkRCWUNUUkwJCSgxIDw8IDE1KQogI2RlZmluZSBPTUFQMl9NQ0JTUDJfQ0xLU19NQVNLCQkoMSA8PCA2KQogI2RlZmluZSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLCQkoMSA8PCAyKQogCiAvKiBDT05UUk9MX0RFVkNPTkYxIGJpdHMgKi8KKyNkZWZpbmUgT01BUDI0M1hfTU1DMV9BQ1RJVkVfT1ZFUldSSVRFCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQMl9NTUNTRElPMkFEUENMS0lTRUwJKDEgPDwgNikgLyogTU1DMiBsb29wIGJhY2sgY2xvY2sgKi8KICNkZWZpbmUgT01BUDJfTUNCU1A1X0NMS1NfTUFTSwkJKDEgPDwgNCkgLyogPiAyNDJ4ICovCiAjZGVmaW5lIE9NQVAyX01DQlNQNF9DTEtTX01BU0sJCSgxIDw8IDIpIC8qID4gMjQyeCAqLwogI2RlZmluZSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLCQkoMSA8PCAwKSAvKiA+IDI0MnggKi8KQEAgLTE3Miw2ICsxNzcsMTggQEAKICNkZWZpbmUgT01BUDJfU1lTQk9PVF8xX01BU0sJCSgxIDw8IDEpCiAjZGVmaW5lIE9NQVAyX1NZU0JPT1RfMF9NQVNLCQkoMSA8PCAwKQogCisvKiBDT05UUk9MX1BCSUFTX0xJVEUgYml0cyAqLworI2RlZmluZSBPTUFQMzQzWF9QQklBU0xJVEVTVVBQTFlfSElHSDEJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDNYX1BCSUFTTElURVZNT0RFRVJST1IxCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzWF9QQklBU1NQRUVEQ1RSTDEJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzNDNYX1BCSUFTTElURVBXUkROWjEJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0M1hfUEJJQVNMSVRFVk1PREUxCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDNYX1BCSUFTTElURVNVUFBMWV9ISUdIMAkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzWF9QQklBU0xJVEVWTU9ERUVSUk9SMAkoMSA8PCAzKQorI2RlZmluZSBPTUFQMl9QQklBU1NQRUVEQ1RSTDAJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyX1BCSUFTTElURVBXUkROWjAJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyX1BCSUFTTElURVZNT0RFMAkJKDEgPDwgMCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogZXh0ZXJuIHZvaWQgX19pb21lbSAqb21hcF9jdHJsX2Jhc2VfZ2V0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggZTA0NjQxOC4uYjIwNjJmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0yOCwxMyArMjgsMTggQEAKIAogc3RydWN0IG9tYXBfY2hpcF9pZCB7CiAJdTggb2M7CisJdTggdHlwZTsKIH07CiAKICNkZWZpbmUgT01BUF9DSElQX0lOSVQoeCkJeyAub2MgPSB4IH0KIAotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OwotCi0jZGVmaW5lIG9tYXAyX2NwdV9yZXYoKQkJKChzeXN0ZW1fcmV2ID4+IDEyKSAmIDB4MGYpCisvKgorICogb21hcF9yZXYgYml0czoKKyAqIENQVSBpZCBiaXRzCSgwNzMwLCAxNTEwLCAxNzEwLCAyNDIyLi4uKQlbMzE6MTZdCisgKiBDUFUgcmV2aXNpb24JKFNlZSBfUkVWXyBkZWZpbmVkIGluIGNwdS5oKQlbMTU6MDhdCisgKiBDUFUgY2xhc3MgYml0cyAoMTV4eCwgMTZ4eCwgMjR4eCwgMzR4eC4uLikJWzA3OjAwXQorICovCit1bnNpZ25lZCBpbnQgb21hcF9yZXYodm9pZCk7CiAKIC8qCiAgKiBUZXN0IGlmIG11bHRpY29yZSBPTUFQIHN1cHBvcnQgaXMgbmVlZGVkCkBAIC0xMDgsNyArMTEzLDcgQEAKICAqIGNwdV9pc19vbWFwMjQzeCgpOglUcnVlIGZvciBPTUFQMjQzMAogICogY3B1X2lzX29tYXAzNDN4KCk6CVRydWUgZm9yIE9NQVAzNDMwCiAgKi8KLSNkZWZpbmUgR0VUX09NQVBfQ0xBU1MJKChzeXN0ZW1fcmV2ID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIEdFVF9PTUFQX0NMQVNTCShvbWFwX3JldigpICYgMHhmZikKIAogI2RlZmluZSBJU19PTUFQX0NMQVNTKGNsYXNzLCBpZCkJCQlcCiBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjY2xhc3MgKHZvaWQpCQlcCkBAIC0xMTYsNyArMTIxLDcgQEAKIAlyZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7CVwKIH0KIAotI2RlZmluZSBHRVRfT01BUF9TVUJDTEFTUwkoKHN5c3RlbV9yZXYgPj4gMjApICYgMHgwZmZmKQorI2RlZmluZSBHRVRfT01BUF9TVUJDTEFTUwkoKG9tYXBfcmV2KCkgPj4gMjApICYgMHgwZmZmKQogCiAjZGVmaW5lIElTX09NQVBfU1VCQ0xBU1Moc3ViY2xhc3MsIGlkKQkJCVwKIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyNzdWJjbGFzcyAodm9pZCkJCVwKQEAgLTIyNiw3ICsyMzEsNyBAQAogICogY3B1X2lzX29tYXAyNDMwKCk6CVRydWUgZm9yIE9NQVAyNDMwCiAgKiBjcHVfaXNfb21hcDM0MzAoKToJVHJ1ZSBmb3IgT01BUDM0MzAKICAqLwotI2RlZmluZSBHRVRfT01BUF9UWVBFCSgoc3lzdGVtX3JldiA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIEdFVF9PTUFQX1RZUEUJKChvbWFwX3JldigpID4+IDE2KSAmIDB4ZmZmZikKIAogI2RlZmluZSBJU19PTUFQX1RZUEUodHlwZSwgaWQpCQkJCVwKIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyN0eXBlICh2b2lkKQkJCVwKQEAgLTMyMCw0NCArMzI1LDIwIEBACiAjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMigpCShjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0vKgotICogTWFjcm9zIHRvIGRldGVjdCBzaWxpY29uIHJldmlzaW9uIG9mIE9NQVAyLzMgcHJvY2Vzc29ycy4KLSAqIGlzX3NpbF9yZXZfZ3JlYXRlcl90aGFuOgl0cnVlIGlmIHBhc3NlZCBjcHUgdHlwZSAmIGl0cyByZXYgaXMgZ3JlYXRlci4KLSAqIGlzX3NpbF9yZXZfbGVzc2VyX3RoYW46CXRydWUgaWYgcGFzc2VkIGNwdSB0eXBlICYgaXRzIHJldiBpcyBsZXNzZXIuCi0gKiBpc19zaWxfcmV2X2VxdWFsX3RvOgkJdHJ1ZSBpZiBwYXNzZWQgY3B1IHR5cGUgJiBpdHMgcmV2IGlzIGVxdWFsLgotICogZ2V0X3NpbF9yZXY6CQkJcmV0dXJuIHRoZSBzaWxpY29uIHJldiB2YWx1ZS4KLSAqLwotI2RlZmluZSBnZXRfc2lsX29tYXBfdHlwZShyZXYpCSgocmV2ICYgMHhmZmZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIGdldF9zaWxfcmV2aXNpb24ocmV2KQkoKHJldiAmIDB4MDAwMGYwMDApID4+IDEyKQogCi0jZGVmaW5lIGlzX3NpbF9yZXZfZ3JlYXRlcl90aGFuKHJldikgXAotCQkoKGdldF9zaWxfb21hcF90eXBlKHN5c3RlbV9yZXYpID09IGdldF9zaWxfb21hcF90eXBlKHJldikpICYmIFwKLQkJKGdldF9zaWxfcmV2aXNpb24oc3lzdGVtX3JldikgPiBnZXRfc2lsX3JldmlzaW9uKHJldikpKQorLyogVmFyaW91cyBzaWxpY29uIHJldmlzaW9ucyBmb3Igb21hcDIgKi8KKyNkZWZpbmUgT01BUDI0MlhfQ0xBU1MJCTB4MjQyMDAwMjQKKyNkZWZpbmUgT01BUDI0MjBfUkVWX0VTMV8wCTB4MjQyMDAwMjQKKyNkZWZpbmUgT01BUDI0MjBfUkVWX0VTMl8wCTB4MjQyMDEwMjQKIAotI2RlZmluZSBpc19zaWxfcmV2X2xlc3NfdGhhbihyZXYpIFwKLQkJKChnZXRfc2lsX29tYXBfdHlwZShzeXN0ZW1fcmV2KSA9PSBnZXRfc2lsX29tYXBfdHlwZShyZXYpKSAmJiBcCi0JCShnZXRfc2lsX3JldmlzaW9uKHN5c3RlbV9yZXYpIDwgZ2V0X3NpbF9yZXZpc2lvbihyZXYpKSkKKyNkZWZpbmUgT01BUDI0M1hfQ0xBU1MJCTB4MjQzMDAwMjQKKyNkZWZpbmUgT01BUDI0MzBfUkVWX0VTMV8wCTB4MjQzMDAwMjQKIAotI2RlZmluZSBpc19zaWxfcmV2X2VxdWFsX3RvKHJldikgXAotCQkoKGdldF9zaWxfb21hcF90eXBlKHN5c3RlbV9yZXYpID09IGdldF9zaWxfb21hcF90eXBlKHJldikpICYmIFwKLQkJKGdldF9zaWxfcmV2aXNpb24oc3lzdGVtX3JldikgPT0gZ2V0X3NpbF9yZXZpc2lvbihyZXYpKSkKLQotI2RlZmluZSBnZXRfc2lsX3JldigpIFwKLQkJZ2V0X3NpbF9yZXZpc2lvbihzeXN0ZW1fcmV2KQotCi0vKiBWYXJpb3VzIHNpbGljb24gbWFjcm9zIGRlZmluZWQgaGVyZSAqLwotI2RlZmluZSBPTUFQMjQyWF9DTEFTUwkJMHgyNDIwMDAwMAotI2RlZmluZSBPTUFQMjQyMF9SRVZfRVMxXzAJMHgyNDIwMDAwMAotI2RlZmluZSBPTUFQMjQyMF9SRVZfRVMyXzAJMHgyNDIwMTAwMAotCi0jZGVmaW5lIE9NQVAyNDNYX0NMQVNTCQkweDI0MzAwMDAwCi0jZGVmaW5lIE9NQVAyNDMwX1JFVl9FUzFfMAkweDI0MzAwMDAwCi0KLSNkZWZpbmUgT01BUDM0M1hfQ0xBU1MJCTB4MzQzMDAwMDAKLSNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMV8wCTB4MzQzMDAwMDAKLSNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMl8wCTB4MzQzMDEwMDAKLSNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMl8xCTB4MzQzMDIwMDAKLSNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMl8yCTB4MzQzMDMwMDAKKyNkZWZpbmUgT01BUDM0M1hfQ0xBU1MJCTB4MzQzMDAwMzQKKyNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMV8wCTB4MzQzMDAwMzQKKyNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMl8wCTB4MzQzMDEwMzQKKyNkZWZpbmUgT01BUDM0MzBfUkVWX0VTMl8xCTB4MzQzMDIwMzQKKyNkZWZpbmUgT01BUDM0MzBfUkVWX0VTM18wCTB4MzQzMDMwMzQKIAogLyoKICAqIG9tYXBfY2hpcCBiaXRzCkBAIC0zODIsMjMgKzM2MywxNiBAQAogI2RlZmluZSBDSElQX0lTX09NQVAyNFhYICAgICAgIChDSElQX0lTX09NQVAyNDIwIHwgQ0hJUF9JU19PTUFQMjQzMCkKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7Ci0KK2ludCBvbWFwX3R5cGUodm9pZCk7CiAKIC8qCiAgKiBNYWNybyB0byBkZXRlY3QgZGV2aWNlIHR5cGUgaS5lLiBFTVUvSFMvVFNUL0dQL0JBRAogICovCi0jZGVmaW5lIERFVklDRV9UWVBFX1RFU1QJMAotI2RlZmluZSBERVZJQ0VfVFlQRV9FTVUJCTEKLSNkZWZpbmUgREVWSUNFX1RZUEVfU0VDCQkyCi0jZGVmaW5lIERFVklDRV9UWVBFX0dQCQkzCi0jZGVmaW5lIERFVklDRV9UWVBFX0JBRAkJNAotCi0jZGVmaW5lIGdldF9kZXZpY2VfdHlwZSgpCSgoc3lzdGVtX3JldiAmIDB4NzAwKSA+PiA4KQotI2RlZmluZSBpc19kZXZpY2VfdHlwZV90ZXN0KCkJKGdldF9kZXZpY2VfdHlwZSgpID09IERFVklDRV9UWVBFX1RFU1QpCi0jZGVmaW5lIGlzX2RldmljZV90eXBlX2VtdSgpCShnZXRfZGV2aWNlX3R5cGUoKSA9PSBERVZJQ0VfVFlQRV9FTVUpCi0jZGVmaW5lIGlzX2RldmljZV90eXBlX3NlYygpCShnZXRfZGV2aWNlX3R5cGUoKSA9PSBERVZJQ0VfVFlQRV9TRUMpCi0jZGVmaW5lIGlzX2RldmljZV90eXBlX2dwKCkJKGdldF9kZXZpY2VfdHlwZSgpID09IERFVklDRV9UWVBFX0dQKQotI2RlZmluZSBpc19kZXZpY2VfdHlwZV9iYWQoKQkoZ2V0X2RldmljZV90eXBlKCkgPT0gREVWSUNFX1RZUEVfQkFEKQorI2RlZmluZSBPTUFQMl9ERVZJQ0VfVFlQRV9URVNUCQkwCisjZGVmaW5lIE9NQVAyX0RFVklDRV9UWVBFX0VNVQkJMQorI2RlZmluZSBPTUFQMl9ERVZJQ0VfVFlQRV9TRUMJCTIKKyNkZWZpbmUgT01BUDJfREVWSUNFX1RZUEVfR1AJCTMKKyNkZWZpbmUgT01BUDJfREVWSUNFX1RZUEVfQkFECQk0CiAKIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggOThlOTAwOC4uMDRlNjhlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTcxLDExICs3MSw2IEBACiAJCQkJIElIX0dQSU9fQkFTRSArIChucikpCiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CS8qIENhbGwgZnJvbSBib2FyZCBpbml0IG9ubHkgKi8KLWV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOwotZXh0ZXJuIHZvaWQgb21hcF9mcmVlX2dwaW8oaW50IGdwaW8pOwotZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaW50IGdwaW8sIGludCBpc19pbnB1dCk7Ci1leHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpOwotZXh0ZXJuIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3Bpbyk7CiBleHRlcm4gdm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX3JldGVudGlvbih2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAyX2dwaW9fcmVzdW1lX2FmdGVyX3JldGVudGlvbih2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGVib3VuY2UoaW50IGdwaW8sIGludCBlbmFibGUpOwpAQCAtOTIsNiArODcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIAorc3RhdGljIGlubGluZSBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pCit7CisJcmV0dXJuIGdwaW9fcmVxdWVzdChncGlvLCAiRklYTUUiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfZnJlZV9ncGlvKGludCBncGlvKQoreworCWdwaW9fZnJlZShncGlvKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKIAlyZXR1cm4gX19ncGlvX2dldF92YWx1ZShncGlvKTsKQEAgLTEwOSwxNiArMTE0LDI0IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCiB7Ci0JaWYgKGdwaW8gPCAoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2KSkKLQkJcmV0dXJuIE9NQVBfR1BJT19JUlEoZ3Bpbyk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIF9fZ3Bpb190b19pcnEoZ3Bpbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKIHsKKwlpbnQgdG1wOworCisJLyogb21hcDEgU09DIG1wdWlvICovCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpICYmIChpcnEgPCAoSUhfTVBVSU9fQkFTRSArIDE2KSkpCiAJCXJldHVybiAoaXJxIC0gSUhfTVBVSU9fQkFTRSkgKyBPTUFQX01BWF9HUElPX0xJTkVTOwotCXJldHVybiBpcnEgLSBJSF9HUElPX0JBU0U7CisKKwkvKiBTT0MgZ3BpbyAqLworCXRtcCA9IGlycSAtIElIX0dQSU9fQkFTRTsKKwlpZiAodG1wIDwgT01BUF9NQVhfR1BJT19MSU5FUykKKwkJcmV0dXJuIHRtcDsKKworCS8qIHdlIGRvbid0IHN1cHBseSByZXZlcnNlIG1hcHBpbmdzIGZvciBub24tU09DIGdwaW9zICovCisJcmV0dXJuIC1FSU87CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGFkYzgzYjcuLmQ5MmJmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTQyLDggKzQyLDggQEAKICAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcmVhbCBJU0Egbm9yIFBDSSBidXNlcywgYnV0IHRoZXJlIGlzIHNvIG1hbnkKICAqIGRyaXZlcnMgb3V0IHRoZXJlIHRoYXQgbWlnaHQganVzdCB3b3JrIGlmIHdlIGZha2UgdGhlbS4uLgogICovCi0jZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShQQ0lPX0JBU0UgKyAoYSkpKQotI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUxLDggKzUxLDYgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0jZGVmaW5lIFBDSU9fQkFTRQkwCi0KICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogCiAjZGVmaW5lIElPX1BIWVMJCQkweEZGRkIwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBkNDBjYWM2Li4yMTFjOWY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTQzLDE4ICs0Myw3IEBACiAjZW5kaWYKIAogLyoKLSAqIENvbnZlcnNpb24gYmV0d2VlbiBTRFJBTSBhbmQgZmFrZSBQQ0kgYnVzLCB1c2VkIGJ5IFVTQgotICogTk9URTogUGh5c2ljYWwgYWRkcmVzcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBMb2NhbCBCdXMgYWRkcmVzcwotICoJIG9uIE9NQVAtMTUxMCBvbmx5Ci0gKi8KLQotLyoKICAqIEJ1cyBhZGRyZXNzIGlzIHBoeXNpY2FsIGFkZHJlc3MsIGV4Y2VwdCBmb3IgT01BUC0xNTEwIExvY2FsIEJ1cy4KLSAqLwotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKLQotLyoKICAqIE9NQVAtMTUxMCBidXMgYWRkcmVzcyBpcyB0cmFuc2xhdGVkIGludG8gYSBMb2NhbCBCdXMgYWRkcmVzcyBpZiB0aGUKICAqIE9NQVAgYnVzIHR5cGUgaXMgbGJ1cy4gV2UgZG8gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gYmFzZWQgb24gdGhlCiAgKiBkZXZpY2Ugb3ZlcnJpZGluZyB0aGUgZGVmYXVsdHMgdXNlZCBpbiB0aGUgZG1hLW1hcHBpbmcgQVBJLgpAQCAtNzQsMTYgKzYzLDE2IEBACiAKICNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkJKHtpc19sYnVzX2RldmljZShkZXYpID8gXAogCQkJCQkoZG1hX2FkZHJfdCl2aXJ0X3RvX2xidXMocGFnZV9hZGRyZXNzKHBhZ2UpKSA6IFwKLQkJCQkJKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cyhwYWdlX2FkZHJlc3MocGFnZSkpO30pCisJCQkJCShkbWFfYWRkcl90KV9fdmlydF90b19waHlzKHBhZ2VfYWRkcmVzcyhwYWdlKSk7fSkKIAogI2RlZmluZSBfX2FyY2hfZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKQkoeyAodm9pZCAqKSAoaXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKIAkJCQkJCWxidXNfdG9fdmlydChhZGRyKSA6IFwKLQkJCQkJCV9fYnVzX3RvX3ZpcnQoYWRkcikpOyB9KQorCQkJCQkJX19waHlzX3RvX3ZpcnQoYWRkcikpOyB9KQogCiAjZGVmaW5lIF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIGFkZHIpCSh7IHVuc2lnbmVkIGxvbmcgX19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKGFkZHIpOyBcCiAJCQkJCSAgIChkbWFfYWRkcl90KSAoaXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKIAkJCQkJCXZpcnRfdG9fbGJ1cyhfX2FkZHIpIDogXAotCQkJCQkJX192aXJ0X3RvX2J1cyhfX2FkZHIpKTsgfSkKKwkJCQkJCV9fdmlydF90b19waHlzKF9fYWRkcikpOyB9KQogCiAjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKaW5kZXggZmMxNWQxMy4uMDMxMjUwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCkBAIC0xNywxMiArMTcsMjggQEAKIAogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KIAorI2RlZmluZSBPTUFQMTVYWF9OUl9NTUMJCTEKKyNkZWZpbmUgT01BUDE2WFhfTlJfTU1DCQkyCisjZGVmaW5lIE9NQVAxX01NQ19TSVpFCQkweDA4MAorI2RlZmluZSBPTUFQMV9NTUMxX0JBU0UJCTB4ZmZmYjc4MDAKKyNkZWZpbmUgT01BUDFfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KKworI2RlZmluZSBPTUFQMjRYWF9OUl9NTUMJCTIKKyNkZWZpbmUgT01BUDM0WFhfTlJfTU1DCQkzCisjZGVmaW5lIE9NQVAyNDIwX01NQ19TSVpFCU9NQVAxX01NQ19TSVpFCisjZGVmaW5lIEhTTU1DX1NJWkUJCTB4MjAwCisjZGVmaW5lIE9NQVAyX01NQzFfQkFTRQkJMHg0ODA5YzAwMAorI2RlZmluZSBPTUFQMl9NTUMyX0JBU0UJCTB4NDgwYjQwMDAKKyNkZWZpbmUgT01BUDNfTU1DM19CQVNFCQkweDQ4MGFkMDAwCisjZGVmaW5lIEhTTU1DMwkJCSgxIDw8IDIpCisjZGVmaW5lIEhTTU1DMgkJCSgxIDw8IDEpCisjZGVmaW5lIEhTTU1DMQkJCSgxIDw8IDApCisKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgewotCXN0cnVjdCBvbWFwX21tY19jb25mCWNvbmY7CiAKLQkvKiBudW1iZXIgb2Ygc2xvdHMgb24gYm9hcmQgKi8KKwkvKiBudW1iZXIgb2Ygc2xvdHMgcGVyIGNvbnRyb2xsZXIgKi8KIAl1bnNpZ25lZCBucl9zbG90czoyOwogCiAJLyogc2V0IGlmIHlvdXIgYm9hcmQgaGFzIGNvbXBvbmVudHMgb3Igd2lyaW5nIHRoYXQgbGltaXRzIHRoZQpAQCAtNDEsNyArNTcsMzEgQEAKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCisJdTY0IGRtYV9tYXNrOworCiAJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSB7CisKKwkJLyogNCB3aXJlIHNpZ25hbGluZyBpcyBvcHRpb25hbCwgYW5kIGlzIHVzZWQgZm9yIFNEL1NESU8vSFNNTUM7CisJCSAqIDggd2lyZSBzaWduYWxpbmcgaXMgYWxzbyBvcHRpb25hbCwgYW5kIGlzIHVzZWQgd2l0aCBIU01NQworCQkgKi8KKwkJdTggd2lyZXM7CisKKwkJLyoKKwkJICogbm9tdXggbWVhbnMgInN0YW5kYXJkIiBtdXhpbmcgaXMgd3Jvbmcgb24gdGhpcyBib2FyZCwgYW5kCisJCSAqIHRoYXQgYm9hcmQtc3BlY2lmaWMgY29kZSBoYW5kbGVkIGl0IGJlZm9yZSBjb21tb24gaW5pdCBsb2dpYy4KKwkJICovCisJCXVuc2lnbmVkIG5vbXV4OjE7CisKKwkJLyogc3dpdGNoIHBpbiBjYW4gYmUgZm9yIGNhcmQgZGV0ZWN0IChkZWZhdWx0KSBvciBjYXJkIGNvdmVyICovCisJCXVuc2lnbmVkIGNvdmVyOjE7CisKKwkJLyogdXNlIHRoZSBpbnRlcm5hbCBjbG9jayAqLworCQl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOworCQlzMTYgcG93ZXJfcGluOworCisJCWludCBzd2l0Y2hfcGluOwkJCS8qIGdwaW8gKGNhcmQgZGV0ZWN0KSAqLworCQlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLworCiAJCWludCAoKiBzZXRfYnVzX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSk7CiAJCWludCAoKiBzZXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CiAJCWludCAoKiBnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwpAQCAtNDksOCArODksOCBAQAogCQkvKiByZXR1cm4gTU1DIGNvdmVyIHN3aXRjaCBzdGF0ZSwgY2FuIGJlIE5VTEwgaWYgbm90IHN1cHBvcnRlZC4KIAkJICoKIAkJICogcG9zc2libGUgcmV0dXJuIHZhbHVlczoKLQkJICogICAwIC0gb3BlbgotCQkgKiAgIDEgLSBjbG9zZWQKKwkJICogICAwIC0gY2xvc2VkCisJCSAqICAgMSAtIG9wZW4KIAkJICovCiAJCWludCAoKiBnZXRfY292ZXJfc3RhdGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCkBAIC02Niw5ICsxMDYsMzEgQEAKIAl9IHNsb3RzW09NQVBfTU1DX01BWF9TTE9UU107CiB9OwogCi1leHRlcm4gdm9pZCBvbWFwX3NldF9tbWNfaW5mbyhpbnQgaG9zdCwgY29uc3Qgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmluZm8pOwotCiAvKiBjYWxsZWQgZnJvbSBib2FyZC1zcGVjaWZpYyBjYXJkIGRldGVjdGlvbiBzZXJ2aWNlIHJvdXRpbmUgKi8KIGV4dGVybiB2b2lkIG9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgaXNfY2xvc2VkKTsKIAorI2lmCWRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKQordm9pZCBvbWFwMV9pbml0X21tYyhzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqKm1tY19kYXRhLAorCQkJCWludCBucl9jb250cm9sbGVycyk7Cit2b2lkIG9tYXAyX2luaXRfbW1jKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICoqbW1jX2RhdGEsCisJCQkJaW50IG5yX2NvbnRyb2xsZXJzKTsKK2ludCBvbWFwX21tY19hZGQoaW50IGlkLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpkYXRhKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDFfaW5pdF9tbWMoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKiptbWNfZGF0YSwKKwkJCQlpbnQgbnJfY29udHJvbGxlcnMpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfaW5pdF9tbWMoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKiptbWNfZGF0YSwKKwkJCQlpbnQgbnJfY29udHJvbGxlcnMpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBvbWFwX21tY19hZGQoaW50IGlkLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJdW5zaWduZWQgaW50IGlycSwgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAppbmRleCA2YmJmMTc4Li5mNDM2MmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKQEAgLTYzMiw2ICs2MzIsMTUgQEAKIAlBQzdfMjQzMF9VU0IwSFNfREFUQTcsCiAKIAkvKiAyNDMwIE1jQlNQICovCisJQUQ2XzI0MzBfTUNCU1BfQ0xLUywKKworCUFCMl8yNDMwX01DQlNQMV9DTEtSLAorCUFENV8yNDMwX01DQlNQMV9GU1IsCisJQUExXzI0MzBfTUNCU1AxX0RYLAorCUFGM18yNDMwX01DQlNQMV9EUiwKKwlBQjNfMjQzMF9NQ0JTUDFfRlNYLAorCVk5XzI0MzBfTUNCU1AxX0NMS1gsCisKIAlBQzEwXzI0MzBfTUNCU1AyX0ZTWCwKIAlBRDE2XzI0MzBfTUNCU1AyX0NMWCwKIAlBRTEzXzI0MzBfTUNCU1AyX0RYLApAQCAtNjQxLDYgKzY1MCwzMCBAQAogCUFFMTNfMjQzMF9NQ0JTUDJfRFhfT0ZGLAogCUFEMTNfMjQzMF9NQ0JTUDJfRFJfT0ZGLAogCisJQUM5XzI0MzBfTUNCU1AzX0NMS1gsCisJQUU0XzI0MzBfTUNCU1AzX0ZTWCwKKwlBRTJfMjQzMF9NQ0JTUDNfRFIsCisJQUY0XzI0MzBfTUNCU1AzX0RYLAorCisJTjNfMjQzMF9NQ0JTUDRfQ0xLWCwKKwlBRDIzXzI0MzBfTUNCU1A0X0RSLAorCUFCMjVfMjQzMF9NQ0JTUDRfRFgsCisJQUMyNV8yNDMwX01DQlNQNF9GU1gsCisKKwlBRTE2XzI0MzBfTUNCU1A1X0NMS1gsCisJQUYxMl8yNDMwX01DQlNQNV9GU1gsCisJSzdfMjQzMF9NQ0JTUDVfRFgsCisJTTFfMjQzMF9NQ0JTUDVfRFIsCisKKwkvKiAyNDMwIE1jU1BJKi8KKwlZMThfMjQzMF9NQ1NQSTFfQ0xLLAorCUFEMTVfMjQzMF9NQ1NQSTFfU0lNTywKKwlBRTE3XzI0MzBfTUNTUEkxX1NPTUksCisJVTFfMjQzMF9NQ1NQSTFfQ1MwLAorCisJLyogVG91Y2hzY3JlZW4gR1BJTyAqLworCUFGMTlfMjQzMF9HUElPXzg1LAorCiB9OwogCiBlbnVtIG9tYXAzNHh4X2luZGV4IHsKQEAgLTc0OSw2ICs3ODIsMTQgQEAKIAlBRDJfMzQzMF9VU0IzRlNfUEhZX01NM19UWERBVCwKIAlBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04sCiAKKwkvKiAzNHh4IEdQSU8KKwkgKiAgLSBub3JtYWxseSB0aGVzZSBhcmUgYmlkaXJlY3Rpb25hbCwgbm8gaW50ZXJuYWwgcHVsbHVwL3B1bGxkb3duCisJICogIC0gIl9VUCIgc3VmZml4IChHUElPM19VUCkgaWYgaW50ZXJuYWwgcHVsbHVwIGlzIGNvbmZpZ3VyZWQKKwkgKiAgLSAiX0RPV04iIHN1ZmZpeCAoR1BJTzNfRE9XTikgd2l0aCBpbnRlcm5hbCBwdWxsZG93bgorCSAqICAtICJfT1VUIiBzdWZmaXggKEdQSU8zX09VVCkgZm9yIG91dHB1dC1vbmx5IHBpbnMgKHVubGlrZSAyNHh4KQorCSAqLworCUFIOF8zNFhYX0dQSU8yOSwKKwlKMjVfMzRYWF9HUElPMTcwLAogfTsKIAogc3RydWN0IG9tYXBfbXV4X2NmZyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBkY2Q5ZDE2Li5iZTdiY2FmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgogCiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAKQEAgLTg3LDcgKzg4LDcgQEAKIAlpbnQgdHlwZSA9IDA7CiAKIAlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCi0JCXR5cGUgPSBzeXN0ZW1fcmV2ICYgT01BUDJfREVWSUNFVFlQRV9NQVNLOworCQl0eXBlID0gb21hcF9yZXYoKSAmIE9NQVAyX0RFVklDRVRZUEVfTUFTSzsKIAogCWlmICh0eXBlID09IEdQX0RFVklDRSkgewogCQkvKiBSQU1GVzogUi9XIGFjY2VzcyB0byBhbGwgaW5pdGlhdG9ycyBmb3IgYWxsIHF1YWxpZmllciBzZXRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9NYWtlZmlsZQppbmRleCAxOThmM2RkLi41NjAyMWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vTWFrZWZpbGUKQEAgLTYsMyArNiw1IEBACiBvYmotbQk6PQogb2JqLW4JOj0KIG9iai0JOj0KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykgKz0gZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzE4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwpAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vZ3Bpby5jCisgKgorICogTWFydmVsbCBPcmlvbiBTb0MgR1BJTyBoYW5kbGluZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitzdGF0aWMgY29uc3QgY2hhciAqZ3Bpb19sYWJlbFtHUElPX01BWF07ICAvKiBub24gbnVsbCBmb3IgYWxsb2NhdGVkIEdQSU9zICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkW0JJVFNfVE9fTE9OR1MoR1BJT19NQVgpXTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2RpcmVjdGlvbih1bnNpZ25lZCBwaW4sIGludCBpbnB1dCkKK3sKKwl1MzIgdTsKKworCXUgPSByZWFkbChHUElPX0lPX0NPTkYocGluKSk7CisJaWYgKGlucHV0KQorCQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKKwllbHNlCisJCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOworCXdyaXRlbCh1LCBHUElPX0lPX0NPTkYocGluKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X2xldmVsKHVuc2lnbmVkIHBpbiwgaW50IGhpZ2gpCit7CisJdTMyIHU7CisKKwl1ID0gcmVhZGwoR1BJT19PVVQocGluKSk7CisJaWYgKGhpZ2gpCisJCXUgfD0gMSA8PCAocGluICYgMzEpOworCWVsc2UKKwkJdSAmPSB+KDEgPDwgKHBpbiAmIDMxKSk7CisJd3JpdGVsKHUsIEdQSU9fT1VUKHBpbikpOworfQorCisKKy8qCisgKiBHRU5FUklDX0dQSU8gcHJpbWl0aXZlcy4KKyAqLworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU29tZSBjYWxsZXJzIG1pZ2h0IG5vdCBoYXZlIHVzZWQgZ3Bpb19yZXF1ZXN0KCksCisJICogc28gZmxhZyB0aGlzIHBpbiBhcyByZXF1ZXN0ZWQgbm93LgorCSAqLworCWlmIChncGlvX2xhYmVsW3Bpbl0gPT0gTlVMTCkKKwkJZ3Bpb19sYWJlbFtwaW5dID0gIj8iOworCisJLyoKKwkgKiBDb25maWd1cmUgR1BJTyBkaXJlY3Rpb24uCisJICovCisJX19zZXRfZGlyZWN0aW9uKHBpbiwgMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9pbnB1dCk7CisKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdTsKKworCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZCkpIHsKKwkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNvbWUgY2FsbGVycyBtaWdodCBub3QgaGF2ZSB1c2VkIGdwaW9fcmVxdWVzdCgpLAorCSAqIHNvIGZsYWcgdGhpcyBwaW4gYXMgcmVxdWVzdGVkIG5vdy4KKwkgKi8KKwlpZiAoZ3Bpb19sYWJlbFtwaW5dID09IE5VTEwpCisJCWdwaW9fbGFiZWxbcGluXSA9ICI/IjsKKworCS8qCisJICogRGlzYWJsZSBibGlua2luZy4KKwkgKi8KKwl1ID0gcmVhZGwoR1BJT19CTElOS19FTihwaW4pKTsKKwl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKKwl3cml0ZWwodSwgR1BJT19CTElOS19FTihwaW4pKTsKKworCS8qCisJICogQ29uZmlndXJlIEdQSU8gb3V0cHV0IHZhbHVlLgorCSAqLworCV9fc2V0X2xldmVsKHBpbiwgdmFsdWUpOworCisJLyoKKwkgKiBDb25maWd1cmUgR1BJTyBkaXJlY3Rpb24uCisJICovCisJX19zZXRfZGlyZWN0aW9uKHBpbiwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOworCitpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgcGluKQoreworCWludCB2YWw7CisKKwlpZiAocmVhZGwoR1BJT19JT19DT05GKHBpbikpICYgKDEgPDwgKHBpbiAmIDMxKSkpCisJCXZhbCA9IHJlYWRsKEdQSU9fREFUQV9JTihwaW4pKSBeIHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOworCWVsc2UKKwkJdmFsID0gcmVhZGwoR1BJT19PVVQocGluKSk7CisKKwlyZXR1cm4gKHZhbCA+PiAocGluICYgMzEpKSAmIDE7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZ2V0X3ZhbHVlKTsKKwordm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB1OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBEaXNhYmxlIGJsaW5raW5nLgorCSAqLworCXUgPSByZWFkbChHUElPX0JMSU5LX0VOKHBpbikpOworCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOworCXdyaXRlbCh1LCBHUElPX0JMSU5LX0VOKHBpbikpOworCisJLyoKKwkgKiBDb25maWd1cmUgR1BJTyBvdXRwdXQgdmFsdWUuCisJICovCisJX19zZXRfbGV2ZWwocGluLCB2YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCitpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIHBpbiwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlpZiAoZ3Bpb19sYWJlbFtwaW5dID09IE5VTEwpIHsKKwkJZ3Bpb19sYWJlbFtwaW5dID0gbGFiZWwgPyBsYWJlbCA6ICI/IjsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiJXM6IEdQSU8gJWQgYWxyZWFkeSB1c2VkIGFzICVzXG4iLAorCQkJIF9fZnVuY19fLCBwaW4sIGdwaW9fbGFiZWxbcGluXSk7CisJCXJldCA9IC1FQlVTWTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOworCit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBwaW4pCit7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZ3Bpb19sYWJlbFtwaW5dID09IE5VTEwpCisJCXByX3dhcm5pbmcoIiVzOiBHUElPICVkIGFscmVhZHkgZnJlZWRcbiIsIF9fZnVuY19fLCBwaW4pOworCWVsc2UKKwkJZ3Bpb19sYWJlbFtwaW5dID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKKworCisvKgorICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KKyAqLwordm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19zZXRfdW51c2VkKHVuc2lnbmVkIHBpbikKK3sKKwkvKgorCSAqIENvbmZpZ3VyZSBhcyBvdXRwdXQsIGRyaXZlIGxvdy4KKwkgKi8KKwlfX3NldF9sZXZlbChwaW4sIDApOworCV9fc2V0X2RpcmVjdGlvbihwaW4sIDApOworfQorCit2b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCB2YWxpZCkKK3sKKwlpZiAodmFsaWQpCisJCV9fc2V0X2JpdChwaW4sIGdwaW9fdmFsaWQpOworCWVsc2UKKwkJX19jbGVhcl9iaXQocGluLCBncGlvX3ZhbGlkKTsKK30KKwordm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB1OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTZXQgb3V0cHV0IHZhbHVlIHRvIHplcm8uCisJICovCisJX19zZXRfbGV2ZWwocGluLCAwKTsKKworCXUgPSByZWFkbChHUElPX0JMSU5LX0VOKHBpbikpOworCWlmIChibGluaykKKwkJdSB8PSAxIDw8IChwaW4gJiAzMSk7CisJZWxzZQorCQl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKKwl3cml0ZWwodSwgR1BJT19CTElOS19FTihwaW4pKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChvcmlvbl9ncGlvX3NldF9ibGluayk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcmlvbiBHUElPIElSUQorICoKKyAqIEdQSU9fSU5fUE9MIHJlZ2lzdGVyIGNvbnRyb2xzIHdoZXRoZXIgR1BJT19EQVRBX0lOIHdpbGwgaG9sZCB0aGUgc2FtZQorICogdmFsdWUgb2YgdGhlIGxpbmUgb3IgdGhlIG9wcG9zaXRlIHZhbHVlLgorICoKKyAqIExldmVsIElSUSBoYW5kbGVyczogREFUQV9JTiBpcyB1c2VkIGRpcmVjdGx5IGFzIGNhdXNlIHJlZ2lzdGVyLgorICogICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgYXJlIG1hc2tlZCBieSBMRVZFTF9NQVNLIHJlZ2lzdGVycy4KKyAqIEVkZ2UgSVJRIGhhbmRsZXJzOiAgQ2hhbmdlIGluIERBVEFfSU4gYXJlIGxhdGNoZWQgaW4gRURHRV9DQVVTRS4KKyAqICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGFyZSBtYXNrZWQgYnkgRURHRV9NQVNLIHJlZ2lzdGVycy4KKyAqIEJvdGgtZWRnZSBoYW5kbGVyczogU2ltaWxhciB0byByZWd1bGFyIEVkZ2UgaGFuZGxlcnMsIGJ1dCBhbHNvIHN3YXBzCisgKiAgICAgICAgICAgICAgICAgICAgIHRoZSBwb2xhcml0eSB0byBjYXRjaCB0aGUgbmV4dCBsaW5lIHRyYW5zYWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBtaWdodCBub3QgcGVyZmVjdGx5CisgKiAgICAgICAgICAgICAgICAgICAgIHdvcmsgb24gc29tZSB1c2UgY2FzZXMuCisgKgorICogRXZlcnkgZWlnaHQgR1BJTyBsaW5lcyBhcmUgZ3JvdXBlZCAoT1InZWQpIGJlZm9yZSBnb2luZyB1cCB0byBtYWluCisgKiBjYXVzZSByZWdpc3Rlci4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgRURHRSAgY2F1c2UgICAgbWFzaworICogICAgICAgIGRhdGEtaW4gICAvLS0tLS0tLS18IHwtLS0tLXwgfC0tLS1cCisgKiAgICAgLS0tLS18IHwtLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tIHRvIG1haW4gY2F1c2UgcmVnCisgKiAgICAgICAgICAgWCAgICAgIFwtLS0tLS0tLS0tLS0tLS0tfCB8LS0tLS8KKyAqICAgICAgICBwb2xhcml0eSAgICBMRVZFTCAgICAgICAgICBtYXNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBncGlvX2lycV9lZGdlX2Fjayh1MzIgaXJxKQoreworCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhpcnEpOworCisJd3JpdGVsKH4oMSA8PCAocGluICYgMzEpKSwgR1BJT19FREdFX0NBVVNFKHBpbikpOworfQorCitzdGF0aWMgdm9pZCBncGlvX2lycV9lZGdlX21hc2sodTMyIGlycSkKK3sKKwlpbnQgcGluID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgdTsKKworCXUgPSByZWFkbChHUElPX0VER0VfTUFTSyhwaW4pKTsKKwl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKKwl3cml0ZWwodSwgR1BJT19FREdFX01BU0socGluKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX2VkZ2VfdW5tYXNrKHUzMiBpcnEpCit7CisJaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIHU7CisKKwl1ID0gcmVhZGwoR1BJT19FREdFX01BU0socGluKSk7CisJdSB8PSAxIDw8IChwaW4gJiAzMSk7CisJd3JpdGVsKHUsIEdQSU9fRURHRV9NQVNLKHBpbikpOworfQorCitzdGF0aWMgdm9pZCBncGlvX2lycV9sZXZlbF9tYXNrKHUzMiBpcnEpCit7CisJaW50IHBpbiA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIHU7CisKKwl1ID0gcmVhZGwoR1BJT19MRVZFTF9NQVNLKHBpbikpOworCXUgJj0gfigxIDw8IChwaW4gJiAzMSkpOworCXdyaXRlbCh1LCBHUElPX0xFVkVMX01BU0socGluKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX2xldmVsX3VubWFzayh1MzIgaXJxKQoreworCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiB1OworCisJdSA9IHJlYWRsKEdQSU9fTEVWRUxfTUFTSyhwaW4pKTsKKwl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKKwl3cml0ZWwodSwgR1BJT19MRVZFTF9NQVNLKHBpbikpOworfQorCitzdGF0aWMgaW50IGdwaW9faXJxX3NldF90eXBlKHUzMiBpcnEsIHUzMiB0eXBlKQoreworCWludCBwaW4gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwl1MzIgdTsKKworCXUgPSByZWFkbChHUElPX0lPX0NPTkYocGluKSkgJiAoMSA8PCAocGluICYgMzEpKTsKKwlpZiAoIXUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcmlvbiBncGlvX2lycV9zZXRfdHlwZSBmYWlsZWQgIgorCQkJCSIoaXJxICVkLCBwaW4gJWQpLlxuIiwgaXJxLCBwaW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwkvKgorCSAqIFNldCBlZGdlL2xldmVsIHR5cGUuCisJICovCisJaWYgKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpKSB7CisJCWRlc2MtPmNoaXAgPSAmb3Jpb25fZ3Bpb19pcnFfZWRnZV9jaGlwOworCX0gZWxzZSBpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9ISUdIIHwgSVJRX1RZUEVfTEVWRUxfTE9XKSkgeworCQlkZXNjLT5jaGlwID0gJm9yaW9uX2dwaW9faXJxX2xldmVsX2NoaXA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IGlycT0lZCAodHlwZT0lZClcbiIsIGlycSwgdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQ29uZmlndXJlIGludGVycnVwdCBwb2xhcml0eS4KKwkgKi8KKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX1JJU0lORyB8fCB0eXBlID09IElSUV9UWVBFX0xFVkVMX0hJR0gpIHsKKwkJdSA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOworCQl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsKKwkJd3JpdGVsKHUsIEdQSU9fSU5fUE9MKHBpbikpOworCX0gZWxzZSBpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX0ZBTExJTkcgfHwgdHlwZSA9PSBJUlFfVFlQRV9MRVZFTF9MT1cpIHsKKwkJdSA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOworCQl1IHw9IDEgPDwgKHBpbiAmIDMxKTsKKwkJd3JpdGVsKHUsIEdQSU9fSU5fUE9MKHBpbikpOworCX0gZWxzZSBpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKKwkJdTMyIHY7CisKKwkJdiA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpIF4gcmVhZGwoR1BJT19EQVRBX0lOKHBpbikpOworCisJCS8qCisJCSAqIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwKKwkJICovCisJCXUgPSByZWFkbChHUElPX0lOX1BPTChwaW4pKTsKKwkJaWYgKHYgJiAoMSA8PCAocGluICYgMzEpKSkKKwkJCXUgfD0gMSA8PCAocGluICYgMzEpOwkJLyogZmFsbGluZyAqLworCQllbHNlCisJCQl1ICY9IH4oMSA8PCAocGluICYgMzEpKTsJLyogcmlzaW5nICovCisJCXdyaXRlbCh1LCBHUElPX0lOX1BPTChwaW4pKTsKKwl9CisKKwlkZXNjLT5zdGF0dXMgPSAoZGVzYy0+c3RhdHVzICYgfklSUV9UWVBFX1NFTlNFX01BU0spIHwgdHlwZTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaXJxX2NoaXAgb3Jpb25fZ3Bpb19pcnFfZWRnZV9jaGlwID0geworCS5uYW1lCQk9ICJvcmlvbl9ncGlvX2lycV9lZGdlIiwKKwkuYWNrCQk9IGdwaW9faXJxX2VkZ2VfYWNrLAorCS5tYXNrCQk9IGdwaW9faXJxX2VkZ2VfbWFzaywKKwkudW5tYXNrCQk9IGdwaW9faXJxX2VkZ2VfdW5tYXNrLAorCS5zZXRfdHlwZQk9IGdwaW9faXJxX3NldF90eXBlLAorfTsKKworc3RydWN0IGlycV9jaGlwIG9yaW9uX2dwaW9faXJxX2xldmVsX2NoaXAgPSB7CisJLm5hbWUJCT0gIm9yaW9uX2dwaW9faXJxX2xldmVsIiwKKwkubWFzawkJPSBncGlvX2lycV9sZXZlbF9tYXNrLAorCS5tYXNrX2Fjawk9IGdwaW9faXJxX2xldmVsX21hc2ssCisJLnVubWFzawkJPSBncGlvX2lycV9sZXZlbF91bm1hc2ssCisJLnNldF90eXBlCT0gZ3Bpb19pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIG9yaW9uX2dwaW9faXJxX2hhbmRsZXIoaW50IHBpbm9mZikKK3sKKwl1MzIgY2F1c2U7CisJaW50IHBpbjsKKworCWNhdXNlID0gcmVhZGwoR1BJT19EQVRBX0lOKHBpbm9mZikpICYgcmVhZGwoR1BJT19MRVZFTF9NQVNLKHBpbm9mZikpOworCWNhdXNlIHw9IHJlYWRsKEdQSU9fRURHRV9DQVVTRShwaW5vZmYpKSAmIHJlYWRsKEdQSU9fRURHRV9NQVNLKHBpbm9mZikpOworCisJZm9yIChwaW4gPSBwaW5vZmY7IHBpbiA8IHBpbm9mZiArIDg7IHBpbisrKSB7CisJCWludCBpcnEgPSBncGlvX3RvX2lycShwaW4pOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCQlpZiAoIShjYXVzZSAmICgxIDw8IChwaW4gJiAzMSkpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7CisJCQkvKiBTd2FwIHBvbGFyaXR5IChyYWNlIHdpdGggR1BJTyBsaW5lKSAqLworCQkJdTMyIHBvbGFyaXR5OworCisJCQlwb2xhcml0eSA9IHJlYWRsKEdQSU9fSU5fUE9MKHBpbikpOworCQkJcG9sYXJpdHkgXj0gMSA8PCAocGluICYgMzEpOworCQkJd3JpdGVsKHBvbGFyaXR5LCBHUElPX0lOX1BPTChwaW4pKTsKKwkJfQorCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBkZXNjKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9laGNpLW9yaW9uLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9laGNpLW9yaW9uLmgKaW5kZXggNjQzNDMwNS4uNGVjNjY4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZWhjaS1vcmlvbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2VoY2ktb3Jpb24uaApAQCAtMTEsOCArMTEsMTYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KIAorZW51bSBvcmlvbl9laGNpX3BoeV92ZXIgeworCUVIQ0lfUEhZX09SSU9OLAorCUVIQ0lfUEhZX0RELAorCUVIQ0lfUEhZX0tXLAorCUVIQ0lfUEhZX05BLAorfTsKKwogc3RydWN0IG9yaW9uX2VoY2lfZGF0YSB7CiAJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbwkqZHJhbTsKKwllbnVtIG9yaW9uX2VoY2lfcGh5X3ZlciBwaHlfdmVyc2lvbjsKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGVhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaAorICoKKyAqIE1hcnZlbGwgT3Jpb24gU29DIEdQSU8gaGFuZGxpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BMQVRfR1BJT19ICisjZGVmaW5lIF9fUExBVF9HUElPX0gKKworLyoKKyAqIEdFTkVSSUNfR1BJTyBwcmltaXRpdmVzLgorICovCitpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIHBpbiwgY29uc3QgY2hhciAqbGFiZWwpOwordm9pZCBncGlvX2ZyZWUodW5zaWduZWQgcGluKTsKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBwaW4pOworaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7CitpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgcGluKTsKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOworCisvKgorICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KKyAqLwordm9pZCBvcmlvbl9ncGlvX3NldF91bnVzZWQodW5zaWduZWQgcGluKTsKK3ZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpOwordm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7CisKKy8qCisgKiBHUElPIGludGVycnVwdCBoYW5kbGluZy4KKyAqLworZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBvcmlvbl9ncGlvX2lycV9lZGdlX2NoaXA7CitleHRlcm4gc3RydWN0IGlycV9jaGlwIG9yaW9uX2dwaW9faXJxX2xldmVsX2NoaXA7Cit2b2lkIG9yaW9uX2dwaW9faXJxX2hhbmRsZXIoaW50IGlycW9mZik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2MvS2NvbmZpZwppbmRleCAzMTY1NmMzLi5kZTkzODM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL0tjb25maWcKQEAgLTYsMzQgKzYsMzIgQEAKIAogY29uZmlnIFBMQVRfUzNDCiAJYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQxMAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwIHx8IEFSQ0hfUzNDMjRBMCB8fCBBUkNIX1MzQzY0WFgKKwlkZWZhdWx0IHkKIAlzZWxlY3QgTk9fSU9QT1JUCiAJaGVscAogCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTM0MgZGV2aWNlCiAKICMgbG93LWxldmVsIHNlcmlhbCBvcHRpb24gbm9kZXMKIAoraWYgUExBVF9TM0MKKwogY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDEwX09OTFkKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAlkZWZhdWx0IHkgaWYgQ1BVX0xMU0VSSUFMX1MzQzI0MTAgJiYgIUNQVV9MTFNFUklBTF9TM0MyNDQwCiAKIGNvbmZpZyBDUFVfTExTRVJJQUxfUzNDMjQ0MF9PTkxZCiAJYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCiAJZGVmYXVsdCB5IGlmIENQVV9MTFNFUklBTF9TM0MyNDQwICYmICFDUFVfTExTRVJJQUxfUzNDMjQxMAogCiBjb25maWcgQ1BVX0xMU0VSSUFMX1MzQzI0MTAKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAloZWxwCiAJICBTZWxlY3RlZCBpZiB0aGVyZSBpcyBhbiBTM0MyNDEwIChvciByZWdpc3RlciBjb21wYXRpYmxlKSBzZXJpYWwKIAkgIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQKIAogY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDQwCiAJYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCiAJaGVscAogCSAgU2VsZWN0ZWQgaWYgdGhlcmUgaXMgYW4gUzNDMjQ0MCAob3IgcmVnaXN0ZXIgY29tcGF0aWJsZSkgc2VyaWFsCiAJICBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gbmVlZGVkCkBAIC00NCw3ICs0Miw3IEBACiAKIGNvbmZpZyBTM0NfQk9PVF9XQVRDSERPRwogCWJvb2wgIlMzQyBJbml0aWFsaXNhdGlvbiB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIFBMQVRfUzNDICYmIFMzQzI0MTBfV0FUQ0hET0cKKwlkZXBlbmRzIG9uIFMzQzI0MTBfV0FUQ0hET0cKIAloZWxwCiAJICBTYXkgeSB0byBlbmFibGUgdGhlIHdhdGNoZG9nIGR1cmluZyB0aGUga2VybmVsIGRlY29tcHJlc3Npb24KIAkgIHN0YWdlLiBJZiB0aGUga2VybmVsIGZhaWxzIHRvIHVuY29tcHJlc3MsIHRoZW4gdGhlIHdhdGNoZG9nCkBAIC01MiwxNiArNTAsMjIgQEAKIAogY29uZmlnIFMzQ19CT09UX0VSUk9SX1JFU0VUCiAJYm9vbCAiUzNDIFJlYm9vdCBvbiBkZWNvbXByZXNzaW9uIGVycm9yIgotCWRlcGVuZHMgb24gUExBVF9TM0MKIAloZWxwCiAJICBTYXkgeSBoZXJlIHRvIHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIHN5c3RlbSBpZiB0aGUKIAkgIGtlcm5lbCBkZWNvbXByZXNzb3IgZGV0ZWN0cyBhbiBlcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbi4KIAorY29uZmlnIFMzQ19CT09UX1VBUlRfRk9SQ0VfRklGTworICAgICAgIGJvb2wgIkZvcmNlIFVBUlQgRklGTyBvbiBkdXJpbmcgYm9vdCBwcm9jZXNzIgorICAgICAgIGRlZmF1bHQgeQorICAgICAgIGhlbHAKKyAgICAgICAgIFNheSBZIGhlcmUgdG8gZm9yY2UgdGhlIFVBUlQgRklGT3Mgb24gZHVyaW5nIHRoZSBrZXJuZWwKKwkgdW5jb21wcmVzc29yCisKIGNvbW1lbnQgIlBvd2VyIG1hbmFnZW1lbnQiCiAKIGNvbmZpZyBTM0MyNDEwX1BNX0RFQlVHCiAJYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnIgotCWRlcGVuZHMgb24gUExBVF9TM0MgJiYgUE0KKwlkZXBlbmRzIG9uIFBNCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB2ZXJib3NlIGRlYnVnZ2luZyBmcm9tIHRoZSBQTSBTdXNwZW5kIGFuZAogCSAgUmVzdW1lIGNvZGUuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQ+CkBAIC02OSw3ICs3Myw3IEBACiAKIGNvbmZpZyBTM0MyNDEwX1BNX0NIRUNLCiAJYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIE1lbW9yeSBDUkMiCi0JZGVwZW5kcyBvbiBQTEFUX1MzQyAmJiBQTSAmJiBDUkMzMgorCWRlcGVuZHMgb24gUE0gJiYgQ1JDMzIKIAloZWxwCiAgCSAgRW5hYmxlIHRoZSBQTSBjb2RlJ3MgbWVtb3J5IGFyZWEgY2hlY2tzdW0gb3ZlciBzbGVlcC4gVGhpcyBvcHRpb24KIAkgIHdpbGwgZ2VuZXJhdGUgQ1JDcyBvZiBhbGwgYmxvY2tzIG9mIG1lbW9yeSwgYW5kIHN0b3JlIHRoZW0gYmVmb3JlCkBAIC04Myw3ICs4Nyw3IEBACiAKIGNvbmZpZyBTM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRQogCWludCAiUzNDMjQxMCBQTSBTdXNwZW5kIENSQyBDaHVua3NpemUgKEtpQikiCi0JZGVwZW5kcyBvbiBQTEFUX1MzQyAmJiBQTSAmJiBTM0MyNDEwX1BNX0NIRUNLCisJZGVwZW5kcyBvbiBQTSAmJiBTM0MyNDEwX1BNX0NIRUNLCiAJZGVmYXVsdCA2NAogCWhlbHAKIAkgIFNldCB0aGUgY2h1bmtzaXplIGluIEtpbG9ieXRlcyBvZiB0aGUgQ1JDIGZvciBjaGVja2luZyBtZW1vcnkKQEAgLTk1LDEwICs5OSw3NyBAQAogCiBjb25maWcgUzNDX0xPV0xFVkVMX1VBUlRfUE9SVAogCWludCAiUzNDIFVBUlQgdG8gdXNlIGZvciBsb3ctbGV2ZWwgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBQTEFUX1MzQwogCWRlZmF1bHQgMAogCWhlbHAKIAkgIENob2ljZSBvZiB3aGljaCBVQVJUIHBvcnQgdG8gdXNlIGZvciB0aGUgbG93LWxldmVsIG1lc3NhZ2VzLAogCSAgc3VjaCBhcyB0aGUgYFVuY29tcHJlc3NpbmcuLi5gIGF0IHN0YXJ0IHRpbWUuIFRoZSB2YWx1ZSBvZgogCSAgdGhpcyBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBiZXR3ZWVuIHplcm8gYW5kIHR3by4gVGhlIHBvcnQKIAkgIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCisjIG9wdGlvbnMgZm9yIGdwaW9saWIgc3VwcG9ydAorCitjb25maWcgUzNDX0dQSU9fU1BBQ0UKKwlpbnQgIlNwYWNlIGJldHdlZW4gZ3BpbyBiYW5rcyIKKwlkZWZhdWx0IDAKKwloZWxwCisJICBBZGQgYSBudW1iZXIgb2Ygc3BhcmUgR1BJTyBlbnRyaWVzIGJldHdlZW4gZWFjaCBiYW5rIGZvciBkZWJ1Z2dpbmcKKwkgIHB1cnBvc2VzLiBUaGlzIGFsbG93cyBhbnkgcHJvYmxlbXMgd2hlcmUgYW4gY291bnRlciBvdmVyZmxvd3MgZnJvbQorCSAgb25lIGJhbmsgdG8gYW5vdGhlciB0byBiZSBjYXVnaHQsIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIGEgbGl0dGxlCisJICBtb3JlIG1lbW9yeS4KKworY29uZmlnIFMzQ19HUElPX1RSQUNLCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGUgczNjIHNwZWNpZmljIGdwaW8KKwkgIGNoaXAgdHJhY2tpbmcgaWYgdGhlIHBsYXRmb3JtIHJlcXVpcmVzIGl0LgorCitjb25maWcgUzNDX0dQSU9fUFVMTF9VUERPV04KKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhlIGNvcnJlY3QgR1BJTyBwdWxsIGhlbHBlcgorCitjb25maWcgUzNDX0dQSU9fUFVMTF9ET1dOCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoZSBjb3JyZWN0IEdQSU8gcHVsbCBoZWxwZXIKKworY29uZmlnIFMzQ19HUElPX1BVTExfVVAKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhlIGNvcnJlY3QgR1BJTyBwdWxsIGhlbHBlcgorCitjb25maWcgUzNDX0dQSU9fQ0ZHX1MzQzI0WFgKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgUzNDMjRYWCBzdHlsZSBHUElPIGNvbmZpZ3VyYXRpb24KKwkgIGZ1bmN0aW9ucy4KKworY29uZmlnIFMzQ19HUElPX0NGR19TM0M2NFhYCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIFMzQzY0WFggc3R5bGUgR1BJTyBjb25maWd1cmF0aW9uCisJICBmdW5jdGlvbnMuCisKKyMgZGV2aWNlIGRlZmluaXRpb25zIHRvIGNvbXBpbGUgaW4KKworY29uZmlnIFMzQ19ERVZfSFNNTUMKKwlib29sCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIEhTTU1DIGNvZGUKKworY29uZmlnIFMzQ19ERVZfSFNNTUMxCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBIU01NQyBjaGFubmVsIDEKKworY29uZmlnIFMzQ19ERVZfSTJDMQorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSTJDIGNoYW5uZWwgMQorCitjb25maWcgUzNDX0RFVl9GQgorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBmcmFtZWJ1ZmZlcgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQppbmRleCBmMDNkN2IzLi4zOTE5NWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpAQCAtMSwzICsxLDI3IEBACi0jIGR1bW15IG1ha2VmaWxlLCBjdXJyZW50bHkganVzdCBpbmNsdWRpbmcgYXNtL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQKKyMgYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCiAKLW9iai1uCTo9IGR1bW15Lm8KK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworIyBDb3JlIHN1cHBvcnQgZm9yIGFsbCBTYW1zdW5nIFNvQ3MKKworb2JqLXkJCQkJKz0gIGluaXQubworb2JqLXkJCQkJKz0gdGltZS5vCitvYmoteQkJCQkrPSBjbG9jay5vCitvYmoteQkJCQkrPSBwd20tY2xvY2subworb2JqLXkJCQkJKz0gZ3Bpby5vCitvYmoteQkJCQkrPSBncGlvLWNvbmZpZy5vCisKKyMgZGV2aWNlcworCitvYmotJChDT05GSUdfUzNDX0RFVl9IU01NQykJKz0gZGV2LWhzbW1jLm8KK29iai0kKENPTkZJR19TM0NfREVWX0hTTU1DMSkJKz0gZGV2LWhzbW1jMS5vCitvYmoteQkJCQkrPSBkZXYtaTJjMC5vCitvYmotJChDT05GSUdfUzNDX0RFVl9JMkMxKQkrPSBkZXYtaTJjMS5vCitvYmotJChDT05GSUdfUzNDX0RFVl9GQikJKz0gZGV2LWZiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YmU3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9jbG9jay5jCkBAIC0wLDAgKzEsMzY4IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggQ29yZSBjbG9jayBjb250cm9sIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiwgYW5kIGNvZGUgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCisgKioKKyAqKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgorICoqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKKy8qIGNsb2NrIGluZm9ybWF0aW9uICovCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKKworLyogV2Ugb3JpZ2luYWxseSB1c2VkIGFuIG11dGV4IGhlcmUsIGJ1dCBzb21lIGNvbnRleHRzIChzZWUgcmVzdW1lKQorICogYXJlIGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgY2xrX3NldF9wYXJlbnQoKSB3aXRoIElSUXMgZGlzYWJsZWQKKyAqIGNhdXNpbmcgYW4gQlVHIHRvIGJlIHRyaWdnZXJlZC4KKyAqLworREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKKworLyogZW5hYmxlIGFuZCBkaXNhYmxlIGNhbGxzIGZvciB1c2Ugd2l0aCB0aGUgY2xrIHN0cnVjdCAqLworCitzdGF0aWMgaW50IGNsa19udWxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIENsb2NrIEFQSSBjYWxscyAqLworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcDsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOworCWludCBpZG5vOworCisJaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+YnVzICE9ICZwbGF0Zm9ybV9idXNfdHlwZSkKKwkJaWRubyA9IC0xOworCWVsc2UKKwkJaWRubyA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKKworCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCWlmIChwLT5pZCA9PSBpZG5vICYmCisJCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKKwkJICAgIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIGEgZGV2aWNlIHdhcyBzdXBwbGllZCwgYnV0IHRoZQorCSAqIGNsb2NrIHRoYXQgd2FzIGJlaW5nIHNlYXJjaGVkIGZvciBpcyBub3QgZGV2aWNlIHNwZWNpZmljICovCisKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCQlpZiAocC0+aWQgPT0gLTEgJiYgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmCisJCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQkJY2xrID0gcDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZjbG9ja3NfbG9jayk7CisJcmV0dXJuIGNsazsKK30KKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJc3Bpbl9sb2NrKCZjbG9ja3NfbG9jayk7CisKKwlpZiAoKGNsay0+dXNhZ2UrKykgPT0gMCkKKwkJKGNsay0+ZW5hYmxlKShjbGssIDEpOworCisJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKworCWlmICgoLS1jbGstPnVzYWdlKSA9PSAwKQorCQkoY2xrLT5lbmFibGUpKGNsaywgMCk7CisKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCWNsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKK30KKworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gMDsKKworCWlmIChjbGstPnJhdGUgIT0gMCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmdldF9yYXRlICE9IE5VTEwpCisJCXJldHVybiAoY2xrLT5nZXRfcmF0ZSkoY2xrKTsKKworCWlmIChjbGstPnBhcmVudCAhPSBOVUxMKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJldHVybiBjbGstPnJhdGU7Cit9CisKK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaWYgKCFJU19FUlIoY2xrKSAmJiBjbGstPnJvdW5kX3JhdGUpCisJCXJldHVybiAoY2xrLT5yb3VuZF9yYXRlKShjbGssIHJhdGUpOworCisJcmV0dXJuIHJhdGU7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJldDsKKworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBkbyBub3QgZGVmYXVsdCBqdXN0IGRvIGEgY2xrLT5yYXRlID0gcmF0ZSBhcworCSAqIHRoZSBjbG9jayBtYXkgaGF2ZSBiZWVuIG1hZGUgdGhpcyB3YXkgYnkgY2hvaWNlLgorCSAqLworCisJV0FSTl9PTihjbGstPnNldF9yYXRlID09IE5VTEwpOworCisJaWYgKGNsay0+c2V0X3JhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKwlyZXQgPSAoY2xrLT5zZXRfcmF0ZSkoY2xrLCByYXRlKTsKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudDsKK30KKworaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAwOworCisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOworCisJaWYgKGNsay0+c2V0X3BhcmVudCkKKwkJcmV0ID0gKGNsay0+c2V0X3BhcmVudCkoY2xrLCBwYXJlbnQpOworCisJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOworCisvKiBiYXNlIGNsb2NrcyAqLworCitzdGF0aWMgaW50IGNsa19kZWZhdWx0X3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJY2xrLT5yYXRlID0gcmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNsayBjbGtfeHRhbCA9IHsKKwkubmFtZQkJPSAieHRhbCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKK307CisKK3N0cnVjdCBjbGsgY2xrX2V4dCA9IHsKKwkubmFtZQkJPSAiZXh0IiwKKwkuaWQJCT0gLTEsCit9OworCitzdHJ1Y3QgY2xrIGNsa19lcGxsID0geworCS5uYW1lCQk9ICJlcGxsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdHJ1Y3QgY2xrIGNsa19tcGxsID0geworCS5uYW1lCQk9ICJtcGxsIiwKKwkuaWQJCT0gLTEsCisJLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3VwbGwgPSB7CisJLm5hbWUJCT0gInVwbGwiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorfTsKKworc3RydWN0IGNsayBjbGtfZiA9IHsKKwkubmFtZQkJPSAiZmNsayIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSAmY2xrX21wbGwsCisJLmN0cmxiaXQJPSAwLAorCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa19oID0geworCS5uYW1lCQk9ICJoY2xrIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa19wID0geworCS5uYW1lCQk9ICJwY2xrIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa191c2JfYnVzID0geworCS5uYW1lCQk9ICJ1c2ItYnVzIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9ICZjbGtfdXBsbCwKK307CisKKworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsayA9IHsKKwkubmFtZQkJPSAidWNsayIsCisJLmlkCQk9IC0xLAorfTsKKworLyogaW5pdGlhbGlzZSB0aGUgY2xvY2sgc3lzdGVtICovCisKK2ludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlpZiAoY2xrLT5lbmFibGUgPT0gTlVMTCkKKwkJY2xrLT5lbmFibGUgPSBjbGtfbnVsbF9lbmFibGU7CisKKwkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNsb2NrcyAqLworCisJLyogUXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoaXMgY2xvY2sgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLiAqLworCUJVR19PTihjbGstPmxpc3QucHJldiAhPSBjbGstPmxpc3QubmV4dCk7CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKwlsaXN0X2FkZCgmY2xrLT5saXN0LCAmY2xvY2tzKTsKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgY2xrICoqY2xrcywgaW50IG5yX2Nsa3MpCit7CisJaW50IGZhaWxzID0gMDsKKworCWZvciAoOyBucl9jbGtzID4gMDsgbnJfY2xrcy0tLCBjbGtzKyspIHsKKwkJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soKmNsa3MpIDwgMCkKKwkJCWZhaWxzKys7CisJfQorCisJcmV0dXJuIGZhaWxzOworfQorCisvKiBpbml0YWxpc2UgYWxsIHRoZSBjbG9ja3MgKi8KKworaW50IF9faW5pdCBzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsKQoreworCXByaW50ayhLRVJOX0lORk8gIlMzQzI0WFggQ2xvY2tzLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJY2xrX3h0YWwucmF0ZSA9IHh0YWw7CisKKwkvKiByZWdpc3RlciBvdXIgY2xvY2tzICovCisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3h0YWwpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyIHh0YWxcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19tcGxsKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1wbGwgY2xvY2tcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa191cGxsKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVwbGwgY2xvY2tcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19mKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBmY2xrXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfaCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgaGNsa1xuIik7CisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3ApIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IHBjbGtcbiIpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1mYi5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1mYi5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2Rldi1mYi5jCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQyBzZXJpZXMgZGV2aWNlIGRlZmluaXRpb24gZm9yIGZyYW1lYnVmZmVyIGRldmljZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+CisKKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfZmJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9GQiwKKwkJLmVuZCAgID0gUzNDX1BBX0ZCICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9MQ0RfVlNZTkMsCisJCS5lbmQgICA9IElSUV9MQ0RfVlNZTkMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBJUlFfTENEX0ZJRk8sCisJCS5lbmQgICA9IElSUV9MQ0RfRklGTywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydCA9IElSUV9MQ0RfU1lTVEVNLAorCQkuZW5kICAgPSBJUlFfTENEX1NZU1RFTSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9mYiA9IHsKKwkubmFtZQkJICA9ICJzM2MtZmIiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19mYl9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfZmJfcmVzb3VyY2UsCisJLmRldi5kbWFfbWFzawkgID0gJnMzY19kZXZpY2VfZmIuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAorCS5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwsCit9OworCit2b2lkIF9faW5pdCBzM2NfZmJfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgKnBkKQoreworCXN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgKm5wZDsKKworCWlmICghcGQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcGxhdGZvcm0gZGF0YVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbnBkID0ga21lbWR1cChwZCwgc2l6ZW9mKHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5wZCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBwbGF0Zm9ybSBkYXRhXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2NfZGV2aWNlX2ZiLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9kZXYtaHNtbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzA1YjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jLmMKQEAgLTAsMCArMSw2OCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQyBzZXJpZXMgZGV2aWNlIGRlZmluaXRpb24gZm9yIGhzbW1jIGRldmljZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisjZGVmaW5lIFMzQ19TWl9IU01NQwkoMHgxMDAwKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19oc21tY19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX0hTTU1DMCwKKwkJLmVuZCAgID0gUzNDX1BBX0hTTU1DMCArIFMzQ19TWl9IU01NQyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfSFNNTUMwLAorCQkuZW5kICAgPSBJUlFfSFNNTUMwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IHMzY19kZXZpY2VfaHNtbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCT0gNCwKKwkuaG9zdF9jYXBzCT0gKE1NQ19DQVBfNF9CSVRfREFUQSB8CisJCQkgICBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRCksCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMwID0geworCS5uYW1lCQk9ICJzM2Mtc2RoY2kiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2NfaHNtbWNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHMzY19oc21tY19yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrCQk9ICZzM2NfZGV2aWNlX2hzbW1jX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmZVTCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnMzY19oc21tYzBfZGVmX3BsYXRkYXRhLAorCX0sCit9OworCit2b2lkIHMzY19zZGhjaTBfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkKQoreworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnNldCA9ICZzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YTsKKworCXNldC0+bWF4X3dpZHRoID0gcGQtPm1heF93aWR0aDsKKworCWlmIChwZC0+Y2ZnX2dwaW8pCisJCXNldC0+Y2ZnX2dwaW8gPSBwZC0+Y2ZnX2dwaW87CisJaWYgKHBkLT5jZmdfY2FyZCkKKwkJc2V0LT5jZmdfY2FyZCA9IHBkLT5jZmdfY2FyZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1oc21tYzEuYyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1oc21tYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDliYzRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jMS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2Rldi1oc21tYzEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIHNlcmllcyBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgaHNtbWMgZGV2aWNlIDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisjZGVmaW5lIFMzQ19TWl9IU01NQwkoMHgxMDAwKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19oc21tYzFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9IU01NQzEsCisJCS5lbmQgICA9IFMzQ19QQV9IU01NQzEgKyBTM0NfU1pfSFNNTUMgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0hTTU1DMSwKKwkJLmVuZCAgID0gSVJRX0hTTU1DMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX2hzbW1jMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzFfZGVmX3BsYXRkYXRhID0geworCS5tYXhfd2lkdGgJPSA0LAorCS5ob3N0X2NhcHMJPSAoTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCSAgIE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEKSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYzEgPSB7CisJLm5hbWUJCT0gInMzYy1zZGhjaSIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzY19oc21tYzFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHMzY19oc21tYzFfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmczNjX2RldmljZV9oc21tYzFfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZlVMLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEsCisJfSwKK307CisKK3ZvaWQgczNjX3NkaGNpMV9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGQpCit7CisJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqc2V0ID0gJnMzY19oc21tYzFfZGVmX3BsYXRkYXRhOworCisJc2V0LT5tYXhfd2lkdGggPSBwZC0+bWF4X3dpZHRoOworCisJaWYgKHBkLT5jZmdfZ3BpbykKKwkJc2V0LT5jZmdfZ3BpbyA9IHBkLT5jZmdfZ3BpbzsKKwlpZiAocGQtPmNmZ19jYXJkKQorCQlzZXQtPmNmZ19jYXJkID0gcGQtPmNmZ19jYXJkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzAuYyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMTI4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMwLmMKQEAgLTAsMCArMSw3MSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzAuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBpMmMgZGV2aWNlIDAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2kyY19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX0lJQywKKwkJLmVuZCAgID0gUzNDX1BBX0lJQyArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9JSUMsCisJCS5lbmQgICA9IElSUV9JSUMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjMCA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLWkyYyIsCisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSTJDMQorCS5pZAkJICA9IDAsCisjZWxzZQorCS5pZAkJICA9IC0xLAorI2VuZGlmCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX2kyY19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfaTJjX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyBkZWZhdWx0X2kyY19kYXRhMCBfX2luaXRkYXRhID0geworCS5mbGFncwkJPSAwLAorCS5zbGF2ZV9hZGRyCT0gMHgxMCwKKwkuYnVzX2ZyZXEJPSAxMDAqMTAwMCwKKwkubWF4X2ZyZXEJPSA0MDAqMTAwMCwKKwkuc2RhX2RlbGF5CT0gUzNDMjQxMF9JSUNMQ19TREFfREVMQVk1IHwgUzNDMjQxMF9JSUNMQ19GSUxURVJfT04sCit9OworCit2b2lkIF9faW5pdCBzM2NfaTJjMF9zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjICpwZCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9pMmMgKm5wZDsKKworCWlmICghcGQpCisJCXBkID0gJmRlZmF1bHRfaTJjX2RhdGEwOworCisJbnBkID0ga21lbWR1cChwZCwgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyksIEdGUF9LRVJORUwpOworCWlmICghbnBkKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIHBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKKwllbHNlIGlmICghbnBkLT5jZmdfZ3BpbykKKwkJbnBkLT5jZmdfZ3BpbyA9IHMzY19pMmMwX2NmZ19ncGlvOworCisJczNjX2RldmljZV9pMmMwLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzEuYyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1OGZiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMxLmMKQEAgLTAsMCArMSw2OCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzEuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBpMmMgZGV2aWNlIDEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2kyY19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX0lJQzEsCisJCS5lbmQgICA9IFMzQ19QQV9JSUMxICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0lJQzEsCisJCS5lbmQgICA9IElSUV9JSUMxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2kyYzEgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC1pMmMiLAorCS5pZAkJICA9IDEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX2kyY19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfaTJjX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyBkZWZhdWx0X2kyY19kYXRhMSBfX2luaXRkYXRhID0geworCS5mbGFncwkJPSAwLAorCS5idXNfbnVtCT0gMSwKKwkuc2xhdmVfYWRkcgk9IDB4MTAsCisJLmJ1c19mcmVxCT0gMTAwKjEwMDAsCisJLm1heF9mcmVxCT0gNDAwKjEwMDAsCisJLnNkYV9kZWxheQk9IFMzQzI0MTBfSUlDTENfU0RBX0RFTEFZNSB8IFMzQzI0MTBfSUlDTENfRklMVEVSX09OLAorfTsKKwordm9pZCBfX2luaXQgczNjX2kyYzFfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyAqcGQpCit7CisJc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjICpucGQ7CisKKwlpZiAoIXBkKQorCQlwZCA9ICZkZWZhdWx0X2kyY19kYXRhMTsKKworCW5wZCA9IGttZW1kdXAocGQsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9pMmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5wZCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBwbGF0Zm9ybSBkYXRhXG4iLCBfX2Z1bmNfXyk7CisJZWxzZSBpZiAoIW5wZC0+Y2ZnX2dwaW8pCisJCW5wZC0+Y2ZnX2dwaW8gPSBzM2NfaTJjMV9jZmdfZ3BpbzsKKworCXMzY19kZXZpY2VfaTJjMS5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8tY29uZmlnLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NDJiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jCkBAIC0wLDAgKzEsMTYzIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIEdQSU8gY29uZmlndXJhdGlvbiBjb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgorCitpbnQgczNjX2dwaW9fY2ZncGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBjb25maWcpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKHBpbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJb2Zmc2V0ID0gcGluIC0gY2hpcC0+Y2hpcC5iYXNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldCA9IHMzY19ncGlvX2RvX3NldGNmZyhjaGlwLCBvZmZzZXQsIGNvbmZpZyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHMzY19ncGlvX3NldHB1bGwodW5zaWduZWQgaW50IHBpbiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKHBpbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb2Zmc2V0LCByZXQ7CisKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJb2Zmc2V0ID0gcGluIC0gY2hpcC0+Y2hpcC5iYXNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldCA9IHMzY19ncGlvX2RvX3NldHB1bGwoY2hpcCwgb2Zmc2V0LCBwdWxsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYCitpbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHhfYmFua2Eoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gY2hpcC0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBvZmY7CisJdTMyIGNvbjsKKworCWlmIChzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChjZmcpKSB7CisJCWNmZyAmPSAweGY7CisKKwkJLyogTWFwIG91dHB1dCB0byAwLCBhbmQgU0ZOMiB0byAxICovCisJCWNmZyAtPSAxOworCQlpZiAoY2ZnID4gMSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNmZyA8PD0gc2hpZnQ7CisJfQorCisJY29uID0gX19yYXdfcmVhZGwocmVnKTsKKwljb24gJj0gfigweDEgPDwgc2hpZnQpOworCWNvbiB8PSBjZmc7CisJX19yYXdfd3JpdGVsKGNvbiwgcmVnKTsKKworCXJldHVybiAwOworfQorCitpbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7CisJdW5zaWduZWQgaW50IHNoaWZ0ID0gb2ZmICogMjsKKwl1MzIgY29uOworCisJaWYgKHMzY19ncGlvX2lzX2NmZ19zcGVjaWFsKGNmZykpIHsKKwkJY2ZnICY9IDB4ZjsKKwkJaWYgKGNmZyA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljZmcgPDw9IHNoaWZ0OworCX0KKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisJY29uICY9IH4oMHgzIDw8IHNoaWZ0KTsKKwljb24gfD0gY2ZnOworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYCitpbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7CisJdW5zaWduZWQgaW50IHNoaWZ0ID0gKG9mZiAmIDcpICogNDsKKwl1MzIgY29uOworCisJaWYgKG9mZiA8IDggJiYgY2hpcC0+Y2hpcC5uZ3BpbyA+PSA4KQorCQlyZWcgLT0gNDsKKworCWlmIChzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChjZmcpKSB7CisJCWNmZyAmPSAweGY7CisJCWNmZyA8PD0gc2hpZnQ7CisJfQorCisJY29uID0gX19yYXdfcmVhZGwocmVnKTsKKwljb24gJj0gfigweGYgPDwgc2hpZnQpOworCWNvbiB8PSBjZmc7CisJX19yYXdfd3JpdGVsKGNvbiwgcmVnKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWCAqLworCisjaWZkZWYgQ09ORklHX1MzQ19HUElPX1BVTExfVVBET1dOCitpbnQgczNjX2dwaW9fc2V0cHVsbF91cGRvd24oc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjaGlwLT5iYXNlICsgMHgwODsKKwlpbnQgc2hpZnQgPSBvZmYgKiAyOworCXUzMiBwdXA7CisKKwlwdXAgPSBfX3Jhd19yZWFkbChyZWcpOworCXB1cCAmPSB+KDMgPDwgc2hpZnQpOworCXB1cCB8PSBwdWxsIDw8IHNoaWZ0OworCV9fcmF3X3dyaXRlbChwdXAsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfdXBkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBpbnQgb2ZmKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gY2hpcC0+YmFzZSArIDB4MDg7CisJaW50IHNoaWZ0ID0gb2ZmICogMjsKKwl1MzIgcHVwID0gX19yYXdfcmVhZGwocmVnKTsKKworCXB1cCA+Pj0gc2hpZnQ7CisJcHVwICY9IDB4MzsKKwlyZXR1cm4gKF9fZm9yY2UgczNjX2dwaW9fcHVsbF90KXB1cDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWRkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIEdQSU8gY29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKworI2lmZGVmIENPTkZJR19TM0NfR1BJT19UUkFDSworc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvc1tTM0NfR1BJT19FTkRdOworCitzdGF0aWMgX19pbml0IHZvaWQgczNjX2dwaW9saWJfdHJhY2soc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJdW5zaWduZWQgaW50IGdwbjsKKwlpbnQgaTsKKworCWdwbiA9IGNoaXAtPmNoaXAuYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+Y2hpcC5uZ3BpbzsgaSsrLCBncG4rKykgeworCQlCVUdfT04oZ3BuID4gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKKwkJczNjX2dwaW9zW2dwbl0gPSBjaGlwOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfUzNDX0dQSU9fVFJBQ0sgKi8KKworLyogRGVmYXVsdCByb3V0aW5lcyBmb3IgY29udHJvbGxpbmcgR1BJTywgYmFzZWQgb24gdGhlIG9yaWdpbmFsIFMzQzI0WFgKKyAqIEdQSU8gZnVuY3Rpb25zIHdoaWNoIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSBlYWNoIGdwaW8gYmFuayBvZiB0aGUKKyAqIGNoaXAgaXMgYXMgZm9sbG93aW5nOgorICoKKyAqIGJhc2UgKyAweDAwOiBDb250cm9sIHJlZ2lzdGVyLCAyIGJpdHMgcGVyIGdwaW8KKyAqCSAgICAgICAgZ3BpbyBuOiAyIGJpdHMgc3RhcnRpbmcgYXQgKDIqbikKKyAqCQkwMCA9IGlucHV0LCAwMSA9IG91dHB1dCwgb3RoZXJzIG1lYW4gc3BlY2lhbC1mdW5jdGlvbgorICogYmFzZSArIDB4MDQ6IERhdGEgcmVnaXN0ZXIsIDEgYml0IHBlciBncGlvCisgKgkJYml0IG46IGRhdGEgYml0IG4KKyovCisKK3N0YXRpYyBpbnQgczNjX2dwaW9saWJfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgY29uOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY29uID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDApOworCWNvbiAmPSB+KDMgPDwgKG9mZnNldCAqIDIpKTsKKworCV9fcmF3X3dyaXRlbChjb24sIGJhc2UgKyAweDAwKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfZ3Bpb2xpYl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCSAgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZGF0OworCXVuc2lnbmVkIGxvbmcgY29uOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDQpOworCWRhdCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlpZiAodmFsdWUpCisJCWRhdCB8PSAxIDw8IG9mZnNldDsKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgMHgwNCk7CisKKwljb24gPSBfX3Jhd19yZWFkbChiYXNlICsgMHgwMCk7CisJY29uICY9IH4oMyA8PCAob2Zmc2V0ICogMikpOworCWNvbiB8PSAxIDw8IChvZmZzZXQgKiAyKTsKKworCV9fcmF3X3dyaXRlbChjb24sIGJhc2UgKyAweDAwKTsKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgMHgwNCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19ncGlvbGliX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZGF0OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDQpOworCWRhdCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlpZiAodmFsdWUpCisJCWRhdCB8PSAxIDw8IG9mZnNldDsKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgMHgwNCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgczNjX2dwaW9saWJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gX19yYXdfcmVhZGwob3VyY2hpcC0+YmFzZSArIDB4MDQpOworCXZhbCA+Pj0gb2Zmc2V0OworCXZhbCAmPSAxOworCisJcmV0dXJuIHZhbDsKK30KKworX19pbml0IHZvaWQgczNjX2dwaW9saWJfYWRkKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gJmNoaXAtPmNoaXA7CisJaW50IHJldDsKKworCUJVR19PTighY2hpcC0+YmFzZSk7CisJQlVHX09OKCFnYy0+bGFiZWwpOworCUJVR19PTighZ2MtPm5ncGlvKTsKKworCWlmICghZ2MtPmRpcmVjdGlvbl9pbnB1dCkKKwkJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IHMzY19ncGlvbGliX2lucHV0OworCWlmICghZ2MtPmRpcmVjdGlvbl9vdXRwdXQpCisJCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gczNjX2dwaW9saWJfb3V0cHV0OworCWlmICghZ2MtPnNldCkKKwkJZ2MtPnNldCA9IHMzY19ncGlvbGliX3NldDsKKwlpZiAoIWdjLT5nZXQpCisJCWdjLT5nZXQgPSBzM2NfZ3Bpb2xpYl9nZXQ7CisKKwkvKiBncGlvY2hpcF9hZGQoKSBwcmludHMgb3duIGZhaWx1cmUgbWVzc2FnZSBvbiBlcnJvci4gKi8KKwlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOworCWlmIChyZXQgPj0gMCkKKwkJczNjX2dwaW9saWJfdHJhY2soY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTUzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDE4IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIERlZmF1bHQgSU8gcm91dGluZXMgZm9yIHBsYXQtczNjIGJhc2VkIHN5c3RlbXMsIHN1Y2ggYXMgUzNDMjRBMAorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKy8qIE5vIGN1cnJlbnQgSVNBL1BDSSBidXMgc3VwcG9ydC4gKi8KKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgKDB4RkZGRkZGRkYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3RpbWV4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdGltZXguaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3RpbWV4LmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCAzMTViMDA3Li5iZmQyY2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xLDQgKzEsNCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKy8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqCiAgKiBmcm9tIGFyY2gvYXJtL21hY2gtaW9wM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkZjJhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaApAQCAtMCwwICsxLDI5IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltbnRlLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggQURDIGRyaXZlciBpbmZvcm1hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfQURDX0gKKyNkZWZpbmUgX19BU01fUExBVF9BRENfSCBfX0ZJTEVfXworCitzdHJ1Y3QgczNjX2FkY19jbGllbnQ7CisKK2V4dGVybiBpbnQgczNjX2FkY19zdGFydChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCSB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG5yX3NhbXBsZXMpOworCitleHRlcm4gc3RydWN0IHMzY19hZGNfY2xpZW50ICpzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCSAgICAgICB2b2lkICgqc2VsZWN0KSh1bnNpZ25lZCBzZWxlY3RlZCksCisJCQkJCSAgICAgICB2b2lkICgqY29udikodW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxKSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpc190cyk7CisKK2V4dGVybiB2b2lkIHMzY19hZGNfcmVsZWFzZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCk7CisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX0FEQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDIzNWI3NTMuLmExMDYyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMSw1ICsxLDQgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY2xvY2suaAotICogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jbG9jay5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLwpAQCAtMTAsNiArOSw4IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCiBzdHJ1Y3QgY2xrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgbGlzdDsKIAlzdHJ1Y3QgbW9kdWxlICAgICAgICAqb3duZXI7CkBAIC00NCwyMSArNDUsNDQgQEAKIGV4dGVybiBzdHJ1Y3QgY2xrIGNsa19wOwogZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX21wbGw7CiBleHRlcm4gc3RydWN0IGNsayBjbGtfdXBsbDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19lcGxsOwogZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3h0YWw7CitleHRlcm4gc3RydWN0IGNsayBjbGtfZXh0OworCisvKiBTM0M2NFhYIHNwZWNpZmljIGNsb2NrcyAqLworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrXzI3bTsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa180OG07CiAKIC8qIGV4cG9ydHMgZm9yIGFyY2gvYXJtL21hY2gtczNjMjQxMAogICoKICAqIFBsZWFzZSBETyBOT1QgdXNlIHRoZXNlIG91dHNpZGUgb2YgYXJjaC9hcm0vbWFjaC1zM2MyNDEwCiAqLwogCi1leHRlcm4gc3RydWN0IG11dGV4IGNsb2Nrc19tdXRleDsKK2V4dGVybiBzcGlubG9ja190IGNsb2Nrc19sb2NrOwogCiBleHRlcm4gaW50IHMzYzI0MTBfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwogCiBleHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiBpbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGNsayAqKmNsaywgaW50IG5yX2Nsa3MpOwogCi1leHRlcm4gaW50IHMzYzI0eHhfc2V0dXBfY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbCwKLQkJCQl1bnNpZ25lZCBsb25nIGZjbGssCi0JCQkJdW5zaWduZWQgbG9uZyBoY2xrLAotCQkJCXVuc2lnbmVkIGxvbmcgcGNsayk7CitleHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh1bnNpZ25lZCBsb25nIHh0YWwpOworCitleHRlcm4gdm9pZCBzM2M2NHh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyBmY2xrLAorCQkJCSB1bnNpZ25lZCBsb25nIGhjbGssCisJCQkJIHVuc2lnbmVkIGxvbmcgcGNsayk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfc2V0dXBfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjMjQxMl9zZXR1cF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBzM2MyNDR4X3NldHVwX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzI0NDNfc2V0dXBfY2xvY2tzKHZvaWQpOworCisvKiBTM0M2NFhYIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgY2xvY2tzICovCisKK2V4dGVybiBpbnQgczNjNjR4eF9zY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKKworLyogSW5pdCBmb3IgcHdtIGNsb2NrIGNvZGUgKi8KKworZXh0ZXJuIHZvaWQgczNjX3B3bWNsa19pbml0KHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NmExMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaApAQCAtMCwwICsxLDk0IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQgLSBkcml2ZXIgYW5kIGJvYXJkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisKK3N0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvOworc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkOworc3RydWN0IHMzY19pb3RpbWluZ3M7CisKK3N0cnVjdCBzM2NfZnJlcSB7CisJdW5zaWduZWQgbG9uZwlmY2xrOworCXVuc2lnbmVkIGxvbmcJYXJtY2xrOworCXVuc2lnbmVkIGxvbmcJaGNsa190bnM7CS8qIGluIDEwdGhzIG9mIG5zICovCisJdW5zaWduZWQgbG9uZwloY2xrOworCXVuc2lnbmVkIGxvbmcJcGNsazsKK307CisKKy8qIHdyYXBwZXIgJ3N0cnVjdCBjcHVmcmVxX2ZyZXFzJyBzbyB0aGF0IGFueSBkcml2ZXJzIHJlY2VpdmluZyB0aGUKKyAqIG5vdGlmaWNhdGlvbiBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgcHJvdmlkZWQgYnkganVzdAorICogaGF2aW5nIHRoZSBjb3JlIGZyZXF1ZW5jeSBhbG9uZS4KKyAqLworCitzdHJ1Y3QgczNjX2NwdWZyZXFfZnJlcXMgeworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzCWZyZXFzOworCXN0cnVjdCBzM2NfZnJlcQkJb2xkOworCXN0cnVjdCBzM2NfZnJlcQkJbmV3OworfTsKKworI2RlZmluZSB0b19zM2NfY3B1ZnJlcShfY2YpIGNvbnRhaW5lcl9vZihfY2YsIHN0cnVjdCBzM2NfY3B1ZnJlcV9mcmVxcywgZnJlcXMpCisKK3N0cnVjdCBzM2NfY2xrZGl2cyB7CisJaW50CQlwX2Rpdmlzb3I7CS8qIGZjbGsgLyBwY2xrICovCisJaW50CQloX2Rpdmlzb3I7CS8qIGZjbGsgLyBoY2xrICovCisJaW50CQlhcm1fZGl2aXNvcjsJLyogbm90IGFsbCBjcHVzIGhhdmUgdGhpcy4gKi8KKwl1bnNpZ25lZCBjaGFyCWR2czsJCS8qIHVzaW5nIGR2cyBtb2RlIHRvIGFybS4gKi8KK307CisKKyNkZWZpbmUgUExMVkFMKF9tLCBfcCwgX3MpICgoKF9tKSA8PCAxMikgfCAoKF9wKSA8PCA0KSB8IChfcykpCisKK3N0cnVjdCBzM2NfcGxsdmFsIHsKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCXVuc2lnbmVkIGxvbmcJCXBsbF9yZWc7Cit9OworCitzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnIHsKKwlzdHJ1Y3QgczNjX2ZyZXEJCWZyZXE7CisJc3RydWN0IHMzY19wbGx2YWwJcGxsOworCXN0cnVjdCBzM2NfY2xrZGl2cwlkaXZzOworCXN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvICppbmZvOwkvKiBmb3IgY29yZSwgbm90IGRyaXZlcnMgKi8KKwlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkOworfTsKKworLyogczNjX2NwdWZyZXFfYm9hcmQKKyAqCisgKiBwZXItYm9hcmQgY29uZmlndXJhdG9uIGluZm9ybWF0aW9uLCBzdWNoIGFzIG1lbW9yeSByZWZyZXNoIGFuZAorICogaG93IHRvIGluaXRpYWxpc2UgSU8gdGltaW5ncy4KKyAqLworc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkIHsKKwl1bnNpZ25lZCBpbnQJcmVmcmVzaDsJLyogcmVmcmVzaCBwZXJpb2QgaW4gbnMgKi8KKwl1bnNpZ25lZCBpbnQJYXV0b19pbzoxOwkvKiBhdXRvbWF0aWNhbGx5IGluaXQgaW8gdGltaW5ncy4gKi8KKwl1bnNpZ25lZCBpbnQJbmVlZF9pbzoxOwkvKiBzZXQgaWYgbmVlZHMgaW8gdGltaW5nIHN1cHBvcnQuICovCisKKwkvKiBhbnkgbm9uLXplcm8gZmllbGQgaW4gaGVyZSBpcyB0YWtlbiBhcyBhbiB1cHBlciBsaW1pdC4gKi8KKwlzdHJ1Y3QgczNjX2ZyZXEJbWF4OwkvKiBmcmVxdWVuY3kgbGltaXRzICovCit9OworCisvKiBUaGluZ3MgZGVwZW5kaW5nIG9uIGZyZXF1ZW5jeSBzY2FsaW5nLiAqLworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TM0MKKyNkZWZpbmUgX19pbml0X29yX2NwdWZyZXEKKyNlbHNlCisjZGVmaW5lIF9faW5pdF9vcl9jcHVmcmVxIF9faW5pdAorI2VuZGlmCisKKy8qIEJvYXJkIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1MzQworZXh0ZXJuIGludCBzM2NfY3B1ZnJlcV9zZXRib2FyZChzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkKTsKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19jcHVmcmVxX3NldGJvYXJkKHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgIC8qIENPTkZJR19DUFVfRlJFUV9TM0MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmgKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCmluZGV4IDIzZTQyMGUuLmU2MmFlMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jcHUuaAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIE1IWiAoMTAwMCoxMDAwKQogI2VuZGlmCiAKLSNkZWZpbmUgcHJpbnRfbWh6KG0pICgobSkgLyBNSFopLCAoKG0gLyAxMDAwKSAlIDEwMDApCisjZGVmaW5lIHByaW50X21oeihtKSAoKG0pIC8gTUhaKSwgKCgobSkgLyAxMDAwKSAlIDEwMDApCiAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzOwpAQCAtMjYsMTEgKzI2LDI4IEBACiBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnOwogc3RydWN0IG1hcF9kZXNjOwogCisvKiBwZXItY3B1IGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uIHRhYmxlLiAqLworCitzdHJ1Y3QgY3B1X3RhYmxlIHsKKwl1bnNpZ25lZCBsb25nCWlkY29kZTsKKwl1bnNpZ25lZCBsb25nCWlkbWFzazsKKwl2b2lkCQkoKm1hcF9pbykodm9pZCk7CisJdm9pZAkJKCppbml0X3VhcnRzKShzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CisJdm9pZAkJKCppbml0X2Nsb2NrcykoaW50IHh0YWwpOworCWludAkJKCppbml0KSh2b2lkKTsKKwljb25zdCBjaGFyCSpuYW1lOworfTsKKworZXh0ZXJuIHZvaWQgczNjX2luaXRfY3B1KHVuc2lnbmVkIGxvbmcgaWRjb2RlLAorCQkJIHN0cnVjdCBjcHVfdGFibGUgKmNwdXMsIHVuc2lnbmVkIGludCBjcHV0YWJfc2l6ZSk7CisKIC8qIGNvcmUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCiAKIGV4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzM2M2NHh4X2luaXRfaXJxKHUzMiB2aWMwLCB1MzIgdmljMSk7CiAKIGV4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworZXh0ZXJuIHZvaWQgczNjNjR4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CiAKIGV4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKaW5kZXggNGFhN2UyZS4uMzYzNGQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKQEAgLTIwLDcgKzIwLDcgQEAKIAkuZW5kbQogCiAjaWZuZGVmIGZpZm9fbGV2ZWwKLSNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0MTAKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0NDAKICNlbmRpZgogCiAJLm1hY3JvICBmaWZvX2Z1bGxfczNjMjQ0MCByZCwgcngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RldnMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCBiYWRhYWM5Li42YjFiNTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RldnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCkBAIC0xNywyMSArMTcsMjYgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjNjR4eF91YXJ0X3Jlc291cmNlc1tdOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbXTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjW107CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXTsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9mYjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9sY2Q7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3dkdDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9pMmMwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9pMmMxOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9paXM7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3J0YzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWRjOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zZGk7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYzA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMyOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZmIuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNGZmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZmIuaApAQCAtMCwwICsxLDczIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZmIuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIC0gRkIgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9TM0NfRkJfSAorI2RlZmluZSBfX1BMQVRfUzNDX0ZCX0ggX19GSUxFX18KKworLyoqCisgKiBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiAtIHBlciB3aW5kb3cgc2V0dXAgZGF0YQorICogQHdpbl9tb2RlOiBUaGUgZGlzcGxheSBwYXJhbWV0ZXJzIHRvIGluaXRpYWxpc2UgKG5vdCBmb3Igd2luZG93IDApCisgKiBAdmlydHVhbF94OiBUaGUgdmlydHVhbCBYIHNpemUuCisgKiBAdmlydHVhbF95OiBUaGUgdmlydHVhbCBZIHNpemUuCisgKi8KK3N0cnVjdCBzM2NfZmJfcGRfd2luIHsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlCXdpbl9tb2RlOworCisJdW5zaWduZWQgc2hvcnQJCWRlZmF1bHRfYnBwOworCXVuc2lnbmVkIHNob3J0CQltYXhfYnBwOworCXVuc2lnbmVkIHNob3J0CQl2aXJ0dWFsX3g7CisJdW5zaWduZWQgc2hvcnQJCXZpcnR1YWxfeTsKK307CisKKy8qKgorICogc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAtICBTM0MgZHJpdmVyIHBsYXRmb3JtIHNwZWNpZmljIGluZm9ybWF0aW9uCisgKiBAc2V0dXBfZ3BpbzogU2V0dXAgdGhlIGV4dGVybmFsIEdQSU8gcGlucyB0byB0aGUgcmlnaHQgc3RhdGUgdG8gdHJhbnNmZXIKKyAqCQl0aGUgZGF0YSBmcm9tIHRoZSBkaXNwbGF5IHN5c3RlbSB0byB0aGUgY29ubmVjdGVkIGRpc3BsYXkKKyAqCQlkZXZpY2UuCisgKiBAdmlkY29uMDogVGhlIGJhc2UgdmlkY29uMCB2YWx1ZXMgdG8gY29udHJvbCB0aGUgcGFuZWwgZGF0YSBmb3JtYXQuCisgKiBAdmlkY29uMTogVGhlIGJhc2UgdmlkY29uMSB2YWx1ZXMgdG8gY29udHJvbCB0aGUgcGFuZWwgZGF0YSBvdXRwdXQuCisgKiBAd2luOiBUaGUgc2V0dXAgZGF0YSBmb3IgZWFjaCBoYXJkd2FyZSB3aW5kb3csIG9yIE5VTEwgZm9yIHVudXNlZC4KKyAqIEBkaXNwbGF5X21vZGU6IFRoZSBMQ0Qgb3V0cHV0IGRpc3BsYXkgbW9kZS4KKyAqCisgKiBUaGUgcGxhdGZvcm0gZGF0YSBzdXBwbGllcyB0aGUgdmlkZW8gZHJpdmVyIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbgorICogaXQgcmVxdWlyZXMgdG8gd29yayB3aXRoIHRoZSBkaXNwbGF5KHMpIGF0dGFjaGVkIHRvIHRoZSBtYWNoaW5lLiBJdAorICogY29udHJvbHMgdGhlIGluaXRpYWwgbW9kZSwgdGhlIG51bWJlciBvZiBkaXNwbGF5IHdpbmRvd3MgKDAgaXMgYWx3YXlzCisgKiB0aGUgYmFzZSBmcmFtZWJ1ZmZlcikgdGhhdCBhcmUgaW5pdGlhbGlzZWQgZXRjLgorICoKKyAqLworc3RydWN0IHMzY19mYl9wbGF0ZGF0YSB7CisJdm9pZAkoKnNldHVwX2dwaW8pKHZvaWQpOworCisJc3RydWN0IHMzY19mYl9wZF93aW4JKndpbltTM0NfRkJfTUFYX1dJTl07CisKKwl1MzIJCQkgdmlkY29uMDsKKwl1MzIJCQkgdmlkY29uMTsKK307CisKKy8qKgorICogczNjX2ZiX3NldF9wbGF0ZGF0YSgpIC0gU2V0dXAgdGhlIEZCIGRldmljZSB3aXRoIHBsYXRmb3JtIGRhdGEuCisgKiBAcGQ6IFRoZSBwbGF0Zm9ybSBkYXRhIHRvIHNldC4gVGhlIGRhdGEgaXMgY29waWVkIGZyb20gdGhlIHBhc3NlZCBzdHJ1Y3R1cmUKKyAqICAgICAgc28gdGhlIG1hY2hpbmUgZGF0YSBjYW4gbWFyayB0aGUgZGF0YSBfX2luaXRkYXRhIHNvIHRoYXQgYW55IHVudXNlZAorICogICAgICBtYWNoaW5lcyB3aWxsIGVuZCB1cCBkdW1waW5nIHRoZWlyIGRhdGEgYXQgcnVudGltZS4KKyAqLworZXh0ZXJuIHZvaWQgczNjX2ZiX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhICpwZCk7CisKKy8qKgorICogczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwKCkgLSBTM0M2NFhYIHNldHVwIGZ1bmN0aW9uIGZvciAyNGJwcCBMQ0QKKyAqCisgKiBJbml0aWFsaXNlIHRoZSBHUElPIGZvciBhbiAyNGJwcCBMQ0QgZGlzcGxheSBvbiB0aGUgUkdCIGludGVyZmFjZS4KKyAqLworZXh0ZXJuIHZvaWQgczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwKHZvaWQpOworCisjZW5kaWYgLyogX19QTEFUX1MzQ19GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmctaGVscGVycy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJlMmJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaApAQCAtMCwwICsxLDE3NiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlci5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgUGxhdGZvcm0gLSBHUElPIHBpbiBjb25maWd1cmF0aW9uIGhlbHBlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBUaGlzIGlzIG1lYW50IGZvciBjb3JlIGNwdSBzdXBwb3J0LCBtYWNoaW5lIG9yIG90aGVyIGRyaXZlciBmaWxlcworICogc2hvdWxkIG5vdCBiZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfX1BMQVRfR1BJT19DRkdfSEVMUEVSU19ICisjZGVmaW5lIF9fUExBVF9HUElPX0NGR19IRUxQRVJTX0ggX19GSUxFX18KKworLyogQXMgYSBub3RlLCBhbGwgZ3BpbyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBhcmUgZW50ZXJlZCBleGNsdXNpdmVseSwgZWl0aGVyCisgKiB3aXRoIHRoZSByZWxldmFudCBsb2NrIGhlbGQgb3IgdGhlIHN5c3RlbSBwcmV2ZW50ZWQgZnJvbSBkb2luZyBhbnl0aGluZyBlbHNlCisgKiBieSBkaXNhYmxpbmcgaW50ZXJydXB0cy4KKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19ncGlvX2RvX3NldGNmZyhzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjb25maWcpCit7CisJcmV0dXJuIChjaGlwLT5jb25maWctPnNldF9jb25maWcpKGNoaXAsIG9mZiwgY29uZmlnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjX2dwaW9fZG9fc2V0cHVsbChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCkKK3sKKwlyZXR1cm4gKGNoaXAtPmNvbmZpZy0+c2V0X3B1bGwpKGNoaXAsIG9mZiwgcHVsbCk7Cit9CisKKy8qKgorICogczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHggLSBTM0MyNFhYIHN0eWxlIEdQSU8gY29uZmlndXJhdGlvbi4KKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAY2ZnOiBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBzZXQuCisgKgorICogVGhpcyBoZWxwZXIgZGVhbCB3aXRoIHRoZSBHUElPIGNhc2VzIHdoZXJlIHRoZSBjb250cm9sIHJlZ2lzdGVyCisgKiBoYXMgdHdvIGJpdHMgb2YgY29uZmlndXJhdGlvbiBwZXIgZ3Bpbywgd2hpY2ggaGF2ZSB0aGUgZm9sbG93aW5nCisgKiBmdW5jdGlvbnM6CisgKgkwMCA9IGlucHV0CisgKgkwMSA9IG91dHB1dAorICoJMXggPSBzcGVjaWFsIGZ1bmN0aW9uCisqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKTsKKworLyoqCisgKiBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eF9hIC0gUzNDMjRYWCBzdHlsZSBHUElPIGNvbmZpZ3VyYXRpb24gKEJhbmsgQSkKKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAY2ZnOiBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBzZXQuCisgKgorICogVGhpcyBoZWxwZXIgZGVhbCB3aXRoIHRoZSBHUElPIGNhc2VzIHdoZXJlIHRoZSBjb250cm9sIHJlZ2lzdGVyCisgKiBoYXMgb25lIGJpdCBvZiBjb25maWd1cmF0aW9uIGZvciB0aGUgZ3Bpbywgd2hlcmUgc2V0dGluZyB0aGUgYml0CisgKiBtZWFucyB0aGUgcGluIGlzIGluIHNwZWNpYWwgZnVuY3Rpb24gbW9kZSBhbmQgdW5zZXQgbWVhbnMgb3V0cHV0LgorKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHhfYShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpOworCisvKioKKyAqIHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQgLSBTM0M2NFhYIDRiaXQgc2luZ2xlIHJlZ2lzdGVyIEdQSU8gY29uZmlnLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBjZmc6IFRoZSBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHNldC4KKyAqCisgKiBUaGlzIGhlbHBlciBkZWFsIHdpdGggdGhlIEdQSU8gY2FzZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaGFzIDQgYml0cworICogb2YgY29udHJvbCBwZXIgR1BJTywgZ2VuZXJhbGx5IGluIHRoZSBmb3JtIG9mOgorICoJMDAwMCA9IElucHV0CisgKgkwMDAxID0gT3V0cHV0CisgKglvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kYW50IG9uIGJhbmspCisgKgorICogTm90ZSwgc2luY2UgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSB0d28gY29udHJvbAorICogcmVnaXN0ZXJzIGluc3RlYWQgb2Ygb25lLCB3ZSBkbyBub3QgaGF2ZSBhIHNlcGVyYXRlIHNldCBvZiBmdW5jdGlvbnMgZm9yCisgKiBlYWNoIGNhc2UuCisqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKTsKKworCisvKiBQdWxsLXt1cCxkb3dufSByZXNpc3RvciBjb250cm9scy4KKyAqCisgKiBTM0MyNDEwLFMzQzI0NDAsUzNDMjRBMCA9IFB1bGwtVVAsCisgKiBTM0MyNDEyLFMzQzI0MTMgPSBQdWxsLURvd24KKyAqIFMzQzY0MDAsUzNDNjQxMCA9IFB1bGwtQm90aCBbTm9uZSxEb3duLFVwLFVuZGVmXQorICogUzNDMjQ0MyA9IFB1bGwtQm90aCBbbm90IHNhbWUgYXMgUzNDNjQwMF0KKyAqLworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfMXVwKCkgLSBQdWxsIGNvbmZpZ3VyYXRpb24gZm9yIGNob2ljZSBvZiB1cCBvciBub25lLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQuCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIG9uZQorICogYml0IGNvbmZpZ3VyaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHB1bGwtdXAgcmVzaXN0b3IuCisgKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0cHVsbF8xdXAoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfMWRvd24oKSAtIFB1bGwgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIGRvd24gb3Igbm9uZQorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkCisgKiBAcGFyYW06IHB1bGw6IFRoZSBwdWxsIG1vZGUgYmVpbmcgcmVxdWVzdGVkCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIG9uZQorICogYml0IGNvbmZpZ3VyaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHB1bGwtZG93biByZXNpc3Rvci4KKyAqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsXzFkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfdXBvd24oKSAtIFB1bGwgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIHVwLCBkb3duIG9yIG5vbmUKKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAcGFyYW06IHB1bGw6IFRoZSBwdWxsIG1vZGUgYmVpbmcgcmVxdWVzdGVkLgorICoKKyAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgR1BJT3Mgd2l0aCB0d28KKyAqIGJpdHMgY29uZmlndXJpbmcgdGhlIHByZXNlbmNlIG9mIGEgcHVsbCByZXNpc3RvciwgaW4gdGhlIGZvbGxvd2luZworICogb3JkZXI6CisgKgkwMCA9IE5vIHB1bGwgcmVzaXN0b3IgY29ubmVjdGVkCisgKgkwMSA9IFB1bGwtdXAgcmVzaXN0b3IgY29ubmVjdGVkCisgKgkxMCA9IFB1bGwtZG93biByZXNpc3RvciBjb25uZWN0ZWQKKyAqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93bihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7CisKKworLyoqCisgKiBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93bigpIC0gR2V0IGNvbmZpZ3VyYXRpb24gZm9yIGNob2ljZSBvZiB1cCwgZG93biBvciBub25lCisgKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IHRoZSBHUElPIHBpbiBiZWxvbmdzIHRvCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IHRvIHRoZSBwaW4gdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIG9mLgorICoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHJlYWRzIHRoZSBzdGF0ZSBvZiB0aGUgcHVsbC17dXAsZG93bn0gcmVzaXN0b3IgZm9yIHRoZQorICogZ2l2ZW4gR1BJTyBpbiB0aGUgc2FtZSBjYXNlIGFzIHMzY19ncGlvX3NldHB1bGxfdXBvd24uCisqLworZXh0ZXJuIHMzY19ncGlvX3B1bGxfdCBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93bihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvZmYpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfczNjMjQ0MygpIC0gUHVsbCBjb25maWd1cmF0aW9uIGZvciBzM2MyNDQzLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQuCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIHR3bworICogYml0cyBjb25maWd1cmluZyB0aGUgcHJlc2VuY2Ugb2YgYSBwdWxsIHJlc2lzdG9yLCBpbiB0aGUgZm9sbG93aW5nCisgKiBvcmRlcjoKKyAqCTAwID0gUHVsbC11cCByZXNpc3RvciBjb25uZWN0ZWQKKyAqCTEwID0gUHVsbC1kb3duIHJlc2lzdG9yIGNvbm5lY3RlZAorICoJeDEgPSBObyBwdWxsIHVwIHJlc2lzdG9yCisgKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0cHVsbF9zM2MyNDQzKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7CisKKy8qKgorICogczNjX2dwaW9fZ2V0cHVsbF9zM2MyNDQzKCkgLSBHZXQgY29uZmlndXJhdGlvbiBmb3IgczNjMjQ0MyBwdWxsIHJlc2lzdG9ycworICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCB0aGUgR1BJTyBwaW4gYmVsb25ncyB0by4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgdG8gdGhlIHBpbiB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YuCisgKgorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gcmVhZHMgdGhlIHN0YXRlIG9mIHRoZSBwdWxsLXt1cCxkb3dufSByZXNpc3RvciBmb3IgdGhlCisgKiBnaXZlbiBHUElPIGluIHRoZSBzYW1lIGNhc2UgYXMgczNjX2dwaW9fc2V0cHVsbF91cG93bi4KKyovCitleHRlcm4gczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfczNjMjR4eChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCXVuc2lnbmVkIGludCBvZmYpOworCisjZW5kaWYgLyogX19QTEFUX0dQSU9fQ0ZHX0hFTFBFUlNfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2Q2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaApAQCAtMCwwICsxLDExMCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQbGF0Zm9ybSAtIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgZGVmaW5pdGlvbnMgdG8gZ2V0IHRoZSBiYXNpYyBncGlvCisgKiBwaW4gY29uZmlndXJhdGlvbiBkb25lIHN1Y2ggYXMgc2V0dGluZyBhIHBpbiB0byBpbnB1dCBvciBvdXRwdXQgb3IKKyAqIGNoYW5naW5nIHRoZSBwdWxsLXt1cCxkb3dufSBjb25maWd1cmF0aW9ucy4KKyAqLworCisvKiBOb3RlLCB0aGlzIGludGVyZmFjZSBpcyBiZWluZyBhZGRlZCB0byB0aGUgczNjNjR4eCBhcmNoIGZpcnN0IGFuZCB3aWxsCisgKiBiZSBhZGRlZCB0byB0aGUgczNjMjR4eCBzeXN0ZW1zIGxhdGVyLgorICovCisKKyNpZm5kZWYgX19QTEFUX0dQSU9fQ0ZHX0gKKyNkZWZpbmUgX19QTEFUX0dQSU9fQ0ZHX0ggX19GSUxFX18KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlX18gczNjX2dwaW9fcHVsbF90OworCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGlmIGdwaW8tY29yZS5oIGhhc24ndCBiZWVuIGluY2x1ZGVkICovCitzdHJ1Y3QgczNjX2dwaW9fY2hpcDsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2dwaW9fY2ZnIEdQSU8gY29uZmlndXJhdGlvbgorICogQGNmZ19laW50OiBDb25maWd1cmF0aW9uIHNldHRpbmcgd2hlbiB1c2VkIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlCisgKiBAZ2V0X3B1bGw6IFJlYWQgdGhlIGN1cnJlbnQgcHVsbCBjb25maWd1cmF0aW9uIGZvciB0aGUgR1BJTworICogQHNldF9wdWxsOiBTZXQgdGhlIGN1cnJlbnQgcHVsbCBjb25maWd1cmFpdG9uIGZvciB0aGUgR1BJTworICogQHNldF9jb25maWc6IFNldCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciB0aGUgR1BJTworICogQGdldF9jb25maWc6IFJlYWQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdQSU8KKyAqCisgKiBFYWNoIGNoaXAgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIEdQSU8gYmFuayBhdmFpbGFibGUgYW5kIHNvbWUKKyAqIGhhdmUgZGlmZmVyZW50IGNhcGFiaWxpdGVzIGV2ZW4gd2hlbiB0aGV5IGhhdmUgdGhlIHNhbWUgY29udHJvbCByZWdpc3RlcgorICogbGF5b3V0cy4gUHJvdmlkZSBhbiBwb2ludCB0byB2ZWN0b3IgY29udHJvbCByb3V0aW5lIGFuZCBwcm92aWRlIGFueQorICogcGVyLWJhbmsgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0aGF0IG90aGVyIHN5c3RlbXMgc3VjaCBhcyB0aGUKKyAqIGV4dGVybmFsIGludGVycnVwdCBjb2RlIHdpbGwgbmVlZC4KKyAqLworc3RydWN0IHMzY19ncGlvX2NmZyB7CisJdW5zaWduZWQgaW50CWNmZ19laW50OworCisJczNjX2dwaW9fcHVsbF90CSgqZ2V0X3B1bGwpKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzKTsKKwlpbnQJCSgqc2V0X3B1bGwpKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzLAorCQkJCSAgICBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7CisKKwl1bnNpZ25lZCAoKmdldF9jb25maWcpKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzKTsKKwlpbnQJICgqc2V0X2NvbmZpZykoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnMsCisJCQkgICAgICAgdW5zaWduZWQgY29uZmlnKTsKK307CisKKyNkZWZpbmUgUzNDX0dQSU9fU1BFQ0lBTF9NQVJLCSgweGZmZmZmZmYwKQorI2RlZmluZSBTM0NfR1BJT19TUEVDSUFMKHgpCShTM0NfR1BJT19TUEVDSUFMX01BUksgfCAoeCkpCisKKy8qIERlZmluZXMgZm9yIGdlbmVyaWMgcGluIGNvbmZpZ3VyYXRpb25zICovCisjZGVmaW5lIFMzQ19HUElPX0lOUFVUCShTM0NfR1BJT19TUEVDSUFMKDApKQorI2RlZmluZSBTM0NfR1BJT19PVVRQVVQJKFMzQ19HUElPX1NQRUNJQUwoMSkpCisjZGVmaW5lIFMzQ19HUElPX1NGTih4KQkoUzNDX0dQSU9fU1BFQ0lBTCh4KSkKKworI2RlZmluZSBzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChfY2ZnKSBcCisJKCgoX2NmZykgJiBTM0NfR1BJT19TUEVDSUFMX01BUkspID09IFMzQ19HUElPX1NQRUNJQUxfTUFSSykKKworLyoqCisgKiBzM2NfZ3Bpb19jZmdwaW4oKSAtIENoYW5nZSB0aGUgR1BJTyBmdW5jdGlvbiBvZiBhIHBpbi4KKyAqIEBwaW4gcGluIFRoZSBwaW4gbnVtYmVyIHRvIGNvbmZpZ3VyZS4KKyAqIEBwaW4gdG8gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwaW4ncyBmdW5jdGlvbi4KKyAqCisgKiBDb25maWd1cmUgd2hpY2ggZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5hbAorICogcGluLCBzdWNoIGFzIGFuIGdwaW8gaW5wdXQsIG91dHB1dCBvciBzb21lIGZvcm0gb2Ygc3BlY2lhbCBmdW5jdGlvbgorICogY29ubmVjdGVkIHRvIGFuIGludGVybmFsIHBlcmlwaGVyYWwgYmxvY2suCisgKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fY2ZncGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0byk7CisKKy8qIERlZmluZSB2YWx1ZXMgZm9yIHRoZSBwdWxsLXt1cCxkb3dufSBhdmFpbGFibGUgZm9yIGVhY2ggZ3BpbyBwaW4uCisgKgorICogVGhlc2UgdmFsdWVzIGNvbnRyb2wgdGhlIHN0YXRlIG9mIHRoZSB3ZWFrIHB1bGwte3VwLGRvd259IHJlc2lzdG9ycworICogYXZhaWxhYmxlIG9uIG1vc3QgcGlucyBvbiB0aGUgUzNDIHNlcmllcy4gTm90IGFsbCBjaGlwcyBzdXBwb3J0IGJvdGgKKyAqIHVwIG9yIGRvd24gc2V0dGluZ3MsIGFuZCBpdCBtYXkgYmUgZGVwZW5kYW50IG9uIHRoZSBjaGlwIHRoYXQgaXMgYmVpbmcKKyAqIHVzZWQgdG8gd2hldGhlciB0aGUgcGFydGljdWxhciBtb2RlIGlzIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBTM0NfR1BJT19QVUxMX05PTkUJKChfX2ZvcmNlIHMzY19ncGlvX3B1bGxfdCkweDAwKQorI2RlZmluZSBTM0NfR1BJT19QVUxMX0RPV04JKChfX2ZvcmNlIHMzY19ncGlvX3B1bGxfdCkweDAxKQorI2RlZmluZSBTM0NfR1BJT19QVUxMX1VQCSgoX19mb3JjZSBzM2NfZ3Bpb19wdWxsX3QpMHgwMikKKworLyoqCisgKiBzM2NfZ3Bpb19zZXRwdWxsKCkgLSBzZXQgdGhlIHN0YXRlIG9mIGEgZ3BpbyBwaW4gcHVsbCByZXNpc3RvcgorICogQHBpbjogVGhlIHBpbiBudW1iZXIgdG8gY29uZmlndXJlIHRoZSBwdWxsIHJlc2lzdG9yLgorICogQHB1bGw6IFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHVsbCByZXNpc3Rvci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHN0YXRlIG9mIHRoZSBwdWxsLXt1cCxkb3dufSByZXNpc3RvciBmb3IgdGhlCisgKiBzcGVjaWZpZWQgcGluLiBJdCB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWxsLCBvciBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIGlmIHRoZSBwaW4gY2Fubm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBwdWxsIHNldHRpbmcuCisqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsKHVuc2lnbmVkIGludCBwaW4sIHMzY19ncGlvX3B1bGxfdCBwdWxsKTsKKworLyoqCisgKiBzM2NfZ3Bpb19nZXRwdWxsKCkgLSBnZXQgdGhlIHB1bGwgcmVzaXN0b3Igc3RhdGUgb2YgYSBncGlvIHBpbgorICogQHBpbjogVGhlIHBpbiBudW1iZXIgdG8gZ2V0IHRoZSBzZXR0aW5ncyBmb3IKKyAqCisgKiBSZWFkIHRoZSBwdWxsIHJlc2lzdG9yIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHBpbi4KKyovCitleHRlcm4gczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGwodW5zaWduZWQgaW50IHBpbik7CisKKyNlbmRpZiAvKiBfX1BMQVRfR1BJT19DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzYwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKQEAgLTAsMCArMSw3NyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQbGF0Zm9ybSAtIEdQSU8gY29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBEZWZpbmUgdGhlIGNvcmUgZ3Bpb2xpYiBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IHRoZSBzM2MgcGxhdGZvcm1zIG1heQorICogbmVlZCB0byBleHRlbmQgb3IgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzM2MgY2hpcAorICogc2VsZWN0ZWQgYXQgYnVpbGQgb3IgZm91bmQgYXQgcnVuIHRpbWUuCisgKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZHJpdmVyIGluY2x1c2lvbiwgdGhlcmUgaXMKKyAqIG5vdGhpbmcgaGVyZSB0aGF0IHNob3VsZCBub3QgbGl2ZSBvdXRzaWRlIHRoZSBwbGF0Zm9ybSBhbmQgY29yZQorICogc3BlY2lmaWMgY29kZS4KKyovCisKK3N0cnVjdCBzM2NfZ3Bpb19jZmc7CisKKy8qKgorICogc3RydWN0IHMzY19ncGlvX2NoaXAgLSB3cmFwcGVyIGZvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBncGlvCisgKiBAY2hpcDogVGhlIGNoaXAgc3RydWN0dXJlIHRvIGJlIGV4cG9ydGVkIHZpYSBncGlvbGliLgorICogQGJhc2U6IFRoZSBiYXNlIHBvaW50ZXIgdG8gdGhlIGdwaW8gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgKiBAY29uZmlnOiBzcGVjaWFsIGZ1bmN0aW9uIGFuZCBwdWxsLXJlc2lzdG9yIGNvbnRyb2wgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyB3cmFwcGVyIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBTYW1zdW5nCisgKiBzcGVjaWZpYyBncGlvcyBiZWluZyByZWdpc3RlcmVkIHdpdGggZ3Bpb2xpYi4KKyAqLworc3RydWN0IHMzY19ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwlzdHJ1Y3QgczNjX2dwaW9fY2ZnCSpjb25maWc7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19ncGlvX2NoaXAgKnRvX3MzY19ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmdwYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdwYywgc3RydWN0IHMzY19ncGlvX2NoaXAsIGNoaXApOworfQorCisvKiogczNjX2dwaW9saWJfYWRkKCkgLSBhZGQgdGhlIHMzYyBzcGVjaWZpYyB2ZXJzaW9uIG9mIGEgZ3Bpb19jaGlwLgorICogQGNoaXA6IFRoZSBjaGlwIHRvIHJlZ2lzdGVyCisgKgorICogVGhpcyBpcyBhIHdyYXBwZXIgdG8gZ3Bpb2NoaXBfYWRkKCkgdGhhdCB0YWtlcyBvdXIgc3BlY2lmaWMgZ3BpbyBjaGlwCisgKiBpbmZvcm1hdGlvbiBhbmQgbWFrZXMgdGhlIG5lY2Vzc2FyeSBhbHRlcmF0aW9ucyBmb3IgdGhlIHBsYXRmb3JtIGFuZAorICogbm90ZXMgdGhlIGluZm9ybWF0aW9uIGZvciB1c2Ugd2l0aCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW1zIGFuZCBhbnkKKyAqIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCisgKi8KK2V4dGVybiB2b2lkIHMzY19ncGlvbGliX2FkZChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCk7CisKKy8qIENPTkZJR19TM0NfR1BJT19UUkFDSyBlbmFibGVzIHRoZSB0cmFja2luZyBvZiB0aGUgczNjIHNwZWNpZmljIGdwaW9zCisgKiBmb3IgdXNlIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gY2FsbHMsIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgczNjIGdwaW9saWIKKyAqIHN1cHBvcnQgY29kZS4KKyAqCisgKiBOb3QgYWxsIHMzYyBzdXBwb3J0IGNvZGUgd2lsbCBuZWVkIHRoaXMsIGFzIHNvbWUgY29uZmlndXJhdGlvbnMgb2YgY3B1CisgKiBtYXkgb25seSBzdXBwb3J0IG9uZSBvciB0d28gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaGF2ZSBhbgorICogZWFzeSBncGlvIHRvIHMzY19ncGlvX2NoaXAgbWFwcGluZyBmdW5jdGlvbi4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlbgorICogdGhlIG1hY2hpbmUgc3VwcG9ydCBmaWxlIHNob3VsZCBwcm92aWRlIGl0cyBvd24gczNjX2dwaW9saWJfZ2V0Y2hpcCgpCisgKiBhbmQgYW55IG90aGVyIG5lY2Vzc2FyeSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIENPTkZJR19TM0NfR1BJT19UUkFDSworZXh0ZXJuIHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpzM2NfZ3Bpb3NbUzNDX0dQSU9fRU5EXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqczNjX2dwaW9saWJfZ2V0Y2hpcCh1bnNpZ25lZCBpbnQgY2hpcCkKK3sKKwlyZXR1cm4gKGNoaXAgPCBTM0NfR1BJT19FTkQpID8gczNjX2dwaW9zW2NoaXBdIDogTlVMTDsKK30KKyNlbHNlCisvKiBtYWNoaW5lIHNwZWNpZmljIGNvZGUgc2hvdWxkIHByb3ZpZGUgczNjX2dwaW9saWJfZ2V0Y2hpcCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2dwaW9saWJfdHJhY2soc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApIHsgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaWljLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9paWMtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Mzk3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaWljLWNvcmUuaApAQCAtMCwwICsxLDM1IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lpYy1jb3JlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIC0gSTJDIENvbnRyb2xsZXIgY29yZSBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lJQ19DT1JFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JSUNfQ09SRV9IIF9fRklMRV9fCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBmb3IgdXNlIHdpdGggdGhlIGNvcmUgc3VwcG9ydCBjb2RlLCBzdWNoIGFzCisgKiB0aGUgY3B1IHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGNvZGUKKyAqLworCisvKiByZS1kZWZpbmUgZGV2aWNlIG5hbWUgZGVwZW5kaW5nIG9uIHN1cHBvcnQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2kyYzBfc2V0bmFtZShjaGFyICpuYW1lKQoreworCS8qIGN1cnJlbnRseSB0aGlzIGRldmljZSBpcyBhbHdheXMgY29tcGlsZWQgaW4gKi8KKwlzM2NfZGV2aWNlX2kyYzAubmFtZSA9IG5hbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaTJjMV9zZXRuYW1lKGNoYXIgKm5hbWUpCit7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSTJDMQorCXMzY19kZXZpY2VfaTJjMS5uYW1lID0gbmFtZTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9JSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2lpYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2lpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWRmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaWljLmgKQEAgLTAsMCArMSw1NyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9paWMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gSTJDIENvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lJQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSUlDX0ggX19GSUxFX18KKworI2RlZmluZSBTM0NfSUlDRkxHX0ZJTFRFUgkoMTw8MCkJLyogZW5hYmxlIHMzYzI0NDAgZmlsdGVyICovCisKKy8qIE5vdGVzOgorICoJMSkgQWxsIGZyZXF1ZW5jaWVzIGFyZSBleHByZXNzZWQgaW4gSHoKKyAqCTIpIEEgdmFsdWUgb2YgemVybyBpcyBgZG8gbm90IGNhcmVgCisqLworCitzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9pMmMgeworCWludAkJYnVzX251bTsJLyogYnVzIG51bWJlciB0byB1c2UgKi8KKwl1bnNpZ25lZCBpbnQJZmxhZ3M7CisJdW5zaWduZWQgaW50CXNsYXZlX2FkZHI7CS8qIHNsYXZlIGFkZHJlc3MgZm9yIGNvbnRyb2xsZXIgKi8KKwl1bnNpZ25lZCBsb25nCWJ1c19mcmVxOwkvKiBzdGFuZGFyZCBidXMgZnJlcXVlbmN5ICovCisJdW5zaWduZWQgbG9uZwltYXhfZnJlcTsJLyogbWF4IGZyZXF1ZW5jeSBmb3IgdGhlIGJ1cyAqLworCXVuc2lnbmVkIGxvbmcJbWluX2ZyZXE7CS8qIG1pbiBmcmVxdWVuY3kgZm9yIHRoZSBidXMgKi8KKwl1bnNpZ25lZCBpbnQJc2RhX2RlbGF5OwkvKiBwY2xrcyAoczNjMjQ0MCBvbmx5KSAqLworCisJdm9pZAkoKmNmZ19ncGlvKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworfTsKKworLyoqCisgKiBzM2NfaTJjMF9zZXRfcGxhdGRhdGEgLSBzZXQgcGxhdGZvcm0gZGF0YSBmb3IgaTJjMCBkZXZpY2UKKyAqIEBpMmM6IFRoZSBwbGF0Zm9ybSBkYXRhIHRvIHNldCwgb3IgTlVMTCBmb3IgZGVmYXVsdCBkYXRhLgorICoKKyAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBwbGF0Zm9ybSBkYXRhIGZvciB1c2Ugd2l0aCB0aGUgaTJjMCBkZXZpY2UuIFRoaXMKKyAqIGNhbGwgY29waWVzIHRoZSBwbGF0Zm9ybSBkYXRhLCBzbyB0aGUgY2FsbGVyIGNhbiB1c2UgX19pbml0ZGF0YSBmb3IKKyAqIHRoZWlyIGNvcHkuCisgKgorICogVGhpcyBjYWxsIHdpbGwgc2V0IGNmZ19ncGlvIGlmIGlzIG51bGwgdG8gdGhlIGRlZmF1bHQgcGxhdGZvcm0KKyAqIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEFueSB1c2VyIG9mIHMzY19kZXZpY2VfaTJjMCBzaG91bGQgY2FsbCB0aGlzLCBldmVuIGlmIGl0IGlzIHdpdGgKKyAqIE5VTEwgdG8gZW5zdXJlIHRoYXQgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBkYXRhCisgKiBhcyB0aGUgZHJpdmVyIHdpbGwgbm8gbG9uZ2VyIGNhcnJ5IGRlZmF1bHRzLgorICovCitleHRlcm4gdm9pZCBzM2NfaTJjMF9zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjICppMmMpOworZXh0ZXJuIHZvaWQgczNjX2kyYzFfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX2kyYyAqaTJjKTsKKworLyogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgdG8gY29uZmlndXJlIGdwaW8gKi8KK2V4dGVybiB2b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBzM2NfaTJjMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX19BU01fQVJDSF9JSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9uYW5kLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvbmFuZC5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1hYzk3LmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1hYzk3LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLWFjOTcuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWM5Ny5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1mYi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWVlNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmIuaApAQCAtMCwwICsxLDM2NiBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmIuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQbGF0Zm9ybSAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKKyAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBpbnRvIHRoZSBTM0MyNDE2LCBTM0MyNDUwIGFuZCB0aGUKKyAqIFMzQzY0WFggc2VyaWVzIHN1Y2ggYXMgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAuCisgKgorICogVGhlIGZpbGUgZG9lcyBub3QgY29udGFpbiB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGFyZSBiYXNlZCBvbgorICogd2hpY2hldmVyIGFyY2hpdGVjdHVyZSBpcyBzZWxlY3RlZCwgaXQgb25seSBjb250YWlucyB0aGUgY29yZSBvZiB0aGUKKyAqIHJlZ2lzdGVyIHNldC4gU2VlIDxtYWNoL3JlZ3MtZmIuaD4gdG8gZ2V0IHRoZSBzcGVjaWZpY3MuCisgKgorICogTm90ZSwgd2UgY2hhbmdlZCB0byB1c2luZyByZWdzLWZiLmggYXMgaXQgYXZvaWRzIGFueSBjbGFzaGVzIHdpdGgKKyAqIHRoZSBvcmlnaW5hbCByZWdzLWxjZC5oIHNvIG91dCBvZiB0aGUgd2F5IG9mIHJlZ3MtbGNkLmggYXMgd2VsbCBhcworICogaW5kaWNhdGluZyB0aGUgbmV3ZXIgYmxvY2sgaXMgbXVjaCBtb3JlIHRoYW4ganVzdCBhbiBMQ0QgaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBQbGVhc2UgZG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LCB1c2UgPG1hY2gvcmVncy1mYi5oPiB0bworICogZW5zdXJlIGFsbCB0aGUgbG9jYWxpc2VkIFNvQyBzdXBwb3J0IGlzIGluY2x1ZGVkIGFzIG5lY2Vzc2FyeS4KKyovCisKKy8qIFZJRENPTjAgKi8KKworI2RlZmluZSBWSURDT04wCQkJCQkoMHgwMCkKKyNkZWZpbmUgVklEQ09OMF9JTlRFUkxBQ0UJCQkoMSA8PCAyOSkKKyNkZWZpbmUgVklEQ09OMF9WSURPVVRfTUFTSwkJCSgweDMgPDwgMjYpCisjZGVmaW5lIFZJRENPTjBfVklET1VUX1NISUZUCQkJKDI2KQorI2RlZmluZSBWSURDT04wX1ZJRE9VVF9SR0IJCQkoMHgwIDw8IDI2KQorI2RlZmluZSBWSURDT04wX1ZJRE9VVF9UVgkJCSgweDEgPDwgMjYpCisjZGVmaW5lIFZJRENPTjBfVklET1VUX0k4MF9MREkwCQkJKDB4MiA8PCAyNikKKyNkZWZpbmUgVklEQ09OMF9WSURPVVRfSTgwX0xESTEJCQkoMHgzIDw8IDI2KQorCisjZGVmaW5lIFZJRENPTjBfTDFfREFUQV9NQVNLCQkJKDB4NyA8PCAyMykKKyNkZWZpbmUgVklEQ09OMF9MMV9EQVRBX1NISUZUCQkJKDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFAJCQkoMHgwIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAxNgkJCSgweDEgPDwgMjMpCisjZGVmaW5lIFZJRENPTjBfTDFfREFUQV8xOEJQUDkJCQkoMHgyIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMjRCUFAJCQkoMHgzIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAJCQkoMHg0IDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFA4CQkJKDB4NSA8PCAyMykKKworI2RlZmluZSBWSURDT04wX0wwX0RBVEFfTUFTSwkJCSgweDcgPDwgMjApCisjZGVmaW5lIFZJRENPTjBfTDBfREFUQV9TSElGVAkJCSgyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQCQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQMTYJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBWSURDT04wX0wwX0RBVEFfMThCUFA5CQkJKDB4MiA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzI0QlBQCQkJKDB4MyA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQCQkJKDB4NCA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQOAkJCSgweDUgPDwgMjApCisKKyNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX01BU0sJCQkoMHgzIDw8IDE3KQorI2RlZmluZSBWSURDT04wX1BOUk1PREVfU0hJRlQJCQkoMTcpCisjZGVmaW5lIFZJRENPTjBfUE5STU9ERV9SR0IJCQkoMHgwIDw8IDE3KQorI2RlZmluZSBWSURDT04wX1BOUk1PREVfQkdSCQkJKDB4MSA8PCAxNykKKyNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX1NFUklBTF9SR0IJCSgweDIgPDwgMTcpCisjZGVmaW5lIFZJRENPTjBfUE5STU9ERV9TRVJJQUxfQkdSCQkoMHgzIDw8IDE3KQorCisjZGVmaW5lIFZJRENPTjBfQ0xLVkFMVVAJCQkoMSA8PCAxNikKKyNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9NQVNLCQkJKDB4ZmYgPDwgNikKKyNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9TSElGVAkJCSg2KQorI2RlZmluZSBWSURDT04wX0NMS1ZBTF9GX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRENPTjBfQ0xLVkFMX0YoX3gpCQkJKChfeCkgPDwgNikKKyNkZWZpbmUgVklEQ09OMF9WTENLRlJFRQkJCSgxIDw8IDUpCisjZGVmaW5lIFZJRENPTjBfQ0xLRElSCQkJCSgxIDw8IDQpCisKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfU0hJRlQJCQkoMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfSENMSwkJCSgweDAgPDwgMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTENECQkJKDB4MSA8PCAyKQorI2RlZmluZSBWSURDT04wX0NMS1NFTF8yN00JCQkoMHgzIDw8IDIpCisKKyNkZWZpbmUgVklEQ09OMF9FTlZJRAkJCQkoMSA8PCAxKQorI2RlZmluZSBWSURDT04wX0VOVklEX0YJCQkJKDEgPDwgMCkKKworI2RlZmluZSBWSURDT04xCQkJCQkoMHgwNCkKKyNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX01BU0sJCQkoMHg3ZmYgPDwgMTYpCisjZGVmaW5lIFZJRENPTjFfTElORUNOVF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX0dFVChfdikJCQkoKChfdikgPj4gMTYpICYgMHg3ZmYpCisjZGVmaW5lIFZJRENPTjFfVlNUQVRVU19NQVNLCQkJKDB4MyA8PCAxMykKKyNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX1NISUZUCQkJKDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfVlNZTkMJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQkFDS1BPUkNICQkoMHgxIDw8IDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQUNUSVZFCQkJKDB4MiA8PCAxMykKKyNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX0ZST05UUE9SQ0gJCSgweDAgPDwgMTMpCisKKyNkZWZpbmUgVklEQ09OMV9JTlZfVkNMSwkJCSgxIDw8IDcpCisjZGVmaW5lIFZJRENPTjFfSU5WX0hTWU5DCQkJKDEgPDwgNikKKyNkZWZpbmUgVklEQ09OMV9JTlZfVlNZTkMJCQkoMSA8PCA1KQorI2RlZmluZSBWSURDT04xX0lOVl9WREVOCQkJKDEgPDwgNCkKKworLyogVklEQ09OMiAqLworCisjZGVmaW5lIFZJRENPTjIJCQkJCSgweDA4KQorI2RlZmluZSBWSURDT04yX0VONjAxCQkJCSgxIDw8IDIzKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMX1NXCQkJKDEgPDwgMTQpCisKKyNkZWZpbmUgVklEQ09OMl9UVkZNVFNFTDFfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1NISUZUCQkJKDEyKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9SR0IJCQkoMHgwIDw8IDEyKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9ZVVY0MjIJCSgweDEgPDwgMTIpCisjZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1lVVjQ0NAkJKDB4MiA8PCAxMikKKworI2RlZmluZSBWSURDT04yX09SR1lDYkNyCQkJKDEgPDwgOCkKKyNkZWZpbmUgVklEQ09OMl9ZVVZPUkRDckNiCQkJKDEgPDwgNykKKworLyogVklEVENPTjAgKi8KKworI2RlZmluZSBWSURUQ09OMF9WQlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIFZJRFRDT04wX1ZCUERFX1NISUZUCQkJKDI0KQorI2RlZmluZSBWSURUQ09OMF9WQlBERV9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WQlBERShfeCkJCQkoKF94KSA8PCAyNCkKKworI2RlZmluZSBWSURUQ09OMF9WQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgVklEVENPTjBfVkJQRF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEVENPTjBfVkJQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WQlBEKF94KQkJCSgoX3gpIDw8IDE2KQorCisjZGVmaW5lIFZJRFRDT04wX1ZGUERfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFZJRFRDT04wX1ZGUERfU0hJRlQJCQkoOCkKKyNkZWZpbmUgVklEVENPTjBfVkZQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WRlBEKF94KQkJCSgoX3gpIDw8IDgpCisKKyNkZWZpbmUgVklEVENPTjBfVlNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVklEVENPTjBfVlNQV19TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMF9WU1BXX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRFRDT04wX1ZTUFcoX3gpCQkJKChfeCkgPDwgMCkKKworLyogVklEVENPTjEgKi8KKworI2RlZmluZSBWSURUQ09OMV9WRlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIFZJRFRDT04xX1ZGUERFX1NISUZUCQkJKDI0KQorI2RlZmluZSBWSURUQ09OMV9WRlBERV9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9WRlBERShfeCkJCQkoKF94KSA8PCAyNCkKKworI2RlZmluZSBWSURUQ09OMV9IQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgVklEVENPTjFfSEJQRF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEVENPTjFfSEJQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9IQlBEKF94KQkJCSgoX3gpIDw8IDE2KQorCisjZGVmaW5lIFZJRFRDT04xX0hGUERfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFZJRFRDT04xX0hGUERfU0hJRlQJCQkoOCkKKyNkZWZpbmUgVklEVENPTjFfSEZQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9IRlBEKF94KQkJCSgoX3gpIDw8IDgpCisKKyNkZWZpbmUgVklEVENPTjFfSFNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVklEVENPTjFfSFNQV19TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMV9IU1BXX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRFRDT04xX0hTUFcoX3gpCQkJKChfeCkgPDwgMCkKKworI2RlZmluZSBWSURUQ09OMgkJCQkoMHgxOCkKKyNkZWZpbmUgVklEVENPTjJfTElORVZBTF9NQVNLCQkJKDB4N2ZmIDw8IDExKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX1NISUZUCQkJKDExKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX0xJTUlUCQkJKDB4N2ZmKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMKF94KQkJCSgoX3gpIDw8IDExKQorCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9NQVNLCQkJKDB4N2ZmIDw8IDApCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMl9IT1pWQUxfTElNSVQJCQkoMHg3ZmYpCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTChfeCkJCQkoKF94KSA8PCAwKQorCisvKiBXSU5DT054ICovCisKKworI2RlZmluZSBXSU5DT054X0JJVFNXUAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgV0lOQ09OeF9CWVRTV1AJCQkJKDEgPDwgMTcpCisjZGVmaW5lIFdJTkNPTnhfSEFXU1dQCQkJCSgxIDw8IDE2KQorI2RlZmluZSBXSU5DT054X0JVUlNUTEVOX01BU0sJCQkoMHgzIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fU0hJRlQJCQkoOSkKKyNkZWZpbmUgV0lOQ09OeF9CVVJTVExFTl8xNldPUkQJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fOFdPUkQJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fNFdPUkQJCQkoMHgyIDw8IDkpCisKKyNkZWZpbmUgV0lOQ09OeF9FTldJTgkJCQkoMSA8PCAwKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfTUFTSwkJCSgweGYgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFX1NISUZUCQkJKDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8xQlBQCQkJKDB4MCA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMkJQUAkJCSgweDEgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzRCUFAJCQkoMHgyIDw8IDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV84QlBQX1BBTEVUVEUJCSgweDMgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMTZCUFBfMTU1NQkJKDB4NyA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8yNEJQUF84ODgJCSgweGIgPDwgMikKKworI2RlZmluZSBXSU5DT04xX0JMRF9QSVgJCQkJKDEgPDwgNikKKworI2RlZmluZSBXSU5DT04xX0FMUEhBX1NFTAkJCSgxIDw8IDEpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfU0hJRlQJCQkoMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzhCUFBfUEFMRVRURQkJKDB4MyA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfOEJQUF8xMjMyCQkoMHg0IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF81NjUJCSgweDUgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzE2QlBQX0ExNTU1CQkoMHg2IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF9JMTU1NQkJKDB4NyA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xOEJQUF9BMTY2NQkJKDB4OSA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMTlCUFBfQTE2NjYJCSgweGEgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI0QlBQXzg4OAkJKDB4YiA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMjRCUFBfQTE4ODcJCSgweGMgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI1QlBQX0ExODg4CQkoMHhkIDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yOEJQUF9BNDg4OAkJKDB4ZCA8PCAyKQorCisKKyNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YX01BU0sJCQkoMHg3ZmYgPDwgMTEpCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWF9TSElGVAkJKDExKQorI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1hfTElNSVQJCSgweDdmZikKKyNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YKF94KQkJCSgoX3gpIDw8IDExKQorCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9NQVNLCQkJKDB4N2ZmIDw8IDApCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9TSElGVAkJKDApCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9MSU1JVAkJKDB4N2ZmKQorI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1koX3gpCQkJKChfeCkgPDwgMCkKKworI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX01BU0sJCSgweDdmZiA8PCAxMSkKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWF9TSElGVAkJKDExKQorI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX0xJTUlUCQkoMHg3ZmYpCisjZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1goX3gpCQkJKChfeCkgPDwgMTEpCisKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9NQVNLCQkoMHg3ZmYgPDwgMCkKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9TSElGVAkJKDApCisjZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1lfTElNSVQJCSgweDdmZikKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWShfeCkJCQkoKF94KSA8PCAwKQorCisvKiBGb3IgVklET1NEWzEuLjRdQyAqLworI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX1IoX3gpCQkJKChfeCkgPDwgMjApCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HX1NISUZUCQkoMTYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19MSU1JVAkJKDB4ZikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HKF94KQkJCSgoX3gpIDw8IDE2KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQl9TSElGVAkJKDEyKQorI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTElNSVQJCSgweGYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQihfeCkJCQkoKF94KSA8PCAxMikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9TSElGVAkJKDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9MSU1JVAkJKDB4ZikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SKF94KQkJCSgoX3gpIDw8IDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfR19NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfU0hJRlQJCSg0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfTElNSVQJCSgweGYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfRyhfeCkJCQkoKF94KSA8PCA0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0JfTUFTSwkJCSgweGYgPDwgMCkKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX1NISUZUCQkoMCkKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX0xJTUlUCQkoMHhmKQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0IoX3gpCQkJKChfeCkgPDwgMCkKKworLyogVmlkZW8gYnVmZmVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBWSURXX0JVRl9TVEFSVChfYnVmZikJCQkoMHhBMCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX1NUQVJUMShfYnVmZikJCQkoMHhBNCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX0VORChfYnVmZikJCQkoMHhEMCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX0VORDEoX2J1ZmYpCQkJKDB4RDQgKyAoKF9idWZmKSAqIDgpKQorI2RlZmluZSBWSURXX0JVRl9TSVpFKF9idWZmKQkJCSgweDEwMCArICgoX2J1ZmYpICogNCkpCisKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTUFTSwkJKDB4MWZmZiA8PCAxMykKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfU0hJRlQJCSgxMykKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTElNSVQJCSgweDFmZmYpCisjZGVmaW5lIFZJRFdfQlVGX1NJWkVfT0ZGU0VUKF94KQkJKChfeCkgPDwgMTMpCisKKyNkZWZpbmUgVklEV19CVUZfU0laRV9QQUdFV0lEVEhfTUFTSwkJKDB4MWZmZiA8PCAwKQorI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSF9TSElGVAkJKDApCisjZGVmaW5lIFZJRFdfQlVGX1NJWkVfUEFHRVdJRFRIX0xJTUlUCQkoMHgxZmZmKQorI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSChfeCkJCSgoX3gpIDw8IDApCisKKy8qIEludGVycnVwdCBjb250cm9scyBhbmQgc3RhdHVzICovCisKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUxfTUFTSwkJKDB4M2YgPDwgMjApCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX1NISUZUCQkoMjApCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX0xJTUlUCQkoMHgzZikKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUwoX3gpCQkoKF94KSA8PCAyMCkKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9TWVNNQUlOQ09OCQkoMSA8PCAxOSkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfU1lTU1VCQ09OCQkoMSA8PCAxOCkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfSTgwSUZET05FCQkoMSA8PCAxNykKKworI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9NQVNLCQkoMHgzIDw8IDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9TSElGVAkJKDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9CQUNLUE9SQ0gJCSgweDAgPDwgMTUpCisjZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX1ZTWU5DCQkoMHgxIDw8IDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9BQ1RJVkUJCSgweDIgPDwgMTUpCisjZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX0ZST05UUE9SQ0gJCSgweDMgPDwgMTUpCisKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDEJCQkoMSA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTk9ORQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfQkFDS1BPUkNICQkoMHgxIDw8IDE0KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMV9WU1lOQwkJKDB4MiA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfRlJPTlRQT1JDSAkJKDB4MyA8PCAxNCkKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9GUkFNRQkJCSgxIDw8IDEyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX01BU0sJCSgweDdmIDw8IDUpCisjZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfU0hJRlQJCSg1KQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzAJCSgweDEgPDwgNSkKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1cxCQkoMHgyIDw8IDUpCisKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfTUFTSwkJKDB4NyA8PCAyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9TSElGVAkJKDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX1RPMjVQQwkJKDB4MCA8PCAyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9UTzUwUEMJCSgweDEgPDwgMikKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfVE83NVBDCQkoMHgyIDw8IDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0VNUFRZCQkoMHgzIDw8IDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0ZVTEwJCSgweDQgPDwgMikKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9GSUZPX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfRklGT19TSElGVAkJKDApCisjZGVmaW5lIFZJRElOVENPTjBfSU5UX0VOQUJMRQkJCSgxIDw8IDApCisKKyNkZWZpbmUgVklESU5UQ09OMQkJCQkoMHgxMzQpCisjZGVmaW5lIFZJRElOVENPTjFfSU5UX0kxODAJCQkoMSA8PCAyKQorI2RlZmluZSBWSURJTlRDT04xX0lOVF9GUkFNRQkJCSgxIDw8IDEpCisjZGVmaW5lIFZJRElOVENPTjFfSU5UX0ZJRk8JCQkoMSA8PCAwKQorCisvKiBXaW5kb3cgY29sb3VyLWtleSBjb250cm9sIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFd4S0VZQ09OMF9LRVlCTF9FTgkJCSgxIDw8IDI2KQorI2RlZmluZSBXeEtFWUNPTjBfS0VZRU5fRgkJCSgxIDw8IDI1KQorI2RlZmluZSBXeEtFWUNPTjBfRElSQ09OCQkJKDEgPDwgMjQpCisjZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKKyNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfU0hJRlQJCQkoMCkKKyNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfTElNSVQJCQkoMHhmZmZmZmYpCisjZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZKF94KQkJCSgoX3gpIDw8IDApCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTUFTSwkJCSgweGZmZmZmZiA8PCAwKQorI2RlZmluZSBXeEtFWUNPTjFfQ09MVkFMX1NISUZUCQkJKDApCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTElNSVQJCQkoMHhmZmZmZmYpCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUwoX3gpCQkJKChfeCkgPDwgMCkKKworCisvKiBXaW5kb3cgYmxhbmtpbmcgKE1BUCkgKi8KKworI2RlZmluZSBXSU54TUFQX01BUAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX1NISUZUCQkoMCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX0xJTUlUCQkoMHhmZmZmZmYpCisjZGVmaW5lIFdJTnhNQVBfTUFQX0NPTE9VUihfeCkJCQkoKF94KSA8PCAwKQorCisjZGVmaW5lIFdQQUxDT05fUEFMX1VQREFURQkJCSgxIDw8IDkpCisjZGVmaW5lIFdQQUxDT05fVzFQQUxfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF9TSElGVAkJCSgzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzI1QlBQX0E4ODgJCSgweDAgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8yNEJQUAkJCSgweDEgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8xOUJQUF9BNjY2CQkoMHgyIDw8IDMpCisjZGVmaW5lIFdQQUxDT05fVzFQQUxfMThCUFBfQTY2NQkJKDB4MyA8PCAzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE4QlBQCQkJKDB4NCA8PCAzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE2QlBQX0E1NTUJCSgweDUgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8xNkJQUF81NjUJCQkoMHg2IDw8IDMpCisKKyNkZWZpbmUgV1BBTENPTl9XMFBBTF9NQVNLCQkJKDB4NyA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMX1NISUZUCQkJKDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMjVCUFBfQTg4OAkJKDB4MCA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzI0QlBQCQkJKDB4MSA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE5QlBQX0E2NjYJCSgweDIgPDwgMCkKKyNkZWZpbmUgV1BBTENPTl9XMFBBTF8xOEJQUF9BNjY1CQkoMHgzIDw8IDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMThCUFAJCQkoMHg0IDw8IDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMTZCUFBfQTU1NQkJKDB4NSA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE2QlBQXzU2NQkJCSgweDYgPDwgMCkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtaWljLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1paWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtaWljLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWlpYy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1pcnF0eXBlLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1pcnF0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzY2QzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWlycXR5cGUuaApAQCAtMCwwICsxLDIxIEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1pcnF0eXBlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQyAtIElSUSBkZXRlY3Rpb24gdHlwZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiB2YWx1ZXMgZm9yIFMzQzI0MTBfRVhUSU5UMC8xLzIgYW5kIG90aGVyIGNwdXMgaW4gdGhlIHNlcmllcywgaW5jbHVkaW5nCisgKiB0aGUgUzNDNjRYWAorKi8KKyNkZWZpbmUgUzNDMjQxMF9FWFRJTlRfTE9XTEVWCSAoMHgwMCkKKyNkZWZpbmUgUzNDMjQxMF9FWFRJTlRfSElMRVYJICgweDAxKQorI2RlZmluZSBTM0MyNDEwX0VYVElOVF9GQUxMRURHRQkgKDB4MDIpCisjZGVmaW5lIFMzQzI0MTBfRVhUSU5UX1JJU0VFREdFCSAoMHgwNCkKKyNkZWZpbmUgUzNDMjQxMF9FWFRJTlRfQk9USEVER0UJICgweDA2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtbmFuZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1uYW5kLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLW5hbmQuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtcnRjLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtcnRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXJ0Yy5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZGhjaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2RoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQwNDlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNkaGNpLmgKQEAgLTAsMCArMSw4NyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2RoY2kuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIFBsYXRmb3JtIC0gU0RIQ0kgKEhTTU1DKSByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9TM0NfU0RIQ0lfUkVHU19ICisjZGVmaW5lIF9fUExBVF9TM0NfU0RIQ0lfUkVHU19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX1NESENJX0NPTlRST0wyCQkJKDB4ODApCisjZGVmaW5lIFMzQ19TREhDSV9DT05UUk9MMwkJCSgweDg0KQorI2RlZmluZSBTM0M2NFhYX1NESENJX0NPTlRST0w0CQkJKDB4OEMpCisKKyNkZWZpbmUgUzNDNjRYWF9TREhDSV9DVFJMMl9FTlNUQUFTWU5DQ0xSCSgxIDw8IDMxKQorI2RlZmluZSBTM0M2NFhYX1NESENJX0NUUkwyX0VOQ01EQ05GTVNLCQkoMSA8PCAzMCkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0NESU5WUlhEMwkJKDEgPDwgMjkpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9TTENBUkRPVVQJCSgxIDw8IDI4KQorCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9GTFRDTEtTRUxfTUFTSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0ZMVENMS1NFTF9TSElGVAkJKDI0KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfRkxUQ0xLU0VMKF94KQkJKChfeCkgPDwgMjQpCisKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0xWTERBVF9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0xWTERBVF9TSElGVAkJKDE2KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfTFZMREFUKF94KQkJKChfeCkgPDwgMTYpCisKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0VORkJDTEtUWAkJKDEgPDwgMTUpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9FTkZCQ0xLUlgJCSgxIDw8IDE0KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfU0RDRFNFTAkJCSgxIDw8IDEzKQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfU0RTSUdQQwkJCSgxIDw8IDEyKQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfRU5CVVNZQ0hLVFhTVEFSVAkoMSA8PCAxMSkKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfREZDTlRfTUFTSwkJKDB4MyA8PCA5KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfREZDTlRfU0hJRlQJCSg5KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfREZDTlRfTk9ORQkJKDB4MCA8PCA5KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfREZDTlRfNFNEQ0xLCQkoMHgxIDw8IDkpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9ERkNOVF8xNlNEQ0xLCQkoMHgyIDw8IDkpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9ERkNOVF82NFNEQ0xLCQkoMHgzIDw8IDkpCisKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0VOQ0xLT1VUSE9MRAkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX1JXQUlUTU9ERQkJKDEgPDwgNykKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0RJU0JVRlJECQkoMSA8PCA2KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfU0VMQkFTRUNMS19NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9TRUxCQVNFQ0xLX1NISUZUCSg0KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDJfUFdSU1lOQwkJCSgxIDw8IDMpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMMl9FTkNMS09VVE1TS0NPTgkJKDEgPDwgMSkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwyX0hXSU5JVEZJTgkJKDEgPDwgMCkKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwzCQkJKDEgPDwgMzEpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMM19GQ1NFTDIJCQkoMSA8PCAyMykKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwzX0ZDU0VMMQkJCSgxIDw8IDE1KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwwCQkJKDEgPDwgNykKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBM19NQVNLCQkoMHg3ZiA8PCAyNCkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwzX0ZJQTNfU0hJRlQJCSgyNCkKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwzX0ZJQTMoX3gpCQkoKF94KSA8PCAyNCkKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBMl9NQVNLCQkoMHg3ZiA8PCAxNikKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwzX0ZJQTJfU0hJRlQJCSgxNikKKyNkZWZpbmUgUzNDX1NESENJX0NUUkwzX0ZJQTIoX3gpCQkoKF94KSA8PCAxNikKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBMV9NQVNLCQkoMHg3ZiA8PCA4KQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBMV9TSElGVAkJKDgpCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMM19GSUExKF94KQkJKChfeCkgPDwgOCkKKworI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBMF9NQVNLCQkoMHg3ZiA8PCAwKQorI2RlZmluZSBTM0NfU0RIQ0lfQ1RSTDNfRklBMF9TSElGVAkJKDApCisjZGVmaW5lIFMzQ19TREhDSV9DVFJMM19GSUEwKF94KQkJKChfeCkgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX1NESENJX0NPTlRST0w0X0RSSVZFX01BU0sJKDB4MyA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TREhDSV9DT05UUk9MNF9EUklWRV9TSElGVAkoMTYpCisjZGVmaW5lIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDRfRFJJVkVfMm1BCSgweDAgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDRfRFJJVkVfNG1BCSgweDEgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDRfRFJJVkVfN21BCSgweDIgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDRfRFJJVkVfOW1BCSgweDMgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9TREhDSV9DT05UUk9MNF9CVVNZCQkoMSkKKworI2VuZGlmIC8qIF9fUExBVF9TM0NfU0RIQ0lfUkVHU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCmluZGV4IGEwZGFhNjQuLjQ4N2Q3ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCkBAIC03Nyw2ICs3NywxMiBAQAogI2RlZmluZSBTM0MyNDQwX1VDT05fRkNMSwkgICgzPDwxMCkKICNkZWZpbmUgUzNDMjQ0M19VQ09OX0VQTEwJICAoMzw8MTApCiAKKyNkZWZpbmUgUzNDNjQwMF9VQ09OX0NMS01BU0sJKDM8PDEwKQorI2RlZmluZSBTM0M2NDAwX1VDT05fUENMSwkoMDw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9QQ0xLMgkoMjw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9VQ0xLMAkoMTw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9VQ0xLMQkoMzw8MTApCisKICNkZWZpbmUgUzNDMjQ0MF9VQ09OMl9GQ0xLX0VOCSAgKDE8PDE1KQogI2RlZmluZSBTM0MyNDQwX1VDT04wX0RJVk1BU0sJICAoMTUgPDwgMTIpCiAjZGVmaW5lIFMzQzI0NDBfVUNPTjFfRElWTUFTSwkgICgxNSA8PCAxMikKQEAgLTE0OSw2ICsxNTUsMTQgQEAKICNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfUlhNQVNLCSAgKDE1PDwwKQogI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9SWFNISUZUCSAgKDApCiAKKy8qIFVGU1RBVCBTM0MyNEEwICovCisjZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1RYRlVMTAkgICgxIDw8IDE0KQorI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9SWEZVTEwJICAoMSA8PCA2KQorI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9UWE1BU0sJICAoNjMgPDwgOCkKKyNkZWZpbmUgUzNDMjRBMF9VRlNUQVRfVFhTSElGVAkgICg4KQorI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9SWE1BU0sJICAoNjMpCisjZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1JYU0hJRlQJICAoMCkKKwogLyogVUZTVEFUIFMzQzI0NDMgc2FtZSBhcyBTM0MyNDQwICovCiAjZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYRlVMTAkgICgxPDwxNCkKICNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhGVUxMCSAgKDE8PDYpCkBAIC0yMjQsNyArMjM4LDcgQEAKICAqIG9yIHBsYXRmb3JtX2FkZF9kZXZpY2UoKSBiZWZvcmUgdGhlIGNvbnNvbGVfaW5pdGNhbGwoKQogKi8KIAotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzNdOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCmluZGV4IGNjMGVlZGQuLmQwOTdkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtdGltZXIuaApAQCAtMTAsNyArMTAsNiBAQAogICogUzNDMjQxMCBUaW1lciBjb25maWd1cmF0aW9uCiAqLwogCi0KICNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1RJTUVSX0gKICNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1RJTUVSX0gKIApAQCAtMjEsNiArMjAsOCBAQAogI2RlZmluZSBTM0MyNDEwX1RDRkcxCSAgICAgIFMzQ19USU1FUlJFRygweDA0KQogI2RlZmluZSBTM0MyNDEwX1RDT04JICAgICAgUzNDX1RJTUVSUkVHKDB4MDgpCiAKKyNkZWZpbmUgUzNDNjRYWF9USU5UX0NTVEFUICAgIFMzQ19USU1FUlJFRygweDQ0KQorCiAjZGVmaW5lIFMzQzI0MTBfVENGR19QUkVTQ0FMRVIwX01BU0sgKDI1NTw8MCkKICNkZWZpbmUgUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSyAoMjU1PDw4KQogI2RlZmluZSBTM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9TSElGVCAoOCkKQEAgLTcyLDYgKzczLDE0IEBACiAjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYX1RDTEsgICAgKDQ8PDApCiAjZGVmaW5lIFMzQzI0MTBfVENGRzFfTVVYX01BU0sJICAoMTU8PDApCiAKKyNkZWZpbmUgUzNDNjRYWF9UQ0ZHMV9NVVhfRElWMQkgICgwPDwwKQorI2RlZmluZSBTM0M2NFhYX1RDRkcxX01VWF9ESVYyCSAgKDE8PDApCisjZGVmaW5lIFMzQzY0WFhfVENGRzFfTVVYX0RJVjQJICAoMjw8MCkKKyNkZWZpbmUgUzNDNjRYWF9UQ0ZHMV9NVVhfRElWOCAgICAoMzw8MCkKKyNkZWZpbmUgUzNDNjRYWF9UQ0ZHMV9NVVhfRElWMTYgICAoNDw8MCkKKyNkZWZpbmUgUzNDNjRYWF9UQ0ZHMV9NVVhfVENMSyAgICAoNTw8MCkgIC8qIDMgc2V0cyBvZiBUQ0xLICovCisjZGVmaW5lIFMzQzY0WFhfVENGRzFfTVVYX01BU0sJICAoMTU8PDApCisKICNkZWZpbmUgUzNDMjQxMF9UQ0ZHMV9TSElGVCh4KQkgICgoeCkgKiA0KQogCiAvKiBmb3IgZWFjaCB0aW1lciwgd2UgaGF2ZSBhbiBjb3VudCBidWZmZXIsIGFuIGNvbXBhcmUgYnVmZmVyIGFuZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXdhdGNoZG9nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXdhdGNoZG9nLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9zZGhjaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3NkaGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjYTM5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9zZGhjaS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvc2RoY2kuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIFBsYXRmb3JtIC0gU0RIQ0kgKEhTTU1DKSBwbGF0Zm9ybSBkYXRhIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQ19TREhDSV9ICisjZGVmaW5lIF9fUExBVF9TM0NfU0RIQ0lfSCBfX0ZJTEVfXworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IG1tY19ob3N0Oworc3RydWN0IG1tY19jYXJkOworc3RydWN0IG1tY19pb3M7CisKKy8qKgorICogc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSgpIC0gUGxhdGZvcm0gZGV2aWNlIGRhdGEgZm9yIFNhbXN1bmcgU0RIQ0kKKyAqIEBtYXhfd2lkdGg6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBkYXRhIGJpdHMgc3VwcG9ydGVkLgorICogQGhvc3RfY2FwczogU3RhbmRhcmQgTU1DIGhvc3QgY2FwYWJpbGl0aWVzIGJpdCBmaWVsZC4KKyAqIEBjZmdfZ3BpbzogQ29uZmlndXJlIHRoZSBHUElPIGZvciBhIHNwZWNpZmljIGNhcmQgYml0LXdpZHRoCisgKiBAY2ZnX2NhcmQ6IENvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlIGZvciBhIHNwZWNpZmljIGNhcmQgYW5kIHNwZWVkLiBUaGlzCisgKiAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSB0aGUgY29udHJvbGxlcnMgYW5kL29yIEdQSU8gYmxvY2tzIHJlcXVpcmUgdGhlCisgKgkgICAgICBjaGFuZ2luZyBvZiBkcml2ZXItc3RyZW5ndGggYW5kIG90aGVyIGNvbnRyb2xzIGRlcGVuZGFudCBvbgorICoJICAgICAgdGhlIGNhcmQgYW5kIHNwZWVkIG9mIG9wZXJhdGlvbi4KKyAqCisgKiBJbml0aWFsaXNhdGlvbiBkYXRhIHNwZWNpZmljIHRvIGVpdGhlciB0aGUgbWFjaGluZSBvciB0aGUgcGxhdGZvcm0KKyAqIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byB1c2Ugb3IgY2FsbC1iYWNrIHdoZW4gY29uZmlndXJpbmcgZ3BpbyBvcgorICogY2FyZCBzcGVlZCBpbmZvcm1hdGlvbi4KKyovCitzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHsKKwl1bnNpZ25lZCBpbnQJbWF4X3dpZHRoOworCXVuc2lnbmVkIGludAlob3N0X2NhcHM7CisKKwljaGFyCQkqKmNsb2NrczsJLyogc2V0IG9mIGNsb2NrIHNvdXJjZXMgKi8KKworCXZvaWQJKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpOworCXZvaWQJKCpjZmdfY2FyZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJICAgIHZvaWQgX19pb21lbSAqcmVnYmFzZSwKKwkJCSAgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAorCQkJICAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7Cit9OworCisvKioKKyAqIHMzY19zZGhjaTBfc2V0X3BsYXRkYXRhIC0gU2V0IHBsYXRmb3JtIGRhdGEgZm9yIFMzQyBTREhDSSBkZXZpY2UuCisgKiBAcGQ6IFBsYXRmb3JtIGRhdGEgdG8gcmVnaXN0ZXIgdG8gZGV2aWNlLgorICoKKyAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBwbGF0Zm9ybSBkYXRhIGZvciB1c2Ugd2l0aGUgUzNDIFNESENJIGRldmljZS4KKyAqIFRoZSBjYWxsIHdpbGwgY29weSB0aGUgcGxhdGZvcm0gZGF0YSwgc28gdGhlIGJvYXJkIGRlZmluaXRpb25zIGNhbgorICogbWFrZSB0aGUgc3RydWN0dXJlIGl0c2VsZiBfX2luaXRkYXRhLgorICovCitleHRlcm4gdm9pZCBzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCk7CitleHRlcm4gdm9pZCBzM2Nfc2RoY2kxX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCk7CisKKy8qIERlZmF1bHQgcGxhdGZvcm0gZGF0YSwgZXhwb3J0ZWQgc28gdGhhdCBwZXItY3B1IGluaXRpYWxpc2F0aW9uIGNhbgorICogc2V0IHRoZSBjb3JyZWN0IG9uZSB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGNwdSB0eXBlIHNlbGVjdGVkLgorKi8KKworZXh0ZXJuIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jMF9kZWZfcGxhdGRhdGE7CitleHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGF2YWlsYWJsaXR5ICovCisKKyNpZmRlZiBDT05GSUdfUzNDNjQxMF9TRVRVUF9TREhDSQorZXh0ZXJuIGNoYXIgKnMzYzY0MTBfaHNtbWNfY2xrc3Jjc1s0XTsKKworZXh0ZXJuIHZvaWQgczNjNjQxMF9zZXR1cF9zZGhjaTBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CitleHRlcm4gdm9pZCBzM2M2NDEwX3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKKworZXh0ZXJuIHZvaWQgczNjNjQxMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCQkgICB2b2lkIF9faW9tZW0gKnIsCisJCQkJCSAgIHN0cnVjdCBtbWNfaW9zICppb3MsCisJCQkJCSAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQworc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkKK3sKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NDEwX2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NDEwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MTBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DICovCisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzEKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKHZvaWQpCit7CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczNjNjQxMF9oc21tY19jbGtzcmNzOworCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczNjNjQxMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW87CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzM2M2NDEwX3NldHVwX3NkaGNpMF9jZmdfY2FyZDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQzEgKi8KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1MzQzY0MTBfU0VUVVBfU0RIQ0kgKi8KKworI2VuZGlmIC8qIF9fUExBVF9TM0NfU0RIQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKaW5kZXggNGRmMDA2Yi4uNjA2MWRlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC0yOCw3ICsyOCw3IEBACiAvKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLwogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXdhdGNoZG9nLmg+CiAKIC8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KICN1bmRlZiBTM0MyNDEwX1dET0dSRUcKQEAgLTM3LDcgKzM3LDcgQEAKIC8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLwogI2RlZmluZSBGSUZPX01BWAkgKDE0KQogCi0jZGVmaW5lIHVhcnRfYmFzZSBTM0MyNFhYX1BBX1VBUlQgKyAoMHg0MDAwKkNPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUKQorI2RlZmluZSB1YXJ0X2Jhc2UgUzNDX1BBX1VBUlQgKyAoUzNDX1VBUlRfT0ZGU0VUICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKIHVhcnRfd3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKQEAgLTEzOSw2ICsxMzksMjggQEAKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqZXJyKTsKIAorI2lmZGVmIENPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2VuYWJsZV91YXJ0X2ZpZm8odm9pZCkKK3sKKwl1MzIgZmlmb2NvbiA9IHVhcnRfcmQoUzNDMjQxMF9VRkNPTik7CisKKwlpZiAoIShmaWZvY29uICYgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkpIHsKKwkJZmlmb2NvbiB8PSBTM0MyNDEwX1VGQ09OX1JFU0VUQk9USDsKKwkJdWFydF93cihTM0MyNDEwX1VGQ09OLCBmaWZvY29uKTsKKworCQkvKiB3YWl0IGZvciBmaWZvIHJlc2V0IHRvIGNvbXBsZXRlICovCisJCXdoaWxlICgxKSB7CisJCQlmaWZvY29uID0gdWFydF9yZChTM0MyNDEwX1VGQ09OKTsKKwkJCWlmICghKGZpZm9jb24gJiBTM0MyNDEwX1VGQ09OX1JFU0VUQk9USCkpCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisjZWxzZQorI2RlZmluZSBhcmNoX2VuYWJsZV91YXJ0X2ZpZm8oKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisKIHN0YXRpYyB2b2lkCiBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQogewpAQCAtMTQ5LDYgKzE3MSwxMiBAQAogCiAJYXJjaF9kZXRlY3RfY3B1KCk7CiAJYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpOworCisJLyogRW5hYmxlIHRoZSBVQVJUIEZJRk9zIGlmIHRoZXkgd2hlcmUgbm90IGVuYWJsZWQgYW5kIG91cgorCSAqIGNvbmZpZ3VyYXRpb24gc2F5cyB3ZSBzaG91bGQgdHVybiB0aGVtIG9uLgorCSAqLworCisJYXJjaF9lbmFibGVfdWFydF9maWZvKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5pdC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTBlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbml0LmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2luaXQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIHNlcmllcyBDUFUgaW5pdGlhbGlzYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3RhYmxlICpjcHU7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3RhYmxlICogX19pbml0IHMzY19sb29rdXBfY3B1KHVuc2lnbmVkIGxvbmcgaWRjb2RlLAorCQkJCQkJc3RydWN0IGNwdV90YWJsZSAqdGFiLAorCQkJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCAhPSAwOyBjb3VudC0tLCB0YWIrKykgeworCQlpZiAoKGlkY29kZSAmIHRhYi0+aWRtYXNrKSA9PSB0YWItPmlkY29kZSkKKwkJCXJldHVybiB0YWI7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19pbml0IHMzY19pbml0X2NwdSh1bnNpZ25lZCBsb25nIGlkY29kZSwKKwkJCSBzdHJ1Y3QgY3B1X3RhYmxlICpjcHV0YWIsIHVuc2lnbmVkIGludCBjcHV0YWJfc2l6ZSkKK3sKKwljcHUgPSBzM2NfbG9va3VwX2NwdShpZGNvZGUsIGNwdXRhYiwgY3B1dGFiX3NpemUpOworCisJaWYgKGNwdSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBDUFUgdHlwZSAweCUwOGx4XG4iLCBpZGNvZGUpOworCQlwYW5pYygiVW5rbm93biBTM0MyNFhYIENQVSIpOworCX0KKworCXByaW50aygiQ1BVICVzIChpZCAweCUwOGx4KVxuIiwgY3B1LT5uYW1lLCBpZGNvZGUpOworCisJaWYgKGNwdS0+bWFwX2lvID09IE5VTEwgfHwgY3B1LT5pbml0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDUFUgJXMgc3VwcG9ydCBub3QgZW5hYmxlZFxuIiwgY3B1LT5uYW1lKTsKKwkJcGFuaWMoIlVuc3VwcG9ydGVkIFNhbXN1bmcgQ1BVIik7CisJfQorCisJY3B1LT5tYXBfaW8oKTsKK30KKworLyogczNjMjR4eF9pbml0X2Nsb2NrcworICoKKyAqIEluaXRpYWxpc2UgdGhlIGNsb2NrIHN1YnN5c3RlbSBhbmQgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICogZ2l2ZW4gbWFzdGVyIGNyeXN0YWwgdmFsdWUuCisgKgorICogeHRhbCAgPSAwIC0+IHVzZSBkZWZhdWx0IFBMTCBjcnlzdGFsIHZhbHVlIChub3JtYWxseSAxMk1IeikKKyAqICAgICAgIT0gMCAtPiBQTEwgY3J5c3RhbCB2YWx1ZSBpbiBIegorKi8KKwordm9pZCBfX2luaXQgczNjMjR4eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlpZiAoeHRhbCA9PSAwKQorCQl4dGFsID0gMTIqMTAwMCoxMDAwOworCisJaWYgKGNwdSA9PSBOVUxMKQorCQlwYW5pYygiczNjMjR4eF9pbml0X2Nsb2Nrczogbm8gY3B1IHNldHVwP1xuIik7CisKKwlpZiAoY3B1LT5pbml0X2Nsb2NrcyA9PSBOVUxMKQorCQlwYW5pYygiczNjMjR4eF9pbml0X2Nsb2NrczogY3B1IGhhcyBubyBjbG9jayBpbml0XG4iKTsKKwllbHNlCisJCShjcHUtPmluaXRfY2xvY2tzKSh4dGFsKTsKK30KKworLyogdWFydCBtYW5hZ2VtZW50ICovCisKK3N0YXRpYyBpbnQgbnJfdWFydHMgX19pbml0ZGF0YSA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHVhcnRfY2Znc1tDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOworCisvKiBzM2MyNHh4X2luaXRfdWFydGRldnMKKyAqCisgKiBjb3B5IHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gZGF0YSBhbmQgY29uZmlndXJhdGlvbiBpbnRvIG91ciBjZW50cmFsCisgKiBzZXQgb2YgZGV2aWNlcywgYmVmb3JlIHRoZSBkYXRhIGlzIHRocm93biBhd2F5IGFmdGVyIHRoZSBpbml0IHByb2Nlc3MuCisgKgorICogVGhpcyBhbHNvIGZpbGxzIGluIHRoZSBhcnJheSBwYXNzZWQgdG8gdGhlIHNlcmlhbCBkcml2ZXIgZm9yIHRoZQorICogZWFybHkgaW5pdGlhbGlzYXRpb24gb2YgdGhlIGNvbnNvbGUuCisqLworCit2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfdWFydGRldnMoY2hhciAqbmFtZSwKKwkJCQkgIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzICpyZXMsCisJCQkJICBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OworCXN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZ3B0ciA9IHVhcnRfY2ZnczsKKwlzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyAqcmVzcDsKKwlpbnQgdWFydDsKKworCW1lbWNweShjZmdwdHIsIGNmZywgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcpICogbm8pOworCisJZm9yICh1YXJ0ID0gMDsgdWFydCA8IG5vOyB1YXJ0KyssIGNmZysrLCBjZmdwdHIrKykgeworCQlwbGF0ZGV2ID0gczNjMjR4eF91YXJ0X3NyY1tjZmdwdHItPmh3cG9ydF07CisKKwkJcmVzcCA9IHJlcyArIGNmZ3B0ci0+aHdwb3J0OworCisJCXMzYzI0eHhfdWFydF9kZXZzW3VhcnRdID0gcGxhdGRldjsKKworCQlwbGF0ZGV2LT5uYW1lID0gbmFtZTsKKwkJcGxhdGRldi0+cmVzb3VyY2UgPSByZXNwLT5yZXNvdXJjZXM7CisJCXBsYXRkZXYtPm51bV9yZXNvdXJjZXMgPSByZXNwLT5ucl9yZXNvdXJjZXM7CisKKwkJcGxhdGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmdwdHI7CisJfQorCisJbnJfdWFydHMgPSBubzsKK30KKwordm9pZCBfX2luaXQgczNjMjR4eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQoreworCWlmIChjcHUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGNwdS0+aW5pdF91YXJ0cyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiczNjMjR4eF9pbml0X3VhcnRzOiBjcHUgaGFzIG5vIHVhcnQgaW5pdFxuIik7CisJfSBlbHNlCisJCShjcHUtPmluaXRfdWFydHMpKGNmZywgbm8pOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzM2NfYXJjaF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCS8vIGRvIHRoZSBjb3JyZWN0IGluaXQgZm9yIGNwdQorCisJaWYgKGNwdSA9PSBOVUxMKQorCQlwYW5pYygiczNjX2FyY2hfaW5pdDogTlVMTCBjcHVcbiIpOworCisJcmV0ID0gKGNwdS0+aW5pdCkoKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzM2MyNHh4X3VhcnRfZGV2cywgbnJfdWFydHMpOworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjX2FyY2hfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wd20tY2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL3B3bS1jbG9jay5jCmluZGV4IDNmYWQ2OGEuLmEzMTgyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYy9wd20tY2xvY2suYwpAQCAtMTQsMjAgKzE0LDIwIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotCiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxtYWNoL3B3bS1jbG9jay5oPgogCiAvKiBFYWNoIG9mIHRoZSB0aW1lcnMgMCB0aHJvdWdoIDUgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCiAgKiBjbG9jayB0cmVlLCB3aXRoIHRoZSBpbnB1dHMgZGVwZW5kaW5nIG9uIHRoZSB0aW1lcnMuCkBAIC03MywxMSArNzMsMTMgQEAKICAqIHRjbGsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wd21fc2NhbGVyX2dldHJhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHN0cnVjdCBjbGsgY2xrX3RpbWVyX3NjYWxlcltdOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHdtX3NjYWxlcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyB0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOwogCi0JaWYgKGNsay0+aWQgPT0gMSkgeworCWlmIChjbGsgPT0gJmNsa190aW1lcl9zY2FsZXJbMV0pIHsKIAkJdGNmZzAgJj0gUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSzsKIAkJdGNmZzAgPj49IFMzQzI0MTBfVENGR19QUkVTQ0FMRVIxX1NISUZUOwogCX0gZWxzZSB7CkBAIC04NywxOCArODksNjEgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICh0Y2ZnMCArIDEpOwogfQogCi0vKiBUT0RPIC0gYWRkIHNldCByYXRlIGNhbGxzLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV9zY2FsZXJfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBkaXZpc29yID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdmlzb3IgPiAyNTYpCisJCWRpdmlzb3IgPSAyNTY7CisJZWxzZSBpZiAoZGl2aXNvciA8IDIpCisJCWRpdmlzb3IgPSAyOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2aXNvcjsKK30KKworc3RhdGljIGludCBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJvdW5kID0gY2xrX3B3bV9zY2FsZXJfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCXVuc2lnbmVkIGxvbmcgdGNmZzA7CisJdW5zaWduZWQgbG9uZyBkaXZpc29yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkaXZpc29yID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJvdW5kOworCWRpdmlzb3ItLTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOworCisJaWYgKGNsayA9PSAmY2xrX3RpbWVyX3NjYWxlclsxXSkgeworCQl0Y2ZnMCAmPSB+UzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSzsKKwkJdGNmZzAgfD0gZGl2aXNvciA8PCBTM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9TSElGVDsKKwl9IGVsc2UgeworCQl0Y2ZnMCAmPSB+UzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjBfTUFTSzsKKwkJdGNmZzAgfD0gZGl2aXNvcjsKKwl9CisKKwlfX3Jhd193cml0ZWwodGNmZzAsIFMzQzI0MTBfVENGRzApOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdGltZXJfc2NhbGVyW10gPSB7CiAJWzBdCT0gewogCQkubmFtZQkJPSAicHdtLXNjYWxlcjAiLAogCQkuaWQJCT0gLTEsCi0JCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldHJhdGUsCisJCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldF9yYXRlLAorCQkuc2V0X3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZSwKKwkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlLAogCX0sCiAJWzFdCT0gewogCQkubmFtZQkJPSAicHdtLXNjYWxlcjEiLAogCQkuaWQJCT0gLTEsCi0JCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldHJhdGUsCisJCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldF9yYXRlLAorCQkuc2V0X3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZSwKKwkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlLAogCX0sCiB9OwogCkBAIC0xMjMsMTEgKzE2OCw2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjbGssIHN0cnVjdCBwd21fdGRpdl9jbGssIGNsayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y2ZnX3RvX2Rpdmlzb3IodW5zaWduZWQgbG9uZyB0Y2ZnMSkKLXsKLQlyZXR1cm4gMSA8PCAoMSArIHRjZmcxKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV90ZGl2X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHRjZmcxID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMSk7CkBAIC0xMzYsNyArMTc2LDcgQEAKIAl0Y2ZnMSA+Pj0gUzNDMjQxMF9UQ0ZHMV9TSElGVChjbGstPmlkKTsKIAl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOwogCi0JaWYgKHRjZmcxID09IFMzQzI0MTBfVENGRzFfTVVYX1RDTEspCisJaWYgKHB3bV9jZmdfc3JjX2lzX3RjbGsodGNmZzEpKQogCQlkaXZpc29yID0gdG9fdGRpdihjbGspLT5kaXZpc29yOwogCWVsc2UKIAkJZGl2aXNvciA9IHRjZmdfdG9fZGl2aXNvcih0Y2ZnMSk7CkBAIC0xNTMsNyArMTkzLDkgQEAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAJZGl2aXNvciA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKIAotCWlmIChkaXZpc29yIDw9IDIpCisJaWYgKGRpdmlzb3IgPD0gMSAmJiBwd21fdGRpdl9oYXNfZGl2MSgpKQorCQlkaXZpc29yID0gMTsKKwllbHNlIGlmIChkaXZpc29yIDw9IDIpCiAJCWRpdmlzb3IgPSAyOwogCWVsc2UgaWYgKGRpdmlzb3IgPD0gNCkKIAkJZGl2aXNvciA9IDQ7CkBAIC0xNjcsMjUgKzIwOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wd21fdGRpdl9iaXRzKHN0cnVjdCBwd21fdGRpdl9jbGsgKmRpdmNsaykKIHsKLQl1bnNpZ25lZCBsb25nIGJpdHM7Ci0KLQlzd2l0Y2ggKGRpdmNsay0+ZGl2aXNvcikgewotCWNhc2UgMjoKLQkJYml0cyA9IFMzQzI0MTBfVENGRzFfTVVYX0RJVjI7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJYml0cyA9IFMzQzI0MTBfVENGRzFfTVVYX0RJVjQ7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJYml0cyA9IFMzQzI0MTBfVENGRzFfTVVYX0RJVjg7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JZGVmYXVsdDoKLQkJYml0cyA9IFMzQzI0MTBfVENGRzFfTVVYX0RJVjE2OwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gYml0czsKKwlyZXR1cm4gcHdtX3RkaXZfZGl2X2JpdHMoZGl2Y2xrLT5kaXZpc29yKTsKIH0KIAogc3RhdGljIHZvaWQgY2xrX3B3bV90ZGl2X3VwZGF0ZShzdHJ1Y3QgcHdtX3RkaXZfY2xrICpkaXZjbGspCkBAIC0yMjYsNyArMjUwLDcgQEAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgTVVYIHNldHRpbmdzIGlmIHdlIGFyZSBjdXJyZW50bHkKIAkgKiBzZWxlY3RlZCBhcyB0aGUgY2xvY2sgc291cmNlIGZvciB0aGlzIGNsb2NrLiAqLwogCi0JaWYgKHRjZmcxICE9IFMzQzI0MTBfVENGRzFfTVVYX1RDTEspCisJaWYgKCFwd21fY2ZnX3NyY19pc190Y2xrKHRjZmcxKSkKIAkJY2xrX3B3bV90ZGl2X3VwZGF0ZShkaXZjbGspOwogCiAJcmV0dXJuIDA7CkBAIC0zMTMsNyArMzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUzNDMjQxMF9UQ0ZHMV9TSElGVChpZCk7CiAKIAlpZiAocGFyZW50ID09IHMzYzI0eHhfcHdtY2xrX3RjbGsoaWQpKQotCQliaXRzID0gUzNDMjQxMF9UQ0ZHMV9NVVhfVENMSyA8PCBzaGlmdDsKKwkJYml0cyA9IFMzQ19UQ0ZHMV9NVVhfVENMSyA8PCBzaGlmdDsKIAllbHNlIGlmIChwYXJlbnQgPT0gczNjMjR4eF9wd21jbGtfdGRpdihpZCkpCiAJCWJpdHMgPSBjbGtfcHdtX3RkaXZfYml0cyh0b190ZGl2KHBhcmVudCkpIDw8IHNoaWZ0OwogCWVsc2UKQEAgLTM3NSw3ICszOTksNyBAQAogCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGlkKTsKIAl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOwogCi0JaWYgKHRjZmcxID09IFMzQzI0MTBfVENGRzFfTVVYX1RDTEspCisJaWYgKHB3bV9jZmdfc3JjX2lzX3RjbGsodGNmZzEpKQogCQlwYXJlbnQgPSBzM2MyNHh4X3B3bWNsa190Y2xrKGlkKTsKIAllbHNlCiAJCXBhcmVudCA9IHMzYzI0eHhfcHdtY2xrX3RkaXYoaWQpOwpAQCAtMzgzLDcgKzQwNywxNiBAQAogCXJldHVybiBjbGtfc2V0X3BhcmVudChwd20sIHBhcmVudCk7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IHMzYzI0eHhfcHdtY2xrX2luaXQodm9pZCkKKy8qKgorICogczNjX3B3bWNsa19pbml0KCkgLSBpbml0aWFsaXNlIHB3bSBjbG9ja3MKKyAqCisgKiBJbml0aWFsaXNlIGFuZCByZWdpc3RlciB0aGUgY2xvY2tzIHdoaWNoIHByb3ZpZGUgdGhlIGlucHV0cyBmb3IgdGhlCisgKiBwd20gdGltZXIgYmxvY2tzLgorICoKKyAqIE5vdGUsIHRoaXMgY2FsbCBpcyByZXF1aXJlZCBieSB0aGUgdGltZSBjb3JlLCBzbyBtdXN0IGJlIGNhbGxlZCBhZnRlcgorICogdGhlIGJhc2UgY2xvY2tzIGFyZSBhZGRlZCBhbmQgYmVmb3JlIGFueSBvZiB0aGUgaW5pdGNhbGxzIGFyZSBydW4uCisgKi8KK19faW5pdCB2b2lkIHMzY19wd21jbGtfaW5pdCh2b2lkKQogewogCXN0cnVjdCBjbGsgKmNsa190aW1lcnM7CiAJdW5zaWduZWQgaW50IGNsazsKQEAgLTM5Miw3ICs0MjUsNyBAQAogCWNsa190aW1lcnMgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lcnMiKTsKIAlpZiAoSVNfRVJSKGNsa190aW1lcnMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBhcmVudCBjbG9ja1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAogCWZvciAoY2xrID0gMDsgY2xrIDwgQVJSQVlfU0laRShjbGtfdGltZXJfc2NhbGVyKTsgY2xrKyspIHsKQEAgLTQwMCw3ICs0MzMsNyBAQAogCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfdGltZXJfc2NhbGVyW2Nsa10pOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBhZGRpbmcgcHdtIHNjYWxlciVkIGNsb2NrXG4iLCBjbGspOwotCQkJZ290byBlcnI7CisJCQlyZXR1cm47CiAJCX0KIAl9CiAKQEAgLTQwOCw3ICs0NDEsNyBAQAogCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfdGltZXJfdGNsa1tjbGtdKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWRkaW5nIHB3dyB0Y2xrJWRcbiIsIGNsayk7Ci0JCQlnb3RvIGVycjsKKwkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtNDE2LDcgKzQ0OSw3IEBACiAJCXJldCA9IGNsa19wd21fdGRpdl9yZWdpc3RlcihjbGspOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBhZGRpbmcgcHdtJWQgdGRpdiBjbG9ja1xuIiwgY2xrKTsKLQkJCWdvdG8gZXJyOworCQkJcmV0dXJuOwogCQl9CiAJfQogCkBAIC00MjQsMTQgKzQ1Nyw3IEBACiAJCXJldCA9IGNsa19wd21fdGluX3JlZ2lzdGVyKCZjbGtfdGluW2Nsa10pOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBhZGRpbmcgcHdtJWQgdGluIGNsb2NrXG4iLCBjbGspOwotCQkJZ290byBlcnI7CisJCQlyZXR1cm47CiAJCX0KIAl9Ci0KLQlyZXR1cm4gMDsKLQotIGVycjoKLQlyZXR1cm4gcmV0OwogfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0eHhfcHdtY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtczNjL3RpbWUuYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy90aW1lLmMKaW5kZXggYzUxOTE2Mi4uM2IyN2IyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYy90aW1lLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL3RpY2suaD4KIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtNDMsNiArNDUsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0dmFsOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdXNlY190aWNrczsKIAorI2lmbmRlZiBUSUNLX01BWAorI2RlZmluZSBUSUNLX01BWCAoMHhmZmZmKQorI2VuZGlmCisKICNkZWZpbmUgVElNRVJfVVNFQ19TSElGVCAxNgogCiAvKiB3ZSB1c2UgdGhlIHNoaWZ0ZWQgYXJpdGhtZXRpYyB0byB3b3JrIG91dCB0aGUgcmF0aW8gb2YgdGltZXIgdGlja3MKQEAgLTkxLDIzICs5NywxOSBAQAogICogSVJRcyBhcmUgZGlzYWJsZWQgYmVmb3JlIGVudGVyaW5nIGhlcmUgZnJvbSBkb19nZXR0aW1lb2ZkYXkoKQogICovCiAKLSNkZWZpbmUgU1JDUE5EX1RJTUVSNCAoMTw8KElSUV9USU1FUjQgLSBJUlFfRUlOVDApKQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDEwX2dldHRpbWVvZmZzZXQgKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0ZG9uZTsKLQl1bnNpZ25lZCBsb25nIGlycXBlbmQ7CiAJdW5zaWduZWQgbG9uZyB0dmFsOwogCiAJLyogd29yayBvdXQgaG93IG1hbnkgdGlja3MgaGF2ZSBnb25lIHNpbmNlIGxhc3QgdGltZXIgaW50ZXJydXB0ICovCiAKLSAgICAgICAgdHZhbCA9ICBfX3Jhd19yZWFkbChTM0MyNDEwX1RDTlRPKDQpKTsKKwl0dmFsID0gIF9fcmF3X3JlYWRsKFMzQzI0MTBfVENOVE8oNCkpOwogCXRkb25lID0gdGltZXJfc3RhcnR2YWwgLSB0dmFsOwogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGludGVycnVwdCBwZW5kaW5nICovCiAKLQlpcnFwZW5kID0gX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpOwotCWlmIChpcnFwZW5kICYgU1JDUE5EX1RJTUVSNCkgeworCWlmIChzM2MyNHh4X29zdGltZXJfcGVuZGluZygpKSB7CiAJCS8qIHJlLXJlYWQgdGhlIHRpbWVyLCBhbmQgdHJ5IGFuZCBmaXggdXAgZm9yIHRoZSBtaXNzZWQKIAkJICogaW50ZXJydXB0LiBOb3RlLCB0aGUgaW50ZXJydXB0IG1heSBnbyBvZmYgYmVmb3JlIHRoZQogCQkgKiB0aW1lciBoYXMgcmUtbG9hZGVkIGZyb20gd3JhcHBpbmcuCkBAIC0xNDQsNyArMTQ2LDExIEBACiAJbWFjaGluZV9pc19iYXN0KCkJfHwgXAogCW1hY2hpbmVfaXNfdnIxMDAwKCkJfHwgXAogCW1hY2hpbmVfaXNfYW51YmlzKCkJfHwgXAotCW1hY2hpbmVfaXNfb3NpcmlzKCkgKQorCW1hY2hpbmVfaXNfb3NpcmlzKCkpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0aW47CitzdGF0aWMgc3RydWN0IGNsayAqdGRpdjsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0aW1lcmNsazsKIAogLyoKICAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgpAQCAtMTU5LDEzICsxNjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGNmZzE7CiAJdW5zaWduZWQgbG9uZyB0Y2ZnMDsKIAotCXRjbnQgPSAweGZmZmY7ICAvKiBkZWZhdWx0IHZhbHVlIGZvciB0Y250ICovCi0KLQkvKiByZWFkIHRoZSBjdXJyZW50IHRpbWVyIGNvbmZpZ3VyYXRpb24gYml0cyAqLwotCi0JdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7Ci0JdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQl0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOworCXRjbnQgPSBUSUNLX01BWDsgIC8qIGRlZmF1bHQgdmFsdWUgZm9yIHRjbnQgKi8KIAogCS8qIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGZvciB3aGljaGV2ZXIgbWFjaGluZSBpcyBpbiB1c2UgKi8KIApAQCAtMTc0LDExICsxNzQsMTMgQEAKIAkJdGltZXJfdXNlY190aWNrcyA9IHRpbWVyX21hc2tfdXNlY190aWNrcygxLCAxMjAwMDAwMCk7CiAJCXRjbnQgPSAxMjAwMDAwMCAvIEhaOwogCisJCXRjZmcxID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMSk7CiAJCXRjZmcxICY9IH5TM0MyNDEwX1RDRkcxX01VWDRfTUFTSzsKIAkJdGNmZzEgfD0gUzNDMjQxMF9UQ0ZHMV9NVVg0X1RDTEsxOworCQlfX3Jhd193cml0ZWwodGNmZzEsIFMzQzI0MTBfVENGRzEpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgcGNsazsKLQkJc3RydWN0IGNsayAqY2xrOworCQlzdHJ1Y3QgY2xrICp0c2NhbGVyOwogCiAJCS8qIGZvciB0aGUgaDE5NDAgKGFuZCBvdGhlcnMpLCB3ZSB1c2UgdGhlIHBjbGsgZnJvbSB0aGUgY29yZQogCQkgKiB0byBnZW5lcmF0ZSB0aGUgdGltZXIgdmFsdWVzLiBzaW5jZSB2YWx1ZXMgYXJvdW5kIDUwIHRvCkBAIC0xODksMzggKzE5MSwzNCBAQAogCQkgKiAoOC40NSB0aWNrcyBwZXIgdXNlYykKIAkJICovCiAKLQkJLyogdGhpcyBpcyB1c2VkIGFzIGRlZmF1bHQgaWYgbm8gb3RoZXIgdGltZXIgY2FuIGJlIGZvdW5kICovCi0KLQkJY2xrID0gY2xrX2dldChOVUxMLCAidGltZXJzIik7Ci0JCWlmIChJU19FUlIoY2xrKSkKLQkJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKLQotCQljbGtfZW5hYmxlKGNsayk7Ci0KLQkJcGNsayA9IGNsa19nZXRfcmF0ZShjbGspOworCQlwY2xrID0gY2xrX2dldF9yYXRlKHRpbWVyY2xrKTsKIAogCQkvKiBjb25maWd1cmUgY2xvY2sgdGljayAqLwogCiAJCXRpbWVyX3VzZWNfdGlja3MgPSB0aW1lcl9tYXNrX3VzZWNfdGlja3MoNiwgcGNsayk7CiAKLQkJdGNmZzEgJj0gflMzQzI0MTBfVENGRzFfTVVYNF9NQVNLOwotCQl0Y2ZnMSB8PSBTM0MyNDEwX1RDRkcxX01VWDRfRElWMjsKKwkJdHNjYWxlciA9IGNsa19nZXRfcGFyZW50KHRkaXYpOwogCi0JCXRjZmcwICY9IH5TM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9NQVNLOwotCQl0Y2ZnMCB8PSAoKDYgLSAxKSAvIDIpIDw8IFMzQzI0MTBfVENGR19QUkVTQ0FMRVIxX1NISUZUOworCQljbGtfc2V0X3JhdGUodHNjYWxlciwgcGNsayAvIDMpOworCQljbGtfc2V0X3JhdGUodGRpdiwgcGNsayAvIDYpOworCQljbGtfc2V0X3BhcmVudCh0aW4sIHRkaXYpOwogCi0JCXRjbnQgPSAocGNsayAvIDYpIC8gSFo7CisJCXRjbnQgPSBjbGtfZ2V0X3JhdGUodGluKSAvIEhaOwogCX0KIAorCXRjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOworCXRjZmcwID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMCk7CisJdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwogCS8qIHRpbWVycyByZWxvYWQgYWZ0ZXIgY291bnRpbmcgemVybywgc28gcmVkdWNlIHRoZSBjb3VudCBieSAxICovCiAKIAl0Y250LS07CiAKLQlwcmludGsoInRpbWVyIHRjb249JTA4bHgsIHRjbnQgJTA0bHgsIHRjZmcgJTA4bHgsJTA4bHgsIHVzZWMgJTA4bHhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIHRjb249JTA4bHgsIHRjbnQgJTA0bHgsIHRjZmcgJTA4bHgsJTA4bHgsIHVzZWMgJTA4bHhcbiIsCiAJICAgICAgIHRjb24sIHRjbnQsIHRjZmcwLCB0Y2ZnMSwgdGltZXJfdXNlY190aWNrcyk7CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgdGltZXIgaXMgd2l0aGluIDE2Yml0IHJhbmdlLi4uICovCi0JaWYgKHRjbnQgPiAweGZmZmYpIHsKKwlpZiAodGNudCA+IFRJQ0tfTUFYKSB7CiAJCXBhbmljKCJzZXR1cF90aW1lcjogSFogaXMgdG9vIHNtYWxsLCBjYW5ub3QgY29uZmlndXJlIHRpbWVyISIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjQ3LDggKzI0NSwzNSBAQAogCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxMF90aW1lcl9pbml0ICh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHMzYzI0MTBfdGltZXJfcmVzb3VyY2VzKHZvaWQpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXBkZXY7CisKKwl0bXBkZXYuZGV2LmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZTsKKwl0bXBkZXYuaWQgPSA0OworCisJdGltZXJjbGsgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lcnMiKTsKKwlpZiAoSVNfRVJSKHRpbWVyY2xrKSkKKwkJcGFuaWMoImZhaWxlZCB0byBnZXQgY2xvY2sgZm9yIHN5c3RlbSB0aW1lciIpOworCisJY2xrX2VuYWJsZSh0aW1lcmNsayk7CisKKwlpZiAoIXVzZV90Y2xrMV8xMigpKSB7CisJCXRpbiA9IGNsa19nZXQoJnRtcGRldi5kZXYsICJwd20tdGluIik7CisJCWlmIChJU19FUlIodGluKSkKKwkJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10aW4gY2xvY2sgZm9yIHN5c3RlbSB0aW1lciIpOworCisJCXRkaXYgPSBjbGtfZ2V0KCZ0bXBkZXYuZGV2LCAicHdtLXRkaXYiKTsKKwkJaWYgKElTX0VSUih0ZGl2KSkKKwkJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10ZGl2IGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKKwl9CisKKwljbGtfZW5hYmxlKHRpbik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDEwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzM2MyNDEwX3RpbWVyX3Jlc291cmNlcygpOwogCXMzYzI0MTBfdGltZXJfc2V0dXAoKTsKIAlzZXR1cF9pcnEoSVJRX1RJTUVSNCwgJnMzYzI0MTBfdGltZXJfaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcKaW5kZXggMGFmMzg3Mi4uMmM4YTJmNWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZwpAQCAtNiw4ICs2LDggQEAKIAogY29uZmlnIFBMQVRfUzNDMjRYWAogCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAotCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0MTAKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzI0QTAKKwlkZWZhdWx0IHkKIAlzZWxlY3QgTk9fSU9QT1JUCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscApAQCAtMTUsNiArMTUsMTkgQEAKIAogaWYgUExBVF9TM0MyNFhYCiAKKyMgY29kZSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIGEgbnVtYmVyIG9mIHRoZSBzM2MyNHh4IGltcGxlbWVudGF0aW9ucworCitjb25maWcgUzNDMjQxMF9DTE9DSworCWJvb2wKKwloZWxwCisJICBDbG9jayBjb2RlIGZvciB0aGUgUzNDMjQxMCwgYW5kIHNpbWlsYXIgcHJvY2Vzc29ycyB3aGljaAorCSAgaXMgY3VycmVudGx5IGluY2x1ZGVzIHRoZSBTM0MyNDEwLCBTM0MyNDQwLCBTM0MyNDQyLgorCitjb25maWcgUzNDMjRYWF9EQ0xLCisJYm9vbAorCWhlbHAKKwkgIENsb2NrIGNvZGUgZm9yIHN1cHBvcnRpbmcgRENMSy9DTEtPVVQgb24gUzNDMjRYWCBhcmNoaXRlY3R1cmVzCisKIGNvbmZpZyBDUFVfUzNDMjQ0WAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCkBAIC0yOCw2ICs0MSwyNyBAQAogCSAgU3VwcG9ydCBmb3IgZXhwb3J0aW5nIHRoZSBQV00gdGltZXIgYmxvY2tzIHZpYSB0aGUgcHdtIGRldmljZQogCSAgc3lzdGVtLgogCisKKyMgZ3BpbyBjb25maWd1cmF0aW9ucworCitjb25maWcgUzNDMjRYWF9HUElPX0VYVFJBCisJaW50CisJZGVmYXVsdCAxMjggaWYgUzNDMjRYWF9HUElPX0VYVFJBMTI4CisJZGVmYXVsdCA2NCBpZiBTM0MyNFhYX0dQSU9fRVhUUkE2NAorCWRlZmF1bHQgMAorCitjb25maWcgUzNDMjRYWF9HUElPX0VYVFJBNjQKKwlib29sCisJaGVscAorCSAgQWRkIGFuIGV4dHJhIDY0IGdwaW8gbnVtYmVycyB0byB0aGUgYXZhaWxhYmxlIEdQSU8gcG9vbC4gVGhpcyBpcworCSAgYXZhaWxhYmxlIGZvciBib2FyZHMgdGhhdCBuZWVkIGV4dHJhIGdwaW9zIGZvciBleHRlcm5hbCBkZXZpY2VzLgorCitjb25maWcgUzNDMjRYWF9HUElPX0VYVFJBMTI4CisJYm9vbAorCWhlbHAKKwkgIEFkZCBhbiBleHRyYSAxMjggZ3BpbyBudW1iZXJzIHRvIHRoZSBhdmFpbGFibGUgR1BJTyBwb29sLiBUaGlzIGlzCisJICBhdmFpbGFibGUgZm9yIGJvYXJkcyB0aGF0IG5lZWQgZXh0cmEgZ3Bpb3MgZm9yIGV4dGVybmFsIGRldmljZXMuCisKIGNvbmZpZyBQTV9TSU1URUMKIAlib29sCiAJaGVscApAQCAtNDksNiArODMsMjkgQEAKIAkgIEVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgRE1BIGNvZGUuIFRoaXMgb3B0aW9uIHNlbmRzIGluZm8KIAkgIHRvIHRoZSBrZXJuZWwgbG9nLCBhdCBwcmlvcml0eSBLRVJOX0RFQlVHLgogCitjb25maWcgUzNDMjRYWF9BREMKKwlib29sICJBREMgY29tbW9uIGRyaXZlciBzdXBwb3J0IgorCWhlbHAKKwkgIENvcmUgc3VwcG9ydCBmb3IgdGhlIEFEQyBibG9jayBmb3VuZCBpbiB0aGUgUzNDMjRYWCBTb0Mgc3lzdGVtcworCSAgZm9yIGRyaXZlcnMgc3VjaCBhcyB0aGUgdG91Y2hzY3JlZW4gYW5kIGh3bW9uIHRvIHVzZSB0byBzaGFyZQorCSAgdGhpcyByZXNvdXJjZS4KKworIyBTUEkgZGVmYXVsdCBwaW4gY29uZmlndXJhdGlvbiBjb2RlCisKK2NvbmZpZyBTM0MyNFhYX1NQSV9CVVMwX0dQRTExX0dQRTEyX0dQRTEzCisJYm9vbAorCWhlbHAKKwkgIFNQSSBHUElPIGNvbmZpZ3VyYXRpb24gY29kZSBmb3IgQlVTMCB3aGVuIGNvbm5lY3RlZCB0bworCSAgR1BFMTEsIEdQRTEyIGFuZCBHUEUxMy4KKworY29uZmlnIFMzQzI0WFhfU1BJX0JVUzFfR1BHNV9HUEc2X0dQRzcKKwlib29sCisJaGVscAorCSAgU1BJIEdQSU8gY29uZmlndXJhdGlvbiBjb2RlIGZvciBCVVMgMSB3aGVuIGNvbm5lY3RlZCB0bworCSAgR1BHNSwgR1BHNiBhbmQgR1BHNy4KKworIyBjb21tb24gY29kZSBmb3IgczNjMjR4eCBiYXNlZCBtYWNoaW5lcywgc3VjaCBhcyB0aGUgU01ES3MuCisKIGNvbmZpZyBNQUNIX1NNREsKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IGQ4Mjc2N2IuLjFlMDc2N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTE3LDkgKzE3LDggQEAKIG9iai15CQkJCSs9IGRldnMubwogb2JqLXkJCQkJKz0gZ3Bpby5vCiBvYmoteQkJCQkrPSBncGlvbGliLm8KLW9iai15CQkJCSs9IHRpbWUubwogb2JqLXkJCQkJKz0gY2xvY2subwotb2JqLXkJCQkJKz0gcHdtLWNsb2NrLm8KK29iai0kKENPTkZJR19TM0MyNFhYX0RDTEspCSs9IGNsb2NrLWRjbGsubwogCiAjIEFyY2hpdGVjdHVyZSBkZXBlbmRhbnQgYnVpbGRzCiAKQEAgLTMwLDUgKzI5LDE4IEBACiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBzbGVlcC5vCiBvYmotJChDT05GSUdfSEFWRV9QV00pCQkrPSBwd20ubworb2JqLSQoQ09ORklHX1MzQzI0MTBfQ0xPQ0spCSs9IHMzYzI0MTAtY2xvY2subwogb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKQkrPSBkbWEubworb2JqLSQoQ09ORklHX1MzQzI0WFhfQURDKQkrPSBhZGMubworCisjIGRldmljZSBzcGVjaWZpYyBzZXR1cCBhbmQvb3IgaW5pdGlhbGlzYXRpb24KK29iai0kKENPTkZJR19BUkNIX1MzQzI0MTApCSs9IHNldHVwLWkyYy5vCisKKyMgU1BJIGdwaW8gY2VudHJhbCBHUElPIGZ1bmN0aW9ucworCitvYmotJChDT05GSUdfUzNDMjRYWF9TUElfQlVTMF9HUEUxMV9HUEUxMl9HUEUxMykgKz0gc3BpLWJ1czAtZ3BlMTFfMTJfMTMubworb2JqLSQoQ09ORklHX1MzQzI0WFhfU1BJX0JVUzFfR1BHNV9HUEc2X0dQRzcpICAgICs9IHNwaS1idXMxLWdwZzVfNl83Lm8KKworIyBtYWNoaW5lIGNvbW1vbiBzdXBwb3J0CisKIG9iai0kKENPTkZJR19NQUNIX1NNREspCQkrPSBjb21tb24tc21kay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1Yzc2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwpAQCAtMCwwICsxLDM3MiBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4sIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIFMzQzI0WFggQURDIGRldmljZSBjb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLWFkYy5oPgorI2luY2x1ZGUgPHBsYXQvYWRjLmg+CisKKy8qIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGNvbnRyb2wgdGhlIHVzYWdlIG9mIHRoZSBBREMgYmxvY2sgYmV0d2VlbgorICogdGhlIHRvdWNoc2NyZWVuIGFuZCBhbnkgb3RoZXIgZHJpdmVycyB0aGF0IG1heSBuZWVkIHRvIHVzZSBpdCwgc3VjaCBhcworICogdGhlIGh3bW9uIGRyaXZlci4KKyAqCisgKiBQcmlvcml0eSB3aWxsIGJlIGdpdmVuIHRvIHRoZSB0b3VjaHNjcmVlbiBkcml2ZXIsIGJ1dCBhcyB0aGlzIGl0c2VsZiBpcworICogcmF0ZSBsaW1pdGVkIGl0IHNob3VsZCBub3Qgc3RhcnZlIG90aGVyIHJlcXVlc3RzIHdoaWNoIGFyZSBwcm9jZXNzZWQgaW4KKyAqIG9yZGVyIHRoYXQgdGhleSBhcmUgcmVjZWl2ZWQuCisgKgorICogRWFjaCB1c2VyIHJlZ2lzdGVycyB0byBnZXQgYSBjbGllbnQgYmxvY2sgd2hpY2ggdW5pcXVlbHkgaWRlbnRpZmllcyBpdAorICogYW5kIHN0b3JlcyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIGNhbGxiYWNrIHdoZW4KKyAqIGFjdGlvbiBpcyByZXF1aXJlZC4KKyAqLworCitzdHJ1Y3QgczNjX2FkY19jbGllbnQgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IGxpc3RfaGVhZAkgcGVuZDsKKworCXVuc2lnbmVkIGludAkJIG5yX3NhbXBsZXM7CisJdW5zaWduZWQgY2hhcgkJIGlzX3RzOworCXVuc2lnbmVkIGNoYXIJCSBjaGFubmVsOworCisJdm9pZAkoKnNlbGVjdF9jYikodW5zaWduZWQgc2VsZWN0ZWQpOworCXZvaWQJKCpjb252ZXJ0X2NiKSh1bnNpZ25lZCB2YWwxLCB1bnNpZ25lZCB2YWwyKTsKK307CisKK3N0cnVjdCBhZGNfZGV2aWNlIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm93bmVyOworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IHMzY19hZGNfY2xpZW50CSpjdXI7CisJc3RydWN0IHMzY19hZGNfY2xpZW50CSp0c19wZW5kOworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisKKwl1bnNpZ25lZCBpbnQJCSBwcmVzY2FsZTsKKworCWludAkJCSBpcnE7Cit9OworCitzdGF0aWMgc3RydWN0IGFkY19kZXZpY2UgKmFkY19kZXY7CisKK3N0YXRpYyBMSVNUX0hFQUQoYWRjX3BlbmRpbmcpOworCisjZGVmaW5lIGFkY19kYmcoX2FkYywgbXNnLi4uKSBkZXZfZGJnKCYoX2FkYyktPnBkZXYtPmRldiwgbXNnKQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2FkY19jb252ZXJ0KHN0cnVjdCBhZGNfZGV2aWNlICphZGMpCit7CisJdW5zaWduZWQgY29uID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworCisJY29uIHw9IFMzQzI0MTBfQURDQ09OX0VOQUJMRV9TVEFSVDsKKwl3cml0ZWwoY29uLCBhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfYWRjX3NlbGVjdChzdHJ1Y3QgYWRjX2RldmljZSAqYWRjLAorCQkJCSAgc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgY29uID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworCisJY2xpZW50LT5zZWxlY3RfY2IoMSk7CisKKwljb24gJj0gflMzQzI0MTBfQURDQ09OX01VWE1BU0s7CisJY29uICY9IH5TM0MyNDEwX0FEQ0NPTl9TVERCTTsKKwljb24gJj0gflMzQzI0MTBfQURDQ09OX1NUQVJUTUFTSzsKKworCWlmICghY2xpZW50LT5pc190cykKKwkJY29uIHw9IFMzQzI0MTBfQURDQ09OX1NFTE1VWChjbGllbnQtPmNoYW5uZWwpOworCisJd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWRjX2RiZ3Nob3coc3RydWN0IGFkY19kZXZpY2UgKmFkYykKK3sKKwlhZGNfZGJnKGFkYywgIkNPTj0lMDh4LCBUU0M9JTA4eCwgRExZPSUwOHhcbiIsCisJCXJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKSwKKwkJcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENUU0MpLAorCQlyZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0RMWSkpOworfQorCit2b2lkIHMzY19hZGNfdHJ5KHN0cnVjdCBhZGNfZGV2aWNlICphZGMpCit7CisJc3RydWN0IHMzY19hZGNfY2xpZW50ICpuZXh0ID0gYWRjLT50c19wZW5kOworCisJaWYgKCFuZXh0ICYmICFsaXN0X2VtcHR5KCZhZGNfcGVuZGluZykpIHsKKwkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmFkY19wZW5kaW5nLAorCQkJCQlzdHJ1Y3QgczNjX2FkY19jbGllbnQsIHBlbmQpOworCQlsaXN0X2RlbCgmbmV4dC0+cGVuZCk7CisJfSBlbHNlCisJCWFkYy0+dHNfcGVuZCA9IE5VTEw7CisKKwlpZiAobmV4dCkgeworCQlhZGNfZGJnKGFkYywgIm5ldyBjbGllbnQgaXMgJXBcbiIsIG5leHQpOworCQlhZGMtPmN1ciA9IG5leHQ7CisJCXMzY19hZGNfc2VsZWN0KGFkYywgbmV4dCk7CisJCXMzY19hZGNfY29udmVydChhZGMpOworCQlzM2NfYWRjX2RiZ3Nob3coYWRjKTsKKwl9Cit9CisKK2ludCBzM2NfYWRjX3N0YXJ0KHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkgIHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgbnJfc2FtcGxlcykKK3sKKwlzdHJ1Y3QgYWRjX2RldmljZSAqYWRjID0gYWRjX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFhZGMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGZpbmQgYWRjXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbGllbnQtPmlzX3RzICYmIGFkYy0+dHNfcGVuZCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljbGllbnQtPmNoYW5uZWwgPSBjaGFubmVsOworCWNsaWVudC0+bnJfc2FtcGxlcyA9IG5yX3NhbXBsZXM7CisKKwlpZiAoY2xpZW50LT5pc190cykKKwkJYWRjLT50c19wZW5kID0gY2xpZW50OworCWVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5wZW5kLCAmYWRjX3BlbmRpbmcpOworCisJaWYgKCFhZGMtPmN1cikKKwkJczNjX2FkY190cnkoYWRjKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfc3RhcnQpOworCitzdGF0aWMgdm9pZCBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0KHVuc2lnbmVkIHNlbGVjdCkKK3sKK30KKworc3RydWN0IHMzY19hZGNfY2xpZW50ICpzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXZvaWQgKCpzZWxlY3QpKHVuc2lnbmVkIGludCBzZWxlY3RlZCksCisJCQkJCXZvaWQgKCpjb252KSh1bnNpZ25lZCBkMCwgdW5zaWduZWQgZDEpLAorCQkJCQl1bnNpZ25lZCBpbnQgaXNfdHMpCit7CisJc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQ7CisKKwlXQVJOX09OKCFwZGV2KTsKKwlXQVJOX09OKCFjb252KTsKKworCWlmICghc2VsZWN0KQorCQlzZWxlY3QgPSBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0OworCisJaWYgKCFjb252IHx8ICFwZGV2KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2NfYWRjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmICghY2xpZW50KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgYWRjIGNsaWVudFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWNsaWVudC0+cGRldiA9IHBkZXY7CisJY2xpZW50LT5pc190cyA9IGlzX3RzOworCWNsaWVudC0+c2VsZWN0X2NiID0gc2VsZWN0OworCWNsaWVudC0+Y29udmVydF9jYiA9IGNvbnY7CisKKwlyZXR1cm4gY2xpZW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19yZWdpc3Rlcik7CisKK3ZvaWQgczNjX2FkY19yZWxlYXNlKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50KQoreworCS8qIFdlIHNob3VsZCByZWFsbHkgY2hlY2sgdGhhdCBub3RoaW5nIGlzIGluIHByb2dyZXNzLiAqLworCWtmcmVlKGNsaWVudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3JlbGVhc2UpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgczNjX2FkY19pcnEoaW50IGlycSwgdm9pZCAqcHcpCit7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IHB3OworCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50ID0gYWRjLT5jdXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBkYXRhMCwgZGF0YTE7CisKKwlpZiAoIWNsaWVudCkgeworCQlkZXZfd2FybigmYWRjLT5wZGV2LT5kZXYsICIlczogbm8gYWRjIHBlbmRpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWRhdGEwID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENEQVQwKTsKKwlkYXRhMSA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDREFUMSk7CisJYWRjX2RiZyhhZGMsICJyZWFkICVkOiAweCUwNHgsIDB4JTA0eFxuIiwgY2xpZW50LT5ucl9zYW1wbGVzLCBkYXRhMCwgZGF0YTEpOworCisJKGNsaWVudC0+Y29udmVydF9jYikoZGF0YTAgJiAweDNmZiwgZGF0YTEgJiAweDNmZik7CisKKwlpZiAoLS1jbGllbnQtPm5yX3NhbXBsZXMgPiAwKSB7CisJCS8qIGZpcmUgYW5vdGhlciBjb252ZXJzaW9uIGZvciB0aGlzICovCisKKwkJY2xpZW50LT5zZWxlY3RfY2IoMSk7CisJCXMzY19hZGNfY29udmVydChhZGMpOworCX0gZWxzZSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJKGNsaWVudC0+c2VsZWN0X2NiKSgwKTsKKwkJYWRjLT5jdXIgPSBOVUxMOworCisJCXMzY19hZGNfdHJ5KGFkYyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgczNjX2FkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IHJldDsKKworCWFkYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGNfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGFkY19kZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhZGMtPnBkZXYgPSBwZGV2OworCWFkYy0+cHJlc2NhbGUgPSBTM0MyNDEwX0FEQ0NPTl9QUlNDVkwoNDkpOworCisJYWRjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCWlmIChhZGMtPmlycSA8PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBhZGMgaXJxXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfYWxsb2M7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoYWRjLT5pcnEsIHMzY19hZGNfaXJxLCAwLCBkZXZfbmFtZShkZXYpLCBhZGMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCBhZGMgaXJxXG4iKTsKKwkJZ290byBlcnJfYWxsb2M7CisJfQorCisJYWRjLT5jbGsgPSBjbGtfZ2V0KGRldiwgImFkYyIpOworCWlmIChJU19FUlIoYWRjLT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBhZGMgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGFkYy0+Y2xrKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVncykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBmaW5kIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfY2xrOworCX0KKworCWFkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVncykpOworCWlmICghYWRjLT5yZWdzKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwljbGtfZW5hYmxlKGFkYy0+Y2xrKTsKKworCXdyaXRlbChhZGMtPnByZXNjYWxlIHwgUzNDMjQxMF9BRENDT05fUFJTQ0VOLAorCSAgICAgICBhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7CisKKwlkZXZfaW5mbyhkZXYsICJhdHRhY2hlZCBhZGMgZHJpdmVyXG4iKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFkYyk7CisJYWRjX2RldiA9IGFkYzsKKworCXJldHVybiAwOworCisgZXJyX2NsazoKKwljbGtfcHV0KGFkYy0+Y2xrKTsKKworIGVycl9pcnE6CisJZnJlZV9pcnEoYWRjLT5pcnEsIGFkYyk7CisKKyBlcnJfYWxsb2M6CisJa2ZyZWUoYWRjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHMzY19hZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaW91bm1hcChhZGMtPnJlZ3MpOworCWZyZWVfaXJxKGFkYy0+aXJxLCBhZGMpOworCWNsa19kaXNhYmxlKGFkYy0+Y2xrKTsKKwljbGtfcHV0KGFkYy0+Y2xrKTsKKwlrZnJlZShhZGMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgczNjX2FkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRjX2RldmljZSAqYWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdTMyIGNvbjsKKworCWNvbiA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKKwljb24gfD0gUzNDMjQxMF9BRENDT05fU1REQk07CisJd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworCisJY2xrX2Rpc2FibGUoYWRjLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX2FkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRjX2RldmljZSAqYWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZW5hYmxlKGFkYy0+Y2xrKTsKKworCXdyaXRlbChhZGMtPnByZXNjYWxlIHwgUzNDMjQxMF9BRENDT05fUFJTQ0VOLAorCSAgICAgICBhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgczNjX2FkY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjX2FkY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19hZGNfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNHh4LWFkYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHMzY19hZGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfYWRjX3JlbW92ZSksCisJLnN1c3BlbmQJPSBzM2NfYWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NfYWRjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkY19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjX2FkY19kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhZGQgYWRjIGRyaXZlclxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHJldDsKK30KKworYXJjaF9pbml0Y2FsbChhZGNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2stZGNsay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLWRjbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjc1YTc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLWRjbGsuYwpAQCAtMCwwICsxLDE5NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLWRjbGsuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0WFggLSBkZWZpbml0aW9ucyBmb3IgRENMSyBhbmQgQ0xLT1VUIHJlZ2lzdGVycworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKKy8qIGNsb2NrcyB0aGF0IGNvdWxkIGJlIHJlZ2lzdGVyZWQgYnkgZXh0ZXJuYWwgY29kZSAqLworCitzdGF0aWMgaW50IHMzYzI0eHhfZGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7CisKKwlpZiAoZW5hYmxlKQorCQlkY2xrY29uIHw9IGNsay0+Y3RybGJpdDsKKwllbHNlCisJCWRjbGtjb24gJj0gfmNsay0+Y3RybGJpdDsKKworCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNFhYX0RDTEtDT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9kY2xrX3NldHBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGRjbGtjb247CisJdW5zaWduZWQgaW50IHVjbGs7CisKKwlpZiAocGFyZW50ID09ICZjbGtfdXBsbCkKKwkJdWNsayA9IDE7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKKwkJdWNsayA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7CisKKwlpZiAoY2xrLT5jdHJsYml0ID09IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOKSB7CisJCWlmICh1Y2xrKQorCQkJZGNsa2NvbiB8PSBTM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKKwkJZWxzZQorCQkJZGNsa2NvbiAmPSB+UzNDMjQxMF9EQ0xLQ09OX0RDTEswX1VDTEs7CisJfSBlbHNlIHsKKwkJaWYgKHVjbGspCisJCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOworCQllbHNlCisJCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzFfVUNMSzsKKwl9CisKKwlfX3Jhd193cml0ZWwoZGNsa2NvbiwgUzNDMjRYWF9EQ0xLQ09OKTsKKworCXJldHVybiAwOworfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjR4eF9jYWxjX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpdjsKKworCWlmICgocmF0ZSA9PSAwKSB8fCAhY2xrLT5wYXJlbnQpCisJCXJldHVybiAwOworCisJZGl2ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJhdGU7CisJaWYgKGRpdiA8IDIpCisJCWRpdiA9IDI7CisJZWxzZSBpZiAoZGl2ID4gMTYpCisJCWRpdiA9IDE2OworCisJcmV0dXJuIGRpdjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjR4eF9yb3VuZF9kY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLAorCXVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpdiA9IHMzYzI0eHhfY2FsY19kaXYoY2xrLCByYXRlKTsKKworCWlmIChkaXYgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3NldF9kY2xrX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrLCBkYXRhLCBkaXYgPSBzM2MyNHh4X2NhbGNfZGl2KGNsaywgcmF0ZSk7CisKKwlpZiAoZGl2ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsayA9PSAmczNjMjR4eF9kY2xrMCkgeworCQltYXNrID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVl9NQVNLIHwKKwkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMF9DTVBfTUFTSzsKKwkJZGF0YSA9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9ESVYoZGl2KSB8CisJCQlTM0MyNDEwX0RDTEtDT05fRENMSzBfQ01QKChkaXYgKyAxKSAvIDIpOworCX0gZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2RjbGsxKSB7CisJCW1hc2sgPSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWX01BU0sgfAorCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUF9NQVNLOworCQlkYXRhID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0RJVihkaXYpIHwKKwkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMV9DTVAoKGRpdiArIDEpIC8gMik7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKKwlfX3Jhd193cml0ZWwoKChfX3Jhd19yZWFkbChTM0MyNFhYX0RDTEtDT04pICYgfm1hc2spIHwgZGF0YSksCisJCVMzQzI0WFhfRENMS0NPTik7CisJcmV0dXJuIGNsay0+cmF0ZTsKK30KK3N0YXRpYyBpbnQgczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nIHNvdXJjZTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgTUlTQ0NSIHNldHRpbmcgZm9yIHRoZSBjbG9jayAqLworCisJaWYgKHBhcmVudCA9PSAmY2xrX3h0YWwpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfTVBMTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa191cGxsKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1VQTEw7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfZikKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9GQ0xLOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2gpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfSENMSzsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19wKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX1BDTEs7CisJZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDAgJiYgcGFyZW50ID09ICZzM2MyNHh4X2RjbGswKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0RDTEswOworCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQxICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMSkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwlpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDApCisJCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7CisJZWxzZSB7CisJCXNvdXJjZSA8PD0gNDsKKwkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzFfTUFTSzsKKwl9CisKKwlzM2MyNDEwX21vZGlmeV9taXNjY3IobWFzaywgc291cmNlKTsKKwlyZXR1cm4gMDsKK30KKworLyogZXh0ZXJuYWwgY2xvY2sgZGVmaW5pdGlvbnMgKi8KKworc3RydWN0IGNsayBzM2MyNHh4X2RjbGswID0geworCS5uYW1lCQk9ICJkY2xrMCIsCisJLmlkCQk9IC0xLAorCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCisJLmVuYWJsZQkgICAgICAgID0gczNjMjR4eF9kY2xrX2VuYWJsZSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfZGNsa19zZXRwYXJlbnQsCisJLnNldF9yYXRlCT0gczNjMjR4eF9zZXRfZGNsa19yYXRlLAorCS5yb3VuZF9yYXRlCT0gczNjMjR4eF9yb3VuZF9kY2xrX3JhdGUsCit9OworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazEgPSB7CisJLm5hbWUJCT0gImRjbGsxIiwKKwkuaWQJCT0gLTEsCisJLmN0cmxiaXQJPSBTM0MyNDEwX0RDTEtDT05fRENMSzFFTiwKKwkuZW5hYmxlCQk9IHMzYzI0eHhfZGNsa19lbmFibGUsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAorCS5zZXRfcmF0ZQk9IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHMzYzI0eHhfcm91bmRfZGNsa19yYXRlLAorfTsKKworc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDAgPSB7CisJLm5hbWUJCT0gImNsa291dDAiLAorCS5pZAkJPSAtMSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfY2xrb3V0X3NldHBhcmVudCwKK307CisKK3N0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQxID0geworCS5uYW1lCQk9ICJjbGtvdXQxIiwKKwkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwppbmRleCBhMDA1ZGRiLi44NDc0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwpAQCAtMjcsMTggKzI3LDggQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC00Nyw0OTAgKzM3LDIzIEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKwogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCi0vKiBjbG9jayBpbmZvcm1hdGlvbiAqLwotCi1zdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7Ci0KLURFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwotCi0vKiBlbmFibGUgYW5kIGRpc2FibGUgY2FsbHMgZm9yIHVzZSB3aXRoIHRoZSBjbGsgc3RydWN0ICovCi0KLXN0YXRpYyBpbnQgY2xrX251bGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogQ2xvY2sgQVBJIGNhbGxzICovCi0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlzdHJ1Y3QgY2xrICpwOwotCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0JaW50IGlkbm87Ci0KLQlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQotCQlpZG5vID0gLTE7Ci0JZWxzZQotCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2NrcywgbGlzdCkgewotCQlpZiAocC0+aWQgPT0gaWRubyAmJgotCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmCi0JCSAgICB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCWNsayA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIGNoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSBhIGRldmljZSB3YXMgc3VwcGxpZWQsIGJ1dCB0aGUKLQkgKiBjbG9jayB0aGF0IHdhcyBiZWluZyBzZWFyY2hlZCBmb3IgaXMgbm90IGRldmljZSBzcGVjaWZpYyAqLwotCi0JaWYgKElTX0VSUihjbGspKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2NrcywgbGlzdCkgewotCQkJaWYgKHAtPmlkID09IC0xICYmIHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJgotCQkJICAgIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJCWNsayA9IHA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0JcmV0dXJuIGNsazsKLX0KLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotfQotCi1pbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsa19lbmFibGUoY2xrLT5wYXJlbnQpOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWlmICgoY2xrLT51c2FnZSsrKSA9PSAwKQotCQkoY2xrLT5lbmFibGUpKGNsaywgMSk7Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChJU19FUlIoY2xrKSB8fCBjbGsgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWlmICgoLS1jbGstPnVzYWdlKSA9PSAwKQotCQkoY2xrLT5lbmFibGUpKGNsaywgMCk7Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0JY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotfQotCi0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoSVNfRVJSKGNsaykpCi0JCXJldHVybiAwOwotCi0JaWYgKGNsay0+cmF0ZSAhPSAwKQotCQlyZXR1cm4gY2xrLT5yYXRlOwotCi0JaWYgKGNsay0+Z2V0X3JhdGUgIT0gTlVMTCkKLQkJcmV0dXJuIChjbGstPmdldF9yYXRlKShjbGspOwotCi0JaWYgKGNsay0+cGFyZW50ICE9IE5VTEwpCi0JCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcmV0dXJuIGNsay0+cmF0ZTsKLX0KLQotbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlpZiAoIUlTX0VSUihjbGspICYmIGNsay0+cm91bmRfcmF0ZSkKLQkJcmV0dXJuIChjbGstPnJvdW5kX3JhdGUpKGNsaywgcmF0ZSk7Ci0KLQlyZXR1cm4gcmF0ZTsKLX0KLQotaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdlIGRvIG5vdCBkZWZhdWx0IGp1c3QgZG8gYSBjbGstPnJhdGUgPSByYXRlIGFzCi0JICogdGhlIGNsb2NrIG1heSBoYXZlIGJlZW4gbWFkZSB0aGlzIHdheSBieSBjaG9pY2UuCi0JICovCi0KLQlXQVJOX09OKGNsay0+c2V0X3JhdGUgPT0gTlVMTCk7Ci0KLQlpZiAoY2xrLT5zZXRfcmF0ZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JcmV0ID0gKGNsay0+c2V0X3JhdGUpKGNsaywgcmF0ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnBhcmVudDsKLX0KLQotaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCWludCByZXQgPSAwOwotCi0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlpZiAoY2xrLT5zZXRfcGFyZW50KQotCQlyZXQgPSAoY2xrLT5zZXRfcGFyZW50KShjbGssIHBhcmVudCk7Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKLUVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwotRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOwotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7Ci1FWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKLQotLyogYmFzZSBjbG9ja3MgKi8KLQotc3RhdGljIGludCBjbGtfZGVmYXVsdF9zZXRyYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCWNsay0+cmF0ZSA9IHJhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBjbGsgY2xrX3h0YWwgPSB7Ci0JLm5hbWUJCT0gInh0YWwiLAotCS5pZAkJPSAtMSwKLQkucmF0ZQkJPSAwLAotCS5wYXJlbnQJCT0gTlVMTCwKLQkuY3RybGJpdAk9IDAsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19tcGxsID0gewotCS5uYW1lCQk9ICJtcGxsIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrX3VwbGwgPSB7Ci0JLm5hbWUJCT0gInVwbGwiLAotCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotfTsKLQotc3RydWN0IGNsayBjbGtfZiA9IHsKLQkubmFtZQkJPSAiZmNsayIsCi0JLmlkCQk9IC0xLAotCS5yYXRlCQk9IDAsCi0JLnBhcmVudAkJPSAmY2xrX21wbGwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19oID0gewotCS5uYW1lCQk9ICJoY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19wID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa191c2JfYnVzID0gewotCS5uYW1lCQk9ICJ1c2ItYnVzIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9ICZjbGtfdXBsbCwKLX07Ci0KLS8qIGNsb2NrcyB0aGF0IGNvdWxkIGJlIHJlZ2lzdGVyZWQgYnkgZXh0ZXJuYWwgY29kZSAqLwotCi1zdGF0aWMgaW50IHMzYzI0eHhfZGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGxvbmcgZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7Ci0KLQlpZiAoZW5hYmxlKQotCQlkY2xrY29uIHw9IGNsay0+Y3RybGJpdDsKLQllbHNlCi0JCWRjbGtjb24gJj0gfmNsay0+Y3RybGJpdDsKLQotCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNFhYX0RDTEtDT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjR4eF9kY2xrX3NldHBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGRjbGtjb247Ci0JdW5zaWduZWQgaW50IHVjbGs7Ci0KLQlpZiAocGFyZW50ID09ICZjbGtfdXBsbCkKLQkJdWNsayA9IDE7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKLQkJdWNsayA9IDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7Ci0KLQlpZiAoY2xrLT5jdHJsYml0ID09IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOKSB7Ci0JCWlmICh1Y2xrKQotCQkJZGNsa2NvbiB8PSBTM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKLQkJZWxzZQotCQkJZGNsa2NvbiAmPSB+UzNDMjQxMF9EQ0xLQ09OX0RDTEswX1VDTEs7Ci0JfSBlbHNlIHsKLQkJaWYgKHVjbGspCi0JCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOwotCQllbHNlCi0JCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzFfVUNMSzsKLQl9Ci0KLQlfX3Jhd193cml0ZWwoZGNsa2NvbiwgUzNDMjRYWF9EQ0xLQ09OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNHh4X2NhbGNfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgZGl2OwotCi0JaWYgKChyYXRlID09IDApIHx8ICFjbGstPnBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKLQlpZiAoZGl2IDwgMikKLQkJZGl2ID0gMjsKLQllbHNlIGlmIChkaXYgPiAxNikKLQkJZGl2ID0gMTY7Ci0KLQlyZXR1cm4gZGl2OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNHh4X3JvdW5kX2RjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCi0JdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgZGl2ID0gczNjMjR4eF9jYWxjX2RpdihjbGssIHJhdGUpOwotCi0JaWYgKGRpdiA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OwotfQotCi1zdGF0aWMgaW50IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2ssIGRhdGEsIGRpdiA9IHMzYzI0eHhfY2FsY19kaXYoY2xrLCByYXRlKTsKLQotCWlmIChkaXYgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2xrID09ICZzM2MyNHh4X2RjbGswKSB7Ci0JCW1hc2sgPSBTM0MyNDEwX0RDTEtDT05fRENMSzBfRElWX01BU0sgfAotCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0NNUF9NQVNLOwotCQlkYXRhID0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswX0RJVihkaXYpIHwKLQkJCVMzQzI0MTBfRENMS0NPTl9EQ0xLMF9DTVAoKGRpdiArIDEpIC8gMik7Ci0JfSBlbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazEpIHsKLQkJbWFzayA9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMV9ESVZfTUFTSyB8Ci0JCQlTM0MyNDEwX0RDTEtDT05fRENMSzFfQ01QX01BU0s7Ci0JCWRhdGEgPSBTM0MyNDEwX0RDTEtDT05fRENMSzFfRElWKGRpdikgfAotCQkJUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX0NNUCgoZGl2ICsgMSkgLyAyKTsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbGstPnJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OwotCV9fcmF3X3dyaXRlbCgoKF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTikgJiB+bWFzaykgfCBkYXRhKSwKLQkJUzNDMjRYWF9EQ0xLQ09OKTsKLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotCi1zdGF0aWMgaW50IHMzYzI0eHhfY2xrb3V0X3NldHBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JdW5zaWduZWQgbG9uZyBzb3VyY2U7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIE1JU0NDUiBzZXR0aW5nIGZvciB0aGUgY2xvY2sgKi8KLQotCWlmIChwYXJlbnQgPT0gJmNsa194dGFsKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX01QTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfdXBsbCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9VUExMOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2YpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRkNMSzsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0hDTEs7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLOwotCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMDsKLQllbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfY2xrb3V0MSAmJiBwYXJlbnQgPT0gJnMzYzI0eHhfZGNsazEpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRENMSzA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwKQotCQltYXNrID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9NQVNLOwotCWVsc2UgewotCQlzb3VyY2UgPDw9IDQ7Ci0JCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEsxX01BU0s7Ci0JfQotCi0JczNjMjQxMF9tb2RpZnlfbWlzY2NyKG1hc2ssIHNvdXJjZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGV4dGVybmFsIGNsb2NrIGRlZmluaXRpb25zICovCi0KLXN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMCA9IHsKLQkubmFtZQkJPSAiZGNsazAiLAotCS5pZAkJPSAtMSwKLQkuY3RybGJpdAk9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOLAotCS5lbmFibGUJICAgICAgICA9IHMzYzI0eHhfZGNsa19lbmFibGUsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAotCS5zZXRfcmF0ZQk9IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZSwKLQkucm91bmRfcmF0ZQk9IHMzYzI0eHhfcm91bmRfZGNsa19yYXRlLAotfTsKLQotc3RydWN0IGNsayBzM2MyNHh4X2RjbGsxID0gewotCS5uYW1lCQk9ICJkY2xrMSIsCi0JLmlkCQk9IC0xLAotCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxRU4sCi0JLmVuYWJsZQkJPSBzM2MyNHh4X2RjbGtfZW5hYmxlLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9kY2xrX3NldHBhcmVudCwKLQkuc2V0X3JhdGUJPSBzM2MyNHh4X3NldF9kY2xrX3JhdGUsCi0JLnJvdW5kX3JhdGUJPSBzM2MyNHh4X3JvdW5kX2RjbGtfcmF0ZSwKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQwID0gewotCS5uYW1lCQk9ICJjbGtvdXQwIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCi19OwotCi1zdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MSA9IHsKLQkubmFtZQkJPSAiY2xrb3V0MSIsCi0JLmlkCQk9IC0xLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50LAotfTsKLQotc3RydWN0IGNsayBzM2MyNHh4X3VjbGsgPSB7Ci0JLm5hbWUJCT0gInVjbGsiLAotCS5pZAkJPSAtMSwKLX07Ci0KLS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrIHN5c3RlbSAqLwotCi1pbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY2xrLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JaWYgKGNsay0+ZW5hYmxlID09IE5VTEwpCi0JCWNsay0+ZW5hYmxlID0gY2xrX251bGxfZW5hYmxlOwotCi0JLyogYWRkIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjbG9ja3MgKi8KLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGQoJmNsay0+bGlzdCwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgY2xrICoqY2xrcywgaW50IG5yX2Nsa3MpCi17Ci0JaW50IGZhaWxzID0gMDsKLQotCWZvciAoOyBucl9jbGtzID4gMDsgbnJfY2xrcy0tLCBjbGtzKyspIHsKLQkJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soKmNsa3MpIDwgMCkKLQkJCWZhaWxzKys7Ci0JfQotCi0JcmV0dXJuIGZhaWxzOwotfQorI2luY2x1ZGUgPHBsYXQvcGxsLmg+CiAKIC8qIGluaXRhbGlzZSBhbGwgdGhlIGNsb2NrcyAqLwogCi1pbnQgX19pbml0IHMzYzI0eHhfc2V0dXBfY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbCwKLQkJCQl1bnNpZ25lZCBsb25nIGZjbGssCi0JCQkJdW5zaWduZWQgbG9uZyBoY2xrLAotCQkJCXVuc2lnbmVkIGxvbmcgcGNsaykKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyBmY2xrLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGhjbGssCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGNsaykKIHsKLQlwcmludGsoS0VSTl9JTkZPICJTM0MyNFhYIENsb2NrcywgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQotCS8qIGluaXRpYWxpc2UgdGhlIG1haW4gc3lzdGVtIGNsb2NrcyAqLwotCi0JY2xrX3h0YWwucmF0ZSA9IHh0YWw7Ci0JY2xrX3VwbGwucmF0ZSA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX1VQTExDT04pLCB4dGFsKTsKKwljbGtfdXBsbC5yYXRlID0gczNjMjR4eF9nZXRfcGxsKF9fcmF3X3JlYWRsKFMzQzI0MTBfVVBMTENPTiksCisJCQkJCWNsa194dGFsLnJhdGUpOwogCiAJY2xrX21wbGwucmF0ZSA9IGZjbGs7CiAJY2xrX2gucmF0ZSA9IGhjbGs7CiAJY2xrX3AucmF0ZSA9IHBjbGs7CiAJY2xrX2YucmF0ZSA9IGZjbGs7Ci0KLQkvKiBhc3N1bWUgdWFydCBjbG9ja3MgYXJlIGNvcnJlY3RseSBzZXR1cCAqLwotCi0JLyogcmVnaXN0ZXIgb3VyIGNsb2NrcyAqLwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa194dGFsKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1hc3RlciB4dGFsXG4iKTsKLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfbXBsbCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBtcGxsIGNsb2NrXG4iKTsKLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfdXBsbCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciB1cGxsIGNsb2NrXG4iKTsKLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfZikgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgZmNsa1xuIik7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX2gpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IGhjbGtcbiIpOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19wKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBwY2xrXG4iKTsKLQotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwppbmRleCAzMDk4NzM2Li4zZDQ4MzcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggMjJhMzI5NS4uNTQyMDYyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTU1LDE2ICs1NCw2IEBACiAjaW5jbHVkZSA8cGxhdC9zM2MyNDQyLmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CiAKLXN0cnVjdCBjcHVfdGFibGUgewotCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwotCXVuc2lnbmVkIGxvbmcJaWRtYXNrOwotCXZvaWQJCSgqbWFwX2lvKShzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOwotCXZvaWQJCSgqaW5pdF91YXJ0cykoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOwotCXZvaWQJCSgqaW5pdF9jbG9ja3MpKGludCB4dGFsKTsKLQlpbnQJCSgqaW5pdCkodm9pZCk7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLX07Ci0KIC8qIHRhYmxlIG9mIHN1cHBvcnRlZCBDUFVzICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQwMFtdICA9ICJTM0MyNDAwIjsKQEAgLTE2OSwyMyArMTU4LDcgQEAKIAlJT0RFU0NfRU5UKFVBUlQpCiB9OwogCi1zdGF0aWMgc3RydWN0IGNwdV90YWJsZSAqIF9faW5pdCBzM2NfbG9va3VwX2NwdSh1bnNpZ25lZCBsb25nIGlkY29kZSkKLXsKLQlzdHJ1Y3QgY3B1X3RhYmxlICp0YWI7Ci0JaW50IGNvdW50OwotCi0JdGFiID0gY3B1X2lkczsKLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBBUlJBWV9TSVpFKGNwdV9pZHMpOyBjb3VudCsrLCB0YWIrKykgewotCQlpZiAoKGlkY29kZSAmIHRhYi0+aWRtYXNrKSA9PSB0YWItPmlkY29kZSkKLQkJCXJldHVybiB0YWI7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGNwdSBpbmZvcm1hdGlvbiAqLwotCi1zdGF0aWMgc3RydWN0IGNwdV90YWJsZSAqY3B1OworLyogcmVhZCBjcHUgaWRlbnRpZmljYWl0b24gY29kZSAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNHh4X3JlYWRfaWRjb2RlX3Y1KHZvaWQpCiB7CkBAIC0yMzEsNiArMjA0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlkY29kZSA9IDB4MDsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGlvIGRlc2NyaXB0b3JzIHdlIG5lZWQgZm9yIGluaXRpYWxpc2F0aW9uICovCisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7CiAJaW90YWJsZV9pbml0KHMzY19pb2Rlc2MsIEFSUkFZX1NJWkUoczNjX2lvZGVzYykpOwogCiAJaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NSkgewpAQCAtMjM5LDExNyArMjEzLDcgQEAKIAkJaWRjb2RlID0gczNjMjR4eF9yZWFkX2lkY29kZV92NCgpOwogCX0KIAotCWNwdSA9IHMzY19sb29rdXBfY3B1KGlkY29kZSk7Ci0KLQlpZiAoY3B1ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIENQVSB0eXBlIDB4JTA4bHhcbiIsIGlkY29kZSk7Ci0JCXBhbmljKCJVbmtub3duIFMzQzI0WFggQ1BVIik7Ci0JfQotCi0JcHJpbnRrKCJDUFUgJXMgKGlkIDB4JTA4bHgpXG4iLCBjcHUtPm5hbWUsIGlkY29kZSk7Ci0KLQlpZiAoY3B1LT5tYXBfaW8gPT0gTlVMTCB8fCBjcHUtPmluaXQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIkNQVSAlcyBzdXBwb3J0IG5vdCBlbmFibGVkXG4iLCBjcHUtPm5hbWUpOwotCQlwYW5pYygiVW5zdXBwb3J0ZWQgUzNDMjRYWCBDUFUiKTsKLQl9Ci0KIAlhcm1fcG1fcmVzdGFydCA9IHMzYzI0eHhfcG1fcmVzdGFydDsKIAotCShjcHUtPm1hcF9pbykobWFjaF9kZXNjLCBzaXplKTsKKwlzM2NfaW5pdF9jcHUoaWRjb2RlLCBjcHVfaWRzLCBBUlJBWV9TSVpFKGNwdV9pZHMpKTsKIH0KLQotLyogczNjMjR4eF9pbml0X2Nsb2NrcwotICoKLSAqIEluaXRpYWxpc2UgdGhlIGNsb2NrIHN1YnN5c3RlbSBhbmQgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZQotICogZ2l2ZW4gbWFzdGVyIGNyeXN0YWwgdmFsdWUuCi0gKgotICogeHRhbCAgPSAwIC0+IHVzZSBkZWZhdWx0IFBMTCBjcnlzdGFsIHZhbHVlIChub3JtYWxseSAxMk1IeikKLSAqICAgICAgIT0gMCAtPiBQTEwgY3J5c3RhbCB2YWx1ZSBpbiBIegotKi8KLQotdm9pZCBfX2luaXQgczNjMjR4eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKLXsKLQlpZiAoeHRhbCA9PSAwKQotCQl4dGFsID0gMTIqMTAwMCoxMDAwOwotCi0JaWYgKGNwdSA9PSBOVUxMKQotCQlwYW5pYygiczNjMjR4eF9pbml0X2Nsb2Nrczogbm8gY3B1IHNldHVwP1xuIik7Ci0KLQlpZiAoY3B1LT5pbml0X2Nsb2NrcyA9PSBOVUxMKQotCQlwYW5pYygiczNjMjR4eF9pbml0X2Nsb2NrczogY3B1IGhhcyBubyBjbG9jayBpbml0XG4iKTsKLQllbHNlCi0JCShjcHUtPmluaXRfY2xvY2tzKSh4dGFsKTsKLX0KLQotLyogdWFydCBtYW5hZ2VtZW50ICovCi0KLXN0YXRpYyBpbnQgbnJfdWFydHMgX19pbml0ZGF0YSA9IDA7Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHVhcnRfY2Znc1szXTsKLQotLyogczNjMjR4eF9pbml0X3VhcnRkZXZzCi0gKgotICogY29weSB0aGUgc3BlY2lmaWVkIHBsYXRmb3JtIGRhdGEgYW5kIGNvbmZpZ3VyYXRpb24gaW50byBvdXIgY2VudHJhbAotICogc2V0IG9mIGRldmljZXMsIGJlZm9yZSB0aGUgZGF0YSBpcyB0aHJvd24gYXdheSBhZnRlciB0aGUgaW5pdCBwcm9jZXNzLgotICoKLSAqIFRoaXMgYWxzbyBmaWxscyBpbiB0aGUgYXJyYXkgcGFzc2VkIHRvIHRoZSBzZXJpYWwgZHJpdmVyIGZvciB0aGUKLSAqIGVhcmx5IGluaXRpYWxpc2F0aW9uIG9mIHRoZSBjb25zb2xlLgotKi8KLQotdm9pZCBfX2luaXQgczNjMjR4eF9pbml0X3VhcnRkZXZzKGNoYXIgKm5hbWUsCi0JCQkJICBzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyAqcmVzLAotCQkJCSAgc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKLQlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmdwdHIgPSB1YXJ0X2NmZ3M7Ci0Jc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgKnJlc3A7Ci0JaW50IHVhcnQ7Ci0KLQltZW1jcHkoY2ZncHRyLCBjZmcsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnKSAqIG5vKTsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKywgY2ZncHRyKyspIHsKLQkJcGxhdGRldiA9IHMzYzI0eHhfdWFydF9zcmNbY2ZncHRyLT5od3BvcnRdOwotCi0JCXJlc3AgPSByZXMgKyBjZmdwdHItPmh3cG9ydDsKLQotCQlzM2MyNHh4X3VhcnRfZGV2c1t1YXJ0XSA9IHBsYXRkZXY7Ci0KLQkJcGxhdGRldi0+bmFtZSA9IG5hbWU7Ci0JCXBsYXRkZXYtPnJlc291cmNlID0gcmVzcC0+cmVzb3VyY2VzOwotCQlwbGF0ZGV2LT5udW1fcmVzb3VyY2VzID0gcmVzcC0+bnJfcmVzb3VyY2VzOwotCi0JCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZncHRyOwotCX0KLQotCW5yX3VhcnRzID0gbm87Ci19Ci0KLXZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKLXsKLQlpZiAoY3B1ID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChjcHUtPmluaXRfdWFydHMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHhfaW5pdF91YXJ0czogY3B1IGhhcyBubyB1YXJ0IGluaXRcbiIpOwotCX0gZWxzZQotCQkoY3B1LT5pbml0X3VhcnRzKShjZmcsIG5vKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgczNjX2FyY2hfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQkvLyBkbyB0aGUgY29ycmVjdCBpbml0IGZvciBjcHUKLQotCWlmIChjcHUgPT0gTlVMTCkKLQkJcGFuaWMoInMzY19hcmNoX2luaXQ6IE5VTEwgY3B1XG4iKTsKLQotCXJldCA9IChjcHUtPmluaXQpKCk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoczNjMjR4eF91YXJ0X2RldnMsIG5yX3VhcnRzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1hcmNoX2luaXRjYWxsKHMzY19hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggZTkzZjhiZi4uMTZhYzAxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KKyNpbmNsdWRlIDxwbGF0L3VkYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3Mtc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAvKiBTZXJpYWwgcG9ydCByZWdpc3RyYXRpb25zICovCiAKQEAgLTc2LDYgKzc2LDE5IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2MyNDEwX3VhcnQzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDQzX1BBX1VBUlQzLAorCQkuZW5kICAgPSBTM0MyNDQzX1BBX1VBUlQzICsgMHgzZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgzLAorCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjMjQxMF91YXJ0X3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkucmVzb3VyY2VzCT0gczNjMjQxMF91YXJ0MF9yZXNvdXJjZSwKQEAgLTg5LDYgKzEwMiwxMCBAQAogCQkucmVzb3VyY2VzCT0gczNjMjQxMF91YXJ0Ml9yZXNvdXJjZSwKIAkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjMjQxMF91YXJ0Ml9yZXNvdXJjZSksCiAJfSwKKwlbM10gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2MyNDEwX3VhcnQzX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2MyNDEwX3VhcnQzX3Jlc291cmNlKSwKKwl9LAogfTsKIAogLyogeWFydCBkZXZpY2VzICovCkBAIC0xMDUsMTMgKzEyMiwxOCBAQAogCS5pZAkJPSAyLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1szXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UzID0geworCS5pZAkJPSAzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1s0XSA9IHsKIAkmczNjMjR4eF91YXJ0X2RldmljZTAsCiAJJnMzYzI0eHhfdWFydF9kZXZpY2UxLAogCSZzM2MyNHh4X3VhcnRfZGV2aWNlMiwKKwkmczNjMjR4eF91YXJ0X2RldmljZTMsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1szXSA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdID0gewogfTsKIAogLyogVVNCIEhvc3QgQ29udHJvbGxlciAqLwpAQCAtMTkyLDggKzIxNCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX25hbmRfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfTkFORCwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9OQU5EICsgUzNDMjRYWF9TWl9OQU5EIC0gMSwKKwkJLnN0YXJ0ID0gUzNDMjRYWF9QQV9OQU5ELAorCQkuZW5kICAgPSBTM0MyNFhYX1BBX05BTkQgKyBTM0MyNFhYX1NaX05BTkQgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9CiB9OwpAQCAtMjcxLDMxICsyOTMsNiBAQAogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2Vfd2R0KTsKIAotLyogSTJDICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2kyY19yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjRYWF9QQV9JSUMsCi0JCS5lbmQgICA9IFMzQzI0WFhfUEFfSUlDICsgUzNDMjRYWF9TWl9JSUMgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX0lJQywKLQkJLmVuZCAgID0gSVJRX0lJQywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjID0gewotCS5uYW1lCQkgID0gInMzYzI0MTAtaTJjIiwKLQkuaWQJCSAgPSAtMSwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfaTJjX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY19pMmNfcmVzb3VyY2UsCi19OwotCi1FWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfaTJjKTsKLQogLyogSUlTICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2lpc19yZXNvdXJjZVtdID0gewpAQCAtMzcyLDE4ICszNjksMjYgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hZGMgPSB7Ci0JLm5hbWUJCSAgPSAiczNjMjQxMC1hZGMiLAorCS5uYW1lCQkgID0gInMzYzI0eHgtYWRjIiwKIAkuaWQJCSAgPSAtMSwKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfYWRjX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHMzY19hZGNfcmVzb3VyY2UsCiB9OwogCisvKiBIV01PTiAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHdtb24gPSB7CisJLm5hbWUJCT0gInMzYzI0eHgtaHdtb24iLAorCS5pZAkJPSAtMSwKKwkuZGV2LnBhcmVudAk9ICZzM2NfZGV2aWNlX2FkYy5kZXYsCit9OworCiAvKiBTREkgKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2Nfc2RpX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1NESSwKLQkJLmVuZCAgID0gUzNDMjQxMF9QQV9TREkgKyBTM0MyNFhYX1NaX1NESSAtIDEsCisJCS5zdGFydCA9IFMzQzI0WFhfUEFfU0RJLAorCQkuZW5kICAgPSBTM0MyNFhYX1BBX1NESSArIFMzQzI0WFhfU1pfU0RJIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC00MDMsMzYgKzQwOCw2IEBACiAKIEVYUE9SVF9TWU1CT0woczNjX2RldmljZV9zZGkpOwogCi0vKiBIaWdoLXNwZWVkIE1NQy9TRCAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19oc21tY19yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjQ0M19QQV9IU01NQywKLQkJLmVuZCAgID0gUzNDMjQ0M19QQV9IU01NQyArIFMzQzI0NDNfU1pfSFNNTUMgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX1MzQzI0NDNfSFNNTUMsCi0JCS5lbmQgICA9IElSUV9TM0MyNDQzX0hTTU1DLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgdTY0IHMzY19kZXZpY2VfaHNtbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jID0gewotCS5uYW1lCQkgID0gInMzYy1zZGhjaSIsCi0JLmlkCQkgID0gLTEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX2hzbW1jX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY19oc21tY19yZXNvdXJjZSwKLQkuZGV2ICAgICAgICAgICAgICA9IHsKLQkJLmRtYV9tYXNrID0gJnMzY19kZXZpY2VfaHNtbWNfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCi0JfQotfTsKLQotCi0KIC8qIFNQSSAoMCkgKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2Nfc3BpMF9yZXNvdXJjZVtdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IDFiYWY5NDEuLmFlZTJhZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTI1LDE1ICsyNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CkBAIC04MDQsNyArODAyLDcgQEAKICAqIGFsbG93ZWQgdG8gZ28gdGhyb3VnaC4KICovCiAKLWludCBzM2MyNDEwX2RtYV9mcmVlKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqY2xpZW50KQoraW50IHMzYzI0MTBfZG1hX2ZyZWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTk1LDcgKzk5Myw3IEBACiB9CiAKIGludAotczNjMjQxMF9kbWFfY3RybChkbWFjaF90IGNoYW5uZWwsIGVudW0gczNjMjQxMF9jaGFuX29wIG9wKQorczNjMjQxMF9kbWFfY3RybCh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApCiB7CiAJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7CiAKQEAgLTEwNDMsNyArMTA0MSw3IEBACiAgKiBkY29uOiAgICAgICAgIGJhc2UgdmFsdWUgb2YgdGhlIERDT054IHJlZ2lzdGVyCiAqLwogCi1pbnQgczNjMjQxMF9kbWFfY29uZmlnKGRtYWNoX3QgY2hhbm5lbCwKK2ludCBzM2MyNDEwX2RtYV9jb25maWcodW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCSAgICAgICBpbnQgeGZlcnVuaXQsCiAJCSAgICAgICBpbnQgZGNvbikKIHsKQEAgLTEwOTIsNyArMTA5MCw3IEBACiAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfY29uZmlnKTsKIAotaW50IHMzYzI0MTBfZG1hX3NldGZsYWdzKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgaW50IGZsYWdzKQoraW50IHMzYzI0MTBfZG1hX3NldGZsYWdzKHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7CiAKQEAgLTExMTMsNyArMTExMSw3IEBACiAgKiBpcnE/CiAqLwogCi1pbnQgczNjMjQxMF9kbWFfc2V0X29wZm4oZG1hY2hfdCBjaGFubmVsLCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKQoraW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKQogewogCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCkBAIC0xMTI5LDcgKzExMjcsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldF9vcGZuKTsKIAotaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NiZm5fdCBydG4pCitpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9jYmZuX3QgcnRuKQogewogCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCkBAIC0xMjE5LDcgKzEyMTcsNyBAQAogICogcmV0dXJucyB0aGUgY3VycmVudCB0cmFuc2ZlciBwb2ludHMgZm9yIHRoZSBkbWEgc291cmNlIGFuZCBkZXN0aW5hdGlvbgogKi8KIAotaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKGRtYWNoX3QgY2hhbm5lbCwgZG1hX2FkZHJfdCAqc3JjLCBkbWFfYWRkcl90ICpkc3QpCitpbnQgczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24odW5zaWduZWQgaW50IGNoYW5uZWwsIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZHN0KQogewogIAlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW9saWIuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvbGliLmMKaW5kZXggM2NhZWM2Yi4uZjk1YzZjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW9saWIuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpb2xpYi5jCkBAIC0xOSwxMDQgKzE5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2dwaW8tY29yZS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi1zdHJ1Y3QgczNjMjR4eF9ncGlvX2NoaXAgewotCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKLQl2b2lkIF9faW9tZW0JCSpiYXNlOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF9ncGlvX2NoaXAgKnRvX3MzY19jaGlwKHN0cnVjdCBncGlvX2NoaXAgKmdwYykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGdwYywgc3RydWN0IHMzYzI0eHhfZ3Bpb19jaGlwLCBjaGlwKTsKLX0KLQotLyogdGhlc2Ugcm91dGluZXMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHBsYXRmb3JtCi0gKiBhbmQgc3lzdGVtIHN1cHBvcnQsIGJ1dCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgYnkgdGhlCi0gKiBkcml2ZXJzIHRoZW1zZXZsZXMuCi0gKi8KLQotc3RhdGljIGludCBzM2MyNHh4X2dwaW9saWJfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBzM2MyNHh4X2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGNvbjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNvbiA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDAwKTsKLQljb24gJj0gfigzIDw8IChvZmZzZXQgKiAyKSk7Ci0JY29uIHw9IChTM0MyNDEwX0dQSU9fT1VUUFVUICYgMHhmKSA8PCAob2Zmc2V0ICogMik7Ci0KLQlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjR4eF9ncGlvbGliX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IHMzYzI0eHhfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZGF0OwotCXVuc2lnbmVkIGxvbmcgY29uOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDQpOwotCWRhdCAmPSB+KDEgPDwgb2Zmc2V0KTsKLQlpZiAodmFsdWUpCi0JCWRhdCB8PSAxIDw8IG9mZnNldDsKLQlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgMHgwNCk7Ci0KLQljb24gPSBfX3Jhd19yZWFkbChiYXNlICsgMHgwMCk7Ci0JY29uICY9IH4oMyA8PCAob2Zmc2V0ICogMikpOwotCWNvbiB8PSAoUzNDMjQxMF9HUElPX09VVFBVVCAmIDB4ZikgPDwgKG9mZnNldCAqIDIpOwotCi0JX19yYXdfd3JpdGVsKGNvbiwgYmFzZSArIDB4MDApOwotCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyAweDA0KTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgczNjMjR4eF9ncGlvbGliX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCXN0cnVjdCBzM2MyNHh4X2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGRhdDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKLQlkYXQgJj0gfigxIDw8IG9mZnNldCk7Ci0JaWYgKHZhbHVlKQotCQlkYXQgfD0gMSA8PCBvZmZzZXQ7Ci0JX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0eHhfZ3Bpb2xpYl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBzM2MyNHh4X2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19jaGlwKGNoaXApOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JdmFsID0gX19yYXdfcmVhZGwob3VyY2hpcC0+YmFzZSArIDB4MDQpOwotCXZhbCA+Pj0gb2Zmc2V0OwotCXZhbCAmPSAxOwotCi0JcmV0dXJuIHZhbDsKLX0KLQogc3RhdGljIGludCBzM2MyNHh4X2dwaW9saWJfYmFua2FfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXJldHVybiAtRUlOVkFMOwpAQCAtMTI1LDcgKzMzLDcgQEAKIHN0YXRpYyBpbnQgczNjMjR4eF9ncGlvbGliX2JhbmthX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgczNjMjR4eF9ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfY2hpcChjaGlwKTsKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGRhdDsKQEAgLTE1MSw3ICs1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ncGlvX2NoaXAgZ3Bpb3NbXSA9IHsKK3N0cnVjdCBzM2NfZ3Bpb19jaGlwIHMzYzI0eHhfZ3Bpb3NbXSA9IHsKIAlbMF0gPSB7CiAJCS5iYXNlCT0gUzNDMjRYWF9HUElPX0JBU0UoUzNDMjQxMF9HUEEwKSwKIAkJLmNoaXAJPSB7CkBAIC0xNjEsOCArNjksNiBAQAogCQkJLm5ncGlvCQkJPSAyNCwKIAkJCS5kaXJlY3Rpb25faW5wdXQJPSBzM2MyNHh4X2dwaW9saWJfYmFua2FfaW5wdXQsCiAJCQkuZGlyZWN0aW9uX291dHB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9iYW5rYV9vdXRwdXQsCi0JCQkuc2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfc2V0LAotCQkJLmdldAkJCT0gczNjMjR4eF9ncGlvbGliX2dldCwKIAkJfSwKIAl9LAogCVsxXSA9IHsKQEAgLTE3MiwxMCArNzgsNiBAQAogCQkJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkJCS5sYWJlbAkJCT0gIkdQSU9CIiwKIAkJCS5uZ3BpbwkJCT0gMTYsCi0JCQkuZGlyZWN0aW9uX2lucHV0CT0gczNjMjR4eF9ncGlvbGliX2lucHV0LAotCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBzM2MyNHh4X2dwaW9saWJfb3V0cHV0LAotCQkJLnNldAkJCT0gczNjMjR4eF9ncGlvbGliX3NldCwKLQkJCS5nZXQJCQk9IHMzYzI0eHhfZ3Bpb2xpYl9nZXQsCiAJCX0sCiAJfSwKIAlbMl0gPSB7CkBAIC0xODUsMTAgKzg3LDYgQEAKIAkJCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJCQkubGFiZWwJCQk9ICJHUElPQyIsCiAJCQkubmdwaW8JCQk9IDE2LAotCQkJLmRpcmVjdGlvbl9pbnB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9pbnB1dCwKLQkJCS5kaXJlY3Rpb25fb3V0cHV0CT0gczNjMjR4eF9ncGlvbGliX291dHB1dCwKLQkJCS5zZXQJCQk9IHMzYzI0eHhfZ3Bpb2xpYl9zZXQsCi0JCQkuZ2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfZ2V0LAogCQl9LAogCX0sCiAJWzNdID0gewpAQCAtMTk4LDEwICs5Niw2IEBACiAJCQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCQkJLmxhYmVsCQkJPSAiR1BJT0QiLAogCQkJLm5ncGlvCQkJPSAxNiwKLQkJCS5kaXJlY3Rpb25faW5wdXQJPSBzM2MyNHh4X2dwaW9saWJfaW5wdXQsCi0JCQkuZGlyZWN0aW9uX291dHB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9vdXRwdXQsCi0JCQkuc2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfc2V0LAotCQkJLmdldAkJCT0gczNjMjR4eF9ncGlvbGliX2dldCwKIAkJfSwKIAl9LAogCVs0XSA9IHsKQEAgLTIxMSwxMCArMTA1LDYgQEAKIAkJCS5sYWJlbAkJCT0gIkdQSU9FIiwKIAkJCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJCQkubmdwaW8JCQk9IDE2LAotCQkJLmRpcmVjdGlvbl9pbnB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9pbnB1dCwKLQkJCS5kaXJlY3Rpb25fb3V0cHV0CT0gczNjMjR4eF9ncGlvbGliX291dHB1dCwKLQkJCS5zZXQJCQk9IHMzYzI0eHhfZ3Bpb2xpYl9zZXQsCi0JCQkuZ2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfZ2V0LAogCQl9LAogCX0sCiAJWzVdID0gewpAQCAtMjI0LDEwICsxMTQsNiBAQAogCQkJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkJCS5sYWJlbAkJCT0gIkdQSU9GIiwKIAkJCS5uZ3BpbwkJCT0gOCwKLQkJCS5kaXJlY3Rpb25faW5wdXQJPSBzM2MyNHh4X2dwaW9saWJfaW5wdXQsCi0JCQkuZGlyZWN0aW9uX291dHB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9vdXRwdXQsCi0JCQkuc2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfc2V0LAotCQkJLmdldAkJCT0gczNjMjR4eF9ncGlvbGliX2dldCwKIAkJfSwKIAl9LAogCVs2XSA9IHsKQEAgLTIzNywyMSArMTIzLDE3IEBACiAJCQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCQkJLmxhYmVsCQkJPSAiR1BJT0ciLAogCQkJLm5ncGlvCQkJPSAxMCwKLQkJCS5kaXJlY3Rpb25faW5wdXQJPSBzM2MyNHh4X2dwaW9saWJfaW5wdXQsCi0JCQkuZGlyZWN0aW9uX291dHB1dAk9IHMzYzI0eHhfZ3Bpb2xpYl9vdXRwdXQsCi0JCQkuc2V0CQkJPSBzM2MyNHh4X2dwaW9saWJfc2V0LAotCQkJLmdldAkJCT0gczNjMjR4eF9ncGlvbGliX2dldCwKIAkJfSwKIAl9LAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgczNjMjR4eF9ncGlvbGliX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgczNjMjR4eF9ncGlvX2NoaXAgKmNoaXAgPSBncGlvczsKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IHMzYzI0eHhfZ3Bpb3M7CiAJaW50IGdwbjsKIAotCWZvciAoZ3BuID0gMDsgZ3BuIDwgQVJSQVlfU0laRShncGlvcyk7IGdwbisrLCBjaGlwKyspCi0JCWdwaW9jaGlwX2FkZCgmY2hpcC0+Y2hpcCk7CisJZm9yIChncG4gPSAwOyBncG4gPCBBUlJBWV9TSVpFKHMzYzI0eHhfZ3Bpb3MpOyBncG4rKywgY2hpcCsrKQorCQlzM2NfZ3Bpb2xpYl9hZGQoY2hpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODdkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzI0eHggLSBwd20gY2xvY2sgYW5kIHRpbWVyIHN1cHBvcnQKKyAqLworCisvKioKKyAqIHB3bV9jZmdfc3JjX2lzX3RjbGsoKSAtIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBtdXggY29uZmlnIGlzIGEgdGNsaworICogQGNmZzogVGhlIHRpbWVyIFRDRkcxIHJlZ2lzdGVyIGJpdHMgc2hpZnRlZCBkb3duIHRvIDAuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gZnJvbSBUQ0ZHMSBpcyBhIFRDTEsgaW5zdGVhZAorICogYW55IG9mIHRoZSBURElWIGNsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHdtX2NmZ19zcmNfaXNfdGNsayh1bnNpZ25lZCBsb25nIHRjZmcpCit7CisJcmV0dXJuIHRjZmcgPT0gUzNDMjQxMF9UQ0ZHMV9NVVhfVENMSzsKK30KKworLyoqCisgKiB0Y2ZnX3RvX2Rpdmlzb3IoKSAtIGNvbnZlcnQgdGNmZzEgc2V0dGluZyB0byBhIGRpdmlzb3IKKyAqIEB0Y2ZnMTogVGhlIHRjZmcxIHNldHRpbmcsIHNoaWZ0ZWQgZG93bi4KKyAqCisgKiBHZXQgdGhlIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBnaXZlbiB0Y2ZnMSBzZXR0aW5nLiBXZSBhc3N1bWUgdGhlCisgKiBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0byBzZWUgaWYgdGhpcyBpcyBub3QgYSBUQ0xLIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjZmdfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIHRjZmcxKQoreworCXJldHVybiAxIDw8ICgxICsgdGNmZzEpOworfQorCisvKioKKyAqIHB3bV90ZGl2X2hhc19kaXYxKCkgLSBkb2VzIHRoZSB0ZGl2IHNldHRpbmcgaGF2ZSBhIC8xCisgKgorICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIC8xIGluIHRoZSB0ZGl2IHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB3bV90ZGl2X2hhc19kaXYxKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdtX3RkaXZfZGl2X2JpdHMoKSAtIGNhbGN1bGF0ZSBUQ0ZHMSBkaXZpc29yIHZhbHVlLgorICogQGRpdjogVGhlIGRpdmlzb3IgdG8gY2FsY3VsYXRlIHRoZSBiaXQgaW5mb3JtYXRpb24gZm9yLgorICoKKyAqIFR1cm4gYSBkaXZpc29yIGludG8gdGhlIG5lY2Vzc2FyeSBiaXQgZmllbGQgZm9yIFRDRkcxLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHdtX3RkaXZfZGl2X2JpdHModW5zaWduZWQgaW50IGRpdikKK3sKKwlyZXR1cm4gaWxvZzIoZGl2KSAtIDE7Cit9CisKKyNkZWZpbmUgUzNDX1RDRkcxX01VWF9UQ0xLIFMzQzI0MTBfVENGRzFfTVVYX1RDTEsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWFwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjhlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvbWFwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1MzQzI0WFhfTUFQX0gKKyNkZWZpbmUgX19BU01fUExBVF9TM0MyNFhYX01BUF9ICisKKy8qIGludGVycnVwdCBjb250cm9sbGVyIGlzIHRoZSBmaXJzdCB0aGluZyB3ZSBwdXQgaW4sIHRvIG1ha2UKKyAqIHRoZSBhc3NlbWJseSBjb2RlIGZvciB0aGUgaXJxIGRldGVjdGlvbiBlYXNpZXIKKyAqLworI2RlZmluZSBTM0MyNFhYX1ZBX0lSUQkgICBTM0NfVkFfSVJRCisjZGVmaW5lIFMzQzI0MTBfUEFfSVJRCSAgICgweDRBMDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX0lSUQkgICBTWl8xTQorCisvKiBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9NRU1DVFJMIFMzQ19WQV9NRU0KKyNkZWZpbmUgUzNDMjQxMF9QQV9NRU1DVFJMICgweDQ4MDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1NaX01FTUNUUkwgU1pfMU0KKworLyogVUFSVHMgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUCSAgIFMzQ19WQV9VQVJUCisjZGVmaW5lIFMzQzI0MTBfUEFfVUFSVAkgICAoMHg1MDAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9VQVJUCSAgIFNaXzFNCisjZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkgICAoMHg0MDAwKQorCisvKiBUaW1lcnMgKi8KKyNkZWZpbmUgUzNDMjRYWF9WQV9USU1FUiAgIFMzQ19WQV9USU1FUgorI2RlZmluZSBTM0MyNDEwX1BBX1RJTUVSICAgKDB4NTEwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfVElNRVIgICBTWl8xTQorCisvKiBDbG9jayBhbmQgUG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTM0MyNFhYX1ZBX0NMS1BXUiAgUzNDX1ZBX1NZUworI2RlZmluZSBTM0MyNFhYX1NaX0NMS1BXUiAgU1pfMU0KKworLyogVVNCIERldmljZSBwb3J0ICovCisjZGVmaW5lIFMzQzI0MTBfUEFfVVNCREVWICAoMHg1MjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9VU0JERVYgIFNaXzFNCisKKy8qIFdhdGNoZG9nICovCisjZGVmaW5lIFMzQzI0WFhfVkFfV0FUQ0hET0cgUzNDX1ZBX1dBVENIRE9HCisjZGVmaW5lIFMzQzI0MTBfUEFfV0FUQ0hET0cgKDB4NTMwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfU1pfV0FUQ0hET0cgU1pfMU0KKworLyogU3RhbmRhcmQgc2l6ZSBkZWZpbml0aW9ucyBmb3IgcGVyaXBoZXJhbCBibG9ja3MuICovCisKKyNkZWZpbmUgUzNDMjRYWF9TWl9JSVMJCVNaXzFNCisjZGVmaW5lIFMzQzI0WFhfU1pfQURDCQlTWl8xTQorI2RlZmluZSBTM0MyNFhYX1NaX1NQSQkJU1pfMU0KKyNkZWZpbmUgUzNDMjRYWF9TWl9TREkJCVNaXzFNCisjZGVmaW5lIFMzQzI0WFhfU1pfTkFORAkJU1pfMU0KKyNkZWZpbmUgUzNDMjRYWF9TWl9VU0JIT1NUCVNaXzFNCisKKy8qIEdQSU8gcG9ydHMgKi8KKworLyogdGhlIGNhbGN1bGF0aW9uIGZvciB0aGUgVkEgb2YgdGhpcyBtdXN0IGVuc3VyZSB0aGF0CisgKiBpdCBpcyB0aGUgc2FtZSBkaXN0YW5jZSBhcGFydCBmcm9tIHRoZSBVQVJUIGluIHRoZQorICogcGhzeWljYWwgYWRkcmVzcyBzcGFjZSwgYXMgdGhlIGluaXRpYWwgbWFwcGluZyBmb3IgdGhlIElPCisgKiBpcyBkb25lIGFzIGEgMToxIG1hcGluZy4gVGhpcyBwdXRzIGl0IChjdXJyZW50bHkpIGF0CisgKiAweEZBODAwMDAwLCB3aGljaCBpcyBub3QgaW4gdGhlIHdheSBvZiBhbnkgY3VycmVudCBtYXBwaW5nCisgKiBieSB0aGUgYmFzZSBzeXN0ZW0uCisqLworCisjZGVmaW5lIFMzQzI0MTBfUEFfR1BJTwkgICAoMHg1NjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9WQV9HUElPCSAgICgoUzNDMjRYWF9QQV9HUElPIC0gUzNDMjRYWF9QQV9VQVJUKSArIFMzQzI0WFhfVkFfVUFSVCkKKyNkZWZpbmUgUzNDMjRYWF9TWl9HUElPCSAgIFNaXzFNCisKKworLyogSVNBIHN0eWxlIElPLCBmb3IgZWFjaCBtYWNoaW5lIHRvIHNvcnQgb3V0IG1hcHBpbmdzIGZvciwgaWYgaXQKKyAqIGltcGxlbWVudHMgaXQuIFdlIHJlc2VydmUgdHdvIDE2TSByZWdpb25zIGZvciBJU0EuCisgKi8KKworI2RlZmluZSBTM0MyNFhYX1ZBX0lTQV9XT1JEICBTM0MyNDEwX0FERFIoMHgwMjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9WQV9JU0FfQllURSAgUzNDMjQxMF9BRERSKDB4MDMwMDAwMDApCisKKy8qIGRlYWwgd2l0aCB0aGUgcmVnaXN0ZXJzIHRoYXQgbW92ZSB1bmRlciB0aGUgMjQxMi8yNDEzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTMpCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX19pb21lbSAqczNjMjR4eF92YV9ncGlvMjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxMl9PTkxZCisjZGVmaW5lIFMzQzI0WFhfVkFfR1BJTzIgKFMzQzI0WFhfVkFfR1BJTyArIDB4MTApCisjZWxzZQorI2RlZmluZSBTM0MyNFhYX1ZBX0dQSU8yIHMzYzI0eHhfdmFfZ3BpbzIKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgczNjMjR4eF92YV9ncGlvMiBTM0MyNFhYX1ZBX0dQSU8KKyNkZWZpbmUgUzNDMjRYWF9WQV9HUElPMiBTM0MyNFhYX1ZBX0dQSU8KKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fUExBVF9TM0MyNFhYX01BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L21jaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9tY2kuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbGwuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcGxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhOGJmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcGxsLmgKQEAgLTAsMCArMSwzNyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbGwuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDMjR4eCAtIGNvbW1vbiBwbGwgcmVnaXN0ZXJzIGFuZCBjb2RlCisgKi8KKworI2RlZmluZSBTM0MyNFhYX1BMTENPTl9NRElWU0hJRlQJMTIKKyNkZWZpbmUgUzNDMjRYWF9QTExDT05fUERJVlNISUZUCTQKKyNkZWZpbmUgUzNDMjRYWF9QTExDT05fU0RJVlNISUZUCTAKKyNkZWZpbmUgUzNDMjRYWF9QTExDT05fTURJVk1BU0sJCSgoMTw8KDErKDE5LTEyKSkpLTEpCisjZGVmaW5lIFMzQzI0WFhfUExMQ09OX1BESVZNQVNLCQkoKDE8PDUpLTEpCisjZGVmaW5lIFMzQzI0WFhfUExMQ09OX1NESVZNQVNLCQkzCisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3MzYzI0eHhfZ2V0X3BsbCh1bnNpZ25lZCBpbnQgcGxsdmFsLCB1bnNpZ25lZCBpbnQgYmFzZWNsaykKK3sKKwl1bnNpZ25lZCBpbnQgbWRpdiwgcGRpdiwgc2RpdjsKKwl1aW50NjRfdCBmdmNvOworCisJbWRpdiA9IHBsbHZhbCA+PiBTM0MyNFhYX1BMTENPTl9NRElWU0hJRlQ7CisJcGRpdiA9IHBsbHZhbCA+PiBTM0MyNFhYX1BMTENPTl9QRElWU0hJRlQ7CisJc2RpdiA9IHBsbHZhbCA+PiBTM0MyNFhYX1BMTENPTl9TRElWU0hJRlQ7CisKKwltZGl2ICY9IFMzQzI0WFhfUExMQ09OX01ESVZNQVNLOworCXBkaXYgJj0gUzNDMjRYWF9QTExDT05fUERJVk1BU0s7CisJc2RpdiAmPSBTM0MyNFhYX1BMTENPTl9TRElWTUFTSzsKKworCWZ2Y28gPSAodWludDY0X3QpYmFzZWNsayAqIChtZGl2ICsgOCk7CisJZG9fZGl2KGZ2Y28sIChwZGl2ICsgMikgPDwgc2Rpdik7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludClmdmNvOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLXNwaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3Mtc3BpLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zcGkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXVkYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLXVkYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtdWRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy11ZGMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDAwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MDAuaAppbmRleCAzYTVhMTY4Li5iM2ZlYWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MDAuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MDAuaApAQCAtMTcsNyArMTcsNyBAQAogCiBleHRlcm4gIGludCBzM2MyNDAwX2luaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIHMzYzI0MDBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBzM2MyNDAwX21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQwMF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaAppbmRleCAzY2QxZWM2Li5hOWFjOWUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaApAQCAtMTUsNyArMTUsNyBAQAogCiBleHRlcm4gIGludCBzM2MyNDEwX2luaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIHMzYzI0MTBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBzM2MyNDEwX21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQxMF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEyLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaAppbmRleCAzZWM5NzY4Li5iYjE1ZDNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaApAQCAtMTQsNyArMTQsNyBAQAogCiBleHRlcm4gIGludCBzM2MyNDEyX2luaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIHMzYzI0MTJfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBzM2MyNDEyX21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQxMl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQzLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaAppbmRleCAxMWQ4M2I1Li44MTViMTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaApAQCAtMTYsNyArMTYsNyBAQAogCiBleHRlcm4gIGludCBzM2MyNDQzX2luaXQodm9pZCk7CiAKLWV4dGVybiB2b2lkIHMzYzI0NDNfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBzM2MyNDQzX21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQ0M19pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC91ZGMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvdWRjLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvdWRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvdWRjLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwppbmRleCA5NjNmN2E0Li4wMTkyZWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCkBAIC02Miw2ICs2Miw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAorI2luY2x1ZGUgPHBsYXQvcmVncy1pcnF0eXBlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKaW5kZXggOGVmYjU3YS4uMzRlZjE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC03NiwxMSArNzUsMTMgQEAKIAlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09ONCksCiAJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjUpLAogCisjaWZuZGVmIENPTkZJR19DUFVfRlJFUQogCVNBVkVfSVRFTShTM0MyNDEwX0NMS0RJVk4pLAogCVNBVkVfSVRFTShTM0MyNDEwX01QTExDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX1JFRlJFU0gpLAorI2VuZGlmCiAJU0FWRV9JVEVNKFMzQzI0MTBfVVBMTENPTiksCiAJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLU0xPVyksCi0JU0FWRV9JVEVNKFMzQzI0MTBfUkVGUkVTSCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fc2xlZXAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1jbG9jay5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1jbG9jay5jCmluZGV4IDRlMDc5NDMuLmI2MWJkYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLWNsb2NrLmMKQEAgLTI3Miw1ICsyNzIsNiBAQAogCSAgICAgICAoY2xrc2xvdyAmIFMzQzI0MTBfQ0xLU0xPV19NUExMX09GRikgPyAib2ZmIiA6ICJvbiIsCiAJICAgICAgIChjbGtzbG93ICYgUzNDMjQxMF9DTEtTTE9XX1VDTEtfT0ZGKSA/ICJvZmYiIDogIm9uIik7CiAKKwlzM2NfcHdtY2xrX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCmluZGV4IDdjMDk3NzMuLmRkZTQxZjE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKQEAgLTEwMiwxMyArMTAxLDEzIEBACiAJaWYgKGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSA+ICg5NCAqIE1IWikpIHsKIAkJY2xrX3VzYl9idXMucmF0ZSA9IGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSAvIDI7CiAKLQkJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwkJc3Bpbl9sb2NrKCZjbG9ja3NfbG9jayk7CiAKIAkJY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CiAJCWNsa2Rpdm4gfD0gUzNDMjQ0MF9DTEtESVZOX1VDTEs7CiAJCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOwogCi0JCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwkJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCmluZGV4IGMwMzQ0ZmEuLmMxZGU2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KQEAgLTQyLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NHhfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlJT0RFU0NfRU5UKENMS1BXUiksCkBAIC01NiwzMiArNTksMzQgQEAKIAlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzI0NDAtdWFydCIsIHMzYzI0MTBfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOwogfQogCi12b2lkIF9faW5pdCBzM2MyNDR4X21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit2b2lkIF9faW5pdCBzM2MyNDR4X21hcF9pbyh2b2lkKQogewogCS8qIHJlZ2lzdGVyIG91ciBpby10YWJsZXMgKi8KIAogCWlvdGFibGVfaW5pdChzM2MyNDR4X2lvZGVzYywgQVJSQVlfU0laRShzM2MyNDR4X2lvZGVzYykpOwotCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIHNpemUpOwogCiAJLyogcmVuYW1lIGFueSBwZXJpcGhlcmFscyB1c2VkIGRpZmZlcmluZyBmcm9tIHRoZSBzM2MyNDEwICovCiAKIAlzM2NfZGV2aWNlX3NkaS5uYW1lICA9ICJzM2MyNDQwLXNkaSI7Ci0JczNjX2RldmljZV9pMmMubmFtZSAgPSAiczNjMjQ0MC1pMmMiOworCXMzY19kZXZpY2VfaTJjMC5uYW1lICA9ICJzM2MyNDQwLWkyYyI7CiAJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQ0MC1uYW5kIjsKIAlzM2NfZGV2aWNlX3VzYmdhZGdldC5uYW1lID0gInMzYzI0NDAtdXNiZ2FkZ2V0IjsKIH0KIAotdm9pZCBfX2luaXQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQ0eF9zZXR1cF9jbG9ja3Modm9pZCkKIHsKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKIAl1bnNpZ25lZCBsb25nIGNsa2RpdjsKIAl1bnNpZ25lZCBsb25nIGNhbWRpdjsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CiAJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOwogCWludCBoZGl2ID0gMTsKIAotCS8qIG5vdyB3ZSd2ZSBnb3Qgb3VyIG1hY2hpbmUgYml0cyBpbml0aWFsaXNlZCwgd29yayBvdXQgd2hhdAotCSAqIGNsb2NrcyB3ZSd2ZSBnb3QgKi8KKwl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKIAotCWZjbGsgPSBzM2MyNDEwX2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCkgKiAyOworCWZjbGsgPSBzM2MyNHh4X2dldF9wbGwoX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKSwgeHRhbCkgKiAyOwogCiAJY2xrZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKIAljYW1kaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOwpAQCAtMTA3LDE4ICsxMTIsMjQgQEAKIAl9CiAKIAloY2xrID0gZmNsayAvIGhkaXY7Ci0JcGNsayA9IGhjbGsgLyAoKGNsa2RpdiAmIFMzQzI0NDBfQ0xLRElWTl9QRElWTik/IDI6MSk7CisJcGNsayA9IGhjbGsgLyAoKGNsa2RpdiAmIFMzQzI0NDBfQ0xLRElWTl9QRElWTikgPyAyIDogMSk7CiAKIAkvKiBwcmludCBicmllZiBzdW1tYXJ5IG9mIGNsb2NrcywgZXRjICovCiAKIAlwcmludGsoIlMzQzI0NFg6IGNvcmUgJWxkLiUwM2xkIE1IeiwgbWVtb3J5ICVsZC4lMDNsZCBNSHosIHBlcmlwaGVyYWwgJWxkLiUwM2xkIE1IelxuIiwKIAkgICAgICAgcHJpbnRfbWh6KGZjbGspLCBwcmludF9taHooaGNsayksIHByaW50X21oeihwY2xrKSk7CiAKKwlzM2MyNHh4X3NldHVwX2Nsb2NrcyhmY2xrLCBoY2xrLCBwY2xrKTsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKIAkvKiBpbml0aWFsaXNlIHRoZSBjbG9ja3MgaGVyZSwgdG8gYWxsb3cgb3RoZXIgdGhpbmdzIGxpa2UgdGhlCiAJICogY29uc29sZSB0byB1c2UgdGhlbSwgYW5kIHRvIGFkZCBuZXcgb25lcyBhZnRlciB0aGUgaW5pdGlhbGlzYXRpb24KIAkgKi8KIAotCXMzYzI0eHhfc2V0dXBfY2xvY2tzKHh0YWwsIGZjbGssIGhjbGssIHBjbGspOworCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKKwlzM2MyNDR4X3NldHVwX2Nsb2NrcygpOwogCXMzYzI0MTBfYmFzZWNsa19hZGQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmgKaW5kZXggZjhlZDE3Ni4uNmFhYjVlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5oCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCiAKLWV4dGVybiB2b2lkIHMzYzI0NHhfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CitleHRlcm4gdm9pZCBzM2MyNDR4X21hcF9pbyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NldHVwLWkyYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NldHVwLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MmI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2V0dXAtaTJjLmMKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NldHVwLWkyYy5jCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBCYXNlIHNldHVwIGZvciBpMmMgZGV2aWNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKKworI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKK3ZvaWQgczNjX2kyYzBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxNSwgUzNDMjQxMF9HUEUxNV9JSUNTREEpOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxNCwgUzNDMjQxMF9HUEUxNF9JSUNTQ0wpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMwLWdwZTExXzEyXzEzLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc3BpLWJ1czAtZ3BlMTFfMTJfMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQwM2NiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMwLWdwZTExXzEyXzEzLmMKQEAgLTAsMCArMSwzNyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMwLWdwZTExXzEyXzEzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggU1BJIC0gZ3BpbyBjb25maWd1cmF0aW9uIGZvciBidXMgMCBvbiBncGUxMSwxMiwxMworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKwordm9pZCBzM2MyNHh4X3NwaV9ncGlvY2ZnX2J1czBfZ3BlMTFfMTJfMTMoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKKwkJCQkJICBpbnQgZW5hYmxlKQoreworCWlmIChlbmFibGUpIHsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEzLCBTM0MyNDEwX0dQRTEzX1NQSUNMSzApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMTIsIFMzQzI0MTBfR1BFMTJfU1BJTU9TSTApOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMTEsIFMzQzI0MTBfR1BFMTFfU1BJTUlTTzApOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BFMTEsIDApOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BFMTMsIDApOworCX0gZWxzZSB7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxMywgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTExLCBTM0MyNDEwX0dQSU9fSU5QVVQpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BFMTEsIDEpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BFMTIsIDEpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BFMTMsIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMS1ncGc1XzZfNy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMxLWdwZzVfNl83LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjY2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMS1ncGc1XzZfNy5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMC1ncGc1XzZfNy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIGdwaW8gY29uZmlndXJhdGlvbiBmb3IgYnVzIDEgb24gZ3BnNSw2LDcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKK3ZvaWQgczNjMjR4eF9zcGlfZ3Bpb2NmZ19idXMxX2dwZzVfNl83KHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksCisJCQkJICAgICAgIGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkgeworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BHNywgUzNDMjQxMF9HUEc3X1NQSUNMSzEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BHNiwgUzNDMjQxMF9HUEc2X1NQSU1PU0kxKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRzUsIFMzQzI0MTBfR1BHNV9TUElNSVNPMSk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEc1LCAwKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRzYsIDApOworCX0gZWxzZSB7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEc3LCBTM0MyNDEwX0dQSU9fSU5QVVQpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BHNSwgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRzUsIDEpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BHNiwgMSk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEc3LCAxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mzc1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvS2NvbmZpZwpAQCAtMCwwICsxLDYyIEBACisjIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnCisjCisjIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisjIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworIwlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK2NvbmZpZyBQTEFUX1MzQzY0WFgKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFgKKwlkZWZhdWx0IHkKKwlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IFBMQVRfUzNDCisJc2VsZWN0IEFSTV9WSUMKKwlzZWxlY3QgTk9fSU9QT1JUCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IFMzQ19HUElPX1RSQUNLCisJc2VsZWN0IFMzQ19HUElPX1BVTExfVVBET1dOCisJc2VsZWN0IFMzQ19HUElPX0NGR19TM0MyNFhYCisJc2VsZWN0IFMzQ19HUElPX0NGR19TM0M2NFhYCisJaGVscAorCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTM0M2NFhYIGRldmljZQorCitpZiBQTEFUX1MzQzY0WFgKKworIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgc2hhcmVkIGJ5IGFsbCBTM0M2NFhYIGltcGxlbWVudGF0aW9ucworCitjb25maWcgQ1BVX1MzQzY0MDBfSU5JVAorCWJvb2wKKwloZWxwCisJICBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgdGhlIFMzQzY0MDAgdGhhdCBpcyBzaGFyZWQKKwkgIGJ5IG90aGVyIENQVXMgaW4gdGhlIHNlcmllcywgc3VjaCBhcyB0aGUgUzNDNjQxMC4KKworY29uZmlnIENQVV9TM0M2NDAwX0NMT0NLCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBjbG9jayBzdXBwb3J0IGNvZGUgZm9yIHRoZSBTM0M2NDAwIHRoYXQgaXMgc2hhcmVkCisJICBieSBvdGhlciBDUFVzIGluIHRoZSBzZXJpZXMsIHN1Y2ggYXMgdGhlIFMzQzY0MTAuCisKKyMgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIHNldHVwCisKK2NvbmZpZyBTM0M2NFhYX1NFVFVQX0kyQzAKKwlib29sCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMC4KKworCSAgTm90ZSwgY3VycmVudGx5IHNpbmNlIGkyYzAgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGlzIHNldHVwIGhlbHBlcgorCSAgaXMgYWx3YXlzIGNvbXBpbGVkIHdpdGggaXQuCisKK2NvbmZpZyBTM0M2NFhYX1NFVFVQX0kyQzEKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMS4KKworY29uZmlnIFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFMzQzY0WFggd2l0aCBhbiAyNGJwcCBSR0IgZGlzcGxheSBoZWxwZXIuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2ZDc5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDMxIEBACisjIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorIyBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PSBkdW1teS5vCitvYmotCQkJCTo9CisKKyMgQ29yZSBmaWxlcworCitvYmoteQkJCQkrPSBkZXYtdWFydC5vCitvYmoteQkJCQkrPSBjcHUubworb2JqLXkJCQkJKz0gaXJxLm8KK29iai15CQkJCSs9IGlycS1laW50Lm8KK29iai15CQkJCSs9IGNsb2NrLm8KK29iai15CQkJCSs9IGdwaW9saWIubworCisjIENQVSBzdXBwb3J0CisKK29iai0kKENPTkZJR19DUFVfUzNDNjQwMF9JTklUKQkrPSBzM2M2NDAwLWluaXQubworb2JqLSQoQ09ORklHX0NQVV9TM0M2NDAwX0NMT0NLKQkrPSBzM2M2NDAwLWNsb2NrLm8KKworIyBEZXZpY2Ugc2V0dXAKKworb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMCkgKz0gc2V0dXAtaTJjMC5vCitvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMxKSArPSBzZXR1cC1pMmMxLm8KK29iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0ZCXzI0QlBQKSArPSBzZXR1cC1mYi0yNGJwcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmM5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY2xvY2suYwpAQCAtMCwwICsxLDI4MSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0WFggQmFzZSBjbG9jayBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXN5cy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorCitzdHJ1Y3QgY2xrIGNsa18yN20gPSB7CisJLm5hbWUJCT0gImNsa18yN20iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAyNzAwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgY2xrXzQ4bV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwkvKiBjYW4ndCByZWx5IG9uIGNsb2NrIGxvY2ssIHRoaXMgcmVnaXN0ZXIgaGFzIG90aGVyIHVzYWdlcyAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfT1RIRVJTKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gUzNDNjRYWF9PVEhFUlNfVVNCTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+UzNDNjRYWF9PVEhFUlNfVVNCTUFTSzsKKworCV9fcmF3X3dyaXRlbCh2YWwsIFMzQzY0WFhfT1RIRVJTKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNsayBjbGtfNDhtID0geworCS5uYW1lCQk9ICJjbGtfNDhtIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmVuYWJsZQkJPSBjbGtfNDhtX2N0cmwsCit9OworCitzdGF0aWMgaW50IGlubGluZSBzM2M2NHh4X2dhdGUodm9pZCBfX2lvbWVtICpyZWcsCisJCQkJc3RydWN0IGNsayAqY2xrLAorCQkJCWludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGN0cmxiaXQgPSBjbGstPmN0cmxiaXQ7CisJdTMyIGNvbjsKKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisKKwlpZiAoZW5hYmxlKQorCQljb24gfD0gY3RybGJpdDsKKwllbHNlCisJCWNvbiAmPSB+Y3RybGJpdDsKKworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9wY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzM2M2NHh4X2dhdGUoUzNDX1BDTEtfR0FURSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfaGNsa19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjNjR4eF9nYXRlKFMzQ19IQ0xLX0dBVEUsIGNsaywgZW5hYmxlKTsKK30KKworaW50IHMzYzY0eHhfc2Nsa19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjNjR4eF9nYXRlKFMzQ19TQ0xLX0dBVEUsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCX0sIHsKKwkJLm5hbWUJCT0gImFkYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1RTQURDLAorCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0lJQywKKwl9LCB7CisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0lJUzAsCisJfSwgeworCQkubmFtZQkJPSAiaWlzIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19JSVMxLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaSIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfU1BJMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1NQSTEsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzBfNDgsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzFfNDgsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzJfNDgsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzW10gPSB7CisJeworCQkubmFtZQkJPSAibGNkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfTENELAorCX0sIHsKKwkJLm5hbWUJCT0gImdwaW8iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19HUElPLAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1ob3N0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1NDTEtfVUhPU1QsCisJfSwgeworCQkubmFtZQkJPSAiaHNtbWMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMxLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfaGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fSENMS19IU01NQzIsCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfUFdNLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQxLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQyLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMywKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQzLAorCX0sIHsKKwkJLm5hbWUJCT0gInJ0YyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1JUQywKKwl9LCB7CisJCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1dEVCwKKwl9LCB7CisJCS5uYW1lCQk9ICJhYzk3IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfQUM5NywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJJmNsa19leHQsCisJJmNsa19lcGxsLAorCSZjbGtfMjdtLAorCSZjbGtfNDhtLAorfTsKKwordm9pZCBzM2M2NHh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoY2xrcywgQVJSQVlfU0laRShjbGtzKSk7CisKKwljbGtwID0gaW5pdF9jbG9ja3M7CisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKTsgcHRyKyssIGNsa3ArKykgeworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJfQorCisJY2xrcCA9IGluaXRfY2xvY2tzX2Rpc2FibGU7CisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX2Rpc2FibGUpOyBwdHIrKywgY2xrcCsrKSB7CisKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCisJCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKKwkJfQorCisJCShjbGtwLT5lbmFibGUpKGNsa3AsIDApOworCX0KKworCXMzY19wd21jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGUxODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCBDUFUgU3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3MzYzY0MDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KKworLyogdGFibGUgb2Ygc3VwcG9ydGVkIENQVXMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2M2NDAwW10gPSAiUzNDNjQwMCI7CitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzY0MTBbXSA9ICJTM0M2NDEwIjsKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRjb2RlCQk9IDB4MzY0MDAwMDAsCisJCS5pZG1hc2sJCT0gMHhmZmZmZjAwMCwKKwkJLm1hcF9pbwkJPSBzM2M2NDAwX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjNjQwMF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2M2NDAwX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzY0MDBfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2M2NDAwLAorCX0sIHsKKwkJLmlkY29kZQkJPSAweDM2NDEwMTAwLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmZmMDAsCisJCS5tYXBfaW8JCT0gczNjNjQxMF9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHMzYzY0MTBfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczNjNjQxMF9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzM2M2NDEwX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczNjNjQxMCwKKwl9LAorfTsKKworLyogbWluaW1hbCBJTyBtYXBwaW5nICovCisKKy8qIHNlZSBub3RlcyBvbiB1YXJ0IG1hcCBpbiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgKi8KKyNkZWZpbmUgVUFSVF9PRkZTIChTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX1NZU0NPTiksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpKFMzQ19WQV9VQVJUICsgVUFSVF9PRkZTKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9VQVJUKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVklDMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfVklDMCksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9WSUMxLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9WSUMxKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1RJTUVSLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDX1BBX1RJTUVSKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDNjRYWF9WQV9HUElPLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9HUElPKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCisvKiByZWFkIGNwdSBpZGVudGlmaWNhdGlvbiBjb2RlICovCisKK3ZvaWQgX19pbml0IHMzYzY0eHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBpZGNvZGU7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBpbyBkZXNjcmlwdG9ycyB3ZSBuZWVkIGZvciBpbml0aWFsaXNhdGlvbiAqLworCWlvdGFibGVfaW5pdChzM2NfaW9kZXNjLCBBUlJBWV9TSVpFKHMzY19pb2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBzaXplKTsKKworCWlkY29kZSA9IF9fcmF3X3JlYWRsKFMzQ19WQV9TWVMgKyAweDExOCk7CisJczNjX2luaXRfY3B1KGlkY29kZSwgY3B1X2lkcywgQVJSQVlfU0laRShjcHVfaWRzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYzExYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LXVhcnQuYwpAQCAtMCwwICsxLDE3NiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Rldi11YXJ0LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEJhc2UgUzNDNjRYWCBVQVJUIHJlc291cmNlIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCisvKiBTZXJpYWwgcG9ydCByZWdpc3RyYXRpb25zICovCisKKy8qIDY0eHggdWFydHMgYXJlIGNsb3NlciB0b2dldGhlciAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzY0eHhfdWFydDBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFMzQ19QQV9VQVJUMCwKKwkJLmVuZAk9IFMzQ19QQV9VQVJUMCArIDB4MTAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgwLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgwLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIwLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3VhcnQxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfVUFSVDEsCisJCS5lbmQgICA9IFMzQ19QQV9VQVJUMSArIDB4MTAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgxLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgxLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIxLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNnh4X3VhcnQyX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfVUFSVDIsCisJCS5lbmQgICA9IFMzQ19QQV9VQVJUMiArIDB4MTAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF91YXJ0M19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX1VBUlQzLAorCQkuZW5kICAgPSBTM0NfUEFfVUFSVDMgKyAweDEwMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisKK3N0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHMzYzY0eHhfdWFydF9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLnJlc291cmNlcwk9IHMzYzY0eHhfdWFydDBfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzY0eHhfdWFydDBfcmVzb3VyY2UpLAorCX0sCisJWzFdID0geworCQkucmVzb3VyY2VzCT0gczNjNjR4eF91YXJ0MV9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjNjR4eF91YXJ0MV9yZXNvdXJjZSksCisJfSwKKwlbMl0gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2M2eHhfdWFydDJfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzZ4eF91YXJ0Ml9yZXNvdXJjZSksCisJfSwKKwlbM10gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2M2NHh4X3VhcnQzX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2M2NHh4X3VhcnQzX3Jlc291cmNlKSwKKwl9LAorfTsKKworLyogdWFydCBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UwID0geworCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTEgPSB7CisJLmlkCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMiA9IHsKKwkuaWQJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UzID0geworCS5pZAkJPSAzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1s0XSA9IHsKKwkmczNjMjR4eF91YXJ0X2RldmljZTAsCisJJnMzYzI0eHhfdWFydF9kZXZpY2UxLAorCSZzM2MyNHh4X3VhcnRfZGV2aWNlMiwKKwkmczNjMjR4eF91YXJ0X2RldmljZTMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfZGV2c1s0XSA9IHsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjI5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCkBAIC0wLDAgKzEsNDIwIEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEdQSU9saWIgc3VwcG9ydCAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tY29yZS5oPgorCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+CisKKy8qIEdQSU8gYmFuayBzdW1tYXJ5OgorICoKKyAqIEJhbmsJR1BJT3MJU3R5bGUJU2xwQ29uCUV4dEludCBHcm91cAorICogQQk4CTRCaXQJWWVzCTEKKyAqIEIJNwk0Qml0CVllcwkxCisgKiBDCTgJNEJpdAlZZXMJMgorICogRAk1CTRCaXQJWWVzCTMKKyAqIEUJNQk0Qml0CVllcwlOb25lCisgKiBGCTE2CTJCaXQJWWVzCTQgWzFdCisgKiBHCTcJNEJpdAlZZXMJNQorICogSAkxMAk0Qml0WzJdCVllcwk2CisgKiBJCTE2CTJCaXQJWWVzCU5vbmUKKyAqIEoJMTIJMkJpdAlZZXMJTm9uZQorICogSwkxNgk0Qml0WzJdCU5vCU5vbmUKKyAqIEwJMTUJNEJpdFsyXSBObwlOb25lCisgKiBNCTYJNEJpdAlObwlJUlFfRUlOVAorICogTgkxNgkyQml0CU5vCUlSUV9FSU5UCisgKiBPCTE2CTJCaXQJWWVzCTcKKyAqIFAJMTUJMkJpdAlZZXMJOAorICogUQk5CTJCaXQJWWVzCTkKKyAqCisgKiBbMV0gQkFOS0YgcGlucyAxNCwxNSBkbyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcworICogWzJdIEJBTksgaGFzIHR3byBjb250cm9sIHJlZ2lzdGVycywgR1B4Q09OMCBhbmQgR1B4Q09OMQorICovCisKKyNkZWZpbmUgT0ZGX0dQQ09OCSgweDAwKQorI2RlZmluZSBPRkZfR1BEQVQJKDB4MDQpCisKKyNkZWZpbmUgY29uXzRiaXRfc2hpZnQoX19vZmYpICgoX19vZmYpICogNCkKKworI2lmIDEKKyNkZWZpbmUgZ3Bpb19kYmcoeC4uLikgZG8geyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBncGlvX2RiZyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyAjIyB4KQorI2VuZGlmCisKKy8qIFRoZSBzM2M2NHh4X2dwaW9saWJfNGJpdCByb3V0aW5lcyBhcmUgdG8gY29udHJvbCB0aGUgZ3BpbyBiYW5rcyB3aGVyZQorICogdGhlIGdwaW8gY29uZmlndXJhdGlvbiByZWdpc3RlciAoR1B4Q09OKSBoYXMgNCBiaXRzIHBlciBHUElPLCBhcyB0aGUKKyAqIGZvbGxvd2luZyBleGFtcGxlOgorICoKKyAqIGJhc2UgKyAweDAwOiBDb250cm9sIHJlZ2lzdGVyLCA0IGJpdHMgcGVyIGdwaW8KKyAqCSAgICAgICAgZ3BpbyBuOiA0IGJpdHMgc3RhcnRpbmcgYXQgKDQqbikKKyAqCQkwMDAwID0gaW5wdXQsIDAwMDEgPSBvdXRwdXQsIG90aGVycyBtZWFuIHNwZWNpYWwtZnVuY3Rpb24KKyAqIGJhc2UgKyAweDA0OiBEYXRhIHJlZ2lzdGVyLCAxIGJpdCBwZXIgZ3BpbworICoJCWJpdCBuOiBkYXRhIGJpdCBuCisgKgorICogTm90ZSwgc2luY2UgdGhlIGRhdGEgcmVnaXN0ZXIgaXMgb25lIGJpdCBwZXIgZ3BpbyBhbmQgaXMgYXQgYmFzZSArIDB4NAorICogd2UgY2FuIHVzZSBzM2NfZ3Bpb2xpYl9nZXQgYW5kIHMzY19ncGlvbGliX3NldCB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mCisgKiB0aGUgb3V0cHV0LgorKi8KKworc3RhdGljIGludCBzM2M2NHh4X2dwaW9saWJfNGJpdF9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBvdXJjaGlwLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgY29uOworCisJY29uID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRl9HUENPTik7CisJY29uICY9IH4oMHhmIDw8IGNvbl80Yml0X3NoaWZ0KG9mZnNldCkpOworCV9fcmF3X3dyaXRlbChjb24sIGJhc2UgKyBPRkZfR1BDT04pOworCisJZ3Bpb19kYmcoIiVzOiAlcDogQ09OIG5vdyAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2M2NHh4X2dwaW9saWJfNGJpdF9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBvdXJjaGlwLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgY29uOworCXVuc2lnbmVkIGxvbmcgZGF0OworCisJY29uID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRl9HUENPTik7CisJY29uICY9IH4oMHhmIDw8IGNvbl80Yml0X3NoaWZ0KG9mZnNldCkpOworCWNvbiB8PSAweDEgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KTsKKworCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZfR1BEQVQpOworCWlmICh2YWx1ZSkKKwkJZGF0IHw9IDEgPDwgb2Zmc2V0OworCWVsc2UKKwkJZGF0ICY9IH4oMSA8PCBvZmZzZXQpOworCisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIE9GRl9HUERBVCk7CisJX19yYXdfd3JpdGVsKGNvbiwgYmFzZSArIE9GRl9HUENPTik7CisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIE9GRl9HUERBVCk7CisKKwlncGlvX2RiZygiJXM6ICVwOiBDT04gJTA4bHgsIERBVCAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbiwgZGF0KTsKKworCXJldHVybiAwOworfQorCisvKiBUaGUgbmV4dCBzZXQgb2Ygcm91dGluZXMgYXJlIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgR1BJTyBjb25maWd1cmF0aW9uCisgKiByZWdpc3RlcnMgYXJlIDQgYml0cyBwZXIgR1BJTyBidXQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZWdpc3RlciAodGhlCisgKiBiYW5rIGhhcyBtb3JlIHRoYW4gOCBHUElPcy4KKyAqCisgKiBUaGlzIGNhc2UgaXMgdGhlIHNpbWlsYXIgdG8gdGhlIDQgYml0IGNhc2UsIGJ1dCB0aGUgcmVnaXN0ZXJzIGFyZSBhcworICogZm9sbG93czoKKyAqCisgKiBiYXNlICsgMHgwMDogQ29udHJvbCByZWdpc3RlciwgNCBiaXRzIHBlciBncGlvIChsb3dlciA4IEdQSU9zKQorICoJICAgICAgICBncGlvIG46IDQgYml0cyBzdGFydGluZyBhdCAoNCpuKQorICoJCTAwMDAgPSBpbnB1dCwgMDAwMSA9IG91dHB1dCwgb3RoZXJzIG1lYW4gc3BlY2lhbC1mdW5jdGlvbgorICogYmFzZSArIDB4MDQ6IENvbnRyb2wgcmVnaXN0ZXIsIDQgYml0cyBwZXIgZ3BpbyAodXAgdG8gOCBhZGRpdGlvbnMgR1BJT3MpCisgKgkgICAgICAgIGdwaW8gbjogNCBiaXRzIHN0YXJ0aW5nIGF0ICg0Km4pCisgKgkJMDAwMCA9IGlucHV0LCAwMDAxID0gb3V0cHV0LCBvdGhlcnMgbWVhbiBzcGVjaWFsLWZ1bmN0aW9uCisgKiBiYXNlICsgMHgwODogRGF0YSByZWdpc3RlciwgMSBiaXQgcGVyIGdwaW8KKyAqCQliaXQgbjogZGF0YSBiaXQgbgorICoKKyAqIFRvIGFsbG93IHVzIHRvIHVzZSB0aGUgczNjX2dwaW9saWJfZ2V0IGFuZCBzM2NfZ3Bpb2xpYl9zZXQgcm91dGluZXMgd2UKKyAqIHN0b3JlIHRoZSAnYmFzZSArIDB4NCcgYWRkcmVzcyBzbyB0aGF0IHRoZXNlIHJvdXRpbmVzIHNlZSB0aGUgZGF0YQorICogcmVnaXN0ZXIgYXQgb3VyY2hpcC0+YmFzZSArIDB4MDQuCisqLworCitzdGF0aWMgaW50IHMzYzY0eHhfZ3Bpb2xpYl80Yml0Ml9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBvdXJjaGlwLT5iYXNlOworCXZvaWQgX19pb21lbSAqcmVnY29uID0gYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKworCWlmIChvZmZzZXQgPiA3KQorCQlvZmZzZXQgLT0gODsKKwllbHNlCisJCXJlZ2NvbiAtPSA0OworCisJY29uID0gX19yYXdfcmVhZGwocmVnY29uKTsKKwljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KSk7CisJX19yYXdfd3JpdGVsKGNvbiwgcmVnY29uKTsKKworCWdwaW9fZGJnKCIlczogJXA6IENPTiAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbik7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfZ3Bpb2xpYl80Yml0Ml9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBvdXJjaGlwLT5iYXNlOworCXZvaWQgX19pb21lbSAqcmVnY29uID0gYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKworCWlmIChvZmZzZXQgPiA3KQorCQlvZmZzZXQgLT0gODsKKwllbHNlCisJCXJlZ2NvbiAtPSA0OworCisJY29uID0gX19yYXdfcmVhZGwocmVnY29uKTsKKwljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KSk7CisJY29uIHw9IDB4MSA8PCBjb25fNGJpdF9zaGlmdChvZmZzZXQpOworCisJZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRl9HUERBVCk7CisJaWYgKHZhbHVlKQorCQlkYXQgfD0gMSA8PCBvZmZzZXQ7CisJZWxzZQorCQlkYXQgJj0gfigxIDw8IG9mZnNldCk7CisKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgT0ZGX0dQREFUKTsKKwlfX3Jhd193cml0ZWwoY29uLCByZWdjb24pOworCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyBPRkZfR1BEQVQpOworCisJZ3Bpb19kYmcoIiVzOiAlcDogQ09OICUwOGx4LCBEQVQgJTA4bHhcbiIsIF9fZnVuY19fLCBiYXNlLCBjb24sIGRhdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb180Yml0X2NmZ19ub2ludCA9IHsKKwkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzRiaXRfY2ZnX2VpbnQwMTExID0geworCS5jZmdfZWludAk9IDcsCisJLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0LAorCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb180Yml0X2NmZ19laW50MDAxMSA9IHsKKwkuY2ZnX2VpbnQJPSAzLAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBncGlvXzRiaXRbXSA9IHsKKwl7CisJCS5iYXNlCT0gUzNDNjRYWF9HUEFfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEEoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fQV9OUiwKKwkJCS5sYWJlbAk9ICJHUEEiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQQl9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQQigwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19CX05SLAorCQkJLmxhYmVsCT0gIkdQQiIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BDX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDExMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BDKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0NfTlIsCisJCQkubGFiZWwJPSAiR1BDIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUERfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEQoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fRF9OUiwKKwkJCS5sYWJlbAk9ICJHUEQiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQRV9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQRSgwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19FX05SLAorCQkJLmxhYmVsCT0gIkdQRSIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BHX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDExMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BHKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0dfTlIsCisJCQkubGFiZWwJPSAiR1BHIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUE1fQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUE0oMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fTV9OUiwKKwkJCS5sYWJlbAk9ICJHUE0iLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgZ3Bpb180Yml0MltdID0geworCXsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQSF9CQVNFICsgMHg0LAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQSCgwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19IX05SLAorCQkJLmxhYmVsCT0gIkdQSCIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BLX0JBU0UgKyAweDQsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BLKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0tfTlIsCisJCQkubGFiZWwJPSAiR1BLIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUExfQkFTRSArIDB4NCwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEwoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fTF9OUiwKKwkJCS5sYWJlbAk9ICJHUEwiLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX25vaW50ID0geworCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX2VpbnQxMCA9IHsKKwkuY2ZnX2VpbnQJPSAyLAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX2VpbnQxMSA9IHsKKwkuY2ZnX2VpbnQJPSAzLAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgZ3Bpb18yYml0W10gPSB7CisJeworCQkuYmFzZQk9IFMzQzY0WFhfR1BGX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19laW50MTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQRigwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19GX05SLAorCQkJLmxhYmVsCT0gIkdQRiIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BJX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BJKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0lfTlIsCisJCQkubGFiZWwJPSAiR1BJIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUEpfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX25vaW50LAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEooMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fSl9OUiwKKwkJCS5sYWJlbAk9ICJHUEoiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQTl9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfZWludDEwLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUE4oMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fTl9OUiwKKwkJCS5sYWJlbAk9ICJHUE4iLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQT19CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfZWludDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUE8oMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fT19OUiwKKwkJCS5sYWJlbAk9ICJHUE8iLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQUF9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfZWludDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUFAoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fUF9OUiwKKwkJCS5sYWJlbAk9ICJHUFAiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQUV9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfZWludDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUFEoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fUV9OUiwKKwkJCS5sYWJlbAk9ICJHUFEiLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgX19pbml0IHZvaWQgczNjNjR4eF9ncGlvbGliX2FkZF80Yml0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKQoreworCWNoaXAtPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gczNjNjR4eF9ncGlvbGliXzRiaXRfaW5wdXQ7CisJY2hpcC0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gczNjNjR4eF9ncGlvbGliXzRiaXRfb3V0cHV0OworfQorCitzdGF0aWMgX19pbml0IHZvaWQgczNjNjR4eF9ncGlvbGliX2FkZF80Yml0MihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKK3sKKwljaGlwLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IHMzYzY0eHhfZ3Bpb2xpYl80Yml0Ml9pbnB1dDsKKwljaGlwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBzM2M2NHh4X2dwaW9saWJfNGJpdDJfb3V0cHV0OworfQorCitzdGF0aWMgX19pbml0IHZvaWQgczNjNjR4eF9ncGlvbGliX2FkZChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcHMsCisJCQkJICAgICAgIGludCBucl9jaGlwcywKKwkJCQkgICAgICAgdm9pZCAoKmZuKShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqKSkKK3sKKwlmb3IgKDsgbnJfY2hpcHMgPiAwOyBucl9jaGlwcy0tLCBjaGlwcysrKSB7CisJCWlmIChmbikKKwkJCShmbikoY2hpcHMpOworCQlzM2NfZ3Bpb2xpYl9hZGQoY2hpcHMpOworCX0KK30KKworc3RhdGljIF9faW5pdCBpbnQgczNjNjR4eF9ncGlvbGliX2luaXQodm9pZCkKK3sKKwlzM2M2NHh4X2dwaW9saWJfYWRkKGdwaW9fNGJpdCwgQVJSQVlfU0laRShncGlvXzRiaXQpLAorCQkJICAgIHMzYzY0eHhfZ3Bpb2xpYl9hZGRfNGJpdCk7CisKKwlzM2M2NHh4X2dwaW9saWJfYWRkKGdwaW9fNGJpdDIsIEFSUkFZX1NJWkUoZ3Bpb180Yml0MiksCisJCQkgICAgczNjNjR4eF9ncGlvbGliX2FkZF80Yml0Mik7CisKKwlzM2M2NHh4X2dwaW9saWJfYWRkKGdwaW9fMmJpdCwgQVJSQVlfU0laRShncGlvXzJiaXQpLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHMzYzY0eHhfZ3Bpb2xpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWEuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWEwZTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWEuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgQSByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BBQ09OCQkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQQURBVAkJCShTM0M2NFhYX0dQQV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEFQVUQJCQkoUzNDNjRYWF9HUEFfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BBQ09OU0xQCQkoUzNDNjRYWF9HUEFfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BBUFVEU0xQCQkoUzNDNjRYWF9HUEFfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEFfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BBX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEFfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQQTBfVUFSVF9SWEQwCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQQTBfRUlOVF9HMV8wCQkoMHgwNyA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BBMV9VQVJUX1RYRDAJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BBMV9FSU5UX0cxXzEJCSgweDA3IDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEEyX1VBUlRfbkNUUzAJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BBMl9FSU5UX0cxXzIJCSgweDA3IDw8IDgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEEzX1VBUlRfblJUUzAJCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQTNfRUlOVF9HMV8zCQkoMHgwNyA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX0dQQTRfVUFSVF9SWEQxCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEE0X0VJTlRfRzFfNAkJKDB4MDcgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEE1X1VBUlRfVFhEMQkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BBNV9FSU5UX0cxXzUJCSgweDA3IDw8IDIwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BBNl9VQVJUX25DVFMxCQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEE2X0VJTlRfRzFfNgkJKDB4MDcgPDwgMjQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEE3X1VBUlRfblJUUzEJCSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQQTdfRUlOVF9HMV83CQkoMHgwNyA8PCAyOCkKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYi5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzNhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1iLmgKQEAgLTAsMCArMSw2MCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBCIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUEJDT04JCQkoUzNDNjRYWF9HUEJfQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BCREFUCQkJKFMzQzY0WFhfR1BCX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQQlBVRAkJCShTM0M2NFhYX0dQQl9CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEJDT05TTFAJCShTM0M2NFhYX0dQQl9CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUEJQVURTTFAJCShTM0M2NFhYX0dQQl9CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQl9DT05NQVNLKF9fZ3BpbykJKDB4ZiA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEJfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQQl9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDQpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BCMF9VQVJUX1JYRDIJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BCMF9FWFRETUFfUkVRCQkoMHgwMyA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQQjBfSXJEQV9SWEQJCSgweDA0IDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BCMF9BRERSX0NGMAkJKDB4MDUgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIwX0VJTlRfRzFfOAkJKDB4MDcgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQjFfVUFSVF9UWEQyCQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQQjFfRVhURE1BX0FDSwkJKDB4MDMgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIxX0lyREFfVFhECQkoMHgwNCA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQQjFfQUREUl9DRjEJCSgweDA1IDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BCMV9FSU5UX0cxXzkJCSgweDA3IDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEIyX1VBUlRfUlhEMwkJKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIyX0lyREFfUlhECQkoMHgwMyA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQQjJfRVhURE1BX1JFUQkJKDB4MDQgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIyX0FERFJfQ0YyCQkoMHgwNSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQQjJfSTJDX1NDTDEJCSgweDA2IDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BCMl9FSU5UX0cxXzEwCQkoMHgwNyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BCM19VQVJUX1RYRDMJCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQjNfSXJEQV9UWEQJCSgweDAzIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQjNfRVhURE1BX0FDSwkJKDB4MDQgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BCM19JMkNfU0RBMQkJKDB4MDYgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BCM19FSU5UX0cxXzExCQkoMHgwNyA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX0dQQjRfSXJEQV9TREJXCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEI0X0NBTV9GSUVMRAkJKDB4MDMgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BCNF9DRl9EQVRBX0RJUgkoMHgwNCA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEI0X0VJTlRfRzFfMTIJCSgweDA3IDw8IDE2KQorCisjZGVmaW5lIFMzQzY0WFhfR1BCNV9JMkNfU0NMMAkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BCNV9FSU5UX0cxXzEzCQkoMHgwNyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQjZfSTJDX1NEQTAJCSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQQjZfRUlOVF9HMV8xNAkJKDB4MDcgPDwgMjQpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDdkYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWMuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgQyByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BDQ09OCQkJKFMzQzY0WFhfR1BDX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQQ0RBVAkJCShTM0M2NFhYX0dQQ19CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUENQVUQJCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BDQ09OU0xQCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BDUFVEU0xQCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUENfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BDX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUENfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQQzBfU1BJX01JU08wCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQQzBfRUlOVF9HMl8wCQkoMHgwNyA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BDMV9TUElfQ0xLTwkJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEMxX0VJTlRfRzJfMQkJKDB4MDcgPDwgNCkKKworI2RlZmluZSBTM0M2NFhYX0dQQzJfU1BJX01PU0lPCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQQzJfRUlOVF9HMl8yCQkoMHgwNyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BDM19TUElfbkNTTwkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BDM19FSU5UX0cyXzMJCSgweDA3IDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BDNF9TUElfTUlTTzEJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQQzRfTU1DMl9DTUQJCSgweDAzIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQQzRfSTJTMF9WNDBfRE8JKDB4MDUgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BDNF9FSU5UX0cyXzQJCSgweDA3IDw8IDE2KQorCisjZGVmaW5lIFMzQzY0WFhfR1BDNV9TUElfQ0xLMQkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BDNV9NTUMyX0NMSwkJKDB4MDMgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BDNV9JMlMxX1Y0MF9ETwkoMHgwNSA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEM1X0VJTlRfRzJfNQkJKDB4MDcgPDwgMjApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEM2X1NQSV9NT1NJMQkJKDB4MDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfR1BDNl9FSU5UX0cyXzYJCSgweDA3IDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BDN19TUElfbkNTMQkJKDB4MDIgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BDN19JMlMyX1Y0MF9ETwkoMHgwNSA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEM3X0VJTlRfRzJfNwkJKDB4MDcgPDwgMjgpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWQuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU0YTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWQuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgRCByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BEQ09OCQkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQRERBVAkJCShTM0M2NFhYX0dQRF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUERQVUQJCQkoUzNDNjRYWF9HUERfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BEQ09OU0xQCQkoUzNDNjRYWF9HUERfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BEUFVEU0xQCQkoUzNDNjRYWF9HUERfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUERfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BEX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUERfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQRDBfUENNMF9TQ0xLCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRDBfSTJTMF9DTEsJCSgweDAzIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BEMF9BQzk3X0JJVENMSwkoMHgwNCA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRDBfRUlOVF9HM18wCQkoMHgwNyA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BEMV9QQ00wX0VYVENMSwkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQRDFfSTJTMF9DRENMSwkJKDB4MDMgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQxX0FDOTdfblJFU0VUCSgweDA0IDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BEMV9FSU5UX0czXzEJCSgweDA3IDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEQyX1BDTTBfRlNZTkMJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BEMl9JMlMwX0xSQ0xLCQkoMHgwMyA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRDJfQUM5N19TWU5DCQkoMHgwNCA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRDJfRUlOVF9HM18yCQkoMHgwNyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BEM19QQ00wX1NJTgkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BEM19JMlMwX0RJCQkoMHgwMyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEQzX0FDOTdfU0RJCQkoMHgwNCA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEQzX0VJTlRfRzNfMwkJKDB4MDcgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEQ0X1BDTTBfU09VVAkJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BENF9JMlMwX0QwCQkoMHgwMyA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEQ0X0FDOTdfU0RPCQkoMHgwNCA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEQ0X0VJTlRfRzNfNAkJKDB4MDcgPDwgMTYpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWUuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmNmM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWUuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgRSByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BFQ09OCQkJKFMzQzY0WFhfR1BFX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQRURBVAkJCShTM0M2NFhYX0dQRV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEVQVUQJCQkoUzNDNjRYWF9HUEVfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BFQ09OU0xQCQkoUzNDNjRYWF9HUEVfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BFUFVEU0xQCQkoUzNDNjRYWF9HUEVfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEVfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BFX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEVfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQRTBfUENNMV9TQ0xLCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRTBfSTJTMV9DTEsJCSgweDAzIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BFMF9BQzk3X0JJVENMSwkoMHgwNCA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BFMV9QQ00xX0VYVENMSwkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQRTFfSTJTMV9DRENMSwkJKDB4MDMgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEUxX0FDOTdfblJFU0VUCSgweDA0IDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEUyX1BDTTFfRlNZTkMJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BFMl9JMlMxX0xSQ0xLCQkoMHgwMyA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRTJfQUM5N19TWU5DCQkoMHgwNCA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BFM19QQ00xX1NJTgkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BFM19JMlMxX0RJCQkoMHgwMyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEUzX0FDOTdfU0RJCQkoMHgwNCA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX0dQRTRfUENNMV9TT1VUCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEU0X0kyUzFfRDAJCSgweDAzIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQRTRfQUM5N19TRE8JCSgweDA0IDw8IDE2KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1mLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmYWZmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWYuaApAQCAtMCwwICsxLDcxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1mLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEYgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQRkNPTgkJCShTM0M2NFhYX0dQRl9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEZEQVQJCQkoUzNDNjRYWF9HUEZfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BGUFVECQkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQRkNPTlNMUAkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQRlBVRFNMUAkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BGX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQRl9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BGX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYwX0NBTUlGX0NMSwkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEYwX0VJTlRfRzRfMAkJKDB4MDMgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjFfQ0FNSUZfSFJFRgkJKDB4MDIgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9HUEYxX0VJTlRfRzRfMQkJKDB4MDMgPDwgMikKKworI2RlZmluZSBTM0M2NFhYX0dQRjJfQ0FNSUZfUENMSwkJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEYyX0VJTlRfRzRfMgkJKDB4MDMgPDwgNCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjNfQ0FNSUZfblJTVAkJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUEYzX0VJTlRfRzRfMwkJKDB4MDMgPDwgNikKKworI2RlZmluZSBTM0M2NFhYX0dQRjRfQ0FNSUZfVlNZTkMJKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEY0X0VJTlRfRzRfNAkJKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjVfQ0FNSUZfWURBVEEwCSgweDAyIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0dQRjVfRUlOVF9HNF81CQkoMHgwMyA8PCAxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjZfQ0FNSUZfWURBVEExCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQRjZfRUlOVF9HNF82CQkoMHgwMyA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX0dQRjdfQ0FNSUZfWURBVEEyCSgweDAyIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX0dQRjdfRUlOVF9HNF83CQkoMHgwMyA8PCAxNCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjhfQ0FNSUZfWURBVEEzCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQRjhfRUlOVF9HNF84CQkoMHgwMyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQRjlfQ0FNSUZfWURBVEE0CSgweDAyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX0dQRjlfRUlOVF9HNF85CQkoMHgwMyA8PCAxOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjEwX0NBTUlGX1lEQVRBNQkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEYxMF9FSU5UX0c0XzEwCSgweDAzIDw8IDIwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BGMTFfQ0FNSUZfWURBVEE2CSgweDAyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX0dQRjExX0VJTlRfRzRfMTEJKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYxMl9DQU1JRl9ZREFUQTcJKDB4MDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfR1BGMTJfRUlOVF9HNF8xMgkoMHgwMyA8PCAyNCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjEzX1BXTV9FQ0xLCQkoMHgwMiA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9HUEYxM19FSU5UX0c0XzEzCSgweDAzIDw8IDI2KQorCisjZGVmaW5lIFMzQzY0WFhfR1BGMTRfUFdNX1RPVVQwCQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEYxNF9DTEtPVVQwCQkoMHgwMyA8PCAyOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjE1X1BXTV9UT1VUMQkJKDB4MDIgPDwgMzApCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWcuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJiZDIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstZy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWcuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgRyByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BHQ09OCQkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQR0RBVAkJCShTM0M2NFhYX0dQR19CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEdQVUQJCQkoUzNDNjRYWF9HUEdfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BHQ09OU0xQCQkoUzNDNjRYWF9HUEdfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BHUFVEU0xQCQkoUzNDNjRYWF9HUEdfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEdfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BHX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEdfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQRzBfTU1DMF9DTEsJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BHMF9FSU5UX0c1XzAJCSgweDA3IDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEcxX01NQzBfQ01ECQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQRzFfRUlOVF9HNV8xCQkoMHgwNyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BHMl9NTUMwX0RBVEEwCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRzJfRUlOVF9HNV8yCQkoMHgwNyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BHM19NTUMwX0RBVEExCQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEczX0VJTlRfRzVfMwkJKDB4MDcgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEc0X01NQzBfREFUQTIJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQRzRfRUlOVF9HNV80CQkoMHgwNyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQRzVfTU1DMF9EQVRBMwkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BHNV9FSU5UX0c1XzUJCSgweDA3IDw8IDIwKQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1oLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1oLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1NDk1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWguaApAQCAtMCwwICsxLDc0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1oLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEggcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQSENPTjAJCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BIQ09OMQkJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEhEQVQJCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BIUFVECQkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQSENPTlNMUAkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDEwKQorI2RlZmluZSBTM0M2NFhYX0dQSFBVRFNMUAkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDE0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BIX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQSF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BIX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEgwX01NQzFfQ0xLCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQSDBfS1BfQ09MMAkJKDB4MDQgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEgwX0VJTlRfRzZfMAkJKDB4MDcgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQSDFfTU1DMV9DTUQJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BIMV9LUF9DT0wxCQkoMHgwNCA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQSDFfRUlOVF9HNl8xCQkoMHgwNyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BIMl9NTUMxX0RBVEEwCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQSDJfS1BfQ09MMgkJKDB4MDQgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEgyX0VJTlRfRzZfMgkJKDB4MDcgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQSDNfTU1DMV9EQVRBMQkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BIM19LUF9DT0wzCQkoMHgwNCA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEgzX0VJTlRfRzZfMwkJKDB4MDcgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEg0X01NQzFfREFUQTIJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSDRfS1BfQ09MNAkJKDB4MDQgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BINF9FSU5UX0c2XzQJCSgweDA3IDw8IDE2KQorCisjZGVmaW5lIFMzQzY0WFhfR1BINV9NTUMxX0RBVEEzCQkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg1X0tQX0NPTDUJCSgweDA0IDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQSDVfRUlOVF9HNl81CQkoMHgwNyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQSDZfTU1DMV9EQVRBNAkJKDB4MDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfR1BINl9NTUMyX0RBVEEwCQkoMHgwMyA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg2X0tQX0NPTDYJCSgweDA0IDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQSDZfSTJTX1Y0MF9CQ0xLCSgweDA1IDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQSDZfQUREUl9DRjAJCSgweDA2IDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQSDZfRUlOVF9HNl82CQkoMHgwNyA8PCAyNCkKKworI2RlZmluZSBTM0M2NFhYX0dQSDdfTU1DMV9EQVRBNQkJKDB4MDIgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BIN19NTUMyX0RBVEExCQkoMHgwMyA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg3X0tQX0NPTDcJCSgweDA0IDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQSDdfSTJTX1Y0MF9DRENMSwkoMHgwNSA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg3X0FERFJfQ0YxCQkoMHgwNiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg3X0VJTlRfRzZfNwkJKDB4MDcgPDwgMjgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEg4X01NQzFfREFUQTYJCSgweDAyIDw8IDMyKQorI2RlZmluZSBTM0M2NFhYX0dQSDhfTU1DMl9EQVRBMgkJKDB4MDMgPDwgMzIpCisjZGVmaW5lIFMzQzY0WFhfR1BIOF9JMlNfVjQwX0xSQ0xLCSgweDA1IDw8IDMyKQorI2RlZmluZSBTM0M2NFhYX0dQSDhfQUREUl9DRjIJCSgweDA2IDw8IDMyKQorI2RlZmluZSBTM0M2NFhYX0dQSDhfRUlOVF9HNl84CQkoMHgwNyA8PCAzMikKKworI2RlZmluZSBTM0M2NFhYX0dQSDlfTU1DMV9EQVRBNwkJKDB4MDIgPDwgMzYpCisjZGVmaW5lIFMzQzY0WFhfR1BIOV9NTUMyX0RBVEEzCQkoMHgwMyA8PCAzNikKKyNkZWZpbmUgUzNDNjRYWF9HUEg5X0kyU19WNDBfREkJCSgweDA1IDw8IDM2KQorI2RlZmluZSBTM0M2NFhYX0dQSDlfRUlOVF9HNl85CQkoMHgwNyA8PCAzNikKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWViZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1pLmgKQEAgLTAsMCArMSw0MCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstaS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBJIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUElDT04JCQkoUzNDNjRYWF9HUElfQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BJREFUCQkJKFMzQzY0WFhfR1BJX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQSVBVRAkJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUElDT05TTFAJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUElQVURTTFAJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQSV9DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUElfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQSV9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BJMF9WRDAJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BJMV9WRDEJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BJMl9WRDIJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BJM19WRDMJCSgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfR1BJNF9WRDQJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BJNV9WRDUJCSgweDAyIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0dQSTZfVkQ2CQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEk3X1ZENwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BJOF9WRDgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSTlfVkQ5CQkoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMF9WRDEwCQkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMV9WRDExCQkoMHgwMiA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMl9WRDEyCQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxM19WRDEzCQkoMHgwMiA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9HUEkxNF9WRDE0CQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxNV9WRDE1CQkoMHgwMiA8PCAzMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWouaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE5MDYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstai5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWouaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgSiByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BKQ09OCQkJKFMzQzY0WFhfR1BKX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQSkRBVAkJCShTM0M2NFhYX0dQSl9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEpQVUQJCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BKQ09OU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BKUFVEU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEpfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BKX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUEpfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKKworI2RlZmluZSBTM0M2NFhYX0dQSjBfVkQxNgkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEoxX1ZEMTcJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BKMl9WRDE4CQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQSjNfVkQxOQkJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUEo0X1ZEMjAJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BKNV9WRDIxCQkoMHgwMiA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEo2X1ZEMjIJCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQSjdfVkQyMwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BKOF9MQ0RfSFNZTkMJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSjlfTENEX1ZTWU5DCQkoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEoxMF9MQ0RfVkRFTgkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BKMTFfTENEX1ZDTEsJCSgweDAyIDw8IDIyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstbi5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1uLmgKQEAgLTAsMCArMSw1NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstbi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBOIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUE5DT04JCQkoUzNDNjRYWF9HUE5fQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BOREFUCQkJKFMzQzY0WFhfR1BOX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQTlBVRAkJCShTM0M2NFhYX0dQTl9CQVNFICsgMHgwOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTl9DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUE5fSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQTl9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BOMF9FSU5UMAkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE4wX0tQX1JPVzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE4xX0VJTlQxCQkoMHgwMiA8PCAyKQorI2RlZmluZSBTM0M2NFhYX0dQTjFfS1BfUk9XMQkJKDB4MDMgPDwgMikKKworI2RlZmluZSBTM0M2NFhYX0dQTjJfRUlOVDIJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BOMl9LUF9ST1cyCQkoMHgwMyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BOM19FSU5UMwkJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUE4zX0tQX1JPVzMJCSgweDAzIDw8IDYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE40X0VJTlQ0CQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQTjRfS1BfUk9XNAkJKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTjVfRUlOVDUJCSgweDAyIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0dQTjVfS1BfUk9XNQkJKDB4MDMgPDwgMTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE42X0VJTlQ2CQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUE42X0tQX1JPVzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BON19FSU5UNwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BON19LUF9ST1c3CQkoMHgwMyA8PCAxNCkKKworI2RlZmluZSBTM0M2NFhYX0dQTjhfRUlOVDgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQTjlfRUlOVDkJCSgweDAyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX0dQTjEwX0VJTlQxMAkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BOMTFfRUlOVDExCQkoMHgwMiA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9HUE4xMl9FSU5UMTIJCSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQTjEzX0VJTlQxMwkJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BOMTRfRUlOVDE0CQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUE4xNV9FSU5UMTUJCSgweDAyIDw8IDMwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstby5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWUxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1vLmgKQEAgLTAsMCArMSw3MCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstby5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBPIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUE9DT04JCQkoUzNDNjRYWF9HUE9fQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BPREFUCQkJKFMzQzY0WFhfR1BPX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQT1BVRAkJCShTM0M2NFhYX0dQT19CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUE9DT05TTFAJCShTM0M2NFhYX0dQT19CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUE9QVURTTFAJCShTM0M2NFhYX0dQT19CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQT19DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUE9fSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQT19PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMF9NRU0wX25DUzIJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BPMF9FSU5UX0c3XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xX01FTTBfbkNTMwkJKDB4MDIgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9HUE8xX0VJTlRfRzdfMQkJKDB4MDMgPDwgMikKKworI2RlZmluZSBTM0M2NFhYX0dQTzJfTUVNMF9uQ1M0CQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQTzJfRUlOVF9HN18yCQkoMHgwMyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPM19NRU0wX25DUzUJCSgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfR1BPM19FSU5UX0c3XzMJCSgweDAzIDw8IDYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE80X0VJTlRfRzdfNAkJKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzVfRUlOVF9HN181CQkoMHgwMyA8PCAxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzZfTUVNMF9BRERSNgkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BPNl9FSU5UX0c3XzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BPN19NRU0wX0FERFI3CQkoMHgwMiA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9HUE83X0VJTlRfRzdfNwkJKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE84X01FTTBfQUREUjgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQTzhfRUlOVF9HN184CQkoMHgwMyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQTzlfTUVNMF9BRERSOQkJKDB4MDIgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfR1BPOV9FSU5UX0c3XzkJCSgweDAzIDw8IDE4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMTBfTUVNMF9BRERSMTAJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BPMTBfRUlOVF9HN18xMAkoMHgwMyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzExX01FTTBfQUREUjExCSgweDAyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX0dQTzExX0VJTlRfRzdfMTEJKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xMl9NRU0wX0FERFIxMgkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUE8xMl9FSU5UX0c3XzEyCSgweDAzIDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMTNfTUVNMF9BRERSMTMJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BPMTNfRUlOVF9HN18xMwkoMHgwMyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX0dQTzE0X01FTTBfQUREUjE0CSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQTzE0X0VJTlRfRzdfMTQJKDB4MDMgPDwgMjgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xNV9NRU0wX0FERFIxNQkoMHgwMiA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE8xNV9FSU5UX0c3XzE1CSgweDAzIDw8IDMwKQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1wLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmMDA1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXAuaApAQCAtMCwwICsxLDY5IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1wLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIFAgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQUENPTgkJCShTM0M2NFhYX0dQUF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUFBEQVQJCQkoUzNDNjRYWF9HUFBfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BQUFVECQkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQUENPTlNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQUFBVRFNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQUF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BQX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAwX01FTTBfQUREUlYJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BQMF9FSU5UX0c4XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAxX01FTTBfU01DTEsJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BQMV9FSU5UX0c4XzEJCSgweDAzIDw8IDIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAyX01FTTBfbldBSVQJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BQMl9FSU5UX0c4XzIJCSgweDAzIDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAzX01FTTBfUkRZMF9BTEUJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUFAzX0VJTlRfRzhfMwkJKDB4MDMgPDwgNikKKworI2RlZmluZSBTM0M2NFhYX0dQUDRfTUVNMF9SRFkxX0NMRQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQUDRfRUlOVF9HOF80CQkoMHgwMyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BQNV9NRU0wX0lOVHNtMF9GV0UJKDB4MDIgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfR1BQNV9FSU5UX0c4XzUJCSgweDAzIDw8IDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQNl9NRU0wXyhudWxsKQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUFA2X0VJTlRfRzhfNgkJKDB4MDMgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA3X01FTTBfSU5Uc20xX0ZSRQkoMHgwMiA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFA3X0VJTlRfRzhfNwkJKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA4X01FTTBfUlBuX1JuQgkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUFA4X0VJTlRfRzhfOAkJKDB4MDMgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA5X01FTTBfQVRBX1JFU0VUCSgweDAyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX0dQUDlfRUlOVF9HOF85CQkoMHgwMyA8PCAxOCkKKworI2RlZmluZSBTM0M2NFhYX0dQUDEwX01FTTBfQVRBX0lOUEFDSwkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMF9FSU5UX0c4XzEwCSgweDAzIDw8IDIwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQMTFfTUVNMF9BVEFfUkVHCSgweDAyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX0dQUDExX0VJTlRfRzhfMTEJKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMl9NRU0wX0FUQV9XRQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMl9FSU5UX0c4XzEyCSgweDAzIDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BQMTNfTUVNMF9BVEFfT0UJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BQMTNfRUlOVF9HOF8xMwkoMHgwMyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX0dQUDE0X01FTTBfQVRBX0NECSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQUDE0X0VJTlRfRzhfMTQJKDB4MDMgPDwgMjgpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXEuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjVlNjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstcS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXEuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgUSByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BRQ09OCQkJKFMzQzY0WFhfR1BRX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQUURBVAkJCShTM0M2NFhYX0dQUV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFFQVUQJCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BRQ09OU0xQCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BRUFVEU0xQCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFFfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BRX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUFFfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKKworI2RlZmluZSBTM0M2NFhYX0dQUTBfTUVNMF9BRERSMThfUkFTCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BRMF9FSU5UX0c5XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFExX01FTTBfQUREUjE5X0NBUwkoMHgwMiA8PCAyKQorI2RlZmluZSBTM0M2NFhYX0dQUTFfRUlOVF9HOV8xCQkoMHgwMyA8PCAyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRMl9FSU5UX0c5XzIJCSgweDAzIDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFEzX0VJTlRfRzlfMwkJKDB4MDMgPDwgNikKKworI2RlZmluZSBTM0M2NFhYX0dQUTRfRUlOVF9HOV80CQkoMHgwMyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BRNV9FSU5UX0c5XzUJCSgweDAzIDw8IDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRNl9FSU5UX0c5XzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRN19NRU0wX0FERFIxN19XRU5ETUMJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BRN19FSU5UX0c5XzcJCSgweDAzIDw8IDE0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BROF9NRU0wX0FERFIxNl9BUERNQwkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUFE4X0VJTlRfRzlfOAkJKDB4MDMgPDwgMTYpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOGRkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0wLDAgKzEsMjAxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lycXMuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0WFggLSBDb21tb24gSVJRIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfUzNDNjRYWF9JUlFTX0gKKyNkZWZpbmUgX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSCBfX0ZJTEVfXworCisvKiB3ZSBrZWVwIHRoZSBmaXJzdCBzZXQgb2YgQ1BVIElSUXMgb3V0IG9mIHRoZSByYW5nZSBvZgorICogdGhlIElTQSBzcGFjZSwgc28gdGhhdCB0aGUgUEMxMDQgaGFzIHRoZW0gdG8gaXRzZWxmCisgKiBhbmQgd2UgZG9uJ3QgZW5kIHVwIGhhdmluZyB0byBkbyBob3JyaWJsZSB0aGluZ3MgdG8gdGhlCisgKiBzdGFuZGFyZCBJU0EgZHJpdmVycy4uLi4KKyAqCisgKiBub3RlLCBzaW5jZSB3ZSdyZSB1c2luZyB0aGUgVklDcywgb3VyIHN0YXJ0IG11c3QgYmUgYQorICogbXVsaXRwbGUgb2YgMzIgdG8gYWxsb3cgdGhlIGNvbW1vbiBjb2RlIHRvIHdvcmsKKyAqLworCisjZGVmaW5lIFMzQ19JUlFfT0ZGU0VUCSgzMikKKworI2RlZmluZSBTM0NfSVJRKHgpCSgoeCkgKyBTM0NfSVJRX09GRlNFVCkKKworI2RlZmluZSBTM0NfVklDMF9CQVNFCVMzQ19JUlEoMCkKKyNkZWZpbmUgUzNDX1ZJQzFfQkFTRQlTM0NfSVJRKDMyKQorCisvKiBVQVJUIGludGVycnVwdHMsIGVhY2ggVUFSVCBoYXMgNCBpbnR0ZXJ1cHRzIHBlciBjaGFubmVsIHNvCisgKiB1c2UgdGhlIHNwYWNlIGJldHdlZW4gdGhlIElTQSBhbmQgUzNDIG1haW4gaW50ZXJydXB0cy4gTm90ZSwgdGhlc2UKKyAqIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFMzQzI0WFggc2VyaWVzISAqLworCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UwCSgxNikKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTEJKDIwKQorI2RlZmluZSBJUlFfUzNDVUFSVF9CQVNFMgkoMjQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UzCSgyOCkKKworI2RlZmluZSBVQVJUX0lSUV9SWEQJCSgwKQorI2RlZmluZSBVQVJUX0lSUV9FUlIJCSgxKQorI2RlZmluZSBVQVJUX0lSUV9UWEQJCSgyKQorI2RlZmluZSBVQVJUX0lSUV9NT0RFTQkJKDMpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgwCQkoSVJRX1MzQ1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJKElSUV9TM0NVQVJUX0JBU0UwICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIwCShJUlFfUzNDVUFSVF9CQVNFMCArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDEJCShJUlFfUzNDVUFSVF9CQVNFMSArIFVBUlRfSVJRX1JYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgxCQkoSVJRX1MzQ1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9UWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjEJKElSUV9TM0NVQVJUX0JBU0UxICsgVUFSVF9JUlFfRVJSKQorCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMgkJKElSUV9TM0NVQVJUX0JBU0UyICsgVUFSVF9JUlFfUlhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9UWDIJCShJUlFfUzNDVUFSVF9CQVNFMiArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMgkoSVJRX1MzQ1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9FUlIpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgzCQkoSVJRX1MzQ1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMwkJKElSUV9TM0NVQVJUX0JBU0UzICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIzCShJUlFfUzNDVUFSVF9CQVNFMyArIFVBUlRfSVJRX0VSUikKKworLyogVklDIGJhc2VkIElSUXMgKi8KKworI2RlZmluZSBTM0M2NFhYX0lSUV9WSUMwKHgpCShTM0NfVklDMF9CQVNFICsgKHgpKQorI2RlZmluZSBTM0M2NFhYX0lSUV9WSUMxKHgpCShTM0NfVklDMV9CQVNFICsgKHgpKQorCisvKiBWSUMwICovCisKKyNkZWZpbmUgSVJRX0VJTlQwXzMJCVMzQzY0WFhfSVJRX1ZJQzAoMCkKKyNkZWZpbmUgSVJRX0VJTlQ0XzExCQlTM0M2NFhYX0lSUV9WSUMwKDEpCisjZGVmaW5lIElSUV9SVENfVElDCQlTM0M2NFhYX0lSUV9WSUMwKDIpCisjZGVmaW5lIElSUV9DQU1JRl9DCQlTM0M2NFhYX0lSUV9WSUMwKDMpCisjZGVmaW5lIElSUV9DQU1JRl9QCQlTM0M2NFhYX0lSUV9WSUMwKDQpCisjZGVmaW5lIElSUV9DQU1JRl9NQwkJUzNDNjRYWF9JUlFfVklDMCg1KQorI2RlZmluZSBJUlFfUzNDNjQxMF9JSUMxCVMzQzY0WFhfSVJRX1ZJQzAoNSkKKyNkZWZpbmUgSVJRX1MzQzY0MTBfSUlTCQlTM0M2NFhYX0lSUV9WSUMwKDYpCisjZGVmaW5lIElSUV9TM0M2NDAwX0NBTUlGX01QCVMzQzY0WFhfSVJRX1ZJQzAoNikKKyNkZWZpbmUgSVJRX0NBTUlGX1dFX0MJCVMzQzY0WFhfSVJRX1ZJQzAoNykKKyNkZWZpbmUgSVJRX1MzQzY0MTBfRzNECQlTM0M2NFhYX0lSUV9WSUMwKDgpCisjZGVmaW5lIElSUV9TM0M2NDAwX0NBTUlGX1dFX1AJUzNDNjRYWF9JUlFfVklDMCg4KQorI2RlZmluZSBJUlFfUE9TVDAJCVMzQzY0WFhfSVJRX1ZJQzAoOSkKKyNkZWZpbmUgSVJRX1JPVEFUT1IJCVMzQzY0WFhfSVJRX1ZJQzAoMTApCisjZGVmaW5lIElSUV8yRAkJCVMzQzY0WFhfSVJRX1ZJQzAoMTEpCisjZGVmaW5lIElSUV9UVkVOQwkJUzNDNjRYWF9JUlFfVklDMCgxMikKKyNkZWZpbmUgSVJRX1NDQUxFUgkJUzNDNjRYWF9JUlFfVklDMCgxMykKKyNkZWZpbmUgSVJRX0JBVEYJCVMzQzY0WFhfSVJRX1ZJQzAoMTQpCisjZGVmaW5lIElSUV9KUEVHCQlTM0M2NFhYX0lSUV9WSUMwKDE1KQorI2RlZmluZSBJUlFfTUZDCQkJUzNDNjRYWF9JUlFfVklDMCgxNikKKyNkZWZpbmUgSVJRX1NETUEwCQlTM0M2NFhYX0lSUV9WSUMwKDE3KQorI2RlZmluZSBJUlFfU0RNQTEJCVMzQzY0WFhfSVJRX1ZJQzAoMTgpCisjZGVmaW5lIElSUV9BUk1fRE1BRVJSCQlTM0M2NFhYX0lSUV9WSUMwKDE5KQorI2RlZmluZSBJUlFfQVJNX0RNQQkJUzNDNjRYWF9JUlFfVklDMCgyMCkKKyNkZWZpbmUgSVJRX0FSTV9ETUFTCQlTM0M2NFhYX0lSUV9WSUMwKDIxKQorI2RlZmluZSBJUlFfS0VZUEFECQlTM0M2NFhYX0lSUV9WSUMwKDIyKQorI2RlZmluZSBJUlFfVElNRVIwX1ZJQwkJUzNDNjRYWF9JUlFfVklDMCgyMykKKyNkZWZpbmUgSVJRX1RJTUVSMV9WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjJfVklDCQlTM0M2NFhYX0lSUV9WSUMwKDI1KQorI2RlZmluZSBJUlFfV0RUCQkJUzNDNjRYWF9JUlFfVklDMCgyNikKKyNkZWZpbmUgSVJRX1RJTUVSM19WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjcpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlTM0M2NFhYX0lSUV9WSUMwKDI4KQorI2RlZmluZSBJUlFfTENEX0ZJRk8JCVMzQzY0WFhfSVJRX1ZJQzAoMjkpCisjZGVmaW5lIElSUV9MQ0RfVlNZTkMJCVMzQzY0WFhfSVJRX1ZJQzAoMzApCisjZGVmaW5lIElSUV9MQ0RfU1lTVEVNCQlTM0M2NFhYX0lSUV9WSUMwKDMxKQorCisvKiBWSUMxICovCisKKyNkZWZpbmUgSVJRX0VJTlQxMl8xOQkJUzNDNjRYWF9JUlFfVklDMSgwKQorI2RlZmluZSBJUlFfRUlOVDIwXzI3CQlTM0M2NFhYX0lSUV9WSUMxKDEpCisjZGVmaW5lIElSUV9QQ00wCQlTM0M2NFhYX0lSUV9WSUMxKDIpCisjZGVmaW5lIElSUV9QQ00xCQlTM0M2NFhYX0lSUV9WSUMxKDMpCisjZGVmaW5lIElSUV9BQzk3CQlTM0M2NFhYX0lSUV9WSUMxKDQpCisjZGVmaW5lIElSUV9VQVJUMAkJUzNDNjRYWF9JUlFfVklDMSg1KQorI2RlZmluZSBJUlFfVUFSVDEJCVMzQzY0WFhfSVJRX1ZJQzEoNikKKyNkZWZpbmUgSVJRX1VBUlQyCQlTM0M2NFhYX0lSUV9WSUMxKDcpCisjZGVmaW5lIElSUV9VQVJUMwkJUzNDNjRYWF9JUlFfVklDMSg4KQorI2RlZmluZSBJUlFfRE1BMAkJUzNDNjRYWF9JUlFfVklDMSg5KQorI2RlZmluZSBJUlFfRE1BMQkJUzNDNjRYWF9JUlFfVklDMSgxMCkKKyNkZWZpbmUgSVJRX09ORU5BTkQwCQlTM0M2NFhYX0lSUV9WSUMxKDExKQorI2RlZmluZSBJUlFfT05FTkFORDEJCVMzQzY0WFhfSVJRX1ZJQzEoMTIpCisjZGVmaW5lIElSUV9ORkMJCQlTM0M2NFhYX0lSUV9WSUMxKDEzKQorI2RlZmluZSBJUlFfQ0ZDT04JCVMzQzY0WFhfSVJRX1ZJQzEoMTQpCisjZGVmaW5lIElSUV9VSE9TVAkJUzNDNjRYWF9JUlFfVklDMSgxNSkKKyNkZWZpbmUgSVJRX1NQSTAJCVMzQzY0WFhfSVJRX1ZJQzEoMTYpCisjZGVmaW5lIElSUV9TUEkxCQlTM0M2NFhYX0lSUV9WSUMxKDE3KQorI2RlZmluZSBJUlFfSUlDCQkJUzNDNjRYWF9JUlFfVklDMSgxOCkKKyNkZWZpbmUgSVJRX0hTSXR4CQlTM0M2NFhYX0lSUV9WSUMxKDE5KQorI2RlZmluZSBJUlFfSFNJcngJCVMzQzY0WFhfSVJRX1ZJQzEoMjApCisjZGVmaW5lIElSUV9SRVNFUlZFRAkJUzNDNjRYWF9JUlFfVklDMSgyMSkKKyNkZWZpbmUgSVJRX01TTQkJCVMzQzY0WFhfSVJRX1ZJQzEoMjIpCisjZGVmaW5lIElSUV9IT1NUSUYJCVMzQzY0WFhfSVJRX1ZJQzEoMjMpCisjZGVmaW5lIElSUV9IU01NQzAJCVMzQzY0WFhfSVJRX1ZJQzEoMjQpCisjZGVmaW5lIElSUV9IU01NQzEJCVMzQzY0WFhfSVJRX1ZJQzEoMjUpCisjZGVmaW5lIElSUV9IU01NQzIJCUlSUV9TUEkxCS8qIHNoYXJlZCB3aXRoIFNQSTEgKi8KKyNkZWZpbmUgSVJRX09URwkJCVMzQzY0WFhfSVJRX1ZJQzEoMjYpCisjZGVmaW5lIElSUV9JUkRBCQlTM0M2NFhYX0lSUV9WSUMxKDI3KQorI2RlZmluZSBJUlFfUlRDX0FMQVJNCQlTM0M2NFhYX0lSUV9WSUMxKDI4KQorI2RlZmluZSBJUlFfU0VDCQkJUzNDNjRYWF9JUlFfVklDMSgyOSkKKyNkZWZpbmUgSVJRX1BFTkROCQlTM0M2NFhYX0lSUV9WSUMxKDMwKQorI2RlZmluZSBJUlFfVEMJCQlJUlFfUEVORE4KKyNkZWZpbmUgSVJRX0FEQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMzEpCisKKyNkZWZpbmUgUzNDNjRYWF9USU1FUl9JUlEoeCkJUzNDX0lSUSg2NCArICh4KSkKKworI2RlZmluZSBJUlFfVElNRVIwCQlTM0M2NFhYX1RJTUVSX0lSUSgwKQorI2RlZmluZSBJUlFfVElNRVIxCQlTM0M2NFhYX1RJTUVSX0lSUSgxKQorI2RlZmluZSBJUlFfVElNRVIyCQlTM0M2NFhYX1RJTUVSX0lSUSgyKQorI2RlZmluZSBJUlFfVElNRVIzCQlTM0M2NFhYX1RJTUVSX0lSUSgzKQorI2RlZmluZSBJUlFfVElNRVI0CQlTM0M2NFhYX1RJTUVSX0lSUSg0KQorCisvKiBjb21wYXRpYmlsaXR5IGZvciBkZXZpY2UgZGVmaW5lcyAqLworCisjZGVmaW5lIElSUV9JSUMxCQlJUlFfUzNDNjQxMF9JSUMxCisKKy8qIFNpbmNlIHRoZSBJUlFfRUlOVCh4KSBhcmUgYSBsaW5lYXIgbWFwcGluZyBvbiBjdXJyZW50IHMzYzY0eHggc2VyaWVzCisgKiB3ZSBqdXN0IGRlZmluZWQgdGhlbSBhcyBhbiBJUlFfRUlOVCh4KSBtYWNybyBmcm9tIFMzQ19JUlFfRUlOVF9CQVNFCisgKiB3aGljaCB3ZSBwbGFjZSBhZnRlciB0aGUgcGFpciBvZiBWSUNzLiAqLworCisjZGVmaW5lIFMzQ19JUlFfRUlOVF9CQVNFCVMzQ19JUlEoNjQrNSkKKworI2RlZmluZSBTM0NfRUlOVCh4KQkJKCh4KSArIFMzQ19JUlFfRUlOVF9CQVNFKQorI2RlZmluZSBJUlFfRUlOVCh4KQkJUzNDX0VJTlQoeCkKKworLyogTmV4dCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IGdyb3Vwcy4gVGhlc2UgYXJlIHNpbWlsYXIgdG8gdGhlIElSUV9FSU5UKHgpCisgKiB0aGF0IHRoZXkgYXJlIHNvdXJjZWQgZnJvbSB0aGUgR1BJTyBwaW5zIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHNjaGVtZSBmb3IKKyAqIHByaW9yaXR5IGFuZCBzb3VyY2UgaW5kaWNhdGlvbi4KKyAqCisgKiBUaGUgSVJRX0VJTlQoeCkgY2FuIGJlIHRob3VnaHQgb2YgYXMgJ2dyb3VwIDAnIG9mIHRoZSBhdmFpbGFibGUgR1BJTworICogaW50ZXJydXB0cywgYnV0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgdGhleSBhcmUga2VwdCBhcGFydCBmcm9tIHRoZXNlCisgKiBuZXh0IGludGVycnVwdHMuCisgKgorICogVXNlIElSUV9FSU5UX0dST1VQKGdyb3VwLCBvZmZzZXQpIHRvIGdldCB0aGUgbnVtYmVyIGZvciB1c2UgaW4gdGhlCisgKiBtYWNoaW5lIHNwZWNpZmljIHN1cHBvcnQgZmlsZXMuCisgKi8KKworI2RlZmluZSBJUlFfRUlOVF9HUk9VUDFfTlIJKDE1KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDJfTlIJKDgpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQM19OUgkoNSkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA0X05SCSgxNCkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA1X05SCSg3KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDZfTlIJKDEwKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDdfTlIJKDE2KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDhfTlIJKDE1KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDlfTlIJKDkpCisKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVBfQkFTRQlTM0NfRUlOVCgyOCkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVAxX0JBU0UJKElSUV9FSU5UX0dST1VQX0JBU0UgKyAweDAwKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDJfQkFTRQkoSVJRX0VJTlRfR1JPVVAxX0JBU0UgKyBJUlFfRUlOVF9HUk9VUDFfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQM19CQVNFCShJUlFfRUlOVF9HUk9VUDJfQkFTRSArIElSUV9FSU5UX0dST1VQMl9OUikKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA0X0JBU0UJKElSUV9FSU5UX0dST1VQM19CQVNFICsgSVJRX0VJTlRfR1JPVVAzX05SKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDVfQkFTRQkoSVJRX0VJTlRfR1JPVVA0X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDRfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQNl9CQVNFCShJUlFfRUlOVF9HUk9VUDVfQkFTRSArIElSUV9FSU5UX0dST1VQNV9OUikKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA3X0JBU0UJKElSUV9FSU5UX0dST1VQNl9CQVNFICsgSVJRX0VJTlRfR1JPVVA2X05SKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDhfQkFTRQkoSVJRX0VJTlRfR1JPVVA3X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDdfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQOV9CQVNFCShJUlFfRUlOVF9HUk9VUDhfQkFTRSArIElSUV9FSU5UX0dST1VQOF9OUikKKworI2RlZmluZSBJUlFfRUlOVF9HUk9VUChncm91cCwgbm8pCShJUlFfRUlOVF9HUk9VUCMjZ3JvdXAjI19fQkFTRSArICh4KSkKKworLyogU2V0IHRoZSBkZWZhdWx0IE5SX0lSUVMgKi8KKworI2RlZmluZSBOUl9JUlFTCShJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfSVJRU19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcGxsLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3BsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmJkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3BsbC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcGxsLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0WFggUExMIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NDAwX1BMTF9NRElWX01BU0sJKCgxIDw8ICgyNS0xNisxKSkgLSAxKQorI2RlZmluZSBTM0M2NDAwX1BMTF9QRElWX01BU0sJKCgxIDw8ICgxMy04KzEpKSAtIDEpCisjZGVmaW5lIFMzQzY0MDBfUExMX1NESVZfTUFTSwkoKDEgPDwgKDItMCsxKSkgLSAxKQorI2RlZmluZSBTM0M2NDAwX1BMTF9NRElWX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjQwMF9QTExfUERJVl9TSElGVAkoOCkKKyNkZWZpbmUgUzNDNjQwMF9QTExfU0RJVl9TSElGVAkoMCkKKworI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczNjNjQwMF9nZXRfcGxsKHVuc2lnbmVkIGxvbmcgYmFzZWNsaywKKwkJCQkJICAgIHUzMiBwbGxjb24pCit7CisJdTMyIG1kaXYsIHBkaXYsIHNkaXY7CisJdTY0IGZ2Y28gPSBiYXNlY2xrOworCisJbWRpdiA9IChwbGxjb24gPj4gUzNDNjQwMF9QTExfTURJVl9TSElGVCkgJiBTM0M2NDAwX1BMTF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxjb24gPj4gUzNDNjQwMF9QTExfUERJVl9TSElGVCkgJiBTM0M2NDAwX1BMTF9QRElWX01BU0s7CisJc2RpdiA9IChwbGxjb24gPj4gUzNDNjQwMF9QTExfU0RJVl9TSElGVCkgJiBTM0M2NDAwX1BMTF9TRElWX01BU0s7CisKKwlmdmNvICo9IG1kaXY7CisJZG9fZGl2KGZ2Y28sIChwZGl2IDw8IHNkaXYpKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylmdmNvOworfQorCisjZGVmaW5lIFMzQzY0MDBfRVBMTF9NRElWX01BU0sJKCgxIDw8ICgyMy0xNikpIC0gMSkKKyNkZWZpbmUgUzNDNjQwMF9FUExMX1BESVZfTUFTSwkoKDEgPDwgKDEzLTgpKSAtIDEpCisjZGVmaW5lIFMzQzY0MDBfRVBMTF9TRElWX01BU0sJKCgxIDw8ICgyLTApKSAtIDEpCisjZGVmaW5lIFMzQzY0MDBfRVBMTF9NRElWX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjQwMF9FUExMX1BESVZfU0hJRlQJKDgpCisjZGVmaW5lIFMzQzY0MDBfRVBMTF9TRElWX1NISUZUCSgwKQorI2RlZmluZSBTM0M2NDAwX0VQTExfS0RJVl9NQVNLICAoMHhmZmZmKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczNjNjQwMF9nZXRfZXBsbCh1bnNpZ25lZCBsb25nIGJhc2VjbGspCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJdTMyIGVwbGwwID0gX19yYXdfcmVhZGwoUzNDX0VQTExfQ09OMCk7CisJdTMyIGVwbGwxID0gX19yYXdfcmVhZGwoUzNDX0VQTExfQ09OMSk7CisJdTMyIG1kaXYsIHBkaXYsIHNkaXYsIGtkaXY7CisJdTY0IHRtcDsKKworCW1kaXYgPSAoZXBsbDAgPj4gUzNDNjQwMF9FUExMX01ESVZfU0hJRlQpICYgUzNDNjQwMF9FUExMX01ESVZfTUFTSzsKKwlwZGl2ID0gKGVwbGwwID4+IFMzQzY0MDBfRVBMTF9QRElWX1NISUZUKSAmIFMzQzY0MDBfRVBMTF9QRElWX01BU0s7CisJc2RpdiA9IChlcGxsMCA+PiBTM0M2NDAwX0VQTExfU0RJVl9TSElGVCkgJiBTM0M2NDAwX0VQTExfU0RJVl9NQVNLOworCWtkaXYgPSBlcGxsMSAmIFMzQzY0MDBfRVBMTF9LRElWX01BU0s7CisKKwkvKiBXZSBuZWVkIHRvIG11bHRpcGxlIGJhc2VjbGsgYnkgbWRpdiAodGhlIGludGVnZXIgcGFydCkgYW5kIGtkaXYKKwkgKiB3aGljaCBpcyBpbiAyXjE2dGhzLCBzbyBzaGlmdCBtZGl2IHVwIChkb2VzIG5vdCBvdmVyZmxvdykgYW5kCisJICogYWRkIGtkaXYgYmVmb3JlIG11bHRpcGx5aW5nLiBUaGUgdXNlIG9mIHRtcCBpcyB0byBhdm9pZCBhbnkKKwkgKiBvdmVyZmxvd3MgYmVmb3JlIHNoaWZ0aW5nIGJhYyBkb3duIGludG8gcmVzdWx0IHdoZW4gbXVsdGlwbGluZworCSAqIGJ5IHRoZSBtZGl2IGFuZCBrZGl2IHBhaXIuCisJICovCisKKwl0bXAgPSBiYXNlY2xrOworCXRtcCAqPSAobWRpdiA8PCAxNikgKyBrZGl2OworCWRvX2Rpdih0bXAsIChwZGl2IDw8IHNkaXYpKTsKKwlyZXN1bHQgPSB0bXAgPj4gMTY7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTA4MmMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIGNsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1JFR1NfQ0xPQ0tfSAorI2RlZmluZSBfX1BMQVRfUkVHU19DTE9DS19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX0NMS1JFRyh4KQkJKFMzQ19WQV9TWVMgKyAoeCkpCisKKyNkZWZpbmUgUzNDX0FQTExfTE9DSwkJUzNDX0NMS1JFRygweDAwKQorI2RlZmluZSBTM0NfTVBMTF9MT0NLCQlTM0NfQ0xLUkVHKDB4MDQpCisjZGVmaW5lIFMzQ19FUExMX0xPQ0sJCVMzQ19DTEtSRUcoMHgwOCkKKyNkZWZpbmUgUzNDX0FQTExfQ09OCQlTM0NfQ0xLUkVHKDB4MEMpCisjZGVmaW5lIFMzQ19NUExMX0NPTgkJUzNDX0NMS1JFRygweDEwKQorI2RlZmluZSBTM0NfRVBMTF9DT04wCQlTM0NfQ0xLUkVHKDB4MTQpCisjZGVmaW5lIFMzQ19FUExMX0NPTjEJCVMzQ19DTEtSRUcoMHgxOCkKKyNkZWZpbmUgUzNDX0NMS19TUkMJCVMzQ19DTEtSRUcoMHgxQykKKyNkZWZpbmUgUzNDX0NMS19ESVYwCQlTM0NfQ0xLUkVHKDB4MjApCisjZGVmaW5lIFMzQ19DTEtfRElWMQkJUzNDX0NMS1JFRygweDI0KQorI2RlZmluZSBTM0NfQ0xLX0RJVjIJCVMzQ19DTEtSRUcoMHgyOCkKKyNkZWZpbmUgUzNDX0NMS19PVVQJCVMzQ19DTEtSRUcoMHgyQykKKyNkZWZpbmUgUzNDX0hDTEtfR0FURQkJUzNDX0NMS1JFRygweDMwKQorI2RlZmluZSBTM0NfUENMS19HQVRFCQlTM0NfQ0xLUkVHKDB4MzQpCisjZGVmaW5lIFMzQ19TQ0xLX0dBVEUJCVMzQ19DTEtSRUcoMHgzOCkKKworLyogQ0xLRElWMCAqLworI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTUZDX01BU0sJKDB4ZiA8PCAyOCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01GQ19TSElGVAkoMjgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9KUEVHX01BU0sJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0pQRUdfU0hJRlQJKDI0KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQ0FNX01BU0sJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0NBTV9TSElGVAkoMjApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9TRUNVUklUWV9NQVNLCSgweDMgPDwgMTgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9TRUNVUklUWV9TSElGVAkoMTgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9QQ0xLX01BU0sJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX1BDTEtfU0hJRlQJKDEyKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfSENMSzJfTUFTSwkoMHg3IDw8IDkpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLMl9TSElGVAkoOSkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0hDTEtfTUFTSwkoMHgxIDw8IDgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHgzIDw8IDApCisjZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fU0hJRlQJKDApCisKKy8qIENMS0RJVjEgKi8KKyNkZWZpbmUgUzNDNjQxMF9DTEtESVYxX0ZJTUNfTUFTSwkoMHhmIDw8IDI0KQorI2RlZmluZSBTM0M2NDEwX0NMS0RJVjFfRklNQ19TSElGVAkoMjQpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9NQVNLCSgweGYgPDwgMjApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9TSElGVAkoMjApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9TQ0FMRVJfTUFTSwkoMHhmIDw8IDE2KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfU0NBTEVSX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX0xDRF9NQVNLCSgweGYgPDwgMTIpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9MQ0RfU0hJRlQJKDEyKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfTU1DMl9NQVNLCSgweGYgPDwgOCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX01NQzJfU0hJRlQJKDgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9NTUMxX01BU0sJKDB4ZiA8PCA0KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfTU1DMV9TSElGVAkoNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX01NQzBfTUFTSwkoMHhmIDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9NTUMwX1NISUZUCSgwKQorCisvKiBDTEtESVYyICovCisjZGVmaW5lIFMzQzY0MTBfQ0xLRElWMl9BVURJTzJfTUFTSwkoMHhmIDw8IDI0KQorI2RlZmluZSBTM0M2NDEwX0NMS0RJVjJfQVVESU8yX1NISUZUCSgyNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX0lSREFfTUFTSwkoMHhmIDw8IDIwKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfSVJEQV9TSElGVAkoMjApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9VQVJUX01BU0sJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX1VBUlRfU0hJRlQJKDE2KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfQVVESU8xX01BU0sJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX0FVRElPMV9TSElGVAkoMTIpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9BVURJTzBfTUFTSwkoMHhmIDw8IDgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9BVURJTzBfU0hJRlQJKDgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9TUEkxX01BU0sJKDB4ZiA8PCA0KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfU1BJMV9TSElGVAkoNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX1NQSTBfTUFTSwkoMHhmIDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9TUEkwX1NISUZUCSgwKQorCisvKiBIQ0xLIEdBVEUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19CVVMJKDE8PDMwKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfU0VDVVIJKDE8PDI5KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfU0RNQTEJKDE8PDI4KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfU0RNQTIJKDE8PDI3KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfVUhPU1QJKDE8PDI2KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSVJPTQkoMTw8MjUpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19ERFIxCSgxPDwyNCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0REUjAJKDE8PDIzKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfTUVNMQkoMTw8MjIpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19NRU0wCSgxPDwyMSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1VTQgkoMTw8MjApCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19IU01NQzIJKDE8PDE5KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMxCSgxPDwxOCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMAkoMTw8MTcpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19NRFAJKDE8PDE2KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfREhPU1QJKDE8PDE1KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSUhPU1QJKDE8PDE0KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfRE1BMQkoMTw8MTMpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19ETUEwCSgxPDwxMikKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0pQRUcJKDE8PDExKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfQ0FNSUYJKDE8PDEwKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfU0NBTEVSCSgxPDw5KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfMkQJKDE8PDgpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19UVgkoMTw8NykKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1BPU1QwCSgxPDw1KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfUk9UCSgxPDw0KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfTENECSgxPDwzKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfVFpJQwkoMTw8MikKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0lOVEMJKDE8PDEpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19NRkMJKDE8PDApCisKKy8qIFBDTEsgR0FURSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzNDNjQxMF9DTEtDT05fUENMS19JMkMxCSgxPDwyNykKKyNkZWZpbmUgUzNDNjQxMF9DTEtDT05fUENMS19JSVMyCSgxPDwyNikKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1NLRVkJCSgxPDwyNCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0NISVBJRAkJKDE8PDIzKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfU1BJMQkJKDE8PDIyKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfU1BJMAkJKDE8PDIxKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSFNJUlgJCSgxPDwyMCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0hTSVRYCQkoMTw8MTkpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19HUElPCQkoMTw8MTgpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19JSUMJCSgxPDwxNykKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0lJUzEJCSgxPDwxNikKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0lJUzAJCSgxPDwxNSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0FDOTcJCSgxPDwxNCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1RaUEMJCSgxPDwxMykKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1RTQURDCQkoMTw8MTIpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19LRVlQQUQJCSgxPDwxMSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0lSREEJCSgxPDwxMCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1BDTTEJCSgxPDw5KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfUENNMAkJKDE8PDgpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19QV00JCSgxPDw3KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfUlRDCQkoMTw8NikKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1dEVAkJKDE8PDUpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19VQVJUMwkJKDE8PDQpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19VQVJUMgkJKDE8PDMpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19VQVJUMQkJKDE8PDIpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19VQVJUMAkJKDE8PDEpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19NRkMJCSgxPDwwKQorCisvKiBTQ0xLIEdBVEUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19VSE9TVAkJKDE8PDMwKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMl80OAkJKDE8PDI5KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMV80OAkJKDE8PDI4KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMF80OAkJKDE8PDI3KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMgkJKDE8PDI2KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMQkJKDE8PDI1KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTU1DMAkJKDE8PDI0KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU1BJMV80OCAJKDE8PDIzKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU1BJMF80OCAJKDE8PDIyKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU1BJMQkJKDE8PDIxKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU1BJMAkJKDE8PDIwKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfREFDMjcJCSgxPDwxOSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1RWMjcJCSgxPDwxOCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NDQUxFUjI3CSgxPDwxNykKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NDQUxFUgkJKDE8PDE2KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTENEMjcJCSgxPDwxNSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0xDRAkJKDE8PDE0KQorI2RlZmluZSBTM0M2NDAwX0NMS0NPTl9TQ0xLX1BPU1QxXzI3CSgxPDwxMykKKyNkZWZpbmUgUzNDNjQxMF9DTEtDT05fRklNQwkJKDE8PDEzKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfUE9TVDBfMjcJKDE8PDEyKQorI2RlZmluZSBTM0M2NDAwX0NMS0NPTl9TQ0xLX1BPU1QxCSgxPDwxMSkKKyNkZWZpbmUgUzNDNjQxMF9DTEtDT05fU0NMS19BVURJTzIJKDE8PDExKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfUE9TVDAJCSgxPDwxMCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0FVRElPMQkJKDE8PDkpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19BVURJTzAJCSgxPDw4KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU0VDVVIJCSgxPDw3KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfSVJEQQkJKDE8PDYpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19VQVJUCQkoMTw8NSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX09ORU5BTkQgCSgxPDw0KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTUZDCQkoMTw8MykKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0NBTQkJKDE8PDIpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19KUEVHCQkoMTw8MSkKKworLyogQ0xLU1JDICovCisKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfQVBMTF9NT1VUCSgxIDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01QTExfTU9VVAkoMSA8PCAxKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19FUExMX01PVVQJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfQVBMTF9NT1VUX1NISUZUCSgwKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NUExMX01PVVRfU0hJRlQJKDEpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0VQTExfTU9VVF9TSElGVAkoMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTUZDCQkoMSA8PCA0KQorCisjZGVmaW5lIFMzQzY0MTBfQ0xLU1JDX1RWMjdfTUFTSwkoMHgxIDw8IDMxKQorI2RlZmluZSBTM0M2NDEwX0NMS1NSQ19UVjI3X1NISUZUCSgzMSkKKyNkZWZpbmUgUzNDNjQxMF9DTEtTUkNfREFDMjdfTUFTSwkoMHgxIDw8IDMwKQorI2RlZmluZSBTM0M2NDEwX0NMS1NSQ19EQUMyN19TSElGVAkoMzApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1NDQUxFUl9NQVNLCSgweDMgPDwgMjgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1NDQUxFUl9TSElGVAkoMjgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0xDRF9NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19MQ0RfU0hJRlQJKDI2KQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19JUkRBX01BU0sJKDB4MyA8PCAyNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfSVJEQV9TSElGVAkoMjQpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01NQzJfTUFTSwkoMHgzIDw8IDIyKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NTUMyX1NISUZUCSgyMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTU1DMV9NQVNLCSgweDMgPDwgMjApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01NQzFfU0hJRlQJKDIwKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NTUMwX01BU0sJKDB4MyA8PCAxOCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTU1DMF9TSElGVAkoMTgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1NQSTFfTUFTSwkoMHgzIDw8IDE2KQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19TUEkxX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfU1BJMF9NQVNLCSgweDMgPDwgMTQpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1NQSTBfU0hJRlQJKDE0KQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19VQVJUX01BU0sJKDB4MSA8PCAxMykKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfVUFSVF9TSElGVAkoMTMpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FVRElPMV9NQVNLCSgweDcgPDwgMTApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FVRElPMV9TSElGVAkoMTApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FVRElPMF9NQVNLCSgweDcgPDwgNykKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfQVVESU8wX1NISUZUCSg3KQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19VSE9TVF9NQVNLCSgweDMgPDwgNSkKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfVUhPU1RfU0hJRlQJKDUpCisKKworI2VuZGlmIC8qIF9QTEFUX1JFR1NfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViODczZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKQEAgLTAsMCArMSwzNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0WFggLSBHUElPIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1MzQzY0WFhfUkVHU19HUElPX0gKKyNkZWZpbmUgX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19IIF9fRklMRV9fCisKKy8qIEJhc2UgYWRkcmVzc2VzIGZvciBlYWNoIG9mIHRoZSBiYW5rcyAqLworCisjZGVmaW5lIFMzQzY0WFhfR1BBX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEJfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDIwKQorI2RlZmluZSBTM0M2NFhYX0dQQ19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwNDApCisjZGVmaW5lIFMzQzY0WFhfR1BEX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDA2MCkKKyNkZWZpbmUgUzNDNjRYWF9HUEVfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDgwKQorI2RlZmluZSBTM0M2NFhYX0dQRl9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwQTApCisjZGVmaW5lIFMzQzY0WFhfR1BHX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDBDMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEhfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMEUwKQorI2RlZmluZSBTM0M2NFhYX0dQSV9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxMDApCisjZGVmaW5lIFMzQzY0WFhfR1BKX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDEyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEtfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODAwKQorI2RlZmluZSBTM0M2NFhYX0dQTF9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDA4MTApCisjZGVmaW5lIFMzQzY0WFhfR1BNX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDgyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE5fQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODMwKQorI2RlZmluZSBTM0M2NFhYX0dQT19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxNDApCisjZGVmaW5lIFMzQzY0WFhfR1BQX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDE2MCkKKyNkZWZpbmUgUzNDNjRYWF9HUFFfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMTgwKQorCisjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGVkODI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCBzeXN0ZW0gcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX1BMQVRfUkVHU19TWVNfSAorI2RlZmluZSBfX1BMQVRfUkVHU19TWVNfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQ19TWVNSRUcoeCkJCShTM0NfVkFfU1lTICsgKHgpKQorCisjZGVmaW5lIFMzQzY0WFhfT1RIRVJTCQlTM0NfU1lTUkVHKDB4OTAwKQorCisjZGVmaW5lIFMzQzY0WFhfT1RIRVJTX1VTQk1BU0sJKDEgPDwgMTYpCisKKyNlbmRpZiAvKiBfUExBVF9SRUdTX1NZU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MDAuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvczNjNjQwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWVhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MDAuaApAQCAtMCwwICsxLDM1IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MDAuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzY0MDAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzNDNjQwMCByZWxhdGVkIFNvQ3MgKi8KKworZXh0ZXJuIHZvaWQgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBzM2M2NDAwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0MDBfc2V0dXBfY2xvY2tzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0NQVV9TM0M2NDAwCisKK2V4dGVybiAgaW50IHMzYzY0MDBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0MDBfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjNjQwMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNkZWZpbmUgczNjNjQwMF9pbml0X3VhcnRzIHMzYzY0MDBfY29tbW9uX2luaXRfdWFydHMKKworI2Vsc2UKKyNkZWZpbmUgczNjNjQwMF9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHMzYzY0MDBfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHMzYzY0MDBfbWFwX2lvIE5VTEwKKyNkZWZpbmUgczNjNjQwMF9pbml0IE5VTEwKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvczNjNjQxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGNkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MTAuaApAQCAtMCwwICsxLDI5IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MTAuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCAgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEhlYWRlciBmaWxlIGZvciBzM2M2NDEwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzY0MTAKKworZXh0ZXJuICBpbnQgczNjNjQxMF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgczNjNjQxMF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0MTBfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjNjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNkZWZpbmUgczNjNjQxMF9pbml0X3VhcnRzIHMzYzY0MDBfY29tbW9uX2luaXRfdWFydHMKKworI2Vsc2UKKyNkZWZpbmUgczNjNjQxMF9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHMzYzY0MTBfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHMzYzY0MTBfbWFwX2lvIE5VTEwKKyNkZWZpbmUgczNjNjQxMF9pbml0IE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLWVpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdjYzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEludGVycnVwdCBoYW5kbGluZyBmb3IgSVJRX0VJTlQoeCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLWlycXR5cGUuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogR1BJTyBpcyAweDdGMDA4eHh4LCAqLworI2RlZmluZSBTM0M2NFhYX0dQSU9SRUcoeCkJKFMzQzY0WFhfVkFfR1BJTyArICh4KSkKKworI2RlZmluZSBTM0M2NFhYX0VJTlQwQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MDApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04xCVMzQzY0WFhfR1BJT1JFRygweDkwNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjAJUzNDNjRYWF9HUElPUkVHKDB4OTEwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMQlTM0M2NFhYX0dQSU9SRUcoMHg5MTQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04yCVMzQzY0WFhfR1BJT1JFRygweDkxOCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjMJUzNDNjRYWF9HUElPUkVHKDB4OTFDKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBNQVNLCVMzQzY0WFhfR1BJT1JFRygweDkyMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMFBFTkQJUzNDNjRYWF9HUElPUkVHKDB4OTI0KQorCisKKyNkZWZpbmUgZWludF9vZmZzZXQoaXJxKQkoKGlycSkgLSBJUlFfRUlOVCgwKSkKKyNkZWZpbmUgZWludF9pcnFfdG9fYml0KGlycSkJKDEgPDwgZWludF9vZmZzZXQoaXJxKSkKKworc3RhdGljIGlubGluZSB2b2lkIHMzY19pcnFfZWludF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UME1BU0spOworCW1hc2sgfD0gZWludF9pcnFfdG9fYml0KGlycSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzY0WFhfRUlOVDBNQVNLKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9laW50X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBtYXNrOworCisJbWFzayA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfRUlOVDBNQVNLKTsKKwltYXNrIHw9IGVpbnRfaXJxX3RvX2JpdChpcnEpOworCV9fcmF3X3dyaXRlbChtYXNrLCBTM0M2NFhYX0VJTlQwTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaXJxX2VpbnRfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKGVpbnRfaXJxX3RvX2JpdChpcnEpLCBTM0M2NFhYX0VJTlQwUEVORCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZWludF9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJLyogY29tcGlsZXIgc2hvdWxkIGluLWxpbmUgdGhlc2UgKi8KKwlzM2NfaXJxX2VpbnRfbWFzayhpcnEpOworCXMzY19pcnFfZWludF9hY2soaXJxKTsKK30KKworc3RhdGljIGludCBzM2NfaXJxX2VpbnRfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJaW50IG9mZnMgPSBlaW50X29mZnNldChpcnEpOworCWludCBzaGlmdDsKKwl1MzIgY3RybCwgbWFzazsKKwl1MzIgbmV3dmFsdWUgPSAwOworCXZvaWQgX19pb21lbSAqcmVnOworCisJaWYgKG9mZnMgPiAyNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob2ZmcyA8PSAxNSkKKwkJcmVnID0gUzNDNjRYWF9FSU5UMENPTjA7CisJZWxzZQorCQlyZWcgPSBTM0M2NFhYX0VJTlQwQ09OMTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRX1RZUEVfTk9ORToKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gZWRnZSBzZXR0aW5nIVxuIik7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9SSVNFRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9GQUxMRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9MT1dMRVY7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0hJTEVWOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiTm8gc3VjaCBpcnEgdHlwZSAlZCIsIHR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2hpZnQgPSAob2ZmcyAvIDIpICogNDsKKwltYXNrID0gMHg3IDw8IHNoaWZ0OworCisJY3RybCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJY3RybCAmPSB+bWFzazsKKwljdHJsIHw9IG5ld3ZhbHVlIDw8IHNoaWZ0OworCV9fcmF3X3dyaXRlbChjdHJsLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV9laW50ID0geworCS5uYW1lCQk9ICJzM2MtZWludCIsCisJLm1hc2sJCT0gczNjX2lycV9laW50X21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX2VpbnRfdW5tYXNrLAorCS5tYXNrX2Fjawk9IHMzY19pcnFfZWludF9tYXNrYWNrLAorCS5hY2sJCT0gczNjX2lycV9laW50X2FjaywKKwkuc2V0X3R5cGUJPSBzM2NfaXJxX2VpbnRfc2V0X3R5cGUsCit9OworCisvKiBzM2NfaXJxX2RlbXV4X2VpbnQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlbXV4ZXMgdGhlIElSUSBmcm9tIHRoZSBncm91cDAgZXh0ZXJuYWwgaW50ZXJydXB0cywKKyAqIGZyb20gSVJRX0VJTlQoMCkgdG8gSVJRX0VJTlQoMjcpLiBJdCBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmVkIGludG8KKyAqIHRoZSBzcGVjaWZpYyBoYW5kbGVycyBzM2NfaXJxX2RlbXV4X2VpbnRYX1kuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQoreworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwUEVORCk7CisJdTMyIG1hc2sgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwTUFTSyk7CisJdW5zaWduZWQgaW50IGlycTsKKworCXN0YXR1cyAmPSB+bWFzazsKKwlzdGF0dXMgPj49IHN0YXJ0OworCXN0YXR1cyAmPSAoMSA8PCAoZW5kIC0gc3RhcnQgKyAxKSkgLSAxOworCisJZm9yIChpcnEgPSBJUlFfRUlOVChzdGFydCk7IGlycSA8PSBJUlFfRUlOVChlbmQpOyBpcnErKykgeworCQlpZiAoc3RhdHVzICYgMSkKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCisJCXN0YXR1cyA+Pj0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDBfMyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjX2lycV9kZW11eF9laW50KDAsIDMpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQ0XzExKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X2VpbnQoNCwgMTEpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQxMl8xOSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjX2lycV9kZW11eF9laW50KDEyLCAxOSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDIwXzI3KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X2VpbnQoMjAsIDI3KTsKK30KKworaW50IF9faW5pdCBzM2M2NHh4X2luaXRfaXJxX2VpbnQodm9pZCkKK3sKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSBJUlFfRUlOVCgwKTsgaXJxIDw9IElSUV9FSU5UKDI3KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJnMzY19pcnFfZWludCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQwXzMsIHMzY19pcnFfZGVtdXhfZWludDBfMyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQ0XzExLCBzM2NfaXJxX2RlbXV4X2VpbnQ0XzExKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRUlOVDEyXzE5LCBzM2NfaXJxX2RlbXV4X2VpbnQxMl8xOSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQyMF8yNywgczNjX2lycV9kZW11eF9laW50MjBfMjcpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjNjR4eF9pbml0X2lycV9laW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTRmMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS5jCkBAIC0wLDAgKzEsMjU3IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogVGltZXIgaW50ZXJydXB0IGhhbmRsaW5nICovCisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIodW5zaWduZWQgaW50IGJhc2VfaXJxLCB1bnNpZ25lZCBpbnQgc3ViX2lycSkKK3sKKwlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIzKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXI0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSNCk7Cit9CisKKy8qIFdlIGFzc3VtZSB0aGUgSVJRX1RJTUVSMC4uSVJRX1RJTUVSNCByYW5nZSBpcyBjb250aW51b3VzLiAqLworCitzdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKKworCXJlZyAmPSAweDFmOyAgLyogbWFzayBvdXQgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJcmVnICY9IH4oMSA8PCAoaXJxIC0gSVJRX1RJTUVSMCkpOworCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7CisKKwlyZWcgJj0gMHgxZjsgIC8qIG1hc2sgb3V0IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXJlZyB8PSAxIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOworCisJcmVnICY9IDB4MWY7CisJcmVnIHw9ICgxIDw8IDUpIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfdGltZXIgPSB7CisJLm5hbWUJCT0gInMzYy10aW1lciIsCisJLm1hc2sJCT0gczNjX2lycV90aW1lcl9tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV90aW1lcl91bm1hc2ssCisJLmFjawkJPSBzM2NfaXJxX3RpbWVyX2FjaywKK307CisKK3N0cnVjdCB1YXJ0X2lycSB7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCXVuc2lnbmVkIGludAkgYmFzZV9pcnE7CisJdW5zaWduZWQgaW50CSBwYXJlbnRfaXJxOworfTsKKworLyogTm90ZSwgd2UgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgcGFyZW50IElSUXMsIElSUV9VQVJUWzAuLjNdCisgKiBhcmUgY29uc2VjdXRpdmUgd2hlbiBsb29raW5nIHVwIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGRlbXV4IHJvdXRpbmVzLgorICovCitzdGF0aWMgc3RydWN0IHVhcnRfaXJxIHVhcnRfaXJxc1tdID0geworCVswXSA9IHsKKwkJLnJlZ3MJCT0gUzNDX1ZBX1VBUlQwLAorCQkuYmFzZV9pcnEJPSBJUlFfUzNDVUFSVF9CQVNFMCwKKwkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDAsCisJfSwKKwlbMV0gPSB7CisJCS5yZWdzCQk9IFMzQ19WQV9VQVJUMSwKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTEsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQxLAorCX0sCisJWzJdID0geworCQkucmVncwkJPSBTM0NfVkFfVUFSVDIsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UyLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMiwKKwl9LAorCVszXSA9IHsKKwkJLnJlZ3MJCT0gUzNDX1ZBX1VBUlQzLAorCQkuYmFzZV9pcnEJPSBJUlFfUzNDVUFSVF9CQVNFMywKKwkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDMsCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpzM2NfaXJxX3VhcnRfYmFzZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCB1YXJ0X2lycSAqdWlycSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcmV0dXJuIHVpcnEtPnJlZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzY19pcnFfdWFydF9iaXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxICYgMzsKK30KKworLyogVUFSVCBpbnRlcnJ1cHQgcmVnaXN0ZXJzLCBub3Qgd29ydGggYWRkaW5nIHRvIHNlcGVyYXRlIGluY2x1ZGUgaGVhZGVyICovCisjZGVmaW5lIFMzQzY0WFhfVUlOVFAJMHgzMAorI2RlZmluZSBTM0M2NFhYX1VJTlRTUAkweDM0CisjZGVmaW5lIFMzQzY0WFhfVUlOVE0JMHgzOAorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwocmVncyArIFMzQzY0WFhfVUlOVE0pOworCXJlZyB8PSAoMSA8PCBiaXQpOworCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X21hc2thY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOworCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKKwlyZWcgfD0gKDEgPDwgYml0KTsKKwlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCByZWdzICsgUzNDNjRYWF9VSU5UUCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdWFydF91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOworCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKKwlyZWcgJj0gfigxIDw8IGJpdCk7CisJX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCByZWdzICsgUzNDNjRYWF9VSU5UUCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdWFydCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHVhcnRfaXJxICp1aXJxID0gJnVhcnRfaXJxc1tpcnEgLSBJUlFfVUFSVDBdOworCXUzMiBwZW5kID0gX19yYXdfcmVhZGwodWlycS0+cmVncyArIFMzQzY0WFhfVUlOVFApOworCWludCBiYXNlID0gdWlycS0+YmFzZV9pcnE7CisKKwlpZiAocGVuZCAmICgxIDw8IDApKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSk7CisJaWYgKHBlbmQgJiAoMSA8PCAxKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAxKTsKKwlpZiAocGVuZCAmICgxIDw8IDIpKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDIpOworCWlmIChwZW5kICYgKDEgPDwgMykpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV91YXJ0ID0geworCS5uYW1lCQk9ICJzM2MtdWFydCIsCisJLm1hc2sJCT0gczNjX2lycV91YXJ0X21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VhcnRfdW5tYXNrLAorCS5tYXNrX2Fjawk9IHMzY19pcnFfdWFydF9tYXNrYWNrLAorCS5hY2sJCT0gczNjX2lycV91YXJ0X2FjaywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzM2M2NHh4X3VhcnRfaXJxKHN0cnVjdCB1YXJ0X2lycSAqdWlycSkKK3sKKwl2b2lkICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgb2ZmczsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIHN0YXJ0LiAqLworCV9fcmF3X3dyaXRlbCgweGYsIHJlZ19iYXNlICsgUzNDNjRYWF9VSU5UTSk7CisKKwlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgMzsgb2ZmcysrKSB7CisJCWlycSA9IHVpcnEtPmJhc2VfaXJxICsgb2ZmczsKKworCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV91YXJ0KTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB1aXJxKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcih1aXJxLT5wYXJlbnRfaXJxLCBzM2NfaXJxX2RlbXV4X3VhcnQpOworfQorCit2b2lkIF9faW5pdCBzM2M2NHh4X2luaXRfaXJxKHUzMiB2aWMwX3ZhbGlkLCB1MzIgdmljMV92YWxpZCkKK3sKKwlpbnQgdWFydCwgaXJxOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXNpbmcgaW50ZXJydXB0c1xuIiwgX19mdW5jX18pOworCisJLyogaW5pdGlhbGlzZSB0aGUgcGFpciBvZiBWSUNzICovCisJdmljX2luaXQoUzNDX1ZBX1ZJQzAsIFMzQ19WSUMwX0JBU0UsIHZpYzBfdmFsaWQpOworCXZpY19pbml0KFMzQ19WQV9WSUMxLCBTM0NfVklDMV9CQVNFLCB2aWMxX3ZhbGlkKTsKKworCS8qIGFkZCB0aGUgdGltZXIgc3ViLWlycXMgKi8KKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjBfVklDLCBzM2NfaXJxX2RlbXV4X3RpbWVyMCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMV9WSUMsIHMzY19pcnFfZGVtdXhfdGltZXIxKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIyX1ZJQywgczNjX2lycV9kZW11eF90aW1lcjIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjNfVklDLCBzM2NfaXJxX2RlbXV4X3RpbWVyMyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSNF9WSUMsIHMzY19pcnFfZGVtdXhfdGltZXI0KTsKKworCWZvciAoaXJxID0gSVJRX1RJTUVSMDsgaXJxIDw9IElSUV9USU1FUjQ7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZzM2NfaXJxX3RpbWVyKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgQVJSQVlfU0laRSh1YXJ0X2lycXMpOyB1YXJ0KyspCisJCXMzYzY0eHhfdWFydF9pcnEoJnVhcnRfaXJxc1t1YXJ0XSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5YTBjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKQEAgLTAsMCArMSw2NTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0MDAgYmFzZWQgY29tbW9uIGNsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgorCisvKiBmaW5fYXBsbCwgZmluX21wbGwgYW5kIGZpbl9lcGxsIGFyZSBhbGwgdGhlIHNhbWUgY2xvY2ssIHdoaWNoIHdlIGNhbGwKKyAqIGV4dF94dGFsX211eCBmb3Igd2FudCBvZiBhbiBhY3R1YWwgbmFtZSBmcm9tIHRoZSBtYW51YWwuCisqLworCitzdHJ1Y3QgY2xrIGNsa19leHRfeHRhbF9tdXggPSB7CisJLm5hbWUJCT0gImV4dF94dGFsIiwKKwkuaWQJCT0gLTEsCit9OworCisjZGVmaW5lIGNsa19maW5fYXBsbCBjbGtfZXh0X3h0YWxfbXV4CisjZGVmaW5lIGNsa19maW5fbXBsbCBjbGtfZXh0X3h0YWxfbXV4CisjZGVmaW5lIGNsa19maW5fZXBsbCBjbGtfZXh0X3h0YWxfbXV4CisKKyNkZWZpbmUgY2xrX2ZvdXRfbXBsbAljbGtfbXBsbAorCitzdHJ1Y3QgY2xrX3NvdXJjZXMgeworCXVuc2lnbmVkIGludAlucl9zb3VyY2VzOworCXN0cnVjdCBjbGsJKipzb3VyY2VzOworfTsKKworc3RydWN0IGNsa3NyY19jbGsgeworCXN0cnVjdCBjbGsJCWNsazsKKwl1bnNpZ25lZCBpbnQJCW1hc2s7CisJdW5zaWduZWQgaW50CQlzaGlmdDsKKworCXN0cnVjdCBjbGtfc291cmNlcwkqc291cmNlczsKKworCXVuc2lnbmVkIGludAkJZGl2aWRlcl9zaGlmdDsKKwl2b2lkIF9faW9tZW0JCSpyZWdfZGl2aWRlcjsKK307CisKK3N0cnVjdCBjbGsgY2xrX2ZvdXRfYXBsbCA9IHsKKwkubmFtZQkJPSAiZm91dF9hcGxsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19hcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9hcGxsLAorCVsxXSA9ICZjbGtfZm91dF9hcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2FwbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX2FwbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19hcGxsX2xpc3QpLAorfTsKKworc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfYXBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dF9hcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX0FQTExfTU9VVF9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19BUExMX01PVVQsCisJLnNvdXJjZXMJPSAmY2xrX3NyY19hcGxsLAorfTsKKworc3RydWN0IGNsayBjbGtfZm91dF9lcGxsID0geworCS5uYW1lCQk9ICJmb3V0X2VwbGwiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX2VwbGxfbGlzdFtdID0geworCVswXSA9ICZjbGtfZmluX2VwbGwsCisJWzFdID0gJmNsa19mb3V0X2VwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfZXBsbCA9IHsKKwkuc291cmNlcwk9IGNsa19zcmNfZXBsbF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2VwbGxfbGlzdCksCit9OworCitzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9lcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2VwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfRVBMTF9NT1VUX1NISUZULAorCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0VQTExfTU9VVCwKKwkuc291cmNlcwk9ICZjbGtfc3JjX2VwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19tcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9tcGxsLAorCVsxXSA9ICZjbGtfZm91dF9tcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX21wbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX21wbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19tcGxsX2xpc3QpLAorfTsKKworc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfbXBsbCA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAibW91dF9tcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX01QTExfTU9VVF9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19NUExMX01PVVQsCisJLnNvdXJjZXMJPSAmY2xrX3NyY19tcGxsLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9jbGtfZG91dG1wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBhcmVudCBpcyAlbGRcbiIsIF9fZnVuY19fLCByYXRlKTsKKworCWlmIChfX3Jhd19yZWFkbChTM0NfQ0xLX0RJVjApICYgUzNDNjQwMF9DTEtESVYwX01QTExfTUFTSykKKwkJcmF0ZSAvPSAyOworCisJcmV0dXJuIHJhdGU7Cit9CisKK3N0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbCA9IHsKKwkubmFtZQkJPSAiZG91dF9tcGxsIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCisJLmdldF9yYXRlCT0gczNjNjR4eF9jbGtfZG91dG1wbGxfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3NwaV9tbWNfbGlzdFtdID0geworCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwkmY2xrX2Zpbl9lcGxsLAorCSZjbGtfMjdtLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfc3BpX21tYyA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9zcGlfbW1jX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9zcGlfbW1jX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9pcmRhX2xpc3RbXSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJTlVMTCwKKwkmY2xrXzI3bSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2lyZGEgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfaXJkYV9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfaXJkYV9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfdWFydF9saXN0W10gPSB7CisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZG91dF9tcGxsLAorCU5VTEwsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfdWFydCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF91YXJ0X2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF91YXJ0X2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF91aG9zdF9saXN0W10gPSB7CisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZG91dF9tcGxsLAorCSZjbGtfZmluX2VwbGwsCisJJmNsa180OG0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa3NldF91aG9zdCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF91aG9zdF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfdWhvc3RfbGlzdCksCit9OworCisKKy8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrcyBhcmUgYWxsIGNvbnRyb2xsZWQgdmlhIGNsb2Nrc291cmNlIGZvbGxvd2VkCisgKiBieSBhbiBvcHRpb25hbCBkaXZpZGVyIGFuZCBnYXRlIHN0YWdlLiBXZSBjdXJyZW50bHkgcm9sbCB0aGlzIGludG8KKyAqIG9uZSBjbG9jayB3aGljaCBoaWRlcyB0aGUgaW50ZXJtZWRpYXRlIGNsb2NrIGZyb20gdGhlIG11eC4KKyAqCisgKiBOb3RlLCB0aGUgSlBFRyBjbG9jayBjYW4gb25seSBiZSBhbiBldmVuIGRpdmlkZXIuLi4KKyAqCisgKiBUaGUgc2NhbGVyIGFuZCBMQ0QgY2xvY2tzIGRlcGVuZCBvbiB0aGUgUzNDNjRYWCB2ZXJzaW9uLCBhbmQgYWxzbworICogaGF2ZSBhIGNvbW1vbiBwYXJlbnQgZGl2aXNvciBzbyBhcmUgbm90IGluY2x1ZGVkIGhlcmUuCisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrc3JjX2NsayAqdG9fY2xrc3JjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNsaywgc3RydWN0IGNsa3NyY19jbGssIGNsayk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1MzIgY2xrZGl2ID0gX19yYXdfcmVhZGwoc2Nsay0+cmVnX2RpdmlkZXIpOworCisJY2xrZGl2ID4+PSBzY2xrLT5kaXZpZGVyX3NoaWZ0OworCWNsa2RpdiAmPSAweGY7CisJY2xrZGl2Kys7CisKKwlyYXRlIC89IGNsa2RpdjsKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIGludCBzM2M2NHh4X3NldHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBzY2xrLT5yZWdfZGl2aWRlcjsKKwl1bnNpZ25lZCBpbnQgZGl2OworCXUzMiB2YWw7CisKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJdmFsICY9IH5zY2xrLT5tYXNrOworCXZhbCB8PSAocmF0ZSAtIDEpIDw8IHNjbGstPnNoaWZ0OworCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKKwlzdHJ1Y3QgY2xrX3NvdXJjZXMgKnNyY3MgPSBzY2xrLT5zb3VyY2VzOworCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX1NSQyk7CisJaW50IHNyY19uciA9IC0xOworCWludCBwdHI7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IHNyY3MtPm5yX3NvdXJjZXM7IHB0cisrKQorCQlpZiAoc3Jjcy0+c291cmNlc1twdHJdID09IHBhcmVudCkgeworCQkJc3JjX25yID0gcHRyOworCQkJYnJlYWs7CisJCX0KKworCWlmIChzcmNfbnIgPj0gMCkgeworCQljbGtzcmMgJj0gfnNjbGstPm1hc2s7CisJCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7CisKKwkJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDX0NMS19TUkMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWludCBkaXY7CisKKwlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQorCQlyYXRlID0gcGFyZW50X3JhdGU7CisJZWxzZSB7CisJCWRpdiA9IHJhdGUgLyBwYXJlbnRfcmF0ZTsKKworCQlpZiAoZGl2ID09IDApCisJCQlkaXYgPSAxOworCQlpZiAoZGl2ID4gMTYpCisJCQlkaXYgPSAxNjsKKworCQlyYXRlID0gcGFyZW50X3JhdGUgLyBkaXY7CisJfQorCisJcmV0dXJuIHJhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW1jMCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCS5pZAkJPSAwLAorCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCisJCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCisJCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX01NQzBfU0hJRlQsCisJLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfTU1DMF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF9zcGlfbW1jLAorCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYxX01NQzBfU0hJRlQsCisJLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYxLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tbWMxID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtbWNfYnVzIiwKKwkJLmlkCQk9IDEsCisJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19NTUMxLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAorCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAorCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKKwkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCisJfSwKKwkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfTU1DMV9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19NTUMxX01BU0ssCisJLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCisJLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjFfTU1DMV9TSElGVCwKKwkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjEsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21tYzIgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1tY19idXMiLAorCQkuaWQJCT0gMiwKKwkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX01NQzIsCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAorCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAorCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19NTUMyX1NISUZULAorCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX01NQzJfTUFTSywKKwkuc291cmNlcwk9ICZjbGtzZXRfc3BpX21tYywKKwkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMV9NTUMyX1NISUZULAorCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfdXNiaG9zdCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidXNiLWhvc3QtYnVzIiwKKwkJLmlkCQk9IC0xLAorCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUhPU1QsCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAorCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAorCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAorCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAorCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19VSE9TVF9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19VSE9TVF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF91aG9zdCwKKwkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9TSElGVCwKKwkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjEsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3VhcnRfdWNsazEgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInVjbGsxIiwKKwkJLmlkCQk9IC0xLAorCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUFSVCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCisJCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCisJCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX1VBUlRfU0hJRlQsCisJLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfVUFSVF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF91YXJ0LAorCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX1VBUlRfU0hJRlQsCisJLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYyLAorfTsKKworLyogV2hlcmUgZG9lcyBVQ0xLMCBjb21lIGZyb20/ICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfc3BpMCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAic3BpLWJ1cyIsCisJCS5pZAkJPSAwLAorCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfU1BJMCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCisJCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCisJCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX1NQSTBfU0hJRlQsCisJLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfU1BJMF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF9zcGlfbW1jLAorCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX1NQSTBfU0hJRlQsCisJLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19zcGkxID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJzcGktYnVzIiwKKwkJLmlkCQk9IDEsCisJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19TUEkxLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKKwkJLmdldF9yYXRlCT0gczNjNjR4eF9nZXRyYXRlX2Nsa3NyYywKKwkJLnNldF9yYXRlCT0gczNjNjR4eF9zZXRyYXRlX2Nsa3NyYywKKwkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCisJfSwKKwkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfU1BJMV9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19TUEkxX01BU0ssCisJLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCisJLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjJfU1BJMV9TSElGVCwKKwkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaWlzX2NkMCA9IHsKKwkubmFtZQkJPSAiaWlzX2NkY2xrMCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2lpc19jZDEgPSB7CisJLm5hbWUJCT0gImlpc19jZGNsazEiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wY21fY2QgPSB7CisJLm5hbWUJCT0gInBjbV9jZGNsayIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9hdWRpbzBfbGlzdFtdID0geworCVswXSA9ICZjbGtfbW91dF9lcGxsLmNsaywKKwlbMV0gPSAmY2xrX2RvdXRfbXBsbCwKKwlbMl0gPSAmY2xrX2Zpbl9lcGxsLAorCVszXSA9ICZjbGtfaWlzX2NkMCwKKwlbNF0gPSAmY2xrX3BjbV9jZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9hdWRpbzBfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXVkaW8wID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJhdWRpby1idXMiLAorCQkuaWQJCT0gMCwKKwkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX0FVRElPMCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCisJCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCisJCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCisJCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAorCX0sCisJLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX0FVRElPMF9TSElGVCwKKwkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19BVURJTzBfTUFTSywKKwkuc291cmNlcwk9ICZjbGtzZXRfYXVkaW8wLAorCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX0FVRElPMF9TSElGVCwKKwkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2F1ZGlvMV9saXN0W10gPSB7CisJWzBdID0gJmNsa19tb3V0X2VwbGwuY2xrLAorCVsxXSA9ICZjbGtfZG91dF9tcGxsLAorCVsyXSA9ICZjbGtfZmluX2VwbGwsCisJWzNdID0gJmNsa19paXNfY2QxLAorCVs0XSA9ICZjbGtfcGNtX2NkLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfYXVkaW8xID0geworCS5zb3VyY2VzCT0gY2xrc2V0X2F1ZGlvMV9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfYXVkaW8xX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hdWRpbzEgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImF1ZGlvLWJ1cyIsCisJCS5pZAkJPSAxLAorCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfQVVESU8xLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKKwkJLmdldF9yYXRlCT0gczNjNjR4eF9nZXRyYXRlX2Nsa3NyYywKKwkJLnNldF9yYXRlCT0gczNjNjR4eF9zZXRyYXRlX2Nsa3NyYywKKwkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCisJfSwKKwkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfQVVESU8xX1NISUZULAorCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0FVRElPMV9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzEsCisJLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjJfQVVESU8xX1NISUZULAorCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaXJkYSA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiaXJkYS1idXMiLAorCQkuaWQJCT0gMCwKKwkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX0lSREEsCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAorCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAorCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAorCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAorCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19JUkRBX1NISUZULAorCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0lSREFfTUFTSywKKwkuc291cmNlcwk9ICZjbGtzZXRfaXJkYSwKKwkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMl9JUkRBX1NISUZULAorCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMiwKK307CisKKy8qIENsb2NrIGluaXRpYWxpc2F0aW9uIGNvZGUgKi8KKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrICppbml0X3BhcmVudHNbXSA9IHsKKwkmY2xrX21vdXRfYXBsbCwKKwkmY2xrX21vdXRfZXBsbCwKKwkmY2xrX21vdXRfbXBsbCwKKwkmY2xrX21tYzAsCisJJmNsa19tbWMxLAorCSZjbGtfbW1jMiwKKwkmY2xrX3VzYmhvc3QsCisJJmNsa191YXJ0X3VjbGsxLAorCSZjbGtfc3BpMCwKKwkmY2xrX3NwaTEsCisJJmNsa19hdWRpbzAsCisJJmNsa19hdWRpbzEsCisJJmNsa19pcmRhLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjNjQwMF9zZXRfY2xrc3JjKHN0cnVjdCBjbGtzcmNfY2xrICpjbGspCit7CisJc3RydWN0IGNsa19zb3VyY2VzICpzcmNzID0gY2xrLT5zb3VyY2VzOworCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX1NSQyk7CisKKwljbGtzcmMgJj0gY2xrLT5tYXNrOworCWNsa3NyYyA+Pj0gY2xrLT5zaGlmdDsKKworCWlmIChjbGtzcmMgPiBzcmNzLT5ucl9zb3VyY2VzIHx8ICFzcmNzLT5zb3VyY2VzW2Nsa3NyY10pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIHNvdXJjZSAlZFxuIiwKKwkJICAgICAgIGNsay0+Y2xrLm5hbWUsIGNsa3NyYyk7CisJCXJldHVybjsKKwl9CisKKwljbGstPmNsay5wYXJlbnQgPSBzcmNzLT5zb3VyY2VzW2Nsa3NyY107CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogc291cmNlIGlzICVzICglZCksIHJhdGUgaXMgJWxkXG4iLAorCSAgICAgICBjbGstPmNsay5uYW1lLCBjbGstPmNsay5wYXJlbnQtPm5hbWUsIGNsa3NyYywKKwkgICAgICAgY2xrX2dldF9yYXRlKCZjbGstPmNsaykpOworfQorCisjZGVmaW5lIEdFVF9ESVYoY2xrLCBmaWVsZCkgKCgoKGNsaykgJiBmaWVsZCMjX01BU0spID4+IGZpZWxkIyNfU0hJRlQpICsgMSkKKwordm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2M2NDAwX3NldHVwX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKKwl1bnNpZ25lZCBsb25nIGZjbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrOworCXVuc2lnbmVkIGxvbmcgaGNsazI7CisJdW5zaWduZWQgbG9uZyBwY2xrOworCXVuc2lnbmVkIGxvbmcgZXBsbDsKKwl1bnNpZ25lZCBsb25nIGFwbGw7CisJdW5zaWduZWQgbG9uZyBtcGxsOworCXVuc2lnbmVkIGludCBwdHI7CisJdTMyIGNsa2RpdjA7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlZ2lzdGVyaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCisJY2xrZGl2MCA9IF9fcmF3X3JlYWRsKFMzQ19DTEtfRElWMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjbGtkaXYwID0gJTA4eFxuIiwgX19mdW5jX18sIGNsa2RpdjApOworCisJeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7CisJQlVHX09OKElTX0VSUih4dGFsX2NsaykpOworCisJeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7CisJY2xrX3B1dCh4dGFsX2Nsayk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7CisKKwllcGxsID0gczNjNjQwMF9nZXRfZXBsbCh4dGFsKTsKKwltcGxsID0gczNjNjQwMF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFMzQ19NUExMX0NPTikpOworCWFwbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX0FQTExfQ09OKSk7CisKKwlmY2xrID0gbXBsbDsKKworCXByaW50ayhLRVJOX0lORk8gIlMzQzY0WFg6IFBMTCBzZXR0aW5ncywgQT0lbGQsIE09JWxkLCBFPSVsZFxuIiwKKwkgICAgICAgYXBsbCwgbXBsbCwgZXBsbCk7CisKKwloY2xrMiA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjAsIFMzQzY0MDBfQ0xLRElWMF9IQ0xLMik7CisJaGNsayA9IGhjbGsyIC8gR0VUX0RJVihjbGtkaXYwLCBTM0M2NDAwX0NMS0RJVjBfSENMSyk7CisJcGNsayA9IGhjbGsyIC8gR0VUX0RJVihjbGtkaXYwLCBTM0M2NDAwX0NMS0RJVjBfUENMSyk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTM0M2NFhYOiBIQ0xLMj0lbGQsIEhDTEs9JWxkLCBQQ0xLPSVsZFxuIiwKKwkgICAgICAgaGNsazIsIGhjbGssIHBjbGspOworCisJY2xrX2ZvdXRfbXBsbC5yYXRlID0gbXBsbDsKKwljbGtfZm91dF9lcGxsLnJhdGUgPSBlcGxsOworCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CisKKwljbGtfaC5yYXRlID0gaGNsazsKKwljbGtfcC5yYXRlID0gcGNsazsKKwljbGtfZi5yYXRlID0gZmNsazsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X3BhcmVudHMpOyBwdHIrKykKKwkJczNjNjQwMF9zZXRfY2xrc3JjKGluaXRfcGFyZW50c1twdHJdKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0geworCSZjbGtfZXh0X3h0YWxfbXV4LAorCSZjbGtfaWlzX2NkMCwKKwkmY2xrX2lpc19jZDEsCisJJmNsa19wY21fY2QsCisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZm91dF9lcGxsLAorCSZjbGtfbW91dF9tcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwkmY2xrX21tYzAuY2xrLAorCSZjbGtfbW1jMS5jbGssCisJJmNsa19tbWMyLmNsaywKKwkmY2xrX3VzYmhvc3QuY2xrLAorCSZjbGtfdWFydF91Y2xrMS5jbGssCisJJmNsa19zcGkwLmNsaywKKwkmY2xrX3NwaTEuY2xrLAorCSZjbGtfYXVkaW8wLmNsaywKKwkmY2xrX2F1ZGlvMS5jbGssCisJJmNsa19pcmRhLmNsaywKK307CisKK3ZvaWQgX19pbml0IHMzYzY0MDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKwlpbnQgcmV0OworCWludCBwdHI7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrcyk7IHB0cisrKSB7CisJCWNsa3AgPSBjbGtzW3B0cl07CisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKwl9CisKKwljbGtfbXBsbC5wYXJlbnQgPSAmY2xrX21vdXRfbXBsbC5jbGs7CisJY2xrX2VwbGwucGFyZW50ID0gJmNsa19tb3V0X2VwbGwuY2xrOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtaW5pdC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjhmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1pbml0LmMKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtaW5pdC5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjQwMCAtIENQVSBpbml0aWFsaXNhdGlvbiAoY29tbW9uIHdpdGggb3RoZXIgUzNDNjRYWCBjaGlwcykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NDAwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+CisKKy8qIHVhcnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KKwordm9pZCBfX2luaXQgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzY0MDAtdWFydCIsIHMzYzY0eHhfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtZmItMjRicHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTI4ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKQEAgLTAsMCArMSwzNyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEJhc2UgUzNDNjRYWCBzZXR1cCBpbmZvcm1hdGlvbiBmb3IgMjRicHAgTENEIGZyYW1lYnVmZmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCitleHRlcm4gdm9pZCBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKworCWZvciAoZ3BpbyA9IFMzQzY0WFhfR1BJKDApOyBncGlvIDw9IFMzQzY0WFhfR1BJKDE1KTsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJfQorCisJZm9yIChncGlvID0gUzNDNjRYWF9HUEooMCk7IGdwaW8gPD0gUzNDNjRYWF9HUEooMTEpOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtaTJjMC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ0ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYwpAQCAtMCwwICsxLDMxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtaTJjMC5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBCYXNlIFMzQzY0WFggSTJDIGJ1cyAwIGdwaW8gY29uZmlndXJhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsgLyogZG9uJ3QgbmVlZCB0aGUgY29udGVudHMgKi8KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstYi5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKwordm9pZCBzM2NfaTJjMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BCKDUpLCBTM0M2NFhYX0dQQjVfSTJDX1NDTDApOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQig2KSwgUzNDNjRYWF9HUEI2X0kyQ19TREEwKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BCKDUpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BCKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtaTJjMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTIyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtaTJjMS5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEJhc2UgUzNDNjRYWCBJMkMgYnVzIDEgZ3BpbyBjb25maWd1cmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLworCisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1iLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHMzY19pMmMxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEIoMiksIFMzQzY0WFhfR1BCMl9JMkNfU0NMMSk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BCKDMpLCBTM0M2NFhYX0dQQjNfSTJDX1NEQTEpOworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoMiksIFMzQ19HUElPX1BVTExfVVApOworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoMyksIFMzQ19HUElPX1BVTExfVVApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggNDNhYTIwMi4uZmQyM2MwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogVGh1IFNlcCAyNSAxMDoxMDo1MCAyMDA4CisjIExhc3QgdXBkYXRlOiBTdW4gTm92IDMwIDE2OjM5OjM2IDIwMDgKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTM4MCw3ICsxMzgwLDcgQEAKIG9saXA4CQkJTUFDSF9PTElQOAkJT0xJUDgJCQkxMzc4CiBnaGkyNzBoZwkJTUFDSF9HSEkyNzBIRwkJR0hJMjcwSEcJCTEzNzkKIGRhdmluY2lfZG02NDY3X2V2bQlNQUNIX0RBVklOQ0lfRE02NDY3X0VWTQlEQVZJTkNJX0RNNjQ2N19FVk0JMTM4MAotZGF2aW5jaV9kbTM1NV9ldm0JTUFDSF9EQVZJTkNJX0RNMzUwX0VWTQlEQVZJTkNJX0RNMzUwX0VWTQkxMzgxCitkYXZpbmNpX2RtMzU1X2V2bQlNQUNIX0RBVklOQ0lfRE0zNTVfRVZNCURBVklOQ0lfRE0zNTVfRVZNCTEzODEKIGJsYWNrcml2ZXIJCU1BQ0hfQkxBQ0tSSVZFUgkJQkxBQ0tSSVZFUgkJMTM4Mwogc2FuZGdhdGVfd3AJCU1BQ0hfU0FOREdBVEVXUAkJU0FOREdBVEVXUAkJMTM4NAogY2RvdGJ3c2cJCU1BQ0hfQ0RPVEJXU0cJCUNET1RCV1NHCQkxMzg1CkBAIC0xNzcxLDcgKzE3NzEsNyBAQAogYXQ1NzJkOTQwZGViCQlNQUNIX0FUNTcyRDk0MERFQglBVDU3MkQ5NDBERUIJCTE3ODAKIGRhdmluY2lfZGE4eHhfZXZtCU1BQ0hfREFWSU5DSV9EQThYWF9FVk0JREFWSU5DSV9EQThYWF9FVk0JMTc4MQogZXA5MzAyCQkJTUFDSF9FUDkzMDIJCUVQOTMwMgkJCTE3ODIKLWF0NTcyZDk0MGhmZWIJCU1BQ0hfQVQ1NzJEOTQwSEZFQglBVDU3MkQ5NDBIRkVCCQkxNzgzCithdDU3MmQ5NDBoZmVrCQlNQUNIX0FUNTcyRDk0MEhGRUIJQVQ1NzJEOTQwSEZFQgkJMTc4MwogY3lib29rMwkJCU1BQ0hfQ1lCT09LMwkJQ1lCT09LMwkJCTE3ODQKIHdkZzAwMgkJCU1BQ0hfV0RHMDAyCQlXREcwMDIJCQkxNzg1CiBzZzU2MGFkc2wJCU1BQ0hfU0c1NjBBRFNMCQlTRzU2MEFEU0wJCTE3ODYKQEAgLTE4OTksMyArMTg5OSw5OCBAQAogYXN1c3A1MzUJCU1BQ0hfQVNVU1A1MzUJCUFTVVNQNTM1CQkxOTA5CiBodGNyYXBoYWVsCQlNQUNIX0hUQ1JBUEhBRUwJCUhUQ1JBUEhBRUwJCTE5MTAKIHN5Z2RnMQkJCU1BQ0hfU1lHREcxCQlTWUdERzEJCQkxOTExCitzeWdkZzIJCQlNQUNIX1NZR0RHMgkJU1lHREcyCQkJMTkxMgorc2VvdWwJCQlNQUNIX1NFT1VMCQlTRU9VTAkJCTE5MTMKK3NhbGVybm8JCQlNQUNIX1NBTEVSTk8JCVNBTEVSTk8JCQkxOTE0Cit1Y25fczNjNjR4eAkJTUFDSF9VQ05fUzNDNjRYWAlVQ05fUzNDNjRYWAkJMTkxNQorbXNtNzIwMWEJCU1BQ0hfTVNNNzIwMUEJCU1TTTcyMDFBCQkxOTE2CitscHIxCQkJTUFDSF9MUFIxCQlMUFIxCQkJMTkxNworYXJtYWRpbGxvNTAwZngJCU1BQ0hfQVJNQURJTExPNTAwRlgJQVJNQURJTExPNTAwRlgJCTE5MTgKK2czZXZtCQkJTUFDSF9HM0VWTQkJRzNFVk0JCQkxOTE5Cit6M19kbTM1NQkJTUFDSF9aM19ETTM1NQkJWjNfRE0zNTUJCTE5MjAKK3c5MHA5MTBldmIJCU1BQ0hfVzkwUDkxMEVWQgkJVzkwUDkxMEVWQgkJMTkyMQordzkwcDkyMGV2YgkJTUFDSF9XOTBQOTIwRVZCCQlXOTBQOTIwRVZCCQkxOTIyCit3OTBwOTUwZXZiCQlNQUNIX1c5MFA5NTBFVkIJCVc5MFA5NTBFVkIJCTE5MjMKK3c5MG45NjBldmIJCU1BQ0hfVzkwTjk2MEVWQgkJVzkwTjk2MEVWQgkJMTkyNAorY2FtaGQJCQlNQUNIX0NBTUhECQlDQU1IRAkJCTE5MjUKK212YzEwMAkJCU1BQ0hfTVZDMTAwCQlNVkMxMDAJCQkxOTI2CitlbGVjdHJ1bV8yMDAJCU1BQ0hfRUxFQ1RSVU1fMjAwCUVMRUNUUlVNXzIwMAkJMTkyNworaHRjamFkZQkJCU1BQ0hfSFRDSkFERQkJSFRDSkFERQkJCTE5MjgKK21lbXBoaXMJCQlNQUNIX01FTVBISVMJCU1FTVBISVMJCQkxOTI5CitpbXgyN3NiYwkJTUFDSF9JTVgyN1NCQwkJSU1YMjdTQkMJCTE5MzAKK2xleHRhcgkJCU1BQ0hfTEVYVEFSCQlMRVhUQVIJCQkxOTMxCittdjg4ZjYyODFndHdfZ2UJCU1BQ0hfTVY4OEY2MjgxR1RXX0dFCU1WODhGNjI4MUdUV19HRQkJMTkzMgorbmNwCQkJTUFDSF9OQ1AJCU5DUAkJCTE5MzMKK3ozMmFuX3NlcmllcwkJTUFDSF9aMzJBTgkJWjMyQU4JCQkxOTM0Cit0bXFfY2FwZAkJTUFDSF9UTVFfQ0FQRAkJVE1RX0NBUEQJCTE5MzUKK29tYXAzX3dsCQlNQUNIX09NQVAzX1dMCQlPTUFQM19XTAkJMTkzNgorY2h1bWJ5CQkJTUFDSF9DSFVNQlkJCUNIVU1CWQkJCTE5MzcKK2F0c2FybTkJCQlNQUNIX0FUU0FSTTkJCUFUU0FSTTkJCQkxOTM4CitkYXZpbmNpX2RtMzY1X2V2bQlNQUNIX0RBVklOQ0lfRE0zNjVfRVZNCURBVklOQ0lfRE0zNjVfRVZNCTE5MzkKK2JhaGFtYXMJCQlNQUNIX0JBSEFNQVMJCUJBSEFNQVMJCQkxOTQwCitkYXMJCQlNQUNIX0RBUwkJREFTCQkJMTk0MQorbWluaWRhcwkJCU1BQ0hfTUlOSURBUwkJTUlOSURBUwkJCTE5NDIKK3ZrMTAwMAkJCU1BQ0hfVksxMDAwCQlWSzEwMDAJCQkxOTQzCitjZW50cm8JCQlNQUNIX0NFTlRSTwkJQ0VOVFJPCQkJMTk0NAorY3RlcmFfMmJheQkJTUFDSF9DVEVSQV8yQkFZCQlDVEVSQV8yQkFZCQkxOTQ1CitlZGdlY29ubmVjdAkJTUFDSF9FREdFQ09OTkVDVAlFREdFQ09OTkVDVAkJMTk0NgorbmQyNzAwMAkJCU1BQ0hfTkQyNzAwMAkJTkQyNzAwMAkJCTE5NDcKK2NvYnJhCQkJTUFDSF9HRU1BTFRPX0NPQlJBCUdFTUFMVE9fQ09CUkEJCTE5NDgKK2luZ2VsYWJzX2NvbWV0CQlNQUNIX0lOR0VMQUJTX0NPTUVUCUlOR0VMQUJTX0NPTUVUCQkxOTQ5Citwb2xsdXhfd2l6CQlNQUNIX1BPTExVWF9XSVoJCVBPTExVWF9XSVoJCTE5NTAKK2JsYWNrc3RvbmUJCU1BQ0hfQkxBQ0tTVE9ORQkJQkxBQ0tTVE9ORQkJMTk1MQordG9wYXoJCQlNQUNIX1RPUEFaCQlUT1BBWgkJCTE5NTIKK2FpeGxlCQkJTUFDSF9BSVhMRQkJQUlYTEUJCQkxOTUzCittdzk5OAkJCU1BQ0hfTVc5OTgJCU1XOTk4CQkJMTk1NAorbm9raWFfcng1MQkJTUFDSF9OT0tJQV9SWDUxCQlOT0tJQV9SWDUxCQkxOTU1Cit2c2M1NjA1ZXYJCU1BQ0hfVlNDNTYwNUVWCQlWU0M1NjA1RVYJCTE5NTYKK250OTg3MDBkawkJTUFDSF9OVDk4NzAwREsJCU5UOTg3MDBESwkJMTk1NworaWNvbnRhY3QJCU1BQ0hfSUNPTlRBQ1QJCUlDT05UQUNUCQkxOTU4Citzd2FyY29fZnJjcHUJCU1BQ0hfU1dBUkNPX0ZSQ1BVCVNXQVJDT19GUkNQVQkJMTk1OQorc3dhcmNvX3NjcHUJCU1BQ0hfU1dBUkNPX1NDUFUJU1dBUkNPX1NDUFUJCTE5NjAKK2Jib3hfcDE2CQlNQUNIX0JCT1hfUDE2CQlCQk9YX1AxNgkJMTk2MQorYnN0ZAkJCU1BQ0hfQlNURAkJQlNURAkJCTE5NjIKK3NiYzI0NDBpaQkJTUFDSF9TQkMyNDQwSUkJCVNCQzI0NDBJSQkJMTk2MworcGNtMDM0CQkJTUFDSF9QQ00wMzQJCVBDTTAzNAkJCTE5NjQKK25lc28JCQlNQUNIX05FU08JCU5FU08JCQkxOTY1Cit3bG54XzlnMjAJCU1BQ0hfV0xOWF85RzIwCQlXTE5YXzlHMjAJCTE5NjYKK29tYXBfem9vbTIJCU1BQ0hfT01BUF9aT09NMgkJT01BUF9aT09NMgkJMTk2NwordG90ZW1ub3ZhCQlNQUNIX1RPVEVNTk9WQQkJVE9URU1OT1ZBCQkxOTY4CitjNTAwMAkJCU1BQ0hfQzUwMDAJCUM1MDAwCQkJMTk2OQordW5pcG9fYXQ5MXNhbTkyNjMJTUFDSF9VTklQT19BVDkxU0FNOTI2MwlVTklQT19BVDkxU0FNOTI2MwkxOTcwCitldGhlcm51dDUJCU1BQ0hfRVRIRVJOVVQ1CQlFVEhFUk5VVDUJCTE5NzEKK2FybTExCQkJTUFDSF9BUk0xMQkJQVJNMTEJCQkxOTcyCitjcHVhdDkyNjAJCU1BQ0hfQ1BVQVQ5MjYwCQlDUFVBVDkyNjAJCTE5NzMKK2NwdXB4YTI1NQkJTUFDSF9DUFVQWEEyNTUJCUNQVVBYQTI1NQkJMTk3NAorY3B1aW14MjcJCU1BQ0hfQ1BVSU1YMjcJCUNQVUlNWDI3CQkxOTc1CitjaGVmbHV4CQkJTUFDSF9DSEVGTFVYCQlDSEVGTFVYCQkJMTk3NgorZWJfY3B1eDlrMgkJTUFDSF9FQl9DUFVYOUsyCQlFQl9DUFVYOUsyCQkxOTc3CitvcGNvdGVjCQkJTUFDSF9PUENPVEVDCQlPUENPVEVDCQkJMTk3OAoreXQJCQlNQUNIX1lUCQkJWVQJCQkxOTc5Cittb3RvcQkJCU1BQ0hfTU9UT1EJCU1PVE9RCQkJMTk4MAorYnNiMQkJCU1BQ0hfQlNCMQkJQlNCMQkJCTE5ODEKK2FjczVrCQkJTUFDSF9BQ1M1SwkJQUNTNUsJCQkxOTgyCittaWxhbgkJCU1BQ0hfTUlMQU4JCU1JTEFOCQkJMTk4MworcXVhcnR6djIJCU1BQ0hfUVVBUlRaVjIJCVFVQVJUWlYyCQkxOTg0Cityc3ZwCQkJTUFDSF9SU1ZQCQlSU1ZQCQkJMTk4NQorcm1wMjAwCQkJTUFDSF9STVAyMDAJCVJNUDIwMAkJCTE5ODYKK3NuYXBwZXJfOTI2MAkJTUFDSF9TTkFQUEVSXzkyNjAJU05BUFBFUl85MjYwCQkxOTg3Citkc20zMjAJCQlNQUNIX0RTTTMyMAkJRFNNMzIwCQkJMTk4OAorYWRzZ2NtCQkJTUFDSF9BRFNHQ00JCUFEU0dDTQkJCTE5ODkKK2FzZTJfNDAwCQlNQUNIX0FTRTJfNDAwCQlBU0UyXzQwMAkJMTk5MAorcGl6emEJCQlNQUNIX1BJWlpBCQlQSVpaQQkJCTE5OTEKK3Nwb3RfbmdwbAkJTUFDSF9TUE9UX05HUEwJCVNQT1RfTkdQTAkJMTk5MgorYXJtYXRhCQkJTUFDSF9BUk1BVEEJCUFSTUFUQQkJCTE5OTMKK2V4ZWRhCQkJTUFDSF9FWEVEQQkJRVhFREEJCQkxOTk0CitteDMxc2YwMDUJCU1BQ0hfTVgzMVNGMDA1CQlNWDMxU0YwMDUJCTE5OTUKK2Y1ZDgyMzFfNF92MgkJTUFDSF9GNUQ4MjMxXzRfVjIJRjVEODIzMV80X1YyCQkxOTk2CitxMjQ0MAkJCU1BQ0hfUTI0NDAJCVEyNDQwCQkJMTk5NworcXEyNDQwCQkJTUFDSF9RUTI0NDAJCVFRMjQ0MAkJCTE5OTgKK21pbmkyNDQwCQlNQUNIX01JTkkyNDQwCQlNSU5JMjQ0MAkJMTk5OQorY29saWJyaTMwMAkJTUFDSF9DT0xJQlJJMzAwCQlDT0xJQlJJMzAwCQkyMDAwCitqYWRlcwkJCU1BQ0hfSkFERVMJCUpBREVTCQkJMjAwMQorc3BhcmsJCQlNQUNIX1NQQVJLCQlTUEFSSwkJCTIwMDIKK2JlbnppbmEJCQlNQUNIX0JFTlpJTkEJCUJFTlpJTkEJCQkyMDAzCitibGF6ZQkJCU1BQ0hfQkxBWkUJCUJMQVpFCQkJMjAwNAorbGlua3N0YXRpb25fbHNfaGdsCU1BQ0hfTElOS1NUQVRJT05fTFNfSEdMCUxJTktTVEFUSU9OX0xTX0hHTAkyMDA1CitodGN2ZW51cwkJTUFDSF9IVENWRU5VUwkJSFRDVkVOVVMJCTIwMDYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnAuaCBiL2FyY2gvYXJtL3ZmcC92ZnAuaAppbmRleCBjODU4NjBiLi44ZGU4NmU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwLmgKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCkBAIC0zNzcsNiArMzc3LDYgQEAKIAl1MzIgZmxhZ3M7CiB9OwogCi0jaWZkZWYgQ09ORklHX1NNUAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUE0pCiBleHRlcm4gdm9pZCB2ZnBfc2F2ZV9zdGF0ZSh2b2lkICpsb2NhdGlvbiwgdTMyIGZwZXhjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCBhNjJkY2Y3Li5jOTJhMDhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMTAxLDkgKzEwMSwxMiBAQAogCVZGUEZTVE1JQSByNCwgcjUJCUAgc2F2ZSB0aGUgd29ya2luZyByZWdpc3RlcnMKIAlWRlBGTVJYCXI1LCBGUFNDUgkJQCBjdXJyZW50IHN0YXR1cwogCXRzdAlyMSwgI0ZQRVhDX0VYCQlAIGlzIHRoZXJlIGFkZGl0aW9uYWwgc3RhdGUgdG8gc2F2ZT8KLQlWRlBGTVJYCXI2LCBGUElOU1QsIE5FCQlAIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCi0JdHN0bmUJcjEsICNGUEVYQ19GUDJWCQlAIGlzIHRoZXJlIGFuIEZQSU5TVDIgdG8gcmVhZD8KLQlWRlBGTVJYCXI4LCBGUElOU1QyLCBORQkJQCBGUElOU1QyIGlmIG5lZWRlZCAoYW5kIHByZXNlbnQpCisJYmVxCTFmCisJVkZQRk1SWAlyNiwgRlBJTlNUCQlAIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCisJdHN0CXIxLCAjRlBFWENfRlAyVgkJQCBpcyB0aGVyZSBhbiBGUElOU1QyIHRvIHJlYWQ/CisJYmVxCTFmCisJVkZQRk1SWAlyOCwgRlBJTlNUMgkJQCBGUElOU1QyIGlmIG5lZWRlZCAoYW5kIHByZXNlbnQpCisxOgogCXN0bWlhCXI0LCB7cjEsIHI1LCByNiwgcjh9CUAgc2F2ZSBGUEVYQywgRlBTQ1IsIEZQSU5TVCwgRlBJTlNUMgogCQkJCQlAIGFuZCBwb2ludCByNCBhdCB0aGUgd29yZCBhdCB0aGUKIAkJCQkJQCBzdGFydCBvZiB0aGUgcmVnaXN0ZXIgZHVtcApAQCAtMTE3LDkgKzEyMCwxMiBAQAogCQkJCQlAIEZQRVhDIGlzIGluIGEgc2FmZSBzdGF0ZQogCWxkbWlhCXIxMCwge3IxLCByNSwgcjYsIHI4fQlAIGxvYWQgRlBFWEMsIEZQU0NSLCBGUElOU1QsIEZQSU5TVDIKIAl0c3QJcjEsICNGUEVYQ19FWAkJQCBpcyB0aGVyZSBhZGRpdGlvbmFsIHN0YXRlIHRvIHJlc3RvcmU/Ci0JVkZQRk1YUglGUElOU1QsIHI2LCBORQkJQCByZXN0b3JlIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCi0JdHN0bmUJcjEsICNGUEVYQ19GUDJWCQlAIGlzIHRoZXJlIGFuIEZQSU5TVDIgdG8gd3JpdGU/Ci0JVkZQRk1YUglGUElOU1QyLCByOCwgTkUJCUAgRlBJTlNUMiBpZiBuZWVkZWQgKGFuZCBwcmVzZW50KQorCWJlcQkxZgorCVZGUEZNWFIJRlBJTlNULCByNgkJQCByZXN0b3JlIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCisJdHN0CXIxLCAjRlBFWENfRlAyVgkJQCBpcyB0aGVyZSBhbiBGUElOU1QyIHRvIHdyaXRlPworCWJlcQkxZgorCVZGUEZNWFIJRlBJTlNUMiwgcjgJCUAgRlBJTlNUMiBpZiBuZWVkZWQgKGFuZCBwcmVzZW50KQorMToKIAlWRlBGTVhSCUZQU0NSLCByNQkJQCByZXN0b3JlIHN0YXR1cwogCiBjaGVja19mb3JfZXhjZXB0aW9uOgpAQCAtMTY2LDcgKzE3Miw3IEBACiAJCQkJCUAgcmV0cnkgdGhlIGZhdWx0ZWQgaW5zdHJ1Y3Rpb24KIEVORFBST0ModmZwX3N1cHBvcnRfZW50cnkpCiAKLSNpZmRlZiBDT05GSUdfU01QCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKIEVOVFJZKHZmcF9zYXZlX3N0YXRlKQogCUAgU2F2ZSB0aGUgY3VycmVudCBWRlAgc3RhdGUKIAlAIHIwIC0gc2F2ZSBsb2NhdGlvbgpAQCAtMTc1LDkgKzE4MSwxMiBAQAogCVZGUEZTVE1JQSByMCwgcjIJCUAgc2F2ZSB0aGUgd29ya2luZyByZWdpc3RlcnMKIAlWRlBGTVJYCXIyLCBGUFNDUgkJQCBjdXJyZW50IHN0YXR1cwogCXRzdAlyMSwgI0ZQRVhDX0VYCQlAIGlzIHRoZXJlIGFkZGl0aW9uYWwgc3RhdGUgdG8gc2F2ZT8KLQlWRlBGTVJYCXIzLCBGUElOU1QsIE5FCQlAIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCi0JdHN0bmUJcjEsICNGUEVYQ19GUDJWCQlAIGlzIHRoZXJlIGFuIEZQSU5TVDIgdG8gcmVhZD8KLQlWRlBGTVJYCXIxMiwgRlBJTlNUMiwgTkUJQCBGUElOU1QyIGlmIG5lZWRlZCAoYW5kIHByZXNlbnQpCisJYmVxCTFmCisJVkZQRk1SWAlyMywgRlBJTlNUCQlAIEZQSU5TVCAob25seSBpZiBGUEVYQy5FWCBpcyBzZXQpCisJdHN0CXIxLCAjRlBFWENfRlAyVgkJQCBpcyB0aGVyZSBhbiBGUElOU1QyIHRvIHJlYWQ/CisJYmVxCTFmCisJVkZQRk1SWAlyMTIsIEZQSU5TVDIJCUAgRlBJTlNUMiBpZiBuZWVkZWQgKGFuZCBwcmVzZW50KQorMToKIAlzdG1pYQlyMCwge3IxLCByMiwgcjMsIHIxMn0JQCBzYXZlIEZQRVhDLCBGUFNDUiwgRlBJTlNULCBGUElOU1QyCiAJbW92CXBjLCBscgogRU5EUFJPQyh2ZnBfc2F2ZV9zdGF0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBjMGQyYzliLi45ZjQ3NmExIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0zMjIsNiArMzIyLDYxIEBACiAJc2V0X2NvcHJvX2FjY2VzcyhhY2Nlc3MgfCBDUEFDQ19GVUxMKDEwKSB8IENQQUNDX0ZVTEwoMTEpKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCitzdGF0aWMgaW50IHZmcF9wbV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCXUzMiBmcGV4YyA9IGZtcngoRlBFWEMpOworCisJLyogaWYgdmZwIGlzIG9uLCB0aGVuIHNhdmUgc3RhdGUgZm9yIHJlc3VtcHRpb24gKi8KKwlpZiAoZnBleGMgJiBGUEVYQ19FTikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNhdmluZyB2ZnAgc3RhdGVcbiIsIF9fZnVuY19fKTsKKwkJdmZwX3NhdmVfc3RhdGUoJnRpLT52ZnBzdGF0ZSwgZnBleGMpOworCisJCS8qIGRpc2FibGUsIGp1c3QgaW4gY2FzZSAqLworCQlmbXhyKEZQRVhDLCBmbXJ4KEZQRVhDKSAmIH5GUEVYQ19FTik7CisJfQorCisJLyogY2xlYXIgYW55IGluZm9ybWF0aW9uIHdlIGhhZCBhYm91dCBsYXN0IGNvbnRleHQgc3RhdGUgKi8KKwltZW1zZXQobGFzdF9WRlBfY29udGV4dCwgMCwgc2l6ZW9mKGxhc3RfVkZQX2NvbnRleHQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZmcF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwkvKiBlbnN1cmUgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZmcCAqLworCXZmcF9lbmFibGUoTlVMTCk7CisKKwkvKiBhbmQgZGlzYWJsZSBpdCB0byBlbnN1cmUgdGhlIG5leHQgdXNhZ2UgcmVzdG9yZXMgdGhlIHN0YXRlICovCisJZm14cihGUEVYQywgZm1yeChGUEVYQykgJiB+RlBFWENfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHZmcF9wbV9zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAidmZwIiwKKwkuc3VzcGVuZAk9IHZmcF9wbV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdmZwX3BtX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSB2ZnBfcG1fc3lzZGV2ID0geworCS5jbHMJPSAmdmZwX3BtX3N5c2NsYXNzLAorfTsKKworc3RhdGljIHZvaWQgdmZwX3BtX2luaXQodm9pZCkKK3sKKwlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnZmcF9wbV9zeXNjbGFzcyk7CisJc3lzZGV2X3JlZ2lzdGVyKCZ2ZnBfcG1fc3lzZGV2KTsKK30KKworCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZmcF9wbV9pbml0KHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKIC8qCkBAIC0zNjUsMTIgKzQyMCwyMiBAQAogCQl2ZnBfdmVjdG9yID0gdmZwX3N1cHBvcnRfZW50cnk7CiAKIAkJdGhyZWFkX3JlZ2lzdGVyX25vdGlmaWVyKCZ2ZnBfbm90aWZpZXJfYmxvY2spOworCQl2ZnBfcG1faW5pdCgpOwogCiAJCS8qCiAJCSAqIFdlIGRldGVjdGVkIFZGUCwgYW5kIHRoZSBzdXBwb3J0IGNvZGUgaXMKIAkJICogaW4gcGxhY2U7IHJlcG9ydCBWRlAgc3VwcG9ydCB0byB1c2Vyc3BhY2UuCiAJCSAqLwogCQllbGZfaHdjYXAgfD0gSFdDQVBfVkZQOworI2lmZGVmIENPTkZJR19ORU9OCisJCS8qCisJCSAqIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFkdmFuY2VkIFNJTUQKKwkJICogbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMsIGludGVnZXIgYW5kIHNpbmdsZQorCQkgKiBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucy4KKwkJICovCisJCWlmICgoZm1yeChNVkZSMSkgJiAweDAwMGZmZjAwKSA9PSAweDAwMDExMTAwKQorCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX05FT047CisjZW5kaWYKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmluZGV4IGY0ZTU1YmUuLmFmYWQ5ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCkBAIC0yMDgsNiArMjA4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBFUlJfVFlQRV9LRVJORUxfUEFOSUM6CiAJZGVmYXVsdDoKKwkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIyNyw2ICsyMjgsNyBAQAogCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIG9yIGhhdmUgc3RvcHBlZCBsb2dnaW5nICovCiAJaWYgKGZhdGFsIHx8ICFsb2dnaW5nX2VuYWJsZWQpIHsKIAkJbG9nZ2luZ19lbmFibGVkID0gMDsKKwkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTI0OSwxMSArMjUxLDEzIEBACiAJCWVsc2UKIAkJCXJ0YXNfbG9nX3N0YXJ0ICs9IDE7CiAKKwkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZydGFzX2xvZ193YWl0KTsKIAkJYnJlYWs7CiAJY2FzZSBFUlJfVFlQRV9LRVJORUxfUEFOSUM6CiAJZGVmYXVsdDoKKwkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOyAvKiBAQEAgREVCVUcgQEBAICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1fdmlydGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX3ZpcnRpby5oCmluZGV4IGMxMzU2OGIuLjA1MDM5MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1fdmlydGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV92aXJ0aW8uaApAQCAtNTAsNiArNTAsMTAgQEAKICNkZWZpbmUgS1ZNX1MzOTBfVklSVElPX1JFU0VUCQkxCiAjZGVmaW5lIEtWTV9TMzkwX1ZJUlRJT19TRVRfU1RBVFVTCTIKIAorLyogVGhlIGFsaWdubWVudCB0byB1c2UgYmV0d2VlbiBjb25zdW1lciBhbmQgcHJvZHVjZXIgcGFydHMgb2YgdnJpbmcuCisgKiBUaGlzIGlzIHBhZ2VzaXplIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICovCisjZGVmaW5lIEtWTV9TMzkwX1ZJUlRJT19SSU5HX0FMSUdOCTQwOTYKKwogI2lmZGVmIF9fS0VSTkVMX18KIC8qIGVhcmx5IHZpcnRpbyBjb25zb2xlIHNldHVwICovCiAjaWZkZWYgQ09ORklHX1MzOTBfR1VFU1QKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IGVmMzYzNWIuLjA3Njc4MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJLyogbGV0cyBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byByZXBsYWNlIHRoZSBtbSAqLwogCXRhc2tfbG9jayh0c2spOwogCWlmICghdHNrLT5tbSB8fCBhdG9taWNfcmVhZCgmdHNrLT5tbS0+bW1fdXNlcnMpID4gMSB8fAotCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tIHx8IHRzay0+bW0tPmlvY3R4X2xpc3QpIHsKKwkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSB8fCAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpKSB7CiAJCXRhc2tfdW5sb2NrKHRzayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI3OSw3ICsyNzksNyBAQAogCS8qIE5vdyBsZXRzIGNoZWNrIGFnYWluIGlmIHNvbWV0aGluZyBoYXBwZW5lZCAqLwogCXRhc2tfbG9jayh0c2spOwogCWlmICghdHNrLT5tbSB8fCBhdG9taWNfcmVhZCgmdHNrLT5tbS0+bW1fdXNlcnMpID4gMSB8fAotCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tIHx8IHRzay0+bW0tPmlvY3R4X2xpc3QpIHsKKwkgICAgdHNrLT5tbSAhPSB0c2stPmFjdGl2ZV9tbSB8fCAhaGxpc3RfZW1wdHkoJnRzay0+bW0tPmlvY3R4X2xpc3QpKSB7CiAJCW1tcHV0KG1tKTsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggZTU5NDU1OS4uMGE5NGQ5YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNCwyMSArNCwxMTYgQEAKIAogbWFpbm1lbnUgIkxpbnV4L1NQQVJDIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCitjb25maWcgU1BBUkMKKwlib29sCisJZGVmYXVsdCB5CisJc2VsZWN0IEhBVkVfSURFCisJc2VsZWN0IEhBVkVfT1BST0ZJTEUKKwlzZWxlY3QgSEFWRV9BUkNIX0tHREIgaWYgIVNNUCB8fCBTUEFSQzY0CisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKKwlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKKwlzZWxlY3QgUlRDX0NMQVNTCisJc2VsZWN0IFJUQ19EUlZfTTQ4VDU5CisKKyMgSWRlbnRpZnkgdGhpcyBhcyBhIFNwYXJjMzIgYnVpbGQKK2NvbmZpZyBTUEFSQzMyCisJYm9vbAorCWRlZmF1bHQgeSBpZiBBUkNIID0gInNwYXJjIgorCWhlbHAKKwkgIFNQQVJDIGlzIGEgZmFtaWx5IG9mIFJJU0MgbWljcm9wcm9jZXNzb3JzIGRlc2lnbmVkIGFuZCBtYXJrZXRlZCBieQorCSAgU3VuIE1pY3Jvc3lzdGVtcywgaW5jb3Jwb3JhdGVkLiAgVGhleSBhcmUgdmVyeSB3aWRlbHkgZm91bmQgaW4gU3VuCisJICB3b3Jrc3RhdGlvbnMgYW5kIGNsb25lcy4gVGhpcyBwb3J0IGNvdmVycyB0aGUgb3JpZ2luYWwgMzItYml0IFNQQVJDOworCSAgaXQgaXMgb2xkIGFuZCBzdGFibGUgYW5kIHVzdWFsbHkgY29uc2lkZXJlZCBvbmUgb2YgdGhlICJiaWcgdGhyZWUiCisJICBhbG9uZyB3aXRoIHRoZSBJbnRlbCBhbmQgQWxwaGEgcG9ydHMuICBUaGUgVWx0cmFMaW51eCBwcm9qZWN0CisJICBtYWludGFpbnMgYm90aCB0aGUgU1BBUkMzMiBhbmQgU1BBUkM2NCBwb3J0czsgaXRzIHdlYiBwYWdlIGlzCisJICBhdmFpbGFibGUgYXQgPGh0dHA6Ly93d3cudWx0cmFsaW51eC5vcmcvPi4KKworY29uZmlnIFNQQVJDNjQKKwlib29sCisJZGVmYXVsdCB5IGlmIEFSQ0ggPSAic3BhcmM2NCIKKwlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKKwlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCisJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0xNQgorCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpZiBTTVAKKwlzZWxlY3QgUlRDX0RSVl9DTU9TCisJc2VsZWN0IFJUQ19EUlZfQlE0ODAyCisJc2VsZWN0IFJUQ19EUlZfU1VONFYKKwlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQorCitjb25maWcgQVJDSF9ERUZDT05GSUcKKwlzdHJpbmcKKwlkZWZhdWx0ICJhcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWciIGlmIFNQQVJDMzIKKwlkZWZhdWx0ICJhcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWciIGlmIFNQQVJDNjQKKworIyBDT05GSUdfQklUUyBjYW4gYmUgdXNlZCBhdCBzb3VyY2UgbGV2ZWwgdG8gZ2V0IDMyLzY0IGJpdHMKK2NvbmZpZyBCSVRTCisJaW50CisJZGVmYXVsdCAzMiBpZiBTUEFSQzMyCisJZGVmYXVsdCA2NCBpZiBTUEFSQzY0CisKK2NvbmZpZyA2NEJJVAorCWRlZl9ib29sIHkgaWYgU1BBUkM2NAorCitjb25maWcgR0VORVJJQ19USU1FCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBJT01NVV9IRUxQRVIKKwlib29sCisJZGVmYXVsdCB5IGlmIFNQQVJDNjQKKworY29uZmlnIFFVSUNLTElTVAorCWJvb2wKKwlkZWZhdWx0IHkgaWYgU1BBUkM2NAorCitjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBMT0NLREVQX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5IGlmIFNQQVJDNjQKKworY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBBVURJVF9BUkNICisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKworY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCWJvb2wKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKwogY29uZmlnIE1NVQogCWJvb2wKIAlkZWZhdWx0IHkKIAogY29uZmlnIEhJR0hNRU0KIAlib29sCi0JZGVmYXVsdCB5CisJZGVmYXVsdCB5IGlmIFNQQVJDMzIKIAogY29uZmlnIFpPTkVfRE1BCiAJYm9vbAotCWRlZmF1bHQgeQorCWRlZmF1bHQgeSBpZiBTUEFSQzMyCiAKIGNvbmZpZyBHRU5FUklDX0lTQV9ETUEKIAlib29sCi0JZGVmYXVsdCB5CisJZGVmYXVsdCB5IGlmIFNQQVJDMzIKIAogY29uZmlnIEdFTkVSSUNfR1BJTwogCWJvb2wKQEAgLTMxLDE1ICsxMjYsMTEgQEAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKIAotY29uZmlnIEhaCi0JaW50Ci0JZGVmYXVsdCAxMDAKLQogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAotbWVudSAiR2VuZXJhbCBtYWNoaW5lIHNldHVwIgorbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjb25maWcgU01QCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCAoZG9lcyBub3Qgd29yayBvbiBzdW40L3N1bjRjKSIKQEAgLTY0LDgyICsxNTUsMjY5IEBACiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCiBjb25maWcgTlJfQ1BVUwotCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0zMikiCi0JcmFuZ2UgMiAzMgorCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyIKIAlkZXBlbmRzIG9uIFNNUAotCWRlZmF1bHQgIjMyIgorCXJhbmdlIDIgMzIgaWYgU1BBUkMzMgorCXJhbmdlIDIgMTAyNCBpZiBTUEFSQzY0CisJZGVmYXVsdCAzMiBpZiBTUEFSQzMyCisJZGVmYXVsdCA2NCBpZiBTUEFSQzY0CiAKLWNvbmZpZyBTUEFSQworc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CisKK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTUEFSQzMyCisKK2NvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQorCWJvb2wKKwlkZWZhdWx0IHkgaWYgU1BBUkM2NAorCitjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCiAJYm9vbAogCWRlZmF1bHQgeQotCXNlbGVjdCBIQVZFX0lERQotCXNlbGVjdCBIQVZFX09QUk9GSUxFCi0Jc2VsZWN0IEhBVkVfQVJDSF9LR0RCIGlmICFTTVAKLQlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwotCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgotCXNlbGVjdCBSVENfQ0xBU1MKLQlzZWxlY3QgUlRDX0RSVl9NNDhUNTkKIAotIyBJZGVudGlmeSB0aGlzIGFzIGEgU3BhcmMzMiBidWlsZAotY29uZmlnIFNQQVJDMzIKK2NvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCisJZGVmYXVsdCB5IGlmICFVTFRSQV9IQVNfUE9QVUxBVElPTl9DT1VOVAorCitjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX01BWV9IQVZFX1BDX0ZEQworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEVNVUxBVEVEX0NNUFhDSEcKKwlib29sCisJZGVmYXVsdCB5IGlmIFNQQVJDMzIKKwloZWxwCisJICBTcGFyYzMyIGRvZXMgbm90IGhhdmUgYSBDQVMgaW5zdHJ1Y3Rpb24gbGlrZSBzcGFyYzY0LiBjbXB4Y2hnKCkKKwkgIGlzIGVtdWxhdGVkLCBhbmQgdGhlcmVmb3JlIGl0IGlzIG5vdCBjb21wbGV0ZWx5IGF0b21pYy4KKworIyBNYWtlZmlsZSBoZWxwZXJzCitjb25maWcgU1BBUkMzMl9TTVAKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTUEFSQzMyICYmIFNNUAorCitjb25maWcgU1BBUkM2NF9TTVAKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFNNUAorCitjaG9pY2UKKwlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiIGlmIFNQQVJDNjQKKwlkZWZhdWx0IFNQQVJDNjRfUEFHRV9TSVpFXzhLQgorCitjb25maWcgU1BBUkM2NF9QQUdFX1NJWkVfOEtCCisJYm9vbCAiOEtCIgorCWhlbHAKKwkgIFRoaXMgbGV0cyB5b3Ugc2VsZWN0IHRoZSBwYWdlIHNpemUgb2YgdGhlIGtlcm5lbC4KKworCSAgOEtCIGFuZCA2NEtCIHdvcmsgcXVpdGUgd2VsbCwgc2luY2UgU1BBUkMgRUxGIHNlY3Rpb25zCisJICBwcm92aWRlIGZvciB1cCB0byA2NEtCIGFsaWdubWVudC4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbywgY2hvb3NlIDhLQi4KKworY29uZmlnIFNQQVJDNjRfUEFHRV9TSVpFXzY0S0IKKwlib29sICI2NEtCIgorCitlbmRjaG9pY2UKKworY29uZmlnIFNFQ0NPTVAKKwlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFBST0NfRlMKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBTUEFSQyBpcyBhIGZhbWlseSBvZiBSSVNDIG1pY3JvcHJvY2Vzc29ycyBkZXNpZ25lZCBhbmQgbWFya2V0ZWQgYnkKLQkgIFN1biBNaWNyb3N5c3RlbXMsIGluY29ycG9yYXRlZC4gIFRoZXkgYXJlIHZlcnkgd2lkZWx5IGZvdW5kIGluIFN1bgotCSAgd29ya3N0YXRpb25zIGFuZCBjbG9uZXMuIFRoaXMgcG9ydCBjb3ZlcnMgdGhlIG9yaWdpbmFsIDMyLWJpdCBTUEFSQzsKLQkgIGl0IGlzIG9sZCBhbmQgc3RhYmxlIGFuZCB1c3VhbGx5IGNvbnNpZGVyZWQgb25lIG9mIHRoZSAiYmlnIHRocmVlIgotCSAgYWxvbmcgd2l0aCB0aGUgSW50ZWwgYW5kIEFscGhhIHBvcnRzLiAgVGhlIFVsdHJhTGludXggcHJvamVjdAotCSAgbWFpbnRhaW5zIGJvdGggdGhlIFNQQVJDMzIgYW5kIFNQQVJDNjQgcG9ydHM7IGl0cyB3ZWIgcGFnZSBpcwotCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LnVsdHJhbGludXgub3JnLz4uCisJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKKwkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCisJICBleGVjdXRpb24uIEJ5IHVzaW5nIHBpcGVzIG9yIG90aGVyIHRyYW5zcG9ydHMgbWFkZSBhdmFpbGFibGUgdG8KKwkgIHRoZSBwcm9jZXNzIGFzIGZpbGUgZGVzY3JpcHRvcnMgc3VwcG9ydGluZyB0aGUgcmVhZC93cml0ZQorCSAgc3lzY2FsbHMsIGl0J3MgcG9zc2libGUgdG8gaXNvbGF0ZSB0aG9zZSBhcHBsaWNhdGlvbnMgaW4KKwkgIHRoZWlyIG93biBhZGRyZXNzIHNwYWNlIHVzaW5nIHNlY2NvbXAuIE9uY2Ugc2VjY29tcCBpcworCSAgZW5hYmxlZCB2aWEgL3Byb2MvPHBpZD4vc2VjY29tcCwgaXQgY2Fubm90IGJlIGRpc2FibGVkCisJICBhbmQgdGhlIHRhc2sgaXMgb25seSBhbGxvd2VkIHRvIGV4ZWN1dGUgYSBmZXcgc2FmZSBzeXNjYWxscworCSAgZGVmaW5lZCBieSBlYWNoIHNlY2NvbXAgbW9kZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KKworY29uZmlnIEhPVFBMVUdfQ1BVCisJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIgorCWRlcGVuZHMgb24gU1BBUkM2NCAmJiBTTVAKKwlzZWxlY3QgSE9UUExVRworCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZXhwZXJpbWVudCB3aXRoIHR1cm5pbmcgQ1BVcyBvZmYgYW5kIG9uLiAgQ1BVcworCSAgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjLgorCSAgU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBDUFUgaG90cGx1Zy4KKworY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKKwlib29sCisJZGVmYXVsdCB5IGlmIFNQQVJDNjQKKworc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgorCitpZiBTUEFSQzY0Citzb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgorCitjb25maWcgVVMzX0ZSRVEKKwl0cmlzdGF0ZSAiVWx0cmFTUEFSQy1JSUkgQ1BVIEZyZXF1ZW5jeSBkcml2ZXIiCisJZGVwZW5kcyBvbiBDUFVfRlJFUQorCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQorCWhlbHAKKwkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIFVsdHJhU1BBUkMtSUlJIHByb2Nlc3NvcnMuCisKKwkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxPi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCitjb25maWcgVVMyRV9GUkVRCisJdHJpc3RhdGUgIlVsdHJhU1BBUkMtSUllIENQVSBGcmVxdWVuY3kgZHJpdmVyIgorCWRlcGVuZHMgb24gQ1BVX0ZSRVEKKwlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKKwloZWxwCisJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBVbHRyYVNQQVJDLUlJZSBwcm9jZXNzb3JzLgorCisJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcT4uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworZW5kaWYKKworY29uZmlnIFVTM19NQworCXRyaXN0YXRlICJVbHRyYVNQQVJDLUlJSSBNZW1vcnkgQ29udHJvbGxlciBkcml2ZXIiCisJZGVwZW5kcyBvbiBTUEFSQzY0CisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBhZGRzIGEgZHJpdmVyIGZvciB0aGUgVWx0cmFTUEFSQy1JSUkgbWVtb3J5IGNvbnRyb2xsZXIuCisJICBMb2FkaW5nIHRoaXMgZHJpdmVyIGFsbG93cyBleGFjdCBtbmVtb25pYyBzdHJpbmdzIHRvIGJlCisJICBwcmludGVkIGluIHRoZSBldmVudCBvZiBhIG1lbW9yeSBlcnJvciwgc28gdGhhdCB0aGUgZmF1bHR5IERJTU0KKwkgIG9uIHRoZSBtb3RoZXJib2FyZCBjYW4gYmUgbWF0Y2hlZCB0byB0aGUgZXJyb3IuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgWSwgYXMgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdmVyeSB1c2VmdWwuCiAKICMgR2xvYmFsIHRoaW5ncyBhY3Jvc3MgYWxsIFN1biBtYWNoaW5lcy4KLWNvbmZpZyBJU0EKLQlib29sCi0JaGVscAotCSAgSVNBIGlzIGZvdW5kIG9uIEVzcHJlc3NvIG9ubHkgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5LgotCSAgU2F5IE4KLQotY29uZmlnIEVJU0EKLQlib29sCi0JaGVscAotCSAgRUlTQSBpcyBub3Qgc3VwcG9ydGVkLgotCSAgU2F5IE4KLQotY29uZmlnIE1DQQotCWJvb2wKLQloZWxwCi0JICBNQ0EgaXMgbm90IHN1cHBvcnRlZC4KLQkgIFNheSBOCi0KLWNvbmZpZyBQQ01DSUEKLQl0cmlzdGF0ZQotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYXR0YWNoIFBDTUNJQS0gb3IgUEMtY2FyZHMgdG8geW91ciBMaW51eAotCSAgY29tcHV0ZXIuICBUaGVzZSBhcmUgY3JlZGl0LWNhcmQgc2l6ZSBkZXZpY2VzIHN1Y2ggYXMgbmV0d29yayBjYXJkcywKLQkgIG1vZGVtcyBvciBoYXJkIGRyaXZlcyBvZnRlbiB1c2VkIHdpdGggbGFwdG9wcyBjb21wdXRlcnMuICBUaGVyZSBhcmUKLQkgIGFjdHVhbGx5IHR3byB2YXJpZXRpZXMgb2YgdGhlc2UgY2FyZHM6IHRoZSBvbGRlciAxNiBiaXQgUENNQ0lBIGNhcmRzCi0JICBhbmQgdGhlIG5ld2VyIDMyIGJpdCBDYXJkQnVzIGNhcmRzLiAgSWYgeW91IHdhbnQgdG8gdXNlIENhcmRCdXMKLQkgIGNhcmRzLCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvICJDYXJkQnVzIHN1cHBvcnQiIGJlbG93LgotCi0JICBUbyB1c2UgeW91ciBQQy1jYXJkcywgeW91IHdpbGwgbmVlZCBzdXBwb3J0aW5nIHNvZnR3YXJlIGZyb20gRGF2aWQKLQkgIEhpbmRzJyBwY21jaWEtY3MgcGFja2FnZSAoc2VlIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlcz4KLQkgIGZvciBsb2NhdGlvbikuICBQbGVhc2UgYWxzbyByZWFkIHRoZSBQQ01DSUEtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCi0JICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIG1vZHVsZXMsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBwY21jaWFfY29yZSBhbmQgZHMuCi0KLWNvbmZpZyBTQlVTCitjb25maWcgR0VORVJJQ19MT0NLQlJFQUsKIAlib29sCiAJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFNNUCAmJiBQUkVFTVBUCiAKLWNvbmZpZyBTQlVTQ0hBUgotCWJvb2wKK2Nob2ljZQorCXByb21wdCAiU1BBUkM2NCBIdWdlIFRMQiBQYWdlIFNpemUiCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIEhVR0VUTEJfUEFHRQorCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfNE1CCisKK2NvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUIKKwlib29sICI0TUIiCisKK2NvbmZpZyBIVUdFVExCX1BBR0VfU0laRV81MTJLCisJYm9vbCAiNTEySyIKKworY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SworCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzY0S0IKKwlib29sICI2NEsiCisKK2VuZGNob2ljZQorCitjb25maWcgTlVNQQorCWJvb2wgIk5VTUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNQQVJDNjQgJiYgU01QCisKK2NvbmZpZyBOT0RFU19TSElGVAorCWludAorCWRlZmF1bHQgIjQiCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisKKyMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KKyMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKKyMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKKyMgcmVzaWRlIG9uIHRoYXQgbm9kZS4gIFNlZSBtZW1tYXBfaW5pdF96b25lKCkKKyMgZm9yIGRldGFpbHMuCitjb25maWcgTk9ERVNfU1BBTl9PVEhFUl9OT0RFUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKworY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CisKK2NvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKworY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCWRlZl9ib29sIHkgaWYgU1BBUkM2NAorCXNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKKworY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKworc291cmNlICJtbS9LY29uZmlnIgorCitjb25maWcgU0NIRURfU01UCisJYm9vbCAiU01UIChIeXBlcnRocmVhZGluZykgc2NoZWR1bGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFNNUAogCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNNVCBzY2hlZHVsZXIgc3VwcG9ydCBpbXByb3ZlcyB0aGUgQ1BVIHNjaGVkdWxlcidzIGRlY2lzaW9uIG1ha2luZworCSAgd2hlbiBkZWFsaW5nIHdpdGggU1BBUkMgY3B1cyBhdCBhIGNvc3Qgb2Ygc2xpZ2h0bHkgaW5jcmVhc2VkIG92ZXJoZWFkCisJICBpbiBzb21lIHBsYWNlcy4gSWYgdW5zdXJlIHNheSBOIGhlcmUuCisKK2NvbmZpZyBTQ0hFRF9NQworCWJvb2wgIk11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFNNUAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIE11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbgorCSAgbWFraW5nIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWNvcmUgQ1BVIGNoaXBzIGF0IGEgY29zdCBvZiBzbGlnaHRseQorCSAgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KKworaWYgU1BBUkM2NAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgorZW5kaWYKKworY29uZmlnIENNRExJTkVfQk9PTAorCWJvb2wgIkRlZmF1bHQgYm9vdGxvYWRlciBrZXJuZWwgYXJndW1lbnRzIgorCWRlcGVuZHMgb24gU1BBUkM2NAorCitjb25maWcgQ01ETElORQorCXN0cmluZyAiSW5pdGlhbCBrZXJuZWwgY29tbWFuZCBzdHJpbmciCisJZGVwZW5kcyBvbiBDTURMSU5FX0JPT0wKKwlkZWZhdWx0ICJjb25zb2xlPXR0eVMwLDk2MDAgcm9vdD0vZGV2L3NkYTEiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHBhc3MgZGVmYXVsdCBhcmd1bWVudHMgdG8KKwkgIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBib290bG9hZGVyLCBpZiB5b3UKKwkgIHVzZSBvbmUgKHN1Y2ggYXMgU0lMTykuIFRoaXMgaXMgbW9zdCB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYm9vdAorCSAgYSBrZXJuZWwgZnJvbSBURlRQLCBhbmQgd2FudCBkZWZhdWx0IG9wdGlvbnMgdG8gYmUgYXZhaWxhYmxlCisJICB3aXRoIGhhdmluZyB0aGVtIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisJICBOT1RFOiBUaGlzIG9wdGlvbiBXSUxMIG92ZXJyaWRlIHRoZSBQUk9NIGJvb3RhcmdzIHNldHRpbmchCisKK2NvbmZpZyBTVU5fUE0KKwlib29sCisJZGVmYXVsdCB5IGlmIFNQQVJDMzIKKwloZWxwCisJICBFbmFibGUgcG93ZXIgbWFuYWdlbWVudCBhbmQgQ1BVIHN0YW5kYnkgZmVhdHVyZXMgb24gc3VwcG9ydGVkCisJICBTUEFSQyBwbGF0Zm9ybXMuCisKK2NvbmZpZyBTUEFSQ19MRUQKKwl0cmlzdGF0ZSAiU3VuNG0gTEVEIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNQQVJDMzIKKwloZWxwCisJICBUaGlzIGRyaXZlciB0b2dnbGVzIHRoZSBmcm9udC1wYW5lbCBMRUQgb24gc3VuNG0gc3lzdGVtcworCSAgaW4gYSB1c2VyLXNwZWNpZmlhYmxlIG1hbm5lci4gIEl0cyBzdGF0ZSBjYW4gYmUgcHJvYmVkCisJICBieSByZWFkaW5nIC9wcm9jL2xlZCBhbmQgaXRzIGJsaW5raW5nIG1vZGUgY2FuIGJlIGNoYW5nZWQKKwkgIHZpYSB3cml0ZXMgdG8gL3Byb2MvbGVkCiAKIGNvbmZpZyBTRVJJQUxfQ09OU09MRQogCWJvb2wKKwlkZXBlbmRzIG9uIFNQQVJDMzIKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBzZXJpYWwgcG9ydCBhcyB0aGUKQEAgLTE2MSw3MSArNDM5LDY2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBTVU5fQVVYSU8KLQlib29sCi0JZGVmYXVsdCB5CitlbmRtZW51CiAKLWNvbmZpZyBTVU5fSU8KK21lbnUgIkJ1cyBvcHRpb25zIChQQ0kgZXRjLikiCitjb25maWcgSVNBCiAJYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCi0JYm9vbAotCi1jb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19IV0VJR0hUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX01BWV9IQVZFX1BDX0ZEQwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIEVNVUxBVEVEX0NNUFhDSEcKLQlib29sCi0JZGVmYXVsdCB5CiAJaGVscAotCSAgU3BhcmMzMiBkb2VzIG5vdCBoYXZlIGEgQ0FTIGluc3RydWN0aW9uIGxpa2Ugc3BhcmM2NC4gY21weGNoZygpCi0JICBpcyBlbXVsYXRlZCwgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgY29tcGxldGVseSBhdG9taWMuCisJICBJU0EgaXMgZm91bmQgb24gRXNwcmVzc28gb25seSBhbmQgaXMgbm90IHN1cHBvcnRlZCBjdXJyZW50bHkuCiAKLWNvbmZpZyBTVU5fUE0KK2NvbmZpZyBJU0FQTlAKKwlib29sCisJaGVscAorCSAgSVNBUE5QIGlzIG5vdCBzdXBwb3J0ZWQKKworY29uZmlnIEVJU0EKKwlib29sCisJaGVscAorCSAgRUlTQSBpcyBub3Qgc3VwcG9ydGVkLgorCitjb25maWcgTUNBCisJYm9vbAorCWhlbHAKKwkgIE1DQSBpcyBub3Qgc3VwcG9ydGVkLgorCitjb25maWcgU0JVUwogCWJvb2wKIAlkZWZhdWx0IHkKKworY29uZmlnIFNCVVNDSEFSCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgU1VOX0xET01TCisJYm9vbCAiU3VuIExvZ2ljYWwgRG9tYWlucyBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1BBUkM2NAogCWhlbHAKLQkgIEVuYWJsZSBwb3dlciBtYW5hZ2VtZW50IGFuZCBDUFUgc3RhbmRieSBmZWF0dXJlcyBvbiBzdXBwb3J0ZWQKLQkgIFNQQVJDIHBsYXRmb3Jtcy4KKwkgIFNheSBZIGhlcmUgaXMgeW91IHdhbnQgdG8gc3VwcG9ydCB2aXJ0dWFsIGRldmljZXMgdmlhCisJICBMb2dpY2FsIERvbWFpbnMuCiAKIGNvbmZpZyBQQ0kKIAlib29sICJTdXBwb3J0IGZvciBQQ0kgYW5kIFBTLzIga2V5Ym9hcmQvbW91c2UiCiAJaGVscAorCSAgRmluZCBvdXQgd2hldGhlciB5b3VyIHN5c3RlbSBpbmNsdWRlcyBhIFBDSSBidXMuIFBDSSBpcyB0aGUgbmFtZSBvZgorCSAgYSBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCisJICB5b3VyIGJveC4gIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBkcml2ZXJzIGFuZAorCSAgaW5mcmFzdHJ1Y3R1cmUgY29kZSB0byBzdXBwb3J0IFBDSSBidXMgZGV2aWNlcy4KKwogCSAgQ09ORklHX1BDSSBpcyBuZWVkZWQgZm9yIGFsbCBKYXZhU3RhdGlvbidzIChpbmNsdWRpbmcgTXJDb2ZmZWUpLAogCSAgQ1AtMTIwMCwgSmF2YUVuZ2luZS0xLCBDb3JvbmEsIFJlZCBPY3RvYmVyLCBhbmQgU2VyZW5nZXRpIFNHU0MuCiAJICBBbGwgb2YgdGhlc2UgcGxhdGZvcm1zIGFyZSBleHRyZW1lbHkgb2JzY3VyZSwgc28gc2F5IE4gaWYgdW5zdXJlLgogCitjb25maWcgUENJX0RPTUFJTlMKKwlkZWZfYm9vbCBQQ0kgaWYgU1BBUkM2NAorCiBjb25maWcgUENJX1NZU0NBTEwKIAlkZWZfYm9vbCBQQ0kKIAogc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvcGNtY2lhL0tjb25maWciCisKIGNvbmZpZyBTVU5fT1BFTlBST01GUwogCXRyaXN0YXRlICJPcGVucHJvbSB0cmVlIGFwcGVhcnMgaW4gL3Byb2Mvb3BlbnByb20iCiAJaGVscApAQCAtMjM5LDE3ICs1MTIsMzMgQEAKIAkgIE9ubHkgY2hvb3NlIE4gaWYgeW91IGtub3cgaW4gYWR2YW5jZSB0aGF0IHlvdSB3aWxsIG5vdCBuZWVkIHRvIG1vZGlmeQogCSAgT3BlblBST00gc2V0dGluZ3Mgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLgogCi1jb25maWcgU1BBUkNfTEVECi0JdHJpc3RhdGUgIlN1bjRtIExFRCBkcml2ZXIiCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgdG9nZ2xlcyB0aGUgZnJvbnQtcGFuZWwgTEVEIG9uIHN1bjRtIHN5c3RlbXMKLQkgIGluIGEgdXNlci1zcGVjaWZpYWJsZSBtYW5uZXIuICBJdHMgc3RhdGUgY2FuIGJlIHByb2JlZAotCSAgYnkgcmVhZGluZyAvcHJvYy9sZWQgYW5kIGl0cyBibGlua2luZyBtb2RlIGNhbiBiZSBjaGFuZ2VkCi0JICB2aWEgd3JpdGVzIHRvIC9wcm9jL2xlZAorIyBNYWtlZmlsZSBoZWxwZXJzCitjb25maWcgU1BBUkMzMl9QQ0kKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTUEFSQzMyICYmIFBDSQorCitjb25maWcgU1BBUkM2NF9QQ0kKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFBDSQorCitlbmRtZW51CisKK21lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgogCiBzb3VyY2UgImZzL0tjb25maWcuYmluZm10IgogCi1zb3VyY2UgIm1tL0tjb25maWciCitjb25maWcgQ09NUEFUCisJYm9vbAorCWRlcGVuZHMgb24gU1BBUkM2NAorCWRlZmF1bHQgeQorCXNlbGVjdCBDT01QQVRfQklORk1UX0VMRgorCitjb25maWcgU1lTVklQQ19DT01QQVQKKwlib29sCisJZGVwZW5kcyBvbiBDT01QQVQgJiYgU1lTVklQQworCWRlZmF1bHQgeQogCiBlbmRtZW51CiAKQEAgLTI1OSw0MCArNTQ4LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3NidXMvY2hhci9LY29uZmlnIgogCi0jIFRoaXMgb25lIG11c3QgYmUgYmVmb3JlIHRoZSBmaWxlc3lzdGVtIGNvbmZpZ3MuIC1EYXZlTQotCi1tZW51ICJVbml4OTggUFRZIHN1cHBvcnQiCi0KLWNvbmZpZyBVTklYOThfUFRZUwotCWJvb2wgIlVuaXg5OCBQVFkgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBBIHBzZXVkbyB0ZXJtaW5hbCAoUFRZKSBpcyBhIHNvZnR3YXJlIGRldmljZSBjb25zaXN0aW5nIG9mIHR3bwotCSAgaGFsdmVzOiBhIG1hc3RlciBhbmQgYSBzbGF2ZS4gVGhlIHNsYXZlIGRldmljZSBiZWhhdmVzIGlkZW50aWNhbCB0bwotCSAgYSBwaHlzaWNhbCB0ZXJtaW5hbDsgdGhlIG1hc3RlciBkZXZpY2UgaXMgdXNlZCBieSBhIHByb2Nlc3MgdG8KLQkgIHJlYWQgZGF0YSBmcm9tIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBzbGF2ZSwgdGhlcmVieSBlbXVsYXRpbmcgYQotCSAgdGVybWluYWwuIFR5cGljYWwgcHJvZ3JhbXMgZm9yIHRoZSBtYXN0ZXIgc2lkZSBhcmUgdGVsbmV0IHNlcnZlcnMKLQkgIGFuZCB4dGVybXMuCi0KLQkgIExpbnV4IGhhcyB0cmFkaXRpb25hbGx5IHVzZWQgdGhlIEJTRC1saWtlIG5hbWVzIC9kZXYvcHR5eHggZm9yCi0JICBtYXN0ZXJzIGFuZCAvZGV2L3R0eXh4IGZvciBzbGF2ZXMgb2YgcHNldWRvIHRlcm1pbmFscy4gVGhpcyBzY2hlbWUKLQkgIGhhcyBhIG51bWJlciBvZiBwcm9ibGVtcy4gVGhlIEdOVSBDIGxpYnJhcnkgZ2xpYmMgMi4xIGFuZCBsYXRlciwKLQkgIGhvd2V2ZXIsIHN1cHBvcnRzIHRoZSBVbml4OTggbmFtaW5nIHN0YW5kYXJkOiBpbiBvcmRlciB0byBhY3F1aXJlIGEKLQkgIHBzZXVkbyB0ZXJtaW5hbCwgYSBwcm9jZXNzIG9wZW5zIC9kZXYvcHRteDsgdGhlIG51bWJlciBvZiB0aGUgcHNldWRvCi0JICB0ZXJtaW5hbCBpcyB0aGVuIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9jZXNzIGFuZCB0aGUgcHNldWRvCi0JICB0ZXJtaW5hbCBzbGF2ZSBjYW4gYmUgYWNjZXNzZWQgYXMgL2Rldi9wdHMvPG51bWJlcj4uIFdoYXQgd2FzCi0JICB0cmFkaXRpb25hbGx5IC9kZXYvdHR5cDIgd2lsbCB0aGVuIGJlIC9kZXYvcHRzLzIsIGZvciBleGFtcGxlLgotCi0JICBUaGUgZW50cmllcyBpbiAvZGV2L3B0cy8gYXJlIGNyZWF0ZWQgb24gdGhlIGZseSBieSBhIHZpcnR1YWwKLQkgIGZpbGUgc3lzdGVtOyB0aGVyZWZvcmUsIGlmIHlvdSBzYXkgWSBoZXJlIHlvdSBzaG91bGQgc2F5IFkgdG8KLQkgICIvZGV2L3B0cyBmaWxlIHN5c3RlbSBmb3IgVW5peDk4IFBUWXMiIGFzIHdlbGwuCi0KLQkgIElmIHlvdSB3YW50IHRvIHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIEMgbGlicmFyeSBnbGliYyAyLjEKLQkgIG9yIGxhdGVyIChlcXVhbCB0byBsaWJjLTYuMSwgY2hlY2sgd2l0aCAibHMgLWwgL2xpYi9saWJjLnNvLioiKS4KLQkgIFJlYWQgdGhlIGluc3RydWN0aW9ucyBpbiA8ZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXM+IHBlcnRhaW5pbmcgdG8KLQkgIHBzZXVkbyB0ZXJtaW5hbHMuIEl0J3Mgc2FmZSB0byBzYXkgTi4KLQotZW5kbWVudQotCiBzb3VyY2UgImZzL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCmluZGV4IDg3ZGQ0OTYuLmI4YTE1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKQEAgLTE1LDQgKzE1LDMwIEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKK2NvbmZpZyBERUJVR19EQ0ZMVVNICisJYm9vbCAiRC1jYWNoZSBmbHVzaCBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIERFQlVHX0tFUk5FTAorCitjb25maWcgU1RBQ0tfREVCVUcKKwlib29sICJTdGFjayBPdmVyZmxvdyBEZXRlY3Rpb24gU3VwcG9ydCIKKworY29uZmlnIERFQlVHX1BBR0VBTExPQworCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgorCWRlcGVuZHMgb24gU1BBUkM2NCAmJiBERUJVR19LRVJORUwgJiYgIUhJQkVSTkFUSU9OCisJaGVscAorCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KKwkgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCisJICBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCisKK2NvbmZpZyBNQ09VTlQKKwlib29sCisJZGVwZW5kcyBvbiBTUEFSQzY0CisJZGVwZW5kcyBvbiBTVEFDS19ERUJVRyB8fCBGVU5DVElPTl9UUkFDRVIKKwlkZWZhdWx0IHkKKworY29uZmlnIEZSQU1FX1BPSU5URVIKKwlib29sCisJZGVwZW5kcyBvbiBNQ09VTlQKKwlkZWZhdWx0IHkKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvTWFrZWZpbGUKaW5kZXggOTU5Mjg4OS4uMjAwM2RlZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL01ha2VmaWxlCkBAIC0yLDE4ICsyLDMxIEBACiAjIHNwYXJjL01ha2VmaWxlCiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIG9uIHRoZQotIyBTcGFyYy4KKyMgU3BhcmMgYW5kIHNwYXJjNjQuCiAjCi0jIENvcHlyaWdodCAoQykgMTk5NCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisjIENvcHlyaWdodCAoQykgMTk5NCwxOTk2LDE5OTggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorIyBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCisKKyMgV2UgYXJlIG5vdCB5ZXQgY29uZmlndXJlZCAtIHNvIHRlc3Qgb24gYXJjaAoraWZlcSAoJChBUkNIKSxzcGFyYykKKyAgICAgICAgS0JVSUxEX0RFRkNPTkZJRyA6PSBzcGFyYzMyX2RlZmNvbmZpZworZWxzZQorICAgICAgICBLQlVJTERfREVGQ09ORklHIDo9IHNwYXJjNjRfZGVmY29uZmlnCitlbmRpZgorCitpZmVxICgkKENPTkZJR19TUEFSQzMyKSx5KQorIyMjIyMKKyMgc3BhcmMzMgogIwogCiAjCiAjIFVuY29tbWVudCB0aGUgZmlyc3QgS0JVSUxEX0NGTEFHUyBpZiB5b3UgYXJlIGRvaW5nIGtnZGIgc291cmNlIGxldmVsCiAjIGRlYnVnZ2luZyBvZiB0aGUga2VybmVsIHRvIGdldCB0aGUgcHJvcGVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KIAotQVMgICAgICAgICAgICAgIDo9ICQoQVMpIC0zMgotTERGTEFHUwkJOj0gLW0gZWxmMzJfc3BhcmMKLUNIRUNLRkxBR1MJKz0gLURfX3NwYXJjX18KK0FTICAgICAgICAgICAgIDo9ICQoQVMpIC0zMgorTERGTEFHUyAgICAgICAgOj0gLW0gZWxmMzJfc3BhcmMKK0NIRUNLRkxBR1MgICAgICs9IC1EX19zcGFyY19fCitleHBvcnQgQklUUyAgICA6PSAzMgogCiAjS0JVSUxEX0NGTEFHUyArPSAtZyAtcGlwZSAtZmNhbGwtdXNlZC1nNSAtZmNhbGwtdXNlZC1nNwogS0JVSUxEX0NGTEFHUyArPSAtbTMyIC1waXBlIC1tbm8tZnB1IC1mY2FsbC11c2VkLWc1IC1mY2FsbC11c2VkLWc3CkBAIC0yNSwzOCArMzgsNjAgQEAKICMgIEFjdHVhbCBsaW5raW5nIGlzIGRvbmUgd2l0aCAibWFrZSBpbWFnZSIuCiBMREZMQUdTX3ZtbGludXggPSAtcgogCi1oZWFkLXkgOj0gYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5vIGFyY2gvc3BhcmMva2VybmVsL2luaXRfdGFzay5vCi1IRUFEX1kgOj0gJChoZWFkLXkpCisjIERlZmF1bHQgdGFyZ2V0CithbGw6IHpJbWFnZQogCi1jb3JlLXkgKz0gYXJjaC9zcGFyYy9rZXJuZWwvIGFyY2gvc3BhcmMvbW0vIGFyY2gvc3BhcmMvbWF0aC1lbXUvCi1saWJzLXkgKz0gYXJjaC9zcGFyYy9wcm9tLyBhcmNoL3NwYXJjL2xpYi8KKworZWxzZQorIyMjIyMKKyMgc3BhcmM2NAorIworCitDSEVDS0ZMQUdTICAgICAgKz0gLURfX3NwYXJjX18gLURfX3NwYXJjX3Y5X18gLURfX2FyY2g2NF9fIC1tNjQKKworIyBVbmRlZmluZSBzcGFyYyB3aGVuIHByb2Nlc3Npbmcgdm1saW51eC5sZHMgLSBpdCBpcyB1c2VkCisjIEFuZCB0ZWFjaCBDUFAgd2UgYXJlIGRvaW5nIDY0IGJpdCBidWlsZHMgKGZvciB0aGlzIGNhc2UpCitDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtbTY0IC1Vc3BhcmMKK0xERkxBR1MgICAgICAgICAgICAgIDo9IC1tIGVsZjY0X3NwYXJjCitleHBvcnQgQklUUyAgICAgICAgICA6PSA2NAorCitLQlVJTERfQ0ZMQUdTICs9IC1tNjQgLXBpcGUgLW1uby1mcHUgLW1jcHU9dWx0cmFzcGFyYyAtbWNtb2RlbD1tZWRsb3cgICBcCisgICAgICAgICAgICAgICAgIC1mZml4ZWQtZzQgLWZmaXhlZC1nNSAtZmNhbGwtdXNlZC1nNyAtV25vLXNpZ24tY29tcGFyZSBcCisgICAgICAgICAgICAgICAgIC1XYSwtLXVuZGVjbGFyZWQtcmVncworS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT11bHRyYXNwYXJjMykKK0tCVUlMRF9BRkxBR1MgKz0gLW02NCAtbWNwdT11bHRyYXNwYXJjIC1XYSwtLXVuZGVjbGFyZWQtcmVncworCitpZmVxICgkKENPTkZJR19NQ09VTlQpLHkpCisgIEtCVUlMRF9DRkxBR1MgKz0gLXBnCitlbmRpZgorCitlbmRpZgorCitoZWFkLXkgICAgICAgICAgICAgICAgIDo9IGFyY2gvc3BhcmMva2VybmVsL2hlYWRfJChCSVRTKS5vCitoZWFkLXkgICAgICAgICAgICAgICAgICs9IGFyY2gvc3BhcmMva2VybmVsL2luaXRfdGFzay5vCisKK2NvcmUteSAgICAgICAgICAgICAgICAgKz0gYXJjaC9zcGFyYy9rZXJuZWwvCitjb3JlLXkgICAgICAgICAgICAgICAgICs9IGFyY2gvc3BhcmMvbW0vIGFyY2gvc3BhcmMvbWF0aC1lbXUvCisKK2xpYnMteSAgICAgICAgICAgICAgICAgKz0gYXJjaC9zcGFyYy9wcm9tLworbGlicy15ICAgICAgICAgICAgICAgICArPSBhcmNoL3NwYXJjL2xpYi8KIAogZHJpdmVycy0kKENPTkZJR19PUFJPRklMRSkJKz0gYXJjaC9zcGFyYy9vcHJvZmlsZS8KIAogIyBFeHBvcnQgd2hhdCBpcyBuZWVkZWQgYnkgYXJjaC9zcGFyYy9ib290L01ha2VmaWxlCi0jIFJlbmFtaW5nIGlzIGRvbmUgdG8gYXZvaWQgY29uZnVzaW5nIHBhdHRlcm4gbWF0Y2hpbmcgcnVsZXMgaW4gMi41LjQ1IChtdWx0eS0pCi1JTklUX1kJCTo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChpbml0LXkpKQotQ09SRV9ZCQk6PSAkKGNvcmUteSkKLUNPUkVfWQkJKz0ga2VybmVsLyBtbS8gZnMvIGlwYy8gc2VjdXJpdHkvIGNyeXB0by8gYmxvY2svCi1DT1JFX1kJCTo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChDT1JFX1kpKQotRFJJVkVSU19ZCTo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChkcml2ZXJzLXkpKQotTkVUX1kJCTo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChuZXQteSkpCi1MSUJTX1kxCQk6PSAkKHBhdHN1YnN0ICUvLCAlL2xpYi5hLCAkKGxpYnMteSkpCi1MSUJTX1kyCQk6PSAkKHBhdHN1YnN0ICUvLCAlL2J1aWx0LWluLm8sICQobGlicy15KSkKLUxJQlNfWQkJOj0gJChMSUJTX1kxKSAkKExJQlNfWTIpCitleHBvcnQgVk1MSU5VWF9JTklUIFZNTElOVVhfTUFJTgorVk1MSU5VWF9JTklUIDo9ICQoaGVhZC15KSAkKGluaXQteSkKK1ZNTElOVVhfTUFJTiA6PSAkKGNvcmUteSkga2VybmVsLyBtbS8gZnMvIGlwYy8gc2VjdXJpdHkvIGNyeXB0by8gYmxvY2svCitWTUxJTlVYX01BSU4gKz0gJChwYXRzdWJzdCAlLywgJS9saWIuYSwgJChsaWJzLXkpKSAkKGxpYnMteSkKK1ZNTElOVVhfTUFJTiArPSAkKGRyaXZlcnMteSkgJChuZXQteSkKIAogaWZkZWYgQ09ORklHX0tBTExTWU1TCi1rYWxsc3ltcy5vIDo9IC50bXBfa2FsbHN5bXMyLm8KK2V4cG9ydCBrYWxsc3ltcy5vIDo9IC50bXBfa2FsbHN5bXMyLm8KIGVuZGlmCiAKLWV4cG9ydCBJTklUX1kgQ09SRV9ZIERSSVZFUlNfWSBORVRfWSBMSUJTX1kgSEVBRF9ZIGthbGxzeW1zLm8KLQotIyBEZWZhdWx0IHRhcmdldAotYWxsOiB6SW1hZ2UKLQogYm9vdCA6PSBhcmNoL3NwYXJjL2Jvb3QKIAotaW1hZ2UgekltYWdlIHRmdHBib290LmltZzogdm1saW51eAoraW1hZ2UgekltYWdlIHRmdHBib290LmltZyB2bWxpbnV4LmFvdXQ6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAogYXJjaGNsZWFuOgpAQCAtNjUsMTEgKzEwMCwxNyBAQAogIyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIGZvciBwYWNrYWdpbmcKIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL3pJbWFnZQogCi1DTEVBTl9GSUxFUyArPSBhcmNoLyQoQVJDSCkvYm9vdC9TeXN0ZW0ubWFwCi0KICMgRG9uJ3QgdXNlIHRhYnMgaW4gZWNobyBhcmd1bWVudHMuCitpZmVxICgkKEFSQ0gpLHNwYXJjKQogZGVmaW5lIGFyY2hoZWxwCiAgIGVjaG8gICcqIGltYWdlICAgICAgICAtIGtlcm5lbCBpbWFnZSAoJChib290KS9pbWFnZSknCiAgIGVjaG8gICcqIHpJbWFnZSAgICAgICAtIHN0cmlwcGVkIGtlcm5lbCBpbWFnZSAoJChib290KS96SW1hZ2UpJwogICBlY2hvICAnICB0ZnRwYm9vdC5pbWcgLSBpbWFnZSBwcmVwYXJlZCBmb3IgdGZ0cCcKIGVuZGVmCitlbHNlCitkZWZpbmUgYXJjaGhlbHAKKyAgZWNobyAgJyogdm1saW51eCAgICAgICAtIFN0YW5kYXJkIHNwYXJjNjQga2VybmVsJworICBlY2hvICAnICB2bWxpbnV4LmFvdXQgIC0gYS5vdXQga2VybmVsIGZvciBzcGFyYzY0JworICBlY2hvICAnICB0ZnRwYm9vdC5pbWcgLSBpbWFnZSBwcmVwYXJlZCBmb3IgdGZ0cCcKK2VuZGVmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc3BhcmMvYm9vdC8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9ib290Ly5naXRpZ25vcmUKcmVuYW1lIHRvIGFyY2gvc3BhcmMvYm9vdC8uZ2l0aWdub3JlCmluZGV4IDM2MzU2ZjkuLmZjNmYzOTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9ib290Ly5naXRpZ25vcmUKKysrIGIvYXJjaC9zcGFyYy9ib290Ly5naXRpZ25vcmUKQEAgLTEsNCArMSw4IEBACitidGZpeC5TCitidGZpeHVwcHJlcAogaW1hZ2UKK3pJbWFnZQogdGZ0cGJvb3QuaW1nCiB2bWxpbnV4LmFvdXQKIHBpZ2d5YmFjaworCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL2Jvb3QvTWFrZWZpbGUKaW5kZXggM2U3N2E5Zi4uOTYwNDFhOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9NYWtlZmlsZQpAQCAtNiwxMyArNiwxNiBAQAogUk9PVF9JTUcJOj0gL3Vzci9zcmMvcm9vdC5pbWcKIEVMRlRPQU9VVAk6PSBlbGZ0b2FvdXQKIAotaG9zdHByb2dzLXkJOj0gcGlnZ3liYWNrIGJ0Zml4dXBwcmVwCi10YXJnZXRzCQk6PSB0ZnRwYm9vdC5pbWcgYnRmaXgubyBidGZpeC5TIGltYWdlCitob3N0cHJvZ3MteQk6PSBwaWdneWJhY2tfMzIgcGlnZ3liYWNrXzY0IGJ0Zml4dXBwcmVwCit0YXJnZXRzCQk6PSB0ZnRwYm9vdC5pbWcgYnRmaXgubyBidGZpeC5TIGltYWdlIHpJbWFnZSB2bWxpbnV4LmFvdXQKK2NsZWFuLWZpbGVzCTo9IFN5c3RlbS5tYXAKIAogcXVpZXRfY21kX2VsZnRvYW91dAk9IEVMRlRPQU9VVCAkQAogICAgICAgY21kX2VsZnRvYW91dAk9ICQoRUxGVE9BT1VUKSAkKG9iaikvaW1hZ2UgLW8gJEAKKworaWZlcSAoJChDT05GSUdfU1BBUkMzMikseSkKIHF1aWV0X2NtZF9waWdneQkJPSBQSUdHWSAgICRACi0gICAgICBjbWRfcGlnZ3kJCT0gJChvYmopL3BpZ2d5YmFjayAkQCAkKG9iaikvU3lzdGVtLm1hcCAkKFJPT1RfSU1HKQorICAgICAgY21kX3BpZ2d5CQk9ICQob2JqKS9waWdneWJhY2tfMzIgJEAgJChvYmopL1N5c3RlbS5tYXAgJChST09UX0lNRykKIHF1aWV0X2NtZF9idGZpeAkJPSBCVEZJWCAgICRACiAgICAgICBjbWRfYnRmaXgJCT0gJChPQkpEVU1QKSAteCB2bWxpbnV4IHwgJChvYmopL2J0Zml4dXBwcmVwID4gJEAKIHF1aWV0X2NtZF9zeXNtYXAgICAgICAgID0gU1lTTUFQICAkKG9iaikvU3lzdGVtLm1hcApAQCAtMzcsOCArNDAsOCBAQAogCWVjaG8gJ2NtZF8kQCA6PSAkKGNtZF9pbWFnZSknID4gJChARCkvLiQoQEYpLmNtZAogZW5kZWYKIAotQlRPQkpTIDo9ICQoSEVBRF9ZKSAkKElOSVRfWSkKLUJUTElCUyA6PSAkKENPUkVfWSkgJChMSUJTX1kpICQoRFJJVkVSU19ZKSAkKE5FVF9ZKQorQlRPQkpTIDo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChWTUxJTlVYX0lOSVQpKQorQlRMSUJTIDo9ICQocGF0c3Vic3QgJS8sICUvYnVpbHQtaW4ubywgJChWTUxJTlVYX01BSU4pKQogTERGTEFHU19pbWFnZSA6PSAtVCBhcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4LmxkcyAkKEJUT0JKUykgXAogICAgICAgICAgICAgICAgICAgLS1zdGFydC1ncm91cCAkKEJUTElCUykgLS1lbmQtZ3JvdXAgXAogICAgICAgICAgICAgICAgICAgJChrYWxsc3ltcy5vKSAkKG9iaikvYnRmaXgubwpAQCAtNjEsMyArNjQsMjggQEAKIAogJChvYmopL2J0Zml4LlM6ICQob2JqKS9idGZpeHVwcHJlcCB2bWxpbnV4IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsYnRmaXgpCisKK2VuZGlmCisKK2lmZXEgKCQoQ09ORklHX1NQQVJDNjQpLHkpCitxdWlldF9jbWRfcGlnZ3kgICAgID0gUElHR1kgICAkQAorICAgICAgY21kX3BpZ2d5ICAgICA9ICQob2JqKS9waWdneWJhY2tfNjQgJEAgU3lzdGVtLm1hcCAkKFJPT1RfSU1HKQorcXVpZXRfY21kX3N0cmlwICAgICA9IFNUUklQICAgJEAKKyAgICAgIGNtZF9zdHJpcCAgICAgPSAkKFNUUklQKSAtUiAuY29tbWVudCAtUiAubm90ZSAtSyBzdW40dV9pbml0IC1LIF9lbmQgLUsgX3N0YXJ0IHZtbGludXggLW8gJEAKKworCisjIEFjdHVhbCBsaW5raW5nCiskKG9iaikvaW1hZ2U6IHZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxzdHJpcCkKKwlAZWNobyAnICBrZXJuZWw6ICRAIGlzIHJlYWR5JworCiskKG9iaikvdGZ0cGJvb3QuaW1nOiB2bWxpbnV4ICQob2JqKS9waWdneWJhY2tfNjQgU3lzdGVtLm1hcCAkKFJPT1RfSU1HKSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGVsZnRvYW91dCkKKwkkKGNhbGwgaWZfY2hhbmdlZCxwaWdneSkKKwlAZWNobyAnICBrZXJuZWw6ICRAIGlzIHJlYWR5JworCiskKG9iaikvdm1saW51eC5hb3V0OiB2bWxpbnV4IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZWxmdG9hb3V0KQorCUBlY2hvICcgIGtlcm5lbDogJEAgaXMgcmVhZHknCitlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrLmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvYm9vdC9waWdneWJhY2suYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvYm9vdC9waWdneWJhY2suYyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2Jvb3QvcGlnZ3liYWNrLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvc3BhcmMvY29uZmlncy9zcGFyYzY0X2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCAyZDI3NjlkLi44OWMyNjBhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMTUsOCArMTUsNiBAQAogaGVhZGVyLXkgKz0gc2lnbmFsXzY0LmgKIGhlYWRlci15ICs9IHN0YXRfMzIuaAogaGVhZGVyLXkgKz0gc3RhdF82NC5oCi1oZWFkZXIteSArPSB1bmlzdGRfMzIuaAotaGVhZGVyLXkgKz0gdW5pc3RkXzY0LmgKIAogaGVhZGVyLXkgKz0gYXBjLmgKIGhlYWRlci15ICs9IGFzaS5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGUxZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hc20uaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9TUEFSQ19BU01fSAorI2RlZmluZSBfU1BBUkNfQVNNX0gKKworLyogTWFjcm9zIHRvIGFzc2lzdCB0aGUgc2hhcmluZyBvZiBhc3NlbWJsZXIgY29kZSBiZXR3ZWVuIDMyLWJpdCBhbmQKKyAqIDY0LWJpdCBzcGFyYy4KKyAqLworCisjaWZkZWYgQ09ORklHX1NQQVJDNjQKKyNkZWZpbmUgQlJBTkNIMzIoVFlQRSwgUFJFRElDVCwgREVTVCkgXAorCVRZUEUsUFJFRElDVAklaWNjLCBERVNUCisjZGVmaW5lIEJSQU5DSDMyX0FOTlVMKFRZUEUsIFBSRURJQ1QsIERFU1QpIFwKKwlUWVBFLGEsUFJFRElDVAklaWNjLCBERVNUCisjZGVmaW5lIEJSQU5DSF9SRUdfWkVSTyhQUkVESUNULCBSRUcsIERFU1QpIFwKKwlicnosUFJFRElDVAlSRUcsIERFU1QKKyNkZWZpbmUgQlJBTkNIX1JFR19aRVJPX0FOTlVMKFBSRURJQ1QsIFJFRywgREVTVCkgXAorCWJyeixhLFBSRURJQ1QJUkVHLCBERVNUCisjZGVmaW5lIEJSQU5DSF9SRUdfTk9UX1pFUk8oUFJFRElDVCwgUkVHLCBERVNUKSBcCisJYnJueixQUkVESUNUCVJFRywgREVTVAorI2RlZmluZSBCUkFOQ0hfUkVHX05PVF9aRVJPX0FOTlVMKFBSRURJQ1QsIFJFRywgREVTVCkgXAorCWJybnosYSxQUkVESUNUCVJFRywgREVTVAorI2Vsc2UKKyNkZWZpbmUgQlJBTkNIMzIoVFlQRSwgUFJFRElDVCwgREVTVCkgXAorCVRZUEUJCURFU1QKKyNkZWZpbmUgQlJBTkNIMzJfQU5OVUwoVFlQRSwgUFJFRElDVCwgREVTVCkgXAorCVRZUEUsYQkJREVTVAorI2RlZmluZSBCUkFOQ0hfUkVHX1pFUk8oUFJFRElDVCwgUkVHLCBERVNUKSBcCisJY21wCQlSRUcsIDA7IFwKKwliZQkJREVTVAorI2RlZmluZSBCUkFOQ0hfUkVHX1pFUk9fQU5OVUwoUFJFRElDVCwgUkVHLCBERVNUKSBcCisJY21wCQlSRUcsIDA7IFwKKwliZSxhCQlERVNUCisjZGVmaW5lIEJSQU5DSF9SRUdfTk9UX1pFUk8oUFJFRElDVCwgUkVHLCBERVNUKSBcCisJY21wCQlSRUcsIDA7IFwKKwlibmUJCURFU1QKKyNkZWZpbmUgQlJBTkNIX1JFR19OT1RfWkVST19BTk5VTChQUkVESUNULCBSRUcsIERFU1QpIFwKKwljbXAJCVJFRywgMDsgXAorCWJuZSxhCQlERVNUCisjZW5kaWYKKworI2VuZGlmIC8qIF9TUEFSQ19BU01fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKaW5kZXggMmM3MWVjNGEuLjU5ODJjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXRvbWljXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaApAQCAtMTEyLDE3ICsxMTIsMTAgQEAKICNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLwotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCW1lbWJhcl9zdG9yZWxvYWRfbG9hZGxvYWQoKTsKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJbWVtYmFyX3N0b3JlbG9hZF9zdG9yZXN0b3JlKCk7Ci0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQltZW1iYXJfc3RvcmVsb2FkX2xvYWRsb2FkKCk7Ci0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpOwotI2Vsc2UKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CiAjZW5kaWYgLyogIShfX0FSQ0hfU1BBUkM2NF9BVE9NSUNfXykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oCmluZGV4IGJiODdiODAuLmU3MmFjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaApAQCAtMjMsMTMgKzIzLDggQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CiAKLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCW1lbWJhcl9zdG9yZWxvYWRfbG9hZGxvYWQoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpCi0jZWxzZQogI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKLSNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaAppbmRleCAxMDlhZTI0Li5iYWZlNWE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaApAQCAtMjcxMyw2ICsyNzEzLDMwIEBACiAgKi8KICNkZWZpbmUgSFZfRkFTVF9TRVRfUEVSRlJFRwkJMHgxMDEKIAorI2RlZmluZSBIVl9OMl9QRVJGX1NQQVJDX0NUTAkJMHgwCisjZGVmaW5lIEhWX04yX1BFUkZfRFJBTV9DVEwwCQkweDEKKyNkZWZpbmUgSFZfTjJfUEVSRl9EUkFNX0NOVDAJCTB4MgorI2RlZmluZSBIVl9OMl9QRVJGX0RSQU1fQ1RMMQkJMHgzCisjZGVmaW5lIEhWX04yX1BFUkZfRFJBTV9DTlQxCQkweDQKKyNkZWZpbmUgSFZfTjJfUEVSRl9EUkFNX0NUTDIJCTB4NQorI2RlZmluZSBIVl9OMl9QRVJGX0RSQU1fQ05UMgkJMHg2CisjZGVmaW5lIEhWX04yX1BFUkZfRFJBTV9DVEwzCQkweDcKKyNkZWZpbmUgSFZfTjJfUEVSRl9EUkFNX0NOVDMJCTB4OAorCisjZGVmaW5lIEhWX0ZBU1RfTjJfR0VUX1BFUkZSRUcJCTB4MTA0CisjZGVmaW5lIEhWX0ZBU1RfTjJfU0VUX1BFUkZSRUcJCTB4MTA1CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9uaWFnYXJhX2dldHBlcmYodW5zaWduZWQgbG9uZyByZWcsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnZhbCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9uaWFnYXJhX3NldHBlcmYodW5zaWduZWQgbG9uZyByZWcsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X25pYWdhcmEyX2dldHBlcmYodW5zaWduZWQgbG9uZyByZWcsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICp2YWwpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbmlhZ2FyYTJfc2V0cGVyZih1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNlbmRpZgorCiAvKiBNTVUgc3RhdGlzdGljcyBzZXJ2aWNlcy4KICAqCiAgKiBUaGUgaHlwZXJ2aXNvciBtYWludGFpbnMgTU1VIHN0YXRpc3RpY3MgYW5kIHByaXZpbGVnZWQgY29kZSBwcm92aWRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKaW5kZXggZmUyMDVjYy4uZWE0MzA1NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCkBAIC0xMiw0ICsxMiw1IEBACiAKICNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpCShpcnEpCiAKK2V4dGVybiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzY0LmgKaW5kZXggNzE2NzNlYy4uZDQ3ZDRhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV82NC5oCkBAIC02Niw2ICs2Niw5IEBACiBleHRlcm4gdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBmaXh1cF9pcnFzKHZvaWQpOwogCitleHRlcm4gaW50IHJlZ2lzdGVyX3BlcmZjdHJfaW50cih2b2lkICgqaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX2ludHIodm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICopKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9zb2Z0aW50KHVuc2lnbmVkIGxvbmcgYml0cykKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3IJJTAsIDB4MCwgJSVzZXRfc29mdGludCIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxZmxhZ3NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxZmxhZ3NfNjQuaAppbmRleCBiYjQyZTU5Li44YjQ5YmY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycWZsYWdzXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFmbGFnc182NC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIF9BU01fSVJRRkxBR1NfSAogI2RlZmluZSBfQVNNX0lSUUZMQUdTX0gKIAorI2luY2x1ZGUgPGFzbS9waWwuaD4KKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKQEAgLTQwLDkgKzQyLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIndycHIJMTUsICUlcGlsIgorCQkid3JwcgklMCwgJSVwaWwiCiAJCTogLyogbm8gb3V0cHV0cyAqLwotCQk6IC8qIG5vIGlucHV0cyAqLworCQk6ICJpIiAoUElMX05PUk1BTF9NQVgpCiAJCTogIm1lbW9yeSIKIAkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZTgyY2Y5YS4uZmY4ZTAyZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDggKzEsMjQgQEAKLSNpZm5kZWYgX19fQVNNX1NQQVJDX01PRFVMRV9ICi0jZGVmaW5lIF9fX0FTTV9TUEFSQ19NT0RVTEVfSAotI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCi0jaW5jbHVkZSA8YXNtL21vZHVsZV82NC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxhc20vbW9kdWxlXzMyLmg+Ci0jZW5kaWYKLSNlbmRpZgorI2lmbmRlZiBfX1NQQVJDX01PRFVMRV9ICisjZGVmaW5lIF9fU1BBUkNfTU9EVUxFX0gKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7IH07CisKKy8qCisgKiBVc2Ugc29tZSBwcmVwcm9jZXNzb3IgbWFnaWMgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbAorICogZm9yIHNwYXJjMzIgYW5kIHNwYXJjNjQuCisgKiBFbGZfQWRkciBiZWNvbWVzIEVsZjMyX0FkZHIgZm9yIHNwYXJjMzIgYW5kIEVsZjY0X0FkZHIgZm9yIHNwYXJjNjQKKyAqLworI2RlZmluZSBfX19FTEYoYSwgYiwgYykgYSMjYiMjYworI2RlZmluZSBfX0VMRihhLCBiLCBjKSAgX19fRUxGKGEsIGIsIGMpCisjZGVmaW5lICBfRWxmKHQpICAgICAgICBfX0VMRihFbGYsIENPTkZJR19CSVRTLCB0KQorI2RlZmluZSAgX0VMRih0KSAgICAgICAgX19FTEYoRUxGLCBDT05GSUdfQklUUywgdCkKKworI2RlZmluZSBFbGZfU2hkciAgICAgX0VsZihfU2hkcikKKyNkZWZpbmUgRWxmX1N5bSAgICAgIF9FbGYoX1N5bSkKKyNkZWZpbmUgRWxmX0VoZHIgICAgIF9FbGYoX0VoZHIpCisjZGVmaW5lIEVsZl9SZWxhICAgICBfRWxmKF9SZWxhKQorI2RlZmluZSBFbGZfQWRkciAgICAgX0VsZihfQWRkcikKKworI2RlZmluZSBFTEZfUl9TWU0gICAgX0VMRihfUl9TWU0pCisjZGVmaW5lIEVMRl9SX1RZUEUgICBfRUxGKF9SX1RZUEUpCisKKyNlbmRpZiAvKiBfX1NQQVJDX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21vZHVsZV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tb2R1bGVfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkOWU2Ny4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21vZHVsZV8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9BU01fU1BBUkNfTU9EVUxFX0gKLSNkZWZpbmUgX0FTTV9TUEFSQ19NT0RVTEVfSAotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsgfTsKLSNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgotI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQotI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCi0jZW5kaWYgLyogX0FTTV9TUEFSQ19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tb2R1bGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW9kdWxlXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNzdiYTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tb2R1bGVfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1NQQVJDNjRfTU9EVUxFX0gKLSNkZWZpbmUgX0FTTV9TUEFSQzY0X01PRFVMRV9ICi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OwotI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKLSNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BlbnByb21fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BlbnByb21fMzIuaAppbmRleCA4YjE2NDlmLi44NzVkYTM1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29wZW5wcm9tXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vcGVucHJvbV8zMi5oCkBAIC0xNzAsOSArMTcwLDkgQEAKIHN0cnVjdCBsaW51eF9ub2Rlb3BzIHsKIAlpbnQgKCpub19uZXh0bm9kZSkoaW50IG5vZGUpOwogCWludCAoKm5vX2NoaWxkKShpbnQgbm9kZSk7Ci0JaW50ICgqbm9fcHJvcGxlbikoaW50IG5vZGUsIGNoYXIgKm5hbWUpOwotCWludCAoKm5vX2dldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwpOwotCWludCAoKm5vX3NldHByb3ApKGludCBub2RlLCBjaGFyICpuYW1lLCBjaGFyICp2YWwsIGludCBsZW4pOworCWludCAoKm5vX3Byb3BsZW4pKGludCBub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKKwlpbnQgKCpub19nZXRwcm9wKShpbnQgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsKTsKKwlpbnQgKCpub19zZXRwcm9wKShpbnQgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsLCBpbnQgbGVuKTsKIAljaGFyICogKCpub19uZXh0cHJvcCkoaW50IG5vZGUsIGNoYXIgKm5hbWUpOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vcGxpYl8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vcGxpYl8zMi5oCmluZGV4IDY5OWRhMDUuLjczZDQ1NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BsaWJfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29wbGliXzMyLmgKQEAgLTEzNiw3ICsxMzYsNyBAQAogZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgY2hhcmFjdGVyKTsKIAogLyogUHJvbSdzIGludGVybmFsIHJvdXRpbmVzLCBkb24ndCB1c2UgaW4ga2VybmVsL2Jvb3QgY29kZS4gKi8KLWV4dGVybiB2b2lkIHByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiB2b2lkIHByb21fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGV4dGVybiB2b2lkIHByb21fd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKIAogLyogTXVsdGlwcm9jZXNzb3Igb3BlcmF0aW9ucy4uLiAqLwpAQCAtMTk5LDEyICsxOTksMTIgQEAKIC8qIEdldCB0aGUgbGVuZ3RoLCBhdCB0aGUgcGFzc2VkIG5vZGUsIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSB0eXBlLgogICogUmV0dXJucyAtMSBvbiBlcnJvciAoaWUuIG5vIHN1Y2ggcHJvcGVydHkgYXQgdGhpcyBub2RlKS4KICAqLwotZXh0ZXJuIGludCBwcm9tX2dldHByb3BsZW4oaW50IHRoaXNub2RlLCBjaGFyICpwcm9wZXJ0eSk7CitleHRlcm4gaW50IHByb21fZ2V0cHJvcGxlbihpbnQgdGhpc25vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5KTsKIAogLyogRmV0Y2ggdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSB1c2luZyB0aGUgZ2l2ZW4gYnVmZmVyLiAgUmV0dXJucwogICogdGhlIG51bWJlciBvZiBieXRlcyB0aGUgcHJvbSBwdXQgaW50byB5b3VyIGJ1ZmZlciBvciAtMSBvbiBlcnJvci4KICAqLwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgcHJvbV9nZXRwcm9wZXJ0eShpbnQgdGhpc25vZGUsIGNoYXIgKnByb3BlcnR5LAorZXh0ZXJuIGludCBfX211c3RfY2hlY2sgcHJvbV9nZXRwcm9wZXJ0eShpbnQgdGhpc25vZGUsIGNvbnN0IGNoYXIgKnByb3BlcnR5LAogCQkJCQkgY2hhciAqcHJvcF9idWZmZXIsIGludCBwcm9wYnVmX3NpemUpOwogCiAvKiBBY3F1aXJlIGFuIGludGVnZXIgcHJvcGVydHkuICovCkBAIC0yNDYsNyArMjQ2LDcgQEAKIC8qIFNldCB0aGUgaW5kaWNhdGVkIHByb3BlcnR5IGF0IHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIHBhc3NlZCB2YWx1ZS4KICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB5b3VyIHZhbHVlIHRoYXQgdGhlIHByb20gdG9vay4KICAqLwotZXh0ZXJuIGludCBwcm9tX3NldHByb3AoaW50IG5vZGUsIGNoYXIgKnByb3BfbmFtZSwgY2hhciAqcHJvcF92YWx1ZSwKK2V4dGVybiBpbnQgcHJvbV9zZXRwcm9wKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wX25hbWUsIGNoYXIgKnByb3BfdmFsdWUsCiAJCQlpbnQgdmFsdWVfc2l6ZSk7CiAKIGV4dGVybiBpbnQgcHJvbV9wYXRodG9pbm9kZShjaGFyICpwYXRoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCmluZGV4IDcxODE5YmIuLmQ1NzM4MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9waWwuaApAQCAtMTAsNyArMTAsMTIgQEAKICAqCiAgKiBJbiBmYWN0IGFueSBYQ0FMTCB3aGljaCBoYXMgdG8gZXRyYXAvcnRyYXAgaGFzIGEgcHJvYmxlbSBiZWNhdXNlCiAgKiBpdCBpcyBkaWZmaWN1bHQgdG8gcHJldmVudCBydHJhcCBmcm9tIHJ1bm5pbmcgQkgncywgYW5kIHRoYXQgd291bGQKLSAqIG5lZWQgdG8gYmUgZG9uZSBpZiB0aGUgWENBTEwgYXJyaXZlZCB3aGlsZSAlcGlsPT0xNS4KKyAqIG5lZWQgdG8gYmUgZG9uZSBpZiB0aGUgWENBTEwgYXJyaXZlZCB3aGlsZSAlcGlsPT1QSUxfTk9STUFMX01BWC4KKyAqCisgKiBGaW5hbGx5LCBpbiBvcmRlciB0byBoYW5kbGUgcHJvZmlsaW5nIGV2ZW50cyBldmVuIHdoZW4gYQorICogbG9jYWxfaXJxX2Rpc2FibGUoKSBpcyBpbiBwcm9ncmVzcywgd2Ugb25seSBkaXNhYmxlIHVwIHRvIGxldmVsIDE0CisgKiBpbnRlcnJ1cHRzLiAgUHJvZmlsZSBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdHMgYXJyaXZlIGF0IGxldmVsCisgKiAxNS4KICAqLwogI2RlZmluZSBQSUxfU01QX0NBTExfRlVOQwkxCiAjZGVmaW5lIFBJTF9TTVBfUkVDRUlWRV9TSUdOQUwJMgpAQCAtMTgsNSArMjMsNyBAQAogI2RlZmluZSBQSUxfU01QX0NUWF9ORVdfVkVSU0lPTgk0CiAjZGVmaW5lIFBJTF9ERVZJQ0VfSVJRCQk1CiAjZGVmaW5lIFBJTF9TTVBfQ0FMTF9GVU5DX1NOR0wJNgorI2RlZmluZSBQSUxfTk9STUFMX01BWAkJMTQKKyNkZWZpbmUgUElMX05NSQkJCTE1CiAKICNlbmRpZiAvKiAhKF9TUEFSQzY0X1BJTF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGVjMjFhNDUuLmU1ODBmNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEsOCArMSwyNyBAQAotI2lmbmRlZiBfX19BU01fU1BBUkNfU0NBVFRFUkxJU1RfSAotI2RlZmluZSBfX19BU01fU1BBUkNfU0NBVFRFUkxJU1RfSAotI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCi0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0XzY0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdF8zMi5oPgorI2lmbmRlZiBfU1BBUkNfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfU1BBUkNfU0NBVFRFUkxJU1RfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyNpZmRlZiBDT05GSUdfREVCVUdfU0cKKwl1bnNpZ25lZCBsb25nCXNnX21hZ2ljOwogI2VuZGlmCi0jZW5kaWYKKwl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0OworCisJdW5zaWduZWQgaW50CWxlbmd0aDsKKworCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7CisJX191MzIJCWRtYV9sZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAJKChzZyktPmRtYV9sZW5ndGgpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCisKKyNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KKworI2VuZGlmIC8qICEoX1NQQVJDX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0XzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0XzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MjYwOWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF8zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkNfU0NBVFRFUkxJU1RfSAotI2RlZmluZSBfU1BBUkNfU0NBVFRFUkxJU1RfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLQl1bnNpZ25lZCBsb25nIHNnX21hZ2ljOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZyBwYWdlX2xpbms7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXVuc2lnbmVkIGludCBsZW5ndGg7Ci0KLQlfX3UzMiBkdm1hX2FkZHJlc3M7IC8qIEEgcGxhY2UgdG8gaGFuZyBob3N0LXNwZWNpZmljIGFkZHJlc3NlcyBhdC4gKi8KLQlfX3UzMiBkdm1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICgoc2cpLT5kdm1hX2FkZHJlc3MpCi0jZGVmaW5lIHNnX2RtYV9sZW4oc2cpICAgICAoKHNnKS0+ZHZtYV9sZW5ndGgpCi0KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKH4wVUwpCi0KLSNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KLQotI2VuZGlmIC8qICEoX1NQQVJDX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0XzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0XzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmQwNTguLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkM2NF9TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9TUEFSQzY0X1NDQVRURVJMSVNUX0gKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZwlzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcJcGFnZV9saW5rOwotCXVuc2lnbmVkIGludAlvZmZzZXQ7Ci0KLQl1bnNpZ25lZCBpbnQJbGVuZ3RoOwotCi0JZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKLQlfX3UzMgkJZG1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgIAkoKHNnKS0+ZG1hX2xlbmd0aCkKLQotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKLQotI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgotCi0jZW5kaWYgLyogIShfU1BBUkM2NF9TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IGM3YzY5YjAuLjBiMDU1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTEsOCArMSwxMCBAQAotI2lmbmRlZiBfX19BU01fU1BBUkNfU0VDVElPTlNfSAotI2RlZmluZSBfX19BU01fU1BBUkNfU0VDVElPTlNfSAotI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCi0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zXzY0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9zZWN0aW9uc18zMi5oPgotI2VuZGlmCisjaWZuZGVmIF9fU1BBUkNfU0VDVElPTlNfSAorI2RlZmluZSBfX1NQQVJDX1NFQ1RJT05TX0gKKworLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCisvKiBzcGFyYyBlbnRyeSBwb2ludCAqLworZXh0ZXJuIGNoYXIgX3N0YXJ0W107CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWN0aW9uc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWN0aW9uc18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODMyODQxLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2VjdGlvbnNfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkNfU0VDVElPTlNfSAotI2RlZmluZSBfU1BBUkNfU0VDVElPTlNfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NlY3Rpb25zXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NlY3Rpb25zXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNGI5ZmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZWN0aW9uc182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NFQ1RJT05TX0gKLSNkZWZpbmUgX1NQQVJDNjRfU0VDVElPTlNfSAotCi0vKiBub3RoaW5nIHRvIHNlZSwgbW92ZSBhbG9uZyAqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+Ci0KLWV4dGVybiBjaGFyIF9zdGFydFtdOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAppbmRleCAxMjBjZmU0Li5jNGQyNzRkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCkBAIC0xMywxNyArMTMsMTIgQEAKICAqIGFuZCByZWJ1aWxkIHlvdXIga2VybmVsLgogICovCiAKLS8qIEFsbCBvZiB0aGVzZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIGV4cGVjdGVkIHRvIHdvcmsgcHJvcGVybHkKLSAqIGV2ZW4gaW4gYW4gUk1PIG1lbW9yeSBtb2RlbCwgd2hpY2ggY3VycmVudGx5IGlzIHdoYXQgdGhlIGtlcm5lbAotICogcnVucyBpbi4KLSAqCi0gKiBUaGVyZSBpcyBhbm90aGVyIGlzc3VlLiAgQmVjYXVzZSB3ZSBwbGF5IGdhbWVzIHRvIHNhdmUgY3ljbGVzCi0gKiBpbiB0aGUgbm9uLWNvbnRlbnRpb24gY2FzZSwgd2UgbmVlZCB0byBiZSBleHRyYSBjYXJlZnVsIGFib3V0Ci0gKiBicmFuY2ggdGFyZ2V0cyBpbnRvIHRoZSAic3Bpbm5pbmciIGNvZGUuICBUaGV5IGxpdmUgaW4gdGhlaXIKLSAqIG93biBzZWN0aW9uLCBidXQgdGhlIG5ld2VyIFY5IGJyYW5jaGVzIGhhdmUgYSBzaG9ydGVyIHJhbmdlCi0gKiB0aGFuIHRoZSB0cmFkaXRpb25hbCAzMi1iaXQgc3BhcmMgYnJhbmNoIHZhcmlhbnRzLiAgVGhlIHJ1bGUKLSAqIGlzIHRoYXQgdGhlIGJyYW5jaGVzIHRoYXQgZ28gaW50byBhbmQgb3V0IG9mIHRoZSBzcGlubmVyIHNlY3Rpb25zCi0gKiBtdXN0IGJlIHByZS1WOSBicmFuY2hlcy4KKy8qIEJlY2F1c2Ugd2UgcGxheSBnYW1lcyB0byBzYXZlIGN5Y2xlcyBpbiB0aGUgbm9uLWNvbnRlbnRpb24gY2FzZSwgd2UKKyAqIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCBhYm91dCBicmFuY2ggdGFyZ2V0cyBpbnRvIHRoZSAic3Bpbm5pbmciCisgKiBjb2RlLiAgVGhleSBsaXZlIGluIHRoZWlyIG93biBzZWN0aW9uLCBidXQgdGhlIG5ld2VyIFY5IGJyYW5jaGVzCisgKiBoYXZlIGEgc2hvcnRlciByYW5nZSB0aGFuIHRoZSB0cmFkaXRpb25hbCAzMi1iaXQgc3BhcmMgYnJhbmNoCisgKiB2YXJpYW50cy4gIFRoZSBydWxlIGlzIHRoYXQgdGhlIGJyYW5jaGVzIHRoYXQgZ28gaW50byBhbmQgb3V0IG9mCisgKiB0aGUgc3Bpbm5lciBzZWN0aW9ucyBtdXN0IGJlIHByZS1WOSBicmFuY2hlcy4KICAqLwogCiAjZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKGxwKQkoKGxwKS0+bG9jayAhPSAwKQpAQCAtMzgsMTIgKzMzLDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKICIxOglsZHN0dWIJCVslMV0sICUwXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCiAiCWJybnoscG4JCSUwLCAyZlxuIgogIgkgbm9wXG4iCiAiCS5zdWJzZWN0aW9uCTJcbiIKICIyOglsZHViCQlbJTFdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgogIglicm56LHB0CQklMCwgMmJcbiIKICIJIG5vcFxuIgogIgliYSxhLHB0CQklJXhjYywgMWJcbiIKQEAgLTU5LDcgKzUyLDYgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogIglsZHN0dWIJCVslMV0sICUwXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgogCTogIj1yIiAocmVzdWx0KQogCTogInIiIChsb2NrKQogCTogIm1lbW9yeSIpOwpAQCAtNzAsNyArNjIsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJCSNTdG9yZVN0b3JlIHwgI0xvYWRTdG9yZVxuIgogIglzdGIJCSUlZzAsIFslMF0iCiAJOiAvKiBObyBvdXRwdXRzICovCiAJOiAiciIgKGxvY2spCkBAIC04MywxNCArNzQsMTIgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogIjE6CWxkc3R1YgkJWyUyXSwgJTBcbiIKLSIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKICIJYnJueixwbgkJJTAsIDJmXG4iCiAiCSBub3BcbiIKICIJLnN1YnNlY3Rpb24JMlxuIgogIjI6CXJkcHIJCSUlcGlsLCAlMVxuIgogIgl3cnByCQklMywgJSVwaWxcbiIKICIzOglsZHViCQlbJTJdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgogIglicm56LHB0CQklMCwgM2JcbiIKICIJIG5vcFxuIgogIgliYSxwdAkJJSV4Y2MsIDFiXG4iCkBAIC0xMTMsMTIgKzEwMiwxMCBAQAogIjQ6CSBhZGQJCSUwLCAxLCAlMVxuIgogIgljYXMJCVslMl0sICUwLCAlMVxuIgogIgljbXAJCSUwLCAlMVxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgogIglibmUscG4JCSUlaWNjLCAxYlxuIgogIgkgbm9wXG4iCiAiCS5zdWJzZWN0aW9uCTJcbiIKICIyOglsZHN3CQlbJTJdLCAlMFxuIgotIgltZW1iYXIJCSNMb2FkTG9hZFxuIgogIglicmx6LHB0CQklMCwgMmJcbiIKICIJIG5vcFxuIgogIgliYSxhLHB0CQklJXhjYywgNGJcbiIKQEAgLTEzOSw3ICsxMjYsNiBAQAogIglhZGQJCSUwLCAxLCAlMVxuIgogIgljYXMJCVslMl0sICUwLCAlMVxuIgogIgljbXAJCSUwLCAlMVxuIgotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuIgogIglibmUscG4JCSUlaWNjLCAxYlxuIgogIgkgbW92CQkxLCAlMFxuIgogIjI6IgpAQCAtMTU1LDcgKzE0MSw2IEBACiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iCW1lbWJhcgkjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCiAiMToJbGR1dwlbJTJdLCAlMFxuIgogIglzdWIJJTAsIDEsICUxXG4iCiAiCWNhcwlbJTJdLCAlMCwgJTFcbiIKQEAgLTE3OSwxMiArMTY0LDEwIEBACiAiNDoJIG9yCQklMCwgJTMsICUxXG4iCiAiCWNhcwkJWyUyXSwgJTAsICUxXG4iCiAiCWNtcAkJJTAsICUxXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCiAiCWJuZSxwbgkJJSVpY2MsIDFiXG4iCiAiCSBub3BcbiIKICIJLnN1YnNlY3Rpb24JMlxuIgogIjI6CWxkdXcJCVslMl0sICUwXG4iCi0iCW1lbWJhcgkJI0xvYWRMb2FkXG4iCiAiCWJybnoscHQJCSUwLCAyYlxuIgogIgkgbm9wXG4iCiAiCWJhLGEscHQJCSUleGNjLCA0YlxuIgpAQCAtMTk3LDcgKzE4MCw2IEBACiBzdGF0aWMgdm9pZCBpbmxpbmUgX193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpsb2NrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJCSNMb2FkU3RvcmUgfCAjU3RvcmVTdG9yZVxuIgogIglzdHcJCSUlZzAsIFslMF0iCiAJOiAvKiBubyBvdXRwdXRzICovCiAJOiAiciIgKGxvY2spCkBAIC0yMTcsNyArMTk5LDYgQEAKICIJIG9yCQklMCwgJTQsICUxXG4iCiAiCWNhcwkJWyUzXSwgJTAsICUxXG4iCiAiCWNtcAkJJTAsICUxXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCiAiCWJuZSxwbgkJJSVpY2MsIDFiXG4iCiAiCSBub3BcbiIKICIJbW92CQkxLCAlMlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGl0ZmlyZS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGl0ZmlyZS5oCmluZGV4IDk4NWVhN2UuLmYwZDBjNDBjNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGl0ZmlyZS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpdGZpcmUuaApAQCAtNiw2ICs2LDggQEAKICNpZm5kZWYgX1NQQVJDNjRfU1BJVEZJUkVfSAogI2RlZmluZSBfU1BBUkM2NF9TUElURklSRV9ICiAKKyNpZmRlZiBDT05GSUdfU1BBUkM2NAorCiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogCiAvKiBUaGUgZm9sbG93aW5nIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUgYWNjZXNzaWJsZSB2aWEgQVNJX0RNTVUKQEAgLTMzOCw1ICszNDAsNSBAQAogfQogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCi0KKyNlbmRpZiAvKiBDT05GSUdfU1BBUkM2NCAqLwogI2VuZGlmIC8qICEoX1NQQVJDNjRfU1BJVEZJUkVfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDg2MjNmYzQuLjc5YzFhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMTUsNiArMTUsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByb2JlX2lycV9tYXNrKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXJldHVybiAwOworfQorCiAvKgogICogU3BhcmMgKGdlbmVyYWwpIENQVSB0eXBlcwogICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCA4NzU5ZjJhLi42YzA3NzgxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTU5LDIwICs1OSw5IEBACiAJCQkgICAgIDogOiA6ICJtZW1vcnkiKTsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBtYigpCVwKLQltZW1iYXJfc2FmZSgiI0xvYWRMb2FkIHwgI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlIHwgI1N0b3JlTG9hZCIpCi0jZGVmaW5lIHJtYigpCVwKLQltZW1iYXJfc2FmZSgiI0xvYWRMb2FkIikKLSNkZWZpbmUgd21iKCkJXAotCW1lbWJhcl9zYWZlKCIjU3RvcmVTdG9yZSIpCi0jZGVmaW5lIG1lbWJhcl9zdG9yZWxvYWQoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKQotI2RlZmluZSBtZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZSIpCi0jZGVmaW5lIG1lbWJhcl9zdG9yZWxvYWRfbG9hZGxvYWQoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQgfCAjTG9hZExvYWQiKQotI2RlZmluZSBtZW1iYXJfc3RvcmVzdG9yZV9sb2Fkc3RvcmUoKSBcCi0JbWVtYmFyX3NhZmUoIiNTdG9yZVN0b3JlIHwgI0xvYWRTdG9yZSIpCisjZGVmaW5lIG1iKCkJbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKQorI2RlZmluZSBybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQorI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQogCiAjZW5kaWYKIApAQCAtODAsMjAgKzY5LDIwIEBACiAKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIHNldF9tYihfX3ZhciwgX192YWx1ZSkgXAotCWRvIHsgX192YXIgPSBfX3ZhbHVlOyBtZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsgfSB3aGlsZSgwKQorCWRvIHsgX192YXIgPSBfX3ZhbHVlOyBtZW1iYXJfc2FmZSgiI1N0b3JlTG9hZCIpOyB9IHdoaWxlKDApCiAKICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIHNtcF9tYigpCW1iKCkKICNkZWZpbmUgc21wX3JtYigpCXJtYigpCiAjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCiAjZWxzZQogI2RlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQogI2RlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6OjoibWVtb3J5IikKICNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCisKICNkZWZpbmUgZmx1c2hpKGFkZHIpCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmx1c2ggJTAiIDogOiAiciIgKGFkZHIpIDogIm1lbW9yeSIpCiAKICNkZWZpbmUgZmx1c2h3X2FsbCgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaHciKQpAQCAtMTA3LDExICs5NiwxMiBAQAogICogYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYzpzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdCgpCiAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSByZXNldF9waWMoKSAgICAJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImJhLHB0CSV4Y2MsIDk5ZlxuXHQiCQlcCisjZGVmaW5lIHdyaXRlX3BpYyhfX3ApICAJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYmEscHQJJSV4Y2MsIDk5ZlxuXHQiCQlcCiAJCQkgICAgICIuYWxpZ24JNjRcbiIJCQlcCi0JCQkgICI5OTp3cgklZzAsIDB4MCwgJXBpY1xuXHQiCVwKLQkJCSAgICAgInJkCSVwaWMsICVnMCIpCisJCQkgICI5OTp3cgklMCwgMHgwLCAlJXBpY1xuXHQiCVwKKwkJCSAgICAgInJkCSUlcGljLCAlJWcwIiA6IDogInIiIChfX3ApKQorI2RlZmluZSByZXNldF9waWMoKQl3cml0ZV9waWMoMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMTcwLDYgKzE2MCw3IEBACiAJInN0YgklJW81LCBbJSVnNiArICU1XVxuXHQiCQkJCQlcCiAJInJkcHIJJSVjd3AsICUlbzVcblx0IgkJCQkJXAogCSJzdGIJJSVvNSwgWyUlZzYgKyAlOF1cblx0IgkJCQkJXAorCSJ3cnByCSUlZzAsIDE1LCAlJXBpbFxuXHQiCQkJCQlcCiAJIm1vdgklNCwgJSVnNlxuXHQiCQkJCQkJXAogCSJsZHViCVslNCArICU4XSwgJSVnMVxuXHQiCQkJCQlcCiAJIndycHIJJSVnMSwgJSVjd3Bcblx0IgkJCQkJXApAQCAtMTgwLDYgKzE3MSw3IEBACiAJImxkeAlbJSVzcCArIDIwNDcgKyAweDcwXSwgJSVpNlxuXHQiCQkJCVwKIAkibGR4CVslJXNwICsgMjA0NyArIDB4NzhdLCAlJWk3XG5cdCIJCQkJXAogCSJsZHgJWyUlZzYgKyAlOV0sICUlZzRcblx0IgkJCQkJXAorCSJ3cnByCSUlZzAsIDE0LCAlJXBpbFxuXHQiCQkJCQlcCiAJImJyeixwdCAlJW83LCBzd2l0Y2hfdG9fcGNcblx0IgkJCQkJXAogCSIgbW92CSUlZzcsICUwXG5cdCIJCQkJCQlcCiAJInNldGhpCSUlaGkocmV0X2Zyb21fc3lzY2FsbCksICUlZzFcblx0IgkJCVwKQEAgLTIwOSwxNCArMjAxLDEyIEBACiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgogIgltb3YJCSUwLCAlMVxuIgogIjE6CWxkdXcJCVslNF0sICUyXG4iCiAiCWNhcwkJWyU0XSwgJTIsICUwXG4iCiAiCWNtcAkJJTIsICUwXG4iCiAiCWJuZSxhLHBuCSUlaWNjLCAxYlxuIgogIgkgbW92CQklMSwgJTBcbiIKLSIJbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcbiIKIAk6ICI9JnIiICh2YWwpLCAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQogCTogIjAiICh2YWwpLCAiciIgKG0pCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0yMjgsMTQgKzIxOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIgltZW1iYXIJCSNTdG9yZUxvYWQgfCAjTG9hZExvYWRcbiIKICIJbW92CQklMCwgJTFcbiIKICIxOglsZHgJCVslNF0sICUyXG4iCiAiCWNhc3gJCVslNF0sICUyLCAlMFxuIgogIgljbXAJCSUyLCAlMFxuIgogIglibmUsYSxwbgklJXhjYywgMWJcbiIKICIJIG1vdgkJJTEsICUwXG4iCi0iCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG4iCiAJOiAiPSZyIiAodmFsKSwgIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKIAk6ICIwIiAodmFsKSwgInIiIChtKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMjcyLDkgKzI2MCw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCBpbnQgb2xkLCBpbnQgbmV3KQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuIgotCQkJICAgICAiY2FzIFslMl0sICUzLCAlMFxuXHQiCi0JCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJjYXMgWyUyXSwgJTMsICUwIgogCQkJICAgICA6ICI9JnIiIChuZXcpCiAJCQkgICAgIDogIjAiIChuZXcpLCAiciIgKG0pLCAiciIgKG9sZCkKIAkJCSAgICAgOiAibWVtb3J5Iik7CkBAIC0yODUsOSArMjcxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbXB4Y2hnX3U2NCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhciAjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG4iCi0JCQkgICAgICJjYXN4IFslMl0sICUzLCAlMFxuXHQiCi0JCQkgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJjYXN4IFslMl0sICUzLCAlMCIKIAkJCSAgICAgOiAiPSZyIiAobmV3KQogCQkJICAgICA6ICIwIiAobmV3KSwgInIiIChtKSwgInIiIChvbGQpCiAJCQkgICAgIDogIm1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgKaW5kZXggNzZlNDI5OS4uODNjNTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oCkBAIC01MCw4ICs1MCw2IEBACiAjZGVmaW5lIFRTQl9UQUdfSU5WQUxJRF9CSVQJNDYKICNkZWZpbmUgVFNCX1RBR19JTlZBTElEX0hJR0gJKDEgPDwgKFRTQl9UQUdfSU5WQUxJRF9CSVQgLSAzMikpCiAKLSNkZWZpbmUgVFNCX01FTUJBUgltZW1iYXIJI1N0b3JlU3RvcmUKLQogLyogU29tZSBjcHVzIHN1cHBvcnQgcGh5c2ljYWwgYWRkcmVzcyBxdWFkIGxvYWRzLiAgV2Ugd2FudCB0byB1c2UKICAqIHRob3NlIGlmIHBvc3NpYmxlIHNvIHdlIGRvbid0IG5lZWQgdG8gaGFyZC1sb2NrIHRoZSBUU0IgbWFwcGluZwogICogaW50byB0aGUgVExCLiAgV2UgZW5jb2RlIHNvbWUgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcgaW4gb3JkZXIgdG8KQEAgLTEyOCwxMyArMTI2LDExIEBACiAJY21wCVJFRzEsIFJFRzI7CQlcCiAJYm5lLHBuCSVpY2MsIDk5YjsJCVwKIAkgbm9wOwkJCQlcCi0JVFNCX01FTUJBUgogCiAjZGVmaW5lIFRTQl9XUklURShUU0IsIFRURSwgVEFHKSBcCiAJYWRkCVRTQiwgMHg4LCBUU0I7ICAgXAogCVRTQl9TVE9SRShUU0IsIFRURSk7ICAgICBcCiAJc3ViCVRTQiwgMHg4LCBUU0I7ICAgXAotCVRTQl9NRU1CQVI7ICAgICAgICAgICAgICBcCiAJVFNCX1NUT1JFKFRTQiwgVEFHKTsKIAogI2RlZmluZSBLVFNCX0xPQURfUVVBRChUU0IsIFJFRykgXApAQCAtMTUzLDEzICsxNDksMTEgQEAKIAljbXAJUkVHMSwgUkVHMjsJCVwKIAlibmUscG4JJWljYywgOTliOwkJXAogCSBub3A7CQkJCVwKLQlUU0JfTUVNQkFSCiAKICNkZWZpbmUgS1RTQl9XUklURShUU0IsIFRURSwgVEFHKSBcCiAJYWRkCVRTQiwgMHg4LCBUU0I7ICAgXAogCXN0eGEJVFRFLCBbVFNCXSBBU0lfTjsgICAgIFwKIAlzdWIJVFNCLCAweDgsIFRTQjsgICBcCi0JVFNCX01FTUJBUjsgICAgICAgICAgICAgIFwKIAlzdHhhCVRBRywgW1RTQl0gQVNJX047CiAKIAkvKiBEbyBhIGtlcm5lbCBwYWdlIHRhYmxlIHdhbGsuICBMZWF2ZXMgcGh5c2ljYWwgUFRFIHBvaW50ZXIgaW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHRhYmxlLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3R0YWJsZS5oCmluZGV4IDU3MDhiYTIuLjQ4ZjI4MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHRhYmxlLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90dGFibGUuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX1NQQVJDNjRfVFRBQkxFX0gKIAogI2luY2x1ZGUgPGFzbS91dHJhcC5oPgorI2luY2x1ZGUgPGFzbS9waWwuaD4KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpAQCAtMTIzLDcgKzEyNCw3IEBACiAKICNkZWZpbmUgVFJBUF9JUlEocm91dGluZSwgbGV2ZWwpCQkJXAogCXJkcHIJJXBpbCwgJWcyOwkJCQlcCi0Jd3JwcgklZzAsIDE1LCAlcGlsOwkJCQlcCisJd3JwcgklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsOwkJXAogCXNldGhpCSVoaSgxZi00KSwgJWc3OwkJCQlcCiAJYmEscHQJJXhjYywgZXRyYXBfaXJxOwkJCVwKIAkgb3IJJWc3LCAlbG8oMWYtNCksICVnNzsJCQlcCkBAIC0xNDMsNyArMTQ0LDcgQEAKIAogI2RlZmluZSBUUkFQX0lSUShyb3V0aW5lLCBsZXZlbCkJCQlcCiAJcmRwcgklcGlsLCAlZzI7CQkJCVwKLQl3cnByCSVnMCwgMTUsICVwaWw7CQkJCVwKKwl3cnByCSVnMCwgUElMX05PUk1BTF9NQVgsICVwaWw7CQlcCiAJYmEscHQJJXhjYywgZXRyYXBfaXJxOwkJCVwKIAkgcmQJJXBjLCAlZzc7CQkJCVwKIAltb3YJbGV2ZWwsICVvMDsJCQkJXApAQCAtMTUzLDYgKzE1NCwxNiBAQAogCiAjZW5kaWYKIAorI2RlZmluZSBUUkFQX05NSV9JUlEocm91dGluZSwgbGV2ZWwpCQkJXAorCXJkcHIJJXBpbCwgJWcyOwkJCQlcCisJd3JwcgklZzAsIFBJTF9OTUksICVwaWw7CQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX2lycTsJCQlcCisJIHJkCSVwYywgJWc3OwkJCQlcCisJbW92CWxldmVsLCAlbzA7CQkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8xOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX25taTsKKwogI2RlZmluZSBUUkFQX0lWRUMgVFJBUF9OT1NBVkUoZG9faXZlYykKIAogI2RlZmluZSBCVFJBUChsdmwpIFRSQVBfQVJHKGJhZF90cmFwLCBsdmwpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0MjA3ZmIzNi4uMDMxZjAzOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0xLDggKzEsNDQ0IEBACi0jaWZuZGVmIF9fX0FTTV9TUEFSQ19VTklTVERfSAotI2RlZmluZSBfX19BU01fU1BBUkNfVU5JU1REX0gKLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQotI2luY2x1ZGUgPGFzbS91bmlzdGRfNjQuaD4KKyNpZm5kZWYgX1NQQVJDX1VOSVNURF9ICisjZGVmaW5lIF9TUEFSQ19VTklTVERfSAorCisvKgorICogU3lzdGVtIGNhbGxzIHVuZGVyIHRoZSBTcGFyYy4KKyAqCisgKiBEb24ndCBiZSBzY2FyZWQgYnkgdGhlIHVnbHkgY2xvYmJlcnMsIGl0IGlzIHRoZSBvbmx5IHdheSBJIGNhbgorICogdGhpbmsgb2YgcmlnaHQgbm93IHRvIGZvcmNlIHRoZSBhcmd1bWVudHMgaW50byBmaXhlZCByZWdpc3RlcnMKKyAqIGJlZm9yZSB0aGUgdHJhcCBpbnRvIHRoZSBzeXN0ZW0gY2FsbCB3aXRoIGdjYyAnYXNtJyBzdGF0ZW1lbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKgorICogU3VuT1MgY29tcGF0aWJpbGl0eSBiYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKKyAqLworI2lmbmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjaWZuZGVmIF9fYXJjaDY0X18KKyNkZWZpbmUgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLworI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KKyNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLworI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9sY2hvd24zMiAgICAgICAgICAgIDMxIC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mY2hvd24zMiAgICAgICAgICAgIDMyIC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9jaG93bjMyICAgICAgICAgICAgIDM1IC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIgICAgICAgICAgICA0NCAvKiBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIgICAgICAgICAgICA1MyAvKiBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCiAjZWxzZQotI2luY2x1ZGUgPGFzbS91bmlzdGRfMzIuaD4KKyNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcJIDUyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCisjZW5kaWYKKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIDU0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgIDU1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfbW1hcDIJCSA1NiAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX3N5bWxpbmsgICAgICAgICAgICAgNTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWRsaW5rICAgICAgICAgICAgNTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2V4ZWN2ZSAgICAgICAgICAgICAgNTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VtYXNrICAgICAgICAgICAgICAgNjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nocm9vdCAgICAgICAgICAgICAgNjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzdGF0ICAgICAgICAgICAgICAgNjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzdGF0NjQJCSA2MyAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRwYWdlc2l6ZSAgICAgICAgIDY0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgIDY1IC8qIENvbW1vbiBpbiBuZXdlciAxLjMueCByZXZzLi4uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgIDY2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgIDY3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgIDY4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyICAgICAgICAgICA2OSAvKiBMaW51eCBzcGFyYzMyLCBzYnJrIHVuZGVyIFN1bk9TICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyICAgICAgICAgICA3MCAvKiBMaW51eCBzcGFyYzMyLCBzc3RrIHVuZGVyIFN1bk9TICAgICAgICAgICAgICovCisjZW5kaWYKKyNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIDcxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQzMiAgICAgICAgICA3MiAvKiBMaW51eCBzcGFyYzMyLCB2YWR2aXNlIHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZW5kaWYKKyNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgIDczIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgIDc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgIDc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl92aGFuZ3VwICAgICAgICAgICAgIDc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NAkJIDc3IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLworI2VuZGlmCisjZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICA3OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzICAgICAgICAgICA3OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzICAgICAgICAgICA4MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGdycCAgICAgICAgICAgICA4MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX05SX3NldGdyb3VwczMyICAgICAgICAgODIgLyogTGludXggc3BhcmMzMiwgc2V0cGdycCB1bmRlciBTdW5PUyAgICAgICAgICAqLworI2VuZGlmCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgICA4MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CSA4NCAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX3N3YXBvbiAgICAgICAgICAgICAgODUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGl0aW1lciAgICAgICAgICAgODYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9zZXR1aWQzMiAgICAgICAgICAgIDg3IC8qIExpbnV4IHNwYXJjMzIsIGdldGhvc3RuYW1lIHVuZGVyIFN1bk9TICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX3NldGhvc3RuYW1lICAgICAgICAgODggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9zZXRnaWQzMiAgICAgICAgICAgIDg5IC8qIExpbnV4IHNwYXJjMzIsIGdldGR0YWJsZXNpemUgdW5kZXIgU3VuT1MgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX2R1cDIgICAgICAgICAgICAgICAgOTAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyICAgICAgICAgIDkxIC8qIExpbnV4IHNwYXJjMzIsIGdldGRvcHQgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgOTIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NlbGVjdCAgICAgICAgICAgICAgOTMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyICAgICAgICAgIDk0IC8qIExpbnV4IHNwYXJjMzIsIHNldGRvcHQgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX2ZzeW5jICAgICAgICAgICAgICAgOTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHByaW9yaXR5ICAgICAgICAgOTYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgOTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nvbm5lY3QgICAgICAgICAgICAgOTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgOTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHByaW9yaXR5ICAgICAgICAxMDAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAgICAgICAxMDEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAgICAgICAxMDIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAxMDMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgICAgICAxMDQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAgICAxMDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAgICAxMDYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgICAgICAxMDcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMiAgICAgICAgMTA4IC8qIExpbnV4IFNwZWNpZmljLCBzaWd2ZWMgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMiAgICAgICAgMTA5IC8qIExpbnV4IFNwZWNpZmljLCBzaWdibG9jayB1bmRlciBTdW5PUwkgICAqLworI2RlZmluZSBfX05SX3NldHJlc2dpZDMyICAgICAgICAxMTAgLyogTGludXggU3BlY2lmaWMsIHNpZ3NldG1hc2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMiAgICAgICAgMTExIC8qIExpbnV4IFNwZWNpZmljLCBzaWdwYXVzZSB1bmRlciBTdW5PUwkgICAqLworI2RlZmluZSBfX05SX3NldHJlZ2lkMzIgICAgICAgICAxMTIgLyogTGludXggc3BhcmMzMiwgc2lnc3RhY2sgdW5kZXIgU3VuT1MgICAgICAgICAqLworI2Vsc2UKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgICAgICAgICAgMTA4IC8qIExpbnV4IFNwZWNpZmljLCBzaWd2ZWMgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQgICAgICAgICAgMTA5IC8qIExpbnV4IFNwZWNpZmljLCBzaWdibG9jayB1bmRlciBTdW5PUwkgICAqLworI2RlZmluZSBfX05SX3NldHJlc2dpZCAgICAgICAgICAxMTAgLyogTGludXggU3BlY2lmaWMsIHNpZ3NldG1hc2sgdW5kZXIgU3VuT1MJICAgKi8KKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgICAgICAgICAgMTExIC8qIExpbnV4IFNwZWNpZmljLCBzaWdwYXVzZSB1bmRlciBTdW5PUwkgICAqLworI2VuZGlmCisjZGVmaW5lIF9fTlJfcmVjdm1zZyAgICAgICAgICAgIDExMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgIDExNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX05SX2dldGdyb3VwczMyICAgICAgICAxMTUgLyogTGludXggc3BhcmMzMiwgdnRyYWNlIHVuZGVyIFN1bk9TICAgICAgICAgICAqLworI2VuZGlmCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5ICAgICAgIDExNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgIDExNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAgICAgICAgIDExOCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxMTkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9yZWFkdiAgICAgICAgICAgICAgMTIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl93cml0ZXYgICAgICAgICAgICAgMTIxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgMTIyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mY2hvd24gICAgICAgICAgICAgMTIzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mY2htb2QgICAgICAgICAgICAgMTI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZWN2ZnJvbSAgICAgICAgICAgMTI1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZXVpZCAgICAgICAgICAgMTI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRyZWdpZCAgICAgICAgICAgMTI3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9yZW5hbWUgICAgICAgICAgICAgMTI4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgMTI5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgMTMwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mbG9jayAgICAgICAgICAgICAgMTMxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9sc3RhdDY0CQkxMzIgLyogTGludXggU3BlY2lmaWMJCQkgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgIDEzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgIDEzNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgIDEzNSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfbWtkaXIgICAgICAgICAgICAgIDEzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgIDEzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgIDEzOCAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc3RhdDY0CQkxMzkgLyogTGludXggU3BlY2lmaWMJCQkgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIDE0MCAvKiBhZGp0aW1lIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgIDE0MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgIDE0MiAvKiBnZXRob3N0aWQgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIDE0MyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxNDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAxNDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTE0NiAvKiBMaW51eCBTcGVjaWZpYywga2lsbHBnIHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcHJjdGwJCTE0NyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQJMTQ4IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJMTQ5IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAgICAgICAgMTUwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgICAgICAgMTUxIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAgMTUyIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgMTUzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkxNTQgLyogTGludXggc3BlY2lmaWMJCQkJICAgKi8KKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjZGVmaW5lIF9fTlJfZmNudGw2NAkJMTU1IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggICAxNTYgLyogTGludXggc3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zdGF0ZnMgICAgICAgICAgICAgMTU3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mc3RhdGZzICAgICAgICAgICAgMTU4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl91bW91bnQgICAgICAgICAgICAgMTU5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRfYWZmaW5pdHkgMTYwIC8qIExpbnV4IHNwZWNpZmljLCBhc3luY19kYWVtb24gdW5kZXIgU3VuT1MgICAgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfYWZmaW5pdHkgMTYxIC8qIExpbnV4IHNwZWNpZmljLCBnZXRmaCB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9nZXRkb21haW5uYW1lICAgICAgMTYyIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lICAgICAgMTYzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX05SX3V0cmFwX2luc3RhbGwJMTY0IC8qIFNZU1YgQUJJL3Y5IHJlcXVpcmVkCQkJICAgKi8KKyNlbmRpZgorI2RlZmluZSBfX05SX3F1b3RhY3RsICAgICAgICAgICAxNjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAgICAxNjYgLyogTGludXggc3BlY2lmaWMsIGV4cG9ydGZzIHVuZGVyIFN1bk9TICAgICAgICAqLworI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAxNjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VzdGF0ICAgICAgICAgICAgICAxNjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHhhdHRyICAgICAgICAgICAxNjkgLyogU3VuT1M6IHNlbXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xzZXR4YXR0ciAgICAgICAgICAxNzAgLyogU3VuT1M6IG1zZ3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAgICAgICAgICAxNzEgLyogU3VuT1M6IHNobXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHhhdHRyICAgICAgICAgICAxNzIgLyogU3VuT1M6IGF1ZGl0c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xnZXR4YXR0ciAgICAgICAgICAxNzMgLyogU3VuT1M6IHJmc3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldGRlbnRzICAgICAgICAgICAxNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldHNpZCAgICAgICAgICAgICAxNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZjaGRpciAgICAgICAgICAgICAxNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAgICAgICAgICAxNzcgLyogU3VuT1M6IGZjaHJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xpc3R4YXR0ciAgICAgICAgICAxNzggLyogU3VuT1M6IHZwaXhzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgICAgICAgICAxNzkgLyogU3VuT1M6IGFpb3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgICAgICAgICAxODAgLyogU3VuT1M6IGFpb3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyICAgICAgICAxODEgLyogU3VuT1M6IGFpb3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAgICAgICAxODIgLyogU3VuT1M6IGFpb2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgICAgICAgICAxODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxODQgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KKyNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgMTg1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIgICAgICAgMTg2IC8qIFN1bk9TOiBwYXRoY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl90a2lsbCAgICAgICAgICAgICAgMTg3IC8qIFN1bk9TOiBmcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkxODggLyogTGludXggc3BlY2lmaWMsIHN5c2NvbmYgdW5kZWYgU3VuT1MgICAgICAgICAqLworI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAxODkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlICAgICAgICAxOTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5ICAgICAgICAxOTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgICAxOTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAxOTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAxOTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAxOTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvcHJpb19zZXQgICAgICAgICAxOTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBwaWQgICAgICAgICAgICAxOTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAgICAgICAgICAxOTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NnZXRtYXNrICAgICAgICAgICAxOTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NzZXRtYXNrICAgICAgICAgICAyMDAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAyMDEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX29sZGxzdGF0ICAgICAgICAgICAyMDIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAyMDMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWRkaXIgICAgICAgICAgICAyMDQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAyMDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAyMDYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAyMDcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llICAgICAyMDggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAgICAgICAgICAyMDkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCAgICAgICAyMTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3Rna2lsbCAgICAgICAgICAgICAyMTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAyMTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N3YXBvZmYgICAgICAgICAgICAyMTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2luZm8gICAgICAgICAgICAyMTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lwYyAgICAgICAgICAgICAgICAyMTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3JldHVybiAgICAgICAgICAyMTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAyMTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2lvcHJpb19nZXQgICAgICAgICAyMTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAyMTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAyMjAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgICAgICAyMjEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAyMjIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAgICAyMjMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAyMjQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2JkZmx1c2ggICAgICAgICAgICAyMjUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAyMjYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsICAgICAgICAyMjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGZzdWlkICAgICAgICAgICAyMjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3NldGZzZ2lkICAgICAgICAgICAyMjkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX19uZXdzZWxlY3QgICAgICAgICAyMzAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KKyNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgMjMxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbHNlCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX05SX3RpbWUJCTIzMSAvKiBMaW51eCBzcGFyYzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZW5kaWYKICNlbmRpZgorI2RlZmluZSBfX05SX3NwbGljZSAgICAgICAgICAgICAyMzIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0aW1lICAgICAgICAgICAgICAyMzMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAyMzQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAyMzUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAyMzYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX05SX21sb2NrICAgICAgICAgICAgICAyMzcKKyNkZWZpbmUgX19OUl9tdW5sb2NrICAgICAgICAgICAgMjM4CisjZGVmaW5lIF9fTlJfbWxvY2thbGwgICAgICAgICAgIDIzOQorI2RlZmluZSBfX05SX211bmxvY2thbGwgICAgICAgICAyNDAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAgICAgMjQxCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgIDI0MgorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAyNDMKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgMjQ0CisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgIDI0NQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggMjQ2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAyNDcKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIDI0OAorI2RlZmluZSBfX05SX25hbm9zbGVlcCAgICAgICAgICAyNDkKKyNkZWZpbmUgX19OUl9tcmVtYXAgICAgICAgICAgICAgMjUwCisjZGVmaW5lIF9fTlJfX3N5c2N0bCAgICAgICAgICAgIDI1MQorI2RlZmluZSBfX05SX2dldHNpZCAgICAgICAgICAgICAyNTIKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgICAgICAgICAgMjUzCisjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAgICAgICAgIDI1NAorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkyNTUKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjU3CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkyNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eQkyNjAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eQkyNjEKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCTI2MgorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJMjYzCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkyNjQKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJMjY1CisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI2NgorLyogI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI2NyBSZXNlcnZlZCBmb3IgVlNFUlZFUiAqLworI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNjgKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNjkKKyNkZWZpbmUgX19OUl9pb19zdWJtaXQJCTI3MAorI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjcxCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI3MgorI2RlZmluZSBfX05SX21xX29wZW4JCTI3MworI2RlZmluZSBfX05SX21xX3VubGluawkJMjc0CisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kCTI3NQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZQkyNzYKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkJCTI3NworI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIJMjc4CisjZGVmaW5lIF9fTlJfd2FpdGlkCQkyNzkKKyNkZWZpbmUgX19OUl90ZWUJCTI4MAorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4MQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MgorI2RlZmluZSBfX05SX2tleWN0bAkJMjgzCisjZGVmaW5lIF9fTlJfb3BlbmF0CQkyODQKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkyODUKKyNkZWZpbmUgX19OUl9ta25vZGF0CQkyODYKKyNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjg3CisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyODgKKyNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTI4OQorI2RlZmluZSBfX05SX3VubGlua2F0CQkyOTAKKyNkZWZpbmUgX19OUl9yZW5hbWVhdAkJMjkxCisjZGVmaW5lIF9fTlJfbGlua2F0CQkyOTIKKyNkZWZpbmUgX19OUl9zeW1saW5rYXQJCTI5MworI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCTI5NAorI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkyOTUKKyNkZWZpbmUgX19OUl9mYWNjZXNzYXQJCTI5NgorI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkyOTcKKyNkZWZpbmUgX19OUl9wcG9sbAkJMjk4CisjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMjk5CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTMwMgorI2RlZmluZSBfX05SX21iaW5kCQkzMDMKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTMwNAorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMzA1CisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMzA2CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzA3CisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMDgKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMDkKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxMAorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTEKKyNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZQkzMTIKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTMKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUJCTMxNAorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkzMTUKKyNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUJMzE2CisjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0CQkzMTcKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJMzE4CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlMQkzMTkKKyNkZWZpbmUgX19OUl9kdXAzCQkzMjAKKyNkZWZpbmUgX19OUl9waXBlMgkJMzIxCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMjIKKyNkZWZpbmUgX19OUl9hY2NlcHQ0CQkzMjMKKworI2RlZmluZSBOUl9TWVNDQUxMUwkJMzI0CisKKyNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisvKiBTcGFyYyAzMi1iaXQgb25seSBoYXMgdGhlICJzZXRyZXN1aWQzMiIsICJnZXRyZXN1aWQzMiIgdmFyaWFudHMsCisgKiBpdCBuZXZlciBoYWQgdGhlIHBsYWluIG9uZXMgYW5kIHRoZXJlIGlzIG5vIHZhbHVlIHRvIGFkZGluZyB0aG9zZQorICogb2xkIHZlcnNpb25zIGludG8gdGhlIHN5c2NhbGwgdGFibGUuCisgKi8KKyNkZWZpbmUgX19JR05PUkVfc2V0cmVzdWlkCisjZGVmaW5lIF9fSUdOT1JFX2dldHJlc3VpZAorI2RlZmluZSBfX0lHTk9SRV9zZXRyZXNnaWQKKyNkZWZpbmUgX19JR05PUkVfZ2V0cmVzZ2lkCisjZW5kaWYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfV0FJVFBJRAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKKyNpZm5kZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECisjZW5kaWYKKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9TUEFSQ19VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMTNkMmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4NSArMCwwIEBACi0jaWZuZGVmIF9TUEFSQ19VTklTVERfSAotI2RlZmluZSBfU1BBUkNfVU5JU1REX0gKLQotLyoKLSAqIFN5c3RlbSBjYWxscyB1bmRlciB0aGUgU3BhcmMuCi0gKgotICogRG9uJ3QgYmUgc2NhcmVkIGJ5IHRoZSB1Z2x5IGNsb2JiZXJzLCBpdCBpcyB0aGUgb25seSB3YXkgSSBjYW4KLSAqIHRoaW5rIG9mIHJpZ2h0IG5vdyB0byBmb3JjZSB0aGUgYXJndW1lbnRzIGludG8gZml4ZWQgcmVnaXN0ZXJzCi0gKiBiZWZvcmUgdGhlIHRyYXAgaW50byB0aGUgc3lzdGVtIGNhbGwgd2l0aCBnY2MgJ2FzbScgc3RhdGVtZW50cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQotICoKLSAqIFN1bk9TIGNvbXBhdGliaWxpdHkgYmFzZWQgdXBvbiBwcmVsaW1pbmFyeSB3b3JrIHdoaWNoIGlzOgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSBBZHJpYW4gTS4gUm9kcmlndWV6IChhZHJpYW5AcmVtdXMucnV0Z2Vycy5lZHUpCi0gKi8KLQotI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAgICAgIDAgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mb3JrICAgICAgICAgICAgICAgICAyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICA0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vcGVuICAgICAgICAgICAgICAgICA1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICA2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICA3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdCAgICAgICAgICAgICAgICA4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saW5rICAgICAgICAgICAgICAgICA5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgIDEwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9leGVjdiAgICAgICAgICAgICAgIDExIC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgIDEyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG93bgkJIDEzIC8qIENvbW1vbgkJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgIDE1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgIDE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgIDE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJmY3RyICAgICAgICAgICAgIDE4IC8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgb3BlcmF0aW9ucyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgIDIwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jYXBnZXQJCSAyMSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX2NhcHNldAkJIDIyIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMyAvKiBJbXBsZW1lbnRlZCB2aWEgc2V0cmV1aWQgaW4gU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAyNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJICAgICAgICAgMjUgLyogRU5PU1lTIHVuZGVyIFN1bk9TCQkJICAgKi8KLSNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgIDI2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hbGFybSAgICAgICAgICAgICAgIDI3IC8qIEltcGxlbWVudGVkIHZpYSBzZXRpdGltZXIgaW4gU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwotI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgMjkgLyogSXMgc2lnYmxvY2soMCktPnNpZ3BhdXNlKCkgaW4gU3VuT1MgICAgICAgICAqLwotI2RlZmluZSBfX05SX3V0aW1lICAgICAgICAgICAgICAgMzAgLyogSW1wbGVtZW50ZWQgdmlhIHV0aW1lcygpIHVuZGVyIFN1bk9TICAgICAgICAqLwotI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgMzEgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgMzIgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgMzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX25pY2UgICAgICAgICAgICAgICAgMzQgLyogSW1wbGVtZW50ZWQgdmlhIGdldC9zZXRwcmlvcml0eSgpIGluIFN1bk9TICAqLwotI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgMzUgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgMzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgMzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N0YXQgICAgICAgICAgICAgICAgMzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NlbmRmaWxlCQkgMzkgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9sc3RhdCAgICAgICAgICAgICAgIDQwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgIDQyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzIC8qIEltcGxlbWVudGVkIHZpYSBnZXRydXNhZ2UoKSBpbiBTdW5PUyAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgICAgIDQ0IC8qIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgIDQ1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRnaWQgICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWduYWwgICAgICAgICAgICAgIDQ4IC8qIEltcGxlbWVudGVkIHZpYSBzaWd2ZWMoKSBpbiBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgIDQ5IC8qIFN1bk9TIGNhbGxzIGdldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9TIGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgIDUxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9tZW1vcnlfb3JkZXJpbmcgIDUyICAgIExpbnV4IHNwYXJjNjQgc3BlY2lmaWMJCQkgICAqLwotI2RlZmluZSBfX05SX2dldGdpZDMyICAgICAgICAgICAgNTMgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2lvY3RsICAgICAgICAgICAgICAgNTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlYm9vdCAgICAgICAgICAgICAgNTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21tYXAyCQkgNTYgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICA1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICA2MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICA2MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJIDYzIC8qIExpbnV4IFNwZWNpZmljCQkJICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBhZ2VzaXplICAgICAgICAgNjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21zeW5jICAgICAgICAgICAgICAgNjUgLyogQ29tbW9uIGluIG5ld2VyIDEuMy54IHJldnMuLi4gICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Zmb3JrICAgICAgICAgICAgICAgNjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgNjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgNjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGV1aWQzMiAgICAgICAgICAgNjkgLyogTGludXggc3BhcmMzMiwgc2JyayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGVnaWQzMiAgICAgICAgICAgNzAgLyogTGludXggc3BhcmMzMiwgc3N0ayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21tYXAgICAgICAgICAgICAgICAgNzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJldWlkMzIgICAgICAgICAgNzIgLyogTGludXggc3BhcmMzMiwgdmFkdmlzZSB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgNzMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21wcm90ZWN0ICAgICAgICAgICAgNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ZoYW5ndXAgICAgICAgICAgICAgNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCSA3NyAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KLSNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgIDc4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRncm91cHMgICAgICAgICAgIDc5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDgxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgIDgyIC8qIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgIDgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkgODQgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICA4NyAvKiBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICAgICA4OSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICAgICA5MSAvKiBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICAgICA5NCAvKiBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgICAgMTEyIC8qIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgICAgMTE1IC8qIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgMTMzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaHV0ZG93biAgICAgICAgICAgMTM0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zb2NrZXRwYWlyICAgICAgICAgMTM1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgMTM2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgMTM3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91dGltZXMgICAgICAgICAgICAgMTM4IC8qIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGF0NjQJCTEzOSAvKiBMaW51eCBTcGVjaWZpYwkJCSAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kZmlsZTY0ICAgICAgICAgMTQwIC8qIGFkanRpbWUgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgMTQxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mdXRleCAgICAgICAgICAgICAgMTQyIC8qIGdldGhvc3RpZCB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgMTQzIC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgMTQ0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRybGltaXQgICAgICAgICAgMTQ1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkxNDYgLyogTGludXggU3BlY2lmaWMsIGtpbGxwZyB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3ByY3RsCQkxNDcgLyogRU5PU1lTIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkCTE0OCAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlCTE0OSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE1MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgIDE1MSAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggIDE1MiAvKiBMaW51eCBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMTU0IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfZmNudGw2NAkJMTU1IC8qIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoICAgMTU2IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgIDE1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1vdW50ICAgICAgICAgICAgIDE1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0X2FmZmluaXR5IDE2MCAvKiBMaW51eCBzcGVjaWZpYywgYXN5bmNfZGFlbW9uIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfdXRyYXBfaW5zdGFsbCAgIDE2NCAgICBMaW51eCBzcGFyYzY0IHNwZWNpZmljCQkJICAgKi8KLSNkZWZpbmUgX19OUl9xdW90YWN0bCAgICAgICAgICAgMTY1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgICAgMTY2IC8qIExpbnV4IHNwZWNpZmljLCBleHBvcnRmcyB1bmRlciBTdW5PUyAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tb3VudCAgICAgICAgICAgICAgMTY3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c3RhdCAgICAgICAgICAgICAgMTY4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXR4YXR0ciAgICAgICAgICAgMTY5IC8qIFN1bk9TOiBzZW1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sc2V0eGF0dHIgICAgICAgICAgMTcwIC8qIFN1bk9TOiBtc2dzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIgICAgICAgICAgMTcxIC8qIFN1bk9TOiBzaG1zeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR4YXR0ciAgICAgICAgICAgMTcyIC8qIFN1bk9TOiBhdWRpdHN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgICAgICAgICAgMTczIC8qIFN1bk9TOiByZnNzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgMTc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgMTc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgICAgICAgICAgMTc3IC8qIFN1bk9TOiBmY2hyb290ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9saXN0eGF0dHIgICAgICAgICAgMTc4IC8qIFN1bk9TOiB2cGl4c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyICAgICAgICAgMTc5IC8qIFN1bk9TOiBhaW9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyICAgICAgICAgMTgwIC8qIFN1bk9TOiBhaW93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAgICAgICAgMTgxIC8qIFN1bk9TOiBhaW93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgICAgICAgMTgyIC8qIFN1bk9TOiBhaW9jYW5jZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgMTgzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTg0IC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgIDE4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgIDE4NiAvKiBTdW5PUzogcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgIDE4NyAvKiBTdW5PUzogZnBhdGhjb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMTg4IC8qIExpbnV4IHNwZWNpZmljLCBzeXNjb25mIHVuZGVmIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgMTg5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgMTkwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTkxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzICAgMTkyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgICAgICAgMTkzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF9jdGwgICAgICAgICAgMTk0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9lcG9sbF93YWl0ICAgICAgICAgMTk1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0ICAgICAgICAgMTk2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgMTk3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgMTk4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZ2V0bWFzayAgICAgICAgICAgMTk5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zc2V0bWFzayAgICAgICAgICAgMjAwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgMjAxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9vbGRsc3RhdCAgICAgICAgICAgMjAyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91c2VsaWIgICAgICAgICAgICAgMjAzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkZGlyICAgICAgICAgICAgMjA0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQgICAgICAgICAgMjA1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zb2NrZXRjYWxsICAgICAgICAgMjA2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMjA3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAgICAgMjA4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjQgICAgICAgICAgMjA5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgICAgICAgMjEwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90Z2tpbGwgICAgICAgICAgICAgMjExIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl93YWl0cGlkICAgICAgICAgICAgMjEyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zd2Fwb2ZmICAgICAgICAgICAgMjEzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgMjE0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pcGMgICAgICAgICAgICAgICAgMjE1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdyZXR1cm4gICAgICAgICAgMjE2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgMjE3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgMjE4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZGp0aW1leCAgICAgICAgICAgMjE5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgMjIwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlICAgICAgMjIxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlICAgICAgMjIyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgICAgMjIzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwZ2lkICAgICAgICAgICAgMjI0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9iZGZsdXNoICAgICAgICAgICAgMjI1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeXNmcyAgICAgICAgICAgICAgMjI2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAgICAgICAgMjI3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMjI4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZXRmc2dpZCAgICAgICAgICAgMjI5IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90aW1lICAgICAgICAgICAgICAgMjMxIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zcGxpY2UgICAgICAgICAgICAgMjMyIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgMjMzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zdGF0ZnM2NCAgICAgICAgICAgMjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc3RhdGZzNjQgICAgICAgICAgMjM1IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgMjM2IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgMjM3Ci0jZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgIDIzOAotI2RlZmluZSBfX05SX21sb2NrYWxsICAgICAgICAgICAyMzkKLSNkZWZpbmUgX19OUl9tdW5sb2NrYWxsICAgICAgICAgMjQwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgIDI0MQotI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtICAgICAyNDIKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMjQzCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDI0NAotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAyNDUKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDI0NgotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMjQ3Ci0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAyNDgKLSNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgMjQ5Ci0jZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgIDI1MAotI2RlZmluZSBfX05SX19zeXNjdGwgICAgICAgICAgICAyNTEKLSNkZWZpbmUgX19OUl9nZXRzaWQgICAgICAgICAgICAgMjUyCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgIDI1MwotI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAyNTQKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMjU1Ci0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkyNTYKLSNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCTI1NwotI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkyNTgKLSNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJMjU5Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkJMjYwCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkJMjYxCi0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNjIKLSNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI2MwotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjY0Ci0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI2NQotI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNjYKLS8qICNkZWZpbmUgX19OUl92c2VydmVyCQkyNjcgUmVzZXJ2ZWQgZm9yIFZTRVJWRVIgKi8KLSNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjY4Ci0jZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJMjY5Ci0jZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNzAKLSNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI3MQotI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyNzIKLSNkZWZpbmUgX19OUl9tcV9vcGVuCQkyNzMKLSNkZWZpbmUgX19OUl9tcV91bmxpbmsJCTI3NAotI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZAkyNzUKLSNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUJMjc2Ci0jZGVmaW5lIF9fTlJfbXFfbm90aWZ5CQkyNzcKLSNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyCTI3OAotI2RlZmluZSBfX05SX3dhaXRpZAkJMjc5Ci0jZGVmaW5lIF9fTlJfdGVlCQkyODAKLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODEKLSNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODIKLSNkZWZpbmUgX19OUl9rZXljdGwJCTI4MwotI2RlZmluZSBfX05SX29wZW5hdAkJMjg0Ci0jZGVmaW5lIF9fTlJfbWtkaXJhdAkJMjg1Ci0jZGVmaW5lIF9fTlJfbWtub2RhdAkJMjg2Ci0jZGVmaW5lIF9fTlJfZmNob3duYXQJCTI4NwotI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMjg4Ci0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyODkKLSNkZWZpbmUgX19OUl91bmxpbmthdAkJMjkwCi0jZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTI5MQotI2RlZmluZSBfX05SX2xpbmthdAkJMjkyCi0jZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkyOTMKLSNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkyOTQKLSNkZWZpbmUgX19OUl9mY2htb2RhdAkJMjk1Ci0jZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkyOTYKLSNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMjk3Ci0jZGVmaW5lIF9fTlJfcHBvbGwJCTI5OAotI2RlZmluZSBfX05SX3Vuc2hhcmUJCTI5OQotI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMDAKLSNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzAxCi0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkzMDIKLSNkZWZpbmUgX19OUl9tYmluZAkJMzAzCi0jZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkzMDQKLSNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CTMwNQotI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMwNgotI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMwNwotI2RlZmluZSBfX05SX2dldGNwdQkJMzA4Ci0jZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzA5Ci0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTAKLSNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzExCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzEyCi0jZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzEzCi0jZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMTQKLSNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzE1Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMxNgotI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJMzE3Ci0jZGVmaW5lIF9fTlJfZXZlbnRmZDIJCTMxOAotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJMzE5Ci0jZGVmaW5lIF9fTlJfZHVwMwkJMzIwCi0jZGVmaW5lIF9fTlJfcGlwZTIJCTMyMQotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzIyCi0jZGVmaW5lIF9fTlJfYWNjZXB0NAkJMzIzCi0KLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCTMyNAotCi0vKiBTcGFyYyAzMi1iaXQgb25seSBoYXMgdGhlICJzZXRyZXN1aWQzMiIsICJnZXRyZXN1aWQzMiIgdmFyaWFudHMsCi0gKiBpdCBuZXZlciBoYWQgdGhlIHBsYWluIG9uZXMgYW5kIHRoZXJlIGlzIG5vIHZhbHVlIHRvIGFkZGluZyB0aG9zZQotICogb2xkIHZlcnNpb25zIGludG8gdGhlIHN5c2NhbGwgdGFibGUuCi0gKi8KLSNkZWZpbmUgX19JR05PUkVfc2V0cmVzdWlkCi0jZGVmaW5lIF9fSUdOT1JFX2dldHJlc3VpZAotI2RlZmluZSBfX0lHTk9SRV9zZXRyZXNnaWQKLSNkZWZpbmUgX19JR05PUkVfZ2V0cmVzZ2lkCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0KLS8qCi0gKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCi0gKgotICogV2hhdCB3ZSB3YW50IGlzIF9fYXR0cmlidXRlX18oKHdlYWssYWxpYXMoInN5c19uaV9zeXNjYWxsIikpKSwKLSAqIGJ1dCBpdCBkb2Vzbid0IHdvcmsgb24gYWxsIHRvb2xjaGFpbnMsIHNvIHdlIGp1c3QgZG8gaXQgYnkgaGFuZAotICovCi0jZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfU1BBUkNfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTVkM2MwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkM2NF9VTklTVERfSAotI2RlZmluZSBfU1BBUkM2NF9VTklTVERfSAotCi0vKgotICogU3lzdGVtIGNhbGxzIHVuZGVyIHRoZSBTcGFyYy4KLSAqCi0gKiBEb24ndCBiZSBzY2FyZWQgYnkgdGhlIHVnbHkgY2xvYmJlcnMsIGl0IGlzIHRoZSBvbmx5IHdheSBJIGNhbgotICogdGhpbmsgb2YgcmlnaHQgbm93IHRvIGZvcmNlIHRoZSBhcmd1bWVudHMgaW50byBmaXhlZCByZWdpc3RlcnMKLSAqIGJlZm9yZSB0aGUgdHJhcCBpbnRvIHRoZSBzeXN0ZW0gY2FsbCB3aXRoIGdjYyAnYXNtJyBzdGF0ZW1lbnRzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKgotICogU3VuT1MgY29tcGF0aWJpbGl0eSBiYXNlZCB1cG9uIHByZWxpbWluYXJ5IHdvcmsgd2hpY2ggaXM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKLSAqLwotCi0jZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMCAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX2V4aXQgICAgICAgICAgICAgICAgIDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgIDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlYWQgICAgICAgICAgICAgICAgIDMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dyaXRlICAgICAgICAgICAgICAgIDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgIDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Nsb3NlICAgICAgICAgICAgICAgIDYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dhaXQ0ICAgICAgICAgICAgICAgIDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2NyZWF0ICAgICAgICAgICAgICAgIDggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xpbmsgICAgICAgICAgICAgICAgIDkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgMTAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2V4ZWN2ICAgICAgICAgICAgICAgMTEgLyogU3VuT1MgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgMTIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Nob3duCQkgMTMgLyogQ29tbW9uCQkJCQkgICAqLwotI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgMTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgMTUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xjaG93biAgICAgICAgICAgICAgMTYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgMTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BlcmZjdHIgICAgICAgICAgICAgMTggLyogUGVyZm9ybWFuY2UgY291bnRlciBvcGVyYXRpb25zICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xzZWVrICAgICAgICAgICAgICAgMTkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2NhcGdldAkJIDIxIC8qIExpbnV4IFNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkgMjIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9zZXR1aWQgICAgICAgICAgICAgIDIzIC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZXVpZCBpbiBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR1aWQgICAgICAgICAgICAgIDI0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl92bXNwbGljZQkgICAgICAgICAyNSAvKiBFTk9TWVMgdW5kZXIgU3VuT1MJCQkgICAqLwotI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgMjcgLyogSW1wbGVtZW50ZWQgdmlhIHNldGl0aW1lciBpbiBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCSAyOCAvKiBDb21tb24JCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAyOSAvKiBJcyBzaWdibG9jaygwKS0+c2lncGF1c2UoKSBpbiBTdW5PUyAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdXRpbWUgICAgICAgICAgICAgICAzMCAvKiBJbXBsZW1lbnRlZCB2aWEgdXRpbWVzKCkgdW5kZXIgU3VuT1MgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfbGNob3duMzIgICAgICAgICAzMSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfZmNob3duMzIgICAgICAgICAzMiAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbmljZSAgICAgICAgICAgICAgICAzNCAvKiBJbXBsZW1lbnRlZCB2aWEgZ2V0L3NldHByaW9yaXR5KCkgaW4gU3VuT1MgICovCi0vKiAjZGVmaW5lIF9fTlJfY2hvd24zMiAgICAgICAgICAzNSAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3luYyAgICAgICAgICAgICAgICAzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfa2lsbCAgICAgICAgICAgICAgICAzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3RhdCAgICAgICAgICAgICAgICAzOCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGUJCSAzOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX2xzdGF0ICAgICAgICAgICAgICAgNDAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgNDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgNDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RpbWVzICAgICAgICAgICAgICAgNDMgLyogSW1wbGVtZW50ZWQgdmlhIGdldHJ1c2FnZSgpIGluIFN1bk9TICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX2dldHVpZDMyICAgICAgICAgNDQgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Vtb3VudDIgICAgICAgICAgICAgNDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGdpZCAgICAgICAgICAgICAgNDYgLyogSW1wbGVtZW50ZWQgdmlhIHNldHJlZ2lkKCkgaW4gU3VuT1MgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGdpZCAgICAgICAgICAgICAgNDcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ25hbCAgICAgICAgICAgICAgNDggLyogSW1wbGVtZW50ZWQgdmlhIHNpZ3ZlYygpIGluIFN1bk9TICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGV1aWQgICAgICAgICAgICAgNDkgLyogU3VuT1MgY2FsbHMgZ2V0dWlkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgNTAgLyogU3VuT1MgY2FsbHMgZ2V0Z2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgNTEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX21lbW9yeV9vcmRlcmluZwkgNTIgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLS8qICNkZWZpbmUgX19OUl9nZXRnaWQzMiAgICAgICAgIDUzICAgIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIDU0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgIDU1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9tbWFwMgkJIDU2ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgIDU3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWFkbGluayAgICAgICAgICAgIDU4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgIDU5IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgIDYwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9jaHJvb3QgICAgICAgICAgICAgIDYxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc3RhdCAgICAgICAgICAgICAgIDYyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgICAgIDYzIC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRwYWdlc2l6ZSAgICAgICAgIDY0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgIDY1IC8qIENvbW1vbiBpbiBuZXdlciAxLjMueCByZXZzLi4uICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgIDY2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgIDY3IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgIDY4IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9nZXRldWlkMzIgICAgICAgIDY5ICAgIExpbnV4IHNwYXJjMzIsIHNicmsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgICAgICAgIDcwICAgIExpbnV4IHNwYXJjMzIsIHNzdGsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tbWFwICAgICAgICAgICAgICAgIDcxIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9zZXRyZXVpZDMyICAgICAgIDcyICAgIExpbnV4IHNwYXJjMzIsIHZhZHZpc2UgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgIDczIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgIDc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgIDc1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl92aGFuZ3VwICAgICAgICAgICAgIDc2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0ICAgICAgIDc3ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLwotI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgNzggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGdyb3VwcyAgICAgICAgICAgNzkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgODAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBncnAgICAgICAgICAgICAgODEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX3NldGdyb3VwczMyICAgICAgODIgICAgTGludXggc3BhcmMzMiwgc2V0cGdycCB1bmRlciBTdW5PUyAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGl0aW1lciAgICAgICAgICAgODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0ICAgICAgODQgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3dhcG9uICAgICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICA4NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICA4NyAgICBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA4OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICA4OSAgICBMaW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICA5MCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMiAgICAgICA5MSAgICBMaW51eCBzcGFyYzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZmNudGwgICAgICAgICAgICAgICA5MiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VsZWN0ICAgICAgICAgICAgICA5MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAgICAgICA5NCAgICBMaW51eCBzcGFyYzMyLCBzZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN5bmMgICAgICAgICAgICAgICA5NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICA5NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICA5OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICA5OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgIDEwMCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuICAgICAgIDEwMSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDEwMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgIDEwMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAgICAgIDEwNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgIDEwNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvICAgIDEwNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDEwNyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgIDEwOCAvKiBMaW51eCBTcGVjaWZpYywgc2lndmVjIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgIDEwOSAvKiBMaW51eCBTcGVjaWZpYywgc2lnYmxvY2sgdW5kZXIgU3VuT1MJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgMTEwIC8qIExpbnV4IFNwZWNpZmljLCBzaWdzZXRtYXNrIHVuZGVyIFN1bk9TCSAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8KLS8qICNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgIDc1ICAgIExpbnV4IHNwYXJjMzIsIHNpZ3N0YWNrIHVuZGVyIFN1bk9TICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTEzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgMTE1ICAgIExpbnV4IHNwYXJjMzIsIHZ0cmFjZSB1bmRlciBTdW5PUyAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgMTE3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0ICAgICAgICAgMTE4IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRjd2QJCTExOSAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAxMjAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAxMjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAxMjIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAxMjMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAxMjQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxMjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJldWlkICAgICAgICAgICAxMjYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJlZ2lkICAgICAgICAgICAxMjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAxMjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAxMjkgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAgICAgICAgICAxMzAgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xzdGF0NjQJCTEzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgIDEzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgIDEzNCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgIDEzNSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbWtkaXIgICAgICAgICAgICAgIDEzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgIDEzNyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgIDEzOCAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3RhdDY0CQkxMzkgLyogTGludXggU3BlY2lmaWMJCQkgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAgICAgICAgIDE0MCAvKiBhZGp0aW1lIHVuZGVyIFN1bk9TICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgIDE0MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgIDE0MiAvKiBnZXRob3N0aWQgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgIDE0MyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxNDQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAxNDUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTE0NiAvKiBMaW51eCBTcGVjaWZpYywga2lsbHBnIHVuZGVyIFN1bk9TICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcHJjdGwJCTE0NyAvKiBFTk9TWVMgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQJMTQ4IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wY2ljb25maWdfd3JpdGUJMTQ5IC8qIEVOT1NZUyB1bmRlciBTdW5PUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAgICAgICAgMTUwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgICAgICAgMTUxIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAgMTUyIC8qIExpbnV4IHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9wb2xsICAgICAgICAgICAgICAgMTUzIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkxNTQgLyogTGludXggc3BlY2lmaWMJCQkJICAgKi8KLS8qICNkZWZpbmUgX19OUl9mY250bDY0ICAgICAgICAgMTU1ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoICAgMTU2IC8qIExpbnV4IHNwZWNpZmljCQkJCSAgICovCi0jZGVmaW5lIF9fTlJfc3RhdGZzICAgICAgICAgICAgIDE1NyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdW1vdW50ICAgICAgICAgICAgIDE1OSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0X2FmZmluaXR5IDE2MCAvKiBMaW51eCBzcGVjaWZpYywgYXN5bmNfZGFlbW9uIHVuZGVyIFN1bk9TICAgICovCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X2FmZmluaXR5IDE2MSAvKiBMaW51eCBzcGVjaWZpYywgZ2V0ZmggdW5kZXIgU3VuT1MgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZ2V0ZG9tYWlubmFtZSAgICAgIDE2MiAvKiBTdW5PUyBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAgICAgIDE2MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfdXRyYXBfaW5zdGFsbAkxNjQgLyogU1lTViBBQkkvdjkgcmVxdWlyZWQJCQkgICAqLwotI2RlZmluZSBfX05SX3F1b3RhY3RsICAgICAgICAgICAxNjUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAgICAxNjYgLyogTGludXggc3BlY2lmaWMsIGV4cG9ydGZzIHVuZGVyIFN1bk9TICAgICAgICAqLwotI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAxNjcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3VzdGF0ICAgICAgICAgICAgICAxNjggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHhhdHRyICAgICAgICAgICAxNjkgLyogU3VuT1M6IHNlbXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xzZXR4YXR0ciAgICAgICAgICAxNzAgLyogU3VuT1M6IG1zZ3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAgICAgICAgICAxNzEgLyogU3VuT1M6IHNobXN5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHhhdHRyICAgICAgICAgICAxNzIgLyogU3VuT1M6IGF1ZGl0c3lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xnZXR4YXR0ciAgICAgICAgICAxNzMgLyogU3VuT1M6IHJmc3N5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldGRlbnRzICAgICAgICAgICAxNzQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldHNpZCAgICAgICAgICAgICAxNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZjaGRpciAgICAgICAgICAgICAxNzYgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAgICAgICAgICAxNzcgLyogU3VuT1M6IGZjaHJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xpc3R4YXR0ciAgICAgICAgICAxNzggLyogU3VuT1M6IHZwaXhzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgICAgICAgICAxNzkgLyogU3VuT1M6IGFpb3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgICAgICAgICAxODAgLyogU3VuT1M6IGFpb3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyICAgICAgICAxODEgLyogU3VuT1M6IGFpb3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAgICAgICAxODIgLyogU3VuT1M6IGFpb2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgICAgICAgICAxODMgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxODQgLyogTGludXggU3BlY2lmaWMJCQkJICAgKi8KLSNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgMTg1IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIgICAgICAgMTg2IC8qIFN1bk9TOiBwYXRoY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl90a2lsbCAgICAgICAgICAgICAgMTg3IC8qIFN1bk9TOiBmcGF0aGNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkxODggLyogTGludXggc3BlY2lmaWMsIHN5c2NvbmYgdW5kZWYgU3VuT1MgICAgICAgICAqLwotI2RlZmluZSBfX05SX3VuYW1lICAgICAgICAgICAgICAxODkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2luaXRfbW9kdWxlICAgICAgICAxOTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5ICAgICAgICAxOTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgICAxOTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAxOTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAxOTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAxOTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2lvcHJpb19zZXQgICAgICAgICAxOTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBwaWQgICAgICAgICAgICAxOTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAgICAgICAgICAxOTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NnZXRtYXNrICAgICAgICAgICAxOTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NzZXRtYXNrICAgICAgICAgICAyMDAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAyMDEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX29sZGxzdGF0ICAgICAgICAgICAyMDIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAyMDMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlYWRkaXIgICAgICAgICAgICAyMDQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3JlYWRhaGVhZCAgICAgICAgICAyMDUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAyMDYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAyMDcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llICAgICAyMDggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAgICAgICAgICAyMDkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCAgICAgICAyMTAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3Rna2lsbCAgICAgICAgICAgICAyMTEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAyMTIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N3YXBvZmYgICAgICAgICAgICAyMTMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5c2luZm8gICAgICAgICAgICAyMTQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2lwYyAgICAgICAgICAgICAgICAyMTUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ3JldHVybiAgICAgICAgICAyMTYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAyMTcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2lvcHJpb19nZXQgICAgICAgICAyMTggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2FkanRpbWV4ICAgICAgICAgICAyMTkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAyMjAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgICAgICAyMjEgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAyMjIgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAgICAyMjMgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAyMjQgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2JkZmx1c2ggICAgICAgICAgICAyMjUgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAyMjYgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsICAgICAgICAyMjcgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGZzdWlkICAgICAgICAgICAyMjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX3NldGZzZ2lkICAgICAgICAgICAyMjkgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfX05SX19uZXdzZWxlY3QgICAgICAgICAyMzAgLyogTGludXggU3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19OUl90aW1lCQkyMzEgLyogTGludXggc3BhcmMzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCi0jZGVmaW5lIF9fTlJfc3BsaWNlICAgICAgICAgICAgIDIzMiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgIDIzNCAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgIDIzNSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfX2xsc2VlayAgICAgICAgICAgIDIzNiAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgIDIzNwotI2RlZmluZSBfX05SX211bmxvY2sgICAgICAgICAgICAyMzgKLSNkZWZpbmUgX19OUl9tbG9ja2FsbCAgICAgICAgICAgMjM5Ci0jZGVmaW5lIF9fTlJfbXVubG9ja2FsbCAgICAgICAgIDI0MAotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtICAgICAyNDEKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAgICAgMjQyCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIDI0MwotI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAyNDQKLSNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAgICAgICAgMjQ1Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAyNDYKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIDI0NwotI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgMjQ4Ci0jZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgIDI0OQotI2RlZmluZSBfX05SX21yZW1hcCAgICAgICAgICAgICAyNTAKLSNkZWZpbmUgX19OUl9fc3lzY3RsICAgICAgICAgICAgMjUxCi0jZGVmaW5lIF9fTlJfZ2V0c2lkICAgICAgICAgICAgIDI1MgotI2RlZmluZSBfX05SX2ZkYXRhc3luYyAgICAgICAgICAyNTMKLSNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsICAgICAgICAgMjU0Ci0jZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTI1NQotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU2Ci0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNTcKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjU4Ci0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI1OQotI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTI2MAotI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTI2MQotI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjYyCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNjMKLSNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI2NAotI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNjUKLSNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUJMjY2Ci0vKiAjZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjY3IFJlc2VydmVkIGZvciBWU0VSVkVSICovCi0jZGVmaW5lIF9fTlJfaW9fc2V0dXAJCTI2OAotI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI2OQotI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjcwCi0jZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNzEKLSNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjcyCi0jZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjczCi0jZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzQKLSNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjc1Ci0jZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NgotI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc3Ci0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzgKLSNkZWZpbmUgX19OUl93YWl0aWQJCTI3OQotI2RlZmluZSBfX05SX3RlZQkJMjgwCi0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjgxCi0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjgyCi0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODMKLSNkZWZpbmUgX19OUl9vcGVuYXQJCTI4NAotI2RlZmluZSBfX05SX21rZGlyYXQJCTI4NQotI2RlZmluZSBfX05SX21rbm9kYXQJCTI4NgotI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyODcKLSNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI4OAotI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjg5Ci0jZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5MAotI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTEKLSNkZWZpbmUgX19OUl9saW5rYXQJCTI5MgotI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjkzCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk0Ci0jZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5NQotI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMjk2Ci0jZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTI5NwotI2RlZmluZSBfX05SX3Bwb2xsCQkyOTgKLSNkZWZpbmUgX19OUl91bnNoYXJlCQkyOTkKLSNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCi0jZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQotI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMzAyCi0jZGVmaW5lIF9fTlJfbWJpbmQJCTMwMwotI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kJMzA0Ci0jZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeQkzMDUKLSNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkzMDYKLSNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkzMDcKLSNkZWZpbmUgX19OUl9nZXRjcHUJCTMwOAotI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMwOQotI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMzEwCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTMxMQotI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTMxMgotI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMxMwotI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMzE0Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTMxNQotI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkzMTYKLSNkZWZpbmUgX19OUl9zaWduYWxmZDQJCTMxNwotI2RlZmluZSBfX05SX2V2ZW50ZmQyCQkzMTgKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCTMxOQotI2RlZmluZSBfX05SX2R1cDMJCTMyMAotI2RlZmluZSBfX05SX3BpcGUyCQkzMjEKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCTMyMgotI2RlZmluZSBfX05SX2FjY2VwdDQJCTMyMwotCi0jZGVmaW5lIE5SX1NZU0NBTExTCQkzMjQKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KLSNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0Ci0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TR0VUTUFTSwotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHTkFMCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAotCi0vKgotICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwotICoKLSAqIFdoYXQgd2Ugd2FudCBpcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrLGFsaWFzKCJzeXNfbmlfc3lzY2FsbCIpKSksCi0gKiBidXQgaXQgZG9lc24ndCB3b3JrIG9uIGFsbCB0b29sY2hhaW5zLCBzbyB3ZSBqdXN0IGRvIGl0IGJ5IGhhbmQKLSAqLwotI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX1NQQVJDNjRfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsLy5naXRpZ25vcmUgYi9hcmNoL3NwYXJjL2tlcm5lbC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3ZtbGludXgubGRzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IDJkNjU4MjAuLjUzYWRjYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC0yLDI1ICsyLDk4IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1leHRyYS15CQk6PSBoZWFkLm8gaW5pdF90YXNrLm8gdm1saW51eC5sZHMKK2FzZmxhZ3MteSA6PSAtYW5zaQorY2NmbGFncy15IDo9IC1XZXJyb3IKIAotRVhUUkFfQUZMQUdTCTo9IC1hbnNpCitleHRyYS15ICAgICA6PSBoZWFkXyQoQklUUykubworZXh0cmEteSAgICAgKz0gaW5pdF90YXNrLm8KK2V4dHJhLXkgICAgICs9IHZtbGludXgubGRzCiAKLUlSUV9PQkpTIDo9IGlycS5vIHN1bjRtX2lycS5vIHN1bjRjX2lycS5vIHN1bjRkX2lycS5vCi1vYmoteSAgICA6PSBlbnRyeS5vIHdvZi5vIHd1Zi5vIGV0cmFwLm8gcnRyYXAubyB0cmFwcy5vICQoSVJRX09CSlMpIFwKLQkgICAgcHJvY2Vzcy5vIHNpZ25hbC5vIGlvcG9ydC5vIHNldHVwLm8gaWRwcm9tLm8gXAotCSAgICBzeXNfc3BhcmMubyBzeXN0YmxzLm8gXAotCSAgICB0aW1lLm8gd2luZG93cy5vIGNwdS5vIGRldmljZXMubyBcCi0JICAgIHRhZHBvbGUubyB0aWNrMTQubyBwdHJhY2UubyBcCi0JICAgIHVuYWxpZ25lZC5vIHVuYV9hc20ubyBtdWxkaXYubyBcCi0JICAgIHByb20ubyBvZl9kZXZpY2UubyBkZXZyZXMubyBkbWEubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gZW50cnkubyB3b2YubyB3dWYubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gZXRyYXBfMzIubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gcnRyYXBfMzIubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gdHJhcHNfJChCSVRTKS5vCiAKLWRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubworIyBJUlEKK29iai15ICAgICAgICAgICAgICAgICAgICs9IGlycV8kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IHN1bjRtX2lycS5vIHN1bjRjX2lycS5vIHN1bjRkX2lycS5vCiAKLW9iai0kKENPTkZJR19QQ0kpICs9IHBjaWMubwotb2JqLSQoQ09ORklHX1NNUCkgKz0gdHJhbXBvbGluZS5vIHNtcC5vIHN1bjRtX3NtcC5vIHN1bjRkX3NtcC5vCi1vYmotJChDT05GSUdfU1VOX0FVWElPKSArPSBhdXhpby5vCi1vYmotJChDT05GSUdfU1VOX1BNKSArPSBhcGMubyBwbWMubwotb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vIHNwYXJjX2tzeW1zLm8KLW9iai0kKENPTkZJR19TUEFSQ19MRUQpICs9IGxlZC5vCi1vYmotJChDT05GSUdfS0dEQikgKz0ga2dkYi5vCitvYmoteSAgICAgICAgICAgICAgICAgICArPSBwcm9jZXNzXyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gc2lnbmFsXyQoQklUUykubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gaW9wb3J0Lm8KK29iai15ICAgICAgICAgICAgICAgICAgICs9IHNldHVwXyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gaWRwcm9tLm8KK29iai15ICAgICAgICAgICAgICAgICAgICs9IHN5c19zcGFyY18kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IHN5c3RibHNfMzIubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gdGltZV8kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IHdpbmRvd3Mubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gY3B1Lm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGRldmljZXMubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gdGFkcG9sZS5vCitvYmotJChDT05GSUdfU1BBUkMzMikgICArPSB0aWNrMTQubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gcHRyYWNlXyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gdW5hbGlnbmVkXyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gdW5hX2FzbV8kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IG11bGRpdi5vCitvYmoteSAgICAgICAgICAgICAgICAgICArPSBwcm9tX2NvbW1vbi5vCitvYmoteSAgICAgICAgICAgICAgICAgICArPSBwcm9tXyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gb2ZfZGV2aWNlXyQoQklUUykubworb2JqLSQoQ09ORklHX1NQQVJDNjQpICAgKz0gcHJvbV9pcnF0cmFucy5vCisKK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHJlYm9vdC5vCitvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBzeXNmcy5vCitvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBpb21tdS5vCitvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBjZW50cmFsLm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHN0YXJmaXJlLm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHBvd2VyLm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHNidXMubworb2JqLSQoQ09ORklHX1NQQVJDNjQpICAgKz0gZWJ1cy5vCitvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSB2aXNlbXVsLm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IGh2YXBpLm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHNzdGF0ZS5vCitvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBtZGVzYy5vCisKKyMgc3BhcmMzMiBkbyBub3QgdXNlIEdFTkVSSUNfSEFSRElSUVMgYnV0IHVzZXMgdGhlIGdlbmVyaWMgZGV2cmVzIGltcGxlbWVudGF0aW9uCitvYmotJChDT05GSUdfU1BBUkMzMikgICAgICs9IGRldnJlcy5vCitkZXZyZXMteSAgICAgICAgICAgICAgICAgIDo9IC4uLy4uLy4uL2tlcm5lbC9pcnEvZGV2cmVzLm8KKworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgICArPSBkbWEubworCitvYmotJChDT05GSUdfU1BBUkMzMl9QQ0kpICs9IHBjaWMubworCitvYmotJChDT05GSUdfU01QKSAgICAgICAgICs9IHRyYW1wb2xpbmVfJChCSVRTKS5vIHNtcF8kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyX1NNUCkgKz0gc3VuNG1fc21wLm8gc3VuNGRfc21wLm8KK29iai0kKENPTkZJR19TUEFSQzY0X1NNUCkgKz0gaHZ0cmFtcC5vCisKK29iai15ICAgICAgICAgICAgICAgICAgICAgKz0gYXV4aW9fJChCSVRTKS5vCitvYmotJChDT05GSUdfU1VOX1BNKSAgICAgICs9IGFwYy5vIHBtYy5vCisKK29iai0kKENPTkZJR19NT0RVTEVTKSAgICAgKz0gbW9kdWxlLm8KK29iai0kKENPTkZJR19NT0RVTEVTKSAgICAgKz0gc3BhcmNfa3N5bXNfJChCSVRTKS5vCitvYmotJChDT05GSUdfU1BBUkNfTEVEKSAgICs9IGxlZC5vCitvYmotJChDT05GSUdfS0dEQikgICAgICAgICs9IGtnZGJfJChCSVRTKS5vCisKKworb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSArPSBmdHJhY2UubworQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA6PSAtcGcKKworb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpICAgICArPSBzdGFja3RyYWNlLm8KKyMgc3BhcmM2NCBQQ0kKK29iai0kKENPTkZJR19TUEFSQzY0X1BDSSkgICAgKz0gcGNpLm8gcGNpX2NvbW1vbi5vIHBzeWNob19jb21tb24ubworb2JqLSQoQ09ORklHX1NQQVJDNjRfUENJKSAgICArPSBwY2lfcHN5Y2hvLm8gcGNpX3NhYnJlLm8gcGNpX3NjaGl6by5vCitvYmotJChDT05GSUdfU1BBUkM2NF9QQ0kpICAgICs9IHBjaV9zdW40di5vIHBjaV9zdW40dl9hc20ubyBwY2lfZmlyZS5vCitvYmotJChDT05GSUdfUENJX01TSSkgICAgICAgICs9IHBjaV9tc2kubworCitvYmotJChDT05GSUdfQ09NUEFUKSAgICAgICAgICs9IHN5czMyLm8gc3lzX3NwYXJjMzIubyBzaWduYWwzMi5vCisKKyMgc3BhcmM2NCBjcHVmcmVxCitvYmotJChDT05GSUdfVVMzX0ZSRVEpICArPSB1czNfY3B1ZnJlcS5vCitvYmotJChDT05GSUdfVVMyRV9GUkVRKSArPSB1czJlX2NwdWZyZXEubworb2JqLSQoQ09ORklHX1VTM19NQykgICAgKz0gY2htYy5vCisKK29iai0kKENPTkZJR19LUFJPQkVTKSAgICs9IGtwcm9iZXMubworb2JqLSQoQ09ORklHX1NVTl9MRE9NUykgKz0gbGRjLm8gdmlvLm8gdmlvaHMubyBkcy5vCisKK29iai0kKENPTkZJR19BVURJVCkgICAgICs9IGF1ZGl0Lm8KK2F1ZGl0LS0kKENPTkZJR19BVURJVCkgIDo9IGNvbXBhdF9hdWRpdC5vCitvYmotJChDT05GSUdfQ09NUEFUKSAgICArPSAkKGF1ZGl0LS15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggYjViYjk5ZS4uNjhmN2UxMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xNCwxNSArMTQsMjggQEAKIC8vICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tidWlsZC5oPgogCi1pbnQgZm9vKHZvaWQpCisjaWZkZWYgQ09ORklHX1NQQVJDMzIKK2ludCBzcGFyYzMyX2Zvbyh2b2lkKQogewotCURFRklORShBT0ZGX3Rhc2tfdGhyZWFkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZCkpOwotCUJMQU5LKCk7CiAJREVGSU5FKEFPRkZfdGhyZWFkX2Zvcmtfa3BzciwKIAkJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBmb3JrX2twc3IpKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgc3BhcmM2NF9mb28odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgZm9vKHZvaWQpCit7CisJQkxBTksoKTsKKwlERUZJTkUoQU9GRl90YXNrX3RocmVhZCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQpKTsKIAlCTEFOSygpOwogCURFRklORShBT0ZGX21tX2NvbnRleHQsIG9mZnNldG9mKHN0cnVjdCBtbV9zdHJ1Y3QsIGNvbnRleHQpKTsKIAogCS8qIERFRklORShOVU1fVVNFUl9TRUdNRU5UUywgVEFTS19TSVpFPj4yOCk7ICovCiAJcmV0dXJuIDA7CiB9CisKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2F1ZGl0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvYXVkaXQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW8uYyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL2F1eGlvLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXV4aW8uYyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzY0LmMKc2ltaWxhcml0eSBpbmRleCA2NiUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9hdXhpby5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9hdXhpb182NC5jCmluZGV4IDg1OGJlZGEuLjhiNjczNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXV4aW8uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb182NC5jCkBAIC0yNyw3MyArMjcsNTUgQEAKIHN0YXRpYyBlbnVtIGF1eGlvX3R5cGUgYXV4aW9fZGV2dHlwZSA9IEFVWElPX1RZUEVfTk9ERVY7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGF1eGlvX2xvY2spOwogCi1zdGF0aWMgdm9pZCBfX2F1eGlvX3NidXNfc2V0KHU4IGJpdHNfb24sIHU4IGJpdHNfb2ZmKQorc3RhdGljIHZvaWQgX19hdXhpb19ybXcodTggYml0c19vbiwgdTggYml0c19vZmYsIGludCBlYnVzKQogewogCWlmIChhdXhpb19yZWdpc3RlcikgewotCQl1bnNpZ25lZCBjaGFyIHJlZ3ZhbDsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJdW5zaWduZWQgY2hhciBuZXd2YWw7CisJCXU4IHJlZ3ZhbCwgbmV3dmFsOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhdXhpb19sb2NrLCBmbGFncyk7CiAKLQkJcmVndmFsID0gIHNidXNfcmVhZGIoYXV4aW9fcmVnaXN0ZXIpOworCQlyZWd2YWwgPSAoZWJ1cyA/CisJCQkgICh1OCkgcmVhZGwoYXV4aW9fcmVnaXN0ZXIpIDoKKwkJCSAgc2J1c19yZWFkYihhdXhpb19yZWdpc3RlcikpOwogCQluZXd2YWwgPSAgcmVndmFsIHwgYml0c19vbjsKIAkJbmV3dmFsICY9IH5iaXRzX29mZjsKLQkJbmV3dmFsICY9IH5BVVhJT19BVVgxX01BU0s7Ci0JCXNidXNfd3JpdGViKG5ld3ZhbCwgYXV4aW9fcmVnaXN0ZXIpOworCQlpZiAoIWVidXMpCisJCQluZXd2YWwgJj0gfkFVWElPX0FVWDFfTUFTSzsKKwkJaWYgKGVidXMpCisJCQl3cml0ZWwoKHUzMikgbmV3dmFsLCBhdXhpb19yZWdpc3Rlcik7CisJCWVsc2UKKwkJCXNidXNfd3JpdGViKG5ld3ZhbCwgYXV4aW9fcmVnaXN0ZXIpOwogCQkKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXV4aW9fbG9jaywgZmxhZ3MpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgX19hdXhpb19lYnVzX3NldCh1OCBiaXRzX29uLCB1OCBiaXRzX29mZikKK3N0YXRpYyB2b2lkIF9fYXV4aW9fc2V0X2JpdCh1OCBiaXQsIGludCBvbiwgaW50IGVidXMpCiB7Ci0JaWYgKGF1eGlvX3JlZ2lzdGVyKSB7Ci0JCXVuc2lnbmVkIGNoYXIgcmVndmFsOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1bnNpZ25lZCBjaGFyIG5ld3ZhbDsKKwl1OCBiaXRzX29uID0gKGVidXMgPyBBVVhJT19QQ0lPX0xFRCA6IEFVWElPX0FVWDFfTEVEKTsKKwl1OCBiaXRzX29mZiA9IDA7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF1eGlvX2xvY2ssIGZsYWdzKTsKLQotCQlyZWd2YWwgPSAgKHU4KXJlYWRsKGF1eGlvX3JlZ2lzdGVyKTsKLQkJbmV3dmFsID0gIHJlZ3ZhbCB8IGJpdHNfb247Ci0JCW5ld3ZhbCAmPSB+Yml0c19vZmY7Ci0JCXdyaXRlbCgodTMyKW5ld3ZhbCwgYXV4aW9fcmVnaXN0ZXIpOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1eGlvX2xvY2ssIGZsYWdzKTsKKwlpZiAoIW9uKSB7CisJCXU4IHRtcCA9IGJpdHNfb2ZmOworCQliaXRzX29mZiA9IGJpdHNfb247CisJCWJpdHNfb24gPSB0bXA7CiAJfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19hdXhpb19lYnVzX3NldF9sZWQoaW50IG9uKQotewotCShvbikgPyBfX2F1eGlvX2VidXNfc2V0KEFVWElPX1BDSU9fTEVELCAwKSA6Ci0JCV9fYXV4aW9fZWJ1c19zZXQoMCwgQVVYSU9fUENJT19MRUQpIDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fYXV4aW9fc2J1c19zZXRfbGVkKGludCBvbikKLXsKLQkob24pID8gX19hdXhpb19zYnVzX3NldChBVVhJT19BVVgxX0xFRCwgMCkgOgotCQlfX2F1eGlvX3NidXNfc2V0KDAsIEFVWElPX0FVWDFfTEVEKSA7CisJX19hdXhpb19ybXcoYml0c19vbiwgYml0c19vZmYsIGVidXMpOwogfQogCiB2b2lkIGF1eGlvX3NldF9sZWQoaW50IG9uKQogewotCXN3aXRjaChhdXhpb19kZXZ0eXBlKSB7Ci0JY2FzZSBBVVhJT19UWVBFX1NCVVM6Ci0JCV9fYXV4aW9fc2J1c19zZXRfbGVkKG9uKTsKLQkJYnJlYWs7Ci0JY2FzZSBBVVhJT19UWVBFX0VCVVM6Ci0JCV9fYXV4aW9fZWJ1c19zZXRfbGVkKG9uKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWludCBlYnVzID0gYXV4aW9fZGV2dHlwZSA9PSBBVVhJT19UWVBFX0VCVVM7CisJdTggYml0OworCisJYml0ID0gKGVidXMgPyBBVVhJT19QQ0lPX0xFRCA6IEFVWElPX0FVWDFfTEVEKTsKKwlfX2F1eGlvX3NldF9iaXQoYml0LCBvbiwgZWJ1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2F1eGlvX3NidXNfc2V0X2x0ZShpbnQgb24pCitzdGF0aWMgdm9pZCBfX2F1eGlvX3NidXNfc2V0X2x0ZShpbnQgb24pCiB7Ci0JKG9uKSA/IF9fYXV4aW9fc2J1c19zZXQoQVVYSU9fQVVYMV9MVEUsIDApIDogCi0JCV9fYXV4aW9fc2J1c19zZXQoMCwgQVVYSU9fQVVYMV9MVEUpIDsKKwlfX2F1eGlvX3NldF9iaXQoQVVYSU9fQVVYMV9MVEUsIG9uLCAwKTsKIH0KIAogdm9pZCBhdXhpb19zZXRfbHRlKGludCBvbikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2VudHJhbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2VudHJhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2NlbnRyYWwuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvY2VudHJhbC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NoZXJycy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2hlcnJzLlMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9jaGVycnMuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvY2hlcnJzLlMKaW5kZXggODlhZmViZC4uNGVlMWFkNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jaGVycnMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jaGVycnMuUwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLnR5cGUJCWRvX2NoZWV0YWhfcGx1c19kYXRhX3Bhcml0eSwjZnVuY3Rpb24KIGRvX2NoZWV0YWhfcGx1c19kYXRhX3Bhcml0eToKIAlyZHByCQklcGlsLCAlZzIKLQl3cnByCQklZzAsIDE1LCAlcGlsCisJd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKIAkgcmQJCSVwYywgJWc3CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkudHlwZQkJZG9fY2hlZXRhaF9wbHVzX2luc25fcGFyaXR5LCNmdW5jdGlvbgogZG9fY2hlZXRhaF9wbHVzX2luc25fcGFyaXR5OgogCXJkcHIJCSVwaWwsICVnMgotCXdycHIJCSVnMCwgMTUsICVwaWwKKwl3cnByCQklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAJYmEscHQJCSV4Y2MsIGV0cmFwX2lycQogCSByZAkJJXBjLCAlZzcKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCS50eXBlCQljX2Zhc3RfZWNjLCNmdW5jdGlvbgogY19mYXN0X2VjYzoKIAlyZHByCQklcGlsLCAlZzIKLQl3cnByCQklZzAsIDE1LCAlcGlsCisJd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKIAkgcmQJCSVwYywgJWc3CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCkBAIC01MjgsNyArNTI4LDcgQEAKIAkudHlwZQkJY19jZWUsI2Z1bmN0aW9uCiBjX2NlZToKIAlyZHByCQklcGlsLCAlZzIKLQl3cnByCQklZzAsIDE1LCAlcGlsCisJd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKIAkgcmQJCSVwYywgJWc3CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCkBAIC01NjQsNyArNTY0LDcgQEAKIAkudHlwZQkJY19kZWZlcnJlZCwjZnVuY3Rpb24KIGNfZGVmZXJyZWQ6CiAJcmRwcgkJJXBpbCwgJWcyCi0Jd3JwcgkJJWcwLCAxNSwgJXBpbAorCXdycHIJCSVnMCwgUElMX05PUk1BTF9NQVgsICVwaWwKIAliYSxwdAkJJXhjYywgZXRyYXBfaXJxCiAJIHJkCQklcGMsICVnNwogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jaG1jLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jb21wYXRfYXVkaXQuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2NvbXBhdF9hdWRpdC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9jb21wYXRfYXVkaXQuYwppbmRleCBjODMxYjBhLi5kODY1NTc1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2NvbXBhdF9hdWRpdC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2NvbXBhdF9hdWRpdC5jCkBAIC0xLDQgKzEsNSBAQAotI2luY2x1ZGUgPGFzbS91bmlzdGRfMzIuaD4KKyNkZWZpbmUgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogdW5zaWduZWQgc3BhcmMzMl9kaXJfY2xhc3NbXSA9IHsKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NwdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKaW5kZXggMWZjMTdmNS4uNmMyZGEyNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KQEAgLTE1LDE1MyArMTcsMzIyIEBACiAjaW5jbHVkZSA8YXNtL21idXMuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogCisjaW5jbHVkZSAia2VybmVsLmgiCisKIERFRklORV9QRVJfQ1BVKGNwdWluZm9fc3BhcmMsIF9fY3B1X2RhdGEpID0geyAwIH07CiAKLXN0cnVjdCBjcHVfaXVfaW5mbyB7Ci0gIGludCBwc3JfaW1wbDsKLSAgaW50IHBzcl92ZXJzOwotICBjaGFyKiBjcHVfbmFtZTsgICAvKiBzaG91bGQgYmUgZW5vdWdoIEkgaG9wZS4uLiAqLworc3RydWN0IGNwdV9pbmZvIHsKKwlpbnQgcHNyX3ZlcnM7CisJY29uc3QgY2hhciAqbmFtZTsKIH07CiAKLXN0cnVjdCBjcHVfZnBfaW5mbyB7Ci0gIGludCBwc3JfaW1wbDsKLSAgaW50IGZwX3ZlcnM7Ci0gIGNoYXIqIGZwX25hbWU7CitzdHJ1Y3QgZnB1X2luZm8geworCWludCBmcF92ZXJzOworCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCisjZGVmaW5lIE5PQ1BVIDgKKyNkZWZpbmUgTk9GUFUgOAorCitzdHJ1Y3QgbWFudWZhY3R1cmVyX2luZm8geworCWludCBwc3JfaW1wbDsKKwlzdHJ1Y3QgY3B1X2luZm8gY3B1X2luZm9bTk9DUFVdOworCXN0cnVjdCBmcHVfaW5mbyBmcHVfaW5mb1tOT0ZQVV07Cit9OworCisjZGVmaW5lIENQVSh2ZXIsIF9uYW1lKSBcCit7IC5wc3JfdmVycyA9IHZlciwgLm5hbWUgPSBfbmFtZSB9CisKKyNkZWZpbmUgRlBVKHZlciwgX25hbWUpIFwKK3sgLmZwX3ZlcnMgPSB2ZXIsIC5uYW1lID0gX25hbWUgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hbnVmYWN0dXJlcl9pbmZvIF9faW5pdGNvbnN0IG1hbnVmYWN0dXJlcl9pbmZvW10gPSB7Cit7CisJMCwKKwkvKiBTdW40LzEwMCwgNC8yMDAsIFNMQyAqLworCS5jcHVfaW5mbyA9IHsKKwkJQ1BVKDAsICJGdWppdHN1ICBNQjg2OTAwLzFBIG9yIExTSSBMNjQ4MzEgU3BhcmNLSVQtNDAiKSwKKwkJLyogYm9ybmVkIFNUUDEwMTJQR0EgKi8KKwkJQ1BVKDQsICAiRnVqaXRzdSAgTUI4NjkwNCIpLAorCQlDUFUoNSwgIkZ1aml0c3UgVHVyYm9TcGFyYyBNQjg2OTA3IiksCisJCUNQVSgtMSwgTlVMTCkKKwl9LAorCS5mcHVfaW5mbyA9IHsKKwkJRlBVKDAsICJGdWppdHN1IE1CODY5MTAgb3IgV2VpdGVrIFdUTDExNjQvNSIpLAorCQlGUFUoMSwgIkZ1aml0c3UgTUI4NjkxMSBvciBXZWl0ZWsgV1RMMTE2NC81IG9yIExTSSBMNjQ4MzEiKSwKKwkJRlBVKDIsICJMU0kgTG9naWMgTDY0ODAyIG9yIFRleGFzIEluc3RydW1lbnRzIEFDVDg4NDciKSwKKwkJLyogU3BhcmNTdGF0aW9uIFNMQywgU3BhcmNTdGF0aW9uMSAqLworCQlGUFUoMywgIldlaXRlayBXVEwzMTcwLzIiKSwKKwkJLyogU1BBUkNzdGF0aW9uLTUgKi8KKwkJRlBVKDQsICJMc2kgTG9naWMvTWVpa28gTDY0ODA0IG9yIGNvbXBhdGlibGUiKSwKKwkJRlBVKC0xLCBOVUxMKQorCX0KK30seworCTEsCisJLmNwdV9pbmZvID0geworCQkvKiBTcGFyY1N0YXRpb24yLCBTcGFyY1NlcnZlciA0OTAgJiA2OTAgKi8KKwkJQ1BVKDAsICJMU0kgTG9naWMgQ29ycG9yYXRpb24gLSBMNjQ4MTEiKSwKKwkJLyogU3BhcmNTdGF0aW9uMiAqLworCQlDUFUoMSwgIkN5cHJlc3MvUk9TUyBDWTdDNjAxIiksCisJCS8qIEVtYmVkZGVkIGNvbnRyb2xsZXIgKi8KKwkJQ1BVKDMsICJDeXByZXNzL1JPU1MgQ1k3QzYxMSIpLAorCQkvKiBSb3NzIFRlY2hub2xvZ2llcyBIeXBlclNwYXJjICovCisJCUNQVSgweGYsICJST1NTIEh5cGVyU3BhcmMgUlQ2MjAiKSwKKwkJQ1BVKDB4ZSwgIlJPU1MgSHlwZXJTcGFyYyBSVDYyNSBvciBSVDYyNiIpLAorCQlDUFUoLTEsIE5VTEwpCisJfSwKKwkuZnB1X2luZm8gPSB7CisJCUZQVSgwLCAiUk9TUyBIeXBlclNwYXJjIGNvbWJpbmVkIElVL0ZQVSIpLAorCQlGUFUoMSwgIkxzaSBMb2dpYyBMNjQ4MTQiKSwKKwkJRlBVKDIsICJUZXhhcyBJbnN0cnVtZW50cyBUTVMzOTAtQzYwMkEiKSwKKwkJRlBVKDMsICJDeXByZXNzIENZN0M2MDIgRlBVIiksCisJCUZQVSgtMSwgTlVMTCkKKwl9Cit9LHsKKwkyLAorCS5jcHVfaW5mbyA9IHsKKwkJLyogRUNMIEltcGxlbWVudGF0aW9uLCBDUkFZIFMtTVAgU3VwZXJjb21wdXRlci4uLiBBSUVFRSEgKi8KKwkJLyogU29tZW9uZSBwbGVhc2Ugd3JpdGUgdGhlIGNvZGUgdG8gc3VwcG9ydCB0aGlzIGJlYXN0ISA7KSAqLworCQlDUFUoMCwgIkJpcG9sYXIgSW50ZWdyYXRlZCBUZWNobm9sb2d5IC0gQjUwMTAiKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJMywKKwkuY3B1X2luZm8gPSB7CisJCUNQVSgwLCAiTFNJIExvZ2ljIENvcnBvcmF0aW9uIC0gdW5rbm93bi10eXBlIiksCisJCUNQVSgtMSwgTlVMTCkKKwl9LAorCS5mcHVfaW5mbyA9IHsKKwkJRlBVKC0xLCBOVUxMKQorCX0KK30seworCTQsCisJLmNwdV9pbmZvID0geworCQlDUFUoMCwgIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIC0gU3VwZXJTcGFyYy0oSUkpIiksCisJCS8qIFNwYXJjQ2xhc3NpYyAgLS0gIGJvcm5lZCBTVFAxMDEwVEFCLTUwKi8KKwkJQ1BVKDEsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIE1pY3JvU3BhcmMiKSwKKwkJQ1BVKDIsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIE1pY3JvU3BhcmMgSUkiKSwKKwkJQ1BVKDMsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIFN1cGVyU3BhcmMgNTEiKSwKKwkJQ1BVKDQsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIFN1cGVyU3BhcmMgNjEiKSwKKwkJQ1BVKDUsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIHVua25vd24iKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQkvKiBTdXBlclNwYXJjIDUwIG1vZHVsZSAqLworCQlGUFUoMCwgIlN1cGVyU3BhcmMgb24tY2hpcCBGUFUiKSwKKwkJLyogU3BhcmNDbGFzc2ljICovCisJCUZQVSg0LCAiVEkgTWljcm9TcGFyYyBvbiBjaGlwIEZQVSIpLAorCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJNSwKKwkuY3B1X2luZm8gPSB7CisJCUNQVSgwLCAiTWF0c3VzaGl0YSAtIE1OMTA1MDEiKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoMCwgIk1hdHN1c2hpdGEgTU4xMDUwMSIpLAorCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJNiwKKwkuY3B1X2luZm8gPSB7CisJCUNQVSgwLCAiUGhpbGlwcyBDb3Jwb3JhdGlvbiAtIHVua25vd24iKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJNywKKwkuY3B1X2luZm8gPSB7CisJCUNQVSgwLCAiSGFydmVzdCBWTFNJIERlc2lnbiBDZW50ZXIsIEluYy4gLSB1bmtub3duIiksCisJCUNQVSgtMSwgTlVMTCkKKwl9LAorCS5mcHVfaW5mbyA9IHsKKwkJRlBVKC0xLCBOVUxMKQorCX0KK30seworCTgsCisJLmNwdV9pbmZvID0geworCQlDUFUoMCwgIlN5c3RlbXMgYW5kIFByb2Nlc3NlcyBFbmdpbmVlcmluZyBDb3Jwb3JhdGlvbiAoU1BFQykiKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJOSwKKwkuY3B1X2luZm8gPSB7CisJCS8qIEdhbGxpdW0gYXJzZW5pZGUgMjAwTUh6LCBCT09PT0dPT09PTUlQUyEhISAqLworCQlDUFUoMCwgIkZ1aml0c3Ugb3IgV2VpdGVrIFBvd2VyLVVQIiksCisJCUNQVSgxLCAiRnVqaXRzdSBvciBXZWl0ZWsgUG93ZXItVVAiKSwKKwkJQ1BVKDIsICJGdWppdHN1IG9yIFdlaXRlayBQb3dlci1VUCIpLAorCQlDUFUoMywgIkZ1aml0c3Ugb3IgV2VpdGVrIFBvd2VyLVVQIiksCisJCUNQVSgtMSwgTlVMTCkKKwl9LAorCS5mcHVfaW5mbyA9IHsKKwkJRlBVKDMsICJGdWppdHN1IG9yIFdlaXRlayBvbi1jaGlwIEZQVSIpLAorCQlGUFUoLTEsIE5VTEwpCisJfQorfSx7CisJMHgxNywKKwkuY3B1X2luZm8gPSB7CisJCUNQVSgweDEwLCAiVEkgVWx0cmFTcGFyYyBJICAgKFNwaXRGaXJlKSIpLAorCQlDUFUoMHgxMSwgIlRJIFVsdHJhU3BhcmMgSUkgIChCbGFja0JpcmQpIiksCisJCUNQVSgweDEyLCAiVEkgVWx0cmFTcGFyYyBJSWkgKFNhYnJlKSIpLAorCQlDUFUoMHgxMywgIlRJIFVsdHJhU3BhcmMgSUllIChIdW1taW5nYmlyZCkiKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoMHgxMCwgIlVsdHJhU3BhcmMgSSBpbnRlZ3JhdGVkIEZQVSIpLAorCQlGUFUoMHgxMSwgIlVsdHJhU3BhcmMgSUkgaW50ZWdyYXRlZCBGUFUiKSwKKwkJRlBVKDB4MTIsICJVbHRyYVNwYXJjIElJaSBpbnRlZ3JhdGVkIEZQVSIpLAorCQlGUFUoMHgxMywgIlVsdHJhU3BhcmMgSUllIGludGVncmF0ZWQgRlBVIiksCisJCUZQVSgtMSwgTlVMTCkKKwl9Cit9LHsKKwkweDIyLAorCS5jcHVfaW5mbyA9IHsKKwkJQ1BVKDB4MTAsICJUSSBVbHRyYVNwYXJjIEkgICAoU3BpdEZpcmUpIiksCisJCUNQVSgtMSwgTlVMTCkKKwl9LAorCS5mcHVfaW5mbyA9IHsKKwkJRlBVKDB4MTAsICJVbHRyYVNwYXJjIEkgaW50ZWdyYXRlZCBGUFUiKSwKKwkJRlBVKC0xLCBOVUxMKQorCX0KK30seworCTB4M2UsCisJLmNwdV9pbmZvID0geworCQlDUFUoMHgxNCwgIlRJIFVsdHJhU3BhcmMgSUlJIChDaGVldGFoKSIpLAorCQlDUFUoMHgxNSwgIlRJIFVsdHJhU3BhcmMgSUlJKyAoQ2hlZXRhaCspIiksCisJCUNQVSgweDE2LCAiVEkgVWx0cmFTcGFyYyBJSUlpIChKYWxhcGVubykiKSwKKwkJQ1BVKDB4MTgsICJUSSBVbHRyYVNwYXJjIElWIChKYWd1YXIpIiksCisJCUNQVSgweDE5LCAiVEkgVWx0cmFTcGFyYyBJVisgKFBhbnRoZXIpIiksCisJCUNQVSgweDIyLCAiVEkgVWx0cmFTcGFyYyBJSUlpKyAoU2VycmFubykiKSwKKwkJQ1BVKC0xLCBOVUxMKQorCX0sCisJLmZwdV9pbmZvID0geworCQlGUFUoMHgxNCwgIlVsdHJhU3BhcmMgSUlJIGludGVncmF0ZWQgRlBVIiksCisJCUZQVSgweDE1LCAiVWx0cmFTcGFyYyBJSUkrIGludGVncmF0ZWQgRlBVIiksCisJCUZQVSgweDE2LCAiVWx0cmFTcGFyYyBJSUlpIGludGVncmF0ZWQgRlBVIiksCisJCUZQVSgweDE4LCAiVWx0cmFTcGFyYyBJViBpbnRlZ3JhdGVkIEZQVSIpLAorCQlGUFUoMHgxOSwgIlVsdHJhU3BhcmMgSVYrIGludGVncmF0ZWQgRlBVIiksCisJCUZQVSgweDIyLCAiVWx0cmFTcGFyYyBJSUlpKyBpbnRlZ3JhdGVkIEZQVSIpLAorCQlGUFUoLTEsIE5VTEwpCisJfQorfX07CisKIC8qIEluIG9yZGVyIHRvIGdldCB0aGUgZnB1IHR5cGUgY29ycmVjdCwgeW91IG5lZWQgdG8gdGFrZSB0aGUgSURQUk9NJ3MKICAqIG1hY2hpbmUgdHlwZSB2YWx1ZSBpbnRvIGNvbnNpZGVyYXRpb24gdG9vLiAgSSB3aWxsIGZpeCB0aGlzLgogICovCi1zdGF0aWMgc3RydWN0IGNwdV9mcF9pbmZvIGxpbnV4X3NwYXJjX2ZwdVtdID0gewotICB7IDAsIDAsICJGdWppdHN1IE1CODY5MTAgb3IgV2VpdGVrIFdUTDExNjQvNSJ9LAotICB7IDAsIDEsICJGdWppdHN1IE1CODY5MTEgb3IgV2VpdGVrIFdUTDExNjQvNSBvciBMU0kgTDY0ODMxIn0sCi0gIHsgMCwgMiwgIkxTSSBMb2dpYyBMNjQ4MDIgb3IgVGV4YXMgSW5zdHJ1bWVudHMgQUNUODg0NyJ9LAotICAvKiBTcGFyY1N0YXRpb24gU0xDLCBTcGFyY1N0YXRpb24xICovCi0gIHsgMCwgMywgIldlaXRlayBXVEwzMTcwLzIifSwKLSAgLyogU1BBUkNzdGF0aW9uLTUgKi8KLSAgeyAwLCA0LCAiTHNpIExvZ2ljL01laWtvIEw2NDgwNCBvciBjb21wYXRpYmxlIn0sCi0gIHsgMCwgNSwgInJlc2VydmVkIn0sCi0gIHsgMCwgNiwgInJlc2VydmVkIn0sCi0gIHsgMCwgNywgIk5vIEZQVSJ9LAotICB7IDEsIDAsICJST1NTIEh5cGVyU3BhcmMgY29tYmluZWQgSVUvRlBVIn0sCi0gIHsgMSwgMSwgIkxzaSBMb2dpYyBMNjQ4MTQifSwKLSAgeyAxLCAyLCAiVGV4YXMgSW5zdHJ1bWVudHMgVE1TMzkwLUM2MDJBIn0sCi0gIHsgMSwgMywgIkN5cHJlc3MgQ1k3QzYwMiBGUFUifSwKLSAgeyAxLCA0LCAicmVzZXJ2ZWQifSwKLSAgeyAxLCA1LCAicmVzZXJ2ZWQifSwKLSAgeyAxLCA2LCAicmVzZXJ2ZWQifSwKLSAgeyAxLCA3LCAiTm8gRlBVIn0sCi0gIHsgMiwgMCwgIkJJVCBCNTAxMCBvciBCNTExMC8yMCBvciBCNTIxMCJ9LAotICB7IDIsIDEsICJyZXNlcnZlZCJ9LAotICB7IDIsIDIsICJyZXNlcnZlZCJ9LAotICB7IDIsIDMsICJyZXNlcnZlZCJ9LAotICB7IDIsIDQsICJyZXNlcnZlZCJ9LAotICB7IDIsIDUsICJyZXNlcnZlZCJ9LAotICB7IDIsIDYsICJyZXNlcnZlZCJ9LAotICB7IDIsIDcsICJObyBGUFUifSwKLSAgLyogU3VwZXJTcGFyYyA1MCBtb2R1bGUgKi8KLSAgeyA0LCAwLCAiU3VwZXJTcGFyYyBvbi1jaGlwIEZQVSJ9LAotICAvKiBTcGFyY0NsYXNzaWMgKi8KLSAgeyA0LCA0LCAiVEkgTWljcm9TcGFyYyBvbiBjaGlwIEZQVSJ9LAotICB7IDUsIDAsICJNYXRzdXNoaXRhIE1OMTA1MDEifSwKLSAgeyA1LCAxLCAicmVzZXJ2ZWQifSwKLSAgeyA1LCAyLCAicmVzZXJ2ZWQifSwKLSAgeyA1LCAzLCAicmVzZXJ2ZWQifSwKLSAgeyA1LCA0LCAicmVzZXJ2ZWQifSwKLSAgeyA1LCA1LCAicmVzZXJ2ZWQifSwKLSAgeyA1LCA2LCAicmVzZXJ2ZWQifSwKLSAgeyA1LCA3LCAiTm8gRlBVIn0sCi0gIHsgOSwgMywgIkZ1aml0c3Ugb3IgV2VpdGVrIG9uLWNoaXAgRlBVIn0sCi19OwogCi0jZGVmaW5lIE5TUEFSQ0ZQVSAgQVJSQVlfU0laRShsaW51eF9zcGFyY19mcHUpCi0KLXN0YXRpYyBzdHJ1Y3QgY3B1X2l1X2luZm8gbGludXhfc3BhcmNfY2hpcHNbXSA9IHsKLSAgLyogU3VuNC8xMDAsIDQvMjAwLCBTTEMgKi8KLSAgeyAwLCAwLCAiRnVqaXRzdSAgTUI4NjkwMC8xQSBvciBMU0kgTDY0ODMxIFNwYXJjS0lULTQwIn0sCi0gIC8qIGJvcm5lZCBTVFAxMDEyUEdBICovCi0gIHsgMCwgNCwgIkZ1aml0c3UgIE1CODY5MDQifSwKLSAgeyAwLCA1LCAiRnVqaXRzdSBUdXJib1NwYXJjIE1CODY5MDcifSwKLSAgLyogU3BhcmNTdGF0aW9uMiwgU3BhcmNTZXJ2ZXIgNDkwICYgNjkwICovCi0gIHsgMSwgMCwgIkxTSSBMb2dpYyBDb3Jwb3JhdGlvbiAtIEw2NDgxMSJ9LAotICAvKiBTcGFyY1N0YXRpb24yICovCi0gIHsgMSwgMSwgIkN5cHJlc3MvUk9TUyBDWTdDNjAxIn0sCi0gIC8qIEVtYmVkZGVkIGNvbnRyb2xsZXIgKi8KLSAgeyAxLCAzLCAiQ3lwcmVzcy9ST1NTIENZN0M2MTEifSwKLSAgLyogUm9zcyBUZWNobm9sb2dpZXMgSHlwZXJTcGFyYyAqLwotICB7IDEsIDB4ZiwgIlJPU1MgSHlwZXJTcGFyYyBSVDYyMCJ9LAotICB7IDEsIDB4ZSwgIlJPU1MgSHlwZXJTcGFyYyBSVDYyNSBvciBSVDYyNiJ9LAotICAvKiBFQ0wgSW1wbGVtZW50YXRpb24sIENSQVkgUy1NUCBTdXBlcmNvbXB1dGVyLi4uIEFJRUVFISAqLwotICAvKiBTb21lb25lIHBsZWFzZSB3cml0ZSB0aGUgY29kZSB0byBzdXBwb3J0IHRoaXMgYmVhc3QhIDspICovCi0gIHsgMiwgMCwgIkJpcG9sYXIgSW50ZWdyYXRlZCBUZWNobm9sb2d5IC0gQjUwMTAifSwKLSAgeyAzLCAwLCAiTFNJIExvZ2ljIENvcnBvcmF0aW9uIC0gdW5rbm93bi10eXBlIn0sCi0gIHsgNCwgMCwgIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIC0gU3VwZXJTcGFyYy0oSUkpIn0sCi0gIC8qIFNwYXJjQ2xhc3NpYyAgLS0gIGJvcm5lZCBTVFAxMDEwVEFCLTUwKi8KLSAgeyA0LCAxLCAiVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBNaWNyb1NwYXJjIn0sCi0gIHsgNCwgMiwgIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIC0gTWljcm9TcGFyYyBJSSJ9LAotICB7IDQsIDMsICJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiAtIFN1cGVyU3BhcmMgNTEifSwKLSAgeyA0LCA0LCAiVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4gLSBTdXBlclNwYXJjIDYxIn0sCi0gIHsgNCwgNSwgIlRleGFzIEluc3RydW1lbnRzLCBJbmMuIC0gdW5rbm93biJ9LAotICB7IDUsIDAsICJNYXRzdXNoaXRhIC0gTU4xMDUwMSJ9LAotICB7IDYsIDAsICJQaGlsaXBzIENvcnBvcmF0aW9uIC0gdW5rbm93biJ9LAotICB7IDcsIDAsICJIYXJ2ZXN0IFZMU0kgRGVzaWduIENlbnRlciwgSW5jLiAtIHVua25vd24ifSwKLSAgLyogR2FsbGl1bSBhcnNlbmlkZSAyMDBNSHosIEJPT09PR09PT09NSVBTISEhICovCi0gIHsgOCwgMCwgIlN5c3RlbXMgYW5kIFByb2Nlc3NlcyBFbmdpbmVlcmluZyBDb3Jwb3JhdGlvbiAoU1BFQykifSwKLSAgeyA5LCAwLCAiRnVqaXRzdSBvciBXZWl0ZWsgUG93ZXItVVAifSwKLSAgeyA5LCAxLCAiRnVqaXRzdSBvciBXZWl0ZWsgUG93ZXItVVAifSwKLSAgeyA5LCAyLCAiRnVqaXRzdSBvciBXZWl0ZWsgUG93ZXItVVAifSwKLSAgeyA5LCAzLCAiRnVqaXRzdSBvciBXZWl0ZWsgUG93ZXItVVAifSwKLSAgeyAweGEsIDAsICJVTktOT1dOIENQVS1WRU5ET1IvVFlQRSJ9LAotICB7IDB4YiwgMCwgIlVOS05PV04gQ1BVLVZFTkRPUi9UWVBFIn0sCi0gIHsgMHhjLCAwLCAiVU5LTk9XTiBDUFUtVkVORE9SL1RZUEUifSwKLSAgeyAweGQsIDAsICJVTktOT1dOIENQVS1WRU5ET1IvVFlQRSJ9LAotICB7IDB4ZSwgMCwgIlVOS05PV04gQ1BVLVZFTkRPUi9UWVBFIn0sCi0gIHsgMHhmLCAwLCAiVU5LTk9XTiBDUFUtVkVORE9SL1RZUEUifSwKLX07Ci0KLSNkZWZpbmUgTlNQQVJDQ0hJUFMgIEFSUkFZX1NJWkUobGludXhfc3BhcmNfY2hpcHMpCi0KLWNoYXIgKnNwYXJjX2NwdV90eXBlOwotY2hhciAqc3BhcmNfZnB1X3R5cGU7Citjb25zdCBjaGFyICpzcGFyY19jcHVfdHlwZTsKK2NvbnN0IGNoYXIgKnNwYXJjX2ZwdV90eXBlOwogCiB1bnNpZ25lZCBpbnQgZnNyX3N0b3JhZ2U7CiAKK3N0YXRpYyB2b2lkIHNldF9jcHVfYW5kX2ZwdShpbnQgcHNyX2ltcGwsIGludCBwc3JfdmVycywgaW50IGZwdV92ZXJzKQoreworCXNwYXJjX2NwdV90eXBlID0gTlVMTDsKKwlzcGFyY19mcHVfdHlwZSA9IE5VTEw7CisJaWYgKHBzcl9pbXBsIDwgQVJSQVlfU0laRShtYW51ZmFjdHVyZXJfaW5mbykpCisJeworCQljb25zdCBzdHJ1Y3QgY3B1X2luZm8gKmNwdTsKKwkJY29uc3Qgc3RydWN0IGZwdV9pbmZvICpmcHU7CisKKwkJY3B1ID0gJm1hbnVmYWN0dXJlcl9pbmZvW3Bzcl9pbXBsXS5jcHVfaW5mb1swXTsKKwkJd2hpbGUgKGNwdS0+cHNyX3ZlcnMgIT0gLTEpCisJCXsKKwkJCWlmIChjcHUtPnBzcl92ZXJzID09IHBzcl92ZXJzKSB7CisJCQkJc3BhcmNfY3B1X3R5cGUgPSBjcHUtPm5hbWU7CisJCQkJc3BhcmNfZnB1X3R5cGUgPSAiTm8gRlBVIjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNwdSsrOworCQl9CisJCWZwdSA9ICAmbWFudWZhY3R1cmVyX2luZm9bcHNyX2ltcGxdLmZwdV9pbmZvWzBdOworCQl3aGlsZSAoZnB1LT5mcF92ZXJzICE9IC0xKQorCQl7CisJCQlpZiAoZnB1LT5mcF92ZXJzID09IGZwdV92ZXJzKSB7CisJCQkJc3BhcmNfZnB1X3R5cGUgPSBmcHUtPm5hbWU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmcHUrKzsKKwkJfQorCX0KKwlpZiAoc3BhcmNfY3B1X3R5cGUgPT0gTlVMTCkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiQ1BVOiBVbmtub3duIGNoaXAsIGltcGxbMHgleF0gdmVyc1sweCV4XVxuIiwKKwkJICAgICAgIHBzcl9pbXBsLCBwc3JfdmVycyk7CisJCXNwYXJjX2NwdV90eXBlID0gIlVua25vd24gQ1BVIjsKKwl9CisJaWYgKHNwYXJjX2ZwdV90eXBlID09IE5VTEwpCisJeworCQlwcmludGsoS0VSTl9FUlIgIkZQVTogVW5rbm93biBjaGlwLCBpbXBsWzB4JXhdIHZlcnNbMHgleF1cbiIsCisJCSAgICAgICBwc3JfaW1wbCwgZnB1X3ZlcnMpOworCQlzcGFyY19mcHVfdHlwZSA9ICJVbmtub3duIEZQVSI7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NQQVJDMzIKIHZvaWQgX19jcHVpbml0IGNwdV9wcm9iZSh2b2lkKQogewogCWludCBwc3JfaW1wbCwgcHNyX3ZlcnMsIGZwdV92ZXJzOwotCWludCBpLCBwc3I7CisJaW50IHBzcjsKIAotCXBzcl9pbXBsID0gKChnZXRfcHNyKCk+PjI4KSYweGYpOwotCXBzcl92ZXJzID0gKChnZXRfcHNyKCk+PjI0KSYweGYpOworCXBzcl9pbXBsID0gKChnZXRfcHNyKCkgPj4gMjgpICYgMHhmKTsKKwlwc3JfdmVycyA9ICgoZ2V0X3BzcigpID4+IDI0KSAmIDB4Zik7CiAKIAlwc3IgPSBnZXRfcHNyKCk7CiAJcHV0X3Bzcihwc3IgfCBQU1JfRUYpOwotCWZwdV92ZXJzID0gKChnZXRfZnNyKCk+PjE3KSYweDcpOworCWZwdV92ZXJzID0gKChnZXRfZnNyKCkgPj4gMTcpICYgMHg3KTsKIAlwdXRfcHNyKHBzcik7CiAKLQlmb3IoaSA9IDA7IGk8TlNQQVJDQ0hJUFM7IGkrKykgewotCQlpZihsaW51eF9zcGFyY19jaGlwc1tpXS5wc3JfaW1wbCA9PSBwc3JfaW1wbCkKLQkJCWlmKGxpbnV4X3NwYXJjX2NoaXBzW2ldLnBzcl92ZXJzID09IHBzcl92ZXJzKSB7Ci0JCQkJc3BhcmNfY3B1X3R5cGUgPSBsaW51eF9zcGFyY19jaGlwc1tpXS5jcHVfbmFtZTsKLQkJCQlicmVhazsKLQkJCX0KLQl9CisJc2V0X2NwdV9hbmRfZnB1KHBzcl9pbXBsLCBwc3JfdmVycywgZnB1X3ZlcnMpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9jcHVfcHJvYmUodm9pZCkKK3sKKwlzd2l0Y2ggKHN1bjR2X2NoaXBfdHlwZSkgeworCWNhc2UgU1VONFZfQ0hJUF9OSUFHQVJBMToKKwkJc3BhcmNfY3B1X3R5cGUgPSAiVWx0cmFTcGFyYyBUMSAoTmlhZ2FyYSkiOworCQlzcGFyY19mcHVfdHlwZSA9ICJVbHRyYVNwYXJjIFQxIGludGVncmF0ZWQgRlBVIjsKKwkJYnJlYWs7CiAKLQlpZihpPT1OU1BBUkNDSElQUykKLQkJcHJpbnRrKCJERUJVRzogcHNyLmltcGwgPSAweCV4ICAgcHNyLnZlcnMgPSAweCV4XG4iLCBwc3JfaW1wbCwgCi0JCQkgICAgcHNyX3ZlcnMpOworCWNhc2UgU1VONFZfQ0hJUF9OSUFHQVJBMjoKKwkJc3BhcmNfY3B1X3R5cGUgPSAiVWx0cmFTcGFyYyBUMiAoTmlhZ2FyYTIpIjsKKwkJc3BhcmNfZnB1X3R5cGUgPSAiVWx0cmFTcGFyYyBUMiBpbnRlZ3JhdGVkIEZQVSI7CisJCWJyZWFrOwogCi0JZm9yKGkgPSAwOyBpPE5TUEFSQ0ZQVTsgaSsrKSB7Ci0JCWlmKGxpbnV4X3NwYXJjX2ZwdVtpXS5wc3JfaW1wbCA9PSBwc3JfaW1wbCkKLQkJCWlmKGxpbnV4X3NwYXJjX2ZwdVtpXS5mcF92ZXJzID09IGZwdV92ZXJzKSB7Ci0JCQkJc3BhcmNfZnB1X3R5cGUgPSBsaW51eF9zcGFyY19mcHVbaV0uZnBfbmFtZTsKLQkJCQlicmVhazsKLQkJCX0KLQl9Ci0KLQlpZihpID09IE5TUEFSQ0ZQVSkgewotCQlwcmludGsoIkRFQlVHOiBwc3IuaW1wbCA9IDB4JXggIGZzci52ZXJzID0gMHgleFxuIiwgcHNyX2ltcGwsCi0JCQkgICAgZnB1X3ZlcnMpOwotCQlzcGFyY19mcHVfdHlwZSA9IGxpbnV4X3NwYXJjX2ZwdVszMV0uZnBfbmFtZTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFU6IFVua25vd24gc3VuNHYgY3B1IHR5cGUgWyVzXVxuIiwKKwkJICAgICAgIHByb21fY3B1X2NvbXBhdGlibGUpOworCQlzcGFyY19jcHVfdHlwZSA9ICJVbmtub3duIFNVTjRWIENQVSI7CisJCXNwYXJjX2ZwdV90eXBlID0gIlVua25vd24gU1VONFYgRlBVIjsKKwkJYnJlYWs7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBjcHVfdHlwZV9wcm9iZSh2b2lkKQoreworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCXN1bjR2X2NwdV9wcm9iZSgpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgdmVyOworCQlpbnQgbWFudWYsIGltcGw7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOworCisJCW1hbnVmID0gKCh2ZXIgPj4gNDgpICYgMHhmZmZmKTsKKwkJaW1wbCA9ICgodmVyID4+IDMyKSAmIDB4ZmZmZik7CisJCXNldF9jcHVfYW5kX2ZwdShtYW51ZiwgaW1wbCwgaW1wbCk7CisJfQorCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGNwdV90eXBlX3Byb2JlKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCmluZGV4IGFkNjU2YjAuLmIxNzFhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKQEAgLTEzMywxNCArMTMzLDEyIEBACiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAogCWNwdV9wcm9iZSgpOwotI2lmZGVmIENPTkZJR19TVU5fQVVYSU8KIAl7CiAJCWV4dGVybiB2b2lkIGF1eGlvX3Byb2JlKHZvaWQpOwogCQlleHRlcm4gdm9pZCBhdXhpb19wb3dlcl9wcm9iZSh2b2lkKTsKIAkJYXV4aW9fcHJvYmUoKTsKIAkJYXV4aW9fcG93ZXJfcHJvYmUoKTsKIAl9Ci0jZW5kaWYKIAljbG9ja19zdG9wX3Byb2JlKCk7CiAKIAlpZiAoQVJDSF9TVU40QykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvZHMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvZHMuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX21pc3MuUyBiL2FyY2gvc3BhcmMva2VybmVsL2R0bGJfbWlzcy5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfbWlzcy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9kdGxiX21pc3MuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX3Byb3QuUyBiL2FyY2gvc3BhcmMva2VybmVsL2R0bGJfcHJvdC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfcHJvdC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9kdGxiX3Byb3QuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuaCBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LmgKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5oCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5oCmluZGV4IDM0ZDdhYjUuLjRmNTNhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuaAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5oCkBAIC01LDkgKzUsNDMgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2NwdV90eXBlOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2ZwdV90eXBlOworLyogaXJxICovCitleHRlcm4gdm9pZCBoYW5kbGVyX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKKyNpZmRlZiBDT05GSUdfU1BBUkMzMgorLyogdHJhcHMgKi8KK2V4dGVybiB2b2lkIGRvX2h3X2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB0eXBlKTsKK2V4dGVybiB2b2lkIGRvX2lsbGVnYWxfaW5zdHJ1Y3Rpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnBjLCB1bnNpZ25lZCBsb25nIHBzcik7CisKK2V4dGVybiB2b2lkIGRvX3ByaXZfaW5zdHJ1Y3Rpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnBjLCB1bnNpZ25lZCBsb25nIHBzcik7CitleHRlcm4gdm9pZCBkb19tZW1hY2Nlc3NfdW5hbGlnbmVkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5wYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwc3IpOworZXh0ZXJuIHZvaWQgZG9fZnBkX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5wYywgdW5zaWduZWQgbG9uZyBwc3IpOworZXh0ZXJuIHZvaWQgZG9fZnBlX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5wYywgdW5zaWduZWQgbG9uZyBwc3IpOworZXh0ZXJuIHZvaWQgaGFuZGxlX3RhZ19vdmVyZmxvdyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKK2V4dGVybiB2b2lkIGhhbmRsZV93YXRjaHBvaW50KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKK2V4dGVybiB2b2lkIGhhbmRsZV9yZWdfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKK2V4dGVybiB2b2lkIGhhbmRsZV9jcF9kaXNhYmxlZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5wYywgdW5zaWduZWQgbG9uZyBwc3IpOworZXh0ZXJuIHZvaWQgaGFuZGxlX2NwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKKworCisKKy8qIGVudHJ5LlMgKi8KK2V4dGVybiB2b2lkIGZwc2F2ZSh1bnNpZ25lZCBsb25nICpmcHJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZzciwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpmcHF1ZXVlLCB1bnNpZ25lZCBsb25nICpmcHFkZXB0aCk7CitleHRlcm4gdm9pZCBmcGxvYWQodW5zaWduZWQgbG9uZyAqZnByZWdzLCB1bnNpZ25lZCBsb25nICpmc3IpOworCisjZWxzZSAvKiBDT05GSUdfU1BBUkMzMiAqLwogZXh0ZXJuIHZvaWQgX19pbml0IHBlcl9jcHVfcGF0Y2godm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgc3VuNHZfcGF0Y2godm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYm9vdF9jcHVfaWRfdG9vX2xhcmdlKGludCBjcHUpOwpAQCAtMTg4LDggKzIyMiw4IEBACiBleHRlcm4gc3RydWN0IGlub19idWNrZXQgKml2ZWN0b3JfdGFibGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpdmVjdG9yX3RhYmxlX3BhOwogCi1leHRlcm4gdm9pZCBoYW5kbGVyX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBpbml0X2lycXdvcmtfY3VyY3B1KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IHN1bjR2X3JlZ2lzdGVyX21vbmRvX3F1ZXVlcyhpbnQgdGhpc19jcHUpOwogCisjZW5kaWYgLyogQ09ORklHX1NQQVJDMzIgKi8KICNlbmRpZiAvKiBfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZXRyYXAuUyBiL2FyY2gvc3BhcmMva2VybmVsL2V0cmFwXzMyLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL2V0cmFwLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2V0cmFwXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUyBiL2FyY2gvc3BhcmMva2VybmVsL2V0cmFwXzY0LlMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9ldHJhcF82NC5TCmluZGV4IDI5Y2U0ODkuLjc4NmIxODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ldHJhcF82NC5TCkBAIC0xNiw5ICsxNiw5IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjZGVmaW5lCQlUQVNLX1JFR09GRgkJKFRIUkVBRF9TSVpFLVRSQUNFUkVHX1NaLVNUQUNLRlJBTUVfU1opCi0jZGVmaW5lCQlFVFJBUF9QU1RBVEUxCQkoUFNUQVRFX1JNTyB8IFBTVEFURV9QUklWKQorI2RlZmluZQkJRVRSQVBfUFNUQVRFMQkJKFBTVEFURV9UU08gfCBQU1RBVEVfUFJJVikKICNkZWZpbmUJCUVUUkFQX1BTVEFURTIJCVwKLQkJKFBTVEFURV9STU8gfCBQU1RBVEVfUEVGIHwgUFNUQVRFX1BSSVYgfCBQU1RBVEVfSUUpCisJCShQU1RBVEVfVFNPIHwgUFNUQVRFX1BFRiB8IFBTVEFURV9QUklWIHwgUFNUQVRFX0lFKQogCiAvKgogICogT24gZW50cnksICVnNyBpcyByZXR1cm4gYWRkcmVzcyAtIDB4NC4KQEAgLTEzMCw3ICsxMzAsNyBAQAogCQlzdHgJJWc2LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c2XQogCQlzdHgJJWc3LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c3XQogCQlvcgklbDcsICVsMCwgJWw3Ci0JCXNldGhpCSVoaShUU1RBVEVfUk1PIHwgVFNUQVRFX1BFRiksICVsMAorCQlzZXRoaQklaGkoVFNUQVRFX1RTTyB8IFRTVEFURV9QRUYpLCAlbDAKIAkJb3IJJWw3LCAlbDAsICVsNwogCQl3cnByCSVsMiwgJXRucGMKIAkJd3JwcgklbDcsIChUU1RBVEVfUFJJViB8IFRTVEFURV9JRSksICV0c3RhdGUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZnB1X3RyYXBzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mcHVfdHJhcHMuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9mcHVfdHJhcHMuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvZnB1X3RyYXBzLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9mdHJhY2UuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZ2V0c2V0Y2MuUyBiL2FyY2gvc3BhcmMva2VybmVsL2dldHNldGNjLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvZ2V0c2V0Y2MuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvZ2V0c2V0Y2MuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL2hlYWQuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDUxYjQwNDIuLmYwYjRiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCiAJCS8qIFplcm8gb3V0IG91ciBCU1Mgc2VjdGlvbi4gKi8KIAkJc2V0CV9fYnNzX3N0YXJ0ICwgJW8wCSEgRmlyc3QgYWRkcmVzcyBvZiBCU1MKLQkJc2V0CWVuZCAsICVvMQkJISBMYXN0IGFkZHJlc3Mgb2YgQlNTCisJCXNldAlfZW5kICwgJW8xCQkhIExhc3QgYWRkcmVzcyBvZiBCU1MKIAkJYWRkCSVvMCwgMHgxLCAlbzAKIDE6CQogCQlzdGIJJWcwLCBbJW8wXQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUwppbmRleCAzNTMyMjZmLi44ZmZlZTcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTcwNiw3ICs3MDYsNyBAQAogCWFuZG4JJWwwLCBQU1RBVEVfSUUsICVvMQogCXdycHIJJW8xLCAweDAsICVwc3RhdGUKIAlyZHByCSVwaWwsICVsMQotCXdycHIJJWcwLCAxNSwgJXBpbAorCXdycHIJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCiAJLyogTWFrZSB0aGUgZmlybXdhcmUgY2FsbCB0byBqdW1wIG92ZXIgdG8gdGhlIExpbnV4IHRyYXAgdGFibGUuICAqLwogCXNldGhpCSVoaShpc19zdW40diksICVvMApAQCAtODI1LDggKzgyNSw4IEBACiAJIHJlc3RvcmUKIHNwYXJjNjRfYm9vdF9lbmQ6CiAKLSNpbmNsdWRlICJldHJhcC5TIgotI2luY2x1ZGUgInJ0cmFwLlMiCisjaW5jbHVkZSAiZXRyYXBfNjQuUyIKKyNpbmNsdWRlICJydHJhcF82NC5TIgogI2luY2x1ZGUgIndpbmZpeHVwLlMiCiAjaW5jbHVkZSAiZnB1X3RyYXBzLlMiCiAjaW5jbHVkZSAiaXZlYy5TIgpAQCAtODgyLDcgKzg4Miw3IEBACiAKICEgMHgwMDAwMDAwMDAwNDI4MDAwCiAKLSNpbmNsdWRlICJzeXN0YmxzLlMiCisjaW5jbHVkZSAic3lzdGJsc182NC5TIgogCiAJLmRhdGEKIAkuYWxpZ24JOApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWxwZXJzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWxwZXJzLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvaGVscGVycy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9oZWxwZXJzLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaHZhcGkuYyBiL2FyY2gvc3BhcmMva2VybmVsL2h2YXBpLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvaHZhcGkuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvaHZhcGkuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9odmNhbGxzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9odmNhbGxzLlMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9odmNhbGxzLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2h2Y2FsbHMuUwppbmRleCBlMDY2MjY5Li44YTVmMzVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2h2Y2FsbHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9odmNhbGxzLlMKQEAgLTc2NiwzICs3NjYsMzUgQEAKIAlyZXRsCiAJIG5vcAogRU5EUFJPQyhzdW40dl9tbXVfZGVtYXBfYWxsKQorCitFTlRSWShzdW40dl9uaWFnYXJhX2dldHBlcmYpCisJbW92CSVvMCwgJW80CisJbW92CUhWX0ZBU1RfR0VUX1BFUkZSRUcsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslbzRdCisJcmV0bAorCSBub3AKK0VORFBST0Moc3VuNHZfbmlhZ2FyYV9nZXRwZXJmKQorCitFTlRSWShzdW40dl9uaWFnYXJhX3NldHBlcmYpCisJbW92CUhWX0ZBU1RfU0VUX1BFUkZSRUcsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCitFTkRQUk9DKHN1bjR2X25pYWdhcmFfc2V0cGVyZikKKworRU5UUlkoc3VuNHZfbmlhZ2FyYTJfZ2V0cGVyZikKKwltb3YJJW8wLCAlbzQKKwltb3YJSFZfRkFTVF9OMl9HRVRfUEVSRlJFRywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVvNF0KKwlyZXRsCisJIG5vcAorRU5EUFJPQyhzdW40dl9uaWFnYXJhMl9nZXRwZXJmKQorCitFTlRSWShzdW40dl9uaWFnYXJhMl9zZXRwZXJmKQorCW1vdglIVl9GQVNUX04yX1NFVF9QRVJGUkVHLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorRU5EUFJPQyhzdW40dl9uaWFnYXJhMl9zZXRwZXJmKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9odnRyYW1wLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9odnRyYW1wLlMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9odnRyYW1wLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2h2dHJhbXAuUwppbmRleCAwMjM2YzQzLi45MzY1NDMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2h2dHJhbXAuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9odnRyYW1wLlMKQEAgLTEsNiArMSw2IEBACiAvKiBodnRyYW1wLlM6IEh5cGVydmlzb3Igc3RhcnQtY3B1IHRyYW1wb2xpbmUgY29kZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vcGlsLmg+CiAKIAlfX0NQVUlOSVQKIAkuYWxpZ24JCTgKQEAgLTMyLDcgKzMzLDcgQEAKIAkgKi8KIGh2X2NwdV9zdGFydHVwOgogCVNFVF9HTCgwKQotCXdycHIJCSVnMCwgMTUsICVwaWwKKwl3cnByCQklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAJd3JwcgkJJWcwLCAwLCAlY2FucmVzdG9yZQogCXdycHIJCSVnMCwgMCwgJW90aGVyd2luCiAJd3JwcgkJJWcwLCA2LCAlY2Fuc2F2ZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwppbmRleCAyMjNhNjU4Li5jMTYxMzVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwpAQCAtMTEsMzUgKzExLDM3IEBACiAKICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+ICAvKiBGdW4gd2l0aCBTdW4gcmVsZWFzZWQgYXJjaGl0ZWN0dXJlcy4gKi8KIAogc3RydWN0IGlkcHJvbSAqaWRwcm9tOwogc3RhdGljIHN0cnVjdCBpZHByb20gaWRwcm9tX2J1ZmZlcjsKIAorI2lmZGVmIENPTkZJR19TUEFSQzMyCisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+ICAvKiBGdW4gd2l0aCBTdW4gcmVsZWFzZWQgYXJjaGl0ZWN0dXJlcy4gKi8KKwogLyogSGVyZSBpcyB0aGUgbWFzdGVyIHRhYmxlIG9mIFN1biBtYWNoaW5lcyB3aGljaCB1c2Ugc29tZSBpbXBsZW1lbnRhdGlvbgogICogb2YgdGhlIFNwYXJjIENQVSBhbmQgaGF2ZSBhIG1lYW5pbmdmdWwgSURQUk9NIG1hY2h0eXBlIHZhbHVlIHRoYXQgd2UKICAqIGtub3cgYWJvdXQuICBTZWUgYXNtLXNwYXJjL21hY2hpbmVzLmggZm9yIGVtcGlyaWNhbCBjb25zdGFudHMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgU3VuX01hY2hpbmVfTW9kZWxzIFN1bl9NYWNoaW5lc1tOVU1fU1VOX01BQ0hJTkVTXSA9IHsKIC8qIEZpcnN0LCBTdW40J3MgKi8KLXsgIlN1biA0LzEwMCBTZXJpZXMiLCAoU01fU1VONCB8IFNNXzRfMTEwKSB9LAoteyAiU3VuIDQvMjAwIFNlcmllcyIsIChTTV9TVU40IHwgU01fNF8yNjApIH0sCi17ICJTdW4gNC8zMDAgU2VyaWVzIiwgKFNNX1NVTjQgfCBTTV80XzMzMCkgfSwKLXsgIlN1biA0LzQwMCBTZXJpZXMiLCAoU01fU1VONCB8IFNNXzRfNDcwKSB9LAoreyAubmFtZSA9ICJTdW4gNC8xMDAgU2VyaWVzIiwgICAgICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF8xMTApIH0sCit7IC5uYW1lID0gIlN1biA0LzIwMCBTZXJpZXMiLCAgICAgICAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzI2MCkgfSwKK3sgLm5hbWUgPSAiU3VuIDQvMzAwIFNlcmllcyIsICAgICAgICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfMzMwKSB9LAoreyAubmFtZSA9ICJTdW4gNC80MDAgU2VyaWVzIiwgICAgICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF80NzApIH0sCiAvKiBOb3csIFN1bjRjJ3MgKi8KLXsgIlN1bjRjIFNwYXJjU3RhdGlvbiAxIiwgKFNNX1NVTjRDIHwgU01fNENfU1MxKSB9LAoteyAiU3VuNGMgU3BhcmNTdGF0aW9uIElQQyIsIChTTV9TVU40QyB8IFNNXzRDX0lQQykgfSwKLXsgIlN1bjRjIFNwYXJjU3RhdGlvbiAxKyIsIChTTV9TVU40QyB8IFNNXzRDX1NTMVBMVVMpIH0sCi17ICJTdW40YyBTcGFyY1N0YXRpb24gU0xDIiwgKFNNX1NVTjRDIHwgU01fNENfU0xDKSB9LAoteyAiU3VuNGMgU3BhcmNTdGF0aW9uIDIiLCAoU01fU1VONEMgfCBTTV80Q19TUzIpIH0sCi17ICJTdW40YyBTcGFyY1N0YXRpb24gRUxDIiwgKFNNX1NVTjRDIHwgU01fNENfRUxDKSB9LAoteyAiU3VuNGMgU3BhcmNTdGF0aW9uIElQWCIsIChTTV9TVU40QyB8IFNNXzRDX0lQWCkgfSwKK3sgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIDEiLCAgICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19TUzEpIH0sCit7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBJUEMiLCAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfSVBDKSB9LAoreyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gMSsiLCAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NTMVBMVVMpIH0sCit7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBTTEMiLCAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfU0xDKSB9LAoreyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gMiIsICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NTMikgfSwKK3sgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIEVMQyIsICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19FTEMpIH0sCit7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBJUFgiLCAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfSVBYKSB9LAogLyogRmluYWxseSwgZWFybHkgU3VuNG0ncyAqLwoteyAiU3VuNG0gU3BhcmNTeXN0ZW02MDAiLCAoU01fU1VONE0gfCBTTV80TV9TUzYwKSB9LAoteyAiU3VuNG0gU3BhcmNTdGF0aW9uMTAvMjAiLCAoU01fU1VONE0gfCBTTV80TV9TUzUwKSB9LAoteyAiU3VuNG0gU3BhcmNTdGF0aW9uNSIsIChTTV9TVU40TSB8IFNNXzRNX1NTNDApIH0sCit7IC5uYW1lID0gIlN1bjRtIFNwYXJjU3lzdGVtNjAwIiwgICAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjRNIHwgU01fNE1fU1M2MCkgfSwKK3sgLm5hbWUgPSAiU3VuNG0gU3BhcmNTdGF0aW9uMTAvMjAiLCAuaWRfbWFjaHR5cGUgPSAoU01fU1VONE0gfCBTTV80TV9TUzUwKSB9LAoreyAubmFtZSA9ICJTdW40bSBTcGFyY1N0YXRpb241IiwgICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40TSB8IFNNXzRNX1NTNDApIH0sCiAvKiBPbmUgZW50cnkgZm9yIHRoZSBPQlAgYXJjaCdzIHdoaWNoIGFyZSBzdW40ZCwgc3VuNGUsIGFuZCBuZXdlciBzdW40bSdzICovCi17ICJTdW40TSBPQlAgYmFzZWQgc3lzdGVtIiwgKFNNX1NVTjRNX09CUCB8IDB4MCkgfSB9OworeyAubmFtZSA9ICJTdW40TSBPQlAgYmFzZWQgc3lzdGVtIiwgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40TV9PQlAgfCAweDApIH0gfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGRpc3BsYXlfc3lzdGVtX3R5cGUodW5zaWduZWQgY2hhciBtYWNodHlwZSkKIHsKQEAgLTQ3LDIxICs0OSwyNSBAQAogCXJlZ2lzdGVyIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9TVU5fTUFDSElORVM7IGkrKykgewotCQlpZihTdW5fTWFjaGluZXNbaV0uaWRfbWFjaHR5cGUgPT0gbWFjaHR5cGUpIHsKKwkJaWYgKFN1bl9NYWNoaW5lc1tpXS5pZF9tYWNodHlwZSA9PSBtYWNodHlwZSkgewogCQkJaWYgKG1hY2h0eXBlICE9IChTTV9TVU40TV9PQlAgfCAweDAwKSB8fAogCQkJICAgIHByb21fZ2V0cHJvcGVydHkocHJvbV9yb290X25vZGUsICJiYW5uZXItbmFtZSIsCiAJCQkJCSAgICAgc3lzbmFtZSwgc2l6ZW9mKHN5c25hbWUpKSA8PSAwKQotCQkJCXByaW50aygiVFlQRTogJXNcbiIsIFN1bl9NYWNoaW5lc1tpXS5uYW1lKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJUWVBFOiAlc1xuIiwKKwkJCQkgICAgICAgU3VuX01hY2hpbmVzW2ldLm5hbWUpOwogCQkJZWxzZQotCQkJCXByaW50aygiVFlQRTogJXNcbiIsIHN5c25hbWUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRZUEU6ICVzXG4iLCBzeXNuYW1lKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCXByb21fcHJpbnRmKCJJRFBST006IEJvZ3VzIGlkX21hY2h0eXBlIHZhbHVlLCAweCV4XG4iLCBtYWNodHlwZSk7Ci0JcHJvbV9oYWx0KCk7CisJcHJvbV9wcmludGYoIklEUFJPTTogV2FybmluZywgYm9ndXMgaWRfbWFjaHR5cGUgdmFsdWUsIDB4JXhcbiIsIG1hY2h0eXBlKTsKIH0KLQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXNwbGF5X3N5c3RlbV90eXBlKHVuc2lnbmVkIGNoYXIgbWFjaHR5cGUpCit7Cit9CisjZW5kaWYKIC8qIENhbGN1bGF0ZSB0aGUgSURQUk9NIGNoZWNrc3VtICh4b3Igb2YgdGhlIGRhdGEgYnl0ZXMpLiAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGNhbGNfaWRwcm9tX2Nrc3VtKHN0cnVjdCBpZHByb20gKmlkcHJvbSkKIHsKQEAgLTgwLDIxICs4NiwxNCBAQAogCiAJaWRwcm9tID0gJmlkcHJvbV9idWZmZXI7CiAKLQlpZiAoaWRwcm9tLT5pZF9mb3JtYXQgIT0gMHgwMSkgIHsKLQkJcHJvbV9wcmludGYoIklEUFJPTTogVW5rbm93biBmb3JtYXQgdHlwZSFcbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9CisJaWYgKGlkcHJvbS0+aWRfZm9ybWF0ICE9IDB4MDEpCisJCXByb21fcHJpbnRmKCJJRFBST006IFdhcm5pbmcsIHVua25vd24gZm9ybWF0IHR5cGUhXG4iKTsKIAotCWlmIChpZHByb20tPmlkX2Nrc3VtICE9IGNhbGNfaWRwcm9tX2Nrc3VtKGlkcHJvbSkpIHsKLQkJcHJvbV9wcmludGYoIklEUFJPTTogQ2hlY2tzdW0gZmFpbHVyZSAobnZyYW09JXgsIGNhbGM9JXgpIVxuIiwKKwlpZiAoaWRwcm9tLT5pZF9ja3N1bSAhPSBjYWxjX2lkcHJvbV9ja3N1bShpZHByb20pKQorCQlwcm9tX3ByaW50ZigiSURQUk9NOiBXYXJuaW5nLCBjaGVja3N1bSBmYWlsdXJlIChudnJhbT0leCwgY2FsYz0leCkhXG4iLAogCQkJICAgIGlkcHJvbS0+aWRfY2tzdW0sIGNhbGNfaWRwcm9tX2Nrc3VtKGlkcHJvbSkpOwotCQlwcm9tX2hhbHQoKTsKLQl9CiAKIAlkaXNwbGF5X3N5c3RlbV90eXBlKGlkcHJvbS0+aWRfbWFjaHR5cGUpOwogCi0JcHJpbnRrKCJFdGhlcm5ldCBhZGRyZXNzOiAleDoleDoleDoleDoleDoleFxuIiwKLQkJICAgIGlkcHJvbS0+aWRfZXRoYWRkclswXSwgaWRwcm9tLT5pZF9ldGhhZGRyWzFdLAotCQkgICAgaWRwcm9tLT5pZF9ldGhhZGRyWzJdLCBpZHByb20tPmlkX2V0aGFkZHJbM10sCi0JCSAgICBpZHByb20tPmlkX2V0aGFkZHJbNF0sIGlkcHJvbS0+aWRfZXRoYWRkcls1XSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiRXRoZXJuZXQgYWRkcmVzczogJXBNXG4iLCBpZHByb20tPmlkX2V0aGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCA4ZTY0ZWJjLi42MjEyNmU0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMjMsNiArMjMsNSBAQAogICogaW4gZXRyYXAuUyB3aGljaCBhc3N1bWVzIGl0LgogICovCiB1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uICgiLnRleHRcIlxuXHQjIikpKQotCV9fYXR0cmlidXRlX18oKGFsaWduZWQgKFRIUkVBRF9TSVpFKSkpCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbiAoIi5kYXRhLmluaXRfdGFzayIpKSkKIAk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdV9jb21tb24uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaApyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXVfY29tbW9uLmgKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKaW5kZXggNGYwMjViMy4uN2NlMTRmMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKQEAgLTU1Miw4ICs1NTIsOCBAQAogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBuKSB7CiAJCUJVR19PTihwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpID09IE5VTEwpOwotCQlzZy0+ZHZtYV9hZGRyZXNzID0gdmlydF90b19waHlzKHNnX3ZpcnQoc2cpKTsKLQkJc2ctPmR2bWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKKwkJc2ctPmRtYV9hZGRyZXNzID0gdmlydF90b19waHlzKHNnX3ZpcnQoc2cpKTsKKwkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCX0KIAlyZXR1cm4gbmVudHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV8zMi5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL2lycS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwppbmRleCA5M2UxZDFjLi5mMzQ4OGM0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKKyNpbmNsdWRlICJrZXJuZWwuaCIKICNpbmNsdWRlICJpcnEuaCIKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTU5MiwxOSArNTkzLDE5IEBACiAKIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIF9fZGlzYWJsZV9pcnEoaXJxKTsKKwlfX2Rpc2FibGVfaXJxKGlycSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CiAKIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gX19kaXNhYmxlX2lycShpcnEpOworCV9fZGlzYWJsZV9pcnEoaXJxKTsKIH0KIEVYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnEpOwogCiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gX19lbmFibGVfaXJxKGlycSk7CisJX19lbmFibGVfaXJxKGlycSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMKaW5kZXggNTJmYzgzNi4uYTNlYTJiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwpAQCAtNzc1LDYgKzc3NSw2OSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgdW5oYW5kbGVkX3BlcmZfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcGNyLCBwaWM7CisKKwlyZWFkX3BjcihwY3IpOworCXJlYWRfcGljKHBpYyk7CisKKwl3cml0ZV9wY3IoMCk7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiQ1BVICVkOiBHb3QgdW5leHBlY3RlZCBwZXJmIGNvdW50ZXIgSVJRLlxuIiwKKwkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiQ1BVICVkOiBQQ1JbJTAxNmx4XSBQSUNbJTAxNmx4XVxuIiwKKwkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwY3IsIHBpYyk7Cit9CisKKy8qIEFsbW9zdCBhIGRpcmVjdCBjb3B5IG9mIHRoZSBwb3dlcnBjIFBNQyBjb2RlLiAgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGVyZl9pcnFfbG9jayk7CitzdGF0aWMgdm9pZCAqcGVyZl9pcnFfb3duZXJfY2FsbGVyOyAvKiBtb3N0bHkgZm9yIGRlYnVnZ2luZyAqLworc3RhdGljIHZvaWQgKCpwZXJmX2lycSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpID0gdW5oYW5kbGVkX3BlcmZfaXJxOworCisvKiBJbnZva2VkIGZyb20gbGV2ZWwgMTUgUElMIGhhbmRsZXIgaW4gdHJhcCB0YWJsZS4gICovCit2b2lkIHBlcmZjdHJfaXJxKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOworCXBlcmZfaXJxKHJlZ3MpOworfQorCitpbnQgcmVnaXN0ZXJfcGVyZmN0cl9pbnRyKHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFoYW5kbGVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmcGVyZl9pcnFfbG9jayk7CisJaWYgKHBlcmZfaXJxICE9IHVuaGFuZGxlZF9wZXJmX2lycSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWdpc3Rlcl9wZXJmY3RyX2ludHI6ICIKKwkJICAgICAgICJwZXJmIElSUSBidXN5IChyZXNlcnZlZCBieSBjYWxsZXIgJXApXG4iLAorCQkgICAgICAgcGVyZl9pcnFfb3duZXJfY2FsbGVyKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlwZXJmX2lycV9vd25lcl9jYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJcGVyZl9pcnEgPSBoYW5kbGVyOworCisJcmV0ID0gMDsKK291dDoKKwlzcGluX3VubG9jaygmcGVyZl9pcnFfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfcGVyZmN0cl9pbnRyKTsKKwordm9pZCByZWxlYXNlX3BlcmZjdHJfaW50cih2b2lkICgqaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKikpCit7CisJc3Bpbl9sb2NrKCZwZXJmX2lycV9sb2NrKTsKKwlwZXJmX2lycV9vd25lcl9jYWxsZXIgPSBOVUxMOworCXBlcmZfaXJxID0gdW5oYW5kbGVkX3BlcmZfaXJxOworCXNwaW5fdW5sb2NrKCZwZXJmX2lycV9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlbGVhc2VfcGVyZmN0cl9pbnRyKTsKKwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogdm9pZCBmaXh1cF9pcnFzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfbWlzcy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXRsYl9taXNzLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9taXNzLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2l0bGJfbWlzcy5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2l2ZWMuUyBiL2FyY2gvc3BhcmMva2VybmVsL2l2ZWMuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9pdmVjLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2l2ZWMuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva2VybmVsLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWE5NzJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwva2VybmVsLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX1NQQVJDX0tFUk5FTF9ICisjZGVmaW5lIF9fU1BBUkNfS0VSTkVMX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvKiBjcHUuYyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2NwdV90eXBlOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2ZwdV90eXBlOworCitleHRlcm4gdW5zaWduZWQgaW50IGZzcl9zdG9yYWdlOworCisjaWZkZWYgQ09ORklHX1NQQVJDMzIKKy8qIGNwdS5jICovCitleHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CisKKy8qIHRyYXBzXzMyLmMgKi8KK2V4dGVybiB2b2lkIGhhbmRsZV9od19kaXZ6ZXJvKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKKy8qIG11bGRpdi5jICovCitleHRlcm4gaW50IGRvX3VzZXJfbXVsZGl2IChzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKKworLyogaXJxXzMyLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaXJxYWN0aW9uIHN0YXRpY19pcnFhY3Rpb25bXTsKK2V4dGVybiBpbnQgc3RhdGljX2lycV9jb3VudDsKK2V4dGVybiBzcGlubG9ja190IGlycV9hY3Rpb25fbG9jazsKKworZXh0ZXJuIHZvaWQgdW5leHBlY3RlZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCisjZWxzZSAvKiBDT05GSUdfU1BBUkMzMiAqLworI2VuZGlmIC8qIENPTkZJR19TUEFSQzMyICovCisjZW5kaWYgLyogIShfX1NQQVJDX0tFUk5FTF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwva2dkYl8zMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC9rZ2RiLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2tnZGJfMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwva2dkYi5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwva3Byb2Jlcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwva3Byb2Jlcy5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2tzdGFjay5oIGIvYXJjaC9zcGFyYy9rZXJuZWwva3N0YWNrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwva3N0YWNrLmgKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2tzdGFjay5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2t0bGIuUyBiL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9rdGxiLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL2t0bGIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9sZGMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL2xkYy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL21kZXNjLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKaW5kZXggZGRlNTJiYy4uM2M1MzlhNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KIAorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20vbWRlc2MuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9taXNjdHJhcC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvbWlzY3RyYXAuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9taXNjdHJhcC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9taXNjdHJhcC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCmluZGV4IDU5ODY4MmYuLjkwMjczNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCkBAIC0xLDQgKzEsNCBAQAotLyogS2VybmVsIG1vZHVsZSBoZWxwIGZvciBzcGFyYzMyLgorLyogS2VybmVsIG1vZHVsZSBoZWxwIGZvciBzcGFyYzY0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBSdXN0eSBSdXNzZWxsLgogICogQ29weXJpZ2h0IChDKSAyMDAyIERhdmlkIFMuIE1pbGxlci4KQEAgLTExLDYgKzExLDQ4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorCisjaWZkZWYgQ09ORklHX1NQQVJDNjQKK3N0YXRpYyB2b2lkICptb2R1bGVfbWFwKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJaWYgKCFzaXplIHx8IHNpemUgPiBNT0RVTEVTX0xFTikKKwkJcmV0dXJuIE5VTEw7CisKKwlhcmVhID0gX19nZXRfdm1fYXJlYShzaXplLCBWTV9BTExPQywgTU9EVUxFU19WQUREUiwgTU9EVUxFU19FTkQpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gX192bWFsbG9jX2FyZWEoYXJlYSwgR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUwpOworfQorCitzdGF0aWMgY2hhciAqZG90MnVuZGVyc2NvcmUoY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbmFtZTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCAqbW9kdWxlX21hcCh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIHZtYWxsb2Moc2l6ZSk7Cit9CisKKy8qIFJlcGxhY2UgcmVmZXJlbmNlcyB0byAuZnVuYyB3aXRoIF9GdW5jICovCitzdGF0aWMgY2hhciAqZG90MnVuZGVyc2NvcmUoY2hhciAqbmFtZSkKK3sKKwlpZiAobmFtZVswXSA9PSAnLicpIHsKKwkJbmFtZVswXSA9ICdfJzsKKyAgICAgICAgICAgICAgICBuYW1lWzFdID0gdG91cHBlcihuYW1lWzFdKTsKKwl9CisJcmV0dXJuIG5hbWU7Cit9CisjZW5kaWYgLyogQ09ORklHX1NQQVJDNjQgKi8KIAogdm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTIwLDcgKzYyLDcgQEAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldCA9IHZtYWxsb2Moc2l6ZSk7CisJcmV0ID0gbW9kdWxlX21hcChzaXplKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAllbHNlCkBAIC0zNywxNiArNzksMTQgQEAKICAgICAgICAgICAgdGFibGUgZW50cmllcy4gKi8KIH0KIAotLyogTWFrZSBnZW5lcmljIGNvZGUgaWdub3JlIFNUVF9SRUdJU1RFUiBkdW1teSB1bmRlZmluZWQgc3ltYm9scywKLSAqIGFuZCByZXBsYWNlIHJlZmVyZW5jZXMgdG8gLmZ1bmMgd2l0aCBfRnVuYwotICovCisvKiBNYWtlIGdlbmVyaWMgY29kZSBpZ25vcmUgU1RUX1JFR0lTVEVSIGR1bW15IHVuZGVmaW5lZCBzeW1ib2xzLiAgKi8KIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCiAJCQkgICAgICBFbGZfU2hkciAqc2VjaGRycywKIAkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCiAJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJdW5zaWduZWQgaW50IHN5bWlkeDsKLQlFbGYzMl9TeW0gKnN5bTsKKwlFbGZfU3ltICpzeW07CiAJY2hhciAqc3RydGFiOwogCWludCBpOwogCkBAIC01NiwyNiArOTYsMjMgQEAKIAkJCXJldHVybiAtRU5PRVhFQzsKIAkJfQogCX0KLQlzeW0gPSAoRWxmMzJfU3ltICopc2VjaGRyc1tzeW1pZHhdLnNoX2FkZHI7CisJc3ltID0gKEVsZl9TeW0gKilzZWNoZHJzW3N5bWlkeF0uc2hfYWRkcjsKIAlzdHJ0YWIgPSAoY2hhciAqKXNlY2hkcnNbc2VjaGRyc1tzeW1pZHhdLnNoX2xpbmtdLnNoX2FkZHI7CiAKIAlmb3IgKGkgPSAxOyBpIDwgc2VjaGRyc1tzeW1pZHhdLnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7IGkrKykgewogCQlpZiAoc3ltW2ldLnN0X3NobmR4ID09IFNITl9VTkRFRikgewotCQkJaWYgKEVMRjMyX1NUX1RZUEUoc3ltW2ldLnN0X2luZm8pID09IFNUVF9SRUdJU1RFUikKKwkJCWlmIChFTEZfU1RfVFlQRShzeW1baV0uc3RfaW5mbykgPT0gU1RUX1JFR0lTVEVSKSB7CiAJCQkJc3ltW2ldLnN0X3NobmR4ID0gU0hOX0FCUzsKLQkJCWVsc2UgeworCQkJfSBlbHNlIHsKIAkJCQljaGFyICpuYW1lID0gc3RydGFiICsgc3ltW2ldLnN0X25hbWU7Ci0JCQkJaWYgKG5hbWVbMF0gPT0gJy4nKSB7Ci0JCQkJCW5hbWVbMF0gPSAnXyc7Ci0JCQkJCW5hbWVbMV0gPSB0b3VwcGVyKG5hbWVbMV0pOwotCQkJCX0KKwkJCQlkb3QydW5kZXJzY29yZShuYW1lKTsKIAkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGFwcGx5X3JlbG9jYXRlKEVsZjMyX1NoZHIgKnNlY2hkcnMsCitpbnQgYXBwbHlfcmVsb2NhdGUoRWxmX1NoZHIgKnNlY2hkcnMsCiAJCSAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKIAkJICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAogCQkgICB1bnNpZ25lZCBpbnQgcmVsc2VjLApAQCAtODYsMzIgKzEyMyw2OCBAQAogCXJldHVybiAtRU5PRVhFQzsKIH0KIAotaW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGYzMl9TaGRyICpzZWNoZHJzLAoraW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGZfU2hkciAqc2VjaGRycywKIAkJICAgICAgIGNvbnN0IGNoYXIgKnN0cnRhYiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKIAkJICAgICAgIHVuc2lnbmVkIGludCByZWxzZWMsCiAJCSAgICAgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlFbGYzMl9SZWxhICpyZWwgPSAodm9pZCAqKXNlY2hkcnNbcmVsc2VjXS5zaF9hZGRyOwotCUVsZjMyX1N5bSAqc3ltOworCUVsZl9SZWxhICpyZWwgPSAodm9pZCAqKXNlY2hkcnNbcmVsc2VjXS5zaF9hZGRyOworCUVsZl9TeW0gKnN5bTsKIAl1OCAqbG9jYXRpb247CiAJdTMyICpsb2MzMjsKIAogCWZvciAoaSA9IDA7IGkgPCBzZWNoZHJzW3JlbHNlY10uc2hfc2l6ZSAvIHNpemVvZigqcmVsKTsgaSsrKSB7Ci0JCUVsZjMyX0FkZHIgdjsKKwkJRWxmX0FkZHIgdjsKIAogCQkvKiBUaGlzIGlzIHdoZXJlIHRvIG1ha2UgdGhlIGNoYW5nZSAqLwogCQlsb2NhdGlvbiA9ICh1OCAqKXNlY2hkcnNbc2VjaGRyc1tyZWxzZWNdLnNoX2luZm9dLnNoX2FkZHIKIAkJCSsgcmVsW2ldLnJfb2Zmc2V0OwogCQlsb2MzMiA9ICh1MzIgKikgbG9jYXRpb247CisKKyNpZmRlZiBDT05GSUdfU1BBUkM2NAorCQlCVUdfT04oKCh1NjQpbG9jYXRpb24gPj4gKHU2NCkzMikgIT0gKHU2NCkwKTsKKyNlbmRpZiAvKiBDT05GSUdfU1BBUkM2NCAqLworCiAJCS8qIFRoaXMgaXMgdGhlIHN5bWJvbCBpdCBpcyByZWZlcnJpbmcgdG8uICBOb3RlIHRoYXQgYWxsCiAJCSAgIHVuZGVmaW5lZCBzeW1ib2xzIGhhdmUgYmVlbiByZXNvbHZlZC4gICovCi0JCXN5bSA9IChFbGYzMl9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCi0JCQkrIEVMRjMyX1JfU1lNKHJlbFtpXS5yX2luZm8pOworCQlzeW0gPSAoRWxmX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKKwkJCSsgRUxGX1JfU1lNKHJlbFtpXS5yX2luZm8pOwogCQl2ID0gc3ltLT5zdF92YWx1ZSArIHJlbFtpXS5yX2FkZGVuZDsKIAotCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWxbaV0ucl9pbmZvKSkgeworCQlzd2l0Y2ggKEVMRl9SX1RZUEUocmVsW2ldLnJfaW5mbykgJiAweGZmKSB7CisjaWZkZWYgQ09ORklHX1NQQVJDNjQKKwkJY2FzZSBSX1NQQVJDXzY0OgorCQkJbG9jYXRpb25bMF0gPSB2ID4+IDU2OworCQkJbG9jYXRpb25bMV0gPSB2ID4+IDQ4OworCQkJbG9jYXRpb25bMl0gPSB2ID4+IDQwOworCQkJbG9jYXRpb25bM10gPSB2ID4+IDMyOworCQkJbG9jYXRpb25bNF0gPSB2ID4+IDI0OworCQkJbG9jYXRpb25bNV0gPSB2ID4+IDE2OworCQkJbG9jYXRpb25bNl0gPSB2ID4+ICA4OworCQkJbG9jYXRpb25bN10gPSB2ID4+ICAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBSX1NQQVJDX0RJU1AzMjoKKwkJCXYgLT0gKEVsZl9BZGRyKSBsb2NhdGlvbjsKKwkJCSpsb2MzMiA9IHY7CisJCQlicmVhazsKKworCQljYXNlIFJfU1BBUkNfV0RJU1AxOToKKwkJCXYgLT0gKEVsZl9BZGRyKSBsb2NhdGlvbjsKKwkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHg3ZmZmZikgfAorCQkJCSgodiA+PiAyKSAmIDB4N2ZmZmYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSX1NQQVJDX09MTzEwOgorCQkJKmxvYzMyID0gKCpsb2MzMiAmIH4weDFmZmYpIHwKKwkJCQkoKCh2ICYgMHgzZmYpICsKKwkJCQkgIChFTEZfUl9UWVBFKHJlbFtpXS5yX2luZm8pID4+IDgpKQorCQkJCSAmIDB4MWZmZik7CisJCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfU1BBUkM2NCAqLworCiAJCWNhc2UgUl9TUEFSQ18zMjoKIAkJY2FzZSBSX1NQQVJDX1VBMzI6CiAJCQlsb2NhdGlvblswXSA9IHYgPj4gMjQ7CkBAIC0xMjEsMTMgKzE5NCwxMyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBSX1NQQVJDX1dESVNQMzA6Ci0JCQl2IC09IChFbGYzMl9BZGRyKSBsb2NhdGlvbjsKKwkJCXYgLT0gKEVsZl9BZGRyKSBsb2NhdGlvbjsKIAkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHgzZmZmZmZmZikgfAogCQkJCSgodiA+PiAyKSAmIDB4M2ZmZmZmZmYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSX1NQQVJDX1dESVNQMjI6Ci0JCQl2IC09IChFbGYzMl9BZGRyKSBsb2NhdGlvbjsKKwkJCXYgLT0gKEVsZl9BZGRyKSBsb2NhdGlvbjsKIAkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHgzZmZmZmYpIHwKIAkJCQkoKHYgPj4gMikgJiAweDNmZmZmZik7CiAJCQlicmVhazsKQEAgLTE0NCwxOSArMjE3LDM4IEBACiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogVW5rbm93biByZWxvY2F0aW9uOiAleFxuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwKLQkJCSAgICAgICAoaW50KSAoRUxGMzJfUl9UWVBFKHJlbFtpXS5yX2luZm8pICYgMHhmZikpOworCQkJICAgICAgIChpbnQpIChFTEZfUl9UWVBFKHJlbFtpXS5yX2luZm8pICYgMHhmZikpOwogCQkJcmV0dXJuIC1FTk9FWEVDOwogCQl9OwogCX0KIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19TUEFSQzY0CiBpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogeworCS8qIENoZWV0YWgncyBJLWNhY2hlIGlzIGZ1bGx5IGNvaGVyZW50LiAgKi8KKwlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpIHsKKwkJdW5zaWduZWQgbG9uZyB2YTsKKworCQlmbHVzaHdfYWxsKCk7CisJCWZvciAodmEgPSAgMDsgdmEgPCAoUEFHRV9TSVpFIDw8IDEpOyB2YSArPSAzMikKKwkJCXNwaXRmaXJlX3B1dF9pY2FjaGVfdGFnKHZhLCAweDApOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2ggJWc2Iik7CisJfQorCiAJcmV0dXJuIDA7CiB9CisjZWxzZQoraW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqbWUpCit7CisgICAgICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TUEFSQzY0ICovCiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9tdWxkaXYuYyBiL2FyY2gvc3BhcmMva2VybmVsL211bGRpdi5jCmluZGV4IGUzNTIyMzkuLmJhOTYwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL211bGRpdi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL211bGRpdi5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKyNpbmNsdWRlICJrZXJuZWwuaCIKKwogLyogI2RlZmluZSBERUJVR19NVUxESVYgKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGFzX2ltbTEzKGludCBpbnNuKQpAQCAtODgsOSArOTAsNiBAQAogCQlyZXR1cm4gKHB1dF91c2VyKHJlc3VsdCwgJndpbi0+bG9jYWxzW3JlZyAtIDE2XSkpOwogCX0KIH0KLQkJCi1leHRlcm4gdm9pZCBoYW5kbGVfaHdfZGl2emVybyAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBucGMsIHVuc2lnbmVkIGxvbmcgcHNyKTsKIAogLyogU2hvdWxkIHJldHVybiAwIGlmIG11bC9kaXYgZW11bGF0aW9uIHN1Y2NlZWRlZCBhbmQgU0lHSUxMIHNob3VsZAogICogbm90IGJlIGlzc3VlZC4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDBmNjE2YWUuLjQ2ZTIzMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKQEAgLTgxMSwyMCArODExLDIwIEBACiAKIAlpcnEgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJpbnRlcnJ1cHRzIiwgJmxlbik7CiAJaWYgKGlycSkgewotCQltZW1jcHkob3AtPmlycXMsIGlycSwgbGVuKTsKIAkJb3AtPm51bV9pcnFzID0gbGVuIC8gNDsKKworCQkvKiBQcmV2ZW50IG92ZXJydW5uaW5nIHRoZSBvcC0+aXJxc1tdIGFycmF5LiAgKi8KKwkJaWYgKG9wLT5udW1faXJxcyA+IFBST01JTlRSX01BWCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtYW55IGlycXMgKCVkKSwgIgorCQkJICAgICAgICJsaW1pdGluZyB0byAlZC5cbiIsCisJCQkgICAgICAgZHAtPmZ1bGxfbmFtZSwgb3AtPm51bV9pcnFzLCBQUk9NSU5UUl9NQVgpOworCQkJb3AtPm51bV9pcnFzID0gUFJPTUlOVFJfTUFYOworCQl9CisJCW1lbWNweShvcC0+aXJxcywgaXJxLCBvcC0+bnVtX2lycXMgKiA0KTsKIAl9IGVsc2UgewogCQlvcC0+bnVtX2lycXMgPSAwOwogCX0KIAotCS8qIFByZXZlbnQgb3ZlcnJ1bm5pbmcgdGhlIG9wLT5pcnFzW10gYXJyYXkuICAqLwotCWlmIChvcC0+bnVtX2lycXMgPiBQUk9NSU5UUl9NQVgpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtYW55IGlycXMgKCVkKSwgIgotCQkgICAgICAgImxpbWl0aW5nIHRvICVkLlxuIiwKLQkJICAgICAgIGRwLT5mdWxsX25hbWUsIG9wLT5udW1faXJxcywgUFJPTUlOVFJfTUFYKTsKLQkJb3AtPm51bV9pcnFzID0gUFJPTUlOVFJfTUFYOwotCX0KLQogCWJ1aWxkX2RldmljZV9yZXNvdXJjZXMob3AsIHBhcmVudCk7CiAJZm9yIChpID0gMDsgaSA8IG9wLT5udW1faXJxczsgaSsrKQogCQlvcC0+aXJxc1tpXSA9IGJ1aWxkX29uZV9kZXZpY2VfaXJxKG9wLCBwYXJlbnQsIG9wLT5pcnFzW2ldKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9maXJlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfZmlyZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BjaV9maXJlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3BjaV9maXJlLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2ltcGwuaCBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9pbXBsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2ltcGwuaApyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2ltcGwuaApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfbXNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX21zaS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3BzeWNoby5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3BzeWNoby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3BzeWNoby5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NhYnJlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2NoaXpvLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zdW40di5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuaCBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zdW40di5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5oCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHYuaApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHZfYXNtLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHZfYXNtLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2X2FzbS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wY2lfc3VuNHZfYXNtLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwppbmRleCA0NjI1ODRlLi43NWVkOThiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCkBAIC00MzYsNyArNDM2LDcgQEAKIAlyZXR1cm4gcGNpYzBfdXA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBkZXZfdG9fcG5vZGUoc3RydWN0IGxpbnV4X3BibV9pbmZvICpwYm0sIAorc3RhdGljIGludCBfX2RldmluaXQgcGRldl90b19wbm9kZShzdHJ1Y3QgbGludXhfcGJtX2luZm8gKnBibSwKIAkJCQkgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyByZWdzW1BST01SRUdfTUFYXTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BtYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKaW5kZXggMmFmY2ZhYi4uNWU0NTYzZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMKQEAgLTI0LDMyICsyNCwzMiBAQAogICovCiAKICNkZWZpbmUgUE1DX09CUE5BTUUJIlNVTlcscG1jIgotI2RlZmluZSBQTUNfREVWTkFNRSAicG1jIgorI2RlZmluZSBQTUNfREVWTkFNRQkicG1jIgogCiAjZGVmaW5lIFBNQ19JRExFX1JFRwkweDAwCi0jZGVmaW5lIFBNQ19JRExFX09OCQkweDAxCisjZGVmaW5lIFBNQ19JRExFX09OCTB4MDEKIAogc3RhdGljIHU4IF9faW9tZW0gKnJlZ3M7CiAKICNkZWZpbmUgcG1jX3JlYWRiKG9mZnMpCQkoc2J1c19yZWFkYihyZWdzK29mZnMpKQotI2RlZmluZSBwbWNfd3JpdGViKHZhbCwgb2ZmcykgCShzYnVzX3dyaXRlYih2YWwsIHJlZ3Mrb2ZmcykpCisjZGVmaW5lIHBtY193cml0ZWIodmFsLCBvZmZzKQkoc2J1c193cml0ZWIodmFsLCByZWdzK29mZnMpKQogCi0vKiAKKy8qCiAgKiBDUFUgaWRsZSBjYWxsYmFjayBmdW5jdGlvbgogICogU2VlIC4uLi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKICAqLwotdm9pZCBwbWNfc3dpZnRfaWRsZSh2b2lkKQorc3RhdGljIHZvaWQgcG1jX3N3aWZ0X2lkbGUodm9pZCkKIHsKICNpZmRlZiBQTUNfREVCVUdfTEVECi0Jc2V0X2F1eGlvKDB4MDAsIEFVWElPX0xFRCk7IAorCXNldF9hdXhpbygweDAwLCBBVVhJT19MRUQpOwogI2VuZGlmCiAKIAlwbWNfd3JpdGViKHBtY19yZWFkYihQTUNfSURMRV9SRUcpIHwgUE1DX0lETEVfT04sIFBNQ19JRExFX1JFRyk7CiAKICNpZmRlZiBQTUNfREVCVUdfTEVECi0Jc2V0X2F1eGlvKEFVWElPX0xFRCwgMHgwMCk7IAorCXNldF9hdXhpbyhBVVhJT19MRUQsIDB4MDApOwogI2VuZGlmCi19IAorfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwbWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCkBAIC02Myw3ICs2Myw3IEBACiAKICNpZm5kZWYgUE1DX05PX0lETEUKIAkvKiBBc3NpZ24gcG93ZXIgbWFuYWdlbWVudCBJRExFIGhhbmRsZXIgKi8KLQlwbV9pZGxlID0gcG1jX3N3aWZ0X2lkbGU7CQorCXBtX2lkbGUgPSBwbWNfc3dpZnRfaWRsZTsKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBvd2VyIG1hbmFnZW1lbnQgaW5pdGlhbGl6ZWRcbiIsIFBNQ19ERVZOQU1FKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Bvd2VyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcG93ZXIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGU4YzQzZmYuLjY5ZDkzMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTE2OCwxMSArMTY4LDkgQEAKIAogdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQogewotI2lmZGVmIENPTkZJR19TVU5fQVVYSU8KIAlpZiAoYXV4aW9fcG93ZXJfcmVnaXN0ZXIgJiYKIAkgICAgKHN0cmNtcChvZl9jb25zb2xlX2RldmljZS0+dHlwZSwgInNlcmlhbCIpIHx8IHNjb25zX3B3cm9mZikpCiAJCSphdXhpb19wb3dlcl9yZWdpc3RlciB8PSBBVVhJT19QT1dFUl9PRkY7Ci0jZW5kaWYKIAltYWNoaW5lX2hhbHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb20uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlNWVmYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyoKLSAqIFByb2NlZHVyZXMgZm9yIGNyZWF0aW5nLCBhY2Nlc3NpbmcgYW5kIGludGVycHJldGluZyB0aGUgZGV2aWNlIHRyZWUuCi0gKgotICogUGF1bCBNYWNrZXJyYXMJQXVndXN0IDE5OTYuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KLSAqIAotICogIEFkYXB0ZWQgZm9yIDY0Yml0IFBvd2VyUEMgYnkgRGF2ZSBFbmdlYnJldHNlbiBhbmQgUGV0ZXIgQmVyZ25lci4KLSAqICAgIHtlbmdlYnJldHxiZXJnbmVyfUB1cy5pYm0uY29tIAotICoKLSAqICBBZGFwdGVkIGZvciBzcGFyYzMyIGJ5IERhdmlkIFMuIE1pbGxlciBkYXZlbUBkYXZlbWxvZnQubmV0Ci0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLWV4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gMDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5ub2RlID09IGhhbmRsZSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KLWludCBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGRlZikKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JaW50IGxlbjsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBuYW1lLCAmbGVuKTsKLQlpZiAoIXByb3AgfHwgbGVuICE9IDQpCi0JCXJldHVybiBkZWY7Ci0KLQlyZXR1cm4gKihpbnQgKikgcHJvcC0+dmFsdWU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2dldGludHByb3BfZGVmYXVsdCk7Ci0KLURFRklORV9NVVRFWChvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwotRVhQT1JUX1NZTUJPTChvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwotCi1pbnQgb2Zfc2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbCwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipwcmV2cDsKLQl2b2lkICpuZXdfdmFsOwotCWludCBlcnI7Ci0KLQluZXdfdmFsID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWlmICghbmV3X3ZhbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkobmV3X3ZhbCwgdmFsLCBsZW4pOwotCi0JZXJyID0gLUVOT0RFVjsKLQotCXdyaXRlX2xvY2soJmRldnRyZWVfbG9jayk7Ci0JcHJldnAgPSAmZHAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpwcmV2cCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSAqcHJldnA7Ci0KLQkJaWYgKCFzdHJjYXNlY21wKHByb3AtPm5hbWUsIG5hbWUpKSB7Ci0JCQl2b2lkICpvbGRfdmFsID0gcHJvcC0+dmFsdWU7Ci0JCQlpbnQgcmV0OwotCi0JCQltdXRleF9sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwotCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCAoY2hhciAqKSBuYW1lLCB2YWwsIGxlbik7Ci0JCQltdXRleF91bmxvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7Ci0KLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlpZiAocmV0ID49IDApIHsKLQkJCQlwcm9wLT52YWx1ZSA9IG5ld192YWw7Ci0JCQkJcHJvcC0+bGVuZ3RoID0gbGVuOwotCi0JCQkJaWYgKE9GX0lTX0RZTkFNSUMocHJvcCkpCi0JCQkJCWtmcmVlKG9sZF92YWwpOwotCi0JCQkJT0ZfTUFSS19EWU5BTUlDKHByb3ApOwotCi0JCQkJZXJyID0gMDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCXByZXZwID0gJigqcHJldnApLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7Ci0KLQkvKiBYWFggVXBhdGUgcHJvY2ZzIGlmIG5lY2Vzc2FyeS4uLiAqLwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfc2V0X3Byb3BlcnR5KTsKLQotaW50IG9mX2ZpbmRfaW5fcHJvcGxpc3QoY29uc3QgY2hhciAqbGlzdCwgY29uc3QgY2hhciAqbWF0Y2gsIGludCBsZW4pCi17Ci0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJaW50IGw7Ci0KLQkJaWYgKCFzdHJjbXAobGlzdCwgbWF0Y2gpKQotCQkJcmV0dXJuIDE7Ci0JCWwgPSBzdHJsZW4obGlzdCkgKyAxOwotCQlsaXN0ICs9IGw7Ci0JCWxlbiAtPSBsOwotCX0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9pbl9wcm9wbGlzdCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHJvbV9lYXJseV9hbGxvY2F0ZWQ7Ci0KLXN0YXRpYyB2b2lkICogX19pbml0IHByb21fZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXZvaWQgKnJldDsKLQotCXJldCA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBTTVBfQ0FDSEVfQllURVMsIDBVTCk7Ci0JaWYgKHJldCAhPSBOVUxMKQotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQotCXByb21fZWFybHlfYWxsb2NhdGVkICs9IHNpemU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlzX3Jvb3Rfbm9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWlmICghZHApCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIChkcC0+cGFyZW50ID09IE5VTEwpOwotfQotCi0vKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGRlYWwgd2l0aCB0aGUgYmxhY2sgbWFnaWMgb2YgZnVsbHkgbmFtaW5nIGEKLSAqIG5vZGUuCi0gKgotICogQ2VydGFpbiB3ZWxsIGtub3duIG5hbWVkIG5vZGVzIGFyZSBqdXN0IHRoZSBzaW1wbGUgbmFtZSBzdHJpbmcuCi0gKgotICogQWN0dWFsIGRldmljZXMgaGF2ZSBhbiBhZGRyZXNzIHNwZWNpZmllciBhcHBlbmRlZCB0byB0aGUgYmFzZSBuYW1lCi0gKiBzdHJpbmcsIGxpa2UgdGhpcyAiZm9vQGFkZHIiLiAgVGhlICJhZGRyIiBjYW4gYmUgaW4gYW55IG51bWJlciBvZgotICogZm9ybWF0cywgYW5kIHRoZSBwbGF0Zm9ybSBwbHVzIHRoZSB0eXBlIG9mIHRoZSBub2RlIGRldGVybWluZSB0aGUKLSAqIGZvcm1hdCBhbmQgaG93IGl0IGlzIGNvbnN0cnVjdGVkLgotICoKLSAqIEZvciBjaGlsZHJlbiBvZiB0aGUgUk9PVCBub2RlLCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgZml4ZWQgYW5kCi0gKiBkZXRlcm1pbmVkIGJ5IHdoZXRoZXIgdGhpcyBpcyBhIHN1bjR1IG9yIHN1bjR2IHN5c3RlbS4KLSAqCi0gKiBGb3IgY2hpbGRyZW4gb2Ygb3RoZXIgbm9kZXMsIGl0IGlzIGJ1cyB0eXBlIHNwZWNpZmljLiAgU28KLSAqIHdlIHdhbGsgdXAgdGhlIHRyZWUgdW50aWwgd2UgZGlzY292ZXIgYSAiZGV2aWNlX3R5cGUiIHByb3BlcnR5Ci0gKiB3ZSByZWNvZ25pemUgYW5kIHdlIGdvIGZyb20gdGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzcGFyYzMyX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOwotCXN0cnVjdCBwcm9wZXJ0eSAqcnByb3A7Ci0KLQlycHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXJwcm9wKQotCQlyZXR1cm47Ci0KLQlyZWdzID0gcnByb3AtPnZhbHVlOwotCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKLQkJZHAtPm5hbWUsCi0JCXJlZ3MtPndoaWNoX2lvLCByZWdzLT5waHlzX2FkZHIpOwotfQotCi0vKiAibmFtZUBzbG90LG9mZnNldCIgICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2J1c19wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQotewotCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcmV0dXJuOwotCi0JcmVncyA9IHByb3AtPnZhbHVlOwotCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKLQkJZHAtPm5hbWUsCi0JCXJlZ3MtPndoaWNoX2lvLAotCQlyZWdzLT5waHlzX2FkZHIpOwotfQotCi0vKiAibmFtZUBkZXZudW1bLGZ1bmNdIiAqLwotc3RhdGljIHZvaWQgX19pbml0IHBjaV9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQotewotCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXVuc2lnbmVkIGludCBkZXZmbjsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlyZXR1cm47Ci0KLQlyZWdzID0gcHJvcC0+dmFsdWU7Ci0JZGV2Zm4gPSAocmVncy0+cGh5c19oaSA+PiA4KSAmIDB4ZmY7Ci0JaWYgKGRldmZuICYgMHgwNykgewotCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCwleCIsCi0JCQlkcC0+bmFtZSwKLQkJCWRldmZuID4+IDMsCi0JCQlkZXZmbiAmIDB4MDcpOwotCX0gZWxzZSB7Ci0JCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4IiwKLQkJCWRwLT5uYW1lLAotCQkJZGV2Zm4gPj4gMyk7Ci0JfQotfQotCi0vKiAibmFtZUBhZGRyaGksYWRkcmxvIiAqLwotc3RhdGljIHZvaWQgX19pbml0IGVidXNfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQotCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKLQkJZHAtPm5hbWUsCi0JCXJlZ3MtPndoaWNoX2lvLCByZWdzLT5waHlzX2FkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgX19idWlsZF9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gZHAtPnBhcmVudDsKLQotCWlmIChwYXJlbnQgIT0gTlVMTCkgewotCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJwY2kiKSB8fAotCQkgICAgIXN0cmNtcChwYXJlbnQtPnR5cGUsICJwY2lleCIpKQotCQkJcmV0dXJuIHBjaV9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7Ci0JCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgInNidXMiKSkKLQkJCXJldHVybiBzYnVzX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKLQkJaWYgKCFzdHJjbXAocGFyZW50LT50eXBlLCAiZWJ1cyIpKQotCQkJcmV0dXJuIGVidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCi0JCS8qICJpc2EiIGlzIGhhbmRsZWQgd2l0aCBwbGF0Zm9ybSBuYW1pbmcgKi8KLQl9Ci0KLQkvKiBVc2UgcGxhdGZvcm0gbmFtaW5nIGNvbnZlbnRpb24uICAqLwotCXJldHVybiBzcGFyYzMyX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKLX0KLQotc3RhdGljIGNoYXIgKiBfX2luaXQgYnVpbGRfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQljaGFyIHRtcF9idWZbNjRdLCAqbjsKLQotCXRtcF9idWZbMF0gPSAnXDAnOwotCV9fYnVpbGRfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCWlmICh0bXBfYnVmWzBdID09ICdcMCcpCi0JCXN0cmNweSh0bXBfYnVmLCBkcC0+bmFtZSk7Ci0KLQluID0gcHJvbV9lYXJseV9hbGxvYyhzdHJsZW4odG1wX2J1ZikgKyAxKTsKLQlzdHJjcHkobiwgdG1wX2J1Zik7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGNoYXIgKiBfX2luaXQgYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaW50IGxlbiwgb3VybGVuLCBwbGVuOwotCWNoYXIgKm47Ci0KLQlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0Jb3VybGVuID0gc3RybGVuKGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKLQlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKLQotCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7Ci0Jc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0JaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKLQkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOwotCQlwbGVuKys7Ci0JfQotCXN0cmNweShuICsgcGxlbiwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOwotCi0JcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdW5pcXVlX2lkOwotCi1zdGF0aWMgc3RydWN0IHByb3BlcnR5ICogX19pbml0IGJ1aWxkX29uZV9wcm9wKHBoYW5kbGUgbm9kZSwgY2hhciAqcHJldiwgY2hhciAqc3BlY2lhbF9uYW1lLCB2b2lkICpzcGVjaWFsX3ZhbCwgaW50IHNwZWNpYWxfbGVuKQotewotCXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKnRtcCA9IE5VTEw7Ci0Jc3RydWN0IHByb3BlcnR5ICpwOwotCWludCBsZW47Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCWlmICh0bXApIHsKLQkJcCA9IHRtcDsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkgKyAzMik7Ci0JCXRtcCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcCA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyAzMik7Ci0JCXAtPnVuaXF1ZV9pZCA9IHVuaXF1ZV9pZCsrOwotCX0KLQotCXAtPm5hbWUgPSAoY2hhciAqKSAocCArIDEpOwotCWlmIChzcGVjaWFsX25hbWUpIHsKLQkJc3RyY3B5KHAtPm5hbWUsIHNwZWNpYWxfbmFtZSk7Ci0JCXAtPmxlbmd0aCA9IHNwZWNpYWxfbGVuOwotCQlwLT52YWx1ZSA9IHByb21fZWFybHlfYWxsb2Moc3BlY2lhbF9sZW4pOwotCQltZW1jcHkocC0+dmFsdWUsIHNwZWNpYWxfdmFsLCBzcGVjaWFsX2xlbik7Ci0JfSBlbHNlIHsKLQkJaWYgKHByZXYgPT0gTlVMTCkgewotCQkJbmFtZSA9IHByb21fZmlyc3Rwcm9wKG5vZGUsIE5VTEwpOwotCQl9IGVsc2UgewotCQkJbmFtZSA9IHByb21fbmV4dHByb3Aobm9kZSwgcHJldiwgTlVMTCk7Ci0JCX0KLQkJaWYgKHN0cmxlbihuYW1lKSA9PSAwKSB7Ci0JCQl0bXAgPSBwOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJc3RyY3B5KHAtPm5hbWUsIG5hbWUpOwotCQlwLT5sZW5ndGggPSBwcm9tX2dldHByb3BsZW4obm9kZSwgcC0+bmFtZSk7Ci0JCWlmIChwLT5sZW5ndGggPD0gMCkgewotCQkJcC0+bGVuZ3RoID0gMDsKLQkJfSBlbHNlIHsKLQkJCXAtPnZhbHVlID0gcHJvbV9lYXJseV9hbGxvYyhwLT5sZW5ndGggKyAxKTsKLQkJCWxlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgcC0+bmFtZSwgcC0+dmFsdWUsCi0JCQkJCSAgICAgICBwLT5sZW5ndGgpOwotCQkJaWYgKGxlbiA8PSAwKQotCQkJCXAtPmxlbmd0aCA9IDA7Ci0JCQkoKHVuc2lnbmVkIGNoYXIgKilwLT52YWx1ZSlbcC0+bGVuZ3RoXSA9ICdcMCc7Ci0JCX0KLQl9Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKiBfX2luaXQgYnVpbGRfcHJvcF9saXN0KHBoYW5kbGUgbm9kZSkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKmhlYWQsICp0YWlsOwotCi0JaGVhZCA9IHRhaWwgPSBidWlsZF9vbmVfcHJvcChub2RlLCBOVUxMLAotCQkJCSAgICAgIi5ub2RlIiwgJm5vZGUsIHNpemVvZihub2RlKSk7Ci0KLQl0YWlsLT5uZXh0ID0gYnVpbGRfb25lX3Byb3Aobm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0JdGFpbCA9IHRhaWwtPm5leHQ7Ci0Jd2hpbGUodGFpbCkgewotCQl0YWlsLT5uZXh0ID0gYnVpbGRfb25lX3Byb3Aobm9kZSwgdGFpbC0+bmFtZSwKLQkJCQkJICAgIE5VTEwsIE5VTEwsIDApOwotCQl0YWlsID0gdGFpbC0+bmV4dDsKLQl9Ci0KLQlyZXR1cm4gaGVhZDsKLX0KLQotc3RhdGljIGNoYXIgKiBfX2luaXQgZ2V0X29uZV9wcm9wZXJ0eShwaGFuZGxlIG5vZGUsIGNoYXIgKm5hbWUpCi17Ci0JY2hhciAqYnVmID0gIjxOVUxMPiI7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHByb21fZ2V0cHJvcGxlbihub2RlLCBuYW1lKTsKLQlpZiAobGVuID4gMCkgewotCQlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7Ci0JCWxlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgbmFtZSwgYnVmLCBsZW4pOwotCX0KLQotCXJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgY3JlYXRlX25vZGUocGhhbmRsZSBub2RlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0KLQlpZiAoIW5vZGUpCi0JCXJldHVybiBOVUxMOwotCi0JZHAgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZigqZHApKTsKLQlkcC0+dW5pcXVlX2lkID0gdW5pcXVlX2lkKys7Ci0KLQlrcmVmX2luaXQoJmRwLT5rcmVmKTsKLQotCWRwLT5uYW1lID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwotCWRwLT50eXBlID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAiZGV2aWNlX3R5cGUiKTsKLQlkcC0+bm9kZSA9IG5vZGU7Ci0KLQkvKiBCdWlsZCBpbnRlcnJ1cHRzIGxhdGVyLi4uICovCi0KLQlkcC0+cHJvcGVydGllcyA9IGJ1aWxkX3Byb3BfbGlzdChub2RlKTsKLQotCXJldHVybiBkcDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9faW5pdCBidWlsZF90cmVlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCBwaGFuZGxlIG5vZGUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCi0JZHAgPSBjcmVhdGVfbm9kZShub2RlKTsKLQlpZiAoZHApIHsKLQkJKigqbmV4dHApID0gZHA7Ci0JCSpuZXh0cCA9ICZkcC0+YWxsbmV4dDsKLQotCQlkcC0+cGFyZW50ID0gcGFyZW50OwotCQlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKLQkJZHAtPmZ1bGxfbmFtZSA9IGJ1aWxkX2Z1bGxfbmFtZShkcCk7Ci0KLQkJZHAtPmNoaWxkID0gYnVpbGRfdHJlZShkcCwgcHJvbV9nZXRjaGlsZChub2RlKSwgbmV4dHApOwotCi0JCWRwLT5zaWJsaW5nID0gYnVpbGRfdHJlZShwYXJlbnQsIHByb21fZ2V0c2libGluZyhub2RlKSwgbmV4dHApOwotCX0KLQotCXJldHVybiBkcDsKLX0KLQotc3RydWN0IGRldmljZV9ub2RlICpvZl9jb25zb2xlX2RldmljZTsKLUVYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9kZXZpY2UpOwotCi1jaGFyICpvZl9jb25zb2xlX3BhdGg7Ci1FWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfcGF0aCk7Ci0KLWNoYXIgKm9mX2NvbnNvbGVfb3B0aW9uczsKLUVYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9vcHRpb25zKTsKLQotZXh0ZXJuIHZvaWQgcmVzdG9yZV9jdXJyZW50KHZvaWQpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgb2ZfY29uc29sZV9pbml0KHZvaWQpCi17Ci0JY2hhciAqbXNnID0gIk9GIHN0ZG91dCBkZXZpY2UgaXM6ICVzXG4iOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb25zdCBjaGFyICp0eXBlOwotCXBoYW5kbGUgbm9kZTsKLQlpbnQgc2tpcCwgdG1wLCBmZDsKLQotCW9mX2NvbnNvbGVfcGF0aCA9IHByb21fZWFybHlfYWxsb2MoMjU2KTsKLQotCXN3aXRjaCAocHJvbV92ZXJzKSB7Ci0JY2FzZSBQUk9NX1YwOgotCQlza2lwID0gMDsKLQkJc3dpdGNoICgqcm9tdmVjLT5wdl9zdGRvdXQpIHsKLQkJY2FzZSBQUk9NREVWX1NDUkVFTjoKLQkJCXR5cGUgPSAiZGlzcGxheSI7Ci0JCQlicmVhazsKLQotCQljYXNlIFBST01ERVZfVFRZQjoKLQkJCXNraXAgPSAxOwotCQkJLyogRkFMTFRIUlUgKi8KLQotCQljYXNlIFBST01ERVZfVFRZQToKLQkJCXR5cGUgPSAic2VyaWFsIjsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcm9tX3ByaW50ZigiSW52YWxpZCBQUk9NX1YwIHN0ZG91dCB2YWx1ZSAldVxuIiwKLQkJCQkgICAgKnJvbXZlYy0+cHZfc3Rkb3V0KTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0KLQkJdG1wID0gc2tpcDsKLQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCB0eXBlKSB7Ci0JCQlpZiAoIXRtcC0tKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICghZHApIHsKLQkJCXByb21fcHJpbnRmKCJDYW5ub3QgZmluZCBQUk9NX1YwIGNvbnNvbGUgbm9kZS5cbiIpOwotCQkJcHJvbV9oYWx0KCk7Ci0JCX0KLQkJb2ZfY29uc29sZV9kZXZpY2UgPSBkcDsKLQotCQlzdHJjcHkob2ZfY29uc29sZV9wYXRoLCBkcC0+ZnVsbF9uYW1lKTsKLQkJaWYgKCFzdHJjbXAodHlwZSwgInNlcmlhbCIpKSB7Ci0JCQlzdHJjYXQob2ZfY29uc29sZV9wYXRoLAotCQkJICAgICAgIChza2lwID8gIjpiIiA6ICI6YSIpKTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JY2FzZSBQUk9NX1YyOgotCWNhc2UgUFJPTV9WMzoKLQkJZmQgPSAqcm9tdmVjLT5wdl92MmJvb3RhcmdzLmZkX3N0ZG91dDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci0JCW5vZGUgPSAoKnJvbXZlYy0+cHZfdjJkZXZvcHMudjJfaW5zdDJwa2cpKGZkKTsKLQkJcmVzdG9yZV9jdXJyZW50KCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCi0JCWlmICghbm9kZSkgewotCQkJcHJvbV9wcmludGYoIkNhbm5vdCByZXNvbHZlIHN0ZG91dCBub2RlIGZyb20gIgotCQkJCSAgICAiaW5zdGFuY2UgJTA4eC5cbiIsIGZkKTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0JCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUobm9kZSk7Ci0JCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCi0JCWlmICghdHlwZSkgewotCQkJcHJvbV9wcmludGYoIkNvbnNvbGUgc3Rkb3V0IGxhY2tzICIKLQkJCQkgICAgImRldmljZV90eXBlIHByb3BlcnR5LlxuIik7Ci0JCQlwcm9tX2hhbHQoKTsKLQkJfQotCi0JCWlmIChzdHJjbXAodHlwZSwgImRpc3BsYXkiKSAmJiBzdHJjbXAodHlwZSwgInNlcmlhbCIpKSB7Ci0JCQlwcm9tX3ByaW50ZigiQ29uc29sZSBkZXZpY2VfdHlwZSBpcyBuZWl0aGVyIGRpc3BsYXkgIgotCQkJCSAgICAibm9yIHNlcmlhbC5cbiIpOwotCQkJcHJvbV9oYWx0KCk7Ci0JCX0KLQotCQlvZl9jb25zb2xlX2RldmljZSA9IGRwOwotCi0JCWlmIChwcm9tX3ZlcnMgPT0gUFJPTV9WMikgewotCQkJc3RyY3B5KG9mX2NvbnNvbGVfcGF0aCwgZHAtPmZ1bGxfbmFtZSk7Ci0JCQlzd2l0Y2ggKCpyb212ZWMtPnB2X3N0ZG91dCkgewotCQkJY2FzZSBQUk9NREVWX1RUWUE6Ci0JCQkJc3RyY2F0KG9mX2NvbnNvbGVfcGF0aCwgIjphIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBST01ERVZfVFRZQjoKLQkJCQlzdHJjYXQob2ZfY29uc29sZV9wYXRoLCAiOmIiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWNvbnN0IGNoYXIgKnBhdGg7Ci0KLQkJCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQkJCXBhdGggPSBvZl9nZXRfcHJvcGVydHkoZHAsICJzdGRvdXQtcGF0aCIsIE5VTEwpOwotCQkJaWYgKCFwYXRoKSB7Ci0JCQkJcHJvbV9wcmludGYoIk5vIHN0ZG91dC1wYXRoIGluIHJvb3Qgbm9kZS5cbiIpOwotCQkJCXByb21faGFsdCgpOwotCQkJfQotCQkJc3RyY3B5KG9mX2NvbnNvbGVfcGF0aCwgcGF0aCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0Jb2ZfY29uc29sZV9vcHRpb25zID0gc3RycmNocihvZl9jb25zb2xlX3BhdGgsICc6Jyk7Ci0JaWYgKG9mX2NvbnNvbGVfb3B0aW9ucykgewotCQlvZl9jb25zb2xlX29wdGlvbnMrKzsKLQkJaWYgKCpvZl9jb25zb2xlX29wdGlvbnMgPT0gJ1wwJykKLQkJCW9mX2NvbnNvbGVfb3B0aW9ucyA9IE5VTEw7Ci0JfQotCi0JcHJvbV9wcmludGYobXNnLCBvZl9jb25zb2xlX3BhdGgpOwotCXByaW50ayhtc2csIG9mX2NvbnNvbGVfcGF0aCk7Ci19Ci0KLXZvaWQgX19pbml0IHByb21fYnVpbGRfZGV2aWNldHJlZSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKm5leHRwOwotCi0JYWxsbm9kZXMgPSBjcmVhdGVfbm9kZShwcm9tX3Jvb3Rfbm9kZSk7Ci0JYWxsbm9kZXMtPnBhdGhfY29tcG9uZW50X25hbWUgPSAiIjsKLQlhbGxub2Rlcy0+ZnVsbF9uYW1lID0gIi8iOwotCi0JbmV4dHAgPSAmYWxsbm9kZXMtPmFsbG5leHQ7Ci0JYWxsbm9kZXMtPmNoaWxkID0gYnVpbGRfdHJlZShhbGxub2RlcywKLQkJCQkgICAgIHByb21fZ2V0Y2hpbGQoYWxsbm9kZXMtPm5vZGUpLAotCQkJCSAgICAgJm5leHRwKTsKLQlvZl9jb25zb2xlX2luaXQoKTsKLQotCXByaW50aygiUFJPTTogQnVpbHQgZGV2aWNlIHRyZWUgd2l0aCAldSBieXRlcyBvZiBtZW1vcnkuXG4iLAotCSAgICAgICBwcm9tX2Vhcmx5X2FsbG9jYXRlZCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZjBmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fUFJPTV9ICisjZGVmaW5lIF9fUFJPTV9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLworZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KKworZXh0ZXJuIHZvaWQgKiBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBpcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9tX3VuaXF1ZV9pZDsKKworc3RhdGljIGlubGluZSBpbnQgaXNfcm9vdF9ub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJaWYgKCFkcCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKGRwLT5wYXJlbnQgPT0gTlVMTCk7Cit9CisKK2V4dGVybiBjaGFyICpidWlsZF9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKK2V4dGVybiB2b2lkIG9mX2NvbnNvbGVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9mX2ZpbGxfaW5fY3B1X2RhdGEodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgcHJvbV9lYXJseV9hbGxvY2F0ZWQ7CisKKyNlbmRpZiAvKiBfX1BST01fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNDNlODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBQcm9jZWR1cmVzIGZvciBjcmVhdGluZywgYWNjZXNzaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlIGRldmljZSB0cmVlLgorICoKKyAqIFBhdWwgTWFja2VycmFzCUF1Z3VzdCAxOTk2LgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCisgKiAKKyAqICBBZGFwdGVkIGZvciA2NGJpdCBQb3dlclBDIGJ5IERhdmUgRW5nZWJyZXRzZW4gYW5kIFBldGVyIEJlcmduZXIuCisgKiAgICB7ZW5nZWJyZXR8YmVyZ25lcn1AdXMuaWJtLmNvbSAKKyAqCisgKiAgQWRhcHRlZCBmb3Igc3BhcmMzMiBieSBEYXZpZCBTLiBNaWxsZXIgZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKKyNpbmNsdWRlICJwcm9tLmgiCisKK3ZvaWQgKiBfX2luaXQgcHJvbV9lYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqcmV0OworCisJcmV0ID0gX19hbGxvY19ib290bWVtKHNpemUsIFNNUF9DQUNIRV9CWVRFUywgMFVMKTsKKwlpZiAocmV0ICE9IE5VTEwpCisJCW1lbXNldChyZXQsIDAsIHNpemUpOworCisJcHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gc2l6ZTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZGVhbCB3aXRoIHRoZSBibGFjayBtYWdpYyBvZiBmdWxseSBuYW1pbmcgYQorICogbm9kZS4KKyAqCisgKiBDZXJ0YWluIHdlbGwga25vd24gbmFtZWQgbm9kZXMgYXJlIGp1c3QgdGhlIHNpbXBsZSBuYW1lIHN0cmluZy4KKyAqCisgKiBBY3R1YWwgZGV2aWNlcyBoYXZlIGFuIGFkZHJlc3Mgc3BlY2lmaWVyIGFwcGVuZGVkIHRvIHRoZSBiYXNlIG5hbWUKKyAqIHN0cmluZywgbGlrZSB0aGlzICJmb29AYWRkciIuICBUaGUgImFkZHIiIGNhbiBiZSBpbiBhbnkgbnVtYmVyIG9mCisgKiBmb3JtYXRzLCBhbmQgdGhlIHBsYXRmb3JtIHBsdXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUgZGV0ZXJtaW5lIHRoZQorICogZm9ybWF0IGFuZCBob3cgaXQgaXMgY29uc3RydWN0ZWQuCisgKgorICogRm9yIGNoaWxkcmVuIG9mIHRoZSBST09UIG5vZGUsIHRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBmaXhlZCBhbmQKKyAqIGRldGVybWluZWQgYnkgd2hldGhlciB0aGlzIGlzIGEgc3VuNHUgb3Igc3VuNHYgc3lzdGVtLgorICoKKyAqIEZvciBjaGlsZHJlbiBvZiBvdGhlciBub2RlcywgaXQgaXMgYnVzIHR5cGUgc3BlY2lmaWMuICBTbworICogd2Ugd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBkaXNjb3ZlciBhICJkZXZpY2VfdHlwZSIgcHJvcGVydHkKKyAqIHdlIHJlY29nbml6ZSBhbmQgd2UgZ28gZnJvbSB0aGVyZS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNwYXJjMzJfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHByb3BlcnR5ICpycHJvcDsKKworCXJwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlmICghcnByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBycHJvcC0+dmFsdWU7CisJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQlkcC0+bmFtZSwKKwkJcmVncy0+d2hpY2hfaW8sIHJlZ3MtPnBoeXNfYWRkcik7Cit9CisKKy8qICJuYW1lQHNsb3Qsb2Zmc2V0IiAgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzYnVzX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisKKwlyZWdzID0gcHJvcC0+dmFsdWU7CisJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQlkcC0+bmFtZSwKKwkJcmVncy0+d2hpY2hfaW8sCisJCXJlZ3MtPnBoeXNfYWRkcik7Cit9CisKKy8qICJuYW1lQGRldm51bVssZnVuY10iICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcmVnczsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJdW5zaWduZWQgaW50IGRldmZuOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKwlkZXZmbiA9IChyZWdzLT5waHlzX2hpID4+IDgpICYgMHhmZjsKKwlpZiAoZGV2Zm4gJiAweDA3KSB7CisJCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKKwkJCWRwLT5uYW1lLAorCQkJZGV2Zm4gPj4gMywKKwkJCWRldmZuICYgMHgwNyk7CisJfSBlbHNlIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgiLAorCQkJZHAtPm5hbWUsCisJCQlkZXZmbiA+PiAzKTsKKwl9Cit9CisKKy8qICJuYW1lQGFkZHJoaSxhZGRybG8iICovCitzdGF0aWMgdm9pZCBfX2luaXQgZWJ1c19wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQoreworCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCisJcmVncyA9IHByb3AtPnZhbHVlOworCisJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQlkcC0+bmFtZSwKKwkJcmVncy0+d2hpY2hfaW8sIHJlZ3MtPnBoeXNfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2J1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBkcC0+cGFyZW50OworCisJaWYgKHBhcmVudCAhPSBOVUxMKSB7CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaSIpIHx8CisJCSAgICAhc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaWV4IikpCisJCQlyZXR1cm4gcGNpX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKKwkJaWYgKCFzdHJjbXAocGFyZW50LT50eXBlLCAic2J1cyIpKQorCQkJcmV0dXJuIHNidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJlYnVzIikpCisJCQlyZXR1cm4gZWJ1c19wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CisKKwkJLyogImlzYSIgaXMgaGFuZGxlZCB3aXRoIHBsYXRmb3JtIG5hbWluZyAqLworCX0KKworCS8qIFVzZSBwbGF0Zm9ybSBuYW1pbmcgY29udmVudGlvbi4gICovCisJcmV0dXJuIHNwYXJjMzJfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworfQorCitjaGFyICogX19pbml0IGJ1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY2hhciB0bXBfYnVmWzY0XSwgKm47CisKKwl0bXBfYnVmWzBdID0gJ1wwJzsKKwlfX2J1aWxkX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKKwlpZiAodG1wX2J1ZlswXSA9PSAnXDAnKQorCQlzdHJjcHkodG1wX2J1ZiwgZHAtPm5hbWUpOworCisJbiA9IHByb21fZWFybHlfYWxsb2Moc3RybGVuKHRtcF9idWYpICsgMSk7CisJc3RyY3B5KG4sIHRtcF9idWYpOworCisJcmV0dXJuIG47Cit9CisKK2V4dGVybiB2b2lkIHJlc3RvcmVfY3VycmVudCh2b2lkKTsKKwordm9pZCBfX2luaXQgb2ZfY29uc29sZV9pbml0KHZvaWQpCit7CisJY2hhciAqbXNnID0gIk9GIHN0ZG91dCBkZXZpY2UgaXM6ICVzXG4iOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBjaGFyICp0eXBlOworCXBoYW5kbGUgbm9kZTsKKwlpbnQgc2tpcCwgdG1wLCBmZDsKKworCW9mX2NvbnNvbGVfcGF0aCA9IHByb21fZWFybHlfYWxsb2MoMjU2KTsKKworCXN3aXRjaCAocHJvbV92ZXJzKSB7CisJY2FzZSBQUk9NX1YwOgorCQlza2lwID0gMDsKKwkJc3dpdGNoICgqcm9tdmVjLT5wdl9zdGRvdXQpIHsKKwkJY2FzZSBQUk9NREVWX1NDUkVFTjoKKwkJCXR5cGUgPSAiZGlzcGxheSI7CisJCQlicmVhazsKKworCQljYXNlIFBST01ERVZfVFRZQjoKKwkJCXNraXAgPSAxOworCQkJLyogRkFMTFRIUlUgKi8KKworCQljYXNlIFBST01ERVZfVFRZQToKKwkJCXR5cGUgPSAic2VyaWFsIjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcm9tX3ByaW50ZigiSW52YWxpZCBQUk9NX1YwIHN0ZG91dCB2YWx1ZSAldVxuIiwKKwkJCQkgICAgKnJvbXZlYy0+cHZfc3Rkb3V0KTsKKwkJCXByb21faGFsdCgpOworCQl9CisKKwkJdG1wID0gc2tpcDsKKwkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCB0eXBlKSB7CisJCQlpZiAoIXRtcC0tKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghZHApIHsKKwkJCXByb21fcHJpbnRmKCJDYW5ub3QgZmluZCBQUk9NX1YwIGNvbnNvbGUgbm9kZS5cbiIpOworCQkJcHJvbV9oYWx0KCk7CisJCX0KKwkJb2ZfY29uc29sZV9kZXZpY2UgPSBkcDsKKworCQlzdHJjcHkob2ZfY29uc29sZV9wYXRoLCBkcC0+ZnVsbF9uYW1lKTsKKwkJaWYgKCFzdHJjbXAodHlwZSwgInNlcmlhbCIpKSB7CisJCQlzdHJjYXQob2ZfY29uc29sZV9wYXRoLAorCQkJICAgICAgIChza2lwID8gIjpiIiA6ICI6YSIpKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJY2FzZSBQUk9NX1YyOgorCWNhc2UgUFJPTV9WMzoKKwkJZmQgPSAqcm9tdmVjLT5wdl92MmJvb3RhcmdzLmZkX3N0ZG91dDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7CisJCW5vZGUgPSAoKnJvbXZlYy0+cHZfdjJkZXZvcHMudjJfaW5zdDJwa2cpKGZkKTsKKwkJcmVzdG9yZV9jdXJyZW50KCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOworCisJCWlmICghbm9kZSkgeworCQkJcHJvbV9wcmludGYoIkNhbm5vdCByZXNvbHZlIHN0ZG91dCBub2RlIGZyb20gIgorCQkJCSAgICAiaW5zdGFuY2UgJTA4eC5cbiIsIGZkKTsKKwkJCXByb21faGFsdCgpOworCQl9CisJCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUobm9kZSk7CisJCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOworCisJCWlmICghdHlwZSkgeworCQkJcHJvbV9wcmludGYoIkNvbnNvbGUgc3Rkb3V0IGxhY2tzICIKKwkJCQkgICAgImRldmljZV90eXBlIHByb3BlcnR5LlxuIik7CisJCQlwcm9tX2hhbHQoKTsKKwkJfQorCisJCWlmIChzdHJjbXAodHlwZSwgImRpc3BsYXkiKSAmJiBzdHJjbXAodHlwZSwgInNlcmlhbCIpKSB7CisJCQlwcm9tX3ByaW50ZigiQ29uc29sZSBkZXZpY2VfdHlwZSBpcyBuZWl0aGVyIGRpc3BsYXkgIgorCQkJCSAgICAibm9yIHNlcmlhbC5cbiIpOworCQkJcHJvbV9oYWx0KCk7CisJCX0KKworCQlvZl9jb25zb2xlX2RldmljZSA9IGRwOworCisJCWlmIChwcm9tX3ZlcnMgPT0gUFJPTV9WMikgeworCQkJc3RyY3B5KG9mX2NvbnNvbGVfcGF0aCwgZHAtPmZ1bGxfbmFtZSk7CisJCQlzd2l0Y2ggKCpyb212ZWMtPnB2X3N0ZG91dCkgeworCQkJY2FzZSBQUk9NREVWX1RUWUE6CisJCQkJc3RyY2F0KG9mX2NvbnNvbGVfcGF0aCwgIjphIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFBST01ERVZfVFRZQjoKKwkJCQlzdHJjYXQob2ZfY29uc29sZV9wYXRoLCAiOmIiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkJCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwkJCXBhdGggPSBvZl9nZXRfcHJvcGVydHkoZHAsICJzdGRvdXQtcGF0aCIsIE5VTEwpOworCQkJaWYgKCFwYXRoKSB7CisJCQkJcHJvbV9wcmludGYoIk5vIHN0ZG91dC1wYXRoIGluIHJvb3Qgbm9kZS5cbiIpOworCQkJCXByb21faGFsdCgpOworCQkJfQorCQkJc3RyY3B5KG9mX2NvbnNvbGVfcGF0aCwgcGF0aCk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJb2ZfY29uc29sZV9vcHRpb25zID0gc3RycmNocihvZl9jb25zb2xlX3BhdGgsICc6Jyk7CisJaWYgKG9mX2NvbnNvbGVfb3B0aW9ucykgeworCQlvZl9jb25zb2xlX29wdGlvbnMrKzsKKwkJaWYgKCpvZl9jb25zb2xlX29wdGlvbnMgPT0gJ1wwJykKKwkJCW9mX2NvbnNvbGVfb3B0aW9ucyA9IE5VTEw7CisJfQorCisJcHJvbV9wcmludGYobXNnLCBvZl9jb25zb2xlX3BhdGgpOworCXByaW50ayhtc2csIG9mX2NvbnNvbGVfcGF0aCk7Cit9CisKK3ZvaWQgX19pbml0IG9mX2ZpbGxfaW5fY3B1X2RhdGEodm9pZCkKK3sKK30KKwordm9pZCBfX2luaXQgaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGVjY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV82NC5jCkBAIC0wLDAgKzEsNTcxIEBACisvKgorICogUHJvY2VkdXJlcyBmb3IgY3JlYXRpbmcsIGFjY2Vzc2luZyBhbmQgaW50ZXJwcmV0aW5nIHRoZSBkZXZpY2UgdHJlZS4KKyAqCisgKiBQYXVsIE1hY2tlcnJhcwlBdWd1c3QgMTk5Ni4KKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgorICogCisgKiAgQWRhcHRlZCBmb3IgNjRiaXQgUG93ZXJQQyBieSBEYXZlIEVuZ2VicmV0c2VuIGFuZCBQZXRlciBCZXJnbmVyLgorICogICAge2VuZ2VicmV0fGJlcmduZXJ9QHVzLmlibS5jb20gCisgKgorICogIEFkYXB0ZWQgZm9yIHNwYXJjNjQgYnkgRGF2aWQgUy4gTWlsbGVyIGRhdmVtQGRhdmVtbG9mdC5uZXQKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vdXBhLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisjaW5jbHVkZSAicHJvbS5oIgorCit2b2lkICogX19pbml0IHByb21fZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBsbWJfYWxsb2Moc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKKwl2b2lkICpyZXQ7CisKKwlpZiAoIXBhZGRyKSB7CisJCXByb21fcHJpbnRmKCJwcm9tX2Vhcmx5X2FsbG9jKCVsdSkgZmFpbGVkXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJcmV0ID0gX192YShwYWRkcik7CisJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CisJcHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gc2l6ZTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZGVhbCB3aXRoIHRoZSBibGFjayBtYWdpYyBvZiBmdWxseSBuYW1pbmcgYQorICogbm9kZS4KKyAqCisgKiBDZXJ0YWluIHdlbGwga25vd24gbmFtZWQgbm9kZXMgYXJlIGp1c3QgdGhlIHNpbXBsZSBuYW1lIHN0cmluZy4KKyAqCisgKiBBY3R1YWwgZGV2aWNlcyBoYXZlIGFuIGFkZHJlc3Mgc3BlY2lmaWVyIGFwcGVuZGVkIHRvIHRoZSBiYXNlIG5hbWUKKyAqIHN0cmluZywgbGlrZSB0aGlzICJmb29AYWRkciIuICBUaGUgImFkZHIiIGNhbiBiZSBpbiBhbnkgbnVtYmVyIG9mCisgKiBmb3JtYXRzLCBhbmQgdGhlIHBsYXRmb3JtIHBsdXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUgZGV0ZXJtaW5lIHRoZQorICogZm9ybWF0IGFuZCBob3cgaXQgaXMgY29uc3RydWN0ZWQuCisgKgorICogRm9yIGNoaWxkcmVuIG9mIHRoZSBST09UIG5vZGUsIHRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBmaXhlZCBhbmQKKyAqIGRldGVybWluZWQgYnkgd2hldGhlciB0aGlzIGlzIGEgc3VuNHUgb3Igc3VuNHYgc3lzdGVtLgorICoKKyAqIEZvciBjaGlsZHJlbiBvZiBvdGhlciBub2RlcywgaXQgaXMgYnVzIHR5cGUgc3BlY2lmaWMuICBTbworICogd2Ugd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBkaXNjb3ZlciBhICJkZXZpY2VfdHlwZSIgcHJvcGVydHkKKyAqIHdlIHJlY29nbml6ZSBhbmQgd2UgZ28gZnJvbSB0aGVyZS4KKyAqCisgKiBBcyBhbiBleGFtcGxlLCB0aGUgYm9vdCBkZXZpY2Ugb24gbXkgd29ya3N0YXRpb24gaGFzIGEgZnVsbCBwYXRoOgorICoKKyAqCS9wY2lAMWUsNjAwMDAwL2lkZUBkL2Rpc2tAMCwwOmMKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHN1bjR2X3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHByb3BlcnR5ICpycHJvcDsKKwl1MzIgaGlnaF9iaXRzLCBsb3dfYml0cywgdHlwZTsKKworCXJwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlmICghcnByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBycHJvcC0+dmFsdWU7CisJaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQkJZHAtPm5hbWUsCisJCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyID4+IDMyVUwpLAorCQkJKHVuc2lnbmVkIGludCkgKHJlZ3MtPnBoeXNfYWRkciAmIDB4ZmZmZmZmZmZVTCkpOworCQlyZXR1cm47CisJfQorCisJdHlwZSA9IHJlZ3MtPnBoeXNfYWRkciA+PiA2MFVMOworCWhpZ2hfYml0cyA9IChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmVUw7CisJbG93X2JpdHMgPSAocmVncy0+cGh5c19hZGRyICYgMHhmZmZmZmZmZlVMKTsKKworCWlmICh0eXBlID09IDAgfHwgdHlwZSA9PSA4KSB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9ICh0eXBlID09IDApID8gIm0iIDogImkiOworCisJCWlmIChsb3dfYml0cykKKwkJCXNwcmludGYodG1wX2J1ZiwgIiVzQCVzJXgsJXgiLAorCQkJCWRwLT5uYW1lLCBwcmVmaXgsCisJCQkJaGlnaF9iaXRzLCBsb3dfYml0cyk7CisJCWVsc2UKKwkJCXNwcmludGYodG1wX2J1ZiwgIiVzQCVzJXgiLAorCQkJCWRwLT5uYW1lLAorCQkJCXByZWZpeCwKKwkJCQloaWdoX2JpdHMpOworCX0gZWxzZSBpZiAodHlwZSA9PSAxMikgeworCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCIsCisJCQlkcC0+bmFtZSwgaGlnaF9iaXRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzdW40dV9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQoreworCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisKKwlyZWdzID0gcHJvcC0+dmFsdWU7CisJaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQkJZHAtPm5hbWUsCisJCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyID4+IDMyVUwpLAorCQkJKHVuc2lnbmVkIGludCkgKHJlZ3MtPnBoeXNfYWRkciAmIDB4ZmZmZmZmZmZVTCkpOworCQlyZXR1cm47CisJfQorCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJ1cGEtcG9ydGlkIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInBvcnRpZCIsIE5VTEwpOworCWlmIChwcm9wKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworCQlpZiAodGxiX3R5cGUgPj0gY2hlZXRhaCkKKwkJCW1hc2sgPSAweDdmZmZmZjsKKworCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCwleCIsCisJCQlkcC0+bmFtZSwKKwkJCSoodTMyICopcHJvcC0+dmFsdWUsCisJCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyICYgbWFzaykpOworCX0KK30KKworLyogIm5hbWVAc2xvdCxvZmZzZXQiICAqLworc3RhdGljIHZvaWQgX19pbml0IHNidXNfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKwlzcHJpbnRmKHRtcF9idWYsICIlc0AleCwleCIsCisJCWRwLT5uYW1lLAorCQlyZWdzLT53aGljaF9pbywKKwkJcmVncy0+cGh5c19hZGRyKTsKK30KKworLyogIm5hbWVAZGV2bnVtWyxmdW5jXSIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwY2lfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzICpyZWdzOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwl1bnNpZ25lZCBpbnQgZGV2Zm47CisKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCisJcmVncyA9IHByb3AtPnZhbHVlOworCWRldmZuID0gKHJlZ3MtPnBoeXNfaGkgPj4gOCkgJiAweGZmOworCWlmIChkZXZmbiAmIDB4MDcpIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQkJZHAtPm5hbWUsCisJCQlkZXZmbiA+PiAzLAorCQkJZGV2Zm4gJiAweDA3KTsKKwl9IGVsc2UgeworCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCIsCisJCQlkcC0+bmFtZSwKKwkJCWRldmZuID4+IDMpOworCX0KK30KKworLyogIm5hbWVAVVBBX1BPUlRJRCxvZmZzZXQiICovCitzdGF0aWMgdm9pZCBfX2luaXQgdXBhX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAidXBhLXBvcnRpZCIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCisJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQlkcC0+bmFtZSwKKwkJKih1MzIgKikgcHJvcC0+dmFsdWUsCisJCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgJiAweGZmZmZmZmZmVUwpKTsKK30KKworLyogIm5hbWVAcmVnIiAqLworc3RhdGljIHZvaWQgX19pbml0IHZkZXZfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJdTMyICpyZWdzOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKworCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4IiwgZHAtPm5hbWUsICpyZWdzKTsKK30KKworLyogIm5hbWVAYWRkcmhpLGFkZHJsbyIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBlYnVzX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKworCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKKwkJZHAtPm5hbWUsCisJCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCksCisJCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgJiAweGZmZmZmZmZmVUwpKTsKK30KKworLyogIm5hbWVAYnVzLGFkZHIiICovCitzdGF0aWMgdm9pZCBfX2luaXQgaTJjX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXUzMiAqcmVnczsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisKKwlyZWdzID0gcHJvcC0+dmFsdWU7CisKKwkvKiBUaGlzIGFjdHVhbGx5IGlzbid0IHJpZ2h0Li4uIHNob3VsZCBsb29rIGF0IHRoZSAjYWRkcmVzcy1jZWxscworCSAqIHByb3BlcnR5IG9mIHRoZSBpMmMgYnVzIG5vZGUgZXRjLiBldGMuCisJICovCisJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAorCQlkcC0+bmFtZSwgcmVnc1swXSwgcmVnc1sxXSk7Cit9CisKKy8qICJuYW1lQHJlZzBbLHJlZzFdIiAqLworc3RhdGljIHZvaWQgX19pbml0IHVzYl9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwl1MzIgKnJlZ3M7CisKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCisJcmVncyA9IHByb3AtPnZhbHVlOworCisJaWYgKHByb3AtPmxlbmd0aCA9PSBzaXplb2YodTMyKSB8fCByZWdzWzFdID09IDEpIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgiLAorCQkJZHAtPm5hbWUsIHJlZ3NbMF0pOworCX0gZWxzZSB7CisJCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKKwkJCWRwLT5uYW1lLCByZWdzWzBdLCByZWdzWzFdKTsKKwl9Cit9CisKKy8qICJuYW1lQHJlZzByZWcxWyxyZWcycmVnM10iICovCitzdGF0aWMgdm9pZCBfX2luaXQgaWVlZTEzOTRfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJdTMyICpyZWdzOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKworCXJlZ3MgPSBwcm9wLT52YWx1ZTsKKworCWlmIChyZWdzWzJdIHx8IHJlZ3NbM10pIHsKKwkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJTA4eCUwOHgsJTA0eCUwOHgiLAorCQkJZHAtPm5hbWUsIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3NbMl0sIHJlZ3NbM10pOworCX0gZWxzZSB7CisJCXNwcmludGYodG1wX2J1ZiwgIiVzQCUwOHglMDh4IiwKKwkJCWRwLT5uYW1lLCByZWdzWzBdLCByZWdzWzFdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2J1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBkcC0+cGFyZW50OworCisJaWYgKHBhcmVudCAhPSBOVUxMKSB7CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaSIpIHx8CisJCSAgICAhc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaWV4IikpIHsKKwkJCXBjaV9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCFzdHJjbXAocGFyZW50LT50eXBlLCAic2J1cyIpKSB7CisJCQlzYnVzX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJ1cGEiKSkgeworCQkJdXBhX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJlYnVzIikpIHsKKwkJCWVidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghc3RyY21wKHBhcmVudC0+bmFtZSwgInVzYiIpIHx8CisJCSAgICAhc3RyY21wKHBhcmVudC0+bmFtZSwgImh1YiIpKSB7CisJCQl1c2JfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgImkyYyIpKSB7CisJCQlpMmNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgImZpcmV3aXJlIikpIHsKKwkJCWllZWUxMzk0X3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJ2aXJ0dWFsLWRldmljZXMiKSkgeworCQkJdmRldl9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogImlzYSIgaXMgaGFuZGxlZCB3aXRoIHBsYXRmb3JtIG5hbWluZyAqLworCX0KKworCS8qIFVzZSBwbGF0Zm9ybSBuYW1pbmcgY29udmVudGlvbi4gICovCisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJc3VuNHZfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJc3VuNHVfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCX0KK30KKworY2hhciAqIF9faW5pdCBidWlsZF9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCWNoYXIgdG1wX2J1Zls2NF0sICpuOworCisJdG1wX2J1ZlswXSA9ICdcMCc7CisJX19idWlsZF9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CisJaWYgKHRtcF9idWZbMF0gPT0gJ1wwJykKKwkJc3RyY3B5KHRtcF9idWYsIGRwLT5uYW1lKTsKKworCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKHN0cmxlbih0bXBfYnVmKSArIDEpOworCXN0cmNweShuLCB0bXBfYnVmKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21pZF9wcm9wKHZvaWQpCit7CisJcmV0dXJuICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSA/ICJ1cGEtcG9ydGlkIiA6ICJwb3J0aWQiKTsKK30KKworc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfY3B1aWQoaW50IGNwdWlkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisJY29uc3QgY2hhciAqbWlkX3Byb3AgPSBnZXRfbWlkX3Byb3AoKTsKKworCWZvcl9lYWNoX25vZGVfYnlfdHlwZShkcCwgImNwdSIpIHsKKwkJaW50IGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCBtaWRfcHJvcCwgLTEpOworCQljb25zdCBjaGFyICp0aGlzX21pZF9wcm9wID0gbWlkX3Byb3A7CisKKwkJaWYgKGlkIDwgMCkgeworCQkJdGhpc19taWRfcHJvcCA9ICJjcHVpZCI7CisJCQlpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgdGhpc19taWRfcHJvcCwgLTEpOworCQl9CisKKwkJaWYgKGlkIDwgMCkgeworCQkJcHJvbV9wcmludGYoIk9GOiBTZXJpb3VzIHByb2JsZW0sIGNwdSBsYWNrcyAiCisJCQkJICAgICIlcyBwcm9wZXJ0eSIsIHRoaXNfbWlkX3Byb3ApOworCQkJcHJvbV9oYWx0KCk7CisJCX0KKwkJaWYgKGNwdWlkID09IGlkKQorCQkJcmV0dXJuIGRwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX2luaXQgb2ZfZmlsbF9pbl9jcHVfZGF0YSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisJY29uc3QgY2hhciAqbWlkX3Byb3A7CisKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCisJbWlkX3Byb3AgPSBnZXRfbWlkX3Byb3AoKTsKKwluY3B1c19wcm9iZWQgPSAwOworCWZvcl9lYWNoX25vZGVfYnlfdHlwZShkcCwgImNwdSIpIHsKKwkJaW50IGNwdWlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCBtaWRfcHJvcCwgLTEpOworCQljb25zdCBjaGFyICp0aGlzX21pZF9wcm9wID0gbWlkX3Byb3A7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydGlkX3BhcmVudDsKKwkJaW50IHBvcnRpZCA9IC0xOworCisJCXBvcnRpZF9wYXJlbnQgPSBOVUxMOworCQlpZiAoY3B1aWQgPCAwKSB7CisJCQl0aGlzX21pZF9wcm9wID0gImNwdWlkIjsKKwkJCWNwdWlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCB0aGlzX21pZF9wcm9wLCAtMSk7CisJCQlpZiAoY3B1aWQgPj0gMCkgeworCQkJCWludCBsaW1pdCA9IDI7CisKKwkJCQlwb3J0aWRfcGFyZW50ID0gZHA7CisJCQkJd2hpbGUgKGxpbWl0LS0pIHsKKwkJCQkJcG9ydGlkX3BhcmVudCA9IHBvcnRpZF9wYXJlbnQtPnBhcmVudDsKKwkJCQkJaWYgKCFwb3J0aWRfcGFyZW50KQorCQkJCQkJYnJlYWs7CisJCQkJCXBvcnRpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChwb3J0aWRfcGFyZW50LAorCQkJCQkJCQkgICAgICAgInBvcnRpZCIsIC0xKTsKKwkJCQkJaWYgKHBvcnRpZCA+PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGNwdWlkIDwgMCkgeworCQkJcHJvbV9wcmludGYoIk9GOiBTZXJpb3VzIHByb2JsZW0sIGNwdSBsYWNrcyAiCisJCQkJICAgICIlcyBwcm9wZXJ0eSIsIHRoaXNfbWlkX3Byb3ApOworCQkJcHJvbV9oYWx0KCk7CisJCX0KKworCQluY3B1c19wcm9iZWQrKzsKKworI2lmZGVmIENPTkZJR19TTVAKKwkJaWYgKGNwdWlkID49IE5SX0NQVVMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklnbm9yaW5nIENQVSAlZCB3aGljaCBpcyAiCisJCQkgICAgICAgIj49IE5SX0NQVVMgKCVkKVxuIiwKKwkJCSAgICAgICBjcHVpZCwgTlJfQ1BVUyk7CisJCQljb250aW51ZTsKKwkJfQorI2Vsc2UKKwkJLyogT24gdW5pcHJvY2Vzc29yIHdlIG9ubHkgd2FudCB0aGUgdmFsdWVzIGZvciB0aGUKKwkJICogcmVhbCBwaHlzaWNhbCBjcHUgdGhlIGtlcm5lbCBib290ZWQgb250bywgaG93ZXZlcgorCQkgKiBjcHVfZGF0YSgpIG9ubHkgaGFzIG9uZSBlbnRyeSBhdCBpbmRleCAwLgorCQkgKi8KKwkJaWYgKGNwdWlkICE9IHJlYWxfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpCisJCQljb250aW51ZTsKKwkJY3B1aWQgPSAwOworI2VuZGlmCisKKwkJY3B1X2RhdGEoY3B1aWQpLmNsb2NrX3RpY2sgPQorCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiY2xvY2stZnJlcXVlbmN5IiwgMCk7CisKKwkJaWYgKHBvcnRpZF9wYXJlbnQpIHsKKwkJCWNwdV9kYXRhKGNwdWlkKS5kY2FjaGVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibDEtZGNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgMTYgKiAxMDI0KTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5kY2FjaGVfbGluZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMS1kY2FjaGUtbGluZS1zaXplIiwKKwkJCQkJCSAgICAgIDMyKTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5pY2FjaGVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibDEtaWNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgOCAqIDEwMjQpOworCQkJY3B1X2RhdGEoY3B1aWQpLmljYWNoZV9saW5lX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImwxLWljYWNoZS1saW5lLXNpemUiLAorCQkJCQkJICAgICAgMzIpOworCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMi1jYWNoZS1zaXplIiwgMCk7CisJCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX2xpbmVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibDItY2FjaGUtbGluZS1zaXplIiwgMCk7CisJCQlpZiAoIWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfc2l6ZSB8fAorCQkJICAgICFjcHVfZGF0YShjcHVpZCkuZWNhY2hlX2xpbmVfc2l6ZSkgeworCQkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfc2l6ZSA9CisJCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChwb3J0aWRfcGFyZW50LAorCQkJCQkJCSAgICAgICJsMi1jYWNoZS1zaXplIiwKKwkJCQkJCQkgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CisJCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9saW5lX3NpemUgPQorCQkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQocG9ydGlkX3BhcmVudCwKKwkJCQkJCQkgICAgICAibDItY2FjaGUtbGluZS1zaXplIiwgNjQpOworCQkJfQorCisJCQljcHVfZGF0YShjcHVpZCkuY29yZV9pZCA9IHBvcnRpZCArIDE7CisJCQljcHVfZGF0YShjcHVpZCkucHJvY19pZCA9IHBvcnRpZDsKKyNpZmRlZiBDT05GSUdfU01QCisJCQlzcGFyYzY0X211bHRpX2NvcmUgPSAxOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQljcHVfZGF0YShjcHVpZCkuZGNhY2hlX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImRjYWNoZS1zaXplIiwgMTYgKiAxMDI0KTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5kY2FjaGVfbGluZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJkY2FjaGUtbGluZS1zaXplIiwgMzIpOworCisJCQljcHVfZGF0YShjcHVpZCkuaWNhY2hlX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImljYWNoZS1zaXplIiwgMTYgKiAxMDI0KTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5pY2FjaGVfbGluZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJpY2FjaGUtbGluZS1zaXplIiwgMzIpOworCisJCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImVjYWNoZS1zaXplIiwKKwkJCQkJCSAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfbGluZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJlY2FjaGUtbGluZS1zaXplIiwgNjQpOworCisJCQljcHVfZGF0YShjcHVpZCkuY29yZV9pZCA9IDA7CisJCQljcHVfZGF0YShjcHVpZCkucHJvY19pZCA9IC0xOworCQl9CisKKyNpZmRlZiBDT05GSUdfU01QCisJCWNwdV9zZXQoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7CisJCWNwdV9zZXQoY3B1aWQsIGNwdV9wb3NzaWJsZV9tYXApOworI2VuZGlmCisJfQorCisJc21wX2ZpbGxfaW5fc2liX2NvcmVfbWFwcygpOworfQorCit2b2lkIF9faW5pdCBvZl9jb25zb2xlX2luaXQodm9pZCkKK3sKKwljaGFyICptc2cgPSAiT0Ygc3Rkb3V0IGRldmljZSBpczogJXNcbiI7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKwljb25zdCBjaGFyICp0eXBlOworCXBoYW5kbGUgbm9kZTsKKworCW9mX2NvbnNvbGVfcGF0aCA9IHByb21fZWFybHlfYWxsb2MoMjU2KTsKKwlpZiAocHJvbV9paGFuZGxlMnBhdGgocHJvbV9zdGRvdXQsIG9mX2NvbnNvbGVfcGF0aCwgMjU2KSA8IDApIHsKKwkJcHJvbV9wcmludGYoIkNhbm5vdCBvYnRhaW4gcGF0aCBvZiBzdGRvdXQuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCW9mX2NvbnNvbGVfb3B0aW9ucyA9IHN0cnJjaHIob2ZfY29uc29sZV9wYXRoLCAnOicpOworCWlmIChvZl9jb25zb2xlX29wdGlvbnMpIHsKKwkJb2ZfY29uc29sZV9vcHRpb25zKys7CisJCWlmICgqb2ZfY29uc29sZV9vcHRpb25zID09ICdcMCcpCisJCQlvZl9jb25zb2xlX29wdGlvbnMgPSBOVUxMOworCX0KKworCW5vZGUgPSBwcm9tX2luc3QycGtnKHByb21fc3Rkb3V0KTsKKwlpZiAoIW5vZGUpIHsKKwkJcHJvbV9wcmludGYoIkNhbm5vdCByZXNvbHZlIHN0ZG91dCBub2RlIGZyb20gIgorCQkJICAgICJpbnN0YW5jZSAlMDh4LlxuIiwgcHJvbV9zdGRvdXQpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlkcCA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKG5vZGUpOworCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOworCWlmICghdHlwZSkgeworCQlwcm9tX3ByaW50ZigiQ29uc29sZSBzdGRvdXQgbGFja3MgZGV2aWNlX3R5cGUgcHJvcGVydHkuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJaWYgKHN0cmNtcCh0eXBlLCAiZGlzcGxheSIpICYmIHN0cmNtcCh0eXBlLCAic2VyaWFsIikpIHsKKwkJcHJvbV9wcmludGYoIkNvbnNvbGUgZGV2aWNlX3R5cGUgaXMgbmVpdGhlciBkaXNwbGF5ICIKKwkJCSAgICAibm9yIHNlcmlhbC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlvZl9jb25zb2xlX2RldmljZSA9IGRwOworCisJcHJpbnRrKG1zZywgb2ZfY29uc29sZV9wYXRoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWFmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC0wLDAgKzEsMzI2IEBACisvKiBwcm9tX2NvbW1vbi5jOiBPRiBkZXZpY2UgdHJlZSBzdXBwb3J0IGNvbW1vbiBjb2RlLgorICoKKyAqIFBhdWwgTWFja2VycmFzCUF1Z3VzdCAxOTk2LgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCisgKgorICogIEFkYXB0ZWQgZm9yIDY0Yml0IFBvd2VyUEMgYnkgRGF2ZSBFbmdlYnJldHNlbiBhbmQgUGV0ZXIgQmVyZ25lci4KKyAqICAgIHtlbmdlYnJldHxiZXJnbmVyfUB1cy5pYm0uY29tCisgKgorICogIEFkYXB0ZWQgZm9yIHNwYXJjIGJ5IERhdmlkIFMuIE1pbGxlciBkYXZlbUBkYXZlbWxvZnQubmV0CisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworI2luY2x1ZGUgInByb20uaCIKKworc3RydWN0IGRldmljZV9ub2RlICpvZl9jb25zb2xlX2RldmljZTsKK0VYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9kZXZpY2UpOworCitjaGFyICpvZl9jb25zb2xlX3BhdGg7CitFWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfcGF0aCk7CisKK2NoYXIgKm9mX2NvbnNvbGVfb3B0aW9uczsKK0VYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9vcHRpb25zKTsKKworc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yIChucCA9IGFsbG5vZGVzOyBucDsgbnAgPSBucC0+YWxsbmV4dCkKKwkJaWYgKG5wLT5ub2RlID09IGhhbmRsZSkKKwkJCWJyZWFrOworCisJcmV0dXJuIG5wOworfQorRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7CisKK2ludCBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGRlZikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IGxlbjsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBuYW1lLCAmbGVuKTsKKwlpZiAoIXByb3AgfHwgbGVuICE9IDQpCisJCXJldHVybiBkZWY7CisKKwlyZXR1cm4gKihpbnQgKikgcHJvcC0+dmFsdWU7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldGludHByb3BfZGVmYXVsdCk7CisKK0RFRklORV9NVVRFWChvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOworRVhQT1JUX1NZTUJPTChvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOworCitpbnQgb2Zfc2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbCwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipwcmV2cDsKKwl2b2lkICpuZXdfdmFsOworCWludCBlcnI7CisKKwluZXdfdmFsID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghbmV3X3ZhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkobmV3X3ZhbCwgdmFsLCBsZW4pOworCisJZXJyID0gLUVOT0RFVjsKKworCXdyaXRlX2xvY2soJmRldnRyZWVfbG9jayk7CisJcHJldnAgPSAmZHAtPnByb3BlcnRpZXM7CisJd2hpbGUgKCpwcmV2cCkgeworCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSAqcHJldnA7CisKKwkJaWYgKCFzdHJjYXNlY21wKHByb3AtPm5hbWUsIG5hbWUpKSB7CisJCQl2b2lkICpvbGRfdmFsID0gcHJvcC0+dmFsdWU7CisJCQlpbnQgcmV0OworCisJCQltdXRleF9sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOworCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCBuYW1lLCB2YWwsIGxlbik7CisJCQltdXRleF91bmxvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CisKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlwcm9wLT52YWx1ZSA9IG5ld192YWw7CisJCQkJcHJvcC0+bGVuZ3RoID0gbGVuOworCisJCQkJaWYgKE9GX0lTX0RZTkFNSUMocHJvcCkpCisJCQkJCWtmcmVlKG9sZF92YWwpOworCisJCQkJT0ZfTUFSS19EWU5BTUlDKHByb3ApOworCisJCQkJZXJyID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXByZXZwID0gJigqcHJldnApLT5uZXh0OworCX0KKwl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisKKwkvKiBYWFggVXBhdGUgcHJvY2ZzIGlmIG5lY2Vzc2FyeS4uLiAqLworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wob2Zfc2V0X3Byb3BlcnR5KTsKKworaW50IG9mX2ZpbmRfaW5fcHJvcGxpc3QoY29uc3QgY2hhciAqbGlzdCwgY29uc3QgY2hhciAqbWF0Y2gsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaW50IGw7CisKKwkJaWYgKCFzdHJjbXAobGlzdCwgbWF0Y2gpKQorCQkJcmV0dXJuIDE7CisJCWwgPSBzdHJsZW4obGlzdCkgKyAxOworCQlsaXN0ICs9IGw7CisJCWxlbiAtPSBsOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9pbl9wcm9wbGlzdCk7CisKK3Vuc2lnbmVkIGludCBwcm9tX3VuaXF1ZV9pZDsKKworc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqIF9faW5pdCBidWlsZF9vbmVfcHJvcChwaGFuZGxlIG5vZGUsIGNoYXIgKnByZXYsCisJCQkJCSAgICAgICBjaGFyICpzcGVjaWFsX25hbWUsCisJCQkJCSAgICAgICB2b2lkICpzcGVjaWFsX3ZhbCwKKwkJCQkJICAgICAgIGludCBzcGVjaWFsX2xlbikKK3sKKwlzdGF0aWMgc3RydWN0IHByb3BlcnR5ICp0bXAgPSBOVUxMOworCXN0cnVjdCBwcm9wZXJ0eSAqcDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKHRtcCkgeworCQlwID0gdG1wOworCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSArIDMyKTsKKwkJdG1wID0gTlVMTDsKKwl9IGVsc2UgeworCQlwID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIDMyKTsKKwkJcC0+dW5pcXVlX2lkID0gcHJvbV91bmlxdWVfaWQrKzsKKwl9CisKKwlwLT5uYW1lID0gKGNoYXIgKikgKHAgKyAxKTsKKwlpZiAoc3BlY2lhbF9uYW1lKSB7CisJCXN0cmNweShwLT5uYW1lLCBzcGVjaWFsX25hbWUpOworCQlwLT5sZW5ndGggPSBzcGVjaWFsX2xlbjsKKwkJcC0+dmFsdWUgPSBwcm9tX2Vhcmx5X2FsbG9jKHNwZWNpYWxfbGVuKTsKKwkJbWVtY3B5KHAtPnZhbHVlLCBzcGVjaWFsX3ZhbCwgc3BlY2lhbF9sZW4pOworCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX1NQQVJDMzIKKwkJaWYgKHByZXYgPT0gTlVMTCkgeworCQkJbmFtZSA9IHByb21fZmlyc3Rwcm9wKG5vZGUsIE5VTEwpOworCQl9IGVsc2UgeworCQkJbmFtZSA9IHByb21fbmV4dHByb3Aobm9kZSwgcHJldiwgTlVMTCk7CisJCX0KKyNlbHNlCisJCWlmIChwcmV2ID09IE5VTEwpIHsKKwkJCXByb21fZmlyc3Rwcm9wKG5vZGUsIHAtPm5hbWUpOworCQl9IGVsc2UgeworCQkJcHJvbV9uZXh0cHJvcChub2RlLCBwcmV2LCBwLT5uYW1lKTsKKwkJfQorCQluYW1lID0gcC0+bmFtZTsKKyNlbmRpZgorCQlpZiAoc3RybGVuKG5hbWUpID09IDApIHsKKwkJCXRtcCA9IHA7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorI2lmZGVmIENPTkZJR19TUEFSQzMyCisJCXN0cmNweShwLT5uYW1lLCBuYW1lKTsKKyNlbmRpZgorCQlwLT5sZW5ndGggPSBwcm9tX2dldHByb3BsZW4obm9kZSwgcC0+bmFtZSk7CisJCWlmIChwLT5sZW5ndGggPD0gMCkgeworCQkJcC0+bGVuZ3RoID0gMDsKKwkJfSBlbHNlIHsKKwkJCWludCBsZW47CisKKwkJCXAtPnZhbHVlID0gcHJvbV9lYXJseV9hbGxvYyhwLT5sZW5ndGggKyAxKTsKKwkJCWxlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgcC0+bmFtZSwgcC0+dmFsdWUsCisJCQkJCSAgICAgICBwLT5sZW5ndGgpOworCQkJaWYgKGxlbiA8PSAwKQorCQkJCXAtPmxlbmd0aCA9IDA7CisJCQkoKHVuc2lnbmVkIGNoYXIgKilwLT52YWx1ZSlbcC0+bGVuZ3RoXSA9ICdcMCc7CisJCX0KKwl9CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKiBfX2luaXQgYnVpbGRfcHJvcF9saXN0KHBoYW5kbGUgbm9kZSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKmhlYWQsICp0YWlsOworCisJaGVhZCA9IHRhaWwgPSBidWlsZF9vbmVfcHJvcChub2RlLCBOVUxMLAorCQkJCSAgICAgIi5ub2RlIiwgJm5vZGUsIHNpemVvZihub2RlKSk7CisKKwl0YWlsLT5uZXh0ID0gYnVpbGRfb25lX3Byb3Aobm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7CisJdGFpbCA9IHRhaWwtPm5leHQ7CisJd2hpbGUodGFpbCkgeworCQl0YWlsLT5uZXh0ID0gYnVpbGRfb25lX3Byb3Aobm9kZSwgdGFpbC0+bmFtZSwKKwkJCQkJICAgIE5VTEwsIE5VTEwsIDApOworCQl0YWlsID0gdGFpbC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIGNoYXIgKiBfX2luaXQgZ2V0X29uZV9wcm9wZXJ0eShwaGFuZGxlIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqYnVmID0gIjxOVUxMPiI7CisJaW50IGxlbjsKKworCWxlbiA9IHByb21fZ2V0cHJvcGxlbihub2RlLCBuYW1lKTsKKwlpZiAobGVuID4gMCkgeworCQlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7CisJCWxlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgbmFtZSwgYnVmLCBsZW4pOworCX0KKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgcHJvbV9jcmVhdGVfbm9kZShwaGFuZGxlIG5vZGUsCisJCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKworCWlmICghbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkcCA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKCpkcCkpOworCWRwLT51bmlxdWVfaWQgPSBwcm9tX3VuaXF1ZV9pZCsrOworCWRwLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwlrcmVmX2luaXQoJmRwLT5rcmVmKTsKKworCWRwLT5uYW1lID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOworCWRwLT50eXBlID0gZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAiZGV2aWNlX3R5cGUiKTsKKwlkcC0+bm9kZSA9IG5vZGU7CisKKwlkcC0+cHJvcGVydGllcyA9IGJ1aWxkX3Byb3BfbGlzdChub2RlKTsKKworCWlycV90cmFuc19pbml0KGRwKTsKKworCXJldHVybiBkcDsKK30KKworc3RhdGljIGNoYXIgKiBfX2luaXQgYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJaW50IGxlbiwgb3VybGVuLCBwbGVuOworCWNoYXIgKm47CisKKwlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7CisJb3VybGVuID0gc3RybGVuKGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKKwlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKKworCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7CisJc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7CisJaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKKwkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOworCQlwbGVuKys7CisJfQorCXN0cmNweShuICsgcGxlbiwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgcHJvbV9idWlsZF90cmVlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAorCQkJCQkJICAgcGhhbmRsZSBub2RlLAorCQkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmV0ID0gTlVMTCwgKnByZXZfc2libGluZyA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKworCXdoaWxlICgxKSB7CisJCWRwID0gcHJvbV9jcmVhdGVfbm9kZShub2RlLCBwYXJlbnQpOworCQlpZiAoIWRwKQorCQkJYnJlYWs7CisKKwkJaWYgKHByZXZfc2libGluZykKKwkJCXByZXZfc2libGluZy0+c2libGluZyA9IGRwOworCisJCWlmICghcmV0KQorCQkJcmV0ID0gZHA7CisJCXByZXZfc2libGluZyA9IGRwOworCisJCSooKm5leHRwKSA9IGRwOworCQkqbmV4dHAgPSAmZHAtPmFsbG5leHQ7CisKKwkJZHAtPnBhdGhfY29tcG9uZW50X25hbWUgPSBidWlsZF9wYXRoX2NvbXBvbmVudChkcCk7CisJCWRwLT5mdWxsX25hbWUgPSBidWlsZF9mdWxsX25hbWUoZHApOworCisJCWRwLT5jaGlsZCA9IHByb21fYnVpbGRfdHJlZShkcCwgcHJvbV9nZXRjaGlsZChub2RlKSwgbmV4dHApOworCisJCW5vZGUgPSBwcm9tX2dldHNpYmxpbmcobm9kZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgaW50IHByb21fZWFybHlfYWxsb2NhdGVkIF9faW5pdGRhdGE7CisKK3ZvaWQgX19pbml0IHByb21fYnVpbGRfZGV2aWNldHJlZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKm5leHRwOworCisJYWxsbm9kZXMgPSBwcm9tX2NyZWF0ZV9ub2RlKHByb21fcm9vdF9ub2RlLCBOVUxMKTsKKwlhbGxub2Rlcy0+cGF0aF9jb21wb25lbnRfbmFtZSA9ICIiOworCWFsbG5vZGVzLT5mdWxsX25hbWUgPSAiLyI7CisKKwluZXh0cCA9ICZhbGxub2Rlcy0+YWxsbmV4dDsKKwlhbGxub2Rlcy0+Y2hpbGQgPSBwcm9tX2J1aWxkX3RyZWUoYWxsbm9kZXMsCisJCQkJCSAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+bm9kZSksCisJCQkJCSAgJm5leHRwKTsKKwlvZl9jb25zb2xlX2luaXQoKTsKKworCXByaW50aygiUFJPTTogQnVpbHQgZGV2aWNlIHRyZWUgd2l0aCAldSBieXRlcyBvZiBtZW1vcnkuXG4iLAorCSAgICAgICBwcm9tX2Vhcmx5X2FsbG9jYXRlZCk7CisKKwlvZl9maWxsX2luX2NwdV9kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5NThjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYwpAQCAtMCwwICsxLDg0MiBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdXBhLmg+CisKKyNpbmNsdWRlICJwcm9tLmgiCisKKyNpZmRlZiBDT05GSUdfUENJCisvKiBQU1lDSE8gaW50ZXJydXB0IG1hcHBpbmcgc3VwcG9ydC4gKi8KKyNkZWZpbmUgUFNZQ0hPX0lNQVBfQV9TTE9UMAkweDBjMDBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9CX1NMT1QwCTB4MGMyMFVMCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwc3ljaG9fcGNpc2xvdF9pbWFwX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKK3sKKwl1bnNpZ25lZCBpbnQgYnVzID0gIChpbm8gJiAweDEwKSA+PiA0OworCXVuc2lnbmVkIGludCBzbG90ID0gKGlubyAmIDB4MGMpID4+IDI7CisKKwlpZiAoYnVzID09IDApCisJCXJldHVybiBQU1lDSE9fSU1BUF9BX1NMT1QwICsgKHNsb3QgKiA4KTsKKwllbHNlCisJCXJldHVybiBQU1lDSE9fSU1BUF9CX1NMT1QwICsgKHNsb3QgKiA4KTsKK30KKworI2RlZmluZSBQU1lDSE9fT0JJT19JTUFQX0JBU0UJMHgxMDAwVUwKKworI2RlZmluZSBQU1lDSE9fT05CT0FSRF9JUlFfQkFTRQkJMHgyMAorI2RlZmluZSBwc3ljaG9fb25ib2FyZF9pbWFwX29mZnNldChfX2lubykgXAorCShQU1lDSE9fT0JJT19JTUFQX0JBU0UgKyAoKChfX2lubykgJiAweDFmKSA8PCAzKSkKKworI2RlZmluZSBQU1lDSE9fSUNMUl9BX1NMT1QwCTB4MTQwMFVMCisjZGVmaW5lIFBTWUNIT19JQ0xSX1NDU0kJMHgxODAwVUwKKworI2RlZmluZSBwc3ljaG9faWNscl9vZmZzZXQoaW5vKQkJCQkJICAgICAgXAorCSgoaW5vICYgMHgyMCkgPyAoUFNZQ0hPX0lDTFJfU0NTSSArICgoKGlubykgJiAweDFmKSA8PCAzKSkgOiAgXAorCQkJKFBTWUNIT19JQ0xSX0FfU0xPVDAgKyAoKChpbm8pICYgMHgxZik8PDMpKSkKKworc3RhdGljIHVuc2lnbmVkIGludCBwc3ljaG9faXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5vLAorCQkJCSAgICAgdm9pZCAqX2RhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjb250cm9sbGVyX3JlZ3MgPSAodW5zaWduZWQgbG9uZykgX2RhdGE7CisJdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOworCXVuc2lnbmVkIGxvbmcgaW1hcF9vZmYsIGljbHJfb2ZmOworCWludCBpbm9maXh1cCA9IDA7CisKKwlpbm8gJj0gMHgzZjsKKwlpZiAoaW5vIDwgUFNZQ0hPX09OQk9BUkRfSVJRX0JBU0UpIHsKKwkJLyogUENJIHNsb3QgKi8KKwkJaW1hcF9vZmYgPSBwc3ljaG9fcGNpc2xvdF9pbWFwX29mZnNldChpbm8pOworCX0gZWxzZSB7CisJCS8qIE9uYm9hcmQgZGV2aWNlICovCisJCWltYXBfb2ZmID0gcHN5Y2hvX29uYm9hcmRfaW1hcF9vZmZzZXQoaW5vKTsKKwl9CisKKwkvKiBOb3cgYnVpbGQgdGhlIElSUSBidWNrZXQuICovCisJaW1hcCA9IGNvbnRyb2xsZXJfcmVncyArIGltYXBfb2ZmOworCisJaWNscl9vZmYgPSBwc3ljaG9faWNscl9vZmZzZXQoaW5vKTsKKwlpY2xyID0gY29udHJvbGxlcl9yZWdzICsgaWNscl9vZmY7CisKKwlpZiAoKGlubyAmIDB4MjApID09IDApCisJCWlub2ZpeHVwID0gaW5vICYgMHgwMzsKKworCXJldHVybiBidWlsZF9pcnEoaW5vZml4dXAsIGljbHIsIGltYXApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHN5Y2hvX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gcHN5Y2hvX2lycV9idWlsZDsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlkcC0+aXJxX3RyYW5zLT5kYXRhID0gKHZvaWQgKikgcmVnc1syXS5waHlzX2FkZHI7Cit9CisKKyNkZWZpbmUgc2FicmVfcmVhZChfX3JlZykgXAorKHsJdTY0IF9fcmV0OyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUxXSAlMiwgJTAiIFwKKwkJCSAgICAgOiAiPXIiIChfX3JldCkgXAorCQkJICAgICA6ICJyIiAoX19yZWcpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSBcCisJCQkgICAgIDogIm1lbW9yeSIpOyBcCisJX19yZXQ7IFwKK30pCisKK3N0cnVjdCBzYWJyZV9pcnFfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBjb250cm9sbGVyX3JlZ3M7CisJdW5zaWduZWQgaW50IHBjaV9maXJzdF9idXNubzsKK307CisjZGVmaW5lIFNBQlJFX0NPTkZJR1NQQUNFCTB4MDAxMDAwMDAwVUwKKyNkZWZpbmUgU0FCUkVfV1JTWU5DCQkweDFjMjBVTAorCisjZGVmaW5lIFNBQlJFX0NPTkZJR19CQVNFKENPTkZJR19TUEFDRSkJXAorCShDT05GSUdfU1BBQ0UgfCAoMVVMIDw8IDI0KSkKKyNkZWZpbmUgU0FCUkVfQ09ORklHX0VOQ09ERShCVVMsIERFVkZOLCBSRUcpCVwKKwkoKCh1bnNpZ25lZCBsb25nKShCVVMpICAgPDwgMTYpIHwJXAorCSAoKHVuc2lnbmVkIGxvbmcpKERFVkZOKSA8PCA4KSAgfAlcCisJICgodW5zaWduZWQgbG9uZykoUkVHKSkpCisKKy8qIFdoZW4gYSBkZXZpY2UgbGl2ZXMgYmVoaW5kIGEgYnJpZGdlIGRlZXBlciBpbiB0aGUgUENJIGJ1cyB0b3BvbG9neQorICogdGhhbiBBUEIsIGEgc3BlY2lhbCBzZXF1ZW5jZSBtdXN0IHJ1biB0byBtYWtlIHN1cmUgYWxsIHBlbmRpbmcgRE1BCisgKiB0cmFuc2ZlcnMgYXQgdGhlIHRpbWUgb2YgSVJRIGRlbGl2ZXJ5IGFyZSB2aXNpYmxlIGluIHRoZSBjb2hlcmVuY3kKKyAqIGRvbWFpbiBieSB0aGUgY3B1LiAgVGhpcyBzZXF1ZW5jZSBpcyB0byBwZXJmb3JtIGEgcmVhZCBvbiB0aGUgZmFyCisgKiBzaWRlIG9mIHRoZSBub24tQVBCIGJyaWRnZSwgdGhlbiBwZXJmb3JtIGEgcmVhZCBvZiBTYWJyZSdzIERNQQorICogd3JpdGUtc3luYyByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgc2FicmVfd3N5bmNfaGFuZGxlcih1bnNpZ25lZCBpbnQgaW5vLCB2b2lkICpfYXJnMSwgdm9pZCAqX2FyZzIpCit7CisJdW5zaWduZWQgaW50IHBoeXNfaGkgPSAodW5zaWduZWQgaW50KSAodW5zaWduZWQgbG9uZykgX2FyZzE7CisJc3RydWN0IHNhYnJlX2lycV9kYXRhICppcnFfZGF0YSA9IF9hcmcyOworCXVuc2lnbmVkIGxvbmcgY29udHJvbGxlcl9yZWdzID0gaXJxX2RhdGEtPmNvbnRyb2xsZXJfcmVnczsKKwl1bnNpZ25lZCBsb25nIHN5bmNfcmVnID0gY29udHJvbGxlcl9yZWdzICsgU0FCUkVfV1JTWU5DOworCXVuc2lnbmVkIGxvbmcgY29uZmlnX3NwYWNlID0gY29udHJvbGxlcl9yZWdzICsgU0FCUkVfQ09ORklHU1BBQ0U7CisJdW5zaWduZWQgaW50IGJ1cywgZGV2Zm47CisJdTE2IF91bnVzZWQ7CisKKwljb25maWdfc3BhY2UgPSBTQUJSRV9DT05GSUdfQkFTRShjb25maWdfc3BhY2UpOworCisJYnVzID0gKHBoeXNfaGkgPj4gMTYpICYgMHhmZjsKKwlkZXZmbiA9IChwaHlzX2hpID4+IDgpICYgMHhmZjsKKworCWNvbmZpZ19zcGFjZSB8PSBTQUJSRV9DT05GSUdfRU5DT0RFKGJ1cywgZGV2Zm4sIDB4MDApOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhciAjU3luY1xuXHQiCisJCQkgICAgICJsZHVoYSBbJTFdICUyLCAlMFxuXHQiCisJCQkgICAgICJtZW1iYXIgI1N5bmMiCisJCQkgICAgIDogIj1yIiAoX3VudXNlZCkKKwkJCSAgICAgOiAiciIgKCh1MTYgKikgY29uZmlnX3NwYWNlKSwKKwkJCSAgICAgICAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FX0wpCisJCQkgICAgIDogIm1lbW9yeSIpOworCisJc2FicmVfcmVhZChzeW5jX3JlZyk7Cit9CisKKyNkZWZpbmUgU0FCUkVfSU1BUF9BX1NMT1QwCTB4MGMwMFVMCisjZGVmaW5lIFNBQlJFX0lNQVBfQl9TTE9UMAkweDBjMjBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FfU0xPVDAJMHgxNDAwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9CX1NMT1QwCTB4MTQ4MFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfU0NTSQkJMHgxODAwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9FVEgJCTB4MTgwOFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfQlBQCQkweDE4MTBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FVX1JFQwkweDE4MThVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FVX1BMQVkJMHgxODIwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9QRkFJTAkweDE4MjhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0tNUwkJMHgxODMwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9GTFBZCQkweDE4MzhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1NIVwkJMHgxODQwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9LQkQJCTB4MTg0OFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfTVMJCTB4MTg1MFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfU0VSCQkweDE4NThVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1VFCQkweDE4NzBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0NFCQkweDE4NzhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1BDSUVSUgkweDE4ODBVTAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYWJyZV9wY2lzbG90X2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXVuc2lnbmVkIGludCBidXMgPSAgKGlubyAmIDB4MTApID4+IDQ7CisJdW5zaWduZWQgaW50IHNsb3QgPSAoaW5vICYgMHgwYykgPj4gMjsKKworCWlmIChidXMgPT0gMCkKKwkJcmV0dXJuIFNBQlJFX0lNQVBfQV9TTE9UMCArIChzbG90ICogOCk7CisJZWxzZQorCQlyZXR1cm4gU0FCUkVfSU1BUF9CX1NMT1QwICsgKHNsb3QgKiA4KTsKK30KKworI2RlZmluZSBTQUJSRV9PQklPX0lNQVBfQkFTRQkweDEwMDBVTAorI2RlZmluZSBTQUJSRV9PTkJPQVJEX0lSUV9CQVNFCTB4MjAKKyNkZWZpbmUgc2FicmVfb25ib2FyZF9pbWFwX29mZnNldChfX2lubykgXAorCShTQUJSRV9PQklPX0lNQVBfQkFTRSArICgoKF9faW5vKSAmIDB4MWYpIDw8IDMpKQorCisjZGVmaW5lIHNhYnJlX2ljbHJfb2Zmc2V0KGlubykJCQkJCSAgICAgIFwKKwkoKGlubyAmIDB4MjApID8gKFNBQlJFX0lDTFJfU0NTSSArICgoKGlubykgJiAweDFmKSA8PCAzKSkgOiAgXAorCQkJKFNBQlJFX0lDTFJfQV9TTE9UMCArICgoKGlubykgJiAweDFmKTw8MykpKQorCitzdGF0aWMgaW50IHNhYnJlX2RldmljZV9uZWVkc193c3luYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gZHAtPnBhcmVudDsKKwljb25zdCBjaGFyICpwYXJlbnRfbW9kZWwsICpwYXJlbnRfY29tcGF0OworCisJLyogVGhpcyB0cmF2ZXJzYWwgdXAgdG93YXJkcyB0aGUgcm9vdCBpcyBtZWFudCB0bworCSAqIGhhbmRsZSB0d28gY2FzZXM6CisJICoKKwkgKiAxKSBub24tUENJIGJ1cyBzaXR0aW5nIHVuZGVyIFBDSSwgc3VjaCBhcyAnZWJ1cycKKwkgKiAyKSB0aGUgUENJIGNvbnRyb2xsZXIgaW50ZXJydXB0cyB0aGVtc2VsdmVzLCB3aGljaAorCSAqICAgIHdpbGwgdXNlIHRoZSBzYWJyZV9pcnFfYnVpbGQgYnV0IGRvIG5vdCBuZWVkCisJICogICAgdGhlIERNQSBzeW5jaHJvbml6YXRpb24gaGFuZGxpbmcKKwkgKi8KKwl3aGlsZSAocGFyZW50KSB7CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaSIpKQorCQkJYnJlYWs7CisJCXBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCX0KKworCWlmICghcGFyZW50KQorCQlyZXR1cm4gMDsKKworCXBhcmVudF9tb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShwYXJlbnQsCisJCQkJICAgICAgICJtb2RlbCIsIE5VTEwpOworCWlmIChwYXJlbnRfbW9kZWwgJiYKKwkgICAgKCFzdHJjbXAocGFyZW50X21vZGVsLCAiU1VOVyxzYWJyZSIpIHx8CisJICAgICAhc3RyY21wKHBhcmVudF9tb2RlbCwgIlNVTlcsc2ltYmEiKSkpCisJCXJldHVybiAwOworCisJcGFyZW50X2NvbXBhdCA9IG9mX2dldF9wcm9wZXJ0eShwYXJlbnQsCisJCQkJCSJjb21wYXRpYmxlIiwgTlVMTCk7CisJaWYgKHBhcmVudF9jb21wYXQgJiYKKwkgICAgKCFzdHJjbXAocGFyZW50X2NvbXBhdCwgInBjaTEwOGUsYTAwMCIpIHx8CisJICAgICAhc3RyY21wKHBhcmVudF9jb21wYXQsICJwY2kxMDhlLGEwMDEiKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2FicmVfaXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgIHVuc2lnbmVkIGludCBpbm8sCisJCQkJICAgIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBzYWJyZV9pcnFfZGF0YSAqaXJxX2RhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xsZXJfcmVncyA9IGlycV9kYXRhLT5jb250cm9sbGVyX3JlZ3M7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcmVnczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJdW5zaWduZWQgbG9uZyBpbWFwX29mZiwgaWNscl9vZmY7CisJaW50IGlub2ZpeHVwID0gMDsKKwlpbnQgdmlydF9pcnE7CisKKwlpbm8gJj0gMHgzZjsKKwlpZiAoaW5vIDwgU0FCUkVfT05CT0FSRF9JUlFfQkFTRSkgeworCQkvKiBQQ0kgc2xvdCAqLworCQlpbWFwX29mZiA9IHNhYnJlX3BjaXNsb3RfaW1hcF9vZmZzZXQoaW5vKTsKKwl9IGVsc2UgeworCQkvKiBvbmJvYXJkIGRldmljZSAqLworCQlpbWFwX29mZiA9IHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoaW5vKTsKKwl9CisKKwkvKiBOb3cgYnVpbGQgdGhlIElSUSBidWNrZXQuICovCisJaW1hcCA9IGNvbnRyb2xsZXJfcmVncyArIGltYXBfb2ZmOworCisJaWNscl9vZmYgPSBzYWJyZV9pY2xyX29mZnNldChpbm8pOworCWljbHIgPSBjb250cm9sbGVyX3JlZ3MgKyBpY2xyX29mZjsKKworCWlmICgoaW5vICYgMHgyMCkgPT0gMCkKKwkJaW5vZml4dXAgPSBpbm8gJiAweDAzOworCisJdmlydF9pcnEgPSBidWlsZF9pcnEoaW5vZml4dXAsIGljbHIsIGltYXApOworCisJLyogSWYgdGhlIHBhcmVudCBkZXZpY2UgaXMgYSBQQ0k8LT5QQ0kgYnJpZGdlIG90aGVyIHRoYW4KKwkgKiBBUEIsIHdlIGhhdmUgdG8gaW5zdGFsbCBhIHByZS1oYW5kbGVyIHRvIGVuc3VyZSB0aGF0CisJICogYWxsIHBlbmRpbmcgRE1BIGlzIGRyYWluZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorCSAqIGlzIHJ1bi4KKwkgKi8KKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKHJlZ3MgJiYgc2FicmVfZGV2aWNlX25lZWRzX3dzeW5jKGRwKSkgeworCQlpcnFfaW5zdGFsbF9wcmVfaGFuZGxlcih2aXJ0X2lycSwKKwkJCQkJc2FicmVfd3N5bmNfaGFuZGxlciwKKwkJCQkJKHZvaWQgKikgKGxvbmcpIHJlZ3MtPnBoeXNfaGksCisJCQkJCSh2b2lkICopIGlycV9kYXRhKTsKKwl9CisKKwlyZXR1cm4gdmlydF9pcnE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzYWJyZV9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOworCXN0cnVjdCBzYWJyZV9pcnFfZGF0YSAqaXJxX2RhdGE7CisJY29uc3QgdTMyICpidXNyYW5nZTsKKworCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKKwlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBzYWJyZV9pcnFfYnVpbGQ7CisKKwlpcnFfZGF0YSA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWJyZV9pcnFfZGF0YSkpOworCisJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWlycV9kYXRhLT5jb250cm9sbGVyX3JlZ3MgPSByZWdzWzBdLnBoeXNfYWRkcjsKKworCWJ1c3JhbmdlID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiYnVzLXJhbmdlIiwgTlVMTCk7CisJaXJxX2RhdGEtPnBjaV9maXJzdF9idXNubyA9IGJ1c3JhbmdlWzBdOworCisJZHAtPmlycV90cmFucy0+ZGF0YSA9IGlycV9kYXRhOworfQorCisvKiBTQ0hJWk8gaW50ZXJydXB0IG1hcHBpbmcgc3VwcG9ydC4gIFVubGlrZSBQc3ljaG8sIGZvciB0aGlzIGNvbnRyb2xsZXIgdGhlCisgKiBpbWFwL2ljbHIgcmVnaXN0ZXJzIGFyZSBwZXItUEJNLgorICovCisjZGVmaW5lIFNDSElaT19JTUFQX0JBU0UJMHgxMDAwVUwKKyNkZWZpbmUgU0NISVpPX0lDTFJfQkFTRQkweDE0MDBVTAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hpem9faW1hcF9vZmZzZXQodW5zaWduZWQgbG9uZyBpbm8pCit7CisJcmV0dXJuIFNDSElaT19JTUFQX0JBU0UgKyAoaW5vICogOFVMKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoaXpvX2ljbHJfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXJldHVybiBTQ0hJWk9fSUNMUl9CQVNFICsgKGlubyAqIDhVTCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pbm9fdG9faWNscih1bnNpZ25lZCBsb25nIHBibV9yZWdzLAorCQkJCQl1bnNpZ25lZCBpbnQgaW5vKQoreworCisJcmV0dXJuIHBibV9yZWdzICsgc2NoaXpvX2ljbHJfb2Zmc2V0KGlubyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pbm9fdG9faW1hcCh1bnNpZ25lZCBsb25nIHBibV9yZWdzLAorCQkJCQl1bnNpZ25lZCBpbnQgaW5vKQoreworCXJldHVybiBwYm1fcmVncyArIHNjaGl6b19pbWFwX29mZnNldChpbm8pOworfQorCisjZGVmaW5lIHNjaGl6b19yZWFkKF9fcmVnKSBcCisoewl1NjQgX19yZXQ7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YSBbJTFdICUyLCAlMCIgXAorCQkJICAgICA6ICI9ciIgKF9fcmV0KSBcCisJCQkgICAgIDogInIiIChfX3JlZyksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpIFwKKwkJCSAgICAgOiAibWVtb3J5Iik7IFwKKwlfX3JldDsgXAorfSkKKyNkZWZpbmUgc2NoaXpvX3dyaXRlKF9fcmVnLCBfX3ZhbCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUwLCBbJTFdICUyIiBcCisJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLyBcCisJCQkgICAgIDogInIiIChfX3ZhbCksICJyIiAoX19yZWcpLCBcCisJCQkgICAgICAgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkgXAorCQkJICAgICA6ICJtZW1vcnkiKQorCitzdGF0aWMgdm9pZCB0b21hdGlsbG9fd3N5bmNfaGFuZGxlcih1bnNpZ25lZCBpbnQgaW5vLCB2b2lkICpfYXJnMSwgdm9pZCAqX2FyZzIpCit7CisJdW5zaWduZWQgbG9uZyBzeW5jX3JlZyA9ICh1bnNpZ25lZCBsb25nKSBfYXJnMjsKKwl1NjQgbWFzayA9IDFVTCA8PCAoaW5vICYgSU1BUF9JTk8pOworCXU2NCB2YWw7CisJaW50IGxpbWl0OworCisJc2NoaXpvX3dyaXRlKHN5bmNfcmVnLCBtYXNrKTsKKworCWxpbWl0ID0gMTAwMDAwOworCXZhbCA9IDA7CisJd2hpbGUgKC0tbGltaXQpIHsKKwkJdmFsID0gc2NoaXpvX3JlYWQoc3luY19yZWcpOworCQlpZiAoISh2YWwgJiBtYXNrKSkKKwkJCWJyZWFrOworCX0KKwlpZiAobGltaXQgPD0gMCkgeworCQlwcmludGsoInRvbWF0aWxsb193c3luY19oYW5kbGVyOiBETUEgd29uJ3Qgc3luYyBbJWx4OiVseF1cbiIsCisJCSAgICAgICB2YWwsIG1hc2spOworCX0KKworCWlmIChfYXJnMSkgeworCQlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZWxpbmVbNjRdCisJCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNjQpKSk7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUlZnBycywgJTBcblx0IgorCQkJCSAgICAgIm9yICUwLCAlNCwgJTFcblx0IgorCQkJCSAgICAgIndyICUxLCAweDAsICUlZnByc1xuXHQiCisJCQkJICAgICAic3RkYSAlJWYwLCBbJTVdICU2XG5cdCIKKwkJCQkgICAgICJ3ciAlMCwgMHgwLCAlJWZwcnNcblx0IgorCQkJCSAgICAgIm1lbWJhciAjU3luYyIKKwkJCQkgICAgIDogIj0mciIgKG1hc2spLCAiPSZyIiAodmFsKQorCQkJCSAgICAgOiAiMCIgKG1hc2spLCAiMSIgKHZhbCksCisJCQkJICAgICAiaSIgKEZQUlNfRkVGKSwgInIiICgmY2FjaGVsaW5lWzBdKSwKKwkJCQkgICAgICJpIiAoQVNJX0JMS19DT01NSVRfUCkpOworCX0KK30KKworc3RydWN0IHNjaGl6b19pcnFfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBwYm1fcmVnczsKKwl1bnNpZ25lZCBsb25nIHN5bmNfcmVnOworCXUzMiBwb3J0aWQ7CisJaW50IGNoaXBfdmVyc2lvbjsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2NoaXpvX2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGlubywKKwkJCQkgICAgIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBzY2hpem9faXJxX2RhdGEgKmlycV9kYXRhID0gX2RhdGE7CisJdW5zaWduZWQgbG9uZyBwYm1fcmVncyA9IGlycV9kYXRhLT5wYm1fcmVnczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJaW50IGlnbl9maXh1cDsKKwlpbnQgdmlydF9pcnE7CisJaW50IGlzX3RvbWF0aWxsbzsKKworCWlubyAmPSAweDNmOworCisJLyogTm93IGJ1aWxkIHRoZSBJUlEgYnVja2V0LiAqLworCWltYXAgPSBzY2hpem9faW5vX3RvX2ltYXAocGJtX3JlZ3MsIGlubyk7CisJaWNsciA9IHNjaGl6b19pbm9fdG9faWNscihwYm1fcmVncywgaW5vKTsKKworCS8qIE9uIFNjaGl6bywgbm8gaW5vZml4dXAgb2NjdXJzLiAgVGhpcyBpcyBiZWNhdXNlIGVhY2gKKwkgKiBJTk8gaGFzIGl0J3Mgb3duIElNQVAgcmVnaXN0ZXIuICBPbiBQc3ljaG8gYW5kIFNhYnJlCisJICogdGhlcmUgaXMgb25seSBvbmUgSU1BUCByZWdpc3RlciBmb3IgZWFjaCBQQ0kgc2xvdCBldmVuCisJICogdGhvdWdoIGZvdXIgZGlmZmVyZW50IElOT3MgY2FuIGJlIGdlbmVyYXRlZCBieSBlYWNoCisJICogUENJIHNsb3QuCisJICoKKwkgKiBCdXQsIGZvciBKQlVTIHZhcmlhbnRzIChlc3NlbnRpYWxseSwgVG9tYXRpbGxvKSwgd2UgaGF2ZQorCSAqIHRvIGZpeHVwIHRoZSBsb3dlc3QgYml0IG9mIHRoZSBpbnRlcnJ1cHQgZ3JvdXAgbnVtYmVyLgorCSAqLworCWlnbl9maXh1cCA9IDA7CisKKwlpc190b21hdGlsbG8gPSAoaXJxX2RhdGEtPnN5bmNfcmVnICE9IDBVTCk7CisKKwlpZiAoaXNfdG9tYXRpbGxvKSB7CisJCWlmIChpcnFfZGF0YS0+cG9ydGlkICYgMSkKKwkJCWlnbl9maXh1cCA9ICgxIDw8IDYpOworCX0KKworCXZpcnRfaXJxID0gYnVpbGRfaXJxKGlnbl9maXh1cCwgaWNsciwgaW1hcCk7CisKKwlpZiAoaXNfdG9tYXRpbGxvKSB7CisJCWlycV9pbnN0YWxsX3ByZV9oYW5kbGVyKHZpcnRfaXJxLAorCQkJCQl0b21hdGlsbG9fd3N5bmNfaGFuZGxlciwKKwkJCQkJKChpcnFfZGF0YS0+Y2hpcF92ZXJzaW9uIDw9IDQpID8KKwkJCQkJICh2b2lkICopIDEgOiAodm9pZCAqKSAwKSwKKwkJCQkJKHZvaWQgKikgaXJxX2RhdGEtPnN5bmNfcmVnKTsKKwl9CisKKwlyZXR1cm4gdmlydF9pcnE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBfX3NjaGl6b19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAorCQkJCQkgICBpbnQgaXNfdG9tYXRpbGxvKQoreworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOworCXN0cnVjdCBzY2hpem9faXJxX2RhdGEgKmlycV9kYXRhOworCisJZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOworCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHNjaGl6b19pcnFfYnVpbGQ7CisKKwlpcnFfZGF0YSA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2hpem9faXJxX2RhdGEpKTsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlkcC0+aXJxX3RyYW5zLT5kYXRhID0gaXJxX2RhdGE7CisKKwlpcnFfZGF0YS0+cGJtX3JlZ3MgPSByZWdzWzBdLnBoeXNfYWRkcjsKKwlpZiAoaXNfdG9tYXRpbGxvKQorCQlpcnFfZGF0YS0+c3luY19yZWcgPSByZWdzWzNdLnBoeXNfYWRkciArIDB4MWExOFVMOworCWVsc2UKKwkJaXJxX2RhdGEtPnN5bmNfcmVnID0gMFVMOworCWlycV9kYXRhLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJwb3J0aWQiLCAwKTsKKwlpcnFfZGF0YS0+Y2hpcF92ZXJzaW9uID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAidmVyc2lvbiMiLCAwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNjaGl6b19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCV9fc2NoaXpvX2lycV90cmFuc19pbml0KGRwLCAwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRvbWF0aWxsb19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCV9fc2NoaXpvX2lycV90cmFuc19pbml0KGRwLCAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwY2lfc3VuNHZfaXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJCXVuc2lnbmVkIGludCBkZXZpbm8sCisJCQkJCXZvaWQgKl9kYXRhKQoreworCXUzMiBkZXZoYW5kbGUgPSAodTMyKSAodW5zaWduZWQgbG9uZykgX2RhdGE7CisKKwlyZXR1cm4gc3VuNHZfYnVpbGRfaXJxKGRldmhhbmRsZSwgZGV2aW5vKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjaV9zdW40dl9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOworCisJZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOworCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHBjaV9zdW40dl9pcnFfYnVpbGQ7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKQorCQkoKHJlZ3MtPnBoeXNfYWRkciA+PiAzMlVMKSAmIDB4MGZmZmZmZmYpOworfQorCitzdHJ1Y3QgZmlyZV9pcnFfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBwYm1fcmVnczsKKwl1MzIgcG9ydGlkOworfTsKKworI2RlZmluZSBGSVJFX0lNQVBfQkFTRQkweDAwMTAwMAorI2RlZmluZSBGSVJFX0lDTFJfQkFTRQkweDAwMTQwMAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXJlX2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXJldHVybiBGSVJFX0lNQVBfQkFTRSArIChpbm8gKiA4VUwpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXJlX2ljbHJfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXJldHVybiBGSVJFX0lDTFJfQkFTRSArIChpbm8gKiA4VUwpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXJlX2lub190b19pY2xyKHVuc2lnbmVkIGxvbmcgcGJtX3JlZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgaW5vKQoreworCXJldHVybiBwYm1fcmVncyArIGZpcmVfaWNscl9vZmZzZXQoaW5vKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyZV9pbm9fdG9faW1hcCh1bnNpZ25lZCBsb25nIHBibV9yZWdzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGlubykKK3sKKwlyZXR1cm4gcGJtX3JlZ3MgKyBmaXJlX2ltYXBfb2Zmc2V0KGlubyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlyZV9pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkJIHVuc2lnbmVkIGludCBpbm8sCisJCQkJCSB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgZmlyZV9pcnFfZGF0YSAqaXJxX2RhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHBibV9yZWdzID0gaXJxX2RhdGEtPnBibV9yZWdzOworCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKKwl1bnNpZ25lZCBsb25nIGludF9jdHJscjsKKworCWlubyAmPSAweDNmOworCisJLyogTm93IGJ1aWxkIHRoZSBJUlEgYnVja2V0LiAqLworCWltYXAgPSBmaXJlX2lub190b19pbWFwKHBibV9yZWdzLCBpbm8pOworCWljbHIgPSBmaXJlX2lub190b19pY2xyKHBibV9yZWdzLCBpbm8pOworCisJLyogU2V0IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBudW1iZXIuICAqLworCWludF9jdHJsciA9IDEgPDwgNjsKKwl1cGFfd3JpdGVxKGludF9jdHJsciwgaW1hcCk7CisKKwkvKiBUaGUgaW50ZXJydXB0IG1hcCByZWdpc3RlcnMgZG8gbm90IGhhdmUgYW4gSU5PIGZpZWxkCisJICogbGlrZSBvdGhlciBjaGlwcyBkby4gIFRoZXkgcmV0dXJuIHplcm8gaW4gdGhlIElOTworCSAqIGZpZWxkLCBhbmQgdGhlIGludGVycnVwdCBjb250cm9sbGVyIG51bWJlciBpcyBjb250cm9sbGVkCisJICogaW4gYml0cyA2IHRvIDkuICBTbyBpbiBvcmRlciBmb3IgYnVpbGRfaXJxKCkgdG8gZ2V0CisJICogdGhlIElOTyByaWdodCB3ZSBwYXNzIGl0IGluIGFzIHBhcnQgb2YgdGhlIGZpeHVwCisJICogd2hpY2ggd2lsbCBnZXQgYWRkZWQgdG8gdGhlIG1hcCByZWdpc3RlciB6ZXJvIHZhbHVlCisJICogcmVhZCBieSBidWlsZF9pcnEoKS4KKwkgKi8KKwlpbm8gfD0gKGlycV9kYXRhLT5wb3J0aWQgPDwgNik7CisJaW5vIC09IGludF9jdHJscjsKKwlyZXR1cm4gYnVpbGRfaXJxKGlubywgaWNsciwgaW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaXJlX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IGZpcmVfaXJxX2RhdGEgKmlycV9kYXRhOworCisJZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOworCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IGZpcmVfaXJxX2J1aWxkOworCisJaXJxX2RhdGEgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3QgZmlyZV9pcnFfZGF0YSkpOworCisJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSBpcnFfZGF0YTsKKworCWlycV9kYXRhLT5wYm1fcmVncyA9IHJlZ3NbMF0ucGh5c19hZGRyOworCWlycV9kYXRhLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJwb3J0aWQiLCAwKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKyNpZmRlZiBDT05GSUdfU0JVUworLyogSU5PIG51bWJlciB0byBJTUFQIHJlZ2lzdGVyIG9mZnNldCBmb3IgU1lTSU8gZXh0ZXJuYWwgSVJRJ3MuCisgKiBUaGlzIHNob3VsZCBjb25mb3JtIHRvIGJvdGggU3VuZmlyZS9XaWxkZmlyZSBzZXJ2ZXIgYW5kIEZ1c2lvbgorICogZGVza3RvcCBkZXNpZ25zLgorICovCisjZGVmaW5lIFNZU0lPX0lNQVBfU0xPVDAJMHgyYzAwVUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9TTE9UMQkweDJjMDhVTAorI2RlZmluZSBTWVNJT19JTUFQX1NMT1QyCTB4MmMxMFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfU0xPVDMJMHgyYzE4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9TQ1NJCQkweDMwMDBVTAorI2RlZmluZSBTWVNJT19JTUFQX0VUSAkJMHgzMDA4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9CUFAJCTB4MzAxMFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfQVVESU8JMHgzMDE4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9QRkFJTAkweDMwMjBVTAorI2RlZmluZSBTWVNJT19JTUFQX0tNUwkJMHgzMDI4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9GTFBZCQkweDMwMzBVTAorI2RlZmluZSBTWVNJT19JTUFQX1NIVwkJMHgzMDM4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9LQkQJCTB4MzA0MFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfTVMJCTB4MzA0OFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfU0VSCQkweDMwNTBVTAorI2RlZmluZSBTWVNJT19JTUFQX1RJTTAJCTB4MzA2MFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfVElNMQkJMHgzMDY4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9VRQkJMHgzMDcwVUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9DRQkJMHgzMDc4VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9TQkVSUgkweDMwODBVTAorI2RlZmluZSBTWVNJT19JTUFQX1BNR01UCTB4MzA4OFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfR0ZYCQkweDMwOTBVTAorI2RlZmluZSBTWVNJT19JTUFQX0VVUEEJCTB4MzA5OFVMCisKKyNkZWZpbmUgYm9nb24gICAgICgodW5zaWduZWQgbG9uZykgLTEpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNpb19pcnFfb2Zmc2V0c1tdID0geworCS8qIFNCVVMgU2xvdCAwIC0tPiAzLCBsZXZlbCAxIC0tPiA3ICovCisJU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwKKwlTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLAorCVNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsCisJU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwKKwlTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLAorCVNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsCisJU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywKKwlTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLAorCisJLyogT25ib2FyZCBkZXZpY2VzIChub3QgcmVsZXZhbnQvdXNlZCBvbiBTdW5GaXJlKS4gKi8KKwlTWVNJT19JTUFQX1NDU0ksCisJU1lTSU9fSU1BUF9FVEgsCisJU1lTSU9fSU1BUF9CUFAsCisJYm9nb24sCisJU1lTSU9fSU1BUF9BVURJTywKKwlTWVNJT19JTUFQX1BGQUlMLAorCWJvZ29uLAorCWJvZ29uLAorCVNZU0lPX0lNQVBfS01TLAorCVNZU0lPX0lNQVBfRkxQWSwKKwlTWVNJT19JTUFQX1NIVywKKwlTWVNJT19JTUFQX0tCRCwKKwlTWVNJT19JTUFQX01TLAorCVNZU0lPX0lNQVBfU0VSLAorCWJvZ29uLAorCWJvZ29uLAorCVNZU0lPX0lNQVBfVElNMCwKKwlTWVNJT19JTUFQX1RJTTEsCisJYm9nb24sCisJYm9nb24sCisJU1lTSU9fSU1BUF9VRSwKKwlTWVNJT19JTUFQX0NFLAorCVNZU0lPX0lNQVBfU0JFUlIsCisJU1lTSU9fSU1BUF9QTUdNVCwKKwlTWVNJT19JTUFQX0dGWCwKKwlTWVNJT19JTUFQX0VVUEEsCit9OworCisjdW5kZWYgYm9nb24KKworI2RlZmluZSBOVU1fU1lTSU9fT0ZGU0VUUyBBUlJBWV9TSVpFKHN5c2lvX2lycV9vZmZzZXRzKQorCisvKiBDb252ZXJ0IEludGVycnVwdCBNYXBwaW5nIHJlZ2lzdGVyIHBvaW50ZXIgdG8gYXNzb2NpYXRlZAorICogSW50ZXJydXB0IENsZWFyIHJlZ2lzdGVyIHBvaW50ZXIsIFNZU0lPIHNwZWNpZmljIHZlcnNpb24uCisgKi8KKyNkZWZpbmUgU1lTSU9fSUNMUl9VTlVTRUQwCTB4MzQwMFVMCisjZGVmaW5lIFNZU0lPX0lDTFJfU0xPVDAJMHgzNDA4VUwKKyNkZWZpbmUgU1lTSU9fSUNMUl9TTE9UMQkweDM0NDhVTAorI2RlZmluZSBTWVNJT19JQ0xSX1NMT1QyCTB4MzQ4OFVMCisjZGVmaW5lIFNZU0lPX0lDTFJfU0xPVDMJMHgzNGM4VUwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2lvX2ltYXBfdG9faWNscih1bnNpZ25lZCBsb25nIGltYXApCit7CisJdW5zaWduZWQgbG9uZyBkaWZmID0gU1lTSU9fSUNMUl9VTlVTRUQwIC0gU1lTSU9fSU1BUF9TTE9UMDsKKwlyZXR1cm4gaW1hcCArIGRpZmY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2J1c19vZl9idWlsZF9pcnEoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5vLAorCQkJCSAgICAgIHZvaWQgKl9kYXRhKQoreworCXVuc2lnbmVkIGxvbmcgcmVnX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgX2RhdGE7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOworCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKKwlpbnQgc2J1c19zbG90ID0gMDsKKwlpbnQgc2J1c19sZXZlbCA9IDA7CisKKwlpbm8gJj0gMHgzZjsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAocmVncykKKwkJc2J1c19zbG90ID0gcmVncy0+d2hpY2hfaW87CisKKwlpZiAoaW5vIDwgMHgyMCkKKwkJaW5vICs9IChzYnVzX3Nsb3QgKiA4KTsKKworCWltYXAgPSBzeXNpb19pcnFfb2Zmc2V0c1tpbm9dOworCWlmIChpbWFwID09ICgodW5zaWduZWQgbG9uZyktMSkpIHsKKwkJcHJvbV9wcmludGYoImdldF9pcnFfdHJhbnNsYXRpb25zOiBCYWQgU1lTSU8gSU5PWyV4XVxuIiwKKwkJCSAgICBpbm8pOworCQlwcm9tX2hhbHQoKTsKKwl9CisJaW1hcCArPSByZWdfYmFzZTsKKworCS8qIFNZU0lPIGluY29uc2lzdGVuY3kuICBGb3IgZXh0ZXJuYWwgU0xPVFMsIHdlIGhhdmUgdG8gc2VsZWN0CisJICogdGhlIHJpZ2h0IElDTFIgcmVnaXN0ZXIgYmFzZWQgdXBvbiB0aGUgbG93ZXIgU0JVUyBpcnEgbGV2ZWwKKwkgKiBiaXRzLgorCSAqLworCWlmIChpbm8gPj0gMHgyMCkgeworCQlpY2xyID0gc3lzaW9faW1hcF90b19pY2xyKGltYXApOworCX0gZWxzZSB7CisJCXNidXNfbGV2ZWwgPSBpbm8gJiAweDc7CisKKwkJc3dpdGNoKHNidXNfc2xvdCkgeworCQljYXNlIDA6CisJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWljbHIgPSByZWdfYmFzZSArIFNZU0lPX0lDTFJfU0xPVDE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIDM6CisJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QzOworCQkJYnJlYWs7CisJCX07CisKKwkJaWNsciArPSAoKHVuc2lnbmVkIGxvbmcpc2J1c19sZXZlbCAtIDFVTCkgKiA4VUw7CisJfQorCXJldHVybiBidWlsZF9pcnEoc2J1c19sZXZlbCwgaWNsciwgaW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzYnVzX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gc2J1c19vZl9idWlsZF9pcnE7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKSByZWdzLT5waHlzX2FkZHI7Cit9CisjZW5kaWYgLyogQ09ORklHX1NCVVMgKi8KKworCitzdGF0aWMgdW5zaWduZWQgaW50IGNlbnRyYWxfYnVpbGRfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGlubywKKwkJCQkgICAgICB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlbnRyYWxfZHAgPSBfZGF0YTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpjZW50cmFsX29wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjZW50cmFsX2RwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJdTMyIHRtcDsKKworCWlmICghc3RyY21wKGRwLT5uYW1lLCAiZWVwcm9tIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzVdOworCX0gZWxzZSBpZiAoIXN0cmNtcChkcC0+bmFtZSwgInpzIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzRdOworCX0gZWxzZSBpZiAoIXN0cmNtcChkcC0+bmFtZSwgImNsb2NrLWJvYXJkIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzNdOworCX0gZWxzZSB7CisJCXJldHVybiBpbm87CisJfQorCisJaW1hcCA9IHJlcy0+c3RhcnQgKyAweDAwVUw7CisJaWNsciA9IHJlcy0+c3RhcnQgKyAweDEwVUw7CisKKwkvKiBTZXQgdGhlIElOTyBzdGF0ZSB0byBpZGxlLCBhbmQgZGlzYWJsZS4gICovCisJdXBhX3dyaXRlbCgwLCBpY2xyKTsKKwl1cGFfcmVhZGwoaWNscik7CisKKwl0bXAgPSB1cGFfcmVhZGwoaW1hcCk7CisJdG1wICY9IH4weDgwMDAwMDAwOworCXVwYV93cml0ZWwodG1wLCBpbWFwKTsKKworCXJldHVybiBidWlsZF9pcnEoMCwgaWNsciwgaW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjZW50cmFsX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOworCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IGNlbnRyYWxfYnVpbGRfaXJxOworCisJZHAtPmlycV90cmFucy0+ZGF0YSA9IGRwOworfQorCitzdHJ1Y3QgaXJxX3RyYW5zIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCppbml0KShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Cit9OworCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIHN0cnVjdCBpcnFfdHJhbnMgX19pbml0ZGF0YSBwY2lfaXJxX3RyYW5zX3RhYmxlW10gPSB7CisJeyAiU1VOVyxzYWJyZSIsIHNhYnJlX2lycV90cmFuc19pbml0IH0sCisJeyAicGNpMTA4ZSxhMDAwIiwgc2FicmVfaXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLGEwMDEiLCBzYWJyZV9pcnFfdHJhbnNfaW5pdCB9LAorCXsgIlNVTlcscHN5Y2hvIiwgcHN5Y2hvX2lycV90cmFuc19pbml0IH0sCisJeyAicGNpMTA4ZSw4MDAwIiwgcHN5Y2hvX2lycV90cmFuc19pbml0IH0sCisJeyAiU1VOVyxzY2hpem8iLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLDgwMDEiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJTVU5XLHNjaGl6bysiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLDgwMDIiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJTVU5XLHRvbWF0aWxsbyIsIHRvbWF0aWxsb19pcnFfdHJhbnNfaW5pdCB9LAorCXsgInBjaTEwOGUsYTgwMSIsIHRvbWF0aWxsb19pcnFfdHJhbnNfaW5pdCB9LAorCXsgIlNVTlcsc3VuNHYtcGNpIiwgcGNpX3N1bjR2X2lycV90cmFuc19pbml0IH0sCisJeyAicGNpZXgxMDhlLDgwZjAiLCBmaXJlX2lycV90cmFuc19pbml0IH0sCit9OworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuNHZfdmRldl9pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkJIHVuc2lnbmVkIGludCBkZXZpbm8sCisJCQkJCSB2b2lkICpfZGF0YSkKK3sKKwl1MzIgZGV2aGFuZGxlID0gKHUzMikgKHVuc2lnbmVkIGxvbmcpIF9kYXRhOworCisJcmV0dXJuIHN1bjR2X2J1aWxkX2lycShkZXZoYW5kbGUsIGRldmlubyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzdW40dl92ZGV2X2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gc3VuNHZfdmRldl9pcnFfYnVpbGQ7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKQorCQkoKHJlZ3MtPnBoeXNfYWRkciA+PiAzMlVMKSAmIDB4MGZmZmZmZmYpOworfQorCit2b2lkIF9faW5pdCBpcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwljb25zdCBjaGFyICptb2RlbDsKKwlpbnQgaTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQorCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibW9kZWwiLCBOVUxMKTsKKwlpZiAoIW1vZGVsKQorCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImNvbXBhdGlibGUiLCBOVUxMKTsKKwlpZiAobW9kZWwpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpX2lycV90cmFuc190YWJsZSk7IGkrKykgeworCQkJc3RydWN0IGlycV90cmFucyAqdCA9ICZwY2lfaXJxX3RyYW5zX3RhYmxlW2ldOworCisJCQlpZiAoIXN0cmNtcChtb2RlbCwgdC0+bmFtZSkpIHsKKwkJCQl0LT5pbml0KGRwKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0JVUworCWlmICghc3RyY21wKGRwLT5uYW1lLCAic2J1cyIpIHx8CisJICAgICFzdHJjbXAoZHAtPm5hbWUsICJzYmkiKSkgeworCQlzYnVzX2lycV90cmFuc19pbml0KGRwKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmICghc3RyY21wKGRwLT5uYW1lLCAiZmhjIikgJiYKKwkgICAgIXN0cmNtcChkcC0+cGFyZW50LT5uYW1lLCAiY2VudHJhbCIpKSB7CisJCWNlbnRyYWxfaXJxX3RyYW5zX2luaXQoZHApOworCQlyZXR1cm47CisJfQorCWlmICghc3RyY21wKGRwLT5uYW1lLCAidmlydHVhbC1kZXZpY2VzIikgfHwKKwkgICAgIXN0cmNtcChkcC0+bmFtZSwgIm5pdSIpKSB7CisJCXN1bjR2X3ZkZXZfaXJxX3RyYW5zX2luaXQoZHApOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wc3ljaG9fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3BzeWNob19jb21tb24uaApyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZV8zMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlXzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2VfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcmVib290LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9yZWJvb3QuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9yZWJvb3QuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcmVib290LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF8zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC9ydHJhcC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF8zMi5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF82NC5TCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUwppbmRleCA5N2E5OTNjLi5mZDNjZWU0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUwpAQCAtMTQsOSArMTQsOSBAQAogI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLSNkZWZpbmUJCVJUUkFQX1BTVEFURQkJKFBTVEFURV9STU98UFNUQVRFX1BFRnxQU1RBVEVfUFJJVnxQU1RBVEVfSUUpCi0jZGVmaW5lCQlSVFJBUF9QU1RBVEVfSVJRT0ZGCShQU1RBVEVfUk1PfFBTVEFURV9QRUZ8UFNUQVRFX1BSSVYpCi0jZGVmaW5lCQlSVFJBUF9QU1RBVEVfQUdfSVJRT0ZGCShQU1RBVEVfUk1PfFBTVEFURV9QRUZ8UFNUQVRFX1BSSVZ8UFNUQVRFX0FHKQorI2RlZmluZQkJUlRSQVBfUFNUQVRFCQkoUFNUQVRFX1RTT3xQU1RBVEVfUEVGfFBTVEFURV9QUklWfFBTVEFURV9JRSkKKyNkZWZpbmUJCVJUUkFQX1BTVEFURV9JUlFPRkYJKFBTVEFURV9UU098UFNUQVRFX1BFRnxQU1RBVEVfUFJJVikKKyNkZWZpbmUJCVJUUkFQX1BTVEFURV9BR19JUlFPRkYJKFBTVEFURV9UU098UFNUQVRFX1BFRnxQU1RBVEVfUFJJVnxQU1RBVEVfQUcpCiAKIAkJLnRleHQKIAkJLmFsaWduCQkJMzIKQEAgLTEzMiw2ICsxMzIsMTggQEAKIAkJYmEscHQJCQkleGNjLCBfX2hhbmRsZV9zaWduYWxfY29udGludWUKIAkJIGFuZG4JCQklbDEsICVsNCwgJWwxCiAKKwkJLyogV2hlbiByZXR1cm5pbmcgZnJvbSBhIE5NSSAoJXBpbD09MTUpIGludGVycnVwdCB3ZSB3YW50IHRvCisJCSAqIGF2b2lkIHJ1bm5pbmcgc29mdGlycXMsIGRvaW5nIElSUSB0cmFjaW5nLCBwcmVlbXB0aW5nLCBldGMuCisJCSAqLworCQkuZ2xvYmwJCQlydHJhcF9ubWkKK3J0cmFwX25taToJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UU1RBVEVdLCAlbDEKKwkJc2V0aGkJCQklaGkoMHhmIDw8IDIwKSwgJWw0CisJCWFuZAkJCSVsMSwgJWw0LCAlbDQKKwkJYW5kbgkJCSVsMSwgJWw0LCAlbDEKKwkJc3JsCQkJJWw0LCAyMCwgJWw0CisJCWJhLHB0CQkJJXhjYywgcnRyYXBfbm9faXJxX2VuYWJsZQorCQkgd3JwcgkJCSVsNCwgJXBpbAorCiAJCS5hbGlnbgkJCTY0CiAJCS5nbG9ibAkJCXJ0cmFwX2lycSwgcnRyYXAsIGlycXN6X3BhdGNobWUsIHJ0cmFwX3hjYWxsCiBydHJhcF9pcnE6CkBAIC0xNjEsOCArMTczLDggQEAKIAkJY2FsbAkJCXRyYWNlX2hhcmRpcnFzX29uCiAJCSBub3AKIAkJd3JwcgkJCSVsNCwgJXBpbAotcnRyYXBfbm9faXJxX2VuYWJsZToKICNlbmRpZgorcnRyYXBfbm9faXJxX2VuYWJsZToKIAkJYW5kY2MJCQklbDEsIFRTVEFURV9QUklWLCAlbDMKIAkJYm5lLHBuCQkJJWljYywgdG9fa2VybmVsCiAJCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDI0ZmUzMDcuLmM5NmM2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKKyNpbmNsdWRlICJrZXJuZWwuaCIKKwogc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvID0gewogCTAsIDAsCQkJLyogb3JpZy14LCBvcmlnLXkgKi8KIAkwLAkJCS8qIHVudXNlZCAqLwpAQCAtMzA4LDkgKzMxMCw2IEBACiAJc21wX3NldHVwX2NwdV9wb3NzaWJsZV9tYXAoKTsKIH0KIAotZXh0ZXJuIGNoYXIgKnNwYXJjX2NwdV90eXBlOwotZXh0ZXJuIGNoYXIgKnNwYXJjX2ZwdV90eXBlOwotCiBzdGF0aWMgaW50IG5jcHVzX3Byb2JlZDsKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKQEAgLTMyOCw4ICszMjcsOCBAQAogCQkgICAiQ1BVMENsa1Rja1x0OiAlbGRcbiIKICNlbmRpZgogCQkgICAsCi0JCSAgIHNwYXJjX2NwdV90eXBlID8gc3BhcmNfY3B1X3R5cGUgOiAidW5kZXRlcm1pbmVkIiwKLQkJICAgc3BhcmNfZnB1X3R5cGUgPyBzcGFyY19mcHVfdHlwZSA6ICJ1bmRldGVybWluZWQiLAorCQkgICBzcGFyY19jcHVfdHlwZSwKKwkJICAgc3BhcmNfZnB1X3R5cGUgLAogCQkgICByb212ZWMtPnB2X3JvbXZlcnMsCiAJCSAgIHByb21fcmV2LAogCQkgICByb212ZWMtPnB2X3ByaW50cmV2ID4+IDE2LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggYzhiMDNhNC4uNTU1ZGI3NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKQEAgLTUyLDYgKzUyLDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiZW50cnkuaCIKKyNpbmNsdWRlICJrZXJuZWwuaCIKIAogLyogVXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3NlcyB0byBOYXRTZW1pIFNVUEVSIEkvTyBjaGlwIGNvbmZpZ3VyZQogICogb3BlcmF0aW9ucyBpbiBhc20vbnM4NzMwMy5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwzMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbDMyLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3NpZ25hbDMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF82NC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggZjUwMGIwNi4uYmZlOTlkOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9JVEVSUzsgaSsrKSB7CiAJCXQwID0gdGlja19vcHMtPmdldF90aWNrKCk7CiAJCWdvW01BU1RFUl0gPSAxOwotCQltZW1iYXJfc3RvcmVsb2FkKCk7CisJCW1lbWJhcl9zYWZlKCIjU3RvcmVMb2FkIik7CiAJCXdoaWxlICghKHRtID0gZ29bU0xBVkVdKSkKIAkJCXJtYigpOwogCQlnb1tTTEFWRV0gPSAwOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIAkvKiBub3cgbGV0IHRoZSBjbGllbnQgcHJvY2VlZCBpbnRvIGhpcyBsb29wICovCiAJZ29bTUFTVEVSXSA9IDA7Ci0JbWVtYmFyX3N0b3JlbG9hZCgpOworCW1lbWJhcl9zYWZlKCIjU3RvcmVMb2FkIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXRjX3N5bmNfbG9jaywgZmxhZ3MpOwogCXsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQkJZ29bTUFTVEVSXSA9IDA7CiAJCQl3bWIoKTsKIAkJCWdvW1NMQVZFXSA9IHRpY2tfb3BzLT5nZXRfdGljaygpOwotCQkJbWVtYmFyX3N0b3JlbG9hZCgpOworCQkJbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKTsKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpdGNfc3luY19sb2NrLCBmbGFncyk7CkBAIC03NzMsNyArNzczLDcgQEAKIAogCS8qIFNldHVwIHRoZSBpbml0aWFsIGNwdSBsaXN0LiAgKi8KIAljbnQgPSAwOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICptYXNrKSB7CisJZm9yX2VhY2hfY3B1KGksIG1hc2spIHsKIAkJaWYgKGkgPT0gdGhpc19jcHUgfHwgIWNwdV9vbmxpbmUoaSkpCiAJCQljb250aW51ZTsKIAkJY3B1X2xpc3RbY250KytdID0gaTsKQEAgLTExMjIsNyArMTEyMiw2IEBACiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmCiAJCXBlbmd1aW5zX2FyZV9kb2luZ190aW1lID0gMTsKLQkJbWVtYmFyX3N0b3Jlc3RvcmVfbG9hZHN0b3JlKCk7CiAJCWF0b21pY19pbmMoJnNtcF9jYXB0dXJlX3JlZ2lzdHJ5KTsKIAkJc21wX2Nyb3NzX2NhbGwoJnhjYWxsX2NhcHR1cmUsIDAsIDAsIDApOwogCQl3aGlsZSAoYXRvbWljX3JlYWQoJnNtcF9jYXB0dXJlX3JlZ2lzdHJ5KSAhPSBuY3B1cykKQEAgLTExNDIsMTMgKzExNDEsMTMgQEAKIAkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYKIAkJcGVuZ3VpbnNfYXJlX2RvaW5nX3RpbWUgPSAwOwotCQltZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsKKwkJbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKTsKIAkJYXRvbWljX2RlYygmc21wX2NhcHR1cmVfcmVnaXN0cnkpOwogCX0KIH0KIAotLyogSW1wcmlzb25lZCBwZW5ndWlucyBydW4gd2l0aCAlcGlsID09IDE1LCBidXQgUFNUQVRFX0lFIHNldCwgc28gdGhleQotICogY2FuIHNlcnZpY2UgdGxiIGZsdXNoIHhjYWxscy4uLgorLyogSW1wcmlzb25lZCBwZW5ndWlucyBydW4gd2l0aCAlcGlsID09IFBJTF9OT1JNQUxfTUFYLCBidXQgUFNUQVRFX0lFCisgKiBzZXQsIHNvIHRoZXkgY2FuIHNlcnZpY2UgdGxiIGZsdXNoIHhjYWxscy4uLgogICovCiBleHRlcm4gdm9pZCBwcm9tX3dvcmxkKGludCk7CiAKQEAgLTExNjEsNyArMTE2MCw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNodyIpOwogCXByb21fd29ybGQoMSk7CiAJYXRvbWljX2luYygmc21wX2NhcHR1cmVfcmVnaXN0cnkpOwotCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpOworCW1lbWJhcl9zYWZlKCIjU3RvcmVMb2FkIik7CiAJd2hpbGUgKHBlbmd1aW5zX2FyZV9kb2luZ190aW1lKQogCQlybWIoKTsKIAlhdG9taWNfZGVjKCZzbXBfY2FwdHVyZV9yZWdpc3RyeSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXNfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltc18zMi5jCmluZGV4IGIwZGZmZjguLmE0ZDQ1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXNfMzIuYwpAQCAtNjEsNyArNjEsNiBAQAogZXh0ZXJuIHZvaWQgKl9fYnplcm8odm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHZvaWQgKl9fbWVtc2Nhbl96ZXJvKHZvaWQgKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkICpfX21lbXNjYW5fZ2VuZXJpYyh2b2lkICosIGludCwgc2l6ZV90KTsKLWV4dGVybiBpbnQgX19tZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gaW50IF9fc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKIAogZXh0ZXJuIGludCBfX2FzaHJkaTMoaW50LCBpbnQpOwpAQCAtMTIyLDEwICsxMjEsOCBAQAogRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fbmRlbGF5KTsKIEVYUE9SVF9TWU1CT0wocnRjX2xvY2spOwotI2lmZGVmIENPTkZJR19TVU5fQVVYSU8KIEVYUE9SVF9TWU1CT0woc2V0X2F1eGlvKTsKIEVYUE9SVF9TWU1CT0woZ2V0X2F1eGlvKTsKLSNlbmRpZgogRVhQT1JUX1NZTUJPTChpb19yZW1hcF9wZm5fcmFuZ2UpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTIxMyw3ICsyMTAsNiBAQAogRVhQT1JUX1NZTUJPTChfX2J6ZXJvKTsKIEVYUE9SVF9TWU1CT0woX19tZW1zY2FuX3plcm8pOwogRVhQT1JUX1NZTUJPTChfX21lbXNjYW5fZ2VuZXJpYyk7Ci1FWFBPUlRfU1lNQk9MKF9fbWVtY21wKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY21wKTsKIEVYUE9SVF9TWU1CT0woX19tZW1tb3ZlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltc182NC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltc182NC5jCmluZGV4IDMwYmJhOGIuLjAxMzMyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zXzY0LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCiBzdHJ1Y3QgcG9sbCB7CiAJaW50IGZkOwpAQCAtNjEsNyArNjIsNiBAQAogZXh0ZXJuIHZvaWQgKl9fYnplcm8odm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHZvaWQgKl9fbWVtc2Nhbl96ZXJvKHZvaWQgKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkICpfX21lbXNjYW5fZ2VuZXJpYyh2b2lkICosIGludCwgc2l6ZV90KTsKLWV4dGVybiBpbnQgX19tZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiBleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgc3lzX3NpZ3N1c3BlbmQodm9pZCk7CiBleHRlcm4gaW50IGNvbXBhdF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1MzIgYXJnKTsKQEAgLTE0OCwxMCArMTQ4LDEzIEBACiBFWFBPUlRfU1lNQk9MKF9fZmx1c2hfZGNhY2hlX3JhbmdlKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NVTl9BVVhJTworRVhQT1JUX1NZTUJPTChzdW40dl9uaWFnYXJhX2dldHBlcmYpOworRVhQT1JUX1NZTUJPTChzdW40dl9uaWFnYXJhX3NldHBlcmYpOworRVhQT1JUX1NZTUJPTChzdW40dl9uaWFnYXJhMl9nZXRwZXJmKTsKK0VYUE9SVF9TWU1CT0woc3VuNHZfbmlhZ2FyYTJfc2V0cGVyZik7CisKIEVYUE9SVF9TWU1CT0woYXV4aW9fc2V0X2xlZCk7CiBFWFBPUlRfU1lNQk9MKGF1eGlvX3NldF9sdGUpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NCVVMKIEVYUE9SVF9TWU1CT0woc2J1c19zZXRfc2J1czY0KTsKICNlbmRpZgpAQCAtMTc3LDcgKzE4MCw2IEBACiBFWFBPUlRfU1lNQk9MKGlvX3JlbWFwX3Bmbl9yYW5nZSk7CiAKIEVYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwotRVhQT1JUX1NZTUJPTChwdXRfZnNfc3RydWN0KTsKIAogLyogbWF0aC1lbXUgd2FudHMgdGhpcyAqLwogRVhQT1JUX1NZTUJPTChkaWVfaWZfa2VybmVsKTsKQEAgLTIxOSw3ICsyMjEsNiBAQAogRVhQT1JUX1NZTUJPTChfX2J6ZXJvKTsKIEVYUE9SVF9TWU1CT0woX19tZW1zY2FuX3plcm8pOwogRVhQT1JUX1NZTUJPTChfX21lbXNjYW5fZ2VuZXJpYyk7Ci1FWFBPUlRfU1lNQk9MKF9fbWVtY21wKTsKIEVYUE9SVF9TWU1CT0woX19tZW1zZXQpOwogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwaXRlcnJzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGl0ZXJycy5TCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3BpdGVycnMuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc3BpdGVycnMuUwppbmRleCBlZjkwMmM2Li5jMzU3ZTQwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwaXRlcnJzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BpdGVycnMuUwpAQCAtODAsNyArODAsNyBAQAogCWNtcAkJJWcyLCAxCiAJcmRwcgkJJXBpbCwgJWcyCiAJYmxldSxwdAkJJXhjYywgMWYKLQkgd3JwcgkJJWcwLCAxNSwgJXBpbAorCSB3cnByCQklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAKIAliYSxwdAkJJXhjYywgZXRyYXB0bDEKIAkgcmQJCSVwYywgJWc3CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NzdGF0ZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3N0YXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3N0YXRlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3NzdGF0ZS5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N0YWNrdHJhY2UuYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3N0YWNrdHJhY2UuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDRlMjFkNGEuLmFjYjEyZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtNywxNyArNywxOCBAQAogCiAjaW5jbHVkZSAia3N0YWNrLmgiCiAKLXZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQorc3RhdGljIHZvaWQgX19zYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdHAsCisJCQkgICAgICAgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwKKwkJCSAgICAgICBib29sIHNraXBfc2NoZWQpCiB7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0cCA9IHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCk7CiAJdW5zaWduZWQgbG9uZyBrc3AsIGZwOwogCi0Jc3RhY2tfdHJhY2VfZmx1c2goKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibW92CSUlZnAsICUwIgotCQk6ICI9ciIgKGtzcCkKLQkpOworCWlmICh0cCA9PSBjdXJyZW50X3RocmVhZF9pbmZvKCkpIHsKKwkJc3RhY2tfdHJhY2VfZmx1c2goKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiAlJWZwLCAlMCIgOiAiPXIiIChrc3ApKTsKKwl9IGVsc2UgeworCQlrc3AgPSB0cC0+a3NwOworCX0KIAogCWZwID0ga3NwICsgU1RBQ0tfQklBUzsKIAlkbyB7CkBAIC00Myw4ICs0NCwyMSBAQAogCiAJCWlmICh0cmFjZS0+c2tpcCA+IDApCiAJCQl0cmFjZS0+c2tpcC0tOwotCQllbHNlCisJCWVsc2UgaWYgKCFza2lwX3NjaGVkIHx8ICFpbl9zY2hlZF9mdW5jdGlvbnMocGMpKQogCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBwYzsKIAl9IHdoaWxlICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcyk7CiB9CisKK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCV9fc2F2ZV9zdGFja190cmFjZShjdXJyZW50X3RocmVhZF9pbmZvKCksIHRyYWNlLCBmYWxzZSk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gdGFza190aHJlYWRfaW5mbyh0c2spOworCisJX19zYXZlX3N0YWNrX3RyYWNlKHRwLCB0cmFjZSwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlX3Rzayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N0YXJmaXJlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdGFyZmlyZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3N0YXJmaXJlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N0YXJmaXJlLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRjX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKaW5kZXggNWRjOGE1Ny4uYmMzYWRiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKQEAgLTE2MCw2ICsxNjAsNyBAQAogCXN1bjRjX3RpbWVycyA9ICh2b2lkIF9faW9tZW0gKikgKHVuc2lnbmVkIGxvbmcpIGFkZHJbMF07CiAKIAlpcnEgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJpbnRyIiwgTlVMTCk7CisJb2Zfbm9kZV9wdXQoZHApOwogCWlmICghaXJxKSB7CiAJCXByb21fcHJpbnRmKCJzdW40Y19pbml0X3RpbWVyczogTm8gaW50ciBwcm9wZXJ0eVxuIik7CiAJCXByb21faGFsdCgpOwpAQCAtMjAwLDYgKzIwMSw3IEBACiAJfQogCiAJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImFkZHJlc3MiLCBOVUxMKTsKKwlvZl9ub2RlX3B1dChkcCk7CiAJaWYgKCFhZGRyKSB7CiAJCXByb21fcHJpbnRmKCJzdW40Y19pbml0X0lSUTogTm8gYWRkcmVzcyBwcm9wZXJ0eVxuIik7CiAJCXByb21faGFsdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCBkM2NiNzZjLi4zMzY5ZmVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKKyNpbmNsdWRlICJrZXJuZWwuaCIKICNpbmNsdWRlICJpcnEuaCIKIAogLyogSWYgeW91IHRydXN0IGN1cnJlbnQgU0NTSSBsYXllciB0byBoYW5kbGUgZGlmZmVyZW50IFNDU0kgSVJRcywgZW5hYmxlIHRoaXMuIEkgZG9uJ3QgdHJ1c3QgaXQuLi4gLWpqICovCkBAIC01OCw3ICs1OSw2IEBACiAjZGVmaW5lIFRJTUVSX0lSUQkxMAogCiAjZGVmaW5lIE1BWF9TVEFUSUNfQUxMT0MJNAotZXh0ZXJuIHN0cnVjdCBpcnFhY3Rpb24gc3RhdGljX2lycWFjdGlvbltNQVhfU1RBVElDX0FMTE9DXTsKIGV4dGVybiBpbnQgc3RhdGljX2lycV9jb3VudDsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNidXNfdGlkWzMyXTsKIApAQCAtNTA4LDYgKzUwOCw3IEBACiAJICogYm9vdGJ1cy4KIAkgKi8KIAlyZWcgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlvZl9ub2RlX3B1dChkcCk7CiAJaWYgKCFyZWcpIHsKIAkJcHJvbV9wcmludGYoInN1bjRkX2luaXRfdGltZXJzOiBObyByZWcgcHJvcGVydHlcbiIpOwogCQlwcm9tX2hhbHQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKaW5kZXggZjEwMzE3MS4uMzAxODkyZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKQEAgLTM3NCw2ICszNzQsNyBAQAogCX0KIAogCWFkZHIgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJhZGRyZXNzIiwgJmxlbik7CisJb2Zfbm9kZV9wdXQoZHApOwogCWlmICghYWRkcikgewogCQlwcmludGsoS0VSTl9FUlIgInN1bjRtX2luaXRfdGltZXJzOiBObyAnYWRkcmVzcycgcHJvcC5cbiIpOwogCQlyZXR1cm47CkBAIC00MzcsNiArNDM4LDcgQEAKIAl9CiAKIAlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiYWRkcmVzcyIsICZsZW4pOworCW9mX25vZGVfcHV0KGRwKTsKIAlpZiAoIWFkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzdW40bV9pbml0X0lSUTogTm8gJ2FkZHJlc3MnIHByb3AuXG4iKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl9pdmVjLlMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N1bjR2X2l2ZWMuUwppbmRleCBlMmY4ZTFiLi41NTliYzVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N1bjR2X2l2ZWMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40dl9pdmVjLlMKQEAgLTE4Niw3ICsxODYsNyBAQAogCSAqIHdoZW4gaXQncyBkb25lLgogCSAqLwogCXJkcHIJJXBpbCwgJWcyCi0Jd3JwcgklZzAsIDE1LCAlcGlsCisJd3JwcgklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAJbW92CSVnMSwgJWc0CiAJYmEscHQJJXhjYywgZXRyYXBfaXJxCiAJIHJkCSVwYywgJWc3CkBAIC0yMTYsNyArMjE2LDcgQEAKIAltZW1iYXIJI1N5bmMKIAogCXJkcHIJJXBpbCwgJWcyCi0Jd3JwcgklZzAsIDE1LCAlcGlsCisJd3JwcgklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAJYmEscHQJJXhjYywgZXRyYXBfaXJxCiAJIHJkCSVwYywgJWc3CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkgKiB3aGVuIGl0J3MgZG9uZS4KIAkgKi8KIAlyZHByCSVwaWwsICVnMgotCXdycHIJJWcwLCAxNSwgJXBpbAorCXdycHIJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCW1vdgklZzEsICVnNAogCWJhLHB0CSV4Y2MsIGV0cmFwX2lycQogCSByZAklcGMsICVnNwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJbWVtYmFyCSNTeW5jCiAKIAlyZHByCSVwaWwsICVnMgotCXdycHIJJWcwLCAxNSwgJXBpbAorCXdycHIJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCWJhLHB0CSV4Y2MsIGV0cmFwX2lycQogCSByZAklcGMsICVnNwogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl90bGJfbWlzcy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNHZfdGxiX21pc3MuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl90bGJfbWlzcy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zdW40dl90bGJfbWlzcy5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N5czMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY18zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3N5c2NhbGxzLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2ZzLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNmcy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDg0ZTVjZTEuLmQyOGY0OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5oCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLmgKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMva2VybmVsL3RpbWUuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhbXBvbGluZS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhbXBvbGluZV8zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC90cmFtcG9saW5lLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3RyYW1wb2xpbmVfMzIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFtcG9saW5lXzY0LlMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCA4M2FiZDVhLi5kYTFiNzgxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYW1wb2xpbmUuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTEwOSw3ICsxMDksNiBAQAogCSAqLwogCXNldGhpCQklaGkocHJvbV9lbnRyeV9sb2NrKSwgJWcyCiAxOglsZHN0dWIJCVslZzIgKyAlbG8ocHJvbV9lbnRyeV9sb2NrKV0sICVnMQotCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlCiAJYnJueixwbgkJJWcxLCAxYgogCSBub3AKIApAQCAtMjE0LDcgKzIxMyw2IEBACiAKIAlzZXRoaQkJJWhpKHByb21fZW50cnlfbG9jayksICVnMgogCXN0YgkJJWcwLCBbJWcyICsgJWxvKHByb21fZW50cnlfbG9jayldCi0JbWVtYmFyCQkjU3RvcmVTdG9yZSB8ICNTdG9yZUxvYWQKIAogCWJhLHB0CQkleGNjLCBhZnRlcl9sb2NrX3RsYgogCSBub3AKQEAgLTMzMCw3ICszMjgsNiBAQAogCiAJc2V0aGkJCSVoaShwcm9tX2VudHJ5X2xvY2spLCAlZzIKIDE6CWxkc3R1YgkJWyVnMiArICVsbyhwcm9tX2VudHJ5X2xvY2spXSwgJWcxCi0JbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKIAlicm56LHBuCQklZzEsIDFiCiAJIG5vcAogCkBAIC0zOTQsNyArMzkxLDYgQEAKIAogMzoJc2V0aGkJCSVoaShwcm9tX2VudHJ5X2xvY2spLCAlZzIKIAlzdGIJCSVnMCwgWyVnMiArICVsbyhwcm9tX2VudHJ5X2xvY2spXQotCW1lbWJhcgkJI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkCiAKIAlsZHgJCVslbDBdLCAlZzYKIAlsZHgJCVslZzYgKyBUSV9UQVNLXSwgJWc0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDJiN2Q1MDYuLjcxNmYzOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjUsMzIgKzI1LDExIEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCisjaW5jbHVkZSAiZW50cnkuaCIKKyNpbmNsdWRlICJrZXJuZWwuaCIKKwogLyogI2RlZmluZSBUUkFQX0RFQlVHICovCiAKLXN0cnVjdCB0cmFwX3RyYWNlX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHBjOwotCXVuc2lnbmVkIGxvbmcgdHlwZTsKLX07Ci0KLXZvaWQgc3lzY2FsbF90cmFjZV9lbnRyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlwcmludGsoIiVzWyVkXTogIiwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwotCXByaW50aygic2NhbGw8JWQ+IChjb3VsZCBiZSAlZClcbiIsIChpbnQpIHJlZ3MtPnVfcmVnc1tVUkVHX0cxXSwKLQkgICAgICAgKGludCkgcmVncy0+dV9yZWdzW1VSRUdfSTBdKTsKLX0KLQotdm9pZCBzeXNjYWxsX3RyYWNlX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci19Ci0KLXZvaWQgc3VuNGRfbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50aygiQWllZWU6IHN1bjRkIE5NSSByZWNlaXZlZCFcbiIpOwotCXByaW50aygieW91IGxvc2UgYnVkZHkgYm95Li4uXG4iKTsKLQlzaG93X3JlZ3MocmVncyk7Ci0JcHJvbV9oYWx0KCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGluc3RydWN0aW9uX2R1bXAodW5zaWduZWQgbG9uZyAqcGMpCiB7CiAJaW50IGk7CkBAIC0xMzQsNyArMTEzLDYgQEAKIHZvaWQgZG9faWxsZWdhbF9pbnN0cnVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBucGMsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwc3IpCiB7Ci0JZXh0ZXJuIGludCBkb191c2VyX211bGRpdiAoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZyk7CiAJc2lnaW5mb190IGluZm87CiAKIAlpZihwc3IgJiBQU1JfUFMpCkBAIC0xOTUsMTAgKzE3Myw2IEBACiAJc2VuZF9zaWdfaW5mbyhTSUdCVVMsICZpbmZvLCBjdXJyZW50KTsKIH0KIAotZXh0ZXJuIHZvaWQgZnBzYXZlKHVuc2lnbmVkIGxvbmcgKmZwcmVncywgdW5zaWduZWQgbG9uZyAqZnNyLAotCQkgICB2b2lkICpmcHF1ZXVlLCB1bnNpZ25lZCBsb25nICpmcHFkZXB0aCk7Ci1leHRlcm4gdm9pZCBmcGxvYWQodW5zaWduZWQgbG9uZyAqZnByZWdzLCB1bnNpZ25lZCBsb25nICpmc3IpOwotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbml0X2ZzciA9IDB4MFVMOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5pdF9mcmVnc1szMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSkgPQogICAgICAgICAgICAgICAgIHsgfjBVTCwgfjBVTCwgfjBVTCwgfjBVTCwgfjBVTCwgfjBVTCwgfjBVTCwgfjBVTCwKQEAgLTQ1Niw4ICs0MzAsNiBAQAogICogdXAgaGVyZSBzbyB0aGF0IHRpbWVyIGludGVycnVwdHMgd29yayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KIAotZXh0ZXJuIHZvaWQgc3BhcmNfY3B1X3N0YXJ0dXAodm9pZCk7Ci0KIHZvaWQgdHJhcF9pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHZvaWQgdGhyZWFkX2luZm9fb2Zmc2V0c19hcmVfYm9saXhlZF9wZXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggODFjY2QyMi4uNDYzOGFmMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKQEAgLTEzNzEsNyArMTM3MSw2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEJWyUwXSAlMywgJSVnMFxuXHQiCiAJCQkgICAgICJsZHhhCVslMV0gJTMsICUlZzBcblx0IgogCQkJICAgICAiY2FzeGEJWyUyXSAlMywgJSVnMCwgJSVnMFxuXHQiCi0JCQkgICAgICJtZW1iYXIJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlXG5cdCIKIAkJCSAgICAgImxkeGEJWyUwXSAlMywgJSVnMFxuXHQiCiAJCQkgICAgICJsZHhhCVslMV0gJTMsICUlZzBcblx0IgogCQkJICAgICAibWVtYmFyCSNTeW5jIgpAQCAtMTgzMyw3ICsxODMyLDcgQEAKIAl9CiB9CiAKLS8qIFdlIHJ1biB3aXRoICVwaWwgc2V0IHRvIDE1IGFuZCBQU1RBVEVfSUUgZW5hYmxlZCBpbiAlcHN0YXRlLgorLyogV2UgcnVuIHdpdGggJXBpbCBzZXQgdG8gUElMX05PUk1BTF9NQVggYW5kIFBTVEFURV9JRSBlbmFibGVkIGluICVwc3RhdGUuCiAgKiBMb2cgdGhlIGV2ZW50IGFuZCBjbGVhciB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZW50cnkuCiAgKi8KIHZvaWQgc3VuNHZfcmVzdW1fZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQpAQCAtMTg4MSw3ICsxODgwLDcgQEAKIAlhdG9taWNfaW5jKCZzdW40dl9yZXN1bV9vZmxvd19jbnQpOwogfQogCi0vKiBXZSBydW4gd2l0aCAlcGlsIHNldCB0byAxNSBhbmQgUFNUQVRFX0lFIGVuYWJsZWQgaW4gJXBzdGF0ZS4KKy8qIFdlIHJ1biB3aXRoICVwaWwgc2V0IHRvIFBJTF9OT1JNQUxfTUFYIGFuZCBQU1RBVEVfSUUgZW5hYmxlZCBpbiAlcHN0YXRlLgogICogTG9nIHRoZSBldmVudCwgY2xlYXIgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGVudHJ5LCBhbmQgZGllLgogICovCiB2b2lkIHN1bjR2X25vbnJlc3VtX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHNiLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC90c2IuUwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3RzYi5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC90c2IuUwppbmRleCBjNDk5MjE0Li44YzkxZDliIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RzYi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RzYi5TCkBAIC0zMTcsNyArMzE3LDcgQEAKIAlzcmx4CSVnMSwgMzIsICVvMwogCWFuZGNjCSVvMywgJWcyLCAlZzAKIAlibmUscG4JJWljYywgMWIKLQkgbWVtYmFyCSNMb2FkTG9hZAorCSBub3AKIAljbXAJJWcxLCAlbzEKIAltb3YJMSwgJW8zCiAJYm5lLHB0CSV4Y2MsIDJmCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlibmUscG4JJXhjYywgMWIKIAkgbm9wCiAyOglyZXRsCi0JIFRTQl9NRU1CQVIKKwkgbm9wCiAJLnNpemUJdHNiX2ZsdXNoLCAuLXRzYl9mbHVzaAogCiAJLyogUmVsb2FkIE1NVSByZWxhdGVkIGNvbnRleHQgc3dpdGNoIHN0YXRlIGF0CkBAIC00NzgsNyArNDc4LDcgQEAKIAkgbm9wCiAKIAlyZXRsCi0JIFRTQl9NRU1CQVIKKwkgbm9wCiAJLnNpemUJCWNvcHlfdHNiLCAuLWNvcHlfdHNiCiAKIAkvKiBTZXQgdGhlIGludmFsaWQgYml0IGluIGFsbCBUU0IgZW50cmllcy4gICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMKaW5kZXggMWFkZTNkNi4uZWE5MjU1MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90dGFibGUuUwpAQCAtNjYsNyArNjYsNyBAQAogdGwwX2lycTc6CUJUUkFQKDB4NDcpIEJUUkFQKDB4NDgpIEJUUkFQKDB4NDkpCiB0bDBfaXJxMTA6CUJUUkFQKDB4NGEpIEJUUkFQKDB4NGIpIEJUUkFQKDB4NGMpIEJUUkFQKDB4NGQpCiB0bDBfaXJxMTQ6CVRSQVBfSVJRKHRpbWVyX2ludGVycnVwdCwgMTQpCi10bDBfaXJxMTU6CVRSQVBfSVJRKGhhbmRsZXJfaXJxLCAxNSkKK3RsMF9pcnExNToJVFJBUF9OTUlfSVJRKHBlcmZjdHJfaXJxLCAxNSkKIHRsMF9yZXN2MDUwOglCVFJBUCgweDUwKSBCVFJBUCgweDUxKSBCVFJBUCgweDUyKSBCVFJBUCgweDUzKSBCVFJBUCgweDU0KSBCVFJBUCgweDU1KQogdGwwX3Jlc3YwNTY6CUJUUkFQKDB4NTYpIEJUUkFQKDB4NTcpIEJUUkFQKDB4NTgpIEJUUkFQKDB4NTkpIEJUUkFQKDB4NWEpIEJUUkFQKDB4NWIpCiB0bDBfcmVzdjA1YzoJQlRSQVAoMHg1YykgQlRSQVAoMHg1ZCkgQlRSQVAoMHg1ZSkgQlRSQVAoMHg1ZikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc20uUyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC91bmFfYXNtXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV82NC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3VuYV9hc20uUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV82NC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF8zMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMyZV9jcHVmcmVxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC91czJlX2NwdWZyZXEuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91dHJhcC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXRyYXAuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2tlcm5lbC91dHJhcC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2tlcm5lbC91dHJhcC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Zpby5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlvLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvdmlvLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3Zpby5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Zpb2hzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3Zpb2hzLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQva2VybmVsL3Zpc2VtdWwuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA1YjdlNjlhLi43NjI2NzA4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsMjcgKzEsNTYgQEAKLS8qIGxkIHNjcmlwdCB0byBtYWtlIFNwYXJjTGludXgga2VybmVsICovCisvKiBsZCBzY3JpcHQgZm9yIHNwYXJjMzIvc3BhcmM2NCBrZXJuZWwgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKyNpZmRlZiBDT05GSUdfU1BBUkMzMgorI2RlZmluZSBJTklUSUFMX0FERFJFU1MgIDB4MTAwMDAgKyBTSVpFT0ZfSEVBREVSUworI2RlZmluZSBURVhUU1RBUlQJMHhmMDAwNDAwMAorCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFU19TSElGVCA1CisKKyNlbHNlCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFU19TSElGVCA2CisjZGVmaW5lIElOSVRJQUxfQUREUkVTUyAweDQwMDAKKyNkZWZpbmUgVEVYVFNUQVJUICAgICAgMHgwMDAwMDAwMDAwNDA0MDAwCisKKyNlbmRpZgorCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyAoMSA8PCBTTVBfQ0FDSEVfQllURVNfU0hJRlQpCisKKyNpZmRlZiBDT05GSUdfU1BBUkMzMgogT1VUUFVUX0ZPUk1BVCgiZWxmMzItc3BhcmMiLCAiZWxmMzItc3BhcmMiLCAiZWxmMzItc3BhcmMiKQogT1VUUFVUX0FSQ0goc3BhcmMpCiBFTlRSWShfc3RhcnQpCiBqaWZmaWVzID0gamlmZmllc182NCArIDQ7CisjZWxzZQorLyogc3BhcmM2NCAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtc3BhcmMiLCAiZWxmNjQtc3BhcmMiLCAiZWxmNjQtc3BhcmMiKQorT1VUUFVUX0FSQ0goc3BhcmM6djlhKQorRU5UUlkoX3N0YXJ0KQoramlmZmllcyA9IGppZmZpZXNfNjQ7CisjZW5kaWYKKwogU0VDVElPTlMKIHsKLQkuID0gMHgxMDAwMCArIFNJWkVPRl9IRUFERVJTOwotCS50ZXh0IDB4ZjAwMDQwMDAgOgorCS8qIHN3YXBwZXJfbG93X3BtZF9kaXIgaXMgc3BhcmM2NCBvbmx5ICovCisJc3dhcHBlcl9sb3dfcG1kX2RpciA9IDB4MDAwMDAwMDAwMDQwMjAwMDsKKwkuID0gSU5JVElBTF9BRERSRVNTOworCS50ZXh0IFRFWFRTVEFSVCA6CiAJewogCQlfdGV4dCA9IC47CiAJCSooLnRleHQuaGVhZCkKIAkJVEVYVF9URVhUCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCisJCUtQUk9CRVNfVEVYVAogCQkqKC5nbnUud2FybmluZykKIAl9ID0gMAogCV9ldGV4dCA9IC47Ci0JUFJPVklERSAoZXRleHQgPSAuKTsKLQlST0RBVEEKKworCVJPX0RBVEEoUEFHRV9TSVpFKQogCS5kYXRhIDoJewogCQlEQVRBX0RBVEEKIAkJQ09OU1RSVUNUT1JTCkBAIC0yOSwyNSArNTgsMzggQEAKIAkuZGF0YTEgOiB7CiAJCSooLmRhdGExKQogCX0KKwkuID0gQUxJR04oU01QX0NBQ0hFX0JZVEVTKTsKKwkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsKKwkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKKwl9CisJLiA9IEFMSUdOKFNNUF9DQUNIRV9CWVRFUyk7CisJLmRhdGEucmVhZF9tb3N0bHkgOiB7CisJCSooLmRhdGEucmVhZF9tb3N0bHkpCisJfQorCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAlfZWRhdGEgPSAuOwotCVBST1ZJREUgKGVkYXRhID0gLik7CiAKKwkvKiBpbml0X3Rhc2sgKi8KKwkuID0gQUxJR04oVEhSRUFEX1NJWkUpOworCS5kYXRhLmluaXRfdGFzayA6IHsKKwkJKiguZGF0YS5pbml0X3Rhc2spCisJfQogCS5maXh1cCA6IHsKIAkJX19zdGFydF9fX2ZpeHVwID0gLjsKIAkJKiguZml4dXApCiAJCV9fc3RvcF9fX2ZpeHVwID0gLjsKIAl9CisJLiA9IEFMSUdOKDE2KTsKIAlfX2V4X3RhYmxlIDogewogCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogCQkqKF9fZXhfdGFibGUpCiAJCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9Ci0KIAlOT1RFUwogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JX19pbml0X2JlZ2luID0gLjsKIAkuaW5pdC50ZXh0IDogeworCQlfX2luaXRfYmVnaW4gPSAuOwogCQlfc2luaXR0ZXh0ID0gLjsKIAkJSU5JVF9URVhUCiAJCV9laW5pdHRleHQgPSAuOwpAQCAtNjUsNyArMTA3LDcgQEAKIAkuaW5pdGNhbGwuaW5pdCA6IHsKIAkJX19pbml0Y2FsbF9zdGFydCA9IC47CiAJCUlOSVRDQUxMUwotCV9faW5pdGNhbGxfZW5kID0gLjsKKwkJX19pbml0Y2FsbF9lbmQgPSAuOwogCX0KIAkuY29uX2luaXRjYWxsLmluaXQgOiB7CiAJCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKQEAgLTc0LDM4ICsxMTYsNjEgQEAKIAl9CiAJU0VDVVJJVFlfSU5JVAogCisJLiA9IEFMSUdOKDQpOworCS50c2JfbGRxdWFkX3BoeXNfcGF0Y2ggOiB7CisJCV9fdHNiX2xkcXVhZF9waHlzX3BhdGNoID0gLjsKKwkJKigudHNiX2xkcXVhZF9waHlzX3BhdGNoKQorCQlfX3RzYl9sZHF1YWRfcGh5c19wYXRjaF9lbmQgPSAuOworCX0KKworCS50c2JfcGh5c19wYXRjaCA6IHsKKwkJX190c2JfcGh5c19wYXRjaCA9IC47CisJCSooLnRzYl9waHlzX3BhdGNoKQorCQlfX3RzYl9waHlzX3BhdGNoX2VuZCA9IC47CisJfQorCisJLmNwdWlkX3BhdGNoIDogeworCQlfX2NwdWlkX3BhdGNoID0gLjsKKwkJKiguY3B1aWRfcGF0Y2gpCisJCV9fY3B1aWRfcGF0Y2hfZW5kID0gLjsKKwl9CisKKwkuc3VuNHZfMWluc25fcGF0Y2ggOiB7CisJCV9fc3VuNHZfMWluc25fcGF0Y2ggPSAuOworCQkqKC5zdW40dl8xaW5zbl9wYXRjaCkKKwkJX19zdW40dl8xaW5zbl9wYXRjaF9lbmQgPSAuOworCX0KKwkuc3VuNHZfMmluc25fcGF0Y2ggOiB7CisJCV9fc3VuNHZfMmluc25fcGF0Y2ggPSAuOworCQkqKC5zdW40dl8yaW5zbl9wYXRjaCkKKwkJX19zdW40dl8yaW5zbl9wYXRjaF9lbmQgPSAuOworCX0KKwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5pbml0LnJhbWZzIDogewotCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKKwkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwogCQkqKC5pbml0LnJhbWZzKQotCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCV9faW5pdHJhbWZzX2VuZCA9IC47CiAJfQogI2VuZGlmCiAKIAlQRVJDUFUoUEFHRV9TSVpFKQorCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX19pbml0X2VuZCA9IC47Ci0JLiA9IEFMSUdOKDMyKTsKLQkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKLQl9Ci0JLiA9IEFMSUdOKDMyKTsKLQkuZGF0YS5yZWFkX21vc3RseSA6IHsKLQkJKiguZGF0YS5yZWFkX21vc3RseSkKLQl9Ci0KIAlfX2Jzc19zdGFydCA9IC47CiAJLnNic3MgOiB7CiAJCSooLnNic3MpCi0JCSooLnNjb21tb24pIH0KKwkJKiguc2NvbW1vbikKKwl9CiAJLmJzcyA6IHsKIAkJKiguZHluYnNzKQogCQkqKC5ic3MpCiAJCSooQ09NTU9OKQogCX0KIAlfZW5kID0gLiA7Ci0JUFJPVklERSAoZW5kID0gLik7CisKIAkvRElTQ0FSRC8gOiB7CiAJCUVYSVRfVEVYVAogCQlFWElUX0RBVEEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUyBiL2FyY2gvc3BhcmMva2VybmVsL3dpbmZpeHVwLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9rZXJuZWwvd2luZml4dXAuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9HRU5iemVyby5TIGIvYXJjaC9zcGFyYy9saWIvR0VOYnplcm8uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9HRU5iemVyby5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9HRU5iemVyby5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL0dFTmNvcHlfZnJvbV91c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9HRU5jb3B5X2Zyb21fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL0dFTmNvcHlfZnJvbV91c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL0dFTmNvcHlfZnJvbV91c2VyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvR0VOY29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9HRU5jb3B5X3RvX3VzZXIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9HRU5jb3B5X3RvX3VzZXIuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvR0VOY29weV90b191c2VyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvR0VObWVtY3B5LlMgYi9hcmNoL3NwYXJjL2xpYi9HRU5tZW1jcHkuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9HRU5tZW1jcHkuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvR0VObWVtY3B5LlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvR0VOcGFnZS5TIGIvYXJjaC9zcGFyYy9saWIvR0VOcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL0dFTnBhZ2UuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvR0VOcGFnZS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL0dFTnBhdGNoLlMgYi9hcmNoL3NwYXJjL2xpYi9HRU5wYXRjaC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL0dFTnBhdGNoLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL0dFTnBhdGNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKaW5kZXggNmUzMDNlMS4uMzc1MDE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKQEAgLTEsMTMgKzEsNDQgQEAKICMgTWFrZWZpbGUgZm9yIFNwYXJjIGxpYnJhcnkgZmlsZXMuLgogIwogCi1FWFRSQV9BRkxBR1MgOj0gLWFuc2kgLURTVF9ESVYwPTB4MDIKK2FzZmxhZ3MteSA6PSAtYW5zaSAtRFNUX0RJVjA9MHgwMgorY2NmbGFncy15IDo9IC1XZXJyb3IKIAotbGliLXkgOj0gbXVsLm8gcmVtLm8gc2Rpdi5vIHVkaXYubyB1bXVsLm8gdXJlbS5vIGFzaHJkaTMubyBtZW1jcHkubyBtZW1zZXQubyBcCi0gICAgICAgICBzdHJsZW4ubyBjaGVja3N1bS5vIGJsb2Nrb3BzLm8gbWVtc2Nhbi5vIG1lbWNtcC5vIHN0cm5jbXAubyBcCi0JIHN0cm5jcHlfZnJvbV91c2VyLm8gZGl2ZGkzLm8gdWRpdmRpMy5vIHN0cmxlbl91c2VyLm8gXAotCSBjb3B5X3VzZXIubyBsb2Nrcy5vIGF0b21pYy5vIFwKLQkgbHNocmRpMy5vIGFzaGxkaTMubyByd3NlbS5vIG11bGRpMy5vIGJpdGV4dC5vIFwKLQkgY21wZGkyLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBtdWwubyByZW0ubyBzZGl2Lm8gdWRpdi5vIHVtdWwubyB1cmVtLm8gYXNocmRpMy5vCitsaWItJChDT05GSUdfU1BBUkMzMikgKz0gbWVtY3B5Lm8gbWVtc2V0Lm8KK2xpYi15ICAgICAgICAgICAgICAgICArPSBzdHJsZW4ubworbGliLXkgICAgICAgICAgICAgICAgICs9IGNoZWNrc3VtXyQoQklUUykubworbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IGJsb2Nrb3BzLm8KK2xpYi15ICAgICAgICAgICAgICAgICArPSBtZW1zY2FuXyQoQklUUykubyBtZW1jbXAubyBzdHJuY21wXyQoQklUUykubworbGliLXkgICAgICAgICAgICAgICAgICs9IHN0cm5jcHlfZnJvbV91c2VyXyQoQklUUykubyBzdHJsZW5fdXNlcl8kKEJJVFMpLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBkaXZkaTMubyB1ZGl2ZGkzLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBjb3B5X3VzZXIubyBsb2Nrcy5vCitsaWIteSAgICAgICAgICAgICAgICAgKz0gYXRvbWljXyQoQklUUykubworbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IGxzaHJkaTMubyBhc2hsZGkzLm8KK2xpYi15ICAgICAgICAgICAgICAgICArPSByd3NlbV8kKEJJVFMpLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBtdWxkaTMubyBiaXRleHQubyBjbXBkaTIubwogCi1vYmoteSArPSBpb21hcC5vIGF0b21pYzMyLm8KK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBQZWVDZWVJLm8gY29weV9wYWdlLm8gY2xlYXJfcGFnZS5vIGJ6ZXJvLm8KK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBjc3VtX2NvcHkubyBjc3VtX2NvcHlfZnJvbV91c2VyLm8gY3N1bV9jb3B5X3RvX3VzZXIubworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IFZJU3NhdmUubworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IGJpdG9wcy5vCisKK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBVMW1lbWNweS5vIFUxY29weV9mcm9tX3VzZXIubyBVMWNvcHlfdG9fdXNlci5vCisKK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBVM21lbWNweS5vIFUzY29weV9mcm9tX3VzZXIubyBVM2NvcHlfdG9fdXNlci5vCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gVTNwYXRjaC5vCisKK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBOR21lbWNweS5vIE5HY29weV9mcm9tX3VzZXIubyBOR2NvcHlfdG9fdXNlci5vCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gTkdwYXRjaC5vIE5HcGFnZS5vIE5HYnplcm8ubworCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gTkcybWVtY3B5Lm8gTkcyY29weV9mcm9tX3VzZXIubyBORzJjb3B5X3RvX3VzZXIubworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9ICBORzJwYXRjaC5vIE5HMnBhZ2UubworCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gR0VObWVtY3B5Lm8gR0VOY29weV9mcm9tX3VzZXIubyBHRU5jb3B5X3RvX3VzZXIubworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IEdFTnBhdGNoLm8gR0VOcGFnZS5vIEdFTmJ6ZXJvLm8KKworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IGNvcHlfaW5fdXNlci5vIHVzZXJfZml4dXAubyBtZW1tb3ZlLm8KK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBtY291bnQubyBpcGNzdW0ubyB4b3IubworCitvYmoteSAgICAgICAgICAgICAgICAgKz0gaW9tYXAubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICs9IGF0b21pYzMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTkcyY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvc3BhcmMvbGliL05HMmNvcHlfZnJvbV91c2VyLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkcyY29weV9mcm9tX3VzZXIuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvTkcyY29weV9mcm9tX3VzZXIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9ORzJjb3B5X3RvX3VzZXIuUyBiL2FyY2gvc3BhcmMvbGliL05HMmNvcHlfdG9fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL05HMmNvcHlfdG9fdXNlci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9ORzJjb3B5X3RvX3VzZXIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9ORzJtZW1jcHkuUyBiL2FyY2gvc3BhcmMvbGliL05HMm1lbWNweS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL05HMm1lbWNweS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9ORzJtZW1jcHkuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9ORzJwYWdlLlMgYi9hcmNoL3NwYXJjL2xpYi9ORzJwYWdlLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkcycGFnZS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9ORzJwYWdlLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTkcycGF0Y2guUyBiL2FyY2gvc3BhcmMvbGliL05HMnBhdGNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkcycGF0Y2guUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvTkcycGF0Y2guUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR2J6ZXJvLlMgYi9hcmNoL3NwYXJjL2xpYi9OR2J6ZXJvLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkdiemVyby5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9OR2J6ZXJvLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTkdjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvTkdjb3B5X2Zyb21fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL05HY29weV9mcm9tX3VzZXIuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvTkdjb3B5X2Zyb21fdXNlci5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL05HY29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9OR2NvcHlfdG9fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL05HY29weV90b191c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL05HY29weV90b191c2VyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTkdtZW1jcHkuUyBiL2FyY2gvc3BhcmMvbGliL05HbWVtY3B5LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkdtZW1jcHkuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvTkdtZW1jcHkuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR3BhZ2UuUyBiL2FyY2gvc3BhcmMvbGliL05HcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL05HcGFnZS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9OR3BhZ2UuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR3BhdGNoLlMgYi9hcmNoL3NwYXJjL2xpYi9OR3BhdGNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvTkdwYXRjaC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9OR3BhdGNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvUGVlQ2VlSS5jIGIvYXJjaC9zcGFyYy9saWIvUGVlQ2VlSS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL1BlZUNlZUkuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvUGVlQ2VlSS5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL1UxY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvc3BhcmMvbGliL1UxY29weV9mcm9tX3VzZXIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfZnJvbV91c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL1UxY29weV9mcm9tX3VzZXIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvVTFjb3B5X3RvX3VzZXIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfdG9fdXNlci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9VMWNvcHlfdG9fdXNlci5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL1UxbWVtY3B5LlMgYi9hcmNoL3NwYXJjL2xpYi9VMW1lbWNweS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL1UxbWVtY3B5LlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL1UxbWVtY3B5LlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVTNjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvVTNjb3B5X2Zyb21fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL1UzY29weV9mcm9tX3VzZXIuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvVTNjb3B5X2Zyb21fdXNlci5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL1UzY29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9VM2NvcHlfdG9fdXNlci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL1UzY29weV90b191c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL1UzY29weV90b191c2VyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVTNtZW1jcHkuUyBiL2FyY2gvc3BhcmMvbGliL1UzbWVtY3B5LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvVTNtZW1jcHkuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvVTNtZW1jcHkuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9VM3BhdGNoLlMgYi9hcmNoL3NwYXJjL2xpYi9VM3BhdGNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvVTNwYXRjaC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9VM3BhdGNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVklTc2F2ZS5TIGIvYXJjaC9zcGFyYy9saWIvVklTc2F2ZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL1ZJU3NhdmUuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvVklTc2F2ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMuUyBiL2FyY2gvc3BhcmMvbGliL2F0b21pY18zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2xpYi9hdG9taWMuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvYXRvbWljXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvYXRvbWljLlMgYi9hcmNoL3NwYXJjL2xpYi9hdG9taWNfNjQuUwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL2F0b21pYy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9hdG9taWNfNjQuUwppbmRleCA3MGFjNDE4Li4wMjY4MjEwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2F0b21pYy5TCisrKyBiL2FyY2gvc3BhcmMvbGliL2F0b21pY182NC5TCkBAIC00MywyOSArNDMsMTAgQEAKIDI6CUJBQ0tPRkZfU1BJTiglbzIsICVvMywgMWIpCiAJLnNpemUJYXRvbWljX3N1YiwgLi1hdG9taWNfc3ViCiAKLQkvKiBPbiBTTVAgd2UgbmVlZCB0byB1c2UgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZQotCSAqIGNvcnJlY3QgbWVtb3J5IG9wZXJhdGlvbiBvcmRlcmluZywgbm9wIHRoZXNlIG91dAotCSAqIGZvciB1bmlwcm9jZXNzb3IuCi0JICovCi0jaWZkZWYgQ09ORklHX1NNUAotCi0jZGVmaW5lIEFUT01JQ19QUkVfQkFSUklFUgltZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZDsKLSNkZWZpbmUgQVRPTUlDX1BPU1RfQkFSUklFUglcCi0JYmEscHQgJXhjYywgODBiOwlcCi0JbWVtYmFyICNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZQotCi04MDoJcmV0bAotCSBub3AKLSNlbHNlCi0jZGVmaW5lIEFUT01JQ19QUkVfQkFSUklFUgotI2RlZmluZSBBVE9NSUNfUE9TVF9CQVJSSUVSCi0jZW5kaWYKLQogCS5nbG9ibAlhdG9taWNfYWRkX3JldAogCS50eXBlCWF0b21pY19hZGRfcmV0LCNmdW5jdGlvbgogYXRvbWljX2FkZF9yZXQ6IC8qICVvMCA9IGluY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLwogCUJBQ0tPRkZfU0VUVVAoJW8yKQotCUFUT01JQ19QUkVfQkFSUklFUgogMToJbGR1dwlbJW8xXSwgJWcxCiAJYWRkCSVnMSwgJW8wLCAlZzcKIAljYXMJWyVvMV0sICVnMSwgJWc3CkBAIC03Myw3ICs1NCw2IEBACiAJYm5lLHBuCSVpY2MsIDJmCiAJIGFkZAklZzcsICVvMCwgJWc3CiAJc3JhCSVnNywgMCwgJW8wCi0JQVRPTUlDX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCiAyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQpAQCAtODMsNyArNjMsNiBAQAogCS50eXBlCWF0b21pY19zdWJfcmV0LCNmdW5jdGlvbgogYXRvbWljX3N1Yl9yZXQ6IC8qICVvMCA9IGRlY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLwogCUJBQ0tPRkZfU0VUVVAoJW8yKQotCUFUT01JQ19QUkVfQkFSUklFUgogMToJbGR1dwlbJW8xXSwgJWcxCiAJc3ViCSVnMSwgJW8wLCAlZzcKIAljYXMJWyVvMV0sICVnMSwgJWc3CkBAIC05MSw3ICs3MCw2IEBACiAJYm5lLHBuCSVpY2MsIDJmCiAJIHN1YgklZzcsICVvMCwgJWc3CiAJc3JhCSVnNywgMCwgJW8wCi0JQVRPTUlDX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCiAyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQpAQCAtMTMxLDcgKzEwOSw2IEBACiAJLnR5cGUJYXRvbWljNjRfYWRkX3JldCwjZnVuY3Rpb24KIGF0b21pYzY0X2FkZF9yZXQ6IC8qICVvMCA9IGluY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLwogCUJBQ0tPRkZfU0VUVVAoJW8yKQotCUFUT01JQ19QUkVfQkFSUklFUgogMToJbGR4CVslbzFdLCAlZzEKIAlhZGQJJWcxLCAlbzAsICVnNwogCWNhc3gJWyVvMV0sICVnMSwgJWc3CkBAIC0xMzksNyArMTE2LDYgQEAKIAlibmUscG4JJXhjYywgMmYKIAkgYWRkCSVnNywgJW8wLCAlZzcKIAltb3YJJWc3LCAlbzAKLQlBVE9NSUNfUE9TVF9CQVJSSUVSCiAJcmV0bAogCSBub3AKIDI6CUJBQ0tPRkZfU1BJTiglbzIsICVvMywgMWIpCkBAIC0xNDksNyArMTI1LDYgQEAKIAkudHlwZQlhdG9taWM2NF9zdWJfcmV0LCNmdW5jdGlvbgogYXRvbWljNjRfc3ViX3JldDogLyogJW8wID0gZGVjcmVtZW50LCAlbzEgPSBhdG9taWNfcHRyICovCiAJQkFDS09GRl9TRVRVUCglbzIpCi0JQVRPTUlDX1BSRV9CQVJSSUVSCiAxOglsZHgJWyVvMV0sICVnMQogCXN1YgklZzEsICVvMCwgJWc3CiAJY2FzeAlbJW8xXSwgJWcxLCAlZzcKQEAgLTE1Nyw3ICsxMzIsNiBAQAogCWJuZSxwbgkleGNjLCAyZgogCSBzdWIJJWc3LCAlbzAsICVnNwogCW1vdgklZzcsICVvMAotCUFUT01JQ19QT1NUX0JBUlJJRVIKIAlyZXRsCiAJIG5vcAogMjoJQkFDS09GRl9TUElOKCVvMiwgJW8zLCAxYikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvYml0b3BzLlMgYi9hcmNoL3NwYXJjL2xpYi9iaXRvcHMuUwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL2JpdG9wcy5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9iaXRvcHMuUwppbmRleCA2YjAxNWE2Li4yYjcyMjhjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2JpdG9wcy5TCisrKyBiL2FyY2gvc3BhcmMvbGliL2JpdG9wcy5TCkBAIC04LDI5ICs4LDEwIEBACiAKIAkudGV4dAogCi0JLyogT24gU01QIHdlIG5lZWQgdG8gdXNlIG1lbW9yeSBiYXJyaWVycyB0byBlbnN1cmUKLQkgKiBjb3JyZWN0IG1lbW9yeSBvcGVyYXRpb24gb3JkZXJpbmcsIG5vcCB0aGVzZSBvdXQKLQkgKiBmb3IgdW5pcHJvY2Vzc29yLgotCSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBCSVRPUF9QUkVfQkFSUklFUgltZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZAotI2RlZmluZSBCSVRPUF9QT1NUX0JBUlJJRVIJXAotCWJhLHB0CSV4Y2MsIDgwYjsJXAotCW1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKLQotODA6CXJldGwKLQkgbm9wCi0jZWxzZQotI2RlZmluZSBCSVRPUF9QUkVfQkFSUklFUgotI2RlZmluZSBCSVRPUF9QT1NUX0JBUlJJRVIKLSNlbmRpZgotCiAJLmdsb2JsCXRlc3RfYW5kX3NldF9iaXQKIAkudHlwZQl0ZXN0X2FuZF9zZXRfYml0LCNmdW5jdGlvbgogdGVzdF9hbmRfc2V0X2JpdDoJLyogJW8wPW5yLCAlbzE9YWRkciAqLwogCUJBQ0tPRkZfU0VUVVAoJW8zKQotCUJJVE9QX1BSRV9CQVJSSUVSCiAJc3JseAklbzAsIDYsICVnMQogCW1vdgkxLCAlbzIKIAlzbGx4CSVnMSwgMywgJWczCkBAIC00NSw3ICsyNiw2IEBACiAJIGFuZAklZzcsICVvMiwgJWcyCiAJY2xyCSVvMAogCW1vdnJuZQklZzIsIDEsICVvMAotCUJJVE9QX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCiAyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQpAQCAtNTUsNyArMzUsNiBAQAogCS50eXBlCXRlc3RfYW5kX2NsZWFyX2JpdCwjZnVuY3Rpb24KIHRlc3RfYW5kX2NsZWFyX2JpdDoJLyogJW8wPW5yLCAlbzE9YWRkciAqLwogCUJBQ0tPRkZfU0VUVVAoJW8zKQotCUJJVE9QX1BSRV9CQVJSSUVSCiAJc3JseAklbzAsIDYsICVnMQogCW1vdgkxLCAlbzIKIAlzbGx4CSVnMSwgMywgJWczCkBAIC03MCw3ICs0OSw2IEBACiAJIGFuZAklZzcsICVvMiwgJWcyCiAJY2xyCSVvMAogCW1vdnJuZQklZzIsIDEsICVvMAotCUJJVE9QX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCiAyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQpAQCAtODAsNyArNTgsNiBAQAogCS50eXBlCXRlc3RfYW5kX2NoYW5nZV9iaXQsI2Z1bmN0aW9uCiB0ZXN0X2FuZF9jaGFuZ2VfYml0OgkvKiAlbzA9bnIsICVvMT1hZGRyICovCiAJQkFDS09GRl9TRVRVUCglbzMpCi0JQklUT1BfUFJFX0JBUlJJRVIKIAlzcmx4CSVvMCwgNiwgJWcxCiAJbW92CTEsICVvMgogCXNsbHgJJWcxLCAzLCAlZzMKQEAgLTk1LDcgKzcyLDYgQEAKIAkgYW5kCSVnNywgJW8yLCAlZzIKIAljbHIJJW8wCiAJbW92cm5lCSVnMiwgMSwgJW8wCi0JQklUT1BfUE9TVF9CQVJSSUVSCiAJcmV0bAogCSBub3AKIDI6CUJBQ0tPRkZfU1BJTiglbzMsICVvNCwgMWIpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2J6ZXJvLlMgYi9hcmNoL3NwYXJjL2xpYi9iemVyby5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL2J6ZXJvLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2J6ZXJvLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtLlMgYi9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2xpYi9jaGVja3N1bS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NoZWNrc3VtLlMgYi9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV82NC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL2NoZWNrc3VtLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzY0LlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvY2xlYXJfcGFnZS5TIGIvYXJjaC9zcGFyYy9saWIvY2xlYXJfcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL2NsZWFyX3BhZ2UuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvY2xlYXJfcGFnZS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NvcHlfaW5fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvY29weV9pbl91c2VyLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvY29weV9pbl91c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2NvcHlfaW5fdXNlci5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NvcHlfcGFnZS5TIGIvYXJjaC9zcGFyYy9saWIvY29weV9wYWdlLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvY29weV9wYWdlLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2NvcHlfcGFnZS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weS5TIGIvYXJjaC9zcGFyYy9saWIvY3N1bV9jb3B5LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5LlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2NzdW1fY29weS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvc3BhcmMvbGliL2NzdW1fY29weV9mcm9tX3VzZXIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfZnJvbV91c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2NzdW1fY29weV9mcm9tX3VzZXIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvY3N1bV9jb3B5X3RvX3VzZXIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfdG9fdXNlci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9jc3VtX2NvcHlfdG9fdXNlci5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2lwY3N1bS5TIGIvYXJjaC9zcGFyYy9saWIvaXBjc3VtLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvaXBjc3VtLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL2lwY3N1bS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL21jb3VudC5TIGIvYXJjaC9zcGFyYy9saWIvbWNvdW50LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9saWIvbWNvdW50LlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL21jb3VudC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9tZW1jbXAuUyBiL2FyY2gvc3BhcmMvbGliL21lbWNtcC5TCmluZGV4IGNiNGJkYjAuLmVmYTEwNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL21lbWNtcC5TCisrKyBiL2FyY2gvc3BhcmMvbGliL21lbWNtcC5TCkBAIC0xLDMxMiArMSwyNyBAQAorLyogU3BhcmMgb3B0aW1pemVkIG1lbWNtcCBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKwogCS50ZXh0Ci0JLmFsaWduIDQKLQkuZ2xvYmFsIF9fbWVtY21wLCBtZW1jbXAKLV9fbWVtY21wOgotbWVtY21wOgotI2lmIDEKK0VOVFJZKG1lbWNtcCkKIAljbXAJJW8yLCAwCi0JYmxlCUwzCi0JIG1vdgkwLCAlZzMKLUw1OgotCWxkdWIJWyVvMF0sICVnMgorMToJQlJBTkNIMzIoYmUsIHBuLCAyZikKKwkgbm9wCisJbGR1YglbJW8wXSwgJWc3CiAJbGR1YglbJW8xXSwgJWczCi0Jc3ViCSVnMiwgJWczLCAlZzIKLQltb3YJJWcyLCAlZzMKLQlzbGwJJWcyLCAyNCwgJWcyCi0KLQljbXAJJWcyLCAwCi0JYm5lCUwzCi0JIGFkZAklbzAsIDEsICVvMAotCi0JYWRkCSVvMiwgLTEsICVvMgotCi0JY21wCSVvMiwgMAotCWJnCUw1Ci0JIGFkZAklbzEsIDEsICVvMQotTDM6Ci0Jc2xsCSVnMywgMjQsICVvMAotCXNyYQklbzAsIDI0LCAlbzAKLQotCXJldGwKLQkgbm9wCi0jZWxzZQotCXNhdmUJJXNwLCAtMTA0LCAlc3AKLQltb3YJJWkyLCAlbzQKLQltb3YJJWkwLCAlbzAKLQotCWNtcAklbzQsIDE1Ci0JYmxlCUw3MgotCSBtb3YJJWkxLCAlaTIKLQotCWFuZGNjCSVpMiwgMywgJWcwCi0JYmUJTDE2MQotCSBhbmRjYwklbzAsIDMsICVnMgotTDc1OgotCWxkdWIJWyVvMF0sICVnMwotCWxkdWIJWyVpMl0sICVnMgotCWFkZAklbzAsMSwgJW8wCi0KLQlzdWJjYwklZzMsICVnMiwgJWkwCi0JYm5lCUwxNTYKLQkgYWRkCSVpMiwgMSwgJWkyCi0KLQlhbmRjYwklaTIsIDMsICVnMAotCWJuZQlMNzUKLQkgYWRkCSVvNCwgLTEsICVvNAotCi0JYW5kY2MJJW8wLCAzLCAlZzIKLUwxNjE6Ci0JYm5lLGEJTDc4Ci0JIG1vdgklaTIsICVpMQotCi0JbW92CSVvMCwgJWk1Ci0JbW92CSVpMiwgJWkzCi0Jc3JsCSVvNCwgMiwgJWk0Ci0KLQljbXAJJWk0LCAwCi0JYmdlCUw5MwotCSBtb3YJJWk0LCAlZzIKLQotCWFkZCAlaTQsIDMsICVnMgotTDkzOgotCXNyYQklZzIsIDIsICVnMgotCXNsbAklZzIsIDIsICVnMgotCXN1YgklaTQsICVnMiwgJWcyCi0KLQljbXAJJWcyLCAxCi0JYmUsYQlMODgKLQkgYWRkCSVvMCwgNCwgJWk1Ci0KLQliZwlMOTQKLQkgY21wCSVnMiwgMgotCi0JY21wCSVnMiwgMAotCWJlLGEJTDg2Ci0JIGxkCVslbzBdLCAlZzMKLQotCWIJTDE2MgotCSBsZAlbJWk1XSwgJWczCi1MOTQ6Ci0JYmUJTDgxCi0JIGNtcAklZzIsIDMKLQotCWJlLGEJTDgzCi0JIGFkZAklbzAsIC00LCAlaTUKLQotCWIJTDE2MgotCSBsZAlbJWk1XSwgJWczCi1MODE6Ci0JYWRkCSVvMCwgLTgsICVpNQotCWxkCVslbzBdLCAlZzMKLQlhZGQJJWkyLCAtOCwgJWkzCi0JbGQJWyVpMl0sICVnMgotCi0JYglMODIKLQkgYWRkCSVpNCwgMiwgJWk0Ci1MODM6Ci0JbGQJWyVvMF0sICVnNAotCWFkZAklaTIsIC00LCAlaTMKLQlsZAlbJWkyXSwgJWcxCi0KLQliCUw4NAotCSBhZGQJJWk0LCAxLCAlaTQKLUw4NjoKLQliCUw4NwotCSBsZAlbJWkyXSwgJWcyCi1MODg6Ci0JYWRkCSVpMiwgNCwgJWkzCi0JbGQJWyVvMF0sICVnNAotCWFkZAklaTQsIC0xLCAlaTQKLQlsZAlbJWkyXSwgJWcxCi1MOTU6Ci0JbGQJWyVpNV0sICVnMwotTDE2MjoKLQljbXAJJWc0LCAlZzEKLQliZQlMODcKLQkgbGQJWyVpM10sICVnMgotCi0JY21wCSVnNCwgJWcxCi1MMTYzOgotCWJsZXUJTDExNAotCSBtb3YJLTEsICVpMAotCi0JYglMMTE0Ci0JIG1vdgkxLCAlaTAKLUw4NzoKLQlsZAlbJWk1ICsgNF0sICVnNAotCWNtcAklZzMsICVnMgotCWJuZQlMMTYzCi0JIGxkCVslaTMgKyA0XSwgJWcxCi1MODQ6Ci0JbGQJWyVpNSArIDhdLCAlZzMKLQotCWNtcAklZzQsICVnMQotCWJuZQlMMTYzCi0JIGxkCVslaTMgKyA4XSwgJWcyCi1MODI6Ci0JbGQJWyVpNSArIDEyXSwgJWc0Ci0JY21wCSVnMywgJWcyCi0JYm5lCUwxNjMKLQkgbGQJWyVpMyArIDEyXSwgJWcxCi0KLQlhZGQJJWk1LCAxNiwgJWk1Ci0KLQlhZGRjYwklaTQsIC00LCAlaTQKLQlibmUJTDk1Ci0JIGFkZAklaTMsIDE2LCAlaTMKLQotCWNtcAklZzQsICVnMQotCWJuZQlMMTYzCi0JIG5vcAotCi0JYglMMTE0Ci0JIG1vdgkwLCAlaTAKLUw3ODoKLQlzcmwJJW80LCAyLCAlaTAKLQlhbmQJJW8wLCAtNCwgJWkzCi0Jb3JjYwklaTAsICVnMCwgJWczCi0Jc2xsCSVnMiwgMywgJW83Ci0JbW92CTMyLCAlZzIKLQotCWJnZQlMMTI5Ci0JIHN1YgklZzIsICVvNywgJW8xCi0KLQlhZGQJJWkwLCAzLCAlZzMKLUwxMjk6Ci0Jc3JhCSVnMywgMiwgJWcyCi0Jc2xsCSVnMiwgMiwgJWcyCi0Jc3ViCSVpMCwgJWcyLCAlZzIKLQotCWNtcAklZzIsIDEKLQliZSxhCUwxMjQKLQkgbGQJWyVpM10sICVvMwotCi0JYmcJTDEzMAotCSBjbXAJJWcyLCAyCi0KLQljbXAJJWcyLCAwCi0JYmUsYQlMMTIyCi0JIGxkCVslaTNdLCAlbzIKLQotCWIJTDE2NAotCXNsbAklbzMsICVvNywgJWczCi1MMTMwOgotCWJlCUwxMTcKLQkgY21wCSVnMiwgMwotCi0JYmUsYQlMMTE5Ci0JIGxkCVslaTNdLCAlZzEKLQotCWIJTDE2NAotCSBzbGwJJW8zLCAlbzcsICVnMwotTDExNzoKLQlsZAlbJWkzXSwgJWc0Ci0JYWRkCSVpMiwgLTgsICVpMQotCWxkCVslaTMgKyA0XSwgJW8zCi0JYWRkCSVpMCwgMiwgJWkwCi0JbGQJWyVpMl0sICVpNAotCi0JYglMMTE4Ci0JIGFkZAklaTMsIC00LCAlaTMKLUwxMTk6Ci0JbGQJWyVpMyArIDRdLCAlZzQKLQlhZGQJJWkyLCAtNCwgJWkxCi0JbGQJWyVpMl0sICVpNQotCi0JYglMMTIwCi0JIGFkZAklaTAsIDEsICVpMAotTDEyMjoKLQlsZAlbJWkzICsgNF0sICVnMQotCWxkCVslaTJdLCAlaTQKLQotCWIJTDEyMwotCSBhZGQJJWkzLCA0LCAlaTMKLUwxMjQ6Ci0JYWRkCSVpMiwgNCwgJWkxCi0JbGQJWyVpMyArIDRdLCAlbzIKLQlhZGQJJWkwLCAtMSwgJWkwCi0JbGQJWyVpMl0sICVpNQotCWFkZAklaTMsIDgsICVpMwotTDEzMToKLQlzbGwJJW8zLCAlbzcsICVnMwotTDE2NDoKLQlzcmwJJW8yLCAlbzEsICVnMgotCWxkCVslaTNdLCAlZzEKLQlvcgklZzMsICVnMiwgJWczCi0KLQljbXAJJWczLCAlaTUKLQlibmUJTDE2MwotCSBsZAlbJWkxXSwgJWk0Ci1MMTIzOgotCXNsbAklbzIsICVvNywgJWczCi0Jc3JsCSVnMSwgJW8xLCAlZzIKLQlsZAlbJWkzICsgNF0sICVnNAotCW9yCSVnMywgJWcyLCAlZzMKLQotCWNtcAklZzMsICVpNAotCWJuZQlMMTYzCi0JIGxkCVslaTEgKyA0XSwgJWk1Ci1MMTIwOgotCXNsbAklZzEsICVvNywgJWczCi0Jc3JsCSVnNCwgJW8xLCAlZzIKLQlsZAlbJWkzICsgOF0sICVvMwotCW9yCSVnMywgJWcyLCAlZzMKLQotCWNtcAklZzMsICVpNQotCWJuZQlMMTYzCi0JIGxkCVslaTEgKyA4XSwgJWk0Ci1MMTE4OgotCXNsbAklZzQsICVvNywgJWczCi0Jc3JsCSVvMywgJW8xLCAlZzIKLQlsZAlbJWkzICsgMTJdLCAlbzIKLQlvcgklZzMsICVnMiwgJWczCi0KLQljbXAJJWczLCAlaTQKLQlibmUJTDE2MwotCSBsZAlbJWkxICsgMTJdLCAlaTUKLQotCWFkZAklaTMsIDE2LCAlaTMKLQlhZGRjYwklaTAsIC00LCAlaTAKLQlibmUJTDEzMQotCSBhZGQJJWkxLCAxNiwgJWkxCi0KLQlzbGwJJW8zLCAlbzcsICVnMwotCXNybAklbzIsICVvMSwgJWcyCi0Jb3IJJWczLCAlZzIsICVnMwotCi0JY21wCSVnMywgJWk1Ci0JYmUsYQlMMTE0Ci0JIG1vdgkwLCAlaTAKLQotCWIsYSBMMTYzCi1MMTE0OgotCWNtcAklaTAsIDAKLQlibmUJTDE1NgotCSBhbmQJJW80LCAtNCwgJWcyCi0KLQlhZGQJJW8wLCAlZzIsICVvMAotCWFkZAklaTIsICVnMiwgJWkyCi0JYW5kCSVvNCwgMywgJW80Ci1MNzI6Ci0JY21wCSVvNCwgMAotCWJlCUwxNTYKLQkgbW92CTAsICVpMAotCi0JbGR1YglbJW8wXSwgJWczCi1MMTY1OgotCWxkdWIJWyVpMl0sICVnMgorCXN1YgklbzIsIDEsICVvMgogCWFkZAklbzAsIDEsICVvMAotCi0Jc3ViY2MJJWczLCAlZzIsICVpMAotCWJuZQlMMTU2Ci0JIGFkZAklaTIsIDEsICVpMgotCi0JYWRkY2MJJW80LCAtMSwgJW80Ci0JYm5lLGEJTDE2NQotCSBsZHViCVslbzBdLCAlZzMKLQotCW1vdgkwLCAlaTAKLUwxNTY6Ci0JcmV0Ci0JcmVzdG9yZQotI2VuZGlmCisJYWRkCSVvMSwgMSwgJW8xCisJc3ViY2MJJWc3LCAlZzMsICVnMworCUJSQU5DSDMyKGJlLCBwdCwgMWIpCisJIGNtcAklbzIsIDAKKwlyZXRsCisJIG1vdgklZzMsICVvMAorMjoJcmV0bAorCSBtb3YJMCwgJW8wCitFTkRQUk9DKG1lbWNtcCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvbWVtbW92ZS5TIGIvYXJjaC9zcGFyYy9saWIvbWVtbW92ZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL21lbW1vdmUuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvbWVtbW92ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9tZW1zY2FuLlMgYi9hcmNoL3NwYXJjL2xpYi9tZW1zY2FuXzMyLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvbGliL21lbXNjYW4uUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvbWVtc2Nhbl8zMi5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL21lbXNjYW4uUyBiL2FyY2gvc3BhcmMvbGliL21lbXNjYW5fNjQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9tZW1zY2FuLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL21lbXNjYW5fNjQuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvcndzZW0uUyBiL2FyY2gvc3BhcmMvbGliL3J3c2VtXzMyLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvbGliL3J3c2VtLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL3J3c2VtXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvcndzZW0uUyBiL2FyY2gvc3BhcmMvbGliL3J3c2VtXzY0LlMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9yd3NlbS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9yd3NlbV82NC5TCmluZGV4IDFhNGNjNTYuLjkxYTdkMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvcndzZW0uUworKysgYi9hcmNoL3NwYXJjL2xpYi9yd3NlbV82NC5TCkBAIC0xNyw3ICsxNyw2IEBACiAJYm5lLHBuCQklaWNjLCAxYgogCSBhZGQJCSVnNywgMSwgJWc3CiAJY21wCQklZzcsIDAKLQltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZQogCWJsLHBuCQklaWNjLCAzZgogCSBub3AKIDI6CkBAIC00Miw3ICs0MSw2IEBACiAJY21wCQklZzEsICVnNwogCWJuZSxwbgkJJWljYywgMWIKIAkgbW92CQkxLCAlbzEKLQltZW1iYXIJCSNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZQogMjoJcmV0bAogCSBtb3YJCSVvMSwgJW8wCiAJLnNpemUJCV9fZG93bl9yZWFkX3RyeWxvY2ssIC4tX19kb3duX3JlYWRfdHJ5bG9jawpAQCAtNTgsNyArNTYsNiBAQAogCWNtcAkJJWczLCAlZzcKIAlibmUscG4JCSVpY2MsIDFiCiAJIGNtcAkJJWc3LCAwCi0JbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKIAlibmUscG4JCSVpY2MsIDNmCiAJIG5vcAogMjoJcmV0bApAQCAtODUsNyArODIsNiBAQAogCWNtcAkJJWczLCAlZzcKIAlibmUscG4JCSVpY2MsIDFiCiAJIG1vdgkJMSwgJW8xCi0JbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKIDI6CXJldGwKIAkgbW92CQklbzEsICVvMAogCS5zaXplCQlfX2Rvd25fd3JpdGVfdHJ5bG9jaywgLi1fX2Rvd25fd3JpdGVfdHJ5bG9jawpAQCAtOTksNyArOTUsNiBAQAogCWNtcAkJJWcxLCAlZzcKIAlibmUscG4JCSVpY2MsIDFiCiAJIGNtcAkJJWc3LCAwCi0JbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKIAlibCxwbgkJJWljYywgM2YKIAkgbm9wCiAyOglyZXRsCkBAIC0xMjksNyArMTI0LDYgQEAKIAlibmUscG4JCSVpY2MsIDFiCiAJIHN1YgkJJWc3LCAlZzEsICVnNwogCWNtcAkJJWc3LCAwCi0JbWVtYmFyCQkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKIAlibCxwbgkJJWljYywgM2YKIAkgbm9wCiAyOgpAQCAtMTU1LDcgKzE0OSw2IEBACiAJYm5lLHBuCQklaWNjLCAxYgogCSBzdWIJCSVnNywgJWcxLCAlZzcKIAljbXAJCSVnNywgMAotCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlCiAJYmwscG4JCSVpY2MsIDNmCiAJIG5vcAogMjoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL3N0cmxlbi5TIGIvYXJjaC9zcGFyYy9saWIvc3RybGVuLlMKaW5kZXggZWQ5YTc2My4uNTM2ZjgzNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvc3RybGVuLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvc3RybGVuLlMKQEAgLTEsNTEgKzEsNDAgQEAKIC8qIHN0cmxlbi5TOiBTcGFyYyBvcHRpbWl6ZWQgc3RybGVuIGNvZGUKICAqIEhhbmQgb3B0aW1pemVkIGZyb20gR05VIGxpYmMncyBzdHJsZW4KICAqIENvcHlyaWdodCAoQykgMTk5MSwxOTk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5NiBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQorICogQ29weXJpZ2h0IChDKSAxOTk2LDIwMDggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisKICNkZWZpbmUgTE9fTUFHSUMgMHgwMTAxMDEwMQogI2RlZmluZSBISV9NQUdJQyAweDgwODA4MDgwCiAKLTA6Ci0JbGR1YglbJW8wXSwgJW81Ci0JY21wCSVvNSwgMAotCWJlCTFmCi0JIGFkZAklbzAsIDEsICVvMAotCWFuZGNjCSVvMCwgMywgJWcwCi0JYmUJNGYKLQkgb3IJJW80LCAlbG8oSElfTUFHSUMpLCAlbzMKLQlsZHViCVslbzBdLCAlbzUKLQljbXAJJW81LCAwCi0JYmUJMmYKLQkgYWRkCSVvMCwgMSwgJW8wCi0JYW5kY2MJJW8wLCAzLCAlZzAKLQliZQk1ZgotCSBzZXRoaQklaGkoTE9fTUFHSUMpLCAlbzQKLQlsZHViCVslbzBdLCAlbzUKLQljbXAJJW81LCAwCi0JYmUJM2YKLQkgYWRkCSVvMCwgMSwgJW8wCi0JYgk4ZgotCSBvcgklbzQsICVsbyhMT19NQUdJQyksICVvMgotMToKLQlyZXRsCi0JIG1vdgkwLCAlbzAKLTI6Ci0JcmV0bAotCSBtb3YJMSwgJW8wCi0zOgotCXJldGwKLQkgbW92CTIsICVvMAotCi0JLmFsaWduIDQKLQkuZ2xvYmFsIHN0cmxlbgotc3RybGVuOgorCS50ZXh0CitFTlRSWShzdHJsZW4pCiAJbW92CSVvMCwgJW8xCiAJYW5kY2MJJW8wLCAzLCAlZzAKLQlibmUJMGIKKwlCUkFOQ0gzMihiZSwgcHQsIDlmKQogCSBzZXRoaQklaGkoSElfTUFHSUMpLCAlbzQKKwlsZHViCVslbzBdLCAlbzUKKwlCUkFOQ0hfUkVHX1pFUk8ocG4sICVvNSwgMTFmKQorCSBhZGQJJW8wLCAxLCAlbzAKKwlhbmRjYwklbzAsIDMsICVnMAorCUJSQU5DSDMyKGJlLCBwbiwgNGYpCisJIG9yCSVvNCwgJWxvKEhJX01BR0lDKSwgJW8zCisJbGR1YglbJW8wXSwgJW81CisJQlJBTkNIX1JFR19aRVJPKHBuLCAlbzUsIDEyZikKKwkgYWRkCSVvMCwgMSwgJW8wCisJYW5kY2MJJW8wLCAzLCAlZzAKKwlCUkFOQ0gzMihiZSwgcHQsIDVmKQorCSBzZXRoaQklaGkoTE9fTUFHSUMpLCAlbzQKKwlsZHViCVslbzBdLCAlbzUKKwlCUkFOQ0hfUkVHX1pFUk8ocG4sICVvNSwgMTNmKQorCSBhZGQJJW8wLCAxLCAlbzAKKwlCUkFOQ0gzMihiYSwgcHQsIDhmKQorCSBvcgklbzQsICVsbyhMT19NQUdJQyksICVvMgorOToKIAlvcgklbzQsICVsbyhISV9NQUdJQyksICVvMwogNDoKIAlzZXRoaQklaGkoTE9fTUFHSUMpLCAlbzQKQEAgLTU2LDI2ICs0NSwzNiBAQAogMjoKIAlzdWIJJW81LCAlbzIsICVvNAogCWFuZGNjCSVvNCwgJW8zLCAlZzAKLQliZQk4YgorCUJSQU5DSDMyKGJlLCBwdCwgOGIpCiAJIGFkZAklbzAsIDQsICVvMAogCiAJLyogQ2hlY2sgZXZlcnkgYnl0ZS4gKi8KLQlzcmwJJW81LCAyNCwgJWc1Ci0JYW5kY2MJJWc1LCAweGZmLCAlZzAKLQliZQkxZgorCXNybAklbzUsIDI0LCAlZzcKKwlhbmRjYwklZzcsIDB4ZmYsICVnMAorCUJSQU5DSDMyKGJlLCBwbiwgMWYpCiAJIGFkZAklbzAsIC00LCAlbzQKLQlzcmwJJW81LCAxNiwgJWc1Ci0JYW5kY2MJJWc1LCAweGZmLCAlZzAKLQliZQkxZgorCXNybAklbzUsIDE2LCAlZzcKKwlhbmRjYwklZzcsIDB4ZmYsICVnMAorCUJSQU5DSDMyKGJlLCBwbiwgMWYpCiAJIGFkZAklbzQsIDEsICVvNAotCXNybAklbzUsIDgsICVnNQotCWFuZGNjCSVnNSwgMHhmZiwgJWcwCi0JYmUJMWYKKwlzcmwJJW81LCA4LCAlZzcKKwlhbmRjYwklZzcsIDB4ZmYsICVnMAorCUJSQU5DSDMyKGJlLCBwbiwgMWYpCiAJIGFkZAklbzQsIDEsICVvNAogCWFuZGNjCSVvNSwgMHhmZiwgJWcwCi0JYm5lLGEJMmIKKwlCUkFOQ0gzMl9BTk5VTChibmUsIHB0LCAyYikKIAkgbGQJWyVvMF0sICVvNQogCWFkZAklbzQsIDEsICVvNAogMToKIAlyZXRsCiAJIHN1YgklbzQsICVvMSwgJW8wCisxMToKKwlyZXRsCisJIG1vdgkwLCAlbzAKKzEyOgorCXJldGwKKwkgbW92CTEsICVvMAorMTM6CisJcmV0bAorCSBtb3YJMiwgJW8wCitFTkRQUk9DKHN0cmxlbikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL3N0cmxlbl91c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9zdHJsZW5fdXNlcl8zMi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL2xpYi9zdHJsZW5fdXNlci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9zdHJsZW5fdXNlcl8zMi5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL3N0cmxlbl91c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9zdHJsZW5fdXNlcl82NC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL3N0cmxlbl91c2VyLlMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL3N0cmxlbl91c2VyXzY0LlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL3N0cm5jbXAuUyBiL2FyY2gvc3BhcmMvbGliL3N0cm5jbXBfMzIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9saWIvc3RybmNtcC5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9zdHJuY21wXzMyLlMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvc3RybmNtcC5TIGIvYXJjaC9zcGFyYy9saWIvc3RybmNtcF82NC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL3N0cm5jbXAuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvc3RybmNtcF82NC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvc3RybmNweV9mcm9tX3VzZXJfMzIuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9saWIvc3RybmNweV9mcm9tX3VzZXIuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9saWIvc3RybmNweV9mcm9tX3VzZXJfMzIuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvc3RybmNweV9mcm9tX3VzZXJfNjQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi9zdHJuY3B5X2Zyb21fdXNlcl82NC5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL3VzZXJfZml4dXAuYyBiL2FyY2gvc3BhcmMvbGliL3VzZXJfZml4dXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L2xpYi91c2VyX2ZpeHVwLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbGliL3VzZXJfZml4dXAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi94b3IuUyBiL2FyY2gvc3BhcmMvbGliL3hvci5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbGliL3hvci5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL2xpYi94b3IuUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggODEzNjk4Ny4uYjkwODVlYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEZQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24uCiAjCiAKLW9iai15ICAgIDo9IG1hdGgubworIyBzdXByZXNzIGFsbCB3YXJuaW5ncyAtIGFzIG1hdGguYyBwcm9kdWNlcyBhIGxvdCEKK2NjZmxhZ3MteSA6PSAtdwogCi1FWFRSQV9BRkxBR1MgOj0gLWFuc2kKLUVYVFJBX0NGTEFHUyA9IC1JLiAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKK29iai15ICAgIDo9IG1hdGhfJChCSVRTKS5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21hdGgtZW11L2FzaGxkaTMuUyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvYXNobGRpMy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjMwZmY1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvbWF0aC1lbXUvYXNobGRpMy5TCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIGFzaGxkaTMuUzoJTWF0aC1lbXUgY29kZSBjcmVhdGVzIGFsbCBraW5kcyBvZiByZWZlcmVuY2VzIHRvCi0gKiAgICAgICAgICAgICAgdGhpcyBsaXR0bGUgcm91dGluZSBvbiB0aGUgc3BhcmMgd2l0aCBnY2MuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsoampAdWx0cmEubGludXguY3opCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9jcHJlZml4Lmg+Ci0KLQkuZ2xvYmwgQ19MQUJFTChfX2FzaGxkaTMpCi1DX0xBQkVMKF9fYXNobGRpMyk6Ci0JdHN0CSVvMgotCWJlCTNmCi0JIG1vdgkzMiwgJWcyCi0KLQlzdWIJJWcyLCAlbzIsICVnMgotCi0JdHN0CSVnMgotCWJnCTFmCi0JIHNybAklbzEsICVnMiwgJWczCi0KLQljbHIJJW81Ci0JbmVnCSVnMgotCWJhCTJmCi0JIHNsbAklbzEsICVnMiwgJW80Ci0KLTE6Ci0Jc2xsCSVvMSwgJW8yLCAlbzUKLQlzcmwJJW8wLCAlbzIsICVnMgotCW9yCSVnMiwgJWczLCAlbzQKLTI6Ci0JbW92CSVvNCwgJW8wCi0JbW92CSVvNSwgJW8xCi0zOgotCWptcGwJJW83ICsgOCwgJWcwCi0JIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3NwYXJjL21hdGgtZW11L21hdGhfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL21hdGgtZW11L21hdGguYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoXzMyLmMKaW5kZXggODYxM2IzZS4uZTEzZjY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoXzMyLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzZnAtdXRpbC5oIgorI2luY2x1ZGUgInNmcC11dGlsXzMyLmgiCiAjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21hdGgtZW11L21hdGguYyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvbWF0aF82NC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9tYXRoLWVtdS9tYXRoLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbWF0aC1lbXUvbWF0aF82NC5jCmluZGV4IGFkZDA1M2UuLjY4NjNjOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9tYXRoXzY0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNmcC11dGlsLmgiCisjaW5jbHVkZSAic2ZwLXV0aWxfNjQuaCIKICNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21hdGgtZW11L3NmcC11dGlsLmggYi9hcmNoL3NwYXJjL21hdGgtZW11L3NmcC11dGlsXzMyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvbWF0aC1lbXUvc2ZwLXV0aWwuaApyZW5hbWUgdG8gYXJjaC9zcGFyYy9tYXRoLWVtdS9zZnAtdXRpbF8zMi5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbWF0aC1lbXUvc2ZwLXV0aWwuaCBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvc2ZwLXV0aWxfNjQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L21hdGgtZW11L3NmcC11dGlsLmgKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbWF0aC1lbXUvc2ZwLXV0aWxfNjQuaApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvbW0vTWFrZWZpbGUKaW5kZXggZWE4ODk1NS4uNjgxYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL21tL01ha2VmaWxlCkBAIC0xLDE3ICsxLDI1IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXggU3BhcmMtc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgogIwogCi1FWFRSQV9BRkxBR1MgOj0gLWFuc2kKK2FzZmxhZ3MteSA6PSAtYW5zaQorY2NmbGFncy15IDo9IC1XZXJyb3IKIAotb2JqLXkJOj0gZmF1bHQubyBpbml0Lm8gbG9hZG1tdS5vIGdlbmVyaWMubyBleHRhYmxlLm8gYnRmaXh1cC5vIFwKLQkgICAgc3JtbXUubyBpb21tdS5vIGlvLXVuaXQubyBoeXBlcnNwYXJjLm8gdmlraW5nLm8gdHN1bmFtaS5vIHN3aWZ0Lm8KK29iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHVsdHJhLm8gdGxiLm8gdHNiLm8KK29iai15ICAgICAgICAgICAgICAgICAgICs9IGZhdWx0XyQoQklUUykubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gaW5pdF8kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGxvYWRtbXUubworb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gZ2VuZXJpY18kKEJJVFMpLm8KK29iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGV4dGFibGUubyBidGZpeHVwLm8gc3JtbXUubyBpb21tdS5vIGlvLXVuaXQubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gaHlwZXJzcGFyYy5vIHZpa2luZy5vIHRzdW5hbWkubyBzd2lmdC5vCiAKLWlmZGVmIENPTkZJR19ISUdITUVNCi1vYmoteQkrPSBoaWdobWVtLm8KLWVuZGlmCisjIE9ubHkgdXNlZCBieSBzcGFyYzY0CitvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCisKKyMgT25seSB1c2VkIGJ5IHNwYXJjMzIKK29iai0kKENPTkZJR19ISUdITUVNKSAgICs9IGhpZ2htZW0ubwogCiBpZmRlZiBDT05GSUdfU01QCi1vYmoteSAgICs9IG5vc3VuNGMubworb2JqLSQoQ09ORklHX1NQQVJDMzIpICs9IG5vc3VuNGMubwogZWxzZQotb2JqLXkgICArPSBzdW40Yy5vCitvYmotJChDT05GSUdfU1BBUkMzMikgKz0gc3VuNGMubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9tbS9mYXVsdC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2dlbmVyaWMuYyBiL2FyY2gvc3BhcmMvbW0vZ2VuZXJpY18zMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL21tL2dlbmVyaWMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS9nZW5lcmljXzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9nZW5lcmljLmMgYi9hcmNoL3NwYXJjL21tL2dlbmVyaWNfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L21tL2dlbmVyaWMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS9nZW5lcmljXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvbW0vaHVnZXRsYnBhZ2UuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvbW0vaW5pdC5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL21tL2luaXRfMzIuYwppbmRleCA2NzdjMWUxLi5mZWM5MjYwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KIAorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdmFjLW9wcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC00OCw5ICs0OSw2IEBACiAKIHN0cnVjdCBwZ3RhYmxlX2NhY2hlX3N0cnVjdCBwZ3RfcXVpY2tsaXN0czsKIAotLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KLWV4dGVybiBjaGFyIF9faW5pdF9iZWdpbiwgX19pbml0X2VuZCwgX3N0YXJ0LCBfZW5kLCBldGV4dCAsIGVkYXRhOwotCiAvKiBJbml0aWFsIHJhbWRpc2sgc2V0dXAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmNfcmFtZGlza19pbWFnZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3BhcmNfcmFtZGlza19zaXplOwpAQCAtNDUwLDkgKzQ0OCw5IEBACiAJCiAJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwogCi0JY29kZXBhZ2VzID0gKCgodW5zaWduZWQgbG9uZykgJmV0ZXh0KSAtICgodW5zaWduZWQgbG9uZykmX3N0YXJ0KSk7CisJY29kZXBhZ2VzID0gKCgodW5zaWduZWQgbG9uZykgJl9ldGV4dCkgLSAoKHVuc2lnbmVkIGxvbmcpJl9zdGFydCkpOwogCWNvZGVwYWdlcyA9IFBBR0VfQUxJR04oY29kZXBhZ2VzKSA+PiBQQUdFX1NISUZUOwotCWRhdGFwYWdlcyA9ICgoKHVuc2lnbmVkIGxvbmcpICZlZGF0YSkgLSAoKHVuc2lnbmVkIGxvbmcpJmV0ZXh0KSk7CisJZGF0YXBhZ2VzID0gKCgodW5zaWduZWQgbG9uZykgJl9lZGF0YSkgLSAoKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCkpOwogCWRhdGFwYWdlcyA9IFBBR0VfQUxJR04oZGF0YXBhZ2VzKSA+PiBQQUdFX1NISUZUOwogCWluaXRwYWdlcyA9ICgoKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kKSAtICgodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbikpOwogCWluaXRwYWdlcyA9IFBBR0VfQUxJR04oaW5pdHBhZ2VzKSA+PiBQQUdFX1NISUZUOwpAQCAtNDc2LDggKzQ3NCwxMCBAQAogdm9pZCBmcmVlX2luaXRtZW0gKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgZnJlZWQ7CiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOworCWZyZWVkID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSAtIGFkZHI7CiAJZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlzdHJ1Y3QgcGFnZSAqcDsKIApAQCAtNDkwLDggKzQ5MCw4IEBACiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCW51bV9waHlzcGFnZXMrKzsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWRrIGZyZWVkXG4iLAotCQkoJl9faW5pdF9lbmQgLSAmX19pbml0X2JlZ2luKSA+PiAxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWxkayBmcmVlZFxuIiwKKwkJZnJlZWQgPj4gMTApOwogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L21tL2luaXQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggMTg1ZjM0Ni4uNmVhNzNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2luaXQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImluaXRfNjQuaCIKIAogdW5zaWduZWQgbG9uZyBrZXJuX2xpbmVhcl9wdGVfeG9yWzJdIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTIxNCw3ICsyMTQsNiBAQAogCQkJICAgICAib3IJJSVnMSwgJTAsICUlZzFcblx0IgogCQkJICAgICAiY2FzeAlbJTJdLCAlJWc3LCAlJWcxXG5cdCIKIAkJCSAgICAgImNtcAklJWc3LCAlJWcxXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcblx0IgogCQkJICAgICAiYm5lLHBuCSUleGNjLCAxYlxuXHQiCiAJCQkgICAgICIgbm9wIgogCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KQEAgLTIzNiw3ICsyMzUsNiBAQAogCQkJICAgICAiIGFuZG4JJSVnNywgJTEsICUlZzFcblx0IgogCQkJICAgICAiY2FzeAlbJTJdLCAlJWc3LCAlJWcxXG5cdCIKIAkJCSAgICAgImNtcAklJWc3LCAlJWcxXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcblx0IgogCQkJICAgICAiYm5lLHBuCSUleGNjLCAxYlxuXHQiCiAJCQkgICAgICIgbm9wXG4iCiAJCQkgICAgICIyOiIKQEAgLTk1Niw3ICs5NTQsNyBAQAogCXJldHVybiBuaWQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfbm9kZV9yYW5nZXModm9pZCkKK3N0YXRpYyB2b2lkIGFkZF9ub2RlX3Jhbmdlcyh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5oIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9tbS9pbml0LmgKcmVuYW1lIHRvIGFyY2gvc3BhcmMvbW0vaW5pdF82NC5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYyBiL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCmluZGV4IGRhYWRmNWYuLjAwNWU3NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW8tdW5pdC5jCkBAIC0xNTYsOCArMTU2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW91bml0LT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKHN6ICE9IDApIHsKIAkJLS1zejsKLQkJc2ctPmR2bWFfYWRkcmVzcyA9IGlvdW5pdF9nZXRfYXJlYShpb3VuaXQsICh1bnNpZ25lZCBsb25nKSBzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCk7Ci0JCXNnLT5kdm1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CisJCXNnLT5kbWFfYWRkcmVzcyA9IGlvdW5pdF9nZXRfYXJlYShpb3VuaXQsICh1bnNpZ25lZCBsb25nKSBzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCk7CisJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJc2cgPSBzZ19uZXh0KHNnKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW91bml0LT5sb2NrLCBmbGFncyk7CkBAIC0xODYsOCArMTg2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW91bml0LT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKHN6ICE9IDApIHsKIAkJLS1zejsKLQkJbGVuID0gKChzZy0+ZHZtYV9hZGRyZXNzICYgflBBR0VfTUFTSykgKyBzZy0+bGVuZ3RoICsgKFBBR0VfU0laRS0xKSkgPj4gUEFHRV9TSElGVDsKLQkJdmFkZHIgPSAoc2ctPmR2bWFfYWRkcmVzcyAtIElPVU5JVF9ETUFfQkFTRSkgPj4gUEFHRV9TSElGVDsKKwkJbGVuID0gKChzZy0+ZG1hX2FkZHJlc3MgJiB+UEFHRV9NQVNLKSArIHNnLT5sZW5ndGggKyAoUEFHRV9TSVpFLTEpKSA+PiBQQUdFX1NISUZUOworCQl2YWRkciA9IChzZy0+ZG1hX2FkZHJlc3MgLSBJT1VOSVRfRE1BX0JBU0UpID4+IFBBR0VfU0hJRlQ7CiAJCUlPRCgoImlvdW5pdF9yZWxlYXNlICUwOGx4LSUwOGx4XG4iLCAobG9uZyl2YWRkciwgKGxvbmcpbGVuK3ZhZGRyKSk7CiAJCWZvciAobGVuICs9IHZhZGRyOyB2YWRkciA8IGxlbjsgdmFkZHIrKykKIAkJCWNsZWFyX2JpdCh2YWRkciwgaW91bml0LT5ibWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW9tbXUuYyBiL2FyY2gvc3BhcmMvbW0vaW9tbXUuYwppbmRleCBlN2E0OTllLi5iMmU2ZTczIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pb21tdS5jCkBAIC0yNDUsOCArMjQ1LDggQEAKIAl3aGlsZSAoc3ogIT0gMCkgewogCQktLXN6OwogCQluID0gKHNnLT5sZW5ndGggKyBzZy0+b2Zmc2V0ICsgUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQ7Ci0JCXNnLT5kdm1hX2FkZHJlc3MgPSBpb21tdV9nZXRfb25lKGRldiwgc2dfcGFnZShzZyksIG4pICsgc2ctPm9mZnNldDsKLQkJc2ctPmR2bWFfbGVuZ3RoID0gKF9fdTMyKSBzZy0+bGVuZ3RoOworCQlzZy0+ZG1hX2FkZHJlc3MgPSBpb21tdV9nZXRfb25lKGRldiwgc2dfcGFnZShzZyksIG4pICsgc2ctPm9mZnNldDsKKwkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCQlzZyA9IHNnX25leHQoc2cpOwogCX0KIH0KQEAgLTI1OSw4ICsyNTksOCBAQAogCXdoaWxlIChzeiAhPSAwKSB7CiAJCS0tc3o7CiAJCW4gPSAoc2ctPmxlbmd0aCArIHNnLT5vZmZzZXQgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQkJc2ctPmR2bWFfYWRkcmVzcyA9IGlvbW11X2dldF9vbmUoZGV2LCBzZ19wYWdlKHNnKSwgbikgKyBzZy0+b2Zmc2V0OwotCQlzZy0+ZHZtYV9sZW5ndGggPSAoX191MzIpIHNnLT5sZW5ndGg7CisJCXNnLT5kbWFfYWRkcmVzcyA9IGlvbW11X2dldF9vbmUoZGV2LCBzZ19wYWdlKHNnKSwgbikgKyBzZy0+b2Zmc2V0OworCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CiAJCXNnID0gc2dfbmV4dChzZyk7CiAJfQogfQpAQCAtMjkwLDggKzI5MCw4IEBACiAJCQl9CiAJCX0KIAotCQlzZy0+ZHZtYV9hZGRyZXNzID0gaW9tbXVfZ2V0X29uZShkZXYsIHNnX3BhZ2Uoc2cpLCBuKSArIHNnLT5vZmZzZXQ7Ci0JCXNnLT5kdm1hX2xlbmd0aCA9IChfX3UzMikgc2ctPmxlbmd0aDsKKwkJc2ctPmRtYV9hZGRyZXNzID0gaW9tbXVfZ2V0X29uZShkZXYsIHNnX3BhZ2Uoc2cpLCBuKSArIHNnLT5vZmZzZXQ7CisJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJc2cgPSBzZ19uZXh0KHNnKTsKIAl9CiB9CkBAIC0zMzAsOCArMzMwLDggQEAKIAkJLS1zejsKIAogCQluID0gKHNnLT5sZW5ndGggKyBzZy0+b2Zmc2V0ICsgUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQ7Ci0JCWlvbW11X3JlbGVhc2Vfb25lKGRldiwgc2ctPmR2bWFfYWRkcmVzcyAmIFBBR0VfTUFTSywgbik7Ci0JCXNnLT5kdm1hX2FkZHJlc3MgPSAweDIxMjEyMTIxOworCQlpb21tdV9yZWxlYXNlX29uZShkZXYsIHNnLT5kbWFfYWRkcmVzcyAmIFBBR0VfTUFTSywgbik7CisJCXNnLT5kbWFfYWRkcmVzcyA9IDB4MjEyMTIxMjE7CiAJCXNnID0gc2dfbmV4dChzZyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCmluZGV4IGRkOGFhMzYuLmZlN2VkMDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKQEAgLTEzMTIsMTAgKzEzMTIsOCBAQAogI2VuZGlmCiAJcG9rZV9zcm1tdSgpOwogCi0jaWZkZWYgQ09ORklHX1NVTl9JTwogCXNybW11X2FsbG9jYXRlX3B0YWJsZV9za2VsZXRvbihzcGFyY19pb21hcC5zdGFydCwgSU9CQVNFX0VORCk7CiAJc3JtbXVfYWxsb2NhdGVfcHRhYmxlX3NrZWxldG9uKERWTUFfVkFERFIsIERWTUFfRU5EKTsKLSNlbmRpZgogCiAJc3JtbXVfYWxsb2NhdGVfcHRhYmxlX3NrZWxldG9uKAogCQlfX2ZpeF90b192aXJ0KF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyAtIDEpLCBGSVhBRERSX1RPUCk7CkBAIC0xOTE2LDE4ICsxOTE0LDYgQEAKIAltcmVnIHw9IFZJS0lOR19TQkVOQUJMRTsKIAltcmVnICY9IH4oVklLSU5HX0FDRU5BQkxFKTsKIAlzcm1tdV9zZXRfbW11cmVnKG1yZWcpOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIEF2b2lkIHVubmVjZXNzYXJ5IGNyb3NzIGNhbGxzLiAqLwotCUJURklYVVBDT1BZX0NBTEwoZmx1c2hfY2FjaGVfYWxsLCBsb2NhbF9mbHVzaF9jYWNoZV9hbGwpOwotCUJURklYVVBDT1BZX0NBTEwoZmx1c2hfY2FjaGVfbW0sIGxvY2FsX2ZsdXNoX2NhY2hlX21tKTsKLQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX2NhY2hlX3JhbmdlLCBsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSk7Ci0JQlRGSVhVUENPUFlfQ0FMTChmbHVzaF9jYWNoZV9wYWdlLCBsb2NhbF9mbHVzaF9jYWNoZV9wYWdlKTsKLQlCVEZJWFVQQ09QWV9DQUxMKF9fZmx1c2hfcGFnZV90b19yYW0sIGxvY2FsX2ZsdXNoX3BhZ2VfdG9fcmFtKTsKLQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX3NpZ19pbnNucywgbG9jYWxfZmx1c2hfc2lnX2luc25zKTsKLQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX3BhZ2VfZm9yX2RtYSwgbG9jYWxfZmx1c2hfcGFnZV9mb3JfZG1hKTsKLQlidGZpeHVwKCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdmlraW5nKHZvaWQpCkBAIC0yMjcyLDYgKzIyNTgsMTcgQEAKIAlCVEZJWFVQU0VUX0NBTEwoX19mbHVzaF9wYWdlX3RvX3JhbSwgc21wX2ZsdXNoX3BhZ2VfdG9fcmFtLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfc2lnX2luc25zLCBzbXBfZmx1c2hfc2lnX2luc25zLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfcGFnZV9mb3JfZG1hLCBzbXBfZmx1c2hfcGFnZV9mb3JfZG1hLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKworCWlmIChwb2tlX3NybW11ID09IHBva2VfdmlraW5nKSB7CisJCS8qIEF2b2lkIHVubmVjZXNzYXJ5IGNyb3NzIGNhbGxzLiAqLworCQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX2NhY2hlX2FsbCwgbG9jYWxfZmx1c2hfY2FjaGVfYWxsKTsKKwkJQlRGSVhVUENPUFlfQ0FMTChmbHVzaF9jYWNoZV9tbSwgbG9jYWxfZmx1c2hfY2FjaGVfbW0pOworCQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX2NhY2hlX3JhbmdlLCBsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSk7CisJCUJURklYVVBDT1BZX0NBTEwoZmx1c2hfY2FjaGVfcGFnZSwgbG9jYWxfZmx1c2hfY2FjaGVfcGFnZSk7CisJCUJURklYVVBDT1BZX0NBTEwoX19mbHVzaF9wYWdlX3RvX3JhbSwgbG9jYWxfZmx1c2hfcGFnZV90b19yYW0pOworCQlCVEZJWFVQQ09QWV9DQUxMKGZsdXNoX3NpZ19pbnNucywgbG9jYWxfZmx1c2hfc2lnX2luc25zKTsKKwkJQlRGSVhVUENPUFlfQ0FMTChmbHVzaF9wYWdlX2Zvcl9kbWEsIGxvY2FsX2ZsdXNoX3BhZ2VfZm9yX2RtYSk7CisJfQogI2VuZGlmCiAKIAlpZiAoc3BhcmNfY3B1X21vZGVsID09IHN1bjRkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGZlNjVhZWUuLjJmZmFjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTI0MCw5ICsyNDEsNyBAQAogCiAJX3VudXNlZCA9IHN1bjRjX2dldF9jb250ZXh0KCk7CiAJc3VuNGNfc2V0X2NvbnRleHQoX3VudXNlZCk7Ci0jaWZkZWYgQ09ORklHX1NVTl9BVVhJTwogCV91bnVzZWQgPSBnZXRfYXV4aW8oKTsKLSNlbmRpZgogfQogCiAvKiBCb290dXAgdXRpbGl0eSBmdW5jdGlvbnMuICovCkBAIC0xMTI0LDggKzExMjMsOCBAQAogewogCXdoaWxlIChzeiAhPSAwKSB7CiAJCS0tc3o7Ci0JCXNnLT5kdm1hX2FkZHJlc3MgPSAoX191MzIpc3VuNGNfbG9ja2FyZWEoc2dfdmlydChzZyksIHNnLT5sZW5ndGgpOwotCQlzZy0+ZHZtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOworCQlzZy0+ZG1hX2FkZHJlc3MgPSAoX191MzIpc3VuNGNfbG9ja2FyZWEoc2dfdmlydChzZyksIHNnLT5sZW5ndGgpOworCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CiAJCXNnID0gc2dfbmV4dChzZyk7CiAJfQogfQpAQCAtMTE0MSw3ICsxMTQwLDcgQEAKIHsKIAl3aGlsZSAoc3ogIT0gMCkgewogCQktLXN6OwotCQlzdW40Y191bmxvY2thcmVhKChjaGFyICopc2ctPmR2bWFfYWRkcmVzcywgc2ctPmxlbmd0aCk7CisJCXN1bjRjX3VubG9ja2FyZWEoKGNoYXIgKilzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgpOwogCQlzZyA9IHNnX25leHQoc2cpOwogCX0KIH0KQEAgLTE5NTMsNyArMTk1Miw2IEBACiB9CiAKIGV4dGVybiB2b2lkIHNwYXJjX2NvbnRleHRfaW5pdChpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW5kOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYm9vdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcgKnBhZ2VzX2F2YWlsKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxhc3RfdmFsaWRfcGZuOwogCkBAIC0xOTY0LDcgKzE5NjIsNyBAQAogCWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugc3BhcmNfaW9tYXA7CiAJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCBwYWdlc19hdmFpbDsKIAotCWtlcm5lbF9lbmQgPSAodW5zaWduZWQgbG9uZykgJmVuZDsKKwlrZXJuZWxfZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOwogCWtlcm5lbF9lbmQgPSBTVU40Q19SRUFMX1BHRElSX0FMSUdOKGtlcm5lbF9lbmQpOwogCiAJcGFnZXNfYXZhaWwgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL3RsYi5jIGIvYXJjaC9zcGFyYy9tbS90bGIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L21tL3RsYi5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL21tL3RsYi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vdHNiLmMgYi9hcmNoL3NwYXJjL21tL3RzYi5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9tbS90c2IuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9tbS90c2IuYwppbmRleCA1ODdmOGVmLi4zNmEwODEzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vdHNiLmMKKysrIGIvYXJjaC9zcGFyYy9tbS90c2IuYwpAQCAtNDEsMTAgKzQxLDggQEAKIAkJCQkJICAgICAgS0VSTkVMX1RTQl9ORU5UUklFUyk7CiAJCXN0cnVjdCB0c2IgKmVudCA9ICZzd2FwcGVyX3RzYltoYXNoXTsKIAotCQlpZiAodGFnX2NvbXBhcmUoZW50LT50YWcsIHYpKSB7CisJCWlmICh0YWdfY29tcGFyZShlbnQtPnRhZywgdikpCiAJCQllbnQtPnRhZyA9ICgxVUwgPDwgVFNCX1RBR19JTlZBTElEX0JJVCk7Ci0JCQltZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsKLQkJfQogCX0KIH0KIApAQCAtMjY3LDYgKzI2NSwxOCBAQAogCX0KIH0KIAoraW50IHN5c2N0bF90c2JfcmF0aW8gPSAtMjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHNiX3NpemVfdG9fcnNzX2xpbWl0KHVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBudW1fZW50cyA9IChuZXdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgdHNiKSk7CisKKwlpZiAoc3lzY3RsX3RzYl9yYXRpbyA8IDApCisJCXJldHVybiBudW1fZW50cyAtIChudW1fZW50cyA+PiAtc3lzY3RsX3RzYl9yYXRpbyk7CisJZWxzZQorCQlyZXR1cm4gbnVtX2VudHMgKyAobnVtX2VudHMgPj4gc3lzY3RsX3RzYl9yYXRpbyk7Cit9CisKIC8qIFdoZW4gdGhlIFJTUyBvZiBhbiBhZGRyZXNzIHNwYWNlIGV4Y2VlZHMgdHNiX3Jzc19saW1pdCBmb3IgYSBUU0IsCiAgKiBkb19zcGFyYzY0X2ZhdWx0KCkgaW52b2tlcyB0aGlzIHJvdXRpbmUgdG8gdHJ5IGFuZCBncm93IGl0LgogICoKQEAgLTI5NywxOSArMzA3LDE0IEBACiAKIAluZXdfY2FjaGVfaW5kZXggPSAwOwogCWZvciAobmV3X3NpemUgPSA4MTkyOyBuZXdfc2l6ZSA8IG1heF90c2Jfc2l6ZTsgbmV3X3NpemUgPDw9IDFVTCkgewotCQl1bnNpZ25lZCBsb25nIG5fZW50cmllcyA9IG5ld19zaXplIC8gc2l6ZW9mKHN0cnVjdCB0c2IpOwotCi0JCW5fZW50cmllcyA9IChuX2VudHJpZXMgKiAzKSAvIDQ7Ci0JCWlmIChuX2VudHJpZXMgPiByc3MpCisJCW5ld19yc3NfbGltaXQgPSB0c2Jfc2l6ZV90b19yc3NfbGltaXQobmV3X3NpemUpOworCQlpZiAobmV3X3Jzc19saW1pdCA+IHJzcykKIAkJCWJyZWFrOwotCiAJCW5ld19jYWNoZV9pbmRleCsrOwogCX0KIAogCWlmIChuZXdfc2l6ZSA9PSBtYXhfdHNiX3NpemUpCiAJCW5ld19yc3NfbGltaXQgPSB+MFVMOwotCWVsc2UKLQkJbmV3X3Jzc19saW1pdCA9ICgobmV3X3NpemUgLyBzaXplb2Yoc3RydWN0IHRzYikpICogMykgLyA0OwogCiByZXRyeV90c2JfYWxsb2M6CiAJZ2ZwX2ZsYWdzID0gR0ZQX0tFUk5FTDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TIGIvYXJjaC9zcGFyYy9tbS91bHRyYS5TCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9tbS91bHRyYS5TCnJlbmFtZSB0byBhcmNoL3NwYXJjL21tL3VsdHJhLlMKaW5kZXggODY3NzNlOC4uODBjNzg4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKKysrIGIvYXJjaC9zcGFyYy9tbS91bHRyYS5TCkBAIC0xMjUsNyArMTI1LDYgQEAKIAkuYWxpZ24JCTMyCiAJLmdsb2JsCQlfX2ZsdXNoX2ljYWNoZV9wYWdlCiBfX2ZsdXNoX2ljYWNoZV9wYWdlOgkvKiAlbzAgPSBwaHlzX3BhZ2UgKi8KLQltZW1iYXIJCSNTdG9yZVN0b3JlCiAJc3JseAkJJW8wLCBQQUdFX1NISUZULCAlbzAKIAlzZXRoaQkJJXVoaShQQUdFX09GRlNFVCksICVnMQogCXNsbHgJCSVvMCwgUEFHRV9TSElGVCwgJW8wCkBAIC00NjcsNyArNDY2LDcgQEAKIAkucHJldmlvdXMKIAogCXJkcHIJCSVwaWwsICVnMgotCXdycHIJCSVnMCwgMTUsICVwaWwKKwl3cnByCQklZzAsIFBJTF9OT1JNQUxfTUFYLCAlcGlsCiAJc2V0aGkJCSVoaSgxMDlmKSwgJWc3CiAJYixwdAkJJXhjYywgZXRyYXBfaXJxCiAxMDk6CSBvcgkJJWc3LCAlbG8oMTA5YiksICVnNwpAQCAtNTA3LDcgKzUwNiw2IEBACiAJc2xseAkJJWcyLCBUUkFQX0JMT0NLX1NaX1NISUZULCAlZzIKIAlhZGQJCSVnNywgJWcyLCAlZzcKIAlsZHgJCVslZzcgKyBUUkFQX1BFUl9DUFVfVEhSRUFEXSwgJWczCi0JbWVtYmFyCQkjU3RvcmVTdG9yZQogCXN0eAkJJWczLCBbJWcxICsgR1JfU05BUF9USFJFQURdCiAJcmV0cnkKIApAQCAtNjkwLDcgKzY4OCw3IEBACiAJLnByZXZpb3VzCiAKIAlyZHByCQklcGlsLCAlZzIKLQl3cnByCQklZzAsIDE1LCAlcGlsCisJd3JwcgkJJWcwLCBQSUxfTk9STUFMX01BWCwgJXBpbAogCXNldGhpCQklaGkoMTA5ZiksICVnNwogCWJhLHB0CQkleGNjLCBldHJhcF9pcnEKIDEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IDE3YmI2MDMuLmQ2ZTE3MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCkBAIC0xMiwxMiArMTIsMjM5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAgCisjaWZkZWYgQ09ORklHX1NQQVJDNjQKKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCitzdGF0aWMgaW50IG5taV9lbmFibGVkOworCitzdHJ1Y3QgcGNyX29wcyB7CisJdTY0ICgqcmVhZCkodm9pZCk7CisJdm9pZCAoKndyaXRlKSh1NjQpOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNyX29wcyAqcGNyX29wczsKKworc3RhdGljIHU2NCBkaXJlY3RfcGNyX3JlYWQodm9pZCkKK3sKKwl1NjQgdmFsOworCisJcmVhZF9wY3IodmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBkaXJlY3RfcGNyX3dyaXRlKHU2NCB2YWwpCit7CisJd3JpdGVfcGNyKHZhbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNyX29wcyBkaXJlY3RfcGNyX29wcyA9IHsKKwkucmVhZAk9IGRpcmVjdF9wY3JfcmVhZCwKKwkud3JpdGUJPSBkaXJlY3RfcGNyX3dyaXRlLAorfTsKKworc3RhdGljIHZvaWQgbjJfcGNyX3dyaXRlKHU2NCB2YWwpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSBzdW40dl9uaWFnYXJhMl9zZXRwZXJmKEhWX04yX1BFUkZfU1BBUkNfQ1RMLCB2YWwpOworCWlmICh2YWwgIT0gSFZfRU9LKQorCQl3cml0ZV9wY3IodmFsKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY3Jfb3BzIG4yX3Bjcl9vcHMgPSB7CisJLnJlYWQJPSBkaXJlY3RfcGNyX3JlYWQsCisJLndyaXRlCT0gbjJfcGNyX3dyaXRlLAorfTsKKworLyogSW4gb3JkZXIgdG8gY29tbW9uaXplIGFzIG11Y2ggb2YgdGhlIGltcGxlbWVudGF0aW9uIGFzCisgKiBwb3NzaWJsZSwgd2UgdXNlIFBJQ0ggYXMgb3VyIGNvdW50ZXIuICBNb3N0bHkgdGhpcyBpcworICogdG8gYWNjb21vZGF0ZSBOaWFnYXJhLTEgd2hpY2ggY2FuIG9ubHkgY291bnQgaW5zbiBjeWNsZXMKKyAqIGluIFBJQ0guCisgKi8KK3N0YXRpYyB1NjQgcGljbF92YWx1ZSh2b2lkKQoreworCXUzMiBkZWx0YSA9IGxvY2FsX2NwdV9kYXRhKCkuY2xvY2tfdGljayAvIEhaOworCisJcmV0dXJuICgodTY0KSgoMCAtIGRlbHRhKSAmIDB4ZmZmZmZmZmYpKSA8PCAzMjsKK30KKworI2RlZmluZSBQQ1JfUElDX1BSSVYJCTB4MDAwMDAwMDEgLyogUElDIGFjY2VzcyBpcyBwcml2aWxlZ2VkICovCisjZGVmaW5lIFBDUl9TVFJBQ0UJCTB4MDAwMDAwMDIgLyogVHJhY2Ugc3VwZXJ2aXNvciBldmVudHMgICovCisjZGVmaW5lIFBDUl9VVFJBQ0UJCTB4MDAwMDAwMDQgLyogVHJhY2UgdXNlciBldmVudHMgICAgICAgICovCisjZGVmaW5lIFBDUl9OMl9IVFJBQ0UJCTB4MDAwMDAwMDggLyogVHJhY2UgaHlwZXJ2aXNvciBldmVudHMgICovCisjZGVmaW5lIFBDUl9OMl9UT0VfT1YwCQkweDAwMDAwMDEwIC8qIFRyYXAgaWYgUElDIDAgb3ZlcmZsb3dzICAqLworI2RlZmluZSBQQ1JfTjJfVE9FX09WMQkJMHgwMDAwMDAyMCAvKiBUcmFwIGlmIFBJQyAxIG92ZXJmbG93cyAgKi8KKyNkZWZpbmUgUENSX04yX01BU0swCQkweDAwMDAzZmMwCisjZGVmaW5lIFBDUl9OMl9NQVNLMF9TSElGVAk2CisjZGVmaW5lIFBDUl9OMl9TTDAJCTB4MDAwM2MwMDAKKyNkZWZpbmUgUENSX04yX1NMMF9TSElGVAkxNAorI2RlZmluZSBQQ1JfTjJfT1YwCQkweDAwMDQwMDAwCisjZGVmaW5lIFBDUl9OMl9NQVNLMQkJMHgwN2Y4MDAwMAorI2RlZmluZSBQQ1JfTjJfTUFTSzFfU0hJRlQJMTkKKyNkZWZpbmUgUENSX04yX1NMMQkJMHg3ODAwMDAwMAorI2RlZmluZSBQQ1JfTjJfU0wxX1NISUZUCTI3CisjZGVmaW5lIFBDUl9OMl9PVjEJCTB4ODAwMDAwMDAKKworI2RlZmluZSBQQ1JfU1VONFVfRU5BQkxFCShQQ1JfUElDX1BSSVYgfCBQQ1JfU1RSQUNFIHwgUENSX1VUUkFDRSkKKyNkZWZpbmUgUENSX04yX0VOQUJMRQkJKFBDUl9QSUNfUFJJViB8IFBDUl9TVFJBQ0UgfCBQQ1JfVVRSQUNFIHwgXAorCQkJCSBQQ1JfTjJfVE9FX09WMSB8IFwKKwkJCQkgKDIgPDwgUENSX04yX1NMMV9TSElGVCkgfCBcCisJCQkJICgweGZmIDw8IFBDUl9OMl9NQVNLMV9TSElGVCkpCisKK3N0YXRpYyB1NjQgcGNyX2VuYWJsZSA9IFBDUl9TVU40VV9FTkFCTEU7CisKK3N0YXRpYyB2b2lkIG5taV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBjcl9vcHMtPndyaXRlKFBDUl9QSUNfUFJJVik7CisKKwlpZiAobm1pX2VuYWJsZWQpIHsKKwkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKKworCQl3cml0ZV9waWMocGljbF92YWx1ZSgpKTsKKwkJcGNyX29wcy0+d3JpdGUocGNyX2VuYWJsZSk7CisJfQorfQorCisvKiBXZSBjb3VudCAiY2xvY2sgY3ljbGUiIGV2ZW50cyBpbiB0aGUgbG93ZXIgMzItYml0IFBJQy4KKyAqIFRoZW4gY29uZmlndXJlIGl0IHN1Y2ggdGhhdCBpdCBvdmVyZmxvd3MgZXZlcnkgSFosIGFuZCB0aHVzCisgKiBnZW5lcmF0ZXMgYSBsZXZlbCAxNSBpbnRlcnJ1cHQgYXQgdGhhdCBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyB2b2lkIGNwdV9ubWlfc3RhcnQodm9pZCAqX3VudXNlZCkKK3sKKwlwY3Jfb3BzLT53cml0ZShQQ1JfUElDX1BSSVYpOworCXdyaXRlX3BpYyhwaWNsX3ZhbHVlKCkpOworCisJcGNyX29wcy0+d3JpdGUocGNyX2VuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNwdV9ubWlfc3RvcCh2b2lkICpfdW51c2VkKQoreworCXBjcl9vcHMtPndyaXRlKFBDUl9QSUNfUFJJVik7Cit9CisKK3N0YXRpYyBpbnQgbm1pX3N0YXJ0KHZvaWQpCit7CisJaW50IGVyciA9IHJlZ2lzdGVyX3BlcmZjdHJfaW50cihubWlfaGFuZGxlcik7CisKKwlpZiAoIWVycikgeworCQlubWlfZW5hYmxlZCA9IDE7CisJCXdtYigpOworCQllcnIgPSBvbl9lYWNoX2NwdShjcHVfbm1pX3N0YXJ0LCBOVUxMLCAxKTsKKwkJaWYgKGVycikgeworCQkJbm1pX2VuYWJsZWQgPSAwOworCQkJd21iKCk7CisJCQlvbl9lYWNoX2NwdShjcHVfbm1pX3N0b3AsIE5VTEwsIDEpOworCQkJcmVsZWFzZV9wZXJmY3RyX2ludHIobm1pX2hhbmRsZXIpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbm1pX3N0b3Aodm9pZCkKK3sKKwlubWlfZW5hYmxlZCA9IDA7CisJd21iKCk7CisKKwlvbl9lYWNoX2NwdShjcHVfbm1pX3N0b3AsIE5VTEwsIDEpOworCXJlbGVhc2VfcGVyZmN0cl9pbnRyKG5taV9oYW5kbGVyKTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2hzdmNfZ3JvdXA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2hzdmNfbWFqb3I7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2hzdmNfbWlub3I7CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX3BlcmZfaHN2Yyh2b2lkKQoreworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCXN3aXRjaCAoc3VuNHZfY2hpcF90eXBlKSB7CisJCWNhc2UgU1VONFZfQ0hJUF9OSUFHQVJBMToKKwkJCXBlcmZfaHN2Y19ncm91cCA9IEhWX0dSUF9OSUFHX1BFUkY7CisJCQlicmVhazsKKworCQljYXNlIFNVTjRWX0NISVBfTklBR0FSQTI6CisJCQlwZXJmX2hzdmNfZ3JvdXAgPSBIVl9HUlBfTjJfQ1BVOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKworCQlwZXJmX2hzdmNfbWFqb3IgPSAxOworCQlwZXJmX2hzdmNfbWlub3IgPSAwOworCQlpZiAoc3VuNHZfaHZhcGlfcmVnaXN0ZXIocGVyZl9oc3ZjX2dyb3VwLAorCQkJCQkgcGVyZl9oc3ZjX21ham9yLAorCQkJCQkgJnBlcmZfaHN2Y19taW5vcikpIHsKKwkJCXByaW50aygicGVyZm1vbjogQ291bGQgbm90IHJlZ2lzdGVyIE4yIGh2YXBpLlxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9wZXJmX2hzdmModm9pZCkKK3sKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCXN1bjR2X2h2YXBpX3VucmVnaXN0ZXIocGVyZl9oc3ZjX2dyb3VwKTsKK30KKworc3RhdGljIGludCBvcHJvZmlsZV9ubWlfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQoreworCWludCBlcnIgPSByZWdpc3Rlcl9wZXJmX2hzdmMoKTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKHRsYl90eXBlKSB7CisJY2FzZSBoeXBlcnZpc29yOgorCQlwY3Jfb3BzID0gJm4yX3Bjcl9vcHM7CisJCXBjcl9lbmFibGUgPSBQQ1JfTjJfRU5BQkxFOworCQlicmVhazsKKworCWNhc2UgY2hlZXRhaDoKKwljYXNlIGNoZWV0YWhfcGx1czoKKwkJcGNyX29wcyA9ICZkaXJlY3RfcGNyX29wczsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlvcHMtPmNyZWF0ZV9maWxlcyA9IE5VTEw7CisJb3BzLT5zZXR1cCA9IE5VTEw7CisJb3BzLT5zaHV0ZG93biA9IE5VTEw7CisJb3BzLT5zdGFydCA9IG5taV9zdGFydDsKKwlvcHMtPnN0b3AgPSBubWlfc3RvcDsKKwlvcHMtPmNwdV90eXBlID0gInRpbWVyIjsKKworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBVc2luZyBwZXJmY3RyIGJhc2VkIE5NSSB0aW1lciBpbnRlcnJ1cHQuXG4iKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKIGludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7Ci0JcmV0dXJuIC1FTk9ERVY7CisJaW50IHJldCA9IC1FTk9ERVY7CisKKyNpZmRlZiBDT05GSUdfU1BBUkM2NAorCXJldCA9IG9wcm9maWxlX25taV9pbml0KG9wcyk7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisjZW5kaWYKKworCXJldHVybiByZXQ7CiB9CiAKIAogdm9pZCBvcHJvZmlsZV9hcmNoX2V4aXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfU1BBUkM2NAorCXVucmVnaXN0ZXJfcGVyZl9oc3ZjKCk7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvcHJvbS9NYWtlZmlsZQppbmRleCA4ZjdlMTg1Li4xYjhjMDczIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9wcm9tL01ha2VmaWxlCkBAIC0xLDYgKzEsMjEgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBTdW4gQm9vdCBQUk9NIGludGVyZmFjZSBsaWJyYXJ5IHVuZGVyCiAjIExpbnV4LgogIworYXNmbGFncyA6PSAtYW5zaQorY2NmbGFncyA6PSAtV2Vycm9yCiAKLWxpYi15IDo9IGJvb3RzdHIubyBkZXZtYXAubyBkZXZvcHMubyBpbml0Lm8gbWVtb3J5Lm8gbWlzYy5vIG1wLm8gXAotCSBwYWxsb2MubyByYW5nZXMubyBzZWdtZW50Lm8gY29uc29sZS5vIHByaW50Zi5vIHRyZWUubworbGliLXkgICAgICAgICAgICAgICAgIDo9IGJvb3RzdHJfJChCSVRTKS5vCitsaWItJChDT05GSUdfU1BBUkMzMikgKz0gZGV2bWFwLm8KK2xpYi15ICAgICAgICAgICAgICAgICArPSBkZXZvcHNfJChCSVRTKS5vCitsaWIteSAgICAgICAgICAgICAgICAgKz0gaW5pdF8kKEJJVFMpLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBtZW1vcnkubworbGliLXkgICAgICAgICAgICAgICAgICs9IG1pc2NfJChCSVRTKS5vCitsaWItJChDT05GSUdfU1BBUkMzMikgKz0gbXAubworbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IHBhbGxvYy5vCitsaWItJChDT05GSUdfU1BBUkMzMikgKz0gcmFuZ2VzLm8KK2xpYi0kKENPTkZJR19TUEFSQzMyKSArPSBzZWdtZW50Lm8KK2xpYi15ICAgICAgICAgICAgICAgICArPSBjb25zb2xlXyQoQklUUykubworbGliLXkgICAgICAgICAgICAgICAgICs9IHByaW50Zi5vCitsaWIteSAgICAgICAgICAgICAgICAgKz0gdHJlZV8kKEJJVFMpLm8KK2xpYi0kKENPTkZJR19TUEFSQzY0KSArPSBwMTI3NS5vCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gY2lmLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9ib290c3RyLmMgYi9hcmNoL3NwYXJjL3Byb20vYm9vdHN0cl8zMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjL3Byb20vYm9vdHN0ci5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL3Byb20vYm9vdHN0cl8zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9ib290c3RyLmMgYi9hcmNoL3NwYXJjL3Byb20vYm9vdHN0cl82NC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvcHJvbS9ib290c3RyLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvcHJvbS9ib290c3RyXzY0LmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL2NpZi5TIGIvYXJjaC9zcGFyYy9wcm9tL2NpZi5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvcHJvbS9jaWYuUwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL2NpZi5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZS5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGUuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vY29uc29sZS5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L3Byb20vY29uc29sZS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vZGV2b3BzLmMgYi9hcmNoL3NwYXJjL3Byb20vZGV2b3BzXzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvcHJvbS9kZXZvcHMuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL2Rldm9wc18zMi5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9kZXZvcHMuYyBiL2FyY2gvc3BhcmMvcHJvbS9kZXZvcHNfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L3Byb20vZGV2b3BzLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvcHJvbS9kZXZvcHNfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL2luaXQuYyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvcHJvbS9pbml0LmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL2luaXQuYyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9wcm9tL2luaXQuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL2luaXRfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL21pc2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9taXNjXzMyLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYy9wcm9tL21pc2MuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL21pc2NfMzIuYwppbmRleCA0OWI1MDU3Li5jZjZjM2Y2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vbWlzYy5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9taXNjXzMyLmMKQEAgLTYxLDkgKzYxLDcgQEAKIAlyZXN0b3JlX2N1cnJlbnQoKTsKIAlpbnN0YWxsX2xpbnV4X3RpY2tlcigpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotI2lmZGVmIENPTkZJR19TVU5fQVVYSU8KIAlzZXRfYXV4aW8oQVVYSU9fTEVELCAwKTsKLSNlbmRpZgogfQogCiAvKiBEcm9wIGludG8gdGhlIHByb20sIGJ1dCBjb21wbGV0ZWx5IHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbS4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9taXNjXzY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmM2NC9wcm9tL21pc2MuYwpyZW5hbWUgdG8gYXJjaC9zcGFyYy9wcm9tL21pc2NfNjQuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vcDEyNzUuYyBiL2FyY2gvc3BhcmMvcHJvbS9wMTI3NS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NwYXJjNjQvcHJvbS9wMTI3NS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL3Byb20vcDEyNzUuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL3ByaW50Zi5jIGIvYXJjaC9zcGFyYy9wcm9tL3ByaW50Zi5jCmluZGV4IGEzNmFiOWMuLjY2MDk0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9wcmludGYuYworKysgYi9hcmNoL3NwYXJjL3Byb20vcHJpbnRmLmMKQEAgLTIsNiArMiw3IEBACiAgKiBwcmludGYuYzogIEludGVybmFsIHByb20gbGlicmFyeSBwcmludGYgZmFjaWxpdHkuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NyBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICogQ29weXJpZ2h0IChjKSAyMDAyIFBldGUgWmFpdGNldiAoemFpdGNldkB5YWhvby5jb20pCiAgKgogICogV2UgdXNlZCB0byB3YXJuIGFsbCBvdmVyIHRoZSBjb2RlOiBETyBOT1QgVVNFIHByb21fcHJpbnRmKCksCkBAIC0xMyw3ICsxNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CkBAIC0zNCw3ICszNCw3IEBACiB9CiAKIHZvaWQKLXByb21fcHJpbnRmKGNoYXIgKmZtdCwgLi4uKQorcHJvbV9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWludCBpOwpAQCAtNDUsNCArNDUsMyBAQAogCiAJcHJvbV93cml0ZShwcGJ1ZiwgaSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHByb21fcHJpbnRmKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS90cmVlLmMgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV8zMi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvc3BhcmMvcHJvbS90cmVlLmMKcmVuYW1lIHRvIGFyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMKaW5kZXggZjIyOGZlMC4uNmQ4MTg3MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL3RyZWUuYworKysgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV8zMi5jCkBAIC04NSw3ICs4NSw3IEBACiAvKiBSZXR1cm4gdGhlIGxlbmd0aCBpbiBieXRlcyBvZiBwcm9wZXJ0eSAncHJvcCcgYXQgbm9kZSAnbm9kZScuCiAgKiBSZXR1cm4gLTEgb24gZXJyb3IuCiAgKi8KLWludCBwcm9tX2dldHByb3BsZW4oaW50IG5vZGUsIGNoYXIgKnByb3ApCitpbnQgcHJvbV9nZXRwcm9wbGVuKGludCBub2RlLCBjb25zdCBjaGFyICpwcm9wKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwNCw3ICsxMDQsNyBAQAogICogJ2J1ZmZlcicgd2hpY2ggaGFzIGEgc2l6ZSBvZiAnYnVmc2l6ZScuICBJZiB0aGUgYWNxdWlzaXRpb24KICAqIHdhcyBzdWNjZXNzZnVsIHRoZSBsZW5ndGggd2lsbCBiZSByZXR1cm5lZCwgZWxzZSAtMSBpcyByZXR1cm5lZC4KICAqLwotaW50IHByb21fZ2V0cHJvcGVydHkoaW50IG5vZGUsIGNoYXIgKnByb3AsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUpCitpbnQgcHJvbV9nZXRwcm9wZXJ0eShpbnQgbm9kZSwgY29uc3QgY2hhciAqcHJvcCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSkKIHsKIAlpbnQgcGxlbiwgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDMsNyArMzAzLDcgQEAKIC8qIFNldCBwcm9wZXJ0eSAncG5hbWUnIGF0IG5vZGUgJ25vZGUnIHRvIHZhbHVlICd2YWx1ZScgd2hpY2ggaGFzIGEgbGVuZ3RoCiAgKiBvZiAnc2l6ZScgYnl0ZXMuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGUgcHJvbSBhY2NlcHRlZC4KICAqLwotaW50IHByb21fc2V0cHJvcChpbnQgbm9kZSwgY2hhciAqcG5hbWUsIGNoYXIgKnZhbHVlLCBpbnQgc2l6ZSkKK2ludCBwcm9tX3NldHByb3AoaW50IG5vZGUsIGNvbnN0IGNoYXIgKnBuYW1lLCBjaGFyICp2YWx1ZSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vdHJlZS5jIGIvYXJjaC9zcGFyYy9wcm9tL3RyZWVfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zcGFyYzY0L3Byb20vdHJlZS5jCnJlbmFtZSB0byBhcmNoL3NwYXJjL3Byb20vdHJlZV82NC5jCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjk2ZTcwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNDMzICswLDAgQEAKLSMgc3BhcmM2NCBjb25maWd1cmF0aW9uCi1tYWlubWVudSAiTGludXggS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIDY0LWJpdCBTUEFSQyIKLQotY29uZmlnIFNQQVJDCi0JYm9vbAotCWRlZmF1bHQgeQotCXNlbGVjdCBIQVZFX09QUk9GSUxFCi0Jc2VsZWN0IEhBVkVfS1BST0JFUwotCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKLQotY29uZmlnIFNQQVJDNjQKLQlib29sCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCi0Jc2VsZWN0IEhBVkVfSURFCi0Jc2VsZWN0IEhBVkVfTE1CCi0Jc2VsZWN0IEhBVkVfQVJDSF9LR0RCCi0Jc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCi0Jc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCi0Jc2VsZWN0IFJUQ19DTEFTUwotCXNlbGVjdCBSVENfRFJWX000OFQ1OQotCXNlbGVjdCBSVENfRFJWX0NNT1MKLQlzZWxlY3QgUlRDX0RSVl9CUTQ4MDIKLQlzZWxlY3QgUlRDX0RSVl9TVU40VgotCXNlbGVjdCBSVENfRFJWX1NUQVJGSVJFCi0KLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfR1BJTwotCWJvb2wKLQloZWxwCi0JICBHZW5lcmljIEdQSU8gQVBJIHN1cHBvcnQKLQotY29uZmlnIDY0QklUCi0JZGVmX2Jvb2wgeQotCi1jb25maWcgTU1VCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgSU9NTVVfSEVMUEVSCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgUVVJQ0tMSVNUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgTE9DS0RFUF9TVVBQT1JUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgQVJDSF9NQVlfSEFWRV9QQ19GREMKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKLQlib29sCi0JZGVmYXVsdCBuCi0KLWNvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKLQlib29sCi0JZGVmYXVsdCBuCi0KLWNvbmZpZyBBVURJVF9BUkNICi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKLQlkZWZfYm9vbCB5Ci0KLWNvbmZpZyBBUkNIX05PX1ZJUlRfVE9fQlVTCi0JZGVmX2Jvb2wgeQotCi1jb25maWcgT0YKLQlkZWZfYm9vbCB5Ci0KLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlib29sCi0JZGVmX2Jvb2wgeQotCi1zb3VyY2UgImluaXQvS2NvbmZpZyIKLXNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKLQotbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgotCi1jaG9pY2UKLQlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiCi0JZGVmYXVsdCBTUEFSQzY0X1BBR0VfU0laRV84S0IKLQotY29uZmlnIFNQQVJDNjRfUEFHRV9TSVpFXzhLQgotCWJvb2wgIjhLQiIKLQloZWxwCi0JICBUaGlzIGxldHMgeW91IHNlbGVjdCB0aGUgcGFnZSBzaXplIG9mIHRoZSBrZXJuZWwuCi0KLQkgIDhLQiBhbmQgNjRLQiB3b3JrIHF1aXRlIHdlbGwsIHNpbmNlIFNQQVJDIEVMRiBzZWN0aW9ucwotCSAgcHJvdmlkZSBmb3IgdXAgdG8gNjRLQiBhbGlnbm1lbnQuCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8sIGNob29zZSA4S0IuCi0KLWNvbmZpZyBTUEFSQzY0X1BBR0VfU0laRV82NEtCCi0JYm9vbCAiNjRLQiIKLQotZW5kY2hvaWNlCi0KLWNvbmZpZyBTRUNDT01QCi0JYm9vbCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgotCWRlcGVuZHMgb24gUFJPQ19GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMga2VybmVsIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBudW1iZXIgY3J1bmNoaW5nIGFwcGxpY2F0aW9ucwotCSAgdGhhdCBtYXkgbmVlZCB0byBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSBkdXJpbmcgdGhlaXIKLQkgIGV4ZWN1dGlvbi4gQnkgdXNpbmcgcGlwZXMgb3Igb3RoZXIgdHJhbnNwb3J0cyBtYWRlIGF2YWlsYWJsZSB0bwotCSAgdGhlIHByb2Nlc3MgYXMgZmlsZSBkZXNjcmlwdG9ycyBzdXBwb3J0aW5nIHRoZSByZWFkL3dyaXRlCi0JICBzeXNjYWxscywgaXQncyBwb3NzaWJsZSB0byBpc29sYXRlIHRob3NlIGFwcGxpY2F0aW9ucyBpbgotCSAgdGhlaXIgb3duIGFkZHJlc3Mgc3BhY2UgdXNpbmcgc2VjY29tcC4gT25jZSBzZWNjb21wIGlzCi0JICBlbmFibGVkIHZpYSAvcHJvYy88cGlkPi9zZWNjb21wLCBpdCBjYW5ub3QgYmUgZGlzYWJsZWQKLQkgIGFuZCB0aGUgdGFzayBpcyBvbmx5IGFsbG93ZWQgdG8gZXhlY3V0ZSBhIGZldyBzYWZlIHN5c2NhbGxzCi0JICBkZWZpbmVkIGJ5IGVhY2ggc2VjY29tcCBtb2RlLgotCi0JICBJZiB1bnN1cmUsIHNheSBZLiBPbmx5IGVtYmVkZGVkIHNob3VsZCBzYXkgTiBoZXJlLgotCi1zb3VyY2Uga2VybmVsL0tjb25maWcuaHoKLQotY29uZmlnIEhPVFBMVUdfQ1BVCi0JYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIgotCWRlcGVuZHMgb24gU01QCi0Jc2VsZWN0IEhPVFBMVUcKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGV4cGVyaW1lbnQgd2l0aCB0dXJuaW5nIENQVXMgb2ZmIGFuZCBvbi4gIENQVXMKLQkgIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy4KLQkgIFNheSBOIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgQ1BVIGhvdHBsdWcuCi0KLWNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCi0JYm9vbAotCWRlZmF1bHQgeQotCi1zb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCi0KLWNvbmZpZyBTTVAKLQlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCi0JICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgc2F5IE4uIElmIHlvdSBoYXZlIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuCi0JICBvbmUgQ1BVLCBzYXkgWS4KLQotCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gc2luZ2xlIGFuZCBtdWx0aXByb2Nlc3NvcgotCSAgbWFjaGluZXMsIGJ1dCB3aWxsIHVzZSBvbmx5IG9uZSBDUFUgb2YgYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lLiBJZgotCSAgeW91IHNheSBZIGhlcmUsIHRoZSBrZXJuZWwgd2lsbCBydW4gb24gc2luZ2xlLXByb2Nlc3NvciBtYWNoaW5lcy4KLQkgIE9uIGEgc2luZ2xlLXByb2Nlc3NvciBtYWNoaW5lLCB0aGUga2VybmVsIHdpbGwgcnVuIGZhc3RlciBpZiB5b3Ugc2F5Ci0JICBOIGhlcmUuCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCi0KLWNvbmZpZyBOUl9DUFVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTEwMjQpIgotCXJhbmdlIDIgMTAyNAotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCAiNjQiCi0KLXNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCi0KLWNvbmZpZyBVUzNfRlJFUQotCXRyaXN0YXRlICJVbHRyYVNQQVJDLUlJSSBDUFUgRnJlcXVlbmN5IGRyaXZlciIKLQlkZXBlbmRzIG9uIENQVV9GUkVRCi0Jc2VsZWN0IENQVV9GUkVRX1RBQkxFCi0JaGVscAotCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZlciBmb3IgVWx0cmFTUEFSQy1JSUkgcHJvY2Vzc29ycy4KLQotCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXE+LgotCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KLWNvbmZpZyBVUzJFX0ZSRVEKLQl0cmlzdGF0ZSAiVWx0cmFTUEFSQy1JSWUgQ1BVIEZyZXF1ZW5jeSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBDUFVfRlJFUQotCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQotCWhlbHAKLQkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIFVsdHJhU1BBUkMtSUllIHByb2Nlc3NvcnMuCi0KLQkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxPi4KLQotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCi1jb25maWcgVVMzX01DCi0JdHJpc3RhdGUgIlVsdHJhU1BBUkMtSUlJIE1lbW9yeSBDb250cm9sbGVyIGRyaXZlciIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIGFkZHMgYSBkcml2ZXIgZm9yIHRoZSBVbHRyYVNQQVJDLUlJSSBtZW1vcnkgY29udHJvbGxlci4KLQkgIExvYWRpbmcgdGhpcyBkcml2ZXIgYWxsb3dzIGV4YWN0IG1uZW1vbmljIHN0cmluZ3MgdG8gYmUKLQkgIHByaW50ZWQgaW4gdGhlIGV2ZW50IG9mIGEgbWVtb3J5IGVycm9yLCBzbyB0aGF0IHRoZSBmYXVsdHkgRElNTQotCSAgb24gdGhlIG1vdGhlcmJvYXJkIGNhbiBiZSBtYXRjaGVkIHRvIHRoZSBlcnJvci4KLQotCSAgSWYgaW4gZG91YnQsIHNheSBZLCBhcyB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSB2ZXJ5IHVzZWZ1bC4KLQotIyBHbG9iYWwgdGhpbmdzIGFjcm9zcyBhbGwgU3VuIG1hY2hpbmVzLgotY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKLQotY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKLQlib29sCi0KLWNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIEdFTkVSSUNfSFdFSUdIVAotCWJvb2wKLQlkZWZhdWx0IHkgaWYgIVVMVFJBX0hBU19QT1BVTEFUSU9OX0NPVU5UCi0KLWNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQotCWJvb2wKLQlkZWZhdWx0IHkKLQotY2hvaWNlCi0JcHJvbXB0ICJTUEFSQzY0IEh1Z2UgVExCIFBhZ2UgU2l6ZSIKLQlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQotCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfNE1CCi0KLWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUIKLQlib29sICI0TUIiCi0KLWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV81MTJLCi0JYm9vbCAiNTEySyIKLQotY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SwotCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzY0S0IKLQlib29sICI2NEsiCi0KLWVuZGNob2ljZQotCi1lbmRtZW51Ci0KLWNvbmZpZyBOVU1BCi0JYm9vbCAiTlVNQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU01QCi0KLWNvbmZpZyBOT0RFU19TSElGVAotCWludAotCWRlZmF1bHQgIjQiCi0JZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCi0KLSMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KLSMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKLSMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKLSMgcmVzaWRlIG9uIHRoYXQgbm9kZS4gIFNlZSBtZW1tYXBfaW5pdF96b25lKCkKLSMgZm9yIGRldGFpbHMuCi1jb25maWcgTk9ERVNfU1BBTl9PVEhFUl9OT0RFUwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKLQotY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCi0JZGVmX2Jvb2wgeQotCi1jb25maWcgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCi0JZGVmX2Jvb2wgeQotCi1jb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0JZGVmX2Jvb2wgeQotCXNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKLQotY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKLQlkZWZfYm9vbCB5Ci0KLXNvdXJjZSAibW0vS2NvbmZpZyIKLQotY29uZmlnIElTQQotCWJvb2wKLQotY29uZmlnIElTQVBOUAotCWJvb2wKLQotY29uZmlnIEVJU0EKLQlib29sCi0KLWNvbmZpZyBNQ0EKLQlib29sCi0KLWNvbmZpZyBQQ01DSUEKLQl0cmlzdGF0ZQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYXR0YWNoIFBDTUNJQS0gb3IgUEMtY2FyZHMgdG8geW91ciBMaW51eAotCSAgY29tcHV0ZXIuICBUaGVzZSBhcmUgY3JlZGl0LWNhcmQgc2l6ZSBkZXZpY2VzIHN1Y2ggYXMgbmV0d29yayBjYXJkcywKLQkgIG1vZGVtcyBvciBoYXJkIGRyaXZlcyBvZnRlbiB1c2VkIHdpdGggbGFwdG9wcyBjb21wdXRlcnMuICBUaGVyZSBhcmUKLQkgIGFjdHVhbGx5IHR3byB2YXJpZXRpZXMgb2YgdGhlc2UgY2FyZHM6IHRoZSBvbGRlciAxNiBiaXQgUENNQ0lBIGNhcmRzCi0JICBhbmQgdGhlIG5ld2VyIDMyIGJpdCBDYXJkQnVzIGNhcmRzLiAgSWYgeW91IHdhbnQgdG8gdXNlIENhcmRCdXMKLQkgIGNhcmRzLCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvICJDYXJkQnVzIHN1cHBvcnQiIGJlbG93LgotCi0JICBUbyB1c2UgeW91ciBQQy1jYXJkcywgeW91IHdpbGwgbmVlZCBzdXBwb3J0aW5nIHNvZnR3YXJlIGZyb20gRGF2aWQKLQkgIEhpbmRzJyBwY21jaWEtY3MgcGFja2FnZSAoc2VlIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlcz4KLQkgIGZvciBsb2NhdGlvbikuICBQbGVhc2UgYWxzbyByZWFkIHRoZSBQQ01DSUEtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCi0JICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIG1vZHVsZXMsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBwY21jaWFfY29yZSBhbmQgZHMuCi0KLWNvbmZpZyBTQlVTCi0JYm9vbAotCWRlZmF1bHQgeQotCi1jb25maWcgU0JVU0NIQVIKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBTVU5fQVVYSU8KLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBTVU5fSU8KLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBTVU5fTERPTVMKLQlib29sICJTdW4gTG9naWNhbCBEb21haW5zIHN1cHBvcnQiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpcyB5b3Ugd2FudCB0byBzdXBwb3J0IHZpcnR1YWwgZGV2aWNlcyB2aWEKLQkgIExvZ2ljYWwgRG9tYWlucy4KLQotY29uZmlnIFBDSQotCWJvb2wgIlBDSSBzdXBwb3J0IgotCXNlbGVjdCBBUkNIX1NVUFBPUlRTX01TSQotCWhlbHAKLQkgIEZpbmQgb3V0IHdoZXRoZXIgeW91ciBzeXN0ZW0gaW5jbHVkZXMgYSBQQ0kgYnVzLiBQQ0kgaXMgdGhlIG5hbWUgb2YKLQkgIGEgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQotCSAgeW91ciBib3guICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgZHJpdmVycyBhbmQKLQkgIGluZnJhc3RydWN0dXJlIGNvZGUgdG8gc3VwcG9ydCBQQ0kgYnVzIGRldmljZXMuCi0KLWNvbmZpZyBQQ0lfRE9NQUlOUwotCWRlZl9ib29sIFBDSQotCi1jb25maWcgUENJX1NZU0NBTEwKLQlkZWZfYm9vbCBQQ0kKLQotc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgotCi1jb25maWcgU1VOX09QRU5QUk9NRlMKLQl0cmlzdGF0ZSAiT3BlbnByb20gdHJlZSBhcHBlYXJzIGluIC9wcm9jL29wZW5wcm9tIgotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSwgdGhlIE9wZW5QUk9NIGRldmljZSB0cmVlIHdpbGwgYmUgYXZhaWxhYmxlIGFzIGEKLQkgIHZpcnR1YWwgZmlsZSBzeXN0ZW0sIHdoaWNoIHlvdSBjYW4gbW91bnQgdG8gL3Byb2Mvb3BlbnByb20gYnkgIm1vdW50Ci0JICAtdCBvcGVucHJvbWZzIG5vbmUgL3Byb2Mvb3BlbnByb20iLgotCi0JICBUbyBjb21waWxlIHRoZSAvcHJvYy9vcGVucHJvbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvcGVucHJvbWZzLiAgSWYgdW5zdXJlLCBjaG9vc2UgTS4KLQotbWVudSAiRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMiCi0KLXNvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCi0KLWNvbmZpZyBDT01QQVQKLQlib29sCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IENPTVBBVF9CSU5GTVRfRUxGCi0KLWNvbmZpZyBTWVNWSVBDX0NPTVBBVAotCWJvb2wKLQlkZXBlbmRzIG9uIENPTVBBVCAmJiBTWVNWSVBDCi0JZGVmYXVsdCB5Ci0KLWVuZG1lbnUKLQotY29uZmlnIFNDSEVEX1NNVAotCWJvb2wgIlNNVCAoSHlwZXJ0aHJlYWRpbmcpIHNjaGVkdWxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU01UIHNjaGVkdWxlciBzdXBwb3J0IGltcHJvdmVzIHRoZSBDUFUgc2NoZWR1bGVyJ3MgZGVjaXNpb24gbWFraW5nCi0JICB3aGVuIGRlYWxpbmcgd2l0aCBTUEFSQyBjcHVzIGF0IGEgY29zdCBvZiBzbGlnaHRseSBpbmNyZWFzZWQgb3ZlcmhlYWQKLQkgIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KLQotY29uZmlnIFNDSEVEX01DCi0JYm9vbCAiTXVsdGktY29yZSBzY2hlZHVsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNNUAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIE11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbgotCSAgbWFraW5nIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWNvcmUgQ1BVIGNoaXBzIGF0IGEgY29zdCBvZiBzbGlnaHRseQotCSAgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KLQotc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgotCi1jb25maWcgQ01ETElORV9CT09MCi0JYm9vbCAiRGVmYXVsdCBib290bG9hZGVyIGtlcm5lbCBhcmd1bWVudHMiCi0KLWNvbmZpZyBDTURMSU5FCi0Jc3RyaW5nICJJbml0aWFsIGtlcm5lbCBjb21tYW5kIHN0cmluZyIKLQlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAotCWRlZmF1bHQgImNvbnNvbGU9dHR5UzAsOTYwMCByb290PS9kZXYvc2RhMSIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcGFzcyBkZWZhdWx0IGFyZ3VtZW50cyB0bwotCSAgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGJvb3Rsb2FkZXIsIGlmIHlvdQotCSAgdXNlIG9uZSAoc3VjaCBhcyBTSUxPKS4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBib290Ci0JICBhIGtlcm5lbCBmcm9tIFRGVFAsIGFuZCB3YW50IGRlZmF1bHQgb3B0aW9ucyB0byBiZSBhdmFpbGFibGUKLQkgIHdpdGggaGF2aW5nIHRoZW0gcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0KLQkgIE5PVEU6IFRoaXMgb3B0aW9uIFdJTEwgb3ZlcnJpZGUgdGhlIFBST00gYm9vdGFyZ3Mgc2V0dGluZyEKLQotc291cmNlICJuZXQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9zYnVzL2NoYXIvS2NvbmZpZyIKLQotc291cmNlICJmcy9LY29uZmlnIgotCi1zb3VyY2UgImFyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnIgotCi1zb3VyY2UgInNlY3VyaXR5L0tjb25maWciCi0KLXNvdXJjZSAiY3J5cHRvL0tjb25maWciCi0KLXNvdXJjZSAibGliL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA1MTVjLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotbWVudSAiS2VybmVsIGhhY2tpbmciCi0KLWNvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCi0JYm9vbAotCWRlZmF1bHQgeQotCi1zb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgotCi1jb25maWcgREVCVUdfU1RBQ0tfVVNBR0UKLQlib29sICJFbmFibGUgc3RhY2sgdXRpbGl6YXRpb24gaW5zdHJ1bWVudGF0aW9uIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JaGVscAotCSAgRW5hYmxlcyB0aGUgZGlzcGxheSBvZiB0aGUgbWluaW11bSBhbW91bnQgb2YgZnJlZSBzdGFjayB3aGljaCBlYWNoCi0JICB0YXNrIGhhcyBldmVyIGhhZCBhdmFpbGFibGUgaW4gdGhlIHN5c3JxLVQgYW5kIHN5c3JxLVAgZGVidWcgb3V0cHV0LgotCi0JICBUaGlzIG9wdGlvbiB3aWxsIHNsb3cgZG93biBwcm9jZXNzIGNyZWF0aW9uIHNvbWV3aGF0LgotCi1jb25maWcgREVCVUdfRENGTFVTSAotCWJvb2wgIkQtY2FjaGUgZmx1c2ggZGVidWdnaW5nIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0KLWNvbmZpZyBTVEFDS19ERUJVRwotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JYm9vbCAiU3RhY2sgT3ZlcmZsb3cgRGV0ZWN0aW9uIFN1cHBvcnQiCi0KLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhSElCRVJOQVRJT04KLQloZWxwCi0JICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgotCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKLQkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KLQotY29uZmlnIE1DT1VOVAotCWJvb2wKLQlkZXBlbmRzIG9uIFNUQUNLX0RFQlVHIHx8IEZVTkNUSU9OX1RSQUNFUgotCWRlZmF1bHQgeQotCi1jb25maWcgRlJBTUVfUE9JTlRFUgotCWJvb2wKLQlkZXBlbmRzIG9uIE1DT1VOVAotCWRlZmF1bHQgeQotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MjE0YWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyBzcGFyYzY0L01ha2VmaWxlCi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIG9uIHRoZQotIyA2NC1iaXQgU3BhcmMuCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwxOTk4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSMgQ29weXJpZ2h0IChDKSAxOTk4IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQotIwotCi1DSEVDS0ZMQUdTCSs9IC1EX19zcGFyY19fIC1EX19zcGFyY192OV9fIC1EX19hcmNoNjRfXyAtbTY0Ci0KLSMgVW5kZWZpbmUgc3BhcmMgd2hlbiBwcm9jZXNzaW5nIHZtbGludXgubGRzIC0gaXQgaXMgdXNlZAotIyBBbmQgdGVhY2ggQ1BQIHdlIGFyZSBkb2luZyA2NCBiaXQgYnVpbGRzIChmb3IgdGhpcyBjYXNlKQotQ1BQRkxBR1Nfdm1saW51eC5sZHMgKz0gLW02NCAtVXNwYXJjCi0KLUxERkxBR1MJCTo9IC1tIGVsZjY0X3NwYXJjCi0KLUtCVUlMRF9DRkxBR1MgKz0gLW02NCAtcGlwZSAtbW5vLWZwdSAtbWNwdT11bHRyYXNwYXJjIC1tY21vZGVsPW1lZGxvdyBcCi0JLWZmaXhlZC1nNCAtZmZpeGVkLWc1IC1mY2FsbC11c2VkLWc3IC1Xbm8tc2lnbi1jb21wYXJlIFwKLQktV2EsLS11bmRlY2xhcmVkLXJlZ3MKLUtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9dWx0cmFzcGFyYzMpCi1LQlVJTERfQUZMQUdTICs9IC1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtV2EsLS11bmRlY2xhcmVkLXJlZ3MKLQotaWZlcSAoJChDT05GSUdfTUNPVU5UKSx5KQotICBLQlVJTERfQ0ZMQUdTICs9IC1wZwotZW5kaWYKLQotaGVhZC15IDo9IGFyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5vIGFyY2gvc3BhcmM2NC9rZXJuZWwvaW5pdF90YXNrLm8KLQotY29yZS15CQkJCSs9IGFyY2gvc3BhcmM2NC9rZXJuZWwvIGFyY2gvc3BhcmM2NC9tbS8KLWNvcmUteQkJCQkrPSBhcmNoL3NwYXJjNjQvbWF0aC1lbXUvCi1saWJzLXkJCQkJKz0gYXJjaC9zcGFyYzY0L3Byb20vIGFyY2gvc3BhcmM2NC9saWIvCi1kcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKQkrPSBhcmNoL3NwYXJjNjQvb3Byb2ZpbGUvCi0KLWJvb3QgOj0gYXJjaC9zcGFyYzY0L2Jvb3QKLQotaW1hZ2UgdGZ0cGJvb3QuaW1nIHZtbGludXguYW91dDogdm1saW51eAotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJChib290KS8kQAotCi1hcmNoY2xlYW46Ci0JJChRKSQoTUFLRSkgJChjbGVhbik9JChib290KQotCi1kZWZpbmUgYXJjaGhlbHAKLSAgZWNobyAgJyogdm1saW51eCAgICAgICAtIFN0YW5kYXJkIHNwYXJjNjQga2VybmVsJwotICBlY2hvICAnICB2bWxpbnV4LmFvdXQgIC0gYS5vdXQga2VybmVsIGZvciBzcGFyYzY0JwotICBlY2hvICAnICB0ZnRwYm9vdC5pbWcgIC0gSW1hZ2UgcHJlcGFyZWQgZm9yIHRmdHAnCi1lbmRlZgotCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9ib290L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDU4YjUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9ib290L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgdGhlIFNwYXJjNjQgYm9vdCBzdHVmZi4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSMgQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0KLVJPT1RfSU1HCTo9IC91c3Ivc3JjL3Jvb3QuaW1nCi1FTEZUT0FPVVQJOj0gZWxmdG9hb3V0Ci0KLWhvc3Rwcm9ncy15CTo9IHBpZ2d5YmFjawotdGFyZ2V0cwkJOj0gaW1hZ2UgdGZ0cGJvb3QuaW1nIHZtbGludXguYW91dAotCi1xdWlldF9jbWRfZWxmdG9hb3V0ID0gRUxGMkFPVVQgJEAKLSAgICAgIGNtZF9lbGZ0b2FvdXQgPSAkKEVMRlRPQU9VVCkgdm1saW51eCAtbyAkQAotcXVpZXRfY21kX3BpZ2d5ICAgICA9IFBJR0dZICAgJEAKLSAgICAgIGNtZF9waWdneSAgICAgPSAkKG9iaikvcGlnZ3liYWNrICRAIFN5c3RlbS5tYXAgJChST09UX0lNRykKLXF1aWV0X2NtZF9zdHJpcCAgICAgPSBTVFJJUCAgICRACi0gICAgICBjbWRfc3RyaXAgICAgID0gJChTVFJJUCkgLVIgLmNvbW1lbnQgLVIgLm5vdGUgLUsgc3VuNHVfaW5pdCAtSyBfZW5kIC1LIF9zdGFydCB2bWxpbnV4IC1vICRACi0KLQotIyBBY3R1YWwgbGlua2luZwotJChvYmopL2ltYWdlOiB2bWxpbnV4IEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsc3RyaXApCi0JQGVjaG8gJyAga2VybmVsOiAkQCBpcyByZWFkeScKLQotJChvYmopL3RmdHBib290LmltZzogdm1saW51eCAkKG9iaikvcGlnZ3liYWNrIFN5c3RlbS5tYXAgJChST09UX0lNRykgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxlbGZ0b2FvdXQpCi0JJChjYWxsIGlmX2NoYW5nZWQscGlnZ3kpCi0JQGVjaG8gJyAga2VybmVsOiAkQCBpcyByZWFkeScKLQotJChvYmopL3ZtbGludXguYW91dDogdm1saW51eCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGVsZnRvYW91dCkKLQlAZWNobyAnICBrZXJuZWw6ICRAIGlzIHJlYWR5JwotCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNlMGI5OC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KLSMKLQotRVhUUkFfQUZMQUdTIDo9IC1hbnNpCi1FWFRSQV9DRkxBR1MgOj0gLVdlcnJvcgotCi1DRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCi0KLWV4dHJhLXkJCTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwotCi1vYmoteQkJOj0gcHJvY2Vzcy5vIHNldHVwLm8gY3B1Lm8gaWRwcm9tLm8gcmVib290Lm8gXAotCQkgICB0cmFwcy5vIGF1eGlvLm8gdW5hX2FzbS5vIHN5c2ZzLm8gaW9tbXUubyBcCi0JCSAgIGlycS5vIHB0cmFjZS5vIHRpbWUubyBzeXNfc3BhcmMubyBzaWduYWwubyBcCi0JCSAgIHVuYWxpZ25lZC5vIGNlbnRyYWwubyBzdGFyZmlyZS5vIFwKLQkJICAgcG93ZXIubyBzYnVzLm8gc3BhcmM2NF9rc3ltcy5vIGVidXMubyBcCi0JCSAgIHZpc2VtdWwubyBwcm9tLm8gb2ZfZGV2aWNlLm8gaHZhcGkubyBzc3RhdGUubyBtZGVzYy5vCi0KLW9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgKz0gZnRyYWNlLm8KLW9iai0kKENPTkZJR19TVEFDS1RSQUNFKSArPSBzdGFja3RyYWNlLm8KLW9iai0kKENPTkZJR19QQ0kpCSArPSBwY2kubyBwY2lfY29tbW9uLm8gcHN5Y2hvX2NvbW1vbi5vIFwKLQkJCSAgICBwY2lfcHN5Y2hvLm8gcGNpX3NhYnJlLm8gcGNpX3NjaGl6by5vIFwKLQkJCSAgICBwY2lfc3VuNHYubyBwY2lfc3VuNHZfYXNtLm8gcGNpX2ZpcmUubwotb2JqLSQoQ09ORklHX1BDSV9NU0kpCSs9IHBjaV9tc2kubwotb2JqLSQoQ09ORklHX1NNUCkJICs9IHNtcC5vIHRyYW1wb2xpbmUubyBodnRyYW1wLm8KLW9iai0kKENPTkZJR19DT01QQVQpICs9IHN5czMyLm8gc3lzX3NwYXJjMzIubyBzaWduYWwzMi5vCi1vYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KLW9iai0kKENPTkZJR19VUzNfRlJFUSkgKz0gdXMzX2NwdWZyZXEubwotb2JqLSQoQ09ORklHX1VTMkVfRlJFUSkgKz0gdXMyZV9jcHVmcmVxLm8KLW9iai0kKENPTkZJR19VUzNfTUMpICs9IGNobWMubwotb2JqLSQoQ09ORklHX0tQUk9CRVMpICs9IGtwcm9iZXMubwotb2JqLSQoQ09ORklHX1NVTl9MRE9NUykgKz0gbGRjLm8gdmlvLm8gdmlvaHMubyBkcy5vCi1vYmotJChDT05GSUdfQVVESVQpICs9IGF1ZGl0Lm8KLW9iai0kKENPTkZJR19BVURJVCkkKENPTkZJR19DT01QQVQpICs9IGNvbXBhdF9hdWRpdC5vCi1vYmoteSArPSAkKG9iai15eSkKLW9iai0kKENPTkZJR19LR0RCKSArPSBrZ2RiLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUyNjMxMS4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vKiBEdW1teSBhc20tb2Zmc2V0cy5jIGZpbGUuIFJlcXVpcmVkIGJ5IGtidWlsZCBhbmQgcmVhZHkgdG8gYmUgdXNlZCAtIGhpbnQhICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM5YWM4My4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qIGNwdS5jOiBEaW5reSByb3V0aW5lcyB0byBsb29rIGZvciB0aGUga2luZCBvZiBTcGFyYyBjcHUKLSAqICAgICAgICB3ZSBhcmUgb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDA3LCAyMDA4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KLSNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotCi0jaW5jbHVkZSAiZW50cnkuaCIKLQotREVGSU5FX1BFUl9DUFUoY3B1aW5mb19zcGFyYywgX19jcHVfZGF0YSkgPSB7IDAgfTsKLQotc3RydWN0IGNwdV9jaGlwX2luZm8gewotCXVuc2lnbmVkIHNob3J0CW1hbnVmOwotCXVuc2lnbmVkIHNob3J0CWltcGw7Ci0JY29uc3QgY2hhcgkqY3B1X25hbWU7Ci0JY29uc3QgY2hhcgkqZnBfbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2NoaXBfaW5mbyBjcHVfY2hpcHNbXSA9IHsKLQl7Ci0JCS5tYW51ZgkJPSAweDE3LAotCQkuaW1wbAkJPSAweDEwLAotCQkuY3B1X25hbWUJPSAiVEkgVWx0cmFTcGFyYyBJICAgKFNwaXRGaXJlKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSSBpbnRlZ3JhdGVkIEZQVSIsCi0JfSwKLQl7Ci0JCS5tYW51ZgkJPSAweDIyLAotCQkuaW1wbAkJPSAweDEwLAotCQkuY3B1X25hbWUJPSAiVEkgVWx0cmFTcGFyYyBJICAgKFNwaXRGaXJlKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSSBpbnRlZ3JhdGVkIEZQVSIsCi0JfSwKLQl7Ci0JCS5tYW51ZgkJPSAweDE3LAotCQkuaW1wbAkJPSAweDExLAotCQkuY3B1X25hbWUJPSAiVEkgVWx0cmFTcGFyYyBJSSAgKEJsYWNrQmlyZCkiLAotCQkuZnBfbmFtZQk9ICJVbHRyYVNwYXJjIElJIGludGVncmF0ZWQgRlBVIiwKLQl9LAotCXsKLQkJLm1hbnVmCQk9IDB4MTcsCi0JCS5pbXBsCQk9IDB4MTIsCi0JCS5jcHVfbmFtZQk9ICJUSSBVbHRyYVNwYXJjIElJaSAoU2FicmUpIiwKLQkJLmZwX25hbWUJPSAiVWx0cmFTcGFyYyBJSWkgaW50ZWdyYXRlZCBGUFUiLAotCX0sCi0JewotCQkubWFudWYJCT0gMHgxNywKLQkJLmltcGwJCT0gMHgxMywKLQkJLmNwdV9uYW1lCT0gIlRJIFVsdHJhU3BhcmMgSUllIChIdW1taW5nYmlyZCkiLAotCQkuZnBfbmFtZQk9ICJVbHRyYVNwYXJjIElJZSBpbnRlZ3JhdGVkIEZQVSIsCi0JfSwKLQl7Ci0JCS5tYW51ZgkJPSAweDNlLAotCQkuaW1wbAkJPSAweDE0LAotCQkuY3B1X25hbWUJPSAiVEkgVWx0cmFTcGFyYyBJSUkgKENoZWV0YWgpIiwKLQkJLmZwX25hbWUJPSAiVWx0cmFTcGFyYyBJSUkgaW50ZWdyYXRlZCBGUFUiLAotCX0sCi0JewotCQkubWFudWYJCT0gMHgzZSwKLQkJLmltcGwJCT0gMHgxNSwKLQkJLmNwdV9uYW1lCT0gIlRJIFVsdHJhU3BhcmMgSUlJKyAoQ2hlZXRhaCspIiwKLQkJLmZwX25hbWUJPSAiVWx0cmFTcGFyYyBJSUkrIGludGVncmF0ZWQgRlBVIiwKLQl9LAotCXsKLQkJLm1hbnVmCQk9IDB4M2UsCi0JCS5pbXBsCQk9IDB4MTYsCi0JCS5jcHVfbmFtZQk9ICJUSSBVbHRyYVNwYXJjIElJSWkgKEphbGFwZW5vKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSUlJaSBpbnRlZ3JhdGVkIEZQVSIsCi0JfSwKLQl7Ci0JCS5tYW51ZgkJPSAweDNlLAotCQkuaW1wbAkJPSAweDE4LAotCQkuY3B1X25hbWUJPSAiVEkgVWx0cmFTcGFyYyBJViAoSmFndWFyKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSVYgaW50ZWdyYXRlZCBGUFUiLAotCX0sCi0JewotCQkubWFudWYJCT0gMHgzZSwKLQkJLmltcGwJCT0gMHgxOSwKLQkJLmNwdV9uYW1lCT0gIlRJIFVsdHJhU3BhcmMgSVYrIChQYW50aGVyKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSVYrIGludGVncmF0ZWQgRlBVIiwKLQl9LAotCXsKLQkJLm1hbnVmCQk9IDB4M2UsCi0JCS5pbXBsCQk9IDB4MjIsCi0JCS5jcHVfbmFtZQk9ICJUSSBVbHRyYVNwYXJjIElJSWkrIChTZXJyYW5vKSIsCi0JCS5mcF9uYW1lCT0gIlVsdHJhU3BhcmMgSUlJaSsgaW50ZWdyYXRlZCBGUFUiLAotCX0sCi19OwotCi0jZGVmaW5lIE5TUEFSQ0NISVBTIEFSUkFZX1NJWkUobGludXhfc3BhcmNfY2hpcHMpCi0KLWNvbnN0IGNoYXIgKnNwYXJjX2NwdV90eXBlOwotY29uc3QgY2hhciAqc3BhcmNfZnB1X3R5cGU7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9jcHVfcHJvYmUodm9pZCkKLXsKLQlzd2l0Y2ggKHN1bjR2X2NoaXBfdHlwZSkgewotCWNhc2UgU1VONFZfQ0hJUF9OSUFHQVJBMToKLQkJc3BhcmNfY3B1X3R5cGUgPSAiVWx0cmFTcGFyYyBUMSAoTmlhZ2FyYSkiOwotCQlzcGFyY19mcHVfdHlwZSA9ICJVbHRyYVNwYXJjIFQxIGludGVncmF0ZWQgRlBVIjsKLQkJYnJlYWs7Ci0KLQljYXNlIFNVTjRWX0NISVBfTklBR0FSQTI6Ci0JCXNwYXJjX2NwdV90eXBlID0gIlVsdHJhU3BhcmMgVDIgKE5pYWdhcmEyKSI7Ci0JCXNwYXJjX2ZwdV90eXBlID0gIlVsdHJhU3BhcmMgVDIgaW50ZWdyYXRlZCBGUFUiOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNQVTogVW5rbm93biBzdW40diBjcHUgdHlwZSBbJXNdXG4iLAotCQkgICAgICAgcHJvbV9jcHVfY29tcGF0aWJsZSk7Ci0JCXNwYXJjX2NwdV90eXBlID0gIlVua25vd24gU1VONFYgQ1BVIjsKLQkJc3BhcmNfZnB1X3R5cGUgPSAiVW5rbm93biBTVU40ViBGUFUiOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2NoaXBfaW5mbyAqIF9faW5pdCBmaW5kX2NwdV9jaGlwKHVuc2lnbmVkIHNob3J0IG1hbnVmLAotCQkJCQkJCSB1bnNpZ25lZCBzaG9ydCBpbXBsKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3B1X2NoaXBzKTsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBjcHVfY2hpcF9pbmZvICpwID0gJmNwdV9jaGlwc1tpXTsKLQotCQlpZiAocC0+bWFudWYgPT0gbWFudWYgJiYgcC0+aW1wbCA9PSBpbXBsKQotCQkJcmV0dXJuIHA7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjcHVfdHlwZV9wcm9iZSh2b2lkKQotewotCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7Ci0JCXN1bjR2X2NwdV9wcm9iZSgpOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmVyLCBtYW51ZiwgaW1wbDsKLQkJY29uc3Qgc3RydWN0IGNwdV9jaGlwX2luZm8gKnA7Ci0JCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByICUldmVyLCAlMCIgOiAiPXIiICh2ZXIpKTsKLQkKLQkJbWFudWYgPSAoKHZlciA+PiA0OCkgJiAweGZmZmYpOwotCQlpbXBsID0gKCh2ZXIgPj4gMzIpICYgMHhmZmZmKTsKLQotCQlwID0gZmluZF9jcHVfY2hpcChtYW51ZiwgaW1wbCk7Ci0JCWlmIChwKSB7Ci0JCQlzcGFyY19jcHVfdHlwZSA9IHAtPmNwdV9uYW1lOwotCQkJc3BhcmNfZnB1X3R5cGUgPSBwLT5mcF9uYW1lOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDUFU6IFVua25vd24gY2hpcCwgbWFudWZbJWx4XSBpbXBsWyVseF1cbiIsCi0JCQkgICAgICAgbWFudWYsIGltcGwpOwotCQkJc3BhcmNfY3B1X3R5cGUgPSAiVW5rbm93biBDUFUiOwotCQkJc3BhcmNfZnB1X3R5cGUgPSAiVW5rbm93biBGUFUiOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKGNwdV90eXBlX3Byb2JlKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaWRwcm9tLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lkcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjJmZjgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaWRwcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogaWRwcm9tLmM6IFJvdXRpbmVzIHRvIGxvYWQgdGhlIGlkcHJvbSBpbnRvIGtlcm5lbCBhZGRyZXNzZXMgYW5kCi0gKiAgICAgICAgICAgaW50ZXJwcmV0IHRoZSBkYXRhIGNvbnRhaW5lZCB3aXRoaW4uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLSNpbmNsdWRlIDxhc20vaWRwcm9tLmg+Ci0KLXN0cnVjdCBpZHByb20gKmlkcHJvbTsKLXN0YXRpYyBzdHJ1Y3QgaWRwcm9tIGlkcHJvbV9idWZmZXI7Ci0KLS8qIENhbGN1bGF0ZSB0aGUgSURQUk9NIGNoZWNrc3VtICh4b3Igb2YgdGhlIGRhdGEgYnl0ZXMpLiAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGNhbGNfaWRwcm9tX2Nrc3VtKHN0cnVjdCBpZHByb20gKmlkcHJvbSkKLXsKLQl1bnNpZ25lZCBjaGFyIGNrc3VtLCBpLCAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilpZHByb207Ci0KLQlmb3IgKGkgPSBja3N1bSA9IDA7IGkgPD0gMHgwRTsgaSsrKQotCQlja3N1bSBePSAqcHRyKys7Ci0KLQlyZXR1cm4gY2tzdW07Ci19Ci0KLS8qIENyZWF0ZSBhIGxvY2FsIElEUFJPTSBjb3B5IGFuZCB2ZXJpZnkgaW50ZWdyaXR5LiAqLwotdm9pZCBfX2luaXQgaWRwcm9tX2luaXQodm9pZCkKLXsKLQlwcm9tX2dldF9pZHByb20oKGNoYXIgKikgJmlkcHJvbV9idWZmZXIsIHNpemVvZihpZHByb21fYnVmZmVyKSk7Ci0KLQlpZHByb20gPSAmaWRwcm9tX2J1ZmZlcjsKLQotCWlmIChpZHByb20tPmlkX2Zvcm1hdCAhPSAweDAxKSAgewotCQlwcm9tX3ByaW50ZigiSURQUk9NOiBXYXJuaW5nLCB1bmtub3duIGZvcm1hdCB0eXBlIVxuIik7Ci0JfQotCi0JaWYgKGlkcHJvbS0+aWRfY2tzdW0gIT0gY2FsY19pZHByb21fY2tzdW0oaWRwcm9tKSkgewotCQlwcm9tX3ByaW50ZigiSURQUk9NOiBXYXJuaW5nLCBjaGVja3N1bSBmYWlsdXJlIChudnJhbT0leCwgY2FsYz0leCkhXG4iLAotCQkJICAgIGlkcHJvbS0+aWRfY2tzdW0sIGNhbGNfaWRwcm9tX2Nrc3VtKGlkcHJvbSkpOwotCX0KLQotCXByaW50aygiRXRoZXJuZXQgYWRkcmVzczogJXBNXG4iLCBpZHByb20tPmlkX2V0aGFkZHIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW5pdF90YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYjMxMjMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pbml0X3Rhc2suYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tcXVldWUuaD4KLQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSBJTklUX0ZTOwotc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IElOSVRfU0lHTkFMUyhpbml0X3NpZ25hbHMpOwotc3RhdGljIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCBpbml0X3NpZ2hhbmQgPSBJTklUX1NJR0hBTkQoaW5pdF9zaWdoYW5kKTsKLXN0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IElOSVRfTU0oaW5pdF9tbSk7Ci0KLUVYUE9SVF9TWU1CT0woaW5pdF9tbSk7Ci0KLS8qIC50ZXh0IHNlY3Rpb24gaW4gaGVhZC5TIGlzIGFsaWduZWQgYXQgMiBwYWdlIGJvdW5kYXJ5IGFuZCB0aGlzIGdldHMgbGlua2VkCi0gKiByaWdodCBhZnRlciB0aGF0IHNvIHRoYXQgdGhlIGluaXRfdGhyZWFkX3VuaW9uIGlzIGFsaWduZWQgcHJvcGVybHkgYXMgd2VsbC4KLSAqIFdlIHJlYWxseSBkb24ndCBuZWVkIHRoaXMgc3BlY2lhbCBhbGlnbm1lbnQgbGlrZSB0aGUgSW50ZWwgZG9lcywgYnV0Ci0gKiBJIGRvIGl0IGFueXdheXMgZm9yIGNvbXBsZXRlbmVzcy4KLSAqLwotX19hc21fXyAoIi50ZXh0Iik7Ci11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gPSB7IElOSVRfVEhSRUFEX0lORk8oaW5pdF90YXNrKSB9OwotCi0vKgotICogSW5pdGlhbCB0YXNrIHN0cnVjdHVyZS4KLSAqCi0gKiBBbGwgb3RoZXIgdGFzayBzdHJ1Y3RzIHdpbGwgYmUgYWxsb2NhdGVkIG9uIHNsYWJzIGluIGZvcmsuYwotICovCi1FWFBPUlRfU1lNQk9MKGluaXRfdGFzayk7Ci0KLV9fYXNtX18oIi5kYXRhIik7Ci1zdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrID0gSU5JVF9UQVNLKGluaXRfdGFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9tb2R1bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU4NDg0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qIEtlcm5lbCBtb2R1bGUgaGVscCBmb3Igc3BhcmM2NC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzdHkgUnVzc2VsbC4KLSAqIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBTLiBNaWxsZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgotCi1zdGF0aWMgdm9pZCAqbW9kdWxlX21hcCh1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCWlmICghc2l6ZSB8fCBzaXplID4gTU9EVUxFU19MRU4pCi0JCXJldHVybiBOVUxMOwotCi0JYXJlYSA9IF9fZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fQUxMT0MsIE1PRFVMRVNfVkFERFIsIE1PRFVMRVNfRU5EKTsKLQlpZiAoIWFyZWEpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIF9fdm1hbGxvY19hcmVhKGFyZWEsIEdGUF9LRVJORUwsIFBBR0VfS0VSTkVMKTsKLX0KLQotdm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkICpyZXQ7Ci0KLQkvKiBXZSBoYW5kbGUgdGhlIHplcm8gY2FzZSBmaW5lLCB1bmxpa2Ugdm1hbGxvYyAqLwotCWlmIChzaXplID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JcmV0ID0gbW9kdWxlX21hcChzaXplKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQllbHNlCi0JCW1lbXNldChyZXQsIDAsIHNpemUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfY29yZV9hbGxvYy9tb2R1bGVfaW5pdF9hbGxvYyAqLwotdm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCi17Ci0JdmZyZWUobW9kdWxlX3JlZ2lvbik7Ci0JLyogRklYTUU6IElmIG1vZHVsZV9yZWdpb24gPT0gbW9kLT5pbml0X3JlZ2lvbiwgdHJpbSBleGNlcHRpb24KLSAgICAgICAgICAgdGFibGUgZW50cmllcy4gKi8KLX0KLQotLyogTWFrZSBnZW5lcmljIGNvZGUgaWdub3JlIFNUVF9SRUdJU1RFUiBkdW1teSB1bmRlZmluZWQgc3ltYm9scy4gICovCi1pbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLAotCQkJICAgICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLAotCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXVuc2lnbmVkIGludCBzeW1pZHg7Ci0JRWxmNjRfU3ltICpzeW07Ci0JY29uc3QgY2hhciAqc3RydGFiOwotCWludCBpOwotCi0JZm9yIChzeW1pZHggPSAwOyBzZWNoZHJzW3N5bWlkeF0uc2hfdHlwZSAhPSBTSFRfU1lNVEFCOyBzeW1pZHgrKykgewotCQlpZiAoc3ltaWR4ID09IGhkci0+ZV9zaG51bS0xKSB7Ci0JCQlwcmludGsoIiVzOiBubyBzeW10YWIgZm91bmQuXG4iLCBtb2QtPm5hbWUpOwotCQkJcmV0dXJuIC1FTk9FWEVDOwotCQl9Ci0JfQotCXN5bSA9IChFbGY2NF9TeW0gKilzZWNoZHJzW3N5bWlkeF0uc2hfYWRkcjsKLQlzdHJ0YWIgPSAoY2hhciAqKXNlY2hkcnNbc2VjaGRyc1tzeW1pZHhdLnNoX2xpbmtdLnNoX2FkZHI7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgc2VjaGRyc1tzeW1pZHhdLnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7IGkrKykgewotCQlpZiAoc3ltW2ldLnN0X3NobmR4ID09IFNITl9VTkRFRiAmJgotCQkgICAgRUxGNjRfU1RfVFlQRShzeW1baV0uc3RfaW5mbykgPT0gU1RUX1JFR0lTVEVSKQotCQkJc3ltW2ldLnN0X3NobmR4ID0gU0hOX0FCUzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBhcHBseV9yZWxvY2F0ZShFbGY2NF9TaGRyICpzZWNoZHJzLAotCQkgICBjb25zdCBjaGFyICpzdHJ0YWIsCi0JCSAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKLQkJICAgdW5zaWduZWQgaW50IHJlbHNlYywKLQkJICAgc3RydWN0IG1vZHVsZSAqbWUpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICJtb2R1bGUgJXM6IG5vbi1BREQgUkVMT0NBVElPTiB1bnN1cHBvcnRlZFxuIiwKLQkgICAgICAgbWUtPm5hbWUpOwotCXJldHVybiAtRU5PRVhFQzsKLX0KLQotaW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGY2NF9TaGRyICpzZWNoZHJzLAotCQkgICAgICAgY29uc3QgY2hhciAqc3RydGFiLAotCQkgICAgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAotCQkgICAgICAgdW5zaWduZWQgaW50IHJlbHNlYywKLQkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm1lKQotewotCXVuc2lnbmVkIGludCBpOwotCUVsZjY0X1JlbGEgKnJlbCA9ICh2b2lkICopc2VjaGRyc1tyZWxzZWNdLnNoX2FkZHI7Ci0JRWxmNjRfU3ltICpzeW07Ci0JdTggKmxvY2F0aW9uOwotCXUzMiAqbG9jMzI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2VjaGRyc1tyZWxzZWNdLnNoX3NpemUgLyBzaXplb2YoKnJlbCk7IGkrKykgewotCQlFbGY2NF9BZGRyIHY7Ci0KLQkJLyogVGhpcyBpcyB3aGVyZSB0byBtYWtlIHRoZSBjaGFuZ2UgKi8KLQkJbG9jYXRpb24gPSAodTggKilzZWNoZHJzW3NlY2hkcnNbcmVsc2VjXS5zaF9pbmZvXS5zaF9hZGRyCi0JCQkrIHJlbFtpXS5yX29mZnNldDsKLQkJbG9jMzIgPSAodTMyICopIGxvY2F0aW9uOwotCi0JCUJVR19PTigoKHU2NClsb2NhdGlvbiA+PiAodTY0KTMyKSAhPSAodTY0KTApOwotCi0JCS8qIFRoaXMgaXMgdGhlIHN5bWJvbCBpdCBpcyByZWZlcnJpbmcgdG8uICBOb3RlIHRoYXQgYWxsCi0JCSAgIHVuZGVmaW5lZCBzeW1ib2xzIGhhdmUgYmVlbiByZXNvbHZlZC4gICovCi0JCXN5bSA9IChFbGY2NF9TeW0gKilzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyCi0JCQkrIEVMRjY0X1JfU1lNKHJlbFtpXS5yX2luZm8pOwotCQl2ID0gc3ltLT5zdF92YWx1ZSArIHJlbFtpXS5yX2FkZGVuZDsKLQotCQlzd2l0Y2ggKEVMRjY0X1JfVFlQRShyZWxbaV0ucl9pbmZvKSAmIDB4ZmYpIHsKLQkJY2FzZSBSX1NQQVJDXzY0OgotCQkJbG9jYXRpb25bMF0gPSB2ID4+IDU2OwotCQkJbG9jYXRpb25bMV0gPSB2ID4+IDQ4OwotCQkJbG9jYXRpb25bMl0gPSB2ID4+IDQwOwotCQkJbG9jYXRpb25bM10gPSB2ID4+IDMyOwotCQkJbG9jYXRpb25bNF0gPSB2ID4+IDI0OwotCQkJbG9jYXRpb25bNV0gPSB2ID4+IDE2OwotCQkJbG9jYXRpb25bNl0gPSB2ID4+ICA4OwotCQkJbG9jYXRpb25bN10gPSB2ID4+ICAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSX1NQQVJDXzMyOgotCQkJbG9jYXRpb25bMF0gPSB2ID4+IDI0OwotCQkJbG9jYXRpb25bMV0gPSB2ID4+IDE2OwotCQkJbG9jYXRpb25bMl0gPSB2ID4+ICA4OwotCQkJbG9jYXRpb25bM10gPSB2ID4+ICAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSX1NQQVJDX0RJU1AzMjoKLQkJCXYgLT0gKEVsZjY0X0FkZHIpIGxvY2F0aW9uOwotCQkJKmxvYzMyID0gdjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUl9TUEFSQ19XRElTUDMwOgotCQkJdiAtPSAoRWxmNjRfQWRkcikgbG9jYXRpb247Ci0JCQkqbG9jMzIgPSAoKmxvYzMyICYgfjB4M2ZmZmZmZmYpIHwKLQkJCQkoKHYgPj4gMikgJiAweDNmZmZmZmZmKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUl9TUEFSQ19XRElTUDIyOgotCQkJdiAtPSAoRWxmNjRfQWRkcikgbG9jYXRpb247Ci0JCQkqbG9jMzIgPSAoKmxvYzMyICYgfjB4M2ZmZmZmKSB8Ci0JCQkJKCh2ID4+IDIpICYgMHgzZmZmZmYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSX1NQQVJDX1dESVNQMTk6Ci0JCQl2IC09IChFbGY2NF9BZGRyKSBsb2NhdGlvbjsKLQkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHg3ZmZmZikgfAotCQkJCSgodiA+PiAyKSAmIDB4N2ZmZmYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSX1NQQVJDX0xPMTA6Ci0JCQkqbG9jMzIgPSAoKmxvYzMyICYgfjB4M2ZmKSB8ICh2ICYgMHgzZmYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSX1NQQVJDX0hJMjI6Ci0JCQkqbG9jMzIgPSAoKmxvYzMyICYgfjB4M2ZmZmZmKSB8Ci0JCQkJKCh2ID4+IDEwKSAmIDB4M2ZmZmZmKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUl9TUEFSQ19PTE8xMDoKLQkJCSpsb2MzMiA9ICgqbG9jMzIgJiB+MHgxZmZmKSB8Ci0JCQkJKCgodiAmIDB4M2ZmKSArCi0JCQkJICAoRUxGNjRfUl9UWVBFKHJlbFtpXS5yX2luZm8pID4+IDgpKQotCQkJCSAmIDB4MWZmZik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJtb2R1bGUgJXM6IFVua25vd24gcmVsb2NhdGlvbjogJXhcbiIsCi0JCQkgICAgICAgbWUtPm5hbWUsCi0JCQkgICAgICAgKGludCkgKEVMRjY0X1JfVFlQRShyZWxbaV0ucl9pbmZvKSAmIDB4ZmYpKTsKLQkJCXJldHVybiAtRU5PRVhFQzsKLQkJfTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKLQkJICAgIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAotCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCi17Ci0JLyogQ2hlZXRhaCdzIEktY2FjaGUgaXMgZnVsbHkgY29oZXJlbnQuICAqLwotCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgewotCQl1bnNpZ25lZCBsb25nIHZhOwotCi0JCWZsdXNod19hbGwoKTsKLQkJZm9yICh2YSA9ICAwOyB2YSA8IChQQUdFX1NJWkUgPDwgMSk7IHZhICs9IDMyKQotCQkJc3BpdGZpcmVfcHV0X2ljYWNoZV90YWcodmEsIDB4MCk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaCAlZzYiKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvbS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYmE4MmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjg0ICswLDAgQEAKLS8qCi0gKiBQcm9jZWR1cmVzIGZvciBjcmVhdGluZywgYWNjZXNzaW5nIGFuZCBpbnRlcnByZXRpbmcgdGhlIGRldmljZSB0cmVlLgotICoKLSAqIFBhdWwgTWFja2VycmFzCUF1Z3VzdCAxOTk2LgotICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCi0gKiAKLSAqICBBZGFwdGVkIGZvciA2NGJpdCBQb3dlclBDIGJ5IERhdmUgRW5nZWJyZXRzZW4gYW5kIFBldGVyIEJlcmduZXIuCi0gKiAgICB7ZW5nZWJyZXR8YmVyZ25lcn1AdXMuaWJtLmNvbSAKLSAqCi0gKiAgQWRhcHRlZCBmb3Igc3BhcmM2NCBieSBEYXZpZCBTLiBNaWxsZXIgZGF2ZW1AZGF2ZW1sb2Z0Lm5ldAotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotCi0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS91cGEuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBoYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQotCQlpZiAobnAtPm5vZGUgPT0gaGFuZGxlKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQotaW50IG9mX2dldGludHByb3BfZGVmYXVsdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlpbnQgbGVuOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsIG5hbWUsICZsZW4pOwotCWlmICghcHJvcCB8fCBsZW4gIT0gNCkKLQkJcmV0dXJuIGRlZjsKLQotCXJldHVybiAqKGludCAqKSBwcm9wLT52YWx1ZTsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZ2V0aW50cHJvcF9kZWZhdWx0KTsKLQotREVGSU5FX01VVEVYKG9mX3NldF9wcm9wZXJ0eV9tdXRleCk7Ci1FWFBPUlRfU1lNQk9MKG9mX3NldF9wcm9wZXJ0eV9tdXRleCk7Ci0KLWludCBvZl9zZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsLCBpbnQgbGVuKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKnByZXZwOwotCXZvaWQgKm5ld192YWw7Ci0JaW50IGVycjsKLQotCW5ld192YWwgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXdfdmFsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShuZXdfdmFsLCB2YWwsIGxlbik7Ci0KLQllcnIgPSAtRU5PREVWOwotCi0Jd3JpdGVfbG9jaygmZGV2dHJlZV9sb2NrKTsKLQlwcmV2cCA9ICZkcC0+cHJvcGVydGllczsKLQl3aGlsZSAoKnByZXZwKSB7Ci0JCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9ICpwcmV2cDsKLQotCQlpZiAoIXN0cmNhc2VjbXAocHJvcC0+bmFtZSwgbmFtZSkpIHsKLQkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKLQkJCWludCByZXQ7Ci0KLQkJCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7Ci0JCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPm5vZGUsIG5hbWUsIHZhbCwgbGVuKTsKLQkJCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKLQotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWlmIChyZXQgPj0gMCkgewotCQkJCXByb3AtPnZhbHVlID0gbmV3X3ZhbDsKLQkJCQlwcm9wLT5sZW5ndGggPSBsZW47Ci0KLQkJCQlpZiAoT0ZfSVNfRFlOQU1JQyhwcm9wKSkKLQkJCQkJa2ZyZWUob2xkX3ZhbCk7Ci0KLQkJCQlPRl9NQVJLX0RZTkFNSUMocHJvcCk7Ci0KLQkJCQllcnIgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJcHJldnAgPSAmKCpwcmV2cCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKLQotCS8qIFhYWCBVcGF0ZSBwcm9jZnMgaWYgbmVjZXNzYXJ5Li4uICovCi0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChvZl9zZXRfcHJvcGVydHkpOwotCi1pbnQgb2ZfZmluZF9pbl9wcm9wbGlzdChjb25zdCBjaGFyICpsaXN0LCBjb25zdCBjaGFyICptYXRjaCwgaW50IGxlbikKLXsKLQl3aGlsZSAobGVuID4gMCkgewotCQlpbnQgbDsKLQotCQlpZiAoIXN0cmNtcChsaXN0LCBtYXRjaCkpCi0JCQlyZXR1cm4gMTsKLQkJbCA9IHN0cmxlbihsaXN0KSArIDE7Ci0JCWxpc3QgKz0gbDsKLQkJbGVuIC09IGw7Ci0JfQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX2luX3Byb3BsaXN0KTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBwcm9tX2Vhcmx5X2FsbG9jYXRlZCBfX2luaXRkYXRhOwotCi1zdGF0aWMgdm9pZCAqIF9faW5pdCBwcm9tX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhZGRyID0gbG1iX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7Ci0Jdm9pZCAqcmV0OwotCi0JaWYgKCFwYWRkcikgewotCQlwcm9tX3ByaW50ZigicHJvbV9lYXJseV9hbGxvYyglbHUpIGZhaWxlZFxuIik7Ci0JCXByb21faGFsdCgpOwotCX0KLQotCXJldCA9IF9fdmEocGFkZHIpOwotCW1lbXNldChyZXQsIDAsIHNpemUpOwotCXByb21fZWFybHlfYWxsb2NhdGVkICs9IHNpemU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgQ09ORklHX1BDSQotLyogUFNZQ0hPIGludGVycnVwdCBtYXBwaW5nIHN1cHBvcnQuICovCi0jZGVmaW5lIFBTWUNIT19JTUFQX0FfU0xPVDAJMHgwYzAwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfQl9TTE9UMAkweDBjMjBVTAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHN5Y2hvX3BjaXNsb3RfaW1hcF9vZmZzZXQodW5zaWduZWQgbG9uZyBpbm8pCi17Ci0JdW5zaWduZWQgaW50IGJ1cyA9ICAoaW5vICYgMHgxMCkgPj4gNDsKLQl1bnNpZ25lZCBpbnQgc2xvdCA9IChpbm8gJiAweDBjKSA+PiAyOwotCi0JaWYgKGJ1cyA9PSAwKQotCQlyZXR1cm4gUFNZQ0hPX0lNQVBfQV9TTE9UMCArIChzbG90ICogOCk7Ci0JZWxzZQotCQlyZXR1cm4gUFNZQ0hPX0lNQVBfQl9TTE9UMCArIChzbG90ICogOCk7Ci19Ci0KLSNkZWZpbmUgUFNZQ0hPX09CSU9fSU1BUF9CQVNFCTB4MTAwMFVMCi0KLSNkZWZpbmUgUFNZQ0hPX09OQk9BUkRfSVJRX0JBU0UJCTB4MjAKLSNkZWZpbmUgcHN5Y2hvX29uYm9hcmRfaW1hcF9vZmZzZXQoX19pbm8pIFwKLQkoUFNZQ0hPX09CSU9fSU1BUF9CQVNFICsgKCgoX19pbm8pICYgMHgxZikgPDwgMykpCi0KLSNkZWZpbmUgUFNZQ0hPX0lDTFJfQV9TTE9UMAkweDE0MDBVTAotI2RlZmluZSBQU1lDSE9fSUNMUl9TQ1NJCTB4MTgwMFVMCi0KLSNkZWZpbmUgcHN5Y2hvX2ljbHJfb2Zmc2V0KGlubykJCQkJCSAgICAgIFwKLQkoKGlubyAmIDB4MjApID8gKFBTWUNIT19JQ0xSX1NDU0kgKyAoKChpbm8pICYgMHgxZikgPDwgMykpIDogIFwKLQkJCShQU1lDSE9fSUNMUl9BX1NMT1QwICsgKCgoaW5vKSAmIDB4MWYpPDwzKSkpCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHN5Y2hvX2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAotCQkJCSAgICAgdW5zaWduZWQgaW50IGlubywKLQkJCQkgICAgIHZvaWQgKl9kYXRhKQotewotCXVuc2lnbmVkIGxvbmcgY29udHJvbGxlcl9yZWdzID0gKHVuc2lnbmVkIGxvbmcpIF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKLQl1bnNpZ25lZCBsb25nIGltYXBfb2ZmLCBpY2xyX29mZjsKLQlpbnQgaW5vZml4dXAgPSAwOwotCi0JaW5vICY9IDB4M2Y7Ci0JaWYgKGlubyA8IFBTWUNIT19PTkJPQVJEX0lSUV9CQVNFKSB7Ci0JCS8qIFBDSSBzbG90ICovCi0JCWltYXBfb2ZmID0gcHN5Y2hvX3BjaXNsb3RfaW1hcF9vZmZzZXQoaW5vKTsKLQl9IGVsc2UgewotCQkvKiBPbmJvYXJkIGRldmljZSAqLwotCQlpbWFwX29mZiA9IHBzeWNob19vbmJvYXJkX2ltYXBfb2Zmc2V0KGlubyk7Ci0JfQotCi0JLyogTm93IGJ1aWxkIHRoZSBJUlEgYnVja2V0LiAqLwotCWltYXAgPSBjb250cm9sbGVyX3JlZ3MgKyBpbWFwX29mZjsKLQotCWljbHJfb2ZmID0gcHN5Y2hvX2ljbHJfb2Zmc2V0KGlubyk7Ci0JaWNsciA9IGNvbnRyb2xsZXJfcmVncyArIGljbHJfb2ZmOwotCi0JaWYgKChpbm8gJiAweDIwKSA9PSAwKQotCQlpbm9maXh1cCA9IGlubyAmIDB4MDM7Ci0KLQlyZXR1cm4gYnVpbGRfaXJxKGlub2ZpeHVwLCBpY2xyLCBpbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBzeWNob19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCi0JZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOwotCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHBzeWNob19pcnFfYnVpbGQ7Ci0KLQlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopIHJlZ3NbMl0ucGh5c19hZGRyOwotfQotCi0jZGVmaW5lIHNhYnJlX3JlYWQoX19yZWcpIFwKLSh7CXU2NCBfX3JldDsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhIFslMV0gJTIsICUwIiBcCi0JCQkgICAgIDogIj1yIiAoX19yZXQpIFwKLQkJCSAgICAgOiAiciIgKF9fcmVnKSwgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRSkgXAotCQkJICAgICA6ICJtZW1vcnkiKTsgXAotCV9fcmV0OyBcCi19KQotCi1zdHJ1Y3Qgc2FicmVfaXJxX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgY29udHJvbGxlcl9yZWdzOwotCXVuc2lnbmVkIGludCBwY2lfZmlyc3RfYnVzbm87Ci19OwotI2RlZmluZSBTQUJSRV9DT05GSUdTUEFDRQkweDAwMTAwMDAwMFVMCi0jZGVmaW5lIFNBQlJFX1dSU1lOQwkJMHgxYzIwVUwKLQotI2RlZmluZSBTQUJSRV9DT05GSUdfQkFTRShDT05GSUdfU1BBQ0UpCVwKLQkoQ09ORklHX1NQQUNFIHwgKDFVTCA8PCAyNCkpCi0jZGVmaW5lIFNBQlJFX0NPTkZJR19FTkNPREUoQlVTLCBERVZGTiwgUkVHKQlcCi0JKCgodW5zaWduZWQgbG9uZykoQlVTKSAgIDw8IDE2KSB8CVwKLQkgKCh1bnNpZ25lZCBsb25nKShERVZGTikgPDwgOCkgIHwJXAotCSAoKHVuc2lnbmVkIGxvbmcpKFJFRykpKQotCi0vKiBXaGVuIGEgZGV2aWNlIGxpdmVzIGJlaGluZCBhIGJyaWRnZSBkZWVwZXIgaW4gdGhlIFBDSSBidXMgdG9wb2xvZ3kKLSAqIHRoYW4gQVBCLCBhIHNwZWNpYWwgc2VxdWVuY2UgbXVzdCBydW4gdG8gbWFrZSBzdXJlIGFsbCBwZW5kaW5nIERNQQotICogdHJhbnNmZXJzIGF0IHRoZSB0aW1lIG9mIElSUSBkZWxpdmVyeSBhcmUgdmlzaWJsZSBpbiB0aGUgY29oZXJlbmN5Ci0gKiBkb21haW4gYnkgdGhlIGNwdS4gIFRoaXMgc2VxdWVuY2UgaXMgdG8gcGVyZm9ybSBhIHJlYWQgb24gdGhlIGZhcgotICogc2lkZSBvZiB0aGUgbm9uLUFQQiBicmlkZ2UsIHRoZW4gcGVyZm9ybSBhIHJlYWQgb2YgU2FicmUncyBETUEKLSAqIHdyaXRlLXN5bmMgcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHNhYnJlX3dzeW5jX2hhbmRsZXIodW5zaWduZWQgaW50IGlubywgdm9pZCAqX2FyZzEsIHZvaWQgKl9hcmcyKQotewotCXVuc2lnbmVkIGludCBwaHlzX2hpID0gKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGxvbmcpIF9hcmcxOwotCXN0cnVjdCBzYWJyZV9pcnFfZGF0YSAqaXJxX2RhdGEgPSBfYXJnMjsKLQl1bnNpZ25lZCBsb25nIGNvbnRyb2xsZXJfcmVncyA9IGlycV9kYXRhLT5jb250cm9sbGVyX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBzeW5jX3JlZyA9IGNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1dSU1lOQzsKLQl1bnNpZ25lZCBsb25nIGNvbmZpZ19zcGFjZSA9IGNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0NPTkZJR1NQQUNFOwotCXVuc2lnbmVkIGludCBidXMsIGRldmZuOwotCXUxNiBfdW51c2VkOwotCi0JY29uZmlnX3NwYWNlID0gU0FCUkVfQ09ORklHX0JBU0UoY29uZmlnX3NwYWNlKTsKLQotCWJ1cyA9IChwaHlzX2hpID4+IDE2KSAmIDB4ZmY7Ci0JZGV2Zm4gPSAocGh5c19oaSA+PiA4KSAmIDB4ZmY7Ci0KLQljb25maWdfc3BhY2UgfD0gU0FCUkVfQ09ORklHX0VOQ09ERShidXMsIGRldmZuLCAweDAwKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtZW1iYXIgI1N5bmNcblx0IgotCQkJICAgICAibGR1aGEgWyUxXSAlMiwgJTBcblx0IgotCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJICAgICA6ICI9ciIgKF91bnVzZWQpCi0JCQkgICAgIDogInIiICgodTE2ICopIGNvbmZpZ19zcGFjZSksCi0JCQkgICAgICAgImkiIChBU0lfUEhZU19CWVBBU1NfRUNfRV9MKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQotCXNhYnJlX3JlYWQoc3luY19yZWcpOwotfQotCi0jZGVmaW5lIFNBQlJFX0lNQVBfQV9TTE9UMAkweDBjMDBVTAotI2RlZmluZSBTQUJSRV9JTUFQX0JfU0xPVDAJMHgwYzIwVUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9BX1NMT1QwCTB4MTQwMFVMCi0jZGVmaW5lIFNBQlJFX0lDTFJfQl9TTE9UMAkweDE0ODBVTAotI2RlZmluZSBTQUJSRV9JQ0xSX1NDU0kJCTB4MTgwMFVMCi0jZGVmaW5lIFNBQlJFX0lDTFJfRVRICQkweDE4MDhVTAotI2RlZmluZSBTQUJSRV9JQ0xSX0JQUAkJMHgxODEwVUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9BVV9SRUMJMHgxODE4VUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9BVV9QTEFZCTB4MTgyMFVMCi0jZGVmaW5lIFNBQlJFX0lDTFJfUEZBSUwJMHgxODI4VUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9LTVMJCTB4MTgzMFVMCi0jZGVmaW5lIFNBQlJFX0lDTFJfRkxQWQkJMHgxODM4VUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9TSFcJCTB4MTg0MFVMCi0jZGVmaW5lIFNBQlJFX0lDTFJfS0JECQkweDE4NDhVTAotI2RlZmluZSBTQUJSRV9JQ0xSX01TCQkweDE4NTBVTAotI2RlZmluZSBTQUJSRV9JQ0xSX1NFUgkJMHgxODU4VUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9VRQkJMHgxODcwVUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9DRQkJMHgxODc4VUwKLSNkZWZpbmUgU0FCUkVfSUNMUl9QQ0lFUlIJMHgxODgwVUwKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2FicmVfcGNpc2xvdF9pbWFwX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKLXsKLQl1bnNpZ25lZCBpbnQgYnVzID0gIChpbm8gJiAweDEwKSA+PiA0OwotCXVuc2lnbmVkIGludCBzbG90ID0gKGlubyAmIDB4MGMpID4+IDI7Ci0KLQlpZiAoYnVzID09IDApCi0JCXJldHVybiBTQUJSRV9JTUFQX0FfU0xPVDAgKyAoc2xvdCAqIDgpOwotCWVsc2UKLQkJcmV0dXJuIFNBQlJFX0lNQVBfQl9TTE9UMCArIChzbG90ICogOCk7Ci19Ci0KLSNkZWZpbmUgU0FCUkVfT0JJT19JTUFQX0JBU0UJMHgxMDAwVUwKLSNkZWZpbmUgU0FCUkVfT05CT0FSRF9JUlFfQkFTRQkweDIwCi0jZGVmaW5lIHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoX19pbm8pIFwKLQkoU0FCUkVfT0JJT19JTUFQX0JBU0UgKyAoKChfX2lubykgJiAweDFmKSA8PCAzKSkKLQotI2RlZmluZSBzYWJyZV9pY2xyX29mZnNldChpbm8pCQkJCQkgICAgICBcCi0JKChpbm8gJiAweDIwKSA/IChTQUJSRV9JQ0xSX1NDU0kgKyAoKChpbm8pICYgMHgxZikgPDwgMykpIDogIFwKLQkJCShTQUJSRV9JQ0xSX0FfU0xPVDAgKyAoKChpbm8pICYgMHgxZik8PDMpKSkKLQotc3RhdGljIGludCBzYWJyZV9kZXZpY2VfbmVlZHNfd3N5bmMoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCA9IGRwLT5wYXJlbnQ7Ci0JY29uc3QgY2hhciAqcGFyZW50X21vZGVsLCAqcGFyZW50X2NvbXBhdDsKLQotCS8qIFRoaXMgdHJhdmVyc2FsIHVwIHRvd2FyZHMgdGhlIHJvb3QgaXMgbWVhbnQgdG8KLQkgKiBoYW5kbGUgdHdvIGNhc2VzOgotCSAqCi0JICogMSkgbm9uLVBDSSBidXMgc2l0dGluZyB1bmRlciBQQ0ksIHN1Y2ggYXMgJ2VidXMnCi0JICogMikgdGhlIFBDSSBjb250cm9sbGVyIGludGVycnVwdHMgdGhlbXNlbHZlcywgd2hpY2gKLQkgKiAgICB3aWxsIHVzZSB0aGUgc2FicmVfaXJxX2J1aWxkIGJ1dCBkbyBub3QgbmVlZAotCSAqICAgIHRoZSBETUEgc3luY2hyb25pemF0aW9uIGhhbmRsaW5nCi0JICovCi0Jd2hpbGUgKHBhcmVudCkgewotCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJwY2kiKSkKLQkJCWJyZWFrOwotCQlwYXJlbnQgPSBwYXJlbnQtPnBhcmVudDsKLQl9Ci0KLQlpZiAoIXBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlwYXJlbnRfbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LAotCQkJCSAgICAgICAibW9kZWwiLCBOVUxMKTsKLQlpZiAocGFyZW50X21vZGVsICYmCi0JICAgICghc3RyY21wKHBhcmVudF9tb2RlbCwgIlNVTlcsc2FicmUiKSB8fAotCSAgICAgIXN0cmNtcChwYXJlbnRfbW9kZWwsICJTVU5XLHNpbWJhIikpKQotCQlyZXR1cm4gMDsKLQotCXBhcmVudF9jb21wYXQgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LAotCQkJCQkiY29tcGF0aWJsZSIsIE5VTEwpOwotCWlmIChwYXJlbnRfY29tcGF0ICYmCi0JICAgICghc3RyY21wKHBhcmVudF9jb21wYXQsICJwY2kxMDhlLGEwMDAiKSB8fAotCSAgICAgIXN0cmNtcChwYXJlbnRfY29tcGF0LCAicGNpMTA4ZSxhMDAxIikpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNhYnJlX2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgaW5vLAotCQkJCSAgICB2b2lkICpfZGF0YSkKLXsKLQlzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEgKmlycV9kYXRhID0gX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBjb250cm9sbGVyX3JlZ3MgPSBpcnFfZGF0YS0+Y29udHJvbGxlcl9yZWdzOwotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgKnJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOwotCXVuc2lnbmVkIGxvbmcgaW1hcF9vZmYsIGljbHJfb2ZmOwotCWludCBpbm9maXh1cCA9IDA7Ci0JaW50IHZpcnRfaXJxOwotCi0JaW5vICY9IDB4M2Y7Ci0JaWYgKGlubyA8IFNBQlJFX09OQk9BUkRfSVJRX0JBU0UpIHsKLQkJLyogUENJIHNsb3QgKi8KLQkJaW1hcF9vZmYgPSBzYWJyZV9wY2lzbG90X2ltYXBfb2Zmc2V0KGlubyk7Ci0JfSBlbHNlIHsKLQkJLyogb25ib2FyZCBkZXZpY2UgKi8KLQkJaW1hcF9vZmYgPSBzYWJyZV9vbmJvYXJkX2ltYXBfb2Zmc2V0KGlubyk7Ci0JfQotCi0JLyogTm93IGJ1aWxkIHRoZSBJUlEgYnVja2V0LiAqLwotCWltYXAgPSBjb250cm9sbGVyX3JlZ3MgKyBpbWFwX29mZjsKLQotCWljbHJfb2ZmID0gc2FicmVfaWNscl9vZmZzZXQoaW5vKTsKLQlpY2xyID0gY29udHJvbGxlcl9yZWdzICsgaWNscl9vZmY7Ci0KLQlpZiAoKGlubyAmIDB4MjApID09IDApCi0JCWlub2ZpeHVwID0gaW5vICYgMHgwMzsKLQotCXZpcnRfaXJxID0gYnVpbGRfaXJxKGlub2ZpeHVwLCBpY2xyLCBpbWFwKTsKLQotCS8qIElmIHRoZSBwYXJlbnQgZGV2aWNlIGlzIGEgUENJPC0+UENJIGJyaWRnZSBvdGhlciB0aGFuCi0JICogQVBCLCB3ZSBoYXZlIHRvIGluc3RhbGwgYSBwcmUtaGFuZGxlciB0byBlbnN1cmUgdGhhdAotCSAqIGFsbCBwZW5kaW5nIERNQSBpcyBkcmFpbmVkIGJlZm9yZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLQkgKiBpcyBydW4uCi0JICovCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmIChyZWdzICYmIHNhYnJlX2RldmljZV9uZWVkc193c3luYyhkcCkpIHsKLQkJaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIodmlydF9pcnEsCi0JCQkJCXNhYnJlX3dzeW5jX2hhbmRsZXIsCi0JCQkJCSh2b2lkICopIChsb25nKSByZWdzLT5waHlzX2hpLAotCQkJCQkodm9pZCAqKSBpcnFfZGF0YSk7Ci0JfQotCi0JcmV0dXJuIHZpcnRfaXJxOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2FicmVfaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKLQlzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEgKmlycV9kYXRhOwotCWNvbnN0IHUzMiAqYnVzcmFuZ2U7Ci0KLQlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7Ci0JZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gc2FicmVfaXJxX2J1aWxkOwotCi0JaXJxX2RhdGEgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEpKTsKLQotCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpcnFfZGF0YS0+Y29udHJvbGxlcl9yZWdzID0gcmVnc1swXS5waHlzX2FkZHI7Ci0KLQlidXNyYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImJ1cy1yYW5nZSIsIE5VTEwpOwotCWlycV9kYXRhLT5wY2lfZmlyc3RfYnVzbm8gPSBidXNyYW5nZVswXTsKLQotCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSBpcnFfZGF0YTsKLX0KLQotLyogU0NISVpPIGludGVycnVwdCBtYXBwaW5nIHN1cHBvcnQuICBVbmxpa2UgUHN5Y2hvLCBmb3IgdGhpcyBjb250cm9sbGVyIHRoZQotICogaW1hcC9pY2xyIHJlZ2lzdGVycyBhcmUgcGVyLVBCTS4KLSAqLwotI2RlZmluZSBTQ0hJWk9fSU1BUF9CQVNFCTB4MTAwMFVMCi0jZGVmaW5lIFNDSElaT19JQ0xSX0JBU0UJMHgxNDAwVUwKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoaXpvX2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQotewotCXJldHVybiBTQ0hJWk9fSU1BUF9CQVNFICsgKGlubyAqIDhVTCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pY2xyX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKLXsKLQlyZXR1cm4gU0NISVpPX0lDTFJfQkFTRSArIChpbm8gKiA4VUwpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hpem9faW5vX3RvX2ljbHIodW5zaWduZWQgbG9uZyBwYm1fcmVncywKLQkJCQkJdW5zaWduZWQgaW50IGlubykKLXsKLQotCXJldHVybiBwYm1fcmVncyArIHNjaGl6b19pY2xyX29mZnNldChpbm8pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hpem9faW5vX3RvX2ltYXAodW5zaWduZWQgbG9uZyBwYm1fcmVncywKLQkJCQkJdW5zaWduZWQgaW50IGlubykKLXsKLQlyZXR1cm4gcGJtX3JlZ3MgKyBzY2hpem9faW1hcF9vZmZzZXQoaW5vKTsKLX0KLQotI2RlZmluZSBzY2hpem9fcmVhZChfX3JlZykgXAotKHsJdTY0IF9fcmV0OyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUxXSAlMiwgJTAiIFwKLQkJCSAgICAgOiAiPXIiIChfX3JldCkgXAotCQkJICAgICA6ICJyIiAoX19yZWcpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSBcCi0JCQkgICAgIDogIm1lbW9yeSIpOyBcCi0JX19yZXQ7IFwKLX0pCi0jZGVmaW5lIHNjaGl6b193cml0ZShfX3JlZywgX192YWwpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlMCwgWyUxXSAlMiIgXAotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8gXAotCQkJICAgICA6ICJyIiAoX192YWwpLCAiciIgKF9fcmVnKSwgXAotCQkJICAgICAgICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpIFwKLQkJCSAgICAgOiAibWVtb3J5IikKLQotc3RhdGljIHZvaWQgdG9tYXRpbGxvX3dzeW5jX2hhbmRsZXIodW5zaWduZWQgaW50IGlubywgdm9pZCAqX2FyZzEsIHZvaWQgKl9hcmcyKQotewotCXVuc2lnbmVkIGxvbmcgc3luY19yZWcgPSAodW5zaWduZWQgbG9uZykgX2FyZzI7Ci0JdTY0IG1hc2sgPSAxVUwgPDwgKGlubyAmIElNQVBfSU5PKTsKLQl1NjQgdmFsOwotCWludCBsaW1pdDsKLQotCXNjaGl6b193cml0ZShzeW5jX3JlZywgbWFzayk7Ci0KLQlsaW1pdCA9IDEwMDAwMDsKLQl2YWwgPSAwOwotCXdoaWxlICgtLWxpbWl0KSB7Ci0JCXZhbCA9IHNjaGl6b19yZWFkKHN5bmNfcmVnKTsKLQkJaWYgKCEodmFsICYgbWFzaykpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGxpbWl0IDw9IDApIHsKLQkJcHJpbnRrKCJ0b21hdGlsbG9fd3N5bmNfaGFuZGxlcjogRE1BIHdvbid0IHN5bmMgWyVseDolbHhdXG4iLAotCQkgICAgICAgdmFsLCBtYXNrKTsKLQl9Ci0KLQlpZiAoX2FyZzEpIHsKLQkJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVsaW5lWzY0XQotCQkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpOwotCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJWZwcnMsICUwXG5cdCIKLQkJCQkgICAgICJvciAlMCwgJTQsICUxXG5cdCIKLQkJCQkgICAgICJ3ciAlMSwgMHgwLCAlJWZwcnNcblx0IgotCQkJCSAgICAgInN0ZGEgJSVmMCwgWyU1XSAlNlxuXHQiCi0JCQkJICAgICAid3IgJTAsIDB4MCwgJSVmcHJzXG5cdCIKLQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJICAgICA6ICI9JnIiIChtYXNrKSwgIj0mciIgKHZhbCkKLQkJCQkgICAgIDogIjAiIChtYXNrKSwgIjEiICh2YWwpLAotCQkJCSAgICAgImkiIChGUFJTX0ZFRiksICJyIiAoJmNhY2hlbGluZVswXSksCi0JCQkJICAgICAiaSIgKEFTSV9CTEtfQ09NTUlUX1ApKTsKLQl9Ci19Ci0KLXN0cnVjdCBzY2hpem9faXJxX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgcGJtX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBzeW5jX3JlZzsKLQl1MzIgcG9ydGlkOwotCWludCBjaGlwX3ZlcnNpb247Ci19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjaGl6b19pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBpbm8sCi0JCQkJICAgICB2b2lkICpfZGF0YSkKLXsKLQlzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhICppcnFfZGF0YSA9IF9kYXRhOwotCXVuc2lnbmVkIGxvbmcgcGJtX3JlZ3MgPSBpcnFfZGF0YS0+cGJtX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOwotCWludCBpZ25fZml4dXA7Ci0JaW50IHZpcnRfaXJxOwotCWludCBpc190b21hdGlsbG87Ci0KLQlpbm8gJj0gMHgzZjsKLQotCS8qIE5vdyBidWlsZCB0aGUgSVJRIGJ1Y2tldC4gKi8KLQlpbWFwID0gc2NoaXpvX2lub190b19pbWFwKHBibV9yZWdzLCBpbm8pOwotCWljbHIgPSBzY2hpem9faW5vX3RvX2ljbHIocGJtX3JlZ3MsIGlubyk7Ci0KLQkvKiBPbiBTY2hpem8sIG5vIGlub2ZpeHVwIG9jY3Vycy4gIFRoaXMgaXMgYmVjYXVzZSBlYWNoCi0JICogSU5PIGhhcyBpdCdzIG93biBJTUFQIHJlZ2lzdGVyLiAgT24gUHN5Y2hvIGFuZCBTYWJyZQotCSAqIHRoZXJlIGlzIG9ubHkgb25lIElNQVAgcmVnaXN0ZXIgZm9yIGVhY2ggUENJIHNsb3QgZXZlbgotCSAqIHRob3VnaCBmb3VyIGRpZmZlcmVudCBJTk9zIGNhbiBiZSBnZW5lcmF0ZWQgYnkgZWFjaAotCSAqIFBDSSBzbG90LgotCSAqCi0JICogQnV0LCBmb3IgSkJVUyB2YXJpYW50cyAoZXNzZW50aWFsbHksIFRvbWF0aWxsbyksIHdlIGhhdmUKLQkgKiB0byBmaXh1cCB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgaW50ZXJydXB0IGdyb3VwIG51bWJlci4KLQkgKi8KLQlpZ25fZml4dXAgPSAwOwotCi0JaXNfdG9tYXRpbGxvID0gKGlycV9kYXRhLT5zeW5jX3JlZyAhPSAwVUwpOwotCi0JaWYgKGlzX3RvbWF0aWxsbykgewotCQlpZiAoaXJxX2RhdGEtPnBvcnRpZCAmIDEpCi0JCQlpZ25fZml4dXAgPSAoMSA8PCA2KTsKLQl9Ci0KLQl2aXJ0X2lycSA9IGJ1aWxkX2lycShpZ25fZml4dXAsIGljbHIsIGltYXApOwotCi0JaWYgKGlzX3RvbWF0aWxsbykgewotCQlpcnFfaW5zdGFsbF9wcmVfaGFuZGxlcih2aXJ0X2lycSwKLQkJCQkJdG9tYXRpbGxvX3dzeW5jX2hhbmRsZXIsCi0JCQkJCSgoaXJxX2RhdGEtPmNoaXBfdmVyc2lvbiA8PSA0KSA/Ci0JCQkJCSAodm9pZCAqKSAxIDogKHZvaWQgKikgMCksCi0JCQkJCSh2b2lkICopIGlycV9kYXRhLT5zeW5jX3JlZyk7Ci0JfQotCi0JcmV0dXJuIHZpcnRfaXJxOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgX19zY2hpem9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKLQkJCQkJICAgaW50IGlzX3RvbWF0aWxsbykKLXsKLQljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKLQlzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhICppcnFfZGF0YTsKLQotCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKLQlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBzY2hpem9faXJxX2J1aWxkOwotCi0JaXJxX2RhdGEgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhKSk7Ci0KLQlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JZHAtPmlycV90cmFucy0+ZGF0YSA9IGlycV9kYXRhOwotCi0JaXJxX2RhdGEtPnBibV9yZWdzID0gcmVnc1swXS5waHlzX2FkZHI7Ci0JaWYgKGlzX3RvbWF0aWxsbykKLQkJaXJxX2RhdGEtPnN5bmNfcmVnID0gcmVnc1szXS5waHlzX2FkZHIgKyAweDFhMThVTDsKLQllbHNlCi0JCWlycV9kYXRhLT5zeW5jX3JlZyA9IDBVTDsKLQlpcnFfZGF0YS0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgMCk7Ci0JaXJxX2RhdGEtPmNoaXBfdmVyc2lvbiA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgInZlcnNpb24jIiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzY2hpem9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQlfX3NjaGl6b19pcnFfdHJhbnNfaW5pdChkcCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB0b21hdGlsbG9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQlfX3NjaGl6b19pcnFfdHJhbnNfaW5pdChkcCwgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX3N1bjR2X2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAotCQkJCQl1bnNpZ25lZCBpbnQgZGV2aW5vLAotCQkJCQl2b2lkICpfZGF0YSkKLXsKLQl1MzIgZGV2aGFuZGxlID0gKHUzMikgKHVuc2lnbmVkIGxvbmcpIF9kYXRhOwotCi0JcmV0dXJuIHN1bjR2X2J1aWxkX2lycShkZXZoYW5kbGUsIGRldmlubyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwY2lfc3VuNHZfaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKLQotCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKLQlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBwY2lfc3VuNHZfaXJxX2J1aWxkOwotCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykKLQkJKChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmKTsKLX0KLQotc3RydWN0IGZpcmVfaXJxX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgcGJtX3JlZ3M7Ci0JdTMyIHBvcnRpZDsKLX07Ci0KLSNkZWZpbmUgRklSRV9JTUFQX0JBU0UJMHgwMDEwMDAKLSNkZWZpbmUgRklSRV9JQ0xSX0JBU0UJMHgwMDE0MDAKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyZV9pbWFwX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKLXsKLQlyZXR1cm4gRklSRV9JTUFQX0JBU0UgKyAoaW5vICogOFVMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyZV9pY2xyX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKLXsKLQlyZXR1cm4gRklSRV9JQ0xSX0JBU0UgKyAoaW5vICogOFVMKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyZV9pbm9fdG9faWNscih1bnNpZ25lZCBsb25nIHBibV9yZWdzLAotCQkJCQkgICAgdW5zaWduZWQgaW50IGlubykKLXsKLQlyZXR1cm4gcGJtX3JlZ3MgKyBmaXJlX2ljbHJfb2Zmc2V0KGlubyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpcmVfaW5vX3RvX2ltYXAodW5zaWduZWQgbG9uZyBwYm1fcmVncywKLQkJCQkJICAgIHVuc2lnbmVkIGludCBpbm8pCi17Ci0JcmV0dXJuIHBibV9yZWdzICsgZmlyZV9pbWFwX29mZnNldChpbm8pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZpcmVfaXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCi0JCQkJCSB1bnNpZ25lZCBpbnQgaW5vLAotCQkJCQkgdm9pZCAqX2RhdGEpCi17Ci0Jc3RydWN0IGZpcmVfaXJxX2RhdGEgKmlycV9kYXRhID0gX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBwYm1fcmVncyA9IGlycV9kYXRhLT5wYm1fcmVnczsKLQl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7Ci0JdW5zaWduZWQgbG9uZyBpbnRfY3RybHI7Ci0KLQlpbm8gJj0gMHgzZjsKLQotCS8qIE5vdyBidWlsZCB0aGUgSVJRIGJ1Y2tldC4gKi8KLQlpbWFwID0gZmlyZV9pbm9fdG9faW1hcChwYm1fcmVncywgaW5vKTsKLQlpY2xyID0gZmlyZV9pbm9fdG9faWNscihwYm1fcmVncywgaW5vKTsKLQotCS8qIFNldCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgbnVtYmVyLiAgKi8KLQlpbnRfY3RybHIgPSAxIDw8IDY7Ci0JdXBhX3dyaXRlcShpbnRfY3RybHIsIGltYXApOwotCi0JLyogVGhlIGludGVycnVwdCBtYXAgcmVnaXN0ZXJzIGRvIG5vdCBoYXZlIGFuIElOTyBmaWVsZAotCSAqIGxpa2Ugb3RoZXIgY2hpcHMgZG8uICBUaGV5IHJldHVybiB6ZXJvIGluIHRoZSBJTk8KLQkgKiBmaWVsZCwgYW5kIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBudW1iZXIgaXMgY29udHJvbGxlZAotCSAqIGluIGJpdHMgNiB0byA5LiAgU28gaW4gb3JkZXIgZm9yIGJ1aWxkX2lycSgpIHRvIGdldAotCSAqIHRoZSBJTk8gcmlnaHQgd2UgcGFzcyBpdCBpbiBhcyBwYXJ0IG9mIHRoZSBmaXh1cAotCSAqIHdoaWNoIHdpbGwgZ2V0IGFkZGVkIHRvIHRoZSBtYXAgcmVnaXN0ZXIgemVybyB2YWx1ZQotCSAqIHJlYWQgYnkgYnVpbGRfaXJxKCkuCi0JICovCi0JaW5vIHw9IChpcnFfZGF0YS0+cG9ydGlkIDw8IDYpOwotCWlubyAtPSBpbnRfY3RybHI7Ci0JcmV0dXJuIGJ1aWxkX2lycShpbm8sIGljbHIsIGltYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZmlyZV9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCXN0cnVjdCBmaXJlX2lycV9kYXRhICppcnFfZGF0YTsKLQotCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKLQlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBmaXJlX2lycV9idWlsZDsKLQotCWlycV9kYXRhID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IGZpcmVfaXJxX2RhdGEpKTsKLQotCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlkcC0+aXJxX3RyYW5zLT5kYXRhID0gaXJxX2RhdGE7Ci0KLQlpcnFfZGF0YS0+cGJtX3JlZ3MgPSByZWdzWzBdLnBoeXNfYWRkcjsKLQlpcnFfZGF0YS0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgMCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCi0jaWZkZWYgQ09ORklHX1NCVVMKLS8qIElOTyBudW1iZXIgdG8gSU1BUCByZWdpc3RlciBvZmZzZXQgZm9yIFNZU0lPIGV4dGVybmFsIElSUSdzLgotICogVGhpcyBzaG91bGQgY29uZm9ybSB0byBib3RoIFN1bmZpcmUvV2lsZGZpcmUgc2VydmVyIGFuZCBGdXNpb24KLSAqIGRlc2t0b3AgZGVzaWducy4KLSAqLwotI2RlZmluZSBTWVNJT19JTUFQX1NMT1QwCTB4MmMwMFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfU0xPVDEJMHgyYzA4VUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9TTE9UMgkweDJjMTBVTAotI2RlZmluZSBTWVNJT19JTUFQX1NMT1QzCTB4MmMxOFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfU0NTSQkJMHgzMDAwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9FVEgJCTB4MzAwOFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfQlBQCQkweDMwMTBVTAotI2RlZmluZSBTWVNJT19JTUFQX0FVRElPCTB4MzAxOFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfUEZBSUwJMHgzMDIwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9LTVMJCTB4MzAyOFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfRkxQWQkJMHgzMDMwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9TSFcJCTB4MzAzOFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfS0JECQkweDMwNDBVTAotI2RlZmluZSBTWVNJT19JTUFQX01TCQkweDMwNDhVTAotI2RlZmluZSBTWVNJT19JTUFQX1NFUgkJMHgzMDUwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9USU0wCQkweDMwNjBVTAotI2RlZmluZSBTWVNJT19JTUFQX1RJTTEJCTB4MzA2OFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfVUUJCTB4MzA3MFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfQ0UJCTB4MzA3OFVMCi0jZGVmaW5lIFNZU0lPX0lNQVBfU0JFUlIJMHgzMDgwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9QTUdNVAkweDMwODhVTAotI2RlZmluZSBTWVNJT19JTUFQX0dGWAkJMHgzMDkwVUwKLSNkZWZpbmUgU1lTSU9fSU1BUF9FVVBBCQkweDMwOThVTAotCi0jZGVmaW5lIGJvZ29uICAgICAoKHVuc2lnbmVkIGxvbmcpIC0xKQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzaW9faXJxX29mZnNldHNbXSA9IHsKLQkvKiBTQlVTIFNsb3QgMCAtLT4gMywgbGV2ZWwgMSAtLT4gNyAqLwotCVNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsCi0JU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwgU1lTSU9fSU1BUF9TTE9UMCwKLQlTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLAotCVNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsIFNZU0lPX0lNQVBfU0xPVDEsCi0JU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwKLQlTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLCBTWVNJT19JTUFQX1NMT1QyLAotCVNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsCi0JU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywgU1lTSU9fSU1BUF9TTE9UMywKLQotCS8qIE9uYm9hcmQgZGV2aWNlcyAobm90IHJlbGV2YW50L3VzZWQgb24gU3VuRmlyZSkuICovCi0JU1lTSU9fSU1BUF9TQ1NJLAotCVNZU0lPX0lNQVBfRVRILAotCVNZU0lPX0lNQVBfQlBQLAotCWJvZ29uLAotCVNZU0lPX0lNQVBfQVVESU8sCi0JU1lTSU9fSU1BUF9QRkFJTCwKLQlib2dvbiwKLQlib2dvbiwKLQlTWVNJT19JTUFQX0tNUywKLQlTWVNJT19JTUFQX0ZMUFksCi0JU1lTSU9fSU1BUF9TSFcsCi0JU1lTSU9fSU1BUF9LQkQsCi0JU1lTSU9fSU1BUF9NUywKLQlTWVNJT19JTUFQX1NFUiwKLQlib2dvbiwKLQlib2dvbiwKLQlTWVNJT19JTUFQX1RJTTAsCi0JU1lTSU9fSU1BUF9USU0xLAotCWJvZ29uLAotCWJvZ29uLAotCVNZU0lPX0lNQVBfVUUsCi0JU1lTSU9fSU1BUF9DRSwKLQlTWVNJT19JTUFQX1NCRVJSLAotCVNZU0lPX0lNQVBfUE1HTVQsCi0JU1lTSU9fSU1BUF9HRlgsCi0JU1lTSU9fSU1BUF9FVVBBLAotfTsKLQotI3VuZGVmIGJvZ29uCi0KLSNkZWZpbmUgTlVNX1NZU0lPX09GRlNFVFMgQVJSQVlfU0laRShzeXNpb19pcnFfb2Zmc2V0cykKLQotLyogQ29udmVydCBJbnRlcnJ1cHQgTWFwcGluZyByZWdpc3RlciBwb2ludGVyIHRvIGFzc29jaWF0ZWQKLSAqIEludGVycnVwdCBDbGVhciByZWdpc3RlciBwb2ludGVyLCBTWVNJTyBzcGVjaWZpYyB2ZXJzaW9uLgotICovCi0jZGVmaW5lIFNZU0lPX0lDTFJfVU5VU0VEMAkweDM0MDBVTAotI2RlZmluZSBTWVNJT19JQ0xSX1NMT1QwCTB4MzQwOFVMCi0jZGVmaW5lIFNZU0lPX0lDTFJfU0xPVDEJMHgzNDQ4VUwKLSNkZWZpbmUgU1lTSU9fSUNMUl9TTE9UMgkweDM0ODhVTAotI2RlZmluZSBTWVNJT19JQ0xSX1NMT1QzCTB4MzRjOFVMCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNpb19pbWFwX3RvX2ljbHIodW5zaWduZWQgbG9uZyBpbWFwKQotewotCXVuc2lnbmVkIGxvbmcgZGlmZiA9IFNZU0lPX0lDTFJfVU5VU0VEMCAtIFNZU0lPX0lNQVBfU0xPVDA7Ci0JcmV0dXJuIGltYXAgKyBkaWZmOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNidXNfb2ZfYnVpbGRfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGlubywKLQkJCQkgICAgICB2b2lkICpfZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19iYXNlID0gKHVuc2lnbmVkIGxvbmcpIF9kYXRhOwotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKLQl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7Ci0JaW50IHNidXNfc2xvdCA9IDA7Ci0JaW50IHNidXNfbGV2ZWwgPSAwOwotCi0JaW5vICY9IDB4M2Y7Ci0KLQlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JaWYgKHJlZ3MpCi0JCXNidXNfc2xvdCA9IHJlZ3MtPndoaWNoX2lvOwotCi0JaWYgKGlubyA8IDB4MjApCi0JCWlubyArPSAoc2J1c19zbG90ICogOCk7Ci0KLQlpbWFwID0gc3lzaW9faXJxX29mZnNldHNbaW5vXTsKLQlpZiAoaW1hcCA9PSAoKHVuc2lnbmVkIGxvbmcpLTEpKSB7Ci0JCXByb21fcHJpbnRmKCJnZXRfaXJxX3RyYW5zbGF0aW9uczogQmFkIFNZU0lPIElOT1sleF1cbiIsCi0JCQkgICAgaW5vKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCWltYXAgKz0gcmVnX2Jhc2U7Ci0KLQkvKiBTWVNJTyBpbmNvbnNpc3RlbmN5LiAgRm9yIGV4dGVybmFsIFNMT1RTLCB3ZSBoYXZlIHRvIHNlbGVjdAotCSAqIHRoZSByaWdodCBJQ0xSIHJlZ2lzdGVyIGJhc2VkIHVwb24gdGhlIGxvd2VyIFNCVVMgaXJxIGxldmVsCi0JICogYml0cy4KLQkgKi8KLQlpZiAoaW5vID49IDB4MjApIHsKLQkJaWNsciA9IHN5c2lvX2ltYXBfdG9faWNscihpbWFwKTsKLQl9IGVsc2UgewotCQlzYnVzX2xldmVsID0gaW5vICYgMHg3OwotCi0JCXN3aXRjaChzYnVzX3Nsb3QpIHsKLQkJY2FzZSAwOgotCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWljbHIgPSByZWdfYmFzZSArIFNZU0lPX0lDTFJfU0xPVDI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSAzOgotCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKLQkJCWJyZWFrOwotCQl9OwotCi0JCWljbHIgKz0gKCh1bnNpZ25lZCBsb25nKXNidXNfbGV2ZWwgLSAxVUwpICogOFVMOwotCX0KLQlyZXR1cm4gYnVpbGRfaXJxKHNidXNfbGV2ZWwsIGljbHIsIGltYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2J1c19pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCi0JZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOwotCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHNidXNfb2ZfYnVpbGRfaXJxOwotCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgcmVncy0+cGh5c19hZGRyOwotfQotI2VuZGlmIC8qIENPTkZJR19TQlVTICovCi0KLQotc3RhdGljIHVuc2lnbmVkIGludCBjZW50cmFsX2J1aWxkX2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbm8sCi0JCQkJICAgICAgdm9pZCAqX2RhdGEpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjZW50cmFsX2RwID0gX2RhdGE7Ci0Jc3RydWN0IG9mX2RldmljZSAqY2VudHJhbF9vcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY2VudHJhbF9kcCk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOwotCXUzMiB0bXA7Ci0KLQlpZiAoIXN0cmNtcChkcC0+bmFtZSwgImVlcHJvbSIpKSB7Ci0JCXJlcyA9ICZjZW50cmFsX29wLT5yZXNvdXJjZVs1XTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJ6cyIpKSB7Ci0JCXJlcyA9ICZjZW50cmFsX29wLT5yZXNvdXJjZVs0XTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJjbG9jay1ib2FyZCIpKSB7Ci0JCXJlcyA9ICZjZW50cmFsX29wLT5yZXNvdXJjZVszXTsKLQl9IGVsc2UgewotCQlyZXR1cm4gaW5vOwotCX0KLQotCWltYXAgPSByZXMtPnN0YXJ0ICsgMHgwMFVMOwotCWljbHIgPSByZXMtPnN0YXJ0ICsgMHgxMFVMOwotCi0JLyogU2V0IHRoZSBJTk8gc3RhdGUgdG8gaWRsZSwgYW5kIGRpc2FibGUuICAqLwotCXVwYV93cml0ZWwoMCwgaWNscik7Ci0JdXBhX3JlYWRsKGljbHIpOwotCi0JdG1wID0gdXBhX3JlYWRsKGltYXApOwotCXRtcCAmPSB+MHg4MDAwMDAwMDsKLQl1cGFfd3JpdGVsKHRtcCwgaW1hcCk7Ci0KLQlyZXR1cm4gYnVpbGRfaXJxKDAsIGljbHIsIGltYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgY2VudHJhbF9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKLQlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBjZW50cmFsX2J1aWxkX2lycTsKLQotCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSBkcDsKLX0KLQotc3RydWN0IGlycV90cmFucyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl2b2lkICgqaW5pdCkoc3RydWN0IGRldmljZV9ub2RlICopOwotfTsKLQotI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBzdHJ1Y3QgaXJxX3RyYW5zIF9faW5pdGRhdGEgcGNpX2lycV90cmFuc190YWJsZVtdID0gewotCXsgIlNVTlcsc2FicmUiLCBzYWJyZV9pcnFfdHJhbnNfaW5pdCB9LAotCXsgInBjaTEwOGUsYTAwMCIsIHNhYnJlX2lycV90cmFuc19pbml0IH0sCi0JeyAicGNpMTA4ZSxhMDAxIiwgc2FicmVfaXJxX3RyYW5zX2luaXQgfSwKLQl7ICJTVU5XLHBzeWNobyIsIHBzeWNob19pcnFfdHJhbnNfaW5pdCB9LAotCXsgInBjaTEwOGUsODAwMCIsIHBzeWNob19pcnFfdHJhbnNfaW5pdCB9LAotCXsgIlNVTlcsc2NoaXpvIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCi0JeyAicGNpMTA4ZSw4MDAxIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCi0JeyAiU1VOVyxzY2hpem8rIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCi0JeyAicGNpMTA4ZSw4MDAyIiwgc2NoaXpvX2lycV90cmFuc19pbml0IH0sCi0JeyAiU1VOVyx0b21hdGlsbG8iLCB0b21hdGlsbG9faXJxX3RyYW5zX2luaXQgfSwKLQl7ICJwY2kxMDhlLGE4MDEiLCB0b21hdGlsbG9faXJxX3RyYW5zX2luaXQgfSwKLQl7ICJTVU5XLHN1bjR2LXBjaSIsIHBjaV9zdW40dl9pcnFfdHJhbnNfaW5pdCB9LAotCXsgInBjaWV4MTA4ZSw4MGYwIiwgZmlyZV9pcnFfdHJhbnNfaW5pdCB9LAotfTsKLSNlbmRpZgotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN1bjR2X3ZkZXZfaXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCi0JCQkJCSB1bnNpZ25lZCBpbnQgZGV2aW5vLAotCQkJCQkgdm9pZCAqX2RhdGEpCi17Ci0JdTMyIGRldmhhbmRsZSA9ICh1MzIpICh1bnNpZ25lZCBsb25nKSBfZGF0YTsKLQotCXJldHVybiBzdW40dl9idWlsZF9pcnEoZGV2aGFuZGxlLCBkZXZpbm8pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfdmRldl9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCi0JZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOwotCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHN1bjR2X3ZkZXZfaXJxX2J1aWxkOwotCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykKLQkJKChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWNvbnN0IGNoYXIgKm1vZGVsOwotCWludCBpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUENJCi0JbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJtb2RlbCIsIE5VTEwpOwotCWlmICghbW9kZWwpCi0JCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiY29tcGF0aWJsZSIsIE5VTEwpOwotCWlmIChtb2RlbCkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfaXJxX3RyYW5zX3RhYmxlKTsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaXJxX3RyYW5zICp0ID0gJnBjaV9pcnFfdHJhbnNfdGFibGVbaV07Ci0KLQkJCWlmICghc3RyY21wKG1vZGVsLCB0LT5uYW1lKSkgewotCQkJCXQtPmluaXQoZHApOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQlVTCi0JaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJzYnVzIikgfHwKLQkgICAgIXN0cmNtcChkcC0+bmFtZSwgInNiaSIpKSB7Ci0JCXNidXNfaXJxX3RyYW5zX2luaXQoZHApOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJmaGMiKSAmJgotCSAgICAhc3RyY21wKGRwLT5wYXJlbnQtPm5hbWUsICJjZW50cmFsIikpIHsKLQkJY2VudHJhbF9pcnFfdHJhbnNfaW5pdChkcCk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJ2aXJ0dWFsLWRldmljZXMiKSB8fAotCSAgICAhc3RyY21wKGRwLT5uYW1lLCAibml1IikpIHsKLQkJc3VuNHZfdmRldl9pcnFfdHJhbnNfaW5pdChkcCk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaXNfcm9vdF9ub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaWYgKCFkcCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gKGRwLT5wYXJlbnQgPT0gTlVMTCk7Ci19Ci0KLS8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZGVhbCB3aXRoIHRoZSBibGFjayBtYWdpYyBvZiBmdWxseSBuYW1pbmcgYQotICogbm9kZS4KLSAqCi0gKiBDZXJ0YWluIHdlbGwga25vd24gbmFtZWQgbm9kZXMgYXJlIGp1c3QgdGhlIHNpbXBsZSBuYW1lIHN0cmluZy4KLSAqCi0gKiBBY3R1YWwgZGV2aWNlcyBoYXZlIGFuIGFkZHJlc3Mgc3BlY2lmaWVyIGFwcGVuZGVkIHRvIHRoZSBiYXNlIG5hbWUKLSAqIHN0cmluZywgbGlrZSB0aGlzICJmb29AYWRkciIuICBUaGUgImFkZHIiIGNhbiBiZSBpbiBhbnkgbnVtYmVyIG9mCi0gKiBmb3JtYXRzLCBhbmQgdGhlIHBsYXRmb3JtIHBsdXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUgZGV0ZXJtaW5lIHRoZQotICogZm9ybWF0IGFuZCBob3cgaXQgaXMgY29uc3RydWN0ZWQuCi0gKgotICogRm9yIGNoaWxkcmVuIG9mIHRoZSBST09UIG5vZGUsIHRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBmaXhlZCBhbmQKLSAqIGRldGVybWluZWQgYnkgd2hldGhlciB0aGlzIGlzIGEgc3VuNHUgb3Igc3VuNHYgc3lzdGVtLgotICoKLSAqIEZvciBjaGlsZHJlbiBvZiBvdGhlciBub2RlcywgaXQgaXMgYnVzIHR5cGUgc3BlY2lmaWMuICBTbwotICogd2Ugd2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBkaXNjb3ZlciBhICJkZXZpY2VfdHlwZSIgcHJvcGVydHkKLSAqIHdlIHJlY29nbml6ZSBhbmQgd2UgZ28gZnJvbSB0aGVyZS4KLSAqCi0gKiBBcyBhbiBleGFtcGxlLCB0aGUgYm9vdCBkZXZpY2Ugb24gbXkgd29ya3N0YXRpb24gaGFzIGEgZnVsbCBwYXRoOgotICoKLSAqCS9wY2lAMWUsNjAwMDAwL2lkZUBkL2Rpc2tAMCwwOmMKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHN1bjR2X3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpycHJvcDsKLQl1MzIgaGlnaF9iaXRzLCBsb3dfYml0cywgdHlwZTsKLQotCXJwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcnByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBycHJvcC0+dmFsdWU7Ci0JaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKLQkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAotCQkJZHAtPm5hbWUsCi0JCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyID4+IDMyVUwpLAotCQkJKHVuc2lnbmVkIGludCkgKHJlZ3MtPnBoeXNfYWRkciAmIDB4ZmZmZmZmZmZVTCkpOwotCQlyZXR1cm47Ci0JfQotCi0JdHlwZSA9IHJlZ3MtPnBoeXNfYWRkciA+PiA2MFVMOwotCWhpZ2hfYml0cyA9IChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmVUw7Ci0JbG93X2JpdHMgPSAocmVncy0+cGh5c19hZGRyICYgMHhmZmZmZmZmZlVMKTsKLQotCWlmICh0eXBlID09IDAgfHwgdHlwZSA9PSA4KSB7Ci0JCWNvbnN0IGNoYXIgKnByZWZpeCA9ICh0eXBlID09IDApID8gIm0iIDogImkiOwotCi0JCWlmIChsb3dfYml0cykKLQkJCXNwcmludGYodG1wX2J1ZiwgIiVzQCVzJXgsJXgiLAotCQkJCWRwLT5uYW1lLCBwcmVmaXgsCi0JCQkJaGlnaF9iaXRzLCBsb3dfYml0cyk7Ci0JCWVsc2UKLQkJCXNwcmludGYodG1wX2J1ZiwgIiVzQCVzJXgiLAotCQkJCWRwLT5uYW1lLAotCQkJCXByZWZpeCwKLQkJCQloaWdoX2JpdHMpOwotCX0gZWxzZSBpZiAodHlwZSA9PSAxMikgewotCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCIsCi0JCQlkcC0+bmFtZSwgaGlnaF9iaXRzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzdW40dV9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQotewotCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlyZXR1cm47Ci0KLQlyZWdzID0gcHJvcC0+dmFsdWU7Ci0JaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKLQkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAotCQkJZHAtPm5hbWUsCi0JCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyID4+IDMyVUwpLAotCQkJKHVuc2lnbmVkIGludCkgKHJlZ3MtPnBoeXNfYWRkciAmIDB4ZmZmZmZmZmZVTCkpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJ1cGEtcG9ydGlkIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInBvcnRpZCIsIE5VTEwpOwotCWlmIChwcm9wKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotCQlpZiAodGxiX3R5cGUgPj0gY2hlZXRhaCkKLQkJCW1hc2sgPSAweDdmZmZmZjsKLQotCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCwleCIsCi0JCQlkcC0+bmFtZSwKLQkJCSoodTMyICopcHJvcC0+dmFsdWUsCi0JCQkodW5zaWduZWQgaW50KSAocmVncy0+cGh5c19hZGRyICYgbWFzaykpOwotCX0KLX0KLQotLyogIm5hbWVAc2xvdCxvZmZzZXQiICAqLwotc3RhdGljIHZvaWQgX19pbml0IHNidXNfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCwleCIsCi0JCWRwLT5uYW1lLAotCQlyZWdzLT53aGljaF9pbywKLQkJcmVncy0+cGh5c19hZGRyKTsKLX0KLQotLyogIm5hbWVAZGV2bnVtWyxmdW5jXSIgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwY2lfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzICpyZWdzOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0KLQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcmV0dXJuOwotCi0JcmVncyA9IHByb3AtPnZhbHVlOwotCWRldmZuID0gKHJlZ3MtPnBoeXNfaGkgPj4gOCkgJiAweGZmOwotCWlmIChkZXZmbiAmIDB4MDcpIHsKLQkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAotCQkJZHAtPm5hbWUsCi0JCQlkZXZmbiA+PiAzLAotCQkJZGV2Zm4gJiAweDA3KTsKLQl9IGVsc2UgewotCQlzcHJpbnRmKHRtcF9idWYsICIlc0AleCIsCi0JCQlkcC0+bmFtZSwKLQkJCWRldmZuID4+IDMpOwotCX0KLX0KLQotLyogIm5hbWVAVVBBX1BPUlRJRCxvZmZzZXQiICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdXBhX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAidXBhLXBvcnRpZCIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcmV0dXJuOwotCi0Jc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAotCQlkcC0+bmFtZSwKLQkJKih1MzIgKikgcHJvcC0+dmFsdWUsCi0JCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgJiAweGZmZmZmZmZmVUwpKTsKLX0KLQotLyogIm5hbWVAcmVnIiAqLwotc3RhdGljIHZvaWQgX19pbml0IHZkZXZfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JdTMyICpyZWdzOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQotCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4IiwgZHAtPm5hbWUsICpyZWdzKTsKLX0KLQotLyogIm5hbWVAYWRkcmhpLGFkZHJsbyIgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBlYnVzX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQotCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKLQkJZHAtPm5hbWUsCi0JCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgPj4gMzJVTCksCi0JCSh1bnNpZ25lZCBpbnQpIChyZWdzLT5waHlzX2FkZHIgJiAweGZmZmZmZmZmVUwpKTsKLX0KLQotLyogIm5hbWVAYnVzLGFkZHIiICovCi1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXUzMiAqcmVnczsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlyZXR1cm47Ci0KLQlyZWdzID0gcHJvcC0+dmFsdWU7Ci0KLQkvKiBUaGlzIGFjdHVhbGx5IGlzbid0IHJpZ2h0Li4uIHNob3VsZCBsb29rIGF0IHRoZSAjYWRkcmVzcy1jZWxscwotCSAqIHByb3BlcnR5IG9mIHRoZSBpMmMgYnVzIG5vZGUgZXRjLiBldGMuCi0JICovCi0Jc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgsJXgiLAotCQlkcC0+bmFtZSwgcmVnc1swXSwgcmVnc1sxXSk7Ci19Ci0KLS8qICJuYW1lQHJlZzBbLHJlZzFdIiAqLwotc3RhdGljIHZvaWQgX19pbml0IHVzYl9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQl1MzIgKnJlZ3M7Ci0KLQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcmV0dXJuOwotCi0JcmVncyA9IHByb3AtPnZhbHVlOwotCi0JaWYgKHByb3AtPmxlbmd0aCA9PSBzaXplb2YodTMyKSB8fCByZWdzWzFdID09IDEpIHsKLQkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJXgiLAotCQkJZHAtPm5hbWUsIHJlZ3NbMF0pOwotCX0gZWxzZSB7Ci0JCXNwcmludGYodG1wX2J1ZiwgIiVzQCV4LCV4IiwKLQkJCWRwLT5uYW1lLCByZWdzWzBdLCByZWdzWzFdKTsKLQl9Ci19Ci0KLS8qICJuYW1lQHJlZzByZWcxWyxyZWcycmVnM10iICovCi1zdGF0aWMgdm9pZCBfX2luaXQgaWVlZTEzOTRfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JdTMyICpyZWdzOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQotCXJlZ3MgPSBwcm9wLT52YWx1ZTsKLQotCWlmIChyZWdzWzJdIHx8IHJlZ3NbM10pIHsKLQkJc3ByaW50Zih0bXBfYnVmLCAiJXNAJTA4eCUwOHgsJTA0eCUwOHgiLAotCQkJZHAtPm5hbWUsIHJlZ3NbMF0sIHJlZ3NbMV0sIHJlZ3NbMl0sIHJlZ3NbM10pOwotCX0gZWxzZSB7Ci0JCXNwcmludGYodG1wX2J1ZiwgIiVzQCUwOHglMDh4IiwKLQkJCWRwLT5uYW1lLCByZWdzWzBdLCByZWdzWzFdKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBfX2J1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBkcC0+cGFyZW50OwotCi0JaWYgKHBhcmVudCAhPSBOVUxMKSB7Ci0JCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaSIpIHx8Ci0JCSAgICAhc3RyY21wKHBhcmVudC0+dHlwZSwgInBjaWV4IikpIHsKLQkJCXBjaV9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKCFzdHJjbXAocGFyZW50LT50eXBlLCAic2J1cyIpKSB7Ci0JCQlzYnVzX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJ1cGEiKSkgewotCQkJdXBhX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJlYnVzIikpIHsKLQkJCWVidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghc3RyY21wKHBhcmVudC0+bmFtZSwgInVzYiIpIHx8Ci0JCSAgICAhc3RyY21wKHBhcmVudC0+bmFtZSwgImh1YiIpKSB7Ci0JCQl1c2JfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgImkyYyIpKSB7Ci0JCQlpMmNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgImZpcmV3aXJlIikpIHsKLQkJCWllZWUxMzk0X3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJ2aXJ0dWFsLWRldmljZXMiKSkgewotCQkJdmRldl9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogImlzYSIgaXMgaGFuZGxlZCB3aXRoIHBsYXRmb3JtIG5hbWluZyAqLwotCX0KLQotCS8qIFVzZSBwbGF0Zm9ybSBuYW1pbmcgY29udmVudGlvbi4gICovCi0JaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKLQkJc3VuNHZfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJc3VuNHVfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCX0KLX0KLQotc3RhdGljIGNoYXIgKiBfX2luaXQgYnVpbGRfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKLXsKLQljaGFyIHRtcF9idWZbNjRdLCAqbjsKLQotCXRtcF9idWZbMF0gPSAnXDAnOwotCV9fYnVpbGRfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwotCWlmICh0bXBfYnVmWzBdID09ICdcMCcpCi0JCXN0cmNweSh0bXBfYnVmLCBkcC0+bmFtZSk7Ci0KLQluID0gcHJvbV9lYXJseV9hbGxvYyhzdHJsZW4odG1wX2J1ZikgKyAxKTsKLQlzdHJjcHkobiwgdG1wX2J1Zik7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGNoYXIgKiBfX2luaXQgYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaW50IGxlbiwgb3VybGVuLCBwbGVuOwotCWNoYXIgKm47Ci0KLQlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0Jb3VybGVuID0gc3RybGVuKGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKLQlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKLQotCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7Ci0Jc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0JaWYgKCFpc19yb290X25vZGUoZHAtPnBhcmVudCkpIHsKLQkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOwotCQlwbGVuKys7Ci0JfQotCXN0cmNweShuICsgcGxlbiwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOwotCi0JcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdW5pcXVlX2lkOwotCi1zdGF0aWMgc3RydWN0IHByb3BlcnR5ICogX19pbml0IGJ1aWxkX29uZV9wcm9wKHBoYW5kbGUgbm9kZSwgY2hhciAqcHJldiwgY2hhciAqc3BlY2lhbF9uYW1lLCB2b2lkICpzcGVjaWFsX3ZhbCwgaW50IHNwZWNpYWxfbGVuKQotewotCXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKnRtcCA9IE5VTEw7Ci0Jc3RydWN0IHByb3BlcnR5ICpwOwotCi0JaWYgKHRtcCkgewotCQlwID0gdG1wOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSArIDMyKTsKLQkJdG1wID0gTlVMTDsKLQl9IGVsc2UgewotCQlwID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIDMyKTsKLQkJcC0+dW5pcXVlX2lkID0gdW5pcXVlX2lkKys7Ci0JfQotCi0JcC0+bmFtZSA9IChjaGFyICopIChwICsgMSk7Ci0JaWYgKHNwZWNpYWxfbmFtZSkgewotCQlzdHJjcHkocC0+bmFtZSwgc3BlY2lhbF9uYW1lKTsKLQkJcC0+bGVuZ3RoID0gc3BlY2lhbF9sZW47Ci0JCXAtPnZhbHVlID0gcHJvbV9lYXJseV9hbGxvYyhzcGVjaWFsX2xlbik7Ci0JCW1lbWNweShwLT52YWx1ZSwgc3BlY2lhbF92YWwsIHNwZWNpYWxfbGVuKTsKLQl9IGVsc2UgewotCQlpZiAocHJldiA9PSBOVUxMKSB7Ci0JCQlwcm9tX2ZpcnN0cHJvcChub2RlLCBwLT5uYW1lKTsKLQkJfSBlbHNlIHsKLQkJCXByb21fbmV4dHByb3Aobm9kZSwgcHJldiwgcC0+bmFtZSk7Ci0JCX0KLQkJaWYgKHN0cmxlbihwLT5uYW1lKSA9PSAwKSB7Ci0JCQl0bXAgPSBwOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJcC0+bGVuZ3RoID0gcHJvbV9nZXRwcm9wbGVuKG5vZGUsIHAtPm5hbWUpOwotCQlpZiAocC0+bGVuZ3RoIDw9IDApIHsKLQkJCXAtPmxlbmd0aCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwLT52YWx1ZSA9IHByb21fZWFybHlfYWxsb2MocC0+bGVuZ3RoICsgMSk7Ci0JCQlwcm9tX2dldHByb3BlcnR5KG5vZGUsIHAtPm5hbWUsIHAtPnZhbHVlLCBwLT5sZW5ndGgpOwotCQkJKCh1bnNpZ25lZCBjaGFyICopcC0+dmFsdWUpW3AtPmxlbmd0aF0gPSAnXDAnOwotCQl9Ci0JfQotCXJldHVybiBwOwotfQotCi1zdGF0aWMgc3RydWN0IHByb3BlcnR5ICogX19pbml0IGJ1aWxkX3Byb3BfbGlzdChwaGFuZGxlIG5vZGUpCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpoZWFkLCAqdGFpbDsKLQotCWhlYWQgPSB0YWlsID0gYnVpbGRfb25lX3Byb3Aobm9kZSwgTlVMTCwKLQkJCQkgICAgICIubm9kZSIsICZub2RlLCBzaXplb2Yobm9kZSkpOwotCi0JdGFpbC0+bmV4dCA9IGJ1aWxkX29uZV9wcm9wKG5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIDApOwotCXRhaWwgPSB0YWlsLT5uZXh0OwotCXdoaWxlKHRhaWwpIHsKLQkJdGFpbC0+bmV4dCA9IGJ1aWxkX29uZV9wcm9wKG5vZGUsIHRhaWwtPm5hbWUsCi0JCQkJCSAgICBOVUxMLCBOVUxMLCAwKTsKLQkJdGFpbCA9IHRhaWwtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIGhlYWQ7Ci19Ci0KLXN0YXRpYyBjaGFyICogX19pbml0IGdldF9vbmVfcHJvcGVydHkocGhhbmRsZSBub2RlLCBjb25zdCBjaGFyICpuYW1lKQotewotCWNoYXIgKmJ1ZiA9ICI8TlVMTD4iOwotCWludCBsZW47Ci0KLQlsZW4gPSBwcm9tX2dldHByb3BsZW4obm9kZSwgbmFtZSk7Ci0JaWYgKGxlbiA+IDApIHsKLQkJYnVmID0gcHJvbV9lYXJseV9hbGxvYyhsZW4pOwotCQlwcm9tX2dldHByb3BlcnR5KG5vZGUsIG5hbWUsIGJ1ZiwgbGVuKTsKLQl9Ci0KLQlyZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19pbml0IGNyZWF0ZV9ub2RlKHBoYW5kbGUgbm9kZSwgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQotCWlmICghbm9kZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkcCA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKCpkcCkpOwotCWRwLT51bmlxdWVfaWQgPSB1bmlxdWVfaWQrKzsKLQlkcC0+cGFyZW50ID0gcGFyZW50OwotCi0Ja3JlZl9pbml0KCZkcC0+a3JlZik7Ci0KLQlkcC0+bmFtZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKLQlkcC0+dHlwZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7Ci0JZHAtPm5vZGUgPSBub2RlOwotCi0JZHAtPnByb3BlcnRpZXMgPSBidWlsZF9wcm9wX2xpc3Qobm9kZSk7Ci0KLQlpcnFfdHJhbnNfaW5pdChkcCk7Ci0KLQlyZXR1cm4gZHA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgYnVpbGRfdHJlZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgcGhhbmRsZSBub2RlLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqbmV4dHApCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyZXQgPSBOVUxMLCAqcHJldl9zaWJsaW5nID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCi0Jd2hpbGUgKDEpIHsKLQkJZHAgPSBjcmVhdGVfbm9kZShub2RlLCBwYXJlbnQpOwotCQlpZiAoIWRwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHByZXZfc2libGluZykKLQkJCXByZXZfc2libGluZy0+c2libGluZyA9IGRwOwotCi0JCWlmICghcmV0KQotCQkJcmV0ID0gZHA7Ci0JCXByZXZfc2libGluZyA9IGRwOwotCi0JCSooKm5leHRwKSA9IGRwOwotCQkqbmV4dHAgPSAmZHAtPmFsbG5leHQ7Ci0KLQkJZHAtPnBhdGhfY29tcG9uZW50X25hbWUgPSBidWlsZF9wYXRoX2NvbXBvbmVudChkcCk7Ci0JCWRwLT5mdWxsX25hbWUgPSBidWlsZF9mdWxsX25hbWUoZHApOwotCi0JCWRwLT5jaGlsZCA9IGJ1aWxkX3RyZWUoZHAsIHByb21fZ2V0Y2hpbGQobm9kZSksIG5leHRwKTsKLQotCQlub2RlID0gcHJvbV9nZXRzaWJsaW5nKG5vZGUpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfbWlkX3Byb3Aodm9pZCkKLXsKLQlyZXR1cm4gKHRsYl90eXBlID09IHNwaXRmaXJlID8gInVwYS1wb3J0aWQiIDogInBvcnRpZCIpOwotfQotCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9jcHVpZChpbnQgY3B1aWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQljb25zdCBjaGFyICptaWRfcHJvcCA9IGdldF9taWRfcHJvcCgpOwotCi0JZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCAiY3B1IikgewotCQlpbnQgaWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsIG1pZF9wcm9wLCAtMSk7Ci0JCWNvbnN0IGNoYXIgKnRoaXNfbWlkX3Byb3AgPSBtaWRfcHJvcDsKLQotCQlpZiAoaWQgPCAwKSB7Ci0JCQl0aGlzX21pZF9wcm9wID0gImNwdWlkIjsKLQkJCWlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCB0aGlzX21pZF9wcm9wLCAtMSk7Ci0JCX0KLQotCQlpZiAoaWQgPCAwKSB7Ci0JCQlwcm9tX3ByaW50ZigiT0Y6IFNlcmlvdXMgcHJvYmxlbSwgY3B1IGxhY2tzICIKLQkJCQkgICAgIiVzIHByb3BlcnR5IiwgdGhpc19taWRfcHJvcCk7Ci0JCQlwcm9tX2hhbHQoKTsKLQkJfQotCQlpZiAoY3B1aWQgPT0gaWQpCi0JCQlyZXR1cm4gZHA7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgb2ZfZmlsbF9pbl9jcHVfZGF0YSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0JY29uc3QgY2hhciAqbWlkX3Byb3AgPSBnZXRfbWlkX3Byb3AoKTsKLQotCW5jcHVzX3Byb2JlZCA9IDA7Ci0JZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCAiY3B1IikgewotCQlpbnQgY3B1aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsIG1pZF9wcm9wLCAtMSk7Ci0JCWNvbnN0IGNoYXIgKnRoaXNfbWlkX3Byb3AgPSBtaWRfcHJvcDsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwb3J0aWRfcGFyZW50OwotCQlpbnQgcG9ydGlkID0gLTE7Ci0KLQkJcG9ydGlkX3BhcmVudCA9IE5VTEw7Ci0JCWlmIChjcHVpZCA8IDApIHsKLQkJCXRoaXNfbWlkX3Byb3AgPSAiY3B1aWQiOwotCQkJY3B1aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsIHRoaXNfbWlkX3Byb3AsIC0xKTsKLQkJCWlmIChjcHVpZCA+PSAwKSB7Ci0JCQkJaW50IGxpbWl0ID0gMjsKLQotCQkJCXBvcnRpZF9wYXJlbnQgPSBkcDsKLQkJCQl3aGlsZSAobGltaXQtLSkgewotCQkJCQlwb3J0aWRfcGFyZW50ID0gcG9ydGlkX3BhcmVudC0+cGFyZW50OwotCQkJCQlpZiAoIXBvcnRpZF9wYXJlbnQpCi0JCQkJCQlicmVhazsKLQkJCQkJcG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHBvcnRpZF9wYXJlbnQsCi0JCQkJCQkJCSAgICAgICAicG9ydGlkIiwgLTEpOwotCQkJCQlpZiAocG9ydGlkID49IDApCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY3B1aWQgPCAwKSB7Ci0JCQlwcm9tX3ByaW50ZigiT0Y6IFNlcmlvdXMgcHJvYmxlbSwgY3B1IGxhY2tzICIKLQkJCQkgICAgIiVzIHByb3BlcnR5IiwgdGhpc19taWRfcHJvcCk7Ci0JCQlwcm9tX2hhbHQoKTsKLQkJfQotCi0JCW5jcHVzX3Byb2JlZCsrOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCQlpZiAoY3B1aWQgPj0gTlJfQ1BVUykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSWdub3JpbmcgQ1BVICVkIHdoaWNoIGlzICIKLQkJCSAgICAgICAiPj0gTlJfQ1BVUyAoJWQpXG4iLAotCQkJICAgICAgIGNwdWlkLCBOUl9DUFVTKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZWxzZQotCQkvKiBPbiB1bmlwcm9jZXNzb3Igd2Ugb25seSB3YW50IHRoZSB2YWx1ZXMgZm9yIHRoZQotCQkgKiByZWFsIHBoeXNpY2FsIGNwdSB0aGUga2VybmVsIGJvb3RlZCBvbnRvLCBob3dldmVyCi0JCSAqIGNwdV9kYXRhKCkgb25seSBoYXMgb25lIGVudHJ5IGF0IGluZGV4IDAuCi0JCSAqLwotCQlpZiAoY3B1aWQgIT0gcmVhbF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSkKLQkJCWNvbnRpbnVlOwotCQljcHVpZCA9IDA7Ci0jZW5kaWYKLQotCQljcHVfZGF0YShjcHVpZCkuY2xvY2tfdGljayA9Ci0JCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJjbG9jay1mcmVxdWVuY3kiLCAwKTsKLQotCQlpZiAocG9ydGlkX3BhcmVudCkgewotCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9zaXplID0KLQkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMS1kY2FjaGUtc2l6ZSIsCi0JCQkJCQkgICAgICAxNiAqIDEwMjQpOwotCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9saW5lX3NpemUgPQotCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImwxLWRjYWNoZS1saW5lLXNpemUiLAotCQkJCQkJICAgICAgMzIpOwotCQkJY3B1X2RhdGEoY3B1aWQpLmljYWNoZV9zaXplID0KLQkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMS1pY2FjaGUtc2l6ZSIsCi0JCQkJCQkgICAgICA4ICogMTAyNCk7Ci0JCQljcHVfZGF0YShjcHVpZCkuaWNhY2hlX2xpbmVfc2l6ZSA9Ci0JCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibDEtaWNhY2hlLWxpbmUtc2l6ZSIsCi0JCQkJCQkgICAgICAzMik7Ci0JCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX3NpemUgPQotCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImwyLWNhY2hlLXNpemUiLCAwKTsKLQkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfbGluZV9zaXplID0KLQkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMi1jYWNoZS1saW5lLXNpemUiLCAwKTsKLQkJCWlmICghY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9zaXplIHx8Ci0JCQkgICAgIWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfbGluZV9zaXplKSB7Ci0JCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9zaXplID0KLQkJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHBvcnRpZF9wYXJlbnQsCi0JCQkJCQkJICAgICAgImwyLWNhY2hlLXNpemUiLAotCQkJCQkJCSAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKLQkJCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX2xpbmVfc2l6ZSA9Ci0JCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChwb3J0aWRfcGFyZW50LAotCQkJCQkJCSAgICAgICJsMi1jYWNoZS1saW5lLXNpemUiLCA2NCk7Ci0JCQl9Ci0KLQkJCWNwdV9kYXRhKGNwdWlkKS5jb3JlX2lkID0gcG9ydGlkICsgMTsKLQkJCWNwdV9kYXRhKGNwdWlkKS5wcm9jX2lkID0gcG9ydGlkOwotI2lmZGVmIENPTkZJR19TTVAKLQkJCXNwYXJjNjRfbXVsdGlfY29yZSA9IDE7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWNwdV9kYXRhKGNwdWlkKS5kY2FjaGVfc2l6ZSA9Ci0JCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZGNhY2hlLXNpemUiLCAxNiAqIDEwMjQpOwotCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9saW5lX3NpemUgPQotCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImRjYWNoZS1saW5lLXNpemUiLCAzMik7Ci0KLQkJCWNwdV9kYXRhKGNwdWlkKS5pY2FjaGVfc2l6ZSA9Ci0JCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiaWNhY2hlLXNpemUiLCAxNiAqIDEwMjQpOwotCQkJY3B1X2RhdGEoY3B1aWQpLmljYWNoZV9saW5lX3NpemUgPQotCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImljYWNoZS1saW5lLXNpemUiLCAzMik7Ci0KLQkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfc2l6ZSA9Ci0JCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZWNhY2hlLXNpemUiLAotCQkJCQkJICAgICAgKDQgKiAxMDI0ICogMTAyNCkpOwotCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9saW5lX3NpemUgPQotCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7Ci0KLQkJCWNwdV9kYXRhKGNwdWlkKS5jb3JlX2lkID0gMDsKLQkJCWNwdV9kYXRhKGNwdWlkKS5wcm9jX2lkID0gLTE7Ci0JCX0KLQotI2lmZGVmIENPTkZJR19TTVAKLQkJY3B1X3NldChjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKLQkJY3B1X3NldChjcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7Ci0jZW5kaWYKLQl9Ci0KLQlzbXBfZmlsbF9pbl9zaWJfY29yZV9tYXBzKCk7Ci19Ci0KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY29uc29sZV9kZXZpY2U7Ci1FWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfZGV2aWNlKTsKLQotY2hhciAqb2ZfY29uc29sZV9wYXRoOwotRVhQT1JUX1NZTUJPTChvZl9jb25zb2xlX3BhdGgpOwotCi1jaGFyICpvZl9jb25zb2xlX29wdGlvbnM7Ci1FWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfb3B0aW9ucyk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvZl9jb25zb2xlX2luaXQodm9pZCkKLXsKLQljaGFyICptc2cgPSAiT0Ygc3Rkb3V0IGRldmljZSBpczogJXNcbiI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQljb25zdCBjaGFyICp0eXBlOwotCXBoYW5kbGUgbm9kZTsKLQotCW9mX2NvbnNvbGVfcGF0aCA9IHByb21fZWFybHlfYWxsb2MoMjU2KTsKLQlpZiAocHJvbV9paGFuZGxlMnBhdGgocHJvbV9zdGRvdXQsIG9mX2NvbnNvbGVfcGF0aCwgMjU2KSA8IDApIHsKLQkJcHJvbV9wcmludGYoIkNhbm5vdCBvYnRhaW4gcGF0aCBvZiBzdGRvdXQuXG4iKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCW9mX2NvbnNvbGVfb3B0aW9ucyA9IHN0cnJjaHIob2ZfY29uc29sZV9wYXRoLCAnOicpOwotCWlmIChvZl9jb25zb2xlX29wdGlvbnMpIHsKLQkJb2ZfY29uc29sZV9vcHRpb25zKys7Ci0JCWlmICgqb2ZfY29uc29sZV9vcHRpb25zID09ICdcMCcpCi0JCQlvZl9jb25zb2xlX29wdGlvbnMgPSBOVUxMOwotCX0KLQotCW5vZGUgPSBwcm9tX2luc3QycGtnKHByb21fc3Rkb3V0KTsKLQlpZiAoIW5vZGUpIHsKLQkJcHJvbV9wcmludGYoIkNhbm5vdCByZXNvbHZlIHN0ZG91dCBub2RlIGZyb20gIgotCQkJICAgICJpbnN0YW5jZSAlMDh4LlxuIiwgcHJvbV9zdGRvdXQpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQlkcCA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKG5vZGUpOwotCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCWlmICghdHlwZSkgewotCQlwcm9tX3ByaW50ZigiQ29uc29sZSBzdGRvdXQgbGFja3MgZGV2aWNlX3R5cGUgcHJvcGVydHkuXG4iKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCi0JaWYgKHN0cmNtcCh0eXBlLCAiZGlzcGxheSIpICYmIHN0cmNtcCh0eXBlLCAic2VyaWFsIikpIHsKLQkJcHJvbV9wcmludGYoIkNvbnNvbGUgZGV2aWNlX3R5cGUgaXMgbmVpdGhlciBkaXNwbGF5ICIKLQkJCSAgICAibm9yIHNlcmlhbC5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQlvZl9jb25zb2xlX2RldmljZSA9IGRwOwotCi0JcHJpbnRrKG1zZywgb2ZfY29uc29sZV9wYXRoKTsKLX0KLQotdm9pZCBfX2luaXQgcHJvbV9idWlsZF9kZXZpY2V0cmVlKHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqbmV4dHA7Ci0KLQlhbGxub2RlcyA9IGNyZWF0ZV9ub2RlKHByb21fcm9vdF9ub2RlLCBOVUxMKTsKLQlhbGxub2Rlcy0+cGF0aF9jb21wb25lbnRfbmFtZSA9ICIiOwotCWFsbG5vZGVzLT5mdWxsX25hbWUgPSAiLyI7Ci0KLQluZXh0cCA9ICZhbGxub2Rlcy0+YWxsbmV4dDsKLQlhbGxub2Rlcy0+Y2hpbGQgPSBidWlsZF90cmVlKGFsbG5vZGVzLAotCQkJCSAgICAgcHJvbV9nZXRjaGlsZChhbGxub2Rlcy0+bm9kZSksCi0JCQkJICAgICAmbmV4dHApOwotCW9mX2NvbnNvbGVfaW5pdCgpOwotCi0JcHJpbnRrKCJQUk9NOiBCdWlsdCBkZXZpY2UgdHJlZSB3aXRoICV1IGJ5dGVzIG9mIG1lbW9yeS5cbiIsCi0JICAgICAgIHByb21fZWFybHlfYWxsb2NhdGVkKTsKLQotCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKQotCQlvZl9maWxsX2luX2NwdV9kYXRhKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZjgwOTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qIGxkIHNjcmlwdCB0byBtYWtlIFVsdHJhTGludXgga2VybmVsICovCi0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+Ci0KLU9VVFBVVF9GT1JNQVQoImVsZjY0LXNwYXJjIiwgImVsZjY0LXNwYXJjIiwgImVsZjY0LXNwYXJjIikKLU9VVFBVVF9BUkNIKHNwYXJjOnY5YSkKLUVOVFJZKF9zdGFydCkKLQotamlmZmllcyA9IGppZmZpZXNfNjQ7Ci1TRUNUSU9OUwotewotCXN3YXBwZXJfbG93X3BtZF9kaXIgPSAweDAwMDAwMDAwMDA0MDIwMDA7Ci0JLiA9IDB4NDAwMDsKLQkudGV4dCAweDAwMDAwMDAwMDA0MDQwMDAgOiB7Ci0JCV90ZXh0ID0gLjsKLQkJVEVYVF9URVhUCi0JCVNDSEVEX1RFWFQKLQkJTE9DS19URVhUCi0JCUtQUk9CRVNfVEVYVAotCQkqKC5nbnUud2FybmluZykKLQl9ID0gMAotCV9ldGV4dCA9IC47Ci0JUFJPVklERSAoZXRleHQgPSAuKTsKLQotCVJPX0RBVEEoUEFHRV9TSVpFKQotCS5kYXRhIDogewotCQlEQVRBX0RBVEEKLQkJQ09OU1RSVUNUT1JTCi0JfQotCS5kYXRhMSA6IHsKLQkJKiguZGF0YTEpCi0JfQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEucmVhZF9tb3N0bHkgOiB7Ci0JCSooLmRhdGEucmVhZF9tb3N0bHkpCi0JfQotCV9lZGF0YSA9IC47Ci0JUFJPVklERSAoZWRhdGEgPSAuKTsKLQkuZml4dXAgOiB7Ci0JCSooLmZpeHVwKQotCX0KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KLQlOT1RFUwotCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQudGV4dCA6IHsKLQkJX19pbml0X2JlZ2luID0gLjsKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JLmNvbl9pbml0Y2FsbC5pbml0IDogewotCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQlTRUNVUklUWV9JTklUCi0KLQkuID0gQUxJR04oNCk7Ci0JLnRzYl9sZHF1YWRfcGh5c19wYXRjaCA6IHsKLQkJX190c2JfbGRxdWFkX3BoeXNfcGF0Y2ggPSAuOwotCQkqKC50c2JfbGRxdWFkX3BoeXNfcGF0Y2gpCi0JCV9fdHNiX2xkcXVhZF9waHlzX3BhdGNoX2VuZCA9IC47Ci0JfQotCi0JLnRzYl9waHlzX3BhdGNoIDogewotCQlfX3RzYl9waHlzX3BhdGNoID0gLjsKLQkJKigudHNiX3BoeXNfcGF0Y2gpCi0JCV9fdHNiX3BoeXNfcGF0Y2hfZW5kID0gLjsKLQl9Ci0KLQkuY3B1aWRfcGF0Y2ggOiB7Ci0JCV9fY3B1aWRfcGF0Y2ggPSAuOwotCQkqKC5jcHVpZF9wYXRjaCkKLQkJX19jcHVpZF9wYXRjaF9lbmQgPSAuOwotCX0KLQotCS5zdW40dl8xaW5zbl9wYXRjaCA6IHsKLQkJX19zdW40dl8xaW5zbl9wYXRjaCA9IC47Ci0JCSooLnN1bjR2XzFpbnNuX3BhdGNoKQotCQlfX3N1bjR2XzFpbnNuX3BhdGNoX2VuZCA9IC47Ci0JfQotCS5zdW40dl8yaW5zbl9wYXRjaCA6IHsKLQkJX19zdW40dl8yaW5zbl9wYXRjaCA9IC47Ci0JCSooLnN1bjR2XzJpbnNuX3BhdGNoKQotCQlfX3N1bjR2XzJpbnNuX3BhdGNoX2VuZCA9IC47Ci0JfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0jZW5kaWYKLQotCVBFUkNQVShQQUdFX1NJWkUpCi0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX2luaXRfZW5kID0gLjsKLQlfX2Jzc19zdGFydCA9IC47Ci0JLnNic3MgOiB7Ci0JCSooLnNic3MpCi0JCSooLnNjb21tb24pCi0JfQotCS5ic3MgOiB7Ci0JCSooLmR5bmJzcykKLQkJKiguYnNzKQotCQkqKENPTU1PTikKLQl9Ci0JX2VuZCA9IC4gOwotCVBST1ZJREUgKGVuZCA9IC4pOwotCi0JL0RJU0NBUkQvIDogewotCQlFWElUX1RFWFQKLQkJRVhJVF9EQVRBCi0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQotCi0JU1RBQlNfREVCVUcKLQlEV0FSRl9ERUJVRwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9saWIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTVlMTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIFNwYXJjNjQgbGlicmFyeSBmaWxlcy4uCi0jCi0KLUVYVFJBX0FGTEFHUyA6PSAtYW5zaQotRVhUUkFfQ0ZMQUdTIDo9IC1XZXJyb3IKLQotbGliLXkgOj0gUGVlQ2VlSS5vIGNvcHlfcGFnZS5vIGNsZWFyX3BhZ2UubyBzdHJsZW4ubyBzdHJuY21wLm8gXAotCSBtZW1zY2FuLm8gc3RybmNweV9mcm9tX3VzZXIubyBzdHJsZW5fdXNlci5vIG1lbWNtcC5vIGNoZWNrc3VtLm8gXAotCSBiemVyby5vIGNzdW1fY29weS5vIGNzdW1fY29weV9mcm9tX3VzZXIubyBjc3VtX2NvcHlfdG9fdXNlci5vIFwKLQkgVklTc2F2ZS5vIGF0b21pYy5vIGJpdG9wcy5vIFwKLQkgVTFtZW1jcHkubyBVMWNvcHlfZnJvbV91c2VyLm8gVTFjb3B5X3RvX3VzZXIubyBcCi0JIFUzbWVtY3B5Lm8gVTNjb3B5X2Zyb21fdXNlci5vIFUzY29weV90b191c2VyLm8gVTNwYXRjaC5vIFwKLQkgTkdtZW1jcHkubyBOR2NvcHlfZnJvbV91c2VyLm8gTkdjb3B5X3RvX3VzZXIubyBOR3BhdGNoLm8gXAotCSBOR3BhZ2UubyBOR2J6ZXJvLm8gXAotCSBORzJtZW1jcHkubyBORzJjb3B5X2Zyb21fdXNlci5vIE5HMmNvcHlfdG9fdXNlci5vIE5HMnBhdGNoLm8gXAotCSBORzJwYWdlLm8gXAotCSBHRU5tZW1jcHkubyBHRU5jb3B5X2Zyb21fdXNlci5vIEdFTmNvcHlfdG9fdXNlci5vIEdFTnBhdGNoLm8gXAotCSBHRU5wYWdlLm8gR0VOYnplcm8ubyBcCi0JIGNvcHlfaW5fdXNlci5vIHVzZXJfZml4dXAubyBtZW1tb3ZlLm8gXAotCSBtY291bnQubyBpcGNzdW0ubyByd3NlbS5vIHhvci5vCi0KLW9iai15ICs9IGlvbWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvaW9tYXAuYyBiL2FyY2gvc3BhcmM2NC9saWIvaW9tYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyMGViYi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2lvbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogSW1wbGVtZW50IHRoZSBzcGFyYzY0IGlvbWFwIGludGVyZmFjZXMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0vKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCi12b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKHVuc2lnbmVkIGxvbmcpIHBvcnQ7Ci19Ci0KLXZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci1FWFBPUlRfU1lNQk9MKGlvcG9ydF9tYXApOwotRVhQT1JUX1NZTUJPTChpb3BvcnRfdW5tYXApOwotCi0vKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhIFBDSSBCQVIgKG1lbW9yeSBvciBJTykgKi8KLXZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuKQotewotCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7Ci0JcmVzb3VyY2Vfc2l6ZV90IGxlbiA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpOwotCi0JaWYgKCFsZW4gfHwgIXN0YXJ0KQotCQlyZXR1cm4gTlVMTDsKLQlpZiAobWF4bGVuICYmIGxlbiA+IG1heGxlbikKLQkJbGVuID0gbWF4bGVuOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCXJldHVybiBpb3BvcnRfbWFwKHN0YXJ0LCBsZW4pOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQotCQkJcmV0dXJuIGlvcmVtYXAoc3RhcnQsIGxlbik7Ci0JCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7Ci0JfQotCS8qIFdoYXQ/ICovCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICogYWRkcikKLXsKLQkvKiBub3RoaW5nIHRvIGRvICovCi19Ci1FWFBPUlRfU1lNQk9MKHBjaV9pb21hcCk7Ci1FWFBPUlRfU1lNQk9MKHBjaV9pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvbWVtY21wLlMgYi9hcmNoL3NwYXJjNjQvbGliL21lbWNtcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZkYWE4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9saWIvbWVtY21wLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogU3BhcmM2NCBvcHRpbWl6ZWQgbWVtY21wIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQotICovCi0KLQkudGV4dAotCS5hbGlnbgkzMgotCS5nbG9ibAlfX21lbWNtcCwgbWVtY21wCi1fX21lbWNtcDoKLW1lbWNtcDoKLQljbXAJJW8yLCAwCQkhIElFVTEJR3JvdXAKLWxvb3A6CWJlLHBuCSVpY2MsIHJldF8wCSEgQ1RJCi0JIG5vcAkJCSEgSUVVMAotCWxkdWIJWyVvMF0sICVnNwkhIExTVQlHcm91cAotCWxkdWIJWyVvMV0sICVnMwkhIExTVQlHcm91cAotCXN1YgklbzIsIDEsICVvMgkhIElFVTAKLQlhZGQJJW8wLCAxLCAlbzAJISBJRVUxCi0JYWRkCSVvMSwgMSwgJW8xCSEgSUVVMAlHcm91cAotCXN1YmNjCSVnNywgJWczLCAlZzMJISBJRVUxCUdyb3VwCi0JYmUscHQJJWljYywgbG9vcAkhIENUSQotCSBjbXAJJW8yLCAwCQkhIElFVTEJR3JvdXAKLQotcmV0X24wOglyZXRsCi0JIG1vdgklZzMsICVvMAotcmV0XzA6CXJldGwKLQkgbW92CTAsICVvMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9zdHJsZW4uUyBiL2FyY2gvc3BhcmM2NC9saWIvc3RybGVuLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YmExOTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9zdHJsZW4uUworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIHN0cmxlbi5TOiBTcGFyYzY0IG9wdGltaXplZCBzdHJsZW4gY29kZQotICogSGFuZCBvcHRpbWl6ZWQgZnJvbSBHTlUgbGliYydzIHN0cmxlbgotICogQ29weXJpZ2h0IChDKSAxOTkxLDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKi8KLQotI2RlZmluZSBMT19NQUdJQyAweDAxMDEwMTAxCi0jZGVmaW5lIEhJX01BR0lDIDB4ODA4MDgwODAKLQotCS5hbGlnbgkzMgotCS5nbG9ibAlzdHJsZW4KLQkudHlwZQlzdHJsZW4sI2Z1bmN0aW9uCi1zdHJsZW46Ci0JbW92CSVvMCwgJW8xCi0JYW5kY2MJJW8wLCAzLCAlZzAKLQliZSxwdAklaWNjLCA5ZgotCSBzZXRoaQklaGkoSElfTUFHSUMpLCAlbzQKLQlsZHViCVslbzBdLCAlbzUKLQlicnoscG4JJW81LCAxMWYKLQkgYWRkCSVvMCwgMSwgJW8wCi0JYW5kY2MJJW8wLCAzLCAlZzAKLQliZSxwbgklaWNjLCA0ZgotCSBvcgklbzQsICVsbyhISV9NQUdJQyksICVvMwotCWxkdWIJWyVvMF0sICVvNQotCWJyeixwbgklbzUsIDEyZgotCSBhZGQJJW8wLCAxLCAlbzAKLQlhbmRjYwklbzAsIDMsICVnMAotCWJlLHB0CSVpY2MsIDVmCi0JIHNldGhpCSVoaShMT19NQUdJQyksICVvNAotCWxkdWIJWyVvMF0sICVvNQotCWJyeixwbgklbzUsIDEzZgotCSBhZGQJJW8wLCAxLCAlbzAKLQliYSxwdAklaWNjLCA4ZgotCSBvcgklbzQsICVsbyhMT19NQUdJQyksICVvMgotOToKLQlvcgklbzQsICVsbyhISV9NQUdJQyksICVvMwotNDoKLQlzZXRoaQklaGkoTE9fTUFHSUMpLCAlbzQKLTU6Ci0Jb3IJJW80LCAlbG8oTE9fTUFHSUMpLCAlbzIKLTg6Ci0JbGQJWyVvMF0sICVvNQotMjoKLQlzdWIJJW81LCAlbzIsICVvNAotCWFuZGNjCSVvNCwgJW8zLCAlZzAKLQliZSxwdAklaWNjLCA4YgotCSBhZGQJJW8wLCA0LCAlbzAKLQotCS8qIENoZWNrIGV2ZXJ5IGJ5dGUuICovCi0Jc3JsCSVvNSwgMjQsICVnNwotCWFuZGNjCSVnNywgMHhmZiwgJWcwCi0JYmUscG4JJWljYywgMWYKLQkgYWRkCSVvMCwgLTQsICVvNAotCXNybAklbzUsIDE2LCAlZzcKLQlhbmRjYwklZzcsIDB4ZmYsICVnMAotCWJlLHBuCSVpY2MsIDFmCi0JIGFkZAklbzQsIDEsICVvNAotCXNybAklbzUsIDgsICVnNwotCWFuZGNjCSVnNywgMHhmZiwgJWcwCi0JYmUscG4JJWljYywgMWYKLQkgYWRkCSVvNCwgMSwgJW80Ci0JYW5kY2MJJW81LCAweGZmLCAlZzAKLQlibmUsYSxwdCAlaWNjLCAyYgotCSBsZAlbJW8wXSwgJW81Ci0JYWRkCSVvNCwgMSwgJW80Ci0xOgotCXJldGwKLQkgc3ViCSVvNCwgJW8xLCAlbzAKLTExOgotCXJldGwKLQkgbW92CTAsICVvMAotMTI6Ci0JcmV0bAotCSBtb3YJMSwgJW8wCi0xMzoKLQlyZXRsCi0JIG1vdgkyLCAlbzAKLQotCS5zaXplCXN0cmxlbiwgLi1zdHJsZW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvc3BhcmM2NC9tYXRoLWVtdS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1Y2I5Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvbWF0aC1lbXUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBGUFUgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgotIwotCi1vYmoteSAgICA6PSBtYXRoLm8KLQotRVhUUkFfQ0ZMQUdTID0gLUlpbmNsdWRlL21hdGgtZW11IC13CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQvbW0vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDA0YzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L21tL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXggU3BhcmM2NC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCi0jCi0KLUVYVFJBX0FGTEFHUyA6PSAtYW5zaQotRVhUUkFfQ0ZMQUdTIDo9IC1XZXJyb3IKLQotb2JqLXkgICAgOj0gdWx0cmEubyB0bGIubyB0c2IubyBmYXVsdC5vIGluaXQubyBnZW5lcmljLm8KLQotb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L29wcm9maWxlL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L29wcm9maWxlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWZlY2ExLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotb2JqLSQoQ09ORklHX09QUk9GSUxFKSArPSBvcHJvZmlsZS5vCi0KLURSSVZFUl9PQkpTID0gJChhZGRwcmVmaXggLi4vLi4vLi4vZHJpdmVycy9vcHJvZmlsZS8sIFwKLQkJb3Byb2YubyBjcHVfYnVmZmVyLm8gYnVmZmVyX3N5bmMubyBcCi0JCWV2ZW50X2J1ZmZlci5vIG9wcm9maWxlX2ZpbGVzLm8gXAotCQlvcHJvZmlsZWZzLm8gb3Byb2ZpbGVfc3RhdHMubyBcCi0JCXRpbWVyX2ludC5vICkKLQotb3Byb2ZpbGUteQkJCQk6PSAkKERSSVZFUl9PQkpTKSBpbml0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9pbml0LmMgYi9hcmNoL3NwYXJjNjQvb3Byb2ZpbGUvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2JiNjAzLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioKLSAqIEBmaWxlIGluaXQuYwotICoKLSAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycwotICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKLSAqCi0gKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotIAotaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotCi12b2lkIG9wcm9maWxlX2FyY2hfZXhpdCh2b2lkKQotewotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQvcHJvbS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5NDQ4My4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgdGhlIFN1biBCb290IFBST00gaW50ZXJmYWNlIGxpYnJhcnkgdW5kZXIKLSMgTGludXguCi0jCi0KLUVYVFJBX0FGTEFHUyA6PSAtYW5zaQotRVhUUkFfQ0ZMQUdTIDo9IC1XZXJyb3IKLQotbGliLXkgICA6PSBib290c3RyLm8gZGV2b3BzLm8gaW5pdC5vIG1pc2MubyBcCi0JICAgdHJlZS5vIGNvbnNvbGUubyBwcmludGYubyBwMTI3NS5vIGNpZi5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9wcmludGYuYyBiL2FyY2gvc3BhcmM2NC9wcm9tL3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA5NDNlLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL3ByaW50Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIHByaW50Zi5jOiAgSW50ZXJuYWwgcHJvbSBsaWJyYXJ5IHByaW50ZiBmYWNpbGl0eS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGV0ZSBaYWl0Y2V2ICh6YWl0Y2V2QHlhaG9vLmNvbSkKLSAqCi0gKiBXZSB1c2VkIHRvIHdhcm4gYWxsIG92ZXIgdGhlIGNvZGU6IERPIE5PVCBVU0UgcHJvbV9wcmludGYoKSwKLSAqIGFuZCB5ZXQgcGVvcGxlIGRvLiBBbnRvbidzIGJhbmtpbmcgY29kZSB3YXMgb3V0cHV0dGluZyBiYW5rcwotICogd2l0aCBwcm9tX3ByaW50ZiBmb3IgbW9zdCBvZiB0aGUgMi40IGxpZmV0aW1lLiBTaW5jZSBhbiBlZmZlY3RpdmUKLSAqIHN0aWNrIGlzIG5vdCBhdmFpbGFibGUsIHdlIGRlcGxveWVkIGEgY2Fycm90OiBhbiBlYXJseSBwcmludGsKLSAqIHRocm91Z2ggUFJPTSBieSBtZWFucyBvZiAtcCBib290IG9wdGlvbi4gVGhpcyBvdWdodCB0byBmaXggaXQuCi0gKiBVU0UgcHJpbnRrOyBpZiB5b3UgbmVlZCwgZGVwbG95IC1wLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotCi1zdGF0aWMgY2hhciBwcGJ1ZlsxMDI0XTsKLQotdm9pZAotcHJvbV93cml0ZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBuKQotewotCWNoYXIgY2g7Ci0KLQl3aGlsZSAobiAhPSAwKSB7Ci0JCS0tbjsKLQkJaWYgKChjaCA9ICpidWYrKykgPT0gJ1xuJykKLQkJCXByb21fcHV0Y2hhcignXHInKTsKLQkJcHJvbV9wdXRjaGFyKGNoKTsKLQl9Ci19Ci0KLXZvaWQKLXByb21fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQlpbnQgaTsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JaSA9IHZzY25wcmludGYocHBidWYsIHNpemVvZihwcGJ1ZiksIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JcHJvbV93cml0ZShwcGJ1ZiwgaSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA3NTMzNDZlLi5hZTVmOTRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTExLDIxICsxMSwyMSBAQAogZXh0ZXJuIHZvaWQgYmxvY2tfc2lnbmFscyh2b2lkKTsKIGV4dGVybiB2b2lkIHVuYmxvY2tfc2lnbmFscyh2b2lkKTsKIAotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBkbyB7IHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBmbGFncyk7IFwKKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpIGRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsgXAogCQkJCSAgICAgKGZsYWdzKSA9IGdldF9zaWduYWxzKCk7IH0gd2hpbGUoMCkKLSNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpIGRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsgXAorI2RlZmluZSByYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpIGRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsgXAogCQkJCSAgICAgIHNldF9zaWduYWxzKGZsYWdzKTsgfSB3aGlsZSgwKQogCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKGZsYWdzKSBkbyB7IGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2lycV9kaXNhYmxlKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBkbyB7IHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKTsgfSB3aGlsZSgwKQogCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSB1bmJsb2NrX3NpZ25hbHMoKQotI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIGJsb2NrX3NpZ25hbHMoKQorI2RlZmluZSByYXdfbG9jYWxfaXJxX2VuYWJsZSgpIHVuYmxvY2tfc2lnbmFscygpCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpIGJsb2NrX3NpZ25hbHMoKQogCiAjZGVmaW5lIGlycXNfZGlzYWJsZWQoKSAgICAgICAgICAgICAgICAgXAogKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsgICAgICAgICAgICBcCi0gICAgICAgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyAgICAgICAgXAorICAgICAgICByYXdfbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7ICAgICAgICBcCiAgICAgICAgIChmbGFncyA9PSAwKTsgICAgICAgICAgICAgICAgICAgXAogfSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggOThhMGVkNS4uMGY0NGFkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yNDcsNiArMjQ3LDI4IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWDg2X1ZPWUFHRVIKIAorY29uZmlnIFNQQVJTRV9JUlEKKwlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgorCWRlcGVuZHMgb24gUENJX01TSSB8fCBIVF9JUlEKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3BhcnNlIGlycXMuIFRoaXMgaXMgdXNlZnVsIGZvciBkaXN0cm8KKwkgIGtlcm5lbHMgdGhhdCB3YW50IHRvIGRlZmluZSBhIGhpZ2ggQ09ORklHX05SX0NQVVMgdmFsdWUgYnV0IHN0aWxsCisJICB3YW50IHRvIGhhdmUgbG93IGtlcm5lbCBtZW1vcnkgZm9vdHByaW50IG9uIHNtYWxsZXIgbWFjaGluZXMuCisKKwkgICggU3BhcnNlIElSUXMgY2FuIGFsc28gYmUgYmVuZWZpY2lhbCBvbiBOVU1BIGJveGVzLCBhcyB0aGV5IHNwcmVhZAorCSAgICBvdXQgdGhlIGlycV9kZXNjW10gYXJyYXkgaW4gYSBtb3JlIE5VTUEtZnJpZW5kbHkgd2F5LiApCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCisKK2NvbmZpZyBOVU1BX01JR1JBVEVfSVJRX0RFU0MKKwlib29sICJNb3ZlIGlycSBkZXNjIHdoZW4gY2hhbmdpbmcgaXJxIHNtcF9hZmZpbml0eSIKKwlkZXBlbmRzIG9uIFNQQVJTRV9JUlEgJiYgTlVNQQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBtb3ZpbmcgaXJxX2Rlc2MgdG8gY3B1L25vZGUgdGhhdCBpcnEgd2lsbCB1c2UgaGFuZGxlZC4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KKwogY29uZmlnIFg4Nl9GSU5EX1NNUF9DT05GSUcKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfTVBQQVJTRSB8fCBYODZfVk9ZQUdFUgpAQCAtNDc5LDcgKzUwMSw3IEBACiAgICAgICAgICBUaGUgSFBFVCBwcm92aWRlcyBhIHN0YWJsZSB0aW1lIGJhc2Ugb24gU01QCiAgICAgICAgICBzeXN0ZW1zLCB1bmxpa2UgdGhlIFRTQywgYnV0IGl0IGlzIG1vcmUgZXhwZW5zaXZlIHRvIGFjY2VzcywKICAgICAgICAgIGFzIGl0IGlzIG9mZi1jaGlwLiAgWW91IGNhbiBmaW5kIHRoZSBIUEVUIHNwZWMgYXQKLSAgICAgICAgIDxodHRwOi8vd3d3LmludGVsLmNvbS9oYXJkd2FyZWRlc2lnbi9ocGV0c3BlYy5odG0+LgorICAgICAgICAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjXzEucGRmPi4KIAogICAgICAgICAgWW91IGNhbiBzYWZlbHkgY2hvb3NlIFkgaGVyZS4gIEhvd2V2ZXIsIEhQRVQgd2lsbCBvbmx5IGJlCiAgICAgICAgICBhY3RpdmF0ZWQgaWYgdGhlIHBsYXRmb3JtIGFuZCB0aGUgQklPUyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGRjMjJjMDcuLjQwMzUzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNjUsNyArNjUsNyBAQAogCQlyZXR1cm4gZG1hX29wczsKIAllbHNlCiAJCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9vcHM7Ci0jZW5kaWYgLyogX0FTTV9YODZfRE1BX01BUFBJTkdfSCAqLworI2VuZGlmCiB9CiAKIC8qIE1ha2Ugc3VyZSB3ZSBrZWVwIHRoZSBzYW1lIGJlaGF2aW91ciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IGU0NzVlMDAuLjdhMWY0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTE5OCwxNyArMTk4LDE0IEBACiBleHRlcm4gdm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCk7CiAjZW5kaWYKIAotZXh0ZXJuIGludCBwcm9iZV9ucl9pcnFzKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvYmVfbnJfaXJxc19nc2kodm9pZCk7CiAKICNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCiAjZGVmaW5lIGlvX2FwaWNfYXNzaWduX3BjaV9pcnFzIDAKIHN0YXRpYyBjb25zdCBpbnQgdGltZXJfdGhyb3VnaF84MjU5ID0gMDsKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKQl7IH0KIAotc3RhdGljIGlubGluZSBpbnQgcHJvYmVfbnJfaXJxcyh2b2lkKQotewotCXJldHVybiBOUl9JUlFTOwotfQorc3RhdGljIGlubGluZSB2b2lkIHByb2JlX25yX2lycXNfZ3NpKHZvaWQpCXsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9JT19BUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCmluZGV4IDI5NWIxMzEuLmE2ZWU5ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtNyw4ICs3LDYgQEAKIGV4dGVybiBpbnQgZm9yY2VfaW9tbXUsIG5vX2lvbW11OwogZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZDsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnJfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7Ci0KIC8qIDEwIHNlY29uZHMgKi8KICNkZWZpbmUgRE1BUl9PUEVSQVRJT05fVElNRU9VVCAoKGN5Y2xlc190KSB0c2Nfa2h6KjEwKjEwMDApCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDAwMDVhZGIuLmY3ZmY2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMTAxLDEyICsxMDEsMjMgQEAKICNkZWZpbmUgTEFTVF9WTTg2X0lSUQkJMTUKICNkZWZpbmUgaW52YWxpZF92bTg2X2lycShpcnEpCSgoaXJxKSA8IDMgfHwgKGlycSkgPiAxNSkKIAorI2RlZmluZSBOUl9JUlFTX0xFR0FDWQkJMTYKKwogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X1ZPWUFHRVIpCisKKyNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKICMgaWYgTlJfQ1BVUyA8IE1BWF9JT19BUElDUwogIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBOUl9DUFVTKSkKICMgZWxzZQogIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBNQVhfSU9fQVBJQ1MpKQogIyBlbmRpZgorI2Vsc2UKKyMgaWYgKDggKiBOUl9DUFVTKSA+ICgzMiAqIE1BWF9JT19BUElDUykKKyMgIGRlZmluZSBOUl9JUlFTIChOUl9WRUNUT1JTICsgKDggKiBOUl9DUFVTKSkKKyMgZWxzZQorIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBNQVhfSU9fQVBJQ1MpKQorIyBlbmRpZgorI2VuZGlmCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl9WT1lBR0VSKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDY0Nzc4MTIuLjY2ODM0YzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oCkBAIC04NCw2ICs4NCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfcXVpcmtzKHZvaWQpIHsgfQogI2VuZGlmCiAKK2V4dGVybiB2b2lkIHBjaV9pb21tdV9hbGxvYyh2b2lkKTsKKwogI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCmluZGV4IGQwMmQ5MzYuLjRkYTIwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0yMyw3ICsyMyw2IEBACiAJCQkgICAgICAgaW50IHJlZywgaW50IGxlbiwgdTMyIHZhbHVlKTsKIAogZXh0ZXJuIHZvaWQgZG1hMzJfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGNpX2lvbW11X2FsbG9jKHZvaWQpOwogCiAvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5CiAgKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNTgwYzNlZS4uNDM0MDA1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTU3LDYgKzE1Nyw3IEBACiAJaW50IF9fcmV0X2d1OwkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX3ZhbF9ndTsJCQkJCQlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCQlcCisJbWlnaHRfZmF1bHQoKTsJCQkJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCiAJCV9fZ2V0X3VzZXJfeCgxLCBfX3JldF9ndSwgX192YWxfZ3UsIHB0cik7CQlcCkBAIC0yNDEsNiArMjQyLDcgQEAKIAlpbnQgX19yZXRfcHU7CQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbDsJCQkJXAogCV9fY2hrX3VzZXJfcHRyKHB0cik7CQkJCQlcCisJbWlnaHRfZmF1bHQoKTsJCQkJCQlcCiAJX19wdV92YWwgPSB4OwkJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaAppbmRleCBkMDk1YTNhLi41ZTA2MjU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCkBAIC04Miw4ICs4Miw4IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKLSAgICAgICBtaWdodF9zbGVlcCgpOwotICAgICAgIHJldHVybiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh0bywgZnJvbSwgbik7CisJbWlnaHRfZmF1bHQoKTsKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sIGZyb20sIG4pOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKQEAgLTEzNyw3ICsxMzcsNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCiBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewotCW1pZ2h0X3NsZWVwKCk7CisJbWlnaHRfZmF1bHQoKTsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikpIHsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIF9fY29weV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICp0bywKIAkJCQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewotCW1pZ2h0X3NsZWVwKCk7CisJbWlnaHRfZmF1bHQoKTsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikpIHsKIAkJdW5zaWduZWQgbG9uZyByZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCBmOGNmZDAwLi44NDIxMGM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yOSw2ICsyOSw4IEBACiBpbnQgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCiB7CiAJaW50IHJldCA9IDA7CisKKwltaWdodF9mYXVsdCgpOwogCWlmICghX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpCiAJCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYyhkc3QsIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUpOwogCXN3aXRjaCAoc2l6ZSkgewpAQCAtNzEsNiArNzMsOCBAQAogaW50IF9fY29weV90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKIHsKIAlpbnQgcmV0ID0gMDsKKworCW1pZ2h0X2ZhdWx0KCk7CiAJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkKIAkJcmV0dXJuIGNvcHlfdXNlcl9nZW5lcmljKChfX2ZvcmNlIHZvaWQgKilkc3QsIHNyYywgc2l6ZSk7CiAJc3dpdGNoIChzaXplKSB7CkBAIC0xMTMsNiArMTE3LDggQEAKIGludCBfX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQogewogCWludCByZXQgPSAwOworCisJbWlnaHRfZmF1bHQoKTsKIAlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKQogCQlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwKIAkJCQkJIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDg4ZGQ3NjguLmQzNjRkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTEwOSw2ICsxMDksOCBAQAogCiBvYmotJChDT05GSUdfWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTikgKz0gY2hlY2subwogCitvYmotJChDT05GSUdfU1dJT1RMQikJCQkrPSBwY2ktc3dpb3RsYl82NC5vICMgTkIgcmVuYW1lIHdpdGhvdXQgXzY0CisKICMjIwogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKQEAgLTEyMiw3ICsxMjQsNiBAQAogICAgICAgICBvYmotJChDT05GSUdfR0FSVF9JT01NVSkJKz0gcGNpLWdhcnRfNjQubyBhcGVydHVyZV82NC5vCiAgICAgICAgIG9iai0kKENPTkZJR19DQUxHQVJZX0lPTU1VKQkrPSBwY2ktY2FsZ2FyeV82NC5vIHRjZV82NC5vCiAgICAgICAgIG9iai0kKENPTkZJR19BTURfSU9NTVUpCQkrPSBhbWRfaW9tbXVfaW5pdC5vIGFtZF9pb21tdS5vCi0gICAgICAgIG9iai0kKENPTkZJR19TV0lPVExCKQkJKz0gcGNpLXN3aW90bGJfNjQubwogCiAgICAgICAgIG9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpCSs9IG1tY29uZi1mYW0xMGhfNjQubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IDNmMGEzZWQuLjg0NWVhMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAKIG91dF9ub2hwZXQ6CiAJaHBldF9jbGVhcl9tYXBwaW5nKCk7Ci0JYm9vdF9ocGV0X2Rpc2FibGUgPSAxOworCWhwZXRfYWRkcmVzcyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzNiwxMCArODM2LDExIEBACiAKIAkJaHBldF9hZGRyZXNzID0gZm9yY2VfaHBldF9hZGRyZXNzOwogCQlocGV0X2VuYWJsZSgpOwotCQlpZiAoIWhwZXRfdmlydF9hZGRyZXNzKQotCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKCFocGV0X3ZpcnRfYWRkcmVzcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKGhwZXRfcmVhZGwoSFBFVF9JRCkpOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDY3OWU3YmIuLmY2ZWE5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYwpAQCAtMTA4LDU1ICsxMDgsNiBAQAogZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7CiAKIHN0cnVjdCBpcnFfcGluX2xpc3Q7Ci1zdHJ1Y3QgaXJxX2NmZyB7Ci0JdW5zaWduZWQgaW50IGlycTsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW47Ci0JY3B1bWFza190IGRvbWFpbjsKLQljcHVtYXNrX3Qgb2xkX2RvbWFpbjsKLQl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7Ci0JdTggdmVjdG9yOwotCXU4IG1vdmVfaW5fcHJvZ3Jlc3MgOiAxOwotfTsKLQotLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTXSA9IHsKLQlbMF0gID0geyAuaXJxID0gIDAsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEwX1ZFQ1RPUiwgIH0sCi0JWzFdICA9IHsgLmlycSA9ICAxLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAotCVsyXSAgPSB7IC5pcnEgPSAgMiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKLQlbM10gID0geyAuaXJxID0gIDMsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEzX1ZFQ1RPUiwgIH0sCi0JWzRdICA9IHsgLmlycSA9ICA0LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAotCVs1XSAgPSB7IC5pcnEgPSAgNSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKLQlbNl0gID0geyAuaXJxID0gIDYsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE2X1ZFQ1RPUiwgIH0sCi0JWzddICA9IHsgLmlycSA9ICA3LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAotCVs4XSAgPSB7IC5pcnEgPSAgOCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKLQlbOV0gID0geyAuaXJxID0gIDksIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE5X1ZFQ1RPUiwgIH0sCi0JWzEwXSA9IHsgLmlycSA9IDEwLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAotCVsxMV0gPSB7IC5pcnEgPSAxMSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKLQlbMTJdID0geyAuaXJxID0gMTIsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMl9WRUNUT1IsIH0sCi0JWzEzXSA9IHsgLmlycSA9IDEzLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAotCVsxNF0gPSB7IC5pcnEgPSAxNCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKLQlbMTVdID0geyAuaXJxID0gMTUsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExNV9WRUNUT1IsIH0sCi19OwotCi0jZGVmaW5lIGZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpCQlcCi0JZm9yIChpcnEgPSAwLCBjZmcgPSBpcnFfY2ZneDsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGNmZysrKQotCi1zdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxIDwgbnJfaXJxcyA/IGlycV9jZmd4ICsgaXJxIDogTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnX2FsbG9jKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcmV0dXJuIGlycV9jZmcoaXJxKTsKLX0KLQotLyoKLSAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4gYmUgY2hhbmdlZAotICogYW55dGltZS4KLSAqLwotI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCi0jZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQogCiAvKgogICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCkBAIC0xNzAsMzIgKzEyMSwyNDAgQEAKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpuZXh0OwogfTsKIAotc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgaXJxXzJfcGluX2hlYWRbUElOX01BUF9TSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW5fcHRyOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaXJxXzJfcGluX2luaXQodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGludCBjcHUpCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqcGluID0gaXJxXzJfcGluX2hlYWQ7Ci0JaW50IGk7CisJc3RydWN0IGlycV9waW5fbGlzdCAqcGluOworCWludCBub2RlOwogCi0JZm9yIChpID0gMTsgaSA8IFBJTl9NQVBfU0laRTsgaSsrKQotCQlwaW5baS0xXS5uZXh0ID0gJnBpbltpXTsKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKIAotCWlycV8yX3Bpbl9wdHIgPSAmcGluWzBdOwotfQorCXBpbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnBpbiksIEdGUF9BVE9NSUMsIG5vZGUpOworCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGlycV8yX3BpbiBvbiBjcHUgJWQgbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKIAotc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgKmdldF9vbmVfZnJlZV9pcnFfMl9waW4odm9pZCkKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5fcHRyOwotCi0JaWYgKCFwaW4pCi0JCXBhbmljKCJjYW4gbm90IGdldCBtb3JlIGlycV8yX3BpblxuIik7Ci0KLQlpcnFfMl9waW5fcHRyID0gcGluLT5uZXh0OwotCXBpbi0+bmV4dCA9IE5VTEw7CiAJcmV0dXJuIHBpbjsKIH0KIAorc3RydWN0IGlycV9jZmcgeworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmlycV8yX3BpbjsKKwljcHVtYXNrX3QgZG9tYWluOworCWNwdW1hc2tfdCBvbGRfZG9tYWluOworCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKKwl1OCB2ZWN0b3I7CisJdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7CisjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQworCXU4IG1vdmVfZGVzY19wZW5kaW5nIDogMTsKKyNlbmRpZgorfTsKKworLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W10gPSB7CisjZWxzZQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0geworI2VuZGlmCisJWzBdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKKwlbMV0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAorCVsyXSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEyX1ZFQ1RPUiwgIH0sCisJWzNdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKKwlbNF0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAorCVs1XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE1X1ZFQ1RPUiwgIH0sCisJWzZdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKKwlbN10gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAorCVs4XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE4X1ZFQ1RPUiwgIH0sCisJWzldICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKKwlbMTBdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAorCVsxMV0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMV9WRUNUT1IsIH0sCisJWzEyXSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKKwlbMTNdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAorCVsxNF0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExNF9WRUNUT1IsIH0sCisJWzE1XSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKK307CisKK3ZvaWQgX19pbml0IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgY291bnQ7CisJaW50IGk7CisKKwljZmcgPSBpcnFfY2ZneDsKKwljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2NmZ3gpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZGVzYyA9IGlycV90b19kZXNjKGkpOworCQlkZXNjLT5jaGlwX2RhdGEgPSAmY2ZnW2ldOworCX0KK30KKworI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gTlVMTDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoZGVzYykKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCisJcmV0dXJuIGNmZzsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2ZnICpnZXRfb25lX2ZyZWVfaXJxX2NmZyhpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IG5vZGU7CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKworCWNmZyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmNmZyksIEdGUF9BVE9NSUMsIG5vZGUpOworCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGlycV9jZmcgb24gY3B1ICVkIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CisKKwlyZXR1cm4gY2ZnOworfQorCit2b2lkIGFyY2hfaW5pdF9jaGlwX2RhdGEoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJaWYgKCFjZmcpIHsKKwkJZGVzYy0+Y2hpcF9kYXRhID0gZ2V0X29uZV9mcmVlX2lycV9jZmcoY3B1KTsKKwkJaWYgKCFkZXNjLT5jaGlwX2RhdGEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfY2ZnXG4iKTsKKwkJCUJVR19PTigxKTsKKwkJfQorCX0KK30KKworI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MKKworc3RhdGljIHZvaWQKK2luaXRfY29weV9pcnFfMl9waW4oc3RydWN0IGlycV9jZmcgKm9sZF9jZmcsIHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBjcHUpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqb2xkX2VudHJ5LCAqaGVhZCwgKnRhaWwsICplbnRyeTsKKworCWNmZy0+aXJxXzJfcGluID0gTlVMTDsKKwlvbGRfZW50cnkgPSBvbGRfY2ZnLT5pcnFfMl9waW47CisJaWYgKCFvbGRfZW50cnkpCisJCXJldHVybjsKKworCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbihjcHUpOworCWlmICghZW50cnkpCisJCXJldHVybjsKKworCWVudHJ5LT5hcGljCT0gb2xkX2VudHJ5LT5hcGljOworCWVudHJ5LT5waW4JPSBvbGRfZW50cnktPnBpbjsKKwloZWFkCQk9IGVudHJ5OworCXRhaWwJCT0gZW50cnk7CisJb2xkX2VudHJ5CT0gb2xkX2VudHJ5LT5uZXh0OworCXdoaWxlIChvbGRfZW50cnkpIHsKKwkJZW50cnkgPSBnZXRfb25lX2ZyZWVfaXJxXzJfcGluKGNwdSk7CisJCWlmICghZW50cnkpIHsKKwkJCWVudHJ5ID0gaGVhZDsKKwkJCXdoaWxlIChlbnRyeSkgeworCQkJCWhlYWQgPSBlbnRyeS0+bmV4dDsKKwkJCQlrZnJlZShlbnRyeSk7CisJCQkJZW50cnkgPSBoZWFkOworCQkJfQorCQkJLyogc3RpbGwgdXNlIHRoZSBvbGQgb25lICovCisJCQlyZXR1cm47CisJCX0KKwkJZW50cnktPmFwaWMJPSBvbGRfZW50cnktPmFwaWM7CisJCWVudHJ5LT5waW4JPSBvbGRfZW50cnktPnBpbjsKKwkJdGFpbC0+bmV4dAk9IGVudHJ5OworCQl0YWlsCQk9IGVudHJ5OworCQlvbGRfZW50cnkJPSBvbGRfZW50cnktPm5leHQ7CisJfQorCisJdGFpbC0+bmV4dCA9IE5VTEw7CisJY2ZnLT5pcnFfMl9waW4gPSBoZWFkOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2lycV8yX3BpbihzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZywgc3RydWN0IGlycV9jZmcgKmNmZykKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSwgKm5leHQ7CisKKwlpZiAob2xkX2NmZy0+aXJxXzJfcGluID09IGNmZy0+aXJxXzJfcGluKQorCQlyZXR1cm47CisKKwllbnRyeSA9IG9sZF9jZmctPmlycV8yX3BpbjsKKworCXdoaWxlIChlbnRyeSkgeworCQluZXh0ID0gZW50cnktPm5leHQ7CisJCWtmcmVlKGVudHJ5KTsKKwkJZW50cnkgPSBuZXh0OworCX0KKwlvbGRfY2ZnLT5pcnFfMl9waW4gPSBOVUxMOworfQorCit2b2lkIGFyY2hfaW5pdF9jb3B5X2NoaXBfZGF0YShzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLAorCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2NmZyAqb2xkX2NmZzsKKworCWNmZyA9IGdldF9vbmVfZnJlZV9pcnFfY2ZnKGNwdSk7CisKKwlpZiAoIWNmZykKKwkJcmV0dXJuOworCisJZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOworCisJb2xkX2NmZyA9IG9sZF9kZXNjLT5jaGlwX2RhdGE7CisKKwltZW1jcHkoY2ZnLCBvbGRfY2ZnLCBzaXplb2Yoc3RydWN0IGlycV9jZmcpKTsKKworCWluaXRfY29weV9pcnFfMl9waW4ob2xkX2NmZywgY2ZnLCBjcHUpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2lycV9jZmcoc3RydWN0IGlycV9jZmcgKm9sZF9jZmcpCit7CisJa2ZyZWUob2xkX2NmZyk7Cit9CisKK3ZvaWQgYXJjaF9mcmVlX2NoaXBfZGF0YShzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGlycV9jZmcgKm9sZF9jZmcsICpjZmc7CisKKwlvbGRfY2ZnID0gb2xkX2Rlc2MtPmNoaXBfZGF0YTsKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlpZiAob2xkX2NmZyA9PSBjZmcpCisJCXJldHVybjsKKworCWlmIChvbGRfY2ZnKSB7CisJCWZyZWVfaXJxXzJfcGluKG9sZF9jZmcsIGNmZyk7CisJCWZyZWVfaXJxX2NmZyhvbGRfY2ZnKTsKKwkJb2xkX2Rlc2MtPmNoaXBfZGF0YSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfZXh0cmFfbW92ZV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCWlmICghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7CisJCS8qIGl0IG1lYW5zIHRoYXQgZG9tYWluIGlzIG5vdCBjaGFuZ2VkICovCisJCWlmICghY3B1c19pbnRlcnNlY3RzKGRlc2MtPmFmZmluaXR5LCBtYXNrKSkKKwkJCWNmZy0+bW92ZV9kZXNjX3BlbmRpbmcgPSAxOworCX0KK30KKyNlbmRpZgorCisjZWxzZQorc3RhdGljIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycSA8IG5yX2lycXMgPyBpcnFfY2ZneCArIGlycSA6IE5VTEw7Cit9CisKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZXh0cmFfbW92ZV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY3B1bWFza190IG1hc2spCit7Cit9CisjZW5kaWYKKwogc3RydWN0IGlvX2FwaWMgewogCXVuc2lnbmVkIGludCBpbmRleDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwpAQCAtMjM3LDExICszOTYsMTAgQEAKIAl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKIH0KIAotc3RhdGljIGJvb2wgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGJvb2wgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CkBAIC0zMjMsMTMgKzQ4MSwxMiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgX190YXJnZXRfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKK3N0YXRpYyB2b2lkIF9fdGFyZ2V0X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewogCWludCBhcGljLCBwaW47Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKwl1OCB2ZWN0b3IgPSBjZmctPnZlY3RvcjsKIAotCWNmZyA9IGlycV9jZmcoaXJxKTsKIAllbnRyeSA9IGNmZy0+aXJxXzJfcGluOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgaW50IHJlZzsKQEAgLTM1OSwyNCArNTE2LDI3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKK3N0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZywgY3B1bWFza190IG1hc2spOwogCi1zdGF0aWMgdm9pZCBzZXRfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBjcHVtYXNrX3QgbWFzaykKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAJY3B1bWFza190IHRtcDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaW50IGlycTsKIAogCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybjsKIAotCWNmZyA9IGlycV9jZmcoaXJxKTsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwlpcnEgPSBkZXNjLT5pcnE7CisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgbWFzaykpCiAJCXJldHVybjsKIAorCXNldF9leHRyYV9tb3ZlX2Rlc2MoZGVzYywgbWFzayk7CisKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAJLyoKQEAgLTM4NCwxMiArNTQ0LDIwIEBACiAJICovCiAJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7CiAKLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKKwlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7CiAJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CisKK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJc2V0X2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKK30KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC0zOTcsMTYgKzU2NSwxOCBAQAogICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCiAgKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KICAqLwotc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCitzdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycV9jcHUoc3RydWN0IGlycV9jZmcgKmNmZywgaW50IGNwdSwgaW50IGFwaWMsIGludCBwaW4pCiB7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAotCS8qIGZpcnN0IHRpbWUgdG8gcmVmZXIgaXJxX2NmZywgc28gd2l0aCBuZXcgKi8KLQljZmcgPSBpcnFfY2ZnX2FsbG9jKGlycSk7CiAJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKIAlpZiAoIWVudHJ5KSB7Ci0JCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbigpOworCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKKwkJaWYgKCFlbnRyeSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jIGlycV8yX3BpbiB0byBhZGQgJWQgLSAlZFxuIiwKKwkJCQkJYXBpYywgcGluKTsKKwkJCXJldHVybjsKKwkJfQogCQljZmctPmlycV8yX3BpbiA9IGVudHJ5OwogCQllbnRyeS0+YXBpYyA9IGFwaWM7CiAJCWVudHJ5LT5waW4gPSBwaW47CkBAIC00MjEsNyArNTkxLDcgQEAKIAkJZW50cnkgPSBlbnRyeS0+bmV4dDsKIAl9CiAKLQllbnRyeS0+bmV4dCA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oKTsKKwllbnRyeS0+bmV4dCA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oY3B1KTsKIAllbnRyeSA9IGVudHJ5LT5uZXh0OwogCWVudHJ5LT5hcGljID0gYXBpYzsKIAllbnRyeS0+cGluID0gcGluOwpAQCAtNDMwLDExICs2MDAsMTAgQEAKIC8qCiAgKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnEodW5zaWduZWQgaW50IGlycSwKK3N0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnFfY3B1KHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBjcHUsCiAJCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCiAJCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCiB7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOwogCWludCByZXBsYWNlZCA9IDA7CiAKQEAgLTQ1MSwxOCArNjIwLDE2IEBACiAKIAkvKiB3aHk/IGNhbGwgcmVwbGFjZSBiZWZvcmUgYWRkPyAqLwogCWlmICghcmVwbGFjZWQpCi0JCWFkZF9waW5fdG9faXJxKGlycSwgbmV3YXBpYywgbmV3cGluKTsKKwkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBuZXdhcGljLCBuZXdwaW4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHVuc2lnbmVkIGludCBpcnEsCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcsCiAJCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKIAkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKIHsKIAlpbnQgcGluOwotCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CiAKLQljZmcgPSBpcnFfY2ZnKGlycSk7CiAJZm9yIChlbnRyeSA9IGNmZy0+aXJxXzJfcGluOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAJCXBpbiA9IGVudHJ5LT5waW47CkBAIC00NzUsOSArNjQyLDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBfX3VubWFza19JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewotCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH5JT19BUElDX1JFRElSX01BU0tFRCwgMCwgTlVMTCk7CisJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTQ5Miw0NyArNjU5LDY0IEBACiAJcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewotCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7CisJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfjAsIElPX0FQSUNfUkVESVJfTUFTS0VELCAmaW9fYXBpY19zeW5jKTsKIH0KICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KLXN0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgX19tYXNrX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCiB7Ci0JaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfjAsIElPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKKwlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIF9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewotCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH5JT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsCisJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwKIAkJCUlPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKIHsKLQlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsCisJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELAogCQkJSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLCBOVUxMKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUJVR19PTighY2ZnKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fbWFza19JT19BUElDX2lycShpcnEpOworCV9fbWFza19JT19BUElDX2lycShjZmcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX3VubWFza19JT19BUElDX2lycShpcnEpOworCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGNmZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwltYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7Cit9CitzdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7Cit9CisKIHN0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUNfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluKQogewogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwpAQCAtODA5LDcgKzk5Myw3IEBACiAgKi8KIHN0YXRpYyBpbnQgRUlTQV9FTENSKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaWYgKGlycSA8IDE2KSB7CisJaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKSB7CiAJCXVuc2lnbmVkIGludCBwb3J0ID0gMHg0ZDAgKyAoaXJxID4+IDMpOwogCQlyZXR1cm4gKGluYihwb3J0KSA+PiAoaXJxICYgNykpICYgMTsKIAl9CkBAIC0xMDM0LDcgKzEyMTgsNyBAQAogCXNwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3N0YXRpYyBpbnQgX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjcHVtYXNrX3QgbWFzaykKIHsKIAkvKgogCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZwpAQCAtMTA1MCwxNiArMTIzNCwxMyBAQAogCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBjdXJyZW50X29mZnNldCA9IDA7CiAJdW5zaWduZWQgaW50IG9sZF92ZWN0b3I7CiAJaW50IGNwdTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCi0JY2ZnID0gaXJxX2NmZyhpcnEpOwotCi0JLyogT25seSB0cnkgYW5kIGFsbG9jYXRlIGlycXMgb24gY3B1cyB0aGF0IGFyZSBwcmVzZW50ICovCi0JY3B1c19hbmQobWFzaywgbWFzaywgY3B1X29ubGluZV9tYXApOwogCiAJaWYgKChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHx8IGNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQogCQlyZXR1cm4gLUVCVVNZOwogCisJLyogT25seSB0cnkgYW5kIGFsbG9jYXRlIGlycXMgb24gY3B1cyB0aGF0IGFyZSBwcmVzZW50ICovCisJY3B1c19hbmQobWFzaywgbWFzaywgY3B1X29ubGluZV9tYXApOworCiAJb2xkX3ZlY3RvciA9IGNmZy0+dmVjdG9yOwogCWlmIChvbGRfdmVjdG9yKSB7CiAJCWNwdW1hc2tfdCB0bXA7CkBAIC0xMTEzLDI0ICsxMjk0LDIyIEBACiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLXN0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCitzdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcsIGNwdW1hc2tfdCBtYXNrKQogewogCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWVyciA9IF9fYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKTsKKwllcnIgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY2xlYXJfaXJxX3ZlY3RvcihpbnQgaXJxKQorc3RhdGljIHZvaWQgX19jbGVhcl9pcnFfdmVjdG9yKGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcpCiB7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKIAljcHVtYXNrX3QgbWFzazsKIAlpbnQgY3B1LCB2ZWN0b3I7CiAKLQljZmcgPSBpcnFfY2ZnKGlycSk7CiAJQlVHX09OKCFjZmctPnZlY3Rvcik7CiAKIAl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKQEAgLTExNjIsOSArMTM0MSwxMyBAQAogCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB2ZWN0b3JfbG9jayBoZWxkICovCiAJaW50IGlycSwgdmVjdG9yOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJLyogTWFyayB0aGUgaW51c2UgdmVjdG9ycyAqLwotCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAkJaWYgKCFjcHVfaXNzZXQoY3B1LCBjZmctPmRvbWFpbikpCiAJCQljb250aW51ZTsKIAkJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CkBAIC0xMjE1LDExICsxMzk4LDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBpb2FwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCitzdGF0aWMgdm9pZCBpb2FwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CiAJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQpAQCAtMTMxMSw3ICsxNDkxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2V0dXBfSU9fQVBJQ19pcnEoaW50IGFwaWMsIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnEsCitzdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpYywgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAogCQkJICAgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwpAQCAtMTMyMSwxMCArMTUwMSwxMCBAQAogCWlmICghSU9fQVBJQ19JUlEoaXJxKSkKIAkJcmV0dXJuOwogCi0JY2ZnID0gaXJxX2NmZyhpcnEpOworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAogCW1hc2sgPSBUQVJHRVRfQ1BVUzsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm47CiAKIAljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgbWFzayk7CkBAIC0xMzQxLDEyICsxNTIxLDEyIEBACiAJCQkgICAgICAgY2ZnLT52ZWN0b3IpKSB7CiAJCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAogCQkgICAgICAgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7Ci0JCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEpOworCQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxLCBjZmcpOwogCQlyZXR1cm47CiAJfQogCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCB0cmlnZ2VyKTsKLQlpZiAoaXJxIDwgMTYpCisJaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCBkZXNjLCB0cmlnZ2VyKTsKKwlpZiAoaXJxIDwgTlJfSVJRU19MRUdBQ1kpCiAJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CiAKIAlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CkBAIC0xMzU2LDYgKzE1MzYsOSBAQAogewogCWludCBhcGljLCBwaW4sIGlkeCwgaXJxOwogCWludCBub3Rjb24gPSAwOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBjcHUgPSBib290X2NwdV9pZDsKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwogCkBAIC0xMzg3LDkgKzE1NzAsMTUgQEAKIAkJCWlmIChtdWx0aV90aW1lcl9jaGVjayhhcGljLCBpcnEpKQogCQkJCWNvbnRpbnVlOwogI2VuZGlmCi0JCQlhZGRfcGluX3RvX2lycShpcnEsIGFwaWMsIHBpbik7CisJCQlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgY3B1KTsKKwkJCWlmICghZGVzYykgeworCQkJCXByaW50ayhLRVJOX0lORk8gImNhbiBub3QgZ2V0IGlycV9kZXNjIGZvciAlZFxuIiwgaXJxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwkJCWFkZF9waW5fdG9faXJxX2NwdShjZmcsIGNwdSwgYXBpYywgcGluKTsKIAotCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsCisJCQlzZXR1cF9JT19BUElDX2lycShhcGljLCBwaW4sIGlycSwgZGVzYywKIAkJCQkJaXJxX3RyaWdnZXIoaWR4KSwgaXJxX3BvbGFyaXR5KGlkeCkpOwogCQl9CiAJfQpAQCAtMTQ0OCw2ICsxNjM3LDcgQEAKIAl1bmlvbiBJT19BUElDX3JlZ18wMyByZWdfMDM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCkBAIC0xNTM3LDggKzE3MjcsMTMgQEAKIAl9CiAJfQogCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7Ci0JZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykgewotCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgeworCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQllbnRyeSA9IGNmZy0+aXJxXzJfcGluOwogCQlpZiAoIWVudHJ5KQogCQkJY29udGludWU7CiAJCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpcnEpOwpAQCAtMjAyMiwxNCArMjIxNywxNiBAQAogewogCWludCB3YXNfcGVuZGluZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaWYgKGlycSA8IDE2KSB7CisJaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKSB7CiAJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CiAJCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKIAkJCXdhc19wZW5kaW5nID0gMTsKIAl9Ci0JX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJX191bm1hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHdhc19wZW5kaW5nOwpAQCAtMjA5MiwzNSArMjI4OSwzNyBAQAogICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCiAgKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCiAgKi8KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfaW9hcGljX2lycShpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3N0YXRpYyB2b2lkIG1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY3B1bWFza190IG1hc2spCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOwogCXN0cnVjdCBpcnRlIGlydGU7CiAJaW50IG1vZGlmeV9pb2FwaWNfcnRlOwogCXVuc2lnbmVkIGludCBkZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycTsKIAogCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybjsKIAorCWlycSA9IGRlc2MtPmlycTsKIAlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCiAJCXJldHVybjsKIAotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm47CiAKLQljZmcgPSBpcnFfY2ZnKGlycSk7CisJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKKwogCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwogCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKIAotCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCW1vZGlmeV9pb2FwaWNfcnRlID0gZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMOwogCWlmIChtb2RpZnlfaW9hcGljX3J0ZSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7CisJCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTIxNDIsMTQgKzIzNDEsMTQgQEAKIAlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CiB9CiAKLXN0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaW50IGlycSkKK3N0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJaW50IHJldCA9IC0xOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAotCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwltYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7CiAKLQlpZiAoaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhpcnEpKSB7CisJaWYgKGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoY2ZnKSkgewogCQkvKgogCQkgKiBJbnRlcnJ1cHQgaW4gcHJvZ3Jlc3MuIE1pZ3JhdGluZyBpcnEgbm93IHdpbGwgY2hhbmdlIHRoZQogCQkgKiB2ZWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIElPLUFQSUMgUlRFIGFuZCB0aGF0IHdpbGwgY29uZnVzZQpAQCAtMjE2MSwxNCArMjM2MCwxNSBAQAogCX0KIAogCS8qIGV2ZXJ0aGluZyBpcyBjbGVhci4gd2UgaGF2ZSByaWdodCBvZiB3YXkgKi8KLQltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOworCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIGRlc2MtPnBlbmRpbmdfbWFzayk7CiAKIAlyZXQgPSAwOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKIAljcHVzX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7CiAKIHVubWFzazoKLQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxNzgsNiArMjM3OCw5IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCiAJCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7CiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMTk4LDE4ICsyNDAxLDIyIEBACiAvKgogICogTWlncmF0ZXMgdGhlIElSUSBkZXN0aW5hdGlvbiBpbiB0aGUgcHJvY2VzcyBjb250ZXh0LgogICovCitzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY3B1bWFza190IG1hc2spCit7CisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKKwkJZGVzYy0+cGVuZGluZ19tYXNrID0gbWFzazsKKwkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhkZXNjKTsKKwkJcmV0dXJuOworCX0KKworCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIG1hc2spOworfQogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWRlc2MtPnBlbmRpbmdfbWFzayA9IG1hc2s7Ci0JCW1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsKGlycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBtYXNrKTsKKwlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogfQogI2VuZGlmCiAKQEAgLTIyMjgsNiArMjQzNSw5IEBACiAJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKIAorCQlpZiAoaXJxID09IC0xKQorCQkJY29udGludWU7CisKIAkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJCWlmICghZGVzYykKIAkJCWNvbnRpbnVlOwpAQCAtMjI0OSwxOSArMjQ1OSw0MCBAQAogCWlycV9leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBpcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCkKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9ICpkZXNjcDsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCXVuc2lnbmVkIHZlY3RvciwgbWU7CiAKLQlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKQorCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9pbl9wcm9ncmVzcykpIHsKKyNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDCisJCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9kZXNjX3BlbmRpbmcpKQorCQkJcmV0dXJuOworCisJCS8qIGRvbWFpbiBoYXMgbm90IGNoYW5nZWQsIGJ1dCBhZmZpbml0eSBkaWQgKi8KKwkJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCWlmIChjcHVfaXNzZXQobWUsIGRlc2MtPmFmZmluaXR5KSkgeworCQkJKmRlc2NwID0gZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbWUpOworCQkJLyogZ2V0IHRoZSBuZXcgb25lICovCisJCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJCQljZmctPm1vdmVfZGVzY19wZW5kaW5nID0gMDsKKwkJfQorI2VuZGlmCiAJCXJldHVybjsKKwl9CiAKIAl2ZWN0b3IgPSB+Z2V0X2lycV9yZWdzKCktPm9yaWdfYXg7CiAJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaWYgKCh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IpICYmIGNwdV9pc3NldChtZSwgY2ZnLT5kb21haW4pKSB7CiAJCWNwdW1hc2tfdCBjbGVhbnVwX21hc2s7CiAKKyNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRFX0lSUV9ERVNDCisJCSpkZXNjcCA9IGRlc2MgPSBtb3ZlX2lycV9kZXNjKGRlc2MsIG1lKTsKKwkJLyogZ2V0IHRoZSBuZXcgb25lICovCisJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKyNlbmRpZgorCiAJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CiAJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKIAkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKQEAgLTIyNjksOCArMjUwMCw5IEBACiAJfQogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHN0cnVjdCBpcnFfZGVzYyAqKmRlc2NwKSB7fQogI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHZvaWQgYWNrX3gyYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtMjI4MSwxMSArMjUxMywxNCBAQAogewogCWFja194MkFQSUNfaXJxKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBhY2tfYXBpY19lZGdlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXJxX2NvbXBsZXRlX21vdmUoaXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaXJxX2NvbXBsZXRlX21vdmUoJmRlc2MpOwogCW1vdmVfbmF0aXZlX2lycShpcnEpOwogCWFja19BUElDX2lycSgpOwogfQpAQCAtMjI5NCwxOCArMjUyOSwyMSBAQAogCiBzdGF0aWMgdm9pZCBhY2tfYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJdW5zaWduZWQgbG9uZyB2OwogCWludCBpOwogI2VuZGlmCisJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlpbnQgZG9fdW5tYXNrX2lycSA9IDA7CiAKLQlpcnFfY29tcGxldGVfbW92ZShpcnEpOworCWlycV9jb21wbGV0ZV9tb3ZlKCZkZXNjKTsKICNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQogCS8qIElmIHdlIGFyZSBtb3ZpbmcgdGhlIGlycSB3ZSBuZWVkIHRvIG1hc2sgaXQgKi8KLQlpZiAodW5saWtlbHkoaXJxX3RvX2Rlc2MoaXJxKS0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKKwlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKIAkJZG9fdW5tYXNrX2lycSA9IDE7Ci0JCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwkJbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwogCX0KICNlbmRpZgogCkBAIC0yMzI5LDcgKzI1NjcsOCBAQAogCSogb3BlcmF0aW9uIHRvIHByZXZlbnQgYW4gZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGVzY2FwaW5nIG1lYW53aGlsZS4KIAkqIFRoZSBpZGVhIGlzIGZyb20gTWFuZnJlZCBTcHJhdWwuICAtLW1hY3JvCiAJKi8KLQlpID0gaXJxX2NmZyhpcnEpLT52ZWN0b3I7CisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWkgPSBjZmctPnZlY3RvcjsKIAogCXYgPSBhcGljX3JlYWQoQVBJQ19UTVIgKyAoKGkgJiB+MHgxZikgPj4gMSkpOwogI2VuZGlmCkBAIC0yMzY4LDE3ICsyNjA3LDE4IEBACiAJCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKIAkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCiAJCSAqLwotCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoY2ZnKSkKIAkJCW1vdmVfbWFza2VkX2lycShpcnEpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwkJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7CiAJfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmICghKHYgJiAoMSA8PCAoaSAmIDB4MWYpKSkpIHsKIAkJYXRvbWljX2luYygmaXJxX21pc19jb3VudCk7CiAJCXNwaW5fbG9jaygmaW9hcGljX2xvY2spOwotCQlfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoaXJxKTsKLQkJX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKGlycSk7CisJCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShjZmcpOworCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoY2ZnKTsKIAkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKIAl9CiAjZW5kaWYKQEAgLTI0MjksMjAgKzI2NjksMjIgQEAKIAkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQogCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQogCSAqLwotCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKLQkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgIWNmZy0+dmVjdG9yKSB7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCisJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgY2ZnICYmICFjZmctPnZlY3RvcikgewogCQkJLyoKIAkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCiAJCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQogCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCiAJCQkgKi8KLQkJCWlmIChpcnEgPCAxNikKKwkJCWlmIChpcnEgPCBOUl9JUlFTX0xFR0FDWSkKIAkJCQltYWtlXzgyNTlBX2lycShpcnEpOwotCQkJZWxzZSB7Ci0JCQkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCQllbHNlCiAJCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwogCQkJCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7Ci0JCQl9CiAJCX0KIAl9CiB9CkBAIC0yNDY3LDcgKzI3MDksNyBAQAogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFja19sYXBpY19pcnEgKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBhY2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJYWNrX0FQSUNfaXJxKCk7CiB9CkBAIC0yNDc5LDExICsyNzIxLDggQEAKIAkuYWNrCQk9IGFja19sYXBpY19pcnEsCiB9OwogCi1zdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEpCitzdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCiAJCQkJICAgICAgImVkZ2UiKTsKQEAgLTI1ODcsNyArMjgyNiw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKIHsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZygwKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYygwKTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWludCBjcHUgPSBib290X2NwdV9pZDsKIAlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHZlcjsKQEAgLTI2MDIsNyArMjg0Myw3IEBACiAJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKIAkgKi8KIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhc3NpZ25faXJxX3ZlY3RvcigwLCBUQVJHRVRfQ1BVUyk7CisJYXNzaWduX2lycV92ZWN0b3IoMCwgY2ZnLCBUQVJHRVRfQ1BVUyk7CiAKIAkvKgogCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCkBAIC0yNjUzLDEwICsyODk0LDEwIEBACiAJCSAqIE9rLCBkb2VzIElSUTAgdGhyb3VnaCB0aGUgSU9BUElDIHdvcms/CiAJCSAqLwogCQlpZiAobm9fcGluMSkgewotCQkJYWRkX3Bpbl90b19pcnEoMCwgYXBpYzEsIHBpbjEpOworCQkJYWRkX3Bpbl90b19pcnFfY3B1KGNmZywgY3B1LCBhcGljMSwgcGluMSk7CiAJCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOwogCQl9Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKKwkJdW5tYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7CiAJCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewogCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQkJCXNldHVwX25taSgpOwpAQCAtMjY4Miw5ICsyOTIzLDkgQEAKIAkJLyoKIAkJICogbGVnYWN5IGRldmljZXMgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBJTyBBUElDICMwCiAJCSAqLwotCQlyZXBsYWNlX3Bpbl9hdF9pcnEoMCwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKKwkJcmVwbGFjZV9waW5fYXRfaXJxX2NwdShjZmcsIGNwdSwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIGNmZy0+dmVjdG9yKTsKLQkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOworCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CiAJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKQEAgLTI3MTYsNyArMjk1Nyw3IEBACiAJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCiAJCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKIAotCWxhcGljX3JlZ2lzdGVyX2ludHIoMCk7CisJbGFwaWNfcmVnaXN0ZXJfaW50cigwLCBkZXNjKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLwogCWVuYWJsZV84MjU5QV9pcnEoMCk7CiAKQEAgLTI5MDEsMjIgKzMxNDIsMjYgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXVuc2lnbmVkIGludCBuZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnX25ldzsKLQotCWlycV93YW50ID0gbnJfaXJxcyAtIDE7CisJc3RydWN0IGlycV9jZmcgKmNmZ19uZXcgPSBOVUxMOworCWludCBjcHUgPSBib290X2NwdV9pZDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2NfbmV3ID0gTlVMTDsKIAogCWlycSA9IDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChuZXcgPSBpcnFfd2FudDsgbmV3ID4gMDsgbmV3LS0pIHsKKwlmb3IgKG5ldyA9IGlycV93YW50OyBuZXcgPCBOUl9JUlFTOyBuZXcrKykgewogCQlpZiAocGxhdGZvcm1fbGVnYWN5X2lycShuZXcpKQogCQkJY29udGludWU7Ci0JCWNmZ19uZXcgPSBpcnFfY2ZnKG5ldyk7Ci0JCWlmIChjZmdfbmV3ICYmIGNmZ19uZXctPnZlY3RvciAhPSAwKQorCisJCWRlc2NfbmV3ID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KG5ldywgY3B1KTsKKwkJaWYgKCFkZXNjX25ldykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOwogCQkJY29udGludWU7Ci0JCS8qIGNoZWNrIGlmIG5lZWQgdG8gY3JlYXRlIG9uZSAqLwotCQlpZiAoIWNmZ19uZXcpCi0JCQljZmdfbmV3ID0gaXJxX2NmZ19hbGxvYyhuZXcpOwotCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQorCQl9CisJCWNmZ19uZXcgPSBkZXNjX25ldy0+Y2hpcF9kYXRhOworCisJCWlmIChjZmdfbmV3LT52ZWN0b3IgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIGNmZ19uZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQogCQkJaXJxID0gbmV3OwogCQlicmVhazsKIAl9CkBAIC0yOTI0LDE1ICszMTY5LDIxIEBACiAKIAlpZiAoaXJxID4gMCkgewogCQlkeW5hbWljX2lycV9pbml0KGlycSk7CisJCS8qIHJlc3RvcmUgaXQsIGluIGNhc2UgZHluYW1pY19pcnFfaW5pdCBjbGVhciBpdCAqLworCQlpZiAoZGVzY19uZXcpCisJCQlkZXNjX25ldy0+Y2hpcF9kYXRhID0gY2ZnX25ldzsKIAl9CiAJcmV0dXJuIGlycTsKIH0KIAorc3RhdGljIGludCBucl9pcnFzX2dzaSA9IE5SX0lSUVNfTEVHQUNZOwogaW50IGNyZWF0ZV9pcnEodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CiAJaW50IGlycTsKIAotCWlycSA9IGNyZWF0ZV9pcnFfbnIobnJfaXJxcyAtIDEpOworCWlycV93YW50ID0gbnJfaXJxc19nc2k7CisJaXJxID0gY3JlYXRlX2lycV9ucihpcnFfd2FudCk7CiAKIAlpZiAoaXJxID09IDApCiAJCWlycSA9IC0xOwpAQCAtMjk0MywxNCArMzE5NCwyMiBAQAogdm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKKwkvKiBzdG9yZSBpdCwgaW4gY2FzZSBkeW5hbWljX2lycV9jbGVhbnVwIGNsZWFyIGl0ICovCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCWR5bmFtaWNfaXJxX2NsZWFudXAoaXJxKTsKKwkvKiBjb25uZWN0IGJhY2sgaXJxX2NmZyAqLworCWlmIChkZXNjKQorCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWZyZWVfaXJ0ZShpcnEpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7CisJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0yOTY1LDEyICszMjI0LDEyIEBACiAJdW5zaWduZWQgZGVzdDsKIAljcHVtYXNrX3QgdG1wOwogCisJY2ZnID0gaXJxX2NmZyhpcnEpOwogCXRtcCA9IFRBUkdFVF9DUFVTOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgdG1wKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JY2ZnID0gaXJxX2NmZyhpcnEpOwogCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7CiAJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCkBAIC0zMDI4LDM1ICszMjg3LDM1IEBACiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgc2V0X21zaV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKIAljcHVtYXNrX3QgdG1wOwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybjsKIAotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm47CiAKLQljZmcgPSBpcnFfY2ZnKGlycSk7CisJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKKwogCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwogCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKIAotCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOworCXJlYWRfbXNpX21zZ19kZXNjKGRlc2MsICZtc2cpOwogCiAJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwogCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CiAJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKIAltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwogCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCAmbXNnKTsKIAlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CiB9Ci0KICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogLyoKICAqIE1pZ3JhdGUgdGhlIE1TSSBpcnEgdG8gYW5vdGhlciBjcHVtYXNrLiBUaGlzIG1pZ3JhdGlvbiBpcwpAQCAtMzA2NCwxMSArMzMyMywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAJY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOwogCXN0cnVjdCBpcnRlIGlydGU7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CiAJaWYgKGNwdXNfZW1wdHkodG1wKSkKQEAgLTMwNzcsMTAgKzMzMzYsMTIgQEAKIAlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCiAJCXJldHVybjsKIAotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm47CiAKLQljZmcgPSBpcnFfY2ZnKGlycSk7CisJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKKwogCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwogCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKIApAQCAtMzEwNCw5ICszMzY1LDkgQEAKIAkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKIAl9CiAKLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CiB9CisKICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApAQCAtMzE2NSw3ICszNDI2LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHNldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjLCBpbnQgaXJxKQorc3RhdGljIGludCBzZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywgaW50IGlycSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKQEAgLTMxNzQsNyArMzQzNSw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzZXRfaXJxX21zaShpcnEsIGRlc2MpOworCXNldF9pcnFfbXNpKGlycSwgbXNpZGVzYyk7CiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKQEAgLTMxOTQsMjYgKzM0NTUsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBidWlsZF9pcnFfZm9yX3BjaV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JaXJxID0gZGV2LT5idXMtPm51bWJlcjsKLQlpcnEgPDw9IDg7Ci0JaXJxIHw9IGRldi0+ZGV2Zm47Ci0JaXJxIDw8PSAxMjsKLQotCXJldHVybiBpcnE7Ci19Ci0KLWludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQoraW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpcnFfd2FudDsKIAotCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKLQorCWlycV93YW50ID0gbnJfaXJxc19nc2k7CiAJaXJxID0gY3JlYXRlX2lycV9ucihpcnFfd2FudCk7CiAJaWYgKGlycSA9PSAwKQogCQlyZXR1cm4gLTE7CkBAIC0zMjI3LDcgKzM0NzUsNyBAQAogCQlnb3RvIGVycm9yOwogbm9faXI6CiAjZW5kaWYKLQlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgZGVzYywgaXJxKTsKKwlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgbXNpZGVzYywgaXJxKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXN0cm95X2lycShpcnEpOwogCQlyZXR1cm4gcmV0OwpAQCAtMzI0NSw3ICszNDkzLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWludCByZXQsIHN1Yl9oYW5kbGU7Ci0Jc3RydWN0IG1zaV9kZXNjICpkZXNjOworCXN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYzsKIAl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUApAQCAtMzI1MywxMCArMzUwMSwxMSBAQAogCWludCBpbmRleCA9IDA7CiAjZW5kaWYKIAotCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKKwlpcnFfd2FudCA9IG5yX2lycXNfZ3NpOwogCXN1Yl9oYW5kbGUgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaXJxID0gY3JlYXRlX2lycV9ucihpcnFfd2FudC0tKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zaWRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOworCQlpcnFfd2FudCsrOwogCQlpZiAoaXJxID09IDApCiAJCQlyZXR1cm4gLTE7CiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKQEAgLTMyODgsNyArMzUzNyw3IEBACiAJCX0KIG5vX2lyOgogI2VuZGlmCi0JCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOworCQlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgbXNpZGVzYywgaXJxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycm9yOwogCQlzdWJfaGFuZGxlKys7CkBAIC0zMzA5LDIwICszNTU4LDIyIEBACiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgZG1hcl9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAJY3B1bWFza190IHRtcDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAlpZiAoY3B1c19lbXB0eSh0bXApKQogCQlyZXR1cm47CiAKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKIAkJcmV0dXJuOwogCi0JY2ZnID0gaXJxX2NmZyhpcnEpOworCXNldF9leHRyYV9tb3ZlX2Rlc2MoZGVzYywgbWFzayk7CisKIAljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKIAlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CiAKQEAgLTMzMzQsOSArMzU4NSw5IEBACiAJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKIAogCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Ci0JZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOwogfQorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBzdHJ1Y3QgaXJxX2NoaXAgZG1hcl9tc2lfdHlwZSA9IHsKQEAgLTMzNzAsOCArMzYyMSw4IEBACiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgaHBldF9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCWNwdW1hc2tfdCB0bXA7CkBAIC0zMzgwLDEwICszNjMxLDEyIEBACiAJaWYgKGNwdXNfZW1wdHkodG1wKSkKIAkJcmV0dXJuOwogCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgbWFzaykpCiAJCXJldHVybjsKIAotCWNmZyA9IGlycV9jZmcoaXJxKTsKKwlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOworCiAJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CiAJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCkBAIC0zMzk1LDkgKzM2NDgsOSBAQAogCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CiAKIAlocGV0X21zaV93cml0ZShpcnEsICZtc2cpOwotCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKIH0KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CkBAIC0zNDUyLDI2ICszNzA1LDI4IEBACiAKIHN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCWNwdW1hc2tfdCB0bXA7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CiAJaWYgKGNwdXNfZW1wdHkodG1wKSkKIAkJcmV0dXJuOwogCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgbWFzaykpCiAJCXJldHVybjsKIAotCWNmZyA9IGlycV9jZmcoaXJxKTsKKwlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOworCiAJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CiAJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCiAJdGFyZ2V0X2h0X2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKLQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGh0X2lycV9jaGlwID0gewpAQCAtMzQ5MSwxMyArMzc0NiwxMyBAQAogCWludCBlcnI7CiAJY3B1bWFza190IHRtcDsKIAorCWNmZyA9IGlycV9jZmcoaXJxKTsKIAl0bXAgPSBUQVJHRVRfQ1BVUzsKLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIHRtcCk7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIHRtcCk7CiAJaWYgKCFlcnIpIHsKIAkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwogCQl1bnNpZ25lZCBkZXN0OwogCi0JCWNmZyA9IGlycV9jZmcoaXJxKTsKIAkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgdG1wKTsKIAkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwogCkBAIC0zNTQzLDcgKzM3OTgsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgKmVsaWdpYmxlX2NwdSk7CisJY2ZnID0gaXJxX2NmZyhpcnEpOworCisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsICplbGlnaWJsZV9jcHUpOwogCWlmIChlcnIgIT0gMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzU1Miw4ICszODA5LDYgQEAKIAkJCQkgICAgICBpcnFfbmFtZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAotCWNmZyA9IGlycV9jZmcoaXJxKTsKLQogCW1tcl92YWx1ZSA9IDA7CiAJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOwogCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CkBAIC0zNjA1LDkgKzM4NjAsMTYgQEAKIAlyZXR1cm4gcmVnXzAxLmJpdHMuZW50cmllczsKIH0KIAotaW50IF9faW5pdCBwcm9iZV9ucl9pcnFzKHZvaWQpCit2b2lkIF9faW5pdCBwcm9iZV9ucl9pcnFzX2dzaSh2b2lkKQogewotCXJldHVybiBOUl9JUlFTOworCWludCBpZHg7CisJaW50IG5yID0gMDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfaW9hcGljczsgaWR4KyspCisJCW5yICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KSArIDE7CisKKwlpZiAobnIgPiBucl9pcnFzX2dzaSkKKwkJbnJfaXJxc19nc2kgPSBucjsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MDYsMTkgKzM5NjgsMzEgQEAKIAogaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nIChpbnQgaW9hcGljLCBpbnQgcGluLCBpbnQgaXJxLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBjcHUgPSBib290X2NwdV9pZDsKKwogCWlmICghSU9fQVBJQ19JUlEoaXJxKSkgewogCQlhcGljX3ByaW50ayhBUElDX1FVSUVULEtFUk5fRVJSICJJT0FQSUNbJWRdOiBJbnZhbGlkIHJlZmVyZW5jZSB0byBJUlEgMFxuIiwKIAkJCWlvYXBpYyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19jcHUoaXJxLCBjcHUpOworCWlmICghZGVzYykgeworCQlwcmludGsoS0VSTl9JTkZPICJjYW4gbm90IGdldCBpcnFfZGVzYyAlZFxuIiwgaXJxKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAogCSAqLwotCWlmIChpcnEgPj0gMTYpCi0JCWFkZF9waW5fdG9faXJxKGlycSwgaW9hcGljLCBwaW4pOworCWlmIChpcnEgPj0gTlJfSVJRU19MRUdBQ1kpIHsKKwkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCQlhZGRfcGluX3RvX2lycV9jcHUoY2ZnLCBjcHUsIGlvYXBpYywgcGluKTsKKwl9CiAKLQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCB0cmlnZ2VyaW5nLCBwb2xhcml0eSk7CisJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwgZGVzYywgdHJpZ2dlcmluZywgcG9sYXJpdHkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzcyLDkgKzQwNDYsMTAgQEAKIAkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290CiAJCQkgKiBjcHUgaXMgb25saW5lLgogCQkJICovCi0JCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAkJCWlmICghY2ZnLT52ZWN0b3IpIHsKLQkJCQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLAorCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsIGRlc2MsCiAJCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCiAJCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKIAkJCQljb250aW51ZTsKQEAgLTM3ODQsNyArNDA1OSw2IEBACiAJCQkvKgogCQkJICogSG9ub3VyIGFmZmluaXRpZXMgd2hpY2ggaGF2ZSBiZWVuIHNldCBpbiBlYXJseSBib290CiAJCQkgKi8KLQkJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQkJaWYgKGRlc2MtPnN0YXR1cyAmCiAJCQkgICAgKElSUV9OT19CQUxBTkNJTkcgfCBJUlFfQUZGSU5JVFlfU0VUKSkKIAkJCQltYXNrID0gZGVzYy0+YWZmaW5pdHk7CkBAIC0zNzkzLDEwICs0MDY3LDEwIEBACiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQkJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBtYXNrKTsKKwkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogCQkJZWxzZQogI2VuZGlmCi0JCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBtYXNrKTsKKwkJCQlzZXRfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogCQl9CiAKIAl9CkBAIC0zODQ1LDcgKzQxMTksNiBAQAogCXN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3JlczsKIAlpbnQgaTsKIAotCWlycV8yX3Bpbl9pbml0KCk7CiAJaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CiAJCWlmIChzbXBfZm91bmRfY29uZmlnKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggZDFkNGRjNS4uM2YxZDlkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMTE4LDYgKzExOCw5IEBACiAJfQogCiAJZGVzYyA9IGlycV90b19kZXNjKGkpOworCWlmICghZGVzYykKKwkJcmV0dXJuIDA7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwppbmRleCBhNTEzODI2Li4xMTlmYzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCkBAIC0yNDIsNiArMjQyLDggQEAKIAlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKIAkJY3B1bWFza190IG1hc2s7CiAKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CiAJCWlmIChpcnEgPT0gMikKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKaW5kZXggMWRmODY5ZS4uYTE3NGEyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwpAQCAtOTEsNiArOTEsOCBAQAogCQlpbnQgYnJlYWtfYWZmaW5pdHkgPSAwOwogCQlpbnQgc2V0X2FmZmluaXR5ID0gMTsKIAorCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKIAkJaWYgKGlycSA9PSAyKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCmluZGV4IDYwN2RiNjMuLjIwMzM4NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwpAQCAtNjgsOCArNjgsNyBAQAogCS8qCiAJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQkvKiBmaXJzdCB0aW1lIGNhbGwgdGhpcyBpcnFfZGVzYyAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTX0xFR0FDWTsgaSsrKSB7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOwogCiAJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCmluZGV4IDg2NzBiM2MuLjYxOTBlNmVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKQEAgLTc2LDggKzc2LDcgQEAKIAlpbml0X2JzcF9BUElDKCk7CiAJaW5pdF84MjU5QSgwKTsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCS8qIGZpcnN0IHRpbWUgY2FsbCB0aGlzIGlycV9kZXNjICovCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVNfTEVHQUNZOyBpKyspIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CiAKIAkJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggN2EzZGZjZS4uMTlhMTA0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCkBAIC0xMDEsMTEgKzEwMSwxNSBAQAogCWRtYTMyX2Jvb3RtZW1fcHRyID0gTlVMTDsKIAlkbWEzMl9ib290bWVtX3NpemUgPSAwOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxvYyh2b2lkKQogeworI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSByYW5nZSBsZXNzIHRoYW4gNEcgKi8KIAlkbWEzMl9mcmVlX2Jvb3RtZW0oKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBUaGUgb3JkZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCBmb3IKIAkgKiBmYWxsLWJhY2svZmFpbC1vdmVyIHJlYXNvbnMKQEAgLTEyMSwxNSArMTI1LDYgQEAKIAlwY2lfc3dpb3RsYl9pbml0KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgaW9tbXVfbnJfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByb3VuZHVwKChhZGRyICYgflBBR0VfTUFTSykgKyBsZW4sIFBBR0VfU0laRSk7Ci0KLQlyZXR1cm4gc2l6ZSA+PiBQQUdFX1NISUZUOwotfQotRVhQT1JUX1NZTUJPTChpb21tdV9ucl9wYWdlcyk7Ci0jZW5kaWYKLQogdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgZG1hX2FkZHJfdCAqZG1hX2FkZHIsIGdmcF90IGZsYWcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCmluZGV4IDNjNTM5ZDEuLjI0MmMzNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCkBAIC0zLDYgKzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dpb3RsYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC0xMSw2ICsxMywzMSBAQAogCiBpbnQgc3dpb3RsYiBfX3JlYWRfbW9zdGx5OwogCit2b2lkICpzd2lvdGxiX2FsbG9jX2Jvb3Qoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgbnNsYWJzKQoreworCXJldHVybiBhbGxvY19ib290bWVtX2xvd19wYWdlcyhzaXplKTsKK30KKwordm9pZCAqc3dpb3RsYl9hbGxvYyh1bnNpZ25lZCBvcmRlciwgdW5zaWduZWQgbG9uZyBuc2xhYnMpCit7CisJcmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfRE1BIHwgX19HRlBfTk9XQVJOLCBvcmRlcik7Cit9CisKK2RtYV9hZGRyX3Qgc3dpb3RsYl9waHlzX3RvX2J1cyhwaHlzX2FkZHJfdCBwYWRkcikKK3sKKwlyZXR1cm4gcGFkZHI7Cit9CisKK3BoeXNfYWRkcl90IHN3aW90bGJfYnVzX3RvX3BoeXMoZG1hX2FkZHJfdCBiYWRkcikKK3sKKwlyZXR1cm4gYmFkZHI7Cit9CisKK2ludCBfX3dlYWsgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGRtYV9hZGRyX3QKIHN3aW90bGJfbWFwX3NpbmdsZV9waHlzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsCiAJCQlpbnQgZGlyZWN0aW9uKQpAQCAtNTAsOCArNzcsMTAgQEAKIHZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKIHsKIAkvKiBkb24ndCBpbml0aWFsaXplIHN3aW90bGIgaWYgaW9tbXU9b2ZmIChub19pb21tdT0xKSAqLworI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoIWlvbW11X2RldGVjdGVkICYmICFub19pb21tdSAmJiBtYXhfcGZuID4gTUFYX0RNQTMyX1BGTikKIAkgICAgICAgc3dpb3RsYiA9IDE7CisjZW5kaWYKIAlpZiAoc3dpb3RsYl9mb3JjZSkKIAkJc3dpb3RsYiA9IDE7CiAJaWYgKHN3aW90bGIpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCA2NzQ2NWVkLi4zMDk5NDllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC0xNjgsNiArMTY4LDggQEAKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8xLAogCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzQsCisJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNywKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDA4ZTAyZTguLmFlMGQ4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NTMsNyArOTUzLDcgQEAKIAlpb2FwaWNfaW5pdF9tYXBwaW5ncygpOwogCiAJLyogbmVlZCB0byB3YWl0IGZvciBpb19hcGljIGlzIG1hcHBlZCAqLwotCW5yX2lycXMgPSBwcm9iZV9ucl9pcnFzKCk7CisJcHJvYmVfbnJfaXJxc19nc2koKTsKIAogCWt2bV9ndWVzdF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUyBiL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUwppbmRleCA1YzdjZWYzLi4xMGI5YmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCkBAIC0zMCwyMSArMzAsNiBAQAogCW1vdmwgJGxndWVzdF9kYXRhIC0gX19QQUdFX09GRlNFVCwgJWVkeAogCWludCAkTEdVRVNUX1RSQVBfRU5UUlkKIAotCS8qIFRoZSBIb3N0IHB1dCB0aGUgdG9wbGV2ZWwgcGFnZXRhYmxlIGluIGxndWVzdF9kYXRhLnBnZGlyLiAgVGhlIG1vdnNsCi0JICogaW5zdHJ1Y3Rpb24gdXNlcyAlZXNpIGltcGxpY2l0bHkgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIGNvcHkgd2UncmUKLQkgKiBhYm91dCB0byBkby4gKi8KLQltb3ZsIGxndWVzdF9kYXRhIC0gX19QQUdFX09GRlNFVCArIExHVUVTVF9EQVRBX3BnZGlyLCAlZXNpCi0KLQkvKiBDb3B5IGZpcnN0IDMyIGVudHJpZXMgb2YgcGFnZSBkaXJlY3RvcnkgdG8gX19QQUdFX09GRlNFVCBlbnRyaWVzLgotCSAqIFRoaXMgbWVhbnMgdGhlIGZpcnN0IDEyOE0gb2Yga2VybmVsIG1lbW9yeSB3aWxsIGJlIG1hcHBlZCBhdAotCSAqIFBBR0VfT0ZGU0VUIHdoZXJlIHRoZSBrZXJuZWwgZXhwZWN0cyB0byBydW4uICBUaGlzIHdpbGwgZ2V0IGl0IGZhcgotCSAqIGVub3VnaCB0aHJvdWdoIGJvb3QgdG8gc3dpdGNoIHRvIGl0cyBvd24gcGFnZXRhYmxlcy4gKi8KLQltb3ZsICQzMiwgJWVjeAotCW1vdmwgJWVzaSwgJWVkaQotCWFkZGwgJCgoX19QQUdFX09GRlNFVCA+PiAyMikgKiA0KSwgJWVkaQotCXJlcAotCW1vdnNsCi0KIAkvKiBTZXQgdXAgdGhlIGluaXRpYWwgc3RhY2sgc28gd2UgY2FuIHJ1biBDIGNvZGUuICovCiAJbW92bCAkKGluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFKSwlZXNwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKaW5kZXggOWU2ODA3NS4uNGEyMGIyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKKysrIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzMyLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNkZWZpbmUgX19kb19zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQsIHJlcykJCQkgICBcCiBkbyB7CQkJCQkJCQkJICAgXAogCWludCBfX2QwLCBfX2QxLCBfX2QyOwkJCQkJCSAgIFwKLQltaWdodF9zbGVlcCgpOwkJCQkJCQkgICBcCisJbWlnaHRfZmF1bHQoKTsJCQkJCQkJICAgXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCSAgIFwKIAkJIgl0ZXN0bCAlMSwlMVxuIgkJCQkJICAgXAogCQkiCWp6IDJmXG4iCQkJCQkgICBcCkBAIC0xMjYsNyArMTI2LDcgQEAKICNkZWZpbmUgX19kb19jbGVhcl91c2VyKGFkZHIsc2l6ZSkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaW50IF9fZDA7CQkJCQkJCVwKLQltaWdodF9zbGVlcCgpOwkJCQkJCQlcCisJbWlnaHRfZmF1bHQoKTsJCQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKIAkJIjA6CXJlcDsgc3Rvc2xcbiIJCQkJCVwKIAkJIgltb3ZsICUyLCUwXG4iCQkJCQlcCkBAIC0xNTUsNyArMTU1LDcgQEAKIHVuc2lnbmVkIGxvbmcKIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBsb25nIG4pCiB7Ci0JbWlnaHRfc2xlZXAoKTsKKwltaWdodF9mYXVsdCgpOwogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCiAJCV9fZG9fY2xlYXJfdXNlcih0bywgbik7CiAJcmV0dXJuIG47CkBAIC0xOTcsNyArMTk3LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAtX19hZGRyX29rKHMpOwogCXVuc2lnbmVkIGxvbmcgcmVzLCB0bXA7CiAKLQltaWdodF9zbGVlcCgpOworCW1pZ2h0X2ZhdWx0KCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIgl0ZXN0bCAlMCwgJTBcbiIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi91c2VyY29weV82NC5jIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMKaW5kZXggZjRkZjZlNy4uNjRkNmM4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMKKysrIGIvYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgX19kb19zdHJuY3B5X2Zyb21fdXNlcihkc3Qsc3JjLGNvdW50LHJlcykJCQkgICBcCiBkbyB7CQkJCQkJCQkJICAgXAogCWxvbmcgX19kMCwgX19kMSwgX19kMjsJCQkJCQkgICBcCi0JbWlnaHRfc2xlZXAoKTsJCQkJCQkJICAgXAorCW1pZ2h0X2ZhdWx0KCk7CQkJCQkJCSAgIFwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkgICBcCiAJCSIJdGVzdHEgJTEsJTFcbiIJCQkJCSAgIFwKIAkJIglqeiAyZlxuIgkJCQkJICAgXApAQCAtNjQsNyArNjQsNyBAQAogdW5zaWduZWQgbG9uZyBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlsb25nIF9fZDA7Ci0JbWlnaHRfc2xlZXAoKTsKKwltaWdodF9mYXVsdCgpOwogCS8qIG5vIG1lbW9yeSBjb25zdHJhaW50IGJlY2F1c2UgaXQgZG9lc24ndCBjaGFuZ2UgYW55IG1lbW9yeSBnY2Mga25vd3MKIAkgICBhYm91dCAqLwogCWFzbSB2b2xhdGlsZSgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCA4MDBlMWQ5Li44NjU1YjViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtOTY3LDYgKzk2OCw4IEBACiAJaW50IGNvZGVzaXplLCByZXNlcnZlZHBhZ2VzLCBkYXRhc2l6ZSwgaW5pdHNpemU7CiAJaW50IHRtcDsKIAorCXBjaV9pb21tdV9hbGxvYygpOworCiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KIAlCVUdfT04oIW1lbV9tYXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDUwOTUxMzcuLjk4NjU4ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC02NSwxMSArNjUsMTMgQEAKICNkZWZpbmUgSUJTX0ZFVENIX0JFR0lOIDMKICNkZWZpbmUgSUJTX09QX0JFR0lOICAgIDQKIAotLyogVGhlIGZ1bmN0aW9uIGludGVyZmFjZSBuZWVkcyB0byBiZSBmaXhlZCwgc29tZXRoaW5nIGxpa2UgYWRkCi0gICBkYXRhLiBTaG91bGQgdGhlbiBiZSBhZGRlZCB0byBsaW51eC9vcHJvZmlsZS5oLiAqLworLyoKKyAqIFRoZSBmdW5jdGlvbiBpbnRlcmZhY2UgbmVlZHMgdG8gYmUgZml4ZWQsIHNvbWV0aGluZyBsaWtlIGFkZAorICogZGF0YS4gU2hvdWxkIHRoZW4gYmUgYWRkZWQgdG8gbGludXgvb3Byb2ZpbGUuaC4KKyAqLwogZXh0ZXJuIHZvaWQKLW9wcm9maWxlX2FkZF9pYnNfc2FtcGxlKHN0cnVjdCBwdF9yZWdzICpjb25zdCByZWdzLAotCQkJdW5zaWduZWQgaW50ICpjb25zdCBpYnNfc2FtcGxlLCBpbnQgaWJzX2NvZGUpOworb3Byb2ZpbGVfYWRkX2lic19zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAorCQkJdW5zaWduZWQgaW50ICogY29uc3QgaWJzX3NhbXBsZSwgaW50IGlic19jb2RlKTsKIAogc3RydWN0IGlic19mZXRjaF9zYW1wbGUgewogCS8qIE1TUkMwMDFfMTAzMSBJQlMgRmV0Y2ggTGluZWFyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KQEAgLTEwNCwxMSArMTA2LDYgQEAKIAl1bnNpZ25lZCBpbnQgaWJzX2RjX3BoeXNfaGlnaDsKIH07CiAKLS8qCi0gKiB1bml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgbmVlZGVkIG9uIEFNRCBGYW1pbHkxMGgrCi0qLwotc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKTsKLQogc3RhdGljIGludCBpYnNfYWxsb3dlZDsJLyogQU1EIEZhbWlseTEwaCBhbmQgbGF0ZXIgKi8KIAogc3RydWN0IG9wX2lic19jb25maWcgewpAQCAtMjIzLDcgKzIyMCw3IEBACiAJCQkJCQkodW5zaWduZWQgaW50ICopJmlic19mZXRjaCwKIAkJCQkJCUlCU19GRVRDSF9CRUdJTik7CiAKLQkJCS8qcmVlbmFibGUgdGhlIElSUSAqLworCQkJLyogcmVlbmFibGUgdGhlIElSUSAqLwogCQkJcmRtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOwogCQkJaGlnaCAmPSB+SUJTX0ZFVENIX0hJR0hfVkFMSURfQklUOwogCQkJaGlnaCB8PSBJQlNfRkVUQ0hfSElHSF9FTkFCTEU7CkBAIC0zMzEsOCArMzI4LDEwIEBACiAJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAlpbnQgaTsKIAotCS8qIFN1YnRsZTogc3RvcCBvbiBhbGwgY291bnRlcnMgdG8gYXZvaWQgcmFjZSB3aXRoCi0JICogc2V0dGluZyBvdXIgcG0gY2FsbGJhY2sgKi8KKwkvKgorCSAqIFN1YnRsZTogc3RvcCBvbiBhbGwgY291bnRlcnMgdG8gYXZvaWQgcmFjZSB3aXRoIHNldHRpbmcgb3VyCisJICogcG0gY2FsbGJhY2sKKwkgKi8KIAlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUyA7ICsraSkgewogCQlpZiAoIXJlc2V0X3ZhbHVlW2ldKQogCQkJY29udGludWU7CkBAIC0zNDMsMTMgKzM0MiwxNSBAQAogCiAjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwogCWlmIChpYnNfYWxsb3dlZCAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKLQkJbG93ID0gMDsJCS8qIGNsZWFyIG1heCBjb3VudCBhbmQgZW5hYmxlICovCisJCS8qIGNsZWFyIG1heCBjb3VudCBhbmQgZW5hYmxlICovCisJCWxvdyA9IDA7CiAJCWhpZ2ggPSAwOwogCQl3cm1zcihNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIGxvdywgaGlnaCk7CiAJfQogCiAJaWYgKGlic19hbGxvd2VkICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQlsb3cgPSAwOwkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KKwkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KKwkJbG93ID0gMDsKIAkJaGlnaCA9IDA7CiAJCXdybXNyKE1TUl9BTUQ2NF9JQlNPUENUTCwgbG93LCBoaWdoKTsKIAl9CkBAIC0zNzAsMTggKzM3MSw3IEBACiAJfQogfQogCi0jaWZuZGVmIENPTkZJR19PUFJPRklMRV9JQlMKLQotLyogbm8gSUJTIHN1cHBvcnQgKi8KLQotc3RhdGljIGludCBvcF9hbWRfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcF9hbWRfZXhpdCh2b2lkKSB7fQotCi0jZWxzZQorI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKIAogc3RhdGljIHU4IGlic19laWx2dF9vZmY7CiAKQEAgLTM5NSw3ICszODUsNyBAQAogCXNldHVwX0FQSUNfZWlsdnRfaWJzKDAsIEFQSUNfRUlMVlRfTVNHX0ZJWCwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcGZtX2FtZDY0X3NldHVwX2VpbHZ0KHZvaWQpCitzdGF0aWMgaW50IGluaXRfaWJzX25taSh2b2lkKQogewogI2RlZmluZSBJQlNDVExfTFZUT0ZGU0VUVkFMCQkoMSA8PCA4KQogI2RlZmluZSBJQlNDVEwJCQkJMHgxY2MKQEAgLTQ0MywxOCArNDMzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMKLSAqIGlmIGF2YWlsYWJsZSAoQU1EIEZhbWlseTEwaCByZXYgQjAgYW5kIGxhdGVyKQotICovCi1zdGF0aWMgdm9pZCBzZXR1cF9pYnModm9pZCkKKy8qIHVuaW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIG5lZWRlZCAqLworc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKQoreworCWlmIChpYnNfYWxsb3dlZCkKKwkJb25fZWFjaF9jcHUoYXBpY19jbGVhcl9pYnNfbm1pX3Blcl9jcHUsIE5VTEwsIDEpOworfQorCisvKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgYXZhaWxhYmxlICovCitzdGF0aWMgdm9pZCBpYnNfaW5pdCh2b2lkKQogewogCWlic19hbGxvd2VkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUyk7CiAKIAlpZiAoIWlic19hbGxvd2VkKQogCQlyZXR1cm47CiAKLQlpZiAocGZtX2FtZDY0X3NldHVwX2VpbHZ0KCkpIHsKKwlpZiAoaW5pdF9pYnNfbm1pKCkpIHsKIAkJaWJzX2FsbG93ZWQgPSAwOwogCQlyZXR1cm47CiAJfQpAQCAtNDYyLDE0ICs0NTYsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogQU1EIElCUyBkZXRlY3RlZFxuIik7CiB9CiAKLQotLyoKLSAqIHVuaXRpYWxpemUgdGhlIEFQSUMgZm9yIHRoZSBJQlMgaW50ZXJydXB0cyBpZiBuZWVkZWQgb24gQU1EIEZhbWlseTEwaAotICogcmV2IEIwIGFuZCBsYXRlciAqLwotc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKQorc3RhdGljIHZvaWQgaWJzX2V4aXQodm9pZCkKIHsKLQlpZiAoaWJzX2FsbG93ZWQpCi0JCW9uX2VhY2hfY3B1KGFwaWNfY2xlYXJfaWJzX25taV9wZXJfY3B1LCBOVUxMLCAxKTsKKwlpZiAoIWlic19hbGxvd2VkKQorCQlyZXR1cm47CisKKwljbGVhcl9pYnNfbm1pKCk7CiB9CiAKIHN0YXRpYyBpbnQgKCpjcmVhdGVfYXJjaF9maWxlcykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCk7CkBAIC01MTksNyArNTExLDcgQEAKIAogc3RhdGljIGludCBvcF9hbWRfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQogewotCXNldHVwX2licygpOworCWlic19pbml0KCk7CiAJY3JlYXRlX2FyY2hfZmlsZXMgPSBvcHMtPmNyZWF0ZV9maWxlczsKIAlvcHMtPmNyZWF0ZV9maWxlcyA9IHNldHVwX2lic19maWxlczsKIAlyZXR1cm4gMDsKQEAgLTUyNywxMCArNTE5LDIxIEBACiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpCiB7Ci0JY2xlYXJfaWJzX25taSgpOworCWlic19leGl0KCk7CiB9CiAKLSNlbmRpZgorI2Vsc2UKKworLyogbm8gSUJTIHN1cHBvcnQgKi8KKworc3RhdGljIGludCBvcF9hbWRfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvcF9hbWRfZXhpdCh2b2lkKSB7fQorCisjZW5kaWYgLyogQ09ORklHX09QUk9GSUxFX0lCUyAqLwogCiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfYW1kX3NwZWMgPSB7CiAJLmluaXQJCQk9IG9wX2FtZF9pbml0LApkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggMjkwYjIxOS4uYWMwOTU2ZiAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZworKysgYi9ibG9jay9LY29uZmlnCkBAIC0yNCwyMSArMjQsMTcgQEAKIGlmIEJMT0NLCiAKIGNvbmZpZyBMQkQKLQlib29sICJTdXBwb3J0IGZvciBMYXJnZSBCbG9jayBEZXZpY2VzIgorCWJvb2wgIlN1cHBvcnQgZm9yIGxhcmdlIGJsb2NrIGRldmljZXMgYW5kIGZpbGVzIgogCWRlcGVuZHMgb24gITY0QklUCiAJaGVscAotCSAgRW5hYmxlIGJsb2NrIGRldmljZXMgb2Ygc2l6ZSAyVEIgYW5kIGxhcmdlci4KKwkgIEVuYWJsZSBibG9jayBkZXZpY2VzIG9yIGZpbGVzIG9mIHNpemUgMlRCIGFuZCBsYXJnZXIuCiAKIAkgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIGZ1bGwgY2FwYWNpdHkgb2YgbGFyZ2UKIAkgICgyVEIrKSBibG9jayBkZXZpY2VzLCBpbmNsdWRpbmcgUkFJRCwgZGlzaywgTmV0d29yayBCbG9jayBEZXZpY2UsCiAJICBMb2dpY2FsIFZvbHVtZSBNYW5hZ2VyIChMVk0pIGFuZCBsb29wYmFjay4KLQotCSAgRm9yIGV4YW1wbGUsIFJBSUQgZGV2aWNlcyBhcmUgZnJlcXVlbnRseSBiaWdnZXIgdGhhbiB0aGUgY2FwYWNpdHkKLQkgIG9mIHRoZSBsYXJnZXN0IGluZGl2aWR1YWwgaGFyZCBkcml2ZS4KLQotCSAgVGhpcyBvcHRpb24gaXMgbm90IHJlcXVpcmVkIGlmIHlvdSBoYXZlIGluZGl2aWR1YWwgZGlzayBkcml2ZXMKLQkgIHdoaWNoIHRvdGFsIDJUQisgYW5kIHlvdSBhcmUgbm90IGFnZ3JlZ2F0aW5nIHRoZSBjYXBhY2l0eSBpbnRvCi0JICBhIGxhcmdlIGJsb2NrIGRldmljZSAoZS5nLiB1c2luZyBSQUlEIG9yIExWTSkuCisJCisJICBUaGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3Igc2luZ2xlIGZpbGVzIGxhcmdlciB0aGFuCisJICAyVEIuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTU4LDE1ICs1NCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBMU0YKLQlib29sICJTdXBwb3J0IGZvciBMYXJnZSBTaW5nbGUgRmlsZXMiCi0JZGVwZW5kcyBvbiAhNjRCSVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaGFuZGxlIHZlcnkgbGFyZ2UgZmlsZXMgKDJUQgotCSAgYW5kIGxhcmdlciksIG90aGVyd2lzZSBzYXkgTi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIEJMS19ERVZfQlNHCiAJYm9vbCAiQmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYmxvY2svYXMtaW9zY2hlZC5jIGIvYmxvY2svYXMtaW9zY2hlZC5jCmluZGV4IDcxZjBhYmIuLjYzMWY2ZjQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2FzLWlvc2NoZWQuYworKysgYi9ibG9jay9hcy1pb3NjaGVkLmMKQEAgLTEzMzksMTIgKzEzMzksMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBhc19leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCBhc19leGl0X3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSkKIHsKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBlLT5lbGV2YXRvcl9kYXRhOwogCiAJZGVsX3RpbWVyX3N5bmMoJmFkLT5hbnRpY190aW1lcik7Ci0Ja2Jsb2NrZF9mbHVzaF93b3JrKCZhZC0+YW50aWNfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWQtPmFudGljX3dvcmspOwogCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZhZC0+Zmlmb19saXN0W1JFUV9TWU5DXSkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmYWQtPmZpZm9fbGlzdFtSRVFfQVNZTkNdKSk7CkBAIC0xNDA5LDcgKzE0MDksNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgZXN0X3RpbWVfc2hvdyhlbGV2YXRvcl90ICplLCBjaGFyICpwYWdlKQorc3RhdGljIHNzaXplX3QgZXN0X3RpbWVfc2hvdyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNoYXIgKnBhZ2UpCiB7CiAJc3RydWN0IGFzX2RhdGEgKmFkID0gZS0+ZWxldmF0b3JfZGF0YTsKIAlpbnQgcG9zID0gMDsKQEAgLTE0MjcsNyArMTQyNyw3IEBACiB9CiAKICNkZWZpbmUgU0hPV19GVU5DVElPTihfX0ZVTkMsIF9fVkFSKQkJCQlcCi1zdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY2hhciAqcGFnZSkJCVwKK3N0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNoYXIgKnBhZ2UpCVwKIHsJCQkJCQkJCVwKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBlLT5lbGV2YXRvcl9kYXRhOwkJCVwKIAlyZXR1cm4gYXNfdmFyX3Nob3coamlmZmllc190b19tc2VjcygoX19WQVIpKSwgKHBhZ2UpKTsJXApAQCAtMTQ0MCw3ICsxNDQwLDcgQEAKICN1bmRlZiBTSE9XX0ZVTkNUSU9OCiAKICNkZWZpbmUgU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgpCQkJCVwKLXN0YXRpYyBzc2l6ZV90IF9fRlVOQyhlbGV2YXRvcl90ICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCVwKK3N0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBlLT5lbGV2YXRvcl9kYXRhOwkJCQlcCiAJaW50IHJldCA9IGFzX3Zhcl9zdG9yZShfX1BUUiwgKHBhZ2UpLCBjb3VudCk7CQkJXApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWJhcnJpZXIuYyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKaW5kZXggNmU3MmQ2Ni4uOGViYTRlNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWJhcnJpZXIuYworKysgYi9ibG9jay9ibGstYmFycmllci5jCkBAIC0yNCw4ICsyNCw4IEBACiBpbnQgYmxrX3F1ZXVlX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIG9yZGVyZWQsCiAJCSAgICAgIHByZXBhcmVfZmx1c2hfZm4gKnByZXBhcmVfZmx1c2hfZm4pCiB7Ci0JaWYgKG9yZGVyZWQgJiAoUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfUE9TVEZMVVNIKSAmJgotCSAgICBwcmVwYXJlX2ZsdXNoX2ZuID09IE5VTEwpIHsKKwlpZiAoIXByZXBhcmVfZmx1c2hfZm4gJiYgKG9yZGVyZWQgJiAoUVVFVUVfT1JERVJFRF9ET19QUkVGTFVTSCB8CisJCQkJCSAgICAgUVVFVUVfT1JERVJFRF9ET19QT1NURkxVU0gpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwcmVwYXJlX2ZsdXNoX2ZuIHJlcXVpcmVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTg4LDcgKzg4LDcgQEAKIAkJcmV0dXJuIFFVRVVFX09SRFNFUV9ET05FOwogfQogCi12b2lkIGJsa19vcmRlcmVkX2NvbXBsZXRlX3NlcShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgc2VxLCBpbnQgZXJyb3IpCitib29sIGJsa19vcmRlcmVkX2NvbXBsZXRlX3NlcShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgc2VxLCBpbnQgZXJyb3IpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCkBAIC05OSw3ICs5OSw3IEBACiAJcS0+b3Jkc2VxIHw9IHNlcTsKIAogCWlmIChibGtfb3JkZXJlZF9jdXJfc2VxKHEpICE9IFFVRVVFX09SRFNFUV9ET05FKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogT2theSwgc2VxdWVuY2UgY29tcGxldGUuCkBAIC0xMDksNiArMTA5LDggQEAKIAogCWlmIChfX2Jsa19lbmRfcmVxdWVzdChycSwgcS0+b3JkZXJyLCBibGtfcnFfYnl0ZXMocnEpKSkKIAkJQlVHKCk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgcHJlX2ZsdXNoX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKQEAgLTEzNCw3ICsxMzYsNyBAQAogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlycV9lbmRfaW9fZm4gKmVuZF9pbzsKIAotCWlmICh3aGljaCA9PSBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIKSB7CisJaWYgKHdoaWNoID09IFFVRVVFX09SREVSRURfRE9fUFJFRkxVU0gpIHsKIAkJcnEgPSAmcS0+cHJlX2ZsdXNoX3JxOwogCQllbmRfaW8gPSBwcmVfZmx1c2hfZW5kX2lvOwogCX0gZWxzZSB7CkBAIC0xNTEsODAgKzE1MywxMTAgQEAKIAllbHZfaW5zZXJ0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpzdGFydF9vcmRlcmVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCQkgICAgc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIGlubGluZSBib29sIHN0YXJ0X29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICoqcnFwKQogeworCXN0cnVjdCByZXF1ZXN0ICpycSA9ICpycXA7CisJdW5zaWduZWQgc2tpcCA9IDA7CisKIAlxLT5vcmRlcnIgPSAwOwogCXEtPm9yZGVyZWQgPSBxLT5uZXh0X29yZGVyZWQ7CiAJcS0+b3Jkc2VxIHw9IFFVRVVFX09SRFNFUV9TVEFSVEVEOwogCiAJLyoKLQkgKiBQcmVwIHByb3h5IGJhcnJpZXIgcmVxdWVzdC4KKwkgKiBGb3IgYW4gZW1wdHkgYmFycmllciwgdGhlcmUncyBubyBhY3R1YWwgQkFSIHJlcXVlc3QsIHdoaWNoCisJICogaW4gdHVybiBtYWtlcyBQT1NURkxVU0ggdW5uZWNlc3NhcnkuICBNYXNrIHRoZW0gb2ZmLgogCSAqLworCWlmICghcnEtPmhhcmRfbnJfc2VjdG9ycykgeworCQlxLT5vcmRlcmVkICY9IH4oUVVFVUVfT1JERVJFRF9ET19CQVIgfAorCQkJCVFVRVVFX09SREVSRURfRE9fUE9TVEZMVVNIKTsKKwkJLyoKKwkJICogRW1wdHkgYmFycmllciBvbiBhIHdyaXRlLXRocm91Z2ggZGV2aWNlIHcvIG9yZGVyZWQKKwkJICogdGFnIGhhcyBubyBjb21tYW5kIHRvIGlzc3VlIGFuZCB3aXRob3V0IGFueSBjb21tYW5kCisJCSAqIHRvIGlzc3VlLCBvcmRlcmluZyBieSB0YWcgY2FuJ3QgYmUgdXNlZC4gIERyYWluCisJCSAqIGluc3RlYWQuCisJCSAqLworCQlpZiAoKHEtPm9yZGVyZWQgJiBRVUVVRV9PUkRFUkVEX0JZX1RBRykgJiYKKwkJICAgICEocS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfRE9fUFJFRkxVU0gpKSB7CisJCQlxLT5vcmRlcmVkICY9IH5RVUVVRV9PUkRFUkVEX0JZX1RBRzsKKwkJCXEtPm9yZGVyZWQgfD0gUVVFVUVfT1JERVJFRF9CWV9EUkFJTjsKKwkJfQorCX0KKworCS8qIHN0YXNoIGF3YXkgdGhlIG9yaWdpbmFsIHJlcXVlc3QgKi8KIAllbHZfZGVxdWV1ZV9yZXF1ZXN0KHEsIHJxKTsKIAlxLT5vcmlnX2Jhcl9ycSA9IHJxOwotCXJxID0gJnEtPmJhcl9ycTsKLQlibGtfcnFfaW5pdChxLCBycSk7Ci0JaWYgKGJpb19kYXRhX2RpcihxLT5vcmlnX2Jhcl9ycS0+YmlvKSA9PSBXUklURSkKLQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUlc7Ci0JaWYgKHEtPm9yZGVyZWQgJiBRVUVVRV9PUkRFUkVEX0ZVQSkKLQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRlVBOwotCWluaXRfcmVxdWVzdF9mcm9tX2JpbyhycSwgcS0+b3JpZ19iYXJfcnEtPmJpbyk7Ci0JcnEtPmVuZF9pbyA9IGJhcl9lbmRfaW87CisJcnEgPSBOVUxMOwogCiAJLyoKIAkgKiBRdWV1ZSBvcmRlcmVkIHNlcXVlbmNlLiAgQXMgd2Ugc3RhY2sgdGhlbSBhdCB0aGUgaGVhZCwgd2UKIAkgKiBuZWVkIHRvIHF1ZXVlIGluIHJldmVyc2Ugb3JkZXIuICBOb3RlIHRoYXQgd2UgcmVseSBvbiB0aGF0CiAJICogbm8gZnMgcmVxdWVzdCB1c2VzIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCBhbmQgdGh1cyBubyBmcwotCSAqIHJlcXVlc3QgZ2V0cyBpbmJldHdlZW4gb3JkZXJlZCBzZXF1ZW5jZS4gSWYgdGhpcyByZXF1ZXN0IGlzCi0JICogYW4gZW1wdHkgYmFycmllciwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhIHBvc3RmbHVzaCBldmVyIHNpbmNlCi0JICogdGhlcmUgd2lsbCBiZSBubyBkYXRhIHdyaXR0ZW4gYmV0d2VlbiB0aGUgcHJlIGFuZCBwb3N0IGZsdXNoLgotCSAqIEhlbmNlIGEgc2luZ2xlIGZsdXNoIHdpbGwgc3VmZmljZS4KKwkgKiByZXF1ZXN0IGdldHMgaW5iZXR3ZWVuIG9yZGVyZWQgc2VxdWVuY2UuCiAJICovCi0JaWYgKChxLT5vcmRlcmVkICYgUVVFVUVfT1JERVJFRF9QT1NURkxVU0gpICYmICFibGtfZW1wdHlfYmFycmllcihycSkpCi0JCXF1ZXVlX2ZsdXNoKHEsIFFVRVVFX09SREVSRURfUE9TVEZMVVNIKTsKLQllbHNlCi0JCXEtPm9yZHNlcSB8PSBRVUVVRV9PUkRTRVFfUE9TVEZMVVNIOworCWlmIChxLT5vcmRlcmVkICYgUVVFVUVfT1JERVJFRF9ET19QT1NURkxVU0gpIHsKKwkJcXVldWVfZmx1c2gocSwgUVVFVUVfT1JERVJFRF9ET19QT1NURkxVU0gpOworCQlycSA9ICZxLT5wb3N0X2ZsdXNoX3JxOworCX0gZWxzZQorCQlza2lwIHw9IFFVRVVFX09SRFNFUV9QT1NURkxVU0g7CiAKLQllbHZfaW5zZXJ0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQpOworCWlmIChxLT5vcmRlcmVkICYgUVVFVUVfT1JERVJFRF9ET19CQVIpIHsKKwkJcnEgPSAmcS0+YmFyX3JxOwogCi0JaWYgKHEtPm9yZGVyZWQgJiBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIKSB7Ci0JCXF1ZXVlX2ZsdXNoKHEsIFFVRVVFX09SREVSRURfUFJFRkxVU0gpOworCQkvKiBpbml0aWFsaXplIHByb3h5IHJlcXVlc3QgYW5kIHF1ZXVlIGl0ICovCisJCWJsa19ycV9pbml0KHEsIHJxKTsKKwkJaWYgKGJpb19kYXRhX2RpcihxLT5vcmlnX2Jhcl9ycS0+YmlvKSA9PSBXUklURSkKKwkJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1JXOworCQlpZiAocS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfRE9fRlVBKQorCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRlVBOworCQlpbml0X3JlcXVlc3RfZnJvbV9iaW8ocnEsIHEtPm9yaWdfYmFyX3JxLT5iaW8pOworCQlycS0+ZW5kX2lvID0gYmFyX2VuZF9pbzsKKworCQllbHZfaW5zZXJ0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQpOworCX0gZWxzZQorCQlza2lwIHw9IFFVRVVFX09SRFNFUV9CQVI7CisKKwlpZiAocS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfRE9fUFJFRkxVU0gpIHsKKwkJcXVldWVfZmx1c2gocSwgUVVFVUVfT1JERVJFRF9ET19QUkVGTFVTSCk7CiAJCXJxID0gJnEtPnByZV9mbHVzaF9ycTsKIAl9IGVsc2UKLQkJcS0+b3Jkc2VxIHw9IFFVRVVFX09SRFNFUV9QUkVGTFVTSDsKKwkJc2tpcCB8PSBRVUVVRV9PUkRTRVFfUFJFRkxVU0g7CiAKLQlpZiAoKHEtPm9yZGVyZWQgJiBRVUVVRV9PUkRFUkVEX1RBRykgfHwgcS0+aW5fZmxpZ2h0ID09IDApCi0JCXEtPm9yZHNlcSB8PSBRVUVVRV9PUkRTRVFfRFJBSU47Ci0JZWxzZQorCWlmICgocS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfQllfRFJBSU4pICYmIHEtPmluX2ZsaWdodCkKIAkJcnEgPSBOVUxMOworCWVsc2UKKwkJc2tpcCB8PSBRVUVVRV9PUkRTRVFfRFJBSU47CiAKLQlyZXR1cm4gcnE7CisJKnJxcCA9IHJxOworCisJLyoKKwkgKiBDb21wbGV0ZSBza2lwcGVkIHNlcXVlbmNlcy4gIElmIHdob2xlIHNlcXVlbmNlIGlzIGNvbXBsZXRlLAorCSAqIHJldHVybiBmYWxzZSB0byB0ZWxsIGVsZXZhdG9yIHRoYXQgdGhpcyByZXF1ZXN0IGlzIGdvbmUuCisJICovCisJcmV0dXJuICFibGtfb3JkZXJlZF9jb21wbGV0ZV9zZXEocSwgc2tpcCwgMCk7CiB9CiAKLWludCBibGtfZG9fb3JkZXJlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycXApCitib29sIGJsa19kb19vcmRlcmVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxcCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSAqcnFwOwogCWNvbnN0IGludCBpc19iYXJyaWVyID0gYmxrX2ZzX3JlcXVlc3QocnEpICYmIGJsa19iYXJyaWVyX3JxKHJxKTsKIAogCWlmICghcS0+b3Jkc2VxKSB7CiAJCWlmICghaXNfYmFycmllcikKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIHRydWU7CiAKLQkJaWYgKHEtPm5leHRfb3JkZXJlZCAhPSBRVUVVRV9PUkRFUkVEX05PTkUpIHsKLQkJCSpycXAgPSBzdGFydF9vcmRlcmVkKHEsIHJxKTsKLQkJCXJldHVybiAxOwotCQl9IGVsc2UgeworCQlpZiAocS0+bmV4dF9vcmRlcmVkICE9IFFVRVVFX09SREVSRURfTk9ORSkKKwkJCXJldHVybiBzdGFydF9vcmRlcmVkKHEsIHJxcCk7CisJCWVsc2UgewogCQkJLyoKLQkJCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWV1ZSBzd2l0Y2hlcyB0bwotCQkJICogT1JERVJFRF9OT05FIHdoaWxlIHRoaXMgcmVxdWVzdCBpcyBvbiBpdC4KKwkJCSAqIFF1ZXVlIG9yZGVyaW5nIG5vdCBzdXBwb3J0ZWQuICBUZXJtaW5hdGUKKwkJCSAqIHdpdGggcHJlanVkaWNlLgogCQkJICovCiAJCQllbHZfZGVxdWV1ZV9yZXF1ZXN0KHEsIHJxKTsKIAkJCWlmIChfX2Jsa19lbmRfcmVxdWVzdChycSwgLUVPUE5PVFNVUFAsCiAJCQkJCSAgICAgIGJsa19ycV9ieXRlcyhycSkpKQogCQkJCUJVRygpOwogCQkJKnJxcCA9IE5VTEw7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIApAQCAtMjM1LDkgKzI2Nyw5IEBACiAJLyogU3BlY2lhbCByZXF1ZXN0cyBhcmUgbm90IHN1YmplY3QgdG8gb3JkZXJpbmcgcnVsZXMuICovCiAJaWYgKCFibGtfZnNfcmVxdWVzdChycSkgJiYKIAkgICAgcnEgIT0gJnEtPnByZV9mbHVzaF9ycSAmJiBycSAhPSAmcS0+cG9zdF9mbHVzaF9ycSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCi0JaWYgKHEtPm9yZGVyZWQgJiBRVUVVRV9PUkRFUkVEX1RBRykgeworCWlmIChxLT5vcmRlcmVkICYgUVVFVUVfT1JERVJFRF9CWV9UQUcpIHsKIAkJLyogT3JkZXJlZCBieSB0YWcuICBCbG9ja2luZyB0aGUgbmV4dCBiYXJyaWVyIGlzIGVub3VnaC4gKi8KIAkJaWYgKGlzX2JhcnJpZXIgJiYgcnEgIT0gJnEtPmJhcl9ycSkKIAkJCSpycXAgPSBOVUxMOwpAQCAtMjQ4LDcgKzI4MCw3IEBACiAJCQkqcnFwID0gTlVMTDsKIAl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgYmlvX2VuZF9lbXB0eV9iYXJyaWVyKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDU2MWU4YTEuLmE4MjRlNDkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMTUzLDYgKzE1Myw5IEBACiAJCQluYnl0ZXMgPSBiaW8tPmJpX3NpemU7CiAJCX0KIAorCQlpZiAodW5saWtlbHkocnEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCisJCQlzZXRfYml0KEJJT19RVUlFVCwgJmJpby0+YmlfZmxhZ3MpOworCiAJCWJpby0+Ymlfc2l6ZSAtPSBuYnl0ZXM7CiAJCWJpby0+Ymlfc2VjdG9yICs9IChuYnl0ZXMgPj4gOSk7CiAKQEAgLTI2NSw4ICsyNjgsNyBAQAogewogCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCiAJCXJldHVybjsKLQotCWlmICghYmxrX3JlbW92ZV9wbHVnKHEpKQorCWlmICghYmxrX3JlbW92ZV9wbHVnKHEpICYmICFibGtfcXVldWVfbm9ucm90KHEpKQogCQlyZXR1cm47CiAKIAlxLT5yZXF1ZXN0X2ZuKHEpOwpAQCAtNDA0LDcgKzQwNiw4IEBACiB2b2lkIGJsa19zeW5jX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWRlbF90aW1lcl9zeW5jKCZxLT51bnBsdWdfdGltZXIpOwotCWtibG9ja2RfZmx1c2hfd29yaygmcS0+dW5wbHVnX3dvcmspOworCWRlbF90aW1lcl9zeW5jKCZxLT50aW1lb3V0KTsKKwljYW5jZWxfd29ya19zeW5jKCZxLT51bnBsdWdfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19zeW5jX3F1ZXVlKTsKIApAQCAtMTEzNSw3ICsxMTM4LDcgQEAKIHN0YXRpYyBpbnQgX19tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwotCWludCBlbF9yZXQsIG5yX3NlY3RvcnMsIGJhcnJpZXIsIGRpc2NhcmQsIGVycjsKKwlpbnQgZWxfcmV0LCBucl9zZWN0b3JzOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByaW8gPSBiaW9fcHJpbyhiaW8pOwogCWNvbnN0IGludCBzeW5jID0gYmlvX3N5bmMoYmlvKTsKIAlpbnQgcndfZmxhZ3M7CkBAIC0xMTQ5LDIyICsxMTUyLDkgQEAKIAkgKi8KIAlibGtfcXVldWVfYm91bmNlKHEsICZiaW8pOwogCi0JYmFycmllciA9IGJpb19iYXJyaWVyKGJpbyk7Ci0JaWYgKHVubGlrZWx5KGJhcnJpZXIpICYmIGJpb19oYXNfZGF0YShiaW8pICYmCi0JICAgIChxLT5uZXh0X29yZGVyZWQgPT0gUVVFVUVfT1JERVJFRF9OT05FKSkgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlbmRfaW87Ci0JfQotCi0JZGlzY2FyZCA9IGJpb19kaXNjYXJkKGJpbyk7Ci0JaWYgKHVubGlrZWx5KGRpc2NhcmQpICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gZW5kX2lvOwotCX0KLQogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKLQlpZiAodW5saWtlbHkoYmFycmllcikgfHwgZWx2X3F1ZXVlX2VtcHR5KHEpKQorCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSB8fCBlbHZfcXVldWVfZW1wdHkocSkpCiAJCWdvdG8gZ2V0X3JxOwogCiAJZWxfcmV0ID0gZWx2X21lcmdlKHEsICZyZXEsIGJpbyk7CkBAIC0xMjUwLDE4ICsxMjQwLDE0IEBACiAJaWYgKHRlc3RfYml0KFFVRVVFX0ZMQUdfU0FNRV9DT01QLCAmcS0+cXVldWVfZmxhZ3MpIHx8CiAJICAgIGJpb19mbGFnZ2VkKGJpbywgQklPX0NQVV9BRkZJTkUpKQogCQlyZXEtPmNwdSA9IGJsa19jcHVfdG9fZ3JvdXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoZWx2X3F1ZXVlX2VtcHR5KHEpKQorCWlmICghYmxrX3F1ZXVlX25vbnJvdChxKSAmJiBlbHZfcXVldWVfZW1wdHkocSkpCiAJCWJsa19wbHVnX2RldmljZShxKTsKIAlhZGRfcmVxdWVzdChxLCByZXEpOwogb3V0OgotCWlmIChzeW5jKQorCWlmIChzeW5jIHx8IGJsa19xdWV1ZV9ub25yb3QocSkpCiAJCV9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHEpOwogCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlyZXR1cm4gMDsKLQotZW5kX2lvOgotCWJpb19lbmRpbyhiaW8sIGVycik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNDE0LDE1ICsxNDAwLDEzIEBACiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAogCQlxID0gYmRldl9nZXRfcXVldWUoYmlvLT5iaV9iZGV2KTsKLQkJaWYgKCFxKSB7CisJCWlmICh1bmxpa2VseSghcSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJnZW5lcmljX21ha2VfcmVxdWVzdDogVHJ5aW5nIHRvIGFjY2VzcyAiCiAJCQkJIm5vbmV4aXN0ZW50IGJsb2NrLWRldmljZSAlcyAoJUx1KVxuIiwKIAkJCQliZGV2bmFtZShiaW8tPmJpX2JkZXYsIGIpLAogCQkJCShsb25nIGxvbmcpIGJpby0+Ymlfc2VjdG9yKTsKLWVuZF9pbzoKLQkJCWJpb19lbmRpbyhiaW8sIGVycik7Ci0JCQlicmVhazsKKwkJCWdvdG8gZW5kX2lvOwogCQl9CiAKIAkJaWYgKHVubGlrZWx5KG5yX3NlY3RvcnMgPiBxLT5tYXhfaHdfc2VjdG9ycykpIHsKQEAgLTE0NTksMTQgKzE0NDMsMTkgQEAKIAogCQlpZiAoYmlvX2NoZWNrX2VvZChiaW8sIG5yX3NlY3RvcnMpKQogCQkJZ290byBlbmRfaW87Ci0JCWlmICgoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSAmJiAhcS0+cHJlcGFyZV9mbHVzaF9mbikgfHwKLQkJICAgIChiaW9fZGlzY2FyZChiaW8pICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pKSB7CisKKwkJaWYgKGJpb19kaXNjYXJkKGJpbykgJiYgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIGVuZF9pbzsKIAkJfQogCiAJCXJldCA9IHEtPm1ha2VfcmVxdWVzdF9mbihxLCBiaW8pOwogCX0gd2hpbGUgKHJldCk7CisKKwlyZXR1cm47CisKK2VuZF9pbzoKKwliaW9fZW5kaW8oYmlvLCBlcnIpOwogfQogCiAvKgpAQCAtMTcxNiwxNCArMTcwNSw2IEBACiAJd2hpbGUgKChiaW8gPSByZXEtPmJpbykgIT0gTlVMTCkgewogCQlpbnQgbmJ5dGVzOwogCi0JCS8qCi0JCSAqIEZvciBhbiBlbXB0eSBiYXJyaWVyIHJlcXVlc3QsIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIG11c3QKLQkJICogc3RvcmUgYSBwb3RlbnRpYWwgZXJyb3IgbG9jYXRpb24gaW4gLT5zZWN0b3IuIFdlIHBhc3MKLQkJICogdGhhdCBiYWNrIHVwIGluIC0+Ymlfc2VjdG9yLgotCQkgKi8KLQkJaWYgKGJsa19lbXB0eV9iYXJyaWVyKHJlcSkpCi0JCQliaW8tPmJpX3NlY3RvciA9IHJlcS0+c2VjdG9yOwotCiAJCWlmIChucl9ieXRlcyA+PSBiaW8tPmJpX3NpemUpIHsKIAkJCXJlcS0+YmlvID0gYmlvLT5iaV9uZXh0OwogCQkJbmJ5dGVzID0gYmlvLT5iaV9zaXplOwpAQCAtMjE0MywxMiArMjEyNCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGtibG9ja2Rfc2NoZWR1bGVfd29yayk7CiAKLXZvaWQga2Jsb2NrZF9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQljYW5jZWxfd29ya19zeW5jKHdvcmspOwotfQotRVhQT1JUX1NZTUJPTChrYmxvY2tkX2ZsdXNoX3dvcmspOwotCiBpbnQgX19pbml0IGJsa19kZXZfaW5pdCh2b2lkKQogewogCWtibG9ja2Rfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgia2Jsb2NrZCIpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCBhZmE1NWUxLi41OWZkMDVkIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtMzE5LDkgKzMxOSw5IEBACiAJdC0+bWF4X2h3X3NlY3RvcnMgPSBtaW5fbm90X3plcm8odC0+bWF4X2h3X3NlY3RvcnMsIGItPm1heF9od19zZWN0b3JzKTsKIAl0LT5zZWdfYm91bmRhcnlfbWFzayA9IG1pbl9ub3RfemVybyh0LT5zZWdfYm91bmRhcnlfbWFzaywgYi0+c2VnX2JvdW5kYXJ5X21hc2spOwogCi0JdC0+bWF4X3BoeXNfc2VnbWVudHMgPSBtaW4odC0+bWF4X3BoeXNfc2VnbWVudHMsIGItPm1heF9waHlzX3NlZ21lbnRzKTsKLQl0LT5tYXhfaHdfc2VnbWVudHMgPSBtaW4odC0+bWF4X2h3X3NlZ21lbnRzLCBiLT5tYXhfaHdfc2VnbWVudHMpOwotCXQtPm1heF9zZWdtZW50X3NpemUgPSBtaW4odC0+bWF4X3NlZ21lbnRfc2l6ZSwgYi0+bWF4X3NlZ21lbnRfc2l6ZSk7CisJdC0+bWF4X3BoeXNfc2VnbWVudHMgPSBtaW5fbm90X3plcm8odC0+bWF4X3BoeXNfc2VnbWVudHMsIGItPm1heF9waHlzX3NlZ21lbnRzKTsKKwl0LT5tYXhfaHdfc2VnbWVudHMgPSBtaW5fbm90X3plcm8odC0+bWF4X2h3X3NlZ21lbnRzLCBiLT5tYXhfaHdfc2VnbWVudHMpOworCXQtPm1heF9zZWdtZW50X3NpemUgPSBtaW5fbm90X3plcm8odC0+bWF4X3NlZ21lbnRfc2l6ZSwgYi0+bWF4X3NlZ21lbnRfc2l6ZSk7CiAJdC0+aGFyZHNlY3Rfc2l6ZSA9IG1heCh0LT5oYXJkc2VjdF9zaXplLCBiLT5oYXJkc2VjdF9zaXplKTsKIAlpZiAoIXQtPnF1ZXVlX2xvY2spCiAJCVdBUk5fT05fT05DRSgxKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zb2Z0aXJxLmMgYi9ibG9jay9ibGstc29mdGlycS5jCmluZGV4IGU2NjBkMjYuLmNlMGVmYzYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zb2Z0aXJxLmMKKysrIGIvYmxvY2svYmxrLXNvZnRpcnEuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJsa19jb21wbGV0ZV9yZXF1ZXN0KTsKIAotX19pbml0IGludCBibGtfc29mdGlycV9pbml0KHZvaWQpCitzdGF0aWMgX19pbml0IGludCBibGtfc29mdGlycV9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggMjFlMjc1ZC4uYTI5Y2I3OCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTg4LDkgKzg4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJhX2tiOwogCXNzaXplX3QgcmV0ID0gcXVldWVfdmFyX3N0b3JlKCZyYV9rYiwgcGFnZSwgY291bnQpOwogCi0Jc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlxLT5iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzID0gcmFfa2IgPj4gKFBBR0VfQ0FDSEVfU0hJRlQgLSAxMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNywxMCArMTE1LDcgQEAKIAogCWlmIChtYXhfc2VjdG9yc19rYiA+IG1heF9od19zZWN0b3JzX2tiIHx8IG1heF9zZWN0b3JzX2tiIDwgcGFnZV9rYikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JLyoKLQkgKiBUYWtlIHRoZSBxdWV1ZSBsb2NrIHRvIHVwZGF0ZSB0aGUgcmVhZGFoZWFkIGFuZCBtYXhfc2VjdG9ycwotCSAqIHZhbHVlcyBzeW5jaHJvbm91c2x5OgotCSAqLworCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlxLT5tYXhfc2VjdG9ycyA9IG1heF9zZWN0b3JzX2tiIDw8IDE7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRhZy5jIGIvYmxvY2svYmxrLXRhZy5jCmluZGV4IGMwZDQxOWUuLjNjNTE4ZTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10YWcuYworKysgYi9ibG9jay9ibGstdGFnLmMKQEAgLTE1OCw3ICsxNTgsNiBAQAogLyoqCiAgKiBibGtfaW5pdF90YWdzIC0gaW5pdGlhbGl6ZSB0aGUgdGFnIGluZm8gZm9yIGFuIGV4dGVybmFsIHRhZyBtYXAKICAqIEBkZXB0aDoJdGhlIG1heGltdW0gcXVldWUgZGVwdGggc3VwcG9ydGVkCi0gKiBAdGFnczogdGhlIHRhZyB0byB1c2UKICAqKi8KIHN0cnVjdCBibGtfcXVldWVfdGFnICpibGtfaW5pdF90YWdzKGludCBkZXB0aCkKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aW1lb3V0LmMgYi9ibG9jay9ibGstdGltZW91dC5jCmluZGV4IDY5MTg1ZWEuLmEwOTUzNTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aW1lb3V0LmMKKysrIGIvYmxvY2svYmxrLXRpbWVvdXQuYwpAQCAtNzMsMTEgKzczLDcgQEAKICAqLwogdm9pZCBibGtfZGVsZXRlX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSByZXEtPnE7Ci0KIAlsaXN0X2RlbF9pbml0KCZyZXEtPnRpbWVvdXRfbGlzdCk7Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPnRpbWVvdXRfbGlzdCkpCi0JCWRlbF90aW1lcigmcS0+dGltZW91dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsa19ycV90aW1lZF9vdXQoc3RydWN0IHJlcXVlc3QgKnJlcSkKQEAgLTExMSw3ICsxMDcsNyBAQAogdm9pZCBibGtfcnFfdGltZWRfb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKSBkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuaW5pdGlhbGl6ZWRfdmFyKG5leHQpLCBuZXh0X3NldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbmV4dCA9IDA7CiAJc3RydWN0IHJlcXVlc3QgKnJxLCAqdG1wOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwpAQCAtMTI2LDE1ICsxMjIsMTggQEAKIAkJCWlmIChibGtfbWFya19ycV9jb21wbGV0ZShycSkpCiAJCQkJY29udGludWU7CiAJCQlibGtfcnFfdGltZWRfb3V0KHJxKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghbmV4dCB8fCB0aW1lX2FmdGVyKG5leHQsIHJxLT5kZWFkbGluZSkpCisJCQkJbmV4dCA9IHJxLT5kZWFkbGluZTsKIAkJfQotCQlpZiAoIW5leHRfc2V0KSB7Ci0JCQluZXh0ID0gcnEtPmRlYWRsaW5lOwotCQkJbmV4dF9zZXQgPSAxOwotCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIobmV4dCwgcnEtPmRlYWRsaW5lKSkKLQkJCW5leHQgPSBycS0+ZGVhZGxpbmU7CiAJfQogCi0JaWYgKG5leHRfc2V0ICYmICFsaXN0X2VtcHR5KCZxLT50aW1lb3V0X2xpc3QpKQorCS8qCisJICogbmV4dCBjYW4gbmV2ZXIgYmUgMCBoZXJlIHdpdGggdGhlIGxpc3Qgbm9uLWVtcHR5LCBzaW5jZSB3ZSBhbHdheXMKKwkgKiBidW1wIC0+ZGVhZGxpbmUgdG8gMSBzbyB3ZSBjYW4gZGV0ZWN0IGlmIHRoZSB0aW1lciB3YXMgZXZlciBhZGRlZAorCSAqIG9yIG5vdC4gU2VlIGNvbW1lbnQgaW4gYmxrX2FkZF90aW1lcigpCisJICovCisJaWYgKG5leHQpCiAJCW1vZF90aW1lcigmcS0+dGltZW91dCwgcm91bmRfamlmZmllc191cChuZXh0KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDZhMDYyZWUuLmU4NTI1ZmEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTEzNiwxMiArMTEzNiw4IEBACiAJCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKIAkJCW1heF9kaXNwYXRjaCA9IDE7CiAKLQkJaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gbWF4X2Rpc3BhdGNoKSB7Ci0JCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQotCQkJCWJyZWFrOwotCQkJaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gNCAqIG1heF9kaXNwYXRjaCkKLQkJCQlicmVhazsKLQkJfQorCQlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSBtYXhfZGlzcGF0Y2ggJiYgY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQorCQkJYnJlYWs7CiAKIAkJaWYgKGNmcWQtPnN5bmNfZmxpZ2h0ICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQogCQkJYnJlYWs7CkBAIC0xMzE4LDcgKzEzMTQsMTUgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCV9fY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoY2ZxZCwgY2ljKTsKKworCQkvKgorCQkgKiBFbnN1cmUgd2UgZ2V0IGEgZnJlc2ggY29weSBvZiB0aGUgLT5rZXkgdG8gcHJldmVudAorCQkgKiByYWNlIGJldHdlZW4gZXhpdGluZyB0YXNrIGFuZCBxdWV1ZQorCQkgKi8KKwkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7CisJCWlmIChjaWMtPmtleSkKKwkJCV9fY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoY2ZxZCwgY2ljKTsKKwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC0yMTYwLDcgKzIxNjQsNyBAQAogc3RhdGljIHZvaWQgY2ZxX3NodXRkb3duX3RpbWVyX3dxKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKIHsKIAlkZWxfdGltZXJfc3luYygmY2ZxZC0+aWRsZV9zbGljZV90aW1lcik7Ci0Ja2Jsb2NrZF9mbHVzaF93b3JrKCZjZnFkLT51bnBsdWdfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmY2ZxZC0+dW5wbHVnX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfcHV0X2FzeW5jX3F1ZXVlcyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCkBAIC0yMTc4LDcgKzIxODIsNyBAQAogCQljZnFfcHV0X3F1ZXVlKGNmcWQtPmFzeW5jX2lkbGVfY2ZxcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNmcV9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCBjZnFfZXhpdF9xdWV1ZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUpCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gZS0+ZWxldmF0b3JfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGNmcWQtPnF1ZXVlOwpAQCAtMjI4OCw3ICsyMjkyLDcgQEAKIH0KIAogI2RlZmluZSBTSE9XX0ZVTkNUSU9OKF9fRlVOQywgX19WQVIsIF9fQ09OVikJCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKGVsZXZhdG9yX3QgKmUsIGNoYXIgKnBhZ2UpCQkJXAorc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSwgY2hhciAqcGFnZSkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gZS0+ZWxldmF0b3JfZGF0YTsJCQlcCiAJdW5zaWduZWQgaW50IF9fZGF0YSA9IF9fVkFSOwkJCQkJXApAQCAtMjMwOCw3ICsyMzEyLDcgQEAKICN1bmRlZiBTSE9XX0ZVTkNUSU9OCiAKICNkZWZpbmUgU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgsIF9fQ09OVikJCQlcCi1zdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCitzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gZS0+ZWxldmF0b3JfZGF0YTsJCQlcCiAJdW5zaWduZWQgaW50IF9fZGF0YTsJCQkJCQlcCmRpZmYgLS1naXQgYS9ibG9jay9jb21wYXRfaW9jdGwuYyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCmluZGV4IDY3ZWI5M2MuLmY4NzYxNWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCisrKyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCkBAIC03NzQsOSArNzc0LDcgQEAKIAkJYmRpID0gYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKGJkZXYpOwogCQlpZiAoYmRpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT1RUWTsKLQkJbG9ja19rZXJuZWwoKTsKIAkJYmRpLT5yYV9wYWdlcyA9IChhcmcgKiA1MTIpIC8gUEFHRV9DQUNIRV9TSVpFOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAwOwogCWNhc2UgQkxLR0VUU0laRToKIAkJc2l6ZSA9IGJkZXYtPmJkX2lub2RlLT5pX3NpemU7CmRpZmYgLS1naXQgYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKaW5kZXggZmQzMTExNy4uYzRkOTkxZCAxMDA2NDQKLS0tIGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCSYmIGxpc3RfZW1wdHkoJmRkLT5maWZvX2xpc3RbUkVBRF0pOwogfQogCi1zdGF0aWMgdm9pZCBkZWFkbGluZV9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCBkZWFkbGluZV9leGl0X3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBlLT5lbGV2YXRvcl9kYXRhOwogCkBAIC0zODcsNyArMzg3LDcgQEAKIH0KIAogI2RlZmluZSBTSE9XX0ZVTkNUSU9OKF9fRlVOQywgX19WQVIsIF9fQ09OVikJCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKGVsZXZhdG9yX3QgKmUsIGNoYXIgKnBhZ2UpCQkJXAorc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSwgY2hhciAqcGFnZSkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gZS0+ZWxldmF0b3JfZGF0YTsJCQlcCiAJaW50IF9fZGF0YSA9IF9fVkFSOwkJCQkJCVwKQEAgLTQwMyw3ICs0MDMsNyBAQAogI3VuZGVmIFNIT1dfRlVOQ1RJT04KIAogI2RlZmluZSBTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgX19DT05WKQkJCVwKLXN0YXRpYyBzc2l6ZV90IF9fRlVOQyhlbGV2YXRvcl90ICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCVwKK3N0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBlLT5lbGV2YXRvcl9kYXRhOwkJCVwKIAlpbnQgX19kYXRhOwkJCQkJCQlcCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCA4NjgzNmRkLi45ODI1OWVkIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTY1LDcgKzY1LDcgQEAKIHN0YXRpYyBpbnQgZWx2X2lvc2NoZWRfYWxsb3dfbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9hbGxvd19tZXJnZV9mbikKIAkJcmV0dXJuIGUtPm9wcy0+ZWxldmF0b3JfYWxsb3dfbWVyZ2VfZm4ocSwgcnEsIGJpbyk7CkBAIC0yMDgsMTMgKzIwOCwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBlbHZfa3R5cGU7CiAKLXN0YXRpYyBlbGV2YXRvcl90ICplbGV2YXRvcl9hbGxvYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKK3N0YXRpYyBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVsZXZhdG9yX2FsbG9jKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJCSAgc3RydWN0IGVsZXZhdG9yX3R5cGUgKmUpCiB7Ci0JZWxldmF0b3JfdCAqZXE7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcTsKIAlpbnQgaTsKIAotCWVxID0ga21hbGxvY19ub2RlKHNpemVvZihlbGV2YXRvcl90KSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIHEtPm5vZGUpOworCWVxID0ga21hbGxvY19ub2RlKHNpemVvZigqZXEpLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgcS0+bm9kZSk7CiAJaWYgKHVubGlrZWx5KCFlcSkpCiAJCWdvdG8gZXJyOwogCkBAIC0yNDAsOCArMjQwLDkgQEAKIAogc3RhdGljIHZvaWQgZWxldmF0b3JfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKLQllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZTsKIAorCWUgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlLCBrb2JqKTsKIAllbGV2YXRvcl9wdXQoZS0+ZWxldmF0b3JfdHlwZSk7CiAJa2ZyZWUoZS0+aGFzaCk7CiAJa2ZyZWUoZSk7CkBAIC0yOTcsNyArMjk4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZWxldmF0b3JfaW5pdCk7CiAKLXZvaWQgZWxldmF0b3JfZXhpdChlbGV2YXRvcl90ICplKQordm9pZCBlbGV2YXRvcl9leGl0KHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSkKIHsKIAltdXRleF9sb2NrKCZlLT5zeXNmc19sb2NrKTsKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9leGl0X2ZuKQpAQCAtMzExLDcgKzMxMiw3IEBACiAKIHN0YXRpYyB2b2lkIGVsdl9hY3RpdmF0ZV9ycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUgPSBxLT5lbGV2YXRvcjsKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbikKIAkJZS0+b3BzLT5lbGV2YXRvcl9hY3RpdmF0ZV9yZXFfZm4ocSwgcnEpOwpAQCAtMzE5LDcgKzMyMCw3IEBACiAKIHN0YXRpYyB2b2lkIGVsdl9kZWFjdGl2YXRlX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCiAJaWYgKGUtPm9wcy0+ZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4pCiAJCWUtPm9wcy0+ZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4ocSwgcnEpOwpAQCAtMzM4LDcgKzMzOSw3IEBACiAKIHN0YXRpYyB2b2lkIGVsdl9ycWhhc2hfYWRkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCiAJQlVHX09OKEVMVl9PTl9IQVNIKHJxKSk7CiAJaGxpc3RfYWRkX2hlYWQoJnJxLT5oYXNoLCAmZS0+aGFzaFtFTFZfSEFTSF9GTihycV9oYXNoX2tleShycSkpXSk7CkBAIC0zNTIsNyArMzUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXF1ZXN0ICplbHZfcnFoYXNoX2ZpbmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHNlY3Rvcl90IG9mZnNldCkKIHsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhhc2hfbGlzdCA9ICZlLT5oYXNoW0VMVl9IQVNIX0ZOKG9mZnNldCldOwogCXN0cnVjdCBobGlzdF9ub2RlICplbnRyeSwgKm5leHQ7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwpAQCAtNDk0LDcgKzQ5NSw3IEBACiAKIGludCBlbHZfbWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICoqcmVxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCXN0cnVjdCByZXF1ZXN0ICpfX3JxOwogCWludCByZXQ7CiAKQEAgLTUyOSw3ICs1MzAsNyBAQAogCiB2b2lkIGVsdl9tZXJnZWRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgdHlwZSkKIHsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9tZXJnZWRfZm4pCiAJCWUtPm9wcy0+ZWxldmF0b3JfbWVyZ2VkX2ZuKHEsIHJxLCB0eXBlKTsKQEAgLTU0Myw3ICs1NDQsNyBAQAogdm9pZCBlbHZfbWVyZ2VfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCSAgICAgc3RydWN0IHJlcXVlc3QgKm5leHQpCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCiAJaWYgKGUtPm9wcy0+ZWxldmF0b3JfbWVyZ2VfcmVxX2ZuKQogCQllLT5vcHMtPmVsZXZhdG9yX21lcmdlX3JlcV9mbihxLCBycSwgbmV4dCk7CkBAIC03NTUsMTQgKzc1Niw2IEBACiAJaW50IHJldDsKIAogCXdoaWxlICgocnEgPSBfX2Vsdl9uZXh0X3JlcXVlc3QocSkpICE9IE5VTEwpIHsKLQkJLyoKLQkJICogS2lsbCB0aGUgZW1wdHkgYmFycmllciBwbGFjZSBob2xkZXIsIHRoZSBkcml2ZXIgbXVzdAotCQkgKiBub3QgZXZlciBzZWUgaXQuCi0JCSAqLwotCQlpZiAoYmxrX2VtcHR5X2JhcnJpZXIocnEpKSB7Ci0JCQlfX2Jsa19lbmRfcmVxdWVzdChycSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7Ci0JCQljb250aW51ZTsKLQkJfQogCQlpZiAoIShycS0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgZGV2aWNlIGRyaXZlcgpAQCAtODU0LDcgKzg0Nyw3IEBACiAKIGludCBlbHZfcXVldWVfZW1wdHkoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZxLT5xdWV1ZV9oZWFkKSkKIAkJcmV0dXJuIDA7CkBAIC04NjgsNyArODYxLDcgQEAKIAogc3RydWN0IHJlcXVlc3QgKmVsdl9sYXR0ZXJfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUgPSBxLT5lbGV2YXRvcjsKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX2xhdHRlcl9yZXFfZm4pCiAJCXJldHVybiBlLT5vcHMtPmVsZXZhdG9yX2xhdHRlcl9yZXFfZm4ocSwgcnEpOwpAQCAtODc3LDcgKzg3MCw3IEBACiAKIHN0cnVjdCByZXF1ZXN0ICplbHZfZm9ybWVyX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9mb3JtZXJfcmVxX2ZuKQogCQlyZXR1cm4gZS0+b3BzLT5lbGV2YXRvcl9mb3JtZXJfcmVxX2ZuKHEsIHJxKTsKQEAgLTg4Niw3ICs4NzksNyBAQAogCiBpbnQgZWx2X3NldF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGdmcF90IGdmcF9tYXNrKQogewotCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUgPSBxLT5lbGV2YXRvcjsKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX3NldF9yZXFfZm4pCiAJCXJldHVybiBlLT5vcHMtPmVsZXZhdG9yX3NldF9yZXFfZm4ocSwgcnEsIGdmcF9tYXNrKTsKQEAgLTg5Nyw3ICs4OTAsNyBAQAogCiB2b2lkIGVsdl9wdXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUgPSBxLT5lbGV2YXRvcjsKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX3B1dF9yZXFfZm4pCiAJCWUtPm9wcy0+ZWxldmF0b3JfcHV0X3JlcV9mbihycSk7CkBAIC05MDUsNyArODk4LDcgQEAKIAogaW50IGVsdl9tYXlfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBydykKIHsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9tYXlfcXVldWVfZm4pCiAJCXJldHVybiBlLT5vcHMtPmVsZXZhdG9yX21heV9xdWV1ZV9mbihxLCBydyk7CkBAIC05MjgsNyArOTIxLDcgQEAKIAogdm9pZCBlbHZfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CisJc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplID0gcS0+ZWxldmF0b3I7CiAKIAkvKgogCSAqIHJlcXVlc3QgaXMgcmVsZWFzZWQgZnJvbSB0aGUgZHJpdmVyLCBpbyBtdXN0IGJlIGRvbmUKQEAgLTk0NCwxMCArOTM3LDE0IEBACiAJICogZHJhaW5lZCBmb3IgZmx1c2ggc2VxdWVuY2UuCiAJICovCiAJaWYgKHVubGlrZWx5KHEtPm9yZHNlcSkpIHsKLQkJc3RydWN0IHJlcXVlc3QgKmZpcnN0X3JxID0gbGlzdF9lbnRyeV9ycShxLT5xdWV1ZV9oZWFkLm5leHQpOwotCQlpZiAocS0+aW5fZmxpZ2h0ID09IDAgJiYKKwkJc3RydWN0IHJlcXVlc3QgKm5leHQgPSBOVUxMOworCisJCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVfaGVhZCkpCisJCQluZXh0ID0gbGlzdF9lbnRyeV9ycShxLT5xdWV1ZV9oZWFkLm5leHQpOworCisJCWlmICghcS0+aW5fZmxpZ2h0ICYmCiAJCSAgICBibGtfb3JkZXJlZF9jdXJfc2VxKHEpID09IFFVRVVFX09SRFNFUV9EUkFJTiAmJgotCQkgICAgYmxrX29yZGVyZWRfcmVxX3NlcShmaXJzdF9ycSkgPiBRVUVVRV9PUkRTRVFfRFJBSU4pIHsKKwkJICAgICghbmV4dCB8fCBibGtfb3JkZXJlZF9yZXFfc2VxKG5leHQpID4gUVVFVUVfT1JEU0VRX0RSQUlOKSkgewogCQkJYmxrX29yZGVyZWRfY29tcGxldGVfc2VxKHEsIFFVRVVFX09SRFNFUV9EUkFJTiwgMCk7CiAJCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCX0KQEAgLTk1OSwxMyArOTU2LDE0IEBACiBzdGF0aWMgc3NpemVfdAogZWx2X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKIHsKLQllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOwogCXN0cnVjdCBlbHZfZnNfZW50cnkgKmVudHJ5ID0gdG9fZWx2KGF0dHIpOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZTsKIAlzc2l6ZV90IGVycm9yOwogCiAJaWYgKCFlbnRyeS0+c2hvdykKIAkJcmV0dXJuIC1FSU87CiAKKwllID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSwga29iaik7CiAJbXV0ZXhfbG9jaygmZS0+c3lzZnNfbG9jayk7CiAJZXJyb3IgPSBlLT5vcHMgPyBlbnRyeS0+c2hvdyhlLCBwYWdlKSA6IC1FTk9FTlQ7CiAJbXV0ZXhfdW5sb2NrKCZlLT5zeXNmc19sb2NrKTsKQEAgLTk3NiwxMyArOTc0LDE0IEBACiBlbHZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkgICAgICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbmd0aCkKIHsKLQllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOwogCXN0cnVjdCBlbHZfZnNfZW50cnkgKmVudHJ5ID0gdG9fZWx2KGF0dHIpOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZTsKIAlzc2l6ZV90IGVycm9yOwogCiAJaWYgKCFlbnRyeS0+c3RvcmUpCiAJCXJldHVybiAtRUlPOwogCisJZSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUsIGtvYmopOwogCW11dGV4X2xvY2soJmUtPnN5c2ZzX2xvY2spOwogCWVycm9yID0gZS0+b3BzID8gZW50cnktPnN0b3JlKGUsIHBhZ2UsIGxlbmd0aCkgOiAtRU5PRU5UOwogCW11dGV4X3VubG9jaygmZS0+c3lzZnNfbG9jayk7CkBAIC0xMDAxLDcgKzEwMDAsNyBAQAogCiBpbnQgZWx2X3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewotCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUgPSBxLT5lbGV2YXRvcjsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IGtvYmplY3RfYWRkKCZlLT5rb2JqLCAmcS0+a29iaiwgIiVzIiwgImlvc2NoZWQiKTsKQEAgLTEwMTksNyArMTAxOCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCBfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSkKIHsKIAlrb2JqZWN0X3VldmVudCgmZS0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKQEAgLTEwODIsNyArMTA4MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZWxldmF0b3Jfc3dpdGNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqbmV3X2UpCiB7Ci0JZWxldmF0b3JfdCAqb2xkX2VsZXZhdG9yLCAqZTsKKwlzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKm9sZF9lbGV2YXRvciwgKmU7CiAJdm9pZCAqZGF0YTsKIAogCS8qCkBAIC0xMTg4LDcgKzExODcsNyBAQAogCiBzc2l6ZV90IGVsdl9pb3NjaGVkX3Nob3coc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUpCiB7Ci0JZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSA9IHEtPmVsZXZhdG9yOwogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplbHYgPSBlLT5lbGV2YXRvcl90eXBlOwogCXN0cnVjdCBlbGV2YXRvcl90eXBlICpfX2U7CiAJaW50IGxlbiA9IDA7CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCAyZjdmZWRhLi5kODRhN2RmIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTE4MSw2ICsxODEsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRpc2tfcGFydF9pdGVyX2V4aXQpOwogCitzdGF0aWMgaW5saW5lIGludCBzZWN0b3JfaW5fcGFydChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0LCBzZWN0b3JfdCBzZWN0b3IpCit7CisJcmV0dXJuIHBhcnQtPnN0YXJ0X3NlY3QgPD0gc2VjdG9yICYmCisJCXNlY3RvciA8IHBhcnQtPnN0YXJ0X3NlY3QgKyBwYXJ0LT5ucl9zZWN0czsKK30KKwogLyoqCiAgKiBkaXNrX21hcF9zZWN0b3JfcmN1IC0gbWFwIHNlY3RvciB0byBwYXJ0aXRpb24KICAqIEBkaXNrOiBnZW5kaXNrIG9mIGludGVyZXN0CkBAIC0xOTksMTYgKzIwNSwyMiBAQAogc3RydWN0IGhkX3N0cnVjdCAqZGlza19tYXBfc2VjdG9yX3JjdShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKQogewogCXN0cnVjdCBkaXNrX3BhcnRfdGJsICpwdGJsOworCXN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQ7CiAJaW50IGk7CiAKIAlwdGJsID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stPnBhcnRfdGJsKTsKIAotCWZvciAoaSA9IDE7IGkgPCBwdGJsLT5sZW47IGkrKykgewotCQlzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0ID0gcmN1X2RlcmVmZXJlbmNlKHB0YmwtPnBhcnRbaV0pOworCXBhcnQgPSByY3VfZGVyZWZlcmVuY2UocHRibC0+bGFzdF9sb29rdXApOworCWlmIChwYXJ0ICYmIHNlY3Rvcl9pbl9wYXJ0KHBhcnQsIHNlY3RvcikpCisJCXJldHVybiBwYXJ0OwogCi0JCWlmIChwYXJ0ICYmIHBhcnQtPnN0YXJ0X3NlY3QgPD0gc2VjdG9yICYmCi0JCSAgICBzZWN0b3IgPCBwYXJ0LT5zdGFydF9zZWN0ICsgcGFydC0+bnJfc2VjdHMpCisJZm9yIChpID0gMTsgaSA8IHB0YmwtPmxlbjsgaSsrKSB7CisJCXBhcnQgPSByY3VfZGVyZWZlcmVuY2UocHRibC0+cGFydFtpXSk7CisKKwkJaWYgKHBhcnQgJiYgc2VjdG9yX2luX3BhcnQocGFydCwgc2VjdG9yKSkgeworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHB0YmwtPmxhc3RfbG9va3VwLCBwYXJ0KTsKIAkJCXJldHVybiBwYXJ0OworCQl9CiAJfQogCXJldHVybiAmZGlzay0+cGFydDA7CiB9CkBAIC04ODgsOCArOTAwLDExIEBACiAJc3RydWN0IGRpc2tfcGFydF90YmwgKm9sZF9wdGJsID0gZGlzay0+cGFydF90Ymw7CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGlzay0+cGFydF90YmwsIG5ld19wdGJsKTsKLQlpZiAob2xkX3B0YmwpCisKKwlpZiAob2xkX3B0YmwpIHsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG9sZF9wdGJsLT5sYXN0X2xvb2t1cCwgTlVMTCk7CiAJCWNhbGxfcmN1KCZvbGRfcHRibC0+cmN1X2hlYWQsIGRpc2tfZnJlZV9wdGJsX3JjdV9jYik7CisJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IGQwMzk4NWIuLjBmMjJlNjIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMzIzLDkgKzMyMyw3IEBACiAJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKIAkJaWYgKGJkaSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9UVFk7Ci0JCWxvY2tfa2VybmVsKCk7CiAJCWJkaS0+cmFfcGFnZXMgPSAoYXJnICogNTEyKSAvIFBBR0VfQ0FDSEVfU0laRTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsKIAljYXNlIEJMS0JTWlNFVDoKIAkJLyogc2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKi8KZGlmZiAtLWdpdCBhL2Jsb2NrL25vb3AtaW9zY2hlZC5jIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKaW5kZXggYzIzZTAyOS4uM2EwZDM2OSAxMDA2NDQKLS0tIGEvYmxvY2svbm9vcC1pb3NjaGVkLmMKKysrIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAlyZXR1cm4gbmQ7CiB9CiAKLXN0YXRpYyB2b2lkIG5vb3BfZXhpdF9xdWV1ZShlbGV2YXRvcl90ICplKQorc3RhdGljIHZvaWQgbm9vcF9leGl0X3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSkKIHsKIAlzdHJ1Y3Qgbm9vcF9kYXRhICpuZCA9IGUtPmVsZXZhdG9yX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCBkMGJiOTJjLi5lZTljNjdkIDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC02MCw3ICs2MCw3IEBACiAKIHN0YXRpYyBpbnQgc2dfZ2V0X3RpbWVvdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JcmV0dXJuIHEtPnNnX3RpbWVvdXQgLyAoSFogLyBVU0VSX0haKTsKKwlyZXR1cm4gamlmZmllc190b19jbG9ja190KHEtPnNnX3RpbWVvdXQpOwogfQogCiBzdGF0aWMgaW50IHNnX3NldF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgX191c2VyICpwKQpAQCAtNjgsNyArNjgsNyBAQAogCWludCB0aW1lb3V0LCBlcnIgPSBnZXRfdXNlcih0aW1lb3V0LCBwKTsKIAogCWlmICghZXJyKQotCQlxLT5zZ190aW1lb3V0ID0gdGltZW91dCAqIChIWiAvIFVTRVJfSFopOworCQlxLT5zZ190aW1lb3V0ID0gY2xvY2tfdF90b19qaWZmaWVzKHRpbWVvdXQpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBhNjdiOGU3Li42NTY0NDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xMTE5LDE0ICsxMTE5LDE0IEBACiAKIAkvKiB0dXJuIG9uIExFRHMgKi8KIAlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRU0pIHsKLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewogCQkJZW1wID0gJnBwLT5lbV9wcml2W2xpbmstPnBtcF07CiAJCQlhaGNpX3RyYW5zbWl0X2xlZF9tZXNzYWdlKGFwLCBlbXAtPmxlZF9zdGF0ZSwgNCk7CiAJCX0KIAl9CiAKIAlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU1dfQUNUSVZJVFkpCi0JCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApCisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQogCQkJYWhjaV9pbml0X3N3X2FjdGl2aXR5KGxpbmspOwogCiB9CkBAIC0xMzYxLDcgKzEzNjEsNyBAQAogCXN0cnVjdCBhaGNpX2VtX3ByaXYgKmVtcDsKIAlpbnQgcmMgPSAwOwogCi0JYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CiAJCWVtcCA9ICZwcC0+ZW1fcHJpdltsaW5rLT5wbXBdOwogCQlyYyArPSBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgZW1wLT5sZWRfc3RhdGUpOwogCX0KQEAgLTE5NDEsNyArMTk0MSw3IEBACiAJdTMyIHNlcnJvcjsKIAogCS8qIGRldGVybWluZSBhY3RpdmUgbGluayAqLwotCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApCisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpCiAJCWlmIChhdGFfbGlua19hY3RpdmUobGluaykpCiAJCQlicmVhazsKIAlpZiAoIWxpbmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCA1YzMzNzY3Li5kYzQ4YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKQEAgLTU3LDEwICs1Nyw3IEBACiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NFTkFURUspCiAJCWRtYV9lbmFibGVkID0gMHhGRjsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKLQkJCWNvbnRpbnVlOwotCisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJLyogV2UgZG9uJ3QgcmVhbGx5IGNhcmUgKi8KIAkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CiAJCWRldi0+ZG1hX21vZGUgPSBYRkVSX01XX0RNQV8wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggYzExOTM2ZS4uNWZkZjE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0xMDcyLDIwICsxMDcyLDEzIEBACiAJICogbWF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgZG1pX3N5c3RlbV9pZC5tYXRjaGVzIGlzCiAJICogbGltaXRlZCB0byBmb3VyIGVudHJpZXMuCiAJICovCi0JaWYgKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpICYmCi0JICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSkgJiYKLQkgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSAmJgotCSAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1NFUklBTCkgJiYKLQkgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfVkVORE9SKSAmJgotCSAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKSAmJgotCSAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRVJTSU9OKSAmJgotCSAgICAhc3RyY21wKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpLCAiVE9TSElCQSIpICYmCi0JICAgICFzdHJjbXAoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKSwgIjAwMDAwMCIpICYmCi0JICAgICFzdHJjbXAoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9WRVJTSU9OKSwgIjAwMDAwMCIpICYmCi0JICAgICFzdHJjbXAoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9TRVJJQUwpLCAiMDAwMDAwIikgJiYKLQkgICAgIXN0cmNtcChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRU5ET1IpLCAiVE9TSElCQSIpICYmCi0JICAgICFzdHJjbXAoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSksICJQb3J0YWJsZSBQQyIpICYmCi0JICAgICFzdHJjbXAoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfVkVSU0lPTiksICJWZXJzaW9uIEEwIikpCisJaWYgKGRtaV9tYXRjaChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSAmJgorCSAgICBkbWlfbWF0Y2goRE1JX1BST0RVQ1RfTkFNRSwgIjAwMDAwMCIpICYmCisJICAgIGRtaV9tYXRjaChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMDAwMDAwIikgJiYKKwkgICAgZG1pX21hdGNoKERNSV9QUk9EVUNUX1NFUklBTCwgIjAwMDAwMCIpICYmCisJICAgIGRtaV9tYXRjaChETUlfQk9BUkRfVkVORE9SLCAiVE9TSElCQSIpICYmCisJICAgIGRtaV9tYXRjaChETUlfQk9BUkRfTkFNRSwgIlBvcnRhYmxlIFBDIikgJiYKKwkgICAgZG1pX21hdGNoKERNSV9CT0FSRF9WRVJTSU9OLCAiVmVyc2lvbiBBMCIpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKaW5kZXggYzAxMjMwNy4uZWYwMmU0ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtODksNyArODksNyBAQAogCiAJCWFwLT5saW5rLmRldmljZS0+YWNwaV9oYW5kbGUgPSBOVUxMOwogCi0JCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJCWFjcGlfaW50ZWdlciBhZHIgPSBTQVRBX0FEUihhcC0+cG9ydF9ubywgbGluay0+cG1wKTsKIAogCQkJbGluay0+ZGV2aWNlLT5hY3BpX2hhbmRsZSA9CkBAIC0xMjksOCArMTI5LDggQEAKIAkJc3RydWN0IGF0YV9saW5rICp0bGluazsKIAkJc3RydWN0IGF0YV9kZXZpY2UgKnRkZXY7CiAKLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayh0bGluaywgYXApCi0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYodGRldiwgdGxpbmspCisJCWF0YV9mb3JfZWFjaF9saW5rKHRsaW5rLCBhcCwgRURHRSkKKwkJCWF0YV9mb3JfZWFjaF9kZXYodGRldiwgdGxpbmssIEFMTCkKIAkJCQl0ZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfREVUQUNIOwogCX0KIApAQCAtNTg4LDEyICs1ODgsOSBAQAogewogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAKLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBFTkFCTEVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgeGZlcl9tYXNrLCB1ZG1hX21hc2s7CiAKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKLQkJCWNvbnRpbnVlOwotCiAJCXhmZXJfbWFzayA9IGF0YV9hY3BpX2d0bV94ZmVybWFzayhkZXYsIGd0bSk7CiAJCWF0YV91bnBhY2tfeGZlcm1hc2soeGZlcl9tYXNrLCBOVUxMLCBOVUxMLCAmdWRtYV9tYXNrKTsKIApAQCAtODkzLDcgKzg5MCw3IEBACiAJCSAqIHVzZSB2YWx1ZXMgc2V0IGJ5IF9TVE0uICBDYWNoZSBfR1RGIHJlc3VsdCBhbmQKIAkJICogc2NoZWR1bGUgX0dURi4KIAkJICovCi0JCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgeworCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpIHsKIAkJCWF0YV9hY3BpX2NsZWFyX2d0ZihkZXYpOwogCQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpICYmCiAJCQkgICAgYXRhX2Rldl9nZXRfR1RGKGRldiwgTlVMTCkgPj0gMCkKQEAgLTkwNCw3ICs5MDEsNyBAQAogCQkgKiB0aGVyZSdzIG5vIHJlYXNvbiB0byBldmFsdWF0ZSBJREUgX0dURiBlYXJseQogCQkgKiB3aXRob3V0IF9TVE0uICBDbGVhciBjYWNoZSBhbmQgc2NoZWR1bGUgX0dURi4KIAkJICovCi0JCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgeworCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpIHsKIAkJCWF0YV9hY3BpX2NsZWFyX2d0ZihkZXYpOwogCQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpKQogCQkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0FDUElfUEVORElORzsKQEAgLTkzMiw4ICs5MjksOCBAQAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGFwLT5hY3BpX2hhbmRsZSwgQUNQSV9TVEFURV9EMCk7CiAKLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmspIHsKLQkJaWYgKGRldi0+YWNwaV9oYW5kbGUgJiYgYXRhX2Rldl9lbmFibGVkKGRldikpCisJYXRhX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaywgRU5BQkxFRCkgeworCQlpZiAoZGV2LT5hY3BpX2hhbmRsZSkKIAkJCWFjcGlfYnVzX3NldF9wb3dlcihkZXYtPmFjcGlfaGFuZGxlLAogCQkJCXN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OID8KIAkJCQkJQUNQSV9TVEFURV9EMCA6IEFDUElfU1RBVEVfRDMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggYmM2Njk1ZS4uZmVjY2E0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC0xNjMsNDMgKzE2MywxMTkgQEAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAogCi0vKgotICogSXRlcmF0b3IgaGVscGVycy4gIERvbid0IHVzZSBkaXJlY3RseS4KKy8qKgorICoJYXRhX2xpbmtfbmV4dCAtIGxpbmsgaXRlcmF0aW9uIGhlbHBlcgorICoJQGxpbms6IHRoZSBwcmV2aW91cyBsaW5rLCBOVUxMIHRvIHN0YXJ0CisgKglAYXA6IEFUQSBwb3J0IGNvbnRhaW5pbmcgbGlua3MgdG8gaXRlcmF0ZQorICoJQG1vZGU6IGl0ZXJhdGlvbiBtb2RlLCBvbmUgb2YgQVRBX0xJVEVSXyoKICAqCi0gKiBMT0NLSU5HOgotICogSG9zdCBsb2NrIG9yIEVIIGNvbnRleHQuCisgKglMT0NLSU5HOgorICoJSG9zdCBsb2NrIG9yIEVIIGNvbnRleHQuCisgKgorICoJUkVUVVJOUzoKKyAqCVBvaW50ZXIgdG8gdGhlIG5leHQgbGluay4KICAqLwotc3RydWN0IGF0YV9saW5rICpfX2F0YV9wb3J0X25leHRfbGluayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCSAgICAgIHN0cnVjdCBhdGFfbGluayAqbGluaywgYm9vbCBkZXZfb25seSkKK3N0cnVjdCBhdGFfbGluayAqYXRhX2xpbmtfbmV4dChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkgICAgICAgZW51bSBhdGFfbGlua19pdGVyX21vZGUgbW9kZSkKIHsKLQkvKiBOVUxMIGxpbmsgaW5kaWNhdGVzIHN0YXJ0IG9mIGl0ZXJhdGlvbiAqLwotCWlmICghbGluaykgewotCQlpZiAoZGV2X29ubHkgJiYgc2F0YV9wbXBfYXR0YWNoZWQoYXApKQotCQkJcmV0dXJuIGFwLT5wbXBfbGluazsKLQkJcmV0dXJuICZhcC0+bGluazsKLQl9CisJQlVHX09OKG1vZGUgIT0gQVRBX0xJVEVSX0VER0UgJiYKKwkgICAgICAgbW9kZSAhPSBBVEFfTElURVJfUE1QX0ZJUlNUICYmIG1vZGUgIT0gQVRBX0xJVEVSX0hPU1RfRklSU1QpOwogCi0JLyogd2UganVzdCBpdGVyYXRlZCBvdmVyIHRoZSBob3N0IG1hc3RlciBsaW5rLCB3aGF0J3MgbmV4dD8gKi8KLQlpZiAobGluayA9PSAmYXAtPmxpbmspIHsKLQkJaWYgKCFzYXRhX3BtcF9hdHRhY2hlZChhcCkpIHsKLQkJCWlmICh1bmxpa2VseShhcC0+c2xhdmVfbGluaykgJiYgIWRldl9vbmx5KQorCS8qIE5VTEwgbGluayBpbmRpY2F0ZXMgc3RhcnQgb2YgaXRlcmF0aW9uICovCisJaWYgKCFsaW5rKQorCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBBVEFfTElURVJfRURHRToKKwkJY2FzZSBBVEFfTElURVJfUE1QX0ZJUlNUOgorCQkJaWYgKHNhdGFfcG1wX2F0dGFjaGVkKGFwKSkKKwkJCQlyZXR1cm4gYXAtPnBtcF9saW5rOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgQVRBX0xJVEVSX0hPU1RfRklSU1Q6CisJCQlyZXR1cm4gJmFwLT5saW5rOworCQl9CisKKwkvKiB3ZSBqdXN0IGl0ZXJhdGVkIG92ZXIgdGhlIGhvc3QgbGluaywgd2hhdCdzIG5leHQ/ICovCisJaWYgKGxpbmsgPT0gJmFwLT5saW5rKQorCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBBVEFfTElURVJfSE9TVF9GSVJTVDoKKwkJCWlmIChzYXRhX3BtcF9hdHRhY2hlZChhcCkpCisJCQkJcmV0dXJuIGFwLT5wbXBfbGluazsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIEFUQV9MSVRFUl9QTVBfRklSU1Q6CisJCQlpZiAodW5saWtlbHkoYXAtPnNsYXZlX2xpbmspKQogCQkJCXJldHVybiBhcC0+c2xhdmVfbGluazsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIEFUQV9MSVRFUl9FREdFOgogCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJcmV0dXJuIGFwLT5wbXBfbGluazsKLQl9CiAKIAkvKiBzbGF2ZV9saW5rIGV4Y2x1ZGVzIFBNUCAqLwogCWlmICh1bmxpa2VseShsaW5rID09IGFwLT5zbGF2ZV9saW5rKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBpdGVyYXRlIHRvIHRoZSBuZXh0IFBNUCBsaW5rICovCisJLyogd2Ugd2VyZSBvdmVyIGEgUE1QIGxpbmsgKi8KIAlpZiAoKytsaW5rIDwgYXAtPnBtcF9saW5rICsgYXAtPm5yX3BtcF9saW5rcykKIAkJcmV0dXJuIGxpbms7CisKKwlpZiAobW9kZSA9PSBBVEFfTElURVJfUE1QX0ZJUlNUKQorCQlyZXR1cm4gJmFwLT5saW5rOworCiAJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgorICoJYXRhX2Rldl9uZXh0IC0gZGV2aWNlIGl0ZXJhdGlvbiBoZWxwZXIKKyAqCUBkZXY6IHRoZSBwcmV2aW91cyBkZXZpY2UsIE5VTEwgdG8gc3RhcnQKKyAqCUBsaW5rOiBBVEEgbGluayBjb250YWluaW5nIGRldmljZXMgdG8gaXRlcmF0ZQorICoJQG1vZGU6IGl0ZXJhdGlvbiBtb2RlLCBvbmUgb2YgQVRBX0RJVEVSXyoKKyAqCisgKglMT0NLSU5HOgorICoJSG9zdCBsb2NrIG9yIEVIIGNvbnRleHQuCisgKgorICoJUkVUVVJOUzoKKyAqCVBvaW50ZXIgdG8gdGhlIG5leHQgZGV2aWNlLgorICovCitzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2Rldl9uZXh0KHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHN0cnVjdCBhdGFfbGluayAqbGluaywKKwkJCQllbnVtIGF0YV9kZXZfaXRlcl9tb2RlIG1vZGUpCit7CisJQlVHX09OKG1vZGUgIT0gQVRBX0RJVEVSX0VOQUJMRUQgJiYgbW9kZSAhPSBBVEFfRElURVJfRU5BQkxFRF9SRVZFUlNFICYmCisJICAgICAgIG1vZGUgIT0gQVRBX0RJVEVSX0FMTCAmJiBtb2RlICE9IEFUQV9ESVRFUl9BTExfUkVWRVJTRSk7CisKKwkvKiBOVUxMIGRldiBpbmRpY2F0ZXMgc3RhcnQgb2YgaXRlcmF0aW9uICovCisJaWYgKCFkZXYpCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIEFUQV9ESVRFUl9FTkFCTEVEOgorCQljYXNlIEFUQV9ESVRFUl9BTEw6CisJCQlkZXYgPSBsaW5rLT5kZXZpY2U7CisJCQlnb3RvIGNoZWNrOworCQljYXNlIEFUQV9ESVRFUl9FTkFCTEVEX1JFVkVSU0U6CisJCWNhc2UgQVRBX0RJVEVSX0FMTF9SRVZFUlNFOgorCQkJZGV2ID0gbGluay0+ZGV2aWNlICsgYXRhX2xpbmtfbWF4X2RldmljZXMobGluaykgLSAxOworCQkJZ290byBjaGVjazsKKwkJfQorCisgbmV4dDoKKwkvKiBtb3ZlIHRvIHRoZSBuZXh0IG9uZSAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQVRBX0RJVEVSX0VOQUJMRUQ6CisJY2FzZSBBVEFfRElURVJfQUxMOgorCQlpZiAoKytkZXYgPCBsaW5rLT5kZXZpY2UgKyBhdGFfbGlua19tYXhfZGV2aWNlcyhsaW5rKSkKKwkJCWdvdG8gY2hlY2s7CisJCXJldHVybiBOVUxMOworCWNhc2UgQVRBX0RJVEVSX0VOQUJMRURfUkVWRVJTRToKKwljYXNlIEFUQV9ESVRFUl9BTExfUkVWRVJTRToKKwkJaWYgKC0tZGV2ID49IGxpbmstPmRldmljZSkKKwkJCWdvdG8gY2hlY2s7CisJCXJldHVybiBOVUxMOworCX0KKworIGNoZWNrOgorCWlmICgobW9kZSA9PSBBVEFfRElURVJfRU5BQkxFRCB8fCBtb2RlID09IEFUQV9ESVRFUl9FTkFCTEVEX1JFVkVSU0UpICYmCisJICAgICFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKKwkJZ290byBuZXh0OworCXJldHVybiBkZXY7Cit9CisKKy8qKgogICoJYXRhX2Rldl9waHlzX2xpbmsgLSBmaW5kIHBoeXNpY2FsIGxpbmsgZm9yIGEgZGV2aWNlCiAgKglAZGV2OiBBVEEgZGV2aWNlIHRvIGxvb2sgdXAgcGh5c2ljYWwgbGluayBmb3IKICAqCkBAIC0xMTA3LDggKzExODMsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgewogCQlhcCA9IGhvc3QtPnBvcnRzW2ldOwotCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7Ci0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQorCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgeworCQkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkKIAkJCQlhdGFfZGV2X2Rpc2FibGVfcG0oZGV2KTsKIAkJfQogCX0KQEAgLTI1OTQsMTEgKzI2NzAsMTEgQEAKIAogCWF0YV9wb3J0X3Byb2JlKGFwKTsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpCiAJCXRyaWVzW2Rldi0+ZGV2bm9dID0gQVRBX1BST0JFX01BWF9UUklFUzsKIAogIHJldHJ5OgotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmssIEFMTCkgewogCQkvKiBJZiB3ZSBpc3N1ZSBhbiBTUlNUIHRoZW4gYW4gQVRBIGRyaXZlIChub3QgQVRBUEkpCiAJCSAqIG1heSBjaGFuZ2UgY29uZmlndXJhdGlvbiBhbmQgYmUgaW4gUElPMCB0aW1pbmcuIElmCiAJCSAqIHdlIGRvIGEgaGFyZCByZXNldCAob3IgYXJlIGNvbWluZyBmcm9tIHBvd2VyIG9uKQpAQCAtMjYyMCw3ICsyNjk2LDcgQEAKIAkvKiByZXNldCBhbmQgZGV0ZXJtaW5lIGRldmljZSBjbGFzc2VzICovCiAJYXAtPm9wcy0+cGh5X3Jlc2V0KGFwKTsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmssIEFMTCkgewogCQlpZiAoIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkgJiYKIAkJICAgIGRldi0+Y2xhc3MgIT0gQVRBX0RFVl9VTktOT1dOKQogCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IGRldi0+Y2xhc3M7CkBAIC0yNjM2LDcgKzI3MTIsNyBAQAogCSAgIHNwZWNpZmljIHNlcXVlbmNlIGJhc3MtYWNrd2FyZHMgc28gdGhhdCBQRElBRy0gaXMgcmVsZWFzZWQgYnkKIAkgICB0aGUgc2xhdmUgZGV2aWNlICovCiAKLQlhdGFfbGlua19mb3JfZWFjaF9kZXZfcmV2ZXJzZShkZXYsICZhcC0+bGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmssIEFMTF9SRVZFUlNFKSB7CiAJCWlmICh0cmllc1tkZXYtPmRldm5vXSkKIAkJCWRldi0+Y2xhc3MgPSBjbGFzc2VzW2Rldi0+ZGV2bm9dOwogCkBAIC0yNjUzLDI0ICsyNzI5LDE5IEBACiAJaWYgKGFwLT5vcHMtPmNhYmxlX2RldGVjdCkKIAkJYXAtPmNibCA9IGFwLT5vcHMtPmNhYmxlX2RldGVjdChhcCk7CiAKLQkvKiBXZSBtYXkgaGF2ZSBTQVRBIGJyaWRnZSBnbHVlIGhpZGluZyBoZXJlIGlycmVzcGVjdGl2ZSBvZiB0aGUKLQkgICByZXBvcnRlZCBjYWJsZSB0eXBlcyBhbmQgc2Vuc2VkIHR5cGVzICovCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rKSB7Ci0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCi0JCQljb250aW51ZTsKLQkJLyogU0FUQSBkcml2ZXMgaW5kaWNhdGUgd2UgaGF2ZSBhIGJyaWRnZS4gV2UgZG9uJ3Qga25vdyB3aGljaAotCQkgICBlbmQgb2YgdGhlIGxpbmsgdGhlIGJyaWRnZSBpcyB3aGljaCBpcyBhIHByb2JsZW0gKi8KKwkvKiBXZSBtYXkgaGF2ZSBTQVRBIGJyaWRnZSBnbHVlIGhpZGluZyBoZXJlIGlycmVzcGVjdGl2ZSBvZgorCSAqIHRoZSByZXBvcnRlZCBjYWJsZSB0eXBlcyBhbmQgc2Vuc2VkIHR5cGVzLiAgV2hlbiBTQVRBCisJICogZHJpdmVzIGluZGljYXRlIHdlIGhhdmUgYSBicmlkZ2UsIHdlIGRvbid0IGtub3cgd2hpY2ggZW5kCisJICogb2YgdGhlIGxpbmsgdGhlIGJyaWRnZSBpcyB3aGljaCBpcyBhIHByb2JsZW0uCisJICovCisJYXRhX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaywgRU5BQkxFRCkKIAkJaWYgKGF0YV9pZF9pc19zYXRhKGRldi0+aWQpKQogCQkJYXAtPmNibCA9IEFUQV9DQkxfU0FUQTsKLQl9CiAKIAkvKiBBZnRlciB0aGUgaWRlbnRpZnkgc2VxdWVuY2Ugd2UgY2FuIG5vdyBzZXQgdXAgdGhlIGRldmljZXMuIFdlIGRvCiAJICAgdGhpcyBpbiB0aGUgbm9ybWFsIG9yZGVyIHNvIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBnZXQgY29uZnVzZWQgKi8KIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykgewotCQlpZiAoIWF0YV9kZXZfZW5hYmxlZChkZXYpKQotCQkJY29udGludWU7Ci0KKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBFTkFCTEVEKSB7CiAJCWFwLT5saW5rLmVoX2NvbnRleHQuaS5mbGFncyB8PSBBVEFfRUhJX1BSSU5USU5GTzsKIAkJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOwogCQlhcC0+bGluay5laF9jb250ZXh0LmkuZmxhZ3MgJj0gfkFUQV9FSElfUFJJTlRJTkZPOwpAQCAtMjY4Myw5ICsyNzU0LDggQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykKLQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpKQotCQkJcmV0dXJuIDA7CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaywgRU5BQkxFRCkKKwkJcmV0dXJuIDA7CiAKIAkvKiBubyBkZXZpY2UgcHJlc2VudCwgZGlzYWJsZSBwb3J0ICovCiAJYXRhX3BvcnRfZGlzYWJsZShhcCk7CkBAIC0zMzMxLDEzICszNDAxLDEwIEBACiAJaW50IHJjID0gMCwgdXNlZF9kbWEgPSAwLCBmb3VuZCA9IDA7CiAKIAkvKiBzdGVwIDE6IGNhbGN1bGF0ZSB4ZmVyX21hc2sgKi8KLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBwaW9fbWFzaywgZG1hX21hc2s7CiAJCXVuc2lnbmVkIGludCBtb2RlX21hc2s7CiAKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKLQkJCWNvbnRpbnVlOwotCiAJCW1vZGVfbWFzayA9IEFUQV9ETUFfTUFTS19BVEE7CiAJCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkpCiAJCQltb2RlX21hc2sgPSBBVEFfRE1BX01BU0tfQVRBUEk7CkBAIC0zMzY2LDEwICszNDMzLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBzdGVwIDI6IGFsd2F5cyBzZXQgaG9zdCBQSU8gdGltaW5ncyAqLwotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKLQkJCWNvbnRpbnVlOwotCisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJaWYgKGRldi0+cGlvX21vZGUgPT0gMHhmZikgewogCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsICJubyBQSU8gc3VwcG9ydFxuIik7CiAJCQlyYyA9IC1FSU5WQUw7CkBAIC0zMzgzLDggKzM0NDcsOCBAQAogCX0KIAogCS8qIHN0ZXAgMzogc2V0IGhvc3QgRE1BIHRpbWluZ3MgKi8KLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7Ci0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgfHwgIWF0YV9kbWFfZW5hYmxlZChkZXYpKQorCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CisJCWlmICghYXRhX2RtYV9lbmFibGVkKGRldikpCiAJCQljb250aW51ZTsKIAogCQlkZXYtPnhmZXJfbW9kZSA9IGRldi0+ZG1hX21vZGU7CkBAIC0zMzk0LDExICszNDU4LDcgQEAKIAl9CiAKIAkvKiBzdGVwIDQ6IHVwZGF0ZSBkZXZpY2VzJyB4ZmVyIG1vZGUgKi8KLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7Ci0JCS8qIGRvbid0IHVwZGF0ZSBzdXNwZW5kZWQgZGV2aWNlcycgeGZlciBtb2RlICovCi0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCi0JCQljb250aW51ZTsKLQorCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCXJjID0gYXRhX2Rldl9zZXRfbW9kZShkZXYpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKQEAgLTQwNDgsNiArNDEwOCw3IEBACiAJeyAiTWF4dG9yIDdWMzAwRjAiLAkiVkExMTE2MzAiLAlBVEFfSE9SS0FHRV9OT05DUSB9LAogCXsgIlNUMzgwODE3QVMiLAkJIjMuNDIiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfSwKIAl7ICJTVDMxNjAwMjNBUyIsCSIzLjQyIiwJCUFUQV9IT1JLQUdFX05PTkNRIH0sCisJeyAiT0NaIENPUkVfU1NEIiwJIjAyLjEwMTA0IiwJQVRBX0hPUktBR0VfTk9OQ1EgfSwKIAogCS8qIFNlYWdhdGUgTkNRICsgRkxVU0ggQ0FDSEUgZmlybXdhcmUgYnVnICovCiAJeyAiU1QzMTUwMDM0MUFTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfApAQCAtNDI2Myw5ICs0MzI0LDkgQEAKIAkgKiAtIGlmIHlvdSBoYXZlIGEgbm9uIGRldGVjdCBjYXBhYmxlIGRyaXZlIHlvdSBkb24ndCB3YW50IGl0CiAJICogICB0byBjb2xvdXIgdGhlIGNob2ljZQogCSAqLwotCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKLQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpICYmICFhdGFfaXNfNDB3aXJlKGRldikpCisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKKwkJCWlmICghYXRhX2lzXzQwd2lyZShkZXYpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNDY3Miw3ICs0NzMzLDYgQEAKIC8qKgogICoJYXRhX3FjX25ld19pbml0IC0gUmVxdWVzdCBhbiBhdmFpbGFibGUgQVRBIGNvbW1hbmQsIGFuZCBpbml0aWFsaXplIGl0CiAgKglAZGV2OiBEZXZpY2UgZnJvbSB3aG9tIHdlIHJlcXVlc3QgYW4gYXZhaWxhYmxlIGNvbW1hbmQgc3RydWN0dXJlCi0gKglAdGFnOiBjb21tYW5kIHRhZwogICoKICAqCUxPQ0tJTkc6CiAgKglOb25lLgpAQCAtNTIxOCw3ICs1Mjc4LDcgQEAKIAkJfQogCiAJCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX1BNX1BFTkRJTkc7Ci0JCV9fYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgSE9TVF9GSVJTVCkgewogCQkJbGluay0+ZWhfaW5mby5hY3Rpb24gfD0gYWN0aW9uOwogCQkJbGluay0+ZWhfaW5mby5mbGFncyB8PSBlaGlfZmxhZ3M7CiAJCX0KQEAgLTYwNDcsOCArNjEwNyw2IEBACiBzdGF0aWMgdm9pZCBhdGFfcG9ydF9kZXRhY2goc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdGFfbGluayAqbGluazsKLQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCiAJaWYgKCFhcC0+b3BzLT5lcnJvcl9oYW5kbGVyKQogCQlnb3RvIHNraXBfZWg7CkBAIC02MDU2LDI4ICs2MTE0LDE1IEBACiAJLyogdGVsbCBFSCB3ZSdyZSBsZWF2aW5nICYgZmx1c2ggRUggKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwogCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX1VOTE9BRElORzsKKwlhdGFfcG9ydF9zY2hlZHVsZV9laChhcCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCisJLyogd2FpdCB0aWxsIEVIIGNvbW1pdHMgc3VpY2lkZSAqLwogCWF0YV9wb3J0X3dhaXRfZWgoYXApOwogCi0JLyogRUggaXMgbm93IGd1YXJhbnRlZWQgdG8gc2VlIFVOTE9BRElORyAtIEVIIGNvbnRleHQgYmVsb25ncwotCSAqIHRvIHVzLiAgUmVzdG9yZSBTQ29udHJvbCBhbmQgZGlzYWJsZSBhbGwgZXhpc3RpbmcgZGV2aWNlcy4KLQkgKi8KLQlfX2F0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKLQkJc2F0YV9zY3Jfd3JpdGUobGluaywgU0NSX0NPTlRST0wsIGxpbmstPnNhdmVkX3Njb250cm9sICYgMHhmZjApOwotCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQotCQkJYXRhX2Rldl9kaXNhYmxlKGRldik7Ci0JfQorCS8qIGl0IGJldHRlciBiZSBkZWFkIG5vdyAqLworCVdBUk5fT04oIShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX1VOTE9BREVEKSk7CiAKLQkvKiBGaW5hbCBmcmVlemUgJiBFSC4gIEFsbCBpbi1mbGlnaHQgY29tbWFuZHMgYXJlIGFib3J0ZWQuICBFSAotCSAqIHdpbGwgYmUgc2tpcHBlZCBhbmQgcmV0cmlhbHMgd2lsbCBiZSB0ZXJtaW5hdGVkIHdpdGggYmFkCi0JICogdGFyZ2V0LgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7Ci0JYXRhX3BvcnRfZnJlZXplKGFwKTsJLyogd29uJ3QgYmUgdGhhd2VkICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwotCi0JYXRhX3BvcnRfd2FpdF9laChhcCk7CiAJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmYXAtPmhvdHBsdWdfdGFzayk7CiAKICBza2lwX2VoOgpAQCAtNjUyOCw3ICs2NTczLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNhdGFfcG9ydF9vcHMpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2R1bW15X3BvcnRfb3BzKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kdW1teV9wb3J0X2luZm8pOwotRVhQT1JUX1NZTUJPTF9HUEwoX19hdGFfcG9ydF9uZXh0X2xpbmspOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2xpbmtfbmV4dCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2X25leHQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9iaW9zX3BhcmFtKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X2luaXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2hvc3RfYWxsb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCAzMmRhOWE5Li44MTQ3YTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtNDIyLDcgKzQyMiw3IEBACiAKIAlpZiAoIWRldikgewogCQllaGktPmFjdGlvbiAmPSB+YWN0aW9uOwotCQlhdGFfbGlua19mb3JfZWFjaF9kZXYodGRldiwgbGluaykKKwkJYXRhX2Zvcl9lYWNoX2Rldih0ZGV2LCBsaW5rLCBBTEwpCiAJCQllaGktPmRldl9hY3Rpb25bdGRldi0+ZGV2bm9dICY9IH5hY3Rpb247CiAJfSBlbHNlIHsKIAkJLyogZG9lc24ndCBtYWtlIHNlbnNlIGZvciBwb3J0LXdpZGUgRUggYWN0aW9ucyAqLwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKIAkJLyogYnJlYWsgZWhpLT5hY3Rpb24gaW50byBlaGktPmRldl9hY3Rpb24gKi8KIAkJaWYgKGVoaS0+YWN0aW9uICYgYWN0aW9uKSB7Ci0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYodGRldiwgbGluaykKKwkJCWF0YV9mb3JfZWFjaF9kZXYodGRldiwgbGluaywgQUxMKQogCQkJCWVoaS0+ZGV2X2FjdGlvblt0ZGV2LT5kZXZub10gfD0KIAkJCQkJZWhpLT5hY3Rpb24gJiBhY3Rpb247CiAJCQllaGktPmFjdGlvbiAmPSB+YWN0aW9uOwpAQCAtNDkxLDYgKzQ5MSwzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGF0YV9laF91bmxvYWQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CisJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogUmVzdG9yZSBTQ29udHJvbCBJUE0gYW5kIFNQRCBmb3IgdGhlIG5leHQgZHJpdmVyIGFuZAorCSAqIGRpc2FibGUgYXR0YWNoZWQgZGV2aWNlcy4KKwkgKi8KKwlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgUE1QX0ZJUlNUKSB7CisJCXNhdGFfc2NyX3dyaXRlKGxpbmssIFNDUl9DT05UUk9MLCBsaW5rLT5zYXZlZF9zY29udHJvbCAmIDB4ZmYwKTsKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkKKwkJCWF0YV9kZXZfZGlzYWJsZShkZXYpOworCX0KKworCS8qIGZyZWV6ZSBhbmQgc2V0IFVOTE9BREVEICovCisJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKKworCWF0YV9wb3J0X2ZyZWV6ZShhcCk7CQkJLyogd29uJ3QgYmUgdGhhd2VkICovCisJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0VIX1BFTkRJTkc7CS8qIGNsZWFyIHBlbmRpbmcgZnJvbSBmcmVlemUgKi8KKwlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19VTkxPQURFRDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoqCiAgKglhdGFfc2NzaV9lcnJvciAtIFNDU0kgbGF5ZXIgZXJyb3IgaGFuZGxlciBjYWxsYmFjawogICoJQGhvc3Q6IFNDU0kgaG9zdCBvbiB3aGljaCBlcnJvciBvY2N1cnJlZApAQCAtNTkyLDcgKzYxNyw3IEBACiAJCS8qIGZldGNoICYgY2xlYXIgRUggaW5mbyAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwogCi0JCV9fYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgSE9TVF9GSVJTVCkgewogCQkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAkJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAKQEAgLTYwMCwxMiArNjI1LDkgQEAKIAkJCWxpbmstPmVoX2NvbnRleHQuaSA9IGxpbmstPmVoX2luZm87CiAJCQltZW1zZXQoJmxpbmstPmVoX2luZm8sIDAsIHNpemVvZihsaW5rLT5laF9pbmZvKSk7CiAKLQkJCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwkJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCQkJaW50IGRldm5vID0gZGV2LT5kZXZubzsKIAotCQkJCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCi0JCQkJCWNvbnRpbnVlOwotCiAJCQkJZWhjLT5zYXZlZF94ZmVyX21vZGVbZGV2bm9dID0gZGV2LT54ZmVyX21vZGU7CiAJCQkJaWYgKGF0YV9uY3FfZW5hYmxlZChkZXYpKQogCQkJCQllaGMtPnNhdmVkX25jcV9lbmFibGVkIHw9IDEgPDwgZGV2bm87CkBAIC02MjEsOCArNjQzLDEzIEBACiAJCS8qIGludm9rZSBFSCwgc2tpcCBpZiB1bmxvYWRpbmcgb3Igc3VzcGVuZGVkICovCiAJCWlmICghKGFwLT5wZmxhZ3MgJiAoQVRBX1BGTEFHX1VOTE9BRElORyB8IEFUQV9QRkxBR19TVVNQRU5ERUQpKSkKIAkJCWFwLT5vcHMtPmVycm9yX2hhbmRsZXIoYXApOwotCQllbHNlCisJCWVsc2UgeworCQkJLyogaWYgdW5sb2FkaW5nLCBjb21tZW5jZSBzdWljaWRlICovCisJCQlpZiAoKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfVU5MT0FESU5HKSAmJgorCQkJICAgICEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19VTkxPQURFRCkpCisJCQkJYXRhX2VoX3VubG9hZChhcCk7CiAJCQlhdGFfZWhfZmluaXNoKGFwKTsKKwkJfQogCiAJCS8qIHByb2Nlc3MgcG9ydCBzdXNwZW5kIHJlcXVlc3QgKi8KIAkJYXRhX2VoX2hhbmRsZV9wb3J0X3N1c3BlbmQoYXApOwpAQCAtNjQ0LDcgKzY3MSw3IEBACiAJCX0KIAogCQkvKiB0aGlzIHJ1biBpcyBjb21wbGV0ZSwgbWFrZSBzdXJlIEVIIGluZm8gaXMgY2xlYXIgKi8KLQkJX19hdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKQorCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgSE9TVF9GSVJTVCkKIAkJCW1lbXNldCgmbGluay0+ZWhfaW5mbywgMCwgc2l6ZW9mKGxpbmstPmVoX2luZm8pKTsKIAogCQkvKiBDbGVhciBob3N0X2VoX3NjaGVkdWxlZCB3aGlsZSBob2xkaW5nIGFwLT5sb2NrIHN1Y2gKQEAgLTEwMjUsNyArMTA1Miw3IEBACiAJCXN0cnVjdCBhdGFfbGluayAqbGluazsKIAogCQkvKiBjaGVjayBhbmQgbm90aWZ5IEFUQVBJIEFOICovCi0JCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJCWlmICghKHNudGYgJiAoMSA8PCBsaW5rLT5wbXApKSkKIAkJCQljb250aW51ZTsKIApAQCAtMjAwNSw3ICsyMDMyLDcgQEAKIHsKIAlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKQorCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQogCQlhdGFfZWhfbGlua19hdXRvcHN5KGxpbmspOwogCiAJLyogSGFuZGxlIHRoZSBmcmlnZ2luZyBzbGF2ZSBsaW5rLiAgQXV0b3BzeSBpcyBkb25lIHNpbWlsYXJseQpAQCAtMjIxOSw3ICsyMjQ2LDcgQEAKIHsKIAlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKLQlfX2F0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApCisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEhPU1RfRklSU1QpCiAJCWF0YV9laF9saW5rX3JlcG9ydChsaW5rKTsKIH0KIApAQCAtMjIzMCw3ICsyMjU3LDcgQEAKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCiAJaWYgKGNsZWFyX2NsYXNzZXMpCi0JCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspCisJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpCiAJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9VTktOT1dOOwogCiAJcmV0dXJuIHJlc2V0KGxpbmssIGNsYXNzZXMsIGRlYWRsaW5lKTsKQEAgLTIyOTQsNyArMjMyMSw3IEBACiAKIAlhdGFfZWhfYWJvdXRfdG9fZG8obGluaywgTlVMTCwgQVRBX0VIX1JFU0VUKTsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCS8qIElmIHdlIGlzc3VlIGFuIFNSU1QgdGhlbiBhbiBBVEEgZHJpdmUgKG5vdCBBVEFQSSkKIAkJICogbWF5IGNoYW5nZSBjb25maWd1cmF0aW9uIGFuZCBiZSBpbiBQSU8wIHRpbWluZy4gSWYKIAkJICogd2UgZG8gYSBoYXJkIHJlc2V0IChvciBhcmUgY29taW5nIGZyb20gcG93ZXIgb24pCkBAIC0yMzU1LDcgKzIzODIsNyBAQAogCQkJCQkJInBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIik7CiAJCQkJZWhjLT5pLmFjdGlvbiAmPSB+QVRBX0VIX1JFU0VUOwogCi0JCQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykKKwkJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKQogCQkJCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwogCiAJCQkJcmMgPSAwOwpAQCAtMjM2OSw3ICsyMzk2LDcgQEAKIAkJICogYmFuZyBjbGFzc2VzIGFuZCByZXR1cm4uCiAJCSAqLwogCQlpZiAocmVzZXQgJiYgIShlaGMtPmkuYWN0aW9uICYgQVRBX0VIX1JFU0VUKSkgewotCQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykKKwkJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpCiAJCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAkJCXJjID0gMDsKIAkJCWdvdG8gb3V0OwpAQCAtMjQ1NCw3ICsyNDgxLDcgQEAKIAkvKgogCSAqIFBvc3QtcmVzZXQgcHJvY2Vzc2luZwogCSAqLwotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCS8qIEFmdGVyIHRoZSByZXNldCwgdGhlIGRldmljZSBzdGF0ZSBpcyBQSU8gMCBhbmQgdGhlCiAJCSAqIGNvbnRyb2xsZXIgc3RhdGUgaXMgdW5kZWZpbmVkLiAgUmVzZXQgYWxzbyB3YWtlcyB1cAogCQkgKiBkcml2ZXMgZnJvbSBzbGVlcGluZyBtb2RlLgpAQCAtMjUxMCw3ICsyNTM3LDcgQEAKIAkgKiBjYW4gYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYW5kIHJldHJpZWQuCiAJICovCiAJbnJfdW5rbm93biA9IDA7Ci0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKIAkJLyogY29udmVydCBhbGwgQVRBX0RFVl9VTktOT1dOIHRvIEFUQV9ERVZfTk9ORSAqLwogCQlpZiAoY2xhc3Nlc1tkZXYtPmRldm5vXSA9PSBBVEFfREVWX1VOS05PV04pIHsKIAkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CkBAIC0yNjE5LDggKzI2NDYsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKIAlJTklUX0NPTVBMRVRJT04oYXAtPnBhcmtfcmVxX3BlbmRpbmcpOwotCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKLQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgeworCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CisJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKIAkJCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmxpbmstPmVoX2luZm87CiAKIAkJCWxpbmstPmVoX2NvbnRleHQuaS5kZXZfYWN0aW9uW2Rldi0+ZGV2bm9dIHw9CkBAIC0yNjc1LDcgKzI3MDIsNyBAQAogCSAqIGJlIGRvbmUgYmFja3dhcmRzIHN1Y2ggdGhhdCBQRElBRy0gaXMgcmVsZWFzZWQgYnkgdGhlIHNsYXZlCiAJICogZGV2aWNlIGJlZm9yZSB0aGUgbWFzdGVyIGRldmljZSBpcyBpZGVudGlmaWVkLgogCSAqLwotCWF0YV9saW5rX2Zvcl9lYWNoX2Rldl9yZXZlcnNlKGRldiwgbGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTExfUkVWRVJTRSkgewogCQl1bnNpZ25lZCBpbnQgYWN0aW9uID0gYXRhX2VoX2Rldl9hY3Rpb24oZGV2KTsKIAkJdW5zaWduZWQgaW50IHJlYWRpZF9mbGFncyA9IDA7CiAKQEAgLTI3NDQsNyArMjc3MSw3IEBACiAJLyogQ29uZmlndXJlIG5ldyBkZXZpY2VzIGZvcndhcmQgc3VjaCB0aGF0IHVzZXIgZG9lc24ndCBzZWUKIAkgKiBkZXZpY2UgZGV0ZWN0aW9uIG1lc3NhZ2VzIGJhY2t3YXJkcy4KIAkgKi8KLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewogCQlpZiAoIShuZXdfbWFzayAmICgxIDw8IGRldi0+ZGV2bm8pKSB8fAogCQkgICAgZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKIAkJCWNvbnRpbnVlOwpAQCAtMjc5MywxMCArMjgyMCw3IEBACiAJaW50IHJjOwogCiAJLyogaWYgZGF0YSB0cmFuc2ZlciBpcyB2ZXJpZmllZCwgY2xlYXIgRFVCSU9VU19YRkVSIG9uIGVyaW5nIHRvcCAqLwotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKLQkJCWNvbnRpbnVlOwotCisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJaWYgKCEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19EVUJJT1VTX1hGRVIpKSB7CiAJCQlzdHJ1Y3QgYXRhX2VyaW5nX2VudHJ5ICplbnQ7CiAKQEAgLTI4MTMsMTQgKzI4MzcsMTEgQEAKIAkJcmMgPSBhdGFfZG9fc2V0X21vZGUobGluaywgcl9mYWlsZWRfZGV2KTsKIAogCS8qIGlmIHRyYW5zZmVyIG1vZGUgaGFzIGNoYW5nZWQsIHNldCBEVUJJT1VTX1hGRVIgb24gZGV2aWNlICovCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgeworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CiAJCXU4IHNhdmVkX3hmZXJfbW9kZSA9IGVoYy0+c2F2ZWRfeGZlcl9tb2RlW2Rldi0+ZGV2bm9dOwogCQl1OCBzYXZlZF9uY3EgPSAhIShlaGMtPnNhdmVkX25jcV9lbmFibGVkICYgKDEgPDwgZGV2LT5kZXZubykpOwogCi0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCi0JCQljb250aW51ZTsKLQogCQlpZiAoZGV2LT54ZmVyX21vZGUgIT0gc2F2ZWRfeGZlcl9tb2RlIHx8CiAJCSAgICBhdGFfbmNxX2VuYWJsZWQoZGV2KSAhPSBzYXZlZF9uY3EpCiAJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19EVUJJT1VTX1hGRVI7CkBAIC0yODgxLDkgKzI5MDIsOCBAQAogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJaW50IGNudCA9IDA7CiAKLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpCi0JCQljbnQrKzsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgRU5BQkxFRCkKKwkJY250Kys7CiAJcmV0dXJuIGNudDsKIH0KIApAQCAtMjg5Miw3ICsyOTEyLDcgQEAKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCWludCBjbnQgPSAwOwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKQogCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1VOS05PV04pCiAJCQljbnQrKzsKIAlyZXR1cm4gY250OwpAQCAtMjkxOCw3ICsyOTM4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBza2lwIGlmIGNsYXNzIGNvZGVzIGZvciBhbGwgdmFjYW50IHNsb3RzIGFyZSBBVEFfREVWX05PTkUgKi8KLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewogCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1VOS05PV04gJiYKIAkJICAgIGVoYy0+Y2xhc3Nlc1tkZXYtPmRldm5vXSAhPSBBVEFfREVWX05PTkUpCiAJCQlyZXR1cm4gMDsKQEAgLTMwMjYsNyArMzA0Niw3IEBACiAJRFBSSU5USygiRU5URVJcbiIpOwogCiAJLyogcHJlcCBmb3IgcmVjb3ZlcnkgKi8KLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAogCQkvKiByZS1lbmFibGUgbGluaz8gKi8KQEAgLTMwMzgsNyArMzA1OCw3IEBACiAJCQlhdGFfZWhfZG9uZShsaW5rLCBOVUxMLCBBVEFfRUhfRU5BQkxFX0xJTkspOwogCQl9CiAKLQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgeworCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCQlpZiAobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfTk9fUkVUUlkpCiAJCQkJZWhjLT50cmllc1tkZXYtPmRldm5vXSA9IDE7CiAJCQllbHNlCkBAIC0zMDY4LDE5ICszMDg4LDE5IEBACiAJCWdvdG8gb3V0OwogCiAJLyogcHJlcCBmb3IgRUggKi8KLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAogCQkvKiBza2lwIEVIIGlmIHBvc3NpYmxlLiAqLwogCQlpZiAoYXRhX2VoX3NraXBfcmVjb3ZlcnkobGluaykpCiAJCQllaGMtPmkuYWN0aW9uID0gMDsKIAotCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKQorCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKQogCQkJZWhjLT5jbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9VTktOT1dOOwogCX0KIAogCS8qIHJlc2V0ICovCi0JYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CiAJCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CiAKIAkJaWYgKCEoZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVCkpCkBAIC0zMTA1LDggKzMxMjUsOCBAQAogCQlhdGFfZWhfcHVsbF9wYXJrX2FjdGlvbihhcCk7CiAKIAkJZGVhZGxpbmUgPSBqaWZmaWVzOwotCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7Ci0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CisJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCQkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAkJCQl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMzEzNCw4ICszMTU0LDggQEAKIAkJZGVhZGxpbmUgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFwLT5wYXJrX3JlcV9wZW5kaW5nLAogCQkJCQkJICAgICAgIGRlYWRsaW5lIC0gbm93KTsKIAl9IHdoaWxlIChkZWFkbGluZSk7Ci0JYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewotCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewogCQkJaWYgKCEobGluay0+ZWhfY29udGV4dC51bmxvYWRlZF9tYXNrICYKIAkJCSAgICAgICgxIDw8IGRldi0+ZGV2bm8pKSkKIAkJCQljb250aW51ZTsKQEAgLTMxNDYsNyArMzE2Niw3IEBACiAJfQogCiAJLyogdGhlIHJlc3QgKi8KLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmbGluay0+ZWhfY29udGV4dDsKIAogCQkvKiByZXZhbGlkYXRlIGV4aXN0aW5nIGRldmljZXMgYW5kIGF0dGFjaCBuZXcgb25lcyAqLwpAQCAtMzE3Miw3ICszMTkyLDcgQEAKIAkJICogZGlzcnVwdGluZyB0aGUgY3VycmVudCB1c2VycyBvZiB0aGUgZGV2aWNlLgogCQkgKi8KIAkJaWYgKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfRElEX1JFU0VUKSB7Ci0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCQkJaWYgKGRldi0+Y2xhc3MgIT0gQVRBX0RFVl9BVEFQSSkKIAkJCQkJY29udGludWU7CiAJCQkJcmMgPSBhdGFwaV9laF9jbGVhcl91YShkZXYpOwpAQCAtMzE4Myw3ICszMjAzLDcgQEAKIAogCQkvKiBjb25maWd1cmUgbGluayBwb3dlciBzYXZpbmcgKi8KIAkJaWYgKGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfTFBNKQotCQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykKKwkJCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpCiAJCQkJYXRhX2Rldl9lbmFibGVfcG0oZGV2LCBhcC0+cG1fcG9saWN5KTsKIAogCQkvKiB0aGlzIGxpbmsgaXMgb2theSBub3cgKi8KQEAgLTMyODgsNyArMzMwOCw3IEBACiAJcmMgPSBhdGFfZWhfcmVjb3ZlcihhcCwgcHJlcmVzZXQsIHNvZnRyZXNldCwgaGFyZHJlc2V0LCBwb3N0cmVzZXQsCiAJCQkgICAgTlVMTCk7CiAJaWYgKHJjKSB7Ci0JCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaykKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsICZhcC0+bGluaywgQUxMKQogCQkJYXRhX2Rldl9kaXNhYmxlKGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMKaW5kZXggYjY1ZGIzMC4uOThjYTA3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAKIAlpZiAodmVuZG9yID09IDB4MTA5NSAmJiBkZXZpZCA9PSAweDM3MjYpIHsKIAkJLyogc2lsMzcyNiBxdWlya3MgKi8KLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewogCQkJLyogQ2xhc3MgY29kZSByZXBvcnQgaXMgdW5yZWxpYWJsZSBhbmQgU1JTVAogCQkJICogdGltZXMgb3V0IHVuZGVyIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuCiAJCQkgKi8KQEAgLTMzNiw3ICszMzYsNyBAQAogCQl9CiAJfSBlbHNlIGlmICh2ZW5kb3IgPT0gMHgxMDk1ICYmIGRldmlkID09IDB4NDcyMykgewogCQkvKiBzaWw0NzIzIHF1aXJrcyAqLwotCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CiAJCQkvKiBjbGFzcyBjb2RlIHJlcG9ydCBpcyB1bnJlbGlhYmxlICovCiAJCQlpZiAobGluay0+cG1wIDwgMikKIAkJCQlsaW5rLT5mbGFncyB8PSBBVEFfTEZMQUdfQVNTVU1FX0FUQTsKQEAgLTM0OCw3ICszNDgsNyBAQAogCQl9CiAJfSBlbHNlIGlmICh2ZW5kb3IgPT0gMHgxMDk1ICYmIGRldmlkID09IDB4NDcyNikgewogCQkvKiBzaWw0NzI2IHF1aXJrcyAqLwotCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CiAJCQkvKiBDbGFzcyBjb2RlIHJlcG9ydCBpcyB1bnJlbGlhYmxlIGFuZCBTUlNUCiAJCQkgKiB0aW1lcyBvdXQgdW5kZXIgY2VydGFpbiBjb25maWd1cmF0aW9ucy4KIAkJCSAqIENvbmZpZyBkZXZpY2UgY2FuIGJlIGF0IHBvcnQgMCBvciA1IGFuZApAQCAtNDUwLDcgKzQ1MCw3IEBACiAJaWYgKGFwLT5vcHMtPnBtcF9hdHRhY2gpCiAJCWFwLT5vcHMtPnBtcF9hdHRhY2goYXApOwogCi0JYXRhX3BvcnRfZm9yX2VhY2hfbGluayh0bGluaywgYXApCisJYXRhX2Zvcl9lYWNoX2xpbmsodGxpbmssIGFwLCBFREdFKQogCQlzYXRhX2xpbmtfaW5pdF9zcGQodGxpbmspOwogCiAJYXRhX2FjcGlfYXNzb2NpYXRlX3NhdGFfcG9ydChhcCk7CkBAIC00ODcsNyArNDg3LDcgQEAKIAlpZiAoYXAtPm9wcy0+cG1wX2RldGFjaCkKIAkJYXAtPm9wcy0+cG1wX2RldGFjaChhcCk7CiAKLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKHRsaW5rLCBhcCkKKwlhdGFfZm9yX2VhY2hfbGluayh0bGluaywgYXAsIEVER0UpCiAJCWF0YV9laF9kZXRhY2hfZGV2KHRsaW5rLT5kZXZpY2UpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKQEAgLTcwMCw3ICs3MDAsNyBAQAogCQl9CiAKIAkJLyogUE1QIGlzIHJlc2V0LCBTRXJyb3JzIGNhbm5vdCBiZSB0cnVzdGVkLCBzY2FuIGFsbCAqLwotCQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKHRsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayh0bGluaywgYXAsIEVER0UpIHsKIAkJCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJnRsaW5rLT5laF9jb250ZXh0OwogCiAJCQllaGMtPmkucHJvYmVfbWFzayB8PSBBVEFfQUxMX0RFVklDRVM7CkBAIC03NjgsNyArNzY4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CiAKLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKIAkJaWYgKCEobGluay0+ZmxhZ3MgJiBBVEFfTEZMQUdfRElTQUJMRUQpKQogCQkJY29udGludWU7CiAKQEAgLTg1Miw3ICs4NTIsNyBAQAogCWludCBjbnQsIHJjOwogCiAJcG1wX3RyaWVzID0gQVRBX0VIX1BNUF9UUklFUzsKLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKQorCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQogCQlsaW5rX3RyaWVzW2xpbmstPnBtcF0gPSBBVEFfRUhfUE1QX0xJTktfVFJJRVM7CiAKICByZXRyeToKQEAgLTg2MSw3ICs4NjEsNyBAQAogCQlyYyA9IGF0YV9laF9yZWNvdmVyKGFwLCBvcHMtPnByZXJlc2V0LCBvcHMtPnNvZnRyZXNldCwKIAkJCQkgICAgb3BzLT5oYXJkcmVzZXQsIG9wcy0+cG9zdHJlc2V0LCBOVUxMKTsKIAkJaWYgKHJjKSB7Ci0JCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmspCisJCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpCiAJCQkJYXRhX2Rldl9kaXNhYmxlKGRldik7CiAJCQlyZXR1cm4gcmM7CiAJCX0KQEAgLTg3MCw3ICs4NzAsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJLyogbmV3IFBNUCBvbmxpbmUgKi8KLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkKKwkJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpCiAJCQlsaW5rX3RyaWVzW2xpbmstPnBtcF0gPSBBVEFfRUhfUE1QX0xJTktfVFJJRVM7CiAKIAkJLyogZmFsbCB0aHJvdWdoICovCkBAIC05NDIsNyArOTQyLDcgQEAKIAl9CiAKIAljbnQgPSAwOwotCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKKwlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewogCQlpZiAoIShnc2NyX2Vycm9yICYgKDEgPDwgbGluay0+cG1wKSkpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggYjg4ZTQ0My4uNDA0MGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0zMjI5LDEyICszMjI5LDEyIEBACiAJCXJldHVybjsKIAogIHJlcGVhdDoKLQlhdGFfcG9ydF9mb3JfZWFjaF9saW5rKGxpbmssIGFwKSB7Ci0JCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgeworCQlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgRU5BQkxFRCkgewogCQkJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCQkJaW50IGNoYW5uZWwgPSAwLCBpZCA9IDA7CiAKLQkJCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgfHwgZGV2LT5zZGV2KQorCQkJaWYgKGRldi0+c2RldikKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKGF0YV9pc19ob3N0X2xpbmsobGluaykpCkBAIC0zMjU1LDkgKzMyNTUsOSBAQAogCSAqIGZhaWx1cmUgb2NjdXJyZWQsIHNjYW4gd291bGQgaGF2ZSBmYWlsZWQgc2lsZW50bHkuICBDaGVjawogCSAqIHdoZXRoZXIgYWxsIGRldmljZXMgYXJlIGF0dGFjaGVkLgogCSAqLwotCWF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIHsKLQkJYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpICYmICFkZXYtPnNkZXYpCisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKKwkJCWlmICghZGV2LT5zZGV2KQogCQkJCWdvdG8gZXhpdF9sb29wOwogCQl9CiAJfQpAQCAtMzM4MSw3ICszMzgxLDcgQEAKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJaWYgKCEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19ERVRBQ0hFRCkpCkBAIC0zNDk2LDcgKzM0OTYsNyBAQAogCWlmIChkZXZubyA9PSBTQ0FOX1dJTERfQ0FSRCkgewogCQlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKLQkJYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgeworCQlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewogCQkJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmbGluay0+ZWhfaW5mbzsKIAkJCWVoaS0+cHJvYmVfbWFzayB8PSBBVEFfQUxMX0RFVklDRVM7CiAJCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CkBAIC0zNTQ0LDExICszNTQ0LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwogCi0JYXRhX3BvcnRfZm9yX2VhY2hfbGluayhsaW5rLCBhcCkgewotCQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCBsaW5rKSB7CisJYXRhX2Zvcl9lYWNoX2xpbmsobGluaywgYXAsIEVER0UpIHsKKwkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKIAkJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGRldi0+c2RldjsKIAotCQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSB8fCAhc2RldikKKwkJCWlmICghc2RldikKIAkJCQljb250aW51ZTsKIAkJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggMTI2NjkyNC4uMTA1MGZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMzU2LDcgKzM1Niw2IEBACiAgKgliZmluX3NldF9kbWFtb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBETUEgdGltaW5ncwogICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCiAgKglAYWRldjogdW0KLSAqCUB1ZG1hOiB1ZG1hIG1vZGUsIDAgLSA2CiAgKgogICoJU2V0IFVETUEgbW9kZSBmb3IgZGV2aWNlLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCmluZGV4IDg2MGVkZTUuLmY4MjhhMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwpAQCAtNDY1LDI0ICs0NjUsMjIgQEAKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKLQkJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCi0JCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKLQkJCWRldi0+ZG1hX21vZGUgPSBYRkVSX01XX0RNQV8wOwotCQkJLyogV2UgZG8gbmVlZCB0aGUgcmlnaHQgbW9kZSBpbmZvcm1hdGlvbiBmb3IgRE1BIG9yIFBJTwotCQkJICAgYW5kIHRoaXMgY29tZXMgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZsYWdzICovCi0JCQlpZiAoYXRhX2lkX2hhc19kbWEoZGV2LT5pZCkpIHsKLQkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIERNQVxuIik7Ci0JCQkJZGV2LT54ZmVyX21vZGUgPSBYRkVSX01XX0RNQV8wOwotCQkJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9NV0RNQTsKLQkJCQlkZXYtPmZsYWdzICY9IH5BVEFfREZMQUdfUElPOwotCQkJfSBlbHNlIHsKLQkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIFBJT1xuIik7Ci0JCQkJZGV2LT54ZmVyX21vZGUgPSBYRkVSX1BJT18wOwotCQkJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87Ci0JCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwotCQkJfQorCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CisJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCisJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOworCQlkZXYtPmRtYV9tb2RlID0gWEZFUl9NV19ETUFfMDsKKwkJLyogV2UgZG8gbmVlZCB0aGUgcmlnaHQgbW9kZSBpbmZvcm1hdGlvbiBmb3IgRE1BIG9yIFBJTworCQkgICBhbmQgdGhpcyBjb21lcyBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KKwkJaWYgKGF0YV9pZF9oYXNfZG1hKGRldi0+aWQpKSB7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIERNQVxuIik7CisJCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfTVdfRE1BXzA7CisJCQlkZXYtPnhmZXJfc2hpZnQgPSBBVEFfU0hJRlRfTVdETUE7CisJCQlkZXYtPmZsYWdzICY9IH5BVEFfREZMQUdfUElPOworCQl9IGVsc2UgeworCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJjb25maWd1cmVkIGZvciBQSU9cbiIpOworCQkJZGV2LT54ZmVyX21vZGUgPSBYRkVSX1BJT18wOworCQkJZGV2LT54ZmVyX3NoaWZ0ID0gQVRBX1NISUZUX1BJTzsKKwkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCmluZGV4IDIwMTQyNTMuLmIxNzNjMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwpAQCAtMzAsMTQgKzMwLDEyIEBACiB7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKLQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpKSB7Ci0JCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIFBJTzBcbiIpOwotCQkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7Ci0JCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7Ci0JCQlkZXYtPnhmZXJfc2hpZnQgPSBBVEFfU0hJRlRfUElPOwotCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwotCQl9CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJjb25maWd1cmVkIGZvciBQSU8wXG4iKTsKKwkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CisJCWRldi0+eGZlcl9tb2RlID0gWEZFUl9QSU9fMDsKKwkJZGV2LT54ZmVyX3NoaWZ0ID0gQVRBX1NISUZUX1BJTzsKKwkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCmluZGV4IDkzMGMyMjAuLjZjMWQ3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYwpAQCAtMTk0LDE1ICsxOTQsMTIgQEAKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKLQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9JTkZPLAotCQkJCQkJImNvbmZpZ3VyZWQgZm9yIFBJT1xuIik7Ci0JCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKLQkJCWRldi0+eGZlcl9tb2RlID0gWEZFUl9QSU9fMDsKLQkJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87Ci0JCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19QSU87Ci0JCX0KKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgRU5BQkxFRCkgeworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIFBJT1xuIik7CisJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOworCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CisJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87CisJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02NDEsNyArNjM4LDYgQEAKICAqCXFkaTY1ODBkcF9zZXRfcGlvbW9kZQkJLQlQSU8gc2V0dXAgZm9yIGR1YWwgY2hhbm5lbAogICoJQGFwOiBQb3J0CiAgKglAYWRldjogRGV2aWNlCi0gKglAaXJxOiBpbnRlcnJ1cHQgbGluZQogICoKICAqCUluIGR1YWwgY2hhbm5lbCBtb2RlIHRoZSA2NTgwIGhhcyBvbmUgY2xvY2sgcGVyIGNoYW5uZWwgYW5kIHdlIGhhdmUKICAqCXRvIHNvZnR3YXJlIGNsb2Nrc3dpdGNoIGluIHFjX2lzc3VlLgpAQCAtMTAyOCw3ICsxMDI0LDcgQEAKIAkvKiBOb3RoaW5nIGZvdW5kIG1lYW5zIHdlIGRyb3AgdGhlIHBvcnQgYXMgaXRzIHByb2JhYmx5IG5vdCB0aGVyZSAqLwogCiAJcmV0ID0gLUVOT0RFVjsKLQlhdGFfbGlua19mb3JfZWFjaF9kZXYoZGV2LCAmYXAtPmxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgJmFwLT5saW5rLCBBTEwpIHsKIAkJaWYgKCFhdGFfZGV2X2Fic2VudChkZXYpKSB7CiAJCQlsZWdhY3lfaG9zdFtwcm9iZS0+c2xvdF0gPSBob3N0OwogCQkJbGQtPnBsYXRmb3JtX2RldiA9IHBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCmluZGV4IGMwZGJjNDYuLjJjMWE5MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCkBAIC0xMTYsNyArMTE2LDYgQEAKICAqCW9sZHBpaXhfc2V0X2RtYW1vZGUgLSBJbml0aWFsaXplIGhvc3QgY29udHJvbGxlciBQQVRBIERNQSB0aW1pbmdzCiAgKglAYXA6IFBvcnQgd2hvc2UgdGltaW5ncyB3ZSBhcmUgY29uZmlndXJpbmcKICAqCUBhZGV2OiBEZXZpY2UgdG8gcHJvZ3JhbQotICoJQGlzaWNoOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgYW4gSUNIIGFuZCBoYXMgSU9DRkcgcmVnaXN0ZXJzCiAgKgogICoJU2V0IE1XRE1BIG1vZGUgZm9yIGRldmljZSwgaW4gaG9zdCBjb250cm9sbGVyIFBDSSBjb25maWcgc3BhY2UuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCmluZGV4IDBlMWMyYzEuLmU5NGVmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKQEAgLTI4MSw3ICsyODEsNiBAQAogICoJcGRjMjAyN3hfc2V0X3Bpb21vZGUgLSBJbml0aWFsaXplIGhvc3QgY29udHJvbGxlciBQQVRBIFBJTyB0aW1pbmdzCiAgKglAYXA6IFBvcnQgdG8gY29uZmlndXJlCiAgKglAYWRldjogdW0KLSAqCUBwaW86IFBJTyBtb2RlLCAwIC0gNAogICoKICAqCVNldCBQSU8gbW9kZSBmb3IgZGV2aWNlLgogICoKQEAgLTMyNiw3ICszMjUsNiBAQAogICoJcGRjMjAyN3hfc2V0X2RtYW1vZGUgLSBJbml0aWFsaXplIGhvc3QgY29udHJvbGxlciBQQVRBIFVETUEgdGltaW5ncwogICoJQGFwOiBQb3J0IHRvIGNvbmZpZ3VyZQogICoJQGFkZXY6IHVtCi0gKglAdWRtYTogdWRtYSBtb2RlLCBYRkVSX1VETUFfMCB0byBYRkVSX1VETUFfNgogICoKICAqCVNldCBVRE1BIG1vZGUgZm9yIGRldmljZS4KICAqCkBAIC00MDYsMjMgKzQwNCwyMCBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKLQkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpKSB7CisJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKKwkJcGRjMjAyN3hfc2V0X3Bpb21vZGUoYXAsIGRldik7CiAKLQkJCXBkYzIwMjd4X3NldF9waW9tb2RlKGFwLCBkZXYpOworCQkvKgorCQkgKiBFbmFibGUgcHJlZmV0Y2ggaWYgdGhlIGRldmljZSBzdXBwb3J0IFBJTyBvbmx5LgorCQkgKi8KKwkJaWYgKGRldi0+eGZlcl9zaGlmdCA9PSBBVEFfU0hJRlRfUElPKSB7CisJCQl1MzIgY3RjcjEgPSBpb3JlYWQzMihkZXZfbW1pbyhhcCwgZGV2LCBQRENfQ1RDUjEpKTsKKwkJCWN0Y3IxIHw9ICgxIDw8IDI1KTsKKwkJCWlvd3JpdGUzMihjdGNyMSwgZGV2X21taW8oYXAsIGRldiwgUERDX0NUQ1IxKSk7CiAKLQkJCS8qCi0JCQkgKiBFbmFibGUgcHJlZmV0Y2ggaWYgdGhlIGRldmljZSBzdXBwb3J0IFBJTyBvbmx5LgotCQkJICovCi0JCQlpZiAoZGV2LT54ZmVyX3NoaWZ0ID09IEFUQV9TSElGVF9QSU8pIHsKLQkJCQl1MzIgY3RjcjEgPSBpb3JlYWQzMihkZXZfbW1pbyhhcCwgZGV2LCBQRENfQ1RDUjEpKTsKLQkJCQljdGNyMSB8PSAoMSA8PCAyNSk7Ci0JCQkJaW93cml0ZTMyKGN0Y3IxLCBkZXZfbW1pbyhhcCwgZGV2LCBQRENfQ1RDUjEpKTsKLQotCQkJCVBEUFJJTlRLKCJUdXJuIG9uIHByZWZldGNoXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcGRjMjAyN3hfc2V0X2RtYW1vZGUoYXAsIGRldik7Ci0JCQl9CisJCQlQRFBSSU5USygiVHVybiBvbiBwcmVmZXRjaFxuIik7CisJCX0gZWxzZSB7CisJCQlwZGMyMDI3eF9zZXRfZG1hbW9kZShhcCwgZGV2KTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYwppbmRleCA3N2U0ZTNiLi42YWZhMDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCkBAIC0zNCwxNCArMzQsMTIgQEAKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKLQkJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCi0JCQlkZXYtPnBpb19tb2RlID0gZGV2LT54ZmVyX21vZGUgPSBYRkVSX1BJT18wOwotCQkJZGV2LT54ZmVyX3NoaWZ0ID0gQVRBX1NISUZUX1BJTzsKLQkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKLQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9JTkZPLCAiY29uZmlndXJlZCBmb3IgUElPXG4iKTsKLQkJfQorCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CisJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCisJCWRldi0+cGlvX21vZGUgPSBkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CisJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87CisJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJjb25maWd1cmVkIGZvciBQSU9cbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggMGIwYWE0NS4uNjk1ZDQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTgxLDcgKzgxLDYgQEAKICAqCXJhZGlzeXNfc2V0X2RtYW1vZGUgLSBJbml0aWFsaXplIGhvc3QgY29udHJvbGxlciBQQVRBIERNQSB0aW1pbmdzCiAgKglAYXA6IFBvcnQgd2hvc2UgdGltaW5ncyB3ZSBhcmUgY29uZmlndXJpbmcKICAqCUBhZGV2OiBEZXZpY2UgdG8gcHJvZ3JhbQotICoJQGlzaWNoOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgYW4gSUNIIGFuZCBoYXMgSU9DRkcgcmVnaXN0ZXJzCiAgKgogICoJU2V0IE1XRE1BIG1vZGUgZm9yIGRldmljZSwgaW4gaG9zdCBjb250cm9sbGVyIFBDSSBjb25maWcgc3BhY2UuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggN2RmZDFmMy4uNDZkNmJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC0zOCwxNSArMzgsMTMgQEAKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCi0JYXRhX2xpbmtfZm9yX2VhY2hfZGV2KGRldiwgbGluaykgewotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKLQkJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCi0JCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKLQkJCWRldi0+eGZlcl9tb2RlID0gWEZFUl9QSU9fMDsKLQkJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87Ci0JCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19QSU87Ci0JCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIFBJT1xuIik7Ci0JCX0KKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgRU5BQkxFRCkgeworCQkvKiBXZSBkb24ndCByZWFsbHkgY2FyZSAqLworCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKKwkJZGV2LT54ZmVyX21vZGUgPSBYRkVSX1BJT18wOworCQlkZXYtPnhmZXJfc2hpZnQgPSBBVEFfU0hJRlRfUElPOworCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19QSU87CisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9JTkZPLCAiY29uZmlndXJlZCBmb3IgUElPXG4iKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBjZjM3MDdlLi5kNDQ3ZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTIxMCw3ICsyMTAsNiBAQAogICoJc2NjX3NldF9kbWFtb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBETUEgdGltaW5ncwogICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCiAgKglAYWRldjogdW0KLSAqCUB1ZG1hOiB1ZG1hIG1vZGUsIDAgLSA2CiAgKgogICoJU2V0IFVETUEgbW9kZSBmb3IgZGV2aWNlLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwppbmRleCA3MmU0MWM5Li44ZDJmZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xMzgsNyArMTM4LDYgQEAKIC8qKgogICoJc2VydmVyd29ya3NfY2FibGVfZGV0ZWN0CS0JY2FibGUgZGV0ZWN0aW9uCiAgKglAYXA6IEFUQSBwb3J0Ci0gKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglQZXJmb3JtIGNhYmxlIGRldGVjdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGRldmljZSBhbmQgc3VidmVuZG9yCiAgKglpZGVudGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IGU0YmU1NWUuLjI3Y2ViNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtMTEyLDcgKzExMiw2IEBACiAvKioKICAqCXNpc182Nl9jYWJsZV9kZXRlY3QJLQljaGVjayBmb3IgNDAvODAgcGluCiAgKglAYXA6IFBvcnQKLSAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVBlcmZvcm0gY2FibGUgZGV0ZWN0aW9uIG9uIHRoZSBVRE1BNjYsIFVETUExMDAgYW5kIGVhcmx5IFVETUExMzMKICAqCVNpUyBJREUgY29udHJvbGxlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggMmIyNGFlNS4uODY5MTg2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTE4MzYsNyArMTgzNiw2IEBACiAvKioKICAqICAgICAgbXZfZXJyX2ludHIgLSBIYW5kbGUgZXJyb3IgaW50ZXJydXB0cyBvbiB0aGUgcG9ydAogICogICAgICBAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKLSAqICAgICAgQHFjOiBhZmZlY3RlZCBjb21tYW5kIChub24tTkNRKSwgb3IgTlVMTAogICoKICAqICAgICAgTW9zdCBjYXNlcyByZXF1aXJlIGEgZnVsbCByZXNldCBvZiB0aGUgY2hpcCdzIHN0YXRlIG1hY2hpbmUsCiAgKiAgICAgIHdoaWNoIGFsc28gcGVyZm9ybXMgYSBDT01SRVNFVC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCmluZGV4IDAzMWQ3YjcuLjU2NGMxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwpAQCAtNDYsNyArNDYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX3NpbCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNCIKKworI2RlZmluZSBTSUxfRE1BX0JPVU5EQVJZCTB4N2ZmZmZmZmZVTAogCiBlbnVtIHsKIAlTSUxfTU1JT19CQVIJCT0gNSwKQEAgLTExOCw2ICsxMjAsMTAgQEAKIHN0YXRpYyBpbnQgc2lsX3Njcl9yZWFkKHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyICp2YWwpOwogc3RhdGljIGludCBzaWxfc2NyX3dyaXRlKHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiBzdGF0aWMgaW50IHNpbF9zZXRfbW9kZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHN0cnVjdCBhdGFfZGV2aWNlICoqcl9mYWlsZWQpOworc3RhdGljIHZvaWQgc2lsX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB2b2lkIHNpbF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBzaWxfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIApAQCAtMTY3LDEzICsxNzMsMjIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNpbF9zaHQgPSB7Ci0JQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCisJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKKwkvKiogVGhlc2UgY29udHJvbGxlcnMgc3VwcG9ydCBMYXJnZSBCbG9jayBUcmFuc2ZlciB3aGljaCBhbGxvd3MKKwkgICAgdHJhbnNmZXIgY2h1bmtzIHVwIHRvIDJHQiBhbmQgd2hpY2ggY3Jvc3MgNjRLQiBib3VuZGFyaWVzLAorCSAgICB0aGVyZWZvcmUgdGhlIERNQSBsaW1pdHMgYXJlIG1vcmUgcmVsYXhlZCB0aGFuIHN0YW5kYXJkIEFUQSBTRkYuICovCisJLmRtYV9ib3VuZGFyeQkJPSBTSUxfRE1BX0JPVU5EQVJZLAorCS5zZ190YWJsZXNpemUJCT0gQVRBX01BWF9QUkQKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaWxfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5kZXZfY29uZmlnCQk9IHNpbF9kZXZfY29uZmlnLAogCS5zZXRfbW9kZQkJPSBzaWxfc2V0X21vZGUsCisJLmJtZG1hX3NldHVwICAgICAgICAgICAgPSBzaWxfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0ICAgICAgICAgICAgPSBzaWxfYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gc2lsX2JtZG1hX3N0b3AsCisJLnFjX3ByZXAJCT0gc2lsX3FjX3ByZXAsCiAJLmZyZWV6ZQkJCT0gc2lsX2ZyZWV6ZSwKIAkudGhhdwkJCT0gc2lsX3RoYXcsCiAJLnNjcl9yZWFkCQk9IHNpbF9zY3JfcmVhZCwKQEAgLTI0OSw2ICsyNjQsODMgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc2xvd19kb3duLCAiU2xlZGdlaGFtbWVyIHVzZWQgdG8gd29yayBhcm91bmQgcmFuZG9tIHByb2JsZW1zLCBieSBsaW1pdGluZyBjb21tYW5kcyB0byAxNSBzZWN0b3JzICgwPW9mZiwgMT1vbikiKTsKIAogCitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2UgPSBhcC0+aG9zdC0+aW9tYXBbU0lMX01NSU9fQkFSXTsKKwl2b2lkIF9faW9tZW0gKmJtZG1hMiA9IG1taW9fYmFzZSArIHNpbF9wb3J0W2FwLT5wb3J0X25vXS5ibWRtYTI7CisKKwkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAtIGNhbiBzYWZlbHkgYWx3YXlzIHdyaXRlIDAgKi8KKwlpb3dyaXRlOCgwLCBibWRtYTIpOworCisJLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCisJYXRhX3NmZl9kbWFfcGF1c2UoYXApOworfQorCitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqYm1kbWEgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCWlvd3JpdGUzMihhcC0+cHJkX2RtYSwgYm1kbWEgKyBBVEFfRE1BX1RBQkxFX09GUyk7CisKKwkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLworCWFwLT5vcHMtPnNmZl9leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCitzdGF0aWMgdm9pZCBzaWxfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwl1bnNpZ25lZCBpbnQgcncgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gYXAtPmhvc3QtPmlvbWFwW1NJTF9NTUlPX0JBUl07CisJdm9pZCBfX2lvbWVtICpibWRtYTIgPSBtbWlvX2Jhc2UgKyBzaWxfcG9ydFthcC0+cG9ydF9ub10uYm1kbWEyOworCXU4IGRtYWN0bCA9IEFUQV9ETUFfU1RBUlQ7CisKKwkvKiBzZXQgdHJhbnNmZXIgZGlyZWN0aW9uLCBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbgorCSAgIE5vdGU6IEZvciBMYXJnZSBCbG9jayBUcmFuc2ZlciB0byB3b3JrLCB0aGUgRE1BIG11c3QgYmUgc3RhcnRlZAorCSAgIHVzaW5nIHRoZSBibWRtYTIgcmVnaXN0ZXIuICovCisJaWYgKCFydykKKwkJZG1hY3RsIHw9IEFUQV9ETUFfV1I7CisJaW93cml0ZTgoZG1hY3RsLCBibWRtYTIpOworfQorCisvKiBUaGUgd2F5IEdvZCBpbnRlbmRlZCBQQ0kgSURFIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIHRvIGxvb2sgYW5kIGJlaGF2ZS4uLiAqLworc3RhdGljIHZvaWQgc2lsX2ZpbGxfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IGF0YV9wcmQgKnByZCwgKmxhc3RfcHJkID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgc2k7CisKKwlwcmQgPSAmYXAtPnByZFswXTsKKwlmb3JfZWFjaF9zZyhxYy0+c2csIHNnLCBxYy0+bl9lbGVtLCBzaSkgeworCQkvKiBOb3RlIGgvdyBkb2Vzbid0IHN1cHBvcnQgNjQtYml0LCBzbyB3ZSB1bmNvbmRpdGlvbmFsbHkKKwkJICogdHJ1bmNhdGUgZG1hX2FkZHJfdCB0byB1MzIuCisJCSAqLworCQl1MzIgYWRkciA9ICh1MzIpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJdTMyIHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJCXByZC0+YWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworCQlwcmQtPmZsYWdzX2xlbiA9IGNwdV90b19sZTMyKHNnX2xlbik7CisJCVZQUklOVEsoIlBSRFsldV0gPSAoMHglWCwgMHglWClcbiIsIHBpLCBhZGRyLCBzZ19sZW4pOworCisJCWxhc3RfcHJkID0gcHJkOworCQlwcmQrKzsKKwl9CisKKwlpZiAobGlrZWx5KGxhc3RfcHJkKSkKKwkJbGFzdF9wcmQtPmZsYWdzX2xlbiB8PSBjcHVfdG9fbGUzMihBVEFfUFJEX0VPVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbF9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQorCQlyZXR1cm47CisKKwlzaWxfZmlsbF9zZyhxYyk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpbF9nZXRfZGV2aWNlX2NhY2hlX2xpbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTggY2FjaGVfbGluZSA9IDA7CkBAIC0yNzgsNyArMzcwLDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIHsKKwlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7CiAJCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikpCiAJCQlkZXZfbW9kZVtkZXYtPmRldm5vXSA9IDA7CS8qIFBJTzAvMS8yICovCiAJCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfUElPKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDlmN2M1NDMuLjAxZTY5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCiBzdGF0aWMgaW50IGNjaXNzX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spOwogc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUpOwotc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssIGRyaXZlX2luZm9fc3RydWN0ICpkcnYsCitzdGF0aWMgaW50IGRlcmVnaXN0ZXJfZGlzayhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCwKIAkJCSAgIGludCBjbGVhcl9hbGwpOwogCiBzdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBpbnQgd2l0aGlycSwKQEAgLTIxNSwzMSArMjE1LDE3IEBACiAvKgogICogRW5xdWV1aW5nIGFuZCBkZXF1ZXVpbmcgZnVuY3Rpb25zIGZvciBjbWRsaXN0cy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFkZFEoQ29tbWFuZExpc3Rfc3RydWN0ICoqUXB0ciwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKQorc3RhdGljIGlubGluZSB2b2lkIGFkZFEoc3RydWN0IGhsaXN0X2hlYWQgKmxpc3QsIENvbW1hbmRMaXN0X3N0cnVjdCAqYykKIHsKLQlpZiAoKlFwdHIgPT0gTlVMTCkgewotCQkqUXB0ciA9IGM7Ci0JCWMtPm5leHQgPSBjLT5wcmV2ID0gYzsKLQl9IGVsc2UgewotCQljLT5wcmV2ID0gKCpRcHRyKS0+cHJldjsKLQkJYy0+bmV4dCA9ICgqUXB0cik7Ci0JCSgqUXB0ciktPnByZXYtPm5leHQgPSBjOwotCQkoKlFwdHIpLT5wcmV2ID0gYzsKLQl9CisJaGxpc3RfYWRkX2hlYWQoJmMtPmxpc3QsIGxpc3QpOwogfQogCi1zdGF0aWMgaW5saW5lIENvbW1hbmRMaXN0X3N0cnVjdCAqcmVtb3ZlUShDb21tYW5kTGlzdF9zdHJ1Y3QgKipRcHRyLAotCQkJCQkgIENvbW1hbmRMaXN0X3N0cnVjdCAqYykKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVRKENvbW1hbmRMaXN0X3N0cnVjdCAqYykKIHsKLQlpZiAoYyAmJiBjLT5uZXh0ICE9IGMpIHsKLQkJaWYgKCpRcHRyID09IGMpCi0JCQkqUXB0ciA9IGMtPm5leHQ7Ci0JCWMtPnByZXYtPm5leHQgPSBjLT5uZXh0OwotCQljLT5uZXh0LT5wcmV2ID0gYy0+cHJldjsKLQl9IGVsc2UgewotCQkqUXB0ciA9IE5VTEw7Ci0JfQotCXJldHVybiBjOworCWlmIChXQVJOX09OKGhsaXN0X3VuaGFzaGVkKCZjLT5saXN0KSkpCisJCXJldHVybjsKKworCWhsaXN0X2RlbF9pbml0KCZjLT5saXN0KTsKIH0KIAogI2luY2x1ZGUgImNjaXNzX3Njc2kuYyIJCS8qIEZvciBTQ1NJIHRhcGUgc3VwcG9ydCAqLwpAQCAtNTA2LDYgKzQ5Miw3IEBACiAJCWMtPmNtZGluZGV4ID0gaTsKIAl9CiAKKwlJTklUX0hMSVNUX05PREUoJmMtPmxpc3QpOwogCWMtPmJ1c2FkZHIgPSAoX191MzIpIGNtZF9kbWFfaGFuZGxlOwogCXRlbXA2NC52YWwgPSAoX191NjQpIGVycl9kbWFfaGFuZGxlOwogCWMtPkVyckRlc2MuQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKQEAgLTE0OTIsOCArMTQ3OSw3IEBACiAJCSAqIHdoaWNoIGtlZXBzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIHN0YXJ0aW5nCiAJCSAqIHRoZSBxdWV1ZS4KIAkJICovCi0JCXJldCA9IGRlcmVnaXN0ZXJfZGlzayhoLT5nZW5kaXNrW2Rydl9pbmRleF0sCi0JCQkJICAgICAgJmgtPmRydltkcnZfaW5kZXhdLCAwKTsKKwkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGRydl9pbmRleCwgMCk7CiAJCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAwOwogCX0KIApAQCAtMTcxMSw4ICsxNjk3LDcgQEAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKIAkJCWgtPmRydltpXS5idXN5X2NvbmZpZ3VyaW5nID0gMTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOwotCQkJcmV0dXJuX2NvZGUgPSBkZXJlZ2lzdGVyX2Rpc2soaC0+Z2VuZGlza1tpXSwKLQkJCQkmaC0+ZHJ2W2ldLCAxKTsKKwkJCXJldHVybl9jb2RlID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGksIDEpOwogCQkJaC0+ZHJ2W2ldLmJ1c3lfY29uZmlndXJpbmcgPSAwOwogCQl9CiAJfQpAQCAtMTc4MiwxNSArMTc2NywxOSBAQAogICogICAgICAgICAgICAgdGhlIGhpZ2hlc3RfbHVuIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZCBhbmQgdGhlIEx1bklECiAgKiAgICAgICAgICAgICBzaG91bGQgbm90IGJlIGNsZWFyZWQuCiAqLwotc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssIGRyaXZlX2luZm9fc3RydWN0ICpkcnYsCitzdGF0aWMgaW50IGRlcmVnaXN0ZXJfZGlzayhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCwKIAkJCSAgIGludCBjbGVhcl9hbGwpCiB7CiAJaW50IGk7Ci0JY3Rscl9pbmZvX3QgKmggPSBnZXRfaG9zdChkaXNrKTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQlyZXR1cm4gLUVQRVJNOwogCisJZHJ2ID0gJmgtPmRydltkcnZfaW5kZXhdOworCWRpc2sgPSBoLT5nZW5kaXNrW2Rydl9pbmRleF07CisKIAkvKiBtYWtlIHN1cmUgbG9naWNhbCB2b2x1bWUgaXMgTk9UIGlzIHVzZSAqLwogCWlmIChjbGVhcl9hbGwgfHwgKGgtPmdlbmRpc2tbMF0gPT0gZGlzaykpIHsKIAkJaWYgKGRydi0+dXNhZ2VfY291bnQgPiAxKQpAQCAtMjU0OCw3ICsyNTM3LDggQEAKIHsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CiAKLQl3aGlsZSAoKGMgPSBoLT5yZXFRKSAhPSBOVUxMKSB7CisJd2hpbGUgKCFobGlzdF9lbXB0eSgmaC0+cmVxUSkpIHsKKwkJYyA9IGhsaXN0X2VudHJ5KGgtPnJlcVEuZmlyc3QsIENvbW1hbmRMaXN0X3N0cnVjdCwgbGlzdCk7CiAJCS8qIGNhbid0IGRvIGFueXRoaW5nIGlmIGZpZm8gaXMgZnVsbCAqLwogCQlpZiAoKGgtPmFjY2Vzcy5maWZvX2Z1bGwoaCkpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogZmlmbyBmdWxsXG4iKTsKQEAgLTI1NTYsMTQgKzI1NDYsMTQgQEAKIAkJfQogCiAJCS8qIEdldCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgUmVxdWVzdCBRICovCi0JCXJlbW92ZVEoJihoLT5yZXFRKSwgYyk7CisJCXJlbW92ZVEoYyk7CiAJCWgtPlFkZXB0aC0tOwogCiAJCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgZXhlY3V0ZSBjb21tYW5kICovCiAJCWgtPmFjY2Vzcy5zdWJtaXRfY29tbWFuZChoLCBjKTsKIAogCQkvKiBQdXQgam9iIG9udG8gdGhlIGNvbXBsZXRlZCBRICovCi0JCWFkZFEoJihoLT5jbXBRKSwgYyk7CisJCWFkZFEoJmgtPmNtcFEsIGMpOwogCX0KIH0KIApAQCAtMjU3Niw3ICsyNTY2LDcgQEAKIAltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZihFcnJvckluZm9fc3RydWN0KSk7CiAKIAkvKiBhZGQgaXQgdG8gc29mdHdhcmUgcXVldWUgYW5kIHRoZW4gc2VuZCBpdCB0byB0aGUgY29udHJvbGxlciAqLwotCWFkZFEoJihoLT5yZXFRKSwgYyk7CisJYWRkUSgmaC0+cmVxUSwgYyk7CiAJaC0+UWRlcHRoKys7CiAJaWYgKGgtPlFkZXB0aCA+IGgtPm1heFFzaW5jZWluaXQpCiAJCWgtPm1heFFzaW5jZWluaXQgPSBoLT5RZGVwdGg7CkBAIC0yODk3LDcgKzI4ODcsNyBAQAogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAotCWFkZFEoJihoLT5yZXFRKSwgYyk7CisJYWRkUSgmaC0+cmVxUSwgYyk7CiAJaC0+UWRlcHRoKys7CiAJaWYgKGgtPlFkZXB0aCA+IGgtPm1heFFzaW5jZWluaXQpCiAJCWgtPm1heFFzaW5jZWluaXQgPSBoLT5RZGVwdGg7CkBAIC0yOTg1LDE2ICsyOTc1LDEyIEBACiAJCQkJYSA9IGMtPmJ1c2FkZHI7CiAKIAkJCX0gZWxzZSB7CisJCQkJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwogCQkJCWEgJj0gfjM7Ci0JCQkJaWYgKChjID0gaC0+Y21wUSkgPT0gTlVMTCkgewotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSAgICAgICAiY2Npc3M6IENvbXBsZXRpb24gb2YgJTA4eCBpZ25vcmVkXG4iLAotCQkJCQkgICAgICAgYTEpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJd2hpbGUgKGMtPmJ1c2FkZHIgIT0gYSkgewotCQkJCQljID0gYy0+bmV4dDsKLQkJCQkJaWYgKGMgPT0gaC0+Y21wUSkKKwkJCQljID0gTlVMTDsKKwkJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7CisJCQkJCWlmIChjLT5idXNhZGRyID09IGEpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0zMDAyLDggKzI5ODgsOCBAQAogCQkJICogSWYgd2UndmUgZm91bmQgdGhlIGNvbW1hbmQsIHRha2UgaXQgb2ZmIHRoZQogCQkJICogY29tcGxldGlvbiBRIGFuZCBmcmVlIGl0CiAJCQkgKi8KLQkJCWlmIChjLT5idXNhZGRyID09IGEpIHsKLQkJCQlyZW1vdmVRKCZoLT5jbXBRLCBjKTsKKwkJCWlmIChjICYmIGMtPmJ1c2FkZHIgPT0gYSkgeworCQkJCXJlbW92ZVEoYyk7CiAJCQkJaWYgKGMtPmNtZF90eXBlID09IENNRF9SV1JFUSkgewogCQkJCQljb21wbGV0ZV9jb21tYW5kKGgsIGMsIDApOwogCQkJCX0gZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQ1RMX1BFTkQpIHsKQEAgLTM0MjMsNiArMzQwOSw4IEBACiAJCXJldHVybiAtMTsKIAogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAxOworCUlOSVRfSExJU1RfSEVBRCgmaGJhW2ldLT5jbXBRKTsKKwlJTklUX0hMSVNUX0hFQUQoJmhiYVtpXS0+cmVxUSk7CiAKIAlpZiAoY2Npc3NfcGNpX2luaXQoaGJhW2ldLCBwZGV2KSAhPSAwKQogCQlnb3RvIGNsZWFuMTsKQEAgLTM3MzAsMTUgKzM3MTgsMTcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoaC0+cGRldik7CS8qIE1ha2Ugc3VyZSBpdCBpcyByZWFsbHkgZGVhZC4gKi8KIAogCS8qIG1vdmUgZXZlcnl0aGluZyBvZmYgdGhlIHJlcXVlc3QgcXVldWUgb250byB0aGUgY29tcGxldGVkIHF1ZXVlICovCi0Jd2hpbGUgKChjID0gaC0+cmVxUSkgIT0gTlVMTCkgewotCQlyZW1vdmVRKCYoaC0+cmVxUSksIGMpOworCXdoaWxlICghaGxpc3RfZW1wdHkoJmgtPnJlcVEpKSB7CisJCWMgPSBobGlzdF9lbnRyeShoLT5yZXFRLmZpcnN0LCBDb21tYW5kTGlzdF9zdHJ1Y3QsIGxpc3QpOworCQlyZW1vdmVRKGMpOwogCQloLT5RZGVwdGgtLTsKLQkJYWRkUSgmKGgtPmNtcFEpLCBjKTsKKwkJYWRkUSgmaC0+Y21wUSwgYyk7CiAJfQogCiAJLyogTm93LCBmYWlsIGV2ZXJ5dGhpbmcgb24gdGhlIGNvbXBsZXRlZCBxdWV1ZSB3aXRoIGEgSFcgZXJyb3IgKi8KLQl3aGlsZSAoKGMgPSBoLT5jbXBRKSAhPSBOVUxMKSB7Ci0JCXJlbW92ZVEoJmgtPmNtcFEsIGMpOworCXdoaWxlICghaGxpc3RfZW1wdHkoJmgtPmNtcFEpKSB7CisJCWMgPSBobGlzdF9lbnRyeShoLT5jbXBRLmZpcnN0LCBDb21tYW5kTGlzdF9zdHJ1Y3QsIGxpc3QpOworCQlyZW1vdmVRKGMpOwogCQljLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyA9IENNRF9IQVJEV0FSRV9FUlI7CiAJCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfUldSRVEpIHsKIAkJCWNvbXBsZXRlX2NvbW1hbmQoaCwgYywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKaW5kZXggMjRhN2VmYS4uMTVlMmI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5oCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaApAQCAtODksOCArODksOCBAQAogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kIGFjY2VzczsKIAogCS8qIHF1ZXVlIGFuZCBxdWV1ZSBJbmZvICovIAotCUNvbW1hbmRMaXN0X3N0cnVjdCAqcmVxUTsKLQlDb21tYW5kTGlzdF9zdHJ1Y3QgICpjbXBROworCXN0cnVjdCBobGlzdF9oZWFkIHJlcVE7CisJc3RydWN0IGhsaXN0X2hlYWQgY21wUTsKIAl1bnNpZ25lZCBpbnQgUWRlcHRoOwogCXVuc2lnbmVkIGludCBtYXhRc2luY2Vpbml0OwogCXVuc2lnbmVkIGludCBtYXhTRzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCmluZGV4IDQzYmY1NTkuLjI0ZTIyZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaApAQCAtMjY1LDggKzI2NSw3IEBACiAgIGludAkJCSAgIGN0bHI7CiAgIGludAkJCSAgIGNtZF90eXBlOyAKICAgbG9uZwkJCSAgIGNtZGluZGV4OwotICBzdHJ1Y3QgX0NvbW1hbmRMaXN0X3N0cnVjdCAqcHJldjsKLSAgc3RydWN0IF9Db21tYW5kTGlzdF9zdHJ1Y3QgKm5leHQ7CisgIHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAgIHN0cnVjdCByZXF1ZXN0ICoJICAgcnE7CiAgIHN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwogICBpbnQJIHJldHJ5X2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBmYjA2ZWQ2Li5lZGJhYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNjI0LDIwICs2MjQsMzggQEAKIH0KIAogLyoKKyAqIEhlbHBlciB0byBmbHVzaCB0aGUgSU9zIGluIGxvb3AsIGJ1dCBrZWVwaW5nIGxvb3AgdGhyZWFkIHJ1bm5pbmcKKyAqLworc3RhdGljIGludCBsb29wX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCit7CisJLyogbG9vcCBub3QgeWV0IGNvbmZpZ3VyZWQsIG5vIHJ1bm5pbmcgdGhyZWFkLCBub3RoaW5nIHRvIGZsdXNoICovCisJaWYgKCFsby0+bG9fdGhyZWFkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBsb29wX3N3aXRjaChsbywgTlVMTCk7Cit9CisKKy8qCiAgKiBEbyB0aGUgYWN0dWFsIHN3aXRjaDsgY2FsbGVkIGZyb20gdGhlIEJJTyBjb21wbGV0aW9uIHJvdXRpbmUKICAqLwogc3RhdGljIHZvaWQgZG9fbG9vcF9zd2l0Y2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHN3aXRjaF9yZXF1ZXN0ICpwKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gcC0+ZmlsZTsKIAlzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGUgPSBsby0+bG9fYmFja2luZ19maWxlOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCisJLyogaWYgbm8gbmV3IGZpbGUsIG9ubHkgZmx1c2ggb2YgcXVldWVkIGJpb3MgcmVxdWVzdGVkICovCisJaWYgKCFmaWxlKQorCQlnb3RvIG91dDsKKworCW1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sob2xkX2ZpbGUtPmZfbWFwcGluZywgbG8tPm9sZF9nZnBfbWFzayk7CiAJbG8tPmxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7CiAJbG8tPmxvX2Jsb2Nrc2l6ZSA9IFNfSVNCTEsobWFwcGluZy0+aG9zdC0+aV9tb2RlKSA/CiAJCW1hcHBpbmctPmhvc3QtPmlfYmRldi0+YmRfYmxvY2tfc2l6ZSA6IFBBR0VfU0laRTsKIAlsby0+b2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBsby0+b2xkX2dmcF9tYXNrICYgfihfX0dGUF9JT3xfX0dGUF9GUykpOworb3V0OgogCWNvbXBsZXRlKCZwLT53YWl0KTsKIH0KIApAQCAtOTAxLDYgKzkxOSw3IEBACiAKIAlrdGhyZWFkX3N0b3AobG8tPmxvX3RocmVhZCk7CiAKKwlsby0+bG9fcXVldWUtPnVucGx1Z19mbiA9IE5VTEw7CiAJbG8tPmxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CiAKIAlsb29wX3JlbGVhc2VfeGZlcihsbyk7CkBAIC0xMzQ1LDExICsxMzY0LDI1IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwotCS0tbG8tPmxvX3JlZmNudDsKIAotCWlmICgobG8tPmxvX2ZsYWdzICYgTE9fRkxBR1NfQVVUT0NMRUFSKSAmJiAhbG8tPmxvX3JlZmNudCkKKwlpZiAoLS1sby0+bG9fcmVmY250KQorCQlnb3RvIG91dDsKKworCWlmIChsby0+bG9fZmxhZ3MgJiBMT19GTEFHU19BVVRPQ0xFQVIpIHsKKwkJLyoKKwkJICogSW4gYXV0b2NsZWFyIG1vZGUsIHN0b3AgdGhlIGxvb3AgdGhyZWFkCisJCSAqIGFuZCByZW1vdmUgY29uZmlndXJhdGlvbiBhZnRlciBsYXN0IGNsb3NlLgorCQkgKi8KIAkJbG9vcF9jbHJfZmQobG8sIE5VTEwpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE90aGVyd2lzZSBrZWVwIHRocmVhZCAoaWYgcnVubmluZykgYW5kIGNvbmZpZywKKwkJICogYnV0IGZsdXNoIHBvc3NpYmxlIG9uZ29pbmcgYmlvcyBpbiB0aHJlYWQuCisJCSAqLworCQlsb29wX2ZsdXNoKGxvKTsKKwl9CiAKK291dDoKIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCBkM2E5MWNhLi43YmNjMWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTcyMiw3ICs3MjIsNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IG5iZHNfbWF4OyBpKyspIHsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhbGxvY19kaXNrKDEgPDwgcGFydF9zaGlmdCk7Ci0JCWVsZXZhdG9yX3QgKm9sZF9lOwogCQlpZiAoIWRpc2spCiAJCQlnb3RvIG91dDsKIAkJbmJkX2RldltpXS5kaXNrID0gZGlzazsKQEAgLTczNiwxMSArNzM1LDEwIEBACiAJCQlwdXRfZGlzayhkaXNrKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW9sZF9lID0gZGlzay0+cXVldWUtPmVsZXZhdG9yOwotCQlpZiAoZWxldmF0b3JfaW5pdChkaXNrLT5xdWV1ZSwgImRlYWRsaW5lIikgPT0gMCB8fAotCQkJZWxldmF0b3JfaW5pdChkaXNrLT5xdWV1ZSwgIm5vb3AiKSA9PSAwKSB7Ci0JCQkJZWxldmF0b3JfZXhpdChvbGRfZSk7Ci0JCX0KKwkJLyoKKwkJICogVGVsbCB0aGUgYmxvY2sgbGF5ZXIgdGhhdCB3ZSBhcmUgbm90IGEgcm90YXRpb25hbCBkZXZpY2UKKwkJICovCisJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCBkaXNrLT5xdWV1ZSk7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihOQkRfTUFKT1IsICJuYmQiKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCA4NWQ3OWEwLi41ZDM0NzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBWSVJUSU9fTUFYX1NHCSgzK01BWF9QSFlTX1NFR01FTlRTKQogI2RlZmluZSBQQVJUX0JJVFMgNAogCiBzdGF0aWMgaW50IG1ham9yLCBpbmRleDsKQEAgLTI2LDggKzI1LDExIEBACiAKIAltZW1wb29sX3QgKnBvb2w7CiAKKwkvKiBXaGF0IGhvc3QgdGVsbHMgdXMsIHBsdXMgMiBmb3IgaGVhZGVyICYgdGFpbGVyLiAqLworCXVuc2lnbmVkIGludCBzZ19lbGVtczsKKwogCS8qIFNjYXR0ZXJsaXN0OiBjYW4gYmUgdG9vIGJpZyBmb3Igc3RhY2suICovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1ZJUlRJT19NQVhfU0ddOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1svKnNnX2VsZW1zKi9dOwogfTsKIAogc3RydWN0IHZpcnRibGtfcmVxCkBAIC05Nyw4ICs5OSw2IEBACiAJaWYgKGJsa19iYXJyaWVyX3JxKHZici0+cmVxKSkKIAkJdmJyLT5vdXRfaGRyLnR5cGUgfD0gVklSVElPX0JMS19UX0JBUlJJRVI7CiAKLQkvKiBUaGlzIGluaXQgY291bGQgYmUgZG9uZSBhdCB2YmxrIGNyZWF0aW9uIHRpbWUgKi8KLQlzZ19pbml0X3RhYmxlKHZibGstPnNnLCBWSVJUSU9fTUFYX1NHKTsKIAlzZ19zZXRfYnVmKCZ2YmxrLT5zZ1swXSwgJnZici0+b3V0X2hkciwgc2l6ZW9mKHZici0+b3V0X2hkcikpOwogCW51bSA9IGJsa19ycV9tYXBfc2cocSwgdmJyLT5yZXEsIHZibGstPnNnKzEpOwogCXNnX3NldF9idWYoJnZibGstPnNnW251bSsxXSwgJnZici0+c3RhdHVzLCBzaXplb2YodmJyLT5zdGF0dXMpKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpKSAhPSBOVUxMKSB7CiAJCXZibGsgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQkJQlVHX09OKHJlcS0+bnJfcGh5c19zZWdtZW50cyA+IEFSUkFZX1NJWkUodmJsay0+c2cpKTsKKwkJQlVHX09OKHJlcS0+bnJfcGh5c19zZWdtZW50cyArIDIgPiB2YmxrLT5zZ19lbGVtcyk7CiAKIAkJLyogSWYgdGhpcyByZXF1ZXN0IGZhaWxzLCBzdG9wIHF1ZXVlIGFuZCB3YWl0IGZvciBzb21ldGhpbmcgdG8KIAkJICAgZmluaXNoIHRvIHJlc3RhcnQgaXQuICovCkBAIC0xOTYsMTIgKzE5NiwyMiBAQAogCWludCBlcnI7CiAJdTY0IGNhcDsKIAl1MzIgdjsKLQl1MzIgYmxrX3NpemU7CisJdTMyIGJsa19zaXplLCBzZ19lbGVtczsKIAogCWlmIChpbmRleF90b19taW5vcihpbmRleCkgPj0gMSA8PCBNSU5PUkJJVFMpCiAJCXJldHVybiAtRU5PU1BDOwogCi0JdmRldi0+cHJpdiA9IHZibGsgPSBrbWFsbG9jKHNpemVvZigqdmJsayksIEdGUF9LRVJORUwpOworCS8qIFdlIG5lZWQgdG8ga25vdyBob3cgbWFueSBzZWdtZW50cyBiZWZvcmUgd2UgYWxsb2NhdGUuICovCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1NFR19NQVgsCisJCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBzZWdfbWF4KSwKKwkJCQkmc2dfZWxlbXMpOworCWlmIChlcnIpCisJCXNnX2VsZW1zID0gMTsKKworCS8qIFdlIG5lZWQgYW4gZXh0cmEgc2cgZWxlbWVudHMgYXQgaGVhZCBhbmQgdGFpbC4gKi8KKwlzZ19lbGVtcyArPSAyOworCXZkZXYtPnByaXYgPSB2YmxrID0ga21hbGxvYyhzaXplb2YoKnZibGspICsKKwkJCQkgICAgc2l6ZW9mKHZibGstPnNnWzBdKSAqIHNnX2VsZW1zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZibGspIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMTAsNiArMjIwLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmdmJsay0+cmVxcyk7CiAJc3Bpbl9sb2NrX2luaXQoJnZibGstPmxvY2spOwogCXZibGstPnZkZXYgPSB2ZGV2OworCXZibGstPnNnX2VsZW1zID0gc2dfZWxlbXM7CisJc2dfaW5pdF90YWJsZSh2YmxrLT5zZywgdmJsay0+c2dfZWxlbXMpOwogCiAJLyogV2UgZXhwZWN0IG9uZSB2aXJ0cXVldWUsIGZvciBvdXRwdXQuICovCiAJdmJsay0+dnEgPSB2ZGV2LT5jb25maWctPmZpbmRfdnEodmRldiwgMCwgYmxrX2RvbmUpOwpAQCAtMjM3LDYgKzI0OSw4IEBACiAJCWdvdG8gb3V0X3B1dF9kaXNrOwogCX0KIAorCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfVklSVCwgdmJsay0+ZGlzay0+cXVldWUpOworCiAJaWYgKGluZGV4IDwgMjYpIHsKIAkJc3ByaW50Zih2YmxrLT5kaXNrLT5kaXNrX25hbWUsICJ2ZCVjIiwgJ2EnICsgaW5kZXggJSAyNik7CiAJfSBlbHNlIGlmIChpbmRleCA8ICgyNiArIDEpICogMjYpIHsKQEAgLTI3Nyw2ICsyOTEsMTMgQEAKIAl9CiAJc2V0X2NhcGFjaXR5KHZibGstPmRpc2ssIGNhcCk7CiAKKwkvKiBXZSBjYW4gaGFuZGxlIHdoYXRldmVyIHRoZSBob3N0IHRvbGQgdXMgdG8gaGFuZGxlLiAqLworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7CisJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7CisKKwkvKiBObyByZWFsIHNlY3RvciBsaW1pdC4gKi8KKwlibGtfcXVldWVfbWF4X3NlY3RvcnModmJsay0+ZGlzay0+cXVldWUsIC0xVSk7CisKIAkvKiBIb3N0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgbWF4aW11bSBzZWdtZW50IHNpemUgYW5kIG51bWJlciBvZgogCSAqIHNlZ21lbnRzLiAqLwogCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwKQEAgLTI4NCwxMiArMzA1LDggQEAKIAkJCQkmdik7CiAJaWYgKCFlcnIpCiAJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHZibGstPmRpc2stPnF1ZXVlLCB2KTsKLQotCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9TRUdfTUFYLAotCQkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgc2VnX21heCksCi0JCQkJJnYpOwotCWlmICghZXJyKQotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHZibGstPmRpc2stPnF1ZXVlLCB2KTsKKwllbHNlCisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHZibGstPmRpc2stPnF1ZXVlLCAtMVUpOwogCiAJLyogSG9zdCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UgKi8KIAllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCAyZDE5ZjBjLi45MThlZjcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC0zMzgsMTggKzMzOCwxMiBAQAogc3RhdGljIGludCB4bHZiZF9pbml0X2Jsa19xdWV1ZShzdHJ1Y3QgZ2VuZGlzayAqZ2QsIHUxNiBzZWN0b3Jfc2l6ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcnE7Ci0JZWxldmF0b3JfdCAqb2xkX2U7CiAKIAlycSA9IGJsa19pbml0X3F1ZXVlKGRvX2Jsa2lmX3JlcXVlc3QsICZibGtpZl9pb19sb2NrKTsKIAlpZiAocnEgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0Jb2xkX2UgPSBycS0+ZWxldmF0b3I7Ci0JaWYgKElTX0VSUl9WQUxVRShlbGV2YXRvcl9pbml0KHJxLCAibm9vcCIpKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImJsa2Zyb250OiBTd2l0Y2ggZWxldmF0b3IgZmFpbGVkLCB1c2UgZGVmYXVsdFxuIik7Ci0JZWxzZQotCQllbGV2YXRvcl9leGl0KG9sZF9lKTsKKwlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1ZJUlQsIHJxKTsKIAogCS8qIEhhcmQgc2VjdG9yIHNpemUgYW5kIG1heCBzZWN0b3JzIGltcGVyc29uYXRlIHRoZSBlcXVpdi4gaGFyZHdhcmUuICovCiAJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUocnEsIHNlY3Rvcl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCA3ZDJlOTFjLi5jY2VhY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCkBAIC0xNzEyLDI5ICsxNzEyLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHZkX3JlYWRfcGh5c2ljYWwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMpCitzdGF0aWMgaW50IGR2ZF9yZWFkX3BoeXNpY2FsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzLAorCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzIxXSwgKmJhc2U7CiAJc3RydWN0IGR2ZF9sYXllciAqbGF5ZXI7Ci0Jc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAJaW50IHJldCwgbGF5ZXJfbnVtID0gcy0+cGh5c2ljYWwubGF5ZXJfbnVtOwogCiAJaWYgKGxheWVyX251bSA+PSBEVkRfTEFZRVJTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWYsIHNpemVvZihidWYpLCBDR0NfREFUQV9SRUFEKTsKLQljZ2MuY21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOwotCWNnYy5jbWRbNl0gPSBsYXllcl9udW07Ci0JY2djLmNtZFs3XSA9IHMtPnR5cGU7Ci0JY2djLmNtZFs5XSA9IGNnYy5idWZsZW4gJiAweGZmOworCWluaXRfY2Ryb21fY29tbWFuZChjZ2MsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIENHQ19EQVRBX1JFQUQpOworCWNnYy0+Y21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOworCWNnYy0+Y21kWzZdID0gbGF5ZXJfbnVtOworCWNnYy0+Y21kWzddID0gcy0+dHlwZTsKKwljZ2MtPmNtZFs5XSA9IGNnYy0+YnVmbGVuICYgMHhmZjsKIAogCS8qCiAJICogcmVmcmFpbiBmcm9tIHJlcG9ydGluZyBlcnJvcnMgb24gbm9uLWV4aXN0aW5nIGxheWVycyAobWFpbmx5KQogCSAqLwotCWNnYy5xdWlldCA9IDE7CisJY2djLT5xdWlldCA9IDE7CiAKLQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCisJcmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCWJhc2UgPSAmYnVmWzRdOwpAQCAtMTc2MiwyMSArMTc2MywyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR2ZF9yZWFkX2NvcHlyaWdodChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgZHZkX3N0cnVjdCAqcykKK3N0YXRpYyBpbnQgZHZkX3JlYWRfY29weXJpZ2h0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzLAorCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQogewogCWludCByZXQ7CiAJdV9jaGFyIGJ1Zls4XTsKLQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWYsIHNpemVvZihidWYpLCBDR0NfREFUQV9SRUFEKTsKLQljZ2MuY21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOwotCWNnYy5jbWRbNl0gPSBzLT5jb3B5cmlnaHQubGF5ZXJfbnVtOwotCWNnYy5jbWRbN10gPSBzLT50eXBlOwotCWNnYy5jbWRbOF0gPSBjZ2MuYnVmbGVuID4+IDg7Ci0JY2djLmNtZFs5XSA9IGNnYy5idWZsZW4gJiAweGZmOworCWluaXRfY2Ryb21fY29tbWFuZChjZ2MsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIENHQ19EQVRBX1JFQUQpOworCWNnYy0+Y21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOworCWNnYy0+Y21kWzZdID0gcy0+Y29weXJpZ2h0LmxheWVyX251bTsKKwljZ2MtPmNtZFs3XSA9IHMtPnR5cGU7CisJY2djLT5jbWRbOF0gPSBjZ2MtPmJ1ZmxlbiA+PiA4OworCWNnYy0+Y21kWzldID0gY2djLT5idWZsZW4gJiAweGZmOwogCi0JaWYgKChyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgJmNnYykpKQorCXJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCBjZ2MpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlzLT5jb3B5cmlnaHQuY3BzdCA9IGJ1Zls0XTsKQEAgLTE3ODUsNzkgKzE3ODcsODkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdmRfcmVhZF9kaXNja2V5KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzKQorc3RhdGljIGludCBkdmRfcmVhZF9kaXNja2V5KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzLAorCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQogewogCWludCByZXQsIHNpemU7CiAJdV9jaGFyICpidWY7Ci0Jc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAKIAlzaXplID0gc2l6ZW9mKHMtPmRpc2NrZXkudmFsdWUpICsgNDsKIAotCWlmICgoYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWYsIHNpemUsIENHQ19EQVRBX1JFQUQpOwotCWNnYy5jbWRbMF0gPSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkU7Ci0JY2djLmNtZFs3XSA9IHMtPnR5cGU7Ci0JY2djLmNtZFs4XSA9IHNpemUgPj4gODsKLQljZ2MuY21kWzldID0gc2l6ZSAmIDB4ZmY7Ci0JY2djLmNtZFsxMF0gPSBzLT5kaXNja2V5LmFnaWQgPDwgNjsKKwlpbml0X2Nkcm9tX2NvbW1hbmQoY2djLCBidWYsIHNpemUsIENHQ19EQVRBX1JFQUQpOworCWNnYy0+Y21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOworCWNnYy0+Y21kWzddID0gcy0+dHlwZTsKKwljZ2MtPmNtZFs4XSA9IHNpemUgPj4gODsKKwljZ2MtPmNtZFs5XSA9IHNpemUgJiAweGZmOworCWNnYy0+Y21kWzEwXSA9IHMtPmRpc2NrZXkuYWdpZCA8PCA2OwogCi0JaWYgKCEocmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpKSkKKwlyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKKwlpZiAoIXJldCkKIAkJbWVtY3B5KHMtPmRpc2NrZXkudmFsdWUsICZidWZbNF0sIHNpemVvZihzLT5kaXNja2V5LnZhbHVlKSk7CiAKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZHZkX3JlYWRfYmNhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzKQorc3RhdGljIGludCBkdmRfcmVhZF9iY2Eoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMsCisJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYykKIHsKLQlpbnQgcmV0OwotCXVfY2hhciBidWZbNCArIDE4OF07Ci0Jc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKKwlpbnQgcmV0LCBzaXplID0gNCArIDE4ODsKKwl1X2NoYXIgKmJ1ZjsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAKLQlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCBzaXplb2YoYnVmKSwgQ0dDX0RBVEFfUkVBRCk7Ci0JY2djLmNtZFswXSA9IEdQQ01EX1JFQURfRFZEX1NUUlVDVFVSRTsKLQljZ2MuY21kWzddID0gcy0+dHlwZTsKLQljZ2MuY21kWzldID0gY2djLmJ1ZmxlbiAmIDB4ZmY7CisJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpCi0JCXJldHVybiByZXQ7CisJaW5pdF9jZHJvbV9jb21tYW5kKGNnYywgYnVmLCBzaXplLCBDR0NfREFUQV9SRUFEKTsKKwljZ2MtPmNtZFswXSA9IEdQQ01EX1JFQURfRFZEX1NUUlVDVFVSRTsKKwljZ2MtPmNtZFs3XSA9IHMtPnR5cGU7CisJY2djLT5jbWRbOV0gPSBjZ2MtPmJ1ZmxlbiAmIDB4ZmY7CisKKwlyZXQgPSBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXMtPmJjYS5sZW4gPSBidWZbMF0gPDwgOCB8IGJ1ZlsxXTsKIAlpZiAocy0+YmNhLmxlbiA8IDEyIHx8IHMtPmJjYS5sZW4gPiAxODgpIHsKIAkJY2RpbmZvKENEX1dBUk5JTkcsICJSZWNlaXZlZCBpbnZhbGlkIEJDQSBsZW5ndGggKCVkKVxuIiwgcy0+YmNhLmxlbik7Ci0JCXJldHVybiAtRUlPOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAJbWVtY3B5KHMtPmJjYS52YWx1ZSwgJmJ1Zls0XSwgcy0+YmNhLmxlbik7Ci0KLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkdmRfcmVhZF9tYW51ZmFjdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgZHZkX3N0cnVjdCAqcykKK3N0YXRpYyBpbnQgZHZkX3JlYWRfbWFudWZhY3Qoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMsCisJCQkJc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCiB7CiAJaW50IHJldCA9IDAsIHNpemU7CiAJdV9jaGFyICpidWY7Ci0Jc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CiAKIAlzaXplID0gc2l6ZW9mKHMtPm1hbnVmYWN0LnZhbHVlKSArIDQ7CiAKLQlpZiAoKGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpbml0X2Nkcm9tX2NvbW1hbmQoJmNnYywgYnVmLCBzaXplLCBDR0NfREFUQV9SRUFEKTsKLQljZ2MuY21kWzBdID0gR1BDTURfUkVBRF9EVkRfU1RSVUNUVVJFOwotCWNnYy5jbWRbN10gPSBzLT50eXBlOwotCWNnYy5jbWRbOF0gPSBzaXplID4+IDg7Ci0JY2djLmNtZFs5XSA9IHNpemUgJiAweGZmOworCWluaXRfY2Ryb21fY29tbWFuZChjZ2MsIGJ1Ziwgc2l6ZSwgQ0dDX0RBVEFfUkVBRCk7CisJY2djLT5jbWRbMF0gPSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkU7CisJY2djLT5jbWRbN10gPSBzLT50eXBlOworCWNnYy0+Y21kWzhdID0gc2l6ZSA+PiA4OworCWNnYy0+Y21kWzldID0gc2l6ZSAmIDB4ZmY7CiAKLQlpZiAoKHJldCA9IGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKSkpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJcmV0ID0gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CiAKIAlzLT5tYW51ZmFjdC5sZW4gPSBidWZbMF0gPDwgOCB8IGJ1ZlsxXTsKIAlpZiAocy0+bWFudWZhY3QubGVuIDwgMCB8fCBzLT5tYW51ZmFjdC5sZW4gPiAyMDQ4KSB7CkBAIC0xODY4LDI3ICsxODgwLDI5IEBACiAJCW1lbWNweShzLT5tYW51ZmFjdC52YWx1ZSwgJmJ1Zls0XSwgcy0+bWFudWZhY3QubGVuKTsKIAl9CiAKK291dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZHZkX3JlYWRfc3RydWN0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBkdmRfc3RydWN0ICpzKQorc3RhdGljIGludCBkdmRfcmVhZF9zdHJ1Y3Qoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIGR2ZF9zdHJ1Y3QgKnMsCisJCQkJc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCiB7CiAJc3dpdGNoIChzLT50eXBlKSB7CiAJY2FzZSBEVkRfU1RSVUNUX1BIWVNJQ0FMOgotCQlyZXR1cm4gZHZkX3JlYWRfcGh5c2ljYWwoY2RpLCBzKTsKKwkJcmV0dXJuIGR2ZF9yZWFkX3BoeXNpY2FsKGNkaSwgcywgY2djKTsKIAogCWNhc2UgRFZEX1NUUlVDVF9DT1BZUklHSFQ6Ci0JCXJldHVybiBkdmRfcmVhZF9jb3B5cmlnaHQoY2RpLCBzKTsKKwkJcmV0dXJuIGR2ZF9yZWFkX2NvcHlyaWdodChjZGksIHMsIGNnYyk7CiAKIAljYXNlIERWRF9TVFJVQ1RfRElTQ0tFWToKLQkJcmV0dXJuIGR2ZF9yZWFkX2Rpc2NrZXkoY2RpLCBzKTsKKwkJcmV0dXJuIGR2ZF9yZWFkX2Rpc2NrZXkoY2RpLCBzLCBjZ2MpOwogCiAJY2FzZSBEVkRfU1RSVUNUX0JDQToKLQkJcmV0dXJuIGR2ZF9yZWFkX2JjYShjZGksIHMpOworCQlyZXR1cm4gZHZkX3JlYWRfYmNhKGNkaSwgcywgY2djKTsKIAogCWNhc2UgRFZEX1NUUlVDVF9NQU5VRkFDVDoKLQkJcmV0dXJuIGR2ZF9yZWFkX21hbnVmYWN0KGNkaSwgcyk7CisJCXJldHVybiBkdmRfcmVhZF9tYW51ZmFjdChjZGksIHMsIGNnYyk7CiAJCQogCWRlZmF1bHQ6CiAJCWNkaW5mbyhDRF9XQVJOSU5HLCAiOiBJbnZhbGlkIERWRCBzdHJ1Y3R1cmUgcmVhZCByZXF1ZXN0ZWQgKCVkKVxuIiwKQEAgLTI3ODcsMTQgKzI4MDEsMzI0IEBACiAJcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKIH0KIAorc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcmVhZF9kYXRhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQl2b2lkIF9fdXNlciAqYXJnLAorCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYywKKwkJCQkJaW50IGNtZCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKKwlzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKKwlpbnQgYmxvY2tzaXplID0gMCwgZm9ybWF0ID0gMCwgbGJhOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0RST01SRUFEUkFXOgorCQlibG9ja3NpemUgPSBDRF9GUkFNRVNJWkVfUkFXOworCQlicmVhazsKKwljYXNlIENEUk9NUkVBRE1PREUxOgorCQlibG9ja3NpemUgPSBDRF9GUkFNRVNJWkU7CisJCWZvcm1hdCA9IDI7CisJCWJyZWFrOworCWNhc2UgQ0RST01SRUFETU9ERTI6CisJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRV9SQVcwOworCQlicmVhazsKKwl9CisJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fbXNmLCBtc2YpOworCWxiYSA9IG1zZl90b19sYmEobXNmLmNkbXNmX21pbjAsIG1zZi5jZG1zZl9zZWMwLCBtc2YuY2Rtc2ZfZnJhbWUwKTsKKwkvKiBGSVhNRTogd2UgbmVlZCB1cHBlciBib3VuZCBjaGVja2luZywgdG9vISEgKi8KKwlpZiAobGJhIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZ2MtPmJ1ZmZlciA9IGttYWxsb2MoYmxvY2tzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2djLT5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoJnNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKKwljZ2MtPnNlbnNlID0gJnNlbnNlOworCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9SRUFEOworCXJldCA9IGNkcm9tX3JlYWRfYmxvY2soY2RpLCBjZ2MsIGxiYSwgMSwgZm9ybWF0LCBibG9ja3NpemUpOworCWlmIChyZXQgJiYgc2Vuc2Uuc2Vuc2Vfa2V5ID09IDB4MDUgJiYKKwkJICAgc2Vuc2UuYXNjID09IDB4MjAgJiYKKwkJICAgc2Vuc2UuYXNjcSA9PSAweDAwKSB7CisJCS8qCisJCSAqIFNDU0ktSUkgZGV2aWNlcyBhcmUgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQKKwkJICogUkVBRF9DRCwgc28gbGV0J3MgdHJ5IHN3aXRjaGluZyBibG9jayBzaXplCisJCSAqLworCQkvKiBGSVhNRTogc3dpdGNoIGJhY2sgYWdhaW4uLi4gKi8KKwkJcmV0ID0gY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShjZGksIGJsb2Nrc2l6ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJY2djLT5zZW5zZSA9IE5VTEw7CisJCXJldCA9IGNkcm9tX3JlYWRfY2QoY2RpLCBjZ2MsIGxiYSwgYmxvY2tzaXplLCAxKTsKKwkJcmV0IHw9IGNkcm9tX3N3aXRjaF9ibG9ja3NpemUoY2RpLCBibG9ja3NpemUpOworCX0KKwlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJnLCBjZ2MtPmJ1ZmZlciwgYmxvY2tzaXplKSkKKwkJcmV0ID0gLUVGQVVMVDsKK291dDoKKwlrZnJlZShjZ2MtPmJ1ZmZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcmVhZF9hdWRpbyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyByYTsKKwlpbnQgbGJhOworCisJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbywgcmEpOworCisJaWYgKHJhLmFkZHJfZm9ybWF0ID09IENEUk9NX01TRikKKwkJbGJhID0gbXNmX3RvX2xiYShyYS5hZGRyLm1zZi5taW51dGUsCisJCQkJIHJhLmFkZHIubXNmLnNlY29uZCwKKwkJCQkgcmEuYWRkci5tc2YuZnJhbWUpOworCWVsc2UgaWYgKHJhLmFkZHJfZm9ybWF0ID09IENEUk9NX0xCQSkKKwkJbGJhID0gcmEuYWRkci5sYmE7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZJWE1FOiB3ZSBuZWVkIHVwcGVyIGJvdW5kIGNoZWNraW5nLCB0b28hISAqLworCWlmIChsYmEgPCAwIHx8IHJhLm5mcmFtZXMgPD0gMCB8fCByYS5uZnJhbWVzID4gQ0RfRlJBTUVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjZHJvbV9yZWFkX2NkZGEoY2RpLCByYS5idWYsIGxiYSwgcmEubmZyYW1lcyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3N1YmNoYW5uZWwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJCXZvaWQgX191c2VyICphcmcpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2Ryb21fc3ViY2hubCBxOworCXVfY2hhciByZXF1ZXN0ZWQsIGJhY2s7CisJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fc3ViY2hubCwgcSk7CisJcmVxdWVzdGVkID0gcS5jZHNjX2Zvcm1hdDsKKwlpZiAoISgocmVxdWVzdGVkID09IENEUk9NX01TRikgfHwKKwkgICAgICAocmVxdWVzdGVkID09IENEUk9NX0xCQSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlxLmNkc2NfZm9ybWF0ID0gQ0RST01fTVNGOworCXJldCA9IGNkcm9tX3JlYWRfc3ViY2hhbm5lbChjZGksICZxLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWJhY2sgPSBxLmNkc2NfZm9ybWF0OyAvKiBsb2NhbCBjb3B5ICovCisJc2FuaXRpemVfZm9ybWF0KCZxLmNkc2NfYWJzYWRkciwgJmJhY2ssIHJlcXVlc3RlZCk7CisJc2FuaXRpemVfZm9ybWF0KCZxLmNkc2NfcmVsYWRkciwgJnEuY2RzY19mb3JtYXQsIHJlcXVlc3RlZCk7CisJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3N1YmNobmwsIHEpOworCS8qIGNkaW5mbyhDRF9ET19JT0NUTCwgIkNEUk9NU1VCQ0hOTCBzdWNjZXNzZnVsXG4iKTsgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcGxheV9tc2Yoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJCXZvaWQgX191c2VyICphcmcsCisJCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQoreworCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKKwlzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBMQVlNU0ZcbiIpOworCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX21zZiwgbXNmKTsKKwljZ2MtPmNtZFswXSA9IEdQQ01EX1BMQVlfQVVESU9fTVNGOworCWNnYy0+Y21kWzNdID0gbXNmLmNkbXNmX21pbjA7CisJY2djLT5jbWRbNF0gPSBtc2YuY2Rtc2Zfc2VjMDsKKwljZ2MtPmNtZFs1XSA9IG1zZi5jZG1zZl9mcmFtZTA7CisJY2djLT5jbWRbNl0gPSBtc2YuY2Rtc2ZfbWluMTsKKwljZ2MtPmNtZFs3XSA9IG1zZi5jZG1zZl9zZWMxOworCWNnYy0+Y21kWzhdID0gbXNmLmNkbXNmX2ZyYW1lMTsKKwljZ2MtPmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKKwlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksIGNnYyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3BsYXlfYmxrKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQl2b2lkIF9fdXNlciAqYXJnLAorCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYykKK3sKKwlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CisJc3RydWN0IGNkcm9tX2JsayBibGs7CisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZQkxLXG4iKTsKKwlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV9ibGssIGJsayk7CisJY2djLT5jbWRbMF0gPSBHUENNRF9QTEFZX0FVRElPXzEwOworCWNnYy0+Y21kWzJdID0gKGJsay5mcm9tID4+IDI0KSAmIDB4ZmY7CisJY2djLT5jbWRbM10gPSAoYmxrLmZyb20gPj4gMTYpICYgMHhmZjsKKwljZ2MtPmNtZFs0XSA9IChibGsuZnJvbSA+PiAgOCkgJiAweGZmOworCWNnYy0+Y21kWzVdID0gYmxrLmZyb20gJiAweGZmOworCWNnYy0+Y21kWzddID0gKGJsay5sZW4gPj4gOCkgJiAweGZmOworCWNnYy0+Y21kWzhdID0gYmxrLmxlbiAmIDB4ZmY7CisJY2djLT5kYXRhX2RpcmVjdGlvbiA9IENHQ19EQVRBX05PTkU7CisJcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCBjZ2MpOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IG1tY19pb2N0bF9jZHJvbV92b2x1bWUoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJCXZvaWQgX191c2VyICphcmcsCisJCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kKQoreworCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbGN0cmw7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMzJdOworCWNoYXIgbWFza1tzaXplb2YoYnVmZmVyKV07CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0OworCWludCByZXQ7CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTFVNRVxuIik7CisKKwlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV92b2xjdHJsLCB2b2xjdHJsKTsKKworCWNnYy0+YnVmZmVyID0gYnVmZmVyOworCWNnYy0+YnVmbGVuID0gMjQ7CisJcmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksIGNnYywgR1BNT0RFX0FVRElPX0NUTF9QQUdFLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCQkKKwkvKiBvcmlnaW5hbGx5IHRoZSBjb2RlIGRlcGVuZGVkIG9uIGJ1ZmZlclsxXSB0byBkZXRlcm1pbmUKKwkgICBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgdHJhbnNmZXIuIGJ1ZmZlclsxXSBpcworCSAgIHVuZm9ydHVuYXRlbHkgYW1iaWdpb3VzIGFuZCB0aGUgb25seSByZWxpYWJsZSB3YXkgc2VlbQorCSAgIHRvIGJlIHRvIHNpbXBseSBza2lwIG92ZXIgdGhlIGJsb2NrIGRlc2NyaXB0b3IuLi4gKi8KKwlvZmZzZXQgPSA4ICsgYmUxNl90b19jcHUoKihfX2JlMTYgKikoYnVmZmVyICsgNikpOworCisJaWYgKG9mZnNldCArIDE2ID4gc2l6ZW9mKGJ1ZmZlcikpCisJCXJldHVybiAtRTJCSUc7CisKKwlpZiAob2Zmc2V0ICsgMTYgPiBjZ2MtPmJ1ZmxlbikgeworCQljZ2MtPmJ1ZmxlbiA9IG9mZnNldCArIDE2OworCQlyZXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgY2djLAorCQkJCQlHUE1PREVfQVVESU9fQ1RMX1BBR0UsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoKGJ1ZmZlcltvZmZzZXRdICYgMHgzZikgIT0gR1BNT0RFX0FVRElPX0NUTF9QQUdFIHx8CisJCQlidWZmZXJbb2Zmc2V0ICsgMV0gPCAxNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBub3cgd2UgaGF2ZSB0aGUgY3VycmVudCB2b2x1bWUgc2V0dGluZ3MuIGlmIGl0IHdhcyBvbmx5CisJICAgYSBDRFJPTVZPTFJFQUQsIHJldHVybiB0aGVzZSB2YWx1ZXMgKi8KKwlpZiAoY21kID09IENEUk9NVk9MUkVBRCkgeworCQl2b2xjdHJsLmNoYW5uZWwwID0gYnVmZmVyW29mZnNldCs5XTsKKwkJdm9sY3RybC5jaGFubmVsMSA9IGJ1ZmZlcltvZmZzZXQrMTFdOworCQl2b2xjdHJsLmNoYW5uZWwyID0gYnVmZmVyW29mZnNldCsxM107CisJCXZvbGN0cmwuY2hhbm5lbDMgPSBidWZmZXJbb2Zmc2V0KzE1XTsKKwkJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3ZvbGN0cmwsIHZvbGN0cmwpOworCQlyZXR1cm4gMDsKKwl9CisJCQorCS8qIGdldCB0aGUgdm9sdW1lIG1hc2sgKi8KKwljZ2MtPmJ1ZmZlciA9IG1hc2s7CisJcmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksIGNnYywgR1BNT0RFX0FVRElPX0NUTF9QQUdFLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnVmZmVyW29mZnNldCArIDldICA9IHZvbGN0cmwuY2hhbm5lbDAgJiBtYXNrW29mZnNldCArIDldOworCWJ1ZmZlcltvZmZzZXQgKyAxMV0gPSB2b2xjdHJsLmNoYW5uZWwxICYgbWFza1tvZmZzZXQgKyAxMV07CisJYnVmZmVyW29mZnNldCArIDEzXSA9IHZvbGN0cmwuY2hhbm5lbDIgJiBtYXNrW29mZnNldCArIDEzXTsKKwlidWZmZXJbb2Zmc2V0ICsgMTVdID0gdm9sY3RybC5jaGFubmVsMyAmIG1hc2tbb2Zmc2V0ICsgMTVdOworCisJLyogc2V0IHZvbHVtZSAqLworCWNnYy0+YnVmZmVyID0gYnVmZmVyICsgb2Zmc2V0IC0gODsKKwltZW1zZXQoY2djLT5idWZmZXIsIDAsIDgpOworCXJldHVybiBjZHJvbV9tb2RlX3NlbGVjdChjZGksIGNnYyk7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX3N0YXJ0X3N0b3Aoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djLAorCQkJCQlpbnQgY21kKQoreworCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVNUQVJUL0NEUk9NU1RPUFxuIik7CisJY2djLT5jbWRbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7CisJY2djLT5jbWRbMV0gPSAxOworCWNnYy0+Y21kWzRdID0gKGNtZCA9PSBDRFJPTVNUQVJUKSA/IDEgOiAwOworCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOworCXJldHVybiBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fcGF1c2VfcmVzdW1lKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKmNnYywKKwkJCQkJaW50IGNtZCkKK3sKKwlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QQVVTRS9DRFJPTVJFU1VNRVxuIik7CisJY2djLT5jbWRbMF0gPSBHUENNRF9QQVVTRV9SRVNVTUU7CisJY2djLT5jbWRbOF0gPSAoY21kID09IENEUk9NUkVTVU1FKSA/IDEgOiAwOworCWNnYy0+ZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOworCXJldHVybiBjZG8tPmdlbmVyaWNfcGFja2V0KGNkaSwgY2djKTsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfZHZkX3JlYWRfc3RydWN0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQkJdm9pZCBfX3VzZXIgKmFyZywKKwkJCQkJCXN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY2djKQoreworCWludCByZXQ7CisJZHZkX3N0cnVjdCAqczsKKwlpbnQgc2l6ZSA9IHNpemVvZihkdmRfc3RydWN0KTsKKworCWlmICghQ0RST01fQ0FOKENEQ19EVkQpKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfUkVBRF9TVFJVQ1RcbiIpOworCWlmIChjb3B5X2Zyb21fdXNlcihzLCBhcmcsIHNpemUpKSB7CisJCWtmcmVlKHMpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXQgPSBkdmRfcmVhZF9zdHJ1Y3QoY2RpLCBzLCBjZ2MpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIHMsIHNpemUpKQorCQlyZXQgPSAtRUZBVUxUOworb3V0OgorCWtmcmVlKHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2R2ZF9hdXRoKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQkJCQl2b2lkIF9fdXNlciAqYXJnKQoreworCWludCByZXQ7CisJZHZkX2F1dGhpbmZvIGFpOworCWlmICghQ0RST01fQ0FOKENEQ19EVkQpKQorCQlyZXR1cm4gLUVOT1NZUzsKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfQVVUSFxuIik7CisJSU9DVExfSU4oYXJnLCBkdmRfYXV0aGluZm8sIGFpKTsKKwlyZXQgPSBkdmRfZG9fYXV0aChjZGksICZhaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlJT0NUTF9PVVQoYXJnLCBkdmRfYXV0aGluZm8sIGFpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBtbWNfaW9jdGxfY2Ryb21fbmV4dF93cml0YWJsZShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJCXZvaWQgX191c2VyICphcmcpCit7CisJaW50IHJldDsKKwlsb25nIG5leHQgPSAwOworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX05FWFRfV1JJVEFCTEVcbiIpOworCXJldCA9IGNkcm9tX2dldF9uZXh0X3dyaXRhYmxlKGNkaSwgJm5leHQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJSU9DVExfT1VUKGFyZywgbG9uZywgbmV4dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgbW1jX2lvY3RsX2Nkcm9tX2xhc3Rfd3JpdHRlbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJCQkJCXZvaWQgX191c2VyICphcmcpCit7CisJaW50IHJldDsKKwlsb25nIGxhc3QgPSAwOworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0xBU1RfV1JJVFRFTlxuIik7CisJcmV0ID0gY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbihjZGksICZsYXN0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCUlPQ1RMX09VVChhcmcsIGxvbmcsIGxhc3QpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG1tY19pb2N0bChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgdW5zaWduZWQgaW50IGNtZCwKIAkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsJCQotCXN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzICpjZG8gPSBjZGktPm9wczsKK3sKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwotCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlOwotCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzMyXTsKLQlpbnQgcmV0ID0gMDsKKwl2b2lkIF9fdXNlciAqdXNlcnB0ciA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCW1lbXNldCgmY2djLCAwLCBzaXplb2YoY2djKSk7CiAKQEAgLTI4MDMsMjU1ICszMTI3LDM0IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENEUk9NUkVBRFJBVzoKIAljYXNlIENEUk9NUkVBRE1PREUxOgotCWNhc2UgQ0RST01SRUFETU9ERTI6IHsKLQkJc3RydWN0IGNkcm9tX21zZiBtc2Y7Ci0JCWludCBibG9ja3NpemUgPSAwLCBmb3JtYXQgPSAwLCBsYmE7Ci0JCQotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIENEUk9NUkVBRFJBVzoKLQkJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRV9SQVc7Ci0JCQlicmVhazsKLQkJY2FzZSBDRFJPTVJFQURNT0RFMToKLQkJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRTsKLQkJCWZvcm1hdCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSBDRFJPTVJFQURNT0RFMjoKLQkJCWJsb2Nrc2l6ZSA9IENEX0ZSQU1FU0laRV9SQVcwOwotCQkJYnJlYWs7Ci0JCX0KLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fbXNmLCBtc2YpOwotCQlsYmEgPSBtc2ZfdG9fbGJhKG1zZi5jZG1zZl9taW4wLG1zZi5jZG1zZl9zZWMwLG1zZi5jZG1zZl9mcmFtZTApOwotCQkvKiBGSVhNRTogd2UgbmVlZCB1cHBlciBib3VuZCBjaGVja2luZywgdG9vISEgKi8KLQkJaWYgKGxiYSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2djLmJ1ZmZlciA9IGttYWxsb2MoYmxvY2tzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGNnYy5idWZmZXIgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1zZXQoJnNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKLQkJY2djLnNlbnNlID0gJnNlbnNlOwotCQljZ2MuZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9SRUFEOwotCQlyZXQgPSBjZHJvbV9yZWFkX2Jsb2NrKGNkaSwgJmNnYywgbGJhLCAxLCBmb3JtYXQsIGJsb2Nrc2l6ZSk7Ci0JCWlmIChyZXQgJiYgc2Vuc2Uuc2Vuc2Vfa2V5PT0weDA1ICYmIHNlbnNlLmFzYz09MHgyMCAmJiBzZW5zZS5hc2NxPT0weDAwKSB7Ci0JCQkvKgotCQkJICogU0NTSS1JSSBkZXZpY2VzIGFyZSBub3QgcmVxdWlyZWQgdG8gc3VwcG9ydAotCQkJICogUkVBRF9DRCwgc28gbGV0J3MgdHJ5IHN3aXRjaGluZyBibG9jayBzaXplCi0JCQkgKi8KLQkJCS8qIEZJWE1FOiBzd2l0Y2ggYmFjayBhZ2Fpbi4uLiAqLwotCQkJaWYgKChyZXQgPSBjZHJvbV9zd2l0Y2hfYmxvY2tzaXplKGNkaSwgYmxvY2tzaXplKSkpIHsKLQkJCQlrZnJlZShjZ2MuYnVmZmVyKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJY2djLnNlbnNlID0gTlVMTDsKLQkJCXJldCA9IGNkcm9tX3JlYWRfY2QoY2RpLCAmY2djLCBsYmEsIGJsb2Nrc2l6ZSwgMSk7Ci0JCQlyZXQgfD0gY2Ryb21fc3dpdGNoX2Jsb2Nrc2l6ZShjZGksIGJsb2Nrc2l6ZSk7Ci0JCX0KLQkJaWYgKCFyZXQgJiYgY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKWFyZywgY2djLmJ1ZmZlciwgYmxvY2tzaXplKSkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWtmcmVlKGNnYy5idWZmZXIpOwotCQlyZXR1cm4gcmV0OwotCQl9Ci0JY2FzZSBDRFJPTVJFQURBVURJTzogewotCQlzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyByYTsKLQkJaW50IGxiYTsKLQotCQlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvLCByYSk7Ci0KLQkJaWYgKHJhLmFkZHJfZm9ybWF0ID09IENEUk9NX01TRikKLQkJCWxiYSA9IG1zZl90b19sYmEocmEuYWRkci5tc2YubWludXRlLAotCQkJCQkgcmEuYWRkci5tc2Yuc2Vjb25kLAotCQkJCQkgcmEuYWRkci5tc2YuZnJhbWUpOwotCQllbHNlIGlmIChyYS5hZGRyX2Zvcm1hdCA9PSBDRFJPTV9MQkEpCi0JCQlsYmEgPSByYS5hZGRyLmxiYTsKLQkJZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyogRklYTUU6IHdlIG5lZWQgdXBwZXIgYm91bmQgY2hlY2tpbmcsIHRvbyEhICovCi0JCWlmIChsYmEgPCAwIHx8IHJhLm5mcmFtZXMgPD0gMCB8fCByYS5uZnJhbWVzID4gQ0RfRlJBTUVTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIGNkcm9tX3JlYWRfY2RkYShjZGksIHJhLmJ1ZiwgbGJhLCByYS5uZnJhbWVzKTsKLQkJfQotCWNhc2UgQ0RST01TVUJDSE5MOiB7Ci0JCXN0cnVjdCBjZHJvbV9zdWJjaG5sIHE7Ci0JCXVfY2hhciByZXF1ZXN0ZWQsIGJhY2s7Ci0JCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX3N1YmNobmwsIHEpOwotCQlyZXF1ZXN0ZWQgPSBxLmNkc2NfZm9ybWF0OwotCQlpZiAoISgocmVxdWVzdGVkID09IENEUk9NX01TRikgfHwKLQkJICAgICAgKHJlcXVlc3RlZCA9PSBDRFJPTV9MQkEpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlxLmNkc2NfZm9ybWF0ID0gQ0RST01fTVNGOwotCQlpZiAoKHJldCA9IGNkcm9tX3JlYWRfc3ViY2hhbm5lbChjZGksICZxLCAwKSkpCi0JCQlyZXR1cm4gcmV0OwotCQliYWNrID0gcS5jZHNjX2Zvcm1hdDsgLyogbG9jYWwgY29weSAqLwotCQlzYW5pdGl6ZV9mb3JtYXQoJnEuY2RzY19hYnNhZGRyLCAmYmFjaywgcmVxdWVzdGVkKTsKLQkJc2FuaXRpemVfZm9ybWF0KCZxLmNkc2NfcmVsYWRkciwgJnEuY2RzY19mb3JtYXQsIHJlcXVlc3RlZCk7Ci0JCUlPQ1RMX09VVChhcmcsIHN0cnVjdCBjZHJvbV9zdWJjaG5sLCBxKTsKLQkJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01TVUJDSE5MIHN1Y2Nlc3NmdWxcbiIpOyAqLyAKLQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIENEUk9NUExBWU1TRjogewotCQlzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZTVNGXG4iKTsKLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fbXNmLCBtc2YpOwotCQljZ2MuY21kWzBdID0gR1BDTURfUExBWV9BVURJT19NU0Y7Ci0JCWNnYy5jbWRbM10gPSBtc2YuY2Rtc2ZfbWluMDsKLQkJY2djLmNtZFs0XSA9IG1zZi5jZG1zZl9zZWMwOwotCQljZ2MuY21kWzVdID0gbXNmLmNkbXNmX2ZyYW1lMDsKLQkJY2djLmNtZFs2XSA9IG1zZi5jZG1zZl9taW4xOwotCQljZ2MuY21kWzddID0gbXNmLmNkbXNmX3NlYzE7Ci0JCWNnYy5jbWRbOF0gPSBtc2YuY2Rtc2ZfZnJhbWUxOwotCQljZ2MuZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOwotCQlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpOwotCQl9Ci0JY2FzZSBDRFJPTVBMQVlCTEs6IHsKLQkJc3RydWN0IGNkcm9tX2JsayBibGs7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NUExBWUJMS1xuIik7Ci0JCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX2JsaywgYmxrKTsKLQkJY2djLmNtZFswXSA9IEdQQ01EX1BMQVlfQVVESU9fMTA7Ci0JCWNnYy5jbWRbMl0gPSAoYmxrLmZyb20gPj4gMjQpICYgMHhmZjsKLQkJY2djLmNtZFszXSA9IChibGsuZnJvbSA+PiAxNikgJiAweGZmOwotCQljZ2MuY21kWzRdID0gKGJsay5mcm9tID4+ICA4KSAmIDB4ZmY7Ci0JCWNnYy5jbWRbNV0gPSBibGsuZnJvbSAmIDB4ZmY7Ci0JCWNnYy5jbWRbN10gPSAoYmxrLmxlbiA+PiA4KSAmIDB4ZmY7Ci0JCWNnYy5jbWRbOF0gPSBibGsubGVuICYgMHhmZjsKLQkJY2djLmRhdGFfZGlyZWN0aW9uID0gQ0dDX0RBVEFfTk9ORTsKLQkJcmV0dXJuIGNkby0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKLQkJfQorCWNhc2UgQ0RST01SRUFETU9ERTI6CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcmVhZF9kYXRhKGNkaSwgdXNlcnB0ciwgJmNnYywgY21kKTsKKwljYXNlIENEUk9NUkVBREFVRElPOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3JlYWRfYXVkaW8oY2RpLCB1c2VycHRyKTsKKwljYXNlIENEUk9NU1VCQ0hOTDoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9zdWJjaGFubmVsKGNkaSwgdXNlcnB0cik7CisJY2FzZSBDRFJPTVBMQVlNU0Y6CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcGxheV9tc2YoY2RpLCB1c2VycHRyLCAmY2djKTsKKwljYXNlIENEUk9NUExBWUJMSzoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9wbGF5X2JsayhjZGksIHVzZXJwdHIsICZjZ2MpOwogCWNhc2UgQ0RST01WT0xDVFJMOgotCWNhc2UgQ0RST01WT0xSRUFEOiB7Ci0JCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbGN0cmw7Ci0JCWNoYXIgbWFza1tzaXplb2YoYnVmZmVyKV07Ci0JCXVuc2lnbmVkIHNob3J0IG9mZnNldDsKLQotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTFVNRVxuIik7Ci0KLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fdm9sY3RybCwgdm9sY3RybCk7Ci0KLQkJY2djLmJ1ZmZlciA9IGJ1ZmZlcjsKLQkJY2djLmJ1ZmxlbiA9IDI0OwotCQlpZiAoKHJldCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCAmY2djLCBHUE1PREVfQVVESU9fQ1RMX1BBR0UsIDApKSkKLQkJICAgIHJldHVybiByZXQ7Ci0JCQotCQkvKiBvcmlnaW5hbGx5IHRoZSBjb2RlIGRlcGVuZGVkIG9uIGJ1ZmZlclsxXSB0byBkZXRlcm1pbmUKLQkJICAgaG93IG11Y2ggZGF0YSBpcyBhdmFpbGFibGUgZm9yIHRyYW5zZmVyLiBidWZmZXJbMV0gaXMKLQkJICAgdW5mb3J0dW5hdGVseSBhbWJpZ2lvdXMgYW5kIHRoZSBvbmx5IHJlbGlhYmxlIHdheSBzZWVtCi0JCSAgIHRvIGJlIHRvIHNpbXBseSBza2lwIG92ZXIgdGhlIGJsb2NrIGRlc2NyaXB0b3IuLi4gKi8KLQkJb2Zmc2V0ID0gOCArIGJlMTZfdG9fY3B1KCooX19iZTE2ICopKGJ1ZmZlcis2KSk7Ci0KLQkJaWYgKG9mZnNldCArIDE2ID4gc2l6ZW9mKGJ1ZmZlcikpCi0JCQlyZXR1cm4gLUUyQklHOwotCi0JCWlmIChvZmZzZXQgKyAxNiA+IGNnYy5idWZsZW4pIHsKLQkJCWNnYy5idWZsZW4gPSBvZmZzZXQrMTY7Ci0JCQlyZXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgJmNnYywKLQkJCQkJCUdQTU9ERV9BVURJT19DVExfUEFHRSwgMCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQkvKiBzYW5pdHkgY2hlY2sgKi8KLQkJaWYgKChidWZmZXJbb2Zmc2V0XSAmIDB4M2YpICE9IEdQTU9ERV9BVURJT19DVExfUEFHRSB8fAotCQkJCWJ1ZmZlcltvZmZzZXQrMV0gPCAxNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIG5vdyB3ZSBoYXZlIHRoZSBjdXJyZW50IHZvbHVtZSBzZXR0aW5ncy4gaWYgaXQgd2FzIG9ubHkKLQkJICAgYSBDRFJPTVZPTFJFQUQsIHJldHVybiB0aGVzZSB2YWx1ZXMgKi8KLQkJaWYgKGNtZCA9PSBDRFJPTVZPTFJFQUQpIHsKLQkJCXZvbGN0cmwuY2hhbm5lbDAgPSBidWZmZXJbb2Zmc2V0KzldOwotCQkJdm9sY3RybC5jaGFubmVsMSA9IGJ1ZmZlcltvZmZzZXQrMTFdOwotCQkJdm9sY3RybC5jaGFubmVsMiA9IGJ1ZmZlcltvZmZzZXQrMTNdOwotCQkJdm9sY3RybC5jaGFubmVsMyA9IGJ1ZmZlcltvZmZzZXQrMTVdOwotCQkJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3ZvbGN0cmwsIHZvbGN0cmwpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJCi0JCS8qIGdldCB0aGUgdm9sdW1lIG1hc2sgKi8KLQkJY2djLmJ1ZmZlciA9IG1hc2s7Ci0JCWlmICgocmV0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksICZjZ2MsIAotCQkJCUdQTU9ERV9BVURJT19DVExfUEFHRSwgMSkpKQotCQkJcmV0dXJuIHJldDsKLQotCQlidWZmZXJbb2Zmc2V0KzldID0gdm9sY3RybC5jaGFubmVsMCAmIG1hc2tbb2Zmc2V0KzldOwotCQlidWZmZXJbb2Zmc2V0KzExXSA9IHZvbGN0cmwuY2hhbm5lbDEgJiBtYXNrW29mZnNldCsxMV07Ci0JCWJ1ZmZlcltvZmZzZXQrMTNdID0gdm9sY3RybC5jaGFubmVsMiAmIG1hc2tbb2Zmc2V0KzEzXTsKLQkJYnVmZmVyW29mZnNldCsxNV0gPSB2b2xjdHJsLmNoYW5uZWwzICYgbWFza1tvZmZzZXQrMTVdOwotCi0JCS8qIHNldCB2b2x1bWUgKi8KLQkJY2djLmJ1ZmZlciA9IGJ1ZmZlciArIG9mZnNldCAtIDg7Ci0JCW1lbXNldChjZ2MuYnVmZmVyLCAwLCA4KTsKLQkJcmV0dXJuIGNkcm9tX21vZGVfc2VsZWN0KGNkaSwgJmNnYyk7Ci0JCX0KLQorCWNhc2UgQ0RST01WT0xSRUFEOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX3ZvbHVtZShjZGksIHVzZXJwdHIsICZjZ2MsIGNtZCk7CiAJY2FzZSBDRFJPTVNUQVJUOgotCWNhc2UgQ0RST01TVE9QOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NU1RBUlQvQ0RST01TVE9QXG4iKTsgCi0JCWNnYy5jbWRbMF0gPSBHUENNRF9TVEFSVF9TVE9QX1VOSVQ7Ci0JCWNnYy5jbWRbMV0gPSAxOwotCQljZ2MuY21kWzRdID0gKGNtZCA9PSBDRFJPTVNUQVJUKSA/IDEgOiAwOwotCQljZ2MuZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOwotCQlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpOwotCQl9Ci0KKwljYXNlIENEUk9NU1RPUDoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9zdGFydF9zdG9wKGNkaSwgJmNnYywgY21kKTsKIAljYXNlIENEUk9NUEFVU0U6Ci0JY2FzZSBDRFJPTVJFU1VNRTogewotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBBVVNFL0NEUk9NUkVTVU1FXG4iKTsgCi0JCWNnYy5jbWRbMF0gPSBHUENNRF9QQVVTRV9SRVNVTUU7Ci0JCWNnYy5jbWRbOF0gPSAoY21kID09IENEUk9NUkVTVU1FKSA/IDEgOiAwOwotCQljZ2MuZGF0YV9kaXJlY3Rpb24gPSBDR0NfREFUQV9OT05FOwotCQlyZXR1cm4gY2RvLT5nZW5lcmljX3BhY2tldChjZGksICZjZ2MpOwotCQl9Ci0KLQljYXNlIERWRF9SRUFEX1NUUlVDVDogewotCQlkdmRfc3RydWN0ICpzOwotCQlpbnQgc2l6ZSA9IHNpemVvZihkdmRfc3RydWN0KTsKLQkJaWYgKCFDRFJPTV9DQU4oQ0RDX0RWRCkpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJaWYgKChzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfUkVBRF9TVFJVQ1RcbiIpOyAKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHMsIChkdmRfc3RydWN0IF9fdXNlciAqKWFyZywgc2l6ZSkpIHsKLQkJCWtmcmVlKHMpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJaWYgKChyZXQgPSBkdmRfcmVhZF9zdHJ1Y3QoY2RpLCBzKSkpIHsKLQkJCWtmcmVlKHMpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAoY29weV90b191c2VyKChkdmRfc3RydWN0IF9fdXNlciAqKWFyZywgcywgc2l6ZSkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlrZnJlZShzKTsKLQkJcmV0dXJuIHJldDsKLQkJfQotCi0JY2FzZSBEVkRfQVVUSDogewotCQlkdmRfYXV0aGluZm8gYWk7Ci0JCWlmICghQ0RST01fQ0FOKENEQ19EVkQpKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIERWRF9BVVRIXG4iKTsgCi0JCUlPQ1RMX0lOKGFyZywgZHZkX2F1dGhpbmZvLCBhaSk7Ci0JCWlmICgocmV0ID0gZHZkX2RvX2F1dGggKGNkaSwgJmFpKSkpCi0JCQlyZXR1cm4gcmV0OwotCQlJT0NUTF9PVVQoYXJnLCBkdmRfYXV0aGluZm8sIGFpKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQotCWNhc2UgQ0RST01fTkVYVF9XUklUQUJMRTogewotCQlsb25nIG5leHQgPSAwOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9ORVhUX1dSSVRBQkxFXG4iKTsgCi0JCWlmICgocmV0ID0gY2Ryb21fZ2V0X25leHRfd3JpdGFibGUoY2RpLCAmbmV4dCkpKQotCQkJcmV0dXJuIHJldDsKLQkJSU9DVExfT1VUKGFyZywgbG9uZywgbmV4dCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JY2FzZSBDRFJPTV9MQVNUX1dSSVRURU46IHsKLQkJbG9uZyBsYXN0ID0gMDsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fTEFTVF9XUklUVEVOXG4iKTsgCi0JCWlmICgocmV0ID0gY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbihjZGksICZsYXN0KSkpCi0JCQlyZXR1cm4gcmV0OwotCQlJT0NUTF9PVVQoYXJnLCBsb25nLCBsYXN0KTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQl9IC8qIHN3aXRjaCAqLworCWNhc2UgQ0RST01SRVNVTUU6CisJCXJldHVybiBtbWNfaW9jdGxfY2Ryb21fcGF1c2VfcmVzdW1lKGNkaSwgJmNnYywgY21kKTsKKwljYXNlIERWRF9SRUFEX1NUUlVDVDoKKwkJcmV0dXJuIG1tY19pb2N0bF9kdmRfcmVhZF9zdHJ1Y3QoY2RpLCB1c2VycHRyLCAmY2djKTsKKwljYXNlIERWRF9BVVRIOgorCQlyZXR1cm4gbW1jX2lvY3RsX2R2ZF9hdXRoKGNkaSwgdXNlcnB0cik7CisJY2FzZSBDRFJPTV9ORVhUX1dSSVRBQkxFOgorCQlyZXR1cm4gbW1jX2lvY3RsX2Nkcm9tX25leHRfd3JpdGFibGUoY2RpLCB1c2VycHRyKTsKKwljYXNlIENEUk9NX0xBU1RfV1JJVFRFTjoKKwkJcmV0dXJuIG1tY19pb2N0bF9jZHJvbV9sYXN0X3dyaXR0ZW4oY2RpLCB1c2VycHRyKTsKKwl9CiAKIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDljZjZlOWIuLmM3NzE0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtNDAsNiArNDAsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1E0NV9JRyAgICAgICAgICAweDJFMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEIgICAgICAgICAgMHgyRTIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0lHICAgICAgICAgIDB4MkUyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0c0MV9IQiAgICAgICAgICAweDJFMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9HNDFfSUcgICAgICAgICAgMHgyRTMyCiAKIC8qIGNvdmVyIDkxNSBhbmQgOTQ1IHZhcmlhbnRzICovCiAjZGVmaW5lIElTX0k5MTUgKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRTcyMjFfSEIgfHwgXApAQCAtNjMsNyArNjUsOCBAQAogI2RlZmluZSBJU19HNFggKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdEX0VfSEIgfHwgXAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1E0NV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0hCIHx8IFwKLQkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCKQorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0c0MV9IQikKIAogZXh0ZXJuIGludCBhZ3BfbWVtb3J5X3Jlc2VydmVkOwogCkBAIC0xMTk2LDYgKzExOTksNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0hCOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0c0MV9IQjoKIAkJKmd0dF9vZmZzZXQgPSAqZ3R0X3NpemUgPSBNQigyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIxNTYsMTMgKzIxNjAsMTUgQEAKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19JRywgMCwgIlEzMyIsCiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9JRywgMCwKLQkgICAgIk1vYmlsZSBJbnRlbD8gR000NSBFeHByZXNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCisJICAgICJNb2JpbGUgSW50ZWzCriBHTTQ1IEV4cHJlc3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdEX0VfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdEX0VfSUcsIDAsCiAJICAgICJJbnRlbCBJbnRlZ3JhdGVkIEdyYXBoaWNzIERldmljZSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9RNDVfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0lHLCAwLAogCSAgICAiUTQ1L1E0MyIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0lHLCAwLAogCSAgICAiRzQ1L0c0MyIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCXsgUENJX0RFVklDRV9JRF9JTlRFTF9HNDFfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfRzQxX0lHLCAwLAorCSAgICAiRzQxIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKQEAgLTIzNjAsNiArMjM2Niw3IEBACiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9RNDVfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0c0MV9IQiksCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHMxNjIwLmMgYi9kcml2ZXJzL2NoYXIvZHMxNjIwLmMKaW5kZXggNzRlOWNkOC4uNjFmMDE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzMTYyMC5jCisrKyBiL2RyaXZlcnMvY2hhci9kczE2MjAuYwpAQCAtNDMsNTIgKzQzLDUxIEBACiAgKiAgY2hhbmNlIHRoYXQgdGhlIFdhdmVBcnRpc3QgZHJpdmVyIGNvdWxkIHRvdWNoIHRoZXNlIGJpdHMgdG8KICAqICBlbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlYWtlci4KICAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgZ3Bpb19sb2NrOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0d2luZGVyX2RzMTYyMF9zZXRfY2xrKGludCBjbGspCiB7Ci0JZ3Bpb19tb2RpZnlfb3AoR1BJT19EU0NMSywgY2xrID8gR1BJT19EU0NMSyA6IDApOworCW53X2dwaW9fbW9kaWZ5X29wKEdQSU9fRFNDTEssIGNsayA/IEdQSU9fRFNDTEsgOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5ldHdpbmRlcl9kczE2MjBfc2V0X2RhdGEoaW50IGRhdCkKIHsKLQlncGlvX21vZGlmeV9vcChHUElPX0RBVEEsIGRhdCA/IEdQSU9fREFUQSA6IDApOworCW53X2dwaW9fbW9kaWZ5X29wKEdQSU9fREFUQSwgZGF0ID8gR1BJT19EQVRBIDogMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHdpbmRlcl9kczE2MjBfZ2V0X2RhdGEodm9pZCkKIHsKLQlyZXR1cm4gZ3Bpb19yZWFkKCkgJiBHUElPX0RBVEE7CisJcmV0dXJuIG53X2dwaW9fcmVhZCgpICYgR1BJT19EQVRBOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0d2luZGVyX2RzMTYyMF9zZXRfZGF0YV9kaXIoaW50IGRpcikKIHsKLQlncGlvX21vZGlmeV9pbyhHUElPX0RBVEEsIGRpciA/IEdQSU9fREFUQSA6IDApOworCW53X2dwaW9fbW9kaWZ5X2lvKEdQSU9fREFUQSwgZGlyID8gR1BJT19EQVRBIDogMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXR3aW5kZXJfZHMxNjIwX3Jlc2V0KHZvaWQpCiB7Ci0JY3BsZF9tb2RpZnkoQ1BMRF9EU19FTkFCTEUsIDApOwotCWNwbGRfbW9kaWZ5KENQTERfRFNfRU5BQkxFLCBDUExEX0RTX0VOQUJMRSk7CisJbndfY3BsZF9tb2RpZnkoQ1BMRF9EU19FTkFCTEUsIDApOworCW53X2NwbGRfbW9kaWZ5KENQTERfRFNfRU5BQkxFLCBDUExEX0RTX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXR3aW5kZXJfbG9jayh1bnNpZ25lZCBsb25nICpmbGFncykKIHsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCAqZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZud19ncGlvX2xvY2ssICpmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXR3aW5kZXJfdW5sb2NrKHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgKmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZud19ncGlvX2xvY2ssICpmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXR3aW5kZXJfc2V0X2ZhbihpbnQgaSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCWdwaW9fbW9kaWZ5X29wKEdQSU9fRkFOLCBpID8gR1BJT19GQU4gOiAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbndfZ3Bpb19sb2NrLCBmbGFncyk7CisJbndfZ3Bpb19tb2RpZnlfb3AoR1BJT19GQU4sIGkgPyBHUElPX0ZBTiA6IDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuZXR3aW5kZXJfZ2V0X2Zhbih2b2lkKQpAQCAtOTYsNyArOTUsNyBAQAogCWlmICgoc3lzdGVtX3JldiAmIDB4ZjAwMCkgPT0gMHg0MDAwKQogCQlyZXR1cm4gRkFOX0FMV0FZU19PTjsKIAotCXJldHVybiAoZ3Bpb19yZWFkKCkgJiBHUElPX0ZBTikgPyBGQU5fT04gOiBGQU5fT0ZGOworCXJldHVybiAobndfZ3Bpb19yZWFkKCkgJiBHUElPX0ZBTikgPyBGQU5fT04gOiBGQU5fT0ZGOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggNTNmZGM3Zi4uMzJiOGJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC00Niw3ICs0Niw3IEBACiAvKgogICogVGhlIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIGRyaXZlci4KICAqIFRoaXMgZHJpdmVyIGlzIGNsb3NlbHkgbW9kZWxsZWQgYWZ0ZXIgdGhlIHJ0Yy5jIGRyaXZlci4KLSAqIGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjLmh0bQorICogaHR0cDovL3d3dy5pbnRlbC5jb20vaGFyZHdhcmVkZXNpZ24vaHBldHNwZWNfMS5wZGYKICAqLwogI2RlZmluZQlIUEVUX1VTRVJfRlJFUQkoNjQpCiAjZGVmaW5lCUhQRVRfRFJJRlQJKDUwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggZmI1N2Y2Ny4uMDU4N2I2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTY5NSw2ICs2OTUsNyBAQAogCWhwLT53cyA9IHdzOwogCXNjaGVkdWxlX3dvcmsoJmhwLT50dHlfcmVzaXplKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGh2Y19yZXNpemUpOwogCiAvKgogICogVGhpcyBrdGhyZWFkIGlzIGVpdGhlciBwb2xsaW5nIG9yIGludGVycnVwdCBkcml2ZW4uICBUaGlzIGlzIGRldGVybWluZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMgYi9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCmluZGV4IDAwNmJlOTIuLjhjN2RmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKKysrIGIvZHJpdmVycy9jaGFyL253Zmxhc2guYwpAQCAtNTgsOCArNTgsNiBAQAogc3RhdGljIGludCBnYkZsYXNoU2l6ZSA9IEtGTEFTSF9TSVpFOwogc3RhdGljIERFRklORV9NVVRFWChud2ZsYXNoX211dGV4KTsKIAotZXh0ZXJuIHNwaW5sb2NrX3QgZ3Bpb19sb2NrOwotCiBzdGF0aWMgaW50IGdldF9mbGFzaF9pZCh2b2lkKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjMSwgYzI7CkBAIC02MTYsOSArNjE0LDkgQEAKIAkgKiB3ZSB3YW50IHRvIHdyaXRlIGEgYml0IHBhdHRlcm4gWFhYMSB0byBYaWxpbnggdG8gZW5hYmxlCiAJICogdGhlIHdyaXRlIGdhdGUsIHdoaWNoIHdpbGwgYmUgb3BlbiBmb3IgYWJvdXQgdGhlIG5leHQgMm1zLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQljcGxkX21vZGlmeSgxLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbndfZ3Bpb19sb2NrLCBmbGFncyk7CisJbndfY3BsZF9tb2RpZnkoQ1BMRF9GTEFTSF9XUl9FTkFCTEUsIENQTERfRkxBU0hfV1JfRU5BQkxFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZud19ncGlvX2xvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogbGV0IHRoZSBJU0EgYnVzIHRvIGNhdGNoIG9uLi4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNjc1MDc2Zi4uZDI2ODkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNTU4LDIzICs1NTgsOSBAQAogCXVuc2lnbmVkIGRvbnRfY291bnRfZW50cm9weToxOwogfTsKIAotc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbTlJfSVJRU107Ci0KLXN0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqZ2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxID49IG5yX2lycXMpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGlycV90aW1lcl9zdGF0ZVtpcnFdOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdGltZXJfcmFuZF9zdGF0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGUpCi17Ci0JaWYgKGlycSA+PSBucl9pcnFzKQotCQlyZXR1cm47Ci0KLQlpcnFfdGltZXJfc3RhdGVbaXJxXSA9IHN0YXRlOwotfQorI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKmlycV90aW1lcl9zdGF0ZVtOUl9JUlFTXTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgaW5wdXRfdGltZXJfc3RhdGU7CiAKQEAgLTkzMyw4ICs5MTksMTAgQEAKIHsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGU7CiAKKyNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKIAlpZiAoaXJxID49IG5yX2lycXMpCiAJCXJldHVybjsKKyNlbmRpZgogCiAJc3RhdGUgPSBnZXRfdGltZXJfcmFuZF9zdGF0ZShpcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IDNmYjBkMmMuLmZmNmY1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xMzgsMTIgKzEzOCwzMyBAQAogfQogCiAvKgorICogdmlydGlvIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gVGhpcyBzdXBwb3J0czoKKyAqIC0gY29uc29sZSByZXNpemUKKyAqLworc3RhdGljIHZvaWQgdmlydGNvbnNfYXBwbHlfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpbnNpemUgd3M7CisKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKGRldiwgVklSVElPX0NPTlNPTEVfRl9TSVpFKSkgeworCQlkZXYtPmNvbmZpZy0+Z2V0KGRldiwKKwkJCQkgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgY29scyksCisJCQkJICZ3cy53c19jb2wsIHNpemVvZih1MTYpKTsKKwkJZGV2LT5jb25maWctPmdldChkZXYsCisJCQkJIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIHJvd3MpLAorCQkJCSAmd3Mud3Nfcm93LCBzaXplb2YodTE2KSk7CisJCWh2Y19yZXNpemUoaHZjLCB3cyk7CisJfQorfQorCisvKgogICogd2Ugc3VwcG9ydCBvbmx5IG9uZSBjb25zb2xlLCB0aGUgaHZjIHN0cnVjdCBpcyBhIGdsb2JhbCB2YXIKLSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcKKyAqIFdlIHNldCB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGlzIHBvaW50LCBzaW5jZSB3ZSBub3cgaGF2ZSBhIHR0eQogICovCiBzdGF0aWMgaW50IG5vdGlmaWVyX2FkZF92aW8oc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBpbnQgZGF0YSkKIHsKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDE7CisJdmlydGNvbnNfYXBwbHlfY29uZmlnKHZkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNCwxMSArMjU1LDE4IEBACiAJeyAwIH0sCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CisJVklSVElPX0NPTlNPTEVfRl9TSVpFLAorfTsKKwogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19jb25zb2xlID0geworCS5mZWF0dXJlX3RhYmxlID0gZmVhdHVyZXMsCisJLmZlYXR1cmVfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAogCS5kcml2ZXIubmFtZSA9CUtCVUlMRF9NT0ROQU1FLAogCS5kcml2ZXIub3duZXIgPQlUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl2aXJ0Y29uc19wcm9iZSwKKwkuY29uZmlnX2NoYW5nZWQgPSB2aXJ0Y29uc19hcHBseV9jb25maWcsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGMyMDE3MTAuLmUxMTI5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC01NywxMSArNTcsNiBAQAogCXJldHVybiB2MjsKIH0KIAotc3RhdGljIGN5Y2xlX3QgYWNwaV9wbV9yZWFkX3Nsb3codm9pZCkKLXsKLQlyZXR1cm4gKGN5Y2xlX3QpYWNwaV9wbV9yZWFkX3ZlcmlmaWVkKCk7Ci19Ci0KIHN0YXRpYyBjeWNsZV90IGFjcGlfcG1fcmVhZCh2b2lkKQogewogCXJldHVybiAoY3ljbGVfdClyZWFkX3BtdG1yKCk7CkBAIC04OCw2ICs4MywxMSBAQAogfQogX19zZXR1cCgiYWNwaV9wbV9nb29kIiwgYWNwaV9wbV9nb29kX3NldHVwKTsKIAorc3RhdGljIGN5Y2xlX3QgYWNwaV9wbV9yZWFkX3Nsb3codm9pZCkKK3sKKwlyZXR1cm4gKGN5Y2xlX3QpYWNwaV9wbV9yZWFkX3ZlcmlmaWVkKCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3BtX25lZWRfd29ya2Fyb3VuZCh2b2lkKQogewogCWNsb2Nrc291cmNlX2FjcGlfcG0ucmVhZCA9IGFjcGlfcG1fcmVhZF9zbG93OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IDRhNTk3ZDguLjc4Yjk4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTU4MiwzICs1ODIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtaV93YWxrKTsKKworLyoqCisgKiBkbWlfbWF0Y2ggLSBjb21wYXJlIGEgc3RyaW5nIHRvIHRoZSBkbWkgZmllbGQgKGlmIGV4aXN0cykKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBmaWVsZCBlcXVhbHMgdG8gdGhlIHN0ciAoaW5jbHVkaW5nIE5VTEwpLgorICovCitib29sIGRtaV9tYXRjaChlbnVtIGRtaV9maWVsZCBmLCBjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqaW5mbyA9IGRtaV9nZXRfc3lzdGVtX2luZm8oZik7CisKKwlpZiAoaW5mbyA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gaW5mbyA9PSBzdHI7CisKKwlyZXR1cm4gIXN0cmNtcChpbmZvLCBzdHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1pX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYThiMzNjMi4uNTEzMGI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTcsNiArNyw4IEBACiBtZW51Y29uZmlnIERSTQogCXRyaXN0YXRlICJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgKFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlciBEUkkgc3VwcG9ydCkiCiAJZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kgJiYgIUVNVUxBVEVEX0NNUFhDSEcgJiYgTU1VCisJc2VsZWN0IEkyQworCXNlbGVjdCBJMkNfQUxHT0JJVAogCWhlbHAKIAkgIEtlcm5lbC1sZXZlbCBzdXBwb3J0IGZvciB0aGUgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKQogCSAgaW50cm9kdWNlZCBpbiBYRnJlZTg2IDQuMC4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIHNlbGVjdApAQCAtNjUsNiArNjcsMTAgQEAKIAkgIHdpbGwgbG9hZCB0aGUgY29ycmVjdCBvbmUuCiAKIGNvbmZpZyBEUk1fSTkxNQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlkZXBlbmRzIG9uIEZCCiAJdHJpc3RhdGUgImk5MTUgZHJpdmVyIgogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGhhcyBJbnRlbCA4MzBNLCA4NDVHLApAQCAtNzYsNiArODIsMTcgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBEUk1fSTkxNV9LTVMKKwlib29sICJFbmFibGUgbW9kZXNldHRpbmcgb24gaW50ZWwgYnkgZGVmYXVsdCIKKwlkZXBlbmRzIG9uIERSTV9JOTE1CisJaGVscAorCUNob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBrZXJuZWwgbW9kZXNldHRpbmcgZW5hYmxlZCBieSBkZWZhdWx0LAorCWFuZCB5b3UgaGF2ZSBhIG5ldyBlbm91Z2ggdXNlcnNwYWNlIHRvIHN1cHBvcnQgdGhpcy4gUnVubmluZyBvbGQKKwl1c2Vyc3BhY2VzIHdpdGggdGhpcyBlbmFibGVkIHdpbGwgY2F1c2UgcGFpbi4gIE5vdGUgdGhhdCB0aGlzIGNhdXNlcworCXRoZSBkcml2ZXIgdG8gYmluZCB0byBQQ0kgZGV2aWNlcywgd2hpY2ggcHJlY2x1ZGVzIGxvYWRpbmcgdGhpbmdzCisJbGlrZSBpbnRlbGZiLgorCisKIGNvbmZpZyBEUk1fTUdBCiAJdHJpc3RhdGUgIk1hdHJveCBnMjAwL2c0MDAiCiAJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA3NGRhOTk0Li4zMDAyMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC05LDcgKzksOCBAQAogCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1fZ2VtLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKIAkJZHJtX2FncHN1cHBvcnQubyBkcm1fc2NhdHRlci5vIGF0aV9wY2lnYXJ0Lm8gZHJtX3BjaS5vIFwKLQkJZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fc21hbi5vIGRybV9tbS5vCisJCWRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX3NtYW4ubyBkcm1fbW0ubyBcCisJCWRybV9jcnRjLm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F1dGguYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXV0aC5jCmluZGV4IGE3MzQ2MjcuLmNhN2E5ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXV0aC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXV0aC5jCkBAIC00NSwxNCArNDUsMTUgQEAKICAqIHRoZSBvbmUgd2l0aCBtYXRjaGluZyBtYWdpYyBudW1iZXIsIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleAogICogbG9jay4KICAqLwotc3RhdGljIHN0cnVjdCBkcm1fZmlsZSAqZHJtX2ZpbmRfZmlsZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgZHJtX21hZ2ljX3QgbWFnaWMpCitzdGF0aWMgc3RydWN0IGRybV9maWxlICpkcm1fZmluZF9maWxlKHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsIGRybV9tYWdpY190IG1hZ2ljKQogewogCXN0cnVjdCBkcm1fZmlsZSAqcmV0dmFsID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX21hZ2ljX2VudHJ5ICpwdDsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWFzdGVyLT5taW5vci0+ZGV2OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmICghZHJtX2h0X2ZpbmRfaXRlbSgmZGV2LT5tYWdpY2xpc3QsICh1bnNpZ25lZCBsb25nKW1hZ2ljLCAmaGFzaCkpIHsKKwlpZiAoIWRybV9odF9maW5kX2l0ZW0oJm1hc3Rlci0+bWFnaWNsaXN0LCAodW5zaWduZWQgbG9uZyltYWdpYywgJmhhc2gpKSB7CiAJCXB0ID0gZHJtX2hhc2hfZW50cnkoaGFzaCwgc3RydWN0IGRybV9tYWdpY19lbnRyeSwgaGFzaF9pdGVtKTsKIAkJcmV0dmFsID0gcHQtPnByaXY7CiAJfQpAQCAtNzEsMTEgKzcyLDExIEBACiAgKiBhc3NvY2lhdGVkIHRoZSBtYWdpYyBudW1iZXIgaGFzaCBrZXkgaW4gZHJtX2RldmljZTo6bWFnaWNsaXN0LCB3aGlsZSBob2xkaW5nCiAgKiB0aGUgZHJtX2RldmljZTo6c3RydWN0X211dGV4IGxvY2suCiAgKi8KLXN0YXRpYyBpbnQgZHJtX2FkZF9tYWdpYyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICogcHJpdiwKK3N0YXRpYyBpbnQgZHJtX2FkZF9tYWdpYyhzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyLCBzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYsCiAJCQkgZHJtX21hZ2ljX3QgbWFnaWMpCiB7CiAJc3RydWN0IGRybV9tYWdpY19lbnRyeSAqZW50cnk7Ci0KKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWFzdGVyLT5taW5vci0+ZGV2OwogCURSTV9ERUJVRygiJWRcbiIsIG1hZ2ljKTsKIAogCWVudHJ5ID0gZHJtX2FsbG9jKHNpemVvZigqZW50cnkpLCBEUk1fTUVNX01BR0lDKTsKQEAgLTgzLDExICs4NCwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKIAllbnRyeS0+cHJpdiA9IHByaXY7Ci0KIAllbnRyeS0+aGFzaF9pdGVtLmtleSA9ICh1bnNpZ25lZCBsb25nKW1hZ2ljOwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1faHRfaW5zZXJ0X2l0ZW0oJmRldi0+bWFnaWNsaXN0LCAmZW50cnktPmhhc2hfaXRlbSk7Ci0JbGlzdF9hZGRfdGFpbCgmZW50cnktPmhlYWQsICZkZXYtPm1hZ2ljZnJlZSk7CisJZHJtX2h0X2luc2VydF9pdGVtKCZtYXN0ZXItPm1hZ2ljbGlzdCwgJmVudHJ5LT5oYXNoX2l0ZW0pOworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCAmbWFzdGVyLT5tYWdpY2ZyZWUpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsMjAgKzEwMiwyMSBAQAogICogU2VhcmNoZXMgYW5kIHVubGlua3MgdGhlIGVudHJ5IGluIGRybV9kZXZpY2U6Om1hZ2ljbGlzdCB3aXRoIHRoZSBtYWdpYwogICogbnVtYmVyIGhhc2gga2V5LCB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KICAqLwotc3RhdGljIGludCBkcm1fcmVtb3ZlX21hZ2ljKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1fbWFnaWNfdCBtYWdpYykKK3N0YXRpYyBpbnQgZHJtX3JlbW92ZV9tYWdpYyhzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyLCBkcm1fbWFnaWNfdCBtYWdpYykKIHsKIAlzdHJ1Y3QgZHJtX21hZ2ljX2VudHJ5ICpwdDsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWFzdGVyLT5taW5vci0+ZGV2OwogCiAJRFJNX0RFQlVHKCIlZFxuIiwgbWFnaWMpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmIChkcm1faHRfZmluZF9pdGVtKCZkZXYtPm1hZ2ljbGlzdCwgKHVuc2lnbmVkIGxvbmcpbWFnaWMsICZoYXNoKSkgeworCWlmIChkcm1faHRfZmluZF9pdGVtKCZtYXN0ZXItPm1hZ2ljbGlzdCwgKHVuc2lnbmVkIGxvbmcpbWFnaWMsICZoYXNoKSkgewogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXB0ID0gZHJtX2hhc2hfZW50cnkoaGFzaCwgc3RydWN0IGRybV9tYWdpY19lbnRyeSwgaGFzaF9pdGVtKTsKLQlkcm1faHRfcmVtb3ZlX2l0ZW0oJmRldi0+bWFnaWNsaXN0LCBoYXNoKTsKKwlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1hc3Rlci0+bWFnaWNsaXN0LCBoYXNoKTsKIAlsaXN0X2RlbCgmcHQtPmhlYWQpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCkBAIC0xNTMsOSArMTU0LDkgQEAKIAkJCQkrK3NlcXVlbmNlOwkvKiByZXNlcnZlIDAgKi8KIAkJCWF1dGgtPm1hZ2ljID0gc2VxdWVuY2UrKzsKIAkJCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJfSB3aGlsZSAoZHJtX2ZpbmRfZmlsZShkZXYsIGF1dGgtPm1hZ2ljKSk7CisJCX0gd2hpbGUgKGRybV9maW5kX2ZpbGUoZmlsZV9wcml2LT5tYXN0ZXIsIGF1dGgtPm1hZ2ljKSk7CiAJCWZpbGVfcHJpdi0+bWFnaWMgPSBhdXRoLT5tYWdpYzsKLQkJZHJtX2FkZF9tYWdpYyhkZXYsIGZpbGVfcHJpdiwgYXV0aC0+bWFnaWMpOworCQlkcm1fYWRkX21hZ2ljKGZpbGVfcHJpdi0+bWFzdGVyLCBmaWxlX3ByaXYsIGF1dGgtPm1hZ2ljKTsKIAl9CiAKIAlEUk1fREVCVUcoIiV1XG4iLCBhdXRoLT5tYWdpYyk7CkBAIC0xODEsOSArMTgyLDkgQEAKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7CiAKIAlEUk1fREVCVUcoIiV1XG4iLCBhdXRoLT5tYWdpYyk7Ci0JaWYgKChmaWxlID0gZHJtX2ZpbmRfZmlsZShkZXYsIGF1dGgtPm1hZ2ljKSkpIHsKKwlpZiAoKGZpbGUgPSBkcm1fZmluZF9maWxlKGZpbGVfcHJpdi0+bWFzdGVyLCBhdXRoLT5tYWdpYykpKSB7CiAJCWZpbGUtPmF1dGhlbnRpY2F0ZWQgPSAxOwotCQlkcm1fcmVtb3ZlX21hZ2ljKGRldiwgYXV0aC0+bWFnaWMpOworCQlkcm1fcmVtb3ZlX21hZ2ljKGZpbGVfcHJpdi0+bWFzdGVyLCBhdXRoLT5tYWdpYyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggYmRlNjRiOC4uNzJjNjY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTU0LDkgKzU0LDkgQEAKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICplbnRyeTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tYXBsaXN0LCBoZWFkKSB7Ci0JCWlmIChlbnRyeS0+bWFwICYmIG1hcC0+dHlwZSA9PSBlbnRyeS0+bWFwLT50eXBlICYmCisJCWlmIChlbnRyeS0+bWFwICYmIChlbnRyeS0+bWFzdGVyID09IGRldi0+cHJpbWFyeS0+bWFzdGVyKSAmJiAobWFwLT50eXBlID09IGVudHJ5LT5tYXAtPnR5cGUpICYmCiAJCSAgICAoKGVudHJ5LT5tYXAtPm9mZnNldCA9PSBtYXAtPm9mZnNldCkgfHwKLQkJICAgICAobWFwLT50eXBlID09IF9EUk1fU0hNICYmIG1hcC0+ZmxhZ3M9PV9EUk1fQ09OVEFJTlNfTE9DSykpKSB7CisJCSAgICAgKChtYXAtPnR5cGUgPT0gX0RSTV9TSE0pICYmIChtYXAtPmZsYWdzJl9EUk1fQ09OVEFJTlNfTE9DSykpKSkgewogCQkJcmV0dXJuIGVudHJ5OwogCQl9CiAJfQpAQCAtMjEwLDEyICsyMTAsMTIgQEAKIAkJbWFwLT5vZmZzZXQgPSAodW5zaWduZWQgbG9uZyltYXAtPmhhbmRsZTsKIAkJaWYgKG1hcC0+ZmxhZ3MgJiBfRFJNX0NPTlRBSU5TX0xPQ0spIHsKIAkJCS8qIFByZXZlbnQgYSAybmQgWCBTZXJ2ZXIgZnJvbSBjcmVhdGluZyBhIDJuZCBsb2NrICovCi0JCQlpZiAoZGV2LT5sb2NrLmh3X2xvY2sgIT0gTlVMTCkgeworCQkJaWYgKGRldi0+cHJpbWFyeS0+bWFzdGVyLT5sb2NrLmh3X2xvY2sgIT0gTlVMTCkgewogCQkJCXZmcmVlKG1hcC0+aGFuZGxlKTsKIAkJCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQotCQkJZGV2LT5zaWdkYXRhLmxvY2sgPSBkZXYtPmxvY2suaHdfbG9jayA9IG1hcC0+aGFuZGxlOwkvKiBQb2ludGVyIHRvIGxvY2sgKi8KKwkJCWRldi0+c2lnZGF0YS5sb2NrID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmxvY2suaHdfbG9jayA9IG1hcC0+aGFuZGxlOwkvKiBQb2ludGVyIHRvIGxvY2sgKi8KIAkJfQogCQlicmVhazsKIAljYXNlIF9EUk1fQUdQOiB7CkBAIC0yNjIsNiArMjYyLDkgQEAKIAkJRFJNX0RFQlVHKCJBR1Agb2Zmc2V0ID0gMHglMDhseCwgc2l6ZSA9IDB4JTA4bHhcbiIsIG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOwogCiAJCWJyZWFrOworCWNhc2UgX0RSTV9HRU06CisJCURSTV9FUlJPUigidHJpZWQgdG8gcm1tYXAgR0VNIG9iamVjdFxuIik7CisJCWJyZWFrOwogCX0KIAljYXNlIF9EUk1fU0NBVFRFUl9HQVRIRVI6CiAJCWlmICghZGV2LT5zZykgewpAQCAtMzE5LDYgKzMyMiw3IEBACiAJbGlzdC0+dXNlcl90b2tlbiA9IGxpc3QtPmhhc2gua2V5IDw8IFBBR0VfU0hJRlQ7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKKwlsaXN0LT5tYXN0ZXIgPSBkZXYtPnByaW1hcnktPm1hc3RlcjsKIAkqbWFwbGlzdCA9IGxpc3Q7CiAJcmV0dXJuIDA7CiAJfQpAQCAtMzQ1LDcgKzM0OSw3IEBACiAJc3RydWN0IGRybV9tYXBfbGlzdCAqbWFwbGlzdDsKIAlpbnQgZXJyOwogCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApKQorCWlmICghKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgbWFwLT50eXBlID09IF9EUk1fQUdQIHx8IG1hcC0+dHlwZSA9PSBfRFJNX1NITSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAllcnIgPSBkcm1fYWRkbWFwX2NvcmUoZGV2LCBtYXAtPm9mZnNldCwgbWFwLT5zaXplLCBtYXAtPnR5cGUsCkBAIC0zODAsMTAgKzM4NCwxMiBAQAogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdCA9IE5VTEwsICpsaXN0X3Q7CiAJZHJtX2RtYV9oYW5kbGVfdCBkbWFoOwogCWludCBmb3VuZCA9IDA7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcjsKIAogCS8qIEZpbmQgdGhlIGxpc3QgZW50cnkgZm9yIHRoZSBtYXAgYW5kIHJlbW92ZSBpdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyX2xpc3QsIGxpc3RfdCwgJmRldi0+bWFwbGlzdCwgaGVhZCkgewogCQlpZiAocl9saXN0LT5tYXAgPT0gbWFwKSB7CisJCQltYXN0ZXIgPSByX2xpc3QtPm1hc3RlcjsKIAkJCWxpc3RfZGVsKCZyX2xpc3QtPmhlYWQpOwogCQkJZHJtX2h0X3JlbW92ZV9rZXkoJmRldi0+bWFwX2hhc2gsCiAJCQkJCSAgcl9saXN0LT51c2VyX3Rva2VuID4+IFBBR0VfU0hJRlQpOwpAQCAtNDA5LDYgKzQxNSwxMyBAQAogCQlicmVhazsKIAljYXNlIF9EUk1fU0hNOgogCQl2ZnJlZShtYXAtPmhhbmRsZSk7CisJCWlmIChtYXN0ZXIpIHsKKwkJCWlmIChkZXYtPnNpZ2RhdGEubG9jayA9PSBtYXN0ZXItPmxvY2suaHdfbG9jaykKKwkJCQlkZXYtPnNpZ2RhdGEubG9jayA9IE5VTEw7CisJCQltYXN0ZXItPmxvY2suaHdfbG9jayA9IE5VTEw7ICAgLyogU0hNIHJlbW92ZWQgKi8KKwkJCW1hc3Rlci0+bG9jay5maWxlX3ByaXYgPSBOVUxMOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtYXN0ZXItPmxvY2subG9ja19xdWV1ZSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBfRFJNX0FHUDoKIAljYXNlIF9EUk1fU0NBVFRFUl9HQVRIRVI6CkBAIC00MTksMTEgKzQzMiwxNSBAQAogCQlkbWFoLnNpemUgPSBtYXAtPnNpemU7CiAJCV9fZHJtX3BjaV9mcmVlKGRldiwgJmRtYWgpOwogCQlicmVhazsKKwljYXNlIF9EUk1fR0VNOgorCQlEUk1fRVJST1IoInRyaWVkIHRvIHJtbWFwIEdFTSBvYmplY3RcbiIpOworCQlicmVhazsKIAl9CiAJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX3JtbWFwX2xvY2tlZCk7CiAKIGludCBkcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2xvY2FsX21hcF90ICptYXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCmluZGV4IGQ1MDVmNjkuLjgwOWVjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCkBAIC0yNTYsMTIgKzI1NiwxMyBAQAogICogaGFyZHdhcmUgbG9jayBpcyBoZWxkLCBjbGVhcnMgdGhlIGRybV9kZXZpY2U6OmNvbnRleHRfZmxhZyBhbmQgd2FrZXMgdXAKICAqIGRybV9kZXZpY2U6OmNvbnRleHRfd2FpdC4KICAqLwotc3RhdGljIGludCBkcm1fY29udGV4dF9zd2l0Y2hfY29tcGxldGUoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuZXcpCitzdGF0aWMgaW50IGRybV9jb250ZXh0X3N3aXRjaF9jb21wbGV0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgaW50IG5ldykKIHsKIAlkZXYtPmxhc3RfY29udGV4dCA9IG5ldzsJLyogUFJFL1BPU1Q6IFRoaXMgaXMgdGhlIF9vbmx5XyB3cml0ZXIuICovCiAJZGV2LT5sYXN0X3N3aXRjaCA9IGppZmZpZXM7CiAKLQlpZiAoIV9EUk1fTE9DS19JU19IRUxEKGRldi0+bG9jay5od19sb2NrLT5sb2NrKSkgeworCWlmICghX0RSTV9MT0NLX0lTX0hFTEQoZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaHdfbG9jay0+bG9jaykpIHsKIAkJRFJNX0VSUk9SKCJMb2NrIGlzbid0IGhlbGQgYWZ0ZXIgY29udGV4dCBzd2l0Y2hcbiIpOwogCX0KIApAQCAtNDIwLDcgKzQyMSw3IEBACiAJc3RydWN0IGRybV9jdHggKmN0eCA9IGRhdGE7CiAKIAlEUk1fREVCVUcoIiVkXG4iLCBjdHgtPmhhbmRsZSk7Ci0JZHJtX2NvbnRleHRfc3dpdGNoX2NvbXBsZXRlKGRldiwgY3R4LT5oYW5kbGUpOworCWRybV9jb250ZXh0X3N3aXRjaF9jb21wbGV0ZShkZXYsIGZpbGVfcHJpdiwgY3R4LT5oYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDIsOSArNDQzLDYgQEAKIAlzdHJ1Y3QgZHJtX2N0eCAqY3R4ID0gZGF0YTsKIAogCURSTV9ERUJVRygiJWRcbiIsIGN0eC0+aGFuZGxlKTsKLQlpZiAoY3R4LT5oYW5kbGUgPT0gRFJNX0tFUk5FTF9DT05URVhUICsgMSkgewotCQlmaWxlX3ByaXYtPnJlbW92ZV9hdXRoX29uX2Nsb3NlID0gMTsKLQl9CiAJaWYgKGN0eC0+aGFuZGxlICE9IERSTV9LRVJORUxfQ09OVEVYVCkgewogCQlpZiAoZGV2LT5kcml2ZXItPmNvbnRleHRfZHRvcikKIAkJCWRldi0+ZHJpdmVyLT5jb250ZXh0X2R0b3IoZGV2LCBjdHgtPmhhbmRsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzg3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtMCwwICsxLDI0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlZCBIYXQgSW5jLgorICoKKyAqIERSTSBjb3JlIENSVEMgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgIEtlaXRoIFBhY2thcmQKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICAgIERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogICAgICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisKK3N0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgeworCWludCB0eXBlOworCWNoYXIgKm5hbWU7Cit9OworCisvKiBBdm9pZCBib2lsZXJwbGF0ZS4gIEknbSB0aXJlZCBvZiB0eXBpbmcuICovCisjZGVmaW5lIERSTV9FTlVNX05BTUVfRk4oZm5uYW1lLCBsaXN0KQkJCQlcCisJY2hhciAqZm5uYW1lKGludCB2YWwpCQkJCQlcCisJewkJCQkJCQlcCisJCWludCBpOwkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGlzdCk7IGkrKykgewlcCisJCQlpZiAobGlzdFtpXS50eXBlID09IHZhbCkJCVwKKwkJCQlyZXR1cm4gbGlzdFtpXS5uYW1lOwkJXAorCQl9CQkJCQkJXAorCQlyZXR1cm4gIih1bmtub3duKSI7CQkJCVwKKwl9CisKKy8qCisgKiBHbG9iYWwgcHJvcGVydGllcworICovCitzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fZHBtc19lbnVtX2xpc3RbXSA9Cit7CXsgRFJNX01PREVfRFBNU19PTiwgIk9uIiB9LAorCXsgRFJNX01PREVfRFBNU19TVEFOREJZLCAiU3RhbmRieSIgfSwKKwl7IERSTV9NT0RFX0RQTVNfU1VTUEVORCwgIlN1c3BlbmQiIH0sCisJeyBEUk1fTU9ERV9EUE1TX09GRiwgIk9mZiIgfQorfTsKKworRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0X2RwbXNfbmFtZSwgZHJtX2RwbXNfZW51bV9saXN0KQorCisvKgorICogT3B0aW9uYWwgcHJvcGVydGllcworICovCitzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fc2NhbGluZ19tb2RlX2VudW1fbGlzdFtdID0KK3sKKwl7IERSTV9NT0RFX1NDQUxFX05PTl9HUFUsICJOb24tR1BVIiB9LAorCXsgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTiwgIkZ1bGxzY3JlZW4iIH0sCisJeyBEUk1fTU9ERV9TQ0FMRV9OT19TQ0FMRSwgIk5vIHNjYWxlIiB9LAorCXsgRFJNX01PREVfU0NBTEVfQVNQRUNULCAiQXNwZWN0IiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX2RpdGhlcmluZ19tb2RlX2VudW1fbGlzdFtdID0KK3sKKwl7IERSTV9NT0RFX0RJVEhFUklOR19PRkYsICJPZmYiIH0sCisJeyBEUk1fTU9ERV9ESVRIRVJJTkdfT04sICJPbiIgfSwKK307CisKKy8qCisgKiBOb24tZ2xvYmFsIHByb3BlcnRpZXMsIGJ1dCAicmVxdWlyZWQiIGZvciBjZXJ0YWluIGNvbm5lY3RvcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9kdmlfaV9zZWxlY3RfZW51bV9saXN0W10gPQoreworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0F1dG9tYXRpYywgIkF1dG9tYXRpYyIgfSwgLyogRFZJLUkgYW5kIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0RWSUQsICAgICAgIkRWSS1EIiAgICAgfSwgLyogRFZJLUkgICovCisJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJQSwgICAgICAiRFZJLUEiICAgICB9LCAvKiBEVkktSSAgKi8KK307CisKK0RSTV9FTlVNX05BTUVfRk4oZHJtX2dldF9kdmlfaV9zZWxlY3RfbmFtZSwgZHJtX2R2aV9pX3NlbGVjdF9lbnVtX2xpc3QpCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9kdmlfaV9zdWJjb25uZWN0b3JfZW51bV9saXN0W10gPQoreworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24sICAgIlVua25vd24iICAgfSwgLyogRFZJLUkgYW5kIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0RWSUQsICAgICAgIkRWSS1EIiAgICAgfSwgLyogRFZJLUkgICovCisJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJQSwgICAgICAiRFZJLUEiICAgICB9LCAvKiBEVkktSSAgKi8KK307CisKK0RSTV9FTlVNX05BTUVfRk4oZHJtX2dldF9kdmlfaV9zdWJjb25uZWN0b3JfbmFtZSwKKwkJIGRybV9kdmlfaV9zdWJjb25uZWN0b3JfZW51bV9saXN0KQorCitzdGF0aWMgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fdHZfc2VsZWN0X2VudW1fbGlzdFtdID0KK3sKKwl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9BdXRvbWF0aWMsICJBdXRvbWF0aWMiIH0sIC8qIERWSS1JIGFuZCBUVi1vdXQgKi8KKwl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUsICJDb21wb3NpdGUiIH0sIC8qIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NWSURFTywgICAgIlNWSURFTyIgICAgfSwgLyogVFYtb3V0ICovCisJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9uZW50LCAiQ29tcG9uZW50IiB9LCAvKiBUVi1vdXQgKi8KK307CisKK0RSTV9FTlVNX05BTUVfRk4oZHJtX2dldF90dl9zZWxlY3RfbmFtZSwgZHJtX3R2X3NlbGVjdF9lbnVtX2xpc3QpCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV90dl9zdWJjb25uZWN0b3JfZW51bV9saXN0W10gPQoreworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24sICAgIlVua25vd24iICAgfSwgLyogRFZJLUkgYW5kIFRWLW91dCAqLworCXsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZSwgIkNvbXBvc2l0ZSIgfSwgLyogVFYtb3V0ICovCisJeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPLCAgICAiU1ZJREVPIiAgICB9LCAvKiBUVi1vdXQgKi8KKwl7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiIH0sIC8qIFRWLW91dCAqLworfTsKKworRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0X3R2X3N1YmNvbm5lY3Rvcl9uYW1lLAorCQkgZHJtX3R2X3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3QpCisKK3N0cnVjdCBkcm1fY29ubl9wcm9wX2VudW1fbGlzdCB7CisJaW50IHR5cGU7CisJY2hhciAqbmFtZTsKKwlpbnQgY291bnQ7Cit9OworCisvKgorICogQ29ubmVjdG9yIGFuZCBlbmNvZGVyIHR5cGVzLgorICovCitzdGF0aWMgc3RydWN0IGRybV9jb25uX3Byb3BfZW51bV9saXN0IGRybV9jb25uZWN0b3JfZW51bV9saXN0W10gPQorewl7IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLCAiVW5rbm93biIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICJWR0EiLCAwIH0sCisJeyBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgIkRWSS1JIiwgMCB9LAorCXsgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICJEVkktRCIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBLCAiRFZJLUEiLCAwIH0sCisJeyBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlLCAiQ29tcG9zaXRlIiwgMCB9LAorCXsgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywgIlNWSURFTyIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAiTFZEUyIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiLCAwIH0sCisJeyBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTiwgIjktcGluIERJTiIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCwgIkRpc3BsYXlQb3J0IiwgMCB9LAorCXsgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBLCAiSERNSSBUeXBlIEEiLCAwIH0sCisJeyBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIsICJIRE1JIFR5cGUgQiIsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9lbmNvZGVyX2VudW1fbGlzdFtdID0KK3sJeyBEUk1fTU9ERV9FTkNPREVSX05PTkUsICJOb25lIiB9LAorCXsgRFJNX01PREVfRU5DT0RFUl9EQUMsICJEQUMiIH0sCisJeyBEUk1fTU9ERV9FTkNPREVSX1RNRFMsICJUTURTIiB9LAorCXsgRFJNX01PREVfRU5DT0RFUl9MVkRTLCAiTFZEUyIgfSwKKwl7IERSTV9NT0RFX0VOQ09ERVJfVFZEQUMsICJUViIgfSwKK307CisKK2NoYXIgKmRybV9nZXRfZW5jb2Rlcl9uYW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdGF0aWMgY2hhciBidWZbMzJdOworCisJc25wcmludGYoYnVmLCAzMiwgIiVzLSVkIiwKKwkJIGRybV9lbmNvZGVyX2VudW1fbGlzdFtlbmNvZGVyLT5lbmNvZGVyX3R5cGVdLm5hbWUsCisJCSBlbmNvZGVyLT5iYXNlLmlkKTsKKwlyZXR1cm4gYnVmOworfQorCitjaGFyICpkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RhdGljIGNoYXIgYnVmWzMyXTsKKworCXNucHJpbnRmKGJ1ZiwgMzIsICIlcy0lZCIsCisJCSBkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlXS5uYW1lLAorCQkgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7CisJcmV0dXJuIGJ1ZjsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9jb25uZWN0b3JfbmFtZSk7CisKK2NoYXIgKmRybV9nZXRfY29ubmVjdG9yX3N0YXR1c19uYW1lKGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKQoreworCWlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCisJCXJldHVybiAiY29ubmVjdGVkIjsKKwllbHNlIGlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCisJCXJldHVybiAiZGlzY29ubmVjdGVkIjsKKwllbHNlCisJCXJldHVybiAidW5rbm93biI7Cit9CisKKy8qKgorICogZHJtX21vZGVfb2JqZWN0X2dldCAtIGFsbG9jYXRlIGEgbmV3IGlkZW50aWZpZXIKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBwdHI6IG9iamVjdCBwb2ludGVyLCB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRAorICogQHR5cGU6IG9iamVjdCB0eXBlCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgRFJNIG1vZGVfY29uZmlnIGxvY2suCisgKgorICogQ3JlYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIgYmFzZWQgb24gQHB0ciBpbiBAZGV2J3MgaWRlbnRpZmllciBzcGFjZS4gIFVzZWQKKyAqIGZvciB0cmFja2luZyBtb2RlcywgQ1JUQ3MgYW5kIGNvbm5lY3RvcnMuCisgKgorICogUkVUVVJOUzoKKyAqIE5ldyB1bmlxdWUgKHJlbGF0aXZlIHRvIG90aGVyIG9iamVjdHMgaW4gQGRldikgaW50ZWdlciBpZGVudGlmaWVyIGZvciB0aGUKKyAqIG9iamVjdC4KKyAqLworc3RhdGljIGludCBkcm1fbW9kZV9vYmplY3RfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLCB1aW50MzJfdCBvYmpfdHlwZSkKK3sKKwlpbnQgbmV3X2lkID0gMDsKKwlpbnQgcmV0OworCisJV0FSTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KSwKKwkgICAgICIlcyBjYWxsZWQgdy9vIG1vZGVfY29uZmlnIGxvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CithZ2FpbjoKKwlpZiAoaWRyX3ByZV9nZXQoJmRldi0+bW9kZV9jb25maWcuY3J0Y19pZHIsIEdGUF9LRVJORUwpID09IDApIHsKKwkJRFJNX0VSUk9SKCJSYW4gb3V0IG1lbW9yeSBnZXR0aW5nIGEgbW9kZSBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2lkciwgb2JqLCAxLCAmbmV3X2lkKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisKKwlvYmotPmlkID0gbmV3X2lkOworCW9iai0+dHlwZSA9IG9ial90eXBlOworCXJldHVybiAwOworfQorCisvKioKKyAqIGRybV9tb2RlX29iamVjdF9wdXQgLSBmcmVlIGFuIGlkZW50aWZlcgorICogQGRldjogRFJNIGRldmljZQorICogQGlkOiBJRCB0byBmcmVlCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgRFJNIG1vZGVfY29uZmlnIGxvY2suCisgKgorICogRnJlZSBAaWQgZnJvbSBAZGV2J3MgdW5pcXVlIGlkZW50aWZpZXIgcG9vbC4KKyAqLworc3RhdGljIHZvaWQgZHJtX21vZGVfb2JqZWN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iamVjdCkKK3sKKwlpZHJfcmVtb3ZlKCZkZXYtPm1vZGVfY29uZmlnLmNydGNfaWRyLCBvYmplY3QtPmlkKTsKK30KKwordm9pZCAqZHJtX21vZGVfb2JqZWN0X2ZpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaWQsIHVpbnQzMl90IHR5cGUpCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCisJb2JqID0gaWRyX2ZpbmQoJmRldi0+bW9kZV9jb25maWcuY3J0Y19pZHIsIGlkKTsKKwlpZiAoIW9iaiB8fCAob2JqLT50eXBlICE9IHR5cGUpIHx8IChvYmotPmlkICE9IGlkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9vYmplY3RfZmluZCk7CisKKy8qKgorICogZHJtX2NydGNfZnJvbV9mYiAtIGZpbmQgdGhlIENSVEMgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBmYgorICogQGRldjogRFJNIGRldmljZQorICogQGZiOiBmcmFtZWJ1ZmZlciBpbiBxdWVzdGlvbgorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIG1vZGVfY29uZmlnIGxvY2suCisgKgorICogRmluZCBDUlRDIGluIHRoZSBtb2RlX2NvbmZpZyBzdHJ1Y3R1cmUgdGhhdCBtYXRjaGVzIEBmYi4KKyAqCisgKiBSRVRVUk5TOgorICogUG9pbnRlciB0byB0aGUgQ1JUQyBvciBOVUxMIGlmIGl0IHdhc24ndCBmb3VuZC4KKyAqLworc3RydWN0IGRybV9jcnRjICpkcm1fY3J0Y19mcm9tX2ZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpZiAoY3J0Yy0+ZmIgPT0gZmIpCisJCQlyZXR1cm4gY3J0YzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZHJtX2ZyYW1lYnVmZmVyX2luaXQgLSBpbml0aWFsaXplIGEgZnJhbWVidWZmZXIKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIEFsbG9jYXRlcyBhbiBJRCBmb3IgdGhlIGZyYW1lYnVmZmVyJ3MgcGFyZW50IG1vZGUgb2JqZWN0LCBzZXRzIGl0cyBtb2RlCisgKiBmdW5jdGlvbnMgJiBkZXZpY2UgZmlsZSBhbmQgYWRkcyBpdCB0byB0aGUgbWFzdGVyIGZkIGxpc3QuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWx1cmUuCisgKi8KK2ludCBkcm1fZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmdW5jcykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX21vZGVfb2JqZWN0X2dldChkZXYsICZmYi0+YmFzZSwgRFJNX01PREVfT0JKRUNUX0ZCKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJZmItPmRldiA9IGRldjsKKwlmYi0+ZnVuY3MgPSBmdW5jczsKKwlkZXYtPm1vZGVfY29uZmlnLm51bV9mYisrOworCWxpc3RfYWRkKCZmYi0+aGVhZCwgJmRldi0+bW9kZV9jb25maWcuZmJfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZyYW1lYnVmZmVyX2luaXQpOworCisvKioKKyAqIGRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwIC0gcmVtb3ZlIGEgZnJhbWVidWZmZXIgb2JqZWN0CisgKiBAZmI6IGZyYW1lYnVmZmVyIHRvIHJlbW92ZQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogU2NhbnMgYWxsIHRoZSBDUlRDcyBpbiBAZGV2J3MgbW9kZV9jb25maWcuICBJZiB0aGV5J3JlIHVzaW5nIEBmYiwgcmVtb3ZlcworICogaXQsIHNldHRpbmcgaXQgdG8gTlVMTC4KKyAqLwordm9pZCBkcm1fZnJhbWVidWZmZXJfY2xlYW51cChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwkvKiByZW1vdmUgZnJvbSBhbnkgQ1JUQyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWlmIChjcnRjLT5mYiA9PSBmYikKKwkJCWNydGMtPmZiID0gTlVMTDsKKwl9CisKKwlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJmZiLT5iYXNlKTsKKwlsaXN0X2RlbCgmZmItPmhlYWQpOworCWRldi0+bW9kZV9jb25maWcubnVtX2ZiLS07Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKTsKKworLyoqCisgKiBkcm1fY3J0Y19pbml0IC0gSW5pdGlhbGlzZSBhIG5ldyBDUlRDIG9iamVjdAorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IENSVEMgb2JqZWN0IHRvIGluaXQKKyAqIEBmdW5jczogY2FsbGJhY2tzIGZvciB0aGUgbmV3IENSVEMKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIEluaXRzIGEgbmV3IG9iamVjdCBjcmVhdGVkIGFzIGJhc2UgcGFydCBvZiBhbiBkcml2ZXIgY3J0YyBvYmplY3QuCisgKi8KK3ZvaWQgZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCSAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyAqZnVuY3MpCit7CisJY3J0Yy0+ZGV2ID0gZGV2OworCWNydGMtPmZ1bmNzID0gZnVuY3M7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1fbW9kZV9vYmplY3RfZ2V0KGRldiwgJmNydGMtPmJhc2UsIERSTV9NT0RFX09CSkVDVF9DUlRDKTsKKworCWxpc3RfYWRkX3RhaWwoJmNydGMtPmhlYWQsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCk7CisJZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YysrOworCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jcnRjX2luaXQpOworCisvKioKKyAqIGRybV9jcnRjX2NsZWFudXAgLSBDbGVhbnMgdXAgdGhlIGNvcmUgY3J0YyB1c2FnZS4KKyAqIEBjcnRjOiBDUlRDIHRvIGNsZWFudXAKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIENsZWFudXAgQGNydGMuIFJlbW92ZXMgZnJvbSBkcm0gbW9kZXNldHRpbmcgc3BhY2UKKyAqIGRvZXMgTk9UIGZyZWUgb2JqZWN0LCBjYWxsZXIgZG9lcyB0aGF0LgorICovCit2b2lkIGRybV9jcnRjX2NsZWFudXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisKKwlpZiAoY3J0Yy0+Z2FtbWFfc3RvcmUpIHsKKwkJa2ZyZWUoY3J0Yy0+Z2FtbWFfc3RvcmUpOworCQljcnRjLT5nYW1tYV9zdG9yZSA9IE5VTEw7CisJfQorCisJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjcnRjLT5iYXNlKTsKKwlsaXN0X2RlbCgmY3J0Yy0+aGVhZCk7CisJZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0Yy0tOworfQorRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19jbGVhbnVwKTsKKworLyoqCisgKiBkcm1fbW9kZV9wcm9iZWRfYWRkIC0gYWRkIGEgbW9kZSB0byBhIGNvbm5lY3RvcidzIHByb2JlZCBtb2RlIGxpc3QKKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0aGUgbmV3IG1vZGUKKyAqIEBtb2RlOiBtb2RlIGRhdGEKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIEFkZCBAbW9kZSB0byBAY29ubmVjdG9yJ3MgbW9kZSBsaXN0IGZvciBsYXRlciB1c2UuCisgKi8KK3ZvaWQgZHJtX21vZGVfcHJvYmVkX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMpOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9wcm9iZWRfYWRkKTsKKworLyoqCisgKiBkcm1fbW9kZV9yZW1vdmUgLSByZW1vdmUgYW5kIGZyZWUgYSBtb2RlCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgbGlzdCB0byBtb2RpZnkKKyAqIEBtb2RlOiBtb2RlIHRvIHJlbW92ZQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogUmVtb3ZlIEBtb2RlIGZyb20gQGNvbm5lY3RvcidzIG1vZGUgbGlzdCwgdGhlbiBmcmVlIGl0LgorICovCit2b2lkIGRybV9tb2RlX3JlbW92ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKKwlrZnJlZShtb2RlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfcmVtb3ZlKTsKKworLyoqCisgKiBkcm1fY29ubmVjdG9yX2luaXQgLSBJbml0IGEgcHJlYWxsb2NhdGVkIGNvbm5lY3RvcgorICogQGRldjogRFJNIGRldmljZQorICogQGNvbm5lY3RvcjogdGhlIGNvbm5lY3RvciB0byBpbml0CisgKiBAZnVuY3M6IGNhbGxiYWNrcyBmb3IgdGhpcyBjb25uZWN0b3IKKyAqIEBuYW1lOiB1c2VyIHZpc2libGUgbmFtZSBvZiB0aGUgY29ubmVjdG9yCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgQGRldidzIG1vZGVfY29uZmlnIGxvY2suCisgKgorICogSW5pdGlhbGlzZXMgYSBwcmVhbGxvY2F0ZWQgY29ubmVjdG9yLiBDb25uZWN0b3JzIHNob3VsZCBiZQorICogc3ViY2xhc3NlZCBhcyBwYXJ0IG9mIGRyaXZlciBjb25uZWN0b3Igb2JqZWN0cy4KKyAqLwordm9pZCBkcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzICpmdW5jcywKKwkJICAgICBpbnQgY29ubmVjdG9yX3R5cGUpCit7CisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwljb25uZWN0b3ItPmRldiA9IGRldjsKKwljb25uZWN0b3ItPmZ1bmNzID0gZnVuY3M7CisJZHJtX21vZGVfb2JqZWN0X2dldChkZXYsICZjb25uZWN0b3ItPmJhc2UsIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOworCWNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPSBjb25uZWN0b3JfdHlwZTsKKwljb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkID0KKwkJKytkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtjb25uZWN0b3JfdHlwZV0uY291bnQ7IC8qIFRPRE8gKi8KKwlJTklUX0xJU1RfSEVBRCgmY29ubmVjdG9yLT51c2VyX21vZGVzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMpOworCUlOSVRfTElTVF9IRUFEKCZjb25uZWN0b3ItPm1vZGVzKTsKKwljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIgPSBOVUxMOworCisJbGlzdF9hZGRfdGFpbCgmY29ubmVjdG9yLT5oZWFkLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCk7CisJZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKys7CisKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5lZGlkX3Byb3BlcnR5LCAwKTsKKworCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwKKwkJCQkgICAgICBkZXYtPm1vZGVfY29uZmlnLmRwbXNfcHJvcGVydHksIDApOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl9pbml0KTsKKworLyoqCisgKiBkcm1fY29ubmVjdG9yX2NsZWFudXAgLSBjbGVhbnMgdXAgYW4gaW5pdGlhbGlzZWQgY29ubmVjdG9yCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gY2xlYW51cAorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIEBkZXYncyBtb2RlX2NvbmZpZyBsb2NrLgorICoKKyAqIENsZWFucyB1cCB0aGUgY29ubmVjdG9yIGJ1dCBkb2Vzbid0IGZyZWUgdGhlIG9iamVjdC4KKyAqLwordm9pZCBkcm1fY29ubmVjdG9yX2NsZWFudXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkKKwkJZHJtX21vZGVfcmVtb3ZlKGNvbm5lY3RvciwgbW9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCisJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpCisJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOworCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOworCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfY2xlYW51cCk7CisKK3ZvaWQgZHJtX2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyAqZnVuY3MsCisJCSAgICAgIGludCBlbmNvZGVyX3R5cGUpCit7CisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwllbmNvZGVyLT5kZXYgPSBkZXY7CisKKwlkcm1fbW9kZV9vYmplY3RfZ2V0KGRldiwgJmVuY29kZXItPmJhc2UsIERSTV9NT0RFX09CSkVDVF9FTkNPREVSKTsKKwllbmNvZGVyLT5lbmNvZGVyX3R5cGUgPSBlbmNvZGVyX3R5cGU7CisJZW5jb2Rlci0+ZnVuY3MgPSBmdW5jczsKKworCWxpc3RfYWRkX3RhaWwoJmVuY29kZXItPmhlYWQsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCk7CisJZGV2LT5tb2RlX2NvbmZpZy5udW1fZW5jb2RlcisrOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2VuY29kZXJfaW5pdCk7CisKK3ZvaWQgZHJtX2VuY29kZXJfY2xlYW51cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJmVuY29kZXItPmJhc2UpOworCWxpc3RfZGVsKCZlbmNvZGVyLT5oZWFkKTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChkcm1fZW5jb2Rlcl9jbGVhbnVwKTsKKworLyoqCisgKiBkcm1fbW9kZV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2RlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgRFJNIG1vZGVfY29uZmlnIGxvY2suCisgKgorICogQ3JlYXRlIGEgbmV3IGRybV9kaXNwbGF5X21vZGUsIGdpdmUgaXQgYW4gSUQsIGFuZCByZXR1cm4gaXQuCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gbmV3IG1vZGUgb24gc3VjY2VzcywgTlVMTCBvbiBlcnJvci4KKyAqLworc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpubW9kZTsKKworCW5tb2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5tb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCWRybV9tb2RlX29iamVjdF9nZXQoZGV2LCAmbm1vZGUtPmJhc2UsIERSTV9NT0RFX09CSkVDVF9NT0RFKTsKKwlyZXR1cm4gbm1vZGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NyZWF0ZSk7CisKKy8qKgorICogZHJtX21vZGVfZGVzdHJveSAtIHJlbW92ZSBhIG1vZGUKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBtb2RlOiBtb2RlIHRvIHJlbW92ZQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogRnJlZSBAbW9kZSdzIHVuaXF1ZSBpZGVudGlmaWVyLCB0aGVuIGZyZWUgaXQuCisgKi8KK3ZvaWQgZHJtX21vZGVfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJm1vZGUtPmJhc2UpOworCisJa2ZyZWUobW9kZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2Rlc3Ryb3kpOworCitzdGF0aWMgaW50IGRybV9tb2RlX2NyZWF0ZV9zdGFuZGFyZF9jb25uZWN0b3JfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmVkaWQ7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqZHBtczsKKwlpbnQgaTsKKworCS8qCisJICogU3RhbmRhcmQgcHJvcGVydGllcyAoYXBwbHkgdG8gYWxsIGNvbm5lY3RvcnMpCisJICovCisJZWRpZCA9IGRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX0JMT0IgfAorCQkJCSAgIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLAorCQkJCSAgICJFRElEIiwgMCk7CisJZGV2LT5tb2RlX2NvbmZpZy5lZGlkX3Byb3BlcnR5ID0gZWRpZDsKKworCWRwbXMgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCSAgICJEUE1TIiwgQVJSQVlfU0laRShkcm1fZHBtc19lbnVtX2xpc3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm1fZHBtc19lbnVtX2xpc3QpOyBpKyspCisJCWRybV9wcm9wZXJ0eV9hZGRfZW51bShkcG1zLCBpLCBkcm1fZHBtc19lbnVtX2xpc3RbaV0udHlwZSwKKwkJCQkgICAgICBkcm1fZHBtc19lbnVtX2xpc3RbaV0ubmFtZSk7CisJZGV2LT5tb2RlX2NvbmZpZy5kcG1zX3Byb3BlcnR5ID0gZHBtczsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGRybV9tb2RlX2NyZWF0ZV9kdmlfaV9wcm9wZXJ0aWVzIC0gY3JlYXRlIERWSS1JIHNwZWNpZmljIGNvbm5lY3RvciBwcm9wZXJ0aWVzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICogQ2FsbGVkIGJ5IGEgZHJpdmVyIHRoZSBmaXJzdCB0aW1lIGEgRFZJLUkgY29ubmVjdG9yIGlzIG1hZGUuCisgKi8KK2ludCBkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmR2aV9pX3NlbGVjdG9yOworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmR2aV9pX3N1YmNvbm5lY3RvcjsKKwlpbnQgaTsKKworCWlmIChkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHkpCisJCXJldHVybiAwOworCisJZHZpX2lfc2VsZWN0b3IgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCSAgICAic2VsZWN0IHN1YmNvbm5lY3RvciIsCisJCQkJICAgIEFSUkFZX1NJWkUoZHJtX2R2aV9pX3NlbGVjdF9lbnVtX2xpc3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm1fZHZpX2lfc2VsZWN0X2VudW1fbGlzdCk7IGkrKykKKwkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKGR2aV9pX3NlbGVjdG9yLCBpLAorCQkJCSAgICAgIGRybV9kdmlfaV9zZWxlY3RfZW51bV9saXN0W2ldLnR5cGUsCisJCQkJICAgICAgZHJtX2R2aV9pX3NlbGVjdF9lbnVtX2xpc3RbaV0ubmFtZSk7CisJZGV2LT5tb2RlX2NvbmZpZy5kdmlfaV9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5ID0gZHZpX2lfc2VsZWN0b3I7CisKKwlkdmlfaV9zdWJjb25uZWN0b3IgPQorCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNIHwKKwkJCQkgICAgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCisJCQkJICAgICJzdWJjb25uZWN0b3IiLAorCQkJCSAgICBBUlJBWV9TSVpFKGRybV9kdmlfaV9zdWJjb25uZWN0b3JfZW51bV9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJtX2R2aV9pX3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3QpOyBpKyspCisJCWRybV9wcm9wZXJ0eV9hZGRfZW51bShkdmlfaV9zdWJjb25uZWN0b3IsIGksCisJCQkJICAgICAgZHJtX2R2aV9pX3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3RbaV0udHlwZSwKKwkJCQkgICAgICBkcm1fZHZpX2lfc3ViY29ubmVjdG9yX2VudW1fbGlzdFtpXS5uYW1lKTsKKwlkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSA9IGR2aV9pX3N1YmNvbm5lY3RvcjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyk7CisKKy8qKgorICogZHJtX2NyZWF0ZV90dl9wcm9wZXJ0aWVzIC0gY3JlYXRlIFRWIHNwZWNpZmljIGNvbm5lY3RvciBwcm9wZXJ0aWVzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAbnVtX21vZGVzOiBudW1iZXIgb2YgZGlmZmVyZW50IFRWIGZvcm1hdHMgKG1vZGVzKSBzdXBwb3J0ZWQKKyAqIEBtb2RlczogYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncyBjb250YWluaW5nIG5hbWUgb2YgZWFjaCBmb3JtYXQKKyAqCisgKiBDYWxsZWQgYnkgYSBkcml2ZXIncyBUViBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMKKyAqIHRoZSBUViBzcGVjaWZpYyBjb25uZWN0b3IgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBkZXZpY2UuICBDYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgbGlzdCBvZiBmb3JtYXQgbmFtZXMgYW5kIHBhc3NpbmcgdGhlbSB0bworICogdGhpcyByb3V0aW5lLgorICovCitpbnQgZHJtX21vZGVfY3JlYXRlX3R2X3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9tb2RlcywKKwkJCQkgIGNoYXIgKm1vZGVzW10pCit7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc2VsZWN0b3I7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc3ViY29ubmVjdG9yOworCWludCBpOworCisJaWYgKGRldi0+bW9kZV9jb25maWcudHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEJhc2ljIGNvbm5lY3RvciBwcm9wZXJ0aWVzCisJICovCisJdHZfc2VsZWN0b3IgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCQkgICJzZWxlY3Qgc3ViY29ubmVjdG9yIiwKKwkJCQkJICBBUlJBWV9TSVpFKGRybV90dl9zZWxlY3RfZW51bV9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJtX3R2X3NlbGVjdF9lbnVtX2xpc3QpOyBpKyspCisJCWRybV9wcm9wZXJ0eV9hZGRfZW51bSh0dl9zZWxlY3RvciwgaSwKKwkJCQkgICAgICBkcm1fdHZfc2VsZWN0X2VudW1fbGlzdFtpXS50eXBlLAorCQkJCSAgICAgIGRybV90dl9zZWxlY3RfZW51bV9saXN0W2ldLm5hbWUpOworCWRldi0+bW9kZV9jb25maWcudHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSA9IHR2X3NlbGVjdG9yOworCisJdHZfc3ViY29ubmVjdG9yID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfRU5VTSB8CisJCQkJICAgIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAic3ViY29ubmVjdG9yIiwKKwkJCQkgICAgQVJSQVlfU0laRShkcm1fdHZfc3ViY29ubmVjdG9yX2VudW1fbGlzdCkpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRybV90dl9zdWJjb25uZWN0b3JfZW51bV9saXN0KTsgaSsrKQorCQlkcm1fcHJvcGVydHlfYWRkX2VudW0odHZfc3ViY29ubmVjdG9yLCBpLAorCQkJCSAgICAgIGRybV90dl9zdWJjb25uZWN0b3JfZW51bV9saXN0W2ldLnR5cGUsCisJCQkJICAgICAgZHJtX3R2X3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3RbaV0ubmFtZSk7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9zdWJjb25uZWN0b3JfcHJvcGVydHkgPSB0dl9zdWJjb25uZWN0b3I7CisKKwkvKgorCSAqIE90aGVyLCBUViBzcGVjaWZpYyBwcm9wZXJ0aWVzOiBtYXJnaW5zICYgVFYgbW9kZXMuCisJICovCisJZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLAorCQkJCSAgICAibGVmdCBtYXJnaW4iLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAwOworCWRldi0+bW9kZV9jb25maWcudHZfbGVmdF9tYXJnaW5fcHJvcGVydHktPnZhbHVlc1sxXSA9IDEwMDsKKworCWRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJyaWdodCBtYXJnaW4iLCAyKTsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eS0+dmFsdWVzWzBdID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCisJZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJ0b3AgbWFyZ2luIiwgMik7CisJZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAwOworCWRldi0+bW9kZV9jb25maWcudHZfdG9wX21hcmdpbl9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCisJZGV2LT5tb2RlX2NvbmZpZy50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsCisJCQkJICAgICJib3R0b20gbWFyZ2luIiwgMik7CisJZGV2LT5tb2RlX2NvbmZpZy50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAwOworCWRldi0+bW9kZV9jb25maWcudHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTAwOworCisJZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5ID0KKwkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfRU5VTSwKKwkJCQkgICAgIm1vZGUiLCBudW1fbW9kZXMpOworCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykKKwkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKGRldi0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSwgaSwKKwkJCQkgICAgICBpLCBtb2Rlc1tpXSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY3JlYXRlX3R2X3Byb3BlcnRpZXMpOworCisvKioKKyAqIGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHkgLSBjcmVhdGUgc2NhbGluZyBtb2RlIHByb3BlcnR5CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICogQ2FsbGVkIGJ5IGEgZHJpdmVyIHRoZSBmaXJzdCB0aW1lIGl0J3MgbmVlZGVkLCBtdXN0IGJlIGF0dGFjaGVkIHRvIGRlc2lyZWQKKyAqIGNvbm5lY3RvcnMuCisgKi8KK2ludCBkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqc2NhbGluZ19tb2RlOworCWludCBpOworCisJaWYgKGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5KQorCQlyZXR1cm4gMDsKKworCXNjYWxpbmdfbW9kZSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX0VOVU0sICJzY2FsaW5nIG1vZGUiLAorCQkJCSAgICBBUlJBWV9TSVpFKGRybV9zY2FsaW5nX21vZGVfZW51bV9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJtX3NjYWxpbmdfbW9kZV9lbnVtX2xpc3QpOyBpKyspCisJCWRybV9wcm9wZXJ0eV9hZGRfZW51bShzY2FsaW5nX21vZGUsIGksCisJCQkJICAgICAgZHJtX3NjYWxpbmdfbW9kZV9lbnVtX2xpc3RbaV0udHlwZSwKKwkJCQkgICAgICBkcm1fc2NhbGluZ19tb2RlX2VudW1fbGlzdFtpXS5uYW1lKTsKKworCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5ID0gc2NhbGluZ19tb2RlOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHkpOworCisvKioKKyAqIGRybV9tb2RlX2NyZWF0ZV9kaXRoZXJpbmdfcHJvcGVydHkgLSBjcmVhdGUgZGl0aGVyaW5nIHByb3BlcnR5CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICogQ2FsbGVkIGJ5IGEgZHJpdmVyIHRoZSBmaXJzdCB0aW1lIGl0J3MgbmVlZGVkLCBtdXN0IGJlIGF0dGFjaGVkIHRvIGRlc2lyZWQKKyAqIGNvbm5lY3RvcnMuCisgKi8KK2ludCBkcm1fbW9kZV9jcmVhdGVfZGl0aGVyaW5nX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqZGl0aGVyaW5nX21vZGU7CisJaW50IGk7CisKKwlpZiAoZGV2LT5tb2RlX2NvbmZpZy5kaXRoZXJpbmdfbW9kZV9wcm9wZXJ0eSkKKwkJcmV0dXJuIDA7CisKKwlkaXRoZXJpbmdfbW9kZSA9CisJCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX0VOVU0sICJkaXRoZXJpbmciLAorCQkJCSAgICBBUlJBWV9TSVpFKGRybV9kaXRoZXJpbmdfbW9kZV9lbnVtX2xpc3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm1fZGl0aGVyaW5nX21vZGVfZW51bV9saXN0KTsgaSsrKQorCQlkcm1fcHJvcGVydHlfYWRkX2VudW0oZGl0aGVyaW5nX21vZGUsIGksCisJCQkJICAgICAgZHJtX2RpdGhlcmluZ19tb2RlX2VudW1fbGlzdFtpXS50eXBlLAorCQkJCSAgICAgIGRybV9kaXRoZXJpbmdfbW9kZV9lbnVtX2xpc3RbaV0ubmFtZSk7CisJZGV2LT5tb2RlX2NvbmZpZy5kaXRoZXJpbmdfbW9kZV9wcm9wZXJ0eSA9IGRpdGhlcmluZ19tb2RlOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NyZWF0ZV9kaXRoZXJpbmdfcHJvcGVydHkpOworCisvKioKKyAqIGRybV9tb2RlX2NvbmZpZ19pbml0IC0gaW5pdGlhbGl6ZSBEUk0gbW9kZV9jb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIExPQ0tJTkc6CisgKiBOb25lLCBzaG91bGQgaGFwcGVuIHNpbmdsZSB0aHJlYWRlZCBhdCBpbml0IHRpbWUuCisgKgorICogSW5pdGlhbGl6ZSBAZGV2J3MgbW9kZV9jb25maWcgc3RydWN0dXJlLCB1c2VkIGZvciB0cmFja2luZyB0aGUgZ3JhcGhpY3MKKyAqIGNvbmZpZ3VyYXRpb24gb2YgQGRldi4KKyAqLwordm9pZCBkcm1fbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCW11dGV4X2luaXQoJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1vZGVfY29uZmlnLmZiX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1vZGVfY29uZmlnLnByb3BlcnR5X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1vZGVfY29uZmlnLnByb3BlcnR5X2Jsb2JfbGlzdCk7CisJaWRyX2luaXQoJmRldi0+bW9kZV9jb25maWcuY3J0Y19pZHIpOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJZHJtX21vZGVfY3JlYXRlX3N0YW5kYXJkX2Nvbm5lY3Rvcl9wcm9wZXJ0aWVzKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCS8qIEp1c3QgdG8gYmUgc3VyZSAqLworCWRldi0+bW9kZV9jb25maWcubnVtX2ZiID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IgPSAwOworCWRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPSAwOworCWRldi0+bW9kZV9jb25maWcubnVtX2VuY29kZXIgPSAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25maWdfaW5pdCk7CisKK2ludCBkcm1fbW9kZV9ncm91cF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbW9kZV9ncm91cCAqZ3JvdXApCit7CisJdWludDMyX3QgdG90YWxfb2JqZWN0cyA9IDA7CisKKwl0b3RhbF9vYmplY3RzICs9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7CisJdG90YWxfb2JqZWN0cyArPSBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3I7CisJdG90YWxfb2JqZWN0cyArPSBkZXYtPm1vZGVfY29uZmlnLm51bV9lbmNvZGVyOworCisJaWYgKHRvdGFsX29iamVjdHMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlncm91cC0+aWRfbGlzdCA9IGt6YWxsb2ModG90YWxfb2JqZWN0cyAqIHNpemVvZih1aW50MzJfdCksIEdGUF9LRVJORUwpOworCWlmICghZ3JvdXAtPmlkX2xpc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3JvdXAtPm51bV9jcnRjcyA9IDA7CisJZ3JvdXAtPm51bV9jb25uZWN0b3JzID0gMDsKKwlncm91cC0+bnVtX2VuY29kZXJzID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9tb2RlX2dyb3VwX2luaXRfbGVnYWN5X2dyb3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVfZ3JvdXAgKmdyb3VwKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJaWYgKChyZXQgPSBkcm1fbW9kZV9ncm91cF9pbml0KGRldiwgZ3JvdXApKSkKKwkJcmV0dXJuIHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQlncm91cC0+aWRfbGlzdFtncm91cC0+bnVtX2NydGNzKytdID0gY3J0Yy0+YmFzZS5pZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQorCQlncm91cC0+aWRfbGlzdFtncm91cC0+bnVtX2NydGNzICsgZ3JvdXAtPm51bV9lbmNvZGVycysrXSA9CisJCWVuY29kZXItPmJhc2UuaWQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCisJCWdyb3VwLT5pZF9saXN0W2dyb3VwLT5udW1fY3J0Y3MgKyBncm91cC0+bnVtX2VuY29kZXJzICsKKwkJCSAgICAgICBncm91cC0+bnVtX2Nvbm5lY3RvcnMrK10gPSBjb25uZWN0b3ItPmJhc2UuaWQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcm1fbW9kZV9jb25maWdfY2xlYW51cCAtIGZyZWUgdXAgRFJNIG1vZGVfY29uZmlnIGluZm8KKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIEZyZWUgdXAgYWxsIHRoZSBjb25uZWN0b3JzIGFuZCBDUlRDcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBEUk0gZGV2aWNlLCB0aGVuCisgKiBmcmVlIHVwIHRoZSBmcmFtZWJ1ZmZlcnMgYW5kIGFzc29jaWF0ZWQgYnVmZmVyIG9iamVjdHMuCisgKgorICogRklYTUU6IGNsZWFudXAgYW55IGRhbmdsaW5nIHVzZXIgYnVmZmVyIG9iamVjdHMgdG9vCisgKi8KK3ZvaWQgZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCAqb3Q7CisJc3RydWN0IGRybV9jcnRjICpjcnRjLCAqY3Q7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCAqZW5jdDsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgKmZidDsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgKnB0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVuY29kZXIsIGVuY3QsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwKKwkJCQkgaGVhZCkgeworCQllbmNvZGVyLT5mdW5jcy0+ZGVzdHJveShlbmNvZGVyKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubmVjdG9yLCBvdCwKKwkJCQkgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJY29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25uZWN0b3IpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcm9wZXJ0eSwgcHQsICZkZXYtPm1vZGVfY29uZmlnLnByb3BlcnR5X2xpc3QsCisJCQkJIGhlYWQpIHsKKwkJZHJtX3Byb3BlcnR5X2Rlc3Ryb3koZGV2LCBwcm9wZXJ0eSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZiLCBmYnQsICZkZXYtPm1vZGVfY29uZmlnLmZiX2xpc3QsIGhlYWQpIHsKKwkJZmItPmZ1bmNzLT5kZXN0cm95KGZiKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3J0YywgY3QsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQljcnRjLT5mdW5jcy0+ZGVzdHJveShjcnRjKTsKKwl9CisKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY29uZmlnX2NsZWFudXApOworCisvKioKKyAqIGRybV9jcnRjX2NvbnZlcnRfdG9fdW1vZGUgLSBjb252ZXJ0IGEgZHJtX2Rpc3BsYXlfbW9kZSBpbnRvIGEgbW9kZWluZm8KKyAqIEBvdXQ6IGRybV9tb2RlX21vZGVpbmZvIHN0cnVjdCB0byByZXR1cm4gdG8gdGhlIHVzZXIKKyAqIEBpbjogZHJtX2Rpc3BsYXlfbW9kZSB0byB1c2UKKyAqCisgKiBMT0NLSU5HOgorICogTm9uZS4KKyAqCisgKiBDb252ZXJ0IGEgZHJtX2Rpc3BsYXlfbW9kZSBpbnRvIGEgZHJtX21vZGVfbW9kZWluZm8gc3RydWN0dXJlIHRvIHJldHVybiB0bworICogdGhlIHVzZXIuCisgKi8KK3ZvaWQgZHJtX2NydGNfY29udmVydF90b191bW9kZShzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm91dCwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqaW4pCit7CisJb3V0LT5jbG9jayA9IGluLT5jbG9jazsKKwlvdXQtPmhkaXNwbGF5ID0gaW4tPmhkaXNwbGF5OworCW91dC0+aHN5bmNfc3RhcnQgPSBpbi0+aHN5bmNfc3RhcnQ7CisJb3V0LT5oc3luY19lbmQgPSBpbi0+aHN5bmNfZW5kOworCW91dC0+aHRvdGFsID0gaW4tPmh0b3RhbDsKKwlvdXQtPmhza2V3ID0gaW4tPmhza2V3OworCW91dC0+dmRpc3BsYXkgPSBpbi0+dmRpc3BsYXk7CisJb3V0LT52c3luY19zdGFydCA9IGluLT52c3luY19zdGFydDsKKwlvdXQtPnZzeW5jX2VuZCA9IGluLT52c3luY19lbmQ7CisJb3V0LT52dG90YWwgPSBpbi0+dnRvdGFsOworCW91dC0+dnNjYW4gPSBpbi0+dnNjYW47CisJb3V0LT52cmVmcmVzaCA9IGluLT52cmVmcmVzaDsKKwlvdXQtPmZsYWdzID0gaW4tPmZsYWdzOworCW91dC0+dHlwZSA9IGluLT50eXBlOworCXN0cm5jcHkob3V0LT5uYW1lLCBpbi0+bmFtZSwgRFJNX0RJU1BMQVlfTU9ERV9MRU4pOworCW91dC0+bmFtZVtEUk1fRElTUExBWV9NT0RFX0xFTi0xXSA9IDA7Cit9CisKKy8qKgorICogZHJtX2NydGNfY29udmVydF90b191bW9kZSAtIGNvbnZlcnQgYSBtb2RlaW5mbyBpbnRvIGEgZHJtX2Rpc3BsYXlfbW9kZQorICogQG91dDogZHJtX2Rpc3BsYXlfbW9kZSB0byByZXR1cm4gdG8gdGhlIHVzZXIKKyAqIEBpbjogZHJtX21vZGVfbW9kZWluZm8gdG8gdXNlCisgKgorICogTE9DS0lORzoKKyAqIE5vbmUuCisgKgorICogQ29udmVydCBhIGRybV9tb2RlX21vZGVpbmZvIGludG8gYSBkcm1fZGlzcGxheV9tb2RlIHN0cnVjdHVyZSB0byByZXR1cm4gdG8KKyAqIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQgZHJtX2NydGNfY29udmVydF91bW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqb3V0LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqaW4pCit7CisJb3V0LT5jbG9jayA9IGluLT5jbG9jazsKKwlvdXQtPmhkaXNwbGF5ID0gaW4tPmhkaXNwbGF5OworCW91dC0+aHN5bmNfc3RhcnQgPSBpbi0+aHN5bmNfc3RhcnQ7CisJb3V0LT5oc3luY19lbmQgPSBpbi0+aHN5bmNfZW5kOworCW91dC0+aHRvdGFsID0gaW4tPmh0b3RhbDsKKwlvdXQtPmhza2V3ID0gaW4tPmhza2V3OworCW91dC0+dmRpc3BsYXkgPSBpbi0+dmRpc3BsYXk7CisJb3V0LT52c3luY19zdGFydCA9IGluLT52c3luY19zdGFydDsKKwlvdXQtPnZzeW5jX2VuZCA9IGluLT52c3luY19lbmQ7CisJb3V0LT52dG90YWwgPSBpbi0+dnRvdGFsOworCW91dC0+dnNjYW4gPSBpbi0+dnNjYW47CisJb3V0LT52cmVmcmVzaCA9IGluLT52cmVmcmVzaDsKKwlvdXQtPmZsYWdzID0gaW4tPmZsYWdzOworCW91dC0+dHlwZSA9IGluLT50eXBlOworCXN0cm5jcHkob3V0LT5uYW1lLCBpbi0+bmFtZSwgRFJNX0RJU1BMQVlfTU9ERV9MRU4pOworCW91dC0+bmFtZVtEUk1fRElTUExBWV9NT0RFX0xFTi0xXSA9IDA7Cit9CisKKy8qKgorICogZHJtX21vZGVfZ2V0cmVzb3VyY2VzIC0gZ2V0IGdyYXBoaWNzIGNvbmZpZ3VyYXRpb24KKyAqIEBpbm9kZTogaW5vZGUgZnJvbSB0aGUgaW9jdGwKKyAqIEBmaWxwOiBmaWxlICogZnJvbSB0aGUgaW9jdGwKKyAqIEBjbWQ6IGNtZCBmcm9tIGlvY3RsCisgKiBAYXJnOiBhcmcgZnJvbSBpb2N0bAorICoKKyAqIExPQ0tJTkc6CisgKiBUYWtlcyBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIENvbnN0cnVjdCBhIHNldCBvZiBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZXMgYW5kIHJldHVybgorICogdGhlbSB0byB0aGUgdXNlciwgaW5jbHVkaW5nIENSVEMsIGNvbm5lY3RvciBhbmQgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIHVzZXIgdmlhIGlvY3RsLgorICoKKyAqIFJFVFVSTlM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fbW9kZV9nZXRyZXNvdXJjZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzICpjYXJkX3JlcyA9IGRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqbGg7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWludCByZXQgPSAwOworCWludCBjb25uZWN0b3JfY291bnQgPSAwOworCWludCBjcnRjX2NvdW50ID0gMDsKKwlpbnQgZmJfY291bnQgPSAwOworCWludCBlbmNvZGVyX2NvdW50ID0gMDsKKwlpbnQgY29waWVkID0gMCwgaTsKKwl1aW50MzJfdCBfX3VzZXIgKmZiX2lkOworCXVpbnQzMl90IF9fdXNlciAqY3J0Y19pZDsKKwl1aW50MzJfdCBfX3VzZXIgKmNvbm5lY3Rvcl9pZDsKKwl1aW50MzJfdCBfX3VzZXIgKmVuY29kZXJfaWQ7CisJc3RydWN0IGRybV9tb2RlX2dyb3VwICptb2RlX2dyb3VwOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwkvKgorCSAqIEZvciB0aGUgbm9uLWNvbnRyb2wgbm9kZXMgd2UgbmVlZCB0byBsaW1pdCB0aGUgbGlzdCBvZiByZXNvdXJjZXMKKwkgKiBieSBJRHMgaW4gdGhlIGdyb3VwIGxpc3QgZm9yIHRoaXMgbm9kZQorCSAqLworCWxpc3RfZm9yX2VhY2gobGgsICZmaWxlX3ByaXYtPmZicykKKwkJZmJfY291bnQrKzsKKworCW1vZGVfZ3JvdXAgPSAmZmlsZV9wcml2LT5tYXN0ZXItPm1pbm9yLT5tb2RlX2dyb3VwOworCWlmIChmaWxlX3ByaXYtPm1hc3Rlci0+bWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0NPTlRST0wpIHsKKworCQlsaXN0X2Zvcl9lYWNoKGxoLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QpCisJCQljcnRjX2NvdW50Kys7CisKKwkJbGlzdF9mb3JfZWFjaChsaCwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QpCisJCQljb25uZWN0b3JfY291bnQrKzsKKworCQlsaXN0X2Zvcl9lYWNoKGxoLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QpCisJCQllbmNvZGVyX2NvdW50Kys7CisJfSBlbHNlIHsKKworCQljcnRjX2NvdW50ID0gbW9kZV9ncm91cC0+bnVtX2NydGNzOworCQljb25uZWN0b3JfY291bnQgPSBtb2RlX2dyb3VwLT5udW1fY29ubmVjdG9yczsKKwkJZW5jb2Rlcl9jb3VudCA9IG1vZGVfZ3JvdXAtPm51bV9lbmNvZGVyczsKKwl9CisKKwljYXJkX3Jlcy0+bWF4X2hlaWdodCA9IGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodDsKKwljYXJkX3Jlcy0+bWluX2hlaWdodCA9IGRldi0+bW9kZV9jb25maWcubWluX2hlaWdodDsKKwljYXJkX3Jlcy0+bWF4X3dpZHRoID0gZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGg7CisJY2FyZF9yZXMtPm1pbl93aWR0aCA9IGRldi0+bW9kZV9jb25maWcubWluX3dpZHRoOworCisJLyogaGFuZGxlIHRoaXMgaW4gNCBwYXJ0cyAqLworCS8qIEZCcyAqLworCWlmIChjYXJkX3Jlcy0+Y291bnRfZmJzID49IGZiX2NvdW50KSB7CisJCWNvcGllZCA9IDA7CisJCWZiX2lkID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNhcmRfcmVzLT5mYl9pZF9wdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmIsICZmaWxlX3ByaXYtPmZicywgaGVhZCkgeworCQkJaWYgKHB1dF91c2VyKGZiLT5iYXNlLmlkLCBmYl9pZCArIGNvcGllZCkpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJY29waWVkKys7CisJCX0KKwl9CisJY2FyZF9yZXMtPmNvdW50X2ZicyA9IGZiX2NvdW50OworCisJLyogQ1JUQ3MgKi8KKwlpZiAoY2FyZF9yZXMtPmNvdW50X2NydGNzID49IGNydGNfY291bnQpIHsKKwkJY29waWVkID0gMDsKKwkJY3J0Y19pZCA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljYXJkX3Jlcy0+Y3J0Y19pZF9wdHI7CisJCWlmIChmaWxlX3ByaXYtPm1hc3Rlci0+bWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0NPTlRST0wpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LAorCQkJCQkgICAgaGVhZCkgeworCQkJCURSTV9ERUJVRygiQ1JUQyBJRCBpcyAlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisJCQkJaWYgKHB1dF91c2VyKGNydGMtPmJhc2UuaWQsIGNydGNfaWQgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBtb2RlX2dyb3VwLT5udW1fY3J0Y3M7IGkrKykgeworCQkJCWlmIChwdXRfdXNlcihtb2RlX2dyb3VwLT5pZF9saXN0W2ldLAorCQkJCQkgICAgIGNydGNfaWQgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfQorCX0KKwljYXJkX3Jlcy0+Y291bnRfY3J0Y3MgPSBjcnRjX2NvdW50OworCisJLyogRW5jb2RlcnMgKi8KKwlpZiAoY2FyZF9yZXMtPmNvdW50X2VuY29kZXJzID49IGVuY29kZXJfY291bnQpIHsKKwkJY29waWVkID0gMDsKKwkJZW5jb2Rlcl9pZCA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljYXJkX3Jlcy0+ZW5jb2Rlcl9pZF9wdHI7CisJCWlmIChmaWxlX3ByaXYtPm1hc3Rlci0+bWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0NPTlRST0wpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwKKwkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwKKwkJCQkJICAgIGhlYWQpIHsKKwkJCQlEUk1fREVCVUcoIkVOQ09ERVIgSUQgaXMgJWRcbiIsCisJCQkJCSAgZW5jb2Rlci0+YmFzZS5pZCk7CisJCQkJaWYgKHB1dF91c2VyKGVuY29kZXItPmJhc2UuaWQsIGVuY29kZXJfaWQgKworCQkJCQkgICAgIGNvcGllZCkpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCWNvcGllZCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpID0gbW9kZV9ncm91cC0+bnVtX2NydGNzOyBpIDwgbW9kZV9ncm91cC0+bnVtX2NydGNzICsgbW9kZV9ncm91cC0+bnVtX2VuY29kZXJzOyBpKyspIHsKKwkJCQlpZiAocHV0X3VzZXIobW9kZV9ncm91cC0+aWRfbGlzdFtpXSwKKwkJCQkJICAgICBlbmNvZGVyX2lkICsgY29waWVkKSkgeworCQkJCQlyZXQgPSAtRUZBVUxUOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJY29waWVkKys7CisJCQl9CisKKwkJfQorCX0KKwljYXJkX3Jlcy0+Y291bnRfZW5jb2RlcnMgPSBlbmNvZGVyX2NvdW50OworCisJLyogQ29ubmVjdG9ycyAqLworCWlmIChjYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycyA+PSBjb25uZWN0b3JfY291bnQpIHsKKwkJY29waWVkID0gMDsKKwkJY29ubmVjdG9yX2lkID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNhcmRfcmVzLT5jb25uZWN0b3JfaWRfcHRyOworCQlpZiAoZmlsZV9wcml2LT5tYXN0ZXItPm1pbm9yLT50eXBlID09IERSTV9NSU5PUl9DT05UUk9MKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwKKwkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAorCQkJCQkgICAgaGVhZCkgeworCQkJCURSTV9ERUJVRygiQ09OTkVDVE9SIElEIGlzICVkXG4iLAorCQkJCQkgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQkJaWYgKHB1dF91c2VyKGNvbm5lY3Rvci0+YmFzZS5pZCwKKwkJCQkJICAgICBjb25uZWN0b3JfaWQgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBzdGFydCA9IG1vZGVfZ3JvdXAtPm51bV9jcnRjcyArCisJCQkJbW9kZV9ncm91cC0+bnVtX2VuY29kZXJzOworCQkJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIG1vZGVfZ3JvdXAtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKKwkJCQlpZiAocHV0X3VzZXIobW9kZV9ncm91cC0+aWRfbGlzdFtpXSwKKwkJCQkJICAgICBjb25uZWN0b3JfaWQgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfQorCX0KKwljYXJkX3Jlcy0+Y291bnRfY29ubmVjdG9ycyA9IGNvbm5lY3Rvcl9jb3VudDsKKworCURSTV9ERUJVRygiQ291bnRlZCAlZCAlZCAlZFxuIiwgY2FyZF9yZXMtPmNvdW50X2NydGNzLAorCQkgIGNhcmRfcmVzLT5jb3VudF9jb25uZWN0b3JzLCBjYXJkX3Jlcy0+Y291bnRfZW5jb2RlcnMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRybV9tb2RlX2dldGNydGMgLSBnZXQgQ1JUQyBjb25maWd1cmF0aW9uCisgKiBAaW5vZGU6IGlub2RlIGZyb20gdGhlIGlvY3RsCisgKiBAZmlscDogZmlsZSAqIGZyb20gdGhlIGlvY3RsCisgKiBAY21kOiBjbWQgZnJvbSBpb2N0bAorICogQGFyZzogYXJnIGZyb20gaW9jdGwKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyPyAoRklYTUUpCisgKgorICogQ29uc3RydWN0IGEgQ1JUQyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byByZXR1cm4gdG8gdGhlIHVzZXIuCisgKgorICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX21vZGVfZ2V0Y3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9jcnRjICpjcnRjX3Jlc3AgPSBkYXRhOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgY3J0Y19yZXNwLT5jcnRjX2lkLAorCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DUlRDKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisKKwljcnRjX3Jlc3AtPnggPSBjcnRjLT54OworCWNydGNfcmVzcC0+eSA9IGNydGMtPnk7CisJY3J0Y19yZXNwLT5nYW1tYV9zaXplID0gY3J0Yy0+Z2FtbWFfc2l6ZTsKKwlpZiAoY3J0Yy0+ZmIpCisJCWNydGNfcmVzcC0+ZmJfaWQgPSBjcnRjLT5mYi0+YmFzZS5pZDsKKwllbHNlCisJCWNydGNfcmVzcC0+ZmJfaWQgPSAwOworCisJaWYgKGNydGMtPmVuYWJsZWQpIHsKKworCQlkcm1fY3J0Y19jb252ZXJ0X3RvX3Vtb2RlKCZjcnRjX3Jlc3AtPm1vZGUsICZjcnRjLT5tb2RlKTsKKwkJY3J0Y19yZXNwLT5tb2RlX3ZhbGlkID0gMTsKKworCX0gZWxzZSB7CisJCWNydGNfcmVzcC0+bW9kZV92YWxpZCA9IDA7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRybV9tb2RlX2dldGNvbm5lY3RvciAtIGdldCBjb25uZWN0b3IgY29uZmlndXJhdGlvbgorICogQGlub2RlOiBpbm9kZSBmcm9tIHRoZSBpb2N0bAorICogQGZpbHA6IGZpbGUgKiBmcm9tIHRoZSBpb2N0bAorICogQGNtZDogY21kIGZyb20gaW9jdGwKKyAqIEBhcmc6IGFyZyBmcm9tIGlvY3RsCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlcj8gKEZJWE1FKQorICoKKyAqIENvbnN0cnVjdCBhIGNvbm5lY3RvciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byByZXR1cm4gdG8gdGhlIHVzZXIuCisgKgorICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX21vZGVfZ2V0Y29ubmVjdG9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yICpvdXRfcmVzcCA9IGRhdGE7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJaW50IG1vZGVfY291bnQgPSAwOworCWludCBwcm9wc19jb3VudCA9IDA7CisJaW50IGVuY29kZXJzX2NvdW50ID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgY29waWVkID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gdV9tb2RlOworCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBfX3VzZXIgKm1vZGVfcHRyOworCXVpbnQzMl90IF9fdXNlciAqcHJvcF9wdHI7CisJdWludDY0X3QgX191c2VyICpwcm9wX3ZhbHVlczsKKwl1aW50MzJfdCBfX3VzZXIgKmVuY29kZXJfcHRyOworCisJbWVtc2V0KCZ1X21vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKTsKKworCURSTV9ERUJVRygiY29ubmVjdG9yIGlkICVkOlxuIiwgb3V0X3Jlc3AtPmNvbm5lY3Rvcl9pZCk7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgb3V0X3Jlc3AtPmNvbm5lY3Rvcl9pZCwKKwkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOworCisJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX1BST1BFUlRZOyBpKyspIHsKKwkJaWYgKGNvbm5lY3Rvci0+cHJvcGVydHlfaWRzW2ldICE9IDApIHsKKwkJCXByb3BzX2NvdW50Kys7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7CisJCWlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldICE9IDApIHsKKwkJCWVuY29kZXJzX2NvdW50Kys7CisJCX0KKwl9CisKKwlpZiAob3V0X3Jlc3AtPmNvdW50X21vZGVzID09IDApIHsKKwkJY29ubmVjdG9yLT5mdW5jcy0+ZmlsbF9tb2Rlcyhjb25uZWN0b3IsCisJCQkJCSAgICAgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCisJCQkJCSAgICAgZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKKwl9CisKKwkvKiBkZWxheWVkIHNvIHdlIGdldCBtb2RlcyByZWdhcmRsZXNzIG9mIHByZS1maWxsX21vZGVzIHN0YXRlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKKwkJbW9kZV9jb3VudCsrOworCisJb3V0X3Jlc3AtPmNvbm5lY3Rvcl9pZCA9IGNvbm5lY3Rvci0+YmFzZS5pZDsKKwlvdXRfcmVzcC0+Y29ubmVjdG9yX3R5cGUgPSBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlOworCW91dF9yZXNwLT5jb25uZWN0b3JfdHlwZV9pZCA9IGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQ7CisJb3V0X3Jlc3AtPm1tX3dpZHRoID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW07CisJb3V0X3Jlc3AtPm1tX2hlaWdodCA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbTsKKwlvdXRfcmVzcC0+c3VicGl4ZWwgPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlcjsKKwlvdXRfcmVzcC0+Y29ubmVjdGlvbiA9IGNvbm5lY3Rvci0+c3RhdHVzOworCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCisJCW91dF9yZXNwLT5lbmNvZGVyX2lkID0gY29ubmVjdG9yLT5lbmNvZGVyLT5iYXNlLmlkOworCWVsc2UKKwkJb3V0X3Jlc3AtPmVuY29kZXJfaWQgPSAwOworCisJLyoKKwkgKiBUaGlzIGlvY3RsIGlzIGNhbGxlZCB0d2ljZSwgb25jZSB0byBkZXRlcm1pbmUgaG93IG11Y2ggc3BhY2UgaXMKKwkgKiBuZWVkZWQsIGFuZCB0aGUgMm5kIHRpbWUgdG8gZmlsbCBpdC4KKwkgKi8KKwlpZiAoKG91dF9yZXNwLT5jb3VudF9tb2RlcyA+PSBtb2RlX2NvdW50KSAmJiBtb2RlX2NvdW50KSB7CisJCWNvcGllZCA9IDA7CisJCW1vZGVfcHRyID0gKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqKSh1bnNpZ25lZCBsb25nKW91dF9yZXNwLT5tb2Rlc19wdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJCWRybV9jcnRjX2NvbnZlcnRfdG9fdW1vZGUoJnVfbW9kZSwgbW9kZSk7CisJCQlpZiAoY29weV90b191c2VyKG1vZGVfcHRyICsgY29waWVkLAorCQkJCQkgJnVfbW9kZSwgc2l6ZW9mKHVfbW9kZSkpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWNvcGllZCsrOworCQl9CisJfQorCW91dF9yZXNwLT5jb3VudF9tb2RlcyA9IG1vZGVfY291bnQ7CisKKwlpZiAoKG91dF9yZXNwLT5jb3VudF9wcm9wcyA+PSBwcm9wc19jb3VudCkgJiYgcHJvcHNfY291bnQpIHsKKwkJY29waWVkID0gMDsKKwkJcHJvcF9wdHIgPSAodWludDMyX3QgKikodW5zaWduZWQgbG9uZykob3V0X3Jlc3AtPnByb3BzX3B0cik7CisJCXByb3BfdmFsdWVzID0gKHVpbnQ2NF90ICopKHVuc2lnbmVkIGxvbmcpKG91dF9yZXNwLT5wcm9wX3ZhbHVlc19wdHIpOworCQlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFk7IGkrKykgeworCQkJaWYgKGNvbm5lY3Rvci0+cHJvcGVydHlfaWRzW2ldICE9IDApIHsKKwkJCQlpZiAocHV0X3VzZXIoY29ubmVjdG9yLT5wcm9wZXJ0eV9pZHNbaV0sCisJCQkJCSAgICAgcHJvcF9wdHIgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKworCQkJCWlmIChwdXRfdXNlcihjb25uZWN0b3ItPnByb3BlcnR5X3ZhbHVlc1tpXSwKKwkJCQkJICAgICBwcm9wX3ZhbHVlcyArIGNvcGllZCkpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCWNvcGllZCsrOworCQkJfQorCQl9CisJfQorCW91dF9yZXNwLT5jb3VudF9wcm9wcyA9IHByb3BzX2NvdW50OworCisJaWYgKChvdXRfcmVzcC0+Y291bnRfZW5jb2RlcnMgPj0gZW5jb2RlcnNfY291bnQpICYmIGVuY29kZXJzX2NvdW50KSB7CisJCWNvcGllZCA9IDA7CisJCWVuY29kZXJfcHRyID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpKG91dF9yZXNwLT5lbmNvZGVyc19wdHIpOworCQlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7CisJCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSAhPSAwKSB7CisJCQkJaWYgKHB1dF91c2VyKGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0sCisJCQkJCSAgICAgZW5jb2Rlcl9wdHIgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfQorCX0KKwlvdXRfcmVzcC0+Y291bnRfZW5jb2RlcnMgPSBlbmNvZGVyc19jb3VudDsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGRybV9tb2RlX2dldGVuY29kZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciAqZW5jX3Jlc3AgPSBkYXRhOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGVuY19yZXNwLT5lbmNvZGVyX2lkLAorCQkJCSAgIERSTV9NT0RFX09CSkVDVF9FTkNPREVSKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJZW5jb2RlciA9IG9ial90b19lbmNvZGVyKG9iaik7CisKKwlpZiAoZW5jb2Rlci0+Y3J0YykKKwkJZW5jX3Jlc3AtPmNydGNfaWQgPSBlbmNvZGVyLT5jcnRjLT5iYXNlLmlkOworCWVsc2UKKwkJZW5jX3Jlc3AtPmNydGNfaWQgPSAwOworCWVuY19yZXNwLT5lbmNvZGVyX3R5cGUgPSBlbmNvZGVyLT5lbmNvZGVyX3R5cGU7CisJZW5jX3Jlc3AtPmVuY29kZXJfaWQgPSBlbmNvZGVyLT5iYXNlLmlkOworCWVuY19yZXNwLT5wb3NzaWJsZV9jcnRjcyA9IGVuY29kZXItPnBvc3NpYmxlX2NydGNzOworCWVuY19yZXNwLT5wb3NzaWJsZV9jbG9uZXMgPSBlbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXM7CisKK291dDoKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZHJtX21vZGVfc2V0Y3J0YyAtIHNldCBDUlRDIGNvbmZpZ3VyYXRpb24KKyAqIEBpbm9kZTogaW5vZGUgZnJvbSB0aGUgaW9jdGwKKyAqIEBmaWxwOiBmaWxlICogZnJvbSB0aGUgaW9jdGwKKyAqIEBjbWQ6IGNtZCBmcm9tIGlvY3RsCisgKiBAYXJnOiBhcmcgZnJvbSBpb2N0bAorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXI/IChGSVhNRSkKKyAqCisgKiBCdWlsZCBhIG5ldyBDUlRDIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdXNlciByZXF1ZXN0LgorICoKKyAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9tb2RlX3NldGNydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX21vZGVfY3J0YyAqY3J0Y19yZXEgPSBkYXRhOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMsICpjcnRjZmI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3Jfc2V0ID0gTlVMTCwgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IE5VTEw7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgc2V0OworCXVpbnQzMl90IF9fdXNlciAqc2V0X2Nvbm5lY3RvcnNfcHRyOworCWludCByZXQgPSAwOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBjcnRjX3JlcS0+Y3J0Y19pZCwKKwkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0RFQlVHKCJVbmtub3duIENSVEMgSUQgJWRcbiIsIGNydGNfcmVxLT5jcnRjX2lkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWNydGMgPSBvYmpfdG9fY3J0YyhvYmopOworCisJaWYgKGNydGNfcmVxLT5tb2RlX3ZhbGlkKSB7CisJCS8qIElmIHdlIGhhdmUgYSBtb2RlIHdlIG5lZWQgYSBmcmFtZWJ1ZmZlci4gKi8KKwkJLyogSWYgd2UgcGFzcyAtMSwgc2V0IHRoZSBtb2RlIHdpdGggdGhlIGN1cnJlbnRseSBib3VuZCBmYiAqLworCQlpZiAoY3J0Y19yZXEtPmZiX2lkID09IC0xKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGNmYiwKKwkJCQkJICAgICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQkJCWlmIChjcnRjZmIgPT0gY3J0YykgeworCQkJCQlEUk1fREVCVUcoIlVzaW5nIGN1cnJlbnQgZmIgZm9yIHNldG1vZGVcbiIpOworCQkJCQlmYiA9IGNydGMtPmZiOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgY3J0Y19yZXEtPmZiX2lkLAorCQkJCQkJICAgRFJNX01PREVfT0JKRUNUX0ZCKTsKKwkJCWlmICghb2JqKSB7CisJCQkJRFJNX0RFQlVHKCJVbmtub3duIEZCIElEJWRcbiIsIGNydGNfcmVxLT5mYl9pZCk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWZiID0gb2JqX3RvX2ZiKG9iaik7CisJCX0KKworCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7CisJCWRybV9jcnRjX2NvbnZlcnRfdW1vZGUobW9kZSwgJmNydGNfcmVxLT5tb2RlKTsKKwkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCX0KKworCWlmIChjcnRjX3JlcS0+Y291bnRfY29ubmVjdG9ycyA9PSAwICYmIG1vZGUpIHsKKwkJRFJNX0RFQlVHKCJDb3VudCBjb25uZWN0b3JzIGlzIDAgYnV0IG1vZGUgc2V0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNydGNfcmVxLT5jb3VudF9jb25uZWN0b3JzID4gMCAmJiAhbW9kZSAmJiAhZmIpIHsKKwkJRFJNX0RFQlVHKCJDb3VudCBjb25uZWN0b3JzIGlzICVkIGJ1dCBubyBtb2RlIG9yIGZiIHNldFxuIiwKKwkJCSAgY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMgPiAwKSB7CisJCXUzMiBvdXRfaWQ7CisKKwkJLyogQXZvaWQgdW5ib3VuZGVkIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiAqLworCQlpZiAoY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnMgPiBjb25maWctPm51bV9jb25uZWN0b3IpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWNvbm5lY3Rvcl9zZXQgPSBrbWFsbG9jKGNydGNfcmVxLT5jb3VudF9jb25uZWN0b3JzICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICopLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb25uZWN0b3Jfc2V0KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY3J0Y19yZXEtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQkJc2V0X2Nvbm5lY3RvcnNfcHRyID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpY3J0Y19yZXEtPnNldF9jb25uZWN0b3JzX3B0cjsKKwkJCWlmIChnZXRfdXNlcihvdXRfaWQsICZzZXRfY29ubmVjdG9yc19wdHJbaV0pKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBvdXRfaWQsCisJCQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsKKwkJCWlmICghb2JqKSB7CisJCQkJRFJNX0RFQlVHKCJDb25uZWN0b3IgaWQgJWQgdW5rbm93blxuIiwgb3V0X2lkKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOworCisJCQljb25uZWN0b3Jfc2V0W2ldID0gY29ubmVjdG9yOworCQl9CisJfQorCisJc2V0LmNydGMgPSBjcnRjOworCXNldC54ID0gY3J0Y19yZXEtPng7CisJc2V0LnkgPSBjcnRjX3JlcS0+eTsKKwlzZXQubW9kZSA9IG1vZGU7CisJc2V0LmNvbm5lY3RvcnMgPSBjb25uZWN0b3Jfc2V0OworCXNldC5udW1fY29ubmVjdG9ycyA9IGNydGNfcmVxLT5jb3VudF9jb25uZWN0b3JzOworCXNldC5mYiA9ZmI7CisJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJnNldCk7CisKK291dDoKKwlrZnJlZShjb25uZWN0b3Jfc2V0KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcm1fbW9kZV9jdXJzb3JfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgKnJlcSA9IGRhdGE7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgcmV0ID0gMDsKKworCURSTV9ERUJVRygiXG4iKTsKKworCWlmICghcmVxLT5mbGFncykgeworCQlEUk1fRVJST1IoIm5vIG9wZXJhdGlvbiBzZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIHJlcS0+Y3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOworCWlmICghb2JqKSB7CisJCURSTV9ERUJVRygiVW5rbm93biBDUlRDIElEICVkXG4iLCByZXEtPmNydGNfaWQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisKKwlpZiAocmVxLT5mbGFncyAmIERSTV9NT0RFX0NVUlNPUl9CTykgeworCQlpZiAoIWNydGMtPmZ1bmNzLT5jdXJzb3Jfc2V0KSB7CisJCQlEUk1fRVJST1IoImNydGMgZG9lcyBub3Qgc3VwcG9ydCBjdXJzb3JcbiIpOworCQkJcmV0ID0gLUVOWElPOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyogVHVybnMgb2ZmIHRoZSBjdXJzb3IgaWYgaGFuZGxlIGlzIDAgKi8KKwkJcmV0ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9zZXQoY3J0YywgZmlsZV9wcml2LCByZXEtPmhhbmRsZSwKKwkJCQkJICAgICAgcmVxLT53aWR0aCwgcmVxLT5oZWlnaHQpOworCX0KKworCWlmIChyZXEtPmZsYWdzICYgRFJNX01PREVfQ1VSU09SX01PVkUpIHsKKwkJaWYgKGNydGMtPmZ1bmNzLT5jdXJzb3JfbW92ZSkgeworCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9tb3ZlKGNydGMsIHJlcS0+eCwgcmVxLT55KTsKKwkJfSBlbHNlIHsKKwkJCURSTV9FUlJPUigiY3J0YyBkb2VzIG5vdCBzdXBwb3J0IGN1cnNvclxuIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRybV9tb2RlX2FkZGZiIC0gYWRkIGFuIEZCIHRvIHRoZSBncmFwaGljcyBjb25maWd1cmF0aW9uCisgKiBAaW5vZGU6IGlub2RlIGZyb20gdGhlIGlvY3RsCisgKiBAZmlscDogZmlsZSAqIGZyb20gdGhlIGlvY3RsCisgKiBAY21kOiBjbWQgZnJvbSBpb2N0bAorICogQGFyZzogYXJnIGZyb20gaW9jdGwKKyAqCisgKiBMT0NLSU5HOgorICogVGFrZXMgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBBZGQgYSBuZXcgRkIgdG8gdGhlIHNwZWNpZmllZCBDUlRDLCBnaXZlbiBhIHVzZXIgcmVxdWVzdC4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIHVzZXIgdmlhIGlvY3RsLgorICoKKyAqIFJFVFVSTlM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fbW9kZV9hZGRmYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICpyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICgoY29uZmlnLT5taW5fd2lkdGggPiByLT53aWR0aCkgfHwgKHItPndpZHRoID4gY29uZmlnLT5tYXhfd2lkdGgpKSB7CisJCURSTV9FUlJPUigibW9kZSBuZXcgZnJhbWVidWZmZXIgd2lkdGggbm90IHdpdGhpbiBsaW1pdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChjb25maWctPm1pbl9oZWlnaHQgPiByLT5oZWlnaHQpIHx8IChyLT5oZWlnaHQgPiBjb25maWctPm1heF9oZWlnaHQpKSB7CisJCURSTV9FUlJPUigibW9kZSBuZXcgZnJhbWVidWZmZXIgaGVpZ2h0IG5vdCB3aXRoaW4gbGltaXRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwkvKiBUT0RPIGNoZWNrIGJ1ZmZlciBpcyBzdWZmaWNlbnRseSBsYXJnZSAqLworCS8qIFRPRE8gc2V0dXAgZGVzdHJ1Y3RvciBjYWxsYmFjayAqLworCisJZmIgPSBkZXYtPm1vZGVfY29uZmlnLmZ1bmNzLT5mYl9jcmVhdGUoZGV2LCBmaWxlX3ByaXYsIHIpOworCWlmICghZmIpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgY3JlYXRlIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJci0+ZmJfaWQgPSBmYi0+YmFzZS5pZDsKKwlsaXN0X2FkZCgmZmItPmZpbHBfaGVhZCwgJmZpbGVfcHJpdi0+ZmJzKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcm1fbW9kZV9ybWZiIC0gcmVtb3ZlIGFuIEZCIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAqIEBpbm9kZTogaW5vZGUgZnJvbSB0aGUgaW9jdGwKKyAqIEBmaWxwOiBmaWxlICogZnJvbSB0aGUgaW9jdGwKKyAqIEBjbWQ6IGNtZCBmcm9tIGlvY3RsCisgKiBAYXJnOiBhcmcgZnJvbSBpb2N0bAorICoKKyAqIExPQ0tJTkc6CisgKiBUYWtlcyBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqIFJlbW92ZSB0aGUgRkIgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICoKKyAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9tb2RlX3JtZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYmwgPSBOVUxMOworCXVpbnQzMl90ICppZCA9IGRhdGE7CisJaW50IHJldCA9IDA7CisJaW50IGZvdW5kID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgKmlkLCBEUk1fTU9ERV9PQkpFQ1RfRkIpOworCS8qIFRPRE8gY2hlY2sgdGhhdCB3ZSByZWFseSBnZXQgYSBmcmFtZWJ1ZmZlciBiYWNrLiAqLworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigibW9kZSBpbnZhbGlkIGZyYW1lYnVmZmVyIGlkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWZiID0gb2JqX3RvX2ZiKG9iaik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZibCwgJmZpbGVfcHJpdi0+ZmJzLCBmaWxwX2hlYWQpCisJCWlmIChmYiA9PSBmYmwpCisJCQlmb3VuZCA9IDE7CisKKwlpZiAoIWZvdW5kKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gcmVtb3ZlIGEgZmIgdGhhdCB3ZSBkaWRuJ3Qgb3duXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVE9ETyByZWxlYXNlIGFsbCBjcnRjIGNvbm5lY3RlZCB0byB0aGUgZnJhbWVidWZmZXIgKi8KKwkvKiBUT0RPIHVuaG9jayB0aGUgZGVzdHJ1Y3RvciBmcm9tIHRoZSBidWZmZXIgb2JqZWN0ICovCisKKwlsaXN0X2RlbCgmZmItPmZpbHBfaGVhZCk7CisJZmItPmZ1bmNzLT5kZXN0cm95KGZiKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcm1fbW9kZV9nZXRmYiAtIGdldCBGQiBpbmZvCisgKiBAaW5vZGU6IGlub2RlIGZyb20gdGhlIGlvY3RsCisgKiBAZmlscDogZmlsZSAqIGZyb20gdGhlIGlvY3RsCisgKiBAY21kOiBjbWQgZnJvbSBpb2N0bAorICogQGFyZzogYXJnIGZyb20gaW9jdGwKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyPyAoRklYTUUpCisgKgorICogTG9va3VwIHRoZSBGQiBnaXZlbiBpdHMgSUQgYW5kIHJldHVybiBpbmZvIGFib3V0IGl0LgorICoKKyAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9tb2RlX2dldGZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKnIgPSBkYXRhOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgci0+ZmJfaWQsIERSTV9NT0RFX09CSkVDVF9GQik7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIGZyYW1lYnVmZmVyIGlkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWZiID0gb2JqX3RvX2ZiKG9iaik7CisKKwlyLT5oZWlnaHQgPSBmYi0+aGVpZ2h0OworCXItPndpZHRoID0gZmItPndpZHRoOworCXItPmRlcHRoID0gZmItPmRlcHRoOworCXItPmJwcCA9IGZiLT5iaXRzX3Blcl9waXhlbDsKKwlyLT5waXRjaCA9IGZiLT5waXRjaDsKKwlmYi0+ZnVuY3MtPmNyZWF0ZV9oYW5kbGUoZmIsIGZpbGVfcHJpdiwgJnItPmhhbmRsZSk7CisKK291dDoKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZHJtX2ZiX3JlbGVhc2UgLSByZW1vdmUgYW5kIGZyZWUgdGhlIEZCcyBvbiB0aGlzIGZpbGUKKyAqIEBmaWxwOiBmaWxlICogZnJvbSB0aGUgaW9jdGwKKyAqCisgKiBMT0NLSU5HOgorICogVGFrZXMgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBEZXN0cm95IGFsbCB0aGUgRkJzIGFzc29jaWF0ZWQgd2l0aCBAZmlscC4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIHVzZXIgdmlhIGlvY3RsLgorICoKKyAqIFJFVFVSTlM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3ZvaWQgZHJtX2ZiX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCAqdGZiOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZiLCB0ZmIsICZwcml2LT5mYnMsIGZpbHBfaGVhZCkgeworCQlsaXN0X2RlbCgmZmItPmZpbHBfaGVhZCk7CisJCWZiLT5mdW5jcy0+ZGVzdHJveShmYik7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cit9CisKKy8qKgorICogZHJtX21vZGVfYXR0YWNobW9kZSAtIGFkZCBhIG1vZGUgdG8gdGhlIHVzZXIgbW9kZSBsaXN0CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gYWRkIHRoZSBtb2RlIHRvCisgKiBAbW9kZTogbW9kZSB0byBhZGQKKyAqCisgKiBBZGQgQG1vZGUgdG8gQGNvbm5lY3RvcidzIHVzZXIgbW9kZSBsaXN0LgorICovCitzdGF0aWMgaW50IGRybV9tb2RlX2F0dGFjaG1vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZXQgPSAwOworCisJbGlzdF9hZGRfdGFpbCgmbW9kZS0+aGVhZCwgJmNvbm5lY3Rvci0+dXNlcl9tb2Rlcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGRybV9tb2RlX2F0dGFjaG1vZGVfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmR1cF9tb2RlOworCWludCBuZWVkX2R1cCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmICghY29ubmVjdG9yLT5lbmNvZGVyKQorCQkJYnJlYWs7CisJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJaWYgKG5lZWRfZHVwKQorCQkJCWR1cF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7CisJCQllbHNlCisJCQkJZHVwX21vZGUgPSBtb2RlOworCQkJcmV0ID0gZHJtX21vZGVfYXR0YWNobW9kZShkZXYsIGNvbm5lY3RvciwgZHVwX21vZGUpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJbmVlZF9kdXAgPSAxOworCQl9CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9hdHRhY2htb2RlX2NydGMpOworCitzdGF0aWMgaW50IGRybV9tb2RlX2RldGFjaG1vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCBmb3VuZCA9IDA7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1hdGNoX21vZGUsICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hdGNoX21vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpIHsKKwkJaWYgKGRybV9tb2RlX2VxdWFsKG1hdGNoX21vZGUsIG1vZGUpKSB7CisJCQlsaXN0X2RlbCgmbWF0Y2hfbW9kZS0+aGVhZCk7CisJCQlkcm1fbW9kZV9kZXN0cm95KGRldiwgbWF0Y2hfbW9kZSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpCisJCXJldCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZHJtX21vZGVfZGV0YWNobW9kZV9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJZHJtX21vZGVfZGV0YWNobW9kZShkZXYsIGNvbm5lY3RvciwgbW9kZSk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9kZXRhY2htb2RlX2NydGMpOworCisvKioKKyAqIGRybV9mYl9hdHRhY2htb2RlIC0gQXR0YWNoIGEgdXNlciBtb2RlIHRvIGFuIGNvbm5lY3RvcgorICogQGlub2RlOiBpbm9kZSBmcm9tIHRoZSBpb2N0bAorICogQGZpbHA6IGZpbGUgKiBmcm9tIHRoZSBpb2N0bAorICogQGNtZDogY21kIGZyb20gaW9jdGwKKyAqIEBhcmc6IGFyZyBmcm9tIGlvY3RsCisgKgorICogVGhpcyBhdHRhY2hlcyBhIHVzZXIgc3BlY2lmaWVkIG1vZGUgdG8gYW4gY29ubmVjdG9yLgorICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX21vZGVfYXR0YWNobW9kZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2RlX21vZGVfY21kICptb2RlX2NtZCA9IGRhdGE7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICp1bW9kZSA9ICZtb2RlX2NtZC0+bW9kZTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBtb2RlX2NtZC0+Y29ubmVjdG9yX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY29ubmVjdG9yID0gb2JqX3RvX2Nvbm5lY3RvcihvYmopOworCisJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOworCWlmICghbW9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlkcm1fY3J0Y19jb252ZXJ0X3Vtb2RlKG1vZGUsIHVtb2RlKTsKKworCXJldCA9IGRybV9tb2RlX2F0dGFjaG1vZGUoZGV2LCBjb25uZWN0b3IsIG1vZGUpOworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIGRybV9mYl9kZXRhY2htb2RlIC0gRGV0YWNoIGEgdXNlciBzcGVjaWZpZWQgbW9kZSBmcm9tIGFuIGNvbm5lY3RvcgorICogQGlub2RlOiBpbm9kZSBmcm9tIHRoZSBpb2N0bAorICogQGZpbHA6IGZpbGUgKiBmcm9tIHRoZSBpb2N0bAorICogQGNtZDogY21kIGZyb20gaW9jdGwKKyAqIEBhcmc6IGFyZyBmcm9tIGlvY3RsCisgKgorICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVybyBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX21vZGVfZGV0YWNobW9kZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCAqbW9kZV9jbWQgPSBkYXRhOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKnVtb2RlID0gJm1vZGVfY21kLT5tb2RlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIG1vZGVfY21kLT5jb25uZWN0b3JfaWQsIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOworCWlmICghb2JqKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwljb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7CisKKwlkcm1fY3J0Y19jb252ZXJ0X3Vtb2RlKCZtb2RlLCB1bW9kZSk7CisJcmV0ID0gZHJtX21vZGVfZGV0YWNobW9kZShkZXYsIGNvbm5lY3RvciwgJm1vZGUpOworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGRybV9wcm9wZXJ0eSAqZHJtX3Byb3BlcnR5X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtX3ZhbHVlcykKK3sKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSA9IE5VTEw7CisKKwlwcm9wZXJ0eSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByb3BlcnR5KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChudW1fdmFsdWVzKSB7CisJCXByb3BlcnR5LT52YWx1ZXMgPSBremFsbG9jKHNpemVvZih1aW50NjRfdCkqbnVtX3ZhbHVlcywgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJvcGVydHktPnZhbHVlcykKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlkcm1fbW9kZV9vYmplY3RfZ2V0KGRldiwgJnByb3BlcnR5LT5iYXNlLCBEUk1fTU9ERV9PQkpFQ1RfUFJPUEVSVFkpOworCXByb3BlcnR5LT5mbGFncyA9IGZsYWdzOworCXByb3BlcnR5LT5udW1fdmFsdWVzID0gbnVtX3ZhbHVlczsKKwlJTklUX0xJU1RfSEVBRCgmcHJvcGVydHktPmVudW1fYmxvYl9saXN0KTsKKworCWlmIChuYW1lKQorCQlzdHJuY3B5KHByb3BlcnR5LT5uYW1lLCBuYW1lLCBEUk1fUFJPUF9OQU1FX0xFTik7CisKKwlsaXN0X2FkZF90YWlsKCZwcm9wZXJ0eS0+aGVhZCwgJmRldi0+bW9kZV9jb25maWcucHJvcGVydHlfbGlzdCk7CisJcmV0dXJuIHByb3BlcnR5OworZmFpbDoKKwlrZnJlZShwcm9wZXJ0eSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9wcm9wZXJ0eV9jcmVhdGUpOworCitpbnQgZHJtX3Byb3BlcnR5X2FkZF9lbnVtKHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCBpbnQgaW5kZXgsCisJCQkgIHVpbnQ2NF90IHZhbHVlLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkcm1fcHJvcGVydHlfZW51bSAqcHJvcF9lbnVtOworCisJaWYgKCEocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnByb3BlcnR5LT5lbnVtX2Jsb2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwcm9wX2VudW0sICZwcm9wZXJ0eS0+ZW51bV9ibG9iX2xpc3QsIGhlYWQpIHsKKwkJCWlmIChwcm9wX2VudW0tPnZhbHVlID09IHZhbHVlKSB7CisJCQkJc3RybmNweShwcm9wX2VudW0tPm5hbWUsIG5hbWUsIERSTV9QUk9QX05BTUVfTEVOKTsKKwkJCQlwcm9wX2VudW0tPm5hbWVbRFJNX1BST1BfTkFNRV9MRU4tMV0gPSAnXDAnOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcHJvcF9lbnVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9wcm9wZXJ0eV9lbnVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcm9wX2VudW0pCisJCXJldHVybiAtRU5PTUVNOworCisJc3RybmNweShwcm9wX2VudW0tPm5hbWUsIG5hbWUsIERSTV9QUk9QX05BTUVfTEVOKTsKKwlwcm9wX2VudW0tPm5hbWVbRFJNX1BST1BfTkFNRV9MRU4tMV0gPSAnXDAnOworCXByb3BfZW51bS0+dmFsdWUgPSB2YWx1ZTsKKworCXByb3BlcnR5LT52YWx1ZXNbaW5kZXhdID0gdmFsdWU7CisJbGlzdF9hZGRfdGFpbCgmcHJvcF9lbnVtLT5oZWFkLCAmcHJvcGVydHktPmVudW1fYmxvYl9saXN0KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3Byb3BlcnR5X2FkZF9lbnVtKTsKKwordm9pZCBkcm1fcHJvcGVydHlfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSkKK3sKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2VudW0gKnByb3BfZW51bSwgKnB0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByb3BfZW51bSwgcHQsICZwcm9wZXJ0eS0+ZW51bV9ibG9iX2xpc3QsIGhlYWQpIHsKKwkJbGlzdF9kZWwoJnByb3BfZW51bS0+aGVhZCk7CisJCWtmcmVlKHByb3BfZW51bSk7CisJfQorCisJaWYgKHByb3BlcnR5LT5udW1fdmFsdWVzKQorCQlrZnJlZShwcm9wZXJ0eS0+dmFsdWVzKTsKKwlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJnByb3BlcnR5LT5iYXNlKTsKKwlsaXN0X2RlbCgmcHJvcGVydHktPmhlYWQpOworCWtmcmVlKHByb3BlcnR5KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3Byb3BlcnR5X2Rlc3Ryb3kpOworCitpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgaW5pdF92YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFk7IGkrKykgeworCQlpZiAoY29ubmVjdG9yLT5wcm9wZXJ0eV9pZHNbaV0gPT0gMCkgeworCQkJY29ubmVjdG9yLT5wcm9wZXJ0eV9pZHNbaV0gPSBwcm9wZXJ0eS0+YmFzZS5pZDsKKwkJCWNvbm5lY3Rvci0+cHJvcGVydHlfdmFsdWVzW2ldID0gaW5pdF92YWw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IERSTV9DT05ORUNUT1JfTUFYX1BST1BFUlRZKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkpOworCitpbnQgZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCB2YWx1ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9QUk9QRVJUWTsgaSsrKSB7CisJCWlmIChjb25uZWN0b3ItPnByb3BlcnR5X2lkc1tpXSA9PSBwcm9wZXJ0eS0+YmFzZS5pZCkgeworCQkJY29ubmVjdG9yLT5wcm9wZXJ0eV92YWx1ZXNbaV0gPSB2YWx1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92YWx1ZSk7CisKK2ludCBkcm1fY29ubmVjdG9yX3Byb3BlcnR5X2dldF92YWx1ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFk7IGkrKykgeworCQlpZiAoY29ubmVjdG9yLT5wcm9wZXJ0eV9pZHNbaV0gPT0gcHJvcGVydHktPmJhc2UuaWQpIHsKKwkJCSp2YWwgPSBjb25uZWN0b3ItPnByb3BlcnR5X3ZhbHVlc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX3Byb3BlcnR5X2dldF92YWx1ZSk7CisKK2ludCBkcm1fbW9kZV9nZXRwcm9wZXJ0eV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5ICpvdXRfcmVzcCA9IGRhdGE7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHk7CisJaW50IGVudW1fY291bnQgPSAwOworCWludCBibG9iX2NvdW50ID0gMDsKKwlpbnQgdmFsdWVfY291bnQgPSAwOworCWludCByZXQgPSAwLCBpOworCWludCBjb3BpZWQ7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9lbnVtICpwcm9wX2VudW07CisJc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gX191c2VyICplbnVtX3B0cjsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKnByb3BfYmxvYjsKKwl1aW50MzJfdCAqYmxvYl9pZF9wdHI7CisJdWludDY0X3QgX191c2VyICp2YWx1ZXNfcHRyOworCXVpbnQzMl90IF9fdXNlciAqYmxvYl9sZW5ndGhfcHRyOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBvdXRfcmVzcC0+cHJvcF9pZCwgRFJNX01PREVfT0JKRUNUX1BST1BFUlRZKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCXByb3BlcnR5ID0gb2JqX3RvX3Byb3BlcnR5KG9iaik7CisKKwlpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9lbnVtLCAmcHJvcGVydHktPmVudW1fYmxvYl9saXN0LCBoZWFkKQorCQkJZW51bV9jb3VudCsrOworCX0gZWxzZSBpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9CTE9CKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9ibG9iLCAmcHJvcGVydHktPmVudW1fYmxvYl9saXN0LCBoZWFkKQorCQkJYmxvYl9jb3VudCsrOworCX0KKworCXZhbHVlX2NvdW50ID0gcHJvcGVydHktPm51bV92YWx1ZXM7CisKKwlzdHJuY3B5KG91dF9yZXNwLT5uYW1lLCBwcm9wZXJ0eS0+bmFtZSwgRFJNX1BST1BfTkFNRV9MRU4pOworCW91dF9yZXNwLT5uYW1lW0RSTV9QUk9QX05BTUVfTEVOLTFdID0gMDsKKwlvdXRfcmVzcC0+ZmxhZ3MgPSBwcm9wZXJ0eS0+ZmxhZ3M7CisKKwlpZiAoKG91dF9yZXNwLT5jb3VudF92YWx1ZXMgPj0gdmFsdWVfY291bnQpICYmIHZhbHVlX2NvdW50KSB7CisJCXZhbHVlc19wdHIgPSAodWludDY0X3QgKikodW5zaWduZWQgbG9uZylvdXRfcmVzcC0+dmFsdWVzX3B0cjsKKwkJZm9yIChpID0gMDsgaSA8IHZhbHVlX2NvdW50OyBpKyspIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzX3B0ciArIGksICZwcm9wZXJ0eS0+dmFsdWVzW2ldLCBzaXplb2YodWludDY0X3QpKSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJfQorCW91dF9yZXNwLT5jb3VudF92YWx1ZXMgPSB2YWx1ZV9jb3VudDsKKworCWlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0VOVU0pIHsKKwkJaWYgKChvdXRfcmVzcC0+Y291bnRfZW51bV9ibG9icyA+PSBlbnVtX2NvdW50KSAmJiBlbnVtX2NvdW50KSB7CisJCQljb3BpZWQgPSAwOworCQkJZW51bV9wdHIgPSAoc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gKikodW5zaWduZWQgbG9uZylvdXRfcmVzcC0+ZW51bV9ibG9iX3B0cjsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9lbnVtLCAmcHJvcGVydHktPmVudW1fYmxvYl9saXN0LCBoZWFkKSB7CisKKwkJCQlpZiAoY29weV90b191c2VyKCZlbnVtX3B0cltjb3BpZWRdLnZhbHVlLCAmcHJvcF9lbnVtLT52YWx1ZSwgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWlmIChjb3B5X3RvX3VzZXIoJmVudW1fcHRyW2NvcGllZF0ubmFtZSwKKwkJCQkJCSAmcHJvcF9lbnVtLT5uYW1lLCBEUk1fUFJPUF9OQU1FX0xFTikpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQljb3BpZWQrKzsKKwkJCX0KKwkJfQorCQlvdXRfcmVzcC0+Y291bnRfZW51bV9ibG9icyA9IGVudW1fY291bnQ7CisJfQorCisJaWYgKHByb3BlcnR5LT5mbGFncyAmIERSTV9NT0RFX1BST1BfQkxPQikgeworCQlpZiAoKG91dF9yZXNwLT5jb3VudF9lbnVtX2Jsb2JzID49IGJsb2JfY291bnQpICYmIGJsb2JfY291bnQpIHsKKwkJCWNvcGllZCA9IDA7CisJCQlibG9iX2lkX3B0ciA9ICh1aW50MzJfdCAqKSh1bnNpZ25lZCBsb25nKW91dF9yZXNwLT5lbnVtX2Jsb2JfcHRyOworCQkJYmxvYl9sZW5ndGhfcHRyID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpb3V0X3Jlc3AtPnZhbHVlc19wdHI7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9ibG9iLCAmcHJvcGVydHktPmVudW1fYmxvYl9saXN0LCBoZWFkKSB7CisJCQkJaWYgKHB1dF91c2VyKHByb3BfYmxvYi0+YmFzZS5pZCwgYmxvYl9pZF9wdHIgKyBjb3BpZWQpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlpZiAocHV0X3VzZXIocHJvcF9ibG9iLT5sZW5ndGgsIGJsb2JfbGVuZ3RoX3B0ciArIGNvcGllZCkpIHsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWNvcGllZCsrOworCQkJfQorCQl9CisJCW91dF9yZXNwLT5jb3VudF9lbnVtX2Jsb2JzID0gYmxvYl9jb3VudDsKKwl9Citkb25lOgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBsZW5ndGgsCisJCQkJCQkJICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKKworCWlmICghbGVuZ3RoIHx8ICFkYXRhKQorCQlyZXR1cm4gTlVMTDsKKworCWJsb2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IpK2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9iKQorCQlyZXR1cm4gTlVMTDsKKworCWJsb2ItPmRhdGEgPSAodm9pZCAqKSgoY2hhciAqKWJsb2IgKyBzaXplb2Yoc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iKSk7CisJYmxvYi0+bGVuZ3RoID0gbGVuZ3RoOworCisJbWVtY3B5KGJsb2ItPmRhdGEsIGRhdGEsIGxlbmd0aCk7CisKKwlkcm1fbW9kZV9vYmplY3RfZ2V0KGRldiwgJmJsb2ItPmJhc2UsIERSTV9NT0RFX09CSkVDVF9CTE9CKTsKKworCWxpc3RfYWRkX3RhaWwoJmJsb2ItPmhlYWQsICZkZXYtPm1vZGVfY29uZmlnLnByb3BlcnR5X2Jsb2JfbGlzdCk7CisJcmV0dXJuIGJsb2I7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9wcm9wZXJ0eV9kZXN0cm95X2Jsb2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IpCit7CisJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZibG9iLT5iYXNlKTsKKwlsaXN0X2RlbCgmYmxvYi0+aGVhZCk7CisJa2ZyZWUoYmxvYik7Cit9CisKK2ludCBkcm1fbW9kZV9nZXRibG9iX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9tb2RlX2dldF9ibG9iICpvdXRfcmVzcCA9IGRhdGE7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iOworCWludCByZXQgPSAwOworCXZvaWQgKmJsb2JfcHRyOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBvdXRfcmVzcC0+YmxvYl9pZCwgRFJNX01PREVfT0JKRUNUX0JMT0IpOworCWlmICghb2JqKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisJYmxvYiA9IG9ial90b19ibG9iKG9iaik7CisKKwlpZiAob3V0X3Jlc3AtPmxlbmd0aCA9PSBibG9iLT5sZW5ndGgpIHsKKwkJYmxvYl9wdHIgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKW91dF9yZXNwLT5kYXRhOworCQlpZiAoY29weV90b191c2VyKGJsb2JfcHRyLCBibG9iLT5kYXRhLCBibG9iLT5sZW5ndGgpKXsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJb3V0X3Jlc3AtPmxlbmd0aCA9IGJsb2ItPmxlbmd0aDsKKworZG9uZToKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgIHN0cnVjdCBlZGlkICplZGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpCisJCWRybV9wcm9wZXJ0eV9kZXN0cm95X2Jsb2IoZGV2LCBjb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpOworCisJLyogRGVsZXRlIGVkaWQsIHdoZW4gdGhlcmUgaXMgbm9uZS4gKi8KKwlpZiAoIWVkaWQpIHsKKwkJY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyID0gTlVMTDsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLmVkaWRfcHJvcGVydHksIDApOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0ciA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihjb25uZWN0b3ItPmRldiwgMTI4LCBlZGlkKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfcHJvcGVydHlfc2V0X3ZhbHVlKGNvbm5lY3RvciwKKwkJCQkJICAgICAgIGRldi0+bW9kZV9jb25maWcuZWRpZF9wcm9wZXJ0eSwKKwkJCQkJICAgICAgIGNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0ci0+YmFzZS5pZCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkpOworCitpbnQgZHJtX21vZGVfY29ubmVjdG9yX3Byb3BlcnR5X3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSAqb3V0X3Jlc3AgPSBkYXRhOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIG91dF9yZXNwLT5jb25uZWN0b3JfaWQsIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOworCWlmICghb2JqKSB7CisJCWdvdG8gb3V0OworCX0KKwljb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFk7IGkrKykgeworCQlpZiAoY29ubmVjdG9yLT5wcm9wZXJ0eV9pZHNbaV0gPT0gb3V0X3Jlc3AtPnByb3BfaWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBEUk1fQ09OTkVDVE9SX01BWF9QUk9QRVJUWSkgeworCQlnb3RvIG91dDsKKwl9CisKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIG91dF9yZXNwLT5wcm9wX2lkLCBEUk1fTU9ERV9PQkpFQ1RfUFJPUEVSVFkpOworCWlmICghb2JqKSB7CisJCWdvdG8gb3V0OworCX0KKwlwcm9wZXJ0eSA9IG9ial90b19wcm9wZXJ0eShvYmopOworCisJaWYgKHByb3BlcnR5LT5mbGFncyAmIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFKQorCQlnb3RvIG91dDsKKworCWlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX1JBTkdFKSB7CisJCWlmIChvdXRfcmVzcC0+dmFsdWUgPCBwcm9wZXJ0eS0+dmFsdWVzWzBdKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKG91dF9yZXNwLT52YWx1ZSA+IHByb3BlcnR5LT52YWx1ZXNbMV0pCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlpbnQgZm91bmQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHktPm51bV92YWx1ZXM7IGkrKykgeworCQkJaWYgKHByb3BlcnR5LT52YWx1ZXNbaV0gPT0gb3V0X3Jlc3AtPnZhbHVlKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghZm91bmQpIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPnNldF9wcm9wZXJ0eSkKKwkJcmV0ID0gY29ubmVjdG9yLT5mdW5jcy0+c2V0X3Byb3BlcnR5KGNvbm5lY3RvciwgcHJvcGVydHksIG91dF9yZXNwLT52YWx1ZSk7CisKKwkvKiBzdG9yZSB0aGUgcHJvcGVydHkgdmFsdWUgaWYgc3VjY2VzZnVsICovCisJaWYgKCFyZXQpCisJCWRybV9jb25uZWN0b3JfcHJvcGVydHlfc2V0X3ZhbHVlKGNvbm5lY3RvciwgcHJvcGVydHksIG91dF9yZXNwLT52YWx1ZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgeworCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSA9PSAwKSB7CisJCQljb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID0gZW5jb2Rlci0+YmFzZS5pZDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIpOworCit2b2lkIGRybV9tb2RlX2Nvbm5lY3Rvcl9kZXRhY2hfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgeworCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSA9PSBlbmNvZGVyLT5iYXNlLmlkKSB7CisJCQljb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID0gMDsKKwkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIgPT0gZW5jb2RlcikKKwkJCQljb25uZWN0b3ItPmVuY29kZXIgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2Nvbm5lY3Rvcl9kZXRhY2hfZW5jb2Rlcik7CisKK2Jvb2wgZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBpbnQgZ2FtbWFfc2l6ZSkKK3sKKwljcnRjLT5nYW1tYV9zaXplID0gZ2FtbWFfc2l6ZTsKKworCWNydGMtPmdhbW1hX3N0b3JlID0ga3phbGxvYyhnYW1tYV9zaXplICogc2l6ZW9mKHVpbnQxNl90KSAqIDMsIEdGUF9LRVJORUwpOworCWlmICghY3J0Yy0+Z2FtbWFfc3RvcmUpIHsKKwkJY3J0Yy0+Z2FtbWFfc2l6ZSA9IDA7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZSk7CisKK2ludCBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2RlX2NydGNfbHV0ICpjcnRjX2x1dCA9IGRhdGE7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwl2b2lkICpyX2Jhc2UsICpnX2Jhc2UsICpiX2Jhc2U7CisJaW50IHNpemU7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGNydGNfbHV0LT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CisJaWYgKCFvYmopIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWNydGMgPSBvYmpfdG9fY3J0YyhvYmopOworCisJLyogbWVtY3B5IGludG8gZ2FtbWEgc3RvcmUgKi8KKwlpZiAoY3J0Y19sdXQtPmdhbW1hX3NpemUgIT0gY3J0Yy0+Z2FtbWFfc2l6ZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzaXplID0gY3J0Y19sdXQtPmdhbW1hX3NpemUgKiAoc2l6ZW9mKHVpbnQxNl90KSk7CisJcl9iYXNlID0gY3J0Yy0+Z2FtbWFfc3RvcmU7CisJaWYgKGNvcHlfZnJvbV91c2VyKHJfYmFzZSwgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPnJlZCwgc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJZ19iYXNlID0gcl9iYXNlICsgc2l6ZTsKKwlpZiAoY29weV9mcm9tX3VzZXIoZ19iYXNlLCAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljcnRjX2x1dC0+Z3JlZW4sIHNpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWJfYmFzZSA9IGdfYmFzZSArIHNpemU7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJfYmFzZSwgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPmJsdWUsIHNpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWNydGMtPmZ1bmNzLT5nYW1tYV9zZXQoY3J0Yywgcl9iYXNlLCBnX2Jhc2UsIGJfYmFzZSwgY3J0Yy0+Z2FtbWFfc2l6ZSk7CisKK291dDoKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByZXQ7CisKK30KKworaW50IGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgKmNydGNfbHV0ID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXZvaWQgKnJfYmFzZSwgKmdfYmFzZSwgKmJfYmFzZTsKKwlpbnQgc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgY3J0Y19sdXQtPmNydGNfaWQsIERSTV9NT0RFX09CSkVDVF9DUlRDKTsKKwlpZiAoIW9iaikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisKKwkvKiBtZW1jcHkgaW50byBnYW1tYSBzdG9yZSAqLworCWlmIChjcnRjX2x1dC0+Z2FtbWFfc2l6ZSAhPSBjcnRjLT5nYW1tYV9zaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXNpemUgPSBjcnRjX2x1dC0+Z2FtbWFfc2l6ZSAqIChzaXplb2YodWludDE2X3QpKTsKKwlyX2Jhc2UgPSBjcnRjLT5nYW1tYV9zdG9yZTsKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNydGNfbHV0LT5yZWQsIHJfYmFzZSwgc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJZ19iYXNlID0gcl9iYXNlICsgc2l6ZTsKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNydGNfbHV0LT5ncmVlbiwgZ19iYXNlLCBzaXplKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwliX2Jhc2UgPSBnX2Jhc2UgKyBzaXplOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPmJsdWUsIGJfYmFzZSwgc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE5ODJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0wLDAgKzEsODI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqCisgKiBEUk0gY29yZSBDUlRDIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICogdGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgICBLZWl0aCBQYWNrYXJkCisgKglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICogICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqICAgICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKworLyoKKyAqIERldGFpbGVkIG1vZGUgaW5mbyBmb3IgODAweDYwMEA2MEh6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBzdGRfbW9kZVtdID0geworCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RFRkFVTFQsIDQwMDAwLCA4MDAsIDg0MCwKKwkJICAgOTY4LCAxMDU2LCAwLCA2MDAsIDYwMSwgNjA1LCA2MjgsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCit9OworCisvKioKKyAqIGRybV9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzIC0gZ2V0IGNvbXBsZXRlIHNldCBvZiBkaXNwbGF5IG1vZGVzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAbWF4WDogbWF4IHdpZHRoIGZvciBtb2RlcworICogQG1heFk6IG1heCBoZWlnaHQgZm9yIG1vZGVzCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBCYXNlZCBvbiBAZGV2J3MgbW9kZV9jb25maWcgbGF5b3V0LCBzY2FuIGFsbCB0aGUgY29ubmVjdG9ycyBhbmQgdHJ5IHRvIGRldGVjdAorICogbW9kZXMgb24gdGhlbS4gIE1vZGVzIHdpbGwgZmlyc3QgYmUgYWRkZWQgdG8gdGhlIGNvbm5lY3RvcidzIHByb2JlZF9tb2RlcworICogbGlzdCwgdGhlbiBjdWxsZWQgKGJhc2VkIG9uIHZhbGlkaXR5IGFuZCB0aGUgQG1heFgsIEBtYXhZIHBhcmFtZXRlcnMpIGFuZAorICogcHV0IGludG8gdGhlIG5vcm1hbCBtb2RlcyBsaXN0LgorICoKKyAqIEludGVuZGVkIHRvIGJlIHVzZWQgZWl0aGVyIGF0IGJvb3R1cCB0aW1lIG9yIHdoZW4gbWFqb3IgY29uZmlndXJhdGlvbgorICogY2hhbmdlcyBoYXZlIG9jY3VycmVkLgorICoKKyAqIEZJWE1FOiB0YWtlIGludG8gYWNjb3VudCBtb25pdG9yIGxpbWl0cworICovCit2b2lkIGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICAgIHVpbnQzMl90IG1heFgsIHVpbnQzMl90IG1heFkpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLCAqdDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmNvbm5lY3Rvcl9mdW5jcyA9CisJCWNvbm5lY3Rvci0+aGVscGVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCURSTV9ERUJVRygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJLyogc2V0IGFsbCBtb2RlcyB0byB0aGUgdW52ZXJpZmllZCBzdGF0ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKKwkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOworCisJY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKworCWlmIChjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCkgeworCQlEUk1fREVCVUcoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKKwkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJLyogVE9ETyBzZXQgRURJRCB0byBOVUxMICovCisJCXJldHVybjsKKwl9CisKKwlyZXQgPSAoKmNvbm5lY3Rvcl9mdW5jcy0+Z2V0X21vZGVzKShjb25uZWN0b3IpOworCisJaWYgKHJldCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfbGlzdF91cGRhdGUoY29ubmVjdG9yKTsKKwl9CisKKwlpZiAobWF4WCAmJiBtYXhZKQorCQlkcm1fbW9kZV92YWxpZGF0ZV9zaXplKGRldiwgJmNvbm5lY3Rvci0+bW9kZXMsIG1heFgsCisJCQkJICAgICAgIG1heFksIDApOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCQlpZiAobW9kZS0+c3RhdHVzID09IE1PREVfT0spCisJCQltb2RlLT5zdGF0dXMgPSBjb25uZWN0b3JfZnVuY3MtPm1vZGVfdmFsaWQoY29ubmVjdG9yLAorCQkJCQkJCQkgICBtb2RlKTsKKwl9CisKKworCWRybV9tb2RlX3BydW5lX2ludmFsaWQoZGV2LCAmY29ubmVjdG9yLT5tb2RlcywgdHJ1ZSk7CisKKwlpZiAobGlzdF9lbXB0eSgmY29ubmVjdG9yLT5tb2RlcykpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnN0ZG1vZGU7CisKKwkJRFJNX0RFQlVHKCJObyB2YWxpZCBtb2RlcyBvbiAlc1xuIiwKKwkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKworCQkvKiBTaG91bGQgd2UgZG8gdGhpcyBoZXJlID8/PworCQkgKiBXaGVuIG5vIHZhbGlkIEVESUQgbW9kZXMgYXJlIGF2YWlsYWJsZSB3ZSBlbmQgdXAKKwkJICogaGVyZSBhbmQgYmFpbGVkIGluIHRoZSBwYXN0LCBub3cgd2UgYWRkIGEgc3RhbmRhcmQKKwkJICogNjQweDQ4MEA2MEh6IG1vZGUgYW5kIGNhcnJ5IG9uLgorCQkgKi8KKwkJc3RkbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZzdGRfbW9kZVswXSk7CisJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBzdGRtb2RlKTsKKwkJZHJtX21vZGVfbGlzdF9jb25jYXQoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLAorCQkJCSAgICAgJmNvbm5lY3Rvci0+bW9kZXMpOworCisJCURSTV9ERUJVRygiQWRkaW5nIHN0YW5kYXJkIDY0MHg0ODAgQCA2MEh6IHRvICVzXG4iLAorCQkJICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCX0KKworCWRybV9tb2RlX3NvcnQoJmNvbm5lY3Rvci0+bW9kZXMpOworCisJRFJNX0RFQlVHKCJQcm9iZWQgbW9kZXMgZm9yICVzXG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCQltb2RlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOworCisJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhtb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKKwkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2Rlcyk7CisKK3ZvaWQgZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgbWF4WCwKKwkJCQkgICAgICB1aW50MzJfdCBtYXhZKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzKGNvbm5lY3RvciwgbWF4WCwgbWF4WSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2Rlcyk7CisKKworLyoqCisgKiBkcm1faGVscGVyX2NydGNfaW5fdXNlIC0gY2hlY2sgaWYgYSBnaXZlbiBDUlRDIGlzIGluIGEgbW9kZV9jb25maWcKKyAqIEBjcnRjOiBDUlRDIHRvIGNoZWNrCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBXYWxrIEBjcnRjJ3MgRFJNIGRldmljZSdzIG1vZGVfY29uZmlnIGFuZCBzZWUgaWYgaXQncyBpbiB1c2UuCisgKgorICogUkVUVVJOUzoKKyAqIFRydWUgaWYgQGNydGMgaXMgcGFydCBvZiB0aGUgbW9kZV9jb25maWcsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCBkcm1faGVscGVyX2NydGNfaW5fdXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwkvKiBGSVhNRTogTG9ja2luZyBhcm91bmQgbGlzdCBhY2Nlc3M/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfY3J0Y19pbl91c2UpOworCisvKioKKyAqIGRybV9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMgLSBkaXNhYmxlIHVudXNlZCBvYmplY3RzCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBJZiBhbiBjb25uZWN0b3Igb3IgQ1JUQyBpc24ndCBwYXJ0IG9mIEBkZXYncyBtb2RlX2NvbmZpZywgaXQgY2FuIGJlIGRpc2FibGVkCisgKiBieSBjYWxsaW5nIGl0cyBkcG1zIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgcG93ZXIgaXQgb2ZmLgorICovCit2b2lkIGRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQlpZiAoIWVuY29kZXItPmNydGMpCisJCQkoKmVuY29kZXJfZnVuY3MtPmRwbXMpKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCWNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpOworCQlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBNU19PRkYpOworCQkJY3J0Yy0+ZmIgPSBOVUxMOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2hhc19wcmVmZXJyZWRfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCWlmIChkcm1fbW9kZV93aWR0aChtb2RlKSA+IHdpZHRoIHx8CisJCSAgICBkcm1fbW9kZV9oZWlnaHQobW9kZSkgPiBoZWlnaHQpCisJCQljb250aW51ZTsKKwkJaWYgKG1vZGUtPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkKKwkJCXJldHVybiBtb2RlOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGJvb2wgZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgc3RyaWN0KQoreworCWJvb2wgZW5hYmxlOworCisJaWYgKHN0cmljdCkgeworCQllbmFibGUgPSBjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwl9IGVsc2UgeworCQllbmFibGUgPSBjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwl9CisJcmV0dXJuIGVuYWJsZTsKK30KKworc3RhdGljIHZvaWQgZHJtX2VuYWJsZV9jb25uZWN0b3JzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgKmVuYWJsZWQpCit7CisJYm9vbCBhbnlfZW5hYmxlZCA9IGZhbHNlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGkgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWVuYWJsZWRbaV0gPSBkcm1fY29ubmVjdG9yX2VuYWJsZWQoY29ubmVjdG9yLCB0cnVlKTsKKwkJYW55X2VuYWJsZWQgfD0gZW5hYmxlZFtpXTsKKwkJaSsrOworCX0KKworCWlmIChhbnlfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWVuYWJsZWRbaV0gPSBkcm1fY29ubmVjdG9yX2VuYWJsZWQoY29ubmVjdG9yLCBmYWxzZSk7CisJCWkrKzsKKwl9Cit9CisKK3N0YXRpYyBib29sIGRybV90YXJnZXRfcHJlZmVycmVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJIGJvb2wgKmVuYWJsZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBpID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCisJCWlmIChlbmFibGVkW2ldID09IGZhbHNlKSB7CisJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1vZGVzW2ldID0gZHJtX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOworCQlpZiAoIW1vZGVzW2ldKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGVzW2ldLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKKwkJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkcm1fY3J0YyAqKmJlc3RfY3J0Y3MsCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkgIGludCBuLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IGMsIG87CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmNvbm5lY3Rvcl9mdW5jczsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jcnRjICpiZXN0X2NydGM7CisJaW50IG15X3Njb3JlLCBiZXN0X3Njb3JlLCBzY29yZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKipjcnRjcywgKmNydGM7CisKKwlpZiAobiA9PSBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpCisJCXJldHVybiAwOworCWMgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoYyA9PSBuKQorCQkJYnJlYWs7CisJCWMrKzsKKwl9CisKKwliZXN0X2NydGNzW25dID0gTlVMTDsKKwliZXN0X2NydGMgPSBOVUxMOworCWJlc3Rfc2NvcmUgPSBkcm1fcGlja19jcnRjcyhkZXYsIGJlc3RfY3J0Y3MsIG1vZGVzLCBuKzEsIHdpZHRoLCBoZWlnaHQpOworCWlmIChtb2Rlc1tuXSA9PSBOVUxMKQorCQlyZXR1cm4gYmVzdF9zY29yZTsKKworCWNydGNzID0ga21hbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IgKgorCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY3J0YyAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcnRjcykKKwkJcmV0dXJuIGJlc3Rfc2NvcmU7CisKKwlteV9zY29yZSA9IDE7CisJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQorCQlteV9zY29yZSsrOworCWlmIChkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCkpCisJCW15X3Njb3JlKys7CisKKwljb25uZWN0b3JfZnVuY3MgPSBjb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlOworCWVuY29kZXIgPSBjb25uZWN0b3JfZnVuY3MtPmJlc3RfZW5jb2Rlcihjb25uZWN0b3IpOworCWlmICghZW5jb2RlcikKKwkJZ290byBvdXQ7CisKKwljb25uZWN0b3ItPmVuY29kZXIgPSBlbmNvZGVyOworCisJLyogc2VsZWN0IGEgY3J0YyBmb3IgdGhpcyBjb25uZWN0b3IgYW5kIHRoZW4gYXR0ZW1wdCB0byBjb25maWd1cmUKKwkgICByZW1haW5pbmcgY29ubmVjdG9ycyAqLworCWMgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisKKwkJaWYgKChjb25uZWN0b3ItPmVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgKDEgPDwgYykpID09IDApIHsKKwkJCWMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChvID0gMDsgbyA8IG47IG8rKykKKwkJCWlmIChiZXN0X2NydGNzW29dID09IGNydGMpCisJCQkJYnJlYWs7CisKKwkJaWYgKG8gPCBuKSB7CisJCQkvKiBpZ25vcmUgY2xvbmluZyBmb3Igbm93ICovCisJCQljKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNydGNzW25dID0gY3J0YzsKKwkJbWVtY3B5KGNydGNzLCBiZXN0X2NydGNzLCBuICogc2l6ZW9mKHN0cnVjdCBkcm1fY3J0YyAqKSk7CisJCXNjb3JlID0gbXlfc2NvcmUgKyBkcm1fcGlja19jcnRjcyhkZXYsIGNydGNzLCBtb2RlcywgbiArIDEsCisJCQkJCQkgIHdpZHRoLCBoZWlnaHQpOworCQlpZiAoc2NvcmUgPiBiZXN0X3Njb3JlKSB7CisJCQliZXN0X2NydGMgPSBjcnRjOworCQkJYmVzdF9zY29yZSA9IHNjb3JlOworCQkJbWVtY3B5KGJlc3RfY3J0Y3MsIGNydGNzLAorCQkJICAgICAgIGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciAqCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY3J0YyAqKSk7CisJCX0KKwkJYysrOworCX0KK291dDoKKwlrZnJlZShjcnRjcyk7CisJcmV0dXJuIGJlc3Rfc2NvcmU7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJYm9vbCAqZW5hYmxlZDsKKwlpbnQgd2lkdGgsIGhlaWdodDsKKwlpbnQgaSwgcmV0OworCisJd2lkdGggPSBkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aDsKKwloZWlnaHQgPSBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQ7CisKKwkvKiBjbGVhbiBvdXQgYWxsIHRoZSBlbmNvZGVyL2NydGMgY29tYm9zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJfQorCisJY3J0Y3MgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCXNpemVvZihzdHJ1Y3QgZHJtX2NydGMgKiksIEdGUF9LRVJORUwpOworCW1vZGVzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiksIEdGUF9LRVJORUwpOworCWVuYWJsZWQgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCSAgc2l6ZW9mKGJvb2wpLCBHRlBfS0VSTkVMKTsKKworCWRybV9lbmFibGVfY29ubmVjdG9ycyhkZXYsIGVuYWJsZWQpOworCisJcmV0ID0gZHJtX3RhcmdldF9wcmVmZXJyZWQoZGV2LCBtb2RlcywgZW5hYmxlZCwgd2lkdGgsIGhlaWdodCk7CisJaWYgKCFyZXQpCisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgaW5pdGlhbCBtb2Rlc1xuIik7CisKKwlkcm1fcGlja19jcnRjcyhkZXYsIGNydGNzLCBtb2RlcywgMCwgd2lkdGgsIGhlaWdodCk7CisKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBtb2Rlc1tpXTsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3J0Y3NbaV07CisKKwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlciA9PSBOVUxMKSB7CisJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtb2RlICYmIGNydGMpIHsKKwkJCWNydGMtPmRlc2lyZWRfbW9kZSA9IG1vZGU7CisJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBjcnRjOworCQl9IGVsc2UKKwkJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJCWkrKzsKKwl9CisKKwlrZnJlZShjcnRjcyk7CisJa2ZyZWUobW9kZXMpOworCWtmcmVlKGVuYWJsZWQpOworfQorLyoqCisgKiBkcm1fY3J0Y19zZXRfbW9kZSAtIHNldCBhIG1vZGUKKyAqIEBjcnRjOiBDUlRDIHRvIHByb2dyYW0KKyAqIEBtb2RlOiBtb2RlIHRvIHVzZQorICogQHg6IHdpZHRoIG9mIG1vZGUKKyAqIEB5OiBoZWlnaHQgb2YgbW9kZQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogVHJ5IHRvIHNldCBAbW9kZSBvbiBAY3J0Yy4gIEdpdmUgQGNydGMgYW5kIGl0cyBhc3NvY2lhdGVkIGNvbm5lY3RvcnMgYSBjaGFuY2UKKyAqIHRvIGZpeHVwIG9yIHJlamVjdCB0aGUgbW9kZSBwcmlvciB0byB0cnlpbmcgdG8gc2V0IGl0LgorICoKKyAqIFJFVFVSTlM6CisgKiBUcnVlIGlmIHRoZSBtb2RlIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBvciBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgICAgaW50IHgsIGludCB5LAorCQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsIHNhdmVkX21vZGU7CisJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CisJaW50IHNhdmVkX3gsIHNhdmVkX3k7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCWFkanVzdGVkX21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKKworCWNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpOworCisJaWYgKCFjcnRjLT5lbmFibGVkKQorCQlyZXR1cm4gdHJ1ZTsKKworCXNhdmVkX21vZGUgPSBjcnRjLT5tb2RlOworCXNhdmVkX3ggPSBjcnRjLT54OworCXNhdmVkX3kgPSBjcnRjLT55OworCisJLyogVXBkYXRlIGNydGMgdmFsdWVzIHVwIGZyb250IHNvIHRoZSBkcml2ZXIgY2FuIHJlbHkgb24gdGhlbSBmb3IgbW9kZQorCSAqIHNldHRpbmcuCisJICovCisJY3J0Yy0+bW9kZSA9ICptb2RlOworCWNydGMtPnggPSB4OworCWNydGMtPnkgPSB5OworCisJaWYgKGRybV9tb2RlX2VxdWFsKCZzYXZlZF9tb2RlLCAmY3J0Yy0+bW9kZSkpIHsKKwkJaWYgKHNhdmVkX3ggIT0gY3J0Yy0+eCB8fCBzYXZlZF95ICE9IGNydGMtPnkpIHsKKwkJCWNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2UoY3J0YywgY3J0Yy0+eCwgY3J0Yy0+eSwKKwkJCQkJCSAgb2xkX2ZiKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qIFBhc3Mgb3VyIG1vZGUgdG8gdGhlIGNvbm5lY3RvcnMgYW5kIHRoZSBDUlRDIHRvIGdpdmUgdGhlbSBhIGNoYW5jZSB0bworCSAqIGFkanVzdCBpdCBhY2NvcmRpbmcgdG8gbGltaXRhdGlvbnMgb3IgY29ubmVjdG9yIHByb3BlcnRpZXMsIGFuZCBhbHNvCisJICogYSBjaGFuY2UgdG8gcmVqZWN0IHRoZSBtb2RlIGVudGlyZWx5LgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisKKwkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0YykKKwkJCWNvbnRpbnVlOworCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCWlmICghKHJldCA9IGVuY29kZXJfZnVuY3MtPm1vZGVfZml4dXAoZW5jb2RlciwgbW9kZSwKKwkJCQkJCSAgICAgIGFkanVzdGVkX21vZGUpKSkgeworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKCEocmV0ID0gY3J0Y19mdW5jcy0+bW9kZV9maXh1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKSkpIHsKKwkJZ290byBkb25lOworCX0KKworCS8qIFByZXBhcmUgdGhlIGVuY29kZXJzIGFuZCBDUlRDcyBiZWZvcmUgc2V0dGluZyB0aGUgbW9kZS4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCisJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKwkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQkvKiBEaXNhYmxlIHRoZSBlbmNvZGVycyBhcyB0aGUgZmlyc3QgdGhpbmcgd2UgZG8uICovCisJCWVuY29kZXJfZnVuY3MtPnByZXBhcmUoZW5jb2Rlcik7CisJfQorCisJY3J0Y19mdW5jcy0+cHJlcGFyZShjcnRjKTsKKworCS8qIFNldCB1cCB0aGUgRFBMTCBhbmQgYW55IGVuY29kZXJzIHN0YXRlIHRoYXQgbmVlZHMgdG8gYWRqdXN0IG9yIGRlcGVuZAorCSAqIG9uIHRoZSBEUExMLgorCSAqLworCWNydGNfZnVuY3MtPm1vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUsIHgsIHksIG9sZF9mYik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCisJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlEUk1fSU5GTygiJXM6IHNldCBtb2RlICVzICV4XG4iLCBkcm1fZ2V0X2VuY29kZXJfbmFtZShlbmNvZGVyKSwKKwkJCSBtb2RlLT5uYW1lLCBtb2RlLT5iYXNlLmlkKTsKKwkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQllbmNvZGVyX2Z1bmNzLT5tb2RlX3NldChlbmNvZGVyLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKKwl9CisKKwkvKiBOb3cgZW5hYmxlIHRoZSBjbG9ja3MsIHBsYW5lLCBwaXBlLCBhbmQgY29ubmVjdG9ycyB0aGF0IHdlIHNldCB1cC4gKi8KKwljcnRjX2Z1bmNzLT5jb21taXQoY3J0Yyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCisJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCWVuY29kZXJfZnVuY3MtPmNvbW1pdChlbmNvZGVyKTsKKworCX0KKworCS8qIFhYWCBmcmVlIGFkanVzdGVkbW9kZSAqLworCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKKwkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCitkb25lOgorCWlmICghcmV0KSB7CisJCWNydGMtPm1vZGUgPSBzYXZlZF9tb2RlOworCQljcnRjLT54ID0gc2F2ZWRfeDsKKwkJY3J0Yy0+eSA9IHNhdmVkX3k7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKTsKKworCisvKioKKyAqIGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnIC0gc2V0IGEgbmV3IGNvbmZpZyBmcm9tIHVzZXJzcGFjZQorICogQGNydGM6IENSVEMgdG8gc2V0dXAKKyAqIEBjcnRjX2luZm86IHVzZXIgcHJvdmlkZWQgY29uZmlndXJhdGlvbgorICogQG5ld19tb2RlOiBuZXcgbW9kZSB0byBzZXQKKyAqIEBjb25uZWN0b3Jfc2V0OiBzZXQgb2YgY29ubmVjdG9ycyBmb3IgdGhlIG5ldyBjb25maWcKKyAqIEBmYjogbmV3IGZyYW1lYnVmZmVyCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBTZXR1cCBhIG5ldyBjb25maWd1cmF0aW9uLCBwcm92aWRlZCBieSB0aGUgdXNlciBpbiBAY3J0Y19pbmZvLCBhbmQgZW5hYmxlCisgKiBpdC4KKyAqCisgKiBSRVRVUk5TOgorICogWmVyby4gKEZJWE1FKQorICovCitpbnQgZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9jcnRjICoqc2F2ZV9jcnRjcywgKm5ld19jcnRjOworCXN0cnVjdCBkcm1fZW5jb2RlciAqKnNhdmVfZW5jb2RlcnMsICpuZXdfZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmI7CisJYm9vbCBzYXZlX2VuYWJsZWQ7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisJYm9vbCBmbGlwX29yX21vdmUgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBjb3VudCA9IDAsIHJvLCBmYWlsID0gMDsKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzOworCWludCByZXQgPSAwOworCisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKCFzZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzZXQtPmNydGMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNydGNfZnVuY3MgPSBzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOworCisJRFJNX0RFQlVHKCJjcnRjOiAlcCAlZCBmYjogJXAgY29ubmVjdG9yczogJXAgbnVtX2Nvbm5lY3RvcnM6ICVkICh4LCB5KSAoJWksICVpKVxuIiwKKwkJICBzZXQtPmNydGMsIHNldC0+Y3J0Yy0+YmFzZS5pZCwgc2V0LT5mYiwgc2V0LT5jb25uZWN0b3JzLAorCQkgIChpbnQpc2V0LT5udW1fY29ubmVjdG9ycywgc2V0LT54LCBzZXQtPnkpOworCisJZGV2ID0gc2V0LT5jcnRjLT5kZXY7CisKKwkvKiBzYXZlIHByZXZpb3VzIGNvbmZpZyAqLworCXNhdmVfZW5hYmxlZCA9IHNldC0+Y3J0Yy0+ZW5hYmxlZDsKKworCS8qIHRoaXMgaXMgbWVhbnQgdG8gYmUgbnVtX2Nvbm5lY3RvciBub3QgbnVtX2NydGMgKi8KKwlzYXZlX2NydGNzID0ga3phbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IgKgorCQkJICAgICBzaXplb2Yoc3RydWN0IGRybV9jcnRjICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhdmVfY3J0Y3MpCisJCXJldHVybiAtRU5PTUVNOworCisJc2F2ZV9lbmNvZGVycyA9IGt6YWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yICoKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9lbmNvZGVycyAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlX2VuY29kZXJzKSB7CisJCWtmcmVlKHNhdmVfY3J0Y3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byBjaGVjayBoZXJlIGlmIHRoZSBmYiBoYXMgdGhlIHNhbWUgcHJvcGVydGllcworCSAqIGFuZCB0aGVuIGp1c3QgZmxpcF9vcl9tb3ZlIGl0ICovCisJaWYgKHNldC0+Y3J0Yy0+ZmIgIT0gc2V0LT5mYikgeworCQkvKiBpZiB3ZSBoYXZlIG5vIGZiIHRoZW4gaXRzIGEgY2hhbmdlIG5vdCBhIGZsaXAgKi8KKwkJaWYgKHNldC0+Y3J0Yy0+ZmIgPT0gTlVMTCkKKwkJCWNoYW5nZWQgPSB0cnVlOworCQllbHNlCisJCQlmbGlwX29yX21vdmUgPSB0cnVlOworCX0KKworCWlmIChzZXQtPnggIT0gc2V0LT5jcnRjLT54IHx8IHNldC0+eSAhPSBzZXQtPmNydGMtPnkpCisJCWZsaXBfb3JfbW92ZSA9IHRydWU7CisKKwlpZiAoc2V0LT5tb2RlICYmICFkcm1fbW9kZV9lcXVhbChzZXQtPm1vZGUsICZzZXQtPmNydGMtPm1vZGUpKSB7CisJCURSTV9ERUJVRygibW9kZXMgYXJlIGRpZmZlcmVudFxuIik7CisJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJnNldC0+Y3J0Yy0+bW9kZSk7CisJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoc2V0LT5tb2RlKTsKKwkJY2hhbmdlZCA9IHRydWU7CisJfQorCisJLyogYSkgdHJhdmVyc2UgcGFzc2VkIGluIGNvbm5lY3RvciBsaXN0IGFuZCBnZXQgZW5jb2RlcnMgZm9yIHRoZW0gKi8KKwljb3VudCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0KKwkJCWNvbm5lY3Rvci0+aGVscGVyX3ByaXZhdGU7CisJCXNhdmVfZW5jb2RlcnNbY291bnQrK10gPSBjb25uZWN0b3ItPmVuY29kZXI7CisJCW5ld19lbmNvZGVyID0gY29ubmVjdG9yLT5lbmNvZGVyOworCQlmb3IgKHJvID0gMDsgcm8gPCBzZXQtPm51bV9jb25uZWN0b3JzOyBybysrKSB7CisJCQlpZiAoc2V0LT5jb25uZWN0b3JzW3JvXSA9PSBjb25uZWN0b3IpIHsKKwkJCQluZXdfZW5jb2RlciA9IGNvbm5lY3Rvcl9mdW5jcy0+YmVzdF9lbmNvZGVyKGNvbm5lY3Rvcik7CisJCQkJLyogaWYgd2UgY2FuJ3QgZ2V0IGFuIGVuY29kZXIgZm9yIGEgY29ubmVjdG9yCisJCQkJICAgd2UgYXJlIHNldHRpbmcgbm93IC0gdGhlbiBmYWlsICovCisJCQkJaWYgKG5ld19lbmNvZGVyID09IE5VTEwpCisJCQkJCS8qIGRvbid0IGJyZWFrIHNvIGZhaWwgcGF0aCB3b3JrcyBjb3JyZWN0ICovCisJCQkJCWZhaWwgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG5ld19lbmNvZGVyICE9IGNvbm5lY3Rvci0+ZW5jb2RlcikgeworCQkJY2hhbmdlZCA9IHRydWU7CisJCQljb25uZWN0b3ItPmVuY29kZXIgPSBuZXdfZW5jb2RlcjsKKwkJfQorCX0KKworCWlmIChmYWlsKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbF9ub19lbmNvZGVyOworCX0KKworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIpCisJCQljb250aW51ZTsKKworCQlzYXZlX2NydGNzW2NvdW50KytdID0gY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjOworCisJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gc2V0LT5jcnRjKQorCQkJbmV3X2NydGMgPSBOVUxMOworCQllbHNlCisJCQluZXdfY3J0YyA9IGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YzsKKworCQlmb3IgKHJvID0gMDsgcm8gPCBzZXQtPm51bV9jb25uZWN0b3JzOyBybysrKSB7CisJCQlpZiAoc2V0LT5jb25uZWN0b3JzW3JvXSA9PSBjb25uZWN0b3IpCisJCQkJbmV3X2NydGMgPSBzZXQtPmNydGM7CisJCX0KKwkJaWYgKG5ld19jcnRjICE9IGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YykgeworCQkJY2hhbmdlZCA9IHRydWU7CisJCQljb25uZWN0b3ItPmVuY29kZXItPmNydGMgPSBuZXdfY3J0YzsKKwkJfQorCX0KKworCS8qIG1vZGVfc2V0X2Jhc2UgaXMgbm90IGEgcmVxdWlyZWQgZnVuY3Rpb24gKi8KKwlpZiAoZmxpcF9vcl9tb3ZlICYmICFjcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKQorCQljaGFuZ2VkID0gdHJ1ZTsKKworCWlmIChjaGFuZ2VkKSB7CisJCW9sZF9mYiA9IHNldC0+Y3J0Yy0+ZmI7CisJCXNldC0+Y3J0Yy0+ZmIgPSBzZXQtPmZiOworCQlzZXQtPmNydGMtPmVuYWJsZWQgPSAoc2V0LT5tb2RlICE9IE5VTEwpOworCQlpZiAoc2V0LT5tb2RlICE9IE5VTEwpIHsKKwkJCURSTV9ERUJVRygiYXR0ZW1wdGluZyB0byBzZXQgbW9kZSBmcm9tIHVzZXJzcGFjZVxuIik7CisJCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHNldC0+bW9kZSk7CisJCQlpZiAoIWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShzZXQtPmNydGMsIHNldC0+bW9kZSwKKwkJCQkJCSAgICAgIHNldC0+eCwgc2V0LT55LAorCQkJCQkJICAgICAgb2xkX2ZiKSkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBmYWlsX3NldF9tb2RlOworCQkJfQorCQkJLyogVE9ETyBhcmUgdGhlc2UgbmVlZGVkPyAqLworCQkJc2V0LT5jcnRjLT5kZXNpcmVkX3ggPSBzZXQtPng7CisJCQlzZXQtPmNydGMtPmRlc2lyZWRfeSA9IHNldC0+eTsKKwkJCXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlID0gc2V0LT5tb2RlOworCQl9CisJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CisJfSBlbHNlIGlmIChmbGlwX29yX21vdmUpIHsKKwkJb2xkX2ZiID0gc2V0LT5jcnRjLT5mYjsKKwkJaWYgKHNldC0+Y3J0Yy0+ZmIgIT0gc2V0LT5mYikKKwkJCXNldC0+Y3J0Yy0+ZmIgPSBzZXQtPmZiOworCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKHNldC0+Y3J0Yywgc2V0LT54LCBzZXQtPnksIG9sZF9mYik7CisJfQorCisJa2ZyZWUoc2F2ZV9lbmNvZGVycyk7CisJa2ZyZWUoc2F2ZV9jcnRjcyk7CisJcmV0dXJuIDA7CisKK2ZhaWxfc2V0X21vZGU6CisJc2V0LT5jcnRjLT5lbmFibGVkID0gc2F2ZV9lbmFibGVkOworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCisJCWNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0YyA9IHNhdmVfY3J0Y3NbY291bnQrK107CitmYWlsX25vX2VuY29kZXI6CisJa2ZyZWUoc2F2ZV9jcnRjcyk7CisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQljb25uZWN0b3ItPmVuY29kZXIgPSBzYXZlX2VuY29kZXJzW2NvdW50KytdOworCX0KKwlrZnJlZShzYXZlX2VuY29kZXJzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyk7CisKK2Jvb2wgZHJtX2hlbHBlcl9wbHVnZ2VkX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJRFJNX0RFQlVHKCJcbiIpOworCisJZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LCBkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCwKKwkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CisKKwlkcm1fc2V0dXBfY3J0Y3MoZGV2KTsKKworCS8qIGFsZXJ0IHRoZSBkcml2ZXIgZmIgbGF5ZXIgKi8KKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzLT5mYl9jaGFuZ2VkKGRldik7CisKKwkvKiBGSVhNRTogc2VuZCBob3RwbHVnIGV2ZW50ICovCisJcmV0dXJuIHRydWU7Cit9CisvKioKKyAqIGRybV9pbml0aWFsX2NvbmZpZyAtIHNldHVwIGEgc2FuZSBpbml0aWFsIGNvbm5lY3RvciBjb25maWd1cmF0aW9uCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY2FuX2dyb3c6IHRoaXMgY29uZmlndXJhdGlvbiBpcyBncm93YWJsZQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZWQgYXQgaW5pdCB0aW1lLCBtdXN0IHRha2UgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBTY2FuIHRoZSBDUlRDcyBhbmQgY29ubmVjdG9ycyBhbmQgdHJ5IHRvIHB1dCB0b2dldGhlciBhbiBpbml0aWFsIHNldHVwLgorICogQXQgdGhlIG1vbWVudCwgdGhpcyBpcyBhIGNsb25lZCBjb25maWd1cmF0aW9uIGFjcm9zcyBhbGwgaGVhZHMgd2l0aAorICogYSBuZXcgZnJhbWVidWZmZXIgb2JqZWN0IGFzIHRoZSBiYWNraW5nIHN0b3JlLgorICoKKyAqIFJFVFVSTlM6CisgKiBaZXJvIGlmIGV2ZXJ5dGhpbmcgd2VudCBvaywgbm9uemVybyBvdGhlcndpc2UuCisgKi8KK2Jvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGNhbl9ncm93KQoreworCWludCByZXQgPSBmYWxzZTsKKworCWRybV9oZWxwZXJfcGx1Z2dlZF9ldmVudChkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcpOworCisvKioKKyAqIGRybV9ob3RwbHVnX3N0YWdlX3R3bworICogQGRldiBEUk0gZGV2aWNlCisgKiBAY29ubmVjdG9yIGhvdHBsdWdlZCBjb25uZWN0b3IKKyAqCisgKiBMT0NLSU5HLgorICogQ2FsbGVyIG11c3QgaG9sZCBtb2RlIGNvbmZpZyBsb2NrLCBmdW5jdGlvbiBtaWdodCBncmFiIHN0cnVjdCBsb2NrLgorICoKKyAqIFN0YWdlIHR3byBvZiBhIGhvdHBsdWcuCisgKgorICogUkVUVVJOUzoKKyAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9oZWxwZXJfaG90cGx1Z19zdGFnZV90d28oc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faGVscGVyX3BsdWdnZWRfZXZlbnQoZGV2KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1faGVscGVyX2hvdHBsdWdfc3RhZ2VfdHdvKTsKKworaW50IGRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCkKK3sKKwlmYi0+d2lkdGggPSBtb2RlX2NtZC0+d2lkdGg7CisJZmItPmhlaWdodCA9IG1vZGVfY21kLT5oZWlnaHQ7CisJZmItPnBpdGNoID0gbW9kZV9jbWQtPnBpdGNoOworCWZiLT5iaXRzX3Blcl9waXhlbCA9IG1vZGVfY21kLT5icHA7CisJZmItPmRlcHRoID0gbW9kZV9jbWQtPmRlcHRoOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCk7CisKK2ludCBkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCisJCWlmICghY3J0Yy0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwKKwkJCQkJICAgICAgIGNydGMtPngsIGNydGMtPnksIGNydGMtPmZiKTsKKworCQlpZiAocmV0ID09IGZhbHNlKQorCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IG1vZGUgb24gY3J0YyAlcFxuIiwgY3J0Yyk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IDk5NjA5N2EuLmZlYmI1MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtNzQsNiArNzQsOSBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NFVF9TQVJFQV9DVFgsIGRybV9zZXRzYXJlYWN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCBkcm1fZ2V0c2FyZWFjdHgsIERSTV9BVVRIKSwKIAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NFVF9NQVNURVIsIGRybV9zZXRtYXN0ZXJfaW9jdGwsIERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0RST1BfTUFTVEVSLCBkcm1fZHJvcG1hc3Rlcl9pb2N0bCwgRFJNX1JPT1RfT05MWSksCisKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9BRERfQ1RYLCBkcm1fYWRkY3R4LCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9STV9DVFgsIGRybV9ybWN0eCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RfQ1RYLCBkcm1fbW9kY3R4LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLApAQCAtMTIzLDYgKzEyNiwyMyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9DTE9TRSwgZHJtX2dlbV9jbG9zZV9pb2N0bCwgMCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0ZMSU5LLCBkcm1fZ2VtX2ZsaW5rX2lvY3RsLCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX09QRU4sIGRybV9nZW1fb3Blbl9pb2N0bCwgRFJNX0FVVEgpLAorCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRSRVNPVVJDRVMsIGRybV9tb2RlX2dldHJlc291cmNlcywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRDUlRDLCBkcm1fbW9kZV9nZXRjcnRjLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1NFVENSVEMsIGRybV9tb2RlX3NldGNydGMsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQ1VSU09SLCBkcm1fbW9kZV9jdXJzb3JfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUR0FNTUEsIGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bCwgRFJNX01BU1RFUiksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9TRVRHQU1NQSwgZHJtX21vZGVfZ2FtbWFfc2V0X2lvY3RsLCBEUk1fTUFTVEVSKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEVOQ09ERVIsIGRybV9tb2RlX2dldGVuY29kZXIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUQ09OTkVDVE9SLCBkcm1fbW9kZV9nZXRjb25uZWN0b3IsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQVRUQUNITU9ERSwgZHJtX21vZGVfYXR0YWNobW9kZV9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9ERVRBQ0hNT0RFLCBkcm1fbW9kZV9kZXRhY2htb2RlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFBST1BFUlRZLCBkcm1fbW9kZV9nZXRwcm9wZXJ0eV9pb2N0bCwgRFJNX01BU1RFUiB8IERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1NFVFBST1BFUlRZLCBkcm1fbW9kZV9jb25uZWN0b3JfcHJvcGVydHlfc2V0X2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFBST1BCTE9CLCBkcm1fbW9kZV9nZXRibG9iX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEZCLCBkcm1fbW9kZV9nZXRmYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9BRERGQiwgZHJtX21vZGVfYWRkZmIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfUk1GQiwgZHJtX21vZGVfcm1mYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCiB9OwogCiAjZGVmaW5lIERSTV9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQpAQCAtMTM4LDggKzE1OCw2IEBACiAgKi8KIGludCBkcm1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewotCXN0cnVjdCBkcm1fbWFnaWNfZW50cnkgKnB0LCAqbmV4dDsKLQlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QsICpsaXN0X3Q7CiAJc3RydWN0IGRybV92bWFfZW50cnkgKnZtYSwgKnZtYV90ZW1wOwogCWludCBpOwogCkBAIC0xNDksMTMgKzE2Nyw3IEBACiAJCWRldi0+ZHJpdmVyLT5sYXN0Y2xvc2UoZGV2KTsKIAlEUk1fREVCVUcoImRyaXZlciBsYXN0Y2xvc2UgY29tcGxldGVkXG4iKTsKIAotCWlmIChkZXYtPnVuaXF1ZSkgewotCQlkcm1fZnJlZShkZXYtPnVuaXF1ZSwgc3RybGVuKGRldi0+dW5pcXVlKSArIDEsIERSTV9NRU1fRFJJVkVSKTsKLQkJZGV2LT51bmlxdWUgPSBOVUxMOwotCQlkZXYtPnVuaXF1ZV9sZW4gPSAwOwotCX0KLQotCWlmIChkZXYtPmlycV9lbmFibGVkKQorCWlmIChkZXYtPmlycV9lbmFibGVkICYmICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMTY0LDE4ICsxNzYsOSBAQAogCWRybV9kcmF3YWJsZV9mcmVlX2FsbChkZXYpOwogCWRlbF90aW1lcigmZGV2LT50aW1lcik7CiAKLQkvKiBDbGVhciBwaWQgbGlzdCAqLwotCWlmIChkZXYtPm1hZ2ljZnJlZS5uZXh0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdCwgbmV4dCwgJmRldi0+bWFnaWNmcmVlLCBoZWFkKSB7Ci0JCQlsaXN0X2RlbCgmcHQtPmhlYWQpOwotCQkJZHJtX2h0X3JlbW92ZV9pdGVtKCZkZXYtPm1hZ2ljbGlzdCwgJnB0LT5oYXNoX2l0ZW0pOwotCQkJZHJtX2ZyZWUocHQsIHNpemVvZigqcHQpLCBEUk1fTUVNX01BR0lDKTsKLQkJfQotCQlkcm1faHRfcmVtb3ZlKCZkZXYtPm1hZ2ljbGlzdCk7Ci0JfQotCiAJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgeworCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYKKwkgICAgIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKIAkJc3RydWN0IGRybV9hZ3BfbWVtICplbnRyeSwgKnRlbXBlOwogCiAJCS8qIFJlbW92ZSBBR1AgcmVzb3VyY2VzLCBidXQgbGVhdmUgZGV2LT5hZ3AKQEAgLTE5NCw3ICsxOTcsOCBAQAogCQlkZXYtPmFncC0+YWNxdWlyZWQgPSAwOwogCQlkZXYtPmFncC0+ZW5hYmxlZCA9IDA7CiAJfQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1NHKSAmJiBkZXYtPnNnKSB7CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfU0cpICYmIGRldi0+c2cgJiYKKwkgICAgIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKIAkJZHJtX3NnX2NsZWFudXAoZGV2LT5zZyk7CiAJCWRldi0+c2cgPSBOVUxMOwogCX0KQEAgLTIwNSwxMyArMjA5LDYgQEAKIAkJZHJtX2ZyZWUodm1hLCBzaXplb2YoKnZtYSksIERSTV9NRU1fVk1BUyk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJfbGlzdCwgbGlzdF90LCAmZGV2LT5tYXBsaXN0LCBoZWFkKSB7Ci0JCWlmICghKHJfbGlzdC0+bWFwLT5mbGFncyAmIF9EUk1fRFJJVkVSKSkgewotCQkJZHJtX3JtbWFwX2xvY2tlZChkZXYsIHJfbGlzdC0+bWFwKTsKLQkJCXJfbGlzdCA9IE5VTEw7Ci0JCX0KLQl9Ci0KIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9ETUFfUVVFVUUpICYmIGRldi0+cXVldWVsaXN0KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlX2NvdW50OyBpKyspIHsKIAkJCWlmIChkZXYtPnF1ZXVlbGlzdFtpXSkgewpAQCAtMjI4LDE0ICsyMjUsMTEgQEAKIAl9CiAJZGV2LT5xdWV1ZV9jb3VudCA9IDA7CiAKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0RNQSkpCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpICYmCisJICAgICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlkcm1fZG1hX3Rha2Vkb3duKGRldik7CiAKLQlpZiAoZGV2LT5sb2NrLmh3X2xvY2spIHsKLQkJZGV2LT5zaWdkYXRhLmxvY2sgPSBkZXYtPmxvY2suaHdfbG9jayA9IE5VTEw7CS8qIFNITSByZW1vdmVkICovCi0JCWRldi0+bG9jay5maWxlX3ByaXYgPSBOVUxMOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+bG9jay5sb2NrX3F1ZXVlKTsKLQl9CisJZGV2LT5kZXZfbWFwcGluZyA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlEUk1fREVCVUcoImxhc3RjbG9zZSBjb21wbGV0ZWRcbiIpOwpAQCAtMjYzLDYgKzI1Nyw4IEBACiAKIAlEUk1fREVCVUcoIlxuIik7CiAKKwlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5kZXZpY2VfbGlzdCk7CisKIAlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgewogCQlwaWQgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKikmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOwogCkBAIC0zMjksMzUgKzMyNSwyNCBAQAogCWRybV9odF9yZW1vdmUoJmRldi0+bWFwX2hhc2gpOwogCWRybV9jdHhiaXRtYXBfY2xlYW51cChkZXYpOwogCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCWRybV9wdXRfbWlub3IoJmRldi0+Y29udHJvbCk7CisKKwlpZiAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pCisJCWRybV9nZW1fZGVzdHJveShkZXYpOworCiAJZHJtX3B1dF9taW5vcigmZGV2LT5wcmltYXJ5KTsKIAlpZiAoZHJtX3B1dF9kZXYoZGV2KSkKIAkJRFJNX0VSUk9SKCJDYW5ub3QgdW5sb2FkIG1vZHVsZVxuIik7CiB9CiAKLXN0YXRpYyBpbnQgZHJtX21pbm9yc19jbGVhbnVwKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gcHRyOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlciA9IGRhdGE7Ci0KLQlkZXYgPSBtaW5vci0+ZGV2OwotCWlmIChtaW5vci0+ZGV2LT5kcml2ZXIgIT0gZHJpdmVyKQotCQlyZXR1cm4gMDsKLQotCWlmIChtaW5vci0+dHlwZSAhPSBEUk1fTUlOT1JfTEVHQUNZKQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXYpCi0JCXBjaV9kZXZfcHV0KGRldi0+cGRldik7Ci0JZHJtX2NsZWFudXAoZGV2KTsKLQlyZXR1cm4gMTsKLX0KLQogdm9pZCBkcm1fZXhpdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsICp0bXA7CiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JaWRyX2Zvcl9lYWNoKCZkcm1fbWlub3JzX2lkciwgJmRybV9taW5vcnNfY2xlYW51cCwgZHJpdmVyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkcml2ZXItPmRldmljZV9saXN0LCBkcml2ZXJfaXRlbSkKKwkJZHJtX2NsZWFudXAoZGV2KTsKIAogCURSTV9JTkZPKCJNb2R1bGUgdW5sb2FkZWRcbiIpOwogfQpAQCAtNTAzLDcgKzQ4OCw3IEBACiAJCXJldGNvZGUgPSAtRUlOVkFMOwogCX0gZWxzZSBpZiAoKChpb2N0bC0+ZmxhZ3MgJiBEUk1fUk9PVF9PTkxZKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgfHwKIAkJICAgKChpb2N0bC0+ZmxhZ3MgJiBEUk1fQVVUSCkgJiYgIWZpbGVfcHJpdi0+YXV0aGVudGljYXRlZCkgfHwKLQkJICAgKChpb2N0bC0+ZmxhZ3MgJiBEUk1fTUFTVEVSKSAmJiAhZmlsZV9wcml2LT5tYXN0ZXIpKSB7CisJCSAgICgoaW9jdGwtPmZsYWdzICYgRFJNX01BU1RFUikgJiYgIWZpbGVfcHJpdi0+aXNfbWFzdGVyKSkgewogCQlyZXRjb2RlID0gLUVBQ0NFUzsKIAl9IGVsc2UgewogCQlpZiAoY21kICYgKElPQ19JTiB8IElPQ19PVVQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYmIwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMCwwICsxLDczMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBMdWMgVmVyaGFlZ2VuIChxdWlya3MgbGlzdCkKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqCisgKiBEREMgcHJvYmluZyByb3V0aW5lcyAoZHJtX2RkY19yZWFkICYgZHJtX2RvX3Byb2JlX2RkY19lZGlkKSBvcmlnaW5hbGx5IGZyb20KKyAqIEZCIGxheWVyLgorICogICBDb3B5cmlnaHQgKEMpIDIwMDYgRGVubmlzIE11bnNpZSA8ZG11bnNpZUBjZWNyb3BpYS5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1fZWRpZC5oIgorCisvKgorICogVE9ETzoKKyAqICAgLSBzdXBwb3J0IEVESUQgMS40IChpbmNsLiBDRSBibG9ja3MpCisgKi8KKworLyoKKyAqIEVESUQgYmxvY2tzIG91dCBpbiB0aGUgd2lsZCBoYXZlIGEgdmFyaWV0eSBvZiBidWdzLCB0cnkgdG8gY29sbGVjdAorICogdGhlbSBoZXJlIChub3RlIHRoYXQgdXNlcnNwYWNlIG1heSB3b3JrIGFyb3VuZCBicm9rZW4gbW9uaXRvcnMgZmlyc3QsCisgKiBidXQgZml4ZXMgc2hvdWxkIG1ha2UgdGhlaXIgd2F5IGhlcmUgc28gdGhhdCB0aGUga2VybmVsICJqdXN0IHdvcmtzIgorICogb24gYXMgbWFueSBkaXNwbGF5cyBhcyBwb3NzaWJsZSkuCisgKi8KKworLyogRmlyc3QgZGV0YWlsZWQgbW9kZSB3cm9uZywgdXNlIGxhcmdlc3QgNjBIeiBtb2RlICovCisjZGVmaW5lIEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzYwCQkoMSA8PCAwKQorLyogUmVwb3J0ZWQgMTM1TUh6IHBpeGVsIGNsb2NrIGlzIHRvbyBoaWdoLCBuZWVkcyBhZGp1c3RtZW50ICovCisjZGVmaW5lIEVESURfUVVJUktfMTM1X0NMT0NLX1RPT19ISUdICQkoMSA8PCAxKQorLyogUHJlZmVyIHRoZSBsYXJnZXN0IG1vZGUgYXQgNzUgSHogKi8KKyNkZWZpbmUgRURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNzUJCSgxIDw8IDIpCisvKiBEZXRhaWwgdGltaW5nIGlzIGluIGNtIG5vdCBtbSAqLworI2RlZmluZSBFRElEX1FVSVJLX0RFVEFJTEVEX0lOX0NNCQkoMSA8PCAzKQorLyogRGV0YWlsZWQgdGltaW5nIGRlc2NyaXB0b3JzIGhhdmUgYm9ndXMgc2l6ZSB2YWx1ZXMsIHNvIGp1c3QgdGFrZSB0aGUKKyAqIG1heGltdW0gc2l6ZSBhbmQgdXNlIHRoYXQuCisgKi8KKyNkZWZpbmUgRURJRF9RVUlSS19ERVRBSUxFRF9VU0VfTUFYSU1VTV9TSVpFCSgxIDw8IDQpCisvKiBNb25pdG9yIGZvcmdvdCB0byBzZXQgdGhlIGZpcnN0IGRldGFpbGVkIGlzIHByZWZlcnJlZCBiaXQuICovCisjZGVmaW5lIEVESURfUVVJUktfRklSU1RfREVUQUlMRURfUFJFRkVSUkVECSgxIDw8IDUpCisvKiB1c2UgK2hzeW5jICt2c3luYyBmb3IgZGV0YWlsZWQgbW9kZSAqLworI2RlZmluZSBFRElEX1FVSVJLX0RFVEFJTEVEX1NZTkNfUFAJCSgxIDw8IDYpCisKK3N0YXRpYyBzdHJ1Y3QgZWRpZF9xdWlyayB7CisJY2hhciAqdmVuZG9yOworCWludCBwcm9kdWN0X2lkOworCXUzMiBxdWlya3M7Cit9IGVkaWRfcXVpcmtfbGlzdFtdID0geworCS8qIEFjZXIgQUwxNzA2ICovCisJeyAiQUNSIiwgNDQzNTgsIEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzYwIH0sCisJLyogQWNlciBGNTEgKi8KKwl7ICJBUEkiLCAweDc2MDIsIEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzYwIH0sCisJLyogVW5rbm93biBBY2VyICovCisJeyAiQUNSIiwgMjQyMywgRURJRF9RVUlSS19GSVJTVF9ERVRBSUxFRF9QUkVGRVJSRUQgfSwKKworCS8qIEJlbGluZWEgMTAgMTUgNTUgKi8KKwl7ICJNQVgiLCAxNTE2LCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV82MCB9LAorCXsgIk1BWCIsIDB4NzdlLCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV82MCB9LAorCisJLyogRW52aXNpb24gUGVyaXBoZXJhbHMsIEluYy4gRU4tNzEwMGUgKi8KKwl7ICJFUEkiLCA1OTI2NCwgRURJRF9RVUlSS18xMzVfQ0xPQ0tfVE9PX0hJR0ggfSwKKworCS8qIEZ1bmFpIEVsZWN0cm9uaWNzIFBNMzZCICovCisJeyAiRkNNIiwgMTM2MDAsIEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzc1IHwKKwkgIEVESURfUVVJUktfREVUQUlMRURfSU5fQ00gfSwKKworCS8qIExHIFBoaWxpcHMgTENEIExQMTU0VzAxLUE1ICovCisJeyAiTFBMIiwgMCwgRURJRF9RVUlSS19ERVRBSUxFRF9VU0VfTUFYSU1VTV9TSVpFIH0sCisJeyAiTFBMIiwgMHgyYTAwLCBFRElEX1FVSVJLX0RFVEFJTEVEX1VTRV9NQVhJTVVNX1NJWkUgfSwKKworCS8qIFBoaWxpcHMgMTA3cDUgQ1JUICovCisJeyAiUEhMIiwgNTczNjQsIEVESURfUVVJUktfRklSU1RfREVUQUlMRURfUFJFRkVSUkVEIH0sCisKKwkvKiBQcm92aWV3IEFZNzY1QyAqLworCXsgIlBUUyIsIDc2NSwgRURJRF9RVUlSS19GSVJTVF9ERVRBSUxFRF9QUkVGRVJSRUQgfSwKKworCS8qIFNhbXN1bmcgU3luY01hc3RlciAyMDVCVy4gIE5vdGU6IGlyb255ICovCisJeyAiU0FNIiwgNTQxLCBFRElEX1FVSVJLX0RFVEFJTEVEX1NZTkNfUFAgfSwKKwkvKiBTYW1zdW5nIFN5bmNNYXN0ZXIgMjJbNS02XUJXICovCisJeyAiU0FNIiwgNTk2LCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV82MCB9LAorCXsgIlNBTSIsIDYzOCwgRURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNjAgfSwKK307CisKKworLyogVmFsaWQgRURJRCBoZWFkZXIgaGFzIHRoZXNlIGJ5dGVzICovCitzdGF0aWMgdTggZWRpZF9oZWFkZXJbXSA9IHsgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCB9OworCisvKioKKyAqIGVkaWRfaXNfdmFsaWQgLSBzYW5pdHkgY2hlY2sgRURJRCBkYXRhCisgKiBAZWRpZDogRURJRCBkYXRhCisgKgorICogU2FuaXR5IGNoZWNrIHRoZSBFRElEIGJsb2NrIGJ5IGxvb2tpbmcgYXQgdGhlIGhlYWRlciwgdGhlIHZlcnNpb24gbnVtYmVyCisgKiBhbmQgdGhlIGNoZWNrc3VtLiAgUmV0dXJuIDAgaWYgdGhlIEVESUQgZG9lc24ndCBjaGVjayBvdXQsIG9yIDEgaWYgaXQncworICogdmFsaWQuCisgKi8KK3N0YXRpYyBib29sIGVkaWRfaXNfdmFsaWQoc3RydWN0IGVkaWQgKmVkaWQpCit7CisJaW50IGk7CisJdTggY3N1bSA9IDA7CisJdTggKnJhd19lZGlkID0gKHU4ICopZWRpZDsKKworCWlmIChtZW1jbXAoZWRpZC0+aGVhZGVyLCBlZGlkX2hlYWRlciwgc2l6ZW9mKGVkaWRfaGVhZGVyKSkpCisJCWdvdG8gYmFkOworCWlmIChlZGlkLT52ZXJzaW9uICE9IDEpIHsKKwkJRFJNX0VSUk9SKCJFRElEIGhhcyBtYWpvciB2ZXJzaW9uICVkLCBpbnN0ZWFkIG9mIDFcbiIsIGVkaWQtPnZlcnNpb24pOworCQlnb3RvIGJhZDsKKwl9CisJaWYgKGVkaWQtPnJldmlzaW9uIDw9IDAgfHwgZWRpZC0+cmV2aXNpb24gPiAzKSB7CisJCURSTV9FUlJPUigiRURJRCBoYXMgbWlub3IgdmVyc2lvbiAlZCwgd2hpY2ggaXMgbm90IGJldHdlZW4gMC0zXG4iLCBlZGlkLT5yZXZpc2lvbik7CisJCWdvdG8gYmFkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFRElEX0xFTkdUSDsgaSsrKQorCQljc3VtICs9IHJhd19lZGlkW2ldOworCWlmIChjc3VtKSB7CisJCURSTV9FUlJPUigiRURJRCBjaGVja3N1bSBpcyBpbnZhbGlkLCByZW1haW5kZXIgaXMgJWRcbiIsIGNzdW0pOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXR1cm4gMTsKKworYmFkOgorCWlmIChyYXdfZWRpZCkgeworCQlEUk1fRVJST1IoIlJhdyBFRElEOlxuIik7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKEtFUk5fRVJSLCBEVU1QX1BSRUZJWF9OT05FLCByYXdfZWRpZCwgRURJRF9MRU5HVEgpOworCQlwcmludGsoIlxuIik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGVkaWRfdmVuZG9yIC0gbWF0Y2ggYSBzdHJpbmcgYWdhaW5zdCBFRElEJ3Mgb2JmdXNjYXRlZCB2ZW5kb3IgZmllbGQKKyAqIEBlZGlkOiBFRElEIHRvIG1hdGNoCisgKiBAdmVuZG9yOiB2ZW5kb3Igc3RyaW5nCisgKgorICogUmV0dXJucyB0cnVlIGlmIEB2ZW5kb3IgaXMgaW4gQGVkaWQsIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBlZGlkX3ZlbmRvcihzdHJ1Y3QgZWRpZCAqZWRpZCwgY2hhciAqdmVuZG9yKQoreworCWNoYXIgZWRpZF92ZW5kb3JbM107CisKKwllZGlkX3ZlbmRvclswXSA9ICgoZWRpZC0+bWZnX2lkWzBdICYgMHg3YykgPj4gMikgKyAnQCc7CisJZWRpZF92ZW5kb3JbMV0gPSAoKChlZGlkLT5tZmdfaWRbMF0gJiAweDMpIDw8IDMpIHwKKwkJCSAgKChlZGlkLT5tZmdfaWRbMV0gJiAweGUwKSA+PiA1KSkgKyAnQCc7CisJZWRpZF92ZW5kb3JbMl0gPSAoZWRpZC0+bWZnX2lkWzJdICYgMHgxZikgKyAnQCc7CisKKwlyZXR1cm4gIXN0cm5jbXAoZWRpZF92ZW5kb3IsIHZlbmRvciwgMyk7Cit9CisKKy8qKgorICogZWRpZF9nZXRfcXVpcmtzIC0gcmV0dXJuIHF1aXJrIGZsYWdzIGZvciBhIGdpdmVuIEVESUQKKyAqIEBlZGlkOiBFRElEIHRvIHByb2Nlc3MKKyAqCisgKiBUaGlzIHRlbGxzIHN1YnNlcXVlbnQgcm91dGluZXMgd2hhdCBmaXhlcyB0aGV5IG5lZWQgdG8gYXBwbHkuCisgKi8KK3N0YXRpYyB1MzIgZWRpZF9nZXRfcXVpcmtzKHN0cnVjdCBlZGlkICplZGlkKQoreworCXN0cnVjdCBlZGlkX3F1aXJrICpxdWlyazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVkaWRfcXVpcmtfbGlzdCk7IGkrKykgeworCQlxdWlyayA9ICZlZGlkX3F1aXJrX2xpc3RbaV07CisKKwkJaWYgKGVkaWRfdmVuZG9yKGVkaWQsIHF1aXJrLT52ZW5kb3IpICYmCisJCSAgICAoRURJRF9QUk9EVUNUX0lEKGVkaWQpID09IHF1aXJrLT5wcm9kdWN0X2lkKSkKKwkJCXJldHVybiBxdWlyay0+cXVpcmtzOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIE1PREVfU0laRShtKSAoKG0pLT5oZGlzcGxheSAqIChtKS0+dmRpc3BsYXkpCisjZGVmaW5lIE1PREVfUkVGUkVTSF9ESUZGKG0scikgKGFicygobSktPnZyZWZyZXNoIC0gdGFyZ2V0X3JlZnJlc2gpKQorCisKKy8qKgorICogZWRpZF9maXh1cF9wcmVmZXJyZWQgLSBzZXQgcHJlZmVycmVkIG1vZGVzIGJhc2VkIG9uIHF1aXJrIGxpc3QKKyAqIEBjb25uZWN0b3I6IGhhcyBtb2RlIGxpc3QgdG8gZml4IHVwCisgKiBAcXVpcmtzOiBxdWlya3MgbGlzdAorICoKKyAqIFdhbGsgdGhlIG1vZGUgbGlzdCBmb3IgQGNvbm5lY3RvciwgY2xlYXJpbmcgdGhlIHByZWZlcnJlZCBzdGF0dXMKKyAqIG9uIGV4aXN0aW5nIG1vZGVzIGFuZCBzZXR0aW5nIGl0IGFuZXcgZm9yIHRoZSByaWdodCBtb2RlIGFsYSBAcXVpcmtzLgorICovCitzdGF0aWMgdm9pZCBlZGlkX2ZpeHVwX3ByZWZlcnJlZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSB1MzIgcXVpcmtzKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqY3VyX21vZGUsICpwcmVmZXJyZWRfbW9kZTsKKwlpbnQgdGFyZ2V0X3JlZnJlc2ggPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzKSkKKwkJcmV0dXJuOworCisJaWYgKHF1aXJrcyAmIEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzYwKQorCQl0YXJnZXRfcmVmcmVzaCA9IDYwOworCWlmIChxdWlya3MgJiBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV83NSkKKwkJdGFyZ2V0X3JlZnJlc2ggPSA3NTsKKworCXByZWZlcnJlZF9tb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsCisJCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUsIGhlYWQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cl9tb2RlLCB0LCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKKwkJY3VyX21vZGUtPnR5cGUgJj0gfkRSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCisJCWlmIChjdXJfbW9kZSA9PSBwcmVmZXJyZWRfbW9kZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIExhcmdlc3QgbW9kZSBpcyBwcmVmZXJyZWQgKi8KKwkJaWYgKE1PREVfU0laRShjdXJfbW9kZSkgPiBNT0RFX1NJWkUocHJlZmVycmVkX21vZGUpKQorCQkJcHJlZmVycmVkX21vZGUgPSBjdXJfbW9kZTsKKworCQkvKiBBdCBhIGdpdmVuIHNpemUsIHRyeSB0byBnZXQgY2xvc2VzdCB0byB0YXJnZXQgcmVmcmVzaCAqLworCQlpZiAoKE1PREVfU0laRShjdXJfbW9kZSkgPT0gTU9ERV9TSVpFKHByZWZlcnJlZF9tb2RlKSkgJiYKKwkJICAgIE1PREVfUkVGUkVTSF9ESUZGKGN1cl9tb2RlLCB0YXJnZXRfcmVmcmVzaCkgPAorCQkgICAgTU9ERV9SRUZSRVNIX0RJRkYocHJlZmVycmVkX21vZGUsIHRhcmdldF9yZWZyZXNoKSkgeworCQkJcHJlZmVycmVkX21vZGUgPSBjdXJfbW9kZTsKKwkJfQorCX0KKworCXByZWZlcnJlZF9tb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworfQorCisvKioKKyAqIGRybV9tb2RlX3N0ZCAtIGNvbnZlcnQgc3RhbmRhcmQgbW9kZSBpbmZvICh3aWR0aCwgaGVpZ2h0LCByZWZyZXNoKSBpbnRvIG1vZGUKKyAqIEB0OiBzdGFuZGFyZCB0aW1pbmcgcGFyYW1zCisgKgorICogVGFrZSB0aGUgc3RhbmRhcmQgdGltaW5nIHBhcmFtcyAoaW4gdGhpcyBjYXNlIHdpZHRoLCBhc3BlY3QsIGFuZCByZWZyZXNoKQorICogYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgcmVhbCBtb2RlIHVzaW5nIENWVC4KKyAqCisgKiBQdW50cyBmb3Igbm93LCBidXQgc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBGQiBsYXllcidzIENWVCBiYXNlZCBtb2RlCisgKiBnZW5lcmF0aW9uIGNvZGUuCisgKi8KK3N0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZV9zdGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RkX3RpbWluZyAqdCkKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgaHNpemUgPSB0LT5oc2l6ZSAqIDggKyAyNDgsIHZzaXplOworCisJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodC0+YXNwZWN0X3JhdGlvID09IDApCisJCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7CisJZWxzZSBpZiAodC0+YXNwZWN0X3JhdGlvID09IDEpCisJCXZzaXplID0gKGhzaXplICogMykgLyA0OworCWVsc2UgaWYgKHQtPmFzcGVjdF9yYXRpbyA9PSAyKQorCQl2c2l6ZSA9IChoc2l6ZSAqIDQpIC8gNTsKKwllbHNlCisJCXZzaXplID0gKGhzaXplICogOSkgLyAxNjsKKworCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCisJcmV0dXJuIG1vZGU7Cit9CisKKy8qKgorICogZHJtX21vZGVfZGV0YWlsZWQgLSBjcmVhdGUgYSBuZXcgbW9kZSBmcm9tIGFuIEVESUQgZGV0YWlsZWQgdGltaW5nIHNlY3Rpb24KKyAqIEBkZXY6IERSTSBkZXZpY2UgKG5lZWRlZCB0byBjcmVhdGUgbmV3IG1vZGUpCisgKiBAZWRpZDogRURJRCBibG9jaworICogQHRpbWluZzogRURJRCBkZXRhaWxlZCB0aW1pbmcgaW5mbworICogQHF1aXJrczogcXVpcmtzIHRvIGFwcGx5CisgKgorICogQW4gRURJRCBkZXRhaWxlZCB0aW1pbmcgYmxvY2sgY29udGFpbnMgZW5vdWdoIGluZm8gZm9yIHVzIHRvIGNyZWF0ZSBhbmQKKyAqIHJldHVybiBhIG5ldyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZS4KKyAqLworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZV9kZXRhaWxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICBzdHJ1Y3QgZWRpZCAqZWRpZCwKKwkJCQkJCSAgc3RydWN0IGRldGFpbGVkX3RpbWluZyAqdGltaW5nLAorCQkJCQkJICB1MzIgcXVpcmtzKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXN0cnVjdCBkZXRhaWxlZF9waXhlbF90aW1pbmcgKnB0ID0gJnRpbWluZy0+ZGF0YS5waXhlbF9kYXRhOworCisJaWYgKHB0LT5zdGVyZW8pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3RlcmVvIG1vZGUgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIXB0LT5zZXBhcmF0ZV9zeW5jKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImludGVncmF0ZWQgc3luYyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVI7CisKKwlpZiAocXVpcmtzICYgRURJRF9RVUlSS18xMzVfQ0xPQ0tfVE9PX0hJR0gpCisJCXRpbWluZy0+cGl4ZWxfY2xvY2sgPSAxMDg4OworCisJbW9kZS0+Y2xvY2sgPSB0aW1pbmctPnBpeGVsX2Nsb2NrICogMTA7CisKKwltb2RlLT5oZGlzcGxheSA9IChwdC0+aGFjdGl2ZV9oaSA8PCA4KSB8IHB0LT5oYWN0aXZlX2xvOworCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyAoKHB0LT5oc3luY19vZmZzZXRfaGkgPDwgOCkgfAorCQkJCQkgICAgICBwdC0+aHN5bmNfb2Zmc2V0X2xvKTsKKwltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArCisJCSgocHQtPmhzeW5jX3B1bHNlX3dpZHRoX2hpIDw8IDgpIHwKKwkJIHB0LT5oc3luY19wdWxzZV93aWR0aF9sbyk7CisJbW9kZS0+aHRvdGFsID0gbW9kZS0+aGRpc3BsYXkgKyAoKHB0LT5oYmxhbmtfaGkgPDwgOCkgfCBwdC0+aGJsYW5rX2xvKTsKKworCW1vZGUtPnZkaXNwbGF5ID0gKHB0LT52YWN0aXZlX2hpIDw8IDgpIHwgcHQtPnZhY3RpdmVfbG87CisJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArICgocHQtPnZzeW5jX29mZnNldF9oaSA8PCA4KSB8CisJCQkJCSAgICAgIHB0LT52c3luY19vZmZzZXRfbG8pOworCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsKKwkJKChwdC0+dnN5bmNfcHVsc2Vfd2lkdGhfaGkgPDwgOCkgfAorCQkgcHQtPnZzeW5jX3B1bHNlX3dpZHRoX2xvKTsKKwltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArICgocHQtPnZibGFua19oaSA8PCA4KSB8IHB0LT52YmxhbmtfbG8pOworCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwlpZiAocHQtPmludGVybGFjZWQpCisJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCisJaWYgKHF1aXJrcyAmIEVESURfUVVJUktfREVUQUlMRURfU1lOQ19QUCkgeworCQlwdC0+aHN5bmNfcG9zaXRpdmUgPSAxOworCQlwdC0+dnN5bmNfcG9zaXRpdmUgPSAxOworCX0KKworCW1vZGUtPmZsYWdzIHw9IHB0LT5oc3luY19wb3NpdGl2ZSA/IERSTV9NT0RFX0ZMQUdfUEhTWU5DIDogRFJNX01PREVfRkxBR19OSFNZTkM7CisJbW9kZS0+ZmxhZ3MgfD0gcHQtPnZzeW5jX3Bvc2l0aXZlID8gRFJNX01PREVfRkxBR19QVlNZTkMgOiBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKworCW1vZGUtPndpZHRoX21tID0gcHQtPndpZHRoX21tX2xvIHwgKHB0LT53aWR0aF9tbV9oaSA8PCA4KTsKKwltb2RlLT5oZWlnaHRfbW0gPSBwdC0+aGVpZ2h0X21tX2xvIHwgKHB0LT5oZWlnaHRfbW1faGkgPDwgOCk7CisKKwlpZiAocXVpcmtzICYgRURJRF9RVUlSS19ERVRBSUxFRF9JTl9DTSkgeworCQltb2RlLT53aWR0aF9tbSAqPSAxMDsKKwkJbW9kZS0+aGVpZ2h0X21tICo9IDEwOworCX0KKworCWlmIChxdWlya3MgJiBFRElEX1FVSVJLX0RFVEFJTEVEX1VTRV9NQVhJTVVNX1NJWkUpIHsKKwkJbW9kZS0+d2lkdGhfbW0gPSBlZGlkLT53aWR0aF9jbSAqIDEwOworCQltb2RlLT5oZWlnaHRfbW0gPSBlZGlkLT5oZWlnaHRfY20gKiAxMDsKKwl9CisKKwlyZXR1cm4gbW9kZTsKK30KKworLyoKKyAqIERldGFpbGVkIG1vZGUgaW5mbyBmb3IgdGhlIEVESUQgImVzdGFibGlzaGVkIG1vZGVzIiBkYXRhIHRvIHVzZS4KKyAqLworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGVkaWRfZXN0X21vZGVzW10gPSB7CisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0MDAwMCwgODAwLCA4NDAsCisJCSAgIDk2OCwgMTA1NiwgMCwgNjAwLCA2MDEsIDYwNSwgNjI4LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LCAvKiA4MDB4NjAwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM2MDAwLCA4MDAsIDgyNCwKKwkJICAgODk2LCAxMDI0LCAwLCA2MDAsIDYwMSwgNjAzLCAgNjI1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LCAvKiA4MDB4NjAwQDU2SHogKi8KKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDMxNTAwLCA2NDAsIDY1NiwKKwkJICAgNzIwLCA4NDAsIDAsIDQ4MCwgNDgxLCA0ODQsIDUwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwgLyogNjQweDQ4MEA3NUh6ICovCisJeyBEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTUwMCwgNjQwLCA2NjQsCisJCSAgIDcwNCwgIDgzMiwgMCwgNDgwLCA0ODksIDQ5MSwgNTIwLCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LCAvKiA2NDB4NDgwQDcySHogKi8KKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDMwMjQwLCA2NDAsIDcwNCwKKwkJICAgNzY4LCAgODY0LCAwLCA0ODAsIDQ4MywgNDg2LCA1MjUsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sIC8qIDY0MHg0ODBANjdIeiAqLworCXsgRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUyMDAsIDY0MCwgNjU2LAorCQkgICA3NTIsIDgwMCwgMCwgNDgwLCA0OTAsIDQ5MiwgNTI1LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LCAvKiA2NDB4NDgwQDYwSHogKi8KKwl7IERSTV9NT0RFKCI3MjB4NDAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM1NTAwLCA3MjAsIDczOCwKKwkJICAgODQ2LCA5MDAsIDAsIDQwMCwgNDIxLCA0MjMsICA0NDksIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sIC8qIDcyMHg0MDBAODhIeiAqLworCXsgRFJNX01PREUoIjcyMHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjgzMjAsIDcyMCwgNzM4LAorCQkgICA4NDYsICA5MDAsIDAsIDQwMCwgNDEyLCA0MTQsIDQ0OSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwgLyogNzIweDQwMEA3MEh6ICovCisJeyBEUk1fTU9ERSgiMTI4MHgxMDI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEzNTAwMCwgMTI4MCwgMTI5NiwKKwkJICAgMTQ0MCwgMTY4OCwgMCwgMTAyNCwgMTAyNSwgMTAyOCwgMTA2NiwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwgLyogMTI4MHgxMDI0QDc1SHogKi8KKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA3ODgwMCwgMTAyNCwgMTA0MCwKKwkJICAgMTEzNiwgMTMxMiwgMCwgIDc2OCwgNzY5LCA3NzIsIDgwMCwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwgLyogMTAyNHg3NjhANzVIeiAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDc1MDAwLCAxMDI0LCAxMDQ4LAorCQkgICAxMTg0LCAxMzI4LCAwLCAgNzY4LCA3NzEsIDc3NywgODA2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKSB9LCAvKiAxMDI0eDc2OEA3MEh6ICovCisJeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjUwMDAsIDEwMjQsIDEwNDgsCisJCSAgIDExODQsIDEzNDQsIDAsICA3NjgsIDc3MSwgNzc3LCA4MDYsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpIH0sIC8qIDEwMjR4NzY4QDYwSHogKi8KKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLDQ0OTAwLCAxMDI0LCAxMDMyLAorCQkgICAxMjA4LCAxMjY0LCAwLCA3NjgsIDc2OCwgNzc2LCA4MTcsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMgfCBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgfSwgLyogMTAyNHg3NjhANDNIeiAqLworCXsgRFJNX01PREUoIjgzMng2MjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTcyODQsIDgzMiwgODY0LAorCQkgICA5MjgsIDExNTIsIDAsIDYyNCwgNjI1LCA2MjgsIDY2NywgMCwKKwkJICAgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQykgfSwgLyogODMyeDYyNEA3NUh6ICovCisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0OTUwMCwgODAwLCA4MTYsCisJCSAgIDg5NiwgMTA1NiwgMCwgNjAwLCA2MDEsIDYwNCwgIDYyNSwgMCwKKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwgLyogODAweDYwMEA3NUh6ICovCisJeyBEUk1fTU9ERSgiODAweDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MDAwMCwgODAwLCA4NTYsCisJCSAgIDk3NiwgMTA0MCwgMCwgNjAwLCA2MzcsIDY0MywgNjY2LCAwLAorCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LCAvKiA4MDB4NjAwQDcySHogKi8KKwl7IERSTV9NT0RFKCIxMTUyeDg2NCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMDgwMDAsIDExNTIsIDEyMTYsCisJCSAgIDEzNDQsIDE2MDAsIDAsICA4NjQsIDg2NSwgODY4LCA5MDAsIDAsCisJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sIC8qIDExNTJ4ODY0QDc1SHogKi8KK307CisKKyNkZWZpbmUgRURJRF9FU1RfVElNSU5HUyAxNgorI2RlZmluZSBFRElEX1NURF9USU1JTkdTIDgKKyNkZWZpbmUgRURJRF9ERVRBSUxFRF9USU1JTkdTIDQKKworLyoqCisgKiBhZGRfZXN0YWJsaXNoZWRfbW9kZXMgLSBnZXQgZXN0LiBtb2RlcyBmcm9tIEVESUQgYW5kIGFkZCB0aGVtCisgKiBAZWRpZDogRURJRCBibG9jayB0byBzY2FuCisgKgorICogRWFjaCBFRElEIGJsb2NrIGNvbnRhaW5zIGEgYml0bWFwIG9mIHRoZSBzdXBwb3J0ZWQgImVzdGFibGlzaGVkIG1vZGVzIiBsaXN0CisgKiAoZGVmaW5lZCBhYm92ZSkuICBUZWFzZSB0aGVtIG91dCBhbmQgYWRkIHRoZW0gdG8gdGhlIGdsb2JhbCBtb2RlcyBsaXN0LgorICovCitzdGF0aWMgaW50IGFkZF9lc3RhYmxpc2hlZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJdW5zaWduZWQgbG9uZyBlc3RfYml0cyA9IGVkaWQtPmVzdGFibGlzaGVkX3RpbWluZ3MudDEgfAorCQkoZWRpZC0+ZXN0YWJsaXNoZWRfdGltaW5ncy50MiA8PCA4KSB8CisJCSgoZWRpZC0+ZXN0YWJsaXNoZWRfdGltaW5ncy5tZmdfcnN2ZCAmIDB4ODApIDw8IDkpOworCWludCBpLCBtb2RlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEVESURfRVNUX1RJTUlOR1M7IGkrKykKKwkJaWYgKGVzdF9iaXRzICYgKDE8PGkpKSB7CisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmV3bW9kZTsKKwkJCW5ld21vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCAmZWRpZF9lc3RfbW9kZXNbaV0pOworCQkJaWYgKG5ld21vZGUpIHsKKwkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CisJCQkJbW9kZXMrKzsKKwkJCX0KKwkJfQorCisJcmV0dXJuIG1vZGVzOworfQorCisvKioKKyAqIGFkZF9zdGFuZGFyZF9tb2RlcyAtIGdldCBzdGQuIG1vZGVzIGZyb20gRURJRCBhbmQgYWRkIHRoZW0KKyAqIEBlZGlkOiBFRElEIGJsb2NrIHRvIHNjYW4KKyAqCisgKiBTdGFuZGFyZCBtb2RlcyBjYW4gYmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgQ1ZUIHN0YW5kYXJkLiAgR3JhYiB0aGVtIGZyb20KKyAqIEBlZGlkLCBjYWxjdWxhdGUgdGhlbSwgYW5kIGFkZCB0aGVtIHRvIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW50IGFkZF9zdGFuZGFyZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJaW50IGksIG1vZGVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBFRElEX1NURF9USU1JTkdTOyBpKyspIHsKKwkJc3RydWN0IHN0ZF90aW1pbmcgKnQgPSAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisKKwkJLyogSWYgc3RkIHRpbWluZ3MgYnl0ZXMgYXJlIDEsIDEgaXQncyBlbXB0eSAqLworCQlpZiAodC0+aHNpemUgPT0gMSAmJiAodC0+YXNwZWN0X3JhdGlvIHwgdC0+dmZyZXEpID09IDEpCisJCQljb250aW51ZTsKKworCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbaV0pOworCQlpZiAobmV3bW9kZSkgeworCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOworCQkJbW9kZXMrKzsKKwkJfQorCX0KKworCXJldHVybiBtb2RlczsKK30KKworLyoqCisgKiBhZGRfZGV0YWlsZWRfbW9kZXMgLSBnZXQgZGV0YWlsZWQgbW9kZSBpbmZvIGZyb20gRURJRCBkYXRhCisgKiBAY29ubmVjdG9yOiBhdHRhY2hlZCBjb25uZWN0b3IKKyAqIEBlZGlkOiBFRElEIGJsb2NrIHRvIHNjYW4KKyAqIEBxdWlya3M6IHF1aXJrcyB0byBhcHBseQorICoKKyAqIFNvbWUgb2YgdGhlIGRldGFpbGVkIHRpbWluZyBzZWN0aW9ucyBtYXkgY29udGFpbiBtb2RlIGluZm9ybWF0aW9uLiAgR3JhYgorICogaXQgYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBhZGRfZGV0YWlsZWRfaW5mbyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICBzdHJ1Y3QgZWRpZCAqZWRpZCwgdTMyIHF1aXJrcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJaW50IGksIGosIG1vZGVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBFRElEX0RFVEFJTEVEX1RJTUlOR1M7IGkrKykgeworCQlzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICp0aW1pbmcgPSAmZWRpZC0+ZGV0YWlsZWRfdGltaW5nc1tpXTsKKwkJc3RydWN0IGRldGFpbGVkX25vbl9waXhlbCAqZGF0YSA9ICZ0aW1pbmctPmRhdGEub3RoZXJfZGF0YTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisKKwkJLyogRURJRCB1cCB0byBhbmQgaW5jbHVkaW5nIDEuMiBtYXkgcHV0IG1vbml0b3IgaW5mbyBoZXJlICovCisJCWlmIChlZGlkLT52ZXJzaW9uID09IDEgJiYgZWRpZC0+cmV2aXNpb24gPCAzKQorCQkJY29udGludWU7CisKKwkJLyogRGV0YWlsZWQgbW9kZSB0aW1pbmcgKi8KKwkJaWYgKHRpbWluZy0+cGl4ZWxfY2xvY2spIHsKKwkJCW5ld21vZGUgPSBkcm1fbW9kZV9kZXRhaWxlZChkZXYsIGVkaWQsIHRpbWluZywgcXVpcmtzKTsKKwkJCWlmICghbmV3bW9kZSkKKwkJCQljb250aW51ZTsKKworCQkJLyogRmlyc3QgZGV0YWlsZWQgbW9kZSBpcyBwcmVmZXJyZWQgKi8KKwkJCWlmIChpID09IDAgJiYgZWRpZC0+cHJlZmVycmVkX3RpbWluZykKKwkJCQluZXdtb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOworCisJCQltb2RlcysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBPdGhlciB0aW1pbmcgb3IgaW5mbyAqLworCQlzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKwkJY2FzZSBFRElEX0RFVEFJTF9NT05JVE9SX1NFUklBTDoKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfU1RSSU5HOgorCQkJYnJlYWs7CisJCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5HRToKKwkJCS8qIEdldCBtb25pdG9yIHJhbmdlIGRhdGEgKi8KKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfTkFNRToKKwkJCWJyZWFrOworCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBOgorCQkJYnJlYWs7CisJCWNhc2UgRURJRF9ERVRBSUxfU1REX01PREVTOgorCQkJLyogRml2ZSBtb2RlcyBwZXIgZGV0YWlsZWQgc2VjdGlvbiAqLworCQkJZm9yIChqID0gMDsgaiA8IDU7IGkrKykgeworCQkJCXN0cnVjdCBzdGRfdGltaW5nICpzdGQ7CisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CisKKwkJCQlzdGQgPSAmZGF0YS0+ZGF0YS50aW1pbmdzW2pdOworCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQpOworCQkJCWlmIChuZXdtb2RlKSB7CisJCQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKKwkJCQkJbW9kZXMrKzsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIG1vZGVzOworfQorCisjZGVmaW5lIEREQ19BRERSIDB4NTAKKwordW5zaWduZWQgY2hhciAqZHJtX2RvX3Byb2JlX2RkY19lZGlkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXJ0ID0gMHgwOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBERENfQUREUiwKKwkJCS5mbGFncwk9IDAsCisJCQkubGVuCT0gMSwKKwkJCS5idWYJPSAmc3RhcnQsCisJCX0sIHsKKwkJCS5hZGRyCT0gRERDX0FERFIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5sZW4JPSBFRElEX0xFTkdUSCwKKwkJCS5idWYJPSBidWYsCisJCX0KKwl9OworCisJaWYgKCFidWYpIHsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEVESUQgIgorCQkJICJibG9jay5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpCisJCXJldHVybiBidWY7CisKKwlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAidW5hYmxlIHRvIHJlYWQgRURJRCBibG9jay5cbiIpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kb19wcm9iZV9kZGNfZWRpZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpkcm1fZGRjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWxnb19kYXRhID0gYWRhcHRlci0+YWxnb19kYXRhOworCXVuc2lnbmVkIGNoYXIgKmVkaWQgPSBOVUxMOworCWludCBpLCBqOworCisJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCAxOyBpKyspIHsKKwkJLyogRm9yIHNvbWUgb2xkIG1vbml0b3JzIHdlIG5lZWQgdGhlCisJCSAqIGZvbGxvd2luZyBwcm9jZXNzIHRvIGluaXRpYWxpemUvc3RvcCBEREMKKwkJICovCisJCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMSk7CisJCW1zbGVlcCgxMyk7CisKKwkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAxKTsKKwkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgeworCQkJbXNsZWVwKDEwKTsKKwkJCWlmIChhbGdvX2RhdGEtPmdldHNjbChhbGdvX2RhdGEtPmRhdGEpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChqID09IDUpCisJCQljb250aW51ZTsKKworCQlhbGdvX2RhdGEtPnNldHNkYShhbGdvX2RhdGEtPmRhdGEsIDApOworCQltc2xlZXAoMTUpOworCQlhbGdvX2RhdGEtPnNldHNjbChhbGdvX2RhdGEtPmRhdGEsIDApOworCQltc2xlZXAoMTUpOworCQlhbGdvX2RhdGEtPnNldHNkYShhbGdvX2RhdGEtPmRhdGEsIDEpOworCQltc2xlZXAoMTUpOworCisJCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwkJZWRpZCA9IGRybV9kb19wcm9iZV9kZGNfZWRpZChhZGFwdGVyKTsKKwkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAwKTsKKwkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAwKTsKKwkJbXNsZWVwKDE1KTsKKworCQlhbGdvX2RhdGEtPnNldHNjbChhbGdvX2RhdGEtPmRhdGEsIDEpOworCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgeworCQkJbXNsZWVwKDEwKTsKKwkJCWlmIChhbGdvX2RhdGEtPmdldHNjbChhbGdvX2RhdGEtPmRhdGEpKQorCQkJCWJyZWFrOworCQl9CisKKwkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAxKTsKKwkJbXNsZWVwKDE1KTsKKwkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAwKTsKKwkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAwKTsKKwkJaWYgKGVkaWQpCisJCQlicmVhazsKKwl9CisJLyogUmVsZWFzZSB0aGUgRERDIGxpbmVzIHdoZW4gZG9uZSBvciB0aGUgQXBwbGUgQ2luZW1hIEhEIGRpc3BsYXkKKwkgKiB3aWxsIHN3aXRjaCBvZmYKKwkgKi8KKwlhbGdvX2RhdGEtPnNldHNkYShhbGdvX2RhdGEtPmRhdGEsIDEpOworCWFsZ29fZGF0YS0+c2V0c2NsKGFsZ29fZGF0YS0+ZGF0YSwgMSk7CisKKwlyZXR1cm4gZWRpZDsKK30KKworLyoqCisgKiBkcm1fZ2V0X2VkaWQgLSBnZXQgRURJRCBkYXRhLCBpZiBhdmFpbGFibGUKKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB3ZSdyZSBwcm9iaW5nCisgKiBAYWRhcHRlcjogaTJjIGFkYXB0ZXIgdG8gdXNlIGZvciBEREMKKyAqCisgKiBQb2tlIHRoZSBnaXZlbiBjb25uZWN0b3IncyBpMmMgY2hhbm5lbCB0byBncmFiIEVESUQgZGF0YSBpZiBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm4gZWRpZCBkYXRhIG9yIE5VTEwgaWYgd2UgY291bGRuJ3QgZmluZCBhbnkuCisgKi8KK3N0cnVjdCBlZGlkICpkcm1fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlZGlkICplZGlkOworCisJZWRpZCA9IChzdHJ1Y3QgZWRpZCAqKWRybV9kZGNfcmVhZChhZGFwdGVyKTsKKwlpZiAoIWVkaWQpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogbm8gRURJRCBkYXRhXG4iLAorCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIWVkaWRfaXNfdmFsaWQoZWRpZCkpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogRURJRCBpbnZhbGlkLlxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlrZnJlZShlZGlkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSAoY2hhciAqKWVkaWQ7CisKKwlyZXR1cm4gZWRpZDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9lZGlkKTsKKworLyoqCisgKiBkcm1fYWRkX2VkaWRfbW9kZXMgLSBhZGQgbW9kZXMgZnJvbSBFRElEIGRhdGEsIGlmIGF2YWlsYWJsZQorICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHdlJ3JlIHByb2JpbmcKKyAqIEBlZGlkOiBlZGlkIGRhdGEKKyAqCisgKiBBZGQgdGhlIHNwZWNpZmllZCBtb2RlcyB0byB0aGUgY29ubmVjdG9yJ3MgbW9kZSBsaXN0LgorICoKKyAqIFJldHVybiBudW1iZXIgb2YgbW9kZXMgYWRkZWQgb3IgMCBpZiB3ZSBjb3VsZG4ndCBmaW5kIGFueS4KKyAqLworaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwlpbnQgbnVtX21vZGVzID0gMDsKKwl1MzIgcXVpcmtzOworCisJaWYgKGVkaWQgPT0gTlVMTCkgeworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFlZGlkX2lzX3ZhbGlkKGVkaWQpKSB7CisJCWRldl93YXJuKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IEVESUQgaW52YWxpZC5cbiIsCisJCQkgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcXVpcmtzID0gZWRpZF9nZXRfcXVpcmtzKGVkaWQpOworCisJbnVtX21vZGVzICs9IGFkZF9lc3RhYmxpc2hlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCW51bV9tb2RlcyArPSBhZGRfc3RhbmRhcmRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwludW1fbW9kZXMgKz0gYWRkX2RldGFpbGVkX2luZm8oY29ubmVjdG9yLCBlZGlkLCBxdWlya3MpOworCisJaWYgKHF1aXJrcyAmIChFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV82MCB8IEVESURfUVVJUktfUFJFRkVSX0xBUkdFXzc1KSkKKwkJZWRpZF9maXh1cF9wcmVmZXJyZWQoY29ubmVjdG9yLCBxdWlya3MpOworCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc2VycmF0aW9uX3ZzeW5jID0gZWRpZC0+c2VycmF0aW9uX3ZzeW5jOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN5bmNfb25fZ3JlZW4gPSBlZGlkLT5zeW5jX29uX2dyZWVuOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmNvbXBvc2l0ZV9zeW5jID0gZWRpZC0+Y29tcG9zaXRlX3N5bmM7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc2VwYXJhdGVfc3luY3MgPSBlZGlkLT5zZXBhcmF0ZV9zeW5jczsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5ibGFua190b19ibGFjayA9IGVkaWQtPmJsYW5rX3RvX2JsYWNrOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnZpZGVvX2xldmVsID0gZWRpZC0+dmlkZW9fbGV2ZWw7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uZGlnaXRhbCA9IGVkaWQtPmRpZ2l0YWw7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSBlZGlkLT53aWR0aF9jbSAqIDEwOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IGVkaWQtPmhlaWdodF9jbSAqIDEwOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmdhbW1hID0gZWRpZC0+Z2FtbWE7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uZ3RmX3N1cHBvcnRlZCA9IGVkaWQtPmRlZmF1bHRfZ3RmOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN0YW5kYXJkX2NvbG9yID0gZWRpZC0+c3RhbmRhcmRfY29sb3I7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uZGlzcGxheV90eXBlID0gZWRpZC0+ZGlzcGxheV90eXBlOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmFjdGl2ZV9vZmZfc3VwcG9ydGVkID0gZWRpZC0+cG1fYWN0aXZlX29mZjsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdXNwZW5kX3N1cHBvcnRlZCA9IGVkaWQtPnBtX3N1c3BlbmQ7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3RhbmRieV9zdXBwb3J0ZWQgPSBlZGlkLT5wbV9zdGFuZGJ5OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmdhbW1hID0gZWRpZC0+Z2FtbWE7CisKKwlyZXR1cm4gbnVtX21vZGVzOworfQorRVhQT1JUX1NZTUJPTChkcm1fYWRkX2VkaWRfbW9kZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwppbmRleCA3OGVlZWQ1Li4zNzMzZTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwpAQCAtMzUsNyArMzUsNiBAQAogICovCiAKICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAiZHJtX3NhcmVhLmgiCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKQEAgLTQ0LDEwICs0Myw4IEBACiAKIHN0YXRpYyBpbnQgZHJtX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewotCWRybV9sb2NhbF9tYXBfdCAqbWFwOwogCWludCBpOwogCWludCByZXQ7Ci0JdTMyIHNhcmVhcGFnZTsKIAogCWlmIChkZXYtPmRyaXZlci0+Zmlyc3RvcGVuKSB7CiAJCXJldCA9IGRldi0+ZHJpdmVyLT5maXJzdG9wZW4oZGV2KTsKQEAgLTU1LDIwICs1MiwxNCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZXYtPm1hZ2ljZnJlZS5uZXh0ID0gTlVMTDsKLQotCS8qIHByZWJ1aWxkIHRoZSBTQVJFQSAqLwotCXNhcmVhcGFnZSA9IG1heF90KHVuc2lnbmVkLCBTQVJFQV9NQVgsIFBBR0VfU0laRSk7Ci0JaSA9IGRybV9hZGRtYXAoZGV2LCAwLCBzYXJlYXBhZ2UsIF9EUk1fU0hNLCBfRFJNX0NPTlRBSU5TX0xPQ0ssICZtYXApOwotCWlmIChpICE9IDApCi0JCXJldHVybiBpOwotCiAJYXRvbWljX3NldCgmZGV2LT5pb2N0bF9jb3VudCwgMCk7CiAJYXRvbWljX3NldCgmZGV2LT52bWFfY291bnQsIDApOwotCWRldi0+YnVmX3VzZSA9IDA7Ci0JYXRvbWljX3NldCgmZGV2LT5idWZfYWxsb2MsIDApOwogCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpKSB7CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpICYmCisJICAgICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCWRldi0+YnVmX3VzZSA9IDA7CisJCWF0b21pY19zZXQoJmRldi0+YnVmX2FsbG9jLCAwKTsKKwogCQlpID0gZHJtX2RtYV9zZXR1cChkZXYpOwogCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gaTsKQEAgLTc3LDE2ICs2OCwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+Y291bnRzKTsgaSsrKQogCQlhdG9taWNfc2V0KCZkZXYtPmNvdW50c1tpXSwgMCk7CiAKLQlkcm1faHRfY3JlYXRlKCZkZXYtPm1hZ2ljbGlzdCwgRFJNX01BR0lDX0hBU0hfT1JERVIpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPm1hZ2ljZnJlZSk7Ci0KIAlkZXYtPnNpZ2RhdGEubG9jayA9IE5VTEw7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5sb2NrLmxvY2tfcXVldWUpOworCiAJZGV2LT5xdWV1ZV9jb3VudCA9IDA7CiAJZGV2LT5xdWV1ZV9yZXNlcnZlZCA9IDA7CiAJZGV2LT5xdWV1ZV9zbG90cyA9IDA7CiAJZGV2LT5xdWV1ZWxpc3QgPSBOVUxMOwotCWRldi0+aXJxX2VuYWJsZWQgPSAwOwogCWRldi0+Y29udGV4dF9mbGFnID0gMDsKIAlkZXYtPmludGVycnVwdF9mbGFnID0gMDsKIAlkZXYtPmRtYV9mbGFnID0gMDsKQEAgLTE0NywxMCArMTM0LDIwIEBACiAJCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAkJaWYgKCFkZXYtPm9wZW5fY291bnQrKykgewogCQkJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7Ci0JCQlyZXR1cm4gZHJtX3NldHVwKGRldik7CisJCQlyZXRjb2RlID0gZHJtX3NldHVwKGRldik7CisJCQlnb3RvIG91dDsKIAkJfQogCQlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAl9CitvdXQ6CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChtaW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZKSB7CisJCUJVR19PTigoZGV2LT5kZXZfbWFwcGluZyAhPSBOVUxMKSAmJgorCQkJKGRldi0+ZGV2X21hcHBpbmcgIT0gaW5vZGUtPmlfbWFwcGluZykpOworCQlpZiAoZGV2LT5kZXZfbWFwcGluZyA9PSBOVUxMKQorCQkJZGV2LT5kZXZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldGNvZGU7CiB9CkBAIC0yNTUsNiArMjUyLDcgQEAKIAlwcml2LT5sb2NrX2NvdW50ID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5saGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZicyk7CiAKIAlpZiAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pCiAJCWRybV9nZW1fb3BlbihkZXYsIHByaXYpOwpAQCAtMjY1LDEwICsyNjMsNDIgQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmIChsaXN0X2VtcHR5KCZkZXYtPmZpbGVsaXN0KSkKLQkJcHJpdi0+bWFzdGVyID0gMTsKIAorCS8qIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgbWFzdGVyIG1ha2UgdGhpcyBmZCBpdCAqLworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoIXByaXYtPm1pbm9yLT5tYXN0ZXIpIHsKKwkJLyogY3JlYXRlIGEgbmV3IG1hc3RlciAqLworCQlwcml2LT5taW5vci0+bWFzdGVyID0gZHJtX21hc3Rlcl9jcmVhdGUocHJpdi0+bWlub3IpOworCQlpZiAoIXByaXYtPm1pbm9yLT5tYXN0ZXIpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJcHJpdi0+aXNfbWFzdGVyID0gMTsKKwkJLyogdGFrZSBhbm90aGVyIHJlZmVyZW5jZSBmb3IgdGhlIGNvcHkgaW4gdGhlIGxvY2FsIGZpbGUgcHJpdiAqLworCQlwcml2LT5tYXN0ZXIgPSBkcm1fbWFzdGVyX2dldChwcml2LT5taW5vci0+bWFzdGVyKTsKKworCQlwcml2LT5hdXRoZW50aWNhdGVkID0gMTsKKworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJaWYgKGRldi0+ZHJpdmVyLT5tYXN0ZXJfY3JlYXRlKSB7CisJCQlyZXQgPSBkZXYtPmRyaXZlci0+bWFzdGVyX2NyZWF0ZShkZXYsIHByaXYtPm1hc3Rlcik7CisJCQlpZiAocmV0KSB7CisJCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJCS8qIGRyb3AgYm90aCByZWZlcmVuY2VzIGlmIHRoaXMgZmFpbHMgKi8KKwkJCQlkcm1fbWFzdGVyX3B1dCgmcHJpdi0+bWlub3ItPm1hc3Rlcik7CisJCQkJZHJtX21hc3Rlcl9wdXQoJnByaXYtPm1hc3Rlcik7CisJCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgbWFzdGVyICovCisJCXByaXYtPm1hc3RlciA9IGRybV9tYXN0ZXJfZ2V0KHByaXYtPm1pbm9yLT5tYXN0ZXIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJbGlzdF9hZGQoJnByaXYtPmxoZWFkLCAmZGV2LT5maWxlbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKQEAgLTMxNCw2ICszNDQsNzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2Zhc3luYyk7CiAKKy8qCisgKiBSZWNsYWltIGxvY2tlZCBidWZmZXJzOyBub3RlIHRoYXQgdGhpcyBtYXkgYmUgYSBiYWQgaWRlYSBpZiB0aGUgY3VycmVudAorICogY29udGV4dCBkb2Vzbid0IGhhdmUgdGhlIGh3IGxvY2suLi4KKyAqLworc3RhdGljIHZvaWQgZHJtX3JlY2xhaW1fbG9ja2VkX2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZHJtX2lfaGF2ZV9od19sb2NrKGRldiwgZmlsZV9wcml2KSkgeworCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzX2xvY2tlZChkZXYsIGZpbGVfcHJpdik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBfZW5kID0gamlmZmllcyArIDMgKiBEUk1fSFo7CisJCWludCBsb2NrZWQgPSAwOworCisJCWRybV9pZGxlbG9ja190YWtlKCZmaWxlX3ByaXYtPm1hc3Rlci0+bG9jayk7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgYSB3aGlsZS4KKwkJICovCisJCWRvIHsKKwkJCXNwaW5fbG9ja19iaCgmZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suc3BpbmxvY2spOworCQkJbG9ja2VkID0gZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaWRsZV9oYXNfbG9jazsKKwkJCXNwaW5fdW5sb2NrX2JoKCZmaWxlX3ByaXYtPm1hc3Rlci0+bG9jay5zcGlubG9jayk7CisJCQlpZiAobG9ja2VkKQorCQkJCWJyZWFrOworCQkJc2NoZWR1bGUoKTsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgX2VuZCkpOworCisJCWlmICghbG9ja2VkKSB7CisJCQlEUk1fRVJST1IoInJlY2xhaW1fYnVmZmVyc19sb2NrZWQoKSBkZWFkbG9jay4gUGxlYXNlIHJld29yayB0aGlzXG4iCisJCQkJICAiXHRkcml2ZXIgdG8gdXNlIHJlY2xhaW1fYnVmZmVyc19pZGxlbG9ja2VkKCkgaW5zdGVhZC5cbiIKKwkJCQkgICJcdEkgd2lsbCBnbyBvbiByZWNsYWltaW5nIHRoZSBidWZmZXJzIGFueXdheS5cbiIpOworCQl9CisKKwkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVyc19sb2NrZWQoZGV2LCBmaWxlX3ByaXYpOworCQlkcm1faWRsZWxvY2tfcmVsZWFzZSgmZmlsZV9wcml2LT5tYXN0ZXItPmxvY2spOworCX0KK30KKworc3RhdGljIHZvaWQgZHJtX21hc3Rlcl9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRldi0+ZHJpdmVyLT5yZWNsYWltX2J1ZmZlcnNfbG9ja2VkICYmCisJICAgIGZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrLmh3X2xvY2spCisJCWRybV9yZWNsYWltX2xvY2tlZF9idWZmZXJzKGRldiwgZmlscCk7CisKKwlpZiAoZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVyc19pZGxlbG9ja2VkICYmCisJICAgIGZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrLmh3X2xvY2spIHsKKwkJZHJtX2lkbGVsb2NrX3Rha2UoJmZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrKTsKKwkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVyc19pZGxlbG9ja2VkKGRldiwgZmlsZV9wcml2KTsKKwkJZHJtX2lkbGVsb2NrX3JlbGVhc2UoJmZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrKTsKKwl9CisKKworCWlmIChkcm1faV9oYXZlX2h3X2xvY2soZGV2LCBmaWxlX3ByaXYpKSB7CisJCURSTV9ERUJVRygiRmlsZSAlcCByZWxlYXNlZCwgZnJlZWluZyBsb2NrIGZvciBjb250ZXh0ICVkXG4iLAorCQkJICBmaWxwLCBfRFJNX0xPQ0tJTkdfQ09OVEVYVChmaWxlX3ByaXYtPm1hc3Rlci0+bG9jay5od19sb2NrLT5sb2NrKSk7CisJCWRybV9sb2NrX2ZyZWUoJmZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrLAorCQkJICAgICAgX0RSTV9MT0NLSU5HX0NPTlRFWFQoZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaHdfbG9jay0+bG9jaykpOworCX0KKworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSAmJgorCSAgICAhZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVyc19sb2NrZWQpIHsKKwkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVycyhkZXYsIGZpbGVfcHJpdik7CisJfQorfQorCiAvKioKICAqIFJlbGVhc2UgZmlsZS4KICAqCkBAIC0zNDgsNjAgKzQ0Niw5IEBACiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYoZmlsZV9wcml2LT5taW5vci0+ZGV2aWNlKSwKIAkJICBkZXYtPm9wZW5fY291bnQpOwogCi0JaWYgKGRldi0+ZHJpdmVyLT5yZWNsYWltX2J1ZmZlcnNfbG9ja2VkICYmIGRldi0+bG9jay5od19sb2NrKSB7Ci0JCWlmIChkcm1faV9oYXZlX2h3X2xvY2soZGV2LCBmaWxlX3ByaXYpKSB7Ci0JCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzX2xvY2tlZChkZXYsIGZpbGVfcHJpdik7Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBsb25nIGVuZHRpbWUgPSBqaWZmaWVzICsgMyAqIERSTV9IWjsKLQkJCWludCBsb2NrZWQgPSAwOwotCi0JCQlkcm1faWRsZWxvY2tfdGFrZSgmZGV2LT5sb2NrKTsKLQotCQkJLyoKLQkJCSAqIFdhaXQgZm9yIGEgd2hpbGUuCi0JCQkgKi8KLQotCQkJZG97Ci0JCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPmxvY2suc3BpbmxvY2spOwotCQkJCWxvY2tlZCA9IGRldi0+bG9jay5pZGxlX2hhc19sb2NrOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmxvY2suc3BpbmxvY2spOwotCQkJCWlmIChsb2NrZWQpCi0JCQkJCWJyZWFrOwotCQkJCXNjaGVkdWxlKCk7Ci0JCQl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmR0aW1lKSk7Ci0KLQkJCWlmICghbG9ja2VkKSB7Ci0JCQkJRFJNX0VSUk9SKCJyZWNsYWltX2J1ZmZlcnNfbG9ja2VkKCkgZGVhZGxvY2suIFBsZWFzZSByZXdvcmsgdGhpc1xuIgotCQkJCQkgICJcdGRyaXZlciB0byB1c2UgcmVjbGFpbV9idWZmZXJzX2lkbGVsb2NrZWQoKSBpbnN0ZWFkLlxuIgotCQkJCQkgICJcdEkgd2lsbCBnbyBvbiByZWNsYWltaW5nIHRoZSBidWZmZXJzIGFueXdheS5cbiIpOwotCQkJfQotCi0JCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzX2xvY2tlZChkZXYsIGZpbGVfcHJpdik7Ci0JCQlkcm1faWRsZWxvY2tfcmVsZWFzZSgmZGV2LT5sb2NrKTsKLQkJfQotCX0KLQotCWlmIChkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzX2lkbGVsb2NrZWQgJiYgZGV2LT5sb2NrLmh3X2xvY2spIHsKLQotCQlkcm1faWRsZWxvY2tfdGFrZSgmZGV2LT5sb2NrKTsKLQkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVyc19pZGxlbG9ja2VkKGRldiwgZmlsZV9wcml2KTsKLQkJZHJtX2lkbGVsb2NrX3JlbGVhc2UoJmRldi0+bG9jayk7Ci0KLQl9Ci0KLQlpZiAoZHJtX2lfaGF2ZV9od19sb2NrKGRldiwgZmlsZV9wcml2KSkgewotCQlEUk1fREVCVUcoIkZpbGUgJXAgcmVsZWFzZWQsIGZyZWVpbmcgbG9jayBmb3IgY29udGV4dCAlZFxuIiwKLQkJCSAgZmlscCwgX0RSTV9MT0NLSU5HX0NPTlRFWFQoZGV2LT5sb2NrLmh3X2xvY2stPmxvY2spKTsKLQotCQlkcm1fbG9ja19mcmVlKCZkZXYtPmxvY2ssCi0JCQkgICAgICBfRFJNX0xPQ0tJTkdfQ09OVEVYVChkZXYtPmxvY2suaHdfbG9jay0+bG9jaykpOwotCX0KLQotCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpICYmCi0JICAgICFkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzX2xvY2tlZCkgewotCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzKGRldiwgZmlsZV9wcml2KTsKLQl9CisJLyogaWYgdGhlIG1hc3RlciBoYXMgZ29uZSBhd2F5IHdlIGNhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIGxvY2sgKi8KKwlpZiAoZmlsZV9wcml2LT5taW5vci0+bWFzdGVyKQorCQlkcm1fbWFzdGVyX3JlbGVhc2UoZGV2LCBmaWxwKTsKIAogCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKIAkJZHJtX2dlbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2KTsKQEAgLTQyOCwxMiArNDc1LDI0IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmN0eGxpc3RfbXV0ZXgpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlmIChmaWxlX3ByaXYtPnJlbW92ZV9hdXRoX29uX2Nsb3NlID09IDEpIHsKLQkJc3RydWN0IGRybV9maWxlICp0ZW1wOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJmRldi0+ZmlsZWxpc3QsIGxoZWFkKQotCQkJdGVtcC0+YXV0aGVudGljYXRlZCA9IDA7CisJaWYgKGZpbGVfcHJpdi0+aXNfbWFzdGVyKSB7CisJCXN0cnVjdCBkcm1fZmlsZSAqdGVtcDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmZGV2LT5maWxlbGlzdCwgbGhlYWQpIHsKKwkJCWlmICgodGVtcC0+bWFzdGVyID09IGZpbGVfcHJpdi0+bWFzdGVyKSAmJgorCQkJICAgICh0ZW1wICE9IGZpbGVfcHJpdikpCisJCQkJdGVtcC0+YXV0aGVudGljYXRlZCA9IDA7CisJCX0KKworCQlpZiAoZmlsZV9wcml2LT5taW5vci0+bWFzdGVyID09IGZpbGVfcHJpdi0+bWFzdGVyKSB7CisJCQkvKiBkcm9wIHRoZSByZWZlcmVuY2UgaGVsZCBteSB0aGUgbWlub3IgKi8KKwkJCWRybV9tYXN0ZXJfcHV0KCZmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIpOworCQl9CiAJfQorCisJLyogZHJvcCB0aGUgcmVmZXJlbmNlIGhlbGQgbXkgdGhlIGZpbGUgcHJpdiAqLworCWRybV9tYXN0ZXJfcHV0KCZmaWxlX3ByaXYtPm1hc3Rlcik7CisJZmlsZV9wcml2LT5pc19tYXN0ZXIgPSAwOwogCWxpc3RfZGVsKCZmaWxlX3ByaXYtPmxoZWFkKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIApAQCAtNDQ4LDkgKzUwNyw5IEBACiAJYXRvbWljX2luYygmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0NMT1NFU10pOwogCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAlpZiAoIS0tZGV2LT5vcGVuX2NvdW50KSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmZGV2LT5pb2N0bF9jb3VudCkgfHwgZGV2LT5ibG9ja2VkKSB7Ci0JCQlEUk1fRVJST1IoIkRldmljZSBidXN5OiAlZCAlZFxuIiwKLQkJCQkgIGF0b21pY19yZWFkKCZkZXYtPmlvY3RsX2NvdW50KSwgZGV2LT5ibG9ja2VkKTsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmlvY3RsX2NvdW50KSkgeworCQkJRFJNX0VSUk9SKCJEZXZpY2UgYnVzeTogJWRcbiIsCisJCQkJICBhdG9taWNfcmVhZCgmZGV2LT5pb2N0bF9jb3VudCkpOwogCQkJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKaW5kZXggY2NkMWFmZC4uOWRhNTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCkBAIC02NCw2ICs2NCwxMyBAQAogICogdXAgYXQgYSBsYXRlciBkYXRlLCBhbmQgYXMgb3VyIGludGVyZmFjZSB3aXRoIHNobWZzIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4KICAqLwogCisvKgorICogV2UgbWFrZSB1cCBvZmZzZXRzIGZvciBidWZmZXIgb2JqZWN0cyBzbyB3ZSBjYW4gcmVjb2duaXplIHRoZW0gYXQKKyAqIG1tYXAgdGltZS4KKyAqLworI2RlZmluZSBEUk1fRklMRV9QQUdFX09GRlNFVF9TVEFSVCAoKDB4RkZGRkZGRkZVTCA+PiBQQUdFX1NISUZUKSArIDEpCisjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUX1NJWkUgKCgweEZGRkZGRkZGVUwgPj4gUEFHRV9TSElGVCkgKiAxNikKKwogLyoqCiAgKiBJbml0aWFsaXplIHRoZSBHRU0gZGV2aWNlIGZpZWxkcwogICovCkBAIC03MSw2ICs3OCw4IEBACiBpbnQKIGRybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1fZ2VtX21tICptbTsKKwogCXNwaW5fbG9ja19pbml0KCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOwogCWlkcl9pbml0KCZkZXYtPm9iamVjdF9uYW1lX2lkcik7CiAJYXRvbWljX3NldCgmZGV2LT5vYmplY3RfY291bnQsIDApOwpAQCAtNzksOSArODgsNDEgQEAKIAlhdG9taWNfc2V0KCZkZXYtPnBpbl9tZW1vcnksIDApOwogCWF0b21pY19zZXQoJmRldi0+Z3R0X2NvdW50LCAwKTsKIAlhdG9taWNfc2V0KCZkZXYtPmd0dF9tZW1vcnksIDApOworCisJbW0gPSBkcm1fY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZHJtX2dlbV9tbSksIERSTV9NRU1fTU0pOworCWlmICghbW0pIHsKKwkJRFJNX0VSUk9SKCJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5tbV9wcml2YXRlID0gbW07CisKKwlpZiAoZHJtX2h0X2NyZWF0ZSgmbW0tPm9mZnNldF9oYXNoLCAxOSkpIHsKKwkJZHJtX2ZyZWUobW0sIHNpemVvZihzdHJ1Y3QgZHJtX2dlbV9tbSksIERSTV9NRU1fTU0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoZHJtX21tX2luaXQoJm1tLT5vZmZzZXRfbWFuYWdlciwgRFJNX0ZJTEVfUEFHRV9PRkZTRVRfU1RBUlQsCisJCQlEUk1fRklMRV9QQUdFX09GRlNFVF9TSVpFKSkgeworCQlkcm1fZnJlZShtbSwgc2l6ZW9mKHN0cnVjdCBkcm1fZ2VtX21tKSwgRFJNX01FTV9NTSk7CisJCWRybV9odF9yZW1vdmUoJm1tLT5vZmZzZXRfaGFzaCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCit2b2lkCitkcm1fZ2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBkZXYtPm1tX3ByaXZhdGU7CisKKwlkcm1fbW1fdGFrZWRvd24oJm1tLT5vZmZzZXRfbWFuYWdlcik7CisJZHJtX2h0X3JlbW92ZSgmbW0tPm9mZnNldF9oYXNoKTsKKwlkcm1fZnJlZShtbSwgc2l6ZW9mKHN0cnVjdCBkcm1fZ2VtX21tKSwgRFJNX01FTV9NTSk7CisJZGV2LT5tbV9wcml2YXRlID0gTlVMTDsKK30KKwogLyoqCiAgKiBBbGxvY2F0ZSBhIEdFTSBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBzaXplIHdpdGggc2htZnMgYmFja2luZyBzdG9yZQogICovCkBAIC00MTksMyArNDYwLDczIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKTsKIAorLyoqCisgKiBkcm1fZ2VtX21tYXAgLSBtZW1vcnkgbWFwIHJvdXRpbmUgZm9yIEdFTSBvYmplY3RzCisgKiBAZmlscDogRFJNIGZpbGUgcG9pbnRlcgorICogQHZtYTogVk1BIGZvciB0aGUgYXJlYSB0byBiZSBtYXBwZWQKKyAqCisgKiBJZiBhIGRyaXZlciBzdXBwb3J0cyBHRU0gb2JqZWN0IG1hcHBpbmcsIG1tYXAgY2FsbHMgb24gdGhlIERSTSBmaWxlCisgKiBkZXNjcmlwdG9yIHdpbGwgZW5kIHVwIGhlcmUuCisgKgorICogSWYgd2UgZmluZCB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBvZmZzZXQgcGFzc2VkIGluICh2bWEtPnZtX3Bnb2ZmIHdpbGwKKyAqIGNvbnRhaW4gdGhlIGZha2Ugb2Zmc2V0IHdlIGNyZWF0ZWQgd2hlbiB0aGUgR1RUIG1hcCBpb2N0bCB3YXMgY2FsbGVkIG9uCisgKiB0aGUgb2JqZWN0KSwgd2Ugc2V0IHVwIHRoZSBkcml2ZXIgZmF1bHQgaGFuZGxlciBzbyB0aGF0IGFueSBhY2Nlc3NlcworICogdG8gdGhlIG9iamVjdCBjYW4gYmUgdHJhcHBlZCwgdG8gcGVyZm9ybSBtaWdyYXRpb24sIEdUVCBiaW5kaW5nLCBzdXJmYWNlCisgKiByZWdpc3RlciBhbGxvY2F0aW9uLCBvciBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLgorICovCitpbnQgZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9nZW1fbW0gKm1tID0gZGV2LT5tbV9wcml2YXRlOworCXN0cnVjdCBkcm1fbWFwICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faGFzaF9pdGVtICpoYXNoOworCXVuc2lnbmVkIGxvbmcgcHJvdDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChkcm1faHRfZmluZF9pdGVtKCZtbS0+b2Zmc2V0X2hhc2gsIHZtYS0+dm1fcGdvZmYsICZoYXNoKSkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIGRybV9tbWFwKGZpbHAsIHZtYSk7CisJfQorCisJbWFwID0gZHJtX2hhc2hfZW50cnkoaGFzaCwgc3RydWN0IGRybV9tYXBfbGlzdCwgaGFzaCktPm1hcDsKKwlpZiAoIW1hcCB8fAorCSAgICAoKG1hcC0+ZmxhZ3MgJiBfRFJNX1JFU1RSSUNURUQpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSkgeworCQlyZXQgPSAgLUVQRVJNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogQ2hlY2sgZm9yIHZhbGlkIHNpemUuICovCisJaWYgKG1hcC0+c2l6ZSA8IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJb2JqID0gbWFwLT5oYW5kbGU7CisJaWYgKCFvYmotPmRldi0+ZHJpdmVyLT5nZW1fdm1fb3BzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEIHwgVk1fSU8gfCBWTV9QRk5NQVAgfCBWTV9ET05URVhQQU5EOworCXZtYS0+dm1fb3BzID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKKwl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcC0+aGFuZGxlOworCS8qIEZJWE1FOiB1c2UgcGdwcm90X3dyaXRlY29tYmluZSB3aGVuIGF2YWlsYWJsZSAqLworCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKKyNpZmRlZiBDT05GSUdfWDg2CisJcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKKyNlbmRpZgorCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CisKKwl2bWEtPnZtX2ZpbGUgPSBmaWxwOwkvKiBOZWVkZWQgZm9yIGRybV92bV9vcGVuKCkgKi8KKwlkcm1fdm1fb3Blbl9sb2NrZWQodm1hKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fbW1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2hhc2h0YWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faGFzaHRhYi5jCmluZGV4IDMzMTYwNjcuLmFmNTM5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faGFzaHRhYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faGFzaHRhYi5jCkBAIC0xMjcsNiArMTI3LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9odF9pbnNlcnRfaXRlbSk7CiAKIC8qCiAgKiBKdXN0IGluc2VydCBhbiBpdGVtIGFuZCByZXR1cm4gYW55ICJiaXRzIiBiaXQga2V5IHRoYXQgaGFzbid0IGJlZW4KQEAgLTE4OCw2ICsxODksNyBAQAogCWh0LT5maWxsLS07CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9odF9yZW1vdmVfaXRlbSk7CiAKIHZvaWQgZHJtX2h0X3JlbW92ZShzdHJ1Y3QgZHJtX29wZW5faGFzaCAqaHQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKaW5kZXggMTY4MjlmYi4uMWZhZDc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYwpAQCAtNTMsMTIgKzUzLDEzIEBACiAJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV91bmlxdWUgKnUgPSBkYXRhOworCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIgPSBmaWxlX3ByaXYtPm1hc3RlcjsKIAotCWlmICh1LT51bmlxdWVfbGVuID49IGRldi0+dW5pcXVlX2xlbikgewotCQlpZiAoY29weV90b191c2VyKHUtPnVuaXF1ZSwgZGV2LT51bmlxdWUsIGRldi0+dW5pcXVlX2xlbikpCisJaWYgKHUtPnVuaXF1ZV9sZW4gPj0gbWFzdGVyLT51bmlxdWVfbGVuKSB7CisJCWlmIChjb3B5X3RvX3VzZXIodS0+dW5pcXVlLCBtYXN0ZXItPnVuaXF1ZSwgbWFzdGVyLT51bmlxdWVfbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KLQl1LT51bmlxdWVfbGVuID0gZGV2LT51bmlxdWVfbGVuOworCXUtPnVuaXF1ZV9sZW4gPSBtYXN0ZXItPnVuaXF1ZV9sZW47CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgxLDM2ICs4MiwzOCBAQAogCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fdW5pcXVlICp1ID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gZmlsZV9wcml2LT5tYXN0ZXI7CiAJaW50IGRvbWFpbiwgYnVzLCBzbG90LCBmdW5jLCByZXQ7CiAKLQlpZiAoZGV2LT51bmlxdWVfbGVuIHx8IGRldi0+dW5pcXVlKQorCWlmIChtYXN0ZXItPnVuaXF1ZV9sZW4gfHwgbWFzdGVyLT51bmlxdWUpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoIXUtPnVuaXF1ZV9sZW4gfHwgdS0+dW5pcXVlX2xlbiA+IDEwMjQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGV2LT51bmlxdWVfbGVuID0gdS0+dW5pcXVlX2xlbjsKLQlkZXYtPnVuaXF1ZSA9IGRybV9hbGxvYyh1LT51bmlxdWVfbGVuICsgMSwgRFJNX01FTV9EUklWRVIpOwotCWlmICghZGV2LT51bmlxdWUpCisJbWFzdGVyLT51bmlxdWVfbGVuID0gdS0+dW5pcXVlX2xlbjsKKwltYXN0ZXItPnVuaXF1ZV9zaXplID0gdS0+dW5pcXVlX2xlbiArIDE7CisJbWFzdGVyLT51bmlxdWUgPSBkcm1fYWxsb2MobWFzdGVyLT51bmlxdWVfc2l6ZSwgRFJNX01FTV9EUklWRVIpOworCWlmICghbWFzdGVyLT51bmlxdWUpCiAJCXJldHVybiAtRU5PTUVNOwotCWlmIChjb3B5X2Zyb21fdXNlcihkZXYtPnVuaXF1ZSwgdS0+dW5pcXVlLCBkZXYtPnVuaXF1ZV9sZW4pKQorCWlmIChjb3B5X2Zyb21fdXNlcihtYXN0ZXItPnVuaXF1ZSwgdS0+dW5pcXVlLCBtYXN0ZXItPnVuaXF1ZV9sZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRldi0+dW5pcXVlW2Rldi0+dW5pcXVlX2xlbl0gPSAnXDAnOworCW1hc3Rlci0+dW5pcXVlW21hc3Rlci0+dW5pcXVlX2xlbl0gPSAnXDAnOwogCiAJZGV2LT5kZXZuYW1lID0KIAkgICAgZHJtX2FsbG9jKHN0cmxlbihkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKSArCi0JCSAgICAgIHN0cmxlbihkZXYtPnVuaXF1ZSkgKyAyLCBEUk1fTUVNX0RSSVZFUik7CisJCSAgICAgIHN0cmxlbihtYXN0ZXItPnVuaXF1ZSkgKyAyLCBEUk1fTUVNX0RSSVZFUik7CiAJaWYgKCFkZXYtPmRldm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3ByaW50ZihkZXYtPmRldm5hbWUsICIlc0AlcyIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCi0JCWRldi0+dW5pcXVlKTsKKwkJbWFzdGVyLT51bmlxdWUpOwogCiAJLyogUmV0dXJuIGVycm9yIGlmIHRoZSBidXNpZCBzdWJtaXR0ZWQgZG9lc24ndCBtYXRjaCB0aGUgZGV2aWNlJ3MgYWN0dWFsCiAJICogYnVzaWQuCiAJICovCi0JcmV0ID0gc3NjYW5mKGRldi0+dW5pcXVlLCAiUENJOiVkOiVkOiVkIiwgJmJ1cywgJnNsb3QsICZmdW5jKTsKKwlyZXQgPSBzc2NhbmYobWFzdGVyLT51bmlxdWUsICJQQ0k6JWQ6JWQ6JWQiLCAmYnVzLCAmc2xvdCwgJmZ1bmMpOwogCWlmIChyZXQgIT0gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZG9tYWluID0gYnVzID4+IDg7CkBAIC0xMjUsMzQgKzEyOCwzOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRybV9zZXRfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGRybV9zZXRfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IGZpbGVfcHJpdi0+bWFzdGVyOwogCWludCBsZW47CiAKLQlpZiAoZGV2LT51bmlxdWUgIT0gTlVMTCkKLQkJcmV0dXJuIDA7CisJaWYgKG1hc3Rlci0+dW5pcXVlICE9IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CiAKLQlkZXYtPnVuaXF1ZV9sZW4gPSA0MDsKLQlkZXYtPnVuaXF1ZSA9IGRybV9hbGxvYyhkZXYtPnVuaXF1ZV9sZW4gKyAxLCBEUk1fTUVNX0RSSVZFUik7Ci0JaWYgKGRldi0+dW5pcXVlID09IE5VTEwpCisJbWFzdGVyLT51bmlxdWVfbGVuID0gNDA7CisJbWFzdGVyLT51bmlxdWVfc2l6ZSA9IG1hc3Rlci0+dW5pcXVlX2xlbjsKKwltYXN0ZXItPnVuaXF1ZSA9IGRybV9hbGxvYyhtYXN0ZXItPnVuaXF1ZV9zaXplLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKG1hc3Rlci0+dW5pcXVlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGVuID0gc25wcmludGYoZGV2LT51bmlxdWUsIGRldi0+dW5pcXVlX2xlbiwgInBjaTolMDR4OiUwMng6JTAyeC4lZCIsCi0JCSAgICAgICBkcm1fZ2V0X3BjaV9kb21haW4oZGV2KSwgZGV2LT5wZGV2LT5idXMtPm51bWJlciwKKwlsZW4gPSBzbnByaW50ZihtYXN0ZXItPnVuaXF1ZSwgbWFzdGVyLT51bmlxdWVfbGVuLCAicGNpOiUwNHg6JTAyeDolMDJ4LiVkIiwKKwkJICAgICAgIGRybV9nZXRfcGNpX2RvbWFpbihkZXYpLAorCQkgICAgICAgZGV2LT5wZGV2LT5idXMtPm51bWJlciwKIAkJICAgICAgIFBDSV9TTE9UKGRldi0+cGRldi0+ZGV2Zm4pLAogCQkgICAgICAgUENJX0ZVTkMoZGV2LT5wZGV2LT5kZXZmbikpOwotCi0JaWYgKGxlbiA+IGRldi0+dW5pcXVlX2xlbikKLQkJRFJNX0VSUk9SKCJVbmlxdWUgYnVmZmVyIG92ZXJmbG93ZWRcbiIpOworCWlmIChsZW4gPj0gbWFzdGVyLT51bmlxdWVfbGVuKQorCQlEUk1fRVJST1IoImJ1ZmZlciBvdmVyZmxvdyIpOworCWVsc2UKKwkJbWFzdGVyLT51bmlxdWVfbGVuID0gbGVuOwogCiAJZGV2LT5kZXZuYW1lID0KLQkgICAgZHJtX2FsbG9jKHN0cmxlbihkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKSArIGRldi0+dW5pcXVlX2xlbiArCisJICAgIGRybV9hbGxvYyhzdHJsZW4oZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSkgKyBtYXN0ZXItPnVuaXF1ZV9sZW4gKwogCQkgICAgICAyLCBEUk1fTUVNX0RSSVZFUik7CiAJaWYgKGRldi0+ZGV2bmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwcmludGYoZGV2LT5kZXZuYW1lLCAiJXNAJXMiLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAotCQlkZXYtPnVuaXF1ZSk7CisJCW1hc3Rlci0+dW5pcXVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc2LDcgKzI4Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y291bnRlcnM7IGkrKykgewogCQlpZiAoZGV2LT50eXBlc1tpXSA9PSBfRFJNX1NUQVRfTE9DSykKIAkJCXN0YXRzLT5kYXRhW2ldLnZhbHVlID0KLQkJCSAgICAoZGV2LT5sb2NrLmh3X2xvY2sgPyBkZXYtPmxvY2suaHdfbG9jay0+bG9jayA6IDApOworCQkJICAgIChmaWxlX3ByaXYtPm1hc3Rlci0+bG9jay5od19sb2NrID8gZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaHdfbG9jay0+bG9jayA6IDApOwogCQllbHNlCiAJCQlzdGF0cy0+ZGF0YVtpXS52YWx1ZSA9IGF0b21pY19yZWFkKCZkZXYtPmNvdW50c1tpXSk7CiAJCXN0YXRzLT5kYXRhW2ldLnR5cGUgPSBkZXYtPnR5cGVzW2ldOwpAQCAtMzE4LDcgKzMyNSw3IEBACiAJCQkvKgogCQkJICogVmVyc2lvbiAxLjEgaW5jbHVkZXMgdHlpbmcgb2YgRFJNIHRvIHNwZWNpZmljIGRldmljZQogCQkJICovCi0JCQlkcm1fc2V0X2J1c2lkKGRldik7CisJCQlkcm1fc2V0X2J1c2lkKGRldiwgZmlsZV9wcml2KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggMWU3ODdmOC4uNzI0ZTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC0xMTYsNiArMTE2LDkgQEAKIAkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CiAJZHJtX2ZyZWUoZGV2LT5sYXN0X3ZibGFuaywgc2l6ZW9mKCpkZXYtPmxhc3RfdmJsYW5rKSAqIGRldi0+bnVtX2NydGNzLAogCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+bGFzdF92Ymxhbmtfd2FpdCwKKwkJIHNpemVvZigqZGV2LT5sYXN0X3ZibGFua193YWl0KSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOwogCWRybV9mcmVlKGRldi0+dmJsYW5rX2lubW9kZXNldCwgc2l6ZW9mKCpkZXYtPnZibGFua19pbm1vZGVzZXQpICoKIAkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CiAKQEAgLTE2MSw2ICsxNjQsMTEgQEAKIAlpZiAoIWRldi0+bGFzdF92YmxhbmspCiAJCWdvdG8gZXJyOwogCisJZGV2LT5sYXN0X3ZibGFua193YWl0ID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZih1MzIpLAorCQkJCQkgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPmxhc3RfdmJsYW5rX3dhaXQpCisJCWdvdG8gZXJyOworCiAJZGV2LT52YmxhbmtfaW5tb2Rlc2V0ID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZihpbnQpLAogCQkJCQkgRFJNX01FTV9EUklWRVIpOwogCWlmICghZGV2LT52YmxhbmtfaW5tb2Rlc2V0KQpAQCAtMzA1LDYgKzMxMyw4IEBACiAJY2FzZSBEUk1fSU5TVF9IQU5ETEVSOgogCQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQkJcmV0dXJuIDA7CisJCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQkJcmV0dXJuIDA7CiAJCWlmIChkZXYtPmlmX3ZlcnNpb24gPCBEUk1fSUZfVkVSU0lPTigxLCAyKSAmJgogCQkgICAgY3RsLT5pcnEgIT0gZGV2LT5wZGV2LT5pcnEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxMiw2ICszMjIsOCBAQAogCWNhc2UgRFJNX1VOSU5TVF9IQU5ETEVSOgogCQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQkJcmV0dXJuIDA7CisJCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQkJcmV0dXJuIDA7CiAJCXJldHVybiBkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDI3LDYgKzQzOSw0NSBAQAogRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX3B1dCk7CiAKIC8qKgorICogZHJtX3ZibGFua19wcmVfbW9kZXNldCAtIGFjY291bnQgZm9yIHZibGFua3MgYWNyb3NzIG1vZGUgc2V0cworICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IENSVEMgaW4gcXVlc3Rpb24KKyAqIEBwb3N0OiBwb3N0IG9yIHByZSBtb2RlIHNldD8KKyAqCisgKiBBY2NvdW50IGZvciB2YmxhbmsgZXZlbnRzIGFjcm9zcyBtb2RlIHNldHRpbmcgZXZlbnRzLCB3aGljaCB3aWxsIGxpa2VseQorICogcmVzZXQgdGhlIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIuCisgKi8KK3ZvaWQgZHJtX3ZibGFua19wcmVfbW9kZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwkvKgorCSAqIFRvIGF2b2lkIGFsbCB0aGUgcHJvYmxlbXMgdGhhdCBtaWdodCBoYXBwZW4gaWYgaW50ZXJydXB0cworCSAqIHdlcmUgZW5hYmxlZC9kaXNhYmxlZCBhcm91bmQgb3IgYmV0d2VlbiB0aGVzZSBjYWxscywgd2UganVzdAorCSAqIGhhdmUgdGhlIGtlcm5lbCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBDUlRDIChqdXN0IG9uY2UgdGhvdWdoCisJICogdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgY291bnQgaWYgbXVsdGlwbGUsIG1pc21hdGNoIGNhbGxzIG9jY3VyKSwKKwkgKiBzbyB0aGF0IGludGVycnVwdHMgcmVtYWluIGVuYWJsZWQgaW4gdGhlIGludGVyaW0uCisJICovCisJaWYgKCFkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10pIHsKKwkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMTsKKwkJZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfcHJlX21vZGVzZXQpOworCit2b2lkIGRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlpZiAoZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDE7CisJCWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkJZHJtX3ZibGFua19wdXQoZGV2LCBjcnRjKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KTsKKworLyoqCiAgKiBkcm1fbW9kZXNldF9jdGwgLSBoYW5kbGUgdmJsYW5rIGV2ZW50IGNvdW50ZXIgY2hhbmdlcyBhY3Jvc3MgbW9kZSBzd2l0Y2gKICAqIEBEUk1fSU9DVExfQVJHUzogc3RhbmRhcmQgaW9jdGwgYXJndW1lbnRzCiAgKgpAQCAtNDQxLDcgKzQ5Miw2IEBACiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsICptb2Rlc2V0ID0gZGF0YTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCBjcnRjLCByZXQgPSAwOwogCiAJLyogSWYgZHJtX3ZibGFua19pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwganVzdCBuby1vcCAqLwpAQCAtNDU0LDI4ICs1MDQsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBUbyBhdm9pZCBhbGwgdGhlIHByb2JsZW1zIHRoYXQgbWlnaHQgaGFwcGVuIGlmIGludGVycnVwdHMKLQkgKiB3ZXJlIGVuYWJsZWQvZGlzYWJsZWQgYXJvdW5kIG9yIGJldHdlZW4gdGhlc2UgY2FsbHMsIHdlIGp1c3QKLQkgKiBoYXZlIHRoZSBrZXJuZWwgdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgQ1JUQyAoanVzdCBvbmNlIHRob3VnaAotCSAqIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIGNvdW50IGlmIG11bHRpcGxlLCBtaXNtYXRjaCBjYWxscyBvY2N1ciksCi0JICogc28gdGhhdCBpbnRlcnJ1cHRzIHJlbWFpbiBlbmFibGVkIGluIHRoZSBpbnRlcmltLgotCSAqLwogCXN3aXRjaCAobW9kZXNldC0+Y21kKSB7CiAJY2FzZSBfRFJNX1BSRV9NT0RFU0VUOgotCQlpZiAoIWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSkgewotCQkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMTsKLQkJCWRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7Ci0JCX0KKwkJZHJtX3ZibGFua19wcmVfbW9kZXNldChkZXYsIGNydGMpOwogCQlicmVhazsKIAljYXNlIF9EUk1fUE9TVF9NT0RFU0VUOgotCQlpZiAoZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwotCQkJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKLQkJCWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSA9IDA7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Ci0JCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOwotCQl9CisJCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgY3J0Yyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC02MTYsNiArNjUwLDcgQEAKIAl9IGVsc2UgewogCQlEUk1fREVCVUcoIndhaXRpbmcgb24gdmJsYW5rIGNvdW50ICVkLCBjcnRjICVkXG4iLAogCQkJICB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlLCBjcnRjKTsKKwkJZGV2LT5sYXN0X3ZibGFua193YWl0W2NydGNdID0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZTsKIAkJRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZVtjcnRjXSwgMyAqIERSTV9IWiwKIAkJCSAgICAoKGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKQogCQkJICAgICAgLSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbG9jay5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKaW5kZXggMWNmYTcyMC4uNDZlN2IyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9sb2NrLmMKQEAgLTUyLDYgKzUyLDcgQEAKIHsKIAlERUNMQVJFX1dBSVRRVUVVRShlbnRyeSwgY3VycmVudCk7CiAJc3RydWN0IGRybV9sb2NrICpsb2NrID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gZmlsZV9wcml2LT5tYXN0ZXI7CiAJaW50IHJldCA9IDA7CiAKIAkrK2ZpbGVfcHJpdi0+bG9ja19jb3VudDsKQEAgLTY0LDI2ICs2NSwyNyBAQAogCiAJRFJNX0RFQlVHKCIlZCAocGlkICVkKSByZXF1ZXN0cyBsb2NrICgweCUwOHgpLCBmbGFncyA9IDB4JTA4eFxuIiwKIAkJICBsb2NrLT5jb250ZXh0LCB0YXNrX3BpZF9ucihjdXJyZW50KSwKLQkJICBkZXYtPmxvY2suaHdfbG9jay0+bG9jaywgbG9jay0+ZmxhZ3MpOworCQkgIG1hc3Rlci0+bG9jay5od19sb2NrLT5sb2NrLCBsb2NrLT5mbGFncyk7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9ETUFfUVVFVUUpKQogCQlpZiAobG9jay0+Y29udGV4dCA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkZF93YWl0X3F1ZXVlKCZkZXYtPmxvY2subG9ja19xdWV1ZSwgJmVudHJ5KTsKLQlzcGluX2xvY2tfYmgoJmRldi0+bG9jay5zcGlubG9jayk7Ci0JZGV2LT5sb2NrLnVzZXJfd2FpdGVycysrOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmxvY2suc3BpbmxvY2spOworCWFkZF93YWl0X3F1ZXVlKCZtYXN0ZXItPmxvY2subG9ja19xdWV1ZSwgJmVudHJ5KTsKKwlzcGluX2xvY2tfYmgoJm1hc3Rlci0+bG9jay5zcGlubG9jayk7CisJbWFzdGVyLT5sb2NrLnVzZXJfd2FpdGVycysrOworCXNwaW5fdW5sb2NrX2JoKCZtYXN0ZXItPmxvY2suc3BpbmxvY2spOworCiAJZm9yICg7OykgewogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghZGV2LT5sb2NrLmh3X2xvY2spIHsKKwkJaWYgKCFtYXN0ZXItPmxvY2suaHdfbG9jaykgewogCQkJLyogRGV2aWNlIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCAqLwogCQkJcmV0ID0gLUVJTlRSOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGRybV9sb2NrX3Rha2UoJmRldi0+bG9jaywgbG9jay0+Y29udGV4dCkpIHsKLQkJCWRldi0+bG9jay5maWxlX3ByaXYgPSBmaWxlX3ByaXY7Ci0JCQlkZXYtPmxvY2subG9ja190aW1lID0gamlmZmllczsKKwkJaWYgKGRybV9sb2NrX3Rha2UoJm1hc3Rlci0+bG9jaywgbG9jay0+Y29udGV4dCkpIHsKKwkJCW1hc3Rlci0+bG9jay5maWxlX3ByaXYgPSBmaWxlX3ByaXY7CisJCQltYXN0ZXItPmxvY2subG9ja190aW1lID0gamlmZmllczsKIAkJCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9MT0NLU10pOwogCQkJYnJlYWs7CS8qIEdvdCBsb2NrICovCiAJCX0KQEAgLTk1LDExICs5NywxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPmxvY2suc3BpbmxvY2spOwotCWRldi0+bG9jay51c2VyX3dhaXRlcnMtLTsKLQlzcGluX3VubG9ja19iaCgmZGV2LT5sb2NrLnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJm1hc3Rlci0+bG9jay5zcGlubG9jayk7CisJbWFzdGVyLT5sb2NrLnVzZXJfd2FpdGVycy0tOworCXNwaW5fdW5sb2NrX2JoKCZtYXN0ZXItPmxvY2suc3BpbmxvY2spOwogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT5sb2NrLmxvY2tfcXVldWUsICZlbnRyeSk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJm1hc3Rlci0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwogCiAJRFJNX0RFQlVHKCIlZCAlc1xuIiwgbG9jay0+Y29udGV4dCwKIAkJICByZXQgPyAiaW50ZXJydXB0ZWQiIDogImhhcyBsb2NrIik7CkBAIC0xMDgsMTQgKzExMCwxNCBAQAogCS8qIGRvbid0IHNldCB0aGUgYmxvY2sgYWxsIHNpZ25hbHMgb24gdGhlIG1hc3RlciBwcm9jZXNzIGZvciBub3cgCiAJICogcmVhbGx5IHByb2JhYmx5IG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIgYnV0IGxldHMgdXMgZGVidWcgeGtiCiAgCSAqIHhzZXJ2ZXIgZm9yIG5vdyAqLwotCWlmICghZmlsZV9wcml2LT5tYXN0ZXIpIHsKKwlpZiAoIWZpbGVfcHJpdi0+aXNfbWFzdGVyKSB7CiAJCXNpZ2VtcHR5c2V0KCZkZXYtPnNpZ21hc2spOwogCQlzaWdhZGRzZXQoJmRldi0+c2lnbWFzaywgU0lHU1RPUCk7CiAJCXNpZ2FkZHNldCgmZGV2LT5zaWdtYXNrLCBTSUdUU1RQKTsKIAkJc2lnYWRkc2V0KCZkZXYtPnNpZ21hc2ssIFNJR1RUSU4pOwogCQlzaWdhZGRzZXQoJmRldi0+c2lnbWFzaywgU0lHVFRPVSk7CiAJCWRldi0+c2lnZGF0YS5jb250ZXh0ID0gbG9jay0+Y29udGV4dDsKLQkJZGV2LT5zaWdkYXRhLmxvY2sgPSBkZXYtPmxvY2suaHdfbG9jazsKKwkJZGV2LT5zaWdkYXRhLmxvY2sgPSBtYXN0ZXItPmxvY2suaHdfbG9jazsKIAkJYmxvY2tfYWxsX3NpZ25hbHMoZHJtX25vdGlmaWVyLCAmZGV2LT5zaWdkYXRhLCAmZGV2LT5zaWdtYXNrKTsKIAl9CiAKQEAgLTE1NCw2ICsxNTYsNyBAQAogaW50IGRybV91bmxvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IGRybV9sb2NrICpsb2NrID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyID0gZmlsZV9wcml2LT5tYXN0ZXI7CiAKIAlpZiAobG9jay0+Y29udGV4dCA9PSBEUk1fS0VSTkVMX0NPTlRFWFQpIHsKIAkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHVzaW5nIGtlcm5lbCBjb250ZXh0ICVkXG4iLApAQCAtMTY5LDcgKzE3Miw3IEBACiAJaWYgKGRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKQogCQlkZXYtPmRyaXZlci0+a2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jayhkZXYpOwogCWVsc2UgewotCQlpZiAoZHJtX2xvY2tfZnJlZSgmZGV2LT5sb2NrLGxvY2stPmNvbnRleHQpKSB7CisJCWlmIChkcm1fbG9ja19mcmVlKCZtYXN0ZXItPmxvY2ssIGxvY2stPmNvbnRleHQpKSB7CiAJCQkvKiBGSVhNRTogU2hvdWxkIHJlYWxseSBiYWlsIG91dCBoZXJlLiAqLwogCQl9CiAJfQpAQCAtMzc5LDkgKzM4MiwxMCBAQAogCiBpbnQgZHJtX2lfaGF2ZV9od19sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCXJldHVybiAoZmlsZV9wcml2LT5sb2NrX2NvdW50ICYmIGRldi0+bG9jay5od19sb2NrICYmCi0JCV9EUk1fTE9DS19JU19IRUxEKGRldi0+bG9jay5od19sb2NrLT5sb2NrKSAmJgotCQlkZXYtPmxvY2suZmlsZV9wcml2ID09IGZpbGVfcHJpdik7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IGZpbGVfcHJpdi0+bWFzdGVyOworCXJldHVybiAoZmlsZV9wcml2LT5sb2NrX2NvdW50ICYmIG1hc3Rlci0+bG9jay5od19sb2NrICYmCisJCV9EUk1fTE9DS19JU19IRUxEKG1hc3Rlci0+bG9jay5od19sb2NrLT5sb2NrKSAmJgorCQltYXN0ZXItPmxvY2suZmlsZV9wcml2ID09IGZpbGVfcHJpdik7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHJtX2lfaGF2ZV9od19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCAyMTdhZDdkLi4zNjdjNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCkBAIC0yOTYsMyArMjk2LDQgQEAKIAogCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9NTSk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9tbV90YWtlZG93bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliODBmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwpAQCAtMCwwICsxLDU3NiBAQAorLyoKKyAqIFRoZSBsaXN0X3NvcnQgZnVuY3Rpb24gaXMgKHByZXN1bWFibHkpIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgKHNlZSB0aGUKKyAqIHRvcCBsZXZlbCAiQ09QWUlORyIgZmlsZSBmb3IgZGV0YWlscykuCisgKgorICogVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXM6CisgKgorICogQ29weXJpZ2h0IMKpIDE5OTctMjAwMyBieSBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNyBEYXZlIEFpcmxpZQorICogQ29weXJpZ2h0IMKpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIocykKKyAqIGFuZCBhdXRob3Iocykgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUKKyAqIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSBhbmQgYXV0aG9yKHMpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisKKy8qKgorICogZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSAtIGRlYnVnIHByaW50IGEgbW9kZQorICogQGRldjogRFJNIGRldmljZQorICogQG1vZGU6IG1vZGUgdG8gcHJpbnQKKyAqCisgKiBMT0NLSU5HOgorICogTm9uZS4KKyAqCisgKiBEZXNjcmliZSBAbW9kZSB1c2luZyBEUk1fREVCVUcuCisgKi8KK3ZvaWQgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlEUk1fREVCVUcoIk1vZGVsaW5lICVkOlwiJXNcIiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAweCV4IDB4JXhcbiIsCisJCSAgbW9kZS0+YmFzZS5pZCwgbW9kZS0+bmFtZSwgbW9kZS0+dnJlZnJlc2gsIG1vZGUtPmNsb2NrLAorCQkgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT5oc3luY19zdGFydCwKKwkJICBtb2RlLT5oc3luY19lbmQsIG1vZGUtPmh0b3RhbCwKKwkJICBtb2RlLT52ZGlzcGxheSwgbW9kZS0+dnN5bmNfc3RhcnQsCisJCSAgbW9kZS0+dnN5bmNfZW5kLCBtb2RlLT52dG90YWwsIG1vZGUtPnR5cGUsIG1vZGUtPmZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZSk7CisKKy8qKgorICogZHJtX21vZGVfc2V0X25hbWUgLSBzZXQgdGhlIG5hbWUgb24gYSBtb2RlCisgKiBAbW9kZTogbmFtZSB3aWxsIGJlIHNldCBpbiB0aGlzIG1vZGUKKyAqCisgKiBMT0NLSU5HOgorICogTm9uZS4KKyAqCisgKiBTZXQgdGhlIG5hbWUgb2YgQG1vZGUgdG8gYSBzdGFuZGFyZCBmb3JtYXQuCisgKi8KK3ZvaWQgZHJtX21vZGVfc2V0X25hbWUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc25wcmludGYobW9kZS0+bmFtZSwgRFJNX0RJU1BMQVlfTU9ERV9MRU4sICIlZHglZCIsIG1vZGUtPmhkaXNwbGF5LAorCQkgbW9kZS0+dmRpc3BsYXkpOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9zZXRfbmFtZSk7CisKKy8qKgorICogZHJtX21vZGVfbGlzdF9jb25jYXQgLSBtb3ZlIG1vZGVzIGZyb20gb25lIGxpc3QgdG8gYW5vdGhlcgorICogQGhlYWQ6IHNvdXJjZSBsaXN0CisgKiBAbmV3OiBkc3QgbGlzdAorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgYm90aCBsaXN0cyBhcmUgbG9ja2VkLgorICoKKyAqIE1vdmUgYWxsIHRoZSBtb2RlcyBmcm9tIEBoZWFkIHRvIEBuZXcuCisgKi8KK3ZvaWQgZHJtX21vZGVfbGlzdF9jb25jYXQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqbmV3KQoreworCisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgaGVhZCkgeworCQlsaXN0X21vdmVfdGFpbChlbnRyeSwgbmV3KTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2xpc3RfY29uY2F0KTsKKworLyoqCisgKiBkcm1fbW9kZV93aWR0aCAtIGdldCB0aGUgd2lkdGggb2YgYSBtb2RlCisgKiBAbW9kZTogbW9kZQorICoKKyAqIExPQ0tJTkc6CisgKiBOb25lLgorICoKKyAqIFJldHVybiBAbW9kZSdzIHdpZHRoIChoZGlzcGxheSkgdmFsdWUuCisgKgorICogRklYTUU6IGlzIHRoaXMgbmVlZGVkPworICoKKyAqIFJFVFVSTlM6CisgKiBAbW9kZS0+aGRpc3BsYXkKKyAqLworaW50IGRybV9tb2RlX3dpZHRoKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXJldHVybiBtb2RlLT5oZGlzcGxheTsKKworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV93aWR0aCk7CisKKy8qKgorICogZHJtX21vZGVfaGVpZ2h0IC0gZ2V0IHRoZSBoZWlnaHQgb2YgYSBtb2RlCisgKiBAbW9kZTogbW9kZQorICoKKyAqIExPQ0tJTkc6CisgKiBOb25lLgorICoKKyAqIFJldHVybiBAbW9kZSdzIGhlaWdodCAodmRpc3BsYXkpIHZhbHVlLgorICoKKyAqIEZJWE1FOiBpcyB0aGlzIG5lZWRlZD8KKyAqCisgKiBSRVRVUk5TOgorICogQG1vZGUtPnZkaXNwbGF5CisgKi8KK2ludCBkcm1fbW9kZV9oZWlnaHQoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJcmV0dXJuIG1vZGUtPnZkaXNwbGF5OworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9oZWlnaHQpOworCisvKioKKyAqIGRybV9tb2RlX3ZyZWZyZXNoIC0gZ2V0IHRoZSB2cmVmcmVzaCBvZiBhIG1vZGUKKyAqIEBtb2RlOiBtb2RlCisgKgorICogTE9DS0lORzoKKyAqIE5vbmUuCisgKgorICogUmV0dXJuIEBtb2RlJ3MgdnJlZnJlc2ggcmF0ZSBvciBjYWxjdWxhdGUgaXQgaWYgbmVjZXNzYXJ5LgorICoKKyAqIEZJWE1FOiB3aHkgaXMgdGhpcyBuZWVkZWQ/ICBzaG91bGRuJ3QgdnJlZnJlc2ggYmUgc2V0IGFscmVhZHk/CisgKgorICogUkVUVVJOUzoKKyAqIFZlcnRpY2FsIHJlZnJlc2ggcmF0ZSBvZiBAbW9kZSB4IDEwMDAuIEZvciBwcmVjaXNpb24gcmVhc29ucy4KKyAqLworaW50IGRybV9tb2RlX3ZyZWZyZXNoKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZWZyZXNoID0gMDsKKwl1bnNpZ25lZCBpbnQgY2FsY192YWw7CisKKwlpZiAobW9kZS0+dnJlZnJlc2ggPiAwKQorCQlyZWZyZXNoID0gbW9kZS0+dnJlZnJlc2g7CisJZWxzZSBpZiAobW9kZS0+aHRvdGFsID4gMCAmJiBtb2RlLT52dG90YWwgPiAwKSB7CisJCS8qIHdvcmsgb3V0IHZyZWZyZXNoIHRoZSB2YWx1ZSB3aWxsIGJlIHgxMDAwICovCisJCWNhbGNfdmFsID0gKG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwkJY2FsY192YWwgLz0gbW9kZS0+aHRvdGFsOworCQljYWxjX3ZhbCAqPSAxMDAwOworCQljYWxjX3ZhbCAvPSBtb2RlLT52dG90YWw7CisKKwkJcmVmcmVzaCA9IGNhbGNfdmFsOworCQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJCXJlZnJlc2ggKj0gMjsKKwkJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQkJcmVmcmVzaCAvPSAyOworCQlpZiAobW9kZS0+dnNjYW4gPiAxKQorCQkJcmVmcmVzaCAvPSBtb2RlLT52c2NhbjsKKwl9CisJcmV0dXJuIHJlZnJlc2g7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX3ZyZWZyZXNoKTsKKworLyoqCisgKiBkcm1fbW9kZV9zZXRfY3J0Y2luZm8gLSBzZXQgQ1JUQyBtb2Rlc2V0dGluZyBwYXJhbWV0ZXJzCisgKiBAcDogbW9kZQorICogQGFkanVzdF9mbGFnczogdW51c2VkPyAoRklYTUUpCisgKgorICogTE9DS0lORzoKKyAqIE5vbmUuCisgKgorICogU2V0dXAgdGhlIENSVEMgbW9kZXNldHRpbmcgcGFyYW1ldGVycyBmb3IgQHAsIGFkanVzdGluZyBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQgZHJtX21vZGVfc2V0X2NydGNpbmZvKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwLCBpbnQgYWRqdXN0X2ZsYWdzKQoreworCWlmICgocCA9PSBOVUxMKSB8fCAoKHAtPnR5cGUgJiBEUk1fTU9ERV9UWVBFX0NSVENfQykgPT0gRFJNX01PREVfVFlQRV9CVUlMVElOKSkKKwkJcmV0dXJuOworCisJcC0+Y3J0Y19oZGlzcGxheSA9IHAtPmhkaXNwbGF5OworCXAtPmNydGNfaHN5bmNfc3RhcnQgPSBwLT5oc3luY19zdGFydDsKKwlwLT5jcnRjX2hzeW5jX2VuZCA9IHAtPmhzeW5jX2VuZDsKKwlwLT5jcnRjX2h0b3RhbCA9IHAtPmh0b3RhbDsKKwlwLT5jcnRjX2hza2V3ID0gcC0+aHNrZXc7CisJcC0+Y3J0Y192ZGlzcGxheSA9IHAtPnZkaXNwbGF5OworCXAtPmNydGNfdnN5bmNfc3RhcnQgPSBwLT52c3luY19zdGFydDsKKwlwLT5jcnRjX3ZzeW5jX2VuZCA9IHAtPnZzeW5jX2VuZDsKKwlwLT5jcnRjX3Z0b3RhbCA9IHAtPnZ0b3RhbDsKKworCWlmIChwLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7CisJCWlmIChhZGp1c3RfZmxhZ3MgJiBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKSB7CisJCQlwLT5jcnRjX3ZkaXNwbGF5IC89IDI7CisJCQlwLT5jcnRjX3ZzeW5jX3N0YXJ0IC89IDI7CisJCQlwLT5jcnRjX3ZzeW5jX2VuZCAvPSAyOworCQkJcC0+Y3J0Y192dG90YWwgLz0gMjsKKwkJfQorCisJCXAtPmNydGNfdnRvdGFsIHw9IDE7CisJfQorCisJaWYgKHAtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKSB7CisJCXAtPmNydGNfdmRpc3BsYXkgKj0gMjsKKwkJcC0+Y3J0Y192c3luY19zdGFydCAqPSAyOworCQlwLT5jcnRjX3ZzeW5jX2VuZCAqPSAyOworCQlwLT5jcnRjX3Z0b3RhbCAqPSAyOworCX0KKworCWlmIChwLT52c2NhbiA+IDEpIHsKKwkJcC0+Y3J0Y192ZGlzcGxheSAqPSBwLT52c2NhbjsKKwkJcC0+Y3J0Y192c3luY19zdGFydCAqPSBwLT52c2NhbjsKKwkJcC0+Y3J0Y192c3luY19lbmQgKj0gcC0+dnNjYW47CisJCXAtPmNydGNfdnRvdGFsICo9IHAtPnZzY2FuOworCX0KKworCXAtPmNydGNfdmJsYW5rX3N0YXJ0ID0gbWluKHAtPmNydGNfdnN5bmNfc3RhcnQsIHAtPmNydGNfdmRpc3BsYXkpOworCXAtPmNydGNfdmJsYW5rX2VuZCA9IG1heChwLT5jcnRjX3ZzeW5jX2VuZCwgcC0+Y3J0Y192dG90YWwpOworCXAtPmNydGNfaGJsYW5rX3N0YXJ0ID0gbWluKHAtPmNydGNfaHN5bmNfc3RhcnQsIHAtPmNydGNfaGRpc3BsYXkpOworCXAtPmNydGNfaGJsYW5rX2VuZCA9IG1heChwLT5jcnRjX2hzeW5jX2VuZCwgcC0+Y3J0Y19odG90YWwpOworCisJcC0+Y3J0Y19oYWRqdXN0ZWQgPSBmYWxzZTsKKwlwLT5jcnRjX3ZhZGp1c3RlZCA9IGZhbHNlOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9zZXRfY3J0Y2luZm8pOworCisKKy8qKgorICogZHJtX21vZGVfZHVwbGljYXRlIC0gYWxsb2NhdGUgYW5kIGR1cGxpY2F0ZSBhbiBleGlzdGluZyBtb2RlCisgKiBAbTogbW9kZSB0byBkdXBsaWNhdGUKKyAqCisgKiBMT0NLSU5HOgorICogTm9uZS4KKyAqCisgKiBKdXN0IGFsbG9jYXRlIGEgbmV3IG1vZGUsIGNvcHkgdGhlIGV4aXN0aW5nIG1vZGUgaW50byBpdCwgYW5kIHJldHVybgorICogYSBwb2ludGVyIHRvIGl0LiAgVXNlZCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiBlc3RhYmxpc2hlZCBtb2Rlcy4KKyAqLworc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlX2R1cGxpY2F0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5tb2RlOworCWludCBuZXdfaWQ7CisKKwlubW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOworCWlmICghbm1vZGUpCisJCXJldHVybiBOVUxMOworCisJbmV3X2lkID0gbm1vZGUtPmJhc2UuaWQ7CisJKm5tb2RlID0gKm1vZGU7CisJbm1vZGUtPmJhc2UuaWQgPSBuZXdfaWQ7CisJSU5JVF9MSVNUX0hFQUQoJm5tb2RlLT5oZWFkKTsKKwlyZXR1cm4gbm1vZGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2R1cGxpY2F0ZSk7CisKKy8qKgorICogZHJtX21vZGVfZXF1YWwgLSB0ZXN0IG1vZGVzIGZvciBlcXVhbGl0eQorICogQG1vZGUxOiBmaXJzdCBtb2RlCisgKiBAbW9kZTI6IHNlY29uZCBtb2RlCisgKgorICogTE9DS0lORzoKKyAqIE5vbmUuCisgKgorICogQ2hlY2sgdG8gc2VlIGlmIEBtb2RlMSBhbmQgQG1vZGUyIGFyZSBlcXVpdmFsZW50LgorICoKKyAqIFJFVFVSTlM6CisgKiBUcnVlIGlmIHRoZSBtb2RlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCBkcm1fbW9kZV9lcXVhbChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMikKK3sKKwkvKiBkbyBjbG9jayBjaGVjayBjb252ZXJ0IHRvIFBJQ09TIHNvIGZiIG1vZGVzIGdldCBtYXRjaGVkCisJICogdGhlIHNhbWUgKi8KKwlpZiAobW9kZTEtPmNsb2NrICYmIG1vZGUyLT5jbG9jaykgeworCQlpZiAoS0haMlBJQ09TKG1vZGUxLT5jbG9jaykgIT0gS0haMlBJQ09TKG1vZGUyLT5jbG9jaykpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChtb2RlMS0+Y2xvY2sgIT0gbW9kZTItPmNsb2NrKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobW9kZTEtPmhkaXNwbGF5ID09IG1vZGUyLT5oZGlzcGxheSAmJgorCSAgICBtb2RlMS0+aHN5bmNfc3RhcnQgPT0gbW9kZTItPmhzeW5jX3N0YXJ0ICYmCisJICAgIG1vZGUxLT5oc3luY19lbmQgPT0gbW9kZTItPmhzeW5jX2VuZCAmJgorCSAgICBtb2RlMS0+aHRvdGFsID09IG1vZGUyLT5odG90YWwgJiYKKwkgICAgbW9kZTEtPmhza2V3ID09IG1vZGUyLT5oc2tldyAmJgorCSAgICBtb2RlMS0+dmRpc3BsYXkgPT0gbW9kZTItPnZkaXNwbGF5ICYmCisJICAgIG1vZGUxLT52c3luY19zdGFydCA9PSBtb2RlMi0+dnN5bmNfc3RhcnQgJiYKKwkgICAgbW9kZTEtPnZzeW5jX2VuZCA9PSBtb2RlMi0+dnN5bmNfZW5kICYmCisJICAgIG1vZGUxLT52dG90YWwgPT0gbW9kZTItPnZ0b3RhbCAmJgorCSAgICBtb2RlMS0+dnNjYW4gPT0gbW9kZTItPnZzY2FuICYmCisJICAgIG1vZGUxLT5mbGFncyA9PSBtb2RlMi0+ZmxhZ3MpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9lcXVhbCk7CisKKy8qKgorICogZHJtX21vZGVfdmFsaWRhdGVfc2l6ZSAtIG1ha2Ugc3VyZSBtb2RlcyBhZGhlcmUgdG8gc2l6ZSBjb25zdHJhaW50cworICogQGRldjogRFJNIGRldmljZQorICogQG1vZGVfbGlzdDogbGlzdCBvZiBtb2RlcyB0byBjaGVjaworICogQG1heFg6IG1heGltdW0gd2lkdGgKKyAqIEBtYXhZOiBtYXhpbXVtIGhlaWdodAorICogQG1heFBpdGNoOiBtYXggcGl0Y2gKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBhIGxvY2sgcHJvdGVjdGluZyBAbW9kZV9saXN0LgorICoKKyAqIFRoZSBEUk0gZGV2aWNlIChAZGV2KSBoYXMgc2l6ZSBhbmQgcGl0Y2ggbGltaXRzLiAgSGVyZSB3ZSB2YWxpZGF0ZSB0aGUKKyAqIG1vZGVzIHdlIHByb2JlZCBmb3IgQGRldiBhZ2FpbnN0IHRob3NlIGxpbWl0cyBhbmQgc2V0IHRoZWlyIHN0YXR1cyBhcworICogbmVjZXNzYXJ5LgorICovCit2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX3NpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICptb2RlX2xpc3QsCisJCQkgICAgaW50IG1heFgsIGludCBtYXhZLCBpbnQgbWF4UGl0Y2gpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsIG1vZGVfbGlzdCwgaGVhZCkgeworCQlpZiAobWF4UGl0Y2ggPiAwICYmIG1vZGUtPmhkaXNwbGF5ID4gbWF4UGl0Y2gpCisJCQltb2RlLT5zdGF0dXMgPSBNT0RFX0JBRF9XSURUSDsKKworCQlpZiAobWF4WCA+IDAgJiYgbW9kZS0+aGRpc3BsYXkgPiBtYXhYKQorCQkJbW9kZS0+c3RhdHVzID0gTU9ERV9WSVJUVUFMX1g7CisKKwkJaWYgKG1heFkgPiAwICYmIG1vZGUtPnZkaXNwbGF5ID4gbWF4WSkKKwkJCW1vZGUtPnN0YXR1cyA9IE1PREVfVklSVFVBTF9ZOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfdmFsaWRhdGVfc2l6ZSk7CisKKy8qKgorICogZHJtX21vZGVfdmFsaWRhdGVfY2xvY2tzIC0gdmFsaWRhdGUgbW9kZXMgYWdhaW5zdCBjbG9jayBsaW1pdHMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBtb2RlX2xpc3Q6IGxpc3Qgb2YgbW9kZXMgdG8gY2hlY2sKKyAqIEBtaW46IG1pbmltdW0gY2xvY2sgcmF0ZSBhcnJheQorICogQG1heDogbWF4aW11bSBjbG9jayByYXRlIGFycmF5CisgKiBAbl9yYW5nZXM6IG51bWJlciBvZiBjbG9jayByYW5nZXMgKHNpemUgb2YgYXJyYXlzKQorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIGEgbG9jayBwcm90ZWN0aW5nIEBtb2RlX2xpc3QuCisgKgorICogU29tZSBjb2RlIG1heSBuZWVkIHRvIGNoZWNrIGEgbW9kZSBsaXN0IGFnYWluc3QgdGhlIGNsb2NrIGxpbWl0cyBvZiB0aGUKKyAqIGRldmljZSBpbiBxdWVzdGlvbi4gIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIG1vZGUgbGlzdCwgdGVzdGluZyB0byBtYWtlCisgKiBzdXJlIGVhY2ggbW9kZSBmYWxscyB3aXRoaW4gYSBnaXZlbiByYW5nZSAoZGVmaW5lZCBieSBAbWluIGFuZCBAbWF4CisgKiBhcnJheXMpIGFuZCBzZXRzIEBtb2RlLT5zdGF0dXMgYXMgbmVlZGVkLgorICovCit2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2Nsb2NrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbW9kZV9saXN0LAorCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgbl9yYW5nZXMpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsIG1vZGVfbGlzdCwgaGVhZCkgeworCQlib29sIGdvb2QgPSBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8IG5fcmFuZ2VzOyBpKyspIHsKKwkJCWlmIChtb2RlLT5jbG9jayA+PSBtaW5baV0gJiYgbW9kZS0+Y2xvY2sgPD0gbWF4W2ldKSB7CisJCQkJZ29vZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFnb29kKQorCQkJbW9kZS0+c3RhdHVzID0gTU9ERV9DTE9DS19SQU5HRTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX3ZhbGlkYXRlX2Nsb2Nrcyk7CisKKy8qKgorICogZHJtX21vZGVfcHJ1bmVfaW52YWxpZCAtIHJlbW92ZSBpbnZhbGlkIG1vZGVzIGZyb20gbW9kZSBsaXN0CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAbW9kZV9saXN0OiBsaXN0IG9mIG1vZGVzIHRvIGNoZWNrCisgKiBAdmVyYm9zZTogYmUgdmVyYm9zZSBhYm91dCBpdAorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZXIgbXVzdCBob2xkIGEgbG9jayBwcm90ZWN0aW5nIEBtb2RlX2xpc3QuCisgKgorICogT25jZSBtb2RlIGxpc3QgZ2VuZXJhdGlvbiBpcyBjb21wbGV0ZSwgYSBjYWxsZXIgY2FuIHVzZSB0aGlzIHJvdXRpbmUgdG8KKyAqIHJlbW92ZSBpbnZhbGlkIG1vZGVzIGZyb20gYSBtb2RlIGxpc3QuICBJZiBhbnkgb2YgdGhlIG1vZGVzIGhhdmUgYQorICogc3RhdHVzIG90aGVyIHRoYW4gJU1PREVfT0ssIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBAbW9kZV9saXN0IGFuZCBmcmVlZC4KKyAqLwordm9pZCBkcm1fbW9kZV9wcnVuZV9pbnZhbGlkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbW9kZV9saXN0LCBib29sIHZlcmJvc2UpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsIG1vZGVfbGlzdCwgaGVhZCkgeworCQlpZiAobW9kZS0+c3RhdHVzICE9IE1PREVfT0spIHsKKwkJCWxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKKwkJCWlmICh2ZXJib3NlKSB7CisJCQkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKKwkJCQlEUk1fREVCVUcoIk5vdCB1c2luZyAlcyBtb2RlICVkXG4iLCBtb2RlLT5uYW1lLCBtb2RlLT5zdGF0dXMpOworCQkJfQorCQkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9wcnVuZV9pbnZhbGlkKTsKKworLyoqCisgKiBkcm1fbW9kZV9jb21wYXJlIC0gY29tcGFyZSBtb2RlcyBmb3IgZmF2b3JhYmlsaXR5CisgKiBAbGhfYTogbGlzdF9oZWFkIGZvciBmaXJzdCBtb2RlCisgKiBAbGhfYjogbGlzdF9oZWFkIGZvciBzZWNvbmQgbW9kZQorICoKKyAqIExPQ0tJTkc6CisgKiBOb25lLgorICoKKyAqIENvbXBhcmUgdHdvIG1vZGVzLCBnaXZlbiBieSBAbGhfYSBhbmQgQGxoX2IsIHJldHVybmluZyBhIHZhbHVlIGluZGljYXRpbmcKKyAqIHdoaWNoIGlzIGJldHRlci4KKyAqCisgKiBSRVRVUk5TOgorICogTmVnYXRpdmUgaWYgQGxoX2EgaXMgYmV0dGVyIHRoYW4gQGxoX2IsIHplcm8gaWYgdGhleSdyZSBlcXVpdmFsZW50LCBvcgorICogcG9zaXRpdmUgaWYgQGxoX2IgaXMgYmV0dGVyIHRoYW4gQGxoX2EuCisgKi8KK3N0YXRpYyBpbnQgZHJtX21vZGVfY29tcGFyZShzdHJ1Y3QgbGlzdF9oZWFkICpsaF9hLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaF9iKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphID0gbGlzdF9lbnRyeShsaF9hLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmIgPSBsaXN0X2VudHJ5KGxoX2IsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlLCBoZWFkKTsKKwlpbnQgZGlmZjsKKworCWRpZmYgPSAoKGItPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkgIT0gMCkgLQorCQkoKGEtPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkgIT0gMCk7CisJaWYgKGRpZmYpCisJCXJldHVybiBkaWZmOworCWRpZmYgPSBiLT5oZGlzcGxheSAqIGItPnZkaXNwbGF5IC0gYS0+aGRpc3BsYXkgKiBhLT52ZGlzcGxheTsKKwlpZiAoZGlmZikKKwkJcmV0dXJuIGRpZmY7CisJZGlmZiA9IGItPmNsb2NrIC0gYS0+Y2xvY2s7CisJcmV0dXJuIGRpZmY7Cit9CisKKy8qIEZJWE1FOiB3aGF0IHdlIGRvbid0IGhhdmUgYSBsaXN0IHNvcnQgZnVuY3Rpb24/ICovCisvKiBsaXN0IHNvcnQgZnJvbSBNYXJrIEogUm9iZXJ0cyAobWpyQHpuZXgub3JnKSAqLwordm9pZCBsaXN0X3NvcnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkgICAgICAgaW50ICgqY21wKShzdHJ1Y3QgbGlzdF9oZWFkICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpiKSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSwgKmUsICpsaXN0LCAqdGFpbCwgKm9sZGhlYWQ7CisJaW50IGluc2l6ZSwgbm1lcmdlcywgcHNpemUsIHFzaXplLCBpOworCisJbGlzdCA9IGhlYWQtPm5leHQ7CisJbGlzdF9kZWwoaGVhZCk7CisJaW5zaXplID0gMTsKKwlmb3IgKDs7KSB7CisJCXAgPSBvbGRoZWFkID0gbGlzdDsKKwkJbGlzdCA9IHRhaWwgPSBOVUxMOworCQlubWVyZ2VzID0gMDsKKworCQl3aGlsZSAocCkgeworCQkJbm1lcmdlcysrOworCQkJcSA9IHA7CisJCQlwc2l6ZSA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgaW5zaXplOyBpKyspIHsKKwkJCQlwc2l6ZSsrOworCQkJCXEgPSBxLT5uZXh0ID09IG9sZGhlYWQgPyBOVUxMIDogcS0+bmV4dDsKKwkJCQlpZiAoIXEpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlxc2l6ZSA9IGluc2l6ZTsKKwkJCXdoaWxlIChwc2l6ZSA+IDAgfHwgKHFzaXplID4gMCAmJiBxKSkgeworCQkJCWlmICghcHNpemUpIHsKKwkJCQkJZSA9IHE7CisJCQkJCXEgPSBxLT5uZXh0OworCQkJCQlxc2l6ZS0tOworCQkJCQlpZiAocSA9PSBvbGRoZWFkKQorCQkJCQkJcSA9IE5VTEw7CisJCQkJfSBlbHNlIGlmICghcXNpemUgfHwgIXEpIHsKKwkJCQkJZSA9IHA7CisJCQkJCXAgPSBwLT5uZXh0OworCQkJCQlwc2l6ZS0tOworCQkJCQlpZiAocCA9PSBvbGRoZWFkKQorCQkJCQkJcCA9IE5VTEw7CisJCQkJfSBlbHNlIGlmIChjbXAocCwgcSkgPD0gMCkgeworCQkJCQllID0gcDsKKwkJCQkJcCA9IHAtPm5leHQ7CisJCQkJCXBzaXplLS07CisJCQkJCWlmIChwID09IG9sZGhlYWQpCisJCQkJCQlwID0gTlVMTDsKKwkJCQl9IGVsc2UgeworCQkJCQllID0gcTsKKwkJCQkJcSA9IHEtPm5leHQ7CisJCQkJCXFzaXplLS07CisJCQkJCWlmIChxID09IG9sZGhlYWQpCisJCQkJCQlxID0gTlVMTDsKKwkJCQl9CisJCQkJaWYgKHRhaWwpCisJCQkJCXRhaWwtPm5leHQgPSBlOworCQkJCWVsc2UKKwkJCQkJbGlzdCA9IGU7CisJCQkJZS0+cHJldiA9IHRhaWw7CisJCQkJdGFpbCA9IGU7CisJCQl9CisJCQlwID0gcTsKKwkJfQorCisJCXRhaWwtPm5leHQgPSBsaXN0OworCQlsaXN0LT5wcmV2ID0gdGFpbDsKKworCQlpZiAobm1lcmdlcyA8PSAxKQorCQkJYnJlYWs7CisKKwkJaW5zaXplICo9IDI7CisJfQorCisJaGVhZC0+bmV4dCA9IGxpc3Q7CisJaGVhZC0+cHJldiA9IGxpc3QtPnByZXY7CisJbGlzdC0+cHJldi0+bmV4dCA9IGhlYWQ7CisJbGlzdC0+cHJldiA9IGhlYWQ7Cit9CisKKy8qKgorICogZHJtX21vZGVfc29ydCAtIHNvcnQgbW9kZSBsaXN0CisgKiBAbW9kZV9saXN0OiBsaXN0IHRvIHNvcnQKKyAqCisgKiBMT0NLSU5HOgorICogQ2FsbGVyIG11c3QgaG9sZCBhIGxvY2sgcHJvdGVjdGluZyBAbW9kZV9saXN0LgorICoKKyAqIFNvcnQgQG1vZGVfbGlzdCBieSBmYXZvcmFiaWxpdHksIHB1dHRpbmcgZ29vZCBtb2RlcyBmaXJzdC4KKyAqLwordm9pZCBkcm1fbW9kZV9zb3J0KHN0cnVjdCBsaXN0X2hlYWQgKm1vZGVfbGlzdCkKK3sKKwlsaXN0X3NvcnQobW9kZV9saXN0LCBkcm1fbW9kZV9jb21wYXJlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfc29ydCk7CisKKy8qKgorICogZHJtX21vZGVfY29ubmVjdG9yX2xpc3RfdXBkYXRlIC0gdXBkYXRlIHRoZSBtb2RlIGxpc3QgZm9yIHRoZSBjb25uZWN0b3IKKyAqIEBjb25uZWN0b3I6IHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlciBtdXN0IGhvbGQgYSBsb2NrIHByb3RlY3RpbmcgQG1vZGVfbGlzdC4KKyAqCisgKiBUaGlzIG1vdmVzIHRoZSBtb2RlcyBmcm9tIHRoZSBAY29ubmVjdG9yIHByb2JlZF9tb2RlcyBsaXN0CisgKiB0byB0aGUgYWN0dWFsIG1vZGUgbGlzdC4gSXQgY29tcGFyZXMgdGhlIHByb2JlZCBtb2RlIGFnYWluc3QgdGhlIGN1cnJlbnQKKyAqIGxpc3QgYW5kIG9ubHkgYWRkcyBkaWZmZXJlbnQgbW9kZXMuIEFsbCBtb2RlcyB1bnZlcmlmaWVkIGFmdGVyIHRoaXMgcG9pbnQKKyAqIHdpbGwgYmUgcmVtb3ZlZCBieSB0aGUgcHJ1bmUgaW52YWxpZCBtb2Rlcy4KKyAqLwordm9pZCBkcm1fbW9kZV9jb25uZWN0b3JfbGlzdF91cGRhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqcG1vZGUsICpwdDsKKwlpbnQgZm91bmRfaXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG1vZGUsIHB0LCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsCisJCQkJIGhlYWQpIHsKKwkJZm91bmRfaXQgPSAwOworCQkvKiBnbyB0aHJvdWdoIGN1cnJlbnQgbW9kZXMgY2hlY2tpbmcgZm9yIHRoZSBuZXcgcHJvYmVkIG1vZGUgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCQkJaWYgKGRybV9tb2RlX2VxdWFsKHBtb2RlLCBtb2RlKSkgeworCQkJCWZvdW5kX2l0ID0gMTsKKwkJCQkvKiBpZiBlcXVhbCBkZWxldGUgdGhlIHByb2JlZCBtb2RlICovCisJCQkJbW9kZS0+c3RhdHVzID0gcG1vZGUtPnN0YXR1czsKKwkJCQlsaXN0X2RlbCgmcG1vZGUtPmhlYWQpOworCQkJCWRybV9tb2RlX2Rlc3Ryb3koY29ubmVjdG9yLT5kZXYsIHBtb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmRfaXQpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZwbW9kZS0+aGVhZCwgJmNvbm5lY3Rvci0+bW9kZXMpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25uZWN0b3JfbGlzdF91cGRhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCBhZTczYjdmLi44ZGY4NDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtNDksNiArNDksOCBAQAogCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAogCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV92YmxhbmtfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgZHJtX2dlbV9vYmplY3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LApAQCAtNzIsNiArNzQsNyBAQAogCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm8sIDB9LAogCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvLCAwfSwKIAl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvLCAwfSwKKwl7InZibGFuayIsIGRybV92YmxhbmtfaW5mbywgMH0sCiAJeyJnZW1fbmFtZXMiLCBkcm1fZ2VtX25hbWVfaW5mbywgRFJJVkVSX0dFTX0sCiAJeyJnZW1fb2JqZWN0cyIsIGRybV9nZW1fb2JqZWN0X2luZm8sIERSSVZFUl9HRU19LAogI2lmIERSTV9ERUJVR19DT0RFCkBAIC0xOTUsNiArMTk4LDcgQEAKIAkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IG1pbm9yLT5tYXN0ZXI7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CiAJaW50IGxlbiA9IDA7CiAKQEAgLTIwMywxMyArMjA3LDE2IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICghbWFzdGVyKQorCQlyZXR1cm4gMDsKKwogCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKIAkqZW9mID0gMDsKIAotCWlmIChkZXYtPnVuaXF1ZSkgeworCWlmIChtYXN0ZXItPnVuaXF1ZSkgewogCQlEUk1fUFJPQ19QUklOVCgiJXMgJXMgJXNcbiIsCiAJCQkgICAgICAgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKLQkJCSAgICAgICBwY2lfbmFtZShkZXYtPnBkZXYpLCBkZXYtPnVuaXF1ZSk7CisJCQkgICAgICAgcGNpX25hbWUoZGV2LT5wZGV2KSwgbWFzdGVyLT51bmlxdWUpOwogCX0gZWxzZSB7CiAJCURSTV9QUk9DX1BSSU5UKCIlcyAlc1xuIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKIAkJCSAgICAgICBwY2lfbmFtZShkZXYtPnBkZXYpKTsKQEAgLTQ1NCw2ICs0NjEsNjYgQEAKIH0KIAogLyoqCisgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi92YmxhbmsiIGlzIHJlYWQuCisgKgorICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgorICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgorICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgorICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KKyAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgorICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgorICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KKyAqLworc3RhdGljIGludCBkcm1fX3ZibGFua19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAorCQkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJaW50IGxlbiA9IDA7CisJaW50IGNydGM7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKworCWZvciAoY3J0YyA9IDA7IGNydGMgPCBkZXYtPm51bV9jcnRjczsgY3J0YysrKSB7CisJCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGVuYWJsZTogICAgICVkXG4iLAorCQkJICAgICAgIGNydGMsIGF0b21pY19yZWFkKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkpOworCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBjb3VudGVyOiAgICAlZFxuIiwKKwkJCSAgICAgICBjcnRjLCBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykpOworCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBsYXN0IHdhaXQ6ICAlZFxuIiwKKwkJCSAgICAgICBjcnRjLCBkZXYtPmxhc3RfdmJsYW5rX3dhaXRbY3J0Y10pOworCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBpbiBtb2Rlc2V0OiAlZFxuIiwKKwkJCSAgICAgICBjcnRjLCBkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10pOworCX0KKworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCisvKioKKyAqIFNpbXBseSBjYWxscyBfdmJsYW5rX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KKyAqLworc3RhdGljIGludCBkcm1fdmJsYW5rX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCisJCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gZHJtX192YmxhbmtfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9jbGllbnRzIiBpcyByZWFkLgogICoKICAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKaW5kZXggNjZjOTZlYy4uNWNhMTMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKQEAgLTU3LDYgKzU3LDE0IEBACiAJaW50IHJldDsKIAlpbnQgYmFzZSA9IDAsIGxpbWl0ID0gNjM7CiAKKwlpZiAodHlwZSA9PSBEUk1fTUlOT1JfQ09OVFJPTCkgeworICAgICAgICAgICAgICAgIGJhc2UgKz0gNjQ7CisgICAgICAgICAgICAgICAgbGltaXQgPSBiYXNlICsgMTI3OworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRFJNX01JTk9SX1JFTkRFUikgeworICAgICAgICAgICAgICAgIGJhc2UgKz0gMTI4OworICAgICAgICAgICAgICAgIGxpbWl0ID0gYmFzZSArIDI1NTsKKyAgICAgICAgfQorCiBhZ2FpbjoKIAlpZiAoaWRyX3ByZV9nZXQoJmRybV9taW5vcnNfaWRyLCBHRlBfS0VSTkVMKSA9PSAwKSB7CiAJCURSTV9FUlJPUigiT3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgZHJhd2FibGUgaWRyXG4iKTsKQEAgLTc5LDYgKzg3LDEwNCBAQAogCXJldHVybiBuZXdfaWQ7CiB9CiAKK3N0cnVjdCBkcm1fbWFzdGVyICpkcm1fbWFzdGVyX2NyZWF0ZShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKm1hc3RlciksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIE5VTEw7CisKKwlrcmVmX2luaXQoJm1hc3Rlci0+cmVmY291bnQpOworCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmxvY2suc3BpbmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hc3Rlci0+bG9jay5sb2NrX3F1ZXVlKTsKKwlkcm1faHRfY3JlYXRlKCZtYXN0ZXItPm1hZ2ljbGlzdCwgRFJNX01BR0lDX0hBU0hfT1JERVIpOworCUlOSVRfTElTVF9IRUFEKCZtYXN0ZXItPm1hZ2ljZnJlZSk7CisJbWFzdGVyLT5taW5vciA9IG1pbm9yOworCisJbGlzdF9hZGRfdGFpbCgmbWFzdGVyLT5oZWFkLCAmbWlub3ItPm1hc3Rlcl9saXN0KTsKKworCXJldHVybiBtYXN0ZXI7Cit9CisKK3N0cnVjdCBkcm1fbWFzdGVyICpkcm1fbWFzdGVyX2dldChzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKQoreworCWtyZWZfZ2V0KCZtYXN0ZXItPnJlZmNvdW50KTsKKwlyZXR1cm4gbWFzdGVyOworfQorCitzdGF0aWMgdm9pZCBkcm1fbWFzdGVyX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX21hc3RlciwgcmVmY291bnQpOworCXN0cnVjdCBkcm1fbWFnaWNfZW50cnkgKnB0LCAqbmV4dDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWFzdGVyLT5taW5vci0+ZGV2OworCisJbGlzdF9kZWwoJm1hc3Rlci0+aGVhZCk7CisKKwlpZiAoZGV2LT5kcml2ZXItPm1hc3Rlcl9kZXN0cm95KQorCQlkZXYtPmRyaXZlci0+bWFzdGVyX2Rlc3Ryb3koZGV2LCBtYXN0ZXIpOworCisJaWYgKG1hc3Rlci0+dW5pcXVlKSB7CisJCWRybV9mcmVlKG1hc3Rlci0+dW5pcXVlLCBtYXN0ZXItPnVuaXF1ZV9zaXplLCBEUk1fTUVNX0RSSVZFUik7CisJCW1hc3Rlci0+dW5pcXVlID0gTlVMTDsKKwkJbWFzdGVyLT51bmlxdWVfbGVuID0gMDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHQsIG5leHQsICZtYXN0ZXItPm1hZ2ljZnJlZSwgaGVhZCkgeworCQlsaXN0X2RlbCgmcHQtPmhlYWQpOworCQlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1hc3Rlci0+bWFnaWNsaXN0LCAmcHQtPmhhc2hfaXRlbSk7CisJCWRybV9mcmVlKHB0LCBzaXplb2YoKnB0KSwgRFJNX01FTV9NQUdJQyk7CisJfQorCisJZHJtX2h0X3JlbW92ZSgmbWFzdGVyLT5tYWdpY2xpc3QpOworCisJaWYgKG1hc3Rlci0+bG9jay5od19sb2NrKSB7CisJCWlmIChkZXYtPnNpZ2RhdGEubG9jayA9PSBtYXN0ZXItPmxvY2suaHdfbG9jaykKKwkJCWRldi0+c2lnZGF0YS5sb2NrID0gTlVMTDsKKwkJbWFzdGVyLT5sb2NrLmh3X2xvY2sgPSBOVUxMOworCQltYXN0ZXItPmxvY2suZmlsZV9wcml2ID0gTlVMTDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtYXN0ZXItPmxvY2subG9ja19xdWV1ZSk7CisJfQorCisJZHJtX2ZyZWUobWFzdGVyLCBzaXplb2YoKm1hc3RlciksIERSTV9NRU1fRFJJVkVSKTsKK30KKwordm9pZCBkcm1fbWFzdGVyX3B1dChzdHJ1Y3QgZHJtX21hc3RlciAqKm1hc3RlcikKK3sKKwlrcmVmX3B1dCgmKCptYXN0ZXIpLT5yZWZjb3VudCwgZHJtX21hc3Rlcl9kZXN0cm95KTsKKwkqbWFzdGVyID0gTlVMTDsKK30KKworaW50IGRybV9zZXRtYXN0ZXJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWlmIChmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIgJiYgZmlsZV9wcml2LT5taW5vci0+bWFzdGVyICE9IGZpbGVfcHJpdi0+bWFzdGVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZmlsZV9wcml2LT5tYXN0ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFmaWxlX3ByaXYtPm1pbm9yLT5tYXN0ZXIgJiYKKwkgICAgZmlsZV9wcml2LT5taW5vci0+bWFzdGVyICE9IGZpbGVfcHJpdi0+bWFzdGVyKSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZmlsZV9wcml2LT5taW5vci0+bWFzdGVyID0gZHJtX21hc3Rlcl9nZXQoZmlsZV9wcml2LT5tYXN0ZXIpOworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fZHJvcG1hc3Rlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWlmICghZmlsZV9wcml2LT5tYXN0ZXIpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fbWFzdGVyX3B1dCgmZmlsZV9wcml2LT5taW5vci0+bWFzdGVyKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkcm1fZmlsbF9pbl9kZXYoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwKIAkJCSAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCkBAIC05Miw3ICsxOTgsNiBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y291bnRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZHJ3X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2suc3BpbmxvY2spOwogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCW11dGV4X2luaXQoJmRldi0+c3RydWN0X211dGV4KTsKIAltdXRleF9pbml0KCZkZXYtPmN0eGxpc3RfbXV0ZXgpOwpAQCAtMTQwLDkgKzI0NSw2IEBACiAJCX0KIAl9CiAKLQlpZiAoZGV2LT5kcml2ZXItPmxvYWQpCi0JCWlmICgocmV0Y29kZSA9IGRldi0+ZHJpdmVyLT5sb2FkKGRldiwgZW50LT5kcml2ZXJfZGF0YSkpKQotCQkJZ290byBlcnJvcl9vdXRfdW5yZWc7CiAKIAlyZXRjb2RlID0gZHJtX2N0eGJpdG1hcF9pbml0KGRldik7CiAJaWYgKHJldGNvZGUpIHsKQEAgLTIwMCw2ICszMDIsNyBAQAogCW5ld19taW5vci0+ZGV2aWNlID0gTUtERVYoRFJNX01BSk9SLCBtaW5vcl9pZCk7CiAJbmV3X21pbm9yLT5kZXYgPSBkZXY7CiAJbmV3X21pbm9yLT5pbmRleCA9IG1pbm9yX2lkOworCUlOSVRfTElTVF9IRUFEKCZuZXdfbWlub3ItPm1hc3Rlcl9saXN0KTsKIAogCWlkcl9yZXBsYWNlKCZkcm1fbWlub3JzX2lkciwgbmV3X21pbm9yLCBtaW5vcl9pZCk7CiAKQEAgLTI2Nyw4ICszNzAsMzAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJEUk06IEZpbGxfaW5fZGV2IGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl9nMjsKIAl9CisKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+Y29udHJvbCwgRFJNX01JTk9SX0NPTlRST0wpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZzI7CisJfQorCiAJaWYgKChyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+cHJpbWFyeSwgRFJNX01JTk9SX0xFR0FDWSkpKQotCQlnb3RvIGVycl9nMjsKKwkJZ290byBlcnJfZzM7CisKKwlpZiAoZGV2LT5kcml2ZXItPmxvYWQpIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPmxvYWQoZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2czOworCX0KKworICAgICAgICAvKiBzZXR1cCB0aGUgZ3JvdXBpbmcgZm9yIHRoZSBsZWdhY3kgb3V0cHV0ICovCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJcmV0ID0gZHJtX21vZGVfZ3JvdXBfaW5pdF9sZWdhY3lfZ3JvdXAoZGV2LCAmZGV2LT5wcmltYXJ5LT5tb2RlX2dyb3VwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2czOworCX0KKworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZHJpdmVyX2l0ZW0sICZkcml2ZXItPmRldmljZV9saXN0KTsKIAogCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKIAkJIGRyaXZlci0+bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5taW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLApAQCAtMjc2LDYgKzQwMSw4IEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2czOgorCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7CiBlcnJfZzI6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogZXJyX2cxOgpAQCAtMjk3LDExICs0MjQsNiBAQAogewogCURSTV9ERUJVRygicmVsZWFzZSBwcmltYXJ5ICVzXG4iLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKTsKIAotCWlmIChkZXYtPnVuaXF1ZSkgewotCQlkcm1fZnJlZShkZXYtPnVuaXF1ZSwgc3RybGVuKGRldi0+dW5pcXVlKSArIDEsIERSTV9NRU1fRFJJVkVSKTsKLQkJZGV2LT51bmlxdWUgPSBOVUxMOwotCQlkZXYtPnVuaXF1ZV9sZW4gPSAwOwotCX0KIAlpZiAoZGV2LT5kZXZuYW1lKSB7CiAJCWRybV9mcmVlKGRldi0+ZGV2bmFtZSwgc3RybGVuKGRldi0+ZGV2bmFtZSkgKyAxLAogCQkJIERSTV9NRU1fRFJJVkVSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCAxNjExYjliLi42NWQ3MmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogCiAjZGVmaW5lIHRvX2RybV9taW5vcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9taW5vciwga2RldikKKyNkZWZpbmUgdG9fZHJtX2Nvbm5lY3RvcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9jb25uZWN0b3IsIGtkZXYpCiAKIC8qKgogICogZHJtX3N5c2ZzX3N1c3BlbmQgLSBEUk0gY2xhc3Mgc3VzcGVuZCBob29rCkBAIC0zNCw3ICszNSw3IEBACiAJc3RydWN0IGRybV9taW5vciAqZHJtX21pbm9yID0gdG9fZHJtX21pbm9yKGRldik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcm1fbWlub3ItPmRldjsKIAotCWlmIChkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJaWYgKGRybV9taW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZICYmIGRybV9kZXYtPmRyaXZlci0+c3VzcGVuZCkKIAkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+c3VzcGVuZChkcm1fZGV2LCBzdGF0ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTUyLDcgKzUzLDcgQEAKIAlzdHJ1Y3QgZHJtX21pbm9yICpkcm1fbWlub3IgPSB0b19kcm1fbWlub3IoZGV2KTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRybV9taW5vci0+ZGV2OwogCi0JaWYgKGRybV9kZXYtPmRyaXZlci0+cmVzdW1lKQorCWlmIChkcm1fbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSAmJiBkcm1fZGV2LT5kcml2ZXItPnJlc3VtZSkKIAkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+cmVzdW1lKGRybV9kZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNiArMTQ1LDMyMyBAQAogCXJldHVybjsKIH0KIAorLyoKKyAqIENvbm5lY3RvciBwcm9wZXJ0aWVzCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSB0b19kcm1fY29ubmVjdG9yKGRldmljZSk7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcyIsCisJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9zdGF0dXNfbmFtZShzdGF0dXMpKTsKK30KKworc3RhdGljIHNzaXplX3QgZHBtc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSB0b19kcm1fY29ubmVjdG9yKGRldmljZSk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXVpbnQ2NF90IGRwbXNfc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3Byb3BlcnR5X2dldF92YWx1ZShjb25uZWN0b3IsCisJCQkJCSAgICBkZXYtPm1vZGVfY29uZmlnLmRwbXNfcHJvcGVydHksCisJCQkJCSAgICAmZHBtc19zdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXMiLAorCQkJZHJtX2dldF9kcG1zX25hbWUoKGludClkcG1zX3N0YXR1cykpOworfQorCitzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSB0b19kcm1fY29ubmVjdG9yKGRldmljZSk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsIGNvbm5lY3Rvci0+ZW5jb2RlciA/ICJlbmFibGVkIiA6CisJCQkiZGlzYWJsZWQiKTsKK30KKworc3RhdGljIHNzaXplX3QgZWRpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpjb25uZWN0b3JfZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSB0b19kcm1fY29ubmVjdG9yKGNvbm5lY3Rvcl9kZXYpOworCXVuc2lnbmVkIGNoYXIgKmVkaWQ7CisJc2l6ZV90IHNpemU7CisKKwlpZiAoIWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikKKwkJcmV0dXJuIDA7CisKKwllZGlkID0gY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyLT5kYXRhOworCXNpemUgPSBjb25uZWN0b3ItPmVkaWRfYmxvYl9wdHItPmxlbmd0aDsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAwOworCisJaWYgKG9mZiA+PSBzaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCisJCWNvdW50ID0gc2l6ZSAtIG9mZjsKKwltZW1jcHkoYnVmLCBlZGlkICsgb2ZmLCBjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1vZGVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHRvX2RybV9jb25uZWN0b3IoZGV2aWNlKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgd3JpdHRlbiA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCXdyaXR0ZW4gKz0gc25wcmludGYoYnVmICsgd3JpdHRlbiwgUEFHRV9TSVpFIC0gd3JpdHRlbiwgIiVzXG4iLAorCQkJCSAgICBtb2RlLT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3ViY29ubmVjdG9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHRvX2RybV9jb25uZWN0b3IoZGV2aWNlKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcCA9IE5VTEw7CisJdWludDY0X3Qgc3ViY29ubmVjdG9yOworCWludCBpc190diA9IDA7CisJaW50IHJldDsKKworCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgeworCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgorCQkJcHJvcCA9IGRldi0+bW9kZV9jb25maWcuZHZpX2lfc3ViY29ubmVjdG9yX3Byb3BlcnR5OworCQkJYnJlYWs7CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQ6CisJCQlwcm9wID0gZGV2LT5tb2RlX2NvbmZpZy50dl9zdWJjb25uZWN0b3JfcHJvcGVydHk7CisJCQlpc190diA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURSTV9FUlJPUigiV3JvbmcgY29ubmVjdG9yIHR5cGUgZm9yIHRoaXMgcHJvcGVydHlcbiIpOworCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwcm9wKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgc3ViY29ubmVjdG9yIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9nZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wLCAmc3ViY29ubmVjdG9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzIiwgaXNfdHYgPworCQkJZHJtX2dldF90dl9zdWJjb25uZWN0b3JfbmFtZSgoaW50KXN1YmNvbm5lY3RvcikgOgorCQkJZHJtX2dldF9kdmlfaV9zdWJjb25uZWN0b3JfbmFtZSgoaW50KXN1YmNvbm5lY3RvcikpOworfQorCitzdGF0aWMgc3NpemVfdCBzZWxlY3Rfc3ViY29ubmVjdG9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHRvX2RybV9jb25uZWN0b3IoZGV2aWNlKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcCA9IE5VTEw7CisJdWludDY0X3Qgc3ViY29ubmVjdG9yOworCWludCBpc190diA9IDA7CisJaW50IHJldDsKKworCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgeworCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgorCQkJcHJvcCA9IGRldi0+bW9kZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eTsKKwkJCWJyZWFrOworCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50OgorCQkJcHJvcCA9IGRldi0+bW9kZV9jb25maWcudHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eTsKKwkJCWlzX3R2ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJXcm9uZyBjb25uZWN0b3IgdHlwZSBmb3IgdGhpcyBwcm9wZXJ0eVxuIik7CisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXByb3ApIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZmluZCBzZWxlY3Qgc3ViY29ubmVjdG9yIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9nZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wLCAmc3ViY29ubmVjdG9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzIiwgaXNfdHYgPworCQkJZHJtX2dldF90dl9zZWxlY3RfbmFtZSgoaW50KXN1YmNvbm5lY3RvcikgOgorCQkJZHJtX2dldF9kdmlfaV9zZWxlY3RfbmFtZSgoaW50KXN1YmNvbm5lY3RvcikpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgY29ubmVjdG9yX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKHN0YXR1cyksCisJX19BVFRSX1JPKGVuYWJsZWQpLAorCV9fQVRUUl9STyhkcG1zKSwKKwlfX0FUVFJfUk8obW9kZXMpLAorfTsKKworLyogVGhlc2UgYXR0cmlidXRlcyBhcmUgZm9yIGJvdGggRFZJLUkgY29ubmVjdG9ycyBhbmQgYWxsIHR5cGVzIG9mIHR2LW91dC4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBjb25uZWN0b3JfYXR0cnNfb3B0MVtdID0geworCV9fQVRUUl9STyhzdWJjb25uZWN0b3IpLAorCV9fQVRUUl9STyhzZWxlY3Rfc3ViY29ubmVjdG9yKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBlZGlkX2F0dHIgPSB7CisJLmF0dHIubmFtZSA9ICJlZGlkIiwKKwkuc2l6ZSA9IDEyOCwKKwkucmVhZCA9IGVkaWRfc2hvdywKK307CisKKy8qKgorICogZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQgLSBhZGQgYW4gY29ubmVjdG9yIHRvIHN5c2ZzCisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gYWRkCisgKgorICogQ3JlYXRlIGFuIGNvbm5lY3RvciBkZXZpY2UgaW4gc3lzZnMsIGFsb25nIHdpdGggaXRzIGFzc29jaWF0ZWQgY29ubmVjdG9yCisgKiBwcm9wZXJ0aWVzIChzbyBmYXIsIGNvbm5lY3Rpb24gc3RhdHVzLCBkcG1zLCBtb2RlIGxpc3QgJiBlZGlkKSBhbmQKKyAqIGdlbmVyYXRlIGEgaG90cGx1ZyBldmVudCBzbyB1c2Vyc3BhY2Uga25vd3MgdGhlcmUncyBhIG5ldyBjb25uZWN0b3IKKyAqIGF2YWlsYWJsZS4KKyAqCisgKiBOb3RlOgorICogVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCAqb25jZSogZm9yIGVhY2ggRFJNIG1pbm9yIHJlZ2lzdGVyZWQuCisgKiBBIHNlY29uZCBjYWxsIGZvciBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgZGV2aWNlIHdpbGwgdHJpZ2dlciB0aGUgQlVHX09OCisgKiBiZWxvdy4KKyAqLworaW50IGRybV9zeXNmc19jb25uZWN0b3JfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCWludCByZXQgPSAwLCBpLCBqOworCisJLyogV2Ugc2hvdWxkbid0IGdldCBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgZm9yIHRoZSBzYW1lIGNvbm5lY3RvciAqLworCUJVR19PTihkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmY29ubmVjdG9yLT5rZGV2KSk7CisKKwljb25uZWN0b3ItPmtkZXYucGFyZW50ID0gJmRldi0+cHJpbWFyeS0+a2RldjsKKwljb25uZWN0b3ItPmtkZXYuY2xhc3MgPSBkcm1fY2xhc3M7CisJY29ubmVjdG9yLT5rZGV2LnJlbGVhc2UgPSBkcm1fc3lzZnNfZGV2aWNlX3JlbGVhc2U7CisKKwlEUk1fREVCVUcoImFkZGluZyBcIiVzXCIgdG8gc3lzZnNcbiIsCisJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKworCXNucHJpbnRmKGNvbm5lY3Rvci0+a2Rldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiY2FyZCVkLSVzIiwKKwkJIGRldi0+cHJpbWFyeS0+aW5kZXgsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjb25uZWN0b3ItPmtkZXYpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3IgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU3RhbmRhcmQgYXR0cmlidXRlcyAqLworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29ubmVjdG9yX2F0dHJzKTsgaSsrKSB7CisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmY29ubmVjdG9yLT5rZGV2LCAmY29ubmVjdG9yX2F0dHJzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX291dF9maWxlczsKKwl9CisKKwkvKiBPcHRpb25hbCBhdHRyaWJ1dGVzICovCisJLyoKKwkgKiBJbiB0aGUgbG9uZyBydW4gaXQgbWF5YmUgYSBnb29kIGlkZWEgdG8gbWFrZSBvbmUgc2V0IG9mCisJICogb3B0aW9uYWxzIHBlciBjb25uZWN0b3IgdHlwZS4KKwkgKi8KKwlzd2l0Y2ggKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpIHsKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbm5lY3Rvcl9hdHRyc19vcHQxKTsgaSsrKSB7CisJCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjb25uZWN0b3ItPmtkZXYsICZjb25uZWN0b3JfYXR0cnNfb3B0MVtpXSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBlcnJfb3V0X2ZpbGVzOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmNvbm5lY3Rvci0+a2Rldi5rb2JqLCAmZWRpZF9hdHRyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXRfZmlsZXM7CisKKwkvKiBMZXQgdXNlcnNwYWNlIGtub3cgd2UgaGF2ZSBhIG5ldyBjb25uZWN0b3IgKi8KKwlkcm1fc3lzZnNfaG90cGx1Z19ldmVudChkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZmlsZXM6CisJaWYgKGkgPiAwKQorCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZjb25uZWN0b3ItPmtkZXYsCisJCQkJCSAgICZjb25uZWN0b3JfYXR0cnNbaV0pOworCWRldmljZV91bnJlZ2lzdGVyKCZjb25uZWN0b3ItPmtkZXYpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQpOworCisvKioKKyAqIGRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlIC0gcmVtb3ZlIGFuIGNvbm5lY3RvciBkZXZpY2UgZnJvbSBzeXNmcworICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZSBAY29ubmVjdG9yIGFuZCBpdHMgYXNzb2NpYXRlZCBhdHRyaWJ1dGVzIGZyb20gc3lzZnMuICBOb3RlIHRoYXQKKyAqIHRoZSBkZXZpY2UgbW9kZWwgY29yZSB3aWxsIHRha2UgY2FyZSBvZiBzZW5kaW5nIHRoZSAicmVtb3ZlIiB1ZXZlbnQKKyAqIGF0IHRoaXMgdGltZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBpdC4KKyAqCisgKiBOb3RlOgorICogVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgY29ubmVjdG9yIHdhcyBwcmV2aW91c2x5CisgKiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC4gIElmIEBjb25uZWN0b3IgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5ZXQsCisgKiB5b3UnbGwgbGlrZWx5IHNlZSBhIHBhbmljIHNvbWV3aGVyZSBkZWVwIGluIHN5c2ZzIGNvZGUgd2hlbiBjYWxsZWQuCisgKi8KK3ZvaWQgZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVRygicmVtb3ZpbmcgXCIlc1wiIGZyb20gc3lzZnNcbiIsCisJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbm5lY3Rvcl9hdHRycyk7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZjb25uZWN0b3ItPmtkZXYsICZjb25uZWN0b3JfYXR0cnNbaV0pOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY29ubmVjdG9yLT5rZGV2LmtvYmosICZlZGlkX2F0dHIpOworCWRldmljZV91bnJlZ2lzdGVyKCZjb25uZWN0b3ItPmtkZXYpOworfQorRVhQT1JUX1NZTUJPTChkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZSk7CisKKy8qKgorICogZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQgLSBnZW5lcmF0ZSBhIERSTSB1ZXZlbnQKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqCisgKiBTZW5kIGEgdWV2ZW50IGZvciB0aGUgRFJNIGRldmljZSBzcGVjaWZpZWQgYnkgQGRldi4gIEN1cnJlbnRseSB3ZSBvbmx5CisgKiBzZXQgSE9UUExVRz0xIGluIHRoZSB1ZXZlbnQgZW52aXJvbm1lbnQsIGJ1dCB0aGlzIGNvdWxkIGJlIGV4cGFuZGVkIHRvCisgKiBkZWFsIHdpdGggb3RoZXIgdHlwZXMgb2YgZXZlbnRzLgorICovCit2b2lkIGRybV9zeXNmc19ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJY2hhciAqZXZlbnRfc3RyaW5nID0gIkhPVFBMVUc9MSI7CisJY2hhciAqZW52cFtdID0geyBldmVudF9zdHJpbmcsIE5VTEwgfTsKKworCURSTV9ERUJVRygiZ2VuZXJhdGluZyBob3RwbHVnIGV2ZW50XG4iKTsKKworCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKK30KKwogLyoqCiAgKiBkcm1fc3lzZnNfZGV2aWNlX2FkZCAtIGFkZHMgYSBjbGFzcyBkZXZpY2UgdG8gc3lzZnMgZm9yIGEgY2hhcmFjdGVyIGRyaXZlcgogICogQGRldjogRFJNIGRldmljZSB0byBiZSBhZGRlZApAQCAtMTYzLDcgKzQ4MSwxMiBAQAogCW1pbm9yLT5rZGV2LmNsYXNzID0gZHJtX2NsYXNzOwogCW1pbm9yLT5rZGV2LnJlbGVhc2UgPSBkcm1fc3lzZnNfZGV2aWNlX3JlbGVhc2U7CiAJbWlub3ItPmtkZXYuZGV2dCA9IG1pbm9yLT5kZXZpY2U7Ci0JbWlub3Jfc3RyID0gImNhcmQlZCI7CisJaWYgKG1pbm9yLT50eXBlID09IERSTV9NSU5PUl9DT05UUk9MKQorCQltaW5vcl9zdHIgPSAiY29udHJvbEQlZCI7CisgICAgICAgIGVsc2UgaWYgKG1pbm9yLT50eXBlID09IERSTV9NSU5PUl9SRU5ERVIpCisgICAgICAgICAgICAgICAgbWlub3Jfc3RyID0gInJlbmRlckQlZCI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtaW5vcl9zdHIgPSAiY2FyZCVkIjsKIAogCXNucHJpbnRmKG1pbm9yLT5rZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsIG1pbm9yX3N0ciwgbWlub3ItPmluZGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IGMyMzRjNmYuLjNmZmFlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKQEAgLTI2Nyw2ICsyNjcsOSBAQAogCQkJCWRtYWguc2l6ZSA9IG1hcC0+c2l6ZTsKIAkJCQlfX2RybV9wY2lfZnJlZShkZXYsICZkbWFoKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgX0RSTV9HRU06CisJCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBybW1hcCBHRU0gb2JqZWN0XG4iKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOwogCQl9CkBAIC0zOTksNyArNDAyLDcgQEAKICAqIENyZWF0ZSBhIG5ldyBkcm1fdm1hX2VudHJ5IHN0cnVjdHVyZSBhcyB0aGUgXHAgdm1hIHByaXZhdGUgZGF0YSBlbnRyeSBhbmQKICAqIGFkZCBpdCB0byBkcm1fZGV2aWNlOjp2bWFsaXN0LgogICovCi1zdGF0aWMgdm9pZCBkcm1fdm1fb3Blbl9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit2b2lkIGRybV92bV9vcGVuX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKQEAgLTU0MCw3ICs1NDMsNyBAQAogICogYWNjb3JkaW5nIHRvIHRoZSBtYXBwaW5nIHR5cGUgYW5kIHJlbWFwcyB0aGUgcGFnZXMuIEZpbmFsbHkgc2V0cyB0aGUgZmlsZQogICogcG9pbnRlciBhbmQgY2FsbHMgdm1fb3BlbigpLgogICovCi1zdGF0aWMgaW50IGRybV9tbWFwX2xvY2tlZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCitpbnQgZHJtX21tYXBfbG9ja2VkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGQ4ZmI1ZDguLmRkNTdhNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC04LDcgKzgsMjIgQEAKIAkgIGk5MTVfZ2VtLm8gXAogCSAgaTkxNV9nZW1fZGVidWcubyBcCiAJICBpOTE1X2dlbV9wcm9jLm8gXAotCSAgaTkxNV9nZW1fdGlsaW5nLm8KKwkgIGk5MTVfZ2VtX3RpbGluZy5vIFwKKwkgIGludGVsX2Rpc3BsYXkubyBcCisJICBpbnRlbF9jcnQubyBcCisJICBpbnRlbF9sdmRzLm8gXAorCSAgaW50ZWxfYmlvcy5vIFwKKwkgIGludGVsX3Nkdm8ubyBcCisJICBpbnRlbF9tb2Rlcy5vIFwKKwkgIGludGVsX2kyYy5vIFwKKwkgIGludGVsX2ZiLm8gXAorCSAgaW50ZWxfdHYubyBcCisJICBpbnRlbF9kdm8ubyBcCisJICBkdm9fY2g3eHh4Lm8gXAorCSAgZHZvX2NoNzAxNy5vIFwKKwkgIGR2b19pdmNoLm8gXAorCSAgZHZvX3RmcDQxMC5vIFwKKwkgIGR2b19zaWwxNjQubwogCiBpOTE1LSQoQ09ORklHX0FDUEkpCSs9IGk5MTVfb3ByZWdpb24ubwogaTkxNS0kKENPTkZJR19DT01QQVQpICAgKz0gaTkxNV9pb2MzMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm8uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDdhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm8uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA2IEVyaWMgQW5ob2x0CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICogdGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9JTlRFTF9EVk9fSAorI2RlZmluZSBfSU5URUxfRFZPX0gKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgorCitzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSB7CisJY2hhciAqbmFtZTsKKwlpbnQgdHlwZTsKKwkvKiBEVk9BL0IvQyBvdXRwdXQgcmVnaXN0ZXIgKi8KKwl1MzIgZHZvX3JlZzsKKwkvKiBHUElPIHJlZ2lzdGVyIHVzZWQgZm9yIGkyYyBidXMgdG8gY29udHJvbCB0aGlzIGRldmljZSAqLworCXUzMiBncGlvOworCWludCBzbGF2ZV9hZGRyOworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjX2J1czsKKworCWNvbnN0IHN0cnVjdCBpbnRlbF9kdm9fZGV2X29wcyAqZGV2X29wczsKKwl2b2lkICpkZXZfcHJpdjsKKworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwYW5lbF9maXhlZF9tb2RlOworCWJvb2wgcGFuZWxfd2FudHNfZGl0aGVyOworfTsKKworc3RydWN0IGludGVsX2R2b19kZXZfb3BzIHsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGRldmljZSBhdCBzdGFydHVwIHRpbWUuCisJICogUmV0dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UgZG9lcyBub3QgZXhpc3QuCisJICovCisJYm9vbCAoKmluaXQpKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sCisJCSAgICAgc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMpOworCisJLyoKKwkgKiBDYWxsZWQgdG8gYWxsb3cgdGhlIG91dHB1dCBhIGNoYW5jZSB0byBjcmVhdGUgcHJvcGVydGllcyBhZnRlciB0aGUKKwkgKiBSYW5kUiBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkLgorCSAqLworCXZvaWQgKCpjcmVhdGVfcmVzb3VyY2VzKShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKKworCS8qCisJICogVHVybiBvbi9vZmYgb3V0cHV0IG9yIHNldCBpbnRlcm1lZGlhdGUgcG93ZXIgbGV2ZWxzIGlmIGF2YWlsYWJsZS4KKwkgKgorCSAqIFVuc3VwcG9ydGVkIGludGVybWVkaWF0ZSBtb2RlcyBkcm9wIHRvIHRoZSBsb3dlciBwb3dlciBzZXR0aW5nLgorCSAqIElmIHRoZSAgbW9kZSBpcyBEUE1TTW9kZU9mZiwgdGhlIG91dHB1dCBtdXN0IGJlIGRpc2FibGVkLAorCSAqIGFzIHRoZSBEUExMIG1heSBiZSBkaXNhYmxlZCBhZnRlcndhcmRzLgorCSAqLworCXZvaWQgKCpkcG1zKShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgbW9kZSk7CisKKwkvKgorCSAqIFNhdmVzIHRoZSBvdXRwdXQncyBzdGF0ZSBmb3IgcmVzdG9yYXRpb24gb24gVlQgc3dpdGNoLgorCSAqLworCXZvaWQgKCpzYXZlKShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKKworCS8qCisJICogUmVzdG9yZSdzIHRoZSBvdXRwdXQncyBzdGF0ZSBhdCBWVCBzd2l0Y2guCisJICovCisJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pOworCisJLyoKKwkgKiBDYWxsYmFjayBmb3IgdGVzdGluZyBhIHZpZGVvIG1vZGUgZm9yIGEgZ2l2ZW4gb3V0cHV0LgorCSAqCisJICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBjaGVjayBmb3IgY2FzZXMgd2hlcmUgYSBtb2RlIGNhbid0CisJICogYmUgc3VwcG9ydGVkIG9uIHRoZSBvdXRwdXQgc3BlY2lmaWNhbGx5LCBhbmQgbm90IHJlcHJlc2VudAorCSAqIGdlbmVyaWMgQ1JUQyBsaW1pdGF0aW9ucy4KKwkgKgorCSAqIFxyZXR1cm4gTU9ERV9PSyBpZiB0aGUgbW9kZSBpcyB2YWxpZCwgb3IgYW5vdGhlciBNT0RFXyogb3RoZXJ3aXNlLgorCSAqLworCWludCAoKm1vZGVfdmFsaWQpKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKKworCS8qCisJICogQ2FsbGJhY2sgdG8gYWRqdXN0IHRoZSBtb2RlIHRvIGJlIHNldCBpbiB0aGUgQ1JUQy4KKwkgKgorCSAqIFRoaXMgYWxsb3dzIGFuIG91dHB1dCB0byBhZGp1c3QgdGhlIGNsb2NrIG9yIGV2ZW4gdGhlIGVudGlyZSBzZXQgb2YKKwkgKiB0aW1pbmdzLCB3aGljaCBpcyB1c2VkIGZvciBwYW5lbHMgd2l0aCBmaXhlZCB0aW1pbmdzIG9yIGZvcgorCSAqIGJ1c2VzIHdpdGggY2xvY2sgbGltaXRhdGlvbnMuCisJICovCisJYm9vbCAoKm1vZGVfZml4dXApKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sCisJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKKworCS8qCisJICogQ2FsbGJhY2sgZm9yIHByZXBhcmluZyBtb2RlIGNoYW5nZXMgb24gYW4gb3V0cHV0CisJICovCisJdm9pZCAoKnByZXBhcmUpKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pOworCisJLyoKKwkgKiBDYWxsYmFjayBmb3IgY29tbWl0dGluZyBtb2RlIGNoYW5nZXMgb24gYW4gb3V0cHV0CisJICovCisJdm9pZCAoKmNvbW1pdCkoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2byk7CisKKwkvKgorCSAqIENhbGxiYWNrIGZvciBzZXR0aW5nIHVwIGEgdmlkZW8gbW9kZSBhZnRlciBmaXh1cHMgaGF2ZSBiZWVuIG1hZGUuCisJICoKKwkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoaWxlIHRoZSBvdXRwdXQgaXMgZGlzYWJsZWQuICBUaGUgZHBtcyBjYWxsYmFjaworCSAqIG11c3QgYmUgYWxsIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSBvdXRwdXQsIHRvIHR1cm4gdGhlIG91dHB1dCBvbgorCSAqIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorCSAqLworCXZvaWQgKCptb2RlX3NldCkoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisKKwkvKgorCSAqIFByb2JlIGZvciBhIGNvbm5lY3RlZCBvdXRwdXQsIGFuZCByZXR1cm4gZGV0ZWN0X3N0YXR1cy4KKwkgKi8KKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0ZWN0KShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKKworCS8qKgorCSAqIFF1ZXJ5IHRoZSBkZXZpY2UgZm9yIHRoZSBtb2RlcyBpdCBwcm92aWRlcy4KKwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGFsc28gdXBkYXRlIE1vbkluZm8sIG1tX3dpZHRoLCBhbmQgbW1faGVpZ2h0LgorCSAqCisJICogXHJldHVybiBzaW5nbHktbGlua2VkIGxpc3Qgb2YgbW9kZXMgb3IgTlVMTCBpZiBubyBtb2RlcyBmb3VuZC4KKwkgKi8KKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKCpnZXRfbW9kZXMpKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pOworCisJLyoqCisJICogQ2xlYW4gdXAgZHJpdmVyLXNwZWNpZmljIGJpdHMgb2YgdGhlIG91dHB1dAorCSAqLworCXZvaWQgKCpkZXN0cm95KSAoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2byk7CisKKwkvKioKKwkgKiBEZWJ1Z2dpbmcgaG9vayB0byBkdW1wIGRldmljZSByZWdpc3RlcnMgdG8gbG9nIGZpbGUKKwkgKi8KKwl2b2lkICgqZHVtcF9yZWdzKShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW50ZWxfZHZvX2Rldl9vcHMgc2lsMTY0X29wczsKK2V4dGVybiBzdHJ1Y3QgaW50ZWxfZHZvX2Rldl9vcHMgY2g3eHh4X29wczsKK2V4dGVybiBzdHJ1Y3QgaW50ZWxfZHZvX2Rldl9vcHMgaXZjaF9vcHM7CitleHRlcm4gc3RydWN0IGludGVsX2R2b19kZXZfb3BzIHRmcDQxMF9vcHM7CitleHRlcm4gc3RydWN0IGludGVsX2R2b19kZXZfb3BzIGNoNzAxN19vcHM7CisKKyNlbmRpZiAvKiBfSU5URUxfRFZPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2b19jaDcwMTcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2b19jaDcwMTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Q0YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZHZvX2NoNzAxNy5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkdm8uaCIKKworI2RlZmluZSBDSDcwMTdfVFZfRElTUExBWV9NT0RFCQkweDAwCisjZGVmaW5lIENINzAxN19GTElDS0VSX0ZJTFRFUgkJMHgwMQorI2RlZmluZSBDSDcwMTdfVklERU9fQkFORFdJRFRICQkweDAyCisjZGVmaW5lIENINzAxN19URVhUX0VOSEFOQ0VNRU5UCQkweDAzCisjZGVmaW5lIENINzAxN19TVEFSVF9BQ1RJVkVfVklERU8JMHgwNAorI2RlZmluZSBDSDcwMTdfSE9SSVpPTlRBTF9QT1NJVElPTgkweDA1CisjZGVmaW5lIENINzAxN19WRVJUSUNBTF9QT1NJVElPTgkweDA2CisjZGVmaW5lIENINzAxN19CTEFDS19MRVZFTAkJMHgwNworI2RlZmluZSBDSDcwMTdfQ09OVFJBU1RfRU5IQU5DRU1FTlQJMHgwOAorI2RlZmluZSBDSDcwMTdfVFZfUExMCQkJMHgwOQorI2RlZmluZSBDSDcwMTdfVFZfUExMX00JCQkweDBhCisjZGVmaW5lIENINzAxN19UVl9QTExfTgkJCTB4MGIKKyNkZWZpbmUgQ0g3MDE3X1NVQl9DQVJSSUVSXzAJCTB4MGMKKyNkZWZpbmUgQ0g3MDE3X0NJVl9DT05UUk9MCQkweDEwCisjZGVmaW5lIENINzAxN19DSVZfMAkJCTB4MTEKKyNkZWZpbmUgQ0g3MDE3X0NIUk9NQV9CT09TVAkJMHgxNAorI2RlZmluZSBDSDcwMTdfQ0xPQ0tfTU9ERQkJMHgxYworI2RlZmluZSBDSDcwMTdfSU5QVVRfQ0xPQ0sJCTB4MWQKKyNkZWZpbmUgQ0g3MDE3X0dQSU9fQ09OVFJPTAkJMHgxZQorI2RlZmluZSBDSDcwMTdfSU5QVVRfREFUQV9GT1JNQVQJMHgxZgorI2RlZmluZSBDSDcwMTdfQ09OTkVDVElPTl9ERVRFQ1QJMHgyMAorI2RlZmluZSBDSDcwMTdfREFDX0NPTlRST0wJCTB4MjEKKyNkZWZpbmUgQ0g3MDE3X0JVRkZFUkVEX0NMT0NLX09VVFBVVAkweDIyCisjZGVmaW5lIENINzAxN19ERUZFQVRfVlNZTkMJCTB4NDcKKyNkZWZpbmUgQ0g3MDE3X1RFU1RfUEFUVEVSTgkJMHg0OAorCisjZGVmaW5lIENINzAxN19QT1dFUl9NQU5BR0VNRU5UCQkweDQ5CisvKiogRW5hYmxlcyB0aGUgVFYgb3V0cHV0IHBhdGguICovCisjZGVmaW5lIENINzAxN19UVl9FTgkJCSgxIDw8IDApCisjZGVmaW5lIENINzAxN19EQUMwX1BPV0VSX0RPV04JCSgxIDw8IDEpCisjZGVmaW5lIENINzAxN19EQUMxX1BPV0VSX0RPV04JCSgxIDw8IDIpCisjZGVmaW5lIENINzAxN19EQUMyX1BPV0VSX0RPV04JCSgxIDw8IDMpCisjZGVmaW5lIENINzAxN19EQUMzX1BPV0VSX0RPV04JCSgxIDw8IDQpCisvKiogUG93ZXJzIGRvd24gdGhlIFRWIG91dCBibG9jaywgYW5kIERBQzAtMyAqLworI2RlZmluZSBDSDcwMTdfVFZfUE9XRVJfRE9XTl9FTgkJKDEgPDwgNSkKKworI2RlZmluZSBDSDcwMTdfVkVSU0lPTl9JRAkJMHg0YQorCisjZGVmaW5lIENINzAxN19ERVZJQ0VfSUQJCTB4NGIKKyNkZWZpbmUgQ0g3MDE3X0RFVklDRV9JRF9WQUxVRQkJMHgxYgorI2RlZmluZSBDSDcwMThfREVWSUNFX0lEX1ZBTFVFCQkweDFhCisjZGVmaW5lIENINzAxOV9ERVZJQ0VfSURfVkFMVUUJCTB4MTkKKworI2RlZmluZSBDSDcwMTdfWENMS19EMl9BREpVU1QJCTB4NTMKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9DT0VGRl8wCTB4NTUKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9DT0VGRl8xCTB4NTYKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9DT0VGRl8yCTB4NTcKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9DT0VGRl8zCTB4NTgKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9DT0VGRl80CTB4NTkKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9WRVJUSUNBTF9JTkNfMAkweDVhCisjZGVmaW5lIENINzAxN19VUF9TQ0FMRVJfVkVSVElDQUxfSU5DXzEJMHg1YgorI2RlZmluZSBDSDcwMTdfR1BJT19JTlZFUlQJCTB4NWMKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9IT1JJWk9OVEFMX0lOQ18wCTB4NWQKKyNkZWZpbmUgQ0g3MDE3X1VQX1NDQUxFUl9IT1JJWk9OVEFMX0lOQ18xCTB4NWUKKworI2RlZmluZSBDSDcwMTdfSE9SSVpPTlRBTF9BQ1RJVkVfUElYRUxfSU5QVVQJMHg1ZgorLyoqPCBMb3cgYml0cyBvZiBob3Jpem9udGFsIGFjdGl2ZSBwaXhlbCBpbnB1dCAqLworCisjZGVmaW5lIENINzAxN19BQ1RJVkVfSU5QVVRfTElORV9PVVRQVVQJMHg2MAorLyoqIEhpZ2ggYml0cyBvZiBob3Jpem9udGFsIGFjdGl2ZSBwaXhlbCBpbnB1dCAqLworI2RlZmluZSBDSDcwMTdfTFZEU19IQVBfSU5QVVRfTUFTSwkoMHg3IDw8IDApCisvKiogSGlnaCBiaXRzIG9mIHZlcnRpY2FsIGFjdGl2ZSBsaW5lIG91dHB1dCAqLworI2RlZmluZSBDSDcwMTdfTFZEU19WQUxfSElHSF9NQVNLCSgweDcgPDwgMykKKworI2RlZmluZSBDSDcwMTdfVkVSVElDQUxfQUNUSVZFX0xJTkVfT1VUUFVUCTB4NjEKKy8qKjwgTG93IGJpdHMgb2YgdmVydGljYWwgYWN0aXZlIGxpbmUgb3V0cHV0ICovCisKKyNkZWZpbmUgQ0g3MDE3X0hPUklaT05UQUxfQUNUSVZFX1BJWEVMX09VVFBVVAkweDYyCisvKio8IExvdyBiaXRzIG9mIGhvcml6b250YWwgYWN0aXZlIHBpeGVsIG91dHB1dCAqLworCisjZGVmaW5lIENINzAxN19MVkRTX1BPV0VSX0RPV04JCTB4NjMKKy8qKiBIaWdoIGJpdHMgb2YgaG9yaXpvbnRhbCBhY3RpdmUgcGl4ZWwgb3V0cHV0ICovCisjZGVmaW5lIENINzAxN19MVkRTX0hBUF9ISUdIX01BU0sJKDB4NyA8PCAwKQorLyoqIEVuYWJsZXMgdGhlIExWRFMgcG93ZXIgZG93biBzdGF0ZSB0cmFuc2l0aW9uICovCisjZGVmaW5lIENINzAxN19MVkRTX1BPV0VSX0RPV05fRU4JKDEgPDwgNikKKy8qKiBFbmFibGVzIHRoZSBMVkRTIHVwc2NhbGVyICovCisjZGVmaW5lIENINzAxN19MVkRTX1VQU0NBTEVSX0VOCQkoMSA8PCA3KQorI2RlZmluZSBDSDcwMTdfTFZEU19QT1dFUl9ET1dOX0RFRkFVTFRfUkVTRVJWRUQgMHgwOAorCisjZGVmaW5lIENINzAxN19MVkRTX0VOQ09ESU5HCQkweDY0CisjZGVmaW5lIENINzAxN19MVkRTX0RJVEhFUl8yRAkJKDEgPDwgMikKKyNkZWZpbmUgQ0g3MDE3X0xWRFNfRElUSEVSX0RJUwkJKDEgPDwgMykKKyNkZWZpbmUgQ0g3MDE3X0xWRFNfRFVBTF9DSEFOTkVMX0VOCSgxIDw8IDQpCisjZGVmaW5lIENINzAxN19MVkRTXzI0X0JJVAkJKDEgPDwgNSkKKworI2RlZmluZSBDSDcwMTdfTFZEU19FTkNPRElOR18yCQkweDY1CisKKyNkZWZpbmUgQ0g3MDE3X0xWRFNfUExMX0NPTlRST0wJCTB4NjYKKy8qKiBFbmFibGVzIHRoZSBMVkRTIHBhbmVsIG91dHB1dCBwYXRoICovCisjZGVmaW5lIENINzAxN19MVkRTX1BBTkVOCQkoMSA8PCAwKQorLyoqIEVuYWJsZXMgdGhlIExWRFMgcGFuZWwgYmFja2xpZ2h0ICovCisjZGVmaW5lIENINzAxN19MVkRTX0JLTEVOCQkoMSA8PCAzKQorCisjZGVmaW5lIENINzAxN19QT1dFUl9TRVFVRU5DSU5HX1QxCTB4NjcKKyNkZWZpbmUgQ0g3MDE3X1BPV0VSX1NFUVVFTkNJTkdfVDIJMHg2OAorI2RlZmluZSBDSDcwMTdfUE9XRVJfU0VRVUVOQ0lOR19UMwkweDY5CisjZGVmaW5lIENINzAxN19QT1dFUl9TRVFVRU5DSU5HX1Q0CTB4NmEKKyNkZWZpbmUgQ0g3MDE3X1BPV0VSX1NFUVVFTkNJTkdfVDUJMHg2YgorI2RlZmluZSBDSDcwMTdfR1BJT19EUklWRVJfVFlQRQkJMHg2YworI2RlZmluZSBDSDcwMTdfR1BJT19EQVRBCQkweDZkCisjZGVmaW5lIENINzAxN19HUElPX0RJUkVDVElPTl9DT05UUk9MCTB4NmUKKworI2RlZmluZSBDSDcwMTdfTFZEU19QTExfRkVFREJBQ0tfRElWCTB4NzEKKyMgZGVmaW5lIENINzAxN19MVkRTX1BMTF9GRUVEX0JBQ0tfRElWSURFUl9TSElGVCA0CisjIGRlZmluZSBDSDcwMTdfTFZEU19QTExfRkVFRF9GT1JXQVJEX0RJVklERVJfU0hJRlQgMAorIyBkZWZpbmUgQ0g3MDE3X0xWRFNfUExMX0ZFRURCQUNLX0RFRkFVTFRfUkVTRVJWRUQgMHg4MAorCisjZGVmaW5lIENINzAxN19MVkRTX1BMTF9WQ09fQ09OVFJPTAkweDcyCisjIGRlZmluZSBDSDcwMTdfTFZEU19QTExfVkNPX0RFRkFVTFRfUkVTRVJWRUQgMHg4MAorIyBkZWZpbmUgQ0g3MDE3X0xWRFNfUExMX1ZDT19TSElGVAk0CisjIGRlZmluZSBDSDcwMTdfTFZEU19QTExfUE9TVF9TQ0FMRV9ESVZfU0hJRlQgMAorCisjZGVmaW5lIENINzAxN19PVVRQVVRTX0VOQUJMRQkJMHg3MworIyBkZWZpbmUgQ0g3MDE3X0NIQVJHRV9QVU1QX0xPVwkJMHgwCisjIGRlZmluZSBDSDcwMTdfQ0hBUkdFX1BVTVBfSElHSAkweDMKKyMgZGVmaW5lIENINzAxN19MVkRTX0NIQU5ORUxfQQkJKDEgPDwgMykKKyMgZGVmaW5lIENINzAxN19MVkRTX0NIQU5ORUxfQgkJKDEgPDwgNCkKKyMgZGVmaW5lIENINzAxN19UVl9EQUNfQQkJKDEgPDwgNSkKKyMgZGVmaW5lIENINzAxN19UVl9EQUNfQgkJKDEgPDwgNikKKyMgZGVmaW5lIENINzAxN19ERENfU0VMRUNUX0RDMgkJKDEgPDwgNykKKworI2RlZmluZSBDSDcwMTdfTFZEU19PVVRQVVRfQU1QTElUVURFCTB4NzQKKyNkZWZpbmUgQ0g3MDE3X0xWRFNfUExMX0VNSV9SRURVQ1RJT04JMHg3NQorI2RlZmluZSBDSDcwMTdfTFZEU19QT1dFUl9ET1dOX0ZMSUNLRVIJMHg3NgorCisjZGVmaW5lIENINzAxN19MVkRTX0NPTlRST0xfMgkJMHg3OAorIyBkZWZpbmUgQ0g3MDE3X0xPT1BfRklMVEVSX1NISUZUCTUKKyMgZGVmaW5lIENINzAxN19QSEFTRV9ERVRFQ1RPUl9TSElGVAkwCisKKyNkZWZpbmUgQ0g3MDE3X0JBTkdfTElNSVRfQ09OVFJPTAkweDdmCisKK3N0cnVjdCBjaDcwMTdfcHJpdiB7CisJdWludDhfdCBzYXZlX2hhcGk7CisJdWludDhfdCBzYXZlX3ZhbGk7CisJdWludDhfdCBzYXZlX3ZhbG87CisJdWludDhfdCBzYXZlX2FpbG87CisJdWludDhfdCBzYXZlX2x2ZHNfcGxsX3ZjbzsKKwl1aW50OF90IHNhdmVfZmVlZGJhY2tfZGl2OworCXVpbnQ4X3Qgc2F2ZV9sdmRzX2NvbnRyb2xfMjsKKwl1aW50OF90IHNhdmVfb3V0cHV0c19lbmFibGU7CisJdWludDhfdCBzYXZlX2x2ZHNfcG93ZXJfZG93bjsKKwl1aW50OF90IHNhdmVfcG93ZXJfbWFuYWdlbWVudDsKK307CisKK3N0YXRpYyB2b2lkIGNoNzAxN19kdW1wX3JlZ3Moc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2byk7CitzdGF0aWMgdm9pZCBjaDcwMTdfZHBtcyhzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBib29sIGNoNzAxN19yZWFkKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sIGludCBhZGRyLCB1aW50OF90ICp2YWwpCit7CisJc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMgPSBkdm8tPmkyY19idXM7CisJdTggb3V0X2J1ZlsyXTsKKwl1OCBpbl9idWZbMl07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IG91dF9idWYsCisJCX0sCisJCXsKKwkJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSBpbl9idWYsCisJCX0KKwl9OworCisJb3V0X2J1ZlswXSA9IGFkZHI7CisJb3V0X2J1ZlsxXSA9IDA7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpMmNidXMtPmFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpIHsKKwkJKnZhbD0gaW5fYnVmWzBdOworCQlyZXR1cm4gdHJ1ZTsKKwl9OworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjaDcwMTdfd3JpdGUoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IGFkZHIsIHVpbnQ4X3QgdmFsKQoreworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjYnVzID0gZHZvLT5pMmNfYnVzOworCXVpbnQ4X3Qgb3V0X2J1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gMiwKKwkJLmJ1ZiA9IG91dF9idWYsCisJfTsKKworCW91dF9idWZbMF0gPSBhZGRyOworCW91dF9idWZbMV0gPSB2YWw7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpMmNidXMtPmFkYXB0ZXIsICZtc2csIDEpID09IDEpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKiogUHJvYmVzIGZvciBhIENINzAxNyBvbiB0aGUgZ2l2ZW4gYnVzIGFuZCBzbGF2ZSBhZGRyZXNzLiAqLworc3RhdGljIGJvb2wgY2g3MDE3X2luaXQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjYnVzKQoreworCXN0cnVjdCBjaDcwMTdfcHJpdiAqcHJpdjsKKwl1aW50OF90IHZhbDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2g3MDE3X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdm8tPmkyY19idXMgPSBpMmNidXM7CisJZHZvLT5pMmNfYnVzLT5zbGF2ZV9hZGRyID0gZHZvLT5zbGF2ZV9hZGRyOworCWR2by0+ZGV2X3ByaXYgPSBwcml2OworCisJaWYgKCFjaDcwMTdfcmVhZChkdm8sIENINzAxN19ERVZJQ0VfSUQsICZ2YWwpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAodmFsICE9IENINzAxN19ERVZJQ0VfSURfVkFMVUUgJiYKKwkgICAgdmFsICE9IENINzAxOF9ERVZJQ0VfSURfVkFMVUUgJiYKKwkgICAgdmFsICE9IENINzAxOV9ERVZJQ0VfSURfVkFMVUUpIHsKKwkJRFJNX0RFQlVHKCJjaDcwMXggbm90IGRldGVjdGVkLCBnb3QgJWQ6IGZyb20gJXMgU2xhdmUgJWQuXG4iLAorCQkJICB2YWwsIGkyY2J1cy0+YWRhcHRlci5uYW1lLGkyY2J1cy0+c2xhdmVfYWRkcik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK2ZhaWw6CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBjaDcwMTdfZGV0ZWN0KHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIGNoNzAxN19tb2RlX3ZhbGlkKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sCisJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWlmIChtb2RlLT5jbG9jayA+IDE2MDAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgdm9pZCBjaDcwMTdfbW9kZV9zZXQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwl1aW50OF90IGx2ZHNfcGxsX2ZlZWRiYWNrX2RpdiwgbHZkc19wbGxfdmNvX2NvbnRyb2w7CisJdWludDhfdCBvdXRwdXRzX2VuYWJsZSwgbHZkc19jb250cm9sXzIsIGx2ZHNfcG93ZXJfZG93bjsKKwl1aW50OF90IGhvcml6b250YWxfYWN0aXZlX3BpeGVsX2lucHV0OworCXVpbnQ4X3QgaG9yaXpvbnRhbF9hY3RpdmVfcGl4ZWxfb3V0cHV0LCB2ZXJ0aWNhbF9hY3RpdmVfbGluZV9vdXRwdXQ7CisJdWludDhfdCBhY3RpdmVfaW5wdXRfbGluZV9vdXRwdXQ7CisKKwlEUk1fREVCVUcoIlJlZ2lzdGVycyBiZWZvcmUgbW9kZSBzZXR0aW5nXG4iKTsKKwljaDcwMTdfZHVtcF9yZWdzKGR2byk7CisKKwkvKiBMVkRTIFBMTCBzZXR0aW5ncyBmcm9tIHBhZ2UgNzUgb2YgNzAxNy03MDE3ZHMucGRmKi8KKwlpZiAobW9kZS0+Y2xvY2sgPCAxMDAwMDApIHsKKwkJb3V0cHV0c19lbmFibGUgPSBDSDcwMTdfTFZEU19DSEFOTkVMX0EgfCBDSDcwMTdfQ0hBUkdFX1BVTVBfTE9XOworCQlsdmRzX3BsbF9mZWVkYmFja19kaXYgPSBDSDcwMTdfTFZEU19QTExfRkVFREJBQ0tfREVGQVVMVF9SRVNFUlZFRCB8CisJCQkoMiA8PCBDSDcwMTdfTFZEU19QTExfRkVFRF9CQUNLX0RJVklERVJfU0hJRlQpIHwKKwkJCSgxMyA8PCBDSDcwMTdfTFZEU19QTExfRkVFRF9GT1JXQVJEX0RJVklERVJfU0hJRlQpOworCQlsdmRzX3BsbF92Y29fY29udHJvbCA9IENINzAxN19MVkRTX1BMTF9WQ09fREVGQVVMVF9SRVNFUlZFRCB8CisJCQkoMiA8PCBDSDcwMTdfTFZEU19QTExfVkNPX1NISUZUKSB8CisJCQkoMyA8PCBDSDcwMTdfTFZEU19QTExfUE9TVF9TQ0FMRV9ESVZfU0hJRlQpOworCQlsdmRzX2NvbnRyb2xfMiA9ICgxIDw8IENINzAxN19MT09QX0ZJTFRFUl9TSElGVCkgfAorCQkJKDAgPDwgQ0g3MDE3X1BIQVNFX0RFVEVDVE9SX1NISUZUKTsKKwl9IGVsc2UgeworCQlvdXRwdXRzX2VuYWJsZSA9IENINzAxN19MVkRTX0NIQU5ORUxfQSB8IENINzAxN19DSEFSR0VfUFVNUF9ISUdIOworCQlsdmRzX3BsbF9mZWVkYmFja19kaXYgPSBDSDcwMTdfTFZEU19QTExfRkVFREJBQ0tfREVGQVVMVF9SRVNFUlZFRCB8CisJCQkoMiA8PCBDSDcwMTdfTFZEU19QTExfRkVFRF9CQUNLX0RJVklERVJfU0hJRlQpIHwKKwkJCSgzIDw8IENINzAxN19MVkRTX1BMTF9GRUVEX0ZPUldBUkRfRElWSURFUl9TSElGVCk7CisJCWx2ZHNfcGxsX2ZlZWRiYWNrX2RpdiA9IDM1OworCQlsdmRzX2NvbnRyb2xfMiA9ICgzIDw8IENINzAxN19MT09QX0ZJTFRFUl9TSElGVCkgfAorCQkJKDAgPDwgQ0g3MDE3X1BIQVNFX0RFVEVDVE9SX1NISUZUKTsKKwkJaWYgKDEpIHsgLyogWFhYOiBkdWFsIGNoYW5uZWwgcGFuZWwgZGV0ZWN0aW9uLiAgQXNzdW1lIHllcyBmb3Igbm93LiAqLworCQkJb3V0cHV0c19lbmFibGUgfD0gQ0g3MDE3X0xWRFNfQ0hBTk5FTF9COworCQkJbHZkc19wbGxfdmNvX2NvbnRyb2wgPSBDSDcwMTdfTFZEU19QTExfVkNPX0RFRkFVTFRfUkVTRVJWRUQgfAorCQkJCSgyIDw8IENINzAxN19MVkRTX1BMTF9WQ09fU0hJRlQpIHwKKwkJCQkoMTMgPDwgQ0g3MDE3X0xWRFNfUExMX1BPU1RfU0NBTEVfRElWX1NISUZUKTsKKwkJfSBlbHNlIHsKKwkJCWx2ZHNfcGxsX3Zjb19jb250cm9sID0gQ0g3MDE3X0xWRFNfUExMX1ZDT19ERUZBVUxUX1JFU0VSVkVEIHwKKwkJCQkoMSA8PCBDSDcwMTdfTFZEU19QTExfVkNPX1NISUZUKSB8CisJCQkJKDEzIDw8IENINzAxN19MVkRTX1BMTF9QT1NUX1NDQUxFX0RJVl9TSElGVCk7CisJCX0KKwl9CisKKwlob3Jpem9udGFsX2FjdGl2ZV9waXhlbF9pbnB1dCA9IG1vZGUtPmhkaXNwbGF5ICYgMHgwMGZmOworCisJdmVydGljYWxfYWN0aXZlX2xpbmVfb3V0cHV0ID0gbW9kZS0+dmRpc3BsYXkgJiAweDAwZmY7CisJaG9yaXpvbnRhbF9hY3RpdmVfcGl4ZWxfb3V0cHV0ID0gbW9kZS0+aGRpc3BsYXkgJiAweDAwZmY7CisKKwlhY3RpdmVfaW5wdXRfbGluZV9vdXRwdXQgPSAoKG1vZGUtPmhkaXNwbGF5ICYgMHgwNzAwKSA+PiA4KSB8CisJCQkJICAgKCgobW9kZS0+dmRpc3BsYXkgJiAweDA3MDApID4+IDgpIDw8IDMpOworCisJbHZkc19wb3dlcl9kb3duID0gQ0g3MDE3X0xWRFNfUE9XRVJfRE9XTl9ERUZBVUxUX1JFU0VSVkVEIHwKKwkJCSAgKG1vZGUtPmhkaXNwbGF5ICYgMHgwNzAwKSA+PiA4OworCisJY2g3MDE3X2RwbXMoZHZvLCBEUk1fTU9ERV9EUE1TX09GRik7CisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X0hPUklaT05UQUxfQUNUSVZFX1BJWEVMX0lOUFVULAorCQkJaG9yaXpvbnRhbF9hY3RpdmVfcGl4ZWxfaW5wdXQpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19IT1JJWk9OVEFMX0FDVElWRV9QSVhFTF9PVVRQVVQsCisJCQlob3Jpem9udGFsX2FjdGl2ZV9waXhlbF9vdXRwdXQpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19WRVJUSUNBTF9BQ1RJVkVfTElORV9PVVRQVVQsCisJCQl2ZXJ0aWNhbF9hY3RpdmVfbGluZV9vdXRwdXQpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19BQ1RJVkVfSU5QVVRfTElORV9PVVRQVVQsCisJCQlhY3RpdmVfaW5wdXRfbGluZV9vdXRwdXQpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19MVkRTX1BMTF9WQ09fQ09OVFJPTCwgbHZkc19wbGxfdmNvX2NvbnRyb2wpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19MVkRTX1BMTF9GRUVEQkFDS19ESVYsIGx2ZHNfcGxsX2ZlZWRiYWNrX2Rpdik7CisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X0xWRFNfQ09OVFJPTF8yLCBsdmRzX2NvbnRyb2xfMik7CisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X09VVFBVVFNfRU5BQkxFLCBvdXRwdXRzX2VuYWJsZSk7CisKKwkvKiBUdXJuIHRoZSBMVkRTIGJhY2sgb24gd2l0aCBuZXcgc2V0dGluZ3MuICovCisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X0xWRFNfUE9XRVJfRE9XTiwgbHZkc19wb3dlcl9kb3duKTsKKworCURSTV9ERUJVRygiUmVnaXN0ZXJzIGFmdGVyIG1vZGUgc2V0dGluZ1xuIik7CisJY2g3MDE3X2R1bXBfcmVncyhkdm8pOworfQorCisvKiBzZXQgdGhlIENINzAxNyBwb3dlciBzdGF0ZSAqLworc3RhdGljIHZvaWQgY2g3MDE3X2RwbXMoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IG1vZGUpCit7CisJdWludDhfdCB2YWw7CisKKwljaDcwMTdfcmVhZChkdm8sIENINzAxN19MVkRTX1BPV0VSX0RPV04sICZ2YWwpOworCisJLyogVHVybiBvZmYgVFYvVkdBLCBhbmQgbmV2ZXIgdHVybiBpdCBvbiBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGl0LiAqLworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19QT1dFUl9NQU5BR0VNRU5ULAorCQkJQ0g3MDE3X0RBQzBfUE9XRVJfRE9XTiB8CisJCQlDSDcwMTdfREFDMV9QT1dFUl9ET1dOIHwKKwkJCUNINzAxN19EQUMyX1BPV0VSX0RPV04gfAorCQkJQ0g3MDE3X0RBQzNfUE9XRVJfRE9XTiB8CisJCQlDSDcwMTdfVFZfUE9XRVJfRE9XTl9FTik7CisKKwlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCS8qIFR1cm4gb24gdGhlIExWRFMgKi8KKwkJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X0xWRFNfUE9XRVJfRE9XTiwKKwkJCSAgICAgdmFsICYgfkNINzAxN19MVkRTX1BPV0VSX0RPV05fRU4pOworCX0gZWxzZSB7CisJCS8qIFR1cm4gb2ZmIHRoZSBMVkRTICovCisJCWNoNzAxN193cml0ZShkdm8sIENINzAxN19MVkRTX1BPV0VSX0RPV04sCisJCQkgICAgIHZhbCB8IENINzAxN19MVkRTX1BPV0VSX0RPV05fRU4pOworCX0KKworCS8qIFhYWDogU2hvdWxkIGFjdHVhbGx5IHdhaXQgZm9yIHVwZGF0ZSBwb3dlciBzdGF0dXMgc29tZWhvdyAqLworCXVkZWxheSgyMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoNzAxN19kdW1wX3JlZ3Moc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwl1aW50OF90IHZhbDsKKworI2RlZmluZSBEVU1QKHJlZykJCQkJCVwKK2RvIHsJCQkJCQkJXAorCWNoNzAxN19yZWFkKGR2bywgcmVnLCAmdmFsKTsJCQlcCisJRFJNX0RFQlVHKCNyZWcgIjogJTAyeFxuIiwgdmFsKTsJCVwKK30gd2hpbGUgKDApCisKKwlEVU1QKENINzAxN19IT1JJWk9OVEFMX0FDVElWRV9QSVhFTF9JTlBVVCk7CisJRFVNUChDSDcwMTdfSE9SSVpPTlRBTF9BQ1RJVkVfUElYRUxfT1VUUFVUKTsKKwlEVU1QKENINzAxN19WRVJUSUNBTF9BQ1RJVkVfTElORV9PVVRQVVQpOworCURVTVAoQ0g3MDE3X0FDVElWRV9JTlBVVF9MSU5FX09VVFBVVCk7CisJRFVNUChDSDcwMTdfTFZEU19QTExfVkNPX0NPTlRST0wpOworCURVTVAoQ0g3MDE3X0xWRFNfUExMX0ZFRURCQUNLX0RJVik7CisJRFVNUChDSDcwMTdfTFZEU19DT05UUk9MXzIpOworCURVTVAoQ0g3MDE3X09VVFBVVFNfRU5BQkxFKTsKKwlEVU1QKENINzAxN19MVkRTX1BPV0VSX0RPV04pOworfQorCitzdGF0aWMgdm9pZCBjaDcwMTdfc2F2ZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBjaDcwMTdfcHJpdiAqcHJpdiA9IGR2by0+ZGV2X3ByaXY7CisKKwljaDcwMTdfcmVhZChkdm8sIENINzAxN19IT1JJWk9OVEFMX0FDVElWRV9QSVhFTF9JTlBVVCwgJnByaXYtPnNhdmVfaGFwaSk7CisJY2g3MDE3X3JlYWQoZHZvLCBDSDcwMTdfVkVSVElDQUxfQUNUSVZFX0xJTkVfT1VUUFVULCAmcHJpdi0+c2F2ZV92YWxvKTsKKwljaDcwMTdfcmVhZChkdm8sIENINzAxN19BQ1RJVkVfSU5QVVRfTElORV9PVVRQVVQsICZwcml2LT5zYXZlX2FpbG8pOworCWNoNzAxN19yZWFkKGR2bywgQ0g3MDE3X0xWRFNfUExMX1ZDT19DT05UUk9MLCAmcHJpdi0+c2F2ZV9sdmRzX3BsbF92Y28pOworCWNoNzAxN19yZWFkKGR2bywgQ0g3MDE3X0xWRFNfUExMX0ZFRURCQUNLX0RJViwgJnByaXYtPnNhdmVfZmVlZGJhY2tfZGl2KTsKKwljaDcwMTdfcmVhZChkdm8sIENINzAxN19MVkRTX0NPTlRST0xfMiwgJnByaXYtPnNhdmVfbHZkc19jb250cm9sXzIpOworCWNoNzAxN19yZWFkKGR2bywgQ0g3MDE3X09VVFBVVFNfRU5BQkxFLCAmcHJpdi0+c2F2ZV9vdXRwdXRzX2VuYWJsZSk7CisJY2g3MDE3X3JlYWQoZHZvLCBDSDcwMTdfTFZEU19QT1dFUl9ET1dOLCAmcHJpdi0+c2F2ZV9sdmRzX3Bvd2VyX2Rvd24pOworCWNoNzAxN19yZWFkKGR2bywgQ0g3MDE3X1BPV0VSX01BTkFHRU1FTlQsICZwcml2LT5zYXZlX3Bvd2VyX21hbmFnZW1lbnQpOworfQorCitzdGF0aWMgdm9pZCBjaDcwMTdfcmVzdG9yZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBjaDcwMTdfcHJpdiAqcHJpdiA9IGR2by0+ZGV2X3ByaXY7CisKKwkvKiBQb3dlciBkb3duIGJlZm9yZSBjaGFuZ2luZyBtb2RlICovCisJY2g3MDE3X2RwbXMoZHZvLCBEUk1fTU9ERV9EUE1TX09GRik7CisKKwljaDcwMTdfd3JpdGUoZHZvLCBDSDcwMTdfSE9SSVpPTlRBTF9BQ1RJVkVfUElYRUxfSU5QVVQsIHByaXYtPnNhdmVfaGFwaSk7CisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X1ZFUlRJQ0FMX0FDVElWRV9MSU5FX09VVFBVVCwgcHJpdi0+c2F2ZV92YWxvKTsKKwljaDcwMTdfd3JpdGUoZHZvLCBDSDcwMTdfQUNUSVZFX0lOUFVUX0xJTkVfT1VUUFVULCBwcml2LT5zYXZlX2FpbG8pOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19MVkRTX1BMTF9WQ09fQ09OVFJPTCwgcHJpdi0+c2F2ZV9sdmRzX3BsbF92Y28pOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19MVkRTX1BMTF9GRUVEQkFDS19ESVYsIHByaXYtPnNhdmVfZmVlZGJhY2tfZGl2KTsKKwljaDcwMTdfd3JpdGUoZHZvLCBDSDcwMTdfTFZEU19DT05UUk9MXzIsIHByaXYtPnNhdmVfbHZkc19jb250cm9sXzIpOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19PVVRQVVRTX0VOQUJMRSwgcHJpdi0+c2F2ZV9vdXRwdXRzX2VuYWJsZSk7CisJY2g3MDE3X3dyaXRlKGR2bywgQ0g3MDE3X0xWRFNfUE9XRVJfRE9XTiwgcHJpdi0+c2F2ZV9sdmRzX3Bvd2VyX2Rvd24pOworCWNoNzAxN193cml0ZShkdm8sIENINzAxN19QT1dFUl9NQU5BR0VNRU5ULCBwcml2LT5zYXZlX3Bvd2VyX21hbmFnZW1lbnQpOworfQorCitzdGF0aWMgdm9pZCBjaDcwMTdfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBjaDcwMTdfcHJpdiAqcHJpdiA9IGR2by0+ZGV2X3ByaXY7CisKKwlpZiAocHJpdikgeworCQlrZnJlZShwcml2KTsKKwkJZHZvLT5kZXZfcHJpdiA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3QgaW50ZWxfZHZvX2Rldl9vcHMgY2g3MDE3X29wcyA9IHsKKwkuaW5pdCA9IGNoNzAxN19pbml0LAorCS5kZXRlY3QgPSBjaDcwMTdfZGV0ZWN0LAorCS5tb2RlX3ZhbGlkID0gY2g3MDE3X21vZGVfdmFsaWQsCisJLm1vZGVfc2V0ID0gY2g3MDE3X21vZGVfc2V0LAorCS5kcG1zID0gY2g3MDE3X2RwbXMsCisJLmR1bXBfcmVncyA9IGNoNzAxN19kdW1wX3JlZ3MsCisJLnNhdmUgPSBjaDcwMTdfc2F2ZSwKKwkucmVzdG9yZSA9IGNoNzAxN19yZXN0b3JlLAorCS5kZXN0cm95ID0gY2g3MDE3X2Rlc3Ryb3ksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZHZvX2NoN3h4eC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZHZvX2NoN3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmQ5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9fY2g3eHh4LmMKQEAgLTAsMCArMSwzNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQgwqkgMjAwNiBEYXZlIEFpcmxpZQorCitBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCituZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZHZvLmgiCisKKyNkZWZpbmUgQ0g3eHh4X1JFR19WSUQJCTB4NGEKKyNkZWZpbmUgQ0g3eHh4X1JFR19ESUQJCTB4NGIKKworI2RlZmluZSBDSDcwMTFfVklECQkweDgzIC8qIDcwMTAgYXMgd2VsbCAqLworI2RlZmluZSBDSDcwMDlBX1ZJRAkJMHg4NAorI2RlZmluZSBDSDcwMDlCX1ZJRAkJMHg4NQorI2RlZmluZSBDSDczMDFfVklECQkweDk1CisKKyNkZWZpbmUgQ0g3eHh4X1ZJRAkJMHg4NAorI2RlZmluZSBDSDd4eHhfRElECQkweDE3CisKKyNkZWZpbmUgQ0g3eHh4X05VTV9SRUdTCQkweDRjCisKKyNkZWZpbmUgQ0g3eHh4X0NNCQkweDFjCisjZGVmaW5lIENIN3h4eF9DTV9YQ00JCSgxPDwwKQorI2RlZmluZSBDSDd4eHhfQ01fTUNQCQkoMTw8MikKKyNkZWZpbmUgQ0g3eHh4X0lOUFVUX0NMT0NLCTB4MWQKKyNkZWZpbmUgQ0g3eHh4X0dQSU8JCTB4MWUKKyNkZWZpbmUgQ0g3eHh4X0dQSU9fSFBJUgkoMTw8MykKKyNkZWZpbmUgQ0g3eHh4X0lERgkJMHgxZgorCisjZGVmaW5lIENIN3h4eF9JREZfSFNQCQkoMTw8MykKKyNkZWZpbmUgQ0g3eHh4X0lERl9WU1AJCSgxPDw0KQorCisjZGVmaW5lIENIN3h4eF9DT05ORUNUSU9OX0RFVEVDVCAweDIwCisjZGVmaW5lIENIN3h4eF9DREVUX0RWSQkJKDE8PDUpCisKKyNkZWZpbmUgQ0g3MzAxX0RBQ19DTlRMCQkweDIxCisjZGVmaW5lIENINzMwMV9IT1RQTFVHCQkweDIzCisjZGVmaW5lIENIN3h4eF9UQ1RMCQkweDMxCisjZGVmaW5lIENIN3h4eF9UVkNPCQkweDMyCisjZGVmaW5lIENIN3h4eF9UUENQCQkweDMzCisjZGVmaW5lIENIN3h4eF9UUEQJCTB4MzQKKyNkZWZpbmUgQ0g3eHh4X1RQVlQJCTB4MzUKKyNkZWZpbmUgQ0g3eHh4X1RMUEYJCTB4MzYKKyNkZWZpbmUgQ0g3eHh4X1RDVAkJMHgzNworI2RlZmluZSBDSDczMDFfVEVTVF9QQVRURVJOCTB4NDgKKworI2RlZmluZSBDSDd4eHhfUE0JCTB4NDkKKyNkZWZpbmUgQ0g3eHh4X1BNX0ZQRAkJKDE8PDApCisjZGVmaW5lIENINzMwMV9QTV9EQUNQRDAJKDE8PDEpCisjZGVmaW5lIENINzMwMV9QTV9EQUNQRDEJKDE8PDIpCisjZGVmaW5lIENINzMwMV9QTV9EQUNQRDIJKDE8PDMpCisjZGVmaW5lIENIN3h4eF9QTV9EVklMCQkoMTw8NikKKyNkZWZpbmUgQ0g3eHh4X1BNX0RWSVAJCSgxPDw3KQorCisjZGVmaW5lIENINzMwMV9TWU5DX1BPTEFSSVRZCTB4NTYKKyNkZWZpbmUgQ0g3MzAxX1NZTkNfUkdCX1lVVgkoMTw8MCkKKyNkZWZpbmUgQ0g3MzAxX1NZTkNfUE9MX0RWSQkoMTw8NSkKKworLyoqIEBmaWxlCisgKiBkcml2ZXIgZm9yIHRoZSBDaHJvbnRlbCA3eHh4IERWSSBjaGlwIG92ZXIgRFZPLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2g3eHh4X2lkX3N0cnVjdCB7CisJdWludDhfdCB2aWQ7CisJY2hhciAqbmFtZTsKK30gY2g3eHh4X2lkc1tdID0geworCXsgQ0g3MDExX1ZJRCwgIkNINzAxMSIgfSwKKwl7IENINzAwOUFfVklELCAiQ0g3MDA5QSIgfSwKKwl7IENINzAwOUJfVklELCAiQ0g3MDA5QiIgfSwKKwl7IENINzMwMV9WSUQsICJDSDczMDEiIH0sCit9OworCitzdHJ1Y3QgY2g3eHh4X3JlZ19zdGF0ZSB7CisgICAgdWludDhfdCByZWdzW0NIN3h4eF9OVU1fUkVHU107Cit9OworCitzdHJ1Y3QgY2g3eHh4X3ByaXYgeworCWJvb2wgcXVpZXQ7CisKKwlzdHJ1Y3QgY2g3eHh4X3JlZ19zdGF0ZSBzYXZlX3JlZzsKKwlzdHJ1Y3QgY2g3eHh4X3JlZ19zdGF0ZSBtb2RlX3JlZzsKKwl1aW50OF90IHNhdmVfVENUTCwgc2F2ZV9UUENQLCBzYXZlX1RQRCwgc2F2ZV9UUFZUOworCXVpbnQ4X3Qgc2F2ZV9UTFBGLCBzYXZlX1RDVCwgc2F2ZV9QTSwgc2F2ZV9JREY7Cit9OworCitzdGF0aWMgdm9pZCBjaDd4eHhfc2F2ZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKKworc3RhdGljIGNoYXIgKmNoN3h4eF9nZXRfaWQodWludDhfdCB2aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaDd4eHhfaWRzKTsgaSsrKSB7CisJCWlmIChjaDd4eHhfaWRzW2ldLnZpZCA9PSB2aWQpCisJCQlyZXR1cm4gY2g3eHh4X2lkc1tpXS5uYW1lOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiogUmVhZHMgYW4gOCBiaXQgcmVnaXN0ZXIgKi8KK3N0YXRpYyBib29sIGNoN3h4eF9yZWFkYihzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgYWRkciwgdWludDhfdCAqY2gpCit7CisJc3RydWN0IGNoN3h4eF9wcml2ICpjaDd4eHg9IGR2by0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMgPSBkdm8tPmkyY19idXM7CisJdTggb3V0X2J1ZlsyXTsKKwl1OCBpbl9idWZbMl07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IG91dF9idWYsCisJCX0sCisJCXsKKwkJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSBpbl9idWYsCisJCX0KKwl9OworCisJb3V0X2J1ZlswXSA9IGFkZHI7CisJb3V0X2J1ZlsxXSA9IDA7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpMmNidXMtPmFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpIHsKKwkJKmNoID0gaW5fYnVmWzBdOworCQlyZXR1cm4gdHJ1ZTsKKwl9OworCisJaWYgKCFjaDd4eHgtPnF1aWV0KSB7CisJCURSTV9ERUJVRygiVW5hYmxlIHRvIHJlYWQgcmVnaXN0ZXIgMHglMDJ4IGZyb20gJXM6JTAyeC5cbiIsCisJCQkgIGFkZHIsIGkyY2J1cy0+YWRhcHRlci5uYW1lLCBpMmNidXMtPnNsYXZlX2FkZHIpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKiBXcml0ZXMgYW4gOCBiaXQgcmVnaXN0ZXIgKi8KK3N0YXRpYyBib29sIGNoN3h4eF93cml0ZWIoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IGFkZHIsIHVpbnQ4X3QgY2gpCit7CisJc3RydWN0IGNoN3h4eF9wcml2ICpjaDd4eHggPSBkdm8tPmRldl9wcml2OworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjYnVzID0gZHZvLT5pMmNfYnVzOworCXVpbnQ4X3Qgb3V0X2J1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gaTJjYnVzLT5zbGF2ZV9hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gMiwKKwkJLmJ1ZiA9IG91dF9idWYsCisJfTsKKworCW91dF9idWZbMF0gPSBhZGRyOworCW91dF9idWZbMV0gPSBjaDsKKworCWlmIChpMmNfdHJhbnNmZXIoJmkyY2J1cy0+YWRhcHRlciwgJm1zZywgMSkgPT0gMSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoIWNoN3h4eC0+cXVpZXQpIHsKKwkJRFJNX0RFQlVHKCJVbmFibGUgdG8gd3JpdGUgcmVnaXN0ZXIgMHglMDJ4IHRvICVzOiVkLlxuIiwKKwkJCSAgYWRkciwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjaDd4eHhfaW5pdChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMpCit7CisJLyogdGhpcyB3aWxsIGRldGVjdCB0aGUgQ0g3eHh4IGNoaXAgb24gdGhlIHNwZWNpZmllZCBpMmMgYnVzICovCisJc3RydWN0IGNoN3h4eF9wcml2ICpjaDd4eHg7CisJdWludDhfdCB2ZW5kb3IsIGRldmljZTsKKwljaGFyICpuYW1lOworCisJY2g3eHh4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoN3h4eF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoN3h4eCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdm8tPmkyY19idXMgPSBpMmNidXM7CisJZHZvLT5pMmNfYnVzLT5zbGF2ZV9hZGRyID0gZHZvLT5zbGF2ZV9hZGRyOworCWR2by0+ZGV2X3ByaXYgPSBjaDd4eHg7CisJY2g3eHh4LT5xdWlldCA9IHRydWU7CisKKwlpZiAoIWNoN3h4eF9yZWFkYihkdm8sIENIN3h4eF9SRUdfVklELCAmdmVuZG9yKSkKKwkJZ290byBvdXQ7CisKKwluYW1lID0gY2g3eHh4X2dldF9pZCh2ZW5kb3IpOworCWlmICghbmFtZSkgeworCQlEUk1fREVCVUcoImNoN3h4eCBub3QgZGV0ZWN0ZWQ7IGdvdCAweCUwMnggZnJvbSAlcyBzbGF2ZSAlZC5cbiIsCisJCQkgIHZlbmRvciwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJCWdvdG8gb3V0OworCX0KKworCisJaWYgKCFjaDd4eHhfcmVhZGIoZHZvLCBDSDd4eHhfUkVHX0RJRCwgJmRldmljZSkpCisJCWdvdG8gb3V0OworCisJaWYgKGRldmljZSAhPSBDSDd4eHhfRElEKSB7CisJCURSTV9ERUJVRygiY2g3eHh4IG5vdCBkZXRlY3RlZDsgZ290IDB4JTAyeCBmcm9tICVzIHNsYXZlICVkLlxuIiwKKwkJCSAgdmVuZG9yLCBpMmNidXMtPmFkYXB0ZXIubmFtZSwgaTJjYnVzLT5zbGF2ZV9hZGRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJY2g3eHh4LT5xdWlldCA9IGZhbHNlOworCURSTV9ERUJVRygiRGV0ZWN0ZWQgJXMgY2hpcHNldCwgdmVuZG9yL2RldmljZSBJRCAweCUwMngvMHglMDJ4XG4iLAorCQkgIG5hbWUsIHZlbmRvciwgZGV2aWNlKTsKKwlyZXR1cm4gdHJ1ZTsKK291dDoKKwlrZnJlZShjaDd4eHgpOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY2g3eHh4X2RldGVjdChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXVpbnQ4X3QgY2RldCwgb3JpZ19wbSwgcG07CisKKwljaDd4eHhfcmVhZGIoZHZvLCBDSDd4eHhfUE0sICZvcmlnX3BtKTsKKworCXBtID0gb3JpZ19wbTsKKwlwbSAmPSB+Q0g3eHh4X1BNX0ZQRDsKKwlwbSB8PSBDSDd4eHhfUE1fRFZJTCB8IENIN3h4eF9QTV9EVklQOworCisJY2g3eHh4X3dyaXRlYihkdm8sIENIN3h4eF9QTSwgcG0pOworCisJY2g3eHh4X3JlYWRiKGR2bywgQ0g3eHh4X0NPTk5FQ1RJT05fREVURUNULCAmY2RldCk7CisKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1BNLCBvcmlnX3BtKTsKKworCWlmIChjZGV0ICYgQ0g3eHh4X0NERVRfRFZJKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgY2g3eHh4X21vZGVfdmFsaWQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJaWYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGNoN3h4eF9tb2RlX3NldChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXVpbnQ4X3QgdHZjbywgdHBjcCwgdHBkLCB0bHBmLCBpZGY7CisKKwlpZiAobW9kZS0+Y2xvY2sgPD0gNjUwMDApIHsKKwkJdHZjbyA9IDB4MjM7CisJCXRwY3AgPSAweDA4OworCQl0cGQgPSAweDE2OworCQl0bHBmID0gMHg2MDsKKwl9IGVsc2UgeworCQl0dmNvID0gMHgyZDsKKwkJdHBjcCA9IDB4MDY7CisJCXRwZCA9IDB4MjY7CisJCXRscGYgPSAweGEwOworCX0KKworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVENUTCwgMHgwMCk7CisJY2g3eHh4X3dyaXRlYihkdm8sIENIN3h4eF9UVkNPLCB0dmNvKTsKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1RQQ1AsIHRwY3ApOworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVFBELCB0cGQpOworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVFBWVCwgMHgzMCk7CisJY2g3eHh4X3dyaXRlYihkdm8sIENIN3h4eF9UTFBGLCB0bHBmKTsKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1RDVCwgMHgwMCk7CisKKwljaDd4eHhfcmVhZGIoZHZvLCBDSDd4eHhfSURGLCAmaWRmKTsKKworCWlkZiAmPSB+KENIN3h4eF9JREZfSFNQIHwgQ0g3eHh4X0lERl9WU1ApOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQlpZGYgfD0gQ0g3eHh4X0lERl9IU1A7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJaWRmIHw9IENIN3h4eF9JREZfSFNQOworCisJY2g3eHh4X3dyaXRlYihkdm8sIENIN3h4eF9JREYsIGlkZik7Cit9CisKKy8qIHNldCB0aGUgQ0g3eHh4IHBvd2VyIHN0YXRlICovCitzdGF0aWMgdm9pZCBjaDd4eHhfZHBtcyhzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKQorCQljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1BNLCBDSDd4eHhfUE1fRFZJTCB8IENIN3h4eF9QTV9EVklQKTsKKwllbHNlCisJCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfUE0sIENIN3h4eF9QTV9GUEQpOworfQorCitzdGF0aWMgdm9pZCBjaDd4eHhfZHVtcF9yZWdzKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJc3RydWN0IGNoN3h4eF9wcml2ICpjaDd4eHggPSBkdm8tPmRldl9wcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENIN3h4eF9OVU1fUkVHUzsgaSsrKSB7CisJCWlmICgoaSAlIDgpID09IDAgKQorCQkJRFJNX0RFQlVHKCJcbiAlMDJYOiAiLCBpKTsKKwkJRFJNX0RFQlVHKCIlMDJYICIsIGNoN3h4eC0+bW9kZV9yZWcucmVnc1tpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaDd4eHhfc2F2ZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBjaDd4eHhfcHJpdiAqY2g3eHh4PSBkdm8tPmRldl9wcml2OworCisJY2g3eHh4X3JlYWRiKGR2bywgQ0g3eHh4X1RDVEwsICZjaDd4eHgtPnNhdmVfVENUTCk7CisJY2g3eHh4X3JlYWRiKGR2bywgQ0g3eHh4X1RQQ1AsICZjaDd4eHgtPnNhdmVfVFBDUCk7CisJY2g3eHh4X3JlYWRiKGR2bywgQ0g3eHh4X1RQRCwgJmNoN3h4eC0+c2F2ZV9UUEQpOworCWNoN3h4eF9yZWFkYihkdm8sIENIN3h4eF9UUFZULCAmY2g3eHh4LT5zYXZlX1RQVlQpOworCWNoN3h4eF9yZWFkYihkdm8sIENIN3h4eF9UTFBGLCAmY2g3eHh4LT5zYXZlX1RMUEYpOworCWNoN3h4eF9yZWFkYihkdm8sIENIN3h4eF9QTSwgJmNoN3h4eC0+c2F2ZV9QTSk7CisJY2g3eHh4X3JlYWRiKGR2bywgQ0g3eHh4X0lERiwgJmNoN3h4eC0+c2F2ZV9JREYpOworfQorCitzdGF0aWMgdm9pZCBjaDd4eHhfcmVzdG9yZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBjaDd4eHhfcHJpdiAqY2g3eHh4ID0gZHZvLT5kZXZfcHJpdjsKKworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVENUTCwgY2g3eHh4LT5zYXZlX1RDVEwpOworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVFBDUCwgY2g3eHh4LT5zYXZlX1RQQ1ApOworCWNoN3h4eF93cml0ZWIoZHZvLCBDSDd4eHhfVFBELCBjaDd4eHgtPnNhdmVfVFBEKTsKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1RQVlQsIGNoN3h4eC0+c2F2ZV9UUFZUKTsKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X1RMUEYsIGNoN3h4eC0+c2F2ZV9UTFBGKTsKKwljaDd4eHhfd3JpdGViKGR2bywgQ0g3eHh4X0lERiwgY2g3eHh4LT5zYXZlX0lERik7CisJY2g3eHh4X3dyaXRlYihkdm8sIENIN3h4eF9QTSwgY2g3eHh4LT5zYXZlX1BNKTsKK30KKworc3RhdGljIHZvaWQgY2g3eHh4X2Rlc3Ryb3koc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwlzdHJ1Y3QgY2g3eHh4X3ByaXYgKmNoN3h4eCA9IGR2by0+ZGV2X3ByaXY7CisKKwlpZiAoY2g3eHh4KSB7CisJCWtmcmVlKGNoN3h4eCk7CisJCWR2by0+ZGV2X3ByaXYgPSBOVUxMOworCX0KK30KKworc3RydWN0IGludGVsX2R2b19kZXZfb3BzIGNoN3h4eF9vcHMgPSB7CisJLmluaXQgPSBjaDd4eHhfaW5pdCwKKwkuZGV0ZWN0ID0gY2g3eHh4X2RldGVjdCwKKwkubW9kZV92YWxpZCA9IGNoN3h4eF9tb2RlX3ZhbGlkLAorCS5tb2RlX3NldCA9IGNoN3h4eF9tb2RlX3NldCwKKwkuZHBtcyA9IGNoN3h4eF9kcG1zLAorCS5kdW1wX3JlZ3MgPSBjaDd4eHhfZHVtcF9yZWdzLAorCS5zYXZlID0gY2g3eHh4X3NhdmUsCisJLnJlc3RvcmUgPSBjaDd4eHhfcmVzdG9yZSwKKwkuZGVzdHJveSA9IGNoN3h4eF9kZXN0cm95LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2b19pdmNoLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9faXZjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGQzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9faXZjaC5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkdm8uaCIKKworLyoKKyAqIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgaTgyODA3YWEuCisgKgorICogRG9jdW1lbnRhdGlvbiBvbiB0aGlzIGNoaXBzZXQgY2FuIGJlIGZvdW5kIGluIGRhdGFzaGVldCAjMjkwNjkwMDEgYXQKKyAqIGludGVsLmNvbS4KKyAqLworCisvKgorICogVkNIIFJldmlzaW9uICYgR01CdXMgQmFzZSBBZGRyCisgKi8KKyNkZWZpbmUgVlIwMAkJMHgwMAorIyBkZWZpbmUgVlIwMF9CQVNFX0FERFJFU1NfTUFTSwkJMHgwMDdmCisKKy8qCisgKiBGdW5jdGlvbmFsaXR5IEVuYWJsZQorICovCisjZGVmaW5lIFZSMDEJCTB4MDEKKworLyoKKyAqIEVuYWJsZSB0aGUgcGFuZWwgZml0dGVyCisgKi8KKyMgZGVmaW5lIFZSMDFfUEFORUxfRklUX0VOQUJMRQkJKDEgPDwgMykKKy8qCisgKiBFbmFibGVzIHRoZSBMQ0QgZGlzcGxheS4KKyAqCisgKiBUaGlzIG11c3Qgbm90IGJlIHNldCB3aGlsZSBWUjAxX0RWT19CWVBBU1NfRU5BQkxFIGlzIHNldC4KKyAqLworIyBkZWZpbmUgVlIwMV9MQ0RfRU5BQkxFCQkoMSA8PCAyKQorLyoqIEVuYWJsZXMgdGhlIERWTyByZXBlYXRlci4gKi8KKyMgZGVmaW5lIFZSMDFfRFZPX0JZUEFTU19FTkFCTEUJCSgxIDw8IDEpCisvKiogRW5hYmxlcyB0aGUgRFZPIGNsb2NrICovCisjIGRlZmluZSBWUjAxX0RWT19FTkFCTEUJCSgxIDw8IDApCisKKy8qCisgKiBMQ0QgSW50ZXJmYWNlIEZvcm1hdAorICovCisjZGVmaW5lIFZSMTAJCTB4MTAKKy8qKiBFbmFibGVzIExWRFMgb3V0cHV0IGluc3RlYWQgb2YgQ01PUyAqLworIyBkZWZpbmUgVlIxMF9MVkRTX0VOQUJMRQkJKDEgPDwgNCkKKy8qKiBFbmFibGVzIDE4LWJpdCBMVkRTIG91dHB1dC4gKi8KKyMgZGVmaW5lIFZSMTBfSU5URVJGQUNFXzFYMTgJCSgwIDw8IDIpCisvKiogRW5hYmxlcyAyNC1iaXQgTFZEUyBvciBDTU9TIG91dHB1dCAqLworIyBkZWZpbmUgVlIxMF9JTlRFUkZBQ0VfMVgyNAkJKDEgPDwgMikKKy8qKiBFbmFibGVzIDJ4MTgtYml0IExWRFMgb3IgQ01PUyBvdXRwdXQuICovCisjIGRlZmluZSBWUjEwX0lOVEVSRkFDRV8yWDE4CQkoMiA8PCAyKQorLyoqIEVuYWJsZXMgMngyNC1iaXQgTFZEUyBvdXRwdXQgKi8KKyMgZGVmaW5lIFZSMTBfSU5URVJGQUNFXzJYMjQJCSgzIDw8IDIpCisKKy8qCisgKiBWUjIwIExDRCBIb3Jpem9udGFsIERpc3BsYXkgU2l6ZQorICovCisjZGVmaW5lIFZSMjAJMHgyMAorCisvKgorICogTENEIFZlcnRpY2FsIERpc3BsYXkgU2l6ZQorICovCisjZGVmaW5lIFZSMjEJMHgyMAorCisvKgorICogUGFuZWwgcG93ZXIgZG93biBzdGF0dXMKKyAqLworI2RlZmluZSBWUjMwCQkweDMwCisvKiogUmVhZCBvbmx5IGJpdCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhbmVsIGlzIG5vdCBpbiBhIHNhZmUgcG93ZXJvZmYgc3RhdGUuICovCisjIGRlZmluZSBWUjMwX1BBTkVMX09OCQkJKDEgPDwgMTUpCisKKyNkZWZpbmUgVlI0MAkJMHg0MAorIyBkZWZpbmUgVlI0MF9TVEFMTF9FTkFCTEUJCSgxIDw8IDEzKQorIyBkZWZpbmUgVlI0MF9WRVJUSUNBTF9JTlRFUlBfRU5BQkxFCSgxIDw8IDEyKQorIyBkZWZpbmUgVlI0MF9FTkhBTkNFRF9QQU5FTF9GSVRUSU5HCSgxIDw8IDExKQorIyBkZWZpbmUgVlI0MF9IT1JJWk9OVEFMX0lOVEVSUF9FTkFCTEUJKDEgPDwgMTApCisjIGRlZmluZSBWUjQwX0FVVE9fUkFUSU9fRU5BQkxFCQkoMSA8PCA5KQorIyBkZWZpbmUgVlI0MF9DTE9DS19HQVRJTkdfRU5BQkxFCSgxIDw8IDgpCisKKy8qCisgKiBQYW5lbCBGaXR0aW5nIFZlcnRpY2FsIFJhdGlvCisgKiAoKChpbWFnZV9oZWlnaHQgLSAxKSA8PCAxNikgLyAoKHBhbmVsX2hlaWdodCAtIDEpKSkgPj4gMgorICovCisjZGVmaW5lIFZSNDEJCTB4NDEKKworLyoKKyAqIFBhbmVsIEZpdHRpbmcgSG9yaXpvbnRhbCBSYXRpbworICogKCgoaW1hZ2Vfd2lkdGggLSAxKSA8PCAxNikgLyAoKHBhbmVsX3dpZHRoIC0gMSkpKSA+PiAyCisgKi8KKyNkZWZpbmUgVlI0MgkJMHg0MgorCisvKgorICogSG9yaXpvbnRhbCBJbWFnZSBTaXplCisgKi8KKyNkZWZpbmUgVlI0MwkJMHg0MworCisvKiBWUjgwIEdQSU8gMAorICovCisjZGVmaW5lIFZSODAJICAgIDB4ODAKKyNkZWZpbmUgVlI4MQkgICAgMHg4MQorI2RlZmluZSBWUjgyCSAgICAweDgyCisjZGVmaW5lIFZSODMJICAgIDB4ODMKKyNkZWZpbmUgVlI4NAkgICAgMHg4NAorI2RlZmluZSBWUjg1CSAgICAweDg1CisjZGVmaW5lIFZSODYJICAgIDB4ODYKKyNkZWZpbmUgVlI4NwkgICAgMHg4NworCisvKiBWUjg4IEdQSU8gOAorICovCisjZGVmaW5lIFZSODgJICAgIDB4ODgKKworLyogR3JhcGhpY3MgQklPUyBzY3JhdGNoIDAKKyAqLworI2RlZmluZSBWUjhFCSAgICAweDhFCisjIGRlZmluZSBWUjhFX1BBTkVMX1RZUEVfTUFTSwkJKDB4ZiA8PCAwKQorIyBkZWZpbmUgVlI4RV9QQU5FTF9JTlRFUkZBQ0VfQ01PUwkoMCA8PCA0KQorIyBkZWZpbmUgVlI4RV9QQU5FTF9JTlRFUkZBQ0VfTFZEUwkoMSA8PCA0KQorIyBkZWZpbmUgVlI4RV9GT1JDRV9ERUZBVUxUX1BBTkVMCSgxIDw8IDUpCisKKy8qIEdyYXBoaWNzIEJJT1Mgc2NyYXRjaCAxCisgKi8KKyNkZWZpbmUgVlI4RgkgICAgMHg4RgorIyBkZWZpbmUgVlI4Rl9WQ0hfUFJFU0VOVAkJKDEgPDwgMCkKKyMgZGVmaW5lIFZSOEZfRElTUExBWV9DT05OCQkoMSA8PCAxKQorIyBkZWZpbmUgVlI4Rl9QT1dFUl9NQVNLCQkoMHgzYykKKyMgZGVmaW5lIFZSOEZfUE9XRVJfUE9TCQkJKDIpCisKKworc3RydWN0IGl2Y2hfcHJpdiB7CisJYm9vbCBxdWlldDsKKworCXVpbnQxNl90IHdpZHRoLCBoZWlnaHQ7CisKKwl1aW50MTZfdCBzYXZlX1ZSMDE7CisJdWludDE2X3Qgc2F2ZV9WUjQwOworfTsKKworCitzdGF0aWMgdm9pZCBpdmNoX2R1bXBfcmVncyhzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKTsKKworLyoqCisgKiBSZWFkcyBhIHJlZ2lzdGVyIG9uIHRoZSBpdmNoLgorICoKKyAqIEVhY2ggb2YgdGhlIDI1NiByZWdpc3RlcnMgYXJlIDE2IGJpdHMgbG9uZy4KKyAqLworc3RhdGljIGJvb2wgaXZjaF9yZWFkKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sIGludCBhZGRyLCB1aW50MTZfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXZjaF9wcml2ICpwcml2ID0gZHZvLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IGR2by0+aTJjX2J1czsKKwl1OCBvdXRfYnVmWzFdOworCXU4IGluX2J1ZlsyXTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAwLAorCQl9LAorCQl7CisJCQkuYWRkciA9IDAsCisJCQkuZmxhZ3MgPSBJMkNfTV9OT1NUQVJULAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gb3V0X2J1ZiwKKwkJfSwKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCB8IEkyQ19NX05PU1RBUlQsCisJCQkubGVuID0gMiwKKwkJCS5idWYgPSBpbl9idWYsCisJCX0KKwl9OworCisJb3V0X2J1ZlswXSA9IGFkZHI7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpMmNidXMtPmFkYXB0ZXIsIG1zZ3MsIDMpID09IDMpIHsKKwkJKmRhdGEgPSAoaW5fYnVmWzFdIDw8IDgpIHwgaW5fYnVmWzBdOworCQlyZXR1cm4gdHJ1ZTsKKwl9OworCisJaWYgKCFwcml2LT5xdWlldCkgeworCQlEUk1fREVCVUcoIlVuYWJsZSB0byByZWFkIHJlZ2lzdGVyIDB4JTAyeCBmcm9tICVzOiUwMnguXG4iLAorCQkJICBhZGRyLCBpMmNidXMtPmFkYXB0ZXIubmFtZSwgaTJjYnVzLT5zbGF2ZV9hZGRyKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKiogV3JpdGVzIGEgMTYtYml0IHJlZ2lzdGVyIG9uIHRoZSBpdmNoICovCitzdGF0aWMgYm9vbCBpdmNoX3dyaXRlKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sIGludCBhZGRyLCB1aW50MTZfdCBkYXRhKQoreworCXN0cnVjdCBpdmNoX3ByaXYgKnByaXYgPSBkdm8tPmRldl9wcml2OworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjYnVzID0gZHZvLT5pMmNfYnVzOworCXU4IG91dF9idWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IGkyY2J1cy0+c2xhdmVfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiA9IDMsCisJCS5idWYgPSBvdXRfYnVmLAorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRfYnVmWzFdID0gZGF0YSAmIDB4ZmY7CisJb3V0X2J1ZlsyXSA9IGRhdGEgPj4gODsKKworCWlmIChpMmNfdHJhbnNmZXIoJmkyY2J1cy0+YWRhcHRlciwgJm1zZywgMSkgPT0gMSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoIXByaXYtPnF1aWV0KSB7CisJCURSTV9ERUJVRygiVW5hYmxlIHRvIHdyaXRlIHJlZ2lzdGVyIDB4JTAyeCB0byAlczolZC5cbiIsCisJCQkgIGFkZHIsIGkyY2J1cy0+YWRhcHRlci5uYW1lLCBpMmNidXMtPnNsYXZlX2FkZHIpOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqIFByb2JlcyB0aGUgZ2l2ZW4gYnVzIGFuZCBzbGF2ZSBhZGRyZXNzIGZvciBhbiBpdmNoICovCitzdGF0aWMgYm9vbCBpdmNoX2luaXQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJICAgICAgc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMpCit7CisJc3RydWN0IGl2Y2hfcHJpdiAqcHJpdjsKKwl1aW50MTZfdCB0ZW1wOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdmNoX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdm8tPmkyY19idXMgPSBpMmNidXM7CisJZHZvLT5pMmNfYnVzLT5zbGF2ZV9hZGRyID0gZHZvLT5zbGF2ZV9hZGRyOworCWR2by0+ZGV2X3ByaXYgPSBwcml2OworCXByaXYtPnF1aWV0ID0gdHJ1ZTsKKworCWlmICghaXZjaF9yZWFkKGR2bywgVlIwMCwgJnRlbXApKQorCQlnb3RvIG91dDsKKwlwcml2LT5xdWlldCA9IGZhbHNlOworCisJLyogU2luY2UgdGhlIGlkZW50aWZpY2F0aW9uIGJpdHMgYXJlIHByb2JhYmx5IHplcm9lcywgd2hpY2ggZG9lc24ndCBzZWVtCisJICogdmVyeSB1bmlxdWUsIGNoZWNrIHRoYXQgdGhlIHZhbHVlIGluIHRoZSBiYXNlIGFkZHJlc3MgZmllbGQgbWF0Y2hlcworCSAqIHRoZSBhZGRyZXNzIGl0J3MgcmVzcG9uZGluZyBvbi4KKwkgKi8KKwlpZiAoKHRlbXAgJiBWUjAwX0JBU0VfQUREUkVTU19NQVNLKSAhPSBkdm8tPnNsYXZlX2FkZHIpIHsKKwkJRFJNX0RFQlVHKCJpdmNoIGRldGVjdCBmYWlsZWQgZHVlIHRvIGFkZHJlc3MgbWlzbWF0Y2ggIgorCQkJICAiKCVkIHZzICVkKVxuIiwKKwkJCSAgKHRlbXAgJiBWUjAwX0JBU0VfQUREUkVTU19NQVNLKSwgZHZvLT5zbGF2ZV9hZGRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJaXZjaF9yZWFkKGR2bywgVlIyMCwgJnByaXYtPndpZHRoKTsKKwlpdmNoX3JlYWQoZHZvLCBWUjIxLCAmcHJpdi0+aGVpZ2h0KTsKKworCXJldHVybiB0cnVlOworCitvdXQ6CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBpdmNoX2RldGVjdChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIGl2Y2hfbW9kZV92YWxpZChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJaWYgKG1vZGUtPmNsb2NrID4gMTEyMDAwKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKKy8qKiBTZXRzIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgcGFuZWwgY29ubmVjdGVkIHRvIHRoZSBpdmNoICovCitzdGF0aWMgdm9pZCBpdmNoX2RwbXMoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IG1vZGUpCit7CisJaW50IGk7CisJdWludDE2X3QgdnIwMSwgdnIzMCwgYmFja2xpZ2h0OworCisJLyogU2V0IHRoZSBuZXcgcG93ZXIgc3RhdGUgb2YgdGhlIHBhbmVsLiAqLworCWlmICghaXZjaF9yZWFkKGR2bywgVlIwMSwgJnZyMDEpKQorCQlyZXR1cm47CisKKwlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKQorCQliYWNrbGlnaHQgPSAxOworCWVsc2UKKwkJYmFja2xpZ2h0ID0gMDsKKwlpdmNoX3dyaXRlKGR2bywgVlI4MCwgYmFja2xpZ2h0KTsKKworCWlmIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pCisJCXZyMDEgfD0gVlIwMV9MQ0RfRU5BQkxFIHwgVlIwMV9EVk9fRU5BQkxFOworCWVsc2UKKwkJdnIwMSAmPSB+KFZSMDFfTENEX0VOQUJMRSB8IFZSMDFfRFZPX0VOQUJMRSk7CisKKwlpdmNoX3dyaXRlKGR2bywgVlIwMSwgdnIwMSk7CisKKwkvKiBXYWl0IGZvciB0aGUgcGFuZWwgdG8gbWFrZSBpdHMgc3RhdGUgdHJhbnNpdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlpZiAoIWl2Y2hfcmVhZChkdm8sIFZSMzAsICZ2cjMwKSkKKwkJCWJyZWFrOworCisJCWlmICgoKHZyMzAgJiBWUjMwX1BBTkVMX09OKSAhPSAwKSA9PSAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwMCk7CisJfQorCS8qIHdhaXQgc29tZSBtb3JlOyB2Y2ggbWF5IGZhaWwgdG8gcmVzeW5jIHNvbWV0aW1lcyB3aXRob3V0IHRoaXMgKi8KKwl1ZGVsYXkoMTYgKiAxMDAwKTsKK30KKworc3RhdGljIHZvaWQgaXZjaF9tb2RlX3NldChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJdWludDE2X3QgdnI0MCA9IDA7CisJdWludDE2X3QgdnIwMTsKKworCXZyMDEgPSAwOworCXZyNDAgPSAoVlI0MF9TVEFMTF9FTkFCTEUgfCBWUjQwX1ZFUlRJQ0FMX0lOVEVSUF9FTkFCTEUgfAorCQlWUjQwX0hPUklaT05UQUxfSU5URVJQX0VOQUJMRSk7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgIT0gYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgbW9kZS0+dmRpc3BsYXkgIT0gYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpIHsKKwkJdWludDE2X3QgeF9yYXRpbywgeV9yYXRpbzsKKworCQl2cjAxIHw9IFZSMDFfUEFORUxfRklUX0VOQUJMRTsKKwkJdnI0MCB8PSBWUjQwX0NMT0NLX0dBVElOR19FTkFCTEU7CisJCXhfcmF0aW8gPSAoKChtb2RlLT5oZGlzcGxheSAtIDEpIDw8IDE2KSAvCisJCQkgICAoYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgLSAxKSkgPj4gMjsKKwkJeV9yYXRpbyA9ICgoKG1vZGUtPnZkaXNwbGF5IC0gMSkgPDwgMTYpIC8KKwkJCSAgIChhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSAtIDEpKSA+PiAyOworCQlpdmNoX3dyaXRlIChkdm8sIFZSNDIsIHhfcmF0aW8pOworCQlpdmNoX3dyaXRlIChkdm8sIFZSNDEsIHlfcmF0aW8pOworCX0gZWxzZSB7CisJCXZyMDEgJj0gflZSMDFfUEFORUxfRklUX0VOQUJMRTsKKwkJdnI0MCAmPSB+VlI0MF9DTE9DS19HQVRJTkdfRU5BQkxFOworCX0KKwl2cjQwICY9IH5WUjQwX0FVVE9fUkFUSU9fRU5BQkxFOworCisJaXZjaF93cml0ZShkdm8sIFZSMDEsIHZyMDEpOworCWl2Y2hfd3JpdGUoZHZvLCBWUjQwLCB2cjQwKTsKKworCWl2Y2hfZHVtcF9yZWdzKGR2byk7Cit9CisKK3N0YXRpYyB2b2lkIGl2Y2hfZHVtcF9yZWdzKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJdWludDE2X3QgdmFsOworCisJaXZjaF9yZWFkKGR2bywgVlIwMCwgJnZhbCk7CisJRFJNX0RFQlVHKCJWUjAwOiAweCUwNHhcbiIsIHZhbCk7CisJaXZjaF9yZWFkKGR2bywgVlIwMSwgJnZhbCk7CisJRFJNX0RFQlVHKCJWUjAxOiAweCUwNHhcbiIsIHZhbCk7CisJaXZjaF9yZWFkKGR2bywgVlIzMCwgJnZhbCk7CisJRFJNX0RFQlVHKCJWUjMwOiAweCUwNHhcbiIsIHZhbCk7CisJaXZjaF9yZWFkKGR2bywgVlI0MCwgJnZhbCk7CisJRFJNX0RFQlVHKCJWUjQwOiAweCUwNHhcbiIsIHZhbCk7CisKKwkvKiBHUElPIHJlZ2lzdGVycyAqLworCWl2Y2hfcmVhZChkdm8sIFZSODAsICZ2YWwpOworCURSTV9ERUJVRygiVlI4MDogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODEsICZ2YWwpOworCURSTV9ERUJVRygiVlI4MTogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODIsICZ2YWwpOworCURSTV9ERUJVRygiVlI4MjogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODMsICZ2YWwpOworCURSTV9ERUJVRygiVlI4MzogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODQsICZ2YWwpOworCURSTV9ERUJVRygiVlI4NDogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODUsICZ2YWwpOworCURSTV9ERUJVRygiVlI4NTogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODYsICZ2YWwpOworCURSTV9ERUJVRygiVlI4NjogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODcsICZ2YWwpOworCURSTV9ERUJVRygiVlI4NzogMHglMDR4XG4iLCB2YWwpOworCWl2Y2hfcmVhZChkdm8sIFZSODgsICZ2YWwpOworCURSTV9ERUJVRygiVlI4ODogMHglMDR4XG4iLCB2YWwpOworCisJLyogU2NyYXRjaCByZWdpc3RlciAwIC0gQUlNIFBhbmVsIHR5cGUgKi8KKwlpdmNoX3JlYWQoZHZvLCBWUjhFLCAmdmFsKTsKKwlEUk1fREVCVUcoIlZSOEU6IDB4JTA0eFxuIiwgdmFsKTsKKworCS8qIFNjcmF0Y2ggcmVnaXN0ZXIgMSAtIFN0YXR1cyByZWdpc3RlciAqLworCWl2Y2hfcmVhZChkdm8sIFZSOEYsICZ2YWwpOworCURSTV9ERUJVRygiVlI4RjogMHglMDR4XG4iLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpdmNoX3NhdmUoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwlzdHJ1Y3QgaXZjaF9wcml2ICpwcml2ID0gZHZvLT5kZXZfcHJpdjsKKworCWl2Y2hfcmVhZChkdm8sIFZSMDEsICZwcml2LT5zYXZlX1ZSMDEpOworCWl2Y2hfcmVhZChkdm8sIFZSNDAsICZwcml2LT5zYXZlX1ZSNDApOworfQorCitzdGF0aWMgdm9pZCBpdmNoX3Jlc3RvcmUoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwlzdHJ1Y3QgaXZjaF9wcml2ICpwcml2ID0gZHZvLT5kZXZfcHJpdjsKKworCWl2Y2hfd3JpdGUoZHZvLCBWUjAxLCBwcml2LT5zYXZlX1ZSMDEpOworCWl2Y2hfd3JpdGUoZHZvLCBWUjQwLCBwcml2LT5zYXZlX1ZSNDApOworfQorCitzdGF0aWMgdm9pZCBpdmNoX2Rlc3Ryb3koc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwlzdHJ1Y3QgaXZjaF9wcml2ICpwcml2ID0gZHZvLT5kZXZfcHJpdjsKKworCWlmIChwcml2KSB7CisJCWtmcmVlKHByaXYpOworCQlkdm8tPmRldl9wcml2ID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBpbnRlbF9kdm9fZGV2X29wcyBpdmNoX29wcz0geworCS5pbml0ID0gaXZjaF9pbml0LAorCS5kcG1zID0gaXZjaF9kcG1zLAorCS5zYXZlID0gaXZjaF9zYXZlLAorCS5yZXN0b3JlID0gaXZjaF9yZXN0b3JlLAorCS5tb2RlX3ZhbGlkID0gaXZjaF9tb2RlX3ZhbGlkLAorCS5tb2RlX3NldCA9IGl2Y2hfbW9kZV9zZXQsCisJLmRldGVjdCA9IGl2Y2hfZGV0ZWN0LAorCS5kdW1wX3JlZ3MgPSBpdmNoX2R1bXBfcmVncywKKwkuZGVzdHJveSA9IGl2Y2hfZGVzdHJveSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9fc2lsMTY0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9fc2lsMTY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzYTRiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2b19zaWwxNjQuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0NvcHlyaWdodCDCqSAyMDA2IERhdmUgQWlybGllCisKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKK25leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCitvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkdm8uaCIKKworI2RlZmluZSBTSUwxNjRfVklEIDB4MDAwMQorI2RlZmluZSBTSUwxNjRfRElEIDB4MDAwNgorCisjZGVmaW5lIFNJTDE2NF9WSURfTE8gMHgwMAorI2RlZmluZSBTSUwxNjRfVklEX0hJIDB4MDEKKyNkZWZpbmUgU0lMMTY0X0RJRF9MTyAweDAyCisjZGVmaW5lIFNJTDE2NF9ESURfSEkgMHgwMworI2RlZmluZSBTSUwxNjRfUkVWICAgIDB4MDQKKyNkZWZpbmUgU0lMMTY0X1JTVkQgICAweDA1CisjZGVmaW5lIFNJTDE2NF9GUkVRX0xPIDB4MDYKKyNkZWZpbmUgU0lMMTY0X0ZSRVFfSEkgMHgwNworCisjZGVmaW5lIFNJTDE2NF9SRUc4IDB4MDgKKyNkZWZpbmUgU0lMMTY0XzhfVkVOICgxPDw1KQorI2RlZmluZSBTSUwxNjRfOF9IRU4gKDE8PDQpCisjZGVmaW5lIFNJTDE2NF84X0RTRUwgKDE8PDMpCisjZGVmaW5lIFNJTDE2NF84X0JTRUwgKDE8PDIpCisjZGVmaW5lIFNJTDE2NF84X0VER0UgKDE8PDEpCisjZGVmaW5lIFNJTDE2NF84X1BEICAgKDE8PDApCisKKyNkZWZpbmUgU0lMMTY0X1JFRzkgMHgwOQorI2RlZmluZSBTSUwxNjRfOV9WTE9XICgxPDw3KQorI2RlZmluZSBTSUwxNjRfOV9NU0VMX01BU0sgKDB4Nzw8NCkKKyNkZWZpbmUgU0lMMTY0XzlfVFNFTCAoMTw8MykKKyNkZWZpbmUgU0lMMTY0XzlfUlNFTiAoMTw8MikKKyNkZWZpbmUgU0lMMTY0XzlfSFRQTEcgKDE8PDEpCisjZGVmaW5lIFNJTDE2NF85X01ESSAoMTw8MCkKKworI2RlZmluZSBTSUwxNjRfUkVHQyAweDBjCisKK3N0cnVjdCBzaWwxNjRfc2F2ZV9yZWMgeworCXVpbnQ4X3QgcmVnODsKKwl1aW50OF90IHJlZzk7CisJdWludDhfdCByZWdjOworfTsKKworc3RydWN0IHNpbDE2NF9wcml2IHsKKwkvL0kyQ0RldlJlYyBkOworCWJvb2wgcXVpZXQ7CisJc3RydWN0IHNpbDE2NF9zYXZlX3JlYyBzYXZlX3JlZ3M7CisJc3RydWN0IHNpbDE2NF9zYXZlX3JlYyBtb2RlX3JlZ3M7Cit9OworCisjZGVmaW5lIFNJTFBUUihkKSAoKFNJTDE2NFB0cikoZC0+RHJpdmVyUHJpdmF0ZS5wdHIpKQorCitzdGF0aWMgYm9vbCBzaWwxNjRfcmVhZGIoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IGFkZHIsIHVpbnQ4X3QgKmNoKQoreworCXN0cnVjdCBzaWwxNjRfcHJpdiAqc2lsID0gZHZvLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IGR2by0+aTJjX2J1czsKKwl1OCBvdXRfYnVmWzJdOworCXU4IGluX2J1ZlsyXTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gb3V0X2J1ZiwKKwkJfSwKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IGluX2J1ZiwKKwkJfQorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRfYnVmWzFdID0gMDsKKworCWlmIChpMmNfdHJhbnNmZXIoJmkyY2J1cy0+YWRhcHRlciwgbXNncywgMikgPT0gMikgeworCQkqY2ggPSBpbl9idWZbMF07CisJCXJldHVybiB0cnVlOworCX07CisKKwlpZiAoIXNpbC0+cXVpZXQpIHsKKwkJRFJNX0RFQlVHKCJVbmFibGUgdG8gcmVhZCByZWdpc3RlciAweCUwMnggZnJvbSAlczolMDJ4LlxuIiwKKwkJCSAgYWRkciwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc2lsMTY0X3dyaXRlYihzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgYWRkciwgdWludDhfdCBjaCkKK3sKKwlzdHJ1Y3Qgc2lsMTY0X3ByaXYgKnNpbD0gZHZvLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IGR2by0+aTJjX2J1czsKKwl1aW50OF90IG91dF9idWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IGkyY2J1cy0+c2xhdmVfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiA9IDIsCisJCS5idWYgPSBvdXRfYnVmLAorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRfYnVmWzFdID0gY2g7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpMmNidXMtPmFkYXB0ZXIsICZtc2csIDEpID09IDEpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFzaWwtPnF1aWV0KSB7CisJCURSTV9ERUJVRygiVW5hYmxlIHRvIHdyaXRlIHJlZ2lzdGVyIDB4JTAyeCB0byAlczolZC5cbiIsCisJCQkgIGFkZHIsIGkyY2J1cy0+YWRhcHRlci5uYW1lLCBpMmNidXMtPnNsYXZlX2FkZHIpOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyogU2lsaWNvbiBJbWFnZSAxNjQgZHJpdmVyIGZvciBjaGlwIG9uIGkyYyBidXMgKi8KK3N0YXRpYyBib29sIHNpbDE2NF9pbml0KHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sCisJCQlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cykKK3sKKwkvKiB0aGlzIHdpbGwgZGV0ZWN0IHRoZSBTSUwxNjQgY2hpcCBvbiB0aGUgc3BlY2lmaWVkIGkyYyBidXMgKi8KKwlzdHJ1Y3Qgc2lsMTY0X3ByaXYgKnNpbDsKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJc2lsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNpbDE2NF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNpbCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkdm8tPmkyY19idXMgPSBpMmNidXM7CisJZHZvLT5pMmNfYnVzLT5zbGF2ZV9hZGRyID0gZHZvLT5zbGF2ZV9hZGRyOworCWR2by0+ZGV2X3ByaXYgPSBzaWw7CisJc2lsLT5xdWlldCA9IHRydWU7CisKKwlpZiAoIXNpbDE2NF9yZWFkYihkdm8sIFNJTDE2NF9WSURfTE8sICZjaCkpCisJCWdvdG8gb3V0OworCisJaWYgKGNoICE9IChTSUwxNjRfVklEICYgMHhmZikpIHsKKwkJRFJNX0RFQlVHKCJzaWwxNjQgbm90IGRldGVjdGVkIGdvdCAlZDogZnJvbSAlcyBTbGF2ZSAlZC5cbiIsCisJCQkgIGNoLCBpMmNidXMtPmFkYXB0ZXIubmFtZSwgaTJjYnVzLT5zbGF2ZV9hZGRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfRElEX0xPLCAmY2gpKQorCQlnb3RvIG91dDsKKworCWlmIChjaCAhPSAoU0lMMTY0X0RJRCAmIDB4ZmYpKSB7CisJCURSTV9ERUJVRygic2lsMTY0IG5vdCBkZXRlY3RlZCBnb3QgJWQ6IGZyb20gJXMgU2xhdmUgJWQuXG4iLAorCQkJICBjaCwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJCWdvdG8gb3V0OworCX0KKwlzaWwtPnF1aWV0ID0gZmFsc2U7CisKKwlEUk1fREVCVUcoImluaXQgc2lsMTY0IGR2byBjb250cm9sbGVyIHN1Y2Nlc3NmdWxseSFcbiIpOworCXJldHVybiB0cnVlOworCitvdXQ6CisJa2ZyZWUoc2lsKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHNpbDE2NF9kZXRlY3Qoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwl1aW50OF90IHJlZzk7CisKKwlzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfUkVHOSwgJnJlZzkpOworCisJaWYgKHJlZzkgJiBTSUwxNjRfOV9IVFBMRykKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgc2lsMTY0X21vZGVfdmFsaWQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHNpbDE2NF9tb2RlX3NldChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCS8qIEFzIGxvbmcgYXMgdGhlIGJhc2ljcyBhcmUgc2V0IHVwLCBzaW5jZSB3ZSBkb24ndCBoYXZlIGNsb2NrCisJICogZGVwZW5kZW5jaWVzIGluIHRoZSBtb2RlIHNldHVwLCB3ZSBjYW4ganVzdCBsZWF2ZSB0aGUKKwkgKiByZWdpc3RlcnMgYWxvbmUgYW5kIGV2ZXJ5dGhpbmcgd2lsbCB3b3JrIGZpbmUuCisJICovCisJLyogcmVjb21tZW5kZWQgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgZnJvbSBkb2MgKi8KKwkvKnNpbDE2NF93cml0ZWIoc2lsLCAweDA4LCAweDMwKTsKKwkgIHNpbDE2NF93cml0ZWIoc2lsLCAweDA5LCAweDAwKTsKKwkgIHNpbDE2NF93cml0ZWIoc2lsLCAweDBhLCAweDkwKTsKKwkgIHNpbDE2NF93cml0ZWIoc2lsLCAweDBjLCAweDg5KTsKKwkgIHNpbDE2NF93cml0ZWIoc2lsLCAweDA4LCAweDMxKTsqLworCS8qIGRvbid0IGRvIG11Y2ggKi8KKwlyZXR1cm47Cit9CisKKy8qIHNldCB0aGUgU0lMMTY0IHBvd2VyIHN0YXRlICovCitzdGF0aWMgdm9pZCBzaWwxNjRfZHBtcyhzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgY2g7CisKKwlyZXQgPSBzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfUkVHOCwgJmNoKTsKKwlpZiAocmV0ID09IGZhbHNlKQorCQlyZXR1cm47CisKKwlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKQorCQljaCB8PSBTSUwxNjRfOF9QRDsKKwllbHNlCisJCWNoICY9IH5TSUwxNjRfOF9QRDsKKworCXNpbDE2NF93cml0ZWIoZHZvLCBTSUwxNjRfUkVHOCwgY2gpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2lsMTY0X2R1bXBfcmVncyhzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXVpbnQ4X3QgdmFsOworCisJc2lsMTY0X3JlYWRiKGR2bywgU0lMMTY0X0ZSRVFfTE8sICZ2YWwpOworCURSTV9ERUJVRygiU0lMMTY0X0ZSRVFfTE86IDB4JTAyeFxuIiwgdmFsKTsKKwlzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfRlJFUV9ISSwgJnZhbCk7CisJRFJNX0RFQlVHKCJTSUwxNjRfRlJFUV9ISTogMHglMDJ4XG4iLCB2YWwpOworCXNpbDE2NF9yZWFkYihkdm8sIFNJTDE2NF9SRUc4LCAmdmFsKTsKKwlEUk1fREVCVUcoIlNJTDE2NF9SRUc4OiAweCUwMnhcbiIsIHZhbCk7CisJc2lsMTY0X3JlYWRiKGR2bywgU0lMMTY0X1JFRzksICZ2YWwpOworCURSTV9ERUJVRygiU0lMMTY0X1JFRzk6IDB4JTAyeFxuIiwgdmFsKTsKKwlzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfUkVHQywgJnZhbCk7CisJRFJNX0RFQlVHKCJTSUwxNjRfUkVHQzogMHglMDJ4XG4iLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBzaWwxNjRfc2F2ZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBzaWwxNjRfcHJpdiAqc2lsPSBkdm8tPmRldl9wcml2OworCisJaWYgKCFzaWwxNjRfcmVhZGIoZHZvLCBTSUwxNjRfUkVHOCwgJnNpbC0+c2F2ZV9yZWdzLnJlZzgpKQorCQlyZXR1cm47CisKKwlpZiAoIXNpbDE2NF9yZWFkYihkdm8sIFNJTDE2NF9SRUc5LCAmc2lsLT5zYXZlX3JlZ3MucmVnOSkpCisJCXJldHVybjsKKworCWlmICghc2lsMTY0X3JlYWRiKGR2bywgU0lMMTY0X1JFR0MsICZzaWwtPnNhdmVfcmVncy5yZWdjKSkKKwkJcmV0dXJuOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzaWwxNjRfcmVzdG9yZShzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvKQoreworCXN0cnVjdCBzaWwxNjRfcHJpdiAqc2lsID0gZHZvLT5kZXZfcHJpdjsKKworCS8qIFJlc3RvcmUgaXQgcG93ZXJlZCBkb3duIGluaXRpYWxseSAqLworCXNpbDE2NF93cml0ZWIoZHZvLCBTSUwxNjRfUkVHOCwgc2lsLT5zYXZlX3JlZ3MucmVnOCAmIH4weDEpOworCisJc2lsMTY0X3dyaXRlYihkdm8sIFNJTDE2NF9SRUc5LCBzaWwtPnNhdmVfcmVncy5yZWc5KTsKKwlzaWwxNjRfd3JpdGViKGR2bywgU0lMMTY0X1JFR0MsIHNpbC0+c2F2ZV9yZWdzLnJlZ2MpOworCXNpbDE2NF93cml0ZWIoZHZvLCBTSUwxNjRfUkVHOCwgc2lsLT5zYXZlX3JlZ3MucmVnOCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbDE2NF9kZXN0cm95KHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJc3RydWN0IHNpbDE2NF9wcml2ICpzaWwgPSBkdm8tPmRldl9wcml2OworCisJaWYgKHNpbCkgeworCQlrZnJlZShzaWwpOworCQlkdm8tPmRldl9wcml2ID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBpbnRlbF9kdm9fZGV2X29wcyBzaWwxNjRfb3BzID0geworCS5pbml0ID0gc2lsMTY0X2luaXQsCisJLmRldGVjdCA9IHNpbDE2NF9kZXRlY3QsCisJLm1vZGVfdmFsaWQgPSBzaWwxNjRfbW9kZV92YWxpZCwKKwkubW9kZV9zZXQgPSBzaWwxNjRfbW9kZV9zZXQsCisJLmRwbXMgPSBzaWwxNjRfZHBtcywKKwkuZHVtcF9yZWdzID0gc2lsMTY0X2R1bXBfcmVncywKKwkuc2F2ZSA9IHNpbDE2NF9zYXZlLAorCS5yZXN0b3JlID0gc2lsMTY0X3Jlc3RvcmUsCisJLmRlc3Ryb3kgPSBzaWwxNjRfZGVzdHJveSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9fdGZwNDEwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kdm9fdGZwNDEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3ZmRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2R2b190ZnA0MTAuYwpAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA3IERhdmUgTXVlbGxlcgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRGF2ZSBNdWVsbGVyIDxkYXZlLm11ZWxsZXJAZ214LmNoPgorICoKKyAqLworCisjaW5jbHVkZSAiZHZvLmgiCisKKy8qIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFjY29yZGluZyB0byB0aGUgVEZQNDEwIGRhdGEgc2hlZXQgKi8KKyNkZWZpbmUgVEZQNDEwX1ZJRAkJMHgwMTRDCisjZGVmaW5lIFRGUDQxMF9ESUQJCTB4MDQxMAorCisjZGVmaW5lIFRGUDQxMF9WSURfTE8JCTB4MDAKKyNkZWZpbmUgVEZQNDEwX1ZJRF9ISQkJMHgwMQorI2RlZmluZSBURlA0MTBfRElEX0xPCQkweDAyCisjZGVmaW5lIFRGUDQxMF9ESURfSEkJCTB4MDMKKyNkZWZpbmUgVEZQNDEwX1JFVgkJMHgwNAorCisjZGVmaW5lIFRGUDQxMF9DVExfMQkJMHgwOAorI2RlZmluZSBURlA0MTBfQ1RMXzFfVERJUwkoMTw8NikKKyNkZWZpbmUgVEZQNDEwX0NUTF8xX1ZFTgkoMTw8NSkKKyNkZWZpbmUgVEZQNDEwX0NUTF8xX0hFTgkoMTw8NCkKKyNkZWZpbmUgVEZQNDEwX0NUTF8xX0RTRUwJKDE8PDMpCisjZGVmaW5lIFRGUDQxMF9DVExfMV9CU0VMCSgxPDwyKQorI2RlZmluZSBURlA0MTBfQ1RMXzFfRURHRQkoMTw8MSkKKyNkZWZpbmUgVEZQNDEwX0NUTF8xX1BECQkoMTw8MCkKKworI2RlZmluZSBURlA0MTBfQ1RMXzIJCTB4MDkKKyNkZWZpbmUgVEZQNDEwX0NUTF8yX1ZMT1cJKDE8PDcpCisjZGVmaW5lIFRGUDQxMF9DVExfMl9NU0VMX01BU0sJKDB4Nzw8NCkKKyNkZWZpbmUgVEZQNDEwX0NUTF8yX01TRUwJKDE8PDQpCisjZGVmaW5lIFRGUDQxMF9DVExfMl9UU0VMCSgxPDwzKQorI2RlZmluZSBURlA0MTBfQ1RMXzJfUlNFTgkoMTw8MikKKyNkZWZpbmUgVEZQNDEwX0NUTF8yX0hUUExHCSgxPDwxKQorI2RlZmluZSBURlA0MTBfQ1RMXzJfTURJCSgxPDwwKQorCisjZGVmaW5lIFRGUDQxMF9DVExfMwkJMHgwQQorI2RlZmluZSBURlA0MTBfQ1RMXzNfREtfTUFTSyAJKDB4Nzw8NSkKKyNkZWZpbmUgVEZQNDEwX0NUTF8zX0RLCQkoMTw8NSkKKyNkZWZpbmUgVEZQNDEwX0NUTF8zX0RLRU4JKDE8PDQpCisjZGVmaW5lIFRGUDQxMF9DVExfM19DVExfTUFTSwkoMHg3PDwxKQorI2RlZmluZSBURlA0MTBfQ1RMXzNfQ1RMCSgxPDwxKQorCisjZGVmaW5lIFRGUDQxMF9VU0VSQ0ZHCQkweDBCCisKKyNkZWZpbmUgVEZQNDEwX0RFX0RMWQkJMHgzMgorCisjZGVmaW5lIFRGUDQxMF9ERV9DVEwJCTB4MzMKKyNkZWZpbmUgVEZQNDEwX0RFX0NUTF9ERUdFTgkoMTw8NikKKyNkZWZpbmUgVEZQNDEwX0RFX0NUTF9WU1BPTAkoMTw8NSkKKyNkZWZpbmUgVEZQNDEwX0RFX0NUTF9IU1BPTAkoMTw8NCkKKyNkZWZpbmUgVEZQNDEwX0RFX0NUTF9ERURMWTgJKDE8PDApCisKKyNkZWZpbmUgVEZQNDEwX0RFX1RPUAkJMHgzNAorCisjZGVmaW5lIFRGUDQxMF9ERV9DTlRfTE8JMHgzNgorI2RlZmluZSBURlA0MTBfREVfQ05UX0hJCTB4MzcKKworI2RlZmluZSBURlA0MTBfREVfTElOX0xPCTB4MzgKKyNkZWZpbmUgVEZQNDEwX0RFX0xJTl9ISQkweDM5CisKKyNkZWZpbmUgVEZQNDEwX0hfUkVTX0xPCQkweDNBCisjZGVmaW5lIFRGUDQxMF9IX1JFU19ISQkJMHgzQgorCisjZGVmaW5lIFRGUDQxMF9WX1JFU19MTwkJMHgzQworI2RlZmluZSBURlA0MTBfVl9SRVNfSEkJCTB4M0QKKworc3RydWN0IHRmcDQxMF9zYXZlX3JlYyB7CisJdWludDhfdCBjdGwxOworCXVpbnQ4X3QgY3RsMjsKK307CisKK3N0cnVjdCB0ZnA0MTBfcHJpdiB7CisJYm9vbCBxdWlldDsKKworCXN0cnVjdCB0ZnA0MTBfc2F2ZV9yZWMgc2F2ZWRfcmVnOworCXN0cnVjdCB0ZnA0MTBfc2F2ZV9yZWMgbW9kZV9yZWc7Cit9OworCitzdGF0aWMgYm9vbCB0ZnA0MTBfcmVhZGIoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywgaW50IGFkZHIsIHVpbnQ4X3QgKmNoKQoreworCXN0cnVjdCB0ZnA0MTBfcHJpdiAqdGZwID0gZHZvLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IGR2by0+aTJjX2J1czsKKwl1OCBvdXRfYnVmWzJdOworCXU4IGluX2J1ZlsyXTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gb3V0X2J1ZiwKKwkJfSwKKwkJeworCQkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IGluX2J1ZiwKKwkJfQorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRfYnVmWzFdID0gMDsKKworCWlmIChpMmNfdHJhbnNmZXIoJmkyY2J1cy0+YWRhcHRlciwgbXNncywgMikgPT0gMikgeworCQkqY2ggPSBpbl9idWZbMF07CisJCXJldHVybiB0cnVlOworCX07CisKKwlpZiAoIXRmcC0+cXVpZXQpIHsKKwkJRFJNX0RFQlVHKCJVbmFibGUgdG8gcmVhZCByZWdpc3RlciAweCUwMnggZnJvbSAlczolMDJ4LlxuIiwKKwkJCSAgYWRkciwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgdGZwNDEwX3dyaXRlYihzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLCBpbnQgYWRkciwgdWludDhfdCBjaCkKK3sKKwlzdHJ1Y3QgdGZwNDEwX3ByaXYgKnRmcCA9IGR2by0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX2kyY19jaGFuICppMmNidXMgPSBkdm8tPmkyY19idXM7CisJdWludDhfdCBvdXRfYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBpMmNidXMtPnNsYXZlX2FkZHIsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gPSAyLAorCQkuYnVmID0gb3V0X2J1ZiwKKwl9OworCisJb3V0X2J1ZlswXSA9IGFkZHI7CisJb3V0X2J1ZlsxXSA9IGNoOworCisJaWYgKGkyY190cmFuc2ZlcigmaTJjYnVzLT5hZGFwdGVyLCAmbXNnLCAxKSA9PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICghdGZwLT5xdWlldCkgeworCQlEUk1fREVCVUcoIlVuYWJsZSB0byB3cml0ZSByZWdpc3RlciAweCUwMnggdG8gJXM6JWQuXG4iLAorCQkJICBhZGRyLCBpMmNidXMtPmFkYXB0ZXIubmFtZSwgaTJjYnVzLT5zbGF2ZV9hZGRyKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgdGZwNDEwX2dldGlkKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sIGludCBhZGRyKQoreworCXVpbnQ4X3QgY2gxLCBjaDI7CisKKwlpZiAodGZwNDEwX3JlYWRiKGR2bywgYWRkciswLCAmY2gxKSAmJgorCSAgICB0ZnA0MTBfcmVhZGIoZHZvLCBhZGRyKzEsICZjaDIpKQorCQlyZXR1cm4gKChjaDIgPDwgOCkgJiAweEZGMDApIHwgKGNoMSAmIDB4MDBGRik7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qIFRpIFRGUDQxMCBkcml2ZXIgZm9yIGNoaXAgb24gaTJjIGJ1cyAqLworc3RhdGljIGJvb2wgdGZwNDEwX2luaXQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjYnVzKQoreworCS8qIHRoaXMgd2lsbCBkZXRlY3QgdGhlIHRmcDQxMCBjaGlwIG9uIHRoZSBzcGVjaWZpZWQgaTJjIGJ1cyAqLworCXN0cnVjdCB0ZnA0MTBfcHJpdiAqdGZwOworCWludCBpZDsKKworCXRmcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZnA0MTBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh0ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJZHZvLT5pMmNfYnVzID0gaTJjYnVzOworCWR2by0+aTJjX2J1cy0+c2xhdmVfYWRkciA9IGR2by0+c2xhdmVfYWRkcjsKKwlkdm8tPmRldl9wcml2ID0gdGZwOworCXRmcC0+cXVpZXQgPSB0cnVlOworCisJaWYgKChpZCA9IHRmcDQxMF9nZXRpZChkdm8sIFRGUDQxMF9WSURfTE8pKSAhPSBURlA0MTBfVklEKSB7CisJCURSTV9ERUJVRygidGZwNDEwIG5vdCBkZXRlY3RlZCBnb3QgVklEICVYOiBmcm9tICVzIFNsYXZlICVkLlxuIiwKKwkJCSAgaWQsIGkyY2J1cy0+YWRhcHRlci5uYW1lLCBpMmNidXMtPnNsYXZlX2FkZHIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGlkID0gdGZwNDEwX2dldGlkKGR2bywgVEZQNDEwX0RJRF9MTykpICE9IFRGUDQxMF9ESUQpIHsKKwkJRFJNX0RFQlVHKCJ0ZnA0MTAgbm90IGRldGVjdGVkIGdvdCBESUQgJVg6IGZyb20gJXMgU2xhdmUgJWQuXG4iLAorCQkJICBpZCwgaTJjYnVzLT5hZGFwdGVyLm5hbWUsIGkyY2J1cy0+c2xhdmVfYWRkcik7CisJCWdvdG8gb3V0OworCX0KKwl0ZnAtPnF1aWV0ID0gZmFsc2U7CisJcmV0dXJuIHRydWU7CitvdXQ6CisJa2ZyZWUodGZwKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHRmcDQxMF9kZXRlY3Qoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCXVpbnQ4X3QgY3RsMjsKKworCWlmICh0ZnA0MTBfcmVhZGIoZHZvLCBURlA0MTBfQ1RMXzIsICZjdGwyKSkgeworCQlpZiAoY3RsMiAmIFRGUDQxMF9DVExfMl9IVFBMRykKKwkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMgdGZwNDEwX21vZGVfdmFsaWQoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bywKKwkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHRmcDQxMF9tb2RlX3NldChzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworICAgIC8qIEFzIGxvbmcgYXMgdGhlIGJhc2ljcyBhcmUgc2V0IHVwLCBzaW5jZSB3ZSBkb24ndCBoYXZlIGNsb2NrIGRlcGVuZGVuY2llcworICAgICAqIGluIHRoZSBtb2RlIHNldHVwLCB3ZSBjYW4ganVzdCBsZWF2ZSB0aGUgcmVnaXN0ZXJzIGFsb25lIGFuZCBldmVyeXRoaW5nCisgICAgICogd2lsbCB3b3JrIGZpbmUuCisgICAgICovCisgICAgLyogZG9uJ3QgZG8gbXVjaCAqLworICAgIHJldHVybjsKK30KKworLyogc2V0IHRoZSB0ZnA0MTAgcG93ZXIgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIHRmcDQxMF9kcG1zKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8sIGludCBtb2RlKQoreworCXVpbnQ4X3QgY3RsMTsKKworCWlmICghdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0NUTF8xLCAmY3RsMSkpCisJCXJldHVybjsKKworCWlmIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pCisJCWN0bDEgfD0gVEZQNDEwX0NUTF8xX1BEOworCWVsc2UKKwkJY3RsMSAmPSB+VEZQNDEwX0NUTF8xX1BEOworCisJdGZwNDEwX3dyaXRlYihkdm8sIFRGUDQxMF9DVExfMSwgY3RsMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRmcDQxMF9kdW1wX3JlZ3Moc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwl1aW50OF90IHZhbCwgdmFsMjsKKworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9SRVYsICZ2YWwpOworCURSTV9ERUJVRygiVEZQNDEwX1JFVjogMHglMDJYXG4iLCB2YWwpOworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9DVExfMSwgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfQ1RMMTogMHglMDJYXG4iLCB2YWwpOworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9DVExfMiwgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfQ1RMMjogMHglMDJYXG4iLCB2YWwpOworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9DVExfMywgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfQ1RMMzogMHglMDJYXG4iLCB2YWwpOworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9VU0VSQ0ZHLCAmdmFsKTsKKwlEUk1fREVCVUcoIlRGUDQxMF9VU0VSQ0ZHOiAweCUwMlhcbiIsIHZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0RFX0RMWSwgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfREVfRExZOiAweCUwMlhcbiIsIHZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0RFX0NUTCwgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfREVfQ1RMOiAweCUwMlhcbiIsIHZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0RFX1RPUCwgJnZhbCk7CisJRFJNX0RFQlVHKCJURlA0MTBfREVfVE9QOiAweCUwMlhcbiIsIHZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0RFX0NOVF9MTywgJnZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0RFX0NOVF9ISSwgJnZhbDIpOworCURSTV9ERUJVRygiVEZQNDEwX0RFX0NOVDogMHglMDJYJTAyWFxuIiwgdmFsMiwgdmFsKTsKKwl0ZnA0MTBfcmVhZGIoZHZvLCBURlA0MTBfREVfTElOX0xPLCAmdmFsKTsKKwl0ZnA0MTBfcmVhZGIoZHZvLCBURlA0MTBfREVfTElOX0hJLCAmdmFsMik7CisJRFJNX0RFQlVHKCJURlA0MTBfREVfTElOOiAweCUwMlglMDJYXG4iLCB2YWwyLCB2YWwpOworCXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9IX1JFU19MTywgJnZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX0hfUkVTX0hJLCAmdmFsMik7CisJRFJNX0RFQlVHKCJURlA0MTBfSF9SRVM6IDB4JTAyWCUwMlhcbiIsIHZhbDIsIHZhbCk7CisJdGZwNDEwX3JlYWRiKGR2bywgVEZQNDEwX1ZfUkVTX0xPLCAmdmFsKTsKKwl0ZnA0MTBfcmVhZGIoZHZvLCBURlA0MTBfVl9SRVNfSEksICZ2YWwyKTsKKwlEUk1fREVCVUcoIlRGUDQxMF9WX1JFUzogMHglMDJYJTAyWFxuIiwgdmFsMiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgdGZwNDEwX3NhdmUoc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bykKK3sKKwlzdHJ1Y3QgdGZwNDEwX3ByaXYgKnRmcCA9IGR2by0+ZGV2X3ByaXY7CisKKwlpZiAoIXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9DVExfMSwgJnRmcC0+c2F2ZWRfcmVnLmN0bDEpKQorCQlyZXR1cm47CisKKwlpZiAoIXRmcDQxMF9yZWFkYihkdm8sIFRGUDQxMF9DVExfMiwgJnRmcC0+c2F2ZWRfcmVnLmN0bDIpKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHRmcDQxMF9yZXN0b3JlKHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJc3RydWN0IHRmcDQxMF9wcml2ICp0ZnAgPSBkdm8tPmRldl9wcml2OworCisJLyogUmVzdG9yZSBpdCBwb3dlcmVkIGRvd24gaW5pdGlhbGx5ICovCisJdGZwNDEwX3dyaXRlYihkdm8sIFRGUDQxMF9DVExfMSwgdGZwLT5zYXZlZF9yZWcuY3RsMSAmIH4weDEpOworCisJdGZwNDEwX3dyaXRlYihkdm8sIFRGUDQxMF9DVExfMiwgdGZwLT5zYXZlZF9yZWcuY3RsMik7CisJdGZwNDEwX3dyaXRlYihkdm8sIFRGUDQxMF9DVExfMSwgdGZwLT5zYXZlZF9yZWcuY3RsMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRmcDQxMF9kZXN0cm95KHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8pCit7CisJc3RydWN0IHRmcDQxMF9wcml2ICp0ZnAgPSBkdm8tPmRldl9wcml2OworCisJaWYgKHRmcCkgeworCQlrZnJlZSh0ZnApOworCQlkdm8tPmRldl9wcml2ID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBpbnRlbF9kdm9fZGV2X29wcyB0ZnA0MTBfb3BzID0geworCS5pbml0ID0gdGZwNDEwX2luaXQsCisJLmRldGVjdCA9IHRmcDQxMF9kZXRlY3QsCisJLm1vZGVfdmFsaWQgPSB0ZnA0MTBfbW9kZV92YWxpZCwKKwkubW9kZV9zZXQgPSB0ZnA0MTBfbW9kZV9zZXQsCisJLmRwbXMgPSB0ZnA0MTBfZHBtcywKKwkuZHVtcF9yZWdzID0gdGZwNDEwX2R1bXBfcmVncywKKwkuc2F2ZSA9IHRmcDQxMF9zYXZlLAorCS5yZXN0b3JlID0gdGZwNDEwX3Jlc3RvcmUsCisJLmRlc3Ryb3kgPSB0ZnA0MTBfZGVzdHJveSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBhZmE4YTEyLi4zZDcwODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAKQEAgLTM5LDYgKzQxLDcgQEAKIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKIAl1MzIgYWN0aGRfcmVnID0gSVNfSTk2NUcoZGV2KSA/IEFDVEhEX0k5NjUgOiBBQ1RIRDsKIAl1MzIgbGFzdF9hY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOwpAQCAtNTUsOCArNTgsOCBAQAogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKLQkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKIAkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKQogCQkJaSA9IDA7CkBAIC0xMjEsMTYgKzEyNCwyOCBAQAogdm9pZCBpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7CiAKKwkvKgorCSAqIFdlIHNob3VsZCBuZXZlciBsb3NlIGNvbnRleHQgb24gdGhlIHJpbmcgd2l0aCBtb2Rlc2V0dGluZworCSAqIGFzIHdlIGRvbid0IGV4cG9zZSBpdCB0byB1c2Vyc3BhY2UKKwkgKi8KKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJcmV0dXJuOworCiAJcmluZy0+aGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOwogCXJpbmctPnRhaWwgPSBJOTE1X1JFQUQoUFJCMF9UQUlMKSAmIFRBSUxfQUREUjsKIAlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOwogCWlmIChyaW5nLT5zcGFjZSA8IDApCiAJCXJpbmctPnNwYWNlICs9IHJpbmctPlNpemU7CiAKLQlpZiAocmluZy0+aGVhZCA9PSByaW5nLT50YWlsICYmIGRldl9wcml2LT5zYXJlYV9wcml2KQotCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9SSU5HX0VNUFRZOworCWlmICghZGV2LT5wcmltYXJ5LT5tYXN0ZXIpCisJCXJldHVybjsKKworCW1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmIChyaW5nLT5oZWFkID09IHJpbmctPnRhaWwgJiYgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1JJTkdfRU1QVFk7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9kbWFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTE1NCwyNSArMTY5LDEzIEBACiAJaWYgKEk5MTVfTkVFRF9HRlhfSFdTKGRldikpCiAJCWk5MTVfZnJlZV9od3MoZGV2KTsKIAotCWRldl9wcml2LT5zYXJlYSA9IE5VTEw7Ci0JZGV2X3ByaXYtPnNhcmVhX3ByaXYgPSBOVUxMOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9pbml0aWFsaXplKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1faTkxNV9pbml0X3QgKiBpbml0KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JZGV2X3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7Ci0JaWYgKCFkZXZfcHJpdi0+c2FyZWEpIHsKLQkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgc2FyZWEhXG4iKTsKLQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCi0JICAgICgodTggKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKyBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CisJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKIAogCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgewogCQlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogIT0gTlVMTCkgewpAQCAtMjA3LDcgKzIxMCw4IEBACiAJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CiAJZGV2X3ByaXYtPmZyb250X29mZnNldCA9IGluaXQtPmZyb250X29mZnNldDsKIAlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKKwlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UgPSAwOwogCiAJLyogQWxsb3cgaGFyZHdhcmUgYmF0Y2hidWZmZXJzIHVubGVzcyB0b2xkIG90aGVyd2lzZS4KIAkgKi8KQEAgLTIyMiwxMSArMjI2LDYgQEAKIAogCURSTV9ERUJVRygiJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghZGV2X3ByaXYtPnNhcmVhKSB7Ci0JCURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIHNhcmVhIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKIAkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CkBAIC00MzUsMTMgKzQzNCwxNCBAQAogc3RhdGljIHZvaWQgaTkxNV9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCVJJTkdfTE9DQUxTOwogCiAJZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAlpZiAoZGV2X3ByaXYtPmNvdW50ZXIgPiAweDdGRkZGRkZGVUwpCiAJCWRldl9wcml2LT5jb3VudGVyID0gMDsKLQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlcjsKKwlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlcjsKIAogCUJFR0lOX0xQX1JJTkcoNCk7CiAJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOwpAQCAtNTM3LDE1ICs1MzcsMTcgQEAKIHN0YXRpYyBpbnQgaTkxNV9kaXNwYXRjaF9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPQorCQlkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoIWRldl9wcml2LT5zYXJlYV9wcml2KQorCWlmICghbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJRFJNX0RFQlVHKCIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLAogCQkgIF9fZnVuY19fLAogCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCi0JCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CisJCSAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CiAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIApAQCAtNTcyLDcgKzU3NCw3IEBACiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKKwltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAogCUJFR0lOX0xQX1JJTkcoNCk7CiAJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOwpAQCAtNTgxLDcgKzU4Myw3IEBACiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKKwltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjExLDggKzYxMyw5IEBACiAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSAoZHJtX2k5MTVfc2FyZWFfdCAqKQotCSAgICBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwkgICAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfYmF0Y2hidWZmZXJfdCAqYmF0Y2ggPSBkYXRhOwogCWludCByZXQ7CiAKQEAgLTY0NCw4ICs2NDcsOSBAQAogCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTkxNV9zYXJlYV90ICopCi0JICAgIGRldl9wcml2LT5zYXJlYV9wcml2OworCSAgICBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1faTkxNV9jbWRidWZmZXJfdCAqY21kYnVmID0gZGF0YTsKIAlpbnQgcmV0OwogCkBAIC03NzQsNiArNzc4LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCVdBUk4oMSwgInRyaWVkIHRvIHNldCBzdGF0dXMgcGFnZSB3aGVuIG1vZGUgc2V0dGluZyBhY3RpdmVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlwcmludGsoS0VSTl9ERUJVRyAic2V0IHN0YXR1cyBwYWdlIGFkZHIgMHglMDh4XG4iLCAodTMyKWh3cy0+YWRkcik7CiAKIAlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gaHdzLT5hZGRyICYgKDB4MWZmZmY8PDEyKTsKQEAgLTgwMiw2ICs4MTEsMjE0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogaTkxNV9wcm9iZV9hZ3AgLSBnZXQgQUdQIGJvb3R1cCBjb25maWd1cmF0aW9uCisgKiBAcGRldjogUENJIGRldmljZQorICogQGFwZXJ0dXJlX3NpemU6IHJldHVybnMgQUdQIGFwZXJ0dXJlIGNvbmZpZ3VyZWQgc2l6ZQorICogQHByZWFsbG9jYXRlZF9zaXplOiByZXR1cm5zIHNpemUgb2YgQklPUyBwcmVhbGxvY2F0ZWQgQUdQIHNwYWNlCisgKgorICogU2luY2UgSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBhcmUgVU1BLCB0aGUgQklPUyBoYXMgdG8gc2V0IGFzaWRlCisgKiBzb21lIFJBTSBmb3IgdGhlIGZyYW1lYnVmZmVyIGF0IGVhcmx5IGJvb3QuICBUaGlzIGNvZGUgZmlndXJlcyBvdXQKKyAqIGhvdyBtdWNoIHdhcyBzZXQgYXNpZGUgc28gd2UgY2FuIHVzZSBpdCBmb3Igb3VyIG93biBwdXJwb3Nlcy4KKyAqLworc3RhdGljIGludCBpOTE1X3Byb2JlX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICphcGVydHVyZV9zaXplLAorCQkJICB1bnNpZ25lZCBsb25nICpwcmVhbGxvY2F0ZWRfc2l6ZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsKKwl1MTYgdG1wID0gMDsKKwl1bnNpZ25lZCBsb25nIG92ZXJoZWFkOworCisJYnJpZGdlX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLDApKTsKKwlpZiAoIWJyaWRnZV9kZXYpIHsKKwkJRFJNX0VSUk9SKCJicmlkZ2UgZGV2aWNlIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBHZXQgdGhlIGZiIGFwZXJ0dXJlIHNpemUgYW5kICJzdG9sZW4iIG1lbW9yeSBhbW91bnQuICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCAmdG1wKTsKKwlwY2lfZGV2X3B1dChicmlkZ2VfZGV2KTsKKworCSphcGVydHVyZV9zaXplID0gMTAyNCAqIDEwMjQ7CisJKnByZWFsbG9jYXRlZF9zaXplID0gMTAyNCAqIDEwMjQ7CisKKwlzd2l0Y2ggKGRldi0+cGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODMwX0NHQzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVHX0lHOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NUdNX0lHOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2NV9JRzoKKwkJaWYgKCh0bXAgJiBJTlRFTF9HTUNIX01FTV9NQVNLKSA9PSBJTlRFTF9HTUNIX01FTV82NE0pCisJCQkqYXBlcnR1cmVfc2l6ZSAqPSA2NDsKKwkJZWxzZQorCQkJKmFwZXJ0dXJlX3NpemUgKj0gMTI4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiA5eHggc3VwcG9ydHMgbGFyZ2Ugc2l6ZXMsIGp1c3QgbG9vayBhdCB0aGUgbGVuZ3RoICovCisJCSphcGVydHVyZV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDIpOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNvbWUgb2YgdGhlIHByZWFsbG9jYXRlZCBzcGFjZSBpcyB0YWtlbiBieSB0aGUgR1RUCisJICogYW5kIHBvcHVwLiAgR1RUIGlzIDFLIHBlciBNQiBvZiBhcGVydHVyZSBzaXplLCBhbmQgcG9wdXAgaXMgNEsuCisJICovCisJaWYgKElTX0c0WChkZXYpKQorCQlvdmVyaGVhZCA9IDQwOTY7CisJZWxzZQorCQlvdmVyaGVhZCA9ICgqYXBlcnR1cmVfc2l6ZSAvIDEwMjQpICsgNDA5NjsKKworCXN3aXRjaCAodG1wICYgSU5URUxfODU1X0dNQ0hfR01TX01BU0spIHsKKwljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU06CisJCWJyZWFrOyAvKiAxTSBhbHJlYWR5ICovCisJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNOgorCQkqcHJlYWxsb2NhdGVkX3NpemUgKj0gNDsKKwkJYnJlYWs7CisJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNOgorCQkqcHJlYWxsb2NhdGVkX3NpemUgKj0gODsKKwkJYnJlYWs7CisJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzE2TToKKwkJKnByZWFsbG9jYXRlZF9zaXplICo9IDE2OworCQlicmVhazsKKwljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMzJNOgorCQkqcHJlYWxsb2NhdGVkX3NpemUgKj0gMzI7CisJCWJyZWFrOworCWNhc2UgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNOgorCQkqcHJlYWxsb2NhdGVkX3NpemUgKj0gNDg7CisJCWJyZWFrOworCWNhc2UgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNjRNOgorCQkqcHJlYWxsb2NhdGVkX3NpemUgKj0gNjQ7CisJCWJyZWFrOworCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVEOgorCQlEUk1fRVJST1IoInZpZGVvIG1lbW9yeSBpcyBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtMTsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInVuZXhwZWN0ZWQgR01DSF9HTVMgdmFsdWU6IDB4JTAyeFxuIiwKKwkJCXRtcCAmIElOVEVMXzg1NV9HTUNIX0dNU19NQVNLKTsKKwkJcmV0dXJuIC0xOworCX0KKwkqcHJlYWxsb2NhdGVkX3NpemUgLT0gb3ZlcmhlYWQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGFncF9zaXplLCBwcmVhbGxvY19zaXplOworCWludCBmYl9iYXIgPSBJU19JOVhYKGRldikgPyAyIDogMDsKKwlpbnQgcmV0ID0gMDsKKworCWRldi0+ZGV2bmFtZSA9IGtzdHJkdXAoRFJJVkVSX05BTUUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5kZXZuYW1lKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRldi0+bW9kZV9jb25maWcuZmJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCBmYl9iYXIpICYKKwkJMHhmZjAwMDAwMDsKKworCURSTV9ERUJVRygiKioqIGZiIGJhc2UgMHglMDhseFxuIiwgZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlKTsKKworCWlmIChJU19NT0JJTEUoZGV2KSB8fCAoSVNfSTlYWChkZXYpICYmICFJU19JOTY1RyhkZXYpICYmICFJU19HMzMoZGV2KSkpCisJCWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSB0cnVlOworCWVsc2UKKwkJZGV2X3ByaXYtPmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IGZhbHNlOworCisJcmV0ID0gaTkxNV9wcm9iZV9hZ3AoZGV2LCAmYWdwX3NpemUsICZwcmVhbGxvY19zaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIGtmcmVlX2Rldm5hbWU7CisKKwkvKiBCYXNpYyBtZW1yYW5nZSBhbGxvY2F0b3IgZm9yIHN0b2xlbiBzcGFjZSAoYWthIHZyYW0pICovCisJZHJtX21tX2luaXQoJmRldl9wcml2LT52cmFtLCAwLCBwcmVhbGxvY19zaXplKTsKKworCS8qIExldCBHRU0gTWFuYWdlIGZyb20gZW5kIG9mIHByZWFsbG9jIHNwYWNlIHRvIGVuZCBvZiBhcGVydHVyZSAqLworCWk5MTVfZ2VtX2RvX2luaXQoZGV2LCBwcmVhbGxvY19zaXplLCBhZ3Bfc2l6ZSk7CisKKwlyZXQgPSBpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGtmcmVlX2Rldm5hbWU7CisKKyAgICAgICAgZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nID0KKwkJaW9fbWFwcGluZ19jcmVhdGVfd2MoZGV2LT5hZ3AtPmJhc2UsCisJCQkJICAgICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9zaXplICogMTAyNCoxMDI0KTsKKworCS8qIEFsbG93IGhhcmR3YXJlIGJhdGNoYnVmZmVycyB1bmxlc3MgdG9sZCBvdGhlcndpc2UuCisJICovCisJZGV2X3ByaXYtPmFsbG93X2JhdGNoYnVmZmVyID0gMTsKKworCXJldCA9IGludGVsX2luaXRfYmlvcyhkZXYpOworCWlmIChyZXQpCisJCURSTV9JTkZPKCJmYWlsZWQgdG8gZmluZCBWQklPUyB0YWJsZXNcbiIpOworCisJcmV0ID0gZHJtX2lycV9pbnN0YWxsKGRldik7CisJaWYgKHJldCkKKwkJZ290byBkZXN0cm95X3JpbmdidWZmZXI7CisKKwkvKiBGSVhNRTogcmUtYWRkIGhvdHBsdWcgc3VwcG9ydCAqLworI2lmIDAKKwlyZXQgPSBkcm1faG90cGx1Z19pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBkZXN0cm95X3JpbmdidWZmZXI7CisjZW5kaWYKKworCS8qIEFsd2F5cyBzYWZlIGluIHRoZSBtb2RlIHNldHRpbmcgY2FzZS4gKi8KKwkvKiBGSVhNRTogZG8gcHJlL3Bvc3QtbW9kZSBzZXQgc3R1ZmYgaW4gY29yZSBLTVMgY29kZSAqLworCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDE7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlIElSUSBsb2NhdGlvbi4KKwkgKi8KKworCUk5MTVfV1JJVEUoSU5TVFBNLCAoMSA8PCA1KSB8ICgxIDw8IDIxKSk7CisKKwlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKKworCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2LCBmYWxzZSk7CisKKwlyZXR1cm4gMDsKKworZGVzdHJveV9yaW5nYnVmZmVyOgorCWk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihkZXYpOwora2ZyZWVfZGV2bmFtZToKKwlrZnJlZShkZXYtPmRldm5hbWUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBpOTE1X21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OworCisJbWFzdGVyX3ByaXYgPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqbWFzdGVyX3ByaXYpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFtYXN0ZXJfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYXN0ZXItPmRyaXZlcl9wcml2ID0gbWFzdGVyX3ByaXY7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKQoreworCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OworCisJaWYgKCFtYXN0ZXJfcHJpdikKKwkJcmV0dXJuOworCisJZHJtX2ZyZWUobWFzdGVyX3ByaXYsIHNpemVvZigqbWFzdGVyX3ByaXYpLCBEUk1fTUVNX0RSSVZFUik7CisKKwltYXN0ZXItPmRyaXZlcl9wcml2ID0gTlVMTDsKK30KKworLyoqCisgKiBpOTE1X2RyaXZlcl9sb2FkIC0gc2V0dXAgY2hpcCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29uZmlnCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAZmxhZ3M6IHN0YXJ0dXAgZmxhZ3MKKyAqCisgKiBUaGUgZHJpdmVyIGxvYWQgcm91dGluZSBoYXMgdG8gZG8gc2V2ZXJhbCB0aGluZ3M6CisgKiAgIC0gZHJpdmUgb3V0cHV0IGRpc2NvdmVyeSB2aWEgaW50ZWxfbW9kZXNldF9pbml0KCkKKyAqICAgLSBpbml0aWFsaXplIHRoZSBtZW1vcnkgbWFuYWdlcgorICogICAtIGFsbG9jYXRlIGluaXRpYWwgY29uZmlnIG1lbW9yeQorICogICAtIHNldHVwIHRoZSBEUk0gZnJhbWVidWZmZXIgd2l0aCB0aGUgYWxsb2NhdGVkIG1lbW9yeQorICovCiBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MjksNiArMTA0NiwxMSBAQAogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIAogCWRldl9wcml2LT5yZWdzID0gaW9yZW1hcChiYXNlLCBzaXplKTsKKwlpZiAoIWRldl9wcml2LT5yZWdzKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGZyZWVfcHJpdjsKKwl9CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTTY0RwogCS8qIGRvbid0IGVuYWJsZSBHRU0gb24gUEFFIC0gbmVlZHMgYWdwICsgc2V0X21lbW9yeV8qIGludGVyZmFjZSBmaXhlcyAqLwpAQCAtODQ0LDcgKzEwNjYsNyBAQAogCWlmICghSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSkgewogCQlyZXQgPSBpOTE1X2luaXRfcGh5c19od3MoZGV2KTsKIAkJaWYgKHJldCAhPSAwKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0X3JtbWFwOwogCX0KIAogCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0aGUKQEAgLTg2NCw2ICsxMDg2LDcgQEAKIAlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworCWRldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA9IDA7CiAKIAlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBJOTE1X05VTV9QSVBFKTsKIApAQCAtODcyLDYgKzEwOTUsMjAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQlyZXQgPSBpOTE1X2xvYWRfbW9kZXNldF9pbml0KGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0IG1vZGVzZXRcbiIpOworCQkJZ290byBvdXRfcm1tYXA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3JtbWFwOgorCWlvdW5tYXAoZGV2X3ByaXYtPnJlZ3MpOworZnJlZV9wcml2OgorCWRybV9mcmVlKGRldl9wcml2LCBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUpLCBEUk1fTUVNX0RSSVZFUik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODc5LDE2ICsxMTE2LDI5IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCWlvX21hcHBpbmdfZnJlZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcpOworCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCX0KKwogCWlmIChkZXYtPnBkZXYtPm1zaV9lbmFibGVkKQogCQlwY2lfZGlzYWJsZV9tc2koZGV2LT5wZGV2KTsKIAotCWk5MTVfZnJlZV9od3MoZGV2KTsKLQogCWlmIChkZXZfcHJpdi0+cmVncyAhPSBOVUxMKQogCQlpb3VubWFwKGRldl9wcml2LT5yZWdzKTsKIAogCWludGVsX29wcmVnaW9uX2ZyZWUoZGV2KTsKIAorCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCWludGVsX21vZGVzZXRfY2xlYW51cChkZXYpOworCisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fbW1fdGFrZWRvd24oJmRldl9wcml2LT52cmFtKTsKKwkJaTkxNV9nZW1fbGFzdGNsb3NlKGRldik7CisJfQorCiAJZHJtX2ZyZWUoZGV2LT5kZXZfcHJpdmF0ZSwgc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCksCiAJCSBEUk1fTUVNX0RSSVZFUik7CiAKQEAgLTkxNCwxMiArMTE2NCwyNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGk5MTVfZHJpdmVyX2xhc3RjbG9zZSAtIGNsZWFuIHVwIGFmdGVyIGFsbCBEUk0gY2xpZW50cyBoYXZlIGV4aXRlZAorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIFRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBhbGwgRFJNIGNsaWVudHMgaGF2ZSBleGl0ZWQuICBJbiB0aGUKKyAqIG1vZGUgc2V0dGluZyBjYXNlLCB3ZSB3YW50IHRvIHJlc3RvcmUgdGhlIGtlcm5lbCdzIGluaXRpYWwgbW9kZSAoanVzdAorICogaW4gY2FzZSB0aGUgbGFzdCBjbGllbnQgbGVmdCB1cyBpbiBhIGJhZCBzdGF0ZSkuCisgKgorICogQWRkaXRpb25hbGx5LCBpbiB0aGUgbm9uLW1vZGUgc2V0dGluZyBjYXNlLCB3ZSdsbCB0ZWFyIGRvd24gdGhlIEFHUAorICogYW5kIERNQSBzdHJ1Y3R1cmVzLCBzaW5jZSB0aGUga2VybmVsIHdvbid0IGJlIHVzaW5nIHRoZW0sIGFuZCBjbGVhCisgKiB1cCBhbnkgR0VNIHN0YXRlLgorICovCiB2b2lkIGk5MTVfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmICghZGV2X3ByaXYpCisJaWYgKCFkZXZfcHJpdiB8fCBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCWludGVsZmJfcmVzdG9yZSgpOwogCQlyZXR1cm47CisJfQogCiAJaTkxNV9nZW1fbGFzdGNsb3NlKGRldik7CiAKQEAgLTkzMiw3ICsxMTk2LDggQEAKIHZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWk5MTVfbWVtX3JlbGVhc2UoZGV2LCBmaWxlX3ByaXYsIGRldl9wcml2LT5hZ3BfaGVhcCk7CisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2LCBkZXZfcHJpdi0+YWdwX2hlYXApOwogfQogCiB2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKQEAgLTk3Miw2ICsxMjM3LDcgQEAKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QUkVBRCwgaTkxNV9nZW1fcHJlYWRfaW9jdGwsIDApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1BXUklURSwgaTkxNV9nZW1fcHdyaXRlX2lvY3RsLCAwKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9NTUFQLCBpOTE1X2dlbV9tbWFwX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9NTUFQX0dUVCwgaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwsIDApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwsIDApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsLCAwKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9TRVRfVElMSU5HLCBpOTE1X2dlbV9zZXRfdGlsaW5nLCAwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGE4MGVhZDIuLmY4YjNkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMzMsMTEgKzMzLDIyIEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTkxNV9tb2Rlc2V0ID0gLTE7Cittb2R1bGVfcGFyYW1fbmFtZWQobW9kZXNldCwgaTkxNV9tb2Rlc2V0LCBpbnQsIDA0MDApOworCit1bnNpZ25lZCBpbnQgaTkxNV9mYnBlcmNydGMgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGZicGVyY3J0YywgaTkxNV9mYnBlcmNydGMsIGludCwgMDQwMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKIAlpOTE1X1BDSV9JRFMKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EUk1fSTkxNV9LTVMpCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpaWRsaXN0KTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTgxLDYgKzkyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fdm1fb3BzID0geworCS5mYXVsdCA9IGk5MTVfZ2VtX2ZhdWx0LAorfTsKKwogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkvKiBkb24ndCB1c2UgbXRycidzIGhlcmUsIHRoZSBYc2VydmVyIG9yIHVzZXIgc3BhY2UgYXBwIHNob3VsZAogCSAqIGRlYWwgd2l0aCB0aGVtIGZvciBpbnRlbCBoYXJkd2FyZS4KQEAgLTEwNywxNyArMTIyLDIwIEBACiAJLnJlY2xhaW1fYnVmZmVycyA9IGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycywKIAkuZ2V0X21hcF9vZnMgPSBkcm1fY29yZV9nZXRfbWFwX29mcywKIAkuZ2V0X3JlZ19vZnMgPSBkcm1fY29yZV9nZXRfcmVnX29mcywKKwkubWFzdGVyX2NyZWF0ZSA9IGk5MTVfbWFzdGVyX2NyZWF0ZSwKKwkubWFzdGVyX2Rlc3Ryb3kgPSBpOTE1X21hc3Rlcl9kZXN0cm95LAogCS5wcm9jX2luaXQgPSBpOTE1X2dlbV9wcm9jX2luaXQsCiAJLnByb2NfY2xlYW51cCA9IGk5MTVfZ2VtX3Byb2NfY2xlYW51cCwKIAkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCiAJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmk5MTVfZ2VtX3ZtX29wcywKIAkuaW9jdGxzID0gaTkxNV9pb2N0bHMsCiAJLmZvcHMgPSB7CiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAogCQkgLmlvY3RsID0gZHJtX2lvY3RsLAotCQkgLm1tYXAgPSBkcm1fbW1hcCwKKwkJIC5tbWFwID0gZHJtX2dlbV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE0MSw2ICsxNTksMjggQEAKIHN0YXRpYyBpbnQgX19pbml0IGk5MTVfaW5pdCh2b2lkKQogewogCWRyaXZlci5udW1faW9jdGxzID0gaTkxNV9tYXhfaW9jdGw7CisKKwkvKgorCSAqIElmIENPTkZJR19EUk1fSTkxNV9LTVMgaXMgc2V0LCBkZWZhdWx0IHRvIEtNUyB1bmxlc3MKKwkgKiBleHBsaWNpdGx5IGRpc2FibGVkIHdpdGggdGhlIG1vZHVsZSBwYXJhcm1ldGVyLgorCSAqCisJICogT3RoZXJ3aXNlLCBqdXN0IGZvbGxvdyB0aGUgcGFyYW1ldGVyIChkZWZhdWx0aW5nIHRvIG9mZikuCisJICoKKwkgKiBBbGxvdyBvcHRpb25hbCB2Z2FfdGV4dF9tb2RlX2ZvcmNlIGJvb3Qgb3B0aW9uIHRvIG92ZXJyaWRlCisJICogdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisJICovCisjaWYgZGVmaW5lZChDT05GSUdfRFJNX0k5MTVfS01TKQorCWlmIChpOTE1X21vZGVzZXQgIT0gMCkKKwkJZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyB8PSBEUklWRVJfTU9ERVNFVDsKKyNlbmRpZgorCWlmIChpOTE1X21vZGVzZXQgPT0gMSkKKwkJZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyB8PSBEUklWRVJfTU9ERVNFVDsKKworI2lmZGVmIENPTkZJR19WR0FfQ09OU09MRQorCWlmICh2Z2Fjb25fdGV4dF9mb3JjZSgpICYmIGk5MTVfbW9kZXNldCA9PSAtMSkKKwkJZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyAmPSB+RFJJVkVSX01PREVTRVQ7CisjZW5kaWYKKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYjNjYzQ3My4uNDc1NmU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIF9JOTE1X0RSVl9IXwogCiAjaW5jbHVkZSAiaTkxNV9yZWcuaCIKKyNpbmNsdWRlICJpbnRlbF9iaW9zLmgiCiAjaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5oPgogCiAvKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246CkBAIC0xMDMsMTUgKzEwNCwyMyBAQAogCWludCBlbmFibGVkOwogfTsKIAorc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlIHsKKwlkcm1fbG9jYWxfbWFwX3QgKnNhcmVhOworCXN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgKnNhcmVhX3ByaXY7Cit9OworI2RlZmluZSBJOTE1X0ZFTkNFX1JFR19OT05FIC0xCisKK3N0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgeworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAogCWludCBoYXNfZ2VtOwogCiAJdm9pZCBfX2lvbWVtICpyZWdzOwotCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7CiAKLQlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgcmluZzsKIAogCWRybV9kbWFfaGFuZGxlX3QgKnN0YXR1c19wYWdlX2RtYWg7CkBAIC0xNDQsOCArMTUzLDMwIEBACiAJdW5zaWduZWQgaW50IHNyMDEsIGFkcGEsIHBwY3IsIGR2b2IsIGR2b2MsIGx2ZHM7CiAJaW50IHZibGFua19waXBlOwogCisJYm9vbCBjdXJzb3JfbmVlZHNfcGh5c2ljYWw7CisKKwlzdHJ1Y3QgZHJtX21tIHZyYW07CisKKwlpbnQgaXJxX2VuYWJsZWQ7CisKIAlzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gb3ByZWdpb247CiAKKwkvKiBMVkRTIGluZm8gKi8KKwlpbnQgYmFja2xpZ2h0X2R1dHlfY3ljbGU7ICAvKiByZXN0b3JlIGJhY2tsaWdodCB0byB0aGlzIHZhbHVlICovCisJYm9vbCBwYW5lbF93YW50c19kaXRoZXI7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnBhbmVsX2ZpeGVkX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZidF9tb2RlOyAvKiBpZiBhbnkgKi8KKworCS8qIEZlYXR1cmUgYml0cyBmcm9tIHRoZSBWQklPUyAqLworCXVuc2lnbmVkIGludCBpbnRfdHZfc3VwcG9ydDoxOworCXVuc2lnbmVkIGludCBsdmRzX2RpdGhlcjoxOworCXVuc2lnbmVkIGludCBsdmRzX3ZidDoxOworCXVuc2lnbmVkIGludCBpbnRfY3J0X3N1cHBvcnQ6MTsKKworCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgZmVuY2VfcmVnc1sxNl07IC8qIGFzc3VtZSA5NjUgKi8KKwlpbnQgZmVuY2VfcmVnX3N0YXJ0OyAvKiA0IGlmIHVzZXJsYW5kIGhhc24ndCBpb2N0bCdkIHVzIHlldCAqLworCWludCBudW1fZmVuY2VfcmVnczsgLyogOCBvbiBwcmUtOTY1LCAxNiBvdGhlcndpc2UgKi8KKwogCS8qIFJlZ2lzdGVyIHN0YXRlICovCiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwpAQCAtMzY0LDYgKzM5NSwyMSBAQAogCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgZ3R0X3NwYWNlLT5zdGFydAogCSAqLwogCXVpbnQzMl90IGd0dF9vZmZzZXQ7CisJLyoqCisJICogUmVxdWlyZWQgYWxpZ25tZW50IGZvciB0aGUgb2JqZWN0CisJICovCisJdWludDMyX3QgZ3R0X2FsaWdubWVudDsKKwkvKioKKwkgKiBGYWtlIG9mZnNldCBmb3IgdXNlIGJ5IG1tYXAoMikKKwkgKi8KKwl1aW50NjRfdCBtbWFwX29mZnNldDsKKworCS8qKgorCSAqIEZlbmNlIHJlZ2lzdGVyIGJpdHMgKGlmIGFueSkgZm9yIHRoaXMgb2JqZWN0LiAgV2lsbCBiZSBzZXQKKwkgKiBhcyBuZWVkZWQgd2hlbiBtYXBwZWQgaW50byB0aGUgR1RULgorCSAqIFByb3RlY3RlZCBieSBkZXYtPnN0cnVjdF9tdXRleC4KKwkgKi8KKwlpbnQgZmVuY2VfcmVnOwogCiAJLyoqIEJvb2xlYW4gd2hldGhlciB0aGlzIG9iamVjdCBoYXMgYSB2YWxpZCBndHQgb2Zmc2V0LiAqLwogCWludCBndHRfYm91bmQ7CkBAIC0zNzYsNiArNDIyLDcgQEAKIAogCS8qKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0LiAqLwogCXVpbnQzMl90IHRpbGluZ19tb2RlOworCXVpbnQzMl90IHN0cmlkZTsKIAogCS8qKiBBR1AgbWFwcGluZyB0eXBlIChBR1BfVVNFUl9NRU1PUlkgb3IgQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSAqLwogCXVpbnQzMl90IGFncF90eXBlOwpAQCAtMzg1LDYgKzQzMiwxMCBAQAogCSAqIGZsYWdzIHdoaWNoIGluZGl2aWR1YWwgcGFnZXMgYXJlIHZhbGlkLgogCSAqLwogCXVpbnQ4X3QgKnBhZ2VfY3B1X3ZhbGlkOworCisJLyoqIFVzZXIgc3BhY2UgcGluIGNvdW50IGFuZCBmaWxwIG93bmluZyB0aGUgcGluICovCisJdWludDMyX3QgdXNlcl9waW5fY291bnQ7CisJc3RydWN0IGRybV9maWxlICpwaW5fZmlscDsKIH07CiAKIC8qKgpAQCAtNDE0LDggKzQ2NSwxOSBAQAogCX0gbW07CiB9OwogCitlbnVtIGludGVsX2NoaXBfZmFtaWx5IHsKKwlDSElQX0k4WFggPSAweDAxLAorCUNISVBfSTlYWCA9IDB4MDIsCisJQ0hJUF9JOTE1ID0gMHgwNCwKKwlDSElQX0k5NjUgPSAweDA4LAorfTsKKwogZXh0ZXJuIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rsc1tdOwogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9mYnBlcmNydGM7CisKK2V4dGVybiBpbnQgaTkxNV9tYXN0ZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOworZXh0ZXJuIHZvaWQgaTkxNV9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKIAogCQkJCS8qIGk5MTVfZG1hLmMgKi8KIGV4dGVybiB2b2lkIGk5MTVfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CkBAIC00NDEsNiArNTAzLDcgQEAKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiB2b2lkIGk5MTVfdXNlcl9pcnFfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiBpcnFyZXR1cm5fdCBpOTE1X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwpAQCAtNDg3LDYgKzU1MCw4IEBACiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBpOTE1X2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGludCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBpbnQgaTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC01MjMsNiArNTg4LDE2IEBACiB2b2lkIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9nZW1fcmV0aXJlX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpOTE1X2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitpbnQgaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgaTkxNV9nZW1fZG9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2ludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOworaW50IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgICBpbnQgd3JpdGUpOwogCiAvKiBpOTE1X2dlbV90aWxpbmcuYyAqLwogdm9pZCBpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTU2MSw2ICs2MzYsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvcHJlZ2lvbl9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KSB7IHJldHVybjsgfQogI2VuZGlmCiAKKy8qIG1vZGVzZXR0aW5nICovCitleHRlcm4gdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9tb2Rlc2V0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKIC8qKgogICogTG9jayB0ZXN0IGZvciB3aGVuIGl0J3MganVzdCBmb3Igc3luY2hyb25pemF0aW9uIG9mIHJpbmcgYWNjZXNzLgogICoKQEAgLTU3OCw2ICs2NTcsMTMgQEAKICNkZWZpbmUgSTkxNV9XUklURTE2KHJlZywgdmFsKQl3cml0ZWwodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQogI2RlZmluZSBJOTE1X1JFQUQ4KHJlZykJCXJlYWRiKGRldl9wcml2LT5yZWdzICsgKHJlZykpCiAjZGVmaW5lIEk5MTVfV1JJVEU4KHJlZywgdmFsKQl3cml0ZWIodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2lmZGVmIHdyaXRlcQorI2RlZmluZSBJOTE1X1dSSVRFNjQocmVnLCB2YWwpCXdyaXRlcSh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZWxzZQorI2RlZmluZSBJOTE1X1dSSVRFNjQocmVnLCB2YWwpCSh3cml0ZWwodmFsLCBkZXZfcHJpdi0+cmVncyArIChyZWcpKSwgXAorCQkJCSB3cml0ZWwodXBwZXJfMzJfYml0cyh2YWwpLCBkZXZfcHJpdi0+cmVncyArIFwKKwkJCQkJKHJlZykgKyA0KSkKKyNlbmRpZgogCiAjZGVmaW5lIEk5MTVfVkVSQk9TRSAwCiAKQEAgLTY2MCw3ICs3NDYsOCBAQAogCiAjZGVmaW5lIElTX0c0WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwgXAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCi0JCSAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTIyKQorCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUyMiB8fCBcCisJCSAgICAgSVNfR000NShkZXYpKQogCiAjZGVmaW5lIElTX0czMyhkZXYpICAgICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5QzIgfHwJXAogCQkJKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUIyIHx8CVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDI0ZmU4YzEuLmNjMmNhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNkZWZpbmUgSTkxNV9HRU1fR1BVX0RPTUFJTlMJKH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQpKQogCkBAIC00MCw4ICs0MSw2IEBACiBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQkJICAgICBpbnQgd3JpdGUpOwogc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCSAgICAgaW50IHdyaXRlKTsKIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X3NldF9jcHVfcmVhZF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCkBAIC01MSwzNCArNTAsNDMgQEAKIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJCQkgICB1bnNpZ25lZCBhbGlnbm1lbnQpOworc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQgaTkxNV9nZW1fY2xlYXJfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQgaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGk5MTVfZ2VtX2RvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChzdGFydCA+PSBlbmQgfHwKKwkgICAgKHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwIHx8CisJICAgIChlbmQgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIHN0YXJ0LAorCQkgICAgZW5kIC0gc3RhcnQpOworCisJZGV2LT5ndHRfdG90YWwgPSAodWludDMyX3QpIChlbmQgLSBzdGFydCk7CisKKwlyZXR1cm4gMDsKK30KIAogaW50CiBpOTE1X2dlbV9pbml0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgKmFyZ3MgPSBkYXRhOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQlpZiAoYXJncy0+Z3R0X3N0YXJ0ID49IGFyZ3MtPmd0dF9lbmQgfHwKLQkgICAgKGFyZ3MtPmd0dF9zdGFydCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCB8fAotCSAgICAoYXJncy0+Z3R0X2VuZCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIGFyZ3MtPmd0dF9zdGFydCwKLQkgICAgYXJncy0+Z3R0X2VuZCAtIGFyZ3MtPmd0dF9zdGFydCk7Ci0KLQlkZXYtPmd0dF90b3RhbCA9ICh1aW50MzJfdCkgKGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOwotCisJcmV0ID0gaTkxNV9nZW1fZG9faW5pdChkZXYsIGFyZ3MtPmd0dF9zdGFydCwgYXJncy0+Z3R0X2VuZCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKQEAgLTUyOSw2ICs1MzcsMjUyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogaTkxNV9nZW1fZmF1bHQgLSBmYXVsdCBhIHBhZ2UgaW50byB0aGUgR1RUCisgKiB2bWE6IFZNQSBpbiBxdWVzdGlvbgorICogdm1mOiBmYXVsdCBpbmZvCisgKgorICogVGhlIGZhdWx0IGhhbmRsZXIgaXMgc2V0IHVwIGJ5IGRybV9nZW1fbW1hcCgpIHdoZW4gYSBvYmplY3QgaXMgR1RUIG1hcHBlZAorICogZnJvbSB1c2Vyc3BhY2UuICBUaGUgZmF1bHQgaGFuZGxlciB0YWtlcyBjYXJlIG9mIGJpbmRpbmcgdGhlIG9iamVjdCB0bworICogdGhlIEdUVCAoaWYgbmVlZGVkKSwgYWxsb2NhdGluZyBhbmQgcHJvZ3JhbW1pbmcgYSBmZW5jZSByZWdpc3RlciAoYWdhaW4sCisgKiBvbmx5IGlmIG5lZWRlZCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBvbGQgcmVnIGlzIHN0aWxsIHZhbGlkIG9yIHRoZSBvYmplY3QKKyAqIGlzIHRpbGVkKSBhbmQgaW5zZXJ0aW5nIGEgbmV3IFBURSBpbnRvIHRoZSBmYXVsdGluZyBwcm9jZXNzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmF1bHRpbmcgcHJvY2VzcyBtYXkgaW52b2x2ZSBldmljdGluZyBleGlzdGluZyBvYmplY3RzCisgKiBmcm9tIHRoZSBHVFQgYW5kL29yIGZlbmNlIHJlZ2lzdGVycyB0byBtYWtlIHJvb20uICBTbyBwZXJmb3JtYW5jZSBtYXkKKyAqIHN1ZmZlciBpZiB0aGUgR1RUIHdvcmtpbmcgc2V0IGlzIGxhcmdlIG9yIHRoZXJlIGFyZSBmZXcgZmVuY2UgcmVnaXN0ZXJzCisgKiBsZWZ0LgorICovCitpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlwZ29mZl90IHBhZ2Vfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcGZuOworCWludCByZXQgPSAwOworCisJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYgc2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0ICovCisJcGFnZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PgorCQlQQUdFX1NISUZUOworCisJLyogTm93IGJpbmQgaXQgaW50byB0aGUgR1RUIGlmIG5lZWRlZCAqLworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoIW9ial9wcml2LT5ndHRfc3BhY2UpIHsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2JpbmRfdG9fZ3R0KG9iaiwgb2JqX3ByaXYtPmd0dF9hbGlnbm1lbnQpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisJCX0KKwkJbGlzdF9hZGQoJm9ial9wcml2LT5saXN0LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCX0KKworCS8qIE5lZWQgYSBuZXcgZmVuY2UgcmVnaXN0ZXI/ICovCisJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSAmJgorCSAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUgIT0gSTkxNV9USUxJTkdfTk9ORSkKKwkJaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKKworCXBmbiA9ICgoZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldCkgPj4gUEFHRV9TSElGVCkgKworCQlwYWdlX29mZnNldDsKKworCS8qIEZpbmFsbHksIHJlbWFwIGl0IHVzaW5nIHRoZSBuZXcgR1RUIG9mZnNldCAqLworCXJldCA9IHZtX2luc2VydF9wZm4odm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywgcGZuKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIC1FTk9NRU06CisJY2FzZSAtRUFHQUlOOgorCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCWNhc2UgLUVGQVVMVDoKKwljYXNlIC1FQlVTWToKKwkJRFJNX0VSUk9SKCJjYW4ndCBpbnNlcnQgcGZuPz8gIGZhdWx0IG9yIGJ1c3kuLi5cbiIpOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCWRlZmF1bHQ6CisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CisJfQorfQorCisvKioKKyAqIGk5MTVfZ2VtX2NyZWF0ZV9tbWFwX29mZnNldCAtIGNyZWF0ZSBhIGZha2UgbW1hcCBvZmZzZXQgZm9yIGFuIG9iamVjdAorICogQG9iajogb2JqIGluIHF1ZXN0aW9uCisgKgorICogR0VNIG1lbW9yeSBtYXBwaW5nIHdvcmtzIGJ5IGhhbmRpbmcgYmFjayB0byB1c2Vyc3BhY2UgYSBmYWtlIG1tYXAgb2Zmc2V0CisgKiBpdCBjYW4gdXNlIGluIGEgc3Vic2VxdWVudCBtbWFwKDIpIGNhbGwuICBUaGUgRFJNIGNvcmUgY29kZSB0aGVuIGxvb2tzCisgKiB1cCB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBvZmZzZXQgYW5kIHNldHMgdXAgdGhlIHZhcmlvdXMgbWVtb3J5IG1hcHBpbmcKKyAqIHN0cnVjdHVyZXMuCisgKgorICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhbmQgYXR0YWNoZXMgYSBmYWtlIG9mZnNldCBmb3IgQG9iai4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBkZXYtPm1tX3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpsaXN0OworCXN0cnVjdCBkcm1fbWFwICptYXA7CisJaW50IHJldCA9IDA7CisKKwkvKiBTZXQgdGhlIG9iamVjdCB1cCBmb3IgbW1hcCdpbmcgKi8KKwlsaXN0ID0gJm9iai0+bWFwX2xpc3Q7CisJbGlzdC0+bWFwID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRybV9tYXBfbGlzdCksCisJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCWlmICghbGlzdC0+bWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1hcCA9IGxpc3QtPm1hcDsKKwltYXAtPnR5cGUgPSBfRFJNX0dFTTsKKwltYXAtPnNpemUgPSBvYmotPnNpemU7CisJbWFwLT5oYW5kbGUgPSBvYmo7CisKKwkvKiBHZXQgYSBEUk0gR0VNIG1tYXAgb2Zmc2V0IGFsbG9jYXRlZC4uLiAqLworCWxpc3QtPmZpbGVfb2Zmc2V0X25vZGUgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJm1tLT5vZmZzZXRfbWFuYWdlciwKKwkJCQkJCSAgICBvYmotPnNpemUgLyBQQUdFX1NJWkUsIDAsIDApOworCWlmICghbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBvZmZzZXQgZm9yIGJvICVkXG4iLCBvYmotPm5hbWUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2xpc3Q7CisJfQorCisJbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSA9IGRybV9tbV9nZXRfYmxvY2sobGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSwKKwkJCQkJCSAgb2JqLT5zaXplIC8gUEFHRV9TSVpFLCAwKTsKKwlpZiAoIWxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9saXN0OworCX0KKworCWxpc3QtPmhhc2gua2V5ID0gbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZS0+c3RhcnQ7CisJaWYgKGRybV9odF9pbnNlcnRfaXRlbSgmbW0tPm9mZnNldF9oYXNoLCAmbGlzdC0+aGFzaCkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWRkIHRvIG1hcCBoYXNoXG4iKTsKKwkJZ290byBvdXRfZnJlZV9tbTsKKwl9CisKKwkvKiBCeSBub3cgd2Ugc2hvdWxkIGJlIGFsbCBzZXQsIGFueSBkcm1fbW1hcCByZXF1ZXN0IG9uIHRoZSBvZmZzZXQKKwkgKiBiZWxvdyB3aWxsIGdldCB0byBvdXIgbW1hcCAmIGZhdWx0IGhhbmRsZXIgKi8KKwlvYmpfcHJpdi0+bW1hcF9vZmZzZXQgPSAoKHVpbnQ2NF90KSBsaXN0LT5oYXNoLmtleSkgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9tbToKKwlkcm1fbW1fcHV0X2Jsb2NrKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpOworb3V0X2ZyZWVfbGlzdDoKKwlkcm1fZnJlZShsaXN0LT5tYXAsIHNpemVvZihzdHJ1Y3QgZHJtX21hcF9saXN0KSwgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudCAtIHJldHVybiByZXF1aXJlZCBHVFQgYWxpZ25tZW50IGZvciBhbiBvYmplY3QKKyAqIEBvYmo6IG9iamVjdCB0byBjaGVjaworICoKKyAqIFJldHVybiB0aGUgcmVxdWlyZWQgR1RUIGFsaWdubWVudCBmb3IgYW4gb2JqZWN0LCB0YWtpbmcgaW50byBhY2NvdW50CisgKiBwb3RlbnRpYWwgZmVuY2UgcmVnaXN0ZXIgbWFwcGluZyBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyB1aW50MzJfdAoraTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHN0YXJ0LCBpOworCisJLyoKKwkgKiBNaW5pbXVtIGFsaWdubWVudCBpcyA0ayAoR1RUIHBhZ2Ugc2l6ZSksIGJ1dCBtaWdodCBiZSBncmVhdGVyCisJICogaWYgYSBmZW5jZSByZWdpc3RlciBpcyBuZWVkZWQgZm9yIHRoZSBvYmplY3QuCisJICovCisJaWYgKElTX0k5NjVHKGRldikgfHwgb2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpCisJCXJldHVybiA0MDk2OworCisJLyoKKwkgKiBQcmV2aW91cyBjaGlwcyBuZWVkIHRvIGJlIGFsaWduZWQgdG8gdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0CisJICogZmVuY2UgcmVnaXN0ZXIgdGhhdCBjYW4gY29udGFpbiB0aGUgb2JqZWN0LgorCSAqLworCWlmIChJU19JOVhYKGRldikpCisJCXN0YXJ0ID0gMTAyNCoxMDI0OworCWVsc2UKKwkJc3RhcnQgPSA1MTIqMTAyNDsKKworCWZvciAoaSA9IHN0YXJ0OyBpIDwgb2JqLT5zaXplOyBpIDw8PSAxKQorCQk7CisKKwlyZXR1cm4gaTsKK30KKworLyoqCisgKiBpOTE1X2dlbV9tbWFwX2d0dF9pb2N0bCAtIHByZXBhcmUgYW4gb2JqZWN0IGZvciBHVFQgbW1hcCdpbmcKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBkYXRhOiBHVFQgbWFwcGluZyBpb2N0bCBkYXRhCisgKiBAZmlsZV9wcml2OiBHRU0gb2JqZWN0IGluZm8KKyAqCisgKiBTaW1wbHkgcmV0dXJucyB0aGUgZmFrZSBvZmZzZXQgdG8gdXNlcnNwYWNlIHNvIGl0IGNhbiBtbWFwIGl0LgorICogVGhlIG1tYXAgY2FsbCB3aWxsIGVuZCB1cCBpbiBkcm1fZ2VtX21tYXAoKSwgd2hpY2ggd2lsbCBzZXQgdGhpbmdzCisgKiB1cCBzbyB3ZSBjYW4gZ2V0IGZhdWx0cyBpbiB0aGUgaGFuZGxlciBhYm92ZS4KKyAqCisgKiBUaGUgZmF1bHQgaGFuZGxlciB3aWxsIHRha2UgY2FyZSBvZiBiaW5kaW5nIHRoZSBvYmplY3QgaW50byB0aGUgR1RUCisgKiAoc2luY2UgaXQgbWF5IGhhdmUgYmVlbiBldmljdGVkIHRvIG1ha2Ugcm9vbSBmb3Igc29tZXRoaW5nKSwgYWxsb2NhdGluZworICogYSBmZW5jZSByZWdpc3RlciwgYW5kIG1hcHBpbmcgdGhlIGFwcHJvcHJpYXRlIGFwZXJ0dXJlIGFkZHJlc3MgaW50bworICogdXNlcnNwYWNlLgorICovCitpbnQKK2k5MTVfZ2VtX21tYXBfZ3R0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlpZiAoIW9ial9wcml2LT5tbWFwX29mZnNldCkgeworCQlyZXQgPSBpOTE1X2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPm1tYXBfb2Zmc2V0OworCisJb2JqX3ByaXYtPmd0dF9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmopOworCisJLyogTWFrZSBzdXJlIHRoZSBhbGlnbm1lbnQgaXMgY29ycmVjdCBmb3IgZmVuY2UgcmVncyBldGMgKi8KKwlpZiAob2JqX3ByaXYtPmFncF9tZW0gJiYKKwkgICAgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgKG9ial9wcml2LT5ndHRfYWxpZ25tZW50IC0gMSkpKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFB1bGwgaXQgaW50byB0aGUgR1RUIHNvIHRoYXQgd2UgaGF2ZSBhIHBhZ2UgbGlzdCAobWFrZXMgdGhlCisJICogaW5pdGlhbCBmYXVsdCBmYXN0ZXIgYW5kIGFueSBzdWJzZXF1ZW50IGZsdXNoaW5nIHBvc3NpYmxlKS4KKwkgKi8KKwlpZiAoIW9ial9wcml2LT5hZ3BfbWVtKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIG9ial9wcml2LT5ndHRfYWxpZ25tZW50KTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlsaXN0X2FkZCgmb2JqX3ByaXYtPmxpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisJfQorCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewpAQCAtNzI2LDYgKzk4MCw3IEBACiAJCSAqLwogCQlpZiAob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vICE9IHJlcXVlc3QtPnNlcW5vKQogCQkJcmV0dXJuOworCiAjaWYgV0FUQ0hfTFJVCiAJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCiAJCQkgX19mdW5jX18sIHJlcXVlc3QtPnNlcW5vLCBvYmopOwpAQCAtOTU2LDYgKzEyMTEsNyBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWxvZmZfdCBvZmZzZXQ7CiAJaW50IHJldCA9IDA7CiAKICNpZiBXQVRDSF9CVUYKQEAgLTk5MSw2ICsxMjQ3LDE0IEBACiAKIAlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CiAKKwkvKiBibG93IGF3YXkgbWFwcGluZ3MgaWYgbWFwcGVkIHRocm91Z2ggR1RUICovCisJb2Zmc2V0ID0gKChsb2ZmX3QpIG9iai0+bWFwX2xpc3QuaGFzaC5rZXkpIDw8IFBBR0VfU0hJRlQ7CisJaWYgKGRldi0+ZGV2X21hcHBpbmcpCisJCXVubWFwX21hcHBpbmdfcmFuZ2UoZGV2LT5kZXZfbWFwcGluZywgb2Zmc2V0LCBvYmotPnNpemUsIDEpOworCisJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKKwkJaTkxNV9nZW1fY2xlYXJfZmVuY2VfcmVnKG9iaik7CisKIAlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKIAogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlKSB7CkBAIC0xMTQ5LDYgKzE0MTMsMjA0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGk5NjVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHJlZy0+b2JqOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZWdudW0gPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOworCXVpbnQ2NF90IHZhbDsKKworCXZhbCA9ICh1aW50NjRfdCkoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgb2JqLT5zaXplIC0gNDA5NikgJgorCQkgICAgMHhmZmZmZjAwMCkgPDwgMzI7CisJdmFsIHw9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgMHhmZmZmZjAwMDsKKwl2YWwgfD0gKChvYmpfcHJpdi0+c3RyaWRlIC8gMTI4KSAtIDEpIDw8IEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQ7CisJaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZKQorCQl2YWwgfD0gMSA8PCBJOTY1X0ZFTkNFX1RJTElOR19ZX1NISUZUOworCXZhbCB8PSBJOTY1X0ZFTkNFX1JFR19WQUxJRDsKKworCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfOTY1XzAgKyAocmVnbnVtICogOCksIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfZmVuY2VfcmVnKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHJlZy0+b2JqOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZWdudW0gPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOworCXVpbnQzMl90IHZhbDsKKwl1aW50MzJfdCBwaXRjaF92YWw7CisKKwlpZiAoKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykgfHwKKwkgICAgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgKG9iai0+c2l6ZSAtIDEpKSkgeworCQlXQVJOKDEsICIlczogb2JqZWN0IG5vdCAxTSBvciBzaXplIGFsaWduZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYgKElTX0k5NDVHKGRldikgfHwKKwkJCQkJCSAgICAgICBJU19JOTQ1R00oZGV2KSB8fAorCQkJCQkJICAgICAgIElTX0czMyhkZXYpKSkKKwkJcGl0Y2hfdmFsID0gKG9ial9wcml2LT5zdHJpZGUgLyAxMjgpIC0gMTsKKwllbHNlCisJCXBpdGNoX3ZhbCA9IChvYmpfcHJpdi0+c3RyaWRlIC8gNTEyKSAtIDE7CisKKwl2YWwgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kpCisJCXZhbCB8PSAxIDw8IEk4MzBfRkVOQ0VfVElMSU5HX1lfU0hJRlQ7CisJdmFsIHw9IEk5MTVfRkVOQ0VfU0laRV9CSVRTKG9iai0+c2l6ZSk7CisJdmFsIHw9IHBpdGNoX3ZhbCA8PCBJODMwX0ZFTkNFX1BJVENIX1NISUZUOworCXZhbCB8PSBJODMwX0ZFTkNFX1JFR19WQUxJRDsKKworCUk5MTVfV1JJVEUoRkVOQ0VfUkVHXzgzMF8wICsgKHJlZ251bSAqIDQpLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpODMwX3dyaXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSByZWctPm9iajsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmVnbnVtID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKKwl1aW50MzJfdCB2YWw7CisJdWludDMyX3QgcGl0Y2hfdmFsOworCisJaWYgKChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIH5JOTE1X0ZFTkNFX1NUQVJUX01BU0spIHx8CisJICAgIChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIChvYmotPnNpemUgLSAxKSkpIHsKKwkJV0FSTigxLCAiJXM6IG9iamVjdCBub3QgMU0gb3Igc2l6ZSBhbGlnbmVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcGl0Y2hfdmFsID0gKG9ial9wcml2LT5zdHJpZGUgLyAxMjgpIC0gMTsKKworCXZhbCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKKwkJdmFsIHw9IDEgPDwgSTgzMF9GRU5DRV9USUxJTkdfWV9TSElGVDsKKwl2YWwgfD0gSTgzMF9GRU5DRV9TSVpFX0JJVFMob2JqLT5zaXplKTsKKwl2YWwgfD0gcGl0Y2hfdmFsIDw8IEk4MzBfRkVOQ0VfUElUQ0hfU0hJRlQ7CisJdmFsIHw9IEk4MzBfRkVOQ0VfUkVHX1ZBTElEOworCisJSTkxNV9XUklURShGRU5DRV9SRUdfODMwXzAgKyAocmVnbnVtICogNCksIHZhbCk7CisKK30KKworLyoqCisgKiBpOTE1X2dlbV9vYmplY3RfZ2V0X2ZlbmNlX3JlZyAtIHNldCB1cCBhIGZlbmNlIHJlZyBmb3IgYW4gb2JqZWN0CisgKiBAb2JqOiBvYmplY3QgdG8gbWFwIHRocm91Z2ggYSBmZW5jZSByZWcKKyAqCisgKiBXaGVuIG1hcHBpbmcgb2JqZWN0cyB0aHJvdWdoIHRoZSBHVFQsIHVzZXJzcGFjZSB3YW50cyB0byBiZSBhYmxlIHRvIHdyaXRlCisgKiB0byB0aGVtIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHN3aXp6bGluZyBpZiB0aGUgb2JqZWN0IGlzIHRpbGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGZlbmNlIHJlZ3MgbG9va2luZyBmb3IgYSBmcmVlIG9uZSBmb3IgQG9iaiwKKyAqIHN0ZWFsaW5nIG9uZSBpZiBpdCBjYW4ndCBmaW5kIGFueS4KKyAqCisgKiBJdCB0aGVuIHNldHMgdXAgdGhlIHJlZyBiYXNlZCBvbiB0aGUgb2JqZWN0J3MgcHJvcGVydGllczogYWRkcmVzcywgcGl0Y2gKKyAqIGFuZCB0aWxpbmcgZm9ybWF0LgorICovCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpyZWcgPSBOVUxMOworCWludCBpLCByZXQ7CisKKwlzd2l0Y2ggKG9ial9wcml2LT50aWxpbmdfbW9kZSkgeworCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKKwkJV0FSTigxLCAiYWxsb2NhdGluZyBhIGZlbmNlIGZvciBub24tdGlsZWQgb2JqZWN0P1xuIik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWDoKKwkJV0FSTihvYmpfcHJpdi0+c3RyaWRlICYgKDUxMiAtIDEpLAorCQkgICAgICJvYmplY3QgaXMgWCB0aWxlZCBidXQgaGFzIG5vbi01MTJCIHBpdGNoXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZOgorCQlXQVJOKG9ial9wcml2LT5zdHJpZGUgJiAoMTI4IC0gMSksCisJCSAgICAgIm9iamVjdCBpcyBZIHRpbGVkIGJ1dCBoYXMgbm9uLTEyOEIgcGl0Y2hcbiIpOworCQlicmVhazsKKwl9CisKKwkvKiBGaXJzdCB0cnkgdG8gZmluZCBhIGZyZWUgcmVnICovCisJZm9yIChpID0gZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CisJCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKKwkJaWYgKCFyZWctPm9iaikKKwkJCWJyZWFrOworCX0KKworCS8qIE5vbmUgYXZhaWxhYmxlLCB0cnkgdG8gc3RlYWwgb25lIG9yIHdhaXQgZm9yIGEgdXNlciB0byBmaW5pc2ggKi8KKwlpZiAoaSA9PSBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmpfcHJpdiA9IE5VTEw7CisJCWxvZmZfdCBvZmZzZXQ7CisKK3RyeV9hZ2FpbjoKKwkJLyogQ291bGQgdHJ5IHRvIHVzZSBMUlUgaGVyZSBpbnN0ZWFkLi4uICovCisJCWZvciAoaSA9IGRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQ7CisJCSAgICAgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CisJCQlyZWcgPSAmZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV07CisJCQlvbGRfb2JqX3ByaXYgPSByZWctPm9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCQlpZiAoIW9sZF9vYmpfcHJpdi0+cGluX2NvdW50KQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogTm93IHRoaW5ncyBnZXQgdWdseS4uLiB3ZSBoYXZlIHRvIHdhaXQgZm9yIG9uZSBvZiB0aGUKKwkJICogb2JqZWN0cyB0byBmaW5pc2ggYmVmb3JlIHRyeWluZyBhZ2Fpbi4KKwkJICovCisJCWlmIChpID09IGRldl9wcml2LT5udW1fZmVuY2VfcmVncykgeworCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHJlZy0+b2JqKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlXQVJOKHJldCwgIndhaXRfcmVuZGVyaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZ290byB0cnlfYWdhaW47CisJCX0KKworCQkvKgorCQkgKiBaYXAgdGhpcyB2aXJ0dWFsIG1hcHBpbmcgc28gd2UgY2FuIHNldCB1cCBhIGZlbmNlIGFnYWluCisJCSAqIGZvciB0aGlzIG9iamVjdCBuZXh0IHRpbWUgd2UgbmVlZCBpdC4KKwkJICovCisJCW9mZnNldCA9ICgobG9mZl90KSByZWctPm9iai0+bWFwX2xpc3QuaGFzaC5rZXkpIDw8IFBBR0VfU0hJRlQ7CisJCWlmIChkZXYtPmRldl9tYXBwaW5nKQorCQkJdW5tYXBfbWFwcGluZ19yYW5nZShkZXYtPmRldl9tYXBwaW5nLCBvZmZzZXQsCisJCQkJCSAgICByZWctPm9iai0+c2l6ZSwgMSk7CisJCW9sZF9vYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKKwl9CisKKwlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gaTsKKwlyZWctPm9iaiA9IG9iajsKKworCWlmIChJU19JOTY1RyhkZXYpKQorCQlpOTY1X3dyaXRlX2ZlbmNlX3JlZyhyZWcpOworCWVsc2UgaWYgKElTX0k5WFgoZGV2KSkKKwkJaTkxNV93cml0ZV9mZW5jZV9yZWcocmVnKTsKKwllbHNlCisJCWk4MzBfd3JpdGVfZmVuY2VfcmVnKHJlZyk7Cit9CisKKy8qKgorICogaTkxNV9nZW1fY2xlYXJfZmVuY2VfcmVnIC0gY2xlYXIgb3V0IGZlbmNlIHJlZ2lzdGVyIGluZm8KKyAqIEBvYmo6IG9iamVjdCB0byBjbGVhcgorICoKKyAqIFplcm9lcyBvdXQgdGhlIGZlbmNlIHJlZ2lzdGVyIGl0c2VsZiBhbmQgY2xlYXJzIG91dCB0aGUgYXNzb2NpYXRlZAorICogZGF0YSBzdHJ1Y3R1cmVzIGluIGRldl9wcml2IGFuZCBvYmpfcHJpdi4KKyAqLworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHXzk2NV8wICsgKG9ial9wcml2LT5mZW5jZV9yZWcgKiA4KSwgMCk7CisJZWxzZQorCQlJOTE1X1dSSVRFKEZFTkNFX1JFR184MzBfMCArIChvYmpfcHJpdi0+ZmVuY2VfcmVnICogNCksIDApOworCisJZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqX3ByaXYtPmZlbmNlX3JlZ10ub2JqID0gTlVMTDsKKwlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKK30KKwogLyoqCiAgKiBGaW5kcyBmcmVlIHNwYWNlIGluIHRoZSBHVFQgYXBlcnR1cmUgYW5kIGJpbmRzIHRoZSBvYmplY3QgdGhlcmUuCiAgKi8KQEAgLTEzMDcsNyArMTc2OSw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hlbiB0aGUgbW92ZSBpcyBjb21wbGV0ZSwgaW5jbHVkaW5nIHdhaXRpbmcgb24KICAqIGZsdXNoZXMgdG8gb2NjdXIuCiAgKi8KLXN0YXRpYyBpbnQKK2ludAogaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgd3JpdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKQEAgLTIwMjksMTMgKzI0OTEsMTUgQEAKIAogCQkvKiBlcnJvciBvdGhlciB0aGFuIEdUVCBmdWxsLCBvciB3ZSd2ZSBhbHJlYWR5IHRyaWVkIGFnYWluICovCiAJCWlmIChyZXQgIT0gLUVOT01FTSB8fCBwaW5fdHJpZXMgPj0gMSkgewotCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcGluIGJ1ZmZlcnMgJWRcbiIsIHJldCk7CisJCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKKwkJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBwaW4gYnVmZmVycyAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKIAkJLyogdW5waW4gYWxsIG9mIG91ciBidWZmZXJzICovCiAJCWZvciAoaSA9IDA7IGkgPCBwaW5uZWQ7IGkrKykKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7CisJCXBpbm5lZCA9IDA7CiAKIAkJLyogZXZpY3QgZXZlcnlvbmUgd2UgY2FuIGZyb20gdGhlIGFwZXJ0dXJlICovCiAJCXJldCA9IGk5MTVfZ2VtX2V2aWN0X2V2ZXJ5dGhpbmcoZGV2KTsKQEAgLTIxNDksMTMgKzI2MTMsMTIgQEAKIAkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAogCQkJICAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOwogZXJyOgotCWlmIChvYmplY3RfbGlzdCAhPSBOVUxMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwaW5uZWQ7IGkrKykKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmplY3RfbGlzdFtpXSk7CisJZm9yIChpID0gMDsgaSA8IHBpbm5lZDsgaSsrKQorCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqZWN0X2xpc3RbaV0pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKLQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iamVjdF9saXN0W2ldKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmplY3RfbGlzdFtpXSk7CisKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogcHJlX211dGV4X2VycjoKQEAgLTIxNzgsNyArMjY0MSw4IEBACiAJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgewogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQob2JqLCBhbGlnbm1lbnQpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCURSTV9FUlJPUigiRmFpbHVyZSB0byBiaW5kOiAlZCIsIHJldCk7CisJCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKKwkJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gYmluZDogJWQiLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTIyNDksMTEgKzI3MTMsMjIgQEAKIAl9CiAJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJaWYgKG9ial9wcml2LT5waW5fZmlscCAhPSBOVUxMICYmIG9ial9wcml2LT5waW5fZmlscCAhPSBmaWxlX3ByaXYpIHsKKwkJRFJNX0VSUk9SKCJBbHJlYWR5IHBpbm5lZCBpbiBpOTE1X2dlbV9waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvYmpfcHJpdi0+dXNlcl9waW5fY291bnQrKzsKKwlvYmpfcHJpdi0+cGluX2ZpbHAgPSBmaWxlX3ByaXY7CisJaWYgKG9ial9wcml2LT51c2VyX3Bpbl9jb3VudCA9PSAxKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCBhcmdzLT5hbGlnbm1lbnQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAkvKiBYWFggLSBmbHVzaCB0aGUgQ1BVIGNhY2hlcyBmb3IgcGlubmVkIG9iamVjdHMKQEAgLTIyNzMsNiArMjc0OCw3IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIApAQCAtMjI4NCw3ICsyNzYwLDE5IEBACiAJCXJldHVybiAtRUJBREY7CiAJfQogCi0JaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWlmIChvYmpfcHJpdi0+cGluX2ZpbHAgIT0gZmlsZV9wcml2KSB7CisJCURSTV9FUlJPUigiTm90IHBpbm5lZCBieSBjYWxsZXIgaW4gaTkxNV9nZW1fcGluX2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9ial9wcml2LT51c2VyX3Bpbl9jb3VudC0tOworCWlmIChvYmpfcHJpdi0+dXNlcl9waW5fY291bnQgPT0gMCkgeworCQlvYmpfcHJpdi0+cGluX2ZpbHAgPSBOVUxMOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwl9CiAKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMjM1MSwxMiArMjgzOSwxOCBAQAogCiAJb2JqLT5kcml2ZXJfcHJpdmF0ZSA9IG9ial9wcml2OwogCW9ial9wcml2LT5vYmogPSBvYmo7CisJb2JqX3ByaXYtPmZlbmNlX3JlZyA9IEk5MTVfRkVOQ0VfUkVHX05PTkU7CiAJSU5JVF9MSVNUX0hFQUQoJm9ial9wcml2LT5saXN0KTsKKwogCXJldHVybiAwOwogfQogCiB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBkZXYtPm1tX3ByaXZhdGU7CisJc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgZHJtX21hcCAqbWFwOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAl3aGlsZSAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCkBAIC0yMzY0LDYgKzI4NTgsMjAgQEAKIAogCWk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKIAorCWxpc3QgPSAmb2JqLT5tYXBfbGlzdDsKKwlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1tLT5vZmZzZXRfaGFzaCwgJmxpc3QtPmhhc2gpOworCisJaWYgKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpIHsKKwkJZHJtX21tX3B1dF9ibG9jayhsaXN0LT5maWxlX29mZnNldF9ub2RlKTsKKwkJbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSA9IE5VTEw7CisJfQorCisJbWFwID0gbGlzdC0+bWFwOworCWlmIChtYXApIHsKKwkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fRFJJVkVSKTsKKwkJbGlzdC0+bWFwID0gTlVMTDsKKwl9CisKIAlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIDEsIERSTV9NRU1fRFJJVkVSKTsKIAlkcm1fZnJlZShvYmotPmRyaXZlcl9wcml2YXRlLCAxLCBEUk1fTUVNX0RSSVZFUik7CiB9CkBAIC0yNDMyLDggKzI5NDAsNyBAQAogCSAqLwogCWk5MTVfZ2VtX2ZsdXNoKGRldiwgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpLAogCQkgICAgICAgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKLQlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAotCQkJCQlJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgfkk5MTVfR0VNX0RPTUFJTl9DUFUpOwogCiAJaWYgKHNlcW5vID09IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CkBAIC0yNTYwLDEyICszMDY3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKK2ludAogaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmZGV2X3ByaXYtPnJpbmc7CiAJaW50IHJldDsKIAl1MzIgaGVhZDsKIApAQCAtMjU4NywyNCArMzA5NSwyNCBAQAogCX0KIAogCS8qIFNldCB1cCB0aGUga2VybmVsIG1hcHBpbmcgZm9yIHRoZSByaW5nLiAqLwotCWRldl9wcml2LT5yaW5nLlNpemUgPSBvYmotPnNpemU7Ci0JZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gb2JqLT5zaXplIC0gMTsKKwlyaW5nLT5TaXplID0gb2JqLT5zaXplOworCXJpbmctPnRhaWxfbWFzayA9IG9iai0+c2l6ZSAtIDE7CiAKLQlkZXZfcHJpdi0+cmluZy5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKLQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IG9iai0+c2l6ZTsKLQlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLmZsYWdzID0gMDsKLQlkZXZfcHJpdi0+cmluZy5tYXAubXRyciA9IDA7CisJcmluZy0+bWFwLm9mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJcmluZy0+bWFwLnNpemUgPSBvYmotPnNpemU7CisJcmluZy0+bWFwLnR5cGUgPSAwOworCXJpbmctPm1hcC5mbGFncyA9IDA7CisJcmluZy0+bWFwLm10cnIgPSAwOwogCi0JZHJtX2NvcmVfaW9yZW1hcF93YygmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOwotCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwlkcm1fY29yZV9pb3JlbWFwX3djKCZyaW5nLT5tYXAsIGRldik7CisJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgcmluZ2J1ZmZlci5cbiIpOwogCQltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gb2JqOwotCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOworCXJpbmctPnJpbmdfb2JqID0gb2JqOworCXJpbmctPnZpcnR1YWxfc3RhcnQgPSByaW5nLT5tYXAuaGFuZGxlOwogCiAJLyogU3RvcCB0aGUgcmluZyBpZiBpdCdzIHJ1bm5pbmcuICovCiAJSTkxNV9XUklURShQUkIwX0NUTCwgMCk7CkBAIC0yNjUyLDEyICszMTYwLDIwIEBACiAJfQogCiAJLyogVXBkYXRlIG91ciBjYWNoZSBvZiB0aGUgcmluZyBzdGF0ZSAqLwotCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJZWxzZSB7CisJCXJpbmctPmhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKwkJcmluZy0+dGFpbCA9IEk5MTVfUkVBRChQUkIwX1RBSUwpICYgVEFJTF9BRERSOworCQlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCArIDgpOworCQlpZiAocmluZy0+c3BhY2UgPCAwKQorCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIGk5MTVfZ2VtX2NsZWFudXBfcmluZ2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjY5NSw2ICszMjExLDkgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0OwogCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCXJldHVybiAwOworCiAJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpIHsKIAkJRFJNX0VSUk9SKCJSZWVuYWJsaW5nIHdlZGdlZCBoYXJkd2FyZSwgZ29vZCBsdWNrXG4iKTsKIAkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDA7CkBAIC0yNzI4LDYgKzMyNDcsOSBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCByZXQ7CiAKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJcmV0dXJuIDA7CisKIAlyZXQgPSBpOTE1X2dlbV9pZGxlKGRldik7CiAJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIApAQCAtMjc1OCw1ICszMjgwLDEzIEBACiAJCQkgIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIpOwogCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyA9IDE7CiAKKwkvKiBPbGQgWCBkcml2ZXJzIHdpbGwgdGFrZSAwLTIgZm9yIGZyb250LCBiYWNrLCBkZXB0aCBidWZmZXJzICovCisJZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCA9IDM7CisKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzID0gMTY7CisJZWxzZQorCQlkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MgPSA4OworCiAJaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYwppbmRleCBlOGQ1YWJlLi40ZDFiOWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wcm9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCkBAIC0yNTAsNiArMjUwLDM5IEBACiAJcmV0dXJuIGxlbiAtIG9mZnNldDsKIH0KIAorc3RhdGljIGludCBpOTE1X2h3c19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbGVuID0gMCwgaTsKKwl2b2xhdGlsZSB1MzIgKmh3czsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJaHdzID0gKHZvbGF0aWxlIHUzMiAqKWRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKKwlpZiAoaHdzID09IE5VTEwpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDA5NiAvIHNpemVvZih1MzIpIC8gNDsgaSArPSA0KSB7CisJCURSTV9QUk9DX1BSSU5UKCIweCUwOHg6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCSAgICAgICBpICogNCwKKwkJCSAgICAgICBod3NbaV0sIGh3c1tpICsgMV0sIGh3c1tpICsgMl0sIGh3c1tpICsgM10pOworCX0KKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbiAtIG9mZnNldDsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1fcHJvY19saXN0IHsKIAkvKiogZmlsZSBuYW1lICovCiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTI2Miw2ICsyOTUsNyBAQAogCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCiAJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAogCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCisJeyJpOTE1X2dlbV9od3MiLCBpOTE1X2h3c19pbmZvfSwKIH07CiAKICNkZWZpbmUgSTkxNV9HRU1fUFJPQ19FTlRSSUVTIEFSUkFZX1NJWkUoaTkxNV9nZW1fcHJvY19saXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCBhOGNiNjk0Li4yNDFmMzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCX0KIAl9CiAJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisJb2JqX3ByaXYtPnN0cmlkZSA9IGFyZ3MtPnN0cmlkZTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA2OWI5YTQyLi4wY2FkYWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAKICNkZWZpbmUgTUFYX05PUElEICgodTMyKX4wKQogCkBAIC01MSw2ICs1MiwxNSBAQAogI2RlZmluZSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfTUFTSyAoSTkxNV9JTlRFUlJVUFRfRU5BQkxFX0ZJWCB8IFwKIAkJCQkgICAgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX1ZBUikKIAorI2RlZmluZSBJOTE1X1BJUEVfVkJMQU5LX1NUQVRVUwkoUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyB8XAorCQkJCSBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKQorCisjZGVmaW5lIEk5MTVfUElQRV9WQkxBTktfRU5BQkxFCShQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHxcCisJCQkJIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpCisKKyNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQUxMCShEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgXAorCQkJCQkgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikKKwogdm9pZAogaTkxNV9lbmFibGVfaXJxKGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBtYXNrKQogewpAQCAtMTY4LDYgKzE3OCw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OwogCXUzMiBpaXIsIG5ld19paXI7CiAJdTMyIHBpcGVhX3N0YXRzLCBwaXBlYl9zdGF0czsKIAl1MzIgdmJsYW5rX3N0YXR1czsKQEAgLTIwMCw2ICsyMTEsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKIAkJcGlwZWFfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKIAkJcGlwZWJfc3RhdHMgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKwogCQkvKgogCQkgKiBDbGVhciB0aGUgUElQRShBfEIpU1RBVCByZWdzIGJlZm9yZSB0aGUgSUlSCiAJCSAqLwpAQCAtMjIyLDkgKzIzNCwxMiBAQAogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCiAKLQkJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQotCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQotCQkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CisJCWlmIChkZXYtPnByaW1hcnktPm1hc3RlcikgeworCQkJbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJCQlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCQkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCQl9CiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpIHsKIAkJCWRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CkBAIC0yNjksNiArMjg0LDcgQEAKIHN0YXRpYyBpbnQgaTkxNV9lbWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCVJJTkdfTE9DQUxTOwogCiAJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CkBAIC0yNzgsOCArMjk0LDggQEAKIAlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKIAkJZGV2X3ByaXYtPmNvdW50ZXIgPSAxOwotCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CkBAIC0zMTcsMjEgKzMzMywyMCBAQAogc3RhdGljIGludCBpOTE1X3dhaXRfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgaXJxX25yKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAogCURSTV9ERUJVRygiaXJxX25yPSVkIGJyZWFkY3J1bWI9JWRcbiIsIGlycV9uciwKIAkJICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpKTsKIAogCWlmIChSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucikgewotCQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKLQkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KLQkJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwotCQl9CisJCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQotCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKIAogCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CiAJRFJNX1dBSVRfT04ocmV0LCBkZXZfcHJpdi0+aXJxX3F1ZXVlLCAzICogRFJNX0haLApAQCAtMzQzLDEwICszNTgsNiBAQAogCQkJICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpLCAoaW50KWRldl9wcml2LT5jb3VudGVyKTsKIAl9CiAKLQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KLQkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjcsNiArNDM4LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKIH0KIAordm9pZCBpOTE1X2VuYWJsZV9pbnRlcnJ1cHQgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlvcHJlZ2lvbl9lbmFibGVfYXNsZShkZXYpOworCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDE7Cit9CisKKwogLyogU2V0IHRoZSB2YmxhbmsgbW9uaXRvciBwaXBlCiAgKi8KIGludCBpOTE1X3ZibGFua19waXBlX3NldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNDg3LDYgKzUwNiw4IEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWF0b21pY19zZXQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQsIDApOworCiAJSTkxNV9XUklURShIV1NUQU0sIDB4ZWZmZSk7CiAJSTkxNV9XUklURShQSVBFQVNUQVQsIDApOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X21lbS5jCmluZGV4IDYxMjZhNjAuLjk2ZTI3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9tZW0uYwpAQCAtNDYsNyArNDYsOCBAQAogc3RhdGljIHZvaWQgbWFya19ibG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IG1lbV9ibG9jayAqcCwgaW50IGluX3VzZSkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGRldi0+cHJpbWFyeS0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKKwlkcm1faTkxNV9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJc3RydWN0IGRybV90ZXhfcmVnaW9uICpsaXN0OwogCXVuc2lnbmVkIHNoaWZ0LCBucjsKIAl1bnNpZ25lZCBzdGFydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYwppbmRleCAxM2FlNzMxLi5mZjAxMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCkBAIC0yNTcsOCArMjU3LDggQEAKIAogc3RhdGljIHN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqc3lzdGVtX29wcmVnaW9uOwogCi1pbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkgICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAkvKiBUaGUgb25seSB2aWRlbyBldmVudHMgcmVsZXZhbnQgdG8gb3ByZWdpb24gYXJlIDB4ODAuIFRoZXNlIGluZGljYXRlCiAJICAgZWl0aGVyIGEgZG9ja2luZyBldmVudCwgbGlkIHN3aXRjaCBvciBkaXNwbGF5IHN3aXRjaCByZXF1ZXN0LiBJbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggOWQyNGFhZS4uNDdlNmJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xNzUsOSArMTc1LDI2IEBACiAjZGVmaW5lICAgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCiAKIC8qCisgKiBGZW5jZSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBGRU5DRV9SRUdfODMwXzAJCQkweDIwMDAKKyNkZWZpbmUgICBJODMwX0ZFTkNFX1NUQVJUX01BU0sJCTB4MDdmODAwMDAKKyNkZWZpbmUgICBJODMwX0ZFTkNFX1RJTElOR19ZX1NISUZUCTEyCisjZGVmaW5lICAgSTgzMF9GRU5DRV9TSVpFX0JJVFMoc2l6ZSkJKChnZXRfb3JkZXIoc2l6ZSA+PiAxOSkgLSAxKSA8PCA4KQorI2RlZmluZSAgIEk4MzBfRkVOQ0VfUElUQ0hfU0hJRlQJNAorI2RlZmluZSAgIEk4MzBfRkVOQ0VfUkVHX1ZBTElECQkoMTw8MCkKKworI2RlZmluZSAgIEk5MTVfRkVOQ0VfU1RBUlRfTUFTSwkJMHgwZmYwMDAwMAorI2RlZmluZSAgIEk5MTVfRkVOQ0VfU0laRV9CSVRTKHNpemUpCSgoZ2V0X29yZGVyKHNpemUgPj4gMjApIC0gMSkgPDwgOCkKKworI2RlZmluZSBGRU5DRV9SRUdfOTY1XzAJCQkweDAzMDAwCisjZGVmaW5lICAgSTk2NV9GRU5DRV9QSVRDSF9TSElGVAkyCisjZGVmaW5lICAgSTk2NV9GRU5DRV9USUxJTkdfWV9TSElGVAkxCisjZGVmaW5lICAgSTk2NV9GRU5DRV9SRUdfVkFMSUQJCSgxPDwwKQorCisvKgogICogSW5zdHJ1Y3Rpb24gYW5kIGludGVycnVwdCBjb250cm9sIHJlZ3MKICAqLwotCiAjZGVmaW5lIFBSQjBfVEFJTAkweDAyMDMwCiAjZGVmaW5lIFBSQjBfSEVBRAkweDAyMDM0CiAjZGVmaW5lIFBSQjBfU1RBUlQJMHgwMjAzOApAQCAtMjQ1LDYgKzI2Miw3IEBACiAjZGVmaW5lICAgQ00wX1JDX09QX0ZMVVNIX0RJU0FCTEUgKDE8PDApCiAjZGVmaW5lIEdGWF9GTFNIX0NOVEwJMHgwMjE3MCAvKiA5MTUrIG9ubHkgKi8KIAorCiAvKgogICogRnJhbWVidWZmZXIgY29tcHJlc3Npb24gKDkxNSsgb25seSkKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTgyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgqSAyMDA2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICoKKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfYmlvcy5oIgorCisKK3N0YXRpYyB2b2lkICoKK2ZpbmRfc2VjdGlvbihzdHJ1Y3QgYmRiX2hlYWRlciAqYmRiLCBpbnQgc2VjdGlvbl9pZCkKK3sKKwl1OCAqYmFzZSA9ICh1OCAqKWJkYjsKKwlpbnQgaW5kZXggPSAwOworCXUxNiB0b3RhbCwgY3VycmVudF9zaXplOworCXU4IGN1cnJlbnRfaWQ7CisKKwkvKiBza2lwIHRvIGZpcnN0IHNlY3Rpb24gKi8KKwlpbmRleCArPSBiZGItPmhlYWRlcl9zaXplOworCXRvdGFsID0gYmRiLT5iZGJfc2l6ZTsKKworCS8qIHdhbGsgdGhlIHNlY3Rpb25zIGxvb2tpbmcgZm9yIHNlY3Rpb25faWQgKi8KKwl3aGlsZSAoaW5kZXggPCB0b3RhbCkgeworCQljdXJyZW50X2lkID0gKihiYXNlICsgaW5kZXgpOworCQlpbmRleCsrOworCQljdXJyZW50X3NpemUgPSAqKCh1MTYgKikoYmFzZSArIGluZGV4KSk7CisJCWluZGV4ICs9IDI7CisJCWlmIChjdXJyZW50X2lkID09IHNlY3Rpb25faWQpCisJCQlyZXR1cm4gYmFzZSArIGluZGV4OworCQlpbmRleCArPSBjdXJyZW50X3NpemU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRyeSB0byBmaW5kIHBhbmVsIGRhdGEgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9wYW5lbF9kYXRhKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IGJkYl9oZWFkZXIgKmJkYikKK3sKKwlzdHJ1Y3QgYmRiX2x2ZHNfb3B0aW9ucyAqbHZkc19vcHRpb25zOworCXN0cnVjdCBiZGJfbHZkc19sZnBfZGF0YSAqbHZkc19sZnBfZGF0YTsKKwlzdHJ1Y3QgYmRiX2x2ZHNfbGZwX2RhdGFfZW50cnkgKmVudHJ5OworCXN0cnVjdCBsdmRzX2R2b190aW1pbmcgKmR2b190aW1pbmc7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnBhbmVsX2ZpeGVkX21vZGU7CisKKwkvKiBEZWZhdWx0cyBpZiB3ZSBjYW4ndCBmaW5kIFZCVCBpbmZvICovCisJZGV2X3ByaXYtPmx2ZHNfZGl0aGVyID0gMDsKKwlkZXZfcHJpdi0+bHZkc192YnQgPSAwOworCisJbHZkc19vcHRpb25zID0gZmluZF9zZWN0aW9uKGJkYiwgQkRCX0xWRFNfT1BUSU9OUyk7CisJaWYgKCFsdmRzX29wdGlvbnMpCisJCXJldHVybjsKKworCWRldl9wcml2LT5sdmRzX2RpdGhlciA9IGx2ZHNfb3B0aW9ucy0+cGl4ZWxfZGl0aGVyOworCWlmIChsdmRzX29wdGlvbnMtPnBhbmVsX3R5cGUgPT0gMHhmZikKKwkJcmV0dXJuOworCisJbHZkc19sZnBfZGF0YSA9IGZpbmRfc2VjdGlvbihiZGIsIEJEQl9MVkRTX0xGUF9EQVRBKTsKKwlpZiAoIWx2ZHNfbGZwX2RhdGEpCisJCXJldHVybjsKKworCWRldl9wcml2LT5sdmRzX3ZidCA9IDE7CisKKwllbnRyeSA9ICZsdmRzX2xmcF9kYXRhLT5kYXRhW2x2ZHNfb3B0aW9ucy0+cGFuZWxfdHlwZV07CisJZHZvX3RpbWluZyA9ICZlbnRyeS0+ZHZvX3RpbWluZzsKKworCXBhbmVsX2ZpeGVkX21vZGUgPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqcGFuZWxfZml4ZWRfbW9kZSksCisJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOworCisJcGFuZWxfZml4ZWRfbW9kZS0+aGRpc3BsYXkgPSAoZHZvX3RpbWluZy0+aGFjdGl2ZV9oaSA8PCA4KSB8CisJCWR2b190aW1pbmctPmhhY3RpdmVfbG87CisJcGFuZWxfZml4ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBwYW5lbF9maXhlZF9tb2RlLT5oZGlzcGxheSArCisJCSgoZHZvX3RpbWluZy0+aHN5bmNfb2ZmX2hpIDw8IDgpIHwgZHZvX3RpbWluZy0+aHN5bmNfb2ZmX2xvKTsKKwlwYW5lbF9maXhlZF9tb2RlLT5oc3luY19lbmQgPSBwYW5lbF9maXhlZF9tb2RlLT5oc3luY19zdGFydCArCisJCWR2b190aW1pbmctPmhzeW5jX3B1bHNlX3dpZHRoOworCXBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbCA9IHBhbmVsX2ZpeGVkX21vZGUtPmhkaXNwbGF5ICsKKwkJKChkdm9fdGltaW5nLT5oYmxhbmtfaGkgPDwgOCkgfCBkdm9fdGltaW5nLT5oYmxhbmtfbG8pOworCisJcGFuZWxfZml4ZWRfbW9kZS0+dmRpc3BsYXkgPSAoZHZvX3RpbWluZy0+dmFjdGl2ZV9oaSA8PCA4KSB8CisJCWR2b190aW1pbmctPnZhY3RpdmVfbG87CisJcGFuZWxfZml4ZWRfbW9kZS0+dnN5bmNfc3RhcnQgPSBwYW5lbF9maXhlZF9tb2RlLT52ZGlzcGxheSArCisJCWR2b190aW1pbmctPnZzeW5jX29mZjsKKwlwYW5lbF9maXhlZF9tb2RlLT52c3luY19lbmQgPSBwYW5lbF9maXhlZF9tb2RlLT52c3luY19zdGFydCArCisJCWR2b190aW1pbmctPnZzeW5jX3B1bHNlX3dpZHRoOworCXBhbmVsX2ZpeGVkX21vZGUtPnZ0b3RhbCA9IHBhbmVsX2ZpeGVkX21vZGUtPnZkaXNwbGF5ICsKKwkJKChkdm9fdGltaW5nLT52YmxhbmtfaGkgPDwgOCkgfCBkdm9fdGltaW5nLT52YmxhbmtfbG8pOworCXBhbmVsX2ZpeGVkX21vZGUtPmNsb2NrID0gZHZvX3RpbWluZy0+Y2xvY2sgKiAxMDsKKwlwYW5lbF9maXhlZF9tb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisKKwlkcm1fbW9kZV9zZXRfbmFtZShwYW5lbF9maXhlZF9tb2RlKTsKKworCWRldl9wcml2LT52YnRfbW9kZSA9IHBhbmVsX2ZpeGVkX21vZGU7CisKKwlEUk1fREVCVUcoIkZvdW5kIHBhbmVsIG1vZGUgaW4gQklPUyBWQlQgdGFibGVzOlxuIik7CisJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShwYW5lbF9maXhlZF9tb2RlKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3BhcnNlX2dlbmVyYWxfZmVhdHVyZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgICAgc3RydWN0IGJkYl9oZWFkZXIgKmJkYikKK3sKKwlzdHJ1Y3QgYmRiX2dlbmVyYWxfZmVhdHVyZXMgKmdlbmVyYWw7CisKKwkvKiBTZXQgc2Vuc2libGUgZGVmYXVsdHMgaW4gY2FzZSB3ZSBjYW4ndCBmaW5kIHRoZSBnZW5lcmFsIGJsb2NrICovCisJZGV2X3ByaXYtPmludF90dl9zdXBwb3J0ID0gMTsKKwlkZXZfcHJpdi0+aW50X2NydF9zdXBwb3J0ID0gMTsKKworCWdlbmVyYWwgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfR0VORVJBTF9GRUFUVVJFUyk7CisJaWYgKGdlbmVyYWwpIHsKKwkJZGV2X3ByaXYtPmludF90dl9zdXBwb3J0ID0gZ2VuZXJhbC0+aW50X3R2X3N1cHBvcnQ7CisJCWRldl9wcml2LT5pbnRfY3J0X3N1cHBvcnQgPSBnZW5lcmFsLT5pbnRfY3J0X3N1cHBvcnQ7CisJfQorfQorCisvKioKKyAqIGludGVsX2luaXRfYmlvcyAtIGluaXRpYWxpemUgVkJJT1Mgc2V0dGluZ3MgJiBmaW5kIFZCVAorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIExvYWRzIHRoZSBWaWRlbyBCSU9TIGFuZCBjaGVja3MgdGhhdCB0aGUgVkJUIGV4aXN0cy4gIFNldHMgc2NyYXRjaCByZWdpc3RlcnMKKyAqIHRvIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqCisgKiBWQlQgZXhpc3RlbmNlIGlzIGEgc2FuaXR5IGNoZWNrIHRoYXQgaXMgcmVsaWVkIG9uIGJ5IG90aGVyIGk4MzBfYmlvcy5jIGNvZGUuCisgKiBOb3RlIHRoYXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIEJJT1MgY2FsbCB0byBnZXQgdGhlIFZCVCwgYXMgQklPU2VzIG1heQorICogZmVlZCBhbiB1cGRhdGVkIFZCVCBiYWNrIHRocm91Z2ggdGhhdCwgY29tcGFyZWQgdG8gd2hhdCB3ZSdsbCBmZXRjaCB1c2luZworICogdGhpcyBtZXRob2Qgb2YgZ3JvcGluZyBhcm91bmQgaW4gdGhlIEJJT1MgZGF0YS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLgorICovCitib29sCitpbnRlbF9pbml0X2Jpb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OworCXN0cnVjdCB2YnRfaGVhZGVyICp2YnQgPSBOVUxMOworCXN0cnVjdCBiZGJfaGVhZGVyICpiZGI7CisJdTggX19pb21lbSAqYmlvczsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgaTsKKworCWJpb3MgPSBwY2lfbWFwX3JvbShwZGV2LCAmc2l6ZSk7CisJaWYgKCFiaW9zKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTY291ciBtZW1vcnkgbG9va2luZyBmb3IgdGhlIFZCVCBzaWduYXR1cmUgKi8KKwlmb3IgKGkgPSAwOyBpICsgNCA8IHNpemU7IGkrKykgeworCQlpZiAoIW1lbWNtcChiaW9zICsgaSwgIiRWQlQiLCA0KSkgeworCQkJdmJ0ID0gKHN0cnVjdCB2YnRfaGVhZGVyICopKGJpb3MgKyBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF2YnQpIHsKKwkJRFJNX0VSUk9SKCJWQlQgc2lnbmF0dXJlIG1pc3NpbmdcbiIpOworCQlwY2lfdW5tYXBfcm9tKHBkZXYsIGJpb3MpOworCQlyZXR1cm4gLTE7CisJfQorCisJYmRiID0gKHN0cnVjdCBiZGJfaGVhZGVyICopKGJpb3MgKyBpICsgdmJ0LT5iZGJfb2Zmc2V0KTsKKworCS8qIEdyYWIgdXNlZnVsIGdlbmVyYWwgZGVmaW5pdGlvbnMgKi8KKwlwYXJzZV9nZW5lcmFsX2ZlYXR1cmVzKGRldl9wcml2LCBiZGIpOworCXBhcnNlX3BhbmVsX2RhdGEoZGV2X3ByaXYsIGJkYik7CisKKwlwY2lfdW5tYXBfcm9tKHBkZXYsIGJpb3MpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhNzE1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaApAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqIENvcHlyaWdodCCpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpZm5kZWYgX0k4MzBfQklPU19IXworI2RlZmluZSBfSTgzMF9CSU9TX0hfCisKKyNpbmNsdWRlICJkcm1QLmgiCisKK3N0cnVjdCB2YnRfaGVhZGVyIHsKKwl1OCBzaWduYXR1cmVbMjBdOwkJLyoqPCBBbHdheXMgc3RhcnRzIHdpdGggJ1ZCVCQnICovCisJdTE2IHZlcnNpb247CQkJLyoqPCBkZWNpbWFsICovCisJdTE2IGhlYWRlcl9zaXplOwkJLyoqPCBpbiBieXRlcyAqLworCXUxNiB2YnRfc2l6ZTsJCQkvKio8IGluIGJ5dGVzICovCisJdTggdmJ0X2NoZWNrc3VtOworCXU4IHJlc2VydmVkMDsKKwl1MzIgYmRiX29mZnNldDsJCQkvKio8IGZyb20gYmVnaW5uaW5nIG9mIFZCVCAqLworCXUzMiBhaW1fb2Zmc2V0WzRdOwkJLyoqPCBmcm9tIGJlZ2lubmluZyBvZiBWQlQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiZGJfaGVhZGVyIHsKKwl1OCBzaWduYXR1cmVbMTZdOwkJLyoqPCBBbHdheXMgJ0JJT1NfREFUQV9CTE9DSycgKi8KKwl1MTYgdmVyc2lvbjsJCQkvKio8IGRlY2ltYWwgKi8KKwl1MTYgaGVhZGVyX3NpemU7CQkvKio8IGluIGJ5dGVzICovCisJdTE2IGJkYl9zaXplOwkJCS8qKjwgaW4gYnl0ZXMgKi8KK307CisKKy8qIHN0cmljdGx5IHNwZWFraW5nLCB0aGlzIGlzIGEgInNraXAiIGJsb2NrLCBidXQgaXQgaGFzIGludGVyZXN0aW5nIGluZm8gKi8KK3N0cnVjdCB2Ymlvc19kYXRhIHsKKwl1OCB0eXBlOyAvKiAwID09IGRlc2t0b3AsIDEgPT0gbW9iaWxlICovCisJdTggcmVsc3RhZ2U7CisJdTggY2hpcHNldDsKKwl1OCBsdmRzX3ByZXNlbnQ6MTsKKwl1OCB0dl9wcmVzZW50OjE7CisJdTggcnN2ZDI6NjsgLyogZmluaXNoIGJ5dGUgKi8KKwl1OCByc3ZkM1s0XTsKKwl1OCBzaWdub25bMTU1XTsKKwl1OCBjb3B5cmlnaHRbNjFdOworCXUxNiBjb2RlX3NlZ21lbnQ7CisJdTggZG9zX2Jvb3RfbW9kZTsKKwl1OCBiYW5kd2lkdGhfcGVyY2VudDsKKwl1OCByc3ZkNDsgLyogcG9wdXAgbWVtb3J5IHNpemUgKi8KKwl1OCByZXNpemVfcGNpX2Jpb3M7CisJdTggcnN2ZDU7IC8qIGlzIGNydCBhbHJlYWR5IG9uIGRkYzIgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBCSU9TIGRhdGEgYmxvY2tzIChCREJzKSwgZWFjaCBibG9jayBoYXMKKyAqIGFuIElEIGFuZCBzaXplIGluIHRoZSBmaXJzdCAzIGJ5dGVzIChJRCBpbiBmaXJzdCwgc2l6ZSBpbiBuZXh0IDIpLgorICogS25vd24gdHlwZXMgYXJlIGxpc3RlZCBiZWxvdy4KKyAqLworI2RlZmluZSBCREJfR0VORVJBTF9GRUFUVVJFUwkgIDEKKyNkZWZpbmUgQkRCX0dFTkVSQUxfREVGSU5JVElPTlMJICAyCisjZGVmaW5lIEJEQl9PTERfVE9HR0xFX0xJU1QJICAzCisjZGVmaW5lIEJEQl9NT0RFX1NVUFBPUlRfTElTVAkgIDQKKyNkZWZpbmUgQkRCX0dFTkVSSUNfTU9ERV9UQUJMRQkgIDUKKyNkZWZpbmUgQkRCX0VYVF9NTUlPX1JFR1MJICA2CisjZGVmaW5lIEJEQl9TV0ZfSU8JCSAgNworI2RlZmluZSBCREJfU1dGX01NSU8JCSAgOAorI2RlZmluZSBCREJfRE9UX0NMT0NLX1RBQkxFCSAgOQorI2RlZmluZSBCREJfTU9ERV9SRU1PVkFMX1RBQkxFCSAxMAorI2RlZmluZSBCREJfQ0hJTERfREVWSUNFX1RBQkxFCSAxMQorI2RlZmluZSBCREJfRFJJVkVSX0ZFQVRVUkVTCSAxMgorI2RlZmluZSBCREJfRFJJVkVSX1BFUlNJU1RFTkNFCSAxMworI2RlZmluZSBCREJfRVhUX1RBQkxFX1BUUlMJIDE0CisjZGVmaW5lIEJEQl9ET1RfQ0xPQ0tfT1ZFUlJJREUJIDE1CisjZGVmaW5lIEJEQl9ESVNQTEFZX1NFTEVDVAkgMTYKKy8qIDE3IHJzdmQgKi8KKyNkZWZpbmUgQkRCX0RSSVZFUl9ST1RBVElPTgkgMTgKKyNkZWZpbmUgQkRCX0RJU1BMQVlfUkVNT1ZFCSAxOQorI2RlZmluZSBCREJfT0VNX0NVU1RPTQkJIDIwCisjZGVmaW5lIEJEQl9FRlBfTElTVAkJIDIxIC8qIHdvcmthcm91bmRzIGZvciBWR0EgaHN5bmMvdnN5bmMgKi8KKyNkZWZpbmUgQkRCX1NEVk9fTFZEU19PUFRJT05TCSAyMgorI2RlZmluZSBCREJfU0RWT19QQU5FTF9EVERTCSAyMworI2RlZmluZSBCREJfU0RWT19MVkRTX1BOUF9JRFMJIDI0CisjZGVmaW5lIEJEQl9TRFZPX0xWRFNfUE9XRVJfU0VRCSAyNQorI2RlZmluZSBCREJfVFZfT1BUSU9OUwkJIDI2CisjZGVmaW5lIEJEQl9MVkRTX09QVElPTlMJIDQwCisjZGVmaW5lIEJEQl9MVkRTX0xGUF9EQVRBX1BUUlMJIDQxCisjZGVmaW5lIEJEQl9MVkRTX0xGUF9EQVRBCSA0MgorI2RlZmluZSBCREJfTFZEU19CQUNLTElHSFQJIDQzCisjZGVmaW5lIEJEQl9MVkRTX1BPV0VSCQkgNDQKKyNkZWZpbmUgQkRCX1NLSVAJCTI1NCAvKiBWQklPUyBwcml2YXRlIGJsb2NrLCBpZ25vcmUgKi8KKworc3RydWN0IGJkYl9nZW5lcmFsX2ZlYXR1cmVzIHsKKyAgICAgICAgLyogYml0cyAxICovCisJdTggcGFuZWxfZml0dGluZzoyOworCXU4IGZsZXhhaW06MTsKKwl1OCBtc2dfZW5hYmxlOjE7CisJdTggY2xlYXJfc2NyZWVuOjM7CisJdTggY29sb3JfZmxpcDoxOworCisgICAgICAgIC8qIGJpdHMgMiAqLworCXU4IGRvd25sb2FkX2V4dF92YnQ6MTsKKwl1OCBlbmFibGVfc3NjOjE7CisJdTggc3NjX2ZyZXE6MTsKKwl1OCBlbmFibGVfbGZwX29uX292ZXJyaWRlOjE7CisJdTggZGlzYWJsZV9zc2NfZGR0OjE7CisJdTggcnN2ZDg6MzsgLyogZmluaXNoIGJ5dGUgKi8KKworICAgICAgICAvKiBiaXRzIDMgKi8KKwl1OCBkaXNhYmxlX3Ntb290aF92aXNpb246MTsKKwl1OCBzaW5nbGVfZHZpOjE7CisJdTggcnN2ZDk6NjsgLyogZmluaXNoIGJ5dGUgKi8KKworICAgICAgICAvKiBiaXRzIDQgKi8KKwl1OCBsZWdhY3lfbW9uaXRvcl9kZXRlY3Q7CisKKyAgICAgICAgLyogYml0cyA1ICovCisJdTggaW50X2NydF9zdXBwb3J0OjE7CisJdTggaW50X3R2X3N1cHBvcnQ6MTsKKwl1OCByc3ZkMTE6NjsgLyogZmluaXNoIGJ5dGUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiZGJfZ2VuZXJhbF9kZWZpbml0aW9ucyB7CisJLyogRERDIEdQSU8gKi8KKwl1OCBjcnRfZGRjX2dtYnVzX3BpbjsKKworCS8qIERQTVMgYml0cyAqLworCXU4IGRwbXNfYWNwaToxOworCXU4IHNraXBfYm9vdF9jcnRfZGV0ZWN0OjE7CisJdTggZHBtc19haW06MTsKKwl1OCByc3ZkMTo1OyAvKiBmaW5pc2ggYnl0ZSAqLworCisJLyogYm9vdCBkZXZpY2UgYml0cyAqLworCXU4IGJvb3RfZGlzcGxheVsyXTsKKwl1OCBjaGlsZF9kZXZfc2l6ZTsKKworCS8qIGRldmljZSBpbmZvICovCisJdTggdHZfb3JfbHZkc19pbmZvWzMzXTsKKwl1OCBkZXYxWzMzXTsKKwl1OCBkZXYyWzMzXTsKKwl1OCBkZXYzWzMzXTsKKwl1OCBkZXY0WzMzXTsKKwkvKiBtYXkgYmUgYW5vdGhlciBkZXZpY2UgYmxvY2sgaGVyZSBvbiBzb21lIHBsYXRmb3JtcyAqLworfTsKKworc3RydWN0IGJkYl9sdmRzX29wdGlvbnMgeworCXU4IHBhbmVsX3R5cGU7CisJdTggcnN2ZDE7CisJLyogTFZEUyBjYXBhYmlsaXRpZXMsIHN0b3JlZCBpbiBhIGR3b3JkICovCisJdTggcnN2ZDI6MTsKKwl1OCBsdmRzX2VkaWQ6MTsKKwl1OCBwaXhlbF9kaXRoZXI6MTsKKwl1OCBwZml0X3JhdGlvX2F1dG86MTsKKwl1OCBwZml0X2dmeF9tb2RlX2VuaGFuY2VkOjE7CisJdTggcGZpdF90ZXh0X21vZGVfZW5oYW5jZWQ6MTsKKwl1OCBwZml0X21vZGU6MjsKKwl1OCByc3ZkNDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIExGUCBwb2ludGVyIHRhYmxlIGNvbnRhaW5zIGVudHJpZXMgdG8gdGhlIHN0cnVjdCBiZWxvdyAqLworc3RydWN0IGJkYl9sdmRzX2xmcF9kYXRhX3B0ciB7CisJdTE2IGZwX3RpbWluZ19vZmZzZXQ7IC8qIG9mZnNldHMgYXJlIGZyb20gc3RhcnQgb2YgYmRiICovCisJdTggZnBfdGFibGVfc2l6ZTsKKwl1MTYgZHZvX3RpbWluZ19vZmZzZXQ7CisJdTggZHZvX3RhYmxlX3NpemU7CisJdTE2IHBhbmVsX3BucF9pZF9vZmZzZXQ7CisJdTggcG5wX3RhYmxlX3NpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYmRiX2x2ZHNfbGZwX2RhdGFfcHRycyB7CisJdTggbHZkc19lbnRyaWVzOyAvKiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsdmRzX2RhdGFfcHRyIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgYmRiX2x2ZHNfbGZwX2RhdGFfcHRyIHB0clsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMRlAgZGF0YSBoYXMgMyBibG9ja3MgcGVyIGVudHJ5ICovCitzdHJ1Y3QgbHZkc19mcF90aW1pbmcgeworCXUxNiB4X3JlczsKKwl1MTYgeV9yZXM7CisJdTMyIGx2ZHNfcmVnOworCXUzMiBsdmRzX3JlZ192YWw7CisJdTMyIHBwX29uX3JlZzsKKwl1MzIgcHBfb25fcmVnX3ZhbDsKKwl1MzIgcHBfb2ZmX3JlZzsKKwl1MzIgcHBfb2ZmX3JlZ192YWw7CisJdTMyIHBwX2N5Y2xlX3JlZzsKKwl1MzIgcHBfY3ljbGVfcmVnX3ZhbDsKKwl1MzIgcGZpdF9yZWc7CisJdTMyIHBmaXRfcmVnX3ZhbDsKKwl1MTYgdGVybWluYXRvcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBsdmRzX2R2b190aW1pbmcgeworCXUxNiBjbG9jazsJCS8qKjwgSW4gMTBraHogKi8KKwl1OCBoYWN0aXZlX2xvOworCXU4IGhibGFua19sbzsKKwl1OCBoYmxhbmtfaGk6NDsKKwl1OCBoYWN0aXZlX2hpOjQ7CisJdTggdmFjdGl2ZV9sbzsKKwl1OCB2YmxhbmtfbG87CisJdTggdmJsYW5rX2hpOjQ7CisJdTggdmFjdGl2ZV9oaTo0OworCXU4IGhzeW5jX29mZl9sbzsKKwl1OCBoc3luY19wdWxzZV93aWR0aDsKKwl1OCB2c3luY19wdWxzZV93aWR0aDo0OworCXU4IHZzeW5jX29mZjo0OworCXU4IHJzdmQwOjY7CisJdTggaHN5bmNfb2ZmX2hpOjI7CisJdTggaF9pbWFnZTsKKwl1OCB2X2ltYWdlOworCXU4IG1heF9odjsKKwl1OCBoX2JvcmRlcjsKKwl1OCB2X2JvcmRlcjsKKwl1OCByc3ZkMTozOworCXU4IGRpZ2l0YWw6MjsKKwl1OCB2c3luY19wb3NpdGl2ZToxOworCXU4IGhzeW5jX3Bvc2l0aXZlOjE7CisJdTggcnN2ZDI6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBsdmRzX3BucF9pZCB7CisJdTE2IG1mZ19uYW1lOworCXUxNiBwcm9kdWN0X2NvZGU7CisJdTMyIHNlcmlhbDsKKwl1OCBtZmdfd2VlazsKKwl1OCBtZmdfeWVhcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiZGJfbHZkc19sZnBfZGF0YV9lbnRyeSB7CisJc3RydWN0IGx2ZHNfZnBfdGltaW5nIGZwX3RpbWluZzsKKwlzdHJ1Y3QgbHZkc19kdm9fdGltaW5nIGR2b190aW1pbmc7CisJc3RydWN0IGx2ZHNfcG5wX2lkIHBucF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiZGJfbHZkc19sZnBfZGF0YSB7CisJc3RydWN0IGJkYl9sdmRzX2xmcF9kYXRhX2VudHJ5IGRhdGFbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGFpbWRiX2hlYWRlciB7CisJY2hhciBzaWduYXR1cmVbMTZdOworCWNoYXIgb2VtX2RldmljZVsyMF07CisJdTE2IGFpbWRiX3ZlcnNpb247CisJdTE2IGFpbWRiX2hlYWRlcl9zaXplOworCXUxNiBhaW1kYl9zaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGFpbWRiX2Jsb2NrIHsKKwl1OCBhaW1kYl9pZDsKKwl1MTYgYWltZGJfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB2Y2hfcGFuZWxfZGF0YSB7CisJdTE2IGZwX3RpbWluZ19vZmZzZXQ7CisJdTggZnBfdGltaW5nX3NpemU7CisJdTE2IGR2b190aW1pbmdfb2Zmc2V0OworCXU4IGR2b190aW1pbmdfc2l6ZTsKKwl1MTYgdGV4dF9maXR0aW5nX29mZnNldDsKKwl1OCB0ZXh0X2ZpdHRpbmdfc2l6ZTsKKwl1MTYgZ3JhcGhpY3NfZml0dGluZ19vZmZzZXQ7CisJdTggZ3JhcGhpY3NfZml0dGluZ19zaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHZjaF9iZGJfMjIgeworCXN0cnVjdCBhaW1kYl9ibG9jayBhaW1kYl9ibG9jazsKKwlzdHJ1Y3QgdmNoX3BhbmVsX2RhdGEgcGFuZWxzWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2Jvb2wgaW50ZWxfaW5pdF9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKgorICogRHJpdmVyPC0+VkJJT1MgaW50ZXJhY3Rpb24gb2NjdXJzIHRocm91Z2ggc2NyYXRjaCBiaXRzIGluCisgKiBHUjE4ICYgU1dGKi4KKyAqLworCisvKiBHUjE4IGJpdHMgYXJlIHNldCBvbiBkaXNwbGF5IHN3aXRjaCBhbmQgaG90a2V5IGV2ZW50cyAqLworI2RlZmluZSBHUjE4X0RSSVZFUl9TV0lUQ0hfRU4JKDE8PDcpIC8qIDA6IFZCSU9TIGNvbnRyb2wsIDE6IGRyaXZlciBjb250cm9sICovCisjZGVmaW5lIEdSMThfSE9US0VZX01BU0sJMHg3OCAvKiBTZWUgYWxzbyBTV0Y0IDE1OjAgKi8KKyNkZWZpbmUgICBHUjE4X0hLX05PTkUJCSgweDA8PDMpCisjZGVmaW5lICAgR1IxOF9IS19MRlBfU1RSRVRDSAkoMHgxPDwzKQorI2RlZmluZSAgIEdSMThfSEtfVE9HR0xFX0RJU1AJKDB4Mjw8MykKKyNkZWZpbmUgICBHUjE4X0hLX0RJU1BfU1dJVENICSgweDQ8PDMpIC8qIHNlZSBTV0YxNCAxNTowIGZvciB3aGF0IHRvIGVuYWJsZSAqLworI2RlZmluZSAgIEdSMThfSEtfUE9QVVBfRElTQUJMRUQgKDB4Njw8MykKKyNkZWZpbmUgICBHUjE4X0hLX1BPUFVQX0VOQUJMRUQJKDB4Nzw8MykKKyNkZWZpbmUgICBHUjE4X0hLX1BGSVQJCSgweDg8PDMpCisjZGVmaW5lICAgR1IxOF9IS19BUE1fQ0hBTkdFCSgweGE8PDMpCisjZGVmaW5lICAgR1IxOF9IS19NVUxUSVBMRQkoMHhjPDwzKQorI2RlZmluZSBHUjE4X1VTRVJfSU5UX0VOCSgxPDwyKQorI2RlZmluZSBHUjE4X0EwMDAwX0ZMVVNIX0VOCSgxPDwxKQorI2RlZmluZSBHUjE4X1NNTV9FTgkJKDE8PDApCisKKy8qIFNldCBieSBkcml2ZXIsIGNsZWFyZWQgYnkgVkJJT1MgKi8KKyNkZWZpbmUgU1dGMDBfWVJFU19TSElGVAkxNgorI2RlZmluZSBTV0YwMF9YUkVTX1NISUZUCTAKKyNkZWZpbmUgU1dGMDBfUkVTX01BU0sJCTB4ZmZmZgorCisvKiBTZXQgYnkgVkJJT1MgYXQgYm9vdCB0aW1lIGFuZCBkcml2ZXIgYXQgcnVudGltZSAqLworI2RlZmluZSBTV0YwMV9UVjJfRk9STUFUX1NISUZUCTgKKyNkZWZpbmUgU1dGMDFfVFYxX0ZPUk1BVF9TSElGVAkwCisjZGVmaW5lIFNXRjAxX1RWX0ZPUk1BVF9NQVNLCTB4ZmZmZgorCisjZGVmaW5lIFNXRjEwX1ZCSU9TX0JMQ19JMkNfRU4JKDE8PDI5KQorI2RlZmluZSBTV0YxMF9HVFRfT1ZFUlJJREVfRU4JKDE8PDI4KQorI2RlZmluZSBTV0YxMF9MRlBfRFBNU19PVlIJKDE8PDI3KSAvKiBvdmVycmlkZSBEUE1TIG9uIGRpc3BsYXkgc3dpdGNoICovCisjZGVmaW5lIFNXRjEwX0FDVElWRV9UT0dHTEVfTElTVF9NQVNLICg3PDwyNCkKKyNkZWZpbmUgICBTV0YxMF9PTERfVE9HR0xFCTB4MAorI2RlZmluZSAgIFNXRjEwX1RPR0dMRV9MSVNUXzEJMHgxCisjZGVmaW5lICAgU1dGMTBfVE9HR0xFX0xJU1RfMgkweDIKKyNkZWZpbmUgICBTV0YxMF9UT0dHTEVfTElTVF8zCTB4MworI2RlZmluZSAgIFNXRjEwX1RPR0dMRV9MSVNUXzQJMHg0CisjZGVmaW5lIFNXRjEwX1BBTk5JTkdfRU4JKDE8PDIzKQorI2RlZmluZSBTV0YxMF9EUklWRVJfTE9BREVECSgxPDwyMikKKyNkZWZpbmUgU1dGMTBfRVhURU5ERURfREVTS1RPUAkoMTw8MjEpCisjZGVmaW5lIFNXRjEwX0VYQ0xVU0lWRV9NT0RFCSgxPDwyMCkKKyNkZWZpbmUgU1dGMTBfT1ZFUkxBWV9FTgkoMTw8MTkpCisjZGVmaW5lIFNXRjEwX1BMQU5FQl9IT0xET0ZGCSgxPDwxOCkKKyNkZWZpbmUgU1dGMTBfUExBTkVBX0hPTERPRkYJKDE8PDE3KQorI2RlZmluZSBTV0YxMF9WR0FfSE9MRE9GRgkoMTw8MTYpCisjZGVmaW5lIFNXRjEwX0FDVElWRV9ESVNQX01BU0sJMHhmZmZmCisjZGVmaW5lICAgU1dGMTBfUElQRUJfTEZQMgkoMTw8MTUpCisjZGVmaW5lICAgU1dGMTBfUElQRUJfRUZQMgkoMTw8MTQpCisjZGVmaW5lICAgU1dGMTBfUElQRUJfVFYyCSgxPDwxMykKKyNkZWZpbmUgICBTV0YxMF9QSVBFQl9DUlQyCSgxPDwxMikKKyNkZWZpbmUgICBTV0YxMF9QSVBFQl9MRlAJKDE8PDExKQorI2RlZmluZSAgIFNXRjEwX1BJUEVCX0VGUAkoMTw8MTApCisjZGVmaW5lICAgU1dGMTBfUElQRUJfVFYJKDE8PDkpCisjZGVmaW5lICAgU1dGMTBfUElQRUJfQ1JUCSgxPDw4KQorI2RlZmluZSAgIFNXRjEwX1BJUEVBX0xGUDIJKDE8PDcpCisjZGVmaW5lICAgU1dGMTBfUElQRUFfRUZQMgkoMTw8NikKKyNkZWZpbmUgICBTV0YxMF9QSVBFQV9UVjIJKDE8PDUpCisjZGVmaW5lICAgU1dGMTBfUElQRUFfQ1JUMgkoMTw8NCkKKyNkZWZpbmUgICBTV0YxMF9QSVBFQV9MRlAJKDE8PDMpCisjZGVmaW5lICAgU1dGMTBfUElQRUFfRUZQCSgxPDwyKQorI2RlZmluZSAgIFNXRjEwX1BJUEVBX1RWCSgxPDwxKQorI2RlZmluZSAgIFNXRjEwX1BJUEVBX0NSVAkoMTw8MCkKKworI2RlZmluZSBTV0YxMV9NRU1PUllfU0laRV9TSElGVAkxNgorI2RlZmluZSBTV0YxMV9TVl9URVNUX0VOCSgxPDwxNSkKKyNkZWZpbmUgU1dGMTFfSVNfQUdQCQkoMTw8MTQpCisjZGVmaW5lIFNXRjExX0RJU1BMQVlfSE9MRE9GRgkoMTw8MTMpCisjZGVmaW5lIFNXRjExX0RQTVNfUkVEVUNFRAkoMTw8MTIpCisjZGVmaW5lIFNXRjExX0lTX1ZCRV9NT0RFCSgxPDwxMSkKKyNkZWZpbmUgU1dGMTFfUElQRUJfQUNDRVNTCSgxPDwxMCkgLyogMCBoZXJlIG1lYW5zIHBpcGUgYSAqLworI2RlZmluZSBTV0YxMV9EUE1TX01BU0sJCTB4MDcKKyNkZWZpbmUgICBTV0YxMV9EUE1TX09GRgkoMTw8MikKKyNkZWZpbmUgICBTV0YxMV9EUE1TX1NVU1BFTkQJKDE8PDEpCisjZGVmaW5lICAgU1dGMTFfRFBNU19TVEFOREJZCSgxPDwwKQorI2RlZmluZSAgIFNXRjExX0RQTVNfT04JCTAKKworI2RlZmluZSBTV0YxNF9HRlhfUEZJVF9FTgkoMTw8MzEpCisjZGVmaW5lIFNXRjE0X1RFWFRfUEZJVF9FTgkoMTw8MzApCisjZGVmaW5lIFNXRjE0X0xJRF9TVEFUVVNfQ0xPU0VECSgxPDwyOSkgLyogMCBoZXJlIG1lYW5zIG9wZW4gKi8KKyNkZWZpbmUgU1dGMTRfUE9QVVBfRU4JCSgxPDwyOCkKKyNkZWZpbmUgU1dGMTRfRElTUExBWV9IT0xET0ZGCSgxPDwyNykKKyNkZWZpbmUgU1dGMTRfRElTUF9ERVRFQ1RfRU4JKDE8PDI2KQorI2RlZmluZSBTV0YxNF9ET0NLSU5HX1NUQVRVU19ET0NLRUQgKDE8PDI1KSAvKiAwIGhlcmUgbWVhbnMgdW5kb2NrZWQgKi8KKyNkZWZpbmUgU1dGMTRfRFJJVkVSX1NUQVRVUwkoMTw8MjQpCisjZGVmaW5lIFNXRjE0X09TX1RZUEVfV0lOOVgJKDE8PDIzKQorI2RlZmluZSBTV0YxNF9PU19UWVBFX1dJTk5UCSgxPDwyMikKKy8qIDIxOjE5IHJzdmQgKi8KKyNkZWZpbmUgU1dGMTRfUE1fVFlQRV9NQVNLCTB4MDAwNzAwMDAKKyNkZWZpbmUgICBTV0YxNF9QTV9BQ1BJX1ZJREVPCSgweDQgPDwgMTYpCisjZGVmaW5lICAgU1dGMTRfUE1fQUNQSQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgICBTV0YxNF9QTV9BUE1fMTIJKDB4MiA8PCAxNikKKyNkZWZpbmUgICBTV0YxNF9QTV9BUE1fMTEJKDB4MSA8PCAxNikKKyNkZWZpbmUgU1dGMTRfSEtfUkVRVUVTVF9NQVNLCTB4MDAwMGZmZmYgLyogc2VlIEdSMTggNjozIGZvciBldmVudCB0eXBlICovCisgICAgICAgICAgLyogaWYgR1IxOCBpbmRpY2F0ZXMgYSBkaXNwbGF5IHN3aXRjaCAqLworI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX0xGUDJfRU4gKDE8PDE1KQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX0VGUDJfRU4gKDE8PDE0KQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX1RWMl9FTiAgKDE8PDEzKQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX0NSVDJfRU4gKDE8PDEyKQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX0xGUF9FTiAgKDE8PDExKQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX0VGUF9FTiAgKDE8PDEwKQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVCX1RWX0VOICAgKDE8PDkpCisjZGVmaW5lICAgU1dGMTRfRFNfUElQRUJfQ1JUX0VOICAoMTw8OCkKKyNkZWZpbmUgICBTV0YxNF9EU19QSVBFQV9MRlAyX0VOICgxPDw3KQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVBX0VGUDJfRU4gKDE8PDYpCisjZGVmaW5lICAgU1dGMTRfRFNfUElQRUFfVFYyX0VOICAoMTw8NSkKKyNkZWZpbmUgICBTV0YxNF9EU19QSVBFQV9DUlQyX0VOICgxPDw0KQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVBX0xGUF9FTiAgKDE8PDMpCisjZGVmaW5lICAgU1dGMTRfRFNfUElQRUFfRUZQX0VOICAoMTw8MikKKyNkZWZpbmUgICBTV0YxNF9EU19QSVBFQV9UVl9FTiAgICgxPDwxKQorI2RlZmluZSAgIFNXRjE0X0RTX1BJUEVBX0NSVF9FTiAgKDE8PDApCisgICAgICAgICAgLyogaWYgR1IxOCBpbmRpY2F0ZXMgYSBwYW5lbCBmaXR0aW5nIHJlcXVlc3QgKi8KKyNkZWZpbmUgICBTV0YxNF9QRklUX0VOCQkoMTw8MCkgLyogMCBtZWFucyBkaXNhYmxlICovCisgICAgICAgICAgLyogaWYgR1IxOCBpbmRpY2F0ZXMgYW4gQVBNIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lICAgU1dGMTRfQVBNX0hJQkVSTkFURQkweDQKKyNkZWZpbmUgICBTV0YxNF9BUE1fU1VTUEVORAkweDMKKyNkZWZpbmUgICBTV0YxNF9BUE1fU1RBTkRCWQkweDEKKyNkZWZpbmUgICBTV0YxNF9BUE1fUkVTVE9SRQkweDAKKworI2VuZGlmIC8qIF9JODMwX0JJT1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhZWQzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDYtMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICoJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBJOTE1X1JFQUQoQURQQSk7CisJdGVtcCAmPSB+KEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFIHwgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUpOworCXRlbXAgJj0gfkFEUEFfREFDX0VOQUJMRTsKKworCXN3aXRjaChtb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCQl0ZW1wIHw9IEFEUEFfREFDX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CisJCXRlbXAgfD0gQURQQV9EQUNfRU5BQkxFIHwgQURQQV9IU1lOQ19DTlRMX0RJU0FCTEU7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCQl0ZW1wIHw9IEFEUEFfREFDX0VOQUJMRSB8IEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFOworCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgorCQl0ZW1wIHw9IEFEUEFfSFNZTkNfQ05UTF9ESVNBQkxFIHwgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEU7CisJCWJyZWFrOworCX0KKworCUk5MTVfV1JJVEUoQURQQSwgdGVtcCk7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY3J0X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCXJldHVybiBNT0RFX05PX0RCTEVTQ0FOOworCisJaWYgKG1vZGUtPmNsb2NrID4gNDAwMDAwIHx8IG1vZGUtPmNsb2NrIDwgMjUwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2NydF9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBkcGxsX21kX3JlZzsKKwl1MzIgYWRwYSwgZHBsbF9tZDsKKworCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDApCisJCWRwbGxfbWRfcmVnID0gRFBMTF9BX01EOworCWVsc2UKKwkJZHBsbF9tZF9yZWcgPSBEUExMX0JfTUQ7CisKKwkvKgorCSAqIERpc2FibGUgc2VwYXJhdGUgbW9kZSBtdWx0aXBsaWVyIHVzZWQgd2hlbiBjbG9uaW5nIFNEVk8gdG8gQ1JUCisJICogWFhYIHRoaXMgbmVlZHMgdG8gYmUgYWRqdXN0ZWQgd2hlbiB3ZSByZWFsbHkgYXJlIGNsb25pbmcKKwkgKi8KKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlkcGxsX21kID0gSTkxNV9SRUFEKGRwbGxfbWRfcmVnKTsKKwkJSTkxNV9XUklURShkcGxsX21kX3JlZywKKwkJCSAgIGRwbGxfbWQgJiB+RFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLKTsKKwl9CisKKwlhZHBhID0gMDsKKwlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJYWRwYSB8PSBBRFBBX0hTWU5DX0FDVElWRV9ISUdIOworCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQlhZHBhIHw9IEFEUEFfVlNZTkNfQUNUSVZFX0hJR0g7CisKKwlpZiAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKQorCQlhZHBhIHw9IEFEUEFfUElQRV9BX1NFTEVDVDsKKwllbHNlCisJCWFkcGEgfD0gQURQQV9QSVBFX0JfU0VMRUNUOworCisJSTkxNV9XUklURShBRFBBLCBhZHBhKTsKK30KKworLyoqCisgKiBVc2VzIENSVF9IT1RQTFVHX0VOIGFuZCBDUlRfSE9UUExVR19TVEFUIHRvIGRldGVjdCBDUlQgcHJlc2VuY2UuCisgKgorICogTm90IGZvciBpOTE1Ry9pOTE1R00KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgQ1JUIGlzIGNvbm5lY3RlZC4KKyAqIFxyZXR1cm4gZmFsc2UgaWYgQ1JUIGlzIGRpc2Nvbm5lY3RlZC4KKyAqLworc3RhdGljIGJvb2wgaW50ZWxfY3J0X2RldGVjdF9ob3RwbHVnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHRlbXA7CisKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKworCXRlbXAgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKKworCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLAorCQkgICB0ZW1wIHwgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUIHwgKDEgPDwgNSkpOworCisJZG8geworCQlpZiAoIShJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKSAmIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVCkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKHRpbWVfYWZ0ZXIodGltZW91dCwgamlmZmllcykpOworCisJaWYgKChJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpICYgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLKSA9PQorCSAgICBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfY3J0X2RldGVjdF9kZGMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCS8qIENSVCBzaG91bGQgYWx3YXlzIGJlIGF0IDAsIGJ1dCBjaGVjayBhbnl3YXkgKi8KKwlpZiAoaW50ZWxfb3V0cHV0LT50eXBlICE9IElOVEVMX09VVFBVVF9BTkFMT0cpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBpbnRlbF9kZGNfcHJvYmUoaW50ZWxfb3V0cHV0KTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaW50ZWxfY3J0X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKworCWlmIChJU19JOVhYKGRldikgJiYgIUlTX0k5MTVHKGRldikgJiYgIUlTX0k5MTVHTShkZXYpKSB7CisJCWlmIChpbnRlbF9jcnRfZGV0ZWN0X2hvdHBsdWcoY29ubmVjdG9yKSkKKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJZWxzZQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCX0KKworCWlmIChpbnRlbF9jcnRfZGV0ZWN0X2RkYyhjb25uZWN0b3IpKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwkvKiBUT0RPIHVzZSBsb2FkIGRldGVjdCAqLworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydF9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlpbnRlbF9pMmNfZGVzdHJveShpbnRlbF9vdXRwdXQtPmRkY19idXMpOworCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJa2ZyZWUoY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBpbnRlbF9jcnRfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJcmV0dXJuIGludGVsX2RkY19nZXRfbW9kZXMoaW50ZWxfb3V0cHV0KTsKK30KKworc3RhdGljIGludCBpbnRlbF9jcnRfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCQkgIHVpbnQ2NF90IHZhbHVlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKworCWlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLmRwbXNfcHJvcGVydHkgJiYgY29ubmVjdG9yLT5lbmNvZGVyKQorCQlpbnRlbF9jcnRfZHBtcyhjb25uZWN0b3ItPmVuY29kZXIsICh1aW50MzJfdCkodmFsdWUgJiAweGYpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUm91dGluZXMgZm9yIGNvbnRyb2xsaW5nIHN0dWZmIG9uIHRoZSBhbmFsb2cgcG9ydAorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGludGVsX2NydF9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9jcnRfZHBtcywKKwkubW9kZV9maXh1cCA9IGludGVsX2NydF9tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gaW50ZWxfZW5jb2Rlcl9wcmVwYXJlLAorCS5jb21taXQgPSBpbnRlbF9lbmNvZGVyX2NvbW1pdCwKKwkubW9kZV9zZXQgPSBpbnRlbF9jcnRfbW9kZV9zZXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaW50ZWxfY3J0X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZGV0ZWN0ID0gaW50ZWxfY3J0X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGludGVsX2NydF9kZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBpbnRlbF9jcnRfc2V0X3Byb3BlcnR5LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBpbnRlbF9jcnRfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV92YWxpZCA9IGludGVsX2NydF9tb2RlX3ZhbGlkLAorCS5nZXRfbW9kZXMgPSBpbnRlbF9jcnRfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBpbnRlbF9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRfZW5jX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgaW50ZWxfY3J0X2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGludGVsX2NydF9lbmNfZGVzdHJveSwKK307CisKK3ZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dDsKKworCWludGVsX291dHB1dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9vdXRwdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWludGVsX291dHB1dCkKKwkJcmV0dXJuOworCisJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmaW50ZWxfb3V0cHV0LT5iYXNlLAorCQkJICAgJmludGVsX2NydF9jb25uZWN0b3JfZnVuY3MsIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EpOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsICZpbnRlbF9vdXRwdXQtPmVuYywgJmludGVsX2NydF9lbmNfZnVuY3MsCisJCQkgRFJNX01PREVfRU5DT0RFUl9EQUMpOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJCSAgJmludGVsX291dHB1dC0+ZW5jKTsKKworCS8qIFNldCB1cCB0aGUgRERDIGJ1cy4gKi8KKwlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0EsICJDUlRERENfQSIpOworCWlmICghaW50ZWxfb3V0cHV0LT5kZGNfYnVzKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPnBkZXYtPmRldiwgIkREQyBidXMgcmVnaXN0cmF0aW9uICIKKwkJCSAgICJmYWlsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWludGVsX291dHB1dC0+dHlwZSA9IElOVEVMX09VVFBVVF9BTkFMT0c7CisJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7CisJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSAwOworCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmaW50ZWxfb3V0cHV0LT5lbmMsICZpbnRlbF9jcnRfaGVscGVyX2Z1bmNzKTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmaW50ZWxfY3J0X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWMxYzgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0wLDAgKzEsMTYxOCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA2LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKworYm9vbCBpbnRlbF9waXBlX2hhc190eXBlIChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0eXBlKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIGdpdmVuIHZhbHVlcyAqLworICAgIGludCBuOworICAgIGludCBtMSwgbTI7CisgICAgaW50IHAxLCBwMjsKKyAgICAvKiBkZXJpdmVkIHZhbHVlcyAqLworICAgIGludAlkb3Q7CisgICAgaW50CXZjbzsKKyAgICBpbnQJbTsKKyAgICBpbnQJcDsKK30gaW50ZWxfY2xvY2tfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludAltaW4sIG1heDsKK30gaW50ZWxfcmFuZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludAlkb3RfbGltaXQ7CisgICAgaW50CXAyX3Nsb3csIHAyX2Zhc3Q7Cit9IGludGVsX3AyX3Q7CisKKyNkZWZpbmUgSU5URUxfUDJfTlVNCQkgICAgICAyCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnRlbF9yYW5nZV90ICAgZG90LCB2Y28sIG4sIG0sIG0xLCBtMiwgcCwgcDE7CisgICAgaW50ZWxfcDJfdAkgICAgcDI7Cit9IGludGVsX2xpbWl0X3Q7CisKKyNkZWZpbmUgSThYWF9ET1RfTUlOCQkgIDI1MDAwCisjZGVmaW5lIEk4WFhfRE9UX01BWAkJIDM1MDAwMAorI2RlZmluZSBJOFhYX1ZDT19NSU4JCSA5MzAwMDAKKyNkZWZpbmUgSThYWF9WQ09fTUFYCQkxNDAwMDAwCisjZGVmaW5lIEk4WFhfTl9NSU4JCSAgICAgIDMKKyNkZWZpbmUgSThYWF9OX01BWAkJICAgICAxNgorI2RlZmluZSBJOFhYX01fTUlOCQkgICAgIDk2CisjZGVmaW5lIEk4WFhfTV9NQVgJCSAgICAxNDAKKyNkZWZpbmUgSThYWF9NMV9NSU4JCSAgICAgMTgKKyNkZWZpbmUgSThYWF9NMV9NQVgJCSAgICAgMjYKKyNkZWZpbmUgSThYWF9NMl9NSU4JCSAgICAgIDYKKyNkZWZpbmUgSThYWF9NMl9NQVgJCSAgICAgMTYKKyNkZWZpbmUgSThYWF9QX01JTgkJICAgICAgNAorI2RlZmluZSBJOFhYX1BfTUFYCQkgICAgMTI4CisjZGVmaW5lIEk4WFhfUDFfTUlOCQkgICAgICAyCisjZGVmaW5lIEk4WFhfUDFfTUFYCQkgICAgIDMzCisjZGVmaW5lIEk4WFhfUDFfTFZEU19NSU4JICAgICAgMQorI2RlZmluZSBJOFhYX1AxX0xWRFNfTUFYCSAgICAgIDYKKyNkZWZpbmUgSThYWF9QMl9TTE9XCQkgICAgICA0CisjZGVmaW5lIEk4WFhfUDJfRkFTVAkJICAgICAgMgorI2RlZmluZSBJOFhYX1AyX0xWRFNfU0xPVwkgICAgICAxNAorI2RlZmluZSBJOFhYX1AyX0xWRFNfRkFTVAkgICAgICAxNCAvKiBObyBmYXN0IG9wdGlvbiAqLworI2RlZmluZSBJOFhYX1AyX1NMT1dfTElNSVQJIDE2NTAwMAorCisjZGVmaW5lIEk5WFhfRE9UX01JTgkJICAyMDAwMAorI2RlZmluZSBJOVhYX0RPVF9NQVgJCSA0MDAwMDAKKyNkZWZpbmUgSTlYWF9WQ09fTUlOCQkxNDAwMDAwCisjZGVmaW5lIEk5WFhfVkNPX01BWAkJMjgwMDAwMAorI2RlZmluZSBJOVhYX05fTUlOCQkgICAgICAzCisjZGVmaW5lIEk5WFhfTl9NQVgJCSAgICAgIDgKKyNkZWZpbmUgSTlYWF9NX01JTgkJICAgICA3MAorI2RlZmluZSBJOVhYX01fTUFYCQkgICAgMTIwCisjZGVmaW5lIEk5WFhfTTFfTUlOCQkgICAgIDEwCisjZGVmaW5lIEk5WFhfTTFfTUFYCQkgICAgIDIwCisjZGVmaW5lIEk5WFhfTTJfTUlOCQkgICAgICA1CisjZGVmaW5lIEk5WFhfTTJfTUFYCQkgICAgICA5CisjZGVmaW5lIEk5WFhfUF9TRFZPX0RBQ19NSU4JICAgICAgNQorI2RlZmluZSBJOVhYX1BfU0RWT19EQUNfTUFYCSAgICAgODAKKyNkZWZpbmUgSTlYWF9QX0xWRFNfTUlOCQkgICAgICA3CisjZGVmaW5lIEk5WFhfUF9MVkRTX01BWAkJICAgICA5OAorI2RlZmluZSBJOVhYX1AxX01JTgkJICAgICAgMQorI2RlZmluZSBJOVhYX1AxX01BWAkJICAgICAgOAorI2RlZmluZSBJOVhYX1AyX1NEVk9fREFDX1NMT1cJCSAgICAgMTAKKyNkZWZpbmUgSTlYWF9QMl9TRFZPX0RBQ19GQVNUCQkgICAgICA1CisjZGVmaW5lIEk5WFhfUDJfU0RWT19EQUNfU0xPV19MSU1JVAkgMjAwMDAwCisjZGVmaW5lIEk5WFhfUDJfTFZEU19TTE9XCQkgICAgIDE0CisjZGVmaW5lIEk5WFhfUDJfTFZEU19GQVNUCQkgICAgICA3CisjZGVmaW5lIEk5WFhfUDJfTFZEU19TTE9XX0xJTUlUCQkgMTEyMDAwCisKKyNkZWZpbmUgSU5URUxfTElNSVRfSThYWF9EVk9fREFDICAgIDAKKyNkZWZpbmUgSU5URUxfTElNSVRfSThYWF9MVkRTCSAgICAxCisjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUMgICAyCisjZGVmaW5lIElOVEVMX0xJTUlUX0k5WFhfTFZEUwkgICAgMworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNbXSA9IHsKKyAgICB7IC8qIElOVEVMX0xJTUlUX0k4WFhfRFZPX0RBQyAqLworICAgICAgICAuZG90ID0geyAubWluID0gSThYWF9ET1RfTUlOLAkJLm1heCA9IEk4WFhfRE9UX01BWCB9LAorICAgICAgICAudmNvID0geyAubWluID0gSThYWF9WQ09fTUlOLAkJLm1heCA9IEk4WFhfVkNPX01BWCB9LAorICAgICAgICAubiAgID0geyAubWluID0gSThYWF9OX01JTiwJCS5tYXggPSBJOFhYX05fTUFYIH0sCisgICAgICAgIC5tICAgPSB7IC5taW4gPSBJOFhYX01fTUlOLAkJLm1heCA9IEk4WFhfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IEk4WFhfTTFfTUlOLAkJLm1heCA9IEk4WFhfTTFfTUFYIH0sCisgICAgICAgIC5tMiAgPSB7IC5taW4gPSBJOFhYX00yX01JTiwJCS5tYXggPSBJOFhYX00yX01BWCB9LAorICAgICAgICAucCAgID0geyAubWluID0gSThYWF9QX01JTiwJCS5tYXggPSBJOFhYX1BfTUFYIH0sCisgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOFhYX1AxX01JTiwJCS5tYXggPSBJOFhYX1AxX01BWCB9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCisJCSAucDJfc2xvdyA9IEk4WFhfUDJfU0xPVywJLnAyX2Zhc3QgPSBJOFhYX1AyX0ZBU1QgfSwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfSThYWF9MVkRTICovCisgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJOFhYX0RPVF9NSU4sCQkubWF4ID0gSThYWF9ET1RfTUFYIH0sCisgICAgICAgIC52Y28gPSB7IC5taW4gPSBJOFhYX1ZDT19NSU4sCQkubWF4ID0gSThYWF9WQ09fTUFYIH0sCisgICAgICAgIC5uICAgPSB7IC5taW4gPSBJOFhYX05fTUlOLAkJLm1heCA9IEk4WFhfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IEk4WFhfTV9NSU4sCQkubWF4ID0gSThYWF9NX01BWCB9LAorICAgICAgICAubTEgID0geyAubWluID0gSThYWF9NMV9NSU4sCQkubWF4ID0gSThYWF9NMV9NQVggfSwKKyAgICAgICAgLm0yICA9IHsgLm1pbiA9IEk4WFhfTTJfTUlOLAkJLm1heCA9IEk4WFhfTTJfTUFYIH0sCisgICAgICAgIC5wICAgPSB7IC5taW4gPSBJOFhYX1BfTUlOLAkJLm1heCA9IEk4WFhfUF9NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk4WFhfUDFfTFZEU19NSU4sCS5tYXggPSBJOFhYX1AxX0xWRFNfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKKwkJIC5wMl9zbG93ID0gSThYWF9QMl9MVkRTX1NMT1csCS5wMl9mYXN0ID0gSThYWF9QMl9MVkRTX0ZBU1QgfSwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfSTlYWF9TRFZPX0RBQyAqLworICAgICAgICAuZG90ID0geyAubWluID0gSTlYWF9ET1RfTUlOLAkJLm1heCA9IEk5WFhfRE9UX01BWCB9LAorICAgICAgICAudmNvID0geyAubWluID0gSTlYWF9WQ09fTUlOLAkJLm1heCA9IEk5WFhfVkNPX01BWCB9LAorICAgICAgICAubiAgID0geyAubWluID0gSTlYWF9OX01JTiwJCS5tYXggPSBJOVhYX05fTUFYIH0sCisgICAgICAgIC5tICAgPSB7IC5taW4gPSBJOVhYX01fTUlOLAkJLm1heCA9IEk5WFhfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IEk5WFhfTTFfTUlOLAkJLm1heCA9IEk5WFhfTTFfTUFYIH0sCisgICAgICAgIC5tMiAgPSB7IC5taW4gPSBJOVhYX00yX01JTiwJCS5tYXggPSBJOVhYX00yX01BWCB9LAorICAgICAgICAucCAgID0geyAubWluID0gSTlYWF9QX1NEVk9fREFDX01JTiwJLm1heCA9IEk5WFhfUF9TRFZPX0RBQ19NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk5WFhfUDFfTUlOLAkJLm1heCA9IEk5WFhfUDFfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfU0RWT19EQUNfU0xPV19MSU1JVCwKKwkJIC5wMl9zbG93ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfU0RWT19EQUNfRkFTVCB9LAorICAgIH0sCisgICAgeyAvKiBJTlRFTF9MSU1JVF9JOVhYX0xWRFMgKi8KKyAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVggfSwKKyAgICAgICAgLnZjbyA9IHsgLm1pbiA9IEk5WFhfVkNPX01JTiwJCS5tYXggPSBJOVhYX1ZDT19NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IEk5WFhfTl9NSU4sCQkubWF4ID0gSTlYWF9OX01BWCB9LAorICAgICAgICAubSAgID0geyAubWluID0gSTlYWF9NX01JTiwJCS5tYXggPSBJOVhYX01fTUFYIH0sCisgICAgICAgIC5tMSAgPSB7IC5taW4gPSBJOVhYX00xX01JTiwJCS5tYXggPSBJOVhYX00xX01BWCB9LAorICAgICAgICAubTIgID0geyAubWluID0gSTlYWF9NMl9NSU4sCQkubWF4ID0gSTlYWF9NMl9NQVggfSwKKyAgICAgICAgLnAgICA9IHsgLm1pbiA9IEk5WFhfUF9MVkRTX01JTiwJLm1heCA9IEk5WFhfUF9MVkRTX01BWCB9LAorICAgICAgICAucDEgID0geyAubWluID0gSTlYWF9QMV9NSU4sCQkubWF4ID0gSTlYWF9QMV9NQVggfSwKKwkvKiBUaGUgc2luZ2xlLWNoYW5uZWwgcmFuZ2UgaXMgMjUtMTEyTWh6LCBhbmQgZHVhbC1jaGFubmVsCisJICogaXMgODAtMjI0TWh6LiAgUHJlZmVyIHNpbmdsZSBjaGFubmVsIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICovCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfTFZEU19TTE9XX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX0xWRFNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX0xWRFNfRkFTVCB9LAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCAqaW50ZWxfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQ7CisKKwlpZiAoSVNfSTlYWChkZXYpKSB7CisJCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOVhYX0xWRFNdOworCQllbHNlCisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfSTlYWF9TRFZPX0RBQ107CisJfSBlbHNlIHsKKwkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQorCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k4WFhfTFZEU107CisJCWVsc2UKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOFhYX0RWT19EQUNdOworCX0KKwlyZXR1cm4gbGltaXQ7Cit9CisKKy8qKiBEZXJpdmUgdGhlIHBpeGVsIGNsb2NrIGZvciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOHh4IGNoaXBzLiAqLworCitzdGF0aWMgdm9pZCBpOHh4X2Nsb2NrKGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2NrKQoreworCWNsb2NrLT5tID0gNSAqIChjbG9jay0+bTEgKyAyKSArIChjbG9jay0+bTIgKyAyKTsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwljbG9jay0+dmNvID0gcmVmY2xrICogY2xvY2stPm0gLyAoY2xvY2stPm4gKyAyKTsKKwljbG9jay0+ZG90ID0gY2xvY2stPnZjbyAvIGNsb2NrLT5wOworfQorCisvKiogRGVyaXZlIHRoZSBwaXhlbCBjbG9jayBmb3IgdGhlIGdpdmVuIHJlZmNsayBhbmQgZGl2aXNvcnMgZm9yIDl4eCBjaGlwcy4gKi8KKworc3RhdGljIHZvaWQgaTl4eF9jbG9jayhpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKK3sKKwljbG9jay0+bSA9IDUgKiAoY2xvY2stPm0xICsgMikgKyAoY2xvY2stPm0yICsgMik7CisJY2xvY2stPnAgPSBjbG9jay0+cDEgKiBjbG9jay0+cDI7CisJY2xvY2stPnZjbyA9IHJlZmNsayAqIGNsb2NrLT5tIC8gKGNsb2NrLT5uICsgMik7CisJY2xvY2stPmRvdCA9IGNsb2NrLT52Y28gLyBjbG9jay0+cDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfY2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlZmNsaywKKwkJCWludGVsX2Nsb2NrX3QgKmNsb2NrKQoreworCWlmIChJU19JOVhYKGRldikpCisJCWk5eHhfY2xvY2sgKHJlZmNsaywgY2xvY2spOworCWVsc2UKKwkJaTh4eF9jbG9jayAocmVmY2xrLCBjbG9jayk7Cit9CisKKy8qKgorICogUmV0dXJucyB3aGV0aGVyIGFueSBvdXRwdXQgb24gdGhlIHNwZWNpZmllZCBwaXBlIGlzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZQorICovCitib29sIGludGVsX3BpcGVfaGFzX3R5cGUgKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHR5cGUpCit7CisgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKyAgICBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpsX2VudHJ5OworCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShsX2VudHJ5LCAmbW9kZV9jb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJICAgIGlmIChsX2VudHJ5LT5lbmNvZGVyICYmCisJICAgICAgICBsX2VudHJ5LT5lbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJICAgIHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChsX2VudHJ5KTsKKwkJICAgIGlmIChpbnRlbF9vdXRwdXQtPnR5cGUgPT0gdHlwZSkKKwkJCSAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNkZWZpbmUgSU5URUxQbGxJbnZhbGlkKHMpICAgeyAvKiBFcnJvckYgKHMpICovOyByZXR1cm4gZmFsc2U7IH0KKy8qKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBzZXQgb2YgZGl2aXNvcnMgYXJlIHZhbGlkIGZvciBhIGdpdmVuIHJlZmNsayB3aXRoCisgKiB0aGUgZ2l2ZW4gY29ubmVjdG9ycy4KKyAqLworCitzdGF0aWMgYm9vbCBpbnRlbF9QTExfaXNfdmFsaWQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnRlbF9jbG9ja190ICpjbG9jaykKK3sKKwljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCA9IGludGVsX2xpbWl0IChjcnRjKTsKKworCWlmIChjbG9jay0+cDEgIDwgbGltaXQtPnAxLm1pbiAgfHwgbGltaXQtPnAxLm1heCAgPCBjbG9jay0+cDEpCisJCUlOVEVMUGxsSW52YWxpZCAoInAxIG91dCBvZiByYW5nZVxuIik7CisJaWYgKGNsb2NrLT5wICAgPCBsaW1pdC0+cC5taW4gICB8fCBsaW1pdC0+cC5tYXggICA8IGNsb2NrLT5wKQorCQlJTlRFTFBsbEludmFsaWQgKCJwIG91dCBvZiByYW5nZVxuIik7CisJaWYgKGNsb2NrLT5tMiAgPCBsaW1pdC0+bTIubWluICB8fCBsaW1pdC0+bTIubWF4ICA8IGNsb2NrLT5tMikKKwkJSU5URUxQbGxJbnZhbGlkICgibTIgb3V0IG9mIHJhbmdlXG4iKTsKKwlpZiAoY2xvY2stPm0xICA8IGxpbWl0LT5tMS5taW4gIHx8IGxpbWl0LT5tMS5tYXggIDwgY2xvY2stPm0xKQorCQlJTlRFTFBsbEludmFsaWQgKCJtMSBvdXQgb2YgcmFuZ2VcbiIpOworCWlmIChjbG9jay0+bTEgPD0gY2xvY2stPm0yKQorCQlJTlRFTFBsbEludmFsaWQgKCJtMSA8PSBtMlxuIik7CisJaWYgKGNsb2NrLT5tICAgPCBsaW1pdC0+bS5taW4gICB8fCBsaW1pdC0+bS5tYXggICA8IGNsb2NrLT5tKQorCQlJTlRFTFBsbEludmFsaWQgKCJtIG91dCBvZiByYW5nZVxuIik7CisJaWYgKGNsb2NrLT5uICAgPCBsaW1pdC0+bi5taW4gICB8fCBsaW1pdC0+bi5tYXggICA8IGNsb2NrLT5uKQorCQlJTlRFTFBsbEludmFsaWQgKCJuIG91dCBvZiByYW5nZVxuIik7CisJaWYgKGNsb2NrLT52Y28gPCBsaW1pdC0+dmNvLm1pbiB8fCBsaW1pdC0+dmNvLm1heCA8IGNsb2NrLT52Y28pCisJCUlOVEVMUGxsSW52YWxpZCAoInZjbyBvdXQgb2YgcmFuZ2VcbiIpOworCS8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcgIkRvdCBjbG9jayIgZGVwZW5kaW5nIG9uIHRoZSBtdWx0aXBsaWVyLAorCSAqIGNvbm5lY3RvciwgZXRjLiwgcmF0aGVyIHRoYW4ganVzdCBhIHNpbmdsZSByYW5nZS4KKwkgKi8KKwlpZiAoY2xvY2stPmRvdCA8IGxpbWl0LT5kb3QubWluIHx8IGxpbWl0LT5kb3QubWF4IDwgY2xvY2stPmRvdCkKKwkJSU5URUxQbGxJbnZhbGlkICgiZG90IG91dCBvZiByYW5nZVxuIik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKyAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246CisgKiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCisgKi8KK3N0YXRpYyBib29sIGludGVsX2ZpbmRfYmVzdF9QTEwoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdGFyZ2V0LAorCQkJCWludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludGVsX2Nsb2NrX3QgY2xvY2s7CisJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQgPSBpbnRlbF9saW1pdChjcnRjKTsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJaWYgKElTX0k5WFgoZGV2KSAmJiBpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCSAgICAoSTkxNV9SRUFEKExWRFMpICYgTFZEU19QT1JUX0VOKSAhPSAwKSB7CisJCS8qCisJCSAqIEZvciBMVkRTLCBpZiB0aGUgcGFuZWwgaXMgb24sIGp1c3QgcmVseSBvbiBpdHMgY3VycmVudAorCQkgKiBzZXR0aW5ncyBmb3IgZHVhbC1jaGFubmVsLiAgV2UgaGF2ZW4ndCBmaWd1cmVkIG91dCBob3cgdG8KKwkJICogcmVsaWFibHkgc2V0IHVwIGRpZmZlcmVudCBzaW5nbGUvZHVhbCBjaGFubmVsIHN0YXRlLCBpZiB3ZQorCQkgKiBldmVuIGNhbi4KKwkJICovCisJCWlmICgoSTkxNV9SRUFEKExWRFMpICYgTFZEU19DTEtCX1BPV0VSX01BU0spID09CisJCSAgICBMVkRTX0NMS0JfUE9XRVJfVVApCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9mYXN0OworCQllbHNlCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9zbG93OworCX0gZWxzZSB7CisJCWlmICh0YXJnZXQgPCBsaW1pdC0+cDIuZG90X2xpbWl0KQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKKwl9CisKKwltZW1zZXQgKGJlc3RfY2xvY2ssIDAsIHNpemVvZiAoKmJlc3RfY2xvY2spKTsKKworCWZvciAoY2xvY2subTEgPSBsaW1pdC0+bTEubWluOyBjbG9jay5tMSA8PSBsaW1pdC0+bTEubWF4OyBjbG9jay5tMSsrKSB7CisJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8IGNsb2NrLm0xICYmCisJCQkgICAgIGNsb2NrLm0yIDw9IGxpbWl0LT5tMi5tYXg7IGNsb2NrLm0yKyspIHsKKwkJCWZvciAoY2xvY2subiA9IGxpbWl0LT5uLm1pbjsgY2xvY2subiA8PSBsaW1pdC0+bi5tYXg7CisJCQkgICAgIGNsb2NrLm4rKykgeworCQkJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWluOworCQkJCSAgICAgY2xvY2sucDEgPD0gbGltaXQtPnAxLm1heDsgY2xvY2sucDErKykgeworCQkJCQlpbnQgdGhpc19lcnI7CisKKwkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CisKKwkJCQkJaWYgKCFpbnRlbF9QTExfaXNfdmFsaWQoY3J0YywgJmNsb2NrKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCQkJCWVyciA9IHRoaXNfZXJyOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIChlcnIgIT0gdGFyZ2V0KTsKK30KKwordm9pZAoraW50ZWxfd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogV2FpdCBmb3IgMjBtcywgaS5lLiBvbmUgY3ljbGUgYXQgNTBoei4gKi8KKwl1ZGVsYXkoMjAwMDApOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxfcGlwZV9zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKKwkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXVuc2lnbmVkIGxvbmcgU3RhcnQsIE9mZnNldDsKKwlpbnQgZHNwYmFzZSA9IChwaXBlID09IDAgPyBEU1BBQUREUiA6IERTUEJBRERSKTsKKwlpbnQgZHNwc3VyZiA9IChwaXBlID09IDAgPyBEU1BBU1VSRiA6IERTUEJTVVJGKTsKKwlpbnQgZHNwc3RyaWRlID0gKHBpcGUgPT0gMCkgPyBEU1BBU1RSSURFIDogRFNQQlNUUklERTsKKwlpbnQgZHNwY250cl9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFDTlRSIDogRFNQQkNOVFI7CisJdTMyIGRzcGNudHIsIGFsaWdubWVudDsKKworCS8qIG5vIGZiIGJvdW5kICovCisJaWYgKCFjcnRjLT5mYikgeworCQlEUk1fREVCVUcoIk5vIEZCIGJvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpOworCW9iaiA9IGludGVsX2ZiLT5vYmo7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJc3dpdGNoIChvYmpfcHJpdi0+dGlsaW5nX21vZGUpIHsKKwljYXNlIEk5MTVfVElMSU5HX05PTkU6CisJCWFsaWdubWVudCA9IDY0ICogMTAyNDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19YOgorCQlpZiAoSVNfSTlYWChkZXYpKQorCQkJYWxpZ25tZW50ID0gMTAyNCAqIDEwMjQ7CisJCWVsc2UKKwkJCWFsaWdubWVudCA9IDUxMiAqIDEwMjQ7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJLyogRklYTUU6IElzIHRoaXMgdHJ1ZT8gKi8KKwkJRFJNX0VSUk9SKCJZIHRpbGVkIG5vdCBhbGxvd2VkIGZvciBzY2FuIG91dCBidWZmZXJzXG4iKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmIChpOTE1X2dlbV9vYmplY3RfcGluKGludGVsX2ZiLT5vYmosIGFsaWdubWVudCkpCisJCXJldHVybjsKKworCWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihpbnRlbF9mYi0+b2JqLCAxKTsKKworCVN0YXJ0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJT2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwlJOTE1X1dSSVRFKGRzcHN0cmlkZSwgY3J0Yy0+ZmItPnBpdGNoKTsKKworCWRzcGNudHIgPSBJOTE1X1JFQUQoZHNwY250cl9yZWcpOworCXN3aXRjaCAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV84QlBQOworCQlicmVhazsKKwljYXNlIDE2OgorCQlpZiAoY3J0Yy0+ZmItPmRlcHRoID09IDE1KQorCQkJZHNwY250ciB8PSBESVNQUExBTkVfMTVfMTZCUFA7CisJCWVsc2UKKwkJCWRzcGNudHIgfD0gRElTUFBMQU5FXzE2QlBQOworCQlicmVhazsKKwljYXNlIDI0OgorCWNhc2UgMzI6CisJCWRzcGNudHIgfD0gRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVua25vd24gY29sb3IgZGVwdGhcbiIpOworCQlyZXR1cm47CisJfQorCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworCisJRFJNX0RFQlVHKCJXcml0aW5nIGJhc2UgJTA4bFggJTA4bFggJWQgJWRcbiIsIFN0YXJ0LCBPZmZzZXQsIHgsIHkpOworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoZHNwYmFzZSwgT2Zmc2V0KTsKKwkJSTkxNV9SRUFEKGRzcGJhc2UpOworCQlJOTE1X1dSSVRFKGRzcHN1cmYsIFN0YXJ0KTsKKwkJSTkxNV9SRUFEKGRzcHN1cmYpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUoZHNwYmFzZSwgU3RhcnQgKyBPZmZzZXQpOworCQlJOTE1X1JFQUQoZHNwYmFzZSk7CisJfQorCisJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlpZiAob2xkX2ZiKSB7CisJCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIob2xkX2ZiKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGludGVsX2ZiLT5vYmopOworCX0KKworCWlmICghZGV2LT5wcmltYXJ5LT5tYXN0ZXIpCisJCXJldHVybjsKKworCW1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmICghbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCXJldHVybjsKKworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBpcGVBX3ggPSB4OworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUFfeSA9IHk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBpcGVCX3ggPSB4OworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUJfeSA9IHk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiQ2FuJ3QgdXBkYXRlIHBpcGUgJWQgaW4gU0FSRUFcbiIsIHBpcGUpOworCQlicmVhazsKKwl9Cit9CisKKworCisvKioKKyAqIFNldHMgdGhlIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQgcGxhbmUuCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9yIHR1cm5pbmcgdGhlIGN1cnNvciBvZmYgYW5kIGJhY2sKKyAqIG9uIGFwcHJvcHJpYXRlbHkgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSdyZSB0dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KKyAqLworc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKKwlpbnQgZHNwY250cl9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFDTlRSIDogRFNQQkNOVFI7CisJaW50IGRzcGJhc2VfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBQUREUiA6IERTUEJBRERSOworCWludCBwaXBlY29uZl9yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwl1MzIgdGVtcDsKKwlib29sIGVuYWJsZWQ7CisKKwkvKiBYWFg6IFdoZW4gb3VyIG91dHB1dHMgYXJlIGFsbCB1bmF3YXJlIG9mIERQTVMgbW9kZXMgb3RoZXIgdGhhbiBvZmYKKwkgKiBhbmQgb24sIHdlIHNob3VsZCBtYXAgdGhvc2UgbW9kZXMgdG8gRFJNX01PREVfRFBNU19PRkYgaW4gdGhlIENSVEMuCisJICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgorCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgorCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCQkvKiBFbmFibGUgdGhlIERQTEwgKi8KKwkJdGVtcCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CisJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgeworCQkJSTkxNV9XUklURShkcGxsX3JlZywgdGVtcCk7CisJCQlJOTE1X1JFQUQoZHBsbF9yZWcpOworCQkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJCQl1ZGVsYXkoMTUwKTsKKwkJCUk5MTVfV1JJVEUoZHBsbF9yZWcsIHRlbXAgfCBEUExMX1ZDT19FTkFCTEUpOworCQkJSTkxNV9SRUFEKGRwbGxfcmVnKTsKKwkJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCQkJdWRlbGF5KDE1MCk7CisJCQlJOTE1X1dSSVRFKGRwbGxfcmVnLCB0ZW1wIHwgRFBMTF9WQ09fRU5BQkxFKTsKKwkJCUk5MTVfUkVBRChkcGxsX3JlZyk7CisJCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KKwkJCXVkZWxheSgxNTApOworCQl9CisKKwkJLyogRW5hYmxlIHRoZSBwaXBlICovCisJCXRlbXAgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkKKwkJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCB0ZW1wIHwgUElQRUFDT05GX0VOQUJMRSk7CisKKwkJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCQl0ZW1wID0gSTkxNV9SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpID09IDApIHsKKwkJCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIHRlbXAgfCBESVNQTEFZX1BMQU5FX0VOQUJMRSk7CisJCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLworCQkJSTkxNV9XUklURShkc3BiYXNlX3JlZywgSTkxNV9SRUFEKGRzcGJhc2VfcmVnKSk7CisJCX0KKworCQlpbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOworCisJCS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGVuYWJsZSBpZiBpdCdzIG9uIHRoaXMgcGlwZSAqLworCQkvL2ludGVsX2NydGNfZHBtc192aWRlbyhjcnRjLCB0cnVlKTsgVE9ETworCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCS8qIEdpdmUgdGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGRpc2FibGUgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KKwkJLy9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgRkFMU0UpOyBUT0RPCisKKwkJLyogRGlzYWJsZSB0aGUgVkdBIHBsYW5lIHRoYXQgd2UgbmV2ZXIgdXNlICovCisJCUk5MTVfV1JJVEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOworCisJCS8qIERpc2FibGUgZGlzcGxheSBwbGFuZSAqLworCQl0ZW1wID0gSTkxNV9SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKKwkJCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIHRlbXAgJiB+RElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwkJCUk5MTVfV1JJVEUoZHNwYmFzZV9yZWcsIEk5MTVfUkVBRChkc3BiYXNlX3JlZykpOworCQkJSTkxNV9SRUFEKGRzcGJhc2VfcmVnKTsKKwkJfQorCisJCWlmICghSVNfSTlYWChkZXYpKSB7CisJCQkvKiBXYWl0IGZvciB2YmxhbmsgZm9yIHRoZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0ICovCisJCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKwkJfQorCisJCS8qIE5leHQsIGRpc2FibGUgZGlzcGxheSBwaXBlcyAqLworCQl0ZW1wID0gSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CisJCWlmICgodGVtcCAmIFBJUEVBQ09ORl9FTkFCTEUpICE9IDApIHsKKwkJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCB0ZW1wICYgflBJUEVBQ09ORl9FTkFCTEUpOworCQkJSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CisJCX0KKworCQkvKiBXYWl0IGZvciB2YmxhbmsgZm9yIHRoZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0LiAqLworCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworCQl0ZW1wID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRFBMTF9WQ09fRU5BQkxFKSAhPSAwKSB7CisJCQlJOTE1X1dSSVRFKGRwbGxfcmVnLCB0ZW1wICYgfkRQTExfVkNPX0VOQUJMRSk7CisJCQlJOTE1X1JFQUQoZHBsbF9yZWcpOworCQl9CisKKwkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KKwkJdWRlbGF5KDE1MCk7CisJCWJyZWFrOworCX0KKworCWlmICghZGV2LT5wcmltYXJ5LT5tYXN0ZXIpCisJCXJldHVybjsKKworCW1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmICghbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCXJldHVybjsKKworCWVuYWJsZWQgPSBjcnRjLT5lbmFibGVkICYmIG1vZGUgIT0gRFJNX01PREVfRFBNU19PRkY7CisKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5waXBlQV93ID0gZW5hYmxlZCA/IGNydGMtPm1vZGUuaGRpc3BsYXkgOiAwOworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUFfaCA9IGVuYWJsZWQgPyBjcnRjLT5tb2RlLnZkaXNwbGF5IDogMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGlwZUJfdyA9IGVuYWJsZWQgPyBjcnRjLT5tb2RlLmhkaXNwbGF5IDogMDsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBpcGVCX2ggPSBlbmFibGVkID8gY3J0Yy0+bW9kZS52ZGlzcGxheSA6IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiQ2FuJ3QgdXBkYXRlIHBpcGUgJWQgaW4gU0FSRUFcbiIsIHBpcGUpOworCQlicmVhazsKKwl9CisKKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSBtb2RlOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3ByZXBhcmUgKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfY29tbWl0IChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOworCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBNU19PTik7Cit9CisKK3ZvaWQgaW50ZWxfZW5jb2Rlcl9wcmVwYXJlIChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCS8qIGx2ZHMgaGFzIGl0cyBvd24gdmVyc2lvbiBvZiBwcmVwYXJlIHNlZSBpbnRlbF9sdmRzX3ByZXBhcmUgKi8KKwllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKK30KKwordm9pZCBpbnRlbF9lbmNvZGVyX2NvbW1pdCAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKKwkvKiBsdmRzIGhhcyBpdHMgb3duIHZlcnNpb24gb2YgY29tbWl0IHNlZSBpbnRlbF9sdmRzX2NvbW1pdCAqLworCWVuY29kZXJfZnVuY3MtPmRwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PTik7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCisKKy8qKiBSZXR1cm5zIHRoZSBjb3JlIGRpc3BsYXkgY2xvY2sgc3BlZWQgZm9yIGk4MzAgLSBpOTQ1ICovCitzdGF0aWMgaW50IGludGVsX2dldF9jb3JlX2Nsb2NrX3NwZWVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisKKwkvKiBDb3JlIGNsb2NrIHZhbHVlcyB0YWtlbiBmcm9tIHRoZSBwdWJsaXNoZWQgZGF0YXNoZWV0cy4KKwkgKiBUaGUgODMwIG1heSBnbyB1cCB0byAxNjYgTWh6LCB3aGljaCB3ZSBzaG91bGQgY2hlY2suCisJICovCisJaWYgKElTX0k5NDVHKGRldikpCisJCXJldHVybiA0MDAwMDA7CisJZWxzZSBpZiAoSVNfSTkxNUcoZGV2KSkKKwkJcmV0dXJuIDMzMzAwMDsKKwllbHNlIGlmIChJU19JOTQ1R00oZGV2KSB8fCBJU184NDVHKGRldikpCisJCXJldHVybiAyMDAwMDA7CisJZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKKwkJdTE2IGdjZmdjID0gMDsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEdDRkdDLCAmZ2NmZ2MpOworCisJCWlmIChnY2ZnYyAmIEdDX0xPV19GUkVRVUVOQ1lfRU5BQkxFKQorCQkJcmV0dXJuIDEzMzAwMDsKKwkJZWxzZSB7CisJCQlzd2l0Y2ggKGdjZmdjICYgR0NfRElTUExBWV9DTE9DS19NQVNLKSB7CisJCQljYXNlIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWjoKKwkJCQlyZXR1cm4gMzMzMDAwOworCQkJZGVmYXVsdDoKKwkJCWNhc2UgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWjoKKwkJCQlyZXR1cm4gMTkwMDAwOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChJU19JODY1RyhkZXYpKQorCQlyZXR1cm4gMjY2MDAwOworCWVsc2UgaWYgKElTX0k4NTUoZGV2KSkgeworCQl1MTYgaHBsbGNjID0gMDsKKwkJLyogQXNzdW1lIHRoYXQgdGhlIGhhcmR3YXJlIGlzIGluIHRoZSBoaWdoIHNwZWVkIHN0YXRlLiAgVGhpcworCQkgKiBzaG91bGQgYmUgdGhlIGRlZmF1bHQuCisJCSAqLworCQlzd2l0Y2ggKGhwbGxjYyAmIEdDX0NMT0NLX0NPTlRST0xfTUFTSykgeworCQljYXNlIEdDX0NMT0NLXzEzM18yMDA6CisJCWNhc2UgR0NfQ0xPQ0tfMTAwXzIwMDoKKwkJCXJldHVybiAyMDAwMDA7CisJCWNhc2UgR0NfQ0xPQ0tfMTY2XzI1MDoKKwkJCXJldHVybiAyNTAwMDA7CisJCWNhc2UgR0NfQ0xPQ0tfMTAwXzEzMzoKKwkJCXJldHVybiAxMzMwMDA7CisJCX0KKwl9IGVsc2UgLyogODUyLCA4MzAgKi8KKwkJcmV0dXJuIDEzMzAwMDsKKworCXJldHVybiAwOyAvKiBTaWxlbmNlIGdjYyB3YXJuaW5nICovCit9CisKKworLyoqCisgKiBSZXR1cm4gdGhlIHBpcGUgY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgcGFuZWwgZml0dGVyLAorICogb3IgLTEgaWYgdGhlIHBhbmVsIGZpdHRlciBpcyBub3QgcHJlc2VudCBvciBub3QgaW4gdXNlCisgKi8KK3N0YXRpYyBpbnQgaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgIHBmaXRfY29udHJvbDsKKworCS8qIGk4MzAgZG9lc24ndCBoYXZlIGEgcGFuZWwgZml0dGVyICovCisJaWYgKElTX0k4MzAoZGV2KSkKKwkJcmV0dXJuIC0xOworCisJcGZpdF9jb250cm9sID0gSTkxNV9SRUFEKFBGSVRfQ09OVFJPTCk7CisKKwkvKiBTZWUgaWYgdGhlIHBhbmVsIGZpdHRlciBpcyBpbiB1c2UgKi8KKwlpZiAoKHBmaXRfY29udHJvbCAmIFBGSVRfRU5BQkxFKSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiA5NjUgY2FuIHBsYWNlIHBhbmVsIGZpdHRlciBvbiBlaXRoZXIgcGlwZSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlyZXR1cm4gKHBmaXRfY29udHJvbCA+PiAyOSkgJiAweDM7CisKKwkvKiBvbGRlciBjaGlwcyBjYW4gb25seSB1c2UgcGlwZSAxICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLAorCQkJCWludCB4LCBpbnQgeSwKKwkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJaW50IGZwX3JlZyA9IChwaXBlID09IDApID8gRlBBMCA6IEZQQjA7CisJaW50IGRwbGxfcmVnID0gKHBpcGUgPT0gMCkgPyBEUExMX0EgOiBEUExMX0I7CisJaW50IGRwbGxfbWRfcmVnID0gKGludGVsX2NydGMtPnBpcGUgPT0gMCkgPyBEUExMX0FfTUQgOiBEUExMX0JfTUQ7CisJaW50IGRzcGNudHJfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOworCWludCBwaXBlY29uZl9yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwlpbnQgaHRvdF9yZWcgPSAocGlwZSA9PSAwKSA/IEhUT1RBTF9BIDogSFRPVEFMX0I7CisJaW50IGhibGFua19yZWcgPSAocGlwZSA9PSAwKSA/IEhCTEFOS19BIDogSEJMQU5LX0I7CisJaW50IGhzeW5jX3JlZyA9IChwaXBlID09IDApID8gSFNZTkNfQSA6IEhTWU5DX0I7CisJaW50IHZ0b3RfcmVnID0gKHBpcGUgPT0gMCkgPyBWVE9UQUxfQSA6IFZUT1RBTF9COworCWludCB2YmxhbmtfcmVnID0gKHBpcGUgPT0gMCkgPyBWQkxBTktfQSA6IFZCTEFOS19COworCWludCB2c3luY19yZWcgPSAocGlwZSA9PSAwKSA/IFZTWU5DX0EgOiBWU1lOQ19COworCWludCBkc3BzaXplX3JlZyA9IChwaXBlID09IDApID8gRFNQQVNJWkUgOiBEU1BCU0laRTsKKwlpbnQgZHNwcG9zX3JlZyA9IChwaXBlID09IDApID8gRFNQQVBPUyA6IERTUEJQT1M7CisJaW50IHBpcGVzcmNfcmVnID0gKHBpcGUgPT0gMCkgPyBQSVBFQVNSQyA6IFBJUEVCU1JDOworCWludCByZWZjbGs7CisJaW50ZWxfY2xvY2tfdCBjbG9jazsKKwl1MzIgZHBsbCA9IDAsIGZwID0gMCwgZHNwY250ciwgcGlwZWNvbmY7CisJYm9vbCBvaywgaXNfc2R2byA9IGZhbHNlLCBpc19kdm8gPSBmYWxzZTsKKwlib29sIGlzX2NydCA9IGZhbHNlLCBpc19sdmRzID0gZmFsc2UsIGlzX3R2ID0gZmFsc2U7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJZHJtX3ZibGFua19wcmVfbW9kZXNldChkZXYsIHBpcGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZtb2RlX2NvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwkJaWYgKCFjb25uZWN0b3ItPmVuY29kZXIgfHwgY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGludGVsX291dHB1dC0+dHlwZSkgeworCQljYXNlIElOVEVMX09VVFBVVF9MVkRTOgorCQkJaXNfbHZkcyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfU0RWTzoKKwkJCWlzX3Nkdm8gPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VUUFVUX0RWTzoKKwkJCWlzX2R2byA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfVFZPVVQ6CisJCQlpc190diA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfQU5BTE9HOgorCQkJaXNfY3J0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKElTX0k5WFgoZGV2KSkgeworCQlyZWZjbGsgPSA5NjAwMDsKKwl9IGVsc2UgeworCQlyZWZjbGsgPSA0ODAwMDsKKwl9CisKKwlvayA9IGludGVsX2ZpbmRfYmVzdF9QTEwoY3J0YywgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIHJlZmNsaywgJmNsb2NrKTsKKwlpZiAoIW9rKSB7CisJCURSTV9FUlJPUigiQ291bGRuJ3QgZmluZCBQTEwgc2V0dGluZ3MgZm9yIG1vZGUhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKKworCWRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKKwlpZiAoSVNfSTlYWChkZXYpKSB7CisJCWlmIChpc19sdmRzKQorCQkJZHBsbCB8PSBEUExMQl9NT0RFX0xWRFM7CisJCWVsc2UKKwkJCWRwbGwgfD0gRFBMTEJfTU9ERV9EQUNfU0VSSUFMOworCQlpZiAoaXNfc2R2bykgeworCQkJZHBsbCB8PSBEUExMX0RWT19ISUdIX1NQRUVEOworCQkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJCQlpbnQgc2R2b19waXhlbF9tdWx0aXBseSA9IGFkanVzdGVkX21vZGUtPmNsb2NrIC8gbW9kZS0+Y2xvY2s7CisJCQkJZHBsbCB8PSAoc2R2b19waXhlbF9tdWx0aXBseSAtIDEpIDw8IFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUzsKKwkJCX0KKwkJfQorCisJCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCisJCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IDE2OworCQlzd2l0Y2ggKGNsb2NrLnAyKSB7CisJCWNhc2UgNToKKwkJCWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81OworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNzsKKwkJCWJyZWFrOworCQljYXNlIDEwOgorCQkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CisJCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKElTX0k5NjVHKGRldikpCisJCQlkcGxsIHw9ICg2IDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKTsKKwl9IGVsc2UgeworCQlpZiAoaXNfbHZkcykgeworCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjbG9jay5wMSA9PSAyKQorCQkJCWRwbGwgfD0gUExMX1AxX0RJVklERV9CWV9UV087CisJCQllbHNlCisJCQkJZHBsbCB8PSAoY2xvY2sucDEgLSAyKSA8PCBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUOworCQkJaWYgKGNsb2NrLnAyID09IDQpCisJCQkJZHBsbCB8PSBQTExfUDJfRElWSURFX0JZXzQ7CisJCX0KKwl9CisKKwlpZiAoaXNfdHYpIHsKKwkJLyogWFhYOiBqdXN0IG1hdGNoaW5nIEJJT1MgZm9yIG5vdyAqLworLyoJZHBsbCB8PSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5CQzsgKi8KKwkJZHBsbCB8PSAzOworCX0KKwllbHNlCisJCWRwbGwgfD0gUExMX1JFRl9JTlBVVF9EUkVGQ0xLOworCisJLyogc2V0dXAgcGlwZWNvbmYgKi8KKwlwaXBlY29uZiA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJLyogU2V0IHVwIHRoZSBkaXNwbGF5IHBsYW5lIHJlZ2lzdGVyICovCisJZHNwY250ciA9IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7CisKKwlpZiAocGlwZSA9PSAwKQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRV9BOworCWVsc2UKKwkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJUEVfQjsKKworCWlmIChwaXBlID09IDAgJiYgIUlTX0k5NjVHKGRldikpIHsKKwkJLyogRW5hYmxlIHBpeGVsIGRvdWJsaW5nIHdoZW4gdGhlIGRvdCBjbG9jayBpcyA+IDkwJSBvZiB0aGUgKGRpc3BsYXkpCisJCSAqIGNvcmUgc3BlZWQuCisJCSAqCisJCSAqIFhYWDogTm8gZG91YmxlLXdpZGUgb24gOTE1R00gcGlwZSBCLiBJcyB0aGF0IHRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCisJCSAqIHBpcGUgPT0gMCBjaGVjaz8KKwkJICovCisJCWlmIChtb2RlLT5jbG9jayA+IGludGVsX2dldF9jb3JlX2Nsb2NrX3NwZWVkKGRldikgKiA5IC8gMTApCisJCQlwaXBlY29uZiB8PSBQSVBFQUNPTkZfRE9VQkxFX1dJREU7CisJCWVsc2UKKwkJCXBpcGVjb25mICY9IH5QSVBFQUNPTkZfRE9VQkxFX1dJREU7CisJfQorCisJZHNwY250ciB8PSBESVNQTEFZX1BMQU5FX0VOQUJMRTsKKwlwaXBlY29uZiB8PSBQSVBFQUNPTkZfRU5BQkxFOworCWRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOworCisKKwkvKiBEaXNhYmxlIHRoZSBwYW5lbCBmaXR0ZXIgaWYgaXQgd2FzIG9uIG91ciBwaXBlICovCisJaWYgKGludGVsX3BhbmVsX2ZpdHRlcl9waXBlKGRldikgPT0gcGlwZSkKKwkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIDApOworCisJRFJNX0RFQlVHKCJNb2RlIGZvciBwaXBlICVjOlxuIiwgcGlwZSA9PSAwID8gJ0EnIDogJ0InKTsKKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKG1vZGUpOworCisKKwlpZiAoZHBsbCAmIERQTExfVkNPX0VOQUJMRSkgeworCQlJOTE1X1dSSVRFKGZwX3JlZywgZnApOworCQlJOTE1X1dSSVRFKGRwbGxfcmVnLCBkcGxsICYgfkRQTExfVkNPX0VOQUJMRSk7CisJCUk5MTVfUkVBRChkcGxsX3JlZyk7CisJCXVkZWxheSgxNTApOworCX0KKworCS8qIFRoZSBMVkRTIHBpbiBwYWlyIG5lZWRzIHRvIGJlIG9uIGJlZm9yZSB0aGUgRFBMTHMgYXJlIGVuYWJsZWQuCisJICogVGhpcyBpcyBhbiBleGNlcHRpb24gdG8gdGhlIGdlbmVyYWwgcnVsZSB0aGF0IG1vZGVfc2V0IGRvZXNuJ3QgdHVybgorCSAqIHRoaW5ncyBvbi4KKwkgKi8KKwlpZiAoaXNfbHZkcykgeworCQl1MzIgbHZkcyA9IEk5MTVfUkVBRChMVkRTKTsKKworCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIHwgTFZEU19QSVBFQl9TRUxFQ1Q7CisJCS8qIFNldCB0aGUgQjAtQjMgZGF0YSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8KKwkJICogc2V0IHRoZSBEUExMcyBmb3IgZHVhbC1jaGFubmVsIG1vZGUgb3Igbm90LgorCQkgKi8KKwkJaWYgKGNsb2NrLnAyID09IDcpCisJCQlsdmRzIHw9IExWRFNfQjBCM19QT1dFUl9VUCB8IExWRFNfQ0xLQl9QT1dFUl9VUDsKKwkJZWxzZQorCQkJbHZkcyAmPSB+KExWRFNfQjBCM19QT1dFUl9VUCB8IExWRFNfQ0xLQl9QT1dFUl9VUCk7CisKKwkJLyogSXQgd291bGQgYmUgbmljZSB0byBzZXQgMjQgdnMgMTgtYml0IG1vZGUgKExWRFNfQTNfUE9XRVJfVVApCisJCSAqIGFwcHJvcHJpYXRlbHkgaGVyZSwgYnV0IHdlIG5lZWQgdG8gbG9vayBtb3JlIHRob3JvdWdobHkgaW50byBob3cKKwkJICogcGFuZWxzIGJlaGF2ZSBpbiB0aGUgdHdvIG1vZGVzLgorCQkgKi8KKworCQlJOTE1X1dSSVRFKExWRFMsIGx2ZHMpOworCQlJOTE1X1JFQUQoTFZEUyk7CisJfQorCisJSTkxNV9XUklURShmcF9yZWcsIGZwKTsKKwlJOTE1X1dSSVRFKGRwbGxfcmVnLCBkcGxsKTsKKwlJOTE1X1JFQUQoZHBsbF9yZWcpOworCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCXVkZWxheSgxNTApOworCisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJaW50IHNkdm9fcGl4ZWxfbXVsdGlwbHkgPSBhZGp1c3RlZF9tb2RlLT5jbG9jayAvIG1vZGUtPmNsb2NrOworCQlJOTE1X1dSSVRFKGRwbGxfbWRfcmVnLCAoMCA8PCBEUExMX01EX1VESV9ESVZJREVSX1NISUZUKSB8CisJCQkgICAoKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUKSk7CisJfSBlbHNlIHsKKwkJLyogd3JpdGUgaXQgYWdhaW4gLS0gdGhlIEJJT1MgZG9lcywgYWZ0ZXIgYWxsICovCisJCUk5MTVfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCX0KKwlJOTE1X1JFQUQoZHBsbF9yZWcpOworCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCXVkZWxheSgxNTApOworCisJSTkxNV9XUklURShodG90X3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSB8CisJCSAgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNikpOworCUk5MTVfV1JJVEUoaGJsYW5rX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0gMSkgfAorCQkgICAoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX2VuZCAtIDEpIDw8IDE2KSk7CisJSTkxNV9XUklURShoc3luY19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gMSkgfAorCQkgICAoKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKKwlJOTE1X1dSSVRFKHZ0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpIHwKKwkJICAgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7CisJSTkxNV9XUklURSh2YmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSAxKSB8CisJCSAgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKKwlJOTE1X1dSSVRFKHZzeW5jX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSAxKSB8CisJCSAgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSAxKSA8PCAxNikpOworCS8qIHBpcGVzcmMgYW5kIGRzcHNpemUgY29udHJvbCB0aGUgc2l6ZSB0aGF0IGlzIHNjYWxlZCBmcm9tLCB3aGljaCBzaG91bGQKKwkgKiBhbHdheXMgYmUgdGhlIHVzZXIncyByZXF1ZXN0ZWQgc2l6ZS4KKwkgKi8KKwlJOTE1X1dSSVRFKGRzcHNpemVfcmVnLCAoKG1vZGUtPnZkaXNwbGF5IC0gMSkgPDwgMTYpIHwgKG1vZGUtPmhkaXNwbGF5IC0gMSkpOworCUk5MTVfV1JJVEUoZHNwcG9zX3JlZywgMCk7CisJSTkxNV9XUklURShwaXBlc3JjX3JlZywgKChtb2RlLT5oZGlzcGxheSAtIDEpIDw8IDE2KSB8IChtb2RlLT52ZGlzcGxheSAtIDEpKTsKKwlJOTE1X1dSSVRFKHBpcGVjb25mX3JlZywgcGlwZWNvbmYpOworCUk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKKworCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCisJaW50ZWxfcGlwZV9zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOworCisJZHJtX3ZibGFua19wb3N0X21vZGVzZXQoZGV2LCBwaXBlKTsKK30KKworLyoqIExvYWRzIHRoZSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRoZSBDUlRDIHdpdGggdGhlIHByZXBhcmVkIHZhbHVlcyAqLwordm9pZCBpbnRlbF9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCWludCBwYWxyZWcgPSAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQjsKKwlpbnQgaTsKKworCS8qIFRoZSBjbG9ja3MgaGF2ZSB0byBiZSBvbiB0byBsb2FkIHRoZSBwYWxldHRlLiAqLworCWlmICghY3J0Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCUk5MTVfV1JJVEUocGFscmVnICsgNCAqIGksCisJCQkgICAoaW50ZWxfY3J0Yy0+bHV0X3JbaV0gPDwgMTYpIHwKKwkJCSAgIChpbnRlbF9jcnRjLT5sdXRfZ1tpXSA8PCA4KSB8CisJCQkgICBpbnRlbF9jcnRjLT5sdXRfYltpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGludGVsX2NydGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSB1aW50MzJfdCBoYW5kbGUsCisJCQkJIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJdWludDMyX3QgY29udHJvbCA9IChwaXBlID09IDApID8gQ1VSQUNOVFIgOiBDVVJCQ05UUjsKKwl1aW50MzJfdCBiYXNlID0gKHBpcGUgPT0gMCkgPyBDVVJBQkFTRSA6IENVUkJCQVNFOworCXVpbnQzMl90IHRlbXA7CisJc2l6ZV90IGFkZHI7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KKwlpZiAoIWhhbmRsZSkgeworCQlEUk1fREVCVUcoImN1cnNvciBvZmZcbiIpOworCQkvKiB0dXJuIG9mIHRoZSBjdXJzb3IgKi8KKwkJdGVtcCA9IDA7CisJCXRlbXAgfD0gQ1VSU09SX01PREVfRElTQUJMRTsKKworCQlJOTE1X1dSSVRFKGNvbnRyb2wsIHRlbXApOworCQlJOTE1X1dSSVRFKGJhc2UsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IDY0eDY0IGN1cnNvcnMgKi8KKwlpZiAod2lkdGggIT0gNjQgfHwgaGVpZ2h0ICE9IDY0KSB7CisJCURSTV9FUlJPUigid2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCA2NHg2NCBjdXJzb3JzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm8gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFibykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlvYmpfcHJpdiA9IGJvLT5kcml2ZXJfcHJpdmF0ZTsKKworCWlmIChiby0+c2l6ZSA8IHdpZHRoICogaGVpZ2h0ICogNCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBpcyB0byBzbWFsbFxuIik7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGJvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKKwkJYWRkciA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJfSBlbHNlIHsKKwkJYWRkciA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCX0KKworCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gYWRkcjsKKwl0ZW1wID0gMDsKKwkvKiBzZXQgdGhlIHBpcGUgZm9yIHRoZSBjdXJzb3IgKi8KKwl0ZW1wIHw9IChwaXBlIDw8IDI4KTsKKwl0ZW1wIHw9IENVUlNPUl9NT0RFXzY0X0FSR0JfQVggfCBNQ1VSU09SX0dBTU1BX0VOQUJMRTsKKworCUk5MTVfV1JJVEUoY29udHJvbCwgdGVtcCk7CisJSTkxNV9XUklURShiYXNlLCBhZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVsX2NydGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CisJdWludDMyX3QgdGVtcCA9IDA7CisJdWludDMyX3QgYWRkZXI7CisKKwlpZiAoeCA8IDApIHsKKwkJdGVtcCB8PSAoQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9YX1NISUZUKTsKKwkJeCA9IC14OworCX0KKwlpZiAoeSA8IDApIHsKKwkJdGVtcCB8PSAoQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9ZX1NISUZUKTsKKwkJeSA9IC15OworCX0KKworCXRlbXAgfD0gKCh4ICYgQ1VSU09SX1BPU19NQVNLKSA8PCBDVVJTT1JfWF9TSElGVCk7CisJdGVtcCB8PSAoKHkgJiBDVVJTT1JfUE9TX01BU0spIDw8IENVUlNPUl9ZX1NISUZUKTsKKworCWFkZGVyID0gaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHI7CisJSTkxNV9XUklURSgocGlwZSA9PSAwKSA/IENVUkFQT1MgOiBDVVJCUE9TLCB0ZW1wKTsKKwlJOTE1X1dSSVRFKChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRSwgYWRkZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBTZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgUmFuZFIgKi8KK3ZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCisJCQkJIHUxNiBibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJaW50ZWxfY3J0Yy0+bHV0X3JbcmVnbm9dID0gcmVkID4+IDg7CisJaW50ZWxfY3J0Yy0+bHV0X2dbcmVnbm9dID0gZ3JlZW4gPj4gODsKKwlpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDg7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkJIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IGk7CisKKwlpZiAoc2l6ZSAhPSAyNTYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpbnRlbF9jcnRjLT5sdXRfcltpXSA9IHJlZFtpXSA+PiA4OworCQlpbnRlbF9jcnRjLT5sdXRfZ1tpXSA9IGdyZWVuW2ldID4+IDg7CisJCWludGVsX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA4OworCX0KKworCWludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7Cit9CisKKy8qKgorICogR2V0IGEgcGlwZSB3aXRoIGEgc2ltcGxlIG1vZGUgc2V0IG9uIGl0IGZvciBkb2luZyBsb2FkLWJhc2VkIG1vbml0b3IKKyAqIGRldGVjdGlvbi4KKyAqCisgKiBJdCB3aWxsIGJlIHVwIHRvIHRoZSBsb2FkLWRldGVjdCBjb2RlIHRvIGFkanVzdCB0aGUgcGlwZSBhcyBhcHByb3ByaWF0ZSBmb3IKKyAqIGl0cyByZXF1aXJlbWVudHMuICBUaGUgcGlwZSB3aWxsIGJlIGNvbm5lY3RlZCB0byBubyBvdGhlciBvdXRwdXRzLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGNvZGUgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlcmUgaXMgYSBwaXBlIHdpdGggbm8gb3V0cHV0cworICogY29uZmlndXJlZCBmb3IgaXQuICBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBjaG9vc2UgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQorICogc29tZSBvdXRwdXRzIHRvIGZyZWUgdXAgYSBwaXBlIGZvciBpdHMgdXNlLgorICoKKyAqIFxyZXR1cm4gY3J0Yywgb3IgTlVMTCBpZiBubyBwaXBlcyBhcmUgYXZhaWxhYmxlLgorICovCisKKy8qIFZFU0EgNjQweDQ4MHg3Mkh6IG1vZGUgdG8gc2V0IG9uIHRoZSBwaXBlICovCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbG9hZF9kZXRlY3RfbW9kZSA9IHsKKwlEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfREVGQVVMVCwgMzE1MDAsIDY0MCwgNjY0LAorCQkgNzA0LCA4MzIsIDAsIDQ4MCwgNDg5LCA0OTEsIDUyMCwgMCwgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQyksCit9OworCitzdHJ1Y3QgZHJtX2NydGMgKmludGVsX2dldF9sb2FkX2RldGVjdF9waXBlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkgICAgaW50ICpkcG1zX21vZGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisJc3RydWN0IGRybV9jcnRjICpwb3NzaWJsZV9jcnRjOworCXN0cnVjdCBkcm1fY3J0YyAqc3VwcG9ydGVkX2NydGMgPU5VTEw7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmludGVsX291dHB1dC0+ZW5jOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IE5VTEw7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jczsKKwlpbnQgaSA9IC0xOworCisJLyoKKwkgKiBBbGdvcml0aG0gZ2V0cyBhIGxpdHRsZSBtZXNzeToKKwkgKiAgIC0gaWYgdGhlIGNvbm5lY3RvciBhbHJlYWR5IGhhcyBhbiBhc3NpZ25lZCBjcnRjLCB1c2UgaXQgKGJ1dCBtYWtlCisJICogICAgIHN1cmUgaXQncyBvbiBmaXJzdCkKKwkgKiAgIC0gdHJ5IHRvIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBjcnRjIHRoYXQgY2FuIGRyaXZlIHRoaXMgY29ubmVjdG9yLAorCSAqICAgICBhbmQgdXNlIHRoYXQgaWYgd2UgZmluZCBvbmUKKwkgKiAgIC0gaWYgdGhlcmUgYXJlIG5vIHVudXNlZCBjcnRjcyBhdmFpbGFibGUsIHRyeSB0byB1c2UgdGhlIGZpcnN0CisJICogICAgIG9uZSB3ZSBmb3VuZCB0aGF0IHN1cHBvcnRzIHRoZSBjb25uZWN0b3IKKwkgKi8KKworCS8qIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBDUlRDIGZvciB0aGlzIGNvbm5lY3RvciAqLworCWlmIChlbmNvZGVyLT5jcnRjKSB7CisJCWNydGMgPSBlbmNvZGVyLT5jcnRjOworCQkvKiBNYWtlIHN1cmUgdGhlIGNydGMgYW5kIGNvbm5lY3RvciBhcmUgcnVubmluZyAqLworCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwkJKmRwbXNfbW9kZSA9IGludGVsX2NydGMtPmRwbXNfbW9kZTsKKwkJaWYgKGludGVsX2NydGMtPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCQljcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworCQkJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKKwkJfQorCQlyZXR1cm4gY3J0YzsKKwl9CisKKwkvKiBGaW5kIGFuIHVudXNlZCBvbmUgKGlmIHBvc3NpYmxlKSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zc2libGVfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCWkrKzsKKwkJaWYgKCEoZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwb3NzaWJsZV9jcnRjLT5lbmFibGVkKSB7CisJCQljcnRjID0gcG9zc2libGVfY3J0YzsKKwkJCWJyZWFrOworCQl9CisJCWlmICghc3VwcG9ydGVkX2NydGMpCisJCQlzdXBwb3J0ZWRfY3J0YyA9IHBvc3NpYmxlX2NydGM7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkaWRuJ3QgZmluZCBhbiB1bnVzZWQgQ1JUQywgZG9uJ3QgdXNlIGFueS4KKwkgKi8KKwlpZiAoIWNydGMpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZW5jb2Rlci0+Y3J0YyA9IGNydGM7CisJaW50ZWxfb3V0cHV0LT5sb2FkX2RldGVjdF90ZW1wID0gdHJ1ZTsKKworCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCSpkcG1zX21vZGUgPSBpbnRlbF9jcnRjLT5kcG1zX21vZGU7CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJaWYgKCFtb2RlKQorCQkJbW9kZSA9ICZsb2FkX2RldGVjdF9tb2RlOworCQlkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoY3J0YywgbW9kZSwgMCwgMCwgY3J0Yy0+ZmIpOworCX0gZWxzZSB7CisJCWlmIChpbnRlbF9jcnRjLT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikgeworCQkJY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOworCQkJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09OKTsKKwkJfQorCisJCS8qIEFkZCB0aGlzIGNvbm5lY3RvciB0byB0aGUgY3J0YyAqLworCQllbmNvZGVyX2Z1bmNzLT5tb2RlX3NldChlbmNvZGVyLCAmY3J0Yy0+bW9kZSwgJmNydGMtPm1vZGUpOworCQllbmNvZGVyX2Z1bmNzLT5jb21taXQoZW5jb2Rlcik7CisJfQorCS8qIGxldCB0aGUgY29ubmVjdG9yIGdldCB0aHJvdWdoIG9uZSBmdWxsIGN5Y2xlIGJlZm9yZSB0ZXN0aW5nICovCisJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlyZXR1cm4gY3J0YzsKK30KKwordm9pZCBpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LCBpbnQgZHBtc19tb2RlKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKworCWlmIChpbnRlbF9vdXRwdXQtPmxvYWRfZGV0ZWN0X3RlbXApIHsKKwkJZW5jb2Rlci0+Y3J0YyA9IE5VTEw7CisJCWludGVsX291dHB1dC0+bG9hZF9kZXRlY3RfdGVtcCA9IGZhbHNlOworCQljcnRjLT5lbmFibGVkID0gZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKTsKKwkJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZGV2KTsKKwl9CisKKwkvKiBTd2l0Y2ggY3J0YyBhbmQgb3V0cHV0IGJhY2sgb2ZmIGlmIG5lY2Vzc2FyeSAqLworCWlmIChjcnRjLT5lbmFibGVkICYmIGRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKSB7CisJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpCisJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIGRwbXNfbW9kZSk7CisJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgZHBtc19tb2RlKTsKKwl9Cit9CisKKy8qIFJldHVybnMgdGhlIGNsb2NrIG9mIHRoZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBtb2RlIG9mIHRoZSBnaXZlbiBwaXBlLiAqLworc3RhdGljIGludCBpbnRlbF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXUzMiBkcGxsID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9CKTsKKwl1MzIgZnA7CisJaW50ZWxfY2xvY2tfdCBjbG9jazsKKworCWlmICgoZHBsbCAmIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMSkgPT0gMCkKKwkJZnAgPSBJOTE1X1JFQUQoKHBpcGUgPT0gMCkgPyBGUEEwIDogRlBCMCk7CisJZWxzZQorCQlmcCA9IEk5MTVfUkVBRCgocGlwZSA9PSAwKSA/IEZQQTEgOiBGUEIxKTsKKworCWNsb2NrLm0xID0gKGZwICYgRlBfTTFfRElWX01BU0spID4+IEZQX00xX0RJVl9TSElGVDsKKwljbG9jay5tMiA9IChmcCAmIEZQX00yX0RJVl9NQVNLKSA+PiBGUF9NMl9ESVZfU0hJRlQ7CisJY2xvY2subiA9IChmcCAmIEZQX05fRElWX01BU0spID4+IEZQX05fRElWX1NISUZUOworCWlmIChJU19JOVhYKGRldikpIHsKKwkJY2xvY2sucDEgPSBmZnMoKGRwbGwgJiBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0spID4+CisJCQkgICAgICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVCk7CisKKwkJc3dpdGNoIChkcGxsICYgRFBMTF9NT0RFX01BU0spIHsKKwkJY2FzZSBEUExMQl9NT0RFX0RBQ19TRVJJQUw6CisJCQljbG9jay5wMiA9IGRwbGwgJiBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUgPworCQkJCTUgOiAxMDsKKwkJCWJyZWFrOworCQljYXNlIERQTExCX01PREVfTFZEUzoKKwkJCWNsb2NrLnAyID0gZHBsbCAmIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzcgPworCQkJCTcgOiAxNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0RFQlVHKCJVbmtub3duIERQTEwgbW9kZSAlMDh4IGluIHByb2dyYW1tZWQgIgorCQkJCSAgIm1vZGVcbiIsIChpbnQpKGRwbGwgJiBEUExMX01PREVfTUFTSykpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBYWFg6IEhhbmRsZSB0aGUgMTAwTWh6IHJlZmNsayAqLworCQlpOXh4X2Nsb2NrKDk2MDAwLCAmY2xvY2spOworCX0gZWxzZSB7CisJCWJvb2wgaXNfbHZkcyA9IChwaXBlID09IDEpICYmIChJOTE1X1JFQUQoTFZEUykgJiBMVkRTX1BPUlRfRU4pOworCisJCWlmIChpc19sdmRzKSB7CisJCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwX0xWRFMpID4+CisJCQkJICAgICAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQpOworCQkJY2xvY2sucDIgPSAxNDsKKworCQkJaWYgKChkcGxsICYgUExMX1JFRl9JTlBVVF9NQVNLKSA9PQorCQkJICAgIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4pIHsKKwkJCQkvKiBYWFg6IG1pZ2h0IG5vdCBiZSA2Nk1IeiAqLworCQkJCWk4eHhfY2xvY2soNjYwMDAsICZjbG9jayk7CisJCQl9IGVsc2UKKwkJCQlpOHh4X2Nsb2NrKDQ4MDAwLCAmY2xvY2spOworCQl9IGVsc2UgeworCQkJaWYgKGRwbGwgJiBQTExfUDFfRElWSURFX0JZX1RXTykKKwkJCQljbG9jay5wMSA9IDI7CisJCQllbHNlIHsKKwkJCQljbG9jay5wMSA9ICgoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwKSA+PgorCQkJCQkgICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVCkgKyAyOworCQkJfQorCQkJaWYgKGRwbGwgJiBQTExfUDJfRElWSURFX0JZXzQpCisJCQkJY2xvY2sucDIgPSA0OworCQkJZWxzZQorCQkJCWNsb2NrLnAyID0gMjsKKworCQkJaTh4eF9jbG9jayg0ODAwMCwgJmNsb2NrKTsKKwkJfQorCX0KKworCS8qIFhYWDogSXQgd291bGQgYmUgbmljZSB0byB2YWxpZGF0ZSB0aGUgY2xvY2tzLCBidXQgd2UgY2FuJ3QgcmV1c2UKKwkgKiBpODMwUGxsSXNWYWxpZCgpIGJlY2F1c2UgaXQgcmVsaWVzIG9uIHRoZSB4Zjg2X2NvbmZpZyBjb25uZWN0b3IKKwkgKiBjb25maWd1cmF0aW9uIGJlaW5nIGFjY3VyYXRlLCB3aGljaCBpdCBpc24ndCBuZWNlc3NhcmlseS4KKwkgKi8KKworCXJldHVybiBjbG9jay5kb3Q7Cit9CisKKy8qKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBtb2RlIG9mIHRoZSBnaXZlbiBwaXBlLiAqLworc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmludGVsX2NydGNfbW9kZV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWludCBodG90ID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gSFRPVEFMX0EgOiBIVE9UQUxfQik7CisJaW50IGhzeW5jID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gSFNZTkNfQSA6IEhTWU5DX0IpOworCWludCB2dG90ID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gVlRPVEFMX0EgOiBWVE9UQUxfQik7CisJaW50IHZzeW5jID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gVlNZTkNfQSA6IFZTWU5DX0IpOworCisJbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCW1vZGUtPmNsb2NrID0gaW50ZWxfY3J0Y19jbG9ja19nZXQoZGV2LCBjcnRjKTsKKwltb2RlLT5oZGlzcGxheSA9IChodG90ICYgMHhmZmZmKSArIDE7CisJbW9kZS0+aHRvdGFsID0gKChodG90ICYgMHhmZmZmMDAwMCkgPj4gMTYpICsgMTsKKwltb2RlLT5oc3luY19zdGFydCA9IChoc3luYyAmIDB4ZmZmZikgKyAxOworCW1vZGUtPmhzeW5jX2VuZCA9ICgoaHN5bmMgJiAweGZmZmYwMDAwKSA+PiAxNikgKyAxOworCW1vZGUtPnZkaXNwbGF5ID0gKHZ0b3QgJiAweGZmZmYpICsgMTsKKwltb2RlLT52dG90YWwgPSAoKHZ0b3QgJiAweGZmZmYwMDAwKSA+PiAxNikgKyAxOworCW1vZGUtPnZzeW5jX3N0YXJ0ID0gKHZzeW5jICYgMHhmZmZmKSArIDE7CisJbW9kZS0+dnN5bmNfZW5kID0gKCh2c3luYyAmIDB4ZmZmZjAwMDApID4+IDE2KSArIDE7CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKwlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgMCk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworCWtmcmVlKGludGVsX2NydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCisJLnByZXBhcmUgPSBpbnRlbF9jcnRjX3ByZXBhcmUsCisJLmNvbW1pdCA9IGludGVsX2NydGNfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0geworCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LAorCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCit9OworCisKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKKwlpbnQgaTsKKworCWludGVsX2NydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfY3J0YykgKyAoSU5URUxGQl9DT05OX0xJTUlUICogc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICopKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGludGVsX2NydGMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NydGNfaW5pdChkZXYsICZpbnRlbF9jcnRjLT5iYXNlLCAmaW50ZWxfY3J0Y19mdW5jcyk7CisKKwlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKCZpbnRlbF9jcnRjLT5iYXNlLCAyNTYpOworCWludGVsX2NydGMtPnBpcGUgPSBwaXBlOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpbnRlbF9jcnRjLT5sdXRfcltpXSA9IGk7CisJCWludGVsX2NydGMtPmx1dF9nW2ldID0gaTsKKwkJaW50ZWxfY3J0Yy0+bHV0X2JbaV0gPSBpOworCX0KKworCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gMDsKKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZpbnRlbF9jcnRjLT5iYXNlLCAmaW50ZWxfaGVscGVyX2Z1bmNzKTsKKworCWludGVsX2NydGMtPm1vZGVfc2V0LmNydGMgPSAmaW50ZWxfY3J0Yy0+YmFzZTsKKwlpbnRlbF9jcnRjLT5tb2RlX3NldC5jb25uZWN0b3JzID0gKHN0cnVjdCBkcm1fY29ubmVjdG9yICoqKShpbnRlbF9jcnRjICsgMSk7CisJaW50ZWxfY3J0Yy0+bW9kZV9zZXQubnVtX2Nvbm5lY3RvcnMgPSAwOworCisJaWYgKGk5MTVfZmJwZXJjcnRjKSB7CisKKworCisJfQorfQorCitzdHJ1Y3QgZHJtX2NydGMgKmludGVsX2dldF9jcnRjX2Zyb21fcGlwZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCQlpZiAoaW50ZWxfY3J0Yy0+cGlwZSA9PSBwaXBlKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBjcnRjOworfQorCitzdGF0aWMgaW50IGludGVsX2Nvbm5lY3Rvcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHR5cGVfbWFzaykKK3sKKwlpbnQgaW5kZXhfbWFzayA9IDA7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgZW50cnkgPSAwOworCisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwkJaWYgKHR5cGVfbWFzayAmICgxIDw8IGludGVsX291dHB1dC0+dHlwZSkpCisJCQlpbmRleF9tYXNrIHw9ICgxIDw8IGVudHJ5KTsKKwkJZW50cnkrKzsKKwl9CisJcmV0dXJuIGluZGV4X21hc2s7Cit9CisKKworc3RhdGljIHZvaWQgaW50ZWxfc2V0dXBfb3V0cHV0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlpbnRlbF9jcnRfaW5pdChkZXYpOworCisJLyogU2V0IHVwIGludGVncmF0ZWQgTFZEUyAqLworCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQorCQlpbnRlbF9sdmRzX2luaXQoZGV2KTsKKworCWlmIChJU19JOVhYKGRldikpIHsKKwkJaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOworCQlpbnRlbF9zZHZvX2luaXQoZGV2LCBTRFZPQyk7CisJfSBlbHNlCisJCWludGVsX2R2b19pbml0KGRldik7CisKKwlpZiAoSVNfSTlYWChkZXYpICYmICFJU19JOTE1RyhkZXYpKQorCQlpbnRlbF90dl9pbml0KGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwkJaW50IGNydGNfbWFzayA9IDAsIGNsb25lX21hc2sgPSAwOworCisJCS8qIHZhbGlkIGNydGNzICovCisJCXN3aXRjaChpbnRlbF9vdXRwdXQtPnR5cGUpIHsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfRFZPOgorCQljYXNlIElOVEVMX09VVFBVVF9TRFZPOgorCQkJY3J0Y19tYXNrID0gKCgxIDw8IDApfAorCQkJCSAgICAgKDEgPDwgMSkpOworCQkJY2xvbmVfbWFzayA9ICgoMSA8PCBJTlRFTF9PVVRQVVRfQU5BTE9HKSB8CisJCQkJICAgICAgKDEgPDwgSU5URUxfT1VUUFVUX0RWTykgfAorCQkJCSAgICAgICgxIDw8IElOVEVMX09VVFBVVF9TRFZPKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfQU5BTE9HOgorCQkJY3J0Y19tYXNrID0gKCgxIDw8IDApfAorCQkJCSAgICAgKDEgPDwgMSkpOworCQkJY2xvbmVfbWFzayA9ICgoMSA8PCBJTlRFTF9PVVRQVVRfQU5BTE9HKSB8CisJCQkJICAgICAgKDEgPDwgSU5URUxfT1VUUFVUX0RWTykgfAorCQkJCSAgICAgICgxIDw8IElOVEVMX09VVFBVVF9TRFZPKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfTFZEUzoKKwkJCWNydGNfbWFzayA9ICgxIDw8IDEpOworCQkJY2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX09VVFBVVF9MVkRTKTsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX09VVFBVVF9UVk9VVDoKKwkJCWNydGNfbWFzayA9ICgoMSA8PCAwKSB8CisJCQkJICAgICAoMSA8PCAxKSk7CisJCQljbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfT1VUUFVUX1RWT1VUKTsKKwkJCWJyZWFrOworCQl9CisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gY3J0Y19tYXNrOworCQllbmNvZGVyLT5wb3NzaWJsZV9jbG9uZXMgPSBpbnRlbF9jb25uZWN0b3JfY2xvbmVzKGRldiwgY2xvbmVfbWFzayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmItPmRldjsKKworCWlmIChmYi0+ZmJkZXYpCisJCWludGVsZmJfcmVtb3ZlKGRldiwgZmIpOworCisJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZmIpOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShpbnRlbF9mYi0+b2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWtmcmVlKGludGVsX2ZiKTsKK30KKworc3RhdGljIGludCBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJCXVuc2lnbmVkIGludCAqaGFuZGxlKQoreworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmplY3QgPSBpbnRlbF9mYi0+b2JqOworCisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIG9iamVjdCwgaGFuZGxlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgaW50ZWxfZmJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3ksCisJLmNyZWF0ZV9oYW5kbGUgPSBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUsCit9OworCitpbnQgaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKm1vZGVfY21kLAorCQkJICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmIsCisJCQkgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJaW50IHJldDsKKworCWludGVsX2ZiID0ga3phbGxvYyhzaXplb2YoKmludGVsX2ZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9mYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZpbnRlbF9mYi0+YmFzZSwgJmludGVsX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZnJhbWVidWZmZXIgaW5pdCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZpbnRlbF9mYi0+YmFzZSwgbW9kZV9jbWQpOworCisJaW50ZWxfZmItPm9iaiA9IG9iajsKKworCSpmYiA9ICZpbnRlbF9mYi0+YmFzZTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKK2ludGVsX3VzZXJfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlscCwgbW9kZV9jbWQtPmhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgbW9kZV9jbWQsICZmYiwgb2JqKTsKKwlpZiAocmV0KSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmYjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgaW50ZWxfbW9kZV9mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gaW50ZWxfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGUsCisJLmZiX2NoYW5nZWQgPSBpbnRlbGZiX3Byb2JlLAorfTsKKwordm9pZCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgbnVtX3BpcGU7CisJaW50IGk7CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOworCisJZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOworCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7CisKKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gKHZvaWQgKikmaW50ZWxfbW9kZV9mdW5jczsKKworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gODE5MjsKKwkJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gODE5MjsKKwl9IGVsc2UgeworCQlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDIwNDg7CisJCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDIwNDg7CisJfQorCisJLyogc2V0IG1lbW9yeSBiYXNlICovCisJaWYgKElTX0k5WFgoZGV2KSkKKwkJZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMik7CisJZWxzZQorCQlkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKTsKKworCWlmIChJU19NT0JJTEUoZGV2KSB8fCBJU19JOVhYKGRldikpCisJCW51bV9waXBlID0gMjsKKwllbHNlCisJCW51bV9waXBlID0gMTsKKwlEUk1fREVCVUcoIiVkIGRpc3BsYXkgcGlwZSVzIGF2YWlsYWJsZS5cbiIsCisJCSAgbnVtX3BpcGUsIG51bV9waXBlID4gMSA/ICJzIiA6ICIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZTsgaSsrKSB7CisJCWludGVsX2NydGNfaW5pdChkZXYsIGkpOworCX0KKworCWludGVsX3NldHVwX291dHB1dHMoZGV2KTsKK30KKwordm9pZCBpbnRlbF9tb2Rlc2V0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOworfQorCisKKy8qIGN1cnJlbnQgaW50ZWwgZHJpdmVyIGRvZXNuJ3QgdGFrZSBhZHZhbnRhZ2Ugb2YgZW5jb2RlcnMKKyAgIGFsd2F5cyBnaXZlIGJhY2sgdGhlIGVuY29kZXIgZm9yIHRoZSBjb25uZWN0b3IKKyovCitzdHJ1Y3QgZHJtX2VuY29kZXIgKmludGVsX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCisJcmV0dXJuICZpbnRlbF9vdXRwdXQtPmVuYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3ZWRkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0lOVEVMX0RSVl9IX18KKyNkZWZpbmUgX19JTlRFTF9EUlZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCisvKgorICogRGlzcGxheSByZWxhdGVkIHN0dWZmCisgKi8KKworLyogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgYW4gSXh4eCBEVk8gKi8KKy8qIFRoZSBpODMwLT5pODY1IHVzZSBtdWx0aXBsZSBEVk9zIHdpdGggbXVsdGlwbGUgaTJjcyAqLworLyogdGhlIGk5MTUsIGk5NDUgaGF2ZSBhIHNpbmdsZSBzRFZPIGkyYyBidXMgLSB3aGljaCBpcyBkaWZmZXJlbnQgKi8KKyNkZWZpbmUgTUFYX09VVFBVVFMgNgorLyogbWF4aW11bSBjb25uZWN0b3JzIHBlciBjcnRjcyBpbiB0aGUgbW9kZSBzZXQgKi8KKyNkZWZpbmUgSU5URUxGQl9DT05OX0xJTUlUIDQKKworI2RlZmluZSBJTlRFTF9JMkNfQlVTX0RWTyAxCisjZGVmaW5lIElOVEVMX0kyQ19CVVNfU0RWTyAyCisKKy8qIHRoZXNlIGFyZSBvdXRwdXRzIGZyb20gdGhlIGNoaXAgLSBpbnRlZ3JhdGVkIG9ubHkKKyAgIGV4dGVybmFsIGNoaXBzIGFyZSB2aWEgRFZPIG9yIFNEVk8gb3V0cHV0ICovCisjZGVmaW5lIElOVEVMX09VVFBVVF9VTlVTRUQgMAorI2RlZmluZSBJTlRFTF9PVVRQVVRfQU5BTE9HIDEKKyNkZWZpbmUgSU5URUxfT1VUUFVUX0RWTyAyCisjZGVmaW5lIElOVEVMX09VVFBVVF9TRFZPIDMKKyNkZWZpbmUgSU5URUxfT1VUUFVUX0xWRFMgNAorI2RlZmluZSBJTlRFTF9PVVRQVVRfVFZPVVQgNQorCisjZGVmaW5lIElOVEVMX0RWT19DSElQX05PTkUgMAorI2RlZmluZSBJTlRFTF9EVk9fQ0hJUF9MVkRTIDEKKyNkZWZpbmUgSU5URUxfRFZPX0NISVBfVE1EUyAyCisjZGVmaW5lIElOVEVMX0RWT19DSElQX1RWT1VUIDQKKworc3RydWN0IGludGVsX2kyY19jaGFuIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsgLyogZm9yIGdldHRpbmcgYXQgZGV2LiBwcml2YXRlIChtbWlvIGV0Yy4pICovCisJdTMyIHJlZzsgLyogR1BJTyByZWcgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnbzsKKyAgICAgICAgdTggc2xhdmVfYWRkcjsKK307CisKK3N0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworfTsKKworCitzdHJ1Y3QgaW50ZWxfb3V0cHV0IHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOworCisJc3RydWN0IGRybV9lbmNvZGVyIGVuYzsKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY19idXM7IC8qIGZvciBjb250cm9sIGZ1bmN0aW9ucyAqLworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqZGRjX2J1czsgLyogZm9yIEREQyBvbmx5IHN0dWZmICovCisJYm9vbCBsb2FkX2RldGVjdF90ZW1wOworCXZvaWQgKmRldl9wcml2OworfTsKKworc3RydWN0IGludGVsX2NydGMgeworCXN0cnVjdCBkcm1fY3J0YyBiYXNlOworCWludCBwaXBlOworCWludCBwbGFuZTsKKwl1aW50MzJfdCBjdXJzb3JfYWRkcjsKKwl1OCBsdXRfclsyNTZdLCBsdXRfZ1syNTZdLCBsdXRfYlsyNTZdOworCWludCBkcG1zX21vZGU7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYmRldl9mYjsKKwkvKiBhIG1vZGVfc2V0IGZvciBmYmRldiB1c2VycyBvbiB0aGlzIGNydGMgKi8KKwlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OworfTsKKworI2RlZmluZSB0b19pbnRlbF9jcnRjKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfY3J0YywgYmFzZSkKKyNkZWZpbmUgdG9faW50ZWxfb3V0cHV0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfb3V0cHV0LCBiYXNlKQorI2RlZmluZSBlbmNfdG9faW50ZWxfb3V0cHV0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfb3V0cHV0LCBlbmMpCisjZGVmaW5lIHRvX2ludGVsX2ZyYW1lYnVmZmVyKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIsIGJhc2UpCisKK3N0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaW50ZWxfaTJjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCB1MzIgcmVnLAorCQkJCQljb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgaW50ZWxfaTJjX2Rlc3Ryb3koc3RydWN0IGludGVsX2kyY19jaGFuICpjaGFuKTsKK2ludCBpbnRlbF9kZGNfZ2V0X21vZGVzKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCk7CitleHRlcm4gYm9vbCBpbnRlbF9kZGNfcHJvYmUoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0KTsKKworZXh0ZXJuIHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9zZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG91dHB1dF9kZXZpY2UpOworZXh0ZXJuIHZvaWQgaW50ZWxfZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF90dl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitleHRlcm4gdm9pZCBpbnRlbF9lbmNvZGVyX3ByZXBhcmUgKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitleHRlcm4gdm9pZCBpbnRlbF9lbmNvZGVyX2NvbW1pdCAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKworZXh0ZXJuIHN0cnVjdCBkcm1fZW5jb2RlciAqaW50ZWxfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworCitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmludGVsX2NydGNfbW9kZV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworZXh0ZXJuIHZvaWQgaW50ZWxfd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBkcm1fY3J0YyAqaW50ZWxfZ2V0X2NydGNfZnJvbV9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKTsKK2V4dGVybiBzdHJ1Y3QgZHJtX2NydGMgKmludGVsX2dldF9sb2FkX2RldGVjdF9waXBlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkJICAgaW50ICpkcG1zX21vZGUpOworZXh0ZXJuIHZvaWQgaW50ZWxfcmVsZWFzZV9sb2FkX2RldGVjdF9waXBlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJICAgaW50IGRwbXNfbW9kZSk7CisKK2V4dGVybiBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciogaW50ZWxfc2R2b19maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzZHZvQik7CitleHRlcm4gaW50IGludGVsX3Nkdm9fc3VwcG9ydHNfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2V4dGVybiB2b2lkIGludGVsX3Nkdm9fc2V0X2hvdHBsdWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IGVuYWJsZSk7CitleHRlcm4gaW50IGludGVsZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGludGVsZmJfcmVtb3ZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK2V4dGVybiBpbnQgaW50ZWxmYl9yZXNpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2V4dGVybiB2b2lkIGludGVsZmJfcmVzdG9yZSh2b2lkKTsKK2V4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorCQkJCSAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKKworZXh0ZXJuIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCisJCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKipmYiwKKwkJCQkgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kdm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhkNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHZvLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqIENvcHlyaWdodCDCqSAyMDA2LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiZHZvLmgiCisKKyNkZWZpbmUgU0lMMTY0X0FERFIJMHgzOAorI2RlZmluZSBDSDd4eHhfQUREUgkweDc2CisjZGVmaW5lIFRGUDQxMF9BRERSCTB4MzgKKworc3RhdGljIHN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlIGludGVsX2R2b19kZXZpY2VzW10gPSB7CisJeworCQkudHlwZSA9IElOVEVMX0RWT19DSElQX1RNRFMsCisJCS5uYW1lID0gInNpbDE2NCIsCisJCS5kdm9fcmVnID0gRFZPQywKKwkJLnNsYXZlX2FkZHIgPSBTSUwxNjRfQUREUiwKKwkJLmRldl9vcHMgPSAmc2lsMTY0X29wcywKKwl9LAorCXsKKwkJLnR5cGUgPSBJTlRFTF9EVk9fQ0hJUF9UTURTLAorCQkubmFtZSA9ICJjaDd4eHgiLAorCQkuZHZvX3JlZyA9IERWT0MsCisJCS5zbGF2ZV9hZGRyID0gQ0g3eHh4X0FERFIsCisJCS5kZXZfb3BzID0gJmNoN3h4eF9vcHMsCisJfSwKKwl7CisJCS50eXBlID0gSU5URUxfRFZPX0NISVBfTFZEUywKKwkJLm5hbWUgPSAiaXZjaCIsCisJCS5kdm9fcmVnID0gRFZPQSwKKwkJLnNsYXZlX2FkZHIgPSAweDAyLCAvKiBNaWdodCBhbHNvIGJlIDB4NDQsIDB4ODQsIDB4YzQgKi8KKwkJLmRldl9vcHMgPSAmaXZjaF9vcHMsCisJfSwKKwl7CisJCS50eXBlID0gSU5URUxfRFZPX0NISVBfVE1EUywKKwkJLm5hbWUgPSAidGZwNDEwIiwKKwkJLmR2b19yZWcgPSBEVk9DLAorCQkuc2xhdmVfYWRkciA9IFRGUDQxMF9BRERSLAorCQkuZGV2X29wcyA9ICZ0ZnA0MTBfb3BzLAorCX0sCisJeworCQkudHlwZSA9IElOVEVMX0RWT19DSElQX0xWRFMsCisJCS5uYW1lID0gImNoNzAxNyIsCisJCS5kdm9fcmVnID0gRFZPQywKKwkJLnNsYXZlX2FkZHIgPSAweDc1LAorCQkuZ3BpbyA9IEdQSU9FLAorCQkuZGV2X29wcyA9ICZjaDcwMTdfb3BzLAorCX0KK307CisKK3N0YXRpYyB2b2lkIGludGVsX2R2b19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSBlbmNfdG9faW50ZWxfb3V0cHV0KGVuY29kZXIpOworCXN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8gPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXUzMiBkdm9fcmVnID0gZHZvLT5kdm9fcmVnOworCXUzMiB0ZW1wID0gSTkxNV9SRUFEKGR2b19yZWcpOworCisJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgeworCQlJOTE1X1dSSVRFKGR2b19yZWcsIHRlbXAgfCBEVk9fRU5BQkxFKTsKKwkJSTkxNV9SRUFEKGR2b19yZWcpOworCQlkdm8tPmRldl9vcHMtPmRwbXMoZHZvLCBtb2RlKTsKKwl9IGVsc2UgeworCQlkdm8tPmRldl9vcHMtPmRwbXMoZHZvLCBtb2RlKTsKKwkJSTkxNV9XUklURShkdm9fcmVnLCB0ZW1wICYgfkRWT19FTkFCTEUpOworCQlJOTE1X1JFQUQoZHZvX3JlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kdm9fc2F2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCS8qIEVhY2ggb3V0cHV0IHNob3VsZCBwcm9iYWJseSBqdXN0IHNhdmUgdGhlIHJlZ2lzdGVycyBpdCB0b3VjaGVzLAorCSAqIGJ1dCBmb3Igbm93LCB1c2UgbW9yZSBvdmVya2lsbC4KKwkgKi8KKwlkZXZfcHJpdi0+c2F2ZURWT0EgPSBJOTE1X1JFQUQoRFZPQSk7CisJZGV2X3ByaXYtPnNhdmVEVk9CID0gSTkxNV9SRUFEKERWT0IpOworCWRldl9wcml2LT5zYXZlRFZPQyA9IEk5MTVfUkVBRChEVk9DKTsKKworCWR2by0+ZGV2X29wcy0+c2F2ZShkdm8pOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kdm9fcmVzdG9yZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCWR2by0+ZGV2X29wcy0+cmVzdG9yZShkdm8pOworCisJSTkxNV9XUklURShEVk9BLCBkZXZfcHJpdi0+c2F2ZURWT0EpOworCUk5MTVfV1JJVEUoRFZPQiwgZGV2X3ByaXYtPnNhdmVEVk9CKTsKKwlJOTE1X1dSSVRFKERWT0MsIGRldl9wcml2LT5zYXZlRFZPQyk7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfZHZvX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKKwkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CisKKwkvKiBYWFg6IFZhbGlkYXRlIGNsb2NrIHJhbmdlICovCisKKwlpZiAoZHZvLT5wYW5lbF9maXhlZF9tb2RlKSB7CisJCWlmIChtb2RlLT5oZGlzcGxheSA+IGR2by0+cGFuZWxfZml4ZWRfbW9kZS0+aGRpc3BsYXkpCisJCQlyZXR1cm4gTU9ERV9QQU5FTDsKKwkJaWYgKG1vZGUtPnZkaXNwbGF5ID4gZHZvLT5wYW5lbF9maXhlZF9tb2RlLT52ZGlzcGxheSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCX0KKworCXJldHVybiBkdm8tPmRldl9vcHMtPm1vZGVfdmFsaWQoZHZvLCBtb2RlKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfZHZvX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gZW5jX3RvX2ludGVsX291dHB1dChlbmNvZGVyKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCS8qIElmIHdlIGhhdmUgdGltaW5ncyBmcm9tIHRoZSBCSU9TIGZvciB0aGUgcGFuZWwsIHB1dCB0aGVtIGluCisJICogdG8gdGhlIGFkanVzdGVkIG1vZGUuICBUaGUgQ1JUQyB3aWxsIGJlIHNldCB1cCBmb3IgdGhpcyBtb2RlLAorCSAqIHdpdGggdGhlIHBhbmVsIHNjYWxpbmcgc2V0IHVwIHRvIHNvdXJjZSBmcm9tIHRoZSBIL1ZEaXNwbGF5CisJICogb2YgdGhlIG9yaWdpbmFsIG1vZGUuCisJICovCisJaWYgKGR2by0+cGFuZWxfZml4ZWRfbW9kZSAhPSBOVUxMKSB7CisjZGVmaW5lIEMoeCkgYWRqdXN0ZWRfbW9kZS0+eCA9IGR2by0+cGFuZWxfZml4ZWRfbW9kZS0+eAorCQlDKGhkaXNwbGF5KTsKKwkJQyhoc3luY19zdGFydCk7CisJCUMoaHN5bmNfZW5kKTsKKwkJQyhodG90YWwpOworCQlDKHZkaXNwbGF5KTsKKwkJQyh2c3luY19zdGFydCk7CisJCUModnN5bmNfZW5kKTsKKwkJQyh2dG90YWwpOworCQlDKGNsb2NrKTsKKwkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworI3VuZGVmIEMKKwl9CisKKwlpZiAoZHZvLT5kZXZfb3BzLT5tb2RlX2ZpeHVwKQorCQlyZXR1cm4gZHZvLT5kZXZfb3BzLT5tb2RlX2ZpeHVwKGR2bywgbW9kZSwgYWRqdXN0ZWRfbW9kZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZHZvX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGVuY29kZXItPmNydGMpOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IGVuY190b19pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CisJc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2byA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXUzMiBkdm9fdmFsOworCXUzMiBkdm9fcmVnID0gZHZvLT5kdm9fcmVnLCBkdm9fc3JjZGltX3JlZzsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKKworCXN3aXRjaCAoZHZvX3JlZykgeworCWNhc2UgRFZPQToKKwlkZWZhdWx0OgorCQlkdm9fc3JjZGltX3JlZyA9IERWT0FfU1JDRElNOworCQlicmVhazsKKwljYXNlIERWT0I6CisJCWR2b19zcmNkaW1fcmVnID0gRFZPQl9TUkNESU07CisJCWJyZWFrOworCWNhc2UgRFZPQzoKKwkJZHZvX3NyY2RpbV9yZWcgPSBEVk9DX1NSQ0RJTTsKKwkJYnJlYWs7CisJfQorCisJZHZvLT5kZXZfb3BzLT5tb2RlX3NldChkdm8sIG1vZGUsIGFkanVzdGVkX21vZGUpOworCisJLyogU2F2ZSB0aGUgZGF0YSBvcmRlciwgc2luY2UgSSBkb24ndCBrbm93IHdoYXQgaXQgc2hvdWxkIGJlIHNldCB0by4gKi8KKwlkdm9fdmFsID0gSTkxNV9SRUFEKGR2b19yZWcpICYKKwkJICAoRFZPX1BSRVNFUlZFX01BU0sgfCBEVk9fREFUQV9PUkRFUl9HQlJHKTsKKwlkdm9fdmFsIHw9IERWT19EQVRBX09SREVSX0ZQIHwgRFZPX0JPUkRFUl9FTkFCTEUgfAorCQkgICBEVk9fQkxBTktfQUNUSVZFX0hJR0g7CisKKwlpZiAocGlwZSA9PSAxKQorCQlkdm9fdmFsIHw9IERWT19QSVBFX0JfU0VMRUNUOworCWR2b192YWwgfD0gRFZPX1BJUEVfU1RBTEw7CisJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpCisJCWR2b192YWwgfD0gRFZPX0hTWU5DX0FDVElWRV9ISUdIOworCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQlkdm9fdmFsIHw9IERWT19WU1lOQ19BQ1RJVkVfSElHSDsKKworCUk5MTVfV1JJVEUoZHBsbF9yZWcsIEk5MTVfUkVBRChkcGxsX3JlZykgfCBEUExMX0RWT19ISUdIX1NQRUVEKTsKKworCS8qSTkxNV9XUklURShEVk9CX1NSQ0RJTSwKKwkgIChhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA8PCBEVk9fU1JDRElNX0hPUklaT05UQUxfU0hJRlQpIHwKKwkgIChhZGp1c3RlZF9tb2RlLT5WRGlzcGxheSA8PCBEVk9fU1JDRElNX1ZFUlRJQ0FMX1NISUZUKSk7Ki8KKwlJOTE1X1dSSVRFKGR2b19zcmNkaW1fcmVnLAorCQkgICAoYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPDwgRFZPX1NSQ0RJTV9IT1JJWk9OVEFMX1NISUZUKSB8CisJCSAgIChhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA8PCBEVk9fU1JDRElNX1ZFUlRJQ0FMX1NISUZUKSk7CisJLypJOTE1X1dSSVRFKERWT0IsIGR2b192YWwpOyovCisJSTkxNV9XUklURShkdm9fcmVnLCBkdm9fdmFsKTsKK30KKworLyoqCisgKiBEZXRlY3QgdGhlIG91dHB1dCBjb25uZWN0aW9uIG9uIG91ciBEVk8gZGV2aWNlLgorICoKKyAqIFVuaW1wbGVtZW50ZWQuCisgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGludGVsX2R2b19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCXJldHVybiBkdm8tPmRldl9vcHMtPmRldGVjdChkdm8pOworfQorCitzdGF0aWMgaW50IGludGVsX2R2b19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCS8qIFdlIHNob3VsZCBwcm9iYWJseSBoYXZlIGFuIGkyYyBkcml2ZXIgZ2V0X21vZGVzIGZ1bmN0aW9uIGZvciB0aG9zZQorCSAqIGRldmljZXMgd2hpY2ggd2lsbCBoYXZlIGEgZml4ZWQgc2V0IG9mIG1vZGVzIGRldGVybWluZWQgYnkgdGhlIGNoaXAKKwkgKiAoVFYtb3V0LCBmb3IgZXhhbXBsZSksIGJ1dCBmb3Igbm93IHdpdGgganVzdCBUTURTIGFuZCBMVkRTLAorCSAqIHRoYXQncyBub3QgdGhlIGNhc2UuCisJICovCisJaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCWlmICghbGlzdF9lbXB0eSgmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMpKQorCQlyZXR1cm4gMTsKKworCisJaWYgKGR2by0+cGFuZWxfZml4ZWRfbW9kZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LCBkdm8tPnBhbmVsX2ZpeGVkX21vZGUpOworCQlpZiAobW9kZSkgeworCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2R2b19kZXN0cm95IChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9kdm9fZGV2aWNlICpkdm8gPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCisJaWYgKGR2bykgeworCQlpZiAoZHZvLT5kZXZfb3BzLT5kZXN0cm95KQorCQkJZHZvLT5kZXZfb3BzLT5kZXN0cm95KGR2byk7CisJCWlmIChkdm8tPnBhbmVsX2ZpeGVkX21vZGUpCisJCQlrZnJlZShkdm8tPnBhbmVsX2ZpeGVkX21vZGUpOworCQkvKiBubyBuZWVkLCBpbiBpODMwX2R2b2ljZXNbXSBub3cgKi8KKwkJLy9rZnJlZShkdm8pOworCX0KKwlpZiAoaW50ZWxfb3V0cHV0LT5pMmNfYnVzKQorCQlpbnRlbF9pMmNfZGVzdHJveShpbnRlbF9vdXRwdXQtPmkyY19idXMpOworCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMpCisJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+ZGRjX2J1cyk7CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShpbnRlbF9vdXRwdXQpOworfQorCisjaWZkZWYgUkFORFJfR0VUX0NSVENfSU5URVJGQUNFCitzdGF0aWMgc3RydWN0IGRybV9jcnRjICppbnRlbF9kdm9fZ2V0X2NydGMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfZHZvX2RldmljZSAqZHZvID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlpbnQgcGlwZSA9ICEhKEk5MTVfUkVBRChkdm8tPmR2b19yZWcpICYgU0RWT19QSVBFX0JfU0VMRUNUKTsKKworCXJldHVybiBpbnRlbF9waXBlX3RvX2NydGMocFNjcm4sIHBpcGUpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGludGVsX2R2b19oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9kdm9fZHBtcywKKwkubW9kZV9maXh1cCA9IGludGVsX2R2b19tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gaW50ZWxfZW5jb2Rlcl9wcmVwYXJlLAorCS5tb2RlX3NldCA9IGludGVsX2R2b19tb2RlX3NldCwKKwkuY29tbWl0ID0gaW50ZWxfZW5jb2Rlcl9jb21taXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaW50ZWxfZHZvX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuc2F2ZSA9IGludGVsX2R2b19zYXZlLAorCS5yZXN0b3JlID0gaW50ZWxfZHZvX3Jlc3RvcmUsCisJLmRldGVjdCA9IGludGVsX2R2b19kZXRlY3QsCisJLmRlc3Ryb3kgPSBpbnRlbF9kdm9fZGVzdHJveSwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW50ZWxfZHZvX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfdmFsaWQgPSBpbnRlbF9kdm9fbW9kZV92YWxpZCwKKwkuZ2V0X21vZGVzID0gaW50ZWxfZHZvX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyID0gaW50ZWxfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIHZvaWQgaW50ZWxfZHZvX2VuY19kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGludGVsX2R2b19lbmNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBpbnRlbF9kdm9fZW5jX2Rlc3Ryb3ksCit9OworCisKKy8qKgorICogQXR0ZW1wdHMgdG8gZ2V0IGEgZml4ZWQgcGFuZWwgdGltaW5nIGZvciBMVkRTIChjdXJyZW50bHkgb25seSB0aGUgaTgzMCkuCisgKgorICogT3RoZXIgY2hpcHMgd2l0aCBEVk8gTFZEUyB3aWxsIG5lZWQgdG8gZXh0ZW5kIHRoaXMgdG8gZGVhbCB3aXRoIHRoZSBMVkRTCisgKiBjaGlwIGJlaW5nIG9uIERWT0IvQyBhbmQgaGF2aW5nIG11bHRpcGxlIHBpcGVzLgorICovCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKgoraW50ZWxfZHZvX2dldF9jdXJyZW50X21vZGUgKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2byA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJdWludDMyX3QgZHZvX3JlZyA9IGR2by0+ZHZvX3JlZzsKKwl1aW50MzJfdCBkdm9fdmFsID0gSTkxNV9SRUFEKGR2b19yZWcpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gTlVMTDsKKworCS8qIElmIHRoZSBEVk8gcG9ydCBpcyBhY3RpdmUsIHRoYXQnbGwgYmUgdGhlIExWRFMsIHNvIHdlIGNhbiBwdWxsIG91dAorCSAqIGl0cyB0aW1pbmdzIHRvIGdldCBob3cgdGhlIEJJT1Mgc2V0IHVwIHRoZSBwYW5lbC4KKwkgKi8KKwlpZiAoZHZvX3ZhbCAmIERWT19FTkFCTEUpIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjOworCQlpbnQgcGlwZSA9IChkdm9fdmFsICYgRFZPX1BJUEVfQl9TRUxFQ1QpID8gMSA6IDA7CisKKwkJY3J0YyA9IGludGVsX2dldF9jcnRjX2Zyb21fcGlwZShkZXYsIHBpcGUpOworCQlpZiAoY3J0YykgeworCQkJbW9kZSA9IGludGVsX2NydGNfbW9kZV9nZXQoZGV2LCBjcnRjKTsKKworCQkJaWYgKG1vZGUpIHsKKwkJCQltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQkJCWlmIChkdm9fdmFsICYgRFZPX0hTWU5DX0FDVElWRV9ISUdIKQorCQkJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BIU1lOQzsKKwkJCQlpZiAoZHZvX3ZhbCAmIERWT19WU1lOQ19BQ1RJVkVfSElHSCkKKwkJCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIG1vZGU7Cit9CisKK3ZvaWQgaW50ZWxfZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7CisJc3RydWN0IGludGVsX2R2b19kZXZpY2UgKmR2bzsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJaW50IGdwaW9faW5pdGVkID0gMDsKKwlpbnQgZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9OT05FOworCWludGVsX291dHB1dCA9IGt6YWxsb2MgKHNpemVvZihzdHJ1Y3QgaW50ZWxfb3V0cHV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9vdXRwdXQpCisJCXJldHVybjsKKworCS8qIFNldCB1cCB0aGUgRERDIGJ1cyAqLworCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPRCwgIkRWT0REQ19EIik7CisJaWYgKCFpbnRlbF9vdXRwdXQtPmRkY19idXMpCisJCWdvdG8gZnJlZV9pbnRlbDsKKworCS8qIE5vdywgdHJ5IHRvIGZpbmQgYSBjb250cm9sbGVyICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW50ZWxfZHZvX2RldmljZXMpOyBpKyspIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9vdXRwdXQtPmJhc2U7CisJCWludCBncGlvOworCisJCWR2byA9ICZpbnRlbF9kdm9fZGV2aWNlc1tpXTsKKworCQkvKiBBbGxvdyB0aGUgSTJDIGRyaXZlciBpbmZvIHRvIHNwZWNpZnkgdGhlIEdQSU8gdG8gYmUgdXNlZCBpbgorCQkgKiBzcGVjaWFsIGNhc2VzLCBidXQgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gd2hhdCdzIGRlZmluZWQKKwkJICogaW4gdGhlIHNwZWMuCisJCSAqLworCQlpZiAoZHZvLT5ncGlvICE9IDApCisJCQlncGlvID0gZHZvLT5ncGlvOworCQllbHNlIGlmIChkdm8tPnR5cGUgPT0gSU5URUxfRFZPX0NISVBfTFZEUykKKwkJCWdwaW8gPSBHUElPQjsKKwkJZWxzZQorCQkJZ3BpbyA9IEdQSU9FOworCisJCS8qIFNldCB1cCB0aGUgSTJDIGJ1cyBuZWNlc3NhcnkgZm9yIHRoZSBjaGlwIHdlJ3JlIHByb2JpbmcuCisJCSAqIEl0IGFwcGVhcnMgdGhhdCBldmVyeXRoaW5nIGlzIG9uIEdQSU9FIGV4Y2VwdCBmb3IgcGFuZWxzCisJCSAqIG9uIGk4MzAgbGFwdG9wcywgd2hpY2ggYXJlIG9uIEdQSU9CIChEVk9BKS4KKwkJICovCisJCWlmIChncGlvX2luaXRlZCAhPSBncGlvKSB7CisJCQlpZiAoaTJjYnVzICE9IE5VTEwpCisJCQkJaW50ZWxfaTJjX2Rlc3Ryb3koaTJjYnVzKTsKKwkJCWlmICghKGkyY2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBncGlvLAorCQkJCWdwaW8gPT0gR1BJT0IgPyAiRFZPSTJDX0IiIDogIkRWT0kyQ19FIikpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlncGlvX2luaXRlZCA9IGdwaW87CisJCX0KKworCQlpZiAoZHZvLT5kZXZfb3BzIT0gTlVMTCkKKwkJCXJldCA9IGR2by0+ZGV2X29wcy0+aW5pdChkdm8sIGkyY2J1cyk7CisJCWVsc2UKKwkJCXJldCA9IGZhbHNlOworCisJCWlmICghcmV0KQorCQkJY29udGludWU7CisKKwkJaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX0RWTzsKKwkJc3dpdGNoIChkdm8tPnR5cGUpIHsKKwkJY2FzZSBJTlRFTF9EVk9fQ0hJUF9UTURTOgorCQkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLAorCQkJCQkgICAmaW50ZWxfZHZvX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpOworCQkJZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UTURTOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfRFZPX0NISVBfTFZEUzoKKwkJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwKKwkJCQkJICAgJmludGVsX2R2b19jb25uZWN0b3JfZnVuY3MsCisJCQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKwkJCWVuY29kZXJfdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfTFZEUzsKKwkJCWJyZWFrOworCQl9CisKKwkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwKKwkJCQkJICZpbnRlbF9kdm9fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOworCQljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFsc2U7CisJCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CisKKwkJaW50ZWxfb3V0cHV0LT5kZXZfcHJpdiA9IGR2bzsKKwkJaW50ZWxfb3V0cHV0LT5pMmNfYnVzID0gaTJjYnVzOworCisJCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmaW50ZWxfb3V0cHV0LT5lbmMsCisJCQkJICZpbnRlbF9kdm9fZW5jX2Z1bmNzLCBlbmNvZGVyX3R5cGUpOworCQlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZpbnRlbF9vdXRwdXQtPmVuYywKKwkJCQkgICAgICAgJmludGVsX2R2b19oZWxwZXJfZnVuY3MpOworCisJCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaW50ZWxfb3V0cHV0LT5iYXNlLAorCQkJCQkJICAmaW50ZWxfb3V0cHV0LT5lbmMpOworCQlpZiAoZHZvLT50eXBlID09IElOVEVMX0RWT19DSElQX0xWRFMpIHsKKwkJCS8qIEZvciBvdXIgTFZEUyBjaGlwc2V0cywgd2Ugc2hvdWxkIGhvcGVmdWxseSBiZSBhYmxlCisJCQkgKiB0byBkaWcgdGhlIGZpeGVkIHBhbmVsIG1vZGUgb3V0IG9mIHRoZSBCSU9TIGRhdGEuCisJCQkgKiBIb3dldmVyLCBpdCdzIGluIGEgZGlmZmVyZW50IGZvcm1hdCBmcm9tIHRoZSBCSU9TCisJCQkgKiBkYXRhIG9uIGNoaXBzZXRzIHdpdGggaW50ZWdyYXRlZCBMVkRTIChzdG9yZWQgaW4gQUlNCisJCQkgKiBoZWFkZXJzLCBsaWtlbHkpLCBzbyBmb3Igbm93LCBqdXN0IGdldCB0aGUgY3VycmVudAorCQkJICogbW9kZSBiZWluZyBvdXRwdXQgdGhyb3VnaCBEVk8uCisJCQkgKi8KKwkJCWR2by0+cGFuZWxfZml4ZWRfbW9kZSA9CisJCQkJaW50ZWxfZHZvX2dldF9jdXJyZW50X21vZGUoY29ubmVjdG9yKTsKKwkJCWR2by0+cGFuZWxfd2FudHNfZGl0aGVyID0gdHJ1ZTsKKwkJfQorCisJCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisJCXJldHVybjsKKwl9CisKKwlpbnRlbF9pMmNfZGVzdHJveShpbnRlbF9vdXRwdXQtPmRkY19idXMpOworCS8qIERpZG4ndCBmaW5kIGEgY2hpcCwgc28gdGVhciBkb3duLiAqLworCWlmIChpMmNidXMgIT0gTlVMTCkKKwkJaW50ZWxfaTJjX2Rlc3Ryb3koaTJjYnVzKTsKK2ZyZWVfaW50ZWw6CisJa2ZyZWUoaW50ZWxfb3V0cHV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDEyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCkBAIC0wLDAgKzEsOTI1IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDcgRGF2aWQgQWlybGllCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgRGF2aWQgQWlybGllCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCitzdHJ1Y3QgaW50ZWxmYl9wYXIgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm91cl9tb2RlOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJaW50IGNydGNfY291bnQ7CisJLyogY3J0YyBjdXJyZW50bHkgYm91bmQgdG8gdGhpcyAqLworCXVpbnQzMl90IGNydGNfaWRzWzJdOworfTsKKworc3RhdGljIGludCBpbnRlbGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCXVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKKwkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmaW50ZWxfY3J0Yy0+bW9kZV9zZXQ7CisJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbW9kZXNldC0+ZmI7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQorCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKKwkJCQlicmVhazsKKworCQlpZiAoaSA9PSBwYXItPmNydGNfY291bnQpCisJCQljb250aW51ZTsKKworCisJCWlmIChyZWdubyA+IDI1NSkKKwkJCXJldHVybiAxOworCisJCWlmIChmYi0+ZGVwdGggPT0gOCkgeworCQkJaW50ZWxfY3J0Y19mYl9nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAocmVnbm8gPCAxNikgeworCQkJc3dpdGNoIChmYi0+ZGVwdGgpIHsKKwkJCWNhc2UgMTU6CisJCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmODAwKSA+PiAxKSB8CisJCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8CisJCQkJCSgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNjoKKwkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKHJlZCAmIDB4ZjgwMCkgfAorCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAorCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJY2FzZSAzMjoKKwkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKChyZWQgJiAweGZmMDApIDw8IDgpIHwKKwkJCQkJKGdyZWVuICYgMHhmZjAwKSB8CisJCQkJCSgoYmx1ZSAgJiAweGZmMDApID4+IDgpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVsZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGludGVsZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHBhci0+aW50ZWxfZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSAmaW50ZWxfZmItPmJhc2U7CisJaW50IGRlcHRoOworCisJaWYgKHZhci0+cGl4Y2xvY2sgPT0gLTEgfHwgIXZhci0+cGl4Y2xvY2spCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTmVlZCB0byByZXNpemUgdGhlIGZiIG9iamVjdCAhISEgKi8KKwlpZiAodmFyLT54cmVzID4gZmItPndpZHRoIHx8IHZhci0+eXJlcyA+IGZiLT5oZWlnaHQpIHsKKwkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgd2lkdGgvaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZiIG9iamVjdCAlZHglZCA+ICVkeCVkXG4iLHZhci0+eHJlcyx2YXItPnlyZXMsZmItPndpZHRoLGZiLT5oZWlnaHQpOworCQlEUk1fRVJST1IoIk5lZWQgcmVzaXppbmcgY29kZS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQlkZXB0aCA9ICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KSA/IDE2IDogMTU7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRlcHRoID0gKHZhci0+dHJhbnNwLmxlbmd0aCA+IDApID8gMzIgOiAyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGRlcHRoKSB7CisJY2FzZSA4OgorCQl2YXItPnJlZC5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDE1OgorCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMTU7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhci0+cmVkLm9mZnNldCA9IDExOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCQlicmVhazsKKwljYXNlIDI0OgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyB3aWxsIGxldCBmYmNvbiBkbyB0aGUgbW9kZSBpbml0ICovCisvKiBGSVhNRTogdGFrZSBtb2RlIGNvbmZpZyBsb2NrPyAqLworc3RhdGljIGludCBpbnRlbGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGludGVsZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlpbnQgaTsKKworCURSTV9ERUJVRygiJWQgJWRcbiIsIHZhci0+eHJlcywgdmFyLT5waXhjbG9jayk7CisKKwlpZiAodmFyLT5waXhjbG9jayAhPSAtMSkgeworCisJCURSTV9FUlJPUigiUElYRUwgQ0xDT0sgU0VUXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjOworCQlpbnQgcmV0OworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBwYXItPmNydGNfY291bnQ7IGkrKykKKwkJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBwYXItPmNydGNfaWRzW2ldKQorCQkJCQlicmVhazsKKworCQkJaWYgKGkgPT0gcGFyLT5jcnRjX2NvdW50KQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoY3J0Yy0+ZmIgPT0gaW50ZWxfY3J0Yy0+bW9kZV9zZXQuZmIpIHsKKwkJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmaW50ZWxfY3J0Yy0+bW9kZV9zZXQpOworCQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGFyLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGFyLT5jcnRjX2NvdW50OyBpKyspCisJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBwYXItPmNydGNfaWRzW2ldKQorCQkJCWJyZWFrOworCisJCWlmIChpID09IHBhci0+Y3J0Y19jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCQltb2Rlc2V0ID0gJmludGVsX2NydGMtPm1vZGVfc2V0OworCisJCW1vZGVzZXQtPnggPSB2YXItPnhvZmZzZXQ7CisJCW1vZGVzZXQtPnkgPSB2YXItPnlvZmZzZXQ7CisKKwkJaWYgKG1vZGVzZXQtPm51bV9jb25uZWN0b3JzKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKG1vZGVzZXQpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJCWlmICghcmV0KSB7CisJCQkJaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7CisJCQkJaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbnRlbGZiX29uKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWludCBpOworCisJLyoKKwkgKiBGb3IgZWFjaCBDUlRDIGluIHRoaXMgZmIsIGZpbmQgYWxsIGFzc29jaWF0ZWQgZW5jb2RlcnMKKwkgKiBhbmQgdHVybiB0aGVtIG9mZiwgdGhlbiB0dXJuIG9mZiB0aGUgQ1JUQy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQorCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKKwkJCQlicmVhazsKKworCQljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworCisJCS8qIEZvdW5kIGEgQ1JUQyBvbiB0aGlzIGZiLCBub3cgZmluZCBlbmNvZGVycyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7CisJCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQkJCWVuY29kZXJfZnVuY3MtPmRwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PTik7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsZmJfb2ZmKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZHBtc19tb2RlKQoreworCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwYXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWludCBpOworCisJLyoKKwkgKiBGb3IgZWFjaCBDUlRDIGluIHRoaXMgZmIsIGZpbmQgYWxsIGFzc29jaWF0ZWQgZW5jb2RlcnMKKwkgKiBhbmQgdHVybiB0aGVtIG9mZiwgdGhlbiB0dXJuIG9mZiB0aGUgQ1JUQy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhci0+Y3J0Y19jb3VudDsgaSsrKQorCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gcGFyLT5jcnRjX2lkc1tpXSkKKwkJCQlicmVhazsKKworCQkvKiBGb3VuZCBhIENSVEMgb24gdGhpcyBmYiwgbm93IGZpbmQgZW5jb2RlcnMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKKwkJCQlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVyX2Z1bmNzOworCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKKwkJCQllbmNvZGVyX2Z1bmNzLT5kcG1zKGVuY29kZXIsIGRwbXNfbW9kZSk7CisJCQl9CisJCX0KKwkJaWYgKGRwbXNfbW9kZSA9PSBEUk1fTU9ERV9EUE1TX09GRikKKwkJCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgZHBtc19tb2RlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN3aXRjaCAoYmxhbmspIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWludGVsZmJfb24oaW5mbyk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQlpbnRlbGZiX29mZihpbmZvLCBEUk1fTU9ERV9EUE1TX1NUQU5EQlkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCWludGVsZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfU1RBTkRCWSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwkJaW50ZWxmYl9vZmYoaW5mbywgRFJNX01PREVfRFBNU19TVVNQRU5EKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCWludGVsZmJfb2ZmKGluZm8sIERSTV9NT0RFX0RQTVNfT0ZGKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBpbnRlbGZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gaW50ZWxmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBpbnRlbGZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IGludGVsZmJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCisJLmZiX3Bhbl9kaXNwbGF5ID0gaW50ZWxmYl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSBpbnRlbGZiX2JsYW5rLAorfTsKKworLyoqCisgKiBDdXJyZXRseSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG9sZCBmcmFtZWJ1ZmZlciBpcyByZXVzZWQuCisgKgorICogTE9DS0lORworICogY2FsbGVyIHNob3VsZCBob2xkIHRoZSBtb2RlIGNvbmZpZyBsb2NrLgorICoKKyAqLworaW50IGludGVsZmJfcmVzaXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGNydGMtPmRlc2lyZWRfbW9kZTsKKworCWZiID0gY3J0Yy0+ZmI7CisJaWYgKCFmYikKKwkJcmV0dXJuIDE7CisKKwlpbmZvID0gZmItPmZiZGV2OworCWlmICghaW5mbykKKwkJcmV0dXJuIDE7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAxOworCisJaW5mby0+dmFyLnhyZXMgPSBtb2RlLT5oZGlzcGxheTsKKwlpbmZvLT52YXIucmlnaHRfbWFyZ2luID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwlpbmZvLT52YXIuaHN5bmNfbGVuID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaW5mby0+dmFyLmxlZnRfbWFyZ2luID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCWluZm8tPnZhci55cmVzID0gbW9kZS0+dmRpc3BsYXk7CisJaW5mby0+dmFyLmxvd2VyX21hcmdpbiA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJaW5mby0+dmFyLnZzeW5jX2xlbiA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCWluZm8tPnZhci51cHBlcl9tYXJnaW4gPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisJaW5mby0+dmFyLnBpeGNsb2NrID0gMTAwMDAwMDAgLyBtb2RlLT5odG90YWwgKiAxMDAwIC8gbW9kZS0+dnRvdGFsICogMTAwOworCS8qIGF2b2lkIG92ZXJmbG93ICovCisJaW5mby0+dmFyLnBpeGNsb2NrID0gaW5mby0+dmFyLnBpeGNsb2NrICogMTAwMCAvIG1vZGUtPnZyZWZyZXNoOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGludGVsZmJfcmVzaXplKTsKKworc3RhdGljIHN0cnVjdCBkcm1fbW9kZV9zZXQga2VybmVsZmJfbW9kZTsKKworc3RhdGljIGludCBpbnRlbGZiX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwgdW5zaWduZWQgbG9uZyB1bnVuc2VkLAorCQkJIHZvaWQgKnBhbmljX3N0cikKK3sKKwlEUk1fRVJST1IoInBhbmljIG9jY3VycmVkLCBzd2l0Y2hpbmcgYmFjayB0byB0ZXh0IGNvbnNvbGVcbiIpOworCisJaW50ZWxmYl9yZXN0b3JlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNlZCA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGludGVsZmJfcGFuaWMsCit9OworCitzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAorCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCisJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKippbnRlbF9mYl9wKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBpbnRlbGZiX3BhciAqcGFyOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJc3RydWN0IGRybV9tb2RlX2ZiX2NtZCBtb2RlX2NtZDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmZibyA9IE5VTEw7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKKwlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOworCisJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOworCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OworCisJbW9kZV9jbWQuYnBwID0gMzI7CisJbW9kZV9jbWQucGl0Y2ggPSBBTElHTihtb2RlX2NtZC53aWR0aCAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KSwgNjQpOworCW1vZGVfY21kLmRlcHRoID0gMjQ7CisKKwlzaXplID0gbW9kZV9jbWQucGl0Y2ggKiBtb2RlX2NtZC5oZWlnaHQ7CisJc2l6ZSA9IEFMSUdOKHNpemUsIFBBR0VfU0laRSk7CisJZmJvID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCBzaXplKTsKKwlpZiAoIWZibykgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlvYmpfcHJpdiA9IGZiby0+ZHJpdmVyX3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKGZibywgUEFHRV9TSVpFKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBmYjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X3VucmVmOworCX0KKworCS8qIEZsdXNoIGV2ZXJ5dGhpbmcgb3V0LCB3ZSdsbCBiZSBkb2luZyBHVFQgb25seSBmcm9tIG5vdyBvbiAqLworCWk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihmYm8sIDEpOworCisJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgJm1vZGVfY21kLCAmZmIsIGZibyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBmYi5cbiIpOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisKKwlsaXN0X2FkZCgmZmItPmZpbHBfaGVhZCwgJmRldi0+bW9kZV9jb25maWcuZmJfa2VybmVsX2xpc3QpOworCisJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisJKmludGVsX2ZiX3AgPSBpbnRlbF9mYjsKKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGludGVsZmJfcGFyKSwgZGV2aWNlKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5yZWY7CisJfQorCisJcGFyID0gaW5mby0+cGFyOworCisJc3RyY3B5KGluZm8tPmZpeC5pZCwgImludGVsZHJtZmIiKTsKKwlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgudHlwZV9hdXggPSAwOworCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCisJaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KKwlpbmZvLT5maXgueXdyYXBzdGVwID0gMDsKKwlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9JODMwOworCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCisJaW5mby0+ZmJvcHMgPSAmaW50ZWxmYl9vcHM7CisKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBmYi0+cGl0Y2g7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOworCisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF93YyhkZXYtPmFncC0+YmFzZSArIG9ial9wcml2LT5ndHRfb2Zmc2V0LAorCQkJCSAgICAgICBzaXplKTsKKwlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VucmVmOworCX0KKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IHNpemU7CisKKy8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CisKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGZiLT5wc2V1ZG9fcGFsZXR0ZTsKKwlpbmZvLT52YXIueHJlc192aXJ0dWFsID0gZmItPndpZHRoOworCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBmYi0+aGVpZ2h0OworCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IGZiLT5iaXRzX3Blcl9waXhlbDsKKwlpbmZvLT52YXIueG9mZnNldCA9IDA7CisJaW5mby0+dmFyLnlvZmZzZXQgPSAwOworCWluZm8tPnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKwlpbmZvLT52YXIuaGVpZ2h0ID0gLTE7CisJaW5mby0+dmFyLndpZHRoID0gLTE7CisKKwlpbmZvLT52YXIueHJlcyA9IGZiX3dpZHRoOworCWluZm8tPnZhci55cmVzID0gZmJfaGVpZ2h0OworCisJLyogRklYTUU6IHdlIHJlYWxseSBzaG91bGRuJ3QgZXhwb3NlIG1taW8gc3BhY2UgYXQgYWxsICovCisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCBtbWlvX2Jhcik7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIG1taW9fYmFyKTsKKworCWluZm8tPnBpeG1hcC5zaXplID0gNjQqMTAyNDsKKwlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gODsKKwlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7CisJaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKKwlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDE7CisKKwlzd2l0Y2goZmItPmRlcHRoKSB7CisJY2FzZSA4OgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7IC8qIDhiaXQgREFDICovCisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlpbmZvLT52YXIudHJhbnNwLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxMDsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMTU7CisJCWluZm8tPnZhci50cmFuc3AubGVuZ3RoID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxMTsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDY7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDU7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJaW5mby0+dmFyLnJlZC5vZmZzZXQgPSAxNjsKKwkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwljYXNlIDMyOgorCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQgPSAyNDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlmYi0+ZmJkZXYgPSBpbmZvOworCisJcGFyLT5pbnRlbF9mYiA9IGludGVsX2ZiOworCXBhci0+ZGV2ID0gZGV2OworCisJLyogVG8gYWxsb3cgcmVzaXplaW5nIHdpdGhvdXQgc3dhcHBpbmcgYnVmZmVycyAqLworCXByaW50aygiYWxsb2NhdGVkICVkeCVkIGZiOiAweCUwOHgsIGJvICVwXG4iLCBpbnRlbF9mYi0+YmFzZS53aWR0aCwKKwkgICAgICAgaW50ZWxfZmItPmJhc2UuaGVpZ2h0LCBvYmpfcHJpdi0+Z3R0X29mZnNldCwgZmJvKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworCitvdXRfdW5yZWY6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZmJvKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGludGVsZmJfbXVsdGlfZmJfcHJvYmVfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaW50ZWxmYl9wYXIgKnBhcjsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworCWludCBuZXdfZmIgPSAwOworCWludCByZXQsIGksIGNvbm5fY291bnQ7CisKKwlpZiAoIWRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpCisJCXJldHVybiAwOworCisJaWYgKCFjcnRjLT5kZXNpcmVkX21vZGUpCisJCXJldHVybiAwOworCisJd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OworCWhlaWdodCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXk7CisKKwkvKiBpcyB0aGVyZSBhbiBmYiBib3VuZCB0byB0aGlzIGNydGMgYWxyZWFkeSAqLworCWlmICghaW50ZWxfY3J0Yy0+bW9kZV9zZXQuZmIpIHsKKwkJcmV0ID0gaW50ZWxmYl9jcmVhdGUoZGV2LCB3aWR0aCwgaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCAmaW50ZWxfZmIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW5ld19mYiA9IDE7CisJfSBlbHNlIHsKKwkJZmIgPSBpbnRlbF9jcnRjLT5tb2RlX3NldC5mYjsKKwkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7CisJCWlmICgoaW50ZWxfZmItPmJhc2Uud2lkdGggPCB3aWR0aCkgfHwgKGludGVsX2ZiLT5iYXNlLmhlaWdodCA8IGhlaWdodCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmZvID0gaW50ZWxfZmItPmJhc2UuZmJkZXY7CisJcGFyID0gaW5mby0+cGFyOworCisJbW9kZXNldCA9ICZpbnRlbF9jcnRjLT5tb2RlX3NldDsKKwltb2Rlc2V0LT5mYiA9ICZpbnRlbF9mYi0+YmFzZTsKKwljb25uX2NvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikKKwkJCWlmIChjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gbW9kZXNldC0+Y3J0YykgeworCQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbY29ubl9jb3VudF0gPSBjb25uZWN0b3I7CisJCQkJY29ubl9jb3VudCsrOworCQkJCWlmIChjb25uX2NvdW50ID4gSU5URUxGQl9DT05OX0xJTUlUKQorCQkJCQlCVUcoKTsKKwkJCX0KKwl9CisKKwlmb3IgKGkgPSBjb25uX2NvdW50OyBpIDwgSU5URUxGQl9DT05OX0xJTUlUOyBpKyspCisJCW1vZGVzZXQtPmNvbm5lY3RvcnNbaV0gPSBOVUxMOworCisJcGFyLT5jcnRjX2lkc1swXSA9IGNydGMtPmJhc2UuaWQ7CisKKwltb2Rlc2V0LT5udW1fY29ubmVjdG9ycyA9IGNvbm5fY291bnQ7CisJaWYgKG1vZGVzZXQtPm1vZGUgIT0gbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlKQorCQltb2Rlc2V0LT5tb2RlID0gbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlOworCisJcGFyLT5jcnRjX2NvdW50ID0gMTsKKworCWlmIChuZXdfZmIpIHsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0gLTE7CisJCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJaW50ZWxmYl9zZXRfcGFyKGluZm8pOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKKwkgICAgICAgaW5mby0+Zml4LmlkKTsKKworCS8qIFN3aXRjaCBiYWNrIHRvIGtlcm5lbCBjb25zb2xlIG9uIHBhbmljICovCisJa2VybmVsZmJfbW9kZSA9ICptb2Rlc2V0OworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljZWQpOworCXByaW50ayhLRVJOX0lORk8gInJlZ2lzdGVyZWQgcGFuaWMgbm90aWZpZXJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxmYl9tdWx0aV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWludCByZXQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJcmV0ID0gaW50ZWxmYl9tdWx0aV9mYl9wcm9iZV9jcnRjKGRldiwgY3J0Yyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGludGVsZmJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJdW5zaWduZWQgaW50IGZiX3dpZHRoID0gKHVuc2lnbmVkKS0xLCBmYl9oZWlnaHQgPSAodW5zaWduZWQpLTE7CisJdW5zaWduZWQgaW50IHN1cmZhY2Vfd2lkdGggPSAwLCBzdXJmYWNlX2hlaWdodCA9IDA7CisJaW50IG5ld19mYiA9IDA7CisJaW50IGNydGNfY291bnQgPSAwOworCWludCByZXQsIGksIGNvbm5fY291bnQgPSAwOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGludGVsZmJfcGFyICpwYXI7CisJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IE5VTEw7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwkvKiBHZXQgYSBjb3VudCBvZiBjcnRjcyBub3cgaW4gdXNlIGFuZCBuZXcgbWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpZiAoIWRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpCisJCQljb250aW51ZTsKKworCQljcnRjX2NvdW50Kys7CisJCWlmICghY3J0Yy0+ZGVzaXJlZF9tb2RlKQorCQkJY29udGludWU7CisKKwkJLyogU21hbGxlc3QgbW9kZSBkZXRlcm1pbmVzIGNvbnNvbGUgc2l6ZS4uLiAqLworCQlpZiAoY3J0Yy0+ZGVzaXJlZF9tb2RlLT5oZGlzcGxheSA8IGZiX3dpZHRoKQorCQkJZmJfd2lkdGggPSBjcnRjLT5kZXNpcmVkX21vZGUtPmhkaXNwbGF5OworCisJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUtPnZkaXNwbGF5IDwgZmJfaGVpZ2h0KQorCQkJZmJfaGVpZ2h0ID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheTsKKworCQkvKiAuLi4gYnV0IGxhcmdlc3QgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGRpbWVuc2lvbnMgKi8KKwkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXkgPiBzdXJmYWNlX3dpZHRoKQorCQkJc3VyZmFjZV93aWR0aCA9IGNydGMtPmRlc2lyZWRfbW9kZS0+aGRpc3BsYXk7CisKKwkJaWYgKGNydGMtPmRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgPiBzdXJmYWNlX2hlaWdodCkKKwkJCXN1cmZhY2VfaGVpZ2h0ID0gY3J0Yy0+ZGVzaXJlZF9tb2RlLT52ZGlzcGxheTsKKwl9CisKKwlpZiAoY3J0Y19jb3VudCA9PSAwIHx8IGZiX3dpZHRoID09IC0xIHx8IGZiX2hlaWdodCA9PSAtMSkgeworCQkvKiBobW0gZXZlcnlvbmUgd2VudCBhd2F5IC0gYXNzdW1lIFZHQSBjYWJsZSBqdXN0IGZlbGwgb3V0CisJCSAgIGFuZCB3aWxsIGNvbWUgYmFjayBsYXRlci4gKi8KKwkJRFJNX0RFQlVHKCJubyBDUlRDcyBhdmFpbGFibGU/XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisvL2ZhaWwKKwkvKiBGaW5kIHRoZSBmYiBmb3Igb3VyIG5ldyBjb25maWcgKi8KKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCkpIHsKKwkJRFJNX0RFQlVHKCJjcmVhdGluZyBuZXcgZmIgKGNvbnNvbGUgc2l6ZSAlZHglZCwgIgorCQkJICAiYnVmZmVyIHNpemUgJWR4JWQpXG4iLCBmYl93aWR0aCwgZmJfaGVpZ2h0LAorCQkJICBzdXJmYWNlX3dpZHRoLCBzdXJmYWNlX2hlaWdodCk7CisJCXJldCA9IGludGVsZmJfY3JlYXRlKGRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwKKwkJCQkgICAgIHN1cmZhY2VfaGVpZ2h0LCAmaW50ZWxfZmIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW5ld19mYiA9IDE7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisKKwkJZmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXYtPm1vZGVfY29uZmlnLmZiX2tlcm5lbF9saXN0LAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIsIGZpbHBfaGVhZCk7CisJCWludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOworCisJCS8qIGlmIHNvbWVvbmUgaG90cGx1Z3Mgc29tZXRoaW5nIGJpZ2dlciB0aGFuIHdlIGhhdmUgYWxyZWFkeQorCQkgKiBhbGxvY2F0ZWQsIHdlIGFyZSBwd25lZC4gIEFzIHJlYWxseSB3ZSBjYW4ndCByZXNpemUgYW4KKwkJICogZmJkZXYgdGhhdCBpcyBpbiB0aGUgd2lsZCBjdXJyZW50bHkgZHVlIHRvIGZiZGV2IG5vdCByZWFsbHkKKwkJICogYmVpbmcgZGVzaWduZWQgZm9yIHRoZSBsb3dlciBsYXllcnMgbW92aW5nIHN0dWZmIGFyb3VuZAorCQkgKiB1bmRlciBpdC4KKwkJICogLSBzbyBpbiB0aGUgZ3JhbmQgc3R5bGUgb2YgdGhpbmdzIC0gcHVudC4KKwkJICovCisJCWlmICgoZmItPndpZHRoIDwgc3VyZmFjZV93aWR0aCkgfHwKKwkJICAgIChmYi0+aGVpZ2h0IDwgc3VyZmFjZV9oZWlnaHQpKSB7CisJCQlEUk1fRVJST1IoImZiIG5vdCBsYXJnZSBlbm91Z2ggZm9yIGNvbnNvbGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisvLyBmYWlsCisKKwlpbmZvID0gaW50ZWxfZmItPmJhc2UuZmJkZXY7CisJcGFyID0gaW5mby0+cGFyOworCisJY3J0Y19jb3VudCA9IDA7CisJLyoKKwkgKiBGb3IgZWFjaCBDUlRDLCBzZXQgdXAgdGhlIGNvbm5lY3RvciBsaXN0IGZvciB0aGUgQ1JUQydzIG1vZGUKKwkgKiBzZXQgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkJbW9kZXNldCA9ICZpbnRlbF9jcnRjLT5tb2RlX3NldDsKKwkJbW9kZXNldC0+ZmIgPSAmaW50ZWxfZmItPmJhc2U7CisJCWNvbm5fY291bnQgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsCisJCQkJICAgIGhlYWQpIHsKKwkJCWlmICghY29ubmVjdG9yLT5lbmNvZGVyKQorCQkJCWNvbnRpbnVlOworCisJCQlpZihjb25uZWN0b3ItPmVuY29kZXItPmNydGMgPT0gbW9kZXNldC0+Y3J0YykgeworCQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbY29ubl9jb3VudCsrXSA9IGNvbm5lY3RvcjsKKwkJCQlpZiAoY29ubl9jb3VudCA+IElOVEVMRkJfQ09OTl9MSU1JVCkKKwkJCQkJQlVHKCk7CisJCQl9CisJCX0KKworCQkvKiBaZXJvIG91dCByZW1haW5pbmcgY29ubmVjdG9yIHBvaW50ZXJzICovCisJCWZvciAoaSA9IGNvbm5fY291bnQ7IGkgPCBJTlRFTEZCX0NPTk5fTElNSVQ7IGkrKykKKwkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbaV0gPSBOVUxMOworCisJCXBhci0+Y3J0Y19pZHNbY3J0Y19jb3VudCsrXSA9IGNydGMtPmJhc2UuaWQ7CisKKwkJbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMgPSBjb25uX2NvdW50OworCQlpZiAobW9kZXNldC0+bW9kZSAhPSBtb2Rlc2V0LT5jcnRjLT5kZXNpcmVkX21vZGUpCisJCQltb2Rlc2V0LT5tb2RlID0gbW9kZXNldC0+Y3J0Yy0+ZGVzaXJlZF9tb2RlOworCX0KKwlwYXItPmNydGNfY291bnQgPSBjcnRjX2NvdW50OworCisJaWYgKG5ld19mYikgeworCQlpbmZvLT52YXIucGl4Y2xvY2sgPSAtMTsKKwkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQlpbnRlbGZiX3NldF9wYXIoaW5mbyk7CisKKwlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAorCSAgICAgICBpbmZvLT5maXguaWQpOworCisJLyogU3dpdGNoIGJhY2sgdG8ga2VybmVsIGNvbnNvbGUgb24gcGFuaWMgKi8KKwlrZXJuZWxmYl9tb2RlID0gKm1vZGVzZXQ7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNlZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmVnaXN0ZXJlZCBwYW5pYyBub3RpZmllclxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbnRlbGZiX3Jlc3RvcmUgLSByZXN0b3JlIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIChrZXJuZWwpIGNvbmZpZworICoKKyAqIFJlc3RvcmUncyB0aGUga2VybmVsJ3MgZmJjb24gbW9kZSwgdXNlZCBmb3IgbGFzdGNsb3NlICYgcGFuaWMgcGF0aHMuCisgKi8KK3ZvaWQgaW50ZWxmYl9yZXN0b3JlKHZvaWQpCit7CisJZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcoJmtlcm5lbGZiX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbGZiX3N5c3JxKGludCBkdW1teTEsIHN0cnVjdCB0dHlfc3RydWN0ICpkdW1teTMpCit7CisgICAgICAgIGludGVsZmJfcmVzdG9yZSgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9pbnRlbGZiX3Jlc3RvcmVfb3AgPSB7CisgICAgICAgIC5oYW5kbGVyID0gaW50ZWxmYl9zeXNycSwKKyAgICAgICAgLmhlbHBfbXNnID0gImZvcmNlIGZiIiwKKyAgICAgICAgLmFjdGlvbl9tc2cgPSAiZm9yY2UgcmVzdG9yZSBvZiBmYiBjb25zb2xlIiwKK307CisKK2ludCBpbnRlbGZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCURSTV9ERUJVRygiXG4iKTsKKworCS8qIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBpbiB0aGUgbG93ZXIgbGV2ZWxzIG9mIGhlbGwgLSBkZWFsIHdpdGggaXQKKwkgICBoZXJlICovCisKKwkvKiB0d28gbW9kZXMgOiBhKSAxIGZiIHRvIHJ1bGUgYWxsIGNydGNzLgorCSAgICAgICAgICAgICAgIGIpIG9uZSBmYiBwZXIgY3J0Yy4KKwkgICB0d28gYWN0aW9ucyAxKSBuZXcgY29ubmVjdGVkIGRldmljZQorCSAgICAgICAgICAgICAgIDIpIGRldmljZSByZW1vdmVkLgorCSAgIGNhc2UgYS8xIDogaWYgdGhlIGZiIHN1cmZhY2UgaXNuJ3QgYmlnIGVub3VnaCAtIHJlc2l6ZSB0aGUgc3VyZmFjZSBmYi4KKwkgICAgICAgICAgICAgIGlmIHRoZSBmYiBzaXplIGlzbid0IGJpZyBlbm91Z2ggLSByZXNpemUgZmIgaW50byBzdXJmYWNlLgorCQkgICAgICBpZiBldmVyeXRoaW5nIGJpZyBlbm91Z2ggY29uZmlndXJlIHRoZSBuZXcgY3J0Yy9ldGMuCisJICAgY2FzZSBhLzIgOiB1bmRvIHRoZSBjb25maWd1cmF0aW9uCisJICAgICAgICAgICAgICBwb3NzaWJseSByZXNpemUgZG93biB0aGUgZmIgdG8gZml0IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgY2FzZSBiLzEgOiBzZWUgaWYgaXQgaXMgb24gYSBuZXcgY3J0YyAtIHNldHVwIGEgbmV3IGZiIGFuZCBhZGQgaXQuCisJICAgY2FzZSBiLzIgOiB0ZWFyZG93biB0aGUgbmV3IGZiLgorCSovCisKKwkvKiBtb2RlIGEgZmlyc3QgKi8KKwkvKiBzZWFyY2ggZm9yIGFuIGZiICovCisJaWYgKGk5MTVfZmJwZXJjcnRjID09IDEpIHsKKwkJcmV0ID0gaW50ZWxmYl9tdWx0aV9mYl9wcm9iZShkZXYpOworCX0gZWxzZSB7CisJCXJldCA9IGludGVsZmJfc2luZ2xlX2ZiX3Byb2JlKGRldik7CisJfQorCisJcmVnaXN0ZXJfc3lzcnFfa2V5KCdnJywgJnN5c3JxX2ludGVsZmJfcmVzdG9yZV9vcCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpbnRlbGZiX3Byb2JlKTsKKworaW50IGludGVsZmJfcmVtb3ZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCisJaWYgKCFmYikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvID0gZmItPmZiZGV2OworCisJaWYgKGluZm8pIHsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY2VkKTsKKwltZW1zZXQoJmtlcm5lbGZiX21vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfc2V0KSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGludGVsZmJfcmVtb3ZlKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTJmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqIENvcHlyaWdodCDCqSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICoJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKy8qCisgKiBJbnRlbCBHUElPIGFjY2VzcyBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIEkyQ19SSVNFRkFMTF9USU1FIDIwCisKK3N0YXRpYyBpbnQgZ2V0X2Nsb2NrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGludGVsX2kyY19jaGFuICpjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgdmFsOworCisJdmFsID0gSTkxNV9SRUFEKGNoYW4tPnJlZyk7CisJcmV0dXJuICgodmFsICYgR1BJT19DTE9DS19WQUxfSU4pICE9IDApOworfQorCitzdGF0aWMgaW50IGdldF9kYXRhKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGludGVsX2kyY19jaGFuICpjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjaGFuLT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgdmFsOworCisJdmFsID0gSTkxNV9SRUFEKGNoYW4tPnJlZyk7CisJcmV0dXJuICgodmFsICYgR1BJT19EQVRBX1ZBTF9JTikgIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jbG9jayh2b2lkICpkYXRhLCBpbnQgc3RhdGVfaGlnaCkKK3sKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kcm1fZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNoYW4tPmRybV9kZXYtPmRldl9wcml2YXRlOworCXUzMiByZXNlcnZlZCA9IDAsIGNsb2NrX2JpdHM7CisKKwkvKiBPbiBtb3N0IGNoaXBzLCB0aGVzZSBiaXRzIG11c3QgYmUgcHJlc2VydmVkIGluIHNvZnR3YXJlLiAqLworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCXJlc2VydmVkID0gSTkxNV9SRUFEKGNoYW4tPnJlZykgJiAoR1BJT19EQVRBX1BVTExVUF9ESVNBQkxFIHwKKwkJCQkJCSAgIEdQSU9fQ0xPQ0tfUFVMTFVQX0RJU0FCTEUpOworCisJaWYgKHN0YXRlX2hpZ2gpCisJCWNsb2NrX2JpdHMgPSBHUElPX0NMT0NLX0RJUl9JTiB8IEdQSU9fQ0xPQ0tfRElSX01BU0s7CisJZWxzZQorCQljbG9ja19iaXRzID0gR1BJT19DTE9DS19ESVJfT1VUIHwgR1BJT19DTE9DS19ESVJfTUFTSyB8CisJCQlHUElPX0NMT0NLX1ZBTF9NQVNLOworCUk5MTVfV1JJVEUoY2hhbi0+cmVnLCByZXNlcnZlZCB8IGNsb2NrX2JpdHMpOworCXVkZWxheShJMkNfUklTRUZBTExfVElNRSk7IC8qIHdhaXQgZm9yIHRoZSBsaW5lIHRvIGNoYW5nZSBzdGF0ZSAqLworfQorCitzdGF0aWMgdm9pZCBzZXRfZGF0YSh2b2lkICpkYXRhLCBpbnQgc3RhdGVfaGlnaCkKK3sKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kcm1fZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNoYW4tPmRybV9kZXYtPmRldl9wcml2YXRlOworCXUzMiByZXNlcnZlZCA9IDAsIGRhdGFfYml0czsKKworCS8qIE9uIG1vc3QgY2hpcHMsIHRoZXNlIGJpdHMgbXVzdCBiZSBwcmVzZXJ2ZWQgaW4gc29mdHdhcmUuICovCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwkJcmVzZXJ2ZWQgPSBJOTE1X1JFQUQoY2hhbi0+cmVnKSAmIChHUElPX0RBVEFfUFVMTFVQX0RJU0FCTEUgfAorCQkJCQkJICAgR1BJT19DTE9DS19QVUxMVVBfRElTQUJMRSk7CisKKwlpZiAoc3RhdGVfaGlnaCkKKwkJZGF0YV9iaXRzID0gR1BJT19EQVRBX0RJUl9JTiB8IEdQSU9fREFUQV9ESVJfTUFTSzsKKwllbHNlCisJCWRhdGFfYml0cyA9IEdQSU9fREFUQV9ESVJfT1VUIHwgR1BJT19EQVRBX0RJUl9NQVNLIHwKKwkJCUdQSU9fREFUQV9WQUxfTUFTSzsKKworCUk5MTVfV1JJVEUoY2hhbi0+cmVnLCByZXNlcnZlZCB8IGRhdGFfYml0cyk7CisJdWRlbGF5KEkyQ19SSVNFRkFMTF9USU1FKTsgLyogd2FpdCBmb3IgdGhlIGxpbmUgdG8gY2hhbmdlIHN0YXRlICovCit9CisKKy8qKgorICogaW50ZWxfaTJjX2NyZWF0ZSAtIGluc3RhbnRpYXRlIGFuIEludGVsIGkyYyBidXMgdXNpbmcgdGhlIHNwZWNpZmllZCBHUElPIHJlZworICogQGRldjogRFJNIGRldmljZQorICogQG91dHB1dDogZHJpdmVyIHNwZWNpZmljIG91dHB1dCBkZXZpY2UKKyAqIEByZWc6IEdQSU8gcmVnIHRvIHVzZQorICogQG5hbWU6IG5hbWUgZm9yIHRoaXMgYnVzCisgKgorICogQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgbmV3IGkyYyBidXMgd2l0aCB0aGUgTGludXggaTJjIGxheWVyLCBmb3IgdXNlCisgKiBpbiBvdXRwdXQgcHJvYmluZyBhbmQgY29udHJvbCAoZS5nLiBEREMgb3IgU0RWTyBjb250cm9sIGZ1bmN0aW9ucykuCisgKgorICogUG9zc2libGUgdmFsdWVzIGZvciBAcmVnIGluY2x1ZGU6CisgKiAgICVHUElPQQorICogICAlR1BJT0IKKyAqICAgJUdQSU9DCisgKiAgICVHUElPRAorICogICAlR1BJT0UKKyAqICAgJUdQSU9GCisgKiAgICVHUElPRworICogICAlR1BJT0gKKyAqIHNlZSBQUk0gZm9yIGRldGFpbHMgb24gaG93IHRoZXNlIGRpZmZlcmVudCBidXNzZXMgYXJlIHVzZWQuCisgKi8KK3N0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaW50ZWxfaTJjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCB1MzIgcmVnLAorCQkJCQljb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqY2hhbjsKKworCWNoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW4pCisJCWdvdG8gb3V0X2ZyZWU7CisKKwljaGFuLT5kcm1fZGV2ID0gZGV2OworCWNoYW4tPnJlZyA9IHJlZzsKKwlzbnByaW50ZihjaGFuLT5hZGFwdGVyLm5hbWUsIEkyQ19OQU1FX1NJWkUsICJpbnRlbCBkcm0gJXMiLCBuYW1lKTsKKwljaGFuLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisjaWZuZGVmIEkyQ19IV19CX0lOVEVMRkIKKyNkZWZpbmUgSTJDX0hXX0JfSU5URUxGQiBJMkNfSFdfQl9JODEwCisjZW5kaWYKKwljaGFuLT5hZGFwdGVyLmlkID0gSTJDX0hXX0JfSU5URUxGQjsKKwljaGFuLT5hZGFwdGVyLmFsZ29fZGF0YQk9ICZjaGFuLT5hbGdvOworCWNoYW4tPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPnBkZXYtPmRldjsKKwljaGFuLT5hbGdvLnNldHNkYSA9IHNldF9kYXRhOworCWNoYW4tPmFsZ28uc2V0c2NsID0gc2V0X2Nsb2NrOworCWNoYW4tPmFsZ28uZ2V0c2RhID0gZ2V0X2RhdGE7CisJY2hhbi0+YWxnby5nZXRzY2wgPSBnZXRfY2xvY2s7CisJY2hhbi0+YWxnby51ZGVsYXkgPSAyMDsKKwljaGFuLT5hbGdvLnRpbWVvdXQgPSB1c2Vjc190b19qaWZmaWVzKDIyMDApOworCWNoYW4tPmFsZ28uZGF0YSA9IGNoYW47CisKKwlpMmNfc2V0X2FkYXBkYXRhKCZjaGFuLT5hZGFwdGVyLCBjaGFuKTsKKworCWlmKGkyY19iaXRfYWRkX2J1cygmY2hhbi0+YWRhcHRlcikpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwkvKiBKSko6ICByYWlzZSBTQ0wgYW5kIFNEQT8gKi8KKwlzZXRfZGF0YShjaGFuLCAxKTsKKwlzZXRfY2xvY2soY2hhbiwgMSk7CisJdWRlbGF5KDIwKTsKKworCXJldHVybiBjaGFuOworCitvdXRfZnJlZToKKwlrZnJlZShjaGFuKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBpbnRlbF9pMmNfZGVzdHJveSAtIHVucmVnaXN0ZXIgYW5kIGZyZWUgaTJjIGJ1cyByZXNvdXJjZXMKKyAqIEBvdXRwdXQ6IGNoYW5uZWwgdG8gZnJlZQorICoKKyAqIFVucmVnaXN0ZXIgdGhlIGFkYXB0ZXIgZnJvbSB0aGUgaTJjIGxheWVyLCB0aGVuIGZyZWUgdGhlIHN0cnVjdHVyZS4KKyAqLwordm9pZCBpbnRlbF9pMmNfZGVzdHJveShzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmNoYW4pCit7CisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmNoYW4tPmFkYXB0ZXIpOworCWtmcmVlKGNoYW4pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZWNmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICogICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqICAgICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKyNpbmNsdWRlICJkcm1fZWRpZC5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworLyoqCisgKiBTZXRzIHRoZSBiYWNrbGlnaHQgbGV2ZWwuCisgKgorICogXHBhcmFtIGxldmVsIGJhY2tsaWdodCBsZXZlbCwgZnJvbSAwIHRvIGludGVsX2x2ZHNfZ2V0X21heF9iYWNrbGlnaHQoKS4KKyAqLworc3RhdGljIHZvaWQgaW50ZWxfbHZkc19zZXRfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBibGNfcHdtX2N0bDsKKworCWJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKSAmIH5CQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIChibGNfcHdtX2N0bCB8CisJCQkJIChsZXZlbCA8PCBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVCkpKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGxldmVsIG9mIHRoZSBiYWNrbGlnaHQgZHV0eSBjeWNsZSBmaWVsZC4KKyAqLworc3RhdGljIHUzMiBpbnRlbF9sdmRzX2dldF9tYXhfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldHVybiAoKEk5MTVfUkVBRChCTENfUFdNX0NUTCkgJiBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0spID4+CisJCUJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQpICogMjsKK30KKworLyoqCisgKiBTZXRzIHRoZSBwb3dlciBzdGF0ZSBmb3IgdGhlIHBhbmVsLgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9sdmRzX3NldF9wb3dlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIG9uKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHBwX3N0YXR1czsKKworCWlmIChvbikgeworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIEk5MTVfUkVBRChQUF9DT05UUk9MKSB8CisJCQkgICBQT1dFUl9UQVJHRVRfT04pOworCQlkbyB7CisJCQlwcF9zdGF0dXMgPSBJOTE1X1JFQUQoUFBfU1RBVFVTKTsKKwkJfSB3aGlsZSAoKHBwX3N0YXR1cyAmIFBQX09OKSA9PSAwKTsKKworCQlpbnRlbF9sdmRzX3NldF9iYWNrbGlnaHQoZGV2LCBkZXZfcHJpdi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUpOworCX0gZWxzZSB7CisJCWludGVsX2x2ZHNfc2V0X2JhY2tsaWdodChkZXYsIDApOworCisJCUk5MTVfV1JJVEUoUFBfQ09OVFJPTCwgSTkxNV9SRUFEKFBQX0NPTlRST0wpICYKKwkJCSAgIH5QT1dFUl9UQVJHRVRfT04pOworCQlkbyB7CisJCQlwcF9zdGF0dXMgPSBJOTE1X1JFQUQoUFBfU1RBVFVTKTsKKwkJfSB3aGlsZSAocHBfc3RhdHVzICYgUFBfT04pOworCX0KK30KKworc3RhdGljIHZvaWQgaW50ZWxfbHZkc19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKworCWlmIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pCisJCWludGVsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgdHJ1ZSk7CisJZWxzZQorCQlpbnRlbF9sdmRzX3NldF9wb3dlcihkZXYsIGZhbHNlKTsKKworCS8qIFhYWDogV2UgbmV2ZXIgcG93ZXIgZG93biB0aGUgTFZEUyBwYWlycy4gKi8KK30KKworc3RhdGljIHZvaWQgaW50ZWxfbHZkc19zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+c2F2ZVBQX09OID0gSTkxNV9SRUFEKFBQX09OX0RFTEFZUyk7CisJZGV2X3ByaXYtPnNhdmVQUF9PRkYgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJZGV2X3ByaXYtPnNhdmVQUF9DT05UUk9MID0gSTkxNV9SRUFEKFBQX0NPTlRST0wpOworCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKwlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlkZXZfcHJpdi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPSAoZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCAmCisJCQkJICAgICAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0spOworCisJLyoKKwkgKiBJZiB0aGUgbGlnaHQgaXMgb2ZmIGF0IHNlcnZlciBzdGFydHVwLCBqdXN0IG1ha2UgaXQgZnVsbCBicmlnaHRuZXNzCisJICovCisJaWYgKGRldl9wcml2LT5iYWNrbGlnaHRfZHV0eV9jeWNsZSA9PSAwKQorCQlkZXZfcHJpdi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPQorCQkJaW50ZWxfbHZkc19nZXRfbWF4X2JhY2tsaWdodChkZXYpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9sdmRzX3Jlc3RvcmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OKTsKKwlJOTE1X1dSSVRFKFBQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGKTsKKwlJOTE1X1dSSVRFKFBQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJSTkxNV9XUklURShQUF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wpOworCWlmIChkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgJiBQT1dFUl9UQVJHRVRfT04pCisJCWludGVsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgdHJ1ZSk7CisJZWxzZQorCQlpbnRlbF9sdmRzX3NldF9wb3dlcihkZXYsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBpbnRlbF9sdmRzX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmZpeGVkX21vZGUgPSBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZTsKKworCWlmIChmaXhlZF9tb2RlKQl7CisJCWlmIChtb2RlLT5oZGlzcGxheSA+IGZpeGVkX21vZGUtPmhkaXNwbGF5KQorCQkJcmV0dXJuIE1PREVfUEFORUw7CisJCWlmIChtb2RlLT52ZGlzcGxheSA+IGZpeGVkX21vZGUtPnZkaXNwbGF5KQorCQkJcmV0dXJuIE1PREVfUEFORUw7CisJfQorCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2x2ZHNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJc3RydWN0IGRybV9lbmNvZGVyICp0bXBfZW5jb2RlcjsKKworCS8qIFNob3VsZCBuZXZlciBoYXBwZW4hISAqLworCWlmICghSVNfSTk2NUcoZGV2KSAmJiBpbnRlbF9jcnRjLT5waXBlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXBwb3J0IExWRFMgb24gcGlwZSBBXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFNob3VsZCBuZXZlciBoYXBwZW4hISAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlpZiAodG1wX2VuY29kZXIgIT0gZW5jb2RlciAmJiB0bXBfZW5jb2Rlci0+Y3J0YyA9PSBlbmNvZGVyLT5jcnRjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGVuYWJsZSBMVkRTIGFuZCBhbm90aGVyICIKKwkJCSAgICAgICAiZW5jb2RlciBvbiB0aGUgc2FtZSBwaXBlXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSB0aW1pbmdzIGZyb20gdGhlIEJJT1MgZm9yIHRoZSBwYW5lbCwgcHV0IHRoZW0gaW4KKwkgKiB0byB0aGUgYWRqdXN0ZWQgbW9kZS4gIFRoZSBDUlRDIHdpbGwgYmUgc2V0IHVwIGZvciB0aGlzIG1vZGUsCisJICogd2l0aCB0aGUgcGFuZWwgc2NhbGluZyBzZXQgdXAgdG8gc291cmNlIGZyb20gdGhlIEgvVkRpc3BsYXkKKwkgKiBvZiB0aGUgb3JpZ2luYWwgbW9kZS4KKwkgKi8KKwlpZiAoZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUgIT0gTlVMTCkgeworCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT5oZGlzcGxheTsKKwkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPQorCQkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX3N0YXJ0OworCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPQorCQkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhzeW5jX2VuZDsKKwkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmh0b3RhbDsKKwkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZS0+dmRpc3BsYXk7CisJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0KKwkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52c3luY19zdGFydDsKKwkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0KKwkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52c3luY19lbmQ7CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52dG90YWw7CisJCWFkanVzdGVkX21vZGUtPmNsb2NrID0gZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmNsb2NrOworCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisJfQorCisJLyoKKwkgKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQorCSAqIHBhbmVscyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQorCSAqIHVzZXIncyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgorCSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJZGV2X3ByaXYtPmJhY2tsaWdodF9kdXR5X2N5Y2xlID0gKGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgJgorCQkJCSAgICAgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLKTsKKworCWludGVsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9sdmRzX2NvbW1pdCggc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPT0gMCkKKwkJZGV2X3ByaXYtPmJhY2tsaWdodF9kdXR5X2N5Y2xlID0KKwkJCWludGVsX2x2ZHNfZ2V0X21heF9iYWNrbGlnaHQoZGV2KTsKKworCWludGVsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2x2ZHNfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJdTMyIHBmaXRfY29udHJvbDsKKworCS8qCisJICogVGhlIExWRFMgcGluIHBhaXIgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiB0dXJuZWQgb24gaW4gdGhlCisJICogaW50ZWxfY3J0Y19tb2RlX3NldCBzaW5jZSBpdCBoYXMgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIERQTEwKKwkgKiBzZXR0aW5ncy4KKwkgKi8KKworCS8qCisJICogRW5hYmxlIGF1dG9tYXRpYyBwYW5lbCBzY2FsaW5nIHNvIHRoYXQgbm9uLW5hdGl2ZSBtb2RlcyBmaWxsIHRoZQorCSAqIHNjcmVlbi4gIFNob3VsZCBiZSBlbmFibGVkIGJlZm9yZSB0aGUgcGlwZSBpcyBlbmFibGVkLCBhY2NvcmRpbmcgdG8KKwkgKiByZWdpc3RlciBkZXNjcmlwdGlvbiBhbmQgUFJNLgorCSAqLworCWlmIChtb2RlLT5oZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSB8fAorCSAgICBtb2RlLT52ZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSkKKwkJcGZpdF9jb250cm9sID0gKFBGSVRfRU5BQkxFIHwgVkVSVF9BVVRPX1NDQUxFIHwKKwkJCQlIT1JJWl9BVVRPX1NDQUxFIHwgVkVSVF9JTlRFUlBfQklMSU5FQVIgfAorCQkJCUhPUklaX0lOVEVSUF9CSUxJTkVBUik7CisJZWxzZQorCQlwZml0X2NvbnRyb2wgPSAwOworCisJaWYgKCFJU19JOTY1RyhkZXYpKSB7CisJCWlmIChkZXZfcHJpdi0+cGFuZWxfd2FudHNfZGl0aGVyKQorCQkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKKwl9CisJZWxzZQorCQlwZml0X2NvbnRyb2wgfD0gaW50ZWxfY3J0Yy0+cGlwZSA8PCBQRklUX1BJUEVfU0hJRlQ7CisKKwlJOTE1X1dSSVRFKFBGSVRfQ09OVFJPTCwgcGZpdF9jb250cm9sKTsKK30KKworLyoqCisgKiBEZXRlY3QgdGhlIExWRFMgY29ubmVjdGlvbi4KKyAqCisgKiBUaGlzIGFsd2F5cyByZXR1cm5zIENPTk5FQ1RPUl9TVEFUVVNfQ09OTkVDVEVELiAgVGhpcyBjb25uZWN0b3Igc2hvdWxkIG9ubHkgaGF2ZQorICogYmVlbiBzZXQgdXAgaWYgdGhlIExWRFMgd2FzIGFjdHVhbGx5IGNvbm5lY3RlZCBhbnl3YXkuCisgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGludGVsX2x2ZHNfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCisvKioKKyAqIFJldHVybiB0aGUgbGlzdCBvZiBEREMgbW9kZXMgaWYgYXZhaWxhYmxlLCBvciB0aGUgQklPUyBmaXhlZCBtb2RlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBpbnRlbF9sdmRzX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQgPSAwOworCisJcmV0ID0gaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIERpZG4ndCBnZXQgYW4gRURJRCwgc28KKwkgKiBTZXQgd2lkZSBzeW5jIHJhbmdlcyBzbyB3ZSBnZXQgYWxsIG1vZGVzCisJICogaGFuZGVkIHRvIHZhbGlkX21vZGUgZm9yIGNoZWNraW5nCisJICovCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ubWluX3ZmcmVxID0gMDsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5tYXhfdmZyZXEgPSAyMDA7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ubWluX2hmcmVxID0gMDsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5tYXhfaGZyZXEgPSAyMDA7CisKKwlpZiAoZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUgIT0gTlVMTCkgeworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUpOworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW50ZWxfbHZkc19kZXN0cm95IC0gdW5yZWdpc3RlciBhbmQgZnJlZSBMVkRTIHN0cnVjdHVyZXMKKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0byBmcmVlCisgKgorICogVW5yZWdpc3RlciB0aGUgRERDIGJ1cyBmb3IgdGhpcyBjb25uZWN0b3IgdGhlbiBmcmVlIHRoZSBkcml2ZXIgcHJpdmF0ZQorICogc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9sdmRzX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMpCisJCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+ZGRjX2J1cyk7CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBpbnRlbF9sdmRzX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGludGVsX2x2ZHNfZHBtcywKKwkubW9kZV9maXh1cCA9IGludGVsX2x2ZHNfbW9kZV9maXh1cCwKKwkucHJlcGFyZSA9IGludGVsX2x2ZHNfcHJlcGFyZSwKKwkubW9kZV9zZXQgPSBpbnRlbF9sdmRzX21vZGVfc2V0LAorCS5jb21taXQgPSBpbnRlbF9sdmRzX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW50ZWxfbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBpbnRlbF9sdmRzX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGludGVsX2x2ZHNfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gaW50ZWxfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX2x2ZHNfY29ubmVjdG9yX2Z1bmNzID0geworCS5zYXZlID0gaW50ZWxfbHZkc19zYXZlLAorCS5yZXN0b3JlID0gaW50ZWxfbHZkc19yZXN0b3JlLAorCS5kZXRlY3QgPSBpbnRlbF9sdmRzX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGludGVsX2x2ZHNfZGVzdHJveSwKK307CisKKworc3RhdGljIHZvaWQgaW50ZWxfbHZkc19lbmNfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBpbnRlbF9sdmRzX2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGludGVsX2x2ZHNfZW5jX2Rlc3Ryb3ksCit9OworCisKKworLyoqCisgKiBpbnRlbF9sdmRzX2luaXQgLSBzZXR1cCBMVkRTIGNvbm5lY3RvcnMgb24gdGhpcyBkZXZpY2UKKyAqIEBkZXY6IGRybSBkZXZpY2UKKyAqCisgKiBDcmVhdGUgdGhlIGNvbm5lY3RvciwgcmVnaXN0ZXIgdGhlIExWRFMgRERDIGJ1cywgYW5kIHRyeSB0byBmaWd1cmUgb3V0IHdoYXQKKyAqIG1vZGVzIHdlIGNhbiBkaXNwbGF5IG9uIHRoZSBMVkRTIHBhbmVsIChpZiBwcmVzZW50KS4KKyAqLwordm9pZCBpbnRlbF9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqc2NhbjsgLyogKm1vZGVzLCAqYmlvc19tb2RlOyAqLworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwl1MzIgbHZkczsKKwlpbnQgcGlwZTsKKworCWludGVsX291dHB1dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9vdXRwdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWludGVsX291dHB1dCkgeworCQlyZXR1cm47CisJfQorCisJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKKwllbmNvZGVyID0gJmludGVsX291dHB1dC0+ZW5jOworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZpbnRlbF9vdXRwdXQtPmJhc2UsICZpbnRlbF9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmaW50ZWxfb3V0cHV0LT5lbmMsICZpbnRlbF9sdmRzX2VuY19mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0xWRFMpOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpbnRlbF9vdXRwdXQtPmJhc2UsICZpbnRlbF9vdXRwdXQtPmVuYyk7CisJaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX0xWRFM7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZpbnRlbF9sdmRzX2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CisJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IGZhbHNlOworCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CisKKworCS8qCisJICogTFZEUyBkaXNjb3Zlcnk6CisJICogMSkgY2hlY2sgZm9yIEVESUQgb24gRERDCisJICogMikgY2hlY2sgZm9yIFZCVCBkYXRhCisJICogMykgY2hlY2sgdG8gc2VlIGlmIExWRFMgaXMgYWxyZWFkeSBvbgorCSAqICAgIGlmIG5vbmUgb2YgdGhlIGFib3ZlLCBubyBwYW5lbAorCSAqIDQpIG1ha2Ugc3VyZSBsaWQgaXMgb3BlbgorCSAqICAgIGlmIGNsb3NlZCwgYWN0IGxpa2UgaXQncyBub3QgdGhlcmUgZm9yIG5vdworCSAqLworCisJLyogU2V0IHVwIHRoZSBEREMgYnVzLiAqLworCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBHUElPQywgIkxWRFNERENfQyIpOworCWlmICghaW50ZWxfb3V0cHV0LT5kZGNfYnVzKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPnBkZXYtPmRldiwgIkREQyBidXMgcmVnaXN0cmF0aW9uICIKKwkJCSAgICJmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyoKKwkgKiBBdHRlbXB0IHRvIGdldCB0aGUgZml4ZWQgcGFuZWwgbW9kZSBmcm9tIEREQy4gIEFzc3VtZSB0aGF0IHRoZQorCSAqIHByZWZlcnJlZCBtb2RlIGlzIHRoZSByaWdodCBvbmUuCisJICovCisJaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2FuLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCWlmIChzY2FuLT50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpIHsKKwkJCWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlID0KKwkJCQlkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBzY2FuKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCQlnb3RvIG91dDsgLyogRklYTUU6IGNoZWNrIGZvciBxdWlya3MgKi8KKwkJfQorCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCX0KKworCS8qIEZhaWxlZCB0byBnZXQgRURJRCwgd2hhdCBhYm91dCBWQlQ/ICovCisJaWYgKGRldl9wcml2LT52YnRfbW9kZSkgeworCQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUgPQorCQkJZHJtX21vZGVfZHVwbGljYXRlKGRldiwgZGV2X3ByaXYtPnZidF9tb2RlKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBnZXQgRURJRCwgdHJ5IGNoZWNraW5nIGlmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IHR1cm5lZAorCSAqIG9uLiAgSWYgc28sIGFzc3VtZSB0aGF0IHdoYXRldmVyIGlzIGN1cnJlbnRseSBwcm9ncmFtbWVkIGlzIHRoZQorCSAqIGNvcnJlY3QgbW9kZS4KKwkgKi8KKwlsdmRzID0gSTkxNV9SRUFEKExWRFMpOworCXBpcGUgPSAobHZkcyAmIExWRFNfUElQRUJfU0VMRUNUKSA/IDEgOiAwOworCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mcm9tX3BpcGUoZGV2LCBwaXBlKTsKKworCWlmIChjcnRjICYmIChsdmRzICYgTFZEU19QT1JUX0VOKSkgeworCQlkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZSA9IGludGVsX2NydGNfbW9kZV9nZXQoZGV2LCBjcnRjKTsKKwkJaWYgKGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKSB7CisJCQlkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZS0+dHlwZSB8PQorCQkJCURSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQkJZ290byBvdXQ7IC8qIEZJWE1FOiBjaGVjayBmb3IgcXVpcmtzICovCisJCX0KKwl9CisKKwkvKiBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgbW9kZSBhZnRlciBhbGwgdGhhdCwgZ2l2ZSB1cC4gKi8KKwlpZiAoIWRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlKQorCQlnb3RvIGZhaWxlZDsKKworCS8qIEZJWE1FOiBkZXRlY3QgYW9wZW4gJiBtYWMgbWluaSB0eXBlIHN0dWZmIGF1dG9tYXRpY2FsbHk/ICovCisJLyoKKwkgKiBCbGFja2xpc3QgbWFjaGluZXMgd2l0aCBCSU9TZXMgdGhhdCBsaXN0IGFuIExWRFMgcGFuZWwgd2l0aG91dAorCSAqIGFjdHVhbGx5IGhhdmluZyBvbmUuCisJICovCisJaWYgKElTX0k5NDVHTShkZXYpKSB7CisJCS8qIGFvcGVuIG1pbmkgcGMgKi8KKwkJaWYgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweGEwYTApCisJCQlnb3RvIGZhaWxlZDsKKworCQlpZiAoKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDgwODYpICYmCisJCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4NzI3MCkpIHsKKwkJCS8qIEl0J3MgYSBNYWMgTWluaSBvciBNYWNib29rIFByby4KKwkJCSAqCisJCQkgKiBBcHBsZSBoYXJkd2FyZSBpcyBvdXQgdG8gZ2V0IHVzLiAgVGhlIG1hY2Jvb2sgcHJvCisJCQkgKiBoYXMgYSByZWFsIExWRFMgcGFuZWwsIGJ1dCB0aGUgbWFjIG1pbmkgZG9lcyBub3QsCisJCQkgKiBhbmQgdGhleSBoYXZlIHRoZSBzYW1lIGRldmljZSBJRHMuICBXZSdsbAorCQkJICogZGlzdGluZ3Vpc2ggYnkgcGFuZWwgc2l6ZSwgb24gdGhlIGFzc3VtcHRpb24KKwkJCSAqIHRoYXQgQXBwbGUgaXNuJ3QgYWJvdXQgdG8gbWFrZSBhbnkgbWFjaGluZXMgd2l0aCBhbgorCQkJICogODAweDYwMCBkaXNwbGF5LgorCQkJICovCisKKwkJCWlmIChkZXZfcHJpdi0+cGFuZWxfZml4ZWRfbW9kZSAhPSBOVUxMICYmCisJCQkgICAgZGV2X3ByaXYtPnBhbmVsX2ZpeGVkX21vZGUtPmhkaXNwbGF5ID09IDgwMCAmJgorCQkJICAgIGRldl9wcml2LT5wYW5lbF9maXhlZF9tb2RlLT52ZGlzcGxheSA9PSA2MDApIHsKKwkJCQlEUk1fREVCVUcoIlN1c3BlY3RlZCBNYWMgTWluaSwgaWdub3JpbmcgdGhlIExWRFNcbiIpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQl9CisJfQorCisKK291dDoKKwlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOworCXJldHVybjsKKworZmFpbGVkOgorCURSTV9ERUJVRygiTm8gTFZEUyBtb2RlcyBmb3VuZCwgZGlzYWJsaW5nLlxuIik7CisJaWYgKGludGVsX291dHB1dC0+ZGRjX2J1cykKKwkJaW50ZWxfaTJjX2Rlc3Ryb3koaW50ZWxfb3V0cHV0LT5kZGNfYnVzKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworLyoqCisgKiBpbnRlbF9kZGNfcHJvYmUKKyAqCisgKi8KK2Jvb2wgaW50ZWxfZGRjX3Byb2JlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCkKK3sKKwl1OCBvdXRfYnVmW10gPSB7IDB4MCwgMHgwfTsKKwl1OCBidWZbMl07CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gMHg1MCwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSBvdXRfYnVmLAorCQl9LAorCQl7CisJCQkuYWRkciA9IDB4NTAsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9IGJ1ZiwKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoJmludGVsX291dHB1dC0+ZGRjX2J1cy0+YWRhcHRlciwgbXNncywgMik7CisJaWYgKHJldCA9PSAyKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBpbnRlbF9kZGNfZ2V0X21vZGVzIC0gZ2V0IG1vZGVsaXN0IGZyb20gbW9uaXRvcgorICogQGNvbm5lY3RvcjogRFJNIGNvbm5lY3RvciBkZXZpY2UgdG8gdXNlCisgKgorICogRmV0Y2ggdGhlIEVESUQgaW5mb3JtYXRpb24gZnJvbSBAY29ubmVjdG9yIHVzaW5nIHRoZSBEREMgYnVzLgorICovCitpbnQgaW50ZWxfZGRjX2dldF9tb2RlcyhzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQpCit7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisKKwllZGlkID0gZHJtX2dldF9lZGlkKCZpbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkgICAgJmludGVsX291dHB1dC0+ZGRjX2J1cy0+YWRhcHRlcik7CisJaWYgKGVkaWQpIHsKKwkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KCZpbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJCQkJZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmaW50ZWxfb3V0cHV0LT5iYXNlLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJhYTRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0wLDAgKzEsMTEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgorICogQ29weXJpZ2h0IMKpIDIwMDYtMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKglFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICovCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfc2R2b19yZWdzLmgiCisKKyN1bmRlZiBTRFZPX0RFQlVHCisKK3N0cnVjdCBpbnRlbF9zZHZvX3ByaXYgeworCXN0cnVjdCBpbnRlbF9pMmNfY2hhbiAqaTJjX2J1czsKKwlpbnQgc2xhdmVhZGRyOworCWludCBvdXRwdXRfZGV2aWNlOworCisJdTE2IGFjdGl2ZV9vdXRwdXRzOworCisJc3RydWN0IGludGVsX3Nkdm9fY2FwcyBjYXBzOworCWludCBwaXhlbF9jbG9ja19taW4sIHBpeGVsX2Nsb2NrX21heDsKKworCWludCBzYXZlX3Nkdm9fbXVsdDsKKwl1MTYgc2F2ZV9hY3RpdmVfb3V0cHV0czsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgc2F2ZV9pbnB1dF9kdGRfMSwgc2F2ZV9pbnB1dF9kdGRfMjsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgc2F2ZV9vdXRwdXRfZHRkWzE2XTsKKwl1MzIgc2F2ZV9TRFZPWDsKK307CisKKy8qKgorICogV3JpdGVzIHRoZSBTRFZPQiBvciBTRFZPQyB3aXRoIHRoZSBnaXZlbiB2YWx1ZSwgYnV0IGFsd2F5cyB3cml0ZXMgYm90aAorICogU0RWT0IgYW5kIFNEVk9DIHRvIHdvcmsgYXJvdW5kIGFwcGFyZW50IGhhcmR3YXJlIGlzc3VlcyAoYWNjb3JkaW5nIHRvCisgKiBjb21tZW50cyBpbiB0aGUgQklPUykuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fd3JpdGVfc2R2b3goc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LCB1MzIgdmFsKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9vdXRwdXQtPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAgICpzZHZvX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXUzMiBidmFsID0gdmFsLCBjdmFsID0gdmFsOworCWludCBpOworCisJaWYgKHNkdm9fcHJpdi0+b3V0cHV0X2RldmljZSA9PSBTRFZPQikgeworCQljdmFsID0gSTkxNV9SRUFEKFNEVk9DKTsKKwl9IGVsc2UgeworCQlidmFsID0gSTkxNV9SRUFEKFNEVk9CKTsKKwl9CisJLyoKKwkgKiBXcml0ZSB0aGUgcmVnaXN0ZXJzIHR3aWNlIGZvciBsdWNrLiBTb21ldGltZXMsCisJICogd3JpdGluZyB0aGVtIG9ubHkgb25jZSBkb2Vzbid0IGFwcGVhciB0byAnc3RpY2snLgorCSAqIFRoZSBCSU9TIGRvZXMgdGhpcyB0b28uIFlheSwgbWFnaWMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCXsKKwkJSTkxNV9XUklURShTRFZPQiwgYnZhbCk7CisJCUk5MTVfUkVBRChTRFZPQik7CisJCUk5MTVfV1JJVEUoU0RWT0MsIGN2YWwpOworCQlJOTE1X1JFQUQoU0RWT0MpOworCX0KK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19yZWFkX2J5dGUoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LCB1OCBhZGRyLAorCQkJCSB1OCAqY2gpCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1OCBvdXRfYnVmWzJdOworCXU4IGJ1ZlsyXTsKKwlpbnQgcmV0OworCisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkciA9IHNkdm9fcHJpdi0+aTJjX2J1cy0+c2xhdmVfYWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSBvdXRfYnVmLAorCQl9LAorCQl7CisJCQkuYWRkciA9IHNkdm9fcHJpdi0+aTJjX2J1cy0+c2xhdmVfYWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmxlbiA9IDEsCisJCQkuYnVmID0gYnVmLAorCQl9CisJfTsKKworCW91dF9idWZbMF0gPSBhZGRyOworCW91dF9idWZbMV0gPSAwOworCisJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoJnNkdm9fcHJpdi0+aTJjX2J1cy0+YWRhcHRlciwgbXNncywgMikpID09IDIpCisJeworCQkqY2ggPSBidWZbMF07CisJCXJldHVybiB0cnVlOworCX0KKworCURSTV9ERUJVRygiaTJjIHRyYW5zZmVyIHJldHVybmVkICVkXG4iLCByZXQpOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b193cml0ZV9ieXRlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgaW50IGFkZHIsCisJCQkJICB1OCBjaCkKK3sKKwl1OCBvdXRfYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBpbnRlbF9vdXRwdXQtPmkyY19idXMtPnNsYXZlX2FkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDIsCisJCQkuYnVmID0gb3V0X2J1ZiwKKwkJfQorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRfYnVmWzFdID0gY2g7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZpbnRlbF9vdXRwdXQtPmkyY19idXMtPmFkYXB0ZXIsIG1zZ3MsIDEpID09IDEpCisJeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIFNEVk9fQ01EX05BTUVfRU5UUlkoY21kKSB7Y21kLCAjY21kfQorLyoqIE1hcHBpbmcgb2YgY29tbWFuZCBudW1iZXJzIHRvIG5hbWVzLCBmb3IgZGVidWcgb3V0cHV0ICovCitjb25zdCBzdGF0aWMgc3RydWN0IF9zZHZvX2NtZF9uYW1lIHsKKyAgICB1OCBjbWQ7CisgICAgY2hhciAqbmFtZTsKK30gc2R2b19jbWRfbmFtZXNbXSA9IHsKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX1JFU0VUKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9ERVZJQ0VfQ0FQUyksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfRklSTVdBUkVfUkVWKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9UUkFJTkVEX0lOUFVUUyksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfQUNUSVZFX09VVFBVVFMpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0FDVElWRV9PVVRQVVRTKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9JTl9PVVRfTUFQKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX1NFVF9JTl9PVVRfTUFQKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9BVFRBQ0hFRF9ESVNQTEFZUyksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfSE9UX1BMVUdfU1VQUE9SVCksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfQUNUSVZFX0hPVF9QTFVHKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9BQ1RJVkVfSE9UX1BMVUcpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX0lOVEVSUlVQVF9FVkVOVF9TT1VSQ0UpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX1RBUkdFVF9JTlBVVCksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfVEFSR0VUX09VVFBVVCksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMSksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMiksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMSksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMiksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMSksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDEpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX09VVFBVVF9USU1JTkdTX1BBUlQyKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMSksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDIpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfQ1JFQVRFX1BSRUZFUlJFRF9JTlBVVF9USU1JTkcpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFSVDEpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFSVDIpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX0lOUFVUX1BJWEVMX0NMT0NLX1JBTkdFKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX1NVUFBPUlRFRF9DTE9DS19SQVRFX01VTFRTKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9DTE9DS19SQVRFX01VTFQpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0NMT0NLX1JBVEVfTVVMVCksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX1RWX0ZPUk1BVFMpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX1RWX0ZPUk1BVCksCisgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9TRVRfVFZfRk9STUFUKSwKKyAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX1NFVF9UVl9SRVNPTFVUSU9OX1NVUFBPUlQpLAorICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0NPTlRST0xfQlVTX1NXSVRDSCksCit9OworCisjZGVmaW5lIFNEVk9fTkFNRShkZXZfcHJpdikgKChkZXZfcHJpdiktPm91dHB1dF9kZXZpY2UgPT0gU0RWT0IgPyAiU0RWT0IiIDogIlNEVk9DIikKKyNkZWZpbmUgU0RWT19QUklWKG91dHB1dCkgICAoKHN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKikgKG91dHB1dCktPmRldl9wcml2KQorCisjaWZkZWYgU0RWT19ERUJVRworc3RhdGljIHZvaWQgaW50ZWxfc2R2b19kZWJ1Z193cml0ZShzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsIHU4IGNtZCwKKwkJCQkgICB2b2lkICphcmdzLCBpbnQgYXJnc19sZW4pCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlpbnQgaTsKKworCURSTV9ERUJVRygiJXM6IFc6ICUwMlggIiwgU0RWT19OQU1FKHNkdm9fcHJpdiksIGNtZCk7CisJZm9yIChpID0gMDsgaSA8IGFyZ3NfbGVuOyBpKyspCisJCXByaW50aygiJTAyWCAiLCAoKHU4ICopYXJncylbaV0pOworCWZvciAoOyBpIDwgODsgaSsrKQorCQlwcmludGsoIiAgICIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2R2b19jbWRfbmFtZXMpIC8gc2l6ZW9mKHNkdm9fY21kX25hbWVzWzBdKTsgaSsrKSB7CisJCWlmIChjbWQgPT0gc2R2b19jbWRfbmFtZXNbaV0uY21kKSB7CisJCQlwcmludGsoIiglcykiLCBzZHZvX2NtZF9uYW1lc1tpXS5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IHNpemVvZihzZHZvX2NtZF9uYW1lcykvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSkpCisJCXByaW50aygiKCUwMlgpIixjbWQpOworCXByaW50aygiXG4iKTsKK30KKyNlbHNlCisjZGVmaW5lIGludGVsX3Nkdm9fZGVidWdfd3JpdGUobywgYywgYSwgbCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX3dyaXRlX2NtZChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsIHU4IGNtZCwKKwkJCQkgdm9pZCAqYXJncywgaW50IGFyZ3NfbGVuKQoreworCWludCBpOworCisJaW50ZWxfc2R2b19kZWJ1Z193cml0ZShpbnRlbF9vdXRwdXQsIGNtZCwgYXJncywgYXJnc19sZW4pOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3NfbGVuOyBpKyspIHsKKwkJaW50ZWxfc2R2b193cml0ZV9ieXRlKGludGVsX291dHB1dCwgU0RWT19JMkNfQVJHXzAgLSBpLAorCQkJCSAgICAgICgodTgqKWFyZ3MpW2ldKTsKKwl9CisKKwlpbnRlbF9zZHZvX3dyaXRlX2J5dGUoaW50ZWxfb3V0cHV0LCBTRFZPX0kyQ19PUENPREUsIGNtZCk7Cit9CisKKyNpZmRlZiBTRFZPX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciAqY21kX3N0YXR1c19uYW1lc1tdID0geworCSJQb3dlciBvbiIsCisJIlN1Y2Nlc3MiLAorCSJOb3Qgc3VwcG9ydGVkIiwKKwkiSW52YWxpZCBhcmciLAorCSJQZW5kaW5nIiwKKwkiVGFyZ2V0IG5vdCBzcGVjaWZpZWQiLAorCSJTY2FsaW5nIG5vdCBzdXBwb3J0ZWQiCit9OworCitzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2RlYnVnX3Jlc3BvbnNlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkgICAgICB2b2lkICpyZXNwb25zZSwgaW50IHJlc3BvbnNlX2xlbiwKKwkJCQkgICAgICB1OCBzdGF0dXMpCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCURSTV9ERUJVRygiJXM6IFI6ICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2VfbGVuOyBpKyspCisJCXByaW50aygiJTAyWCAiLCAoKHU4ICopcmVzcG9uc2UpW2ldKTsKKwlmb3IgKDsgaSA8IDg7IGkrKykKKwkJcHJpbnRrKCIgICAiKTsKKwlpZiAoc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQKQorCQlwcmludGsoIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOworCWVsc2UKKwkJcHJpbnRrKCIoPz8/ICVkKSIsIHN0YXR1cyk7CisJcHJpbnRrKCJcbiIpOworfQorI2Vsc2UKKyNkZWZpbmUgaW50ZWxfc2R2b19kZWJ1Z19yZXNwb25zZShvLCByLCBsLCBzKQorI2VuZGlmCisKK3N0YXRpYyB1OCBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LAorCQkJCSAgIHZvaWQgKnJlc3BvbnNlLCBpbnQgcmVzcG9uc2VfbGVuKQoreworCWludCBpOworCXU4IHN0YXR1czsKKwl1OCByZXRyeSA9IDUwOworCisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJLyogUmVhZCB0aGUgY29tbWFuZCByZXNwb25zZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2VfbGVuOyBpKyspIHsKKwkJCWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX291dHB1dCwKKwkJCQkJICAgICBTRFZPX0kyQ19SRVRVUk5fMCArIGksCisJCQkJCSAgICAgJigodTggKilyZXNwb25zZSlbaV0pOworCQl9CisKKwkJLyogcmVhZCB0aGUgcmV0dXJuIHN0YXR1cyAqLworCQlpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9vdXRwdXQsIFNEVk9fSTJDX0NNRF9TVEFUVVMsCisJCQkJICAgICAmc3RhdHVzKTsKKworCQlpbnRlbF9zZHZvX2RlYnVnX3Jlc3BvbnNlKGludGVsX291dHB1dCwgcmVzcG9uc2UsIHJlc3BvbnNlX2xlbiwKKwkJCQkJICBzdGF0dXMpOworCQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQltZGVsYXkoNTApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfc2R2b19nZXRfcGl4ZWxfbXVsdGlwbGllcihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpZiAobW9kZS0+Y2xvY2sgPj0gMTAwMDAwKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChtb2RlLT5jbG9jayA+PSA1MDAwMCkKKwkJcmV0dXJuIDI7CisJZWxzZQorCQlyZXR1cm4gNDsKK30KKworLyoqCisgKiBEb24ndCBjaGVjayBzdGF0dXMgY29kZSBmcm9tIHRoaXMgYXMgaXQgc3dpdGNoZXMgdGhlIGJ1cyBiYWNrIHRvIHRoZQorICogU0RWTyBjaGlwcyB3aGljaCBkZWZlYXRzIHRoZSBwdXJwb3NlIG9mIGRvaW5nIGEgYnVzIHN3aXRjaCBpbiB0aGUgZmlyc3QKKyAqIHBsYWNlLgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX3NldF9jb250cm9sX2J1c19zd2l0Y2goc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICB1OCB0YXJnZXQpCit7CisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9TRVRfQ09OVFJPTF9CVVNfU1dJVENILCAmdGFyZ2V0LCAxKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgYm9vbCB0YXJnZXRfMCwgYm9vbCB0YXJnZXRfMSkKK3sKKwlzdHJ1Y3QgaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0X2FyZ3MgdGFyZ2V0cyA9IHswfTsKKwl1OCBzdGF0dXM7CisKKwlpZiAodGFyZ2V0XzAgJiYgdGFyZ2V0XzEpCisJCXJldHVybiBTRFZPX0NNRF9TVEFUVVNfTk9UU1VQUDsKKworCWlmICh0YXJnZXRfMSkKKwkJdGFyZ2V0cy50YXJnZXRfMSA9IDE7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9UQVJHRVRfSU5QVVQsICZ0YXJnZXRzLAorCQkJICAgICBzaXplb2YodGFyZ2V0cykpOworCisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgTlVMTCwgMCk7CisKKwlyZXR1cm4gKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qKgorICogUmV0dXJuIHdoZXRoZXIgZWFjaCBpbnB1dCBpcyB0cmFpbmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWFraW5nIGFuIGFzc3VtcHRpb24gYWJvdXQgdGhlIGxheW91dCBvZiB0aGUgcmVzcG9uc2UsCisgKiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBkb2NzLgorICovCitzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0cyhzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsIGJvb2wgKmlucHV0XzEsIGJvb2wgKmlucHV0XzIpCit7CisJc3RydWN0IGludGVsX3Nkdm9fZ2V0X3RyYWluZWRfaW5wdXRzX3Jlc3BvbnNlIHJlc3BvbnNlOworCXU4IHN0YXR1czsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwgU0RWT19DTURfR0VUX1RSQUlORURfSU5QVVRTLCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBmYWxzZTsKKworCSppbnB1dF8xID0gcmVzcG9uc2UuaW5wdXQwX3RyYWluZWQ7CisJKmlucHV0XzIgPSByZXNwb25zZS5pbnB1dDFfdHJhaW5lZDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19nZXRfYWN0aXZlX291dHB1dHMoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LAorCQkJCQkgIHUxNiAqb3V0cHV0cykKK3sKKwl1OCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9BQ1RJVkVfT1VUUFVUUywgTlVMTCwgMCk7CisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgb3V0cHV0cywgc2l6ZW9mKCpvdXRwdXRzKSk7CisKKwlyZXR1cm4gKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X2FjdGl2ZV9vdXRwdXRzKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJICB1MTYgb3V0cHV0cykKK3sKKwl1OCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9BQ1RJVkVfT1VUUFVUUywgJm91dHB1dHMsCisJCQkgICAgIHNpemVvZihvdXRwdXRzKSk7CisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgTlVMTCwgMCk7CisJcmV0dXJuIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX3NldF9lbmNvZGVyX3Bvd2VyX3N0YXRlKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJICAgICAgIGludCBtb2RlKQoreworCXU4IHN0YXR1cywgc3RhdGUgPSBTRFZPX0VOQ09ERVJfU1RBVEVfT047CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERSTV9NT0RFX0RQTVNfT046CisJCXN0YXRlID0gU0RWT19FTkNPREVSX1NUQVRFX09OOworCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKKwkJc3RhdGUgPSBTRFZPX0VOQ09ERVJfU1RBVEVfU1RBTkRCWTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCXN0YXRlID0gU0RWT19FTkNPREVSX1NUQVRFX1NVU1BFTkQ7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCXN0YXRlID0gU0RWT19FTkNPREVSX1NUQVRFX09GRjsKKwkJYnJlYWs7CisJfQorCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9TRVRfRU5DT0RFUl9QT1dFUl9TVEFURSwgJnN0YXRlLAorCQkJICAgICBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCBOVUxMLCAwKTsKKworCXJldHVybiAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19nZXRfaW5wdXRfcGl4ZWxfY2xvY2tfcmFuZ2Uoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LAorCQkJCQkJICAgaW50ICpjbG9ja19taW4sCisJCQkJCQkgICBpbnQgKmNsb2NrX21heCkKK3sKKwlzdHJ1Y3QgaW50ZWxfc2R2b19waXhlbF9jbG9ja19yYW5nZSBjbG9ja3M7CisJdTggc3RhdHVzOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9HRVRfSU5QVVRfUElYRUxfQ0xPQ0tfUkFOR0UsCisJCQkgICAgIE5VTEwsIDApOworCisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgJmNsb2Nrcywgc2l6ZW9mKGNsb2NrcykpOworCisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ29udmVydCB0aGUgdmFsdWVzIGZyb20gdW5pdHMgb2YgMTAga0h6IHRvIGtIei4gKi8KKwkqY2xvY2tfbWluID0gY2xvY2tzLm1pbiAqIDEwOworCSpjbG9ja19tYXggPSBjbG9ja3MubWF4ICogMTA7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdGFyZ2V0X291dHB1dChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsCisJCQkJCSB1MTYgb3V0cHV0cykKK3sKKwl1OCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9UQVJHRVRfT1VUUFVULCAmb3V0cHV0cywKKwkJCSAgICAgc2l6ZW9mKG91dHB1dHMpKTsKKworCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsIE5VTEwsIDApOworCXJldHVybiAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19nZXRfdGltaW5nKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgdTggY21kLAorCQkJCSAgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCit7CisJdTggc3RhdHVzOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBjbWQsIE5VTEwsIDApOworCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsICZkdGQtPnBhcnQxLAorCQkJCQkgIHNpemVvZihkdGQtPnBhcnQxKSk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBjbWQgKyAxLCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmZHRkLT5wYXJ0MiwKKwkJCQkJICBzaXplb2YoZHRkLT5wYXJ0MikpOworCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX2dldF9pbnB1dF90aW1pbmcoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LAorCQkJCQkgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCit7CisJcmV0dXJuIGludGVsX3Nkdm9fZ2V0X3RpbWluZyhpbnRlbF9vdXRwdXQsCisJCQkJICAgICBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMSwgZHRkKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19nZXRfb3V0cHV0X3RpbWluZyhzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsCisJCQkJCSBzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgKmR0ZCkKK3sKKwlyZXR1cm4gaW50ZWxfc2R2b19nZXRfdGltaW5nKGludGVsX291dHB1dCwKKwkJCQkgICAgIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMSwgZHRkKTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdGltaW5nKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgdTggY21kLAorCQkJCSAgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCit7CisJdTggc3RhdHVzOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBjbWQsICZkdGQtPnBhcnQxLCBzaXplb2YoZHRkLT5wYXJ0MSkpOworCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsIE5VTEwsIDApOworCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBmYWxzZTsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwgY21kICsgMSwgJmR0ZC0+cGFydDIsIHNpemVvZihkdGQtPnBhcnQyKSk7CisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X2lucHV0X3RpbWluZyhzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQsCisJCQkJCSBzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgKmR0ZCkKK3sKKwlyZXR1cm4gaW50ZWxfc2R2b19zZXRfdGltaW5nKGludGVsX291dHB1dCwKKwkJCQkgICAgIFNEVk9fQ01EX1NFVF9JTlBVVF9USU1JTkdTX1BBUlQxLCBkdGQpOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX3NldF9vdXRwdXRfdGltaW5nKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwKKwkJCQkJIHN0cnVjdCBpbnRlbF9zZHZvX2R0ZCAqZHRkKQoreworCXJldHVybiBpbnRlbF9zZHZvX3NldF90aW1pbmcoaW50ZWxfb3V0cHV0LAorCQkJCSAgICAgU0RWT19DTURfU0VUX09VVFBVVF9USU1JTkdTX1BBUlQxLCBkdGQpOworfQorCisKK3N0YXRpYyBpbnQgaW50ZWxfc2R2b19nZXRfY2xvY2tfcmF0ZV9tdWx0KHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCkKK3sKKwl1OCByZXNwb25zZSwgc3RhdHVzOworCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9HRVRfQ0xPQ0tfUkFURV9NVUxULCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDEpOworCisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykgeworCQlEUk1fREVCVUcoIkNvdWxkbid0IGdldCBTRFZPIGNsb2NrIHJhdGUgbXVsdGlwbGllclxuIik7CisJCXJldHVybiBTRFZPX0NMT0NLX1JBVEVfTVVMVF8xWDsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIkN1cnJlbnQgY2xvY2sgcmF0ZSBtdWx0aXBsaWVyOiAlZFxuIiwgcmVzcG9uc2UpOworCX0KKworCXJldHVybiByZXNwb25zZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfY2xvY2tfcmF0ZV9tdWx0KHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgdTggdmFsKQoreworCXU4IHN0YXR1czsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwgU0RWT19DTURfU0VUX0NMT0NLX1JBVEVfTVVMVCwgJnZhbCwgMSk7CisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGludGVsX3Nkdm9fbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCS8qIE1ha2UgdGhlIENSVEMgY29kZSBmYWN0b3IgaW4gdGhlIFNEVk8gcGl4ZWwgbXVsdGlwbGllci4gIFRoZSBTRFZPCisJICogZGV2aWNlIHdpbGwgYmUgdG9sZCBvZiB0aGUgbXVsdGlwbGllciBkdXJpbmcgbW9kZV9zZXQuCisJICovCisJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgKj0gaW50ZWxfc2R2b19nZXRfcGl4ZWxfbXVsdGlwbGllcihtb2RlKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfc2R2b19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29kZXItPmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IGVuY190b19pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1MTYgd2lkdGgsIGhlaWdodDsKKwl1MTYgaF9ibGFua19sZW4sIGhfc3luY19sZW4sIHZfYmxhbmtfbGVuLCB2X3N5bmNfbGVuOworCXUxNiBoX3N5bmNfb2Zmc2V0LCB2X3N5bmNfb2Zmc2V0OworCXUzMiBzZHZveDsKKwlzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgb3V0cHV0X2R0ZDsKKwlpbnQgc2R2b19waXhlbF9tdWx0aXBseTsKKworCWlmICghbW9kZSkKKwkJcmV0dXJuOworCisJd2lkdGggPSBtb2RlLT5jcnRjX2hkaXNwbGF5OworCWhlaWdodCA9IG1vZGUtPmNydGNfdmRpc3BsYXk7CisKKwkvKiBkbyBzb21lIG1vZGUgdHJhbnNsYXRpb25zICovCisJaF9ibGFua19sZW4gPSBtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hibGFua19zdGFydDsKKwloX3N5bmNfbGVuID0gbW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCisJdl9ibGFua19sZW4gPSBtb2RlLT5jcnRjX3ZibGFua19lbmQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKKwl2X3N5bmNfbGVuID0gbW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OworCisJaF9zeW5jX29mZnNldCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX2hibGFua19zdGFydDsKKwl2X3N5bmNfb2Zmc2V0ID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmJsYW5rX3N0YXJ0OworCisJb3V0cHV0X2R0ZC5wYXJ0MS5jbG9jayA9IG1vZGUtPmNsb2NrIC8gMTA7CisJb3V0cHV0X2R0ZC5wYXJ0MS5oX2FjdGl2ZSA9IHdpZHRoICYgMHhmZjsKKwlvdXRwdXRfZHRkLnBhcnQxLmhfYmxhbmsgPSBoX2JsYW5rX2xlbiAmIDB4ZmY7CisJb3V0cHV0X2R0ZC5wYXJ0MS5oX2hpZ2ggPSAoKCh3aWR0aCA+PiA4KSAmIDB4ZikgPDwgNCkgfAorCQkoKGhfYmxhbmtfbGVuID4+IDgpICYgMHhmKTsKKwlvdXRwdXRfZHRkLnBhcnQxLnZfYWN0aXZlID0gaGVpZ2h0ICYgMHhmZjsKKwlvdXRwdXRfZHRkLnBhcnQxLnZfYmxhbmsgPSB2X2JsYW5rX2xlbiAmIDB4ZmY7CisJb3V0cHV0X2R0ZC5wYXJ0MS52X2hpZ2ggPSAoKChoZWlnaHQgPj4gOCkgJiAweGYpIDw8IDQpIHwKKwkJKCh2X2JsYW5rX2xlbiA+PiA4KSAmIDB4Zik7CisKKwlvdXRwdXRfZHRkLnBhcnQyLmhfc3luY19vZmYgPSBoX3N5bmNfb2Zmc2V0OworCW91dHB1dF9kdGQucGFydDIuaF9zeW5jX3dpZHRoID0gaF9zeW5jX2xlbiAmIDB4ZmY7CisJb3V0cHV0X2R0ZC5wYXJ0Mi52X3N5bmNfb2ZmX3dpZHRoID0gKHZfc3luY19vZmZzZXQgJiAweGYpIDw8IDQgfAorCQkodl9zeW5jX2xlbiAmIDB4Zik7CisJb3V0cHV0X2R0ZC5wYXJ0Mi5zeW5jX29mZl93aWR0aF9oaWdoID0gKChoX3N5bmNfb2Zmc2V0ICYgMHgzMDApID4+IDIpIHwKKwkJKChoX3N5bmNfbGVuICYgMHgzMDApID4+IDQpIHwgKCh2X3N5bmNfb2Zmc2V0ICYgMHgzMCkgPj4gMikgfAorCQkoKHZfc3luY19sZW4gJiAweDMwKSA+PiA0KTsKKworCW91dHB1dF9kdGQucGFydDIuZHRkX2ZsYWdzID0gMHgxODsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJb3V0cHV0X2R0ZC5wYXJ0Mi5kdGRfZmxhZ3MgfD0gMHgyOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQlvdXRwdXRfZHRkLnBhcnQyLmR0ZF9mbGFncyB8PSAweDQ7CisKKwlvdXRwdXRfZHRkLnBhcnQyLnNkdm9fZmxhZ3MgPSAwOworCW91dHB1dF9kdGQucGFydDIudl9zeW5jX29mZl9oaWdoID0gdl9zeW5jX29mZnNldCAmIDB4YzA7CisJb3V0cHV0X2R0ZC5wYXJ0Mi5yZXNlcnZlZCA9IDA7CisKKwkvKiBTZXQgdGhlIG91dHB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbiAqLworCWludGVsX3Nkdm9fc2V0X3RhcmdldF9vdXRwdXQoaW50ZWxfb3V0cHV0LCBzZHZvX3ByaXYtPmFjdGl2ZV9vdXRwdXRzKTsKKwlpbnRlbF9zZHZvX3NldF9vdXRwdXRfdGltaW5nKGludGVsX291dHB1dCwgJm91dHB1dF9kdGQpOworCisJLyogU2V0IHRoZSBpbnB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbi4gQXNzdW1lIGFsd2F5cyBpbnB1dCAwLiAqLworCWludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dChpbnRlbF9vdXRwdXQsIHRydWUsIGZhbHNlKTsKKworCS8qIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGk4MzBfc2R2b19jcmVhdGVfcHJlZmVycmVkX2lucHV0X3RpbWluZygpIHRvCisJICogcHJvdmlkZSB0aGUgZGV2aWNlIHdpdGggYSB0aW1pbmcgaXQgY2FuIHN1cHBvcnQsIGlmIGl0IHN1cHBvcnRzIHRoYXQKKwkgKiBmZWF0dXJlLiAgSG93ZXZlciwgcHJlc3VtYWJseSB3ZSB3b3VsZCBuZWVkIHRvIGFkanVzdCB0aGUgQ1JUQyB0bworCSAqIG91dHB1dCB0aGUgcHJlZmVycmVkIHRpbWluZywgYW5kIHdlIGRvbid0IHN1cHBvcnQgdGhhdCBjdXJyZW50bHkuCisJICovCisJaW50ZWxfc2R2b19zZXRfaW5wdXRfdGltaW5nKGludGVsX291dHB1dCwgJm91dHB1dF9kdGQpOworCisJc3dpdGNoIChpbnRlbF9zZHZvX2dldF9waXhlbF9tdWx0aXBsaWVyKG1vZGUpKSB7CisJY2FzZSAxOgorCQlpbnRlbF9zZHZvX3NldF9jbG9ja19yYXRlX211bHQoaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICAgU0RWT19DTE9DS19SQVRFX01VTFRfMVgpOworCQlicmVhazsKKwljYXNlIDI6CisJCWludGVsX3Nkdm9fc2V0X2Nsb2NrX3JhdGVfbXVsdChpbnRlbF9vdXRwdXQsCisJCQkJCSAgICAgICBTRFZPX0NMT0NLX1JBVEVfTVVMVF8yWCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaW50ZWxfc2R2b19zZXRfY2xvY2tfcmF0ZV9tdWx0KGludGVsX291dHB1dCwKKwkJCQkJICAgICAgIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzRYKTsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHRoZSBTRFZPIGNvbnRyb2wgcmVncy4gKi8KKyAgICAgICAgaWYgKDAvKklTX0k5NjVHTShkZXYpKi8pIHsKKyAgICAgICAgICAgICAgICBzZHZveCA9IFNEVk9fQk9SREVSX0VOQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZHZveCA9IEk5MTVfUkVBRChzZHZvX3ByaXYtPm91dHB1dF9kZXZpY2UpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTRFZPQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkdm94ICY9IFNEVk9CX1BSRVNFUlZFX01BU0s7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNEVk9DOgorICAgICAgICAgICAgICAgICAgICAgICAgc2R2b3ggJj0gU0RWT0NfUFJFU0VSVkVfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZHZveCB8PSAoOSA8PCAxOSkgfCBTRFZPX0JPUkRFUl9FTkFCTEU7CisgICAgICAgIH0KKwlpZiAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAxKQorCQlzZHZveCB8PSBTRFZPX1BJUEVfQl9TRUxFQ1Q7CisKKwlzZHZvX3BpeGVsX211bHRpcGx5ID0gaW50ZWxfc2R2b19nZXRfcGl4ZWxfbXVsdGlwbGllcihtb2RlKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQkvKiBkb25lIGluIGNydGNfbW9kZV9zZXQgYXMgdGhlIGRwbGxfbWQgcmVnIG11c3QgYmUgd3JpdHRlbgorCQkgICBlYXJseSAqLworCX0gZWxzZSBpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgeworCQkvKiBkb25lIGluIGNydGNfbW9kZV9zZXQgYXMgaXQgbGl2ZXMgaW5zaWRlIHRoZQorCQkgICBkcGxsIHJlZ2lzdGVyICovCisJfSBlbHNlIHsKKwkJc2R2b3ggfD0gKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBTRFZPX1BPUlRfTVVMVElQTFlfU0hJRlQ7CisJfQorCisJaW50ZWxfc2R2b193cml0ZV9zZHZveChpbnRlbF9vdXRwdXQsIHNkdm94KTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfc2R2b19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IGVuY190b19pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1MzIgdGVtcDsKKworCWlmIChtb2RlICE9IERSTV9NT0RFX0RQTVNfT04pIHsKKwkJaW50ZWxfc2R2b19zZXRfYWN0aXZlX291dHB1dHMoaW50ZWxfb3V0cHV0LCAwKTsKKwkJaWYgKDApCisJCQlpbnRlbF9zZHZvX3NldF9lbmNvZGVyX3Bvd2VyX3N0YXRlKGludGVsX291dHB1dCwgbW9kZSk7CisKKwkJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PRkYpIHsKKwkJCXRlbXAgPSBJOTE1X1JFQUQoc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlKTsKKwkJCWlmICgodGVtcCAmIFNEVk9fRU5BQkxFKSAhPSAwKSB7CisJCQkJaW50ZWxfc2R2b193cml0ZV9zZHZveChpbnRlbF9vdXRwdXQsIHRlbXAgJiB+U0RWT19FTkFCTEUpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJYm9vbCBpbnB1dDEsIGlucHV0MjsKKwkJaW50IGk7CisJCXU4IHN0YXR1czsKKworCQl0ZW1wID0gSTkxNV9SRUFEKHNkdm9fcHJpdi0+b3V0cHV0X2RldmljZSk7CisJCWlmICgodGVtcCAmIFNEVk9fRU5BQkxFKSA9PSAwKQorCQkJaW50ZWxfc2R2b193cml0ZV9zZHZveChpbnRlbF9vdXRwdXQsIHRlbXAgfCBTRFZPX0VOQUJMRSk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCSAgaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwkJc3RhdHVzID0gaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9pbnB1dHMoaW50ZWxfb3V0cHV0LCAmaW5wdXQxLAorCQkJCQkJICAgICAgICZpbnB1dDIpOworCisKKwkJLyogV2FybiBpZiB0aGUgZGV2aWNlIHJlcG9ydGVkIGZhaWx1cmUgdG8gc3luYy4KKwkJICogQSBsb3Qgb2YgU0RWTyBkZXZpY2VzIGZhaWwgdG8gbm90aWZ5IG9mIHN5bmMsIGJ1dCBpdCdzCisJCSAqIGEgZ2l2ZW4gaXQgdGhlIHN0YXR1cyBpcyBhIHN1Y2Nlc3MsIHdlIHN1Y2NlZWRlZC4KKwkJICovCisJCWlmIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MgJiYgIWlucHV0MSkgeworCQkJRFJNX0RFQlVHKCJGaXJzdCAlcyBvdXRwdXQgcmVwb3J0ZWQgZmFpbHVyZSB0byBzeW5jXG4iLAorCQkJCSAgIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJfQorCisJCWlmICgwKQorCQkJaW50ZWxfc2R2b19zZXRfZW5jb2Rlcl9wb3dlcl9zdGF0ZShpbnRlbF9vdXRwdXQsIG1vZGUpOworCQlpbnRlbF9zZHZvX3NldF9hY3RpdmVfb3V0cHV0cyhpbnRlbF9vdXRwdXQsIHNkdm9fcHJpdi0+YWN0aXZlX291dHB1dHMpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fc2F2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IG87CisKKwlzZHZvX3ByaXYtPnNhdmVfc2R2b19tdWx0ID0gaW50ZWxfc2R2b19nZXRfY2xvY2tfcmF0ZV9tdWx0KGludGVsX291dHB1dCk7CisJaW50ZWxfc2R2b19nZXRfYWN0aXZlX291dHB1dHMoaW50ZWxfb3V0cHV0LCAmc2R2b19wcml2LT5zYXZlX2FjdGl2ZV9vdXRwdXRzKTsKKworCWlmIChzZHZvX3ByaXYtPmNhcHMuc2R2b19pbnB1dHNfbWFzayAmIDB4MSkgeworCQlpbnRlbF9zZHZvX3NldF90YXJnZXRfaW5wdXQoaW50ZWxfb3V0cHV0LCB0cnVlLCBmYWxzZSk7CisJCWludGVsX3Nkdm9fZ2V0X2lucHV0X3RpbWluZyhpbnRlbF9vdXRwdXQsCisJCQkJCSAgICAmc2R2b19wcml2LT5zYXZlX2lucHV0X2R0ZF8xKTsKKwl9CisKKwlpZiAoc2R2b19wcml2LT5jYXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDIpIHsKKwkJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KGludGVsX291dHB1dCwgZmFsc2UsIHRydWUpOworCQlpbnRlbF9zZHZvX2dldF9pbnB1dF90aW1pbmcoaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgJnNkdm9fcHJpdi0+c2F2ZV9pbnB1dF9kdGRfMik7CisJfQorCisJZm9yIChvID0gU0RWT19PVVRQVVRfRklSU1Q7IG8gPD0gU0RWT19PVVRQVVRfTEFTVDsgbysrKQorCXsKKwkgICAgICAgIHUxNiAgdGhpc19vdXRwdXQgPSAoMSA8PCBvKTsKKwkJaWYgKHNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MgJiB0aGlzX291dHB1dCkKKwkJeworCQkJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X291dHB1dChpbnRlbF9vdXRwdXQsIHRoaXNfb3V0cHV0KTsKKwkJCWludGVsX3Nkdm9fZ2V0X291dHB1dF90aW1pbmcoaW50ZWxfb3V0cHV0LAorCQkJCQkJICAgICAmc2R2b19wcml2LT5zYXZlX291dHB1dF9kdGRbb10pOworCQl9CisJfQorCisJc2R2b19wcml2LT5zYXZlX1NEVk9YID0gSTkxNV9SRUFEKHNkdm9fcHJpdi0+b3V0cHV0X2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fcmVzdG9yZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IG87CisJaW50IGk7CisJYm9vbCBpbnB1dDEsIGlucHV0MjsKKwl1OCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3NldF9hY3RpdmVfb3V0cHV0cyhpbnRlbF9vdXRwdXQsIDApOworCisJZm9yIChvID0gU0RWT19PVVRQVVRfRklSU1Q7IG8gPD0gU0RWT19PVVRQVVRfTEFTVDsgbysrKQorCXsKKwkJdTE2ICB0aGlzX291dHB1dCA9ICgxIDw8IG8pOworCQlpZiAoc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncyAmIHRoaXNfb3V0cHV0KSB7CisJCQlpbnRlbF9zZHZvX3NldF90YXJnZXRfb3V0cHV0KGludGVsX291dHB1dCwgdGhpc19vdXRwdXQpOworCQkJaW50ZWxfc2R2b19zZXRfb3V0cHV0X3RpbWluZyhpbnRlbF9vdXRwdXQsICZzZHZvX3ByaXYtPnNhdmVfb3V0cHV0X2R0ZFtvXSk7CisJCX0KKwl9CisKKwlpZiAoc2R2b19wcml2LT5jYXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDEpIHsKKwkJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KGludGVsX291dHB1dCwgdHJ1ZSwgZmFsc2UpOworCQlpbnRlbF9zZHZvX3NldF9pbnB1dF90aW1pbmcoaW50ZWxfb3V0cHV0LCAmc2R2b19wcml2LT5zYXZlX2lucHV0X2R0ZF8xKTsKKwl9CisKKwlpZiAoc2R2b19wcml2LT5jYXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDIpIHsKKwkJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KGludGVsX291dHB1dCwgZmFsc2UsIHRydWUpOworCQlpbnRlbF9zZHZvX3NldF9pbnB1dF90aW1pbmcoaW50ZWxfb3V0cHV0LCAmc2R2b19wcml2LT5zYXZlX2lucHV0X2R0ZF8yKTsKKwl9CisKKwlpbnRlbF9zZHZvX3NldF9jbG9ja19yYXRlX211bHQoaW50ZWxfb3V0cHV0LCBzZHZvX3ByaXYtPnNhdmVfc2R2b19tdWx0KTsKKworCUk5MTVfV1JJVEUoc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlLCBzZHZvX3ByaXYtPnNhdmVfU0RWT1gpOworCisJaWYgKHNkdm9fcHJpdi0+c2F2ZV9TRFZPWCAmIFNEVk9fRU5BQkxFKQorCXsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOworCQlzdGF0dXMgPSBpbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0cyhpbnRlbF9vdXRwdXQsICZpbnB1dDEsICZpbnB1dDIpOworCQlpZiAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTICYmICFpbnB1dDEpCisJCQlEUk1fREVCVUcoIkZpcnN0ICVzIG91dHB1dCByZXBvcnRlZCBmYWlsdXJlIHRvIHN5bmNcbiIsCisJCQkJICAgU0RWT19OQU1FKHNkdm9fcHJpdikpOworCX0KKworCWludGVsX3Nkdm9fc2V0X2FjdGl2ZV9vdXRwdXRzKGludGVsX291dHB1dCwgc2R2b19wcml2LT5zYXZlX2FjdGl2ZV9vdXRwdXRzKTsKK30KKworc3RhdGljIGludCBpbnRlbF9zZHZvX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKKwkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CisKKwlpZiAoc2R2b19wcml2LT5waXhlbF9jbG9ja19taW4gPiBtb2RlLT5jbG9jaykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCisJaWYgKHNkdm9fcHJpdi0+cGl4ZWxfY2xvY2tfbWF4IDwgbW9kZS0+Y2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfc2R2b19nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCwgc3RydWN0IGludGVsX3Nkdm9fY2FwcyAqY2FwcykKK3sKKwl1OCBzdGF0dXM7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9ERVZJQ0VfQ0FQUywgTlVMTCwgMCk7CisJc3RhdHVzID0gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX291dHB1dCwgY2Fwcywgc2l6ZW9mKCpjYXBzKSk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBkcm1fY29ubmVjdG9yKiBpbnRlbF9zZHZvX2ZpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHNkdm9CKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmlvdXQgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm87CisKKwkvKiBmaW5kIHRoZSBzZHZvIGNvbm5lY3RvciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpb3V0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwkJaWYgKGlvdXQtPnR5cGUgIT0gSU5URUxfT1VUUFVUX1NEVk8pCisJCQljb250aW51ZTsKKworCQlzZHZvID0gaW91dC0+ZGV2X3ByaXY7CisKKwkJaWYgKHNkdm8tPm91dHB1dF9kZXZpY2UgPT0gU0RWT0IgJiYgc2R2b0IpCisJCQlyZXR1cm4gY29ubmVjdG9yOworCisJCWlmIChzZHZvLT5vdXRwdXRfZGV2aWNlID09IFNEVk9DICYmICFzZHZvQikKKwkJCXJldHVybiBjb25uZWN0b3I7CisKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGludGVsX3Nkdm9fc3VwcG9ydHNfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXU4IHJlc3BvbnNlWzJdOworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQ7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVybiAwOworCisJaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9IT1RfUExVR19TVVBQT1JULCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDIpOworCisJaWYgKHJlc3BvbnNlWzBdICE9MCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpbnRlbF9zZHZvX3NldF9ob3RwbHVnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBvbikKK3sKKwl1OCByZXNwb25zZVsyXTsKKwl1OCBzdGF0dXM7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9BQ1RJVkVfSE9UX1BMVUcsIE5VTEwsIDApOworCWludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsICZyZXNwb25zZSwgMik7CisKKwlpZiAob24pIHsKKwkJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9HRVRfSE9UX1BMVUdfU1VQUE9SVCwgTlVMTCwgMCk7CisJCXN0YXR1cyA9IGludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShpbnRlbF9vdXRwdXQsICZyZXNwb25zZSwgMik7CisKKwkJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9TRVRfQUNUSVZFX0hPVF9QTFVHLCAmcmVzcG9uc2UsIDIpOworCX0gZWxzZSB7CisJCXJlc3BvbnNlWzBdID0gMDsKKwkJcmVzcG9uc2VbMV0gPSAwOworCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9BQ1RJVkVfSE9UX1BMVUcsICZyZXNwb25zZSwgMik7CisJfQorCisJaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfb3V0cHV0LCBTRFZPX0NNRF9HRVRfQUNUSVZFX0hPVF9QTFVHLCBOVUxMLCAwKTsKKwlpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDIpOworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBpbnRlbF9zZHZvX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXU4IHJlc3BvbnNlWzJdOworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX291dHB1dCwgU0RWT19DTURfR0VUX0FUVEFDSEVEX0RJU1BMQVlTLCBOVUxMLCAwKTsKKwlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsIDIpOworCisJRFJNX0RFQlVHKCJTRFZPIHJlc3BvbnNlICVkICVkXG4iLCByZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pOworCWlmICgocmVzcG9uc2VbMF0gIT0gMCkgfHwgKHJlc3BvbnNlWzFdICE9IDApKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfc2R2b19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCS8qIHNldCB0aGUgYnVzIHN3aXRjaCBhbmQgZ2V0IHRoZSBtb2RlcyAqLworCWludGVsX3Nkdm9fc2V0X2NvbnRyb2xfYnVzX3N3aXRjaChpbnRlbF9vdXRwdXQsIFNEVk9fQ09OVFJPTF9CVVNfRERDMik7CisJaW50ZWxfZGRjX2dldF9tb2RlcyhpbnRlbF9vdXRwdXQpOworCisJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCisJaWYgKGludGVsX291dHB1dC0+aTJjX2J1cykKKwkJaW50ZWxfaTJjX2Rlc3Ryb3koaW50ZWxfb3V0cHV0LT5pMmNfYnVzKTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGludGVsX291dHB1dCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGludGVsX3Nkdm9faGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gaW50ZWxfc2R2b19kcG1zLAorCS5tb2RlX2ZpeHVwID0gaW50ZWxfc2R2b19tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gaW50ZWxfZW5jb2Rlcl9wcmVwYXJlLAorCS5tb2RlX3NldCA9IGludGVsX3Nkdm9fbW9kZV9zZXQsCisJLmNvbW1pdCA9IGludGVsX2VuY29kZXJfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX3Nkdm9fY29ubmVjdG9yX2Z1bmNzID0geworCS5zYXZlID0gaW50ZWxfc2R2b19zYXZlLAorCS5yZXN0b3JlID0gaW50ZWxfc2R2b19yZXN0b3JlLAorCS5kZXRlY3QgPSBpbnRlbF9zZHZvX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGludGVsX3Nkdm9fZGVzdHJveSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW50ZWxfc2R2b19jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBpbnRlbF9zZHZvX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGludGVsX3Nkdm9fbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gaW50ZWxfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIHZvaWQgaW50ZWxfc2R2b19lbmNfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBpbnRlbF9zZHZvX2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGludGVsX3Nkdm9fZW5jX2Rlc3Ryb3ksCit9OworCisKK3ZvaWQgaW50ZWxfc2R2b19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBvdXRwdXRfZGV2aWNlKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0OworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfaTJjX2NoYW4gKmkyY2J1cyA9IE5VTEw7CisJaW50IGNvbm5lY3Rvcl90eXBlOworCXU4IGNoWzB4NDBdOworCWludCBpOworCWludCBlbmNvZGVyX3R5cGUsIG91dHB1dF9pZDsKKworCWludGVsX291dHB1dCA9IGtjYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9vdXRwdXQpK3NpemVvZihzdHJ1Y3QgaW50ZWxfc2R2b19wcml2KSwgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9vdXRwdXQpIHsKKwkJcmV0dXJuOworCX0KKworCWNvbm5lY3RvciA9ICZpbnRlbF9vdXRwdXQtPmJhc2U7CisKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9zZHZvX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmaW50ZWxfc2R2b19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlzZHZvX3ByaXYgPSAoc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqKShpbnRlbF9vdXRwdXQgKyAxKTsKKwlpbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfU0RWTzsKKworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSAwOworCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKKworCS8qIHNldHVwIHRoZSBEREMgYnVzLiAqLworCWlmIChvdXRwdXRfZGV2aWNlID09IFNEVk9CKQorCQlpMmNidXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJTRFZPQ1RSTF9FIGZvciBTRFZPQiIpOworCWVsc2UKKwkJaTJjYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIEdQSU9FLCAiU0RWT0NUUkxfRSBmb3IgU0RWT0MiKTsKKworCWlmICghaTJjYnVzKQorCQlnb3RvIGVycl9jb25uZWN0b3I7CisKKwlzZHZvX3ByaXYtPmkyY19idXMgPSBpMmNidXM7CisKKwlpZiAob3V0cHV0X2RldmljZSA9PSBTRFZPQikgeworCQlvdXRwdXRfaWQgPSAxOworCQlzZHZvX3ByaXYtPmkyY19idXMtPnNsYXZlX2FkZHIgPSAweDM4OworCX0gZWxzZSB7CisJCW91dHB1dF9pZCA9IDI7CisJCXNkdm9fcHJpdi0+aTJjX2J1cy0+c2xhdmVfYWRkciA9IDB4Mzk7CisJfQorCisJc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlID0gb3V0cHV0X2RldmljZTsKKwlpbnRlbF9vdXRwdXQtPmkyY19idXMgPSBpMmNidXM7CisJaW50ZWxfb3V0cHV0LT5kZXZfcHJpdiA9IHNkdm9fcHJpdjsKKworCisJLyogUmVhZCB0aGUgcmVncyB0byB0ZXN0IGlmIHdlIGNhbiB0YWxrIHRvIHRoZSBkZXZpY2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMHg0MDsgaSsrKSB7CisJCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfb3V0cHV0LCBpLCAmY2hbaV0pKSB7CisJCQlEUk1fREVCVUcoIk5vIFNEVk8gZGV2aWNlIGZvdW5kIG9uIFNEVk8lY1xuIiwKKwkJCQkgIG91dHB1dF9kZXZpY2UgPT0gU0RWT0IgPyAnQicgOiAnQycpOworCQkJZ290byBlcnJfaTJjOworCQl9CisJfQorCisJaW50ZWxfc2R2b19nZXRfY2FwYWJpbGl0aWVzKGludGVsX291dHB1dCwgJnNkdm9fcHJpdi0+Y2Fwcyk7CisKKwltZW1zZXQoJnNkdm9fcHJpdi0+YWN0aXZlX291dHB1dHMsIDAsIHNpemVvZihzZHZvX3ByaXYtPmFjdGl2ZV9vdXRwdXRzKSk7CisKKwkvKiBUT0RPLCBDVkJTLCBTVklELCBZUFJQQiAmIFNDQVJUIG91dHB1dHMuICovCisJaWYgKHNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MgJiBTRFZPX09VVFBVVF9SR0IwKQorCXsKKwkJc2R2b19wcml2LT5hY3RpdmVfb3V0cHV0cyA9IFNEVk9fT1VUUFVUX1JHQjA7CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOworCQllbmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX0RBQzsKKwkJY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOworCX0KKwllbHNlIGlmIChzZHZvX3ByaXYtPmNhcHMub3V0cHV0X2ZsYWdzICYgU0RWT19PVVRQVVRfUkdCMSkKKwl7CisJCXNkdm9fcHJpdi0+YWN0aXZlX291dHB1dHMgPSBTRFZPX09VVFBVVF9SR0IxOworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwkJZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9EQUM7CisJCWNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKKwl9CisJZWxzZSBpZiAoc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncyAmIFNEVk9fT1VUUFVUX1RNRFMwKQorCXsKKwkJc2R2b19wcml2LT5hY3RpdmVfb3V0cHV0cyA9IFNEVk9fT1VUUFVUX1RNRFMwOworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwkJZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UTURTOworCQljb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOworCX0KKwllbHNlIGlmIChzZHZvX3ByaXYtPmNhcHMub3V0cHV0X2ZsYWdzICYgU0RWT19PVVRQVVRfVE1EUzEpCisJeworCQlzZHZvX3ByaXYtPmFjdGl2ZV9vdXRwdXRzID0gU0RWT19PVVRQVVRfVE1EUzE7CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOworCQllbmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX1RNRFM7CisJCWNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJfQorCWVsc2UKKwl7CisJCXVuc2lnbmVkIGNoYXIgYnl0ZXNbMl07CisKKwkJbWVtY3B5IChieXRlcywgJnNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MsIDIpOworCQlEUk1fREVCVUcoIiVzOiBObyBhY3RpdmUgUkdCIG9yIFRNRFMgb3V0cHV0cyAoMHglMDJ4JTAyeClcbiIsCisJCQkgIFNEVk9fTkFNRShzZHZvX3ByaXYpLAorCQkJICBieXRlc1swXSwgYnl0ZXNbMV0pOworCQlnb3RvIGVycl9pMmM7CisJfQorCisJZHJtX2VuY29kZXJfaW5pdChkZXYsICZpbnRlbF9vdXRwdXQtPmVuYywgJmludGVsX3Nkdm9fZW5jX2Z1bmNzLCBlbmNvZGVyX3R5cGUpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmludGVsX291dHB1dC0+ZW5jLCAmaW50ZWxfc2R2b19oZWxwZXJfZnVuY3MpOworCWNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPSBjb25uZWN0b3JfdHlwZTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaW50ZWxfb3V0cHV0LT5iYXNlLCAmaW50ZWxfb3V0cHV0LT5lbmMpOworCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisKKwkvKiBTZXQgdGhlIGlucHV0IHRpbWluZyB0byB0aGUgc2NyZWVuLiBBc3N1bWUgYWx3YXlzIGlucHV0IDAuICovCisJaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KGludGVsX291dHB1dCwgdHJ1ZSwgZmFsc2UpOworCisJaW50ZWxfc2R2b19nZXRfaW5wdXRfcGl4ZWxfY2xvY2tfcmFuZ2UoaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICAgJnNkdm9fcHJpdi0+cGl4ZWxfY2xvY2tfbWluLAorCQkJCQkgICAgICAgJnNkdm9fcHJpdi0+cGl4ZWxfY2xvY2tfbWF4KTsKKworCisJRFJNX0RFQlVHKCIlcyBkZXZpY2UgVklEL0RJRDogJTAyWDolMDJYLiUwMlgsICIKKwkJICAiY2xvY2sgcmFuZ2UgJWRNSHogLSAlZE1IeiwgIgorCQkgICJpbnB1dCAxOiAlYywgaW5wdXQgMjogJWMsICIKKwkJICAib3V0cHV0IDE6ICVjLCBvdXRwdXQgMjogJWNcbiIsCisJCSAgU0RWT19OQU1FKHNkdm9fcHJpdiksCisJCSAgc2R2b19wcml2LT5jYXBzLnZlbmRvcl9pZCwgc2R2b19wcml2LT5jYXBzLmRldmljZV9pZCwKKwkJICBzZHZvX3ByaXYtPmNhcHMuZGV2aWNlX3Jldl9pZCwKKwkJICBzZHZvX3ByaXYtPnBpeGVsX2Nsb2NrX21pbiAvIDEwMDAsCisJCSAgc2R2b19wcml2LT5waXhlbF9jbG9ja19tYXggLyAxMDAwLAorCQkgIChzZHZvX3ByaXYtPmNhcHMuc2R2b19pbnB1dHNfbWFzayAmIDB4MSkgPyAnWScgOiAnTicsCisJCSAgKHNkdm9fcHJpdi0+Y2Fwcy5zZHZvX2lucHV0c19tYXNrICYgMHgyKSA/ICdZJyA6ICdOJywKKwkJICAvKiBjaGVjayBjdXJyZW50bHkgc3VwcG9ydGVkIG91dHB1dHMgKi8KKwkJICBzZHZvX3ByaXYtPmNhcHMub3V0cHV0X2ZsYWdzICYKKwkJCShTRFZPX09VVFBVVF9UTURTMCB8IFNEVk9fT1VUUFVUX1JHQjApID8gJ1knIDogJ04nLAorCQkgIHNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MgJgorCQkJKFNEVk9fT1VUUFVUX1RNRFMxIHwgU0RWT19PVVRQVVRfUkdCMSkgPyAnWScgOiAnTicpOworCisJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaTJjYnVzOworCisJcmV0dXJuOworCitlcnJfaTJjOgorCWludGVsX2kyY19kZXN0cm95KGludGVsX291dHB1dC0+aTJjX2J1cyk7CitlcnJfY29ubmVjdG9yOgorCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGludGVsX291dHB1dCk7CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWE0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaApAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCCpIDIwMDYtMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICoJRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqLworCisvKioKKyAqIEBmaWxlIFNEVk8gY29tbWFuZCBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4KKyAqLworCisjZGVmaW5lIFNEVk9fT1VUUFVUX0ZJUlNUICAgKDApCisjZGVmaW5lIFNEVk9fT1VUUFVUX1RNRFMwICAgKDEgPDwgMCkKKyNkZWZpbmUgU0RWT19PVVRQVVRfUkdCMCAgICAoMSA8PCAxKQorI2RlZmluZSBTRFZPX09VVFBVVF9DVkJTMCAgICgxIDw8IDIpCisjZGVmaW5lIFNEVk9fT1VUUFVUX1NWSUQwICAgKDEgPDwgMykKKyNkZWZpbmUgU0RWT19PVVRQVVRfWVBSUEIwICAoMSA8PCA0KQorI2RlZmluZSBTRFZPX09VVFBVVF9TQ0FSVDAgICgxIDw8IDUpCisjZGVmaW5lIFNEVk9fT1VUUFVUX0xWRFMwICAgKDEgPDwgNikKKyNkZWZpbmUgU0RWT19PVVRQVVRfVE1EUzEgICAoMSA8PCA4KQorI2RlZmluZSBTRFZPX09VVFBVVF9SR0IxICAgICgxIDw8IDkpCisjZGVmaW5lIFNEVk9fT1VUUFVUX0NWQlMxICAgKDEgPDwgMTApCisjZGVmaW5lIFNEVk9fT1VUUFVUX1NWSUQxICAgKDEgPDwgMTEpCisjZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMSAgKDEgPDwgMTIpCisjZGVmaW5lIFNEVk9fT1VUUFVUX1NDQVJUMSAgKDEgPDwgMTMpCisjZGVmaW5lIFNEVk9fT1VUUFVUX0xWRFMxICAgKDEgPDwgMTQpCisjZGVmaW5lIFNEVk9fT1VUUFVUX0xBU1QgICAgKDE0KQorCitzdHJ1Y3QgaW50ZWxfc2R2b19jYXBzIHsKKyAgICB1OCB2ZW5kb3JfaWQ7CisgICAgdTggZGV2aWNlX2lkOworICAgIHU4IGRldmljZV9yZXZfaWQ7CisgICAgdTggc2R2b192ZXJzaW9uX21ham9yOworICAgIHU4IHNkdm9fdmVyc2lvbl9taW5vcjsKKyAgICB1bnNpZ25lZCBpbnQgc2R2b19pbnB1dHNfbWFzazoyOworICAgIHVuc2lnbmVkIGludCBzbW9vdGhfc2NhbGluZzoxOworICAgIHVuc2lnbmVkIGludCBzaGFycF9zY2FsaW5nOjE7CisgICAgdW5zaWduZWQgaW50IHVwX3NjYWxpbmc6MTsKKyAgICB1bnNpZ25lZCBpbnQgZG93bl9zY2FsaW5nOjE7CisgICAgdW5zaWduZWQgaW50IHN0YWxsX3N1cHBvcnQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgcGFkOjE7CisgICAgdTE2IG91dHB1dF9mbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKiBUaGlzIG1hdGNoZXMgdGhlIEVESUQgRFREIHN0cnVjdHVyZSwgbW9yZSBvciBsZXNzICovCitzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgeworICAgIHN0cnVjdCB7CisJdTE2IGNsb2NrOwkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KKwl1OCBoX2FjdGl2ZTsJCS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCisJdTggaF9ibGFuazsJCS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCisJdTggaF9oaWdoOwkJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCBoX2FjdGl2ZSwgaF9ibGFuayAqLworCXU4IHZfYWN0aXZlOwkJLyoqPCBsb3dlciA4IGJpdHMgKGxpbmVzKSAqLworCXU4IHZfYmxhbms7CQkvKio8IGxvd2VyIDggYml0cyAobGluZXMpICovCisJdTggdl9oaWdoOwkJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCB2X2FjdGl2ZSwgdl9ibGFuayAqLworICAgIH0gcGFydDE7CisKKyAgICBzdHJ1Y3QgeworCXU4IGhfc3luY19vZmY7CS8qKjwgbG93ZXIgOCBiaXRzLCBmcm9tIGhibGFuayBzdGFydCAqLworCXU4IGhfc3luY193aWR0aDsJLyoqPCBsb3dlciA4IGJpdHMgKHBpeGVscykgKi8KKwkvKiogbG93ZXIgNCBiaXRzIGVhY2ggdnN5bmMgb2Zmc2V0LCB2c3luYyB3aWR0aCAqLworCXU4IHZfc3luY19vZmZfd2lkdGg7CisJLyoqCisJICogMiBoaWdoIGJpdHMgb2YgaHN5bmMgb2Zmc2V0LCAyIGhpZ2ggYml0cyBvZiBoc3luYyB3aWR0aCwKKwkgKiBiaXRzIDQtNSBvZiB2c3luYyBvZmZzZXQsIGFuZCAyIGhpZ2ggYml0cyBvZiB2c3luYyB3aWR0aC4KKwkgKi8KKwl1OCBzeW5jX29mZl93aWR0aF9oaWdoOworCXU4IGR0ZF9mbGFnczsKKwl1OCBzZHZvX2ZsYWdzOworCS8qKiBiaXRzIDYtNyBvZiB2c3luYyBvZmZzZXQgYXQgYml0cyA2LTcgKi8KKwl1OCB2X3N5bmNfb2ZmX2hpZ2g7CisJdTggcmVzZXJ2ZWQ7CisgICAgfSBwYXJ0MjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBpbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3JhbmdlIHsKKyAgICB1MTYgbWluOwkJCS8qKjwgcGl4ZWwgY2xvY2ssIGluIDEwa0h6IHVuaXRzICovCisgICAgdTE2IG1heDsJCQkvKio8IHBpeGVsIGNsb2NrLCBpbiAxMGtIeiB1bml0cyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGludGVsX3Nkdm9fcHJlZmVycmVkX2lucHV0X3RpbWluZ19hcmdzIHsKKyAgICB1MTYgY2xvY2s7CisgICAgdTE2IHdpZHRoOworICAgIHUxNiBoZWlnaHQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBJMkMgcmVnaXN0ZXJzIGZvciBTRFZPICovCisjZGVmaW5lIFNEVk9fSTJDX0FSR18wCQkJCTB4MDcKKyNkZWZpbmUgU0RWT19JMkNfQVJHXzEJCQkJMHgwNgorI2RlZmluZSBTRFZPX0kyQ19BUkdfMgkJCQkweDA1CisjZGVmaW5lIFNEVk9fSTJDX0FSR18zCQkJCTB4MDQKKyNkZWZpbmUgU0RWT19JMkNfQVJHXzQJCQkJMHgwMworI2RlZmluZSBTRFZPX0kyQ19BUkdfNQkJCQkweDAyCisjZGVmaW5lIFNEVk9fSTJDX0FSR182CQkJCTB4MDEKKyNkZWZpbmUgU0RWT19JMkNfQVJHXzcJCQkJMHgwMAorI2RlZmluZSBTRFZPX0kyQ19PUENPREUJCQkJMHgwOAorI2RlZmluZSBTRFZPX0kyQ19DTURfU1RBVFVTCQkJMHgwOQorI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMAkJCTB4MGEKKyNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzEJCQkweDBiCisjZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8yCQkJMHgwYworI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMwkJCTB4MGQKKyNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzQJCQkweDBlCisjZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl81CQkJMHgwZgorI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fNgkJCTB4MTAKKyNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzcJCQkweDExCisjZGVmaW5lIFNEVk9fSTJDX1ZFTkRPUl9CRUdJTgkJCTB4MjAKKworLyogU3RhdHVzIHJlc3VsdHMgKi8KKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1BPV0VSX09OCQkweDAKKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MJCQkweDEKKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX05PVFNVUFAJCQkweDIKKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX0lOVkFMSURfQVJHCQkweDMKKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1BFTkRJTkcJCQkweDQKKyNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1RBUkdFVF9OT1RfU1BFQ0lGSUVECTB4NQorI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUAkweDYKKworLyogU0RWTyBjb21tYW5kcywgYXJndW1lbnQvcmVzdWx0IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNEVk9fQ01EX1JFU0VUCQkJCQkweDAxCisKKy8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fY2FwcyAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfREVWSUNFX0NBUFMJCQkweDAyCisKKyNkZWZpbmUgU0RWT19DTURfR0VUX0ZJUk1XQVJFX1JFVgkJCTB4ODYKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01JTk9SCQkJU0RWT19JMkNfUkVUVVJOXzAKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01BSk9SCQkJU0RWT19JMkNfUkVUVVJOXzEKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX1BBVENICQkJU0RWT19JMkNfUkVUVVJOXzIKKworLyoqCisgKiBSZXBvcnRzIHdoaWNoIGlucHV0cyBhcmUgdHJhaW5lZCAobWFuYWdlZCB0byBzeW5jKS4KKyAqCisgKiBEZXZpY2VzIG11c3QgaGF2ZSB0cmFpbmVkIHdpdGhpbiAyIHZzeW5jcyBvZiBhIG1vZGUgY2hhbmdlLgorICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9UUkFJTkVEX0lOUFVUUwkJCTB4MDMKK3N0cnVjdCBpbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0c19yZXNwb25zZSB7CisgICAgdW5zaWduZWQgaW50IGlucHV0MF90cmFpbmVkOjE7CisgICAgdW5zaWduZWQgaW50IGlucHV0MV90cmFpbmVkOjE7CisgICAgdW5zaWduZWQgaW50IHBhZDo2OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2YgYWN0aXZlIG91dHB1dHMuICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9BQ1RJVkVfT1VUUFVUUwkJCTB4MDQKKworLyoqCisgKiBTZXRzIHRoZSBjdXJyZW50IHNldCBvZiBhY3RpdmUgb3V0cHV0cy4KKyAqCisgKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncy4gIE11c3QgYmUgcHJlY2VkZWQgYnkgYSBTRVRfSU5fT1VUX01BUAorICogb24gbXVsdGktb3V0cHV0IGRldmljZXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfU0VUX0FDVElWRV9PVVRQVVRTCQkJMHgwNQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWFwcGluZyBvZiBTRFZPIGlucHV0cyB0byBvdXRwdXRzIG9uIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJucyB0d28gc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIHN0cnVjdHVyZXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0lOX09VVF9NQVAJCQkJMHgwNgorCisvKioKKyAqIFNldHMgdGhlIGN1cnJlbnQgbWFwcGluZyBvZiBTRFZPIGlucHV0cyB0byBvdXRwdXRzIG9uIHRoZSBkZXZpY2UuCisgKgorICogVGFrZXMgdHdvIHN0cnVjdCBpMzgwX3Nkdm9fb3V0cHV0X2ZsYWdzIHN0cnVjdHVyZXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfU0VUX0lOX09VVF9NQVAJCQkJMHgwNworCisvKioKKyAqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2YgYXR0YWNoZWQgZGlzcGxheXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0FUVEFDSEVEX0RJU1BMQVlTCQkJMHgwYgorCisvKioKKyAqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXB0dXRfZmxhZ3Mgb2YgZGlzcGxheXMgc3VwcG9ydGluZyBob3QgcGx1Z2dpbmcuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0hPVF9QTFVHX1NVUFBPUlQJCQkweDBjCisKKy8qKgorICogVGFrZXMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3MuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfU0VUX0FDVElWRV9IT1RfUExVRwkJCTB4MGQKKworLyoqCisgKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIGRpc3BsYXlzIHdpdGggaG90IHBsdWcKKyAqIGludGVycnVwdHMgZW5hYmxlZC4KKyAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfQUNUSVZFX0hPVF9QTFVHCQkJMHgwZQorCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9JTlRFUlJVUFRfRVZFTlRfU09VUkNFCQkweDBmCitzdHJ1Y3QgaW50ZWxfc2R2b19nZXRfaW50ZXJydXB0X2V2ZW50X3NvdXJjZV9yZXNwb25zZSB7CisgICAgdTE2IGludGVycnVwdF9zdGF0dXM7CisgICAgdW5zaWduZWQgaW50IGFtYmllbnRfbGlnaHRfaW50ZXJydXB0OjE7CisgICAgdW5zaWduZWQgaW50IHBhZDo3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBTZWxlY3RzIHdoaWNoIGlucHV0IGlzIGFmZmVjdGVkIGJ5IGZ1dHVyZSBpbnB1dCBjb21tYW5kcy4KKyAqCisgKiBDb21tYW5kcyBhZmZlY3RlZCBpbmNsdWRlIFNFVF9JTlBVVF9USU1JTkdTX1BBUlRbMTJdLAorICogR0VUX0lOUFVUX1RJTUlOR1NfUEFSVFsxMl0sIEdFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HU19QQVJUWzEyXSwKKyAqIEdFVF9JTlBVVF9QSVhFTF9DTE9DS19SQU5HRSwgYW5kIENSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HUy4KKyAqLworI2RlZmluZSBTRFZPX0NNRF9TRVRfVEFSR0VUX0lOUFVUCQkJMHgxMAorc3RydWN0IGludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dF9hcmdzIHsKKyAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0XzE6MTsKKyAgICB1bnNpZ25lZCBpbnQgcGFkOjc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIFRha2VzIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIHdoaWNoIG91dHB1dHMgYXJlIHRhcmdldHRlZCBieQorICogZnV0dXJlIG91dHB1dCBjb21tYW5kcy4KKyAqCisgKiBBZmZlY3RlZCBjb21tYW5kcyBpbmNsdWUgU0VUX09VVFBVVF9USU1JTkdTX1BBUlRbMTJdLAorICogR0VUX09VVFBVVF9USU1JTkdTX1BBUlRbMTJdLCBhbmQgR0VUX09VVFBVVF9QSVhFTF9DTE9DS19SQU5HRS4KKyAqLworI2RlZmluZSBTRFZPX0NNRF9TRVRfVEFSR0VUX09VVFBVVAkJCTB4MTEKKworI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMQkJMHgxMgorI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMgkJMHgxMworI2RlZmluZSBTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMQkJMHgxNAorI2RlZmluZSBTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMgkJMHgxNQorI2RlZmluZSBTRFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTYKKyNkZWZpbmUgU0RWT19DTURfU0VUX09VVFBVVF9USU1JTkdTX1BBUlQyCQkweDE3CisjZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMQkJMHgxOAorI2RlZmluZSBTRFZPX0NNRF9HRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDIJCTB4MTkKKy8qIFBhcnQgMSAqLworIyBkZWZpbmUgU0RWT19EVERfQ0xPQ0tfTE9XCQkJCVNEVk9fSTJDX0FSR18wCisjIGRlZmluZSBTRFZPX0RURF9DTE9DS19ISUdICQkJCVNEVk9fSTJDX0FSR18xCisjIGRlZmluZSBTRFZPX0RURF9IX0FDVElWRQkJCQlTRFZPX0kyQ19BUkdfMgorIyBkZWZpbmUgU0RWT19EVERfSF9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfMworIyBkZWZpbmUgU0RWT19EVERfSF9ISUdICQkJCVNEVk9fSTJDX0FSR180CisjIGRlZmluZSBTRFZPX0RURF9WX0FDVElWRQkJCQlTRFZPX0kyQ19BUkdfNQorIyBkZWZpbmUgU0RWT19EVERfVl9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfNgorIyBkZWZpbmUgU0RWT19EVERfVl9ISUdICQkJCVNEVk9fSTJDX0FSR183CisvKiBQYXJ0IDIgKi8KKyMgZGVmaW5lIFNEVk9fRFREX0hTWU5DX09GRgkJCQlTRFZPX0kyQ19BUkdfMAorIyBkZWZpbmUgU0RWT19EVERfSFNZTkNfV0lEVEgJCQkJU0RWT19JMkNfQVJHXzEKKyMgZGVmaW5lIFNEVk9fRFREX1ZTWU5DX09GRl9XSURUSAkJCVNEVk9fSTJDX0FSR18yCisjIGRlZmluZSBTRFZPX0RURF9TWU5DX09GRl9XSURUSF9ISUdICQkJU0RWT19JMkNfQVJHXzMKKyMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHUwkJCQlTRFZPX0kyQ19BUkdfNAorIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfSU5URVJMQUNFRAkJCQkoMSA8PCA3KQorIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfU1RFUkVPX01BU0sJCQkJKDMgPDwgNSkKKyMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX0lOUFVUX01BU0sJCQkJKDMgPDwgMykKKyMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX1NZTkNfTUFTSwkJCQkoMyA8PCAxKQorIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFTCQkJCVNEVk9fSTJDX0FSR181CisjIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU1RBTEwJCQkJKDEgPDwgNykKKyMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19DRU5URVJFRAkJCQkoMCA8PCA2KQorIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1VQUEVSX0xFRlQJCQkJKDEgPDwgNikKKyMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX01BU0sJCQkoMyA8PCA0KQorIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJTkdfTk9ORQkJCSgwIDw8IDQpCisjIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19TSEFSUAkJCSgxIDw8IDQpCisjIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19TTU9PVEgJCQkoMiA8PCA0KQorIyBkZWZpbmUgU0RWT19EVERfVlNZTkNfT0ZGX0hJR0gJCQlTRFZPX0kyQ19BUkdfNgorCisvKioKKyAqIEdlbmVyYXRlcyBhIERURCBiYXNlZCBvbiB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGZsYWdzLgorICoKKyAqIFRoaXMgd2lsbCBiZSBzdXBwb3J0ZWQgYnkgYW55IGRldmljZSBzdXBwb3J0aW5nIHNjYWxpbmcgb3IgaW50ZXJsYWNlZAorICogbW9kZXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfQ1JFQVRFX1BSRUZFUlJFRF9JTlBVVF9USU1JTkcJCTB4MWEKKyMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19DTE9DS19MT1cJCVNEVk9fSTJDX0FSR18wCisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfSElHSAkJU0RWT19JMkNfQVJHXzEKKyMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19XSURUSF9MT1cJCVNEVk9fSTJDX0FSR18yCisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfV0lEVEhfSElHSAkJU0RWT19JMkNfQVJHXzMKKyMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19IRUlHSFRfTE9XCQlTRFZPX0kyQ19BUkdfNAorIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0hFSUdIVF9ISUdICVNEVk9fSTJDX0FSR181CisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfRkxBR1MJCVNEVk9fSTJDX0FSR182CisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfRkxBR1NfSU5URVJMQUNFRAkJKDEgPDwgMCkKKyMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19GTEFHU19TQ0FMRUQJCSgxIDw8IDEpCisKKyNkZWZpbmUgU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFSVDEJMHgxYgorI2RlZmluZSBTRFZPX0NNRF9HRVRfUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19QQVJUMgkweDFjCisKKy8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fcGl4ZWxfY2xvY2tfcmFuZ2UgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0lOUFVUX1BJWEVMX0NMT0NLX1JBTkdFCQkweDFkCisvKiogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3JhbmdlICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4MWUKKworLyoqIFJldHVybnMgYSBieXRlIGJpdGZpZWxkIGNvbnRhaW5pbmcgU0RWT19DTE9DS19SQVRFX01VTFRfKiBmbGFncyAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX0NMT0NLX1JBVEVfTVVMVFMJCTB4MWYKKworLyoqIFJldHVybnMgYSBieXRlIGNvbnRhaW5pbmcgYSBTRFZPX0NMT0NLX1JBVEVfTVVMVF8qIGZsYWcgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0NMT0NLX1JBVEVfTVVMVAkJCTB4MjAKKy8qKiBUYWtlcyBhIGJ5dGUgY29udGFpbmluZyBhIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXyogZmxhZyAqLworI2RlZmluZSBTRFZPX0NNRF9TRVRfQ0xPQ0tfUkFURV9NVUxUCQkJMHgyMQorIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMVgJCQkJKDEgPDwgMCkKKyMgZGVmaW5lIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzJYCQkJCSgxIDw8IDEpCisjIGRlZmluZSBTRFZPX0NMT0NLX1JBVEVfTVVMVF80WAkJCQkoMSA8PCAzKQorCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfVFZfRk9STUFUUwkJMHgyNworCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQJCQkJMHgyOAorCisjZGVmaW5lIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQJCQkJMHgyOQorCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfUE9XRVJfU1RBVEVTCQkweDJhCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9FTkNPREVSX1BPV0VSX1NUQVRFCQkweDJiCisjZGVmaW5lIFNEVk9fQ01EX1NFVF9FTkNPREVSX1BPV0VSX1NUQVRFCQkweDJjCisjIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfT04JCQkJCSgxIDw8IDApCisjIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfU1RBTkRCWQkJCQkoMSA8PCAxKQorIyBkZWZpbmUgU0RWT19FTkNPREVSX1NUQVRFX1NVU1BFTkQJCQkJKDEgPDwgMikKKyMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9PRkYJCQkJCSgxIDw8IDMpCisKKyNkZWZpbmUgU0RWT19DTURfU0VUX1RWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg5MworCisjZGVmaW5lIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gJCQkweDdhCisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX1BST00JCQkJMHgwCisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzEJCQkJMHgxCisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzIJCQkJMHgyCisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzMJCQkJMHgzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIzNWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMCwwICsxLDE3MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwNi0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKy8qKiBAZmlsZQorICogSW50ZWdyYXRlZCBUVi1vdXQgc3VwcG9ydCBmb3IgdGhlIDkxNUdNIGFuZCA5NDVHTS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2VkaWQuaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKK2VudW0gdHZfbWFyZ2luIHsKKwlUVl9NQVJHSU5fTEVGVCwgVFZfTUFSR0lOX1RPUCwKKwlUVl9NQVJHSU5fUklHSFQsIFRWX01BUkdJTl9CT1RUT00KK307CisKKy8qKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgdGhlIGludGVncmF0ZWQgVFYgc3VwcG9ydCAqLworc3RydWN0IGludGVsX3R2X3ByaXYgeworCWludCB0eXBlOworCWNoYXIgKnR2X2Zvcm1hdDsKKwlpbnQgbWFyZ2luWzRdOworCXUzMiBzYXZlX1RWX0hfQ1RMXzE7CisJdTMyIHNhdmVfVFZfSF9DVExfMjsKKwl1MzIgc2F2ZV9UVl9IX0NUTF8zOworCXUzMiBzYXZlX1RWX1ZfQ1RMXzE7CisJdTMyIHNhdmVfVFZfVl9DVExfMjsKKwl1MzIgc2F2ZV9UVl9WX0NUTF8zOworCXUzMiBzYXZlX1RWX1ZfQ1RMXzQ7CisJdTMyIHNhdmVfVFZfVl9DVExfNTsKKwl1MzIgc2F2ZV9UVl9WX0NUTF82OworCXUzMiBzYXZlX1RWX1ZfQ1RMXzc7CisJdTMyIHNhdmVfVFZfU0NfQ1RMXzEsIHNhdmVfVFZfU0NfQ1RMXzIsIHNhdmVfVFZfU0NfQ1RMXzM7CisKKwl1MzIgc2F2ZV9UVl9DU0NfWTsKKwl1MzIgc2F2ZV9UVl9DU0NfWTI7CisJdTMyIHNhdmVfVFZfQ1NDX1U7CisJdTMyIHNhdmVfVFZfQ1NDX1UyOworCXUzMiBzYXZlX1RWX0NTQ19WOworCXUzMiBzYXZlX1RWX0NTQ19WMjsKKwl1MzIgc2F2ZV9UVl9DTFJfS05PQlM7CisJdTMyIHNhdmVfVFZfQ0xSX0xFVkVMOworCXUzMiBzYXZlX1RWX1dJTl9QT1M7CisJdTMyIHNhdmVfVFZfV0lOX1NJWkU7CisJdTMyIHNhdmVfVFZfRklMVEVSX0NUTF8xOworCXUzMiBzYXZlX1RWX0ZJTFRFUl9DVExfMjsKKwl1MzIgc2F2ZV9UVl9GSUxURVJfQ1RMXzM7CisKKwl1MzIgc2F2ZV9UVl9IX0xVTUFbNjBdOworCXUzMiBzYXZlX1RWX0hfQ0hST01BWzYwXTsKKwl1MzIgc2F2ZV9UVl9WX0xVTUFbNDNdOworCXUzMiBzYXZlX1RWX1ZfQ0hST01BWzQzXTsKKworCXUzMiBzYXZlX1RWX0RBQzsKKwl1MzIgc2F2ZV9UVl9DVEw7Cit9OworCitzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHsKKwlpbnQgYmxhbmssIGJsYWNrLCBidXJzdDsKK307CisKK3N0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHsKKwl1MTYgcnksIGd5LCBieSwgYXk7CisJdTE2IHJ1LCBndSwgYnUsIGF1OworCXUxNiBydiwgZ3YsIGJ2LCBhdjsKK307CisKK3N0YXRpYyBjb25zdCB1MzIgZmlsdGVyX3RhYmxlW10gPSB7CisJMHhCMTQwMzAwMCwgMHgyRTIwMzUwMCwgMHgzNTAwMkUyMCwgMHgzMDAwQjE0MCwKKwkweDM1QTBCMTYwLCAweDJEQzAyRTgwLCAweEIxNDAzNDgwLCAweEIxNjAzMDAwLAorCTB4MkVBMDM2NDAsIDB4MzQwMDJEODAsIDB4MzAwMEIxMjAsIDB4MzZFMEIxNjAsCisJMHgyRDIwMkVGMCwgMHhCMTIwMzM4MCwgMHhCMTYwMzAwMCwgMHgyRjMwMzc4MCwKKwkweDMzMDAyQ0MwLCAweDMwMDBCMTAwLCAweDM4MjBCMTYwLCAweDJDODAyRjUwLAorCTB4QjEwMDMyQTAsIDB4QjE2MDMwMDAsIDB4MkY5MDM4QzAsIDB4MzIyMDJDMjAsCisJMHgzMDAwQjBFMCwgMHgzOTgwQjE2MCwgMHgyQkMwMkZDMCwgMHhCMEUwMzFDMCwKKwkweEIxNjAzMDAwLCAweDJGRjAzQTIwLCAweDMxNjAyQjYwLCAweEIwMjBCMEMwLAorCTB4M0FFMEIxNjAsIDB4MkIwMDE4MTAsIDB4QjBDMDMxMjAsIDB4QjE0MEIwMjAsCisJMHgxODI4M0JBMCwgMHgzMEMwMkE4MCwgMHhCMDIwQjBBMCwgMHgzQzYwQjE0MCwKKwkweDJBMjAxODM4LCAweEIwQTAzMDgwLCAweEIxMjBCMDIwLCAweDE4MzgzRDIwLAorCTB4MzA0MDI5QzAsIDB4QjA0MEIwODAsIDB4M0RFMEIxMDAsIDB4Mjk2MDE4NDgsCisJMHhCMDgwMzAwMCwgMHhCMTAwQjA0MCwgMHgxODQ4M0VDMCwgMHhCMDQwMjkwMCwKKwkweEIwNDBCMDYwLCAweDNGODBCMEMwLCAweDI4ODAxODU4LCAweEIwNjBCMDgwLAorCTB4QjBBMEIwNjAsIDB4MTg2MDI4MjAsIDB4QjBBMDI4MjAsIDB4MDAwMEIwNjAsCisJMHhCMTQwMzAwMCwgMHgyRTIwMzUwMCwgMHgzNTAwMkUyMCwgMHgzMDAwQjE0MCwKKwkweDM1QTBCMTYwLCAweDJEQzAyRTgwLCAweEIxNDAzNDgwLCAweEIxNjAzMDAwLAorCTB4MkVBMDM2NDAsIDB4MzQwMDJEODAsIDB4MzAwMEIxMjAsIDB4MzZFMEIxNjAsCisJMHgyRDIwMkVGMCwgMHhCMTIwMzM4MCwgMHhCMTYwMzAwMCwgMHgyRjMwMzc4MCwKKwkweDMzMDAyQ0MwLCAweDMwMDBCMTAwLCAweDM4MjBCMTYwLCAweDJDODAyRjUwLAorCTB4QjEwMDMyQTAsIDB4QjE2MDMwMDAsIDB4MkY5MDM4QzAsIDB4MzIyMDJDMjAsCisJMHgzMDAwQjBFMCwgMHgzOTgwQjE2MCwgMHgyQkMwMkZDMCwgMHhCMEUwMzFDMCwKKwkweEIxNjAzMDAwLCAweDJGRjAzQTIwLCAweDMxNjAyQjYwLCAweEIwMjBCMEMwLAorCTB4M0FFMEIxNjAsIDB4MkIwMDE4MTAsIDB4QjBDMDMxMjAsIDB4QjE0MEIwMjAsCisJMHgxODI4M0JBMCwgMHgzMEMwMkE4MCwgMHhCMDIwQjBBMCwgMHgzQzYwQjE0MCwKKwkweDJBMjAxODM4LCAweEIwQTAzMDgwLCAweEIxMjBCMDIwLCAweDE4MzgzRDIwLAorCTB4MzA0MDI5QzAsIDB4QjA0MEIwODAsIDB4M0RFMEIxMDAsIDB4Mjk2MDE4NDgsCisJMHhCMDgwMzAwMCwgMHhCMTAwQjA0MCwgMHgxODQ4M0VDMCwgMHhCMDQwMjkwMCwKKwkweEIwNDBCMDYwLCAweDNGODBCMEMwLCAweDI4ODAxODU4LCAweEIwNjBCMDgwLAorCTB4QjBBMEIwNjAsIDB4MTg2MDI4MjAsIDB4QjBBMDI4MjAsIDB4MDAwMEIwNjAsCisJMHgzNjQwMzAwMCwgMHgyRDAwMkNDMCwgMHgzMDAwMzY0MCwgMHgyRDAwMzZDMCwKKwkweDM1QzAyQ0MwLCAweDM3NDAzMDAwLCAweDJDODAyRDQwLCAweDMwMDAzNTQwLAorCTB4MkQ4MDM3QzAsIDB4MzRDMDJDNDAsIDB4Mzg0MDMwMDAsIDB4MkJDMDJFMDAsCisJMHgzMDAwMzQ0MCwgMHgyRTIwMzhDMCwgMHgzNDAwMkI4MCwgMHgzOTgwMzAwMCwKKwkweDJCNDAyRTQwLCAweDMwMDAzMzgwLCAweDJFNjAzQTAwLCAweDMzNDAyQjAwLAorCTB4M0E4MDMwNDAsIDB4MkE4MDJFQTAsIDB4MzA0MDMzMDAsIDB4MkVDMDNCNDAsCisJMHgzMjgwMkE0MCwgMHgzQzAwMzA0MCwgMHgyQTAwMkVDMCwgMHgzMDgwMzI0MCwKKwkweDJFQzAzQzgwLCAweDMyMDAyOUMwLCAweDNENDAzMDgwLCAweDI5NDAyRjAwLAorCTB4MzA4MDMxQzAsIDB4MkYyMDNEQzAsIDB4MzE4MDI5MDAsIDB4M0U4MDMwQzAsCisJMHgyODgwMkY0MCwgMHgzMEMwMzE0MCwgMHgyRjIwM0Y0MCwgMHgzMTQwMjg0MCwKKwkweDI4MDAzMTAwLCAweDI4MDAyRjAwLCAweDAwMDAzMTAwLCAweDM2NDAzMDAwLAorCTB4MkQwMDJDQzAsIDB4MzAwMDM2NDAsIDB4MkQwMDM2QzAsCisJMHgzNUMwMkNDMCwgMHgzNzQwMzAwMCwgMHgyQzgwMkQ0MCwgMHgzMDAwMzU0MCwKKwkweDJEODAzN0MwLCAweDM0QzAyQzQwLCAweDM4NDAzMDAwLCAweDJCQzAyRTAwLAorCTB4MzAwMDM0NDAsIDB4MkUyMDM4QzAsIDB4MzQwMDJCODAsIDB4Mzk4MDMwMDAsCisJMHgyQjQwMkU0MCwgMHgzMDAwMzM4MCwgMHgyRTYwM0EwMCwgMHgzMzQwMkIwMCwKKwkweDNBODAzMDQwLCAweDJBODAyRUEwLCAweDMwNDAzMzAwLCAweDJFQzAzQjQwLAorCTB4MzI4MDJBNDAsIDB4M0MwMDMwNDAsIDB4MkEwMDJFQzAsIDB4MzA4MDMyNDAsCisJMHgyRUMwM0M4MCwgMHgzMjAwMjlDMCwgMHgzRDQwMzA4MCwgMHgyOTQwMkYwMCwKKwkweDMwODAzMUMwLCAweDJGMjAzREMwLCAweDMxODAyOTAwLCAweDNFODAzMEMwLAorCTB4Mjg4MDJGNDAsIDB4MzBDMDMxNDAsIDB4MkYyMDNGNDAsIDB4MzE0MDI4NDAsCisJMHgyODAwMzEwMCwgMHgyODAwMkYwMCwgMHgwMDAwMzEwMCwKK307CisKKy8qCisgKiBDb2xvciBjb252ZXJzaW9uIHZhbHVlcyBoYXZlIDMgc2VwYXJhdGUgZml4ZWQgcG9pbnQgZm9ybWF0czoKKyAqCisgKiAxMCBiaXQgZmllbGRzIChheSwgYXUpCisgKiAgIDEuOSBmaXhlZCBwb2ludCAoYi5iYmJiYmJiYmIpCisgKiAxMSBiaXQgZmllbGRzIChyeSwgYnksIHJ1LCBndSwgZ3YpCisgKiAgIGV4cC5tYW50aXNzYSAoZWUubW1tbW1tbW1tKQorICogICBlZSA9IDAwID0gMTBeLTEgKDAubW1tbW1tbW1tKQorICogICBlZSA9IDAxID0gMTBeLTIgKDAuMG1tbW1tbW1tbSkKKyAqICAgZWUgPSAxMCA9IDEwXi0zICgwLjAwbW1tbW1tbW1tKQorICogICBlZSA9IDExID0gMTBeLTQgKDAuMDAwbW1tbW1tbW1tKQorICogMTIgYml0IGZpZWxkcyAoZ3ksIHJ2LCBidSkKKyAqICAgZXhwLm1hbnRpc3NhIChlZWUubW1tbW1tbW1tKQorICogICBlZWUgPSAwMDAgPSAxMF4tMSAoMC5tbW1tbW1tbW0pCisgKiAgIGVlZSA9IDAwMSA9IDEwXi0yICgwLjBtbW1tbW1tbW0pCisgKiAgIGVlZSA9IDAxMCA9IDEwXi0zICgwLjAwbW1tbW1tbW1tKQorICogICBlZWUgPSAwMTEgPSAxMF4tNCAoMC4wMDBtbW1tbW1tbW0pCisgKiAgIGVlZSA9IDEwMCA9IHJlc2VydmVkCisgKiAgIGVlZSA9IDEwMSA9IHJlc2VydmVkCisgKiAgIGVlZSA9IDExMCA9IHJlc2VydmVkCisgKiAgIGVlZSA9IDExMSA9IDEwXjAgKG0ubW1tbW1tbW0pIChvbmx5IHVzYWJsZSBmb3IgMS4wIHJlcHJlc2VudGF0aW9uKQorICoKKyAqIFNhdHVyYXRpb24gYW5kIGNvbnRyYXN0IGFyZSA4IGJpdHMsIHdpdGggdGhlaXIgb3duIHJlcHJlc2VudGF0aW9uOgorICogOCBiaXQgZmllbGQgKHNhdHVyYXRpb24sIGNvbnRyYXN0KQorICogICBleHAubWFudGlzc2EgKGVlLm1tbW1tbSkKKyAqICAgZWUgPSAwMCA9IDEwXi0xICgwLm1tbW1tbSkKKyAqICAgZWUgPSAwMSA9IDEwXjAgKG0ubW1tbW0pCisgKiAgIGVlID0gMTAgPSAxMF4xIChtbS5tbW1tKQorICogICBlZSA9IDExID0gMTBeMiAobW1tLm1tbSkKKyAqCisgKiBTaW1wbGUgY29udmVyc2lvbiBmdW5jdGlvbjoKKyAqCisgKiBzdGF0aWMgdTMyCisgKiBmbG9hdF90b19jc2NfMTEoZmxvYXQgZikKKyAqIHsKKyAqICAgICB1MzIgZXhwOworICogICAgIHUzMiBtYW50OworICogICAgIHUzMiByZXQ7CisgKgorICogICAgIGlmIChmIDwgMCkKKyAqICAgICAgICAgZiA9IC1mOworICoKKyAqICAgICBpZiAoZiA+PSAxKSB7CisgKiAgICAgICAgIGV4cCA9IDB4NzsKKyAqIAkgICBtYW50ID0gMSA8PCA4OworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIGZvciAoZXhwID0gMDsgZXhwIDwgMyAmJiBmIDwgMC41OyBleHArKykKKyAqIAkgICAgICAgZiAqPSAyLjA7CisgKiAgICAgICAgIG1hbnQgPSAoZiAqICgxIDw8IDkpICsgMC41KTsKKyAqICAgICAgICAgaWYgKG1hbnQgPj0gKDEgPDwgOSkpCisgKiAgICAgICAgICAgICBtYW50ID0gKDEgPDwgOSkgLSAxOworICogICAgIH0KKyAqICAgICByZXQgPSAoZXhwIDw8IDkpIHwgbWFudDsKKyAqICAgICByZXR1cm4gcmV0OworICogfQorICovCisKKy8qCisgKiBCZWhvbGQsIG1hZ2ljIG51bWJlcnMhICBJZiB3ZSBwbGFudCB0aGVtIHRoZXkgbWlnaHQgZ3JvdyBhIGJpZworICogcy12aWRlbyBjYWJsZSB0byB0aGUgc2t5Li4uIG9yIHNvbWV0aGluZy4KKyAqCisgKiBQcmUtY29udmVydGVkIHRvIGFwcHJvcHJpYXRlIGhleCB2YWx1ZS4KKyAqLworCisvKgorICogUEFMICYgTlRTQyB2YWx1ZXMgZm9yIGNvbXBvc2l0ZSAmIHMtdmlkZW8gY29ubmVjdGlvbnMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIG50c2NfbV9jc2NfY29tcG9zaXRlID0geworCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEwNCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDBmMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwZjAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19tX2xldmVsc19jb21wb3NpdGUgPSB7CisJLmJsYW5rID0gMjI1LCAuYmxhY2sgPSAyNjcsIC5idXJzdCA9IDExMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX21fY3NjX3N2aWRlbyA9IHsKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzQsCisJLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwZjAwLAorCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MGYwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIG50c2NfbV9sZXZlbHNfc3ZpZGVvID0geworCS5ibGFuayA9IDI2NiwgLmJsYWNrID0gMzE2LCAuYnVyc3QgPSAxMzMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gbnRzY19qX2NzY19jb21wb3NpdGUgPSB7CisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTE5LAorCS5ydSA9IDB4MDc0YywgLmd1ID0gMHgwNTQ2LCAuYnUgPSAweDA1ZWMsIC5hdSA9IDB4MGYwMCwKKwkucnYgPSAweDAzNWEsIC5ndiA9IDB4MDMyMiwgLmJ2ID0gMHgwNmUxLCAuYXYgPSAweDBmMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBudHNjX2pfbGV2ZWxzX2NvbXBvc2l0ZSA9IHsKKwkuYmxhbmsgPSAyMjUsIC5ibGFjayA9IDIyNSwgLmJ1cnN0ID0gMTEzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIG50c2Nfal9jc2Nfc3ZpZGVvID0geworCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDE0YywKKwkucnUgPSAweDA3ODgsIC5ndSA9IDB4MDU4MSwgLmJ1ID0gMHgwMzIyLCAuYXUgPSAweDBmMDAsCisJLnJ2ID0gMHgwMzk5LCAuZ3YgPSAweDAzNTYsIC5idiA9IDB4MDcwYSwgLmF2ID0gMHgwZjAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19qX2xldmVsc19zdmlkZW8gPSB7CisJLmJsYW5rID0gMjY2LCAuYmxhY2sgPSAyNjYsIC5idXJzdCA9IDEzMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfY3NjX2NvbXBvc2l0ZSA9IHsKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMTMsCisJLnJ1ID0gMHgwNzQ1LCAuZ3UgPSAweDA1M2YsIC5idSA9IDB4MDVlMSwgLmF1ID0gMHgwZjAwLAorCS5ydiA9IDB4MDM1MywgLmd2ID0gMHgwMzFjLCAuYnYgPSAweDA2ZGMsIC5hdiA9IDB4MGYwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9sZXZlbHNfY29tcG9zaXRlID0geworCS5ibGFuayA9IDIzNywgLmJsYWNrID0gMjM3LCAuYnVyc3QgPSAxMTgsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX2NzY19zdmlkZW8gPSB7CisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTQ1LAorCS5ydSA9IDB4MDc4MCwgLmd1ID0gMHgwNTc5LCAuYnUgPSAweDAzMWMsIC5hdSA9IDB4MGYwMCwKKwkucnYgPSAweDAzOTAsIC5ndiA9IDB4MDM0ZiwgLmJ2ID0gMHgwNzA1LCAuYXYgPSAweDBmMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbGV2ZWxzX3N2aWRlbyA9IHsKKwkuYmxhbmsgPSAyODAsIC5ibGFjayA9IDI4MCwgLmJ1cnN0ID0gMTM5LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9tX2NzY19jb21wb3NpdGUgPSB7CisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTA0LAorCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MGYwMCwKKwkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDBmMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbV9sZXZlbHNfY29tcG9zaXRlID0geworCS5ibGFuayA9IDIyNSwgLmJsYWNrID0gMjY3LCAuYnVyc3QgPSAxMTMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX21fY3NjX3N2aWRlbyA9IHsKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzQsCisJLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwZjAwLAorCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MGYwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9tX2xldmVsc19zdmlkZW8gPSB7CisJLmJsYW5rID0gMjY2LCAuYmxhY2sgPSAzMTYsIC5idXJzdCA9IDEzMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfbl9jc2NfY29tcG9zaXRlID0geworCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEwNCwKKwkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDBmMDAsCisJLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwZjAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX25fbGV2ZWxzX2NvbXBvc2l0ZSA9IHsKKwkuYmxhbmsgPSAyMjUsIC5ibGFjayA9IDI2NywgLmJ1cnN0ID0gMTE4LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9uX2NzY19zdmlkZW8gPSB7CisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTM0LAorCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MGYwMCwKKwkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDBmMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbl9sZXZlbHNfc3ZpZGVvID0geworCS5ibGFuayA9IDI2NiwgLmJsYWNrID0gMzE2LCAuYnVyc3QgPSAxMzksCit9OworCisvKgorICogQ29tcG9uZW50IGNvbm5lY3Rpb25zCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBzZHR2X2NzY195cHJwYiA9IHsKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNDYsCisJLnJ1ID0gMHgwNTU5LCAuZ3UgPSAweDAzNTMsIC5idSA9IDB4MDEwMCwgLmF1ID0gMHgwZjAwLAorCS5ydiA9IDB4MDEwMCwgLmd2ID0gMHgwM2FkLCAuYnYgPSAweDA3NGQsIC5hdiA9IDB4MGYwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBzZHR2X2NzY19yZ2IgPSB7CisJLnJ5ID0gMHgwMDAwLCAuZ3kgPSAweDBmMDAsIC5ieSA9IDB4MDAwMCwgLmF5ID0gMHgwMTY2LAorCS5ydSA9IDB4MDAwMCwgLmd1ID0gMHgwMDAwLCAuYnUgPSAweDBmMDAsIC5hdSA9IDB4MDE2NiwKKwkucnYgPSAweDBmMDAsIC5ndiA9IDB4MDAwMCwgLmJ2ID0gMHgwMDAwLCAuYXYgPSAweDAxNjYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gaGR0dl9jc2NfeXBycGIgPSB7CisJLnJ5ID0gMHgwNWIzLCAuZ3kgPSAweDAxNmUsIC5ieSA9IDB4MDcyOCwgLmF5ID0gMHgwMTQ2LAorCS5ydSA9IDB4MDdkNSwgLmd1ID0gMHgwMzhiLCAuYnUgPSAweDAxMDAsIC5hdSA9IDB4MGYwMCwKKwkucnYgPSAweDAxMDAsIC5ndiA9IDB4MDNkMSwgLmJ2ID0gMHgwNmJjLCAuYXYgPSAweDBmMDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gaGR0dl9jc2NfcmdiID0geworCS5yeSA9IDB4MDAwMCwgLmd5ID0gMHgwZjAwLCAuYnkgPSAweDAwMDAsIC5heSA9IDB4MDE2NiwKKwkucnUgPSAweDAwMDAsIC5ndSA9IDB4MDAwMCwgLmJ1ID0gMHgwZjAwLCAuYXUgPSAweDAxNjYsCisJLnJ2ID0gMHgwZjAwLCAuZ3YgPSAweDAwMDAsIC5idiA9IDB4MDAwMCwgLmF2ID0gMHgwMTY2LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgY29tcG9uZW50X2xldmVscyA9IHsKKwkuYmxhbmsgPSAyNzksIC5ibGFjayA9IDI3OSwgLmJ1cnN0ID0gMCwKK307CisKKworc3RydWN0IHR2X21vZGUgeworCWNoYXIgKm5hbWU7CisJaW50IGNsb2NrOworCWludCByZWZyZXNoOyAvKiBpbiBtaWxsaWhlcnR6IChmb3IgcHJlY2lzaW9uKSAqLworCXUzMiBvdmVyc2FtcGxlOworCWludCBoc3luY19lbmQsIGhibGFua19zdGFydCwgaGJsYW5rX2VuZCwgaHRvdGFsOworCWJvb2wgcHJvZ3Jlc3NpdmUsIHRyaWxldmVsX3N5bmMsIGNvbXBvbmVudF9vbmx5OworCWludCB2c3luY19zdGFydF9mMSwgdnN5bmNfc3RhcnRfZjIsIHZzeW5jX2xlbjsKKwlib29sIHZlcV9lbmE7CisJaW50IHZlcV9zdGFydF9mMSwgdmVxX3N0YXJ0X2YyLCB2ZXFfbGVuOworCWludCB2aV9lbmRfZjEsIHZpX2VuZF9mMiwgbmJyX2VuZDsKKwlib29sIGJ1cnN0X2VuYTsKKwlpbnQgaGJ1cnN0X3N0YXJ0LCBoYnVyc3RfbGVuOworCWludCB2YnVyc3Rfc3RhcnRfZjEsIHZidXJzdF9lbmRfZjE7CisJaW50IHZidXJzdF9zdGFydF9mMiwgdmJ1cnN0X2VuZF9mMjsKKwlpbnQgdmJ1cnN0X3N0YXJ0X2YzLCB2YnVyc3RfZW5kX2YzOworCWludCB2YnVyc3Rfc3RhcnRfZjQsIHZidXJzdF9lbmRfZjQ7CisJLyoKKwkgKiBzdWJjYXJyaWVyIHByb2dyYW1taW5nCisJICovCisJaW50IGRkYTJfc2l6ZSwgZGRhM19zaXplLCBkZGExX2luYywgZGRhMl9pbmMsIGRkYTNfaW5jOworCXUzMiBzY19yZXNldDsKKwlib29sIHBhbF9idXJzdDsKKwkvKgorCSAqIGJsYW5rL2JsYWNrIGxldmVscworCSAqLworCWNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgKmNvbXBvc2l0ZV9sZXZlbHMsICpzdmlkZW9fbGV2ZWxzOworCWNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uICpjb21wb3NpdGVfY29sb3IsICpzdmlkZW9fY29sb3I7CisJY29uc3QgdTMyICpmaWx0ZXJfdGFibGU7CisJaW50IG1heF9zcmN3OworfTsKKworCisvKgorICogU3ViIGNhcnJpZXIgRERBCisgKgorICogIEkgdGhpbmsgdGhpcyB3b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqICBzdWJjYXJyaWVyIGZyZXEgPSBwaXhlbF9jbG9jayAqIChkZGExX2luYyArIGRkYTJfaW5jIC8gZGRhMl9zaXplKSAvIDQwOTYKKyAqCisgKiBQcmVzdW1hYmx5LCB3aGVuIGRkYTMgaXMgYWRkZWQgaW4sIGl0IGdldHMgdG8gYWRqdXN0IHRoZSBkZGEyX2luYyB2YWx1ZQorICoKKyAqIFNvLAorICogIGRkYTFfaWRlYWwgPSBzdWJjYXJyaWVyL3BpeGVsICogNDA5NgorICogIGRkYTFfaW5jID0gZmxvb3IgKGRkYTFfaWRlYWwpCisgKiAgZGRhMiA9IGRkYTFfaWRlYWwgLSBkZGExX2luYworICoKKyAqICB0aGVuIHBpY2sgYSByYXRpbyBmb3IgZGRhMiB0aGF0IGdpdmVzIHRoZSBjbG9zZXN0IGFwcHJveGltYXRpb24uIElmCisgKiAgeW91IGNhbid0IGdldCBjbG9zZSBlbm91Z2gsIHlvdSBjYW4gcGxheSB3aXRoIGRkYTMgYXMgd2VsbC4gVGhpcworICogIHNlZW1zIGxpa2VseSB0byBoYXBwZW4gd2hlbiBkZGEyIGlzIHNtYWxsIGFzIHRoZSBqdW1wcyB3b3VsZCBiZSBsYXJnZXIKKyAqCisgKiBUbyBpbnZlcnQgdGhpcywKKyAqCisgKiAgcGl4ZWxfY2xvY2sgPSBzdWJjYXJyaWVyICogNDA5NiAvIChkZGExX2luYyArIGRkYTJfaW5jIC8gZGRhMl9zaXplKQorICoKKyAqIFRoZSBjb25zdGFudHMgYmVsb3cgd2VyZSBhbGwgY29tcHV0ZWQgdXNpbmcgYSAxMDcuNTIwTUh6IGNsb2NrCisgKi8KKworLyoqCisgKiBSZWdpc3RlciBwcm9ncmFtbWluZyB2YWx1ZXMgZm9yIFRWIG1vZGVzLgorICoKKyAqIFRoZXNlIHZhbHVlcyBhY2NvdW50IGZvciAtMXMgcmVxdWlyZWQuCisgKi8KKworY29uc3Qgc3RhdGljIHN0cnVjdCB0dl9tb2RlIHR2X21vZGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiTlRTQy1NIiwKKwkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLnJlZnJlc2gJPSAyOTk3MCwKKwkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAorCQkuY29tcG9uZW50X29ubHkgPSAwLAorCQkvKiA1MjUgTGluZXMsIDYwIEZpZWxkcywgMTUuNzM0S0h6IGxpbmUsIFN1Yi1DYXJyaWVyIDMuNTgwTUh6ICovCisKKwkJLmhzeW5jX2VuZAk9IDY0LAkJICAgIC5oYmxhbmtfZW5kCQk9IDEyNCwKKwkJLmhibGFua19zdGFydAk9IDgzNiwJCSAgICAuaHRvdGFsCQk9IDg1NywKKworCQkucHJvZ3Jlc3NpdmUJPSBmYWxzZSwJICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKwkJLnZzeW5jX3N0YXJ0X2YxCT0gNiwJCSAgICAudnN5bmNfc3RhcnRfZjIJPSA3LAorCQkudnN5bmNfbGVuCT0gNiwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMSAgICAJPSAwLAorCQkudmVxX3N0YXJ0X2YyCT0gMSwJCSAgICAudmVxX2xlbgkJPSAxOCwKKworCQkudmlfZW5kX2YxCT0gMjAsCQkgICAgLnZpX2VuZF9mMgkJPSAyMSwKKwkJLm5icl9lbmQJPSAyNDAsCisKKwkJLmJ1cnN0X2VuYQk9IHRydWUsCisJCS5oYnVyc3Rfc3RhcnQJPSA3MiwJCSAgICAuaGJ1cnN0X2xlbgkJPSAzNCwKKwkJLnZidXJzdF9zdGFydF9mMSA9IDksCQkgICAgLnZidXJzdF9lbmRfZjEJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjIgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mMgk9IDI0MCwKKwkJLnZidXJzdF9zdGFydF9mMyA9IDksCQkgICAgLnZidXJzdF9lbmRfZjMJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjQgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mNAk9IDI0MCwKKworCQkvKiBkZXNpcmVkIDMuNTgwMDAwMCBhY3R1YWwgMy41ODAwMDAwIGNsb2NrIDEwNy41MiAqLworCQkuZGRhMV9pbmMJPSAgICAxMzYsCisJCS5kZGEyX2luYwk9ICAgNzYyNCwJICAgIC5kZGEyX3NpemUJCT0gIDIwMDEzLAorCQkuZGRhM19pbmMJPSAgICAgIDAsCSAgICAuZGRhM19zaXplCQk9ICAgICAgMCwKKwkJLnNjX3Jlc2V0CT0gVFZfU0NfUkVTRVRfRVZFUllfNCwKKwkJLnBhbF9idXJzdAk9IGZhbHNlLAorCisJCS5jb21wb3NpdGVfbGV2ZWxzID0gJm50c2NfbV9sZXZlbHNfY29tcG9zaXRlLAorCQkuY29tcG9zaXRlX2NvbG9yID0gJm50c2NfbV9jc2NfY29tcG9zaXRlLAorCQkuc3ZpZGVvX2xldmVscyAgPSAmbnRzY19tX2xldmVsc19zdmlkZW8sCisJCS5zdmlkZW9fY29sb3IgPSAmbnRzY19tX2NzY19zdmlkZW8sCisKKwkJLmZpbHRlcl90YWJsZSA9IGZpbHRlcl90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIk5UU0MtNDQzIiwKKwkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLnJlZnJlc2gJPSAyOTk3MCwKKwkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAorCQkuY29tcG9uZW50X29ubHkgPSAwLAorCQkvKiA1MjUgTGluZXMsIDYwIEZpZWxkcywgMTUuNzM0S0h6IGxpbmUsIFN1Yi1DYXJyaWVyIDQuNDNNSHogKi8KKwkJLmhzeW5jX2VuZAk9IDY0LAkJICAgIC5oYmxhbmtfZW5kCQk9IDEyNCwKKwkJLmhibGFua19zdGFydAk9IDgzNiwJCSAgICAuaHRvdGFsCQk9IDg1NywKKworCQkucHJvZ3Jlc3NpdmUJPSBmYWxzZSwJICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gNiwJCSAgICAudnN5bmNfc3RhcnRfZjIJPSA3LAorCQkudnN5bmNfbGVuCT0gNiwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMSAgICAJPSAwLAorCQkudmVxX3N0YXJ0X2YyCT0gMSwJCSAgICAudmVxX2xlbgkJPSAxOCwKKworCQkudmlfZW5kX2YxCT0gMjAsCQkgICAgLnZpX2VuZF9mMgkJPSAyMSwKKwkJLm5icl9lbmQJPSAyNDAsCisKKwkJLmJ1cnN0X2VuYQk9IDgsCisJCS5oYnVyc3Rfc3RhcnQJPSA3MiwJCSAgICAuaGJ1cnN0X2xlbgkJPSAzNCwKKwkJLnZidXJzdF9zdGFydF9mMSA9IDksCQkgICAgLnZidXJzdF9lbmRfZjEJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjIgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mMgk9IDI0MCwKKwkJLnZidXJzdF9zdGFydF9mMyA9IDksCQkgICAgLnZidXJzdF9lbmRfZjMJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjQgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mNAk9IDI0MCwKKworCQkvKiBkZXNpcmVkIDQuNDMzNjE4MCBhY3R1YWwgNC40MzM2MTgwIGNsb2NrIDEwNy41MiAqLworCQkuZGRhMV9pbmMgICAgICAgPSAgICAxNjgsCisJCS5kZGEyX2luYyAgICAgICA9ICAxODU1NywgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDIwNjI1LAorCQkuZGRhM19pbmMgICAgICAgPSAgICAgIDAsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgICAgMCwKKwkJLnNjX3Jlc2V0ICAgPSBUVl9TQ19SRVNFVF9FVkVSWV84LAorCQkucGFsX2J1cnN0ICA9IHRydWUsCisKKwkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmbnRzY19tX2xldmVsc19jb21wb3NpdGUsCisJCS5jb21wb3NpdGVfY29sb3IgPSAmbnRzY19tX2NzY19jb21wb3NpdGUsCisJCS5zdmlkZW9fbGV2ZWxzICA9ICZudHNjX21fbGV2ZWxzX3N2aWRlbywKKwkJLnN2aWRlb19jb2xvciA9ICZudHNjX21fY3NjX3N2aWRlbywKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZQkJPSAiTlRTQy1KIiwKKwkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLnJlZnJlc2gJPSAyOTk3MCwKKwkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAorCQkuY29tcG9uZW50X29ubHkgPSAwLAorCisJCS8qIDUyNSBMaW5lcywgNjAgRmllbGRzLCAxNS43MzRLSHogbGluZSwgU3ViLUNhcnJpZXIgMy41ODBNSHogKi8KKwkJLmhzeW5jX2VuZAk9IDY0LAkJICAgIC5oYmxhbmtfZW5kCQk9IDEyNCwKKwkJLmhibGFua19zdGFydCA9IDgzNiwJICAgIC5odG90YWwJCT0gODU3LAorCisJCS5wcm9ncmVzc2l2ZQk9IGZhbHNlLCAgICAudHJpbGV2ZWxfc3luYyA9IGZhbHNlLAorCisJCS52c3luY19zdGFydF9mMQk9IDYsCSAgICAudnN5bmNfc3RhcnRfZjIJPSA3LAorCQkudnN5bmNfbGVuCT0gNiwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMSAgICAJPSAwLAorCQkudmVxX3N0YXJ0X2YyID0gMSwJICAgIC52ZXFfbGVuCQk9IDE4LAorCisJCS52aV9lbmRfZjEJPSAyMCwJCSAgICAudmlfZW5kX2YyCQk9IDIxLAorCQkubmJyX2VuZAk9IDI0MCwKKworCQkuYnVyc3RfZW5hCT0gdHJ1ZSwKKwkJLmhidXJzdF9zdGFydAk9IDcyLAkJICAgIC5oYnVyc3RfbGVuCQk9IDM0LAorCQkudmJ1cnN0X3N0YXJ0X2YxID0gOSwJCSAgICAudmJ1cnN0X2VuZF9mMQk9IDI0MCwKKwkJLnZidXJzdF9zdGFydF9mMiA9IDEwLAkJICAgIC52YnVyc3RfZW5kX2YyCT0gMjQwLAorCQkudmJ1cnN0X3N0YXJ0X2YzID0gOSwJCSAgICAudmJ1cnN0X2VuZF9mMwk9IDI0MCwKKwkJLnZidXJzdF9zdGFydF9mNCA9IDEwLAkJICAgIC52YnVyc3RfZW5kX2Y0CT0gMjQwLAorCisJCS8qIGRlc2lyZWQgMy41ODAwMDAwIGFjdHVhbCAzLjU4MDAwMDAgY2xvY2sgMTA3LjUyICovCisJCS5kZGExX2luYwk9ICAgIDEzNiwKKwkJLmRkYTJfaW5jCT0gICA3NjI0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjAwMTMsCisJCS5kZGEzX2luYwk9ICAgICAgMCwJICAgIC5kZGEzX3NpemUJCT0gICAgICAwLAorCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV80LAorCQkucGFsX2J1cnN0CT0gZmFsc2UsCisKKwkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmbnRzY19qX2xldmVsc19jb21wb3NpdGUsCisJCS5jb21wb3NpdGVfY29sb3IgPSAmbnRzY19qX2NzY19jb21wb3NpdGUsCisJCS5zdmlkZW9fbGV2ZWxzICA9ICZudHNjX2pfbGV2ZWxzX3N2aWRlbywKKwkJLnN2aWRlb19jb2xvciA9ICZudHNjX2pfY3NjX3N2aWRlbywKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZQkJPSAiUEFMLU0iLAorCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkucmVmcmVzaAk9IDI5OTcwLAorCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCisJCS5jb21wb25lbnRfb25seSA9IDAsCisKKwkJLyogNTI1IExpbmVzLCA2MCBGaWVsZHMsIDE1LjczNEtIeiBsaW5lLCBTdWItQ2FycmllciAzLjU4ME1IeiAqLworCQkuaHN5bmNfZW5kCT0gNjQsCQkgIC5oYmxhbmtfZW5kCQk9IDEyNCwKKwkJLmhibGFua19zdGFydCA9IDgzNiwJICAuaHRvdGFsCQk9IDg1NywKKworCQkucHJvZ3Jlc3NpdmUJPSBmYWxzZSwJICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKwkJLnZzeW5jX3N0YXJ0X2YxCT0gNiwJCSAgICAudnN5bmNfc3RhcnRfZjIJPSA3LAorCQkudnN5bmNfbGVuCT0gNiwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMSAgICAJPSAwLAorCQkudmVxX3N0YXJ0X2YyCT0gMSwJCSAgICAudmVxX2xlbgkJPSAxOCwKKworCQkudmlfZW5kX2YxCT0gMjAsCQkgICAgLnZpX2VuZF9mMgkJPSAyMSwKKwkJLm5icl9lbmQJPSAyNDAsCisKKwkJLmJ1cnN0X2VuYQk9IHRydWUsCisJCS5oYnVyc3Rfc3RhcnQJPSA3MiwJCSAgICAuaGJ1cnN0X2xlbgkJPSAzNCwKKwkJLnZidXJzdF9zdGFydF9mMSA9IDksCQkgICAgLnZidXJzdF9lbmRfZjEJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjIgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mMgk9IDI0MCwKKwkJLnZidXJzdF9zdGFydF9mMyA9IDksCQkgICAgLnZidXJzdF9lbmRfZjMJPSAyNDAsCisJCS52YnVyc3Rfc3RhcnRfZjQgPSAxMCwJCSAgICAudmJ1cnN0X2VuZF9mNAk9IDI0MCwKKworCQkvKiBkZXNpcmVkIDMuNTgwMDAwMCBhY3R1YWwgMy41ODAwMDAwIGNsb2NrIDEwNy41MiAqLworCQkuZGRhMV9pbmMJPSAgICAxMzYsCisJCS5kZGEyX2luYwk9ICAgIDc2MjQsCSAgICAuZGRhMl9zaXplCQk9ICAyMDAxMywKKwkJLmRkYTNfaW5jCT0gICAgICAwLAkgICAgLmRkYTNfc2l6ZQkJPSAgICAgIDAsCisJCS5zY19yZXNldAk9IFRWX1NDX1JFU0VUX0VWRVJZXzQsCisJCS5wYWxfYnVyc3QgID0gZmFsc2UsCisKKwkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmcGFsX21fbGV2ZWxzX2NvbXBvc2l0ZSwKKwkJLmNvbXBvc2l0ZV9jb2xvciA9ICZwYWxfbV9jc2NfY29tcG9zaXRlLAorCQkuc3ZpZGVvX2xldmVscyAgPSAmcGFsX21fbGV2ZWxzX3N2aWRlbywKKwkJLnN2aWRlb19jb2xvciA9ICZwYWxfbV9jc2Nfc3ZpZGVvLAorCisJCS5maWx0ZXJfdGFibGUgPSBmaWx0ZXJfdGFibGUsCisJfSwKKwl7CisJCS8qIDYyNSBMaW5lcywgNTAgRmllbGRzLCAxNS42MjVLSHogbGluZSwgU3ViLUNhcnJpZXIgNC40MzRNSHogKi8KKwkJLm5hbWUJICAgID0gIlBBTC1OIiwKKwkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLnJlZnJlc2gJPSAyNTAwMCwKKwkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAorCQkuY29tcG9uZW50X29ubHkgPSAwLAorCisJCS5oc3luY19lbmQJPSA2NCwJCSAgICAuaGJsYW5rX2VuZAkJPSAxMjgsCisJCS5oYmxhbmtfc3RhcnQgPSA4NDQsCSAgICAuaHRvdGFsCQk9IDg2MywKKworCQkucHJvZ3Jlc3NpdmUgID0gZmFsc2UsICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKworCQkudnN5bmNfc3RhcnRfZjEJPSA2LAkgICAudnN5bmNfc3RhcnRfZjIJPSA3LAorCQkudnN5bmNfbGVuCT0gNiwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMSAgICAJPSAwLAorCQkudmVxX3N0YXJ0X2YyCT0gMSwJCSAgICAudmVxX2xlbgkJPSAxOCwKKworCQkudmlfZW5kX2YxCT0gMjQsCQkgICAgLnZpX2VuZF9mMgkJPSAyNSwKKwkJLm5icl9lbmQJPSAyODYsCisKKwkJLmJ1cnN0X2VuYQk9IHRydWUsCisJCS5oYnVyc3Rfc3RhcnQgPSA3MywJICAgIAkgICAgLmhidXJzdF9sZW4JCT0gMzQsCisJCS52YnVyc3Rfc3RhcnRfZjEgPSA4LAkgICAgLnZidXJzdF9lbmRfZjEJPSAyODUsCisJCS52YnVyc3Rfc3RhcnRfZjIgPSA4LAkgICAgLnZidXJzdF9lbmRfZjIJPSAyODYsCisJCS52YnVyc3Rfc3RhcnRfZjMgPSA5LAkgICAgLnZidXJzdF9lbmRfZjMJPSAyODYsCisJCS52YnVyc3Rfc3RhcnRfZjQgPSA5LAkgICAgLnZidXJzdF9lbmRfZjQJPSAyODUsCisKKworCQkvKiBkZXNpcmVkIDQuNDMzNjE4MCBhY3R1YWwgNC40MzM2MTgwIGNsb2NrIDEwNy41MiAqLworCQkuZGRhMV9pbmMgICAgICAgPSAgICAxNjgsCisJCS5kZGEyX2luYyAgICAgICA9ICAxODU1NywgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDIwNjI1LAorCQkuZGRhM19pbmMgICAgICAgPSAgICAgIDAsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgICAgMCwKKwkJLnNjX3Jlc2V0ICAgPSBUVl9TQ19SRVNFVF9FVkVSWV84LAorCQkucGFsX2J1cnN0ICA9IHRydWUsCisKKwkJLmNvbXBvc2l0ZV9sZXZlbHMgPSAmcGFsX25fbGV2ZWxzX2NvbXBvc2l0ZSwKKwkJLmNvbXBvc2l0ZV9jb2xvciA9ICZwYWxfbl9jc2NfY29tcG9zaXRlLAorCQkuc3ZpZGVvX2xldmVscyAgPSAmcGFsX25fbGV2ZWxzX3N2aWRlbywKKwkJLnN2aWRlb19jb2xvciA9ICZwYWxfbl9jc2Nfc3ZpZGVvLAorCisJCS5maWx0ZXJfdGFibGUgPSBmaWx0ZXJfdGFibGUsCisJfSwKKwl7CisJCS8qIDYyNSBMaW5lcywgNTAgRmllbGRzLCAxNS42MjVLSHogbGluZSwgU3ViLUNhcnJpZXIgNC40MzRNSHogKi8KKwkJLm5hbWUJICAgID0gIlBBTCIsCisJCS5jbG9jawkJPSAxMDc1MjAsCisJCS5yZWZyZXNoCT0gMjUwMDAsCisJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKKwkJLmNvbXBvbmVudF9vbmx5ID0gMCwKKworCQkuaHN5bmNfZW5kCT0gNjQsCQkgICAgLmhibGFua19lbmQJCT0gMTI4LAorCQkuaGJsYW5rX3N0YXJ0CT0gODQ0LAkgICAgLmh0b3RhbAkJPSA4NjMsCisKKwkJLnByb2dyZXNzaXZlCT0gZmFsc2UsICAgIC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKwkJLnZzeW5jX3N0YXJ0X2YxCT0gNSwJICAgIC52c3luY19zdGFydF9mMgk9IDYsCisJCS52c3luY19sZW4JPSA1LAorCisJCS52ZXFfZW5hCT0gdHJ1ZSwJCSAgICAudmVxX3N0YXJ0X2YxICAgIAk9IDAsCisJCS52ZXFfc3RhcnRfZjIJPSAxLAkgICAgLnZlcV9sZW4JCT0gMTUsCisKKwkJLnZpX2VuZF9mMQk9IDI0LAkJICAgIC52aV9lbmRfZjIJCT0gMjUsCisJCS5uYnJfZW5kCT0gMjg2LAorCisJCS5idXJzdF9lbmEJPSB0cnVlLAorCQkuaGJ1cnN0X3N0YXJ0CT0gNzMsCQkgICAgLmhidXJzdF9sZW4JCT0gMzIsCisJCS52YnVyc3Rfc3RhcnRfZjEgPSA4LAkJICAgIC52YnVyc3RfZW5kX2YxCT0gMjg1LAorCQkudmJ1cnN0X3N0YXJ0X2YyID0gOCwJCSAgICAudmJ1cnN0X2VuZF9mMgk9IDI4NiwKKwkJLnZidXJzdF9zdGFydF9mMyA9IDksCQkgICAgLnZidXJzdF9lbmRfZjMJPSAyODYsCisJCS52YnVyc3Rfc3RhcnRfZjQgPSA5LAkJICAgIC52YnVyc3RfZW5kX2Y0CT0gMjg1LAorCisJCS8qIGRlc2lyZWQgNC40MzM2MTgwIGFjdHVhbCA0LjQzMzYxODAgY2xvY2sgMTA3LjUyICovCisJCS5kZGExX2luYyAgICAgICA9ICAgIDE2OCwKKwkJLmRkYTJfaW5jICAgICAgID0gIDE4NTU3LCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjA2MjUsCisJCS5kZGEzX2luYyAgICAgICA9ICAgICAgMCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgICAwLAorCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCisJCS5wYWxfYnVyc3QgID0gdHJ1ZSwKKworCQkuY29tcG9zaXRlX2xldmVscyA9ICZwYWxfbGV2ZWxzX2NvbXBvc2l0ZSwKKwkJLmNvbXBvc2l0ZV9jb2xvciA9ICZwYWxfY3NjX2NvbXBvc2l0ZSwKKwkJLnN2aWRlb19sZXZlbHMgID0gJnBhbF9sZXZlbHNfc3ZpZGVvLAorCQkuc3ZpZGVvX2NvbG9yID0gJnBhbF9jc2Nfc3ZpZGVvLAorCisJCS5maWx0ZXJfdGFibGUgPSBmaWx0ZXJfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgID0gIjQ4MHBANTkuOTRIeiIsCisJCS5jbG9jayAJPSAxMDc1MjAsCisJCS5yZWZyZXNoCT0gNTk5NDAsCisJCS5vdmVyc2FtcGxlICAgICA9IFRWX09WRVJTQU1QTEVfNFgsCisJCS5jb21wb25lbnRfb25seSA9IDEsCisKKwkJLmhzeW5jX2VuZCAgICAgID0gNjQsICAgICAgICAgICAgICAgLmhibGFua19lbmQgICAgICAgICA9IDEyMiwKKwkJLmhibGFua19zdGFydCAgID0gODQyLCAgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDg1NywKKworCQkucHJvZ3Jlc3NpdmUgICAgPSB0cnVlLC50cmlsZXZlbF9zeW5jID0gZmFsc2UsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gMTIsICAgICAgICAgICAgICAgLnZzeW5jX3N0YXJ0X2YyICAgICA9IDEyLAorCQkudnN5bmNfbGVuICAgICAgPSAxMiwKKworCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKKworCQkudmlfZW5kX2YxICAgICAgPSA0NCwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gNDQsCisJCS5uYnJfZW5kICAgICAgICA9IDQ5NiwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICI0ODBwQDYwSHoiLAorCQkuY2xvY2sgCT0gMTA3NTIwLAorCQkucmVmcmVzaAk9IDYwMDAwLAorCQkub3ZlcnNhbXBsZSAgICAgPSBUVl9PVkVSU0FNUExFXzRYLAorCQkuY29tcG9uZW50X29ubHkgPSAxLAorCisJCS5oc3luY19lbmQgICAgICA9IDY0LCAgICAgICAgICAgICAgIC5oYmxhbmtfZW5kICAgICAgICAgPSAxMjIsCisJCS5oYmxhbmtfc3RhcnQgICA9IDg0MiwgICAgICAgICAgICAgIC5odG90YWwgICAgICAgICAgICAgPSA4NTYsCisKKwkJLnByb2dyZXNzaXZlICAgID0gdHJ1ZSwudHJpbGV2ZWxfc3luYyA9IGZhbHNlLAorCisJCS52c3luY19zdGFydF9mMSA9IDEyLCAgICAgICAgICAgICAgIC52c3luY19zdGFydF9mMiAgICAgPSAxMiwKKwkJLnZzeW5jX2xlbiAgICAgID0gMTIsCisKKwkJLnZlcV9lbmEgICAgICAgID0gZmFsc2UsCisKKwkJLnZpX2VuZF9mMSAgICAgID0gNDQsICAgICAgICAgICAgICAgLnZpX2VuZF9mMiAgICAgICAgICA9IDQ0LAorCQkubmJyX2VuZCAgICAgICAgPSA0OTYsCisKKwkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2UsCisKKwkJLmZpbHRlcl90YWJsZSA9IGZpbHRlcl90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiNTc2cCIsCisJCS5jbG9jayAJPSAxMDc1MjAsCisJCS5yZWZyZXNoCT0gNTAwMDAsCisJCS5vdmVyc2FtcGxlICAgICA9IFRWX09WRVJTQU1QTEVfNFgsCisJCS5jb21wb25lbnRfb25seSA9IDEsCisKKwkJLmhzeW5jX2VuZCAgICAgID0gNjQsICAgICAgICAgICAgICAgLmhibGFua19lbmQgICAgICAgICA9IDEzOSwKKwkJLmhibGFua19zdGFydCAgID0gODU5LCAgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDg2MywKKworCQkucHJvZ3Jlc3NpdmUgICAgPSB0cnVlLAkJLnRyaWxldmVsX3N5bmMgPSBmYWxzZSwKKworCQkudnN5bmNfc3RhcnRfZjEgPSAxMCwgICAgICAgICAgICAgICAudnN5bmNfc3RhcnRfZjIgICAgID0gMTAsCisJCS52c3luY19sZW4gICAgICA9IDEwLAorCisJCS52ZXFfZW5hICAgICAgICA9IGZhbHNlLAorCisJCS52aV9lbmRfZjEgICAgICA9IDQ4LCAgICAgICAgICAgICAgIC52aV9lbmRfZjIgICAgICAgICAgPSA0OCwKKwkJLm5icl9lbmQgICAgICAgID0gNTc1LAorCisJCS5idXJzdF9lbmEgICAgICA9IGZhbHNlLAorCisJCS5maWx0ZXJfdGFibGUgPSBmaWx0ZXJfdGFibGUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgID0gIjcyMHBANjBIeiIsCisJCS5jbG9jawkJPSAxNDg4MDAsCisJCS5yZWZyZXNoCT0gNjAwMDAsCisJCS5vdmVyc2FtcGxlICAgICA9IFRWX09WRVJTQU1QTEVfMlgsCisJCS5jb21wb25lbnRfb25seSA9IDEsCisKKwkJLmhzeW5jX2VuZCAgICAgID0gODAsICAgICAgICAgICAgICAgLmhibGFua19lbmQgICAgICAgICA9IDMwMCwKKwkJLmhibGFua19zdGFydCAgID0gMTU4MCwgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDE2NDksCisKKwkJLnByb2dyZXNzaXZlICAgID0gdHJ1ZSwgCSAgICAudHJpbGV2ZWxfc3luYyA9IHRydWUsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gMTAsICAgICAgICAgICAgICAgLnZzeW5jX3N0YXJ0X2YyICAgICA9IDEwLAorCQkudnN5bmNfbGVuICAgICAgPSAxMCwKKworCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKKworCQkudmlfZW5kX2YxICAgICAgPSAyOSwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gMjksCisJCS5uYnJfZW5kICAgICAgICA9IDcxOSwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICI3MjBwQDU5Ljk0SHoiLAorCQkuY2xvY2sJCT0gMTQ4ODAwLAorCQkucmVmcmVzaAk9IDU5OTQwLAorCQkub3ZlcnNhbXBsZSAgICAgPSBUVl9PVkVSU0FNUExFXzJYLAorCQkuY29tcG9uZW50X29ubHkgPSAxLAorCisJCS5oc3luY19lbmQgICAgICA9IDgwLCAgICAgICAgICAgICAgIC5oYmxhbmtfZW5kICAgICAgICAgPSAzMDAsCisJCS5oYmxhbmtfc3RhcnQgICA9IDE1ODAsICAgICAgICAgICAgIC5odG90YWwgICAgICAgICAgICAgPSAxNjUxLAorCisJCS5wcm9ncmVzc2l2ZSAgICA9IHRydWUsIAkgICAgLnRyaWxldmVsX3N5bmMgPSB0cnVlLAorCisJCS52c3luY19zdGFydF9mMSA9IDEwLCAgICAgICAgICAgICAgIC52c3luY19zdGFydF9mMiAgICAgPSAxMCwKKwkJLnZzeW5jX2xlbiAgICAgID0gMTAsCisKKwkJLnZlcV9lbmEgICAgICAgID0gZmFsc2UsCisKKwkJLnZpX2VuZF9mMSAgICAgID0gMjksICAgICAgICAgICAgICAgLnZpX2VuZF9mMiAgICAgICAgICA9IDI5LAorCQkubmJyX2VuZCAgICAgICAgPSA3MTksCisKKwkJLmJ1cnN0X2VuYSAgICAgID0gZmFsc2UsCisKKwkJLmZpbHRlcl90YWJsZSA9IGZpbHRlcl90YWJsZSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiNzIwcEA1MEh6IiwKKwkJLmNsb2NrCQk9IDE0ODgwMCwKKwkJLnJlZnJlc2gJPSA1MDAwMCwKKwkJLm92ZXJzYW1wbGUgICAgID0gVFZfT1ZFUlNBTVBMRV8yWCwKKwkJLmNvbXBvbmVudF9vbmx5ID0gMSwKKworCQkuaHN5bmNfZW5kICAgICAgPSA4MCwgICAgICAgICAgICAgICAuaGJsYW5rX2VuZCAgICAgICAgID0gMzAwLAorCQkuaGJsYW5rX3N0YXJ0ICAgPSAxNTgwLCAgICAgICAgICAgICAuaHRvdGFsICAgICAgICAgICAgID0gMTk3OSwKKworCQkucHJvZ3Jlc3NpdmUgICAgPSB0cnVlLCAJICAgICAgICAudHJpbGV2ZWxfc3luYyA9IHRydWUsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gMTAsICAgICAgICAgICAgICAgLnZzeW5jX3N0YXJ0X2YyICAgICA9IDEwLAorCQkudnN5bmNfbGVuICAgICAgPSAxMCwKKworCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKKworCQkudmlfZW5kX2YxICAgICAgPSAyOSwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gMjksCisJCS5uYnJfZW5kICAgICAgICA9IDcxOSwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCQkubWF4X3NyY3cgPSA4MDAKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiMTA4MGlANTBIeiIsCisJCS5jbG9jawkJPSAxNDg4MDAsCisJCS5yZWZyZXNoCT0gMjUwMDAsCisJCS5vdmVyc2FtcGxlICAgICA9IFRWX09WRVJTQU1QTEVfMlgsCisJCS5jb21wb25lbnRfb25seSA9IDEsCisKKwkJLmhzeW5jX2VuZCAgICAgID0gODgsICAgICAgICAgICAgICAgLmhibGFua19lbmQgICAgICAgICA9IDIzNSwKKwkJLmhibGFua19zdGFydCAgID0gMjE1NSwgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDI2MzksCisKKwkJLnByb2dyZXNzaXZlICAgID0gZmFsc2UsIAkgICAgLnRyaWxldmVsX3N5bmMgPSB0cnVlLAorCisJCS52c3luY19zdGFydF9mMSA9IDQsICAgICAgICAgICAgICAudnN5bmNfc3RhcnRfZjIgICAgID0gNSwKKwkJLnZzeW5jX2xlbiAgICAgID0gMTAsCisKKwkJLnZlcV9lbmEJPSB0cnVlLAkJICAgIC52ZXFfc3RhcnRfZjEgICAgCT0gNCwKKwkJLnZlcV9zdGFydF9mMiAgID0gNCwJICAgIC52ZXFfbGVuCQk9IDEwLAorCisKKwkJLnZpX2VuZF9mMSAgICAgID0gMjEsICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gMjIsCisJCS5uYnJfZW5kICAgICAgICA9IDUzOSwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICIxMDgwaUA2MEh6IiwKKwkJLmNsb2NrCQk9IDE0ODgwMCwKKwkJLnJlZnJlc2gJPSAzMDAwMCwKKwkJLm92ZXJzYW1wbGUgICAgID0gVFZfT1ZFUlNBTVBMRV8yWCwKKwkJLmNvbXBvbmVudF9vbmx5ID0gMSwKKworCQkuaHN5bmNfZW5kICAgICAgPSA4OCwgICAgICAgICAgICAgICAuaGJsYW5rX2VuZCAgICAgICAgID0gMjM1LAorCQkuaGJsYW5rX3N0YXJ0ICAgPSAyMTU1LCAgICAgICAgICAgICAuaHRvdGFsICAgICAgICAgICAgID0gMjE5OSwKKworCQkucHJvZ3Jlc3NpdmUgICAgPSBmYWxzZSwgCSAgICAudHJpbGV2ZWxfc3luYyA9IHRydWUsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gNCwgICAgICAgICAgICAgICAudnN5bmNfc3RhcnRfZjIgICAgID0gNSwKKwkJLnZzeW5jX2xlbiAgICAgID0gMTAsCisKKwkJLnZlcV9lbmEJPSB0cnVlLAkJICAgIC52ZXFfc3RhcnRfZjEgICAgCT0gNCwKKwkJLnZlcV9zdGFydF9mMgk9IDQsCQkgICAgLnZlcV9sZW4JCT0gMTAsCisKKworCQkudmlfZW5kX2YxICAgICAgPSAyMSwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gMjIsCisJCS5uYnJfZW5kICAgICAgICA9IDUzOSwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICIxMDgwaUA1OS45NEh6IiwKKwkJLmNsb2NrCQk9IDE0ODgwMCwKKwkJLnJlZnJlc2gJPSAyOTk3MCwKKwkJLm92ZXJzYW1wbGUgICAgID0gVFZfT1ZFUlNBTVBMRV8yWCwKKwkJLmNvbXBvbmVudF9vbmx5ID0gMSwKKworCQkuaHN5bmNfZW5kICAgICAgPSA4OCwgICAgICAgICAgICAgICAuaGJsYW5rX2VuZCAgICAgICAgID0gMjM1LAorCQkuaGJsYW5rX3N0YXJ0ICAgPSAyMTU1LCAgICAgICAgICAgICAuaHRvdGFsICAgICAgICAgICAgID0gMjIwMCwKKworCQkucHJvZ3Jlc3NpdmUgICAgPSBmYWxzZSwgCSAgICAudHJpbGV2ZWxfc3luYyA9IHRydWUsCisKKwkJLnZzeW5jX3N0YXJ0X2YxID0gNCwgICAgICAgICAgICAudnN5bmNfc3RhcnRfZjIgICAgPSA1LAorCQkudnN5bmNfbGVuICAgICAgPSAxMCwKKworCQkudmVxX2VuYQk9IHRydWUsCQkgICAgLnZlcV9zdGFydF9mMQk9IDQsCisJCS52ZXFfc3RhcnRfZjIgPSA0LAkgICAgCSAgICAudmVxX2xlbiA9IDEwLAorCisKKwkJLnZpX2VuZF9mMSAgICAgID0gMjEsICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgCT0gMjIsCisJCS5uYnJfZW5kICAgICAgICA9IDUzOSwKKworCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKKworCQkuZmlsdGVyX3RhYmxlID0gZmlsdGVyX3RhYmxlLAorCX0sCit9OworCisjZGVmaW5lIE5VTV9UVl9NT0RFUyBzaXplb2YodHZfbW9kZXMpIC8gc2l6ZW9mICh0dl9tb2Rlc1swXSkKKworc3RhdGljIHZvaWQKK2ludGVsX3R2X2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzd2l0Y2gobW9kZSkgeworCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJSTkxNV9XUklURShUVl9DVEwsIEk5MTVfUkVBRChUVl9DVEwpIHwgVFZfRU5DX0VOQUJMRSk7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOgorCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgorCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCUk5MTVfV1JJVEUoVFZfQ1RMLCBJOTE1X1JFQUQoVFZfQ1RMKSAmIH5UVl9FTkNfRU5BQkxFKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAoraW50ZWxfdHZfc2F2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF90dl9wcml2ICp0dl9wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlpbnQgaTsKKworCXR2X3ByaXYtPnNhdmVfVFZfSF9DVExfMSA9IEk5MTVfUkVBRChUVl9IX0NUTF8xKTsKKwl0dl9wcml2LT5zYXZlX1RWX0hfQ1RMXzIgPSBJOTE1X1JFQUQoVFZfSF9DVExfMik7CisJdHZfcHJpdi0+c2F2ZV9UVl9IX0NUTF8zID0gSTkxNV9SRUFEKFRWX0hfQ1RMXzMpOworCXR2X3ByaXYtPnNhdmVfVFZfVl9DVExfMSA9IEk5MTVfUkVBRChUVl9WX0NUTF8xKTsKKwl0dl9wcml2LT5zYXZlX1RWX1ZfQ1RMXzIgPSBJOTE1X1JFQUQoVFZfVl9DVExfMik7CisJdHZfcHJpdi0+c2F2ZV9UVl9WX0NUTF8zID0gSTkxNV9SRUFEKFRWX1ZfQ1RMXzMpOworCXR2X3ByaXYtPnNhdmVfVFZfVl9DVExfNCA9IEk5MTVfUkVBRChUVl9WX0NUTF80KTsKKwl0dl9wcml2LT5zYXZlX1RWX1ZfQ1RMXzUgPSBJOTE1X1JFQUQoVFZfVl9DVExfNSk7CisJdHZfcHJpdi0+c2F2ZV9UVl9WX0NUTF82ID0gSTkxNV9SRUFEKFRWX1ZfQ1RMXzYpOworCXR2X3ByaXYtPnNhdmVfVFZfVl9DVExfNyA9IEk5MTVfUkVBRChUVl9WX0NUTF83KTsKKwl0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8xID0gSTkxNV9SRUFEKFRWX1NDX0NUTF8xKTsKKwl0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8yID0gSTkxNV9SRUFEKFRWX1NDX0NUTF8yKTsKKwl0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8zID0gSTkxNV9SRUFEKFRWX1NDX0NUTF8zKTsKKworCXR2X3ByaXYtPnNhdmVfVFZfQ1NDX1kgPSBJOTE1X1JFQUQoVFZfQ1NDX1kpOworCXR2X3ByaXYtPnNhdmVfVFZfQ1NDX1kyID0gSTkxNV9SRUFEKFRWX0NTQ19ZMik7CisJdHZfcHJpdi0+c2F2ZV9UVl9DU0NfVSA9IEk5MTVfUkVBRChUVl9DU0NfVSk7CisJdHZfcHJpdi0+c2F2ZV9UVl9DU0NfVTIgPSBJOTE1X1JFQUQoVFZfQ1NDX1UyKTsKKwl0dl9wcml2LT5zYXZlX1RWX0NTQ19WID0gSTkxNV9SRUFEKFRWX0NTQ19WKTsKKwl0dl9wcml2LT5zYXZlX1RWX0NTQ19WMiA9IEk5MTVfUkVBRChUVl9DU0NfVjIpOworCXR2X3ByaXYtPnNhdmVfVFZfQ0xSX0tOT0JTID0gSTkxNV9SRUFEKFRWX0NMUl9LTk9CUyk7CisJdHZfcHJpdi0+c2F2ZV9UVl9DTFJfTEVWRUwgPSBJOTE1X1JFQUQoVFZfQ0xSX0xFVkVMKTsKKwl0dl9wcml2LT5zYXZlX1RWX1dJTl9QT1MgPSBJOTE1X1JFQUQoVFZfV0lOX1BPUyk7CisJdHZfcHJpdi0+c2F2ZV9UVl9XSU5fU0laRSA9IEk5MTVfUkVBRChUVl9XSU5fU0laRSk7CisJdHZfcHJpdi0+c2F2ZV9UVl9GSUxURVJfQ1RMXzEgPSBJOTE1X1JFQUQoVFZfRklMVEVSX0NUTF8xKTsKKwl0dl9wcml2LT5zYXZlX1RWX0ZJTFRFUl9DVExfMiA9IEk5MTVfUkVBRChUVl9GSUxURVJfQ1RMXzIpOworCXR2X3ByaXYtPnNhdmVfVFZfRklMVEVSX0NUTF8zID0gSTkxNV9SRUFEKFRWX0ZJTFRFUl9DVExfMyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjA7IGkrKykKKwkJdHZfcHJpdi0+c2F2ZV9UVl9IX0xVTUFbaV0gPSBJOTE1X1JFQUQoVFZfSF9MVU1BXzAgKyAoaSA8PDIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjA7IGkrKykKKwkJdHZfcHJpdi0+c2F2ZV9UVl9IX0NIUk9NQVtpXSA9IEk5MTVfUkVBRChUVl9IX0NIUk9NQV8wICsgKGkgPDwyKSk7CisJZm9yIChpID0gMDsgaSA8IDQzOyBpKyspCisJCXR2X3ByaXYtPnNhdmVfVFZfVl9MVU1BW2ldID0gSTkxNV9SRUFEKFRWX1ZfTFVNQV8wICsgKGkgPDwyKSk7CisJZm9yIChpID0gMDsgaSA8IDQzOyBpKyspCisJCXR2X3ByaXYtPnNhdmVfVFZfVl9DSFJPTUFbaV0gPSBJOTE1X1JFQUQoVFZfVl9DSFJPTUFfMCArIChpIDw8MikpOworCisJdHZfcHJpdi0+c2F2ZV9UVl9EQUMgPSBJOTE1X1JFQUQoVFZfREFDKTsKKwl0dl9wcml2LT5zYXZlX1RWX0NUTCA9IEk5MTVfUkVBRChUVl9DVEwpOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxfdHZfcmVzdG9yZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF90dl9wcml2ICp0dl9wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjb25uZWN0b3ItPmVuY29kZXItPmNydGM7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGM7CisJaW50IGk7CisKKwkvKiBGSVhNRTogTm8gQ1JUQz8gKi8KKwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCUk5MTVfV1JJVEUoVFZfSF9DVExfMSwgdHZfcHJpdi0+c2F2ZV9UVl9IX0NUTF8xKTsKKwlJOTE1X1dSSVRFKFRWX0hfQ1RMXzIsIHR2X3ByaXYtPnNhdmVfVFZfSF9DVExfMik7CisJSTkxNV9XUklURShUVl9IX0NUTF8zLCB0dl9wcml2LT5zYXZlX1RWX0hfQ1RMXzMpOworCUk5MTVfV1JJVEUoVFZfVl9DVExfMSwgdHZfcHJpdi0+c2F2ZV9UVl9WX0NUTF8xKTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzIsIHR2X3ByaXYtPnNhdmVfVFZfVl9DVExfMik7CisJSTkxNV9XUklURShUVl9WX0NUTF8zLCB0dl9wcml2LT5zYXZlX1RWX1ZfQ1RMXzMpOworCUk5MTVfV1JJVEUoVFZfVl9DVExfNCwgdHZfcHJpdi0+c2F2ZV9UVl9WX0NUTF80KTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzUsIHR2X3ByaXYtPnNhdmVfVFZfVl9DVExfNSk7CisJSTkxNV9XUklURShUVl9WX0NUTF82LCB0dl9wcml2LT5zYXZlX1RWX1ZfQ1RMXzYpOworCUk5MTVfV1JJVEUoVFZfVl9DVExfNywgdHZfcHJpdi0+c2F2ZV9UVl9WX0NUTF83KTsKKwlJOTE1X1dSSVRFKFRWX1NDX0NUTF8xLCB0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8xKTsKKwlJOTE1X1dSSVRFKFRWX1NDX0NUTF8yLCB0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8yKTsKKwlJOTE1X1dSSVRFKFRWX1NDX0NUTF8zLCB0dl9wcml2LT5zYXZlX1RWX1NDX0NUTF8zKTsKKworCUk5MTVfV1JJVEUoVFZfQ1NDX1ksIHR2X3ByaXYtPnNhdmVfVFZfQ1NDX1kpOworCUk5MTVfV1JJVEUoVFZfQ1NDX1kyLCB0dl9wcml2LT5zYXZlX1RWX0NTQ19ZMik7CisJSTkxNV9XUklURShUVl9DU0NfVSwgdHZfcHJpdi0+c2F2ZV9UVl9DU0NfVSk7CisJSTkxNV9XUklURShUVl9DU0NfVTIsIHR2X3ByaXYtPnNhdmVfVFZfQ1NDX1UyKTsKKwlJOTE1X1dSSVRFKFRWX0NTQ19WLCB0dl9wcml2LT5zYXZlX1RWX0NTQ19WKTsKKwlJOTE1X1dSSVRFKFRWX0NTQ19WMiwgdHZfcHJpdi0+c2F2ZV9UVl9DU0NfVjIpOworCUk5MTVfV1JJVEUoVFZfQ0xSX0tOT0JTLCB0dl9wcml2LT5zYXZlX1RWX0NMUl9LTk9CUyk7CisJSTkxNV9XUklURShUVl9DTFJfTEVWRUwsIHR2X3ByaXYtPnNhdmVfVFZfQ0xSX0xFVkVMKTsKKworCXsKKwkJaW50IHBpcGVjb25mX3JlZyA9IChpbnRlbF9jcnRjLT5waXBlID09IDApID8KKwkJCVBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwkJaW50IGRzcGNudHJfcmVnID0gKGludGVsX2NydGMtPnBsYW5lID09IDApID8KKwkJCURTUEFDTlRSIDogRFNQQkNOVFI7CisJCWludCBwaXBlY29uZiA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCQlpbnQgZHNwY250ciA9IEk5MTVfUkVBRChkc3BjbnRyX3JlZyk7CisJCWludCBkc3BiYXNlX3JlZyA9IChpbnRlbF9jcnRjLT5wbGFuZSA9PSAwKSA/CisJCQlEU1BBQUREUiA6IERTUEJBRERSOworCQkvKiBQaXBlIG11c3QgYmUgb2ZmIGhlcmUgKi8KKwkJSTkxNV9XUklURShkc3BjbnRyX3JlZywgZHNwY250ciAmIH5ESVNQTEFZX1BMQU5FX0VOQUJMRSk7CisJCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCisJCUk5MTVfV1JJVEUoZHNwYmFzZV9yZWcsIEk5MTVfUkVBRChkc3BiYXNlX3JlZykpOworCisJCWlmICghSVNfSTlYWChkZXYpKSB7CisJCQkvKiBXYWl0IGZvciB2YmxhbmsgZm9yIHRoZSBkaXNhYmxlIHRvIHRha2UgZWZmZWN0ICovCisJCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKwkJfQorCisJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZiAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKKwkJLyogV2FpdCBmb3IgdmJsYW5rIGZvciB0aGUgZGlzYWJsZSB0byB0YWtlIGVmZmVjdC4gKi8KKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwkJLyogRmlsdGVyIGN0bCBtdXN0IGJlIHNldCBiZWZvcmUgVFZfV0lOX1NJWkUgKi8KKwkJSTkxNV9XUklURShUVl9GSUxURVJfQ1RMXzEsIHR2X3ByaXYtPnNhdmVfVFZfRklMVEVSX0NUTF8xKTsKKwkJSTkxNV9XUklURShUVl9GSUxURVJfQ1RMXzIsIHR2X3ByaXYtPnNhdmVfVFZfRklMVEVSX0NUTF8yKTsKKwkJSTkxNV9XUklURShUVl9GSUxURVJfQ1RMXzMsIHR2X3ByaXYtPnNhdmVfVFZfRklMVEVSX0NUTF8zKTsKKwkJSTkxNV9XUklURShUVl9XSU5fUE9TLCB0dl9wcml2LT5zYXZlX1RWX1dJTl9QT1MpOworCQlJOTE1X1dSSVRFKFRWX1dJTl9TSVpFLCB0dl9wcml2LT5zYXZlX1RWX1dJTl9TSVpFKTsKKwkJSTkxNV9XUklURShwaXBlY29uZl9yZWcsIHBpcGVjb25mKTsKKwkJSTkxNV9XUklURShkc3BjbnRyX3JlZywgZHNwY250cik7CisJCS8qIEZsdXNoIHRoZSBwbGFuZSBjaGFuZ2VzICovCisJCUk5MTVfV1JJVEUoZHNwYmFzZV9yZWcsIEk5MTVfUkVBRChkc3BiYXNlX3JlZykpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA2MDsgaSsrKQorCQlJOTE1X1dSSVRFKFRWX0hfTFVNQV8wICsgKGkgPDwyKSwgdHZfcHJpdi0+c2F2ZV9UVl9IX0xVTUFbaV0pOworCWZvciAoaSA9IDA7IGkgPCA2MDsgaSsrKQorCQlJOTE1X1dSSVRFKFRWX0hfQ0hST01BXzAgKyAoaSA8PDIpLCB0dl9wcml2LT5zYXZlX1RWX0hfQ0hST01BW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDM7IGkrKykKKwkJSTkxNV9XUklURShUVl9WX0xVTUFfMCArIChpIDw8MiksIHR2X3ByaXYtPnNhdmVfVFZfVl9MVU1BW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDM7IGkrKykKKwkJSTkxNV9XUklURShUVl9WX0NIUk9NQV8wICsgKGkgPDwyKSwgdHZfcHJpdi0+c2F2ZV9UVl9WX0NIUk9NQVtpXSk7CisKKwlJOTE1X1dSSVRFKFRWX0RBQywgdHZfcHJpdi0+c2F2ZV9UVl9EQUMpOworCUk5MTVfV1JJVEUoVFZfQ1RMLCB0dl9wcml2LT5zYXZlX1RWX0NUTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZfbW9kZSAqCitpbnRlbF90dl9tb2RlX2xvb2t1cCAoY2hhciAqdHZfZm9ybWF0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih0dl9tb2RlcykgLyBzaXplb2YgKHR2X21vZGVzWzBdKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gJnR2X21vZGVzW2ldOworCisJCWlmICghc3RyY21wKHR2X2Zvcm1hdCwgdHZfbW9kZS0+bmFtZSkpCisJCQlyZXR1cm4gdHZfbW9kZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZfbW9kZSAqCitpbnRlbF90dl9tb2RlX2ZpbmQgKHN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCkKK3sKKwlzdHJ1Y3QgaW50ZWxfdHZfcHJpdiAqdHZfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisKKwlyZXR1cm4gaW50ZWxfdHZfbW9kZV9sb29rdXAodHZfcHJpdi0+dHZfZm9ybWF0KTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitpbnRlbF90dl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGludGVsX291dHB1dCk7CisKKwkvKiBFbnN1cmUgVFYgcmVmcmVzaCBpcyBjbG9zZSB0byBkZXNpcmVkIHJlZnJlc2ggKi8KKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpKSA8IDEpCisJCXJldHVybiBNT0RFX09LOworCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOworfQorCisKK3N0YXRpYyBib29sCitpbnRlbF90dl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmRybV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSBlbmNfdG9faW50ZWxfb3V0cHV0KGVuY29kZXIpOworCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kIChpbnRlbF9vdXRwdXQpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqb3RoZXJfZW5jb2RlcjsKKworCWlmICghdHZfbW9kZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRklYTUU6IGxvY2sgZW5jb2RlciBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlcl9lbmNvZGVyLCAmZHJtX2NvbmZpZy0+ZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCWlmIChvdGhlcl9lbmNvZGVyICE9IGVuY29kZXIgJiYKKwkJICAgIG90aGVyX2VuY29kZXItPmNydGMgPT0gZW5jb2Rlci0+Y3J0YykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlhZGp1c3RlZF9tb2RlLT5jbG9jayA9IHR2X21vZGUtPmNsb2NrOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxfdHZfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZW5jb2Rlci0+Y3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gZW5jX3RvX2ludGVsX291dHB1dChlbmNvZGVyKTsKKwlzdHJ1Y3QgaW50ZWxfdHZfcHJpdiAqdHZfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJY29uc3Qgc3RydWN0IHR2X21vZGUgKnR2X21vZGUgPSBpbnRlbF90dl9tb2RlX2ZpbmQoaW50ZWxfb3V0cHV0KTsKKwl1MzIgdHZfY3RsOworCXUzMiBoY3RsMSwgaGN0bDIsIGhjdGwzOworCXUzMiB2Y3RsMSwgdmN0bDIsIHZjdGwzLCB2Y3RsNCwgdmN0bDUsIHZjdGw2LCB2Y3RsNzsKKwl1MzIgc2NjdGwxLCBzY2N0bDIsIHNjY3RsMzsKKwlpbnQgaSwgajsKKwljb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzICp2aWRlb19sZXZlbHM7CisJY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gKmNvbG9yX2NvbnZlcnNpb247CisJYm9vbCBidXJzdF9lbmE7CisKKwlpZiAoIXR2X21vZGUpCisJCXJldHVybjsJLyogY2FuJ3QgaGFwcGVuIChtb2RlX3ByZXBhcmUgcHJldmVudHMgdGhpcykgKi8KKworCXR2X2N0bCA9IDA7CisKKwlzd2l0Y2ggKHR2X3ByaXYtPnR5cGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd246CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlOgorCQl0dl9jdGwgfD0gVFZfRU5DX09VVFBVVF9DT01QT1NJVEU7CisJCXZpZGVvX2xldmVscyA9IHR2X21vZGUtPmNvbXBvc2l0ZV9sZXZlbHM7CisJCWNvbG9yX2NvbnZlcnNpb24gPSB0dl9tb2RlLT5jb21wb3NpdGVfY29sb3I7CisJCWJ1cnN0X2VuYSA9IHR2X21vZGUtPmJ1cnN0X2VuYTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50OgorCQl0dl9jdGwgfD0gVFZfRU5DX09VVFBVVF9DT01QT05FTlQ7CisJCXZpZGVvX2xldmVscyA9ICZjb21wb25lbnRfbGV2ZWxzOworCQlpZiAodHZfbW9kZS0+YnVyc3RfZW5hKQorCQkJY29sb3JfY29udmVyc2lvbiA9ICZzZHR2X2NzY195cHJwYjsKKwkJZWxzZQorCQkJY29sb3JfY29udmVyc2lvbiA9ICZoZHR2X2NzY195cHJwYjsKKwkJYnVyc3RfZW5hID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzoKKwkJdHZfY3RsIHw9IFRWX0VOQ19PVVRQVVRfU1ZJREVPOworCQl2aWRlb19sZXZlbHMgPSB0dl9tb2RlLT5zdmlkZW9fbGV2ZWxzOworCQljb2xvcl9jb252ZXJzaW9uID0gdHZfbW9kZS0+c3ZpZGVvX2NvbG9yOworCQlidXJzdF9lbmEgPSB0dl9tb2RlLT5idXJzdF9lbmE7CisJCWJyZWFrOworCX0KKwloY3RsMSA9ICh0dl9tb2RlLT5oc3luY19lbmQgPDwgVFZfSFNZTkNfRU5EX1NISUZUKSB8CisJCSh0dl9tb2RlLT5odG90YWwgPDwgVFZfSFRPVEFMX1NISUZUKTsKKworCWhjdGwyID0gKHR2X21vZGUtPmhidXJzdF9zdGFydCA8PCAxNikgfAorCQkodHZfbW9kZS0+aGJ1cnN0X2xlbiA8PCBUVl9IQlVSU1RfTEVOX1NISUZUKTsKKworCWlmIChidXJzdF9lbmEpCisJCWhjdGwyIHw9IFRWX0JVUlNUX0VOQTsKKworCWhjdGwzID0gKHR2X21vZGUtPmhibGFua19zdGFydCA8PCBUVl9IQkxBTktfU1RBUlRfU0hJRlQpIHwKKwkJKHR2X21vZGUtPmhibGFua19lbmQgPDwgVFZfSEJMQU5LX0VORF9TSElGVCk7CisKKwl2Y3RsMSA9ICh0dl9tb2RlLT5uYnJfZW5kIDw8IFRWX05CUl9FTkRfU0hJRlQpIHwKKwkJKHR2X21vZGUtPnZpX2VuZF9mMSA8PCBUVl9WSV9FTkRfRjFfU0hJRlQpIHwKKwkJKHR2X21vZGUtPnZpX2VuZF9mMiA8PCBUVl9WSV9FTkRfRjJfU0hJRlQpOworCisJdmN0bDIgPSAodHZfbW9kZS0+dnN5bmNfbGVuIDw8IFRWX1ZTWU5DX0xFTl9TSElGVCkgfAorCQkodHZfbW9kZS0+dnN5bmNfc3RhcnRfZjEgPDwgVFZfVlNZTkNfU1RBUlRfRjFfU0hJRlQpIHwKKwkJKHR2X21vZGUtPnZzeW5jX3N0YXJ0X2YyIDw8IFRWX1ZTWU5DX1NUQVJUX0YyX1NISUZUKTsKKworCXZjdGwzID0gKHR2X21vZGUtPnZlcV9sZW4gPDwgVFZfVkVRX0xFTl9TSElGVCkgfAorCQkodHZfbW9kZS0+dmVxX3N0YXJ0X2YxIDw8IFRWX1ZFUV9TVEFSVF9GMV9TSElGVCkgfAorCQkodHZfbW9kZS0+dmVxX3N0YXJ0X2YyIDw8IFRWX1ZFUV9TVEFSVF9GMl9TSElGVCk7CisKKwlpZiAodHZfbW9kZS0+dmVxX2VuYSkKKwkJdmN0bDMgfD0gVFZfRVFVQUxfRU5BOworCisJdmN0bDQgPSAodHZfbW9kZS0+dmJ1cnN0X3N0YXJ0X2YxIDw8IFRWX1ZCVVJTVF9TVEFSVF9GMV9TSElGVCkgfAorCQkodHZfbW9kZS0+dmJ1cnN0X2VuZF9mMSA8PCBUVl9WQlVSU1RfRU5EX0YxX1NISUZUKTsKKworCXZjdGw1ID0gKHR2X21vZGUtPnZidXJzdF9zdGFydF9mMiA8PCBUVl9WQlVSU1RfU1RBUlRfRjJfU0hJRlQpIHwKKwkJKHR2X21vZGUtPnZidXJzdF9lbmRfZjIgPDwgVFZfVkJVUlNUX0VORF9GMl9TSElGVCk7CisKKwl2Y3RsNiA9ICh0dl9tb2RlLT52YnVyc3Rfc3RhcnRfZjMgPDwgVFZfVkJVUlNUX1NUQVJUX0YzX1NISUZUKSB8CisJCSh0dl9tb2RlLT52YnVyc3RfZW5kX2YzIDw8IFRWX1ZCVVJTVF9FTkRfRjNfU0hJRlQpOworCisJdmN0bDcgPSAodHZfbW9kZS0+dmJ1cnN0X3N0YXJ0X2Y0IDw8IFRWX1ZCVVJTVF9TVEFSVF9GNF9TSElGVCkgfAorCQkodHZfbW9kZS0+dmJ1cnN0X2VuZF9mNCA8PCBUVl9WQlVSU1RfRU5EX0Y0X1NISUZUKTsKKworCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDEpCisJCXR2X2N0bCB8PSBUVl9FTkNfUElQRUJfU0VMRUNUOworCXR2X2N0bCB8PSB0dl9tb2RlLT5vdmVyc2FtcGxlOworCisJaWYgKHR2X21vZGUtPnByb2dyZXNzaXZlKQorCQl0dl9jdGwgfD0gVFZfUFJPR1JFU1NJVkU7CisJaWYgKHR2X21vZGUtPnRyaWxldmVsX3N5bmMpCisJCXR2X2N0bCB8PSBUVl9UUklMRVZFTF9TWU5DOworCWlmICh0dl9tb2RlLT5wYWxfYnVyc3QpCisJCXR2X2N0bCB8PSBUVl9QQUxfQlVSU1Q7CisJc2NjdGwxID0gMDsKKwkvKiBkZGExIGltcGxpZXMgdmFsaWQgdmlkZW8gbGV2ZWxzICovCisJaWYgKHR2X21vZGUtPmRkYTFfaW5jKSB7CisJCXNjY3RsMSB8PSBUVl9TQ19EREExX0VOOworCQlzY2N0bDEgfD0gdmlkZW9fbGV2ZWxzLT5idXJzdCA8PCBUVl9CVVJTVF9MRVZFTF9TSElGVDsKKwl9CisKKwlpZiAodHZfbW9kZS0+ZGRhMl9pbmMpCisJCXNjY3RsMSB8PSBUVl9TQ19EREEyX0VOOworCisJaWYgKHR2X21vZGUtPmRkYTNfaW5jKQorCQlzY2N0bDEgfD0gVFZfU0NfRERBM19FTjsKKworCXNjY3RsMSB8PSB0dl9tb2RlLT5zY19yZXNldDsKKwlzY2N0bDEgfD0gdHZfbW9kZS0+ZGRhMV9pbmMgPDwgVFZfU0NEREExX0lOQ19TSElGVDsKKworCXNjY3RsMiA9IHR2X21vZGUtPmRkYTJfc2l6ZSA8PCBUVl9TQ0REQTJfU0laRV9TSElGVCB8CisJCXR2X21vZGUtPmRkYTJfaW5jIDw8IFRWX1NDRERBMl9JTkNfU0hJRlQ7CisKKwlzY2N0bDMgPSB0dl9tb2RlLT5kZGEzX3NpemUgPDwgVFZfU0NEREEzX1NJWkVfU0hJRlQgfAorCQl0dl9tb2RlLT5kZGEzX2luYyA8PCBUVl9TQ0REQTNfSU5DX1NISUZUOworCisJLyogRW5hYmxlIHR3byBmaXhlcyBmb3IgdGhlIGNoaXBzIHRoYXQgbmVlZCB0aGVtLiAqLworCWlmIChkZXYtPnBjaV9kZXZpY2UgPCAweDI3NzIpCisJCXR2X2N0bCB8PSBUVl9FTkNfQzBfRklYIHwgVFZfRU5DX1NEUF9GSVg7CisKKwlJOTE1X1dSSVRFKFRWX0hfQ1RMXzEsIGhjdGwxKTsKKwlJOTE1X1dSSVRFKFRWX0hfQ1RMXzIsIGhjdGwyKTsKKwlJOTE1X1dSSVRFKFRWX0hfQ1RMXzMsIGhjdGwzKTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzEsIHZjdGwxKTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzIsIHZjdGwyKTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzMsIHZjdGwzKTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzQsIHZjdGw0KTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzUsIHZjdGw1KTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzYsIHZjdGw2KTsKKwlJOTE1X1dSSVRFKFRWX1ZfQ1RMXzcsIHZjdGw3KTsKKwlJOTE1X1dSSVRFKFRWX1NDX0NUTF8xLCBzY2N0bDEpOworCUk5MTVfV1JJVEUoVFZfU0NfQ1RMXzIsIHNjY3RsMik7CisJSTkxNV9XUklURShUVl9TQ19DVExfMywgc2NjdGwzKTsKKworCWlmIChjb2xvcl9jb252ZXJzaW9uKSB7CisJCUk5MTVfV1JJVEUoVFZfQ1NDX1ksIChjb2xvcl9jb252ZXJzaW9uLT5yeSA8PCAxNikgfAorCQkJICAgY29sb3JfY29udmVyc2lvbi0+Z3kpOworCQlJOTE1X1dSSVRFKFRWX0NTQ19ZMiwoY29sb3JfY29udmVyc2lvbi0+YnkgPDwgMTYpIHwKKwkJCSAgIGNvbG9yX2NvbnZlcnNpb24tPmF5KTsKKwkJSTkxNV9XUklURShUVl9DU0NfVSwgKGNvbG9yX2NvbnZlcnNpb24tPnJ1IDw8IDE2KSB8CisJCQkgICBjb2xvcl9jb252ZXJzaW9uLT5ndSk7CisJCUk5MTVfV1JJVEUoVFZfQ1NDX1UyLCAoY29sb3JfY29udmVyc2lvbi0+YnUgPDwgMTYpIHwKKwkJCSAgIGNvbG9yX2NvbnZlcnNpb24tPmF1KTsKKwkJSTkxNV9XUklURShUVl9DU0NfViwgKGNvbG9yX2NvbnZlcnNpb24tPnJ2IDw8IDE2KSB8CisJCQkgICBjb2xvcl9jb252ZXJzaW9uLT5ndik7CisJCUk5MTVfV1JJVEUoVFZfQ1NDX1YyLCAoY29sb3JfY29udmVyc2lvbi0+YnYgPDwgMTYpIHwKKwkJCSAgIGNvbG9yX2NvbnZlcnNpb24tPmF2KTsKKwl9CisKKwlJOTE1X1dSSVRFKFRWX0NMUl9LTk9CUywgMHgwMDYwNjAwMCk7CisJaWYgKHZpZGVvX2xldmVscykKKwkJSTkxNV9XUklURShUVl9DTFJfTEVWRUwsCisJCQkgICAoKHZpZGVvX2xldmVscy0+YmxhY2sgPDwgVFZfQkxBQ0tfTEVWRUxfU0hJRlQpIHwKKwkJCSAgICAodmlkZW9fbGV2ZWxzLT5ibGFuayA8PCBUVl9CTEFOS19MRVZFTF9TSElGVCkpKTsKKwl7CisJCWludCBwaXBlY29uZl9yZWcgPSAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKSA/CisJCQlQSVBFQUNPTkYgOiBQSVBFQkNPTkY7CisJCWludCBkc3BjbnRyX3JlZyA9IChpbnRlbF9jcnRjLT5wbGFuZSA9PSAwKSA/CisJCQlEU1BBQ05UUiA6IERTUEJDTlRSOworCQlpbnQgcGlwZWNvbmYgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJaW50IGRzcGNudHIgPSBJOTE1X1JFQUQoZHNwY250cl9yZWcpOworCQlpbnQgZHNwYmFzZV9yZWcgPSAoaW50ZWxfY3J0Yy0+cGxhbmUgPT0gMCkgPworCQkJRFNQQUFERFIgOiBEU1BCQUREUjsKKwkJaW50IHhwb3MgPSAweDAsIHlwb3MgPSAweDA7CisJCXVuc2lnbmVkIGludCB4c2l6ZSwgeXNpemU7CisJCS8qIFBpcGUgbXVzdCBiZSBvZmYgaGVyZSAqLworCQlJOTE1X1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyICYgfkRJU1BMQVlfUExBTkVfRU5BQkxFKTsKKwkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwkJSTkxNV9XUklURShkc3BiYXNlX3JlZywgSTkxNV9SRUFEKGRzcGJhc2VfcmVnKSk7CisKKwkJLyogV2FpdCBmb3IgdmJsYW5rIGZvciB0aGUgZGlzYWJsZSB0byB0YWtlIGVmZmVjdCAqLworCQlpZiAoIUlTX0k5WFgoZGV2KSkKKwkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOworCisJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZiAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKKwkJLyogV2FpdCBmb3IgdmJsYW5rIGZvciB0aGUgZGlzYWJsZSB0byB0YWtlIGVmZmVjdC4gKi8KKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwkJLyogRmlsdGVyIGN0bCBtdXN0IGJlIHNldCBiZWZvcmUgVFZfV0lOX1NJWkUgKi8KKwkJSTkxNV9XUklURShUVl9GSUxURVJfQ1RMXzEsIFRWX0FVVE9fU0NBTEUpOworCQl4c2l6ZSA9IHR2X21vZGUtPmhibGFua19zdGFydCAtIHR2X21vZGUtPmhibGFua19lbmQ7CisJCWlmICh0dl9tb2RlLT5wcm9ncmVzc2l2ZSkKKwkJCXlzaXplID0gdHZfbW9kZS0+bmJyX2VuZCArIDE7CisJCWVsc2UKKwkJCXlzaXplID0gMip0dl9tb2RlLT5uYnJfZW5kICsgMTsKKworCQl4cG9zICs9IHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fTEVGVF07CisJCXlwb3MgKz0gdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9UT1BdOworCQl4c2l6ZSAtPSAodHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9MRUZUXSArCisJCQkgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdKTsKKwkJeXNpemUgLT0gKHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSArCisJCQkgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fQk9UVE9NXSk7CisJCUk5MTVfV1JJVEUoVFZfV0lOX1BPUywgKHhwb3M8PDE2KXx5cG9zKTsKKwkJSTkxNV9XUklURShUVl9XSU5fU0laRSwgKHhzaXplPDwxNil8eXNpemUpOworCisJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZik7CisJCUk5MTVfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLworCQlJOTE1X1dSSVRFKGRzcGJhc2VfcmVnLCBJOTE1X1JFQUQoZHNwYmFzZV9yZWcpKTsKKwl9CisKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNjA7IGkrKykKKwkJSTkxNV9XUklURShUVl9IX0xVTUFfMCArIChpPDwyKSwgdHZfbW9kZS0+ZmlsdGVyX3RhYmxlW2orK10pOworCWZvciAoaSA9IDA7IGkgPCA2MDsgaSsrKQorCQlJOTE1X1dSSVRFKFRWX0hfQ0hST01BXzAgKyAoaTw8MiksIHR2X21vZGUtPmZpbHRlcl90YWJsZVtqKytdKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDM7IGkrKykKKwkJSTkxNV9XUklURShUVl9WX0xVTUFfMCArIChpPDwyKSwgdHZfbW9kZS0+ZmlsdGVyX3RhYmxlW2orK10pOworCWZvciAoaSA9IDA7IGkgPCA0MzsgaSsrKQorCQlJOTE1X1dSSVRFKFRWX1ZfQ0hST01BXzAgKyAoaTw8MiksIHR2X21vZGUtPmZpbHRlcl90YWJsZVtqKytdKTsKKwlJOTE1X1dSSVRFKFRWX0RBQywgMCk7CisJSTkxNV9XUklURShUVl9DVEwsIHR2X2N0bCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSByZXBvcnRlZF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUgPSAiTlRTQyA0ODBpIiwKKwkJLmNsb2NrID0gMTA3NTIwLAorCQkuaGRpc3BsYXkgPSAxMjgwLAorCQkuaHN5bmNfc3RhcnQgPSAxMzY4LAorCQkuaHN5bmNfZW5kID0gMTQ5NiwKKwkJLmh0b3RhbCA9IDE3MTIsCisKKwkJLnZkaXNwbGF5ID0gMTAyNCwKKwkJLnZzeW5jX3N0YXJ0ID0gMTAyNywKKwkJLnZzeW5jX2VuZCA9IDEwMzQsCisJCS52dG90YWwgPSAxMTA0LAorCQkudHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSLAorCX0sCit9OworCisvKioKKyAqIERldGVjdHMgVFYgcHJlc2VuY2UgYnkgY2hlY2tpbmcgZm9yIGxvYWQuCisgKgorICogUmVxdWlyZXMgdGhhdCB0aGUgY3VycmVudCBwaXBlJ3MgRFBMTCBpcyBhY3RpdmUuCisKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBUViBpcyBjb25uZWN0ZWQuCisgKiBccmV0dXJuIGZhbHNlIGlmIFRWIGlzIGRpc2Nvbm5lY3RlZC4KKyAqLworc3RhdGljIGludAoraW50ZWxfdHZfZGV0ZWN0X3R5cGUgKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIgdHZfY3RsLCBzYXZlX3R2X2N0bDsKKwl1MzIgdHZfZGFjLCBzYXZlX3R2X2RhYzsKKwlpbnQgdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOworCisJdHZfZGFjID0gSTkxNV9SRUFEKFRWX0RBQyk7CisKKwkvKiBEaXNhYmxlIFRWIGludGVycnVwdHMgYXJvdW5kIGxvYWQgZGV0ZWN0IG9yIHdlJ2xsIHJlY3Vyc2UgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwlpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCSAgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCisJLyoKKwkgKiBEZXRlY3QgVFYgYnkgcG9sbGluZykKKwkgKi8KKwlpZiAoaW50ZWxfb3V0cHV0LT5sb2FkX2RldGVjdF90ZW1wKSB7CisJCS8qIFRWIG5vdCBjdXJyZW50bHkgcnVubmluZywgcHJvZCBpdCB3aXRoIGRlc3RydWN0aXZlIGRldGVjdCAqLworCQlzYXZlX3R2X2RhYyA9IHR2X2RhYzsKKwkJdHZfY3RsID0gSTkxNV9SRUFEKFRWX0NUTCk7CisJCXNhdmVfdHZfY3RsID0gdHZfY3RsOworCQl0dl9jdGwgJj0gflRWX0VOQ19FTkFCTEU7CisJCXR2X2N0bCAmPSB+VFZfVEVTVF9NT0RFX01BU0s7CisJCXR2X2N0bCB8PSBUVl9URVNUX01PREVfTU9OSVRPUl9ERVRFQ1Q7CisJCXR2X2RhYyAmPSB+VFZEQUNfU0VOU0VfTUFTSzsKKwkJdHZfZGFjIHw9IChUVkRBQ19TVEFURV9DSEdfRU4gfAorCQkJICAgVFZEQUNfQV9TRU5TRV9DVEwgfAorCQkJICAgVFZEQUNfQl9TRU5TRV9DVEwgfAorCQkJICAgVFZEQUNfQ19TRU5TRV9DVEwgfAorCQkJICAgREFDX0NUTF9PVkVSUklERSB8CisJCQkgICBEQUNfQV8wXzdfViB8CisJCQkgICBEQUNfQl8wXzdfViB8CisJCQkgICBEQUNfQ18wXzdfVik7CisJCUk5MTVfV1JJVEUoVFZfQ1RMLCB0dl9jdGwpOworCQlJOTE1X1dSSVRFKFRWX0RBQywgdHZfZGFjKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisJCXR2X2RhYyA9IEk5MTVfUkVBRChUVl9EQUMpOworCQlJOTE1X1dSSVRFKFRWX0RBQywgc2F2ZV90dl9kYWMpOworCQlJOTE1X1dSSVRFKFRWX0NUTCwgc2F2ZV90dl9jdGwpOworCX0KKwkvKgorCSAqICBBIEIgQworCSAqICAwIDEgMSBDb21wb3NpdGUKKwkgKiAgMSAwIFggc3ZpZGVvCisJICogIDAgMCAwIENvbXBvbmVudAorCSAqLworCWlmICgodHZfZGFjICYgVFZEQUNfU0VOU0VfTUFTSykgPT0gKFRWREFDX0JfU0VOU0UgfCBUVkRBQ19DX1NFTlNFKSkgeworCQlEUk1fREVCVUcoIkRldGVjdGVkIENvbXBvc2l0ZSBUViBjb25uZWN0aW9uXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU7CisJfSBlbHNlIGlmICgodHZfZGFjICYgKFRWREFDX0FfU0VOU0V8VFZEQUNfQl9TRU5TRSkpID09IFRWREFDX0FfU0VOU0UpIHsKKwkJRFJNX0RFQlVHKCJEZXRlY3RlZCBTLVZpZGVvIFRWIGNvbm5lY3Rpb25cbiIpOworCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTzsKKwl9IGVsc2UgaWYgKCh0dl9kYWMgJiBUVkRBQ19TRU5TRV9NQVNLKSA9PSAwKSB7CisJCURSTV9ERUJVRygiRGV0ZWN0ZWQgQ29tcG9uZW50IFRWIGNvbm5lY3Rpb25cbiIpOworCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvbmVudDsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIk5vIFRWIGNvbm5lY3Rpb24gZGV0ZWN0ZWRcbiIpOworCQl0eXBlID0gLTE7CisJfQorCisJLyogUmVzdG9yZSBpbnRlcnJ1cHQgY29uZmlnICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisJaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCSAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CisKKwlyZXR1cm4gdHlwZTsKK30KKworLyoqCisgKiBEZXRlY3QgdGhlIFRWIGNvbm5lY3Rpb24uCisgKgorICogQ3VycmVudGx5IHRoaXMgYWx3YXlzIHJldHVybnMgQ09OTkVDVE9SX1NUQVRVU19VTktOT1dOLCBhcyB3ZSBuZWVkIHRvIGJlIHN1cmUKKyAqIHdlIGhhdmUgYSBwaXBlIHByb2dyYW1tZWQgaW4gb3JkZXIgdG8gcHJvYmUgdGhlIFRWLgorICovCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworaW50ZWxfdHZfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlpbnQgZHBtc19tb2RlOworCWludCB0eXBlID0gdHZfcHJpdi0+dHlwZTsKKworCW1vZGUgPSByZXBvcnRlZF9tb2Rlc1swXTsKKwlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJm1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCisJaWYgKGVuY29kZXItPmNydGMpIHsKKwkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGVuY29kZXItPmNydGMsIGludGVsX291dHB1dCk7CisJfSBlbHNlIHsKKwkJY3J0YyA9IGludGVsX2dldF9sb2FkX2RldGVjdF9waXBlKGludGVsX291dHB1dCwgJm1vZGUsICZkcG1zX21vZGUpOworCQlpZiAoY3J0YykgeworCQkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGNydGMsIGludGVsX291dHB1dCk7CisJCQlpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoaW50ZWxfb3V0cHV0LCBkcG1zX21vZGUpOworCQl9IGVsc2UKKwkJCXR5cGUgPSAtMTsKKwl9CisKKwlpZiAodHlwZSA8IDApCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHN0cnVjdCBpbnB1dF9yZXMgeworCWNoYXIgKm5hbWU7CisJaW50IHcsIGg7Cit9IGlucHV0X3Jlc190YWJsZVtdID0KK3sKKwl7IjY0MHg0ODAiLCA2NDAsIDQ4MH0sCisJeyI4MDB4NjAwIiwgODAwLCA2MDB9LAorCXsiMTAyNHg3NjgiLCAxMDI0LCA3Njh9LAorCXsiMTI4MHgxMDI0IiwgMTI4MCwgMTAyNH0sCisJeyI4NDh4NDgwIiwgODQ4LCA0ODB9LAorCXsiMTI4MHg3MjAiLCAxMjgwLCA3MjB9LAorCXsiMTkyMHgxMDgwIiwgMTkyMCwgMTA4MH0sCit9OworCisvKioKKyAqIFN0dWIgZ2V0X21vZGVzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgc2hvdWxkIHByb2JhYmx5IHJldHVybiBhIHNldCBvZiBmaXhlZCBtb2RlcywgdW5sZXNzIHdlIGNhbiBmaWd1cmUgb3V0CisgKiBob3cgdG8gcHJvYmUgbW9kZXMgb2ZmIG9mIFRWIGNvbm5lY3Rpb25zLgorICovCisKK3N0YXRpYyBpbnQKK2ludGVsX3R2X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlX3B0cjsKKwlzdHJ1Y3QgaW50ZWxfb3V0cHV0ICppbnRlbF9vdXRwdXQgPSB0b19pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOworCWludCBqOworCisJZm9yIChqID0gMDsgaiA8IHNpemVvZihpbnB1dF9yZXNfdGFibGUpIC8gc2l6ZW9mKGlucHV0X3Jlc190YWJsZVswXSk7CisJICAgICBqKyspIHsKKwkJc3RydWN0IGlucHV0X3JlcyAqaW5wdXQgPSAmaW5wdXRfcmVzX3RhYmxlW2pdOworCQl1bnNpZ25lZCBpbnQgaGFjdGl2ZV9zID0gaW5wdXQtPnc7CisJCXVuc2lnbmVkIGludCB2YWN0aXZlX3MgPSBpbnB1dC0+aDsKKworCQlpZiAodHZfbW9kZS0+bWF4X3NyY3cgJiYgaW5wdXQtPncgPiB0dl9tb2RlLT5tYXhfc3JjdykKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbnB1dC0+dyA+IDEwMjQgJiYgKCF0dl9tb2RlLT5wcm9ncmVzc2l2ZQorCQkJCQkmJiAhdHZfbW9kZS0+Y29tcG9uZW50X29ubHkpKQorCQkJY29udGludWU7CisKKwkJbW9kZV9wdHIgPSBkcm1fY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSksCisJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOworCQlzdHJuY3B5KG1vZGVfcHRyLT5uYW1lLCBpbnB1dC0+bmFtZSwgRFJNX0RJU1BMQVlfTU9ERV9MRU4pOworCisJCW1vZGVfcHRyLT5oZGlzcGxheSA9IGhhY3RpdmVfczsKKwkJbW9kZV9wdHItPmhzeW5jX3N0YXJ0ID0gaGFjdGl2ZV9zICsgMTsKKwkJbW9kZV9wdHItPmhzeW5jX2VuZCA9IGhhY3RpdmVfcyArIDY0OworCQlpZiAobW9kZV9wdHItPmhzeW5jX2VuZCA8PSBtb2RlX3B0ci0+aHN5bmNfc3RhcnQpCisJCQltb2RlX3B0ci0+aHN5bmNfZW5kID0gbW9kZV9wdHItPmhzeW5jX3N0YXJ0ICsgMTsKKwkJbW9kZV9wdHItPmh0b3RhbCA9IGhhY3RpdmVfcyArIDk2OworCisJCW1vZGVfcHRyLT52ZGlzcGxheSA9IHZhY3RpdmVfczsKKwkJbW9kZV9wdHItPnZzeW5jX3N0YXJ0ID0gdmFjdGl2ZV9zICsgMTsKKwkJbW9kZV9wdHItPnZzeW5jX2VuZCA9IHZhY3RpdmVfcyArIDMyOworCQlpZiAobW9kZV9wdHItPnZzeW5jX2VuZCA8PSBtb2RlX3B0ci0+dnN5bmNfc3RhcnQpCisJCQltb2RlX3B0ci0+dnN5bmNfZW5kID0gbW9kZV9wdHItPnZzeW5jX3N0YXJ0ICArIDE7CisJCW1vZGVfcHRyLT52dG90YWwgPSB2YWN0aXZlX3MgKyAzMzsKKworCQltb2RlX3B0ci0+Y2xvY2sgPSAoaW50KSAodHZfbW9kZS0+cmVmcmVzaCAqCisJCQkJCSBtb2RlX3B0ci0+dnRvdGFsICoKKwkJCQkJIG1vZGVfcHRyLT5odG90YWwgLyAxMDAwKSAvIDEwMDA7CisKKwkJbW9kZV9wdHItPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUjsKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGVfcHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ludGVsX3R2X2Rlc3Ryb3kgKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWRybV9mcmVlKGludGVsX291dHB1dCwgc2l6ZW9mKHN0cnVjdCBpbnRlbF9vdXRwdXQpICsgc2l6ZW9mKHN0cnVjdCBpbnRlbF90dl9wcml2KSwKKwkJIERSTV9NRU1fRFJJVkVSKTsKK30KKworCitzdGF0aWMgaW50CitpbnRlbF90dl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCSAgICAgIHVpbnQ2NF90IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCWludCByZXQgPSAwOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSkKKwkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9MRUZUXSA9IHZhbDsKKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkKKwkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9SSUdIVF0gPSB2YWw7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5KQorCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX1RPUF0gPSB2YWw7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5KQorCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0JPVFRPTV0gPSB2YWw7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CisJCWlmICh2YWwgPj0gTlVNX1RWX01PREVTKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJdHZfcHJpdi0+dHZfZm9ybWF0ID0gdHZfbW9kZXNbdmFsXS5uYW1lOworCQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWludGVsX3R2X21vZGVfc2V0KCZpbnRlbF9vdXRwdXQtPmVuYywgTlVMTCwgTlVMTCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgaW50ZWxfdHZfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gaW50ZWxfdHZfZHBtcywKKwkubW9kZV9maXh1cCA9IGludGVsX3R2X21vZGVfZml4dXAsCisJLnByZXBhcmUgPSBpbnRlbF9lbmNvZGVyX3ByZXBhcmUsCisJLm1vZGVfc2V0ID0gaW50ZWxfdHZfbW9kZV9zZXQsCisJLmNvbW1pdCA9IGludGVsX2VuY29kZXJfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX3R2X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuc2F2ZSA9IGludGVsX3R2X3NhdmUsCisJLnJlc3RvcmUgPSBpbnRlbF90dl9yZXN0b3JlLAorCS5kZXRlY3QgPSBpbnRlbF90dl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBpbnRlbF90dl9kZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBpbnRlbF90dl9zZXRfcHJvcGVydHksCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGludGVsX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfdmFsaWQgPSBpbnRlbF90dl9tb2RlX3ZhbGlkLAorCS5nZXRfbW9kZXMgPSBpbnRlbF90dl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGludGVsX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyB2b2lkIGludGVsX3R2X2VuY19kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGludGVsX3R2X2VuY19mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGludGVsX3R2X2VuY19kZXN0cm95LAorfTsKKworCit2b2lkCitpbnRlbF90dl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dDsKKwlzdHJ1Y3QgaW50ZWxfdHZfcHJpdiAqdHZfcHJpdjsKKwl1MzIgdHZfZGFjX29uLCB0dl9kYWNfb2ZmLCBzYXZlX3R2X2RhYzsKKwljaGFyICoqdHZfZm9ybWF0X25hbWVzOworCWludCBpLCBpbml0aWFsX21vZGUgPSAwOworCisJaWYgKChJOTE1X1JFQUQoVFZfQ1RMKSAmIFRWX0ZVU0VfU1RBVEVfTUFTSykgPT0gVFZfRlVTRV9TVEFURV9ESVNBQkxFRCkKKwkJcmV0dXJuOworCisJLyogRXZlbiBpZiB3ZSBoYXZlIGFuIGVuY29kZXIgd2UgbWF5IG5vdCBoYXZlIGEgY29ubmVjdG9yICovCisJaWYgKCFkZXZfcHJpdi0+aW50X3R2X3N1cHBvcnQpCisJCXJldHVybjsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoZSBUViBvdXRwdXQgYnkgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZQorCSAqIERBQyByZWdpc3RlciBob2xkcyBhIHZhbHVlCisJICovCisJc2F2ZV90dl9kYWMgPSBJOTE1X1JFQUQoVFZfREFDKTsKKworCUk5MTVfV1JJVEUoVFZfREFDLCBzYXZlX3R2X2RhYyB8IFRWREFDX1NUQVRFX0NIR19FTik7CisJdHZfZGFjX29uID0gSTkxNV9SRUFEKFRWX0RBQyk7CisKKwlJOTE1X1dSSVRFKFRWX0RBQywgc2F2ZV90dl9kYWMgJiB+VFZEQUNfU1RBVEVfQ0hHX0VOKTsKKwl0dl9kYWNfb2ZmID0gSTkxNV9SRUFEKFRWX0RBQyk7CisKKwlJOTE1X1dSSVRFKFRWX0RBQywgc2F2ZV90dl9kYWMpOworCisJLyoKKwkgKiBJZiB0aGUgcmVnaXN0ZXIgZG9lcyBub3QgaG9sZCB0aGUgc3RhdGUgY2hhbmdlIGVuYWJsZQorCSAqIGJpdCwgKGVpdGhlciBhcyBhIDAgb3IgYSAxKSwgYXNzdW1lIGl0IGRvZXNuJ3QgcmVhbGx5CisJICogZXhpc3QKKwkgKi8KKwlpZiAoKHR2X2RhY19vbiAmIFRWREFDX1NUQVRFX0NIR19FTikgPT0gMCB8fAorCSAgICAodHZfZGFjX29mZiAmIFRWREFDX1NUQVRFX0NIR19FTikgIT0gMCkKKwkJcmV0dXJuOworCisJaW50ZWxfb3V0cHV0ID0gZHJtX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGludGVsX291dHB1dCkgKworCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbnRlbF90dl9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCWlmICghaW50ZWxfb3V0cHV0KSB7CisJCXJldHVybjsKKwl9CisJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKKworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX3R2X2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pOworCisJZHJtX2VuY29kZXJfaW5pdChkZXYsICZpbnRlbF9vdXRwdXQtPmVuYywgJmludGVsX3R2X2VuY19mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX1RWREFDKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaW50ZWxfb3V0cHV0LT5iYXNlLCAmaW50ZWxfb3V0cHV0LT5lbmMpOworCXR2X3ByaXYgPSAoc3RydWN0IGludGVsX3R2X3ByaXYgKikoaW50ZWxfb3V0cHV0ICsgMSk7CisJaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX1RWT1VUOworCWludGVsX291dHB1dC0+ZW5jLnBvc3NpYmxlX2NydGNzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkpOworCWludGVsX291dHB1dC0+ZW5jLnBvc3NpYmxlX2Nsb25lcyA9ICgxIDw8IElOVEVMX09VVFBVVF9UVk9VVCk7CisJaW50ZWxfb3V0cHV0LT5kZXZfcHJpdiA9IHR2X3ByaXY7CisJdHZfcHJpdi0+dHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOworCisJLyogQklPUyBtYXJnaW4gdmFsdWVzICovCisJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9MRUZUXSA9IDU0OworCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSA9IDM2OworCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdID0gNDY7CisJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9CT1RUT01dID0gMzc7CisKKwl0dl9wcml2LT50dl9mb3JtYXQgPSBrc3RyZHVwKHR2X21vZGVzW2luaXRpYWxfbW9kZV0ubmFtZSwgR0ZQX0tFUk5FTCk7CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZpbnRlbF9vdXRwdXQtPmVuYywgJmludGVsX3R2X2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsKKwljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJLyogQ3JlYXRlIFRWIHByb3BlcnRpZXMgdGhlbiBhdHRhY2ggY3VycmVudCB2YWx1ZXMgKi8KKwl0dl9mb3JtYXRfbmFtZXMgPSBkcm1fYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBOVU1fVFZfTU9ERVMsCisJCQkJICAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIXR2X2Zvcm1hdF9uYW1lcykKKwkJZ290byBvdXQ7CisJZm9yIChpID0gMDsgaSA8IE5VTV9UVl9NT0RFUzsgaSsrKQorCQl0dl9mb3JtYXRfbmFtZXNbaV0gPSB0dl9tb2Rlc1tpXS5uYW1lOworCWRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKGRldiwgTlVNX1RWX01PREVTLCB0dl9mb3JtYXRfbmFtZXMpOworCisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLnR2X21vZGVfcHJvcGVydHksCisJCQkJICAgaW5pdGlhbF9tb2RlKTsKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSwKKwkJCQkgICB0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdKTsKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5LAorCQkJCSAgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSk7CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCSAgIGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5LAorCQkJCSAgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdKTsKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgZGV2LT5tb2RlX2NvbmZpZy50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5LAorCQkJCSAgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fQk9UVE9NXSk7CitvdXQ6CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYwppbmRleCA0YjI3ZDlhLi5jYWNlMzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCkBAIC04NjAsMTIgKzg2MCwxMiBAQAogICogVGhlIGFjdHVhbCBhZ2UgZW1pdCBpcyBkb25lIGJ5IHIzMDBfZG9fY3BfY21kYnVmLCB3aGljaCBpcyB3aHkgeW91IG11c3QKICAqIGJlIGNhcmVmdWwgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgogICovCi1zdGF0aWMgdm9pZCByMzAwX2Rpc2NhcmRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZikKK3N0YXRpYyB2b2lkIHIzMDBfZGlzY2FyZF9idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlciwgc3RydWN0IGRybV9idWYgKmJ1ZikKIHsKLQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yYWRlb25fYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CiAKLQlidWZfcHJpdi0+YWdlID0gKytkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaDsKKwlidWZfcHJpdi0+YWdlID0gKyttYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaDsKIAlidWYtPnBlbmRpbmcgPSAxOwogCWJ1Zi0+dXNlZCA9IDA7CiB9CkBAIC0xMDI3LDYgKzEwMjcsNyBAQAogCQkgICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1ZikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IGZpbGVfcHJpdi0+bWFzdGVyLT5kcml2ZXJfcHJpdjsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWYgPSBOVUxMOwogCWludCBlbWl0X2Rpc3BhdGNoX2FnZSA9IDA7CkBAIC0xMTM0LDcgKzExMzUsNyBAQAogCQkJfQogCiAJCQllbWl0X2Rpc3BhdGNoX2FnZSA9IDE7Ci0JCQlyMzAwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKKwkJCXIzMDBfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUjMwMF9DTURfV0FJVDoKQEAgLTExODksNyArMTE5MCw3IEBACiAKIAkJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciBhZ2UgKi8KIAkJQkVHSU5fUklORygyKTsKLQkJUkFERU9OX0RJU1BBVENIX0FHRShkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCk7CisJCVJBREVPTl9ESVNQQVRDSF9BR0UobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2gpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCmluZGV4IGRjZWJiNGIuLjYzMjEyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImRybV9zYXJlYS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKQEAgLTY2NywxNSArNjY4LDE0IEBACiAJCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CiAJfSAvKiBQQ0lFIGNhcmRzIGFwcGVhcnMgdG8gbm90IG5lZWQgdGhpcyAqLwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSBkZXZfcHJpdi0+c2NyYXRjaFswXSA9IDA7Ci0JUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOworCWRldl9wcml2LT5zY3JhdGNoWzBdID0gMDsKKwlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfRlJBTUVfUkVHLCAwKTsKIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gZGV2X3ByaXYtPnNjcmF0Y2hbMV0gPSAwOwotCVJBREVPTl9XUklURShSQURFT05fTEFTVF9ESVNQQVRDSF9SRUcsCi0JCSAgICAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2gpOworCWRldl9wcml2LT5zY3JhdGNoWzFdID0gMDsKKwlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfRElTUEFUQ0hfUkVHLCAwKTsKIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2NsZWFyID0gZGV2X3ByaXYtPnNjcmF0Y2hbMl0gPSAwOwotCVJBREVPTl9XUklURShSQURFT05fTEFTVF9DTEVBUl9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2NsZWFyKTsKKwlkZXZfcHJpdi0+c2NyYXRjaFsyXSA9IDA7CisJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0NMRUFSX1JFRywgMCk7CiAKIAlyYWRlb25fZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiAKQEAgLTg3MSw5ICs4NzEsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2RvX2luaXRfY3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGRybV9yYWRlb25faW5pdF90ICogaW5pdCkKK3N0YXRpYyBpbnQgcmFkZW9uX2RvX2luaXRfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX3JhZGVvbl9pbml0X3QgKmluaXQsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCiAJRFJNX0RFQlVHKCJcbiIpOwogCkBAIC05OTgsOCArMTAwMCw4IEBACiAJZGV2X3ByaXYtPmJ1ZmZlcnNfb2Zmc2V0ID0gaW5pdC0+YnVmZmVyc19vZmZzZXQ7CiAJZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0ID0gaW5pdC0+Z2FydF90ZXh0dXJlc19vZmZzZXQ7CiAKLQlkZXZfcHJpdi0+c2FyZWEgPSBkcm1fZ2V0c2FyZWEoZGV2KTsKLQlpZiAoIWRldl9wcml2LT5zYXJlYSkgeworCW1hc3Rlcl9wcml2LT5zYXJlYSA9IGRybV9nZXRzYXJlYShkZXYpOworCWlmICghbWFzdGVyX3ByaXYtPnNhcmVhKSB7CiAJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgc2FyZWEhXG4iKTsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDM1LDEwICsxMDM3LDYgQEAKIAkJfQogCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2ID0KLQkgICAgKGRybV9yYWRlb25fc2FyZWFfdCAqKSAoKHU4ICopIGRldl9wcml2LT5zYXJlYS0+aGFuZGxlICsKLQkJCQkgICAgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOwotCiAjaWYgX19PU19IQVNfQUdQCiAJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJZHJtX2NvcmVfaW9yZW1hcChkZXZfcHJpdi0+Y3BfcmluZywgZGV2KTsKQEAgLTEzMjksNyArMTMyNyw3IEBACiAJY2FzZSBSQURFT05fSU5JVF9DUDoKIAljYXNlIFJBREVPTl9JTklUX1IyMDBfQ1A6CiAJY2FzZSBSQURFT05fSU5JVF9SMzAwX0NQOgotCQlyZXR1cm4gcmFkZW9uX2RvX2luaXRfY3AoZGV2LCBpbml0KTsKKwkJcmV0dXJuIHJhZGVvbl9kb19pbml0X2NwKGRldiwgaW5pdCwgZmlsZV9wcml2KTsKIAljYXNlIFJBREVPTl9DTEVBTlVQX0NQOgogCQlyZXR1cm4gcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAl9CkBAIC0xNzY4LDYgKzE3NjYsNTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CisJdW5zaWduZWQgbG9uZyBzYXJlYXBhZ2U7CisJaW50IHJldDsKKworCW1hc3Rlcl9wcml2ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKm1hc3Rlcl9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCWlmICghbWFzdGVyX3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcHJlYnVpbGQgdGhlIFNBUkVBICovCisJc2FyZWFwYWdlID0gbWF4X3QodW5zaWduZWQgbG9uZywgU0FSRUFfTUFYLCBQQUdFX1NJWkUpOworCXJldCA9IGRybV9hZGRtYXAoZGV2LCAwLCBzYXJlYXBhZ2UsIF9EUk1fU0hNLCBfRFJNX0NPTlRBSU5TX0xPQ0t8X0RSTV9EUklWRVIsCisJCQkgJm1hc3Rlcl9wcml2LT5zYXJlYSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIlNBUkVBIHNldHVwIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhLT5oYW5kbGUgKyBzaXplb2Yoc3RydWN0IGRybV9zYXJlYSk7CisJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPSAwOworCisJbWFzdGVyLT5kcml2ZXJfcHJpdiA9IG1hc3Rlcl9wcml2OworCXJldHVybiAwOworfQorCit2b2lkIHJhZGVvbl9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKQoreworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CisKKwlpZiAoIW1hc3Rlcl9wcml2KQorCQlyZXR1cm47CisKKwlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYgJiYKKwkgICAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgIT0gMCkKKwkJcmFkZW9uX2NwX2Rpc3BhdGNoX2ZsaXAoZGV2LCBtYXN0ZXIpOworCisJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYgPSBOVUxMOworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWEpCisJCWRybV9ybW1hcF9sb2NrZWQoZGV2LCBtYXN0ZXJfcHJpdi0+c2FyZWEpOworCisJZHJtX2ZyZWUobWFzdGVyX3ByaXYsIHNpemVvZigqbWFzdGVyX3ByaXYpLCBEUk1fTUVNX0RSSVZFUik7CisKKwltYXN0ZXItPmRyaXZlcl9wcml2ID0gTlVMTDsKK30KKwogLyogQ3JlYXRlIG1hcHBpbmdzIGZvciByZWdpc3RlcnMgYW5kIGZyYW1lYnVmZmVyIHNvIHVzZXJsYW5kIGRvZXNuJ3QgbmVjZXNzYXJpbHkKICAqIGhhdmUgdG8gZmluZCB0aGVtLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDcxYWY3NDYuLmZlZjIwNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC05Niw2ICs5Niw4IEBACiAJLmVuYWJsZV92YmxhbmsgPSByYWRlb25fZW5hYmxlX3ZibGFuaywKIAkuZGlzYWJsZV92YmxhbmsgPSByYWRlb25fZGlzYWJsZV92YmxhbmssCiAJLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAorCS5tYXN0ZXJfY3JlYXRlID0gcmFkZW9uX21hc3Rlcl9jcmVhdGUsCisJLm1hc3Rlcl9kZXN0cm95ID0gcmFkZW9uX21hc3Rlcl9kZXN0cm95LAogCS5pcnFfcHJlaW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCAzYmJiODcxLi40OTBiYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMjI2LDkgKzIyNiwxMyBAQAogI2RlZmluZSBSQURFT05fRkxVU0hfRU1JVEVECSgxIDwgMCkKICNkZWZpbmUgUkFERU9OX1BVUkdFX0VNSVRFRAkoMSA8IDEpCiAKK3N0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlIHsKKwlkcm1fbG9jYWxfbWFwX3QgKnNhcmVhOworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdjsKK307CisKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSB7CiAJZHJtX3JhZGVvbl9yaW5nX2J1ZmZlcl90IHJpbmc7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2OwogCiAJdTMyIGZiX2xvY2F0aW9uOwogCXUzMiBmYl9zaXplOwpAQCAtNDA5LDYgKzQxMyw5IEBACiBleHRlcm4gbG9uZyByYWRlb25fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIAorZXh0ZXJuIGludCByYWRlb25fbWFzdGVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9tYXN0ZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogLyogcjMwMF9jbWRidWYuYyAqLwogZXh0ZXJuIHZvaWQgcjMwMF9pbml0X3JlZ19mbGFncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtMTMzNSw4ICsxMzQyLDkgQEAKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBmaWxlX3ByaXYtPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CVwKKwlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdjsJXAogCWlmICggc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA+PSBSQURFT05fTUFYX1ZCX0FHRSApIHsJCVwKIAkJaW50IF9fcmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoIGRldl9wcml2ICk7CQlcCiAJCWlmICggX19yZXQgKSByZXR1cm4gX19yZXQ7CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCmluZGV4IDVkNzE1M2YuLmVmOTQwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwpAQCAtNzQyLDEzICs3NDIsMTQgQEAKICAqLwogCiBzdGF0aWMgdm9pZCByYWRlb25fY2xlYXJfYm94KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkgICAgIHN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiwKIAkJCSAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCByLCBpbnQgZywgaW50IGIpCiB7CiAJdTMyIGNvbG9yOwogCVJJTkdfTE9DQUxTOwogCi0JeCArPSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Ym94ZXNbMF0ueDE7Ci0JeSArPSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Ym94ZXNbMF0ueTE7CisJeCArPSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+Ym94ZXNbMF0ueDE7CisJeSArPSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+Ym94ZXNbMF0ueTE7CiAKIAlzd2l0Y2ggKGRldl9wcml2LT5jb2xvcl9mbXQpIHsKIAljYXNlIFJBREVPTl9DT0xPUl9GT1JNQVRfUkdCNTY1OgpAQCAtNzc2LDcgKzc3Nyw3IEBACiAJCSBSQURFT05fR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CiAJCSBSQURFT05fUk9QM19QIHwgUkFERU9OX0dNQ19DTFJfQ01QX0NOVExfRElTKTsKIAotCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAxKSB7CisJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID09IDEpIHsKIAkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0KTsKQEAgLTc5MCw3ICs3OTEsNyBAQAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfcGVyZm9ybWFuY2VfYm94ZXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9wZXJmb3JtYW5jZV9ib3hlcyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdikKIHsKIAkvKiBDb2xsYXBzZSB2YXJpb3VzIHRoaW5ncyBpbnRvIGEgd2FpdCBmbGFnIC0tIHRyeWluZyB0bwogCSAqIGd1ZXNzIGlmIHVzZXJzcGFzZSBzbGVwdCAtLSBiZXR0ZXIganVzdCB0byBoYXZlIHRoZW0gdGVsbCB1cy4KQEAgLTgwNywxMiArODA4LDEyIEBACiAJLyogUHVycGxlIGJveCBmb3IgcGFnZSBmbGlwcGluZwogCSAqLwogCWlmIChkZXZfcHJpdi0+c3RhdHMuYm94ZXMgJiBSQURFT05fQk9YX0ZMSVApCi0JCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDQsIDQsIDgsIDgsIDI1NSwgMCwgMjU1KTsKKwkJcmFkZW9uX2NsZWFyX2JveChkZXZfcHJpdiwgbWFzdGVyX3ByaXYsIDQsIDQsIDgsIDgsIDI1NSwgMCwgMjU1KTsKIAogCS8qIFJlZCBib3ggaWYgd2UgaGF2ZSB0byB3YWl0IGZvciBpZGxlIGF0IGFueSBwb2ludAogCSAqLwogCWlmIChkZXZfcHJpdi0+c3RhdHMuYm94ZXMgJiBSQURFT05fQk9YX1dBSVRfSURMRSkKLQkJcmFkZW9uX2NsZWFyX2JveChkZXZfcHJpdiwgMTYsIDQsIDgsIDgsIDI1NSwgMCwgMCk7CisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIG1hc3Rlcl9wcml2LCAxNiwgNCwgOCwgOCwgMjU1LCAwLCAwKTsKIAogCS8qIEJsdWUgYm94OiBsb3N0IGNvbnRleHQ/CiAJICovCkBAIC04MjAsMTIgKzgyMSwxMiBAQAogCS8qIFllbGxvdyBib3ggZm9yIHRleHR1cmUgc3dhcHMKIAkgKi8KIAlpZiAoZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9URVhUVVJFX0xPQUQpCi0JCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDQwLCA0LCA4LCA4LCAyNTUsIDI1NSwgMCk7CisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIG1hc3Rlcl9wcml2LCA0MCwgNCwgOCwgOCwgMjU1LCAyNTUsIDApOwogCiAJLyogR3JlZW4gYm94IGlmIGhhcmR3YXJlIG5ldmVyIGlkbGVzIChhcyBmYXIgYXMgd2UgY2FuIHRlbGwpCiAJICovCiAJaWYgKCEoZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9ETUFfSURMRSkpCi0JCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDY0LCA0LCA4LCA4LCAwLCAyNTUsIDApOworCQlyYWRlb25fY2xlYXJfYm94KGRldl9wcml2LCBtYXN0ZXJfcHJpdiwgNjQsIDQsIDgsIDgsIDAsIDI1NSwgMCk7CiAKIAkvKiBEcmF3IGJhcnMgaW5kaWNhdGluZyBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQKIAkgKiAobm90IGEgZ3JlYXQgbWVhc3VyZSwgZWFzaWx5IGNvbmZ1c2VkKQpAQCAtODM0LDcgKzgzNSw3IEBACiAJCWlmIChkZXZfcHJpdi0+c3RhdHMucmVxdWVzdGVkX2J1ZnMgPiAxMDApCiAJCQlkZXZfcHJpdi0+c3RhdHMucmVxdWVzdGVkX2J1ZnMgPSAxMDA7CiAKLQkJcmFkZW9uX2NsZWFyX2JveChkZXZfcHJpdiwgNCwgMTYsCisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIG1hc3Rlcl9wcml2LCA0LCAxNiwKIAkJCQkgZGV2X3ByaXYtPnN0YXRzLnJlcXVlc3RlZF9idWZzLCA0LAogCQkJCSAxOTYsIDEyOCwgMTI4KTsKIAl9CkBAIC04NDgsMTEgKzg0OSwxMyBAQAogICovCiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9jbGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsCiAJCQkJICAgICBkcm1fcmFkZW9uX2NsZWFyX3QgKiBjbGVhciwKIAkJCQkgICAgIGRybV9yYWRlb25fY2xlYXJfcmVjdF90ICogZGVwdGhfYm94ZXMpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yYWRlb25fZGVwdGhfY2xlYXJfdCAqZGVwdGhfY2xlYXIgPSAmZGV2X3ByaXYtPmRlcHRoX2NsZWFyOwogCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsKIAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcGJveCA9IHNhcmVhX3ByaXYtPmJveGVzOwpAQCAtODY0LDcgKzg2Nyw3IEBACiAKIAlkZXZfcHJpdi0+c3RhdHMuY2xlYXJzKys7CiAKLQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPT0gMSkgeworCWlmIChzYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID09IDEpIHsKIAkJdW5zaWduZWQgaW50IHRtcCA9IGZsYWdzOwogCiAJCWZsYWdzICY9IH4oUkFERU9OX0ZST05UIHwgUkFERU9OX0JBQ0spOwpAQCAtODkwLDcgKzg5Myw3IEBACiAKIAkJLyogTWFrZSBzdXJlIHdlIHJlc3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4KIAkJICovCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOworCQlzYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCiAJCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKIAkJCWludCB4ID0gcGJveFtpXS54MTsKQEAgLTk2Nyw3ICs5NzAsNyBAQAogCQkvKiBNYWtlIHN1cmUgd2UgcmVzdG9yZSB0aGUgM0Qgc3RhdGUgbmV4dCB0aW1lLgogCQkgKiB3ZSBoYXZlbid0IHRvdWNoZWQgYW55ICJub3JtYWwiIHN0YXRlIC0gc3RpbGwgbmVlZCB0aGlzPwogCQkgKi8KLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CisJCXNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CiAKIAkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSEFTX0hJRVJaKQogCQkgICAgJiYgKGZsYWdzICYgUkFERU9OX1VTRV9ISUVSWikpIHsKQEAgLTEyMTQsNyArMTIxNyw3IEBACiAKIAkJLyogTWFrZSBzdXJlIHdlIHJlc3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4KIAkJICovCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOworCQlzYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCiAJCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKIApAQCAtMTI4NSw3ICsxMjg4LDcgQEAKIAogCQkvKiBNYWtlIHN1cmUgd2UgcmVzdG9yZSB0aGUgM0Qgc3RhdGUgbmV4dCB0aW1lLgogCQkgKi8KLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CisJCXNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CiAKIAkJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgewogCkBAIC0xMzI4LDIwICsxMzMxLDIxIEBACiAJICogd2FpdCBvbiB0aGlzIHZhbHVlIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBjbGVhciBpb2N0bC4gIFdlCiAJICogbmVlZCB0aGlzIGJlY2F1c2UgdGhlIGNhcmQncyBzbyBkYW1uZWQgZmFzdC4uLgogCSAqLwotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2NsZWFyKys7CisJc2FyZWFfcHJpdi0+bGFzdF9jbGVhcisrOwogCiAJQkVHSU5fUklORyg0KTsKIAotCVJBREVPTl9DTEVBUl9BR0UoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIpOworCVJBREVPTl9DTEVBUl9BR0Uoc2FyZWFfcHJpdi0+bGFzdF9jbGVhcik7CiAJUkFERU9OX1dBSVRfVU5USUxfSURMRSgpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OwogCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CiAJaW50IGk7CkBAIC0xMzUxLDcgKzEzNTUsNyBAQAogCS8qIERvIHNvbWUgdHJpdmlhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLi4uCiAJICovCiAJaWYgKGRldl9wcml2LT5kb19ib3hlcykKLQkJcmFkZW9uX2NwX3BlcmZvcm1hbmNlX2JveGVzKGRldl9wcml2KTsKKwkJcmFkZW9uX2NwX3BlcmZvcm1hbmNlX2JveGVzKGRldl9wcml2LCBtYXN0ZXJfcHJpdik7CiAKIAkvKiBXYWl0IGZvciB0aGUgM0Qgc3RyZWFtIHRvIGlkbGUgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBiaXRibHQuCiAJICogVGhpcyB3aWxsIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIGJldHdlZW4gdGhlIHR3byBzdHJlYW1zLgpAQCAtMTM4NSw3ICsxMzg5LDcgQEAKIAkJLyogTWFrZSB0aGlzIHdvcmsgZXZlbiBpZiBmcm9udCAmIGJhY2sgYXJlIGZsaXBwZWQ6CiAJCSAqLwogCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TUkNfUElUQ0hfT0ZGU0VULCAxKSk7Ci0JCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAwKSB7CisJCWlmIChzYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID09IDApIHsKIAkJCU9VVF9SSU5HKGRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCk7CiAJCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0KTsKIAkJfSBlbHNlIHsKQEAgLTE0MDUsMzEgKzE0MDksMzIgQEAKIAkgKiB0aHJvdHRsZSB0aGUgZnJhbWVyYXRlIGJ5IHdhaXRpbmcgZm9yIHRoaXMgdmFsdWUgYmVmb3JlCiAJICogcGVyZm9ybWluZyB0aGUgc3dhcGJ1ZmZlciBpb2N0bC4KIAkgKi8KLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSsrOworCXNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKIAogCUJFR0lOX1JJTkcoNCk7CiAKLQlSQURFT05fRlJBTUVfQUdFKGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsKKwlSQURFT05fRlJBTUVfQUdFKHNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwogCVJBREVPTl9XQUlUX1VOVElMXzJEX0lETEUoKTsKIAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK3ZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fc2FyZWEgKnNhcmVhID0gKHN0cnVjdCBkcm1fc2FyZWEgKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGU7Ci0JaW50IG9mZnNldCA9IChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAxKQorCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGRybV9zYXJlYSAqc2FyZWEgPSAoc3RydWN0IGRybV9zYXJlYSAqKW1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlOworCWludCBvZmZzZXQgPSAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPT0gMSkKIAkgICAgPyBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0IDogZGV2X3ByaXYtPmJhY2tfb2Zmc2V0OwogCVJJTkdfTE9DQUxTOwogCURSTV9ERUJVRygicGZDdXJyZW50UGFnZT0lZFxuIiwKLQkJICBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSk7CisJCSAgbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UpOwogCiAJLyogRG8gc29tZSB0cml2aWFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuLi4KIAkgKi8KIAlpZiAoZGV2X3ByaXYtPmRvX2JveGVzKSB7CiAJCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX0ZMSVA7Ci0JCXJhZGVvbl9jcF9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdik7CisJCXJhZGVvbl9jcF9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdiwgbWFzdGVyX3ByaXYpOwogCX0KIAogCS8qIFVwZGF0ZSB0aGUgZnJhbWUgb2Zmc2V0cyBmb3IgYm90aCBDUlRDcwpAQCAtMTQ0MSw3ICsxNDQ2LDcgQEAKIAkJICAgICAoKHNhcmVhLT5mcmFtZS55ICogZGV2X3ByaXYtPmZyb250X3BpdGNoICsKIAkJICAgICAgIHNhcmVhLT5mcmFtZS54ICogKGRldl9wcml2LT5jb2xvcl9mbXQgLSAyKSkgJiB+NykKIAkJICAgICArIG9mZnNldCk7Ci0JT1VUX1JJTkdfUkVHKFJBREVPTl9DUlRDMl9PRkZTRVQsIGRldl9wcml2LT5zYXJlYV9wcml2LT5jcnRjMl9iYXNlCisJT1VUX1JJTkdfUkVHKFJBREVPTl9DUlRDMl9PRkZTRVQsIG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5jcnRjMl9iYXNlCiAJCSAgICAgKyBvZmZzZXQpOwogCiAJQURWQU5DRV9SSU5HKCk7CkBAIC0xNDUwLDEzICsxNDU1LDEzIEBACiAJICogdGhyb3R0bGUgdGhlIGZyYW1lcmF0ZSBieSB3YWl0aW5nIGZvciB0aGlzIHZhbHVlIGJlZm9yZQogCSAqIHBlcmZvcm1pbmcgdGhlIHN3YXBidWZmZXIgaW9jdGwuCiAJICovCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9Ci0JCTEgLSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZTsKKwltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSsrOworCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0KKwkJMSAtIG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlOwogCiAJQkVHSU5fUklORygyKTsKIAotCVJBREVPTl9GUkFNRV9BR0UoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOworCVJBREVPTl9GUkFNRV9BR0UobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CkBAIC0xNDk0LDExICsxNDk5LDEzIEBACiB9IGRybV9yYWRlb25fdGNsX3ByaW1fdDsKIAogc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX3ZlcnRleChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqIGJ1ZiwKIAkJCQkgICAgICBkcm1fcmFkZW9uX3RjbF9wcmltX3QgKiBwcmltKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWludCBvZmZzZXQgPSBkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCArIGJ1Zi0+b2Zmc2V0ICsgcHJpbS0+c3RhcnQ7CiAJaW50IG51bXZlcnRzID0gKGludClwcmltLT5udW12ZXJ0czsKIAlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CkBAIC0xNTM5LDEzICsxNTQ2LDE0IEBACiAJfSB3aGlsZSAoaSA8IG5ib3gpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fYnVmICogYnVmKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsIHN0cnVjdCBkcm1fYnVmICpidWYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OwogCWRybV9yYWRlb25fYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCi0JYnVmX3ByaXYtPmFnZSA9ICsrZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2g7CisJYnVmX3ByaXYtPmFnZSA9ICsrbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2g7CiAKIAkvKiBFbWl0IHRoZSB2ZXJ0ZXggYnVmZmVyIGFnZSAqLwogCUJFR0lOX1JJTkcoMik7CkBAIC0xNTkwLDEyICsxNTk4LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfaW5kaWNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1fYnVmICogZWx0X2J1ZiwKIAkJCQkgICAgICAgZHJtX3JhZGVvbl90Y2xfcHJpbV90ICogcHJpbSkKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CiAJaW50IG9mZnNldCA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsgcHJpbS0+b2Zmc2V0OwogCXUzMiAqZGF0YTsKIAlpbnQgZHdvcmRzOwpAQCAtMTg3MCw3ICsxODgwLDcgQEAKIAkJQURWQU5DRV9SSU5HKCk7CiAJCUNPTU1JVF9SSU5HKCk7CiAKLQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKKwkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1Zik7CiAKIAkJLyogVXBkYXRlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBuZXh0IHRpbWUgKi8KIAkJaW1hZ2UtPnkgKz0gaGVpZ2h0OwpAQCAtMjExMCw3ICsyMTIwLDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX2NwX2NsZWFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yYWRlb25fY2xlYXJfdCAqY2xlYXIgPSBkYXRhOwogCWRybV9yYWRlb25fY2xlYXJfcmVjdF90IGRlcHRoX2JveGVzW1JBREVPTl9OUl9TQVJFQV9DTElQUkVDVFNdOwogCURSTV9ERUJVRygiXG4iKTsKQEAgLTIxMjYsNyArMjEzNyw3IEBACiAJCQkgICAgICAgc2FyZWFfcHJpdi0+bmJveCAqIHNpemVvZihkZXB0aF9ib3hlc1swXSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJhZGVvbl9jcF9kaXNwYXRjaF9jbGVhcihkZXYsIGNsZWFyLCBkZXB0aF9ib3hlcyk7CisJcmFkZW9uX2NwX2Rpc3BhdGNoX2NsZWFyKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGNsZWFyLCBkZXB0aF9ib3hlcyk7CiAKIAlDT01NSVRfUklORygpOwogCXJldHVybiAwOwpAQCAtMjEzNCw5ICsyMTQ1LDEwIEBACiAKIC8qIE5vdCBzdXJlIHdoeSB0aGlzIGlzbid0IHNldCBhbGwgdGhlIHRpbWU6CiAgKi8KLXN0YXRpYyBpbnQgcmFkZW9uX2RvX2luaXRfcGFnZWZsaXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X3BhZ2VmbGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBtYXN0ZXItPmRyaXZlcl9wcml2OwogCVJJTkdfTE9DQUxTOwogCiAJRFJNX0RFQlVHKCJcbiIpOwpAQCAtMjE1Myw4ICsyMTY1LDggQEAKIAogCWRldl9wcml2LT5wYWdlX2ZsaXBwaW5nID0gMTsKIAotCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSAhPSAxKQotCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9IDA7CisJaWYgKG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlICE9IDEpCisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjE3Miw5ICsyMTg0LDkgQEAKIAlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykKLQkJcmFkZW9uX2RvX2luaXRfcGFnZWZsaXAoZGV2KTsKKwkJcmFkZW9uX2RvX2luaXRfcGFnZWZsaXAoZGV2LCBmaWxlX3ByaXYtPm1hc3Rlcik7CiAKLQlyYWRlb25fY3BfZGlzcGF0Y2hfZmxpcChkZXYpOworCXJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIpOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKQEAgLTIxODMsNyArMjE5NSw5IEBACiBzdGF0aWMgaW50IHJhZGVvbl9jcF9zd2FwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OworCiAJRFJNX0RFQlVHKCJcbiIpOwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKQEAgLTIxOTMsOCArMjIwNyw4IEBACiAJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCXJhZGVvbl9jcF9kaXNwYXRjaF9zd2FwKGRldik7Ci0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CisJcmFkZW9uX2NwX2Rpc3BhdGNoX3N3YXAoZGV2LCBmaWxlX3ByaXYtPm1hc3Rlcik7CisJc2FyZWFfcHJpdi0+Y3R4X293bmVyID0gMDsKIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CkBAIC0yMjAzLDcgKzIyMTcsOCBAQAogc3RhdGljIGludCByYWRlb25fY3BfdmVydGV4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWY7CiAJZHJtX3JhZGVvbl92ZXJ0ZXhfdCAqdmVydGV4ID0gZGF0YTsKQEAgLTIyMTEsNiArMjIyNiw4IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCisJc2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OworCiAJRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWQgY291bnQ9JWQgZGlzY2FyZD0lZFxuIiwKIAkJICBEUk1fQ1VSUkVOVFBJRCwgdmVydGV4LT5pZHgsIHZlcnRleC0+Y291bnQsIHZlcnRleC0+ZGlzY2FyZCk7CiAKQEAgLTIyNjMsMTMgKzIyODAsMTMgQEAKIAkJcHJpbS5maW5pc2ggPSB2ZXJ0ZXgtPmNvdW50OwkvKiB1bnVzZWQgKi8KIAkJcHJpbS5wcmltID0gdmVydGV4LT5wcmltOwogCQlwcmltLm51bXZlcnRzID0gdmVydGV4LT5jb3VudDsKLQkJcHJpbS52Y19mb3JtYXQgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+dmNfZm9ybWF0OworCQlwcmltLnZjX2Zvcm1hdCA9IHNhcmVhX3ByaXYtPnZjX2Zvcm1hdDsKIAotCQlyYWRlb25fY3BfZGlzcGF0Y2hfdmVydGV4KGRldiwgYnVmLCAmcHJpbSk7CisJCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBmaWxlX3ByaXYsIGJ1ZiwgJnByaW0pOwogCX0KIAogCWlmICh2ZXJ0ZXgtPmRpc2NhcmQpIHsKLQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKKwkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1Zik7CiAJfQogCiAJQ09NTUlUX1JJTkcoKTsKQEAgLTIyNzksNyArMjI5Niw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl9jcF9pbmRpY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWY7CiAJZHJtX3JhZGVvbl9pbmRpY2VzX3QgKmVsdHMgPSBkYXRhOwpAQCAtMjI4OCw2ICsyMzA2LDggQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKKwlzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CisKIAlEUk1fREVCVUcoInBpZD0lZCBpbmRleD0lZCBzdGFydD0lZCBlbmQ9JWQgZGlzY2FyZD0lZFxuIiwKIAkJICBEUk1fQ1VSUkVOVFBJRCwgZWx0cy0+aWR4LCBlbHRzLT5zdGFydCwgZWx0cy0+ZW5kLAogCQkgIGVsdHMtPmRpc2NhcmQpOwpAQCAtMjM1MywxMSArMjM3MywxMSBAQAogCXByaW0ucHJpbSA9IGVsdHMtPnByaW07CiAJcHJpbS5vZmZzZXQgPSAwOwkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBkbWEgYnVmZmVycyAqLwogCXByaW0ubnVtdmVydHMgPSBSQURFT05fTUFYX1ZCX1ZFUlRTOwkvKiBkdWggKi8KLQlwcmltLnZjX2Zvcm1hdCA9IGRldl9wcml2LT5zYXJlYV9wcml2LT52Y19mb3JtYXQ7CisJcHJpbS52Y19mb3JtYXQgPSBzYXJlYV9wcml2LT52Y19mb3JtYXQ7CiAKLQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaWNlcyhkZXYsIGJ1ZiwgJnByaW0pOworCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1ZiwgJnByaW0pOwogCWlmIChlbHRzLT5kaXNjYXJkKSB7Ci0JCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGJ1Zik7CisJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOwogCX0KIAogCUNPTU1JVF9SSU5HKCk7CkBAIC0yNDY4LDcgKzI0ODgsNyBAQAogCSAqLwogCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpcmVjdChkZXYsIGJ1ZiwgaW5kaXJlY3QtPnN0YXJ0LCBpbmRpcmVjdC0+ZW5kKTsKIAlpZiAoaW5kaXJlY3QtPmRpc2NhcmQpIHsKLQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKKwkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1Zik7CiAJfQogCiAJQ09NTUlUX1JJTkcoKTsKQEAgLTI0NzgsNyArMjQ5OCw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl9jcF92ZXJ0ZXgyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWY7CiAJZHJtX3JhZGVvbl92ZXJ0ZXgyX3QgKnZlcnRleCA9IGRhdGE7CkBAIC0yNDg3LDYgKzI1MDgsOCBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAorCXNhcmVhX3ByaXYgPSBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdjsKKwogCURSTV9ERUJVRygicGlkPSVkIGluZGV4PSVkIGRpc2NhcmQ9JWRcbiIsCiAJCSAgRFJNX0NVUlJFTlRQSUQsIHZlcnRleC0+aWR4LCB2ZXJ0ZXgtPmRpc2NhcmQpOwogCkBAIC0yNTQ3LDEyICsyNTcwLDEyIEBACiAJCQl0Y2xwcmltLm9mZnNldCA9IHByaW0ubnVtdmVydHMgKiA2NDsKIAkJCXRjbHByaW0ubnVtdmVydHMgPSBSQURFT05fTUFYX1ZCX1ZFUlRTOwkvKiBkdWggKi8KIAotCQkJcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGljZXMoZGV2LCBidWYsICZ0Y2xwcmltKTsKKwkJCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKGRldiwgZmlsZV9wcml2LT5tYXN0ZXIsIGJ1ZiwgJnRjbHByaW0pOwogCQl9IGVsc2UgewogCQkJdGNscHJpbS5udW12ZXJ0cyA9IHByaW0ubnVtdmVydHM7CiAJCQl0Y2xwcmltLm9mZnNldCA9IDA7CS8qIG5vdCB1c2VkICovCiAKLQkJCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBidWYsICZ0Y2xwcmltKTsKKwkJCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBmaWxlX3ByaXYsIGJ1ZiwgJnRjbHByaW0pOwogCQl9CiAKIAkJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPT0gMSkKQEAgLTI1NjAsNyArMjU4Myw3IEBACiAJfQogCiAJaWYgKHZlcnRleC0+ZGlzY2FyZCkgewotCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBidWYpOworCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKIAl9CiAKIAlDT01NSVRfUklORygpOwpAQCAtMjkwOSw3ICsyOTMyLDcgQEAKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAotCQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKKwkJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSQURFT05fQ01EX1BBQ0tFVDM6CkBAIC0zMDIwLDcgKzMwNDMsNyBAQAogCQkgKi8KIAljYXNlIFJBREVPTl9QQVJBTV9TQVJFQV9IQU5ETEU6CiAJCS8qIFRoZSBsb2NrIGlzIHRoZSBmaXJzdCBkd29yZCBpbiB0aGUgc2FyZWEuICovCi0JCXZhbHVlID0gKGxvbmcpZGV2LT5sb2NrLmh3X2xvY2s7CisJCS8qIG5vIHVzZXJzIG9mIHRoaXMgcGFyYW1ldGVyICovCiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9URVhfSEFORExFOgpAQCAtMzA2NCw2ICszMDg3LDcgQEAKIHN0YXRpYyBpbnQgcmFkZW9uX2NwX3NldHBhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCWRybV9yYWRlb25fc2V0cGFyYW1fdCAqc3AgPSBkYXRhOwogCXN0cnVjdCBkcm1fcmFkZW9uX2RyaXZlcl9maWxlX2ZpZWxkcyAqcmFkZW9uX3ByaXY7CiAKQEAgLTMwNzgsMTIgKzMxMDIsMTQgQEAKIAkJCURSTV9ERUJVRygiY29sb3IgdGlsaW5nIGRpc2FibGVkXG4iKTsKIAkJCWRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQgJj0gflJBREVPTl9EU1RfVElMRV9NQUNSTzsKIAkJCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCAmPSB+UkFERU9OX0RTVF9USUxFX01BQ1JPOwotCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnRpbGluZ19lbmFibGVkID0gMDsKKwkJCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikKKwkJCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+dGlsaW5nX2VuYWJsZWQgPSAwOwogCQl9IGVsc2UgaWYgKHNwLT52YWx1ZSA9PSAxKSB7CiAJCQlEUk1fREVCVUcoImNvbG9yIHRpbGluZyBlbmFibGVkXG4iKTsKIAkJCWRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQgfD0gUkFERU9OX0RTVF9USUxFX01BQ1JPOwogCQkJZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0IHw9IFJBREVPTl9EU1RfVElMRV9NQUNSTzsKLQkJCWRldl9wcml2LT5zYXJlYV9wcml2LT50aWxpbmdfZW5hYmxlZCA9IDE7CisJCQlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCQkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnRpbGluZ19lbmFibGVkID0gMTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJBREVPTl9TRVRQQVJBTV9QQ0lHQVJUX0xPQ0FUSU9OOgpAQCAtMzEyOSwxNCArMzE1NSw2IEBACiAKIHZvaWQgcmFkZW9uX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdiAmJgotCQkgICAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgIT0gMCkKLQkJCXJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKGRldik7Ci0JfQotCiAJcmFkZW9uX2RvX3JlbGVhc2UoZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggOTA2ZjliOS4uNTg3ZjViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0xMDE2LDcgKzEwMTYsNyBAQAogCXNucHJpbnRmKGkyYy0+YWRhcC5uYW1lLCBzaXplb2YoaTJjLT5hZGFwLm5hbWUpLCAicHhhX2kyYy1pMmMuJXUiLAogCQkgaTJjLT5hZGFwLm5yKTsKIAotCWkyYy0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJJMkNDTEsiKTsKKwlpMmMtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGkyYy0+Y2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGkyYy0+Y2xrKTsKIAkJZ290byBlY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCBiNzQzNGQyLi5jMzkwNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtNDAsOCArNDAsOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1paWMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpYy5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAKIC8qIGkyYyBjb250cm9sbGVyIHN0YXRlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGU2ODU3ZTAuLmM5ZjIxZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNjIsNiArNjIsOSBAQAogY29uZmlnIElERV9BVEFQSQogCWJvb2wKIAorY29uZmlnIElERV9MRUdBQ1kKKwlib29sCisKIGNvbmZpZyBCTEtfREVWX0lERV9TQVRBCiAJYm9vbCAiU3VwcG9ydCBmb3IgU0FUQSAoZGVwcmVjYXRlZDsgY29uZmxpY3RzIHdpdGggbGliYXRhIFNBVEEgZHJpdmVyKSIKIAlkZWZhdWx0IG4KQEAgLTcyNCw3ICs3MjcsNyBAQAogCiBjb25maWcgSURFX0FSTQogCXRyaXN0YXRlICJBUk0gSURFIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUk0gJiYgKEFSQ0hfQ0xQUzc1MDAgfHwgQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKKwlkZXBlbmRzIG9uIEFSTSAmJiAoQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKIAlkZWZhdWx0IHkKIAogY29uZmlnIEJMS19ERVZfSURFX0lDU0lERQpAQCAtODU2LDYgKzg1OSw3IEBACiBjb25maWcgQkxLX0RFVl9BTEkxNFhYCiAJdHJpc3RhdGUgIkFMSSBNMTR4eCBzdXBwb3J0IgogCXNlbGVjdCBJREVfVElNSU5HUworCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAiYWxpMTR4eC5wcm9iZSIga2VybmVsCiAJICBib290IHBhcmFtZXRlci4gIEl0IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNlY29uZGFyeSBJREUgaW50ZXJmYWNlCkBAIC04NjYsNiArODcwLDcgQEAKIAogY29uZmlnIEJMS19ERVZfRFRDMjI3OAogCXRyaXN0YXRlICJEVEMtMjI3OCBzdXBwb3J0IgorCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAiZHRjMjI3OC5wcm9iZSIga2VybmVsCiAJICBib290IHBhcmFtZXRlci4gSXQgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgc2Vjb25kYXJ5IElERSBpbnRlcmZhY2UKQEAgLTg3Niw2ICs4ODEsNyBAQAogY29uZmlnIEJMS19ERVZfSFQ2NTYwQgogCXRyaXN0YXRlICJIb2x0ZWsgSFQ2NTYwQiBzdXBwb3J0IgogCXNlbGVjdCBJREVfVElNSU5HUworCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAiaHQ2NTYwYi5wcm9iZSIga2VybmVsCiAJICBib290IHBhcmFtZXRlci4gSXQgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgc2Vjb25kYXJ5IElERSBpbnRlcmZhY2UKQEAgLTg4Niw2ICs4OTIsNyBAQAogY29uZmlnIEJMS19ERVZfUUQ2NVhYCiAJdHJpc3RhdGUgIlFESSBRRDY1eHggc3VwcG9ydCIKIAlzZWxlY3QgSURFX1RJTUlOR1MKKwlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgInFkNjV4eC5wcm9iZSIga2VybmVsCiAJICBib290IHBhcmFtZXRlci4gIEl0IHBlcm1pdHMgZmFzdGVyIEkvTyBzcGVlZHMgdG8gYmUgc2V0LiAgU2VlIHRoZQpAQCAtODk0LDYgKzkwMSw3IEBACiAKIGNvbmZpZyBCTEtfREVWX1VNQzg2NzIKIAl0cmlzdGF0ZSAiVU1DLTg2NzIgc3VwcG9ydCIKKwlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgInVtYzg2NzIucHJvYmUiIGtlcm5lbAogCSAgYm9vdCBwYXJhbWV0ZXIuIEl0IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNlY29uZGFyeSBJREUgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCmluZGV4IDc4MThkNDAuLjE3N2UzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubworCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubwogCiAjIGNvcmUgSURFIGNvZGUKIGlkZS1jb3JlLSQoQ09ORklHX0lERV9USU1JTkdTKQkJKz0gaWRlLXRpbWluZ3MubwpAQCAtMTUsNiArMTUsNyBAQAogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGKQkrPSBpZGUtZG1hLXNmZi5vCiBpZGUtY29yZS0kKENPTkZJR19JREVfUFJPQ19GUykJCSs9IGlkZS1wcm9jLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFQUNQSSkJKz0gaWRlLWFjcGkubworaWRlLWNvcmUtJChDT05GSUdfSURFX0xFR0FDWSkJCSs9IGlkZS1sZWdhY3kubwogCiBvYmotJChDT05GSUdfSURFKQkJCSs9IGlkZS1jb3JlLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA5MzUzODVjLi4zNjIzYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtNDI0LDEwICs0MjQsMTAgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKLQkJLmNoaXBzZXQJPSBpZGVfY21kNjQ2LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuZG1hX29wcwk9ICZjbWQ2NDhfZG1hX29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NFUklBTElaRSB8CisJCQkJICBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jeTgyYzY5My5jIGIvZHJpdmVycy9pZGUvY3k4MmM2OTMuYwppbmRleCA1Mjk3ZjA3Li5kMzdiYWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCisrKyBiL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMKQEAgLTI5Miw3ICsyOTIsNiBAQAogCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfY3k4MmM2OTMsCiAJLnBvcnRfb3BzCT0gJmN5ODJjNjkzX3BvcnRfb3BzLAotCS5jaGlwc2V0CT0gaWRlX2N5ODJjNjkzLAogCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9nYXlsZS5jIGIvZHJpdmVycy9pZGUvZ2F5bGUuYwppbmRleCA2OTE1MDY4Li41OWJkMGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9nYXlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2dheWxlLmMKQEAgLTExNyw2ICsxMTcsMTAgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZ2F5bGVfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19TRVJJQUxJWkUgfCBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogICAgIC8qCiAgICAgICogIFByb2JlIGZvciBhIEdheWxlIElERSBpbnRlcmZhY2UgKGFuZCBvcHRpb25hbGx5IGZvciBhbiBJREUgZG91YmxlcikKICAgICAgKi8KQEAgLTE3OCw3ICsxODIsNyBAQAogCWh3c1tpXSA9ICZod1tpXTsKICAgICB9CiAKLSAgICByYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworICAgIHJjID0gaWRlX2hvc3RfYWRkKCZnYXlsZV9wb3J0X2luZm8sIGh3cywgTlVMTCk7CiAgICAgaWYgKHJjKQogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXNfc3RhcnQsIHJlc19uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9ocHQzNjYuYwppbmRleCBmNWFmZDQ2Li5iMThlMTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9ocHQzNjYuYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAvKiB2YXJpb3VzIHR1bmluZyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIEhQVF9SRVNFVF9TVEFURV9FTkdJTkUKICN1bmRlZglIUFRfREVMQVlfSU5URVJSVVBUCi0jZGVmaW5lIEhQVF9TRVJJQUxJWkVfSU8JMAogCiBzdGF0aWMgY29uc3QgY2hhciAqcXVpcmtfZHJpdmVzW10gPSB7CiAJIlFVQU5UVU0gRklSRUJBTExsY3QwOCAwOCIsCkBAIC0xMjg4LDcgKzEyODcsNiBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKLQlpbnQgc2VyaWFsaXplCQk9IEhQVF9TRVJJQUxJWkVfSU87CiAJdTggIGNoaXBfdHlwZQkJPSBpbmZvLT5jaGlwX3R5cGU7CiAKIAkvKiBDYWNoZSB0aGUgY2hhbm5lbCdzIE1JU0MuIGNvbnRyb2wgcmVnaXN0ZXJzJyBvZmZzZXQgKi8KQEAgLTEzMDUsMTMgKzEzMDMsOSBAQAogCQkgKiBDbG9jayBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY2hhbm5lbHMsCiAJCSAqIHNvIHdlJ2xsIGhhdmUgdG8gc2VyaWFsaXplIHRoZW0uLi4gOi0oCiAJCSAqLwotCQlzZXJpYWxpemUgPSAxOworCQlod2lmLT5ob3N0LT5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19TRVJJQUxJWkU7CiAJCWh3aWYtPnJ3X2Rpc2sgPSAmaHB0M3h4bl9yd19kaXNrOwogCX0KLQotCS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhpcyBkZXZpY2UgaWYgbmVlZGVkICovCi0JaWYgKHNlcmlhbGl6ZSAmJiBod2lmLT5tYXRlKQotCQlod2lmLT5zZXJpYWxpemVkID0gaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IDE7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfZG1hX2hwdDM2NihpZGVfaHdpZl90ICpod2lmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggMjQ0YThhMC4uZmQ0YTM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC02MTUsMTAgKzYxNSwxMCBAQAogCWluX3BhcmFtc1swXS5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBHVE1fYnVmZmVyKTsKIAlpbl9wYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIgPSAodTggKikmaHdpZi0+YWNwaWRhdGEtPmd0bTsKIAlpbl9wYXJhbXNbMV0udHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7Ci0JaW5fcGFyYW1zWzFdLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YoQVRBX0lEX1dPUkRTICogMik7CisJaW5fcGFyYW1zWzFdLmJ1ZmZlci5sZW5ndGggPSBBVEFfSURfV09SRFMgKiAyOwogCWluX3BhcmFtc1sxXS5idWZmZXIucG9pbnRlciA9ICh1OCAqKSZtYXN0ZXItPmlkYnVmZjsKIAlpbl9wYXJhbXNbMl0udHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7Ci0JaW5fcGFyYW1zWzJdLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YoQVRBX0lEX1dPUkRTICogMik7CisJaW5fcGFyYW1zWzJdLmJ1ZmZlci5sZW5ndGggPSBBVEFfSURfV09SRFMgKiAyOwogCWluX3BhcmFtc1syXS5idWZmZXIucG9pbnRlciA9ICh1OCAqKSZzbGF2ZS0+aWRidWZmOwogCS8qIE91dHB1dCBidWZmZXI6IF9TVE0gaGFzIG5vIG91dHB1dCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDQyYWI2ZDguLjVkYWE0ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0yNjIsNyArMjYyLDYgQEAKIAkJc3RydWN0IHJlcXVlc3QgKmZhaWxlZCA9IChzdHJ1Y3QgcmVxdWVzdCAqKSBycS0+YnVmZmVyOwogCQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAkJdm9pZCAqc2Vuc2UgPSAmaW5mby0+c2Vuc2VfZGF0YTsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlpZiAoZmFpbGVkKSB7CiAJCQlpZiAoZmFpbGVkLT5zZW5zZSkgewpAQCAtMjc4LDExICsyNzcsOSBAQAogCQkJCQkJZmFpbGVkLT5oYXJkX25yX3NlY3RvcnMpKQogCQkJCQlCVUcoKTsKIAkJCX0gZWxzZSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKF9fYmxrX2VuZF9yZXF1ZXN0KGZhaWxlZCwgLUVJTywKLQkJCQkJCSAgICAgIGZhaWxlZC0+ZGF0YV9sZW4pKQorCQkJCWlmIChibGtfZW5kX3JlcXVlc3QoZmFpbGVkLCAtRUlPLAorCQkJCQkJICAgIGZhaWxlZC0+ZGF0YV9sZW4pKQogCQkJCQlCVUcoKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwogCQkJfQogCQl9IGVsc2UKIAkJCWNkcm9tX2FuYWx5emVfc2Vuc2VfZGF0YShkcml2ZSwgTlVMTCwgc2Vuc2UpOwpAQCAtMzE3LDcgKzMxNCw4IEBACiBzdGF0aWMgaW50IGNkcm9tX2RlY29kZV9zdGF0dXMoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZ29vZF9zdGF0LCBpbnQgKnN0YXRfcmV0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2dyb3VwLT5ycTsKIAlpbnQgc3RhdCwgZXJyLCBzZW5zZV9rZXk7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCkBAIC00MjYsMTYgKzQyNCwxNyBAQAogCQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGluZm8tPndyaXRlX3RpbWVvdXQpKQogCQkJCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCQkJZWxzZSB7CisJCQkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCQkJCS8qCiAJCQkJCSAqIHRha2UgYSBicmVhdGhlciByZWx5aW5nIG9uIHRoZSB1bnBsdWcKIAkJCQkJICogdGltZXIgdG8ga2ljayB1cyBhZ2FpbgogCQkJCQkgKi8KLQkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCQkJCWJsa19wbHVnX2RldmljZShkcml2ZS0+cXVldWUpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywKLQkJCQkJCQkJZmxhZ3MpOworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCQkJCWJsa19wbHVnX2RldmljZShxKTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKIAkJCQkJcmV0dXJuIDE7CiAJCQkJfQogCQkJfQpAQCAtNTA0LDEyICs1MDMsMTQgQEAKIAogZW5kX3JlcXVlc3Q6CiAJaWYgKHN0YXQgJiBBVEFfRVJSKSB7CisJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwotCQlIV0dST1VQKGRyaXZlKS0+cnEgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKworCQlod2dyb3VwLT5ycSA9IE5VTEw7CiAKIAkJY2Ryb21fcXVldWVfcmVxdWVzdF9zZW5zZShkcml2ZSwgcnEtPnNlbnNlLCBycSk7CiAJfSBlbHNlCkBAIC03NzMsNTIgKzc3NCw2IEBACiAJcmV0dXJuIGNkcm9tX3RyYW5zZmVyX3BhY2tldF9jb21tYW5kKGRyaXZlLCBycSwgY2Ryb21fbmV3cGNfaW50cik7CiB9CiAKLSNkZWZpbmUgSURFQ0RfU0VFS19USFJFU0hPTEQJKDEwMDApCQkJLyogMTAwMCBibG9ja3MgKi8KLSNkZWZpbmUgSURFQ0RfU0VFS19USU1FUgkoNSAqIFdBSVRfTUlOX1NMRUVQKQkvKiAxMDAgbXMgKi8KLSNkZWZpbmUgSURFQ0RfU0VFS19USU1FT1VUCSgyICogV0FJVF9DTUQpCQkvKiAyMCBzZWMgKi8KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9zZWVrX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWludCBzdGF0OwotCXN0YXRpYyBpbnQgcmV0cnkgPSAxMDsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKGNkcm9tX2RlY29kZV9zdGF0dXMoZHJpdmUsIDAsICZzdGF0KSkKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19TRUVLSU5HOwotCi0JaWYgKHJldHJ5ICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgaW5mby0+c3RhcnRfc2VlayArIElERUNEX1NFRUtfVElNRVIpKSB7Ci0JCWlmICgtLXJldHJ5ID09IDApCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7Ci0JfQotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2NkX3ByZXBhcmVfc2Vla19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXNlY3Rvcl90IGZyYW1lID0gcnEtPnNlY3RvcjsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOwotCi0Jc2VjdG9yX2RpdihmcmFtZSwgcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTKTsKLQotCW1lbXNldChycS0+Y21kLCAwLCBCTEtfTUFYX0NEQik7Ci0JcnEtPmNtZFswXSA9IEdQQ01EX1NFRUs7Ci0JcHV0X3VuYWxpZ25lZChjcHVfdG9fYmUzMihmcmFtZSksICh1bnNpZ25lZCBpbnQgKikgJnJxLT5jbWRbMl0pOwotCi0JcnEtPnRpbWVvdXQgPSBBVEFQSV9XQUlUX1BDOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGNkcm9tX3N0YXJ0X3NlZWtfY29udGludWF0aW9uKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+aHdncm91cC0+cnE7Ci0KLQlyZXR1cm4gY2Ryb21fdHJhbnNmZXJfcGFja2V0X2NvbW1hbmQoZHJpdmUsIHJxLCAmY2Ryb21fc2Vla19pbnRyKTsKLX0KLQogLyoKICAqIEZpeCB1cCBhIHBvc3NpYmx5IHBhcnRpYWxseS1wcm9jZXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBzdGFydCBpdCBvdmVyCiAgKiBlbnRpcmVseSwgb3IgZXZlbiBwdXQgaXQgYmFjayBvbiB0aGUgcmVxdWVzdCBxdWV1ZS4KQEAgLTk1MCw3ICs5MDUsOCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9uZXdwY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBod2lmLT5od2dyb3VwOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3Z3JvdXAtPnJxOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7CiAJaW50IGRtYV9lcnJvciA9IDAsIGRtYSwgc3RhdCwgdGhpc2xlbiwgdXB0b2RhdGUgPSAwOwpAQCAtMTE0OCwxNyArMTEwNCwxNSBAQAogCiBlbmRfcmVxdWVzdDoKIAlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBkbGVuID0gcnEtPmRhdGFfbGVuOwogCiAJCWlmIChkbWEpCiAJCQlycS0+ZGF0YV9sZW4gPSAwOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQlpZiAoX19ibGtfZW5kX3JlcXVlc3QocnEsIDAsIGRsZW4pKQorCQlpZiAoYmxrX2VuZF9yZXF1ZXN0KHJxLCAwLCBkbGVuKSkKIAkJCUJVRygpOwotCQlIV0dST1VQKGRyaXZlKS0+cnEgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCisJCWh3Z3JvdXAtPnJxID0gTlVMTDsKIAl9IGVsc2UgewogCQlpZiAoIXVwdG9kYXRlKQogCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwpAQCAtMTI2MCw3ICsxMjE0LDYgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2NkX2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWlkZV9oYW5kbGVyX3QgKmZuOwogCWludCB4ZmVybGVuOwogCkBAIC0xMjcwLDQ0ICsxMjIzLDE0IEBACiAJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOwogCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1NFRUtJTkcpIHsKLQkJCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQkJCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCA9IGppZmZpZXMgLSBpbmZvLT5zdGFydF9zZWVrOwotCQkJaW50IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCQl4ZmVybGVuID0gMzI3Njg7CisJCWZuID0gY2Ryb21fc3RhcnRfcndfY29udDsKIAotCQkJaWYgKChzdGF0ICYgQVRBX0RTQykgIT0gQVRBX0RTQykgewotCQkJCWlmIChlbGFwc2VkIDwgSURFQ0RfU0VFS19USU1FT1VUKSB7Ci0JCQkJCWlkZV9zdGFsbF9xdWV1ZShkcml2ZSwKLQkJCQkJCQlJREVDRF9TRUVLX1RJTUVSKTsKLQkJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQkJCX0KLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogRFNDIHRpbWVvdXRcbiIsCi0JCQkJCQlkcml2ZS0+bmFtZSk7Ci0JCQl9Ci0JCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19TRUVLSU5HOwotCQl9Ci0JCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgotCQkgICAgSURFX0xBUkdFX1NFRUsoaW5mby0+bGFzdF9ibG9jaywgYmxvY2ssCi0JCQkgICAgSURFQ0RfU0VFS19USFJFU0hPTEQpICYmCi0JCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19EU0NfT1ZFUkxBUCkpIHsKLQkJCXhmZXJsZW4gPSAwOwotCQkJZm4gPSBjZHJvbV9zdGFydF9zZWVrX2NvbnRpbnVhdGlvbjsKKwkJaWYgKGNkcm9tX3N0YXJ0X3J3KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAKLQkJCWRyaXZlLT5kbWEgPSAwOwotCQkJaW5mby0+c3RhcnRfc2VlayA9IGppZmZpZXM7Ci0KLQkJCWlkZV9jZF9wcmVwYXJlX3NlZWtfcmVxdWVzdChkcml2ZSwgcnEpOwotCQl9IGVsc2UgewotCQkJeGZlcmxlbiA9IDMyNzY4OwotCQkJZm4gPSBjZHJvbV9zdGFydF9yd19jb250OwotCi0JCQlpZiAoY2Ryb21fc3RhcnRfcncoZHJpdmUsIHJxKSA9PSBpZGVfc3RvcHBlZCkKLQkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkJCWlmIChpZGVfY2RfcHJlcGFyZV9yd19yZXF1ZXN0KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCi0JCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9Ci0JCWluZm8tPmxhc3RfYmxvY2sgPSBibG9jazsKKwkJaWYgKGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoZHJpdmUsIHJxKSA9PSBpZGVfc3RvcHBlZCkKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9IGVsc2UgaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSB8fCBibGtfcGNfcmVxdWVzdChycSkgfHwKIAkJICAgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykgewogCQl4ZmVybGVuID0gcnEtPmRhdGFfbGVuOwpAQCAtMTkwOCwxMyArMTgzMSw2IEBACiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07CiAKLWlkZV9kZXZzZXRfcndfZmxhZyhkc2Nfb3ZlcmxhcCwgSURFX0RGTEFHX0RTQ19PVkVSTEFQKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlY2Rfc2V0dGluZ3NbXSA9IHsKLQlJREVfUFJPQ19ERVZTRVQoZHNjX292ZXJsYXAsIDAsIDEpLAotCXsgMCB9LAotfTsKLQogc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9jZF9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXJldHVybiBpZGVjZF9wcm9jOwpAQCAtMTkyMiw3ICsxODM4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV9jZF9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXJldHVybiBpZGVjZF9zZXR0aW5nczsKKwlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZgogCkBAIC0yMDIyLDExICsxOTM4LDYgQEAKIAkvKiBzZXQgY29ycmVjdCBibG9jayBzaXplICovCiAJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlLCBDRF9GUkFNRVNJWkUpOwogCi0JaWYgKGRyaXZlLT5uZXh0ICE9IGRyaXZlKQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKLQogCWlmIChpZGVfY2Ryb21fcmVnaXN0ZXIoZHJpdmUsIG5zbG90cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzIGZhaWxlZCB0byByZWdpc3RlciBkZXZpY2Ugd2l0aCB0aGUiCiAJCQkJIiBjZHJvbSBkcml2ZXIuXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18pOwpAQCAtMjA2Myw3ICsxOTc0LDYgQEAKIAlrZnJlZShpbmZvLT50b2MpOwogCWlmIChkZXZpbmZvLT5oYW5kbGUgPT0gZHJpdmUpCiAJCXVucmVnaXN0ZXJfY2Ryb20oZGV2aW5mbyk7Ci0JZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJYmxrX3F1ZXVlX3ByZXBfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMKTsKIAlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmggYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAppbmRleCA1ODgyYjlhLi5kNWNlMzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaApAQCAtODgsOCArODgsNiBAQAogCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlX2RhdGE7CiAKIAlzdHJ1Y3QgcmVxdWVzdCByZXF1ZXN0X3NlbnNlX3JlcXVlc3Q7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2Jsb2NrOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfc2VlazsKIAogCXU4IG1heF9zcGVlZDsJCS8qIE1heCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCiAJdTggY3VycmVudF9zcGVlZDsJLyogQ3VycmVudCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwppbmRleCBjYWM0MzFmLi5mNmQyZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKQEAgLTk4LDEwICs5OCwxMCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlfX2xlMzIgKnRhYmxlID0gKF9fbGUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKLQl1bnNpZ25lZCBpbnQgaXNfdHJtMjkwCT0gKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3RybTI5MCkgPyAxIDogMDsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdTggaXNfdHJtMjkwID0gISEoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19UUk0yOTApOwogCiAJaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7CiAJaWYgKGh3aWYtPnNnX25lbnRzID09IDApCkBAIC0xNzYsMTUgKzE3NiwxMCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKLQl1bnNpZ25lZCBpbnQgcmVhZGluZzsKKwl1bnNpZ25lZCBpbnQgcmVhZGluZyA9IHJxX2RhdGFfZGlyKHJxKSA/IDAgOiBBVEFfRE1BX1dSOwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwogCXU4IGRtYV9zdGF0OwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJcmVhZGluZyA9IDA7Ci0JZWxzZQotCQlyZWFkaW5nID0gMSA8PCAzOwotCiAJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KIAlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7CiAJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKQEAgLTIwOSwxMCArMjA0LDExIEBACiAKIAkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAlpZiAobW1pbykKLQkJd3JpdGViKGRtYV9zdGF0IHwgNiwKKwkJd3JpdGViKGRtYV9zdGF0IHwgQVRBX0RNQV9FUlIgfCBBVEFfRE1BX0lOVFIsCiAJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKIAllbHNlCi0JCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKwkJb3V0YihkbWFfc3RhdCB8IEFUQV9ETUFfRVJSIHwgQVRBX0RNQV9JTlRSLAorCQkgICAgIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiAJcmV0dXJuIDA7CkBAIC0yNDYsMTQgKzI0MiwxMyBAQAogCiAJaHdpZi0+aHdncm91cC0+ZXhwaXJ5ID0gTlVMTDsJLyogb25lIGZyZWUgcmlkZSBmb3Igbm93ICovCiAKLQkvKiAxIGRtYWluZywgMiBlcnJvciwgNCBpbnRyICovCi0JaWYgKGRtYV9zdGF0ICYgMikJLyogRVJST1IgKi8KKwlpZiAoZG1hX3N0YXQgJiBBVEFfRE1BX0VSUikJLyogRVJST1IgKi8KIAkJcmV0dXJuIC0xOwogCi0JaWYgKGRtYV9zdGF0ICYgMSkJLyogRE1BaW5nICovCisJaWYgKGRtYV9zdGF0ICYgQVRBX0RNQV9BQ1RJVkUpCS8qIERNQWluZyAqLwogCQlyZXR1cm4gV0FJVF9DTUQ7CiAKLQlpZiAoZG1hX3N0YXQgJiA0KQkvKiBHb3QgYW4gSW50ZXJydXB0ICovCisJaWYgKGRtYV9zdGF0ICYgQVRBX0RNQV9JTlRSKQkvKiBHb3QgYW4gSW50ZXJydXB0ICovCiAJCXJldHVybiBXQUlUX0NNRDsKIAogCXJldHVybiAwOwkvKiBTdGF0dXMgaXMgdW5rbm93biAtLSByZXNldCB0aGUgYnVzICovCkBAIC0yNzksMTIgKzI3NCwxMSBAQAogCSAqLwogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pIHsKIAkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwotCQkvKiBzdGFydCBETUEgKi8KLQkJd3JpdGViKGRtYV9jbWQgfCAxLAorCQl3cml0ZWIoZG1hX2NtZCB8IEFUQV9ETUFfU1RBUlQsCiAJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKIAl9IGVsc2UgewogCQlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwotCQlvdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJb3V0YihkbWFfY21kIHwgQVRBX0RNQV9TVEFSVCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJfQogCiAJd21iKCk7CkBAIC0yOTYsMTkgKzI5MCwxOCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBkbWFfc3RhdCA9IDAsIGRtYV9jbWQgPSAwOworCXU4IGRtYV9zdGF0ID0gMCwgZG1hX2NtZCA9IDAsIG1hc2s7CiAKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAorCS8qIHN0b3AgRE1BICovCiAJaWYgKG1taW8pIHsKLQkJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KIAkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwotCQkvKiBzdG9wIERNQSAqLwotCQl3cml0ZWIoZG1hX2NtZCAmIH4xLAorCQl3cml0ZWIoZG1hX2NtZCAmIH5BVEFfRE1BX1NUQVJULAogCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CiAJfSBlbHNlIHsKIAkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQkJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCQlvdXRiKGRtYV9jbWQgJiB+QVRBX0RNQV9TVEFSVCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJfQogCiAJLyogZ2V0IERNQSBzdGF0dXMgKi8KQEAgLTMxNiwxNiArMzA5LDIxIEBACiAKIAlpZiAobW1pbykKIAkJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCi0JCXdyaXRlYihkbWFfc3RhdCB8IDYsCisJCXdyaXRlYihkbWFfc3RhdCB8IEFUQV9ETUFfRVJSIHwgQVRBX0RNQV9JTlRSLAogCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSk7CiAJZWxzZQotCQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CisJCW91dGIoZG1hX3N0YXQgfCBBVEFfRE1BX0VSUiB8IEFUQV9ETUFfSU5UUiwKKwkJICAgICBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKIAogCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwogCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiAJd21iKCk7Ci0JcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9zdGF0KSA6IDA7CisKKwkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCisJbWFzayA9IEFUQV9ETUFfQUNUSVZFIHwgQVRBX0RNQV9FUlIgfCBBVEFfRE1BX0lOVFI7CisJaWYgKChkbWFfc3RhdCAmIG1hc2spICE9IEFUQV9ETUFfSU5UUikKKwkJcmV0dXJuIDB4MTAgfCBkbWFfc3RhdDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfZW5kKTsKIApAQCAtMzM1LDExICszMzMsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKIAotCS8qIHJldHVybiAxIGlmIElOVFIgYXNzZXJ0ZWQgKi8KLQlpZiAoKGRtYV9zdGF0ICYgNCkgPT0gNCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGRtYV9zdGF0ICYgQVRBX0RNQV9JTlRSKSA/IDEgOiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90ZXN0X2lycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggY2MzNWQ2ZC4uZWNhY2MwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTg0LDExICs4NCwxMSBAQAogCQlpZGVfZG1hX29uKGRyaXZlKTsKIAl9CiAKLQlpZiAoIV9fYmxrX2VuZF9yZXF1ZXN0KHJxLCBlcnJvciwgbnJfYnl0ZXMpKSB7Ci0JCWlmIChkZXF1ZXVlKQotCQkJSFdHUk9VUChkcml2ZSktPnJxID0gTlVMTDsKKwlpZiAoIWJsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIG5yX2J5dGVzKSkKIAkJcmV0ID0gMDsKLQl9CisKKwlpZiAocmV0ID09IDAgJiYgZGVxdWV1ZSkKKwkJZHJpdmUtPmh3aWYtPmh3Z3JvdXAtPnJxID0gTlVMTDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDcsMTYgKzEwNyw3IEBACiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCiB7CiAJdW5zaWduZWQgaW50IG5yX2J5dGVzID0gbnJfc2VjdG9ycyA8PCA5OwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAxOwotCi0JLyoKLQkgKiByb29tIGZvciBsb2NraW5nIGltcHJvdmVtZW50cyBoZXJlLCB0aGUgY2FsbHMgYmVsb3cgZG9uJ3QKLQkgKiBuZWVkIHRoZSBxdWV1ZSBsb2NrIGhlbGQgYXQgYWxsCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPmh3Z3JvdXAtPnJxOwogCiAJaWYgKCFucl9ieXRlcykgewogCQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQpAQCAtMTI1LDEwNSArMTE2LDEwIEBACiAJCQlucl9ieXRlcyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzIDw8IDk7CiAJfQogCi0JcmV0ID0gX19pZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSwgbnJfYnl0ZXMsIDEpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBfX2lkZV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9kYXRlLCBucl9ieXRlcywgMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9lbmRfcmVxdWVzdCk7CiAKLXN0YXRpYyB2b2lkIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwotCi0jaWZkZWYgREVCVUdfUE0KLQlwcmludGsoS0VSTl9JTkZPICIlczogY29tcGxldGVfcG93ZXJfc3RlcChzdGVwOiAlZClcbiIsCi0JCWRyaXZlLT5uYW1lLCBwbS0+cG1fc3RlcCk7Ci0jZW5kaWYKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHBtLT5wbV9zdGVwKSB7Ci0JY2FzZSBJREVfUE1fRkxVU0hfQ0FDSEU6CS8qIFN1c3BlbmQgc3RlcCAxIChmbHVzaCBjYWNoZSkgKi8KLQkJaWYgKHBtLT5wbV9zdGF0ZSA9PSBQTV9FVkVOVF9GUkVFWkUpCi0JCQlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7Ci0JCWVsc2UKLQkJCXBtLT5wbV9zdGVwID0gSURFX1BNX1NUQU5EQlk7Ci0JCWJyZWFrOwotCWNhc2UgSURFX1BNX1NUQU5EQlk6CQkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgKi8KLQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOwotCQlicmVhazsKLQljYXNlIElERV9QTV9SRVNUT1JFX1BJTzoJLyogUmVzdW1lIHN0ZXAgMSAocmVzdG9yZSBQSU8pICovCi0JCXBtLT5wbV9zdGVwID0gSURFX1BNX0lETEU7Ci0JCWJyZWFrOwotCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSovCi0JCXBtLT5wbV9zdGVwID0gSURFX1BNX1JFU1RPUkVfRE1BOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0JaWRlX3Rhc2tfdCAqYXJncyA9IHJxLT5zcGVjaWFsOwotCi0JbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigqYXJncykpOwotCi0Jc3dpdGNoIChwbS0+cG1fc3RlcCkgewotCWNhc2UgSURFX1BNX0ZMVVNIX0NBQ0hFOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCi0JCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCQlicmVhazsKLQkJLyogTm90IHN1cHBvcnRlZD8gU3dpdGNoIHRvIG5leHQgc3RlcCBub3cuICovCi0JCWlmIChhdGFfaWRfZmx1c2hfZW5hYmxlZChkcml2ZS0+aWQpID09IDAgfHwKLQkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1dDQUNIRSkgPT0gMCkgewotCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfQotCQlpZiAoYXRhX2lkX2ZsdXNoX2V4dF9lbmFibGVkKGRyaXZlLT5pZCkpCi0JCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7Ci0JCWVsc2UKLQkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOwotCQlnb3RvIG91dF9kb190ZjsKLQljYXNlIElERV9QTV9TVEFOREJZOgkJLyogU3VzcGVuZCBzdGVwIDIgKHN0YW5kYnkpICovCi0JCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NUQU5EQllOT1cxOwotCQlnb3RvIG91dF9kb190ZjsKLQljYXNlIElERV9QTV9SRVNUT1JFX1BJTzoJLyogUmVzdW1lIHN0ZXAgMSAocmVzdG9yZSBQSU8pICovCi0JCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7Ci0JCS8qCi0JCSAqIHNraXAgSURFX1BNX0lETEUgZm9yIEFUQVBJIGRldmljZXMKLQkJICovCi0JCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCQlwbS0+cG1fc3RlcCA9IElERV9QTV9SRVNUT1JFX0RNQTsKLQkJZWxzZQotCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLwotCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOwotCQlnb3RvIG91dF9kb190ZjsKLQljYXNlIElERV9QTV9SRVNUT1JFX0RNQToJLyogUmVzdW1lIHN0ZXAgMyAocmVzdG9yZSBETUEpICovCi0JCS8qCi0JCSAqIFJpZ2h0IG5vdywgYWxsIHdlIGRvIGlzIGNhbGwgaWRlX3NldF9kbWEoZHJpdmUpLAotCQkgKiB3ZSBjb3VsZCBiZSBzbWFydGVyIGFuZCBjaGVjayBmb3IgY3VycmVudCB4ZmVyX3NwZWVkCi0JCSAqIGluIHN0cnVjdCBkcml2ZSBldGMuLi4KLQkJICovCi0JCWlmIChkcml2ZS0+aHdpZi0+ZG1hX29wcyA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCS8qCi0JCSAqIFRPRE86IHJlc3BlY3QgSURFX0RGTEFHX1VTSU5HX0RNQQotCQkgKi8KLQkJaWRlX3NldF9kbWEoZHJpdmUpOwotCQlicmVhazsKLQl9Ci0KLQlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotCi1vdXRfZG9fdGY6Ci0JYXJncy0+dGZfZmxhZ3MJID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlhcmdzLT5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGFyZ3MpOwotfQotCiAvKioKICAqCWlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdAktCWNvbXBsZXRlIGFuIElERSBJL08KICAqCUBkcml2ZTogSURFIGRldmljZSBmb3IgdGhlIEkvTwpAQCAtMjQyLDQ4ICsxMzgsMTIgQEAKIGludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJQlVHX09OKCFibGtfcnFfc3RhcnRlZChycSkpOwotCXJldCA9IF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX3NlY3RvcnMgPDwgOSwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX3NlY3RvcnMgPDwgOSwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QpOwogCi0KLS8qKgotICoJaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QgLSBlbmQgdGhlIGN1cnJlbnQgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0Ci0gKglAZHJpdmU6IHRhcmdldCBkcml2ZQotICoJQHJxOiByZXF1ZXN0Ci0gKgotICoJVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGN1cnJlbnQgUE0gcmVxdWVzdCBhbmQgc3RvcHMgdGhlIHF1ZXVlCi0gKglpZiBuZWNlc3NhcnkuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWZkZWYgREVCVUdfUE0KLQlwcmludGsoIiVzOiBjb21wbGV0aW5nIFBNIHJlcXVlc3QsICVzXG4iLCBkcml2ZS0+bmFtZSwKLQkgICAgICAgYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgPyAic3VzcGVuZCIgOiAicmVzdW1lIik7Ci0jZW5kaWYKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlpZiAoYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkpIHsKLQkJYmxrX3N0b3BfcXVldWUoZHJpdmUtPnF1ZXVlKTsKLQl9IGVsc2UgewotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQkxPQ0tFRDsKLQkJYmxrX3N0YXJ0X3F1ZXVlKGRyaXZlLT5xdWV1ZSk7Ci0JfQotCUhXR1JPVVAoZHJpdmUpLT5ycSA9IE5VTEw7Ci0JaWYgKF9fYmxrX2VuZF9yZXF1ZXN0KHJxLCAwLCAwKSkKLQkJQlVHKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLX0KLQogLyoqCiAgKglpZGVfZW5kX2RyaXZlX2NtZAktCWVuZCBhbiBleHBsaWNpdCBkcml2ZSBjb21tYW5kCiAgKglAZHJpdmU6IGNvbW1hbmQgCkBAIC0zMDAsMTkgKzE2MCwxMiBAQAogIAogdm9pZCBpZGVfZW5kX2RyaXZlX2NtZCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzdGF0LCB1OCBlcnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2dyb3VwLT5ycTsKIAogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CiAJCWlkZV90YXNrX3QgKnRhc2sgPSAoaWRlX3Rhc2tfdCAqKXJxLT5zcGVjaWFsOwogCi0JCWlmIChycS0+ZXJyb3JzID09IDApCi0JCQlycS0+ZXJyb3JzID0gIU9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEJBRF9TVEFUKTsKLQogCQlpZiAodGFzaykgewogCQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CiAKQEAgLTMzMywxNSArMTg2LDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlIV0dST1VQKGRyaXZlKS0+cnEgPSBOVUxMOwotCXJxLT5lcnJvcnMgPSBlcnI7Ci0JaWYgKHVubGlrZWx5KF9fYmxrX2VuZF9yZXF1ZXN0KHJxLCAocnEtPmVycm9ycyA/IC1FSU8gOiAwKSwKLQkJCQkgICAgICAgYmxrX3JxX2J5dGVzKHJxKSkpKQotCQlCVUcoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotfQorCWh3Z3JvdXAtPnJxID0gTlVMTDsKIAorCXJxLT5lcnJvcnMgPSBlcnI7CisKKwlpZiAodW5saWtlbHkoYmxrX2VuZF9yZXF1ZXN0KHJxLCAocnEtPmVycm9ycyA/IC1FSU8gOiAwKSwKKwkJCQkgICAgIGJsa19ycV9ieXRlcyhycSkpKSkKKwkJQlVHKCk7Cit9CiBFWFBPUlRfU1lNQk9MKGlkZV9lbmRfZHJpdmVfY21kKTsKIAogc3RhdGljIHZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCkBAIC03MjAsNDAgKzU3Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZGVfY2hlY2tfcG1fc3RhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0KLQlpZiAoYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgJiYKLQkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX1NUQVJUX1NVU1BFTkQpCi0JCS8qIE1hcmsgZHJpdmUgYmxvY2tlZCB3aGVuIHN0YXJ0aW5nIHRoZSBzdXNwZW5kIHNlcXVlbmNlLiAqLwotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19CTE9DS0VEOwotCWVsc2UgaWYgKGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkgJiYKLQkJIHBtLT5wbV9zdGVwID09IElERV9QTV9TVEFSVF9SRVNVTUUpIHsKLQkJLyogCi0JCSAqIFRoZSBmaXJzdCB0aGluZyB3ZSBkbyBvbiB3YWtldXAgaXMgdG8gd2FpdCBmb3IgQlNZIGJpdCB0bwotCQkgKiBnbyBhd2F5ICh3aXRoIGEgbG9vb25nIHRpbWVvdXQpIGFzIGEgZHJpdmUgb24gdGhpcyBod2lmIG1heQotCQkgKiBqdXN0IGJlIFBPU1RpbmcgaXRzZWxmLgotCQkgKiBXZSBkbyB0aGF0IGJlZm9yZSBldmVuIHNlbGVjdGluZyBhcyB0aGUgIm90aGVyIiBkZXZpY2Ugb24KLQkJICogdGhlIGJ1cyBtYXkgYmUgYnJva2VuIGVub3VnaCB0byB3YWxrIG9uIG91ciB0b2VzIGF0IHRoaXMKLQkJICogcG9pbnQuCi0JCSAqLwotCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JCWludCByYzsKLSNpZmRlZiBERUJVR19QTQotCQlwcmludGsoIiVzOiBXYWtldXAgcmVxdWVzdCBpbml0ZWQsIHdhaXRpbmcgZm9yICFCU1kuLi5cbiIsIGRyaXZlLT5uYW1lKTsKLSNlbmRpZgotCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDM1MDAwKTsKLQkJaWYgKHJjKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1cyBub3QgcmVhZHkgb24gd2FrZXVwXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQkJcmMgPSBpZGVfd2FpdF9ub3RfYnVzeShod2lmLCAxMDAwMDApOwotCQlpZiAocmMpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmUgbm90IHJlYWR5IG9uIHdha2V1cFxuIiwgZHJpdmUtPm5hbWUpOwotCX0KLX0KLQogLyoqCiAgKglzdGFydF9yZXF1ZXN0CS0Jc3RhcnQgb2YgSS9PIGFuZCBjb21tYW5kIGlzc3VpbmcgZm9yIElERQogICoKQEAgLTkyNyw3ICs3NDUsNyBAQAogCiAvKgogICogSXNzdWUgYSBuZXcgcmVxdWVzdCB0byBhIGRyaXZlIGZyb20gaHdncm91cAotICogQ2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCAuLik7CisgKiBDYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgZG9uZSBzcGluX2xvY2tfaXJxc2F2ZSgmaHdncm91cC0+bG9jaywgLi4pOwogICoKICAqIEEgaHdncm91cCBpcyBhIHNlcmlhbGl6ZWQgZ3JvdXAgb2YgSURFIGludGVyZmFjZXMuICBVc3VhbGx5IHRoZXJlIGlzCiAgKiBleGFjdGx5IG9uZSBod2lmIChpbnRlcmZhY2UpIHBlciBod2dyb3VwLCBidXQgYnVnZ3kgY29udHJvbGxlcnMgKGVnLiBDTUQ2NDApCkBAIC05MzksNyArNzU3LDcgQEAKICAqIHBvc3NpYmx5IGFsb25nIHdpdGggbWFueSBvdGhlciBkZXZpY2VzLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGNvbW1vbiBpbgogICogUENJLWJhc2VkIHN5c3RlbXMgd2l0aCBvZmYtYm9hcmQgSURFIGNvbnRyb2xsZXIgY2FyZHMuCiAgKgotICogVGhlIElERSBkcml2ZXIgdXNlcyB0aGUgc2luZ2xlIGdsb2JhbCBpZGVfbG9jayBzcGlubG9jayB0byBwcm90ZWN0CisgKiBUaGUgSURFIGRyaXZlciB1c2VzIGEgcGVyLWh3Z3JvdXAgc3BpbmxvY2sgdG8gcHJvdGVjdAogICogYWNjZXNzIHRvIHRoZSByZXF1ZXN0IHF1ZXVlcywgYW5kIHRvIHByb3RlY3QgdGhlIGh3Z3JvdXAtPmJ1c3kgZmxhZy4KICAqCiAgKiBUaGUgZmlyc3QgdGhyZWFkIGludG8gdGhlIGRyaXZlciBmb3IgYSBwYXJ0aWN1bGFyIGh3Z3JvdXAgc2V0cyB0aGUKQEAgLTk1NSw3ICs3NzMsNyBAQAogICogd2lsbCBzdGFydCB0aGUgbmV4dCByZXF1ZXN0IGZyb20gdGhlIHF1ZXVlLiAgSWYgbm8gbW9yZSB3b3JrIHJlbWFpbnMsCiAgKiB0aGUgZHJpdmVyIHdpbGwgY2xlYXIgdGhlIGh3Z3JvdXAtPmJ1c3kgZmxhZyBhbmQgZXhpdC4KICAqCi0gKiBUaGUgaWRlX2xvY2sgKHNwaW5sb2NrKSBpcyB1c2VkIHRvIHByb3RlY3QgYWxsIGFjY2VzcyB0byB0aGUKKyAqIFRoZSBwZXItaHdncm91cCBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgYWxsIGFjY2VzcyB0byB0aGUKICAqIGh3Z3JvdXAtPmJ1c3kgZmxhZywgYnV0IGlzIG90aGVyd2lzZSBub3QgbmVlZGVkIGZvciBtb3N0IHByb2Nlc3NpbmcgaW4KICAqIHRoZSBkcml2ZXIuICBUaGlzIG1ha2VzIHRoZSBkcml2ZXIgbXVjaCBtb3JlIGZyaWVuZGxpZXIgdG8gc2hhcmVkIElSUXMKICAqIHRoYW4gcHJldmlvdXMgZGVzaWducywgd2hpbGUgcmVtYWluaW5nIDEwMCUgKD8pIFNNUCBzYWZlIGFuZCBjYXBhYmxlLgpAQCAtOTY4LDcgKzc4Niw3IEBACiAJaWRlX3N0YXJ0c3RvcF90CXN0YXJ0c3RvcDsKIAlpbnQgICAgICAgICAgICAgbG9vcHMgPSAwOwogCi0JLyogY2FsbGVyIG11c3Qgb3duIGlkZV9sb2NrICovCisJLyogY2FsbGVyIG11c3Qgb3duIGh3Z3JvdXAtPmxvY2sgKi8KIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAl3aGlsZSAoIWh3Z3JvdXAtPmJ1c3kpIHsKQEAgLTEwMjMsMTIgKzg0MSwxMiBAQAogCQl9CiAJYWdhaW46CiAJCWh3aWYgPSBIV0lGKGRyaXZlKTsKLQkJaWYgKGh3Z3JvdXAtPmh3aWYtPnNoYXJpbmdfaXJxICYmIGh3aWYgIT0gaHdncm91cC0+aHdpZikgeworCQlpZiAoaHdpZiAhPSBod2dyb3VwLT5od2lmKSB7CiAJCQkvKgogCQkJICogc2V0IG5JRU4gZm9yIHByZXZpb3VzIGh3aWYsIGRyaXZlcyBpbiB0aGUKIAkJCSAqIHF1aXJrX2xpc3QgbWF5IG5vdCBsaWtlIGludHIgc2V0dXBzL2NsZWFudXBzCiAJCQkgKi8KLQkJCWlmIChkcml2ZS0+cXVpcmtfbGlzdCAhPSAxKQorCQkJaWYgKGRyaXZlLT5xdWlya19saXN0ID09IDApCiAJCQkJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwogCQl9CiAJCWh3Z3JvdXAtPmh3aWYgPSBod2lmOwpAQCAtMTAzNiwxMSArODU0LDYgQEAKIAkJZHJpdmUtPmRldl9mbGFncyAmPSB+KElERV9ERkxBR19TTEVFUElORyB8IElERV9ERkxBR19QQVJLRUQpOwogCQlkcml2ZS0+c2VydmljZV9zdGFydCA9IGppZmZpZXM7CiAKLQkJaWYgKGJsa19xdWV1ZV9wbHVnZ2VkKGRyaXZlLT5xdWV1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiaWRlOiBodWg/IHF1ZXVlIHdhcyBwbHVnZ2VkIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCiAJCS8qCiAJCSAqIHdlIGtub3cgdGhhdCB0aGUgcXVldWUgaXNuJ3QgZW1wdHksIGJ1dCB0aGlzIGNhbiBoYXBwZW4KIAkJICogaWYgdGhlIHEtPnByZXBfcnFfZm4oKSBkZWNpZGVzIHRvIGtpbGwgYSByZXF1ZXN0CkBAIC0xMDkwLDExICs5MDMsMTEgQEAKIAkJICovCiAJCWlmIChtYXNrZWRfaXJxICE9IElERV9OT19JUlEgJiYgaHdpZi0+aXJxICE9IG1hc2tlZF9pcnEpCiAJCQlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKLQkJc3Bpbl91bmxvY2soJmlkZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmh3Z3JvdXAtPmxvY2spOwogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkJCS8qIGFsbG93IG90aGVyIElSUXMgd2hpbGUgd2Ugc3RhcnQgdGhpcyByZXF1ZXN0ICovCiAJCXN0YXJ0c3RvcCA9IHN0YXJ0X3JlcXVlc3QoZHJpdmUsIHJxKTsKLQkJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOworCQlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAkJaWYgKG1hc2tlZF9pcnEgIT0gSURFX05PX0lSUSAmJiBod2lmLT5pcnEgIT0gbWFza2VkX2lycSkKIAkJCWVuYWJsZV9pcnEoaHdpZi0+aXJxKTsKIAkJaWYgKHN0YXJ0c3RvcCA9PSBpZGVfc3RvcHBlZCkKQEAgLTExOTIsNyArMTAwNSw3IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAl1bnNpZ25lZCBsb25nCXdhaXQgPSAtMTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoKChoYW5kbGVyID0gaHdncm91cC0+aGFuZGxlcikgPT0gTlVMTCkgfHwKIAkgICAgKGh3Z3JvdXAtPnJlcV9nZW4gIT0gaHdncm91cC0+cmVxX2dlbl90aW1lcikpIHsKQEAgLTEyMjUsNyArMTAzOCw3IEBACiAJCQkJCWh3Z3JvdXAtPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIHdhaXQ7CiAJCQkJCWh3Z3JvdXAtPnJlcV9nZW5fdGltZXIgPSBod2dyb3VwLT5yZXFfZ2VuOwogCQkJCQlhZGRfdGltZXIoJmh3Z3JvdXAtPnRpbWVyKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJfQpAQCAtMTIzNSw3ICsxMDQ4LDcgQEAKIAkJCSAqIHRoZSBoYW5kbGVyKCkgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8KIAkJCSAqIGdsb2JhbGx5IG1hc2sgdGhlIHNwZWNpZmljIElSUToKIAkJCSAqLwotCQkJc3Bpbl91bmxvY2soJmlkZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZod2dyb3VwLT5sb2NrKTsKIAkJCWh3aWYgID0gSFdJRihkcml2ZSk7CiAJCQkvKiBkaXNhYmxlX2lycV9ub3N5bmMgPz8gKi8KIAkJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CkBAIC0xMjU5LDE0ICsxMDcyLDE0IEBACiAJCQkJCQkgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwogCQkJfQogCQkJZHJpdmUtPnNlcnZpY2VfdGltZSA9IGppZmZpZXMgLSBkcml2ZS0+c2VydmljZV9zdGFydDsKLQkJCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwkJCXNwaW5fbG9ja19pcnEoJmh3Z3JvdXAtPmxvY2spOwogCQkJZW5hYmxlX2lycShod2lmLT5pcnEpOwogCQkJaWYgKHN0YXJ0c3RvcCA9PSBpZGVfc3RvcHBlZCkKIAkJCQlod2dyb3VwLT5idXN5ID0gMDsKIAkJfQogCX0KIAlpZGVfZG9fcmVxdWVzdChod2dyb3VwLCBJREVfTk9fSVJRKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0xMzU5LDE4ICsxMTcyLDE2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZGVfaHdncm91cF90ICpod2dyb3VwID0gKGlkZV9od2dyb3VwX3QgKilkZXZfaWQ7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKKwlpZGVfaHdpZl90ICpod2lmID0gaHdncm91cC0+aHdpZjsKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaWRlX2hhbmRsZXJfdCAqaGFuZGxlcjsKIAlpZGVfc3RhcnRzdG9wX3Qgc3RhcnRzdG9wOworCWlycXJldHVybl90IGlycV9yZXQgPSBJUlFfTk9ORTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCWh3aWYgPSBod2dyb3VwLT5od2lmOworCXNwaW5fbG9ja19pcnFzYXZlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWlkZV9hY2tfaW50cihod2lmKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQorCWlmICghaWRlX2Fja19pbnRyKGh3aWYpKQorCQlnb3RvIG91dDsKIAogCWlmICgoaGFuZGxlciA9IGh3Z3JvdXAtPmhhbmRsZXIpID09IE5VTEwgfHwgaHdncm91cC0+cG9sbGluZykgewogCQkvKgpAQCAtMTQwNiw5ICsxMjE3LDkgQEAKIAkJCSh2b2lkKWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFUENJICovCiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIElSUV9OT05FOworCQlnb3RvIG91dDsKIAl9CisKIAlkcml2ZSA9IGh3Z3JvdXAtPmRyaXZlOwogCWlmICghZHJpdmUpIHsKIAkJLyoKQEAgLTE0MTcsMTAgKzEyMjgsMTAgQEAKIAkJICoKIAkJICogW05vdGUgLSB0aGlzIGNhbiBvY2N1ciBpZiB0aGUgZHJpdmUgaXMgaG90IHVucGx1Z2dlZF0KIAkJICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKKwkJZ290byBvdXRfaGFuZGxlZDsKIAl9Ci0JaWYgKCFkcml2ZV9pc19yZWFkeShkcml2ZSkpIHsKKworCWlmICghZHJpdmVfaXNfcmVhZHkoZHJpdmUpKQogCQkvKgogCQkgKiBUaGlzIGhhcHBlbnMgcmVndWxhcmx5IHdoZW4gd2Ugc2hhcmUgYSBQQ0kgSVJRIHdpdGgKIAkJICogYW5vdGhlciBkZXZpY2UuICBVbmZvcnR1bmF0ZWx5LCBpdCBjYW4gYWxzbyBoYXBwZW4KQEAgLTE0MjgsOSArMTIzOSw4IEBACiAJCSAqIHRoZWlyIHN0YXR1cyByZWdpc3RlciBpcyB1cCB0byBkYXRlLiAgSG9wZWZ1bGx5IHdlIGhhdmUKIAkJICogZW5vdWdoIGFkdmFuY2Ugb3ZlcmhlYWQgdGhhdCB0aGUgbGF0dGVyIGlzbid0IGEgcHJvYmxlbS4KIAkJICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9CisJCWdvdG8gb3V0OworCiAJaWYgKCFod2dyb3VwLT5idXN5KSB7CiAJCWh3Z3JvdXAtPmJ1c3kgPSAxOwkvKiBwYXJhbm9pYSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfaW50cjogaHdncm91cC0+YnVzeSB3YXMgMCA/P1xuIiwgZHJpdmUtPm5hbWUpOwpAQCAtMTQzOCw3ICsxMjQ4LDcgQEAKIAlod2dyb3VwLT5oYW5kbGVyID0gTlVMTDsKIAlod2dyb3VwLT5yZXFfZ2VuKys7CiAJZGVsX3RpbWVyKCZod2dyb3VwLT50aW1lcik7Ci0Jc3Bpbl91bmxvY2soJmlkZV9sb2NrKTsKKwlzcGluX3VubG9jaygmaHdncm91cC0+bG9jayk7CiAKIAlpZiAoaHdpZi0+cG9ydF9vcHMgJiYgaHdpZi0+cG9ydF9vcHMtPmNsZWFyX2lycSkKIAkJaHdpZi0+cG9ydF9vcHMtPmNsZWFyX2lycShkcml2ZSk7CkBAIC0xNDQ5LDcgKzEyNTksNyBAQAogCS8qIHNlcnZpY2UgdGhpcyBpbnRlcnJ1cHQsIG1heSBzZXQgaGFuZGxlciBmb3IgbmV4dCBpbnRlcnJ1cHQgKi8KIAlzdGFydHN0b3AgPSBoYW5kbGVyKGRyaXZlKTsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAkvKgogCSAqIE5vdGUgdGhhdCBoYW5kbGVyKCkgbWF5IGhhdmUgc2V0IHRoaW5ncyB1cCBmb3IgYW5vdGhlcgogCSAqIGludGVycnVwdCB0byBvY2N1ciBzb29uLCBidXQgaXQgY2Fubm90IGhhcHBlbiB1bnRpbApAQCAtMTQ2Nyw4ICsxMjc3LDExIEBACiAJCQkJIm9uIGV4aXRcbiIsIGRyaXZlLT5uYW1lKTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCXJldHVybiBJUlFfSEFORExFRDsKK291dF9oYW5kbGVkOgorCWlycV9yZXQgPSBJUlFfSEFORExFRDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGlycV9yZXQ7CiB9CiAKIC8qKgpAQCAtMTQ4OCwxNiArMTMwMSwxNyBAQAogCiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CisJaWRlX2h3Z3JvdXBfdCAqaHdncm91cCA9IGRyaXZlLT5od2lmLT5od2dyb3VwOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaWRlX2h3Z3JvdXBfdCAqaHdncm91cCA9IEhXR1JPVVAoZHJpdmUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJaHdncm91cC0+cnEgPSBOVUxMOwotCV9fZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7Ci0JYmxrX3N0YXJ0X3F1ZXVlaW5nKGRyaXZlLT5xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKKwlibGtfc3RhcnRfcXVldWVpbmcocSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Cit9CiBFWFBPUlRfU1lNQk9MKGlkZV9kb19kcml2ZV9jbWQpOwogCiB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCwgdTggZG1hKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCmluZGV4IGZjZGUxNmIuLjI4MjMyYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKQEAgLTE5LDcgKzE5LDYgQEAKIAkJICAgICAgY29uc3Qgc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgKnMpCiB7CiAJY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKmRzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FT1BOT1RTVVBQOwogCiAJZm9yICg7IChkcyA9IHMtPnNldHRpbmcpOyBzKyspIHsKQEAgLTMzLDkgKzMyLDcgQEAKIAogcmVhZF92YWw6CiAJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAllcnIgPSBkcy0+Z2V0KGRyaXZlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwogCW11dGV4X3VubG9jaygmaWRlX3NldHRpbmdfbXR4KTsKIAlyZXR1cm4gZXJyID49IDAgPyBwdXRfdXNlcihlcnIsIChsb25nIF9fdXNlciAqKWFyZykgOiBlcnI7CiAKQEAgLTk4LDcgKzk1LDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICgoKGFyZyA+PiBJREVfTklDRV9EU0NfT1ZFUkxBUCkgJiAxKSAmJgotCSAgICAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrIHx8IGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5IHx8CisJICAgIChkcml2ZS0+bWVkaWEgIT0gaWRlX3RhcGUgfHwKIAkgICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NDU0kpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggYzQxYzNiOS4uYWQ4YmQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC04MzUsMTAgKzgzNSwxMiBAQAogdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKIAkJICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQogeworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIAlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwpAQCAtODYwLDEwICs4NjIsMTEgQEAKIHZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKIAkJCSB1bnNpZ25lZCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKIHsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJaWRlX2h3Z3JvdXBfdCAqaHdncm91cCA9IGh3aWYtPmh3Z3JvdXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOwogCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIGNtZCk7CiAJLyoKQEAgLTg3MywxOSArODc2LDIwIEBACiAJICogRklYTUU6IHdlIGNvdWxkIHNraXAgdGhpcyBkZWxheSB3aXRoIGNhcmUgb24gbm9uIHNoYXJlZCBkZXZpY2VzCiAJICovCiAJbmRlbGF5KDQwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9leGVjdXRlX2NvbW1hbmQpOwogCiB2b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIAlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1BBQ0tFVCk7CiAJbmRlbGF5KDQwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY3V0ZV9wa3RfY21kKTsKIApAQCAtMTA3NiwyMiArMTA4MCwxNiBAQAogICovCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZG9fbm90X3RyeV9hdGFwaSkKIHsKLQl1bnNpZ25lZCBpbnQgdW5pdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OwotCWlkZV9od2lmX3QgKmh3aWY7Ci0JaWRlX2h3Z3JvdXBfdCAqaHdncm91cDsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0czsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHVuaXQ7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlod2lmID0gSFdJRihkcml2ZSk7Ci0JaHdncm91cCA9IEhXR1JPVVAoZHJpdmUpOwotCi0JaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0KLQl0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLwogCUJVR19PTihod2dyb3VwLT5oYW5kbGVyICE9IE5VTEwpOwpAQCAtMTEwNiw3ICsxMTA0LDcgQEAKIAkJaHdncm91cC0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwogCQlod2dyb3VwLT5wb2xsaW5nID0gMTsKIAkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9CiAKQEAgLTExMjksOSArMTEyNyw5IEBACiAJCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQogCQkJYnJlYWs7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUodGltZW91dCAtIG5vdyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCX0gd2hpbGUgKHRpbWVvdXQpOwogCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOwogCkBAIC0xMTQzLDcgKzExNDEsNyBAQAogCQlwcmVfcmVzZXQoJmh3aWYtPmRyaXZlc1t1bml0XSk7CiAKIAlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CkBAIC0xMTc5LDcgKzExNzcsNyBAQAogCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRwcm9jKQogCQlwb3J0X29wcy0+cmVzZXRwcm9jKGRyaXZlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdncm91cC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxlZ2FjeS5jIGIvZHJpdmVycy9pZGUvaWRlLWxlZ2FjeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNWRjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtbGVnYWN5LmMKQEAgLTAsMCArMSw1OCBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCitzdGF0aWMgdm9pZCBpZGVfbGVnYWN5X2luaXRfb25lKGh3X3JlZ3NfdCAqKmh3cywgaHdfcmVnc190ICpodywKKwkJCQl1OCBwb3J0X25vLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKKwkJCQl1bnNpZ25lZCBsb25nIGNvbmZpZykKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGN0bDsKKwlpbnQgaXJxOworCisJaWYgKHBvcnRfbm8gPT0gMCkgeworCQliYXNlID0gMHgxZjA7CisJCWN0bCAgPSAweDNmNjsKKwkJaXJxICA9IDE0OworCX0gZWxzZSB7CisJCWJhc2UgPSAweDE3MDsKKwkJY3RsICA9IDB4Mzc2OworCQlpcnEgID0gMTU7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCA4LCBkLT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJL08gcmVzb3VyY2UgMHglbFgtMHglbFggbm90IGZyZWUuXG4iLAorCQkJCWQtPm5hbWUsIGJhc2UsIGJhc2UgKyA3KTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oY3RsLCAxLCBkLT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJL08gcmVzb3VyY2UgMHglbFggbm90IGZyZWUuXG4iLAorCQkJCWQtPm5hbWUsIGN0bCk7CisJCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDgpOworCQlyZXR1cm47CisJfQorCisJaWRlX3N0ZF9pbml0X3BvcnRzKGh3LCBiYXNlLCBjdGwpOworCWh3LT5pcnEgPSBpcnE7CisJaHctPmNoaXBzZXQgPSBkLT5jaGlwc2V0OworCWh3LT5jb25maWcgPSBjb25maWc7CisKKwlod3NbcG9ydF9ub10gPSBodzsKK30KKworaW50IGlkZV9sZWdhY3lfZGV2aWNlX2FkZChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgdW5zaWduZWQgbG9uZyBjb25maWcpCit7CisJaHdfcmVnc190IGh3WzJdLCAqaHdzW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCisJaWYgKChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1FEXzJORF9QT1JUKSA9PSAwKQorCQlpZGVfbGVnYWN5X2luaXRfb25lKGh3cywgJmh3WzBdLCAwLCBkLCBjb25maWcpOworCWlkZV9sZWdhY3lfaW5pdF9vbmUoaHdzLCAmaHdbMV0sIDEsIGQsIGNvbmZpZyk7CisKKwlpZiAoaHdzWzBdID09IE5VTEwgJiYgaHdzWzFdID09IE5VTEwgJiYKKwkgICAgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0lOR0xFKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gaWRlX2hvc3RfYWRkKGQsIGh3cywgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfbGVnYWN5X2RldmljZV9hZGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IDlmYzRjZmIuLjlmNmUzM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTQzLDcgKzQzLDYgQEAKIAogCXJldHVybiBzOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOwogCiAvKioKQEAgLTg3LDcgKzg2LDcgQEAKICAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KICAqLwogCi11OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQordTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQogewogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJaW50IHBpb19tb2RlID0gLTEsIG92ZXJyaWRkZW4gPSAwOwpAQCAtMTMxLDcgKzEzMCw2IEBACiAKIAlyZXR1cm4gcGlvX21vZGU7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9nZXRfYmVzdF9waW9fbW9kZSk7CiAKIC8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwpAQCAtMTYyLDcgKzE2MCw2IEBACiAKIAkodm9pZClpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOwogCiAvKioKQEAgLTE3Myw3ICsxNzAsNyBAQAogICoJRW5hYmxlIG9yIGRpc2FibGUgYm91bmNlIGJ1ZmZlcmluZyBmb3IgdGhlIGRldmljZS4gRHJpdmVzIG1vdmUKICAqCWJldHdlZW4gUElPIGFuZCBETUEgYW5kIHRoYXQgY2hhbmdlcyB0aGUgcnVsZXMgd2UgbmVlZC4KICAqLwotIAorCiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQogewogCXU2NCBhZGRyID0gQkxLX0JPVU5DRV9ISUdIOwkvKiBkbWE2NF9hZGRyX3QgKi8KQEAgLTI0MywxNCArMjQwLDEzIEBACiAJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOwogCiAvKioKICAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKICAqCUBkcml2ZTogZHJpdmUgdG8gc2V0CiAgKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKLSAqCQorICoKICAqCUdlbmVyYWwgaGVscGVyIGZvciBzZXR0aW5nIHRoZSBzcGVlZCBvZiBhbiBJREUgZGV2aWNlLiBUaGlzCiAgKglmdW5jdGlvbiBrbm93cyBhYm91dCB1c2VyIGVuZm9yY2VkIGxpbWl0cyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCiAgKgl3aGljaCAtPnNldF9waW9fbW9kZS8tPnNldF9kbWFfbW9kZSBkb2VzIG5vdC4KQEAgLTI3NywyMSArMjczLDE2IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9kdW1wX29wY29kZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5od2dyb3VwLT5ycTsKIAlpZGVfdGFza190ICp0YXNrID0gTlVMTDsKIAotCXNwaW5fbG9jaygmaWRlX2xvY2spOwotCXJxID0gTlVMTDsKLQlpZiAoSFdHUk9VUChkcml2ZSkpCi0JCXJxID0gSFdHUk9VUChkcml2ZSktPnJxOwotCXNwaW5fdW5sb2NrKCZpZGVfbG9jayk7CiAJaWYgKCFycSkKIAkJcmV0dXJuOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpCiAJCXRhc2sgPSBycS0+c3BlY2lhbDsKIAotCXByaW50aygiaWRlOiBmYWlsZWQgb3Bjb2RlIHdhczogIik7CisJcHJpbnRrKEtFUk5fRVJSICJpZGU6IGZhaWxlZCBvcGNvZGUgd2FzOiAiKTsKIAlpZiAodGFzayA9PSBOVUxMKQogCQlwcmludGsoS0VSTl9DT05UICJ1bmtub3duXG4iKTsKIAllbHNlCkBAIC0zMjksNDQgKzMyMCw1NSBAQAogCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKIAogCWlmIChsYmE0OCB8fCAodGYtPmRldmljZSAmIEFUQV9MQkEpKQotCQlwcmludGsoIiwgTEJBc2VjdD0lbGx1IiwKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLCBMQkFzZWN0PSVsbHUiLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpZGVfZ2V0X2xiYV9hZGRyKHRmLCBsYmE0OCkpOwogCWVsc2UKLQkJcHJpbnRrKCIsIENIUz0lZC8lZC8lZCIsICh0Zi0+bGJhaCA8PCA4KSArIHRmLT5sYmFtLAotCQkJCQkgdGYtPmRldmljZSAmIDB4ZiwgdGYtPmxiYWwpOworCQlwcmludGsoS0VSTl9DT05UICIsIENIUz0lZC8lZC8lZCIsICh0Zi0+bGJhaCA8PCA4KSArIHRmLT5sYmFtLAorCQkJdGYtPmRldmljZSAmIDB4ZiwgdGYtPmxiYWwpOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9hdGFfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBlcnIpCiB7Ci0JcHJpbnRrKCJ7ICIpOwotCWlmIChlcnIgJiBBVEFfQUJPUlRFRCkJcHJpbnRrKCJEcml2ZVN0YXR1c0Vycm9yICIpOworCXByaW50ayhLRVJOX0VSUiAieyAiKTsKKwlpZiAoZXJyICYgQVRBX0FCT1JURUQpCisJCXByaW50ayhLRVJOX0NPTlQgIkRyaXZlU3RhdHVzRXJyb3IgIik7CiAJaWYgKGVyciAmIEFUQV9JQ1JDKQotCQlwcmludGsoKGVyciAmIEFUQV9BQk9SVEVEKSA/ICJCYWRDUkMgIiA6ICJCYWRTZWN0b3IgIik7Ci0JaWYgKGVyciAmIEFUQV9VTkMpCXByaW50aygiVW5jb3JyZWN0YWJsZUVycm9yICIpOwotCWlmIChlcnIgJiBBVEFfSURORikJcHJpbnRrKCJTZWN0b3JJZE5vdEZvdW5kICIpOwotCWlmIChlcnIgJiBBVEFfVFJLME5GKQlwcmludGsoIlRyYWNrWmVyb05vdEZvdW5kICIpOwotCWlmIChlcnIgJiBBVEFfQU1ORikJcHJpbnRrKCJBZGRyTWFya05vdEZvdW5kICIpOwotCXByaW50aygifSIpOworCQlwcmludGsoS0VSTl9DT05UICIlcyIsCisJCQkoZXJyICYgQVRBX0FCT1JURUQpID8gIkJhZENSQyAiIDogIkJhZFNlY3RvciAiKTsKKwlpZiAoZXJyICYgQVRBX1VOQykKKwkJcHJpbnRrKEtFUk5fQ09OVCAiVW5jb3JyZWN0YWJsZUVycm9yICIpOworCWlmIChlcnIgJiBBVEFfSURORikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiU2VjdG9ySWROb3RGb3VuZCAiKTsKKwlpZiAoZXJyICYgQVRBX1RSSzBORikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiVHJhY2taZXJvTm90Rm91bmQgIik7CisJaWYgKGVyciAmIEFUQV9BTU5GKQorCQlwcmludGsoS0VSTl9DT05UICJBZGRyTWFya05vdEZvdW5kICIpOworCXByaW50ayhLRVJOX0NPTlQgIn0iKTsKIAlpZiAoKGVyciAmIChBVEFfQkJLIHwgQVRBX0FCT1JURUQpKSA9PSBBVEFfQkJLIHx8CiAJICAgIChlcnIgJiAoQVRBX1VOQyB8IEFUQV9JRE5GIHwgQVRBX0FNTkYpKSkgewogCQlpZGVfZHVtcF9zZWN0b3IoZHJpdmUpOwogCQlpZiAoSFdHUk9VUChkcml2ZSkgJiYgSFdHUk9VUChkcml2ZSktPnJxKQotCQkJcHJpbnRrKCIsIHNlY3Rvcj0lbGx1IiwKKwkJCXByaW50ayhLRVJOX0NPTlQgIiwgc2VjdG9yPSVsbHUiLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpSFdHUk9VUChkcml2ZSktPnJxLT5zZWN0b3IpOwogCX0KLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgaWRlX2R1bXBfYXRhcGlfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBlcnIpCiB7Ci0JcHJpbnRrKCJ7ICIpOwotCWlmIChlcnIgJiBBVEFQSV9JTEkpCXByaW50aygiSWxsZWdhbExlbmd0aEluZGljYXRpb24gIik7Ci0JaWYgKGVyciAmIEFUQVBJX0VPTSkJcHJpbnRrKCJFbmRPZk1lZGlhICIpOwotCWlmIChlcnIgJiBBVEFfQUJPUlRFRCkJcHJpbnRrKCJBYm9ydGVkQ29tbWFuZCAiKTsKLQlpZiAoZXJyICYgQVRBX01DUikJcHJpbnRrKCJNZWRpYUNoYW5nZVJlcXVlc3RlZCAiKTsKLQlpZiAoZXJyICYgQVRBUElfTEZTKQlwcmludGsoIkxhc3RGYWlsZWRTZW5zZT0weCUwMnggIiwKLQkJCQkgICAgICAgKGVyciAmIEFUQVBJX0xGUykgPj4gNCk7Ci0JcHJpbnRrKCJ9XG4iKTsKKwlwcmludGsoS0VSTl9FUlIgInsgIik7CisJaWYgKGVyciAmIEFUQVBJX0lMSSkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiSWxsZWdhbExlbmd0aEluZGljYXRpb24gIik7CisJaWYgKGVyciAmIEFUQVBJX0VPTSkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRW5kT2ZNZWRpYSAiKTsKKwlpZiAoZXJyICYgQVRBX0FCT1JURUQpCisJCXByaW50ayhLRVJOX0NPTlQgIkFib3J0ZWRDb21tYW5kICIpOworCWlmIChlcnIgJiBBVEFfTUNSKQorCQlwcmludGsoS0VSTl9DT05UICJNZWRpYUNoYW5nZVJlcXVlc3RlZCAiKTsKKwlpZiAoZXJyICYgQVRBUElfTEZTKQorCQlwcmludGsoS0VSTl9DT05UICJMYXN0RmFpbGVkU2Vuc2U9MHglMDJ4ICIsCisJCQkoZXJyICYgQVRBUElfTEZTKSA+PiA0KTsKKwlwcmludGsoS0VSTl9DT05UICJ9XG4iKTsKIH0KIAogLyoqCkBAIC0zODIsMzQgKzM4NCwzNyBAQAogCiB1OCBpZGVfZHVtcF9zdGF0dXMoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0YXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBlcnIgPSAwOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByaW50aygiJXM6ICVzOiBzdGF0dXM9MHglMDJ4IHsgIiwgZHJpdmUtPm5hbWUsIG1zZywgc3RhdCk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHN0YXR1cz0weCUwMnggeyAiLCBkcml2ZS0+bmFtZSwgbXNnLCBzdGF0KTsKIAlpZiAoc3RhdCAmIEFUQV9CVVNZKQotCQlwcmludGsoIkJ1c3kgIik7CisJCXByaW50ayhLRVJOX0NPTlQgIkJ1c3kgIik7CiAJZWxzZSB7Ci0JCWlmIChzdGF0ICYgQVRBX0RSRFkpCXByaW50aygiRHJpdmVSZWFkeSAiKTsKLQkJaWYgKHN0YXQgJiBBVEFfREYpCXByaW50aygiRGV2aWNlRmF1bHQgIik7Ci0JCWlmIChzdGF0ICYgQVRBX0RTQykJcHJpbnRrKCJTZWVrQ29tcGxldGUgIik7Ci0JCWlmIChzdGF0ICYgQVRBX0RSUSkJcHJpbnRrKCJEYXRhUmVxdWVzdCAiKTsKLQkJaWYgKHN0YXQgJiBBVEFfQ09SUikJcHJpbnRrKCJDb3JyZWN0ZWRFcnJvciAiKTsKLQkJaWYgKHN0YXQgJiBBVEFfSURYKQlwcmludGsoIkluZGV4ICIpOwotCQlpZiAoc3RhdCAmIEFUQV9FUlIpCXByaW50aygiRXJyb3IgIik7CisJCWlmIChzdGF0ICYgQVRBX0RSRFkpCisJCQlwcmludGsoS0VSTl9DT05UICJEcml2ZVJlYWR5ICIpOworCQlpZiAoc3RhdCAmIEFUQV9ERikKKwkJCXByaW50ayhLRVJOX0NPTlQgIkRldmljZUZhdWx0ICIpOworCQlpZiAoc3RhdCAmIEFUQV9EU0MpCisJCQlwcmludGsoS0VSTl9DT05UICJTZWVrQ29tcGxldGUgIik7CisJCWlmIChzdGF0ICYgQVRBX0RSUSkKKwkJCXByaW50ayhLRVJOX0NPTlQgIkRhdGFSZXF1ZXN0ICIpOworCQlpZiAoc3RhdCAmIEFUQV9DT1JSKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiQ29ycmVjdGVkRXJyb3IgIik7CisJCWlmIChzdGF0ICYgQVRBX0lEWCkKKwkJCXByaW50ayhLRVJOX0NPTlQgIkluZGV4ICIpOworCQlpZiAoc3RhdCAmIEFUQV9FUlIpCisJCQlwcmludGsoS0VSTl9DT05UICJFcnJvciAiKTsKIAl9Ci0JcHJpbnRrKCJ9XG4iKTsKKwlwcmludGsoS0VSTl9DT05UICJ9XG4iKTsKIAlpZiAoKHN0YXQgJiAoQVRBX0JVU1kgfCBBVEFfRVJSKSkgPT0gQVRBX0VSUikgewogCQllcnIgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7Ci0JCXByaW50aygiJXM6ICVzOiBlcnJvcj0weCUwMnggIiwgZHJpdmUtPm5hbWUsIG1zZywgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGVycm9yPTB4JTAyeCAiLCBkcml2ZS0+bmFtZSwgbXNnLCBlcnIpOwogCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQogCQkJaWRlX2R1bXBfYXRhX2Vycm9yKGRyaXZlLCBlcnIpOwogCQllbHNlCiAJCQlpZGVfZHVtcF9hdGFwaV9lcnJvcihkcml2ZSwgZXJyKTsKIAl9CiAJaWRlX2R1bXBfb3Bjb2RlKGRyaXZlKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIGVycjsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfZHVtcF9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKaW5kZXggMDNiMDBlNS4uNjNkMDFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCkBAIC03LDE3ICs3LDE2IEBACiAKIHN0YXRpYyB2b2lkIGlzc3VlX3BhcmtfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogeworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaW50IHJjOwogCiAJdGltZW91dCArPSBqaWZmaWVzOwotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQpIHsKLQkJaWRlX2h3Z3JvdXBfdCAqaHdncm91cCA9IGRyaXZlLT5od2lmLT5od2dyb3VwOwotCQlpbnQgcmVzZXRfdGltZXI7CisJCWludCByZXNldF90aW1lciA9IHRpbWVfYmVmb3JlKHRpbWVvdXQsIGRyaXZlLT5zbGVlcCk7CiAKLQkJcmVzZXRfdGltZXIgPSB0aW1lX2JlZm9yZSh0aW1lb3V0LCBkcml2ZS0+c2xlZXApOwogCQlkcml2ZS0+c2xlZXAgPSB0aW1lb3V0OwogCQl3YWtlX3VwX2FsbCgmaWRlX3Bhcmtfd3EpOwogCQlpZiAocmVzZXRfdGltZXIgJiYgaHdncm91cC0+c2xlZXBpbmcgJiYKQEAgLTI2LDEwICsyNSwxMCBAQAogCQkJaHdncm91cC0+YnVzeSA9IDA7CiAJCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmaHdncm91cC0+bG9jayk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAogCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRbMF0gPSBSRVFfUEFSS19IRUFEUzsKQEAgLTYyLDIwICs2MSwyMSBAQAogCQkgICAgICBjaGFyICpidWYpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdG9faWRlX2RldmljZShkZXYpOworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKIAl1bnNpZ25lZCBsb25nIG5vdzsKIAl1bnNpZ25lZCBpbnQgbXNlY3M7CiAKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTkxPQUQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAlub3cgPSBqaWZmaWVzOwogCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCAmJgogCSAgICB0aW1lX2FmdGVyKGRyaXZlLT5zbGVlcCwgbm93KSkKIAkJbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKGRyaXZlLT5zbGVlcCAtIG5vdyk7CiAJZWxzZQogCQltc2VjcyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsIG1zZWNzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wbS5jIGIvZHJpdmVycy9pZGUvaWRlLXBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4MmM2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbS5jCkBAIC0wLDAgKzEsMjM1IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworaW50IGdlbmVyaWNfaWRlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBkZXYtPmRyaXZlcl9kYXRhLCAqcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKKwlpZGVfdGFza190IGFyZ3M7CisJaW50IHJldDsKKworCS8qIGNhbGwgQUNQSSBfR1RNIG9ubHkgb25jZSAqLworCWlmICgoZHJpdmUtPmRuICYgMSkgPT0gMCB8fCBwYWlyID09IE5VTEwpCisJCWlkZV9hY3BpX2dldF90aW1pbmcoaHdpZik7CisKKwltZW1zZXQoJnJxcG0sIDAsIHNpemVvZihycXBtKSk7CisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCXJxID0gYmxrX2dldF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgUkVBRCwgX19HRlBfV0FJVCk7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfUE1fU1VTUEVORDsKKwlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5kYXRhID0gJnJxcG07CisJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1NVU1BFTkQ7CisJaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKKwkJbWVzZy5ldmVudCA9IFBNX0VWRU5UX0ZSRUVaRTsKKwlycXBtLnBtX3N0YXRlID0gbWVzZy5ldmVudDsKKworCXJldCA9IGJsa19leGVjdXRlX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCwgcnEsIDApOworCWJsa19wdXRfcmVxdWVzdChycSk7CisKKwkvKiBjYWxsIEFDUEkgX1BTMyBvbmx5IGFmdGVyIGJvdGggZGV2aWNlcyBhcmUgc3VzcGVuZGVkICovCisJaWYgKHJldCA9PSAwICYmICgoZHJpdmUtPmRuICYgMSkgfHwgcGFpciA9PSBOVUxMKSkKKwkJaWRlX2FjcGlfc2V0X3N0YXRlKGh3aWYsIDApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGdlbmVyaWNfaWRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gZGV2LT5kcml2ZXJfZGF0YSwgKnBhaXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlIHJxcG07CisJaWRlX3Rhc2tfdCBhcmdzOworCWludCBlcnI7CisKKwkvKiBjYWxsIEFDUEkgX1BTMCAvIF9TVE0gb25seSBvbmNlICovCisJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwIHx8IHBhaXIgPT0gTlVMTCkgeworCQlpZGVfYWNwaV9zZXRfc3RhdGUoaHdpZiwgMSk7CisJCWlkZV9hY3BpX3B1c2hfdGltaW5nKGh3aWYpOworCX0KKworCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKKworCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9QTV9SRVNVTUU7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKKwlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5kYXRhID0gJnJxcG07CisJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1JFU1VNRTsKKwlycXBtLnBtX3N0YXRlID0gUE1fRVZFTlRfT047CisKKwllcnIgPSBibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIE5VTEwsIHJxLCAxKTsKKwlibGtfcHV0X3JlcXVlc3QocnEpOworCisJaWYgKGVyciA9PSAwICYmIGRldi0+ZHJpdmVyKSB7CisJCWlkZV9kcml2ZXJfdCAqZHJ2ID0gdG9faWRlX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwkJaWYgKGRydi0+cmVzdW1lKQorCQkJZHJ2LT5yZXN1bWUoZHJpdmUpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7CisKKyNpZmRlZiBERUJVR19QTQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21wbGV0ZV9wb3dlcl9zdGVwKHN0ZXA6ICVkKVxuIiwKKwkJZHJpdmUtPm5hbWUsIHBtLT5wbV9zdGVwKTsKKyNlbmRpZgorCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCisJCXJldHVybjsKKworCXN3aXRjaCAocG0tPnBtX3N0ZXApIHsKKwljYXNlIElERV9QTV9GTFVTSF9DQUNIRToJLyogU3VzcGVuZCBzdGVwIDEgKGZsdXNoIGNhY2hlKSAqLworCQlpZiAocG0tPnBtX3N0YXRlID09IFBNX0VWRU5UX0ZSRUVaRSkKKwkJCXBtLT5wbV9zdGVwID0gSURFX1BNX0NPTVBMRVRFRDsKKwkJZWxzZQorCQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fU1RBTkRCWTsKKwkJYnJlYWs7CisJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLworCQlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CisJCWJyZWFrOworCWNhc2UgSURFX1BNX1JFU1RPUkVfUElPOgkvKiBSZXN1bWUgc3RlcCAxIChyZXN0b3JlIFBJTykgKi8KKwkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fSURMRTsKKwkJYnJlYWs7CisJY2FzZSBJREVfUE1fSURMRToJCS8qIFJlc3VtZSBzdGVwIDIgKGlkbGUpKi8KKwkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fUkVTVE9SRV9ETUE7CisJCWJyZWFrOworCX0KK30KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9zdGFydF9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOworCWlkZV90YXNrX3QgKmFyZ3MgPSBycS0+c3BlY2lhbDsKKworCW1lbXNldChhcmdzLCAwLCBzaXplb2YoKmFyZ3MpKTsKKworCXN3aXRjaCAocG0tPnBtX3N0ZXApIHsKKwljYXNlIElERV9QTV9GTFVTSF9DQUNIRToJLyogU3VzcGVuZCBzdGVwIDEgKGZsdXNoIGNhY2hlKSAqLworCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQorCQkJYnJlYWs7CisJCS8qIE5vdCBzdXBwb3J0ZWQ/IFN3aXRjaCB0byBuZXh0IHN0ZXAgbm93LiAqLworCQlpZiAoYXRhX2lkX2ZsdXNoX2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwIHx8CisJCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XQ0FDSEUpID09IDApIHsKKwkJCWlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGRyaXZlLCBycSk7CisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0KKwkJaWYgKGF0YV9pZF9mbHVzaF9leHRfZW5hYmxlZChkcml2ZS0+aWQpKQorCQkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQllbHNlCisJCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKKwkJZ290byBvdXRfZG9fdGY7CisJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLworCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKKwkJZ290byBvdXRfZG9fdGY7CisJY2FzZSBJREVfUE1fUkVTVE9SRV9QSU86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLworCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOworCQkvKgorCQkgKiBza2lwIElERV9QTV9JRExFIGZvciBBVEFQSSBkZXZpY2VzCisJCSAqLworCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQorCQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fUkVTVE9SRV9ETUE7CisJCWVsc2UKKwkJCWlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGRyaXZlLCBycSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwljYXNlIElERV9QTV9JRExFOgkJLyogUmVzdW1lIHN0ZXAgMiAoaWRsZSkgKi8KKwkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKKwkJZ290byBvdXRfZG9fdGY7CisJY2FzZSBJREVfUE1fUkVTVE9SRV9ETUE6CS8qIFJlc3VtZSBzdGVwIDMgKHJlc3RvcmUgRE1BKSAqLworCQkvKgorCQkgKiBSaWdodCBub3csIGFsbCB3ZSBkbyBpcyBjYWxsIGlkZV9zZXRfZG1hKGRyaXZlKSwKKwkJICogd2UgY291bGQgYmUgc21hcnRlciBhbmQgY2hlY2sgZm9yIGN1cnJlbnQgeGZlcl9zcGVlZAorCQkgKiBpbiBzdHJ1Y3QgZHJpdmUgZXRjLi4uCisJCSAqLworCQlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBUT0RPOiByZXNwZWN0IElERV9ERkxBR19VU0lOR19ETUEKKwkJICovCisJCWlkZV9zZXRfZG1hKGRyaXZlKTsKKwkJYnJlYWs7CisJfQorCisJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOworCXJldHVybiBpZGVfc3RvcHBlZDsKKworb3V0X2RvX3RmOgorCWFyZ3MtPnRmX2ZsYWdzCSA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJYXJncy0+ZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBhcmdzKTsKK30KKworLyoqCisgKglpZGVfY29tcGxldGVfcG1fcmVxdWVzdCAtIGVuZCB0aGUgY3VycmVudCBQb3dlciBNYW5hZ2VtZW50IHJlcXVlc3QKKyAqCUBkcml2ZTogdGFyZ2V0IGRyaXZlCisgKglAcnE6IHJlcXVlc3QKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgY3VycmVudCBQTSByZXF1ZXN0IGFuZCBzdG9wcyB0aGUgcXVldWUKKyAqCWlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBpZGVfY29tcGxldGVfcG1fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgREVCVUdfUE0KKwlwcmludGsoIiVzOiBjb21wbGV0aW5nIFBNIHJlcXVlc3QsICVzXG4iLCBkcml2ZS0+bmFtZSwKKwkgICAgICAgYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgPyAic3VzcGVuZCIgOiAicmVzdW1lIik7CisjZW5kaWYKKwlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJaWYgKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpKSB7CisJCWJsa19zdG9wX3F1ZXVlKHEpOworCX0gZWxzZSB7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19CTE9DS0VEOworCQlibGtfc3RhcnRfcXVldWUocSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCisJZHJpdmUtPmh3aWYtPmh3Z3JvdXAtPnJxID0gTlVMTDsKKworCWlmIChibGtfZW5kX3JlcXVlc3QocnEsIDAsIDApKQorCQlCVUcoKTsKK30KKwordm9pZCBpZGVfY2hlY2tfcG1fc3RhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7CisKKwlpZiAoYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgJiYKKwkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX1NUQVJUX1NVU1BFTkQpCisJCS8qIE1hcmsgZHJpdmUgYmxvY2tlZCB3aGVuIHN0YXJ0aW5nIHRoZSBzdXNwZW5kIHNlcXVlbmNlLiAqLworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19CTE9DS0VEOworCWVsc2UgaWYgKGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkgJiYKKwkJIHBtLT5wbV9zdGVwID09IElERV9QTV9TVEFSVF9SRVNVTUUpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IHRoaW5nIHdlIGRvIG9uIHdha2V1cCBpcyB0byB3YWl0IGZvciBCU1kgYml0IHRvCisJCSAqIGdvIGF3YXkgKHdpdGggYSBsb29vbmcgdGltZW91dCkgYXMgYSBkcml2ZSBvbiB0aGlzIGh3aWYgbWF5CisJCSAqIGp1c3QgYmUgUE9TVGluZyBpdHNlbGYuCisJCSAqIFdlIGRvIHRoYXQgYmVmb3JlIGV2ZW4gc2VsZWN0aW5nIGFzIHRoZSAib3RoZXIiIGRldmljZSBvbgorCQkgKiB0aGUgYnVzIG1heSBiZSBicm9rZW4gZW5vdWdoIHRvIHdhbGsgb24gb3VyIHRvZXMgYXQgdGhpcworCQkgKiBwb2ludC4KKwkJICovCisJCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwkJaW50IHJjOworI2lmZGVmIERFQlVHX1BNCisJCXByaW50aygiJXM6IFdha2V1cCByZXF1ZXN0IGluaXRlZCwgd2FpdGluZyBmb3IgIUJTWS4uLlxuIiwgZHJpdmUtPm5hbWUpOworI2VuZGlmCisJCXJjID0gaWRlX3dhaXRfbm90X2J1c3koaHdpZiwgMzUwMDApOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYnVzIG5vdCByZWFkeSBvbiB3YWtldXBcbiIsIGRyaXZlLT5uYW1lKTsKKwkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwkJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDEwMDAwMCk7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZSBub3QgcmVhZHkgb24gd2FrZXVwXG4iLCBkcml2ZS0+bmFtZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCBjNTViZGJkLi5hNjRlYzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTEwLDIwICsxMTAsMjIgQEAKICAqCXJlYWQgYW5kIHBhcnNlIHRoZSByZXN1bHRzLiBUaGlzIGZ1bmN0aW9uIGlzIHJ1biB3aXRoCiAgKglpbnRlcnJ1cHRzIGRpc2FibGVkLiAKICAqLwotIAotc3RhdGljIGlubGluZSB2b2lkIGRvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKKworc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJY2hhciAqbSA9IChjaGFyICopJmlkW0FUQV9JRF9QUk9EXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBic3dhcCA9IDEsIGlzX2NmYTsKIAorCS8qIGxvY2FsIENQVSBvbmx5OyBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qIHJlYWQgNTEyIGJ5dGVzIG9mIGlkIGluZm8gKi8KIAlod2lmLT50cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGlkLCBTRUNUT1JfU0laRSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfSURfUkVBRDsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKICNpZmRlZiBERUJVRwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBkdW1waW5nIGlkZW50aWZ5IGRhdGFcbiIsIGRyaXZlLT5uYW1lKTsKIAlpZGVfZHVtcF9pZGVudGlmeSgodTggKilpZCk7CkBAIC0zMDYsMTcgKzMwOCwxMiBAQAogCXMgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKE9LX1NUQVQocywgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkvKiBsb2NhbCBDUFUgb25seTsgc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCS8qIGRyaXZlIHJldHVybmVkIElEICovCiAJCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOwogCQkvKiBkcml2ZSByZXNwb25kZWQgd2l0aCBJRCAqLwogCQlyYyA9IDA7CiAJCS8qIGNsZWFyIGRyaXZlIElSUSAqLwogCQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfSBlbHNlIHsKIAkJLyogZHJpdmUgcmVmdXNlZCBJRCAqLwogCQlyYyA9IDI7CkBAIC01NTQsOCArNTUxLDggQEAKICAqCQkJMSAgZGV2aWNlIHdhcyBmb3VuZAogICoJCQkgICAobm90ZTogSURFX0RGTEFHX1BSRVNFTlQgbWlnaHQgc3RpbGwgYmUgbm90IHNldCkKICAqLwotIAotc3RhdGljIGlubGluZSB1OCBwcm9iZV9mb3JfZHJpdmUgKGlkZV9kcml2ZV90ICpkcml2ZSkKKworc3RhdGljIHU4IHByb2JlX2Zvcl9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJY2hhciAqbTsKIApAQCAtNjQyLDcgKzYzOSw3IEBACiAJaW50IHJldDsKIAogCS8qIHJlZ2lzdGVyIHdpdGggZ2xvYmFsIGRldmljZSB0cmVlICovCi0Jc3RybGNweShod2lmLT5nZW5kZXYuYnVzX2lkLGh3aWYtPm5hbWUsQlVTX0lEX1NJWkUpOworCWRldl9zZXRfbmFtZSgmaHdpZi0+Z2VuZGV2LCBod2lmLT5uYW1lKTsKIAlod2lmLT5nZW5kZXYuZHJpdmVyX2RhdGEgPSBod2lmOwogCWlmIChod2lmLT5nZW5kZXYucGFyZW50ID09IE5VTEwpIHsKIAkJaWYgKGh3aWYtPmRldikKQEAgLTg2NCwzMSArODYxLDYgQEAKIH0KIAogLyoKLSAqIHNhdmVfbWF0Y2goKSBpcyB1c2VkIHRvIHNpbXBsaWZ5IGxvZ2ljIGluIGluaXRfaXJxKCkgYmVsb3cuCi0gKgotICogQSBsb29waG9sZSBoZXJlIGlzIHRoYXQgd2UgbWF5IG5vdCBrbm93IGFib3V0IGEgcGFydGljdWxhcgotICogaHdpZidzIGlycSB1bnRpbCBhZnRlciB0aGF0IGh3aWYgaXMgYWN0dWFsbHkgcHJvYmVkL2luaXRpYWxpemVkLi4KLSAqIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGZvciB0aGUgY2FzZSB3aGVyZSBhbiBod2lmIGlzIG9uIGEKLSAqIGR1YWwgaW50ZXJmYWNlIHRoYXQgcmVxdWlyZXMgc2VyaWFsaXphdGlvbiAoZWcuIGNtZDY0MCkgYW5kIGFub3RoZXIKLSAqIGh3aWYgdXNpbmcgb25lIG9mIHRoZSBzYW1lIGlycXMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlaGFuZC4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgZGV0ZWN0cyBhbmQgcmVwb3J0cyBzdWNoIHNpdHVhdGlvbnMsIGJ1dCBkb2VzIG5vdCBmaXggdGhlbS4KLSAqLwotc3RhdGljIHZvaWQgc2F2ZV9tYXRjaChpZGVfaHdpZl90ICpod2lmLCBpZGVfaHdpZl90ICpuZXcsIGlkZV9od2lmX3QgKiptYXRjaCkKLXsKLQlpZGVfaHdpZl90ICptID0gKm1hdGNoOwotCi0JaWYgKG0gJiYgbS0+aHdncm91cCAmJiBtLT5od2dyb3VwICE9IG5ldy0+aHdncm91cCkgewotCQlpZiAoIW5ldy0+aHdncm91cCkKLQkJCXJldHVybjsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBvdGVudGlhbCBJUlEgcHJvYmxlbSB3aXRoICVzIGFuZCAlc1xuIiwKLQkJCWh3aWYtPm5hbWUsIG5ldy0+bmFtZSwgbS0+bmFtZSk7Ci0JfQotCWlmICghbSB8fCBtLT5pcnEgIT0gaHdpZi0+aXJxKSAvKiBkb24ndCB1bmRvIGEgcHJpb3IgcGVyZmVjdCBtYXRjaCAqLwotCQkqbWF0Y2ggPSBuZXc7Ci19Ci0KLS8qCiAgKiBpbml0IHJlcXVlc3QgcXVldWUKICAqLwogc3RhdGljIGludCBpZGVfaW5pdF9xdWV1ZShpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC05MDYsNyArODc4LDggQEAKIAkgKglkbyBub3QuCiAJICovCiAKLQlxID0gYmxrX2luaXRfcXVldWVfbm9kZShkb19pZGVfcmVxdWVzdCwgJmlkZV9sb2NrLCBod2lmX3RvX25vZGUoaHdpZikpOworCXEgPSBibGtfaW5pdF9xdWV1ZV9ub2RlKGRvX2lkZV9yZXF1ZXN0LCAmaHdpZi0+aHdncm91cC0+bG9jaywKKwkJCQlod2lmX3RvX25vZGUoaHdpZikpOwogCWlmICghcSkKIAkJcmV0dXJuIDE7CiAKQEAgLTk0Nyw3ICs5MjAsNyBAQAogewogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAlpZiAoIWh3Z3JvdXAtPmRyaXZlKSB7CiAJCS8qIGZpcnN0IGRyaXZlIGZvciBod2dyb3VwLiAqLwogCQlkcml2ZS0+bmV4dCA9IGRyaXZlOwpAQCAtOTU3LDcgKzkzMCw3IEBACiAJCWRyaXZlLT5uZXh0ID0gaHdncm91cC0+ZHJpdmUtPm5leHQ7CiAJCWh3Z3JvdXAtPmRyaXZlLT5uZXh0ID0gZHJpdmU7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmaHdncm91cC0+bG9jayk7CiB9CiAKIC8qCkBAIC0xMDAyLDcgKzk3NSw3IEBACiAKIAlpZGVfcG9ydHNbaHdpZi0+aW5kZXhdID0gTlVMTDsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAkvKgogCSAqIFJlbW92ZSB1cyBmcm9tIHRoZSBod2dyb3VwLCBhbmQgZnJlZQogCSAqIHRoZSBod2dyb3VwIGlmIHdlIHdlcmUgdGhlIG9ubHkgbWVtYmVyCkBAIC0xMDMwLDcgKzEwMDMsNyBAQAogCQl9CiAJCUJVR19PTihod2dyb3VwLT5od2lmID09IGh3aWYpOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmh3Z3JvdXAtPmxvY2spOwogfQogCiAvKgpAQCAtMTA1MSwyNyArMTAyNCwxMyBAQAogCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKIAlod2lmLT5od2dyb3VwID0gTlVMTDsKIAotCS8qCi0JICogR3JvdXAgdXAgd2l0aCBhbnkgb3RoZXIgaHdpZnMgdGhhdCBzaGFyZSBvdXIgaXJxKHMpLgotCSAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgaW5kZXgrKykgewogCQlpZGVfaHdpZl90ICpoID0gaWRlX3BvcnRzW2luZGV4XTsKIAogCQlpZiAoaCAmJiBoLT5od2dyb3VwKSB7ICAvKiBzY2FuIG9ubHkgaW5pdGlhbGl6ZWQgcG9ydHMgKi8KLQkJCWlmIChod2lmLT5pcnEgPT0gaC0+aXJxKSB7Ci0JCQkJaHdpZi0+c2hhcmluZ19pcnEgPSBoLT5zaGFyaW5nX2lycSA9IDE7Ci0JCQkJaWYgKGh3aWYtPmNoaXBzZXQgIT0gaWRlX3BjaSB8fAotCQkJCSAgICBoLT5jaGlwc2V0ICE9IGlkZV9wY2kpIHsKLQkJCQkJc2F2ZV9tYXRjaChod2lmLCBoLCAmbWF0Y2gpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChod2lmLT5zZXJpYWxpemVkKSB7Ci0JCQkJaWYgKGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxID09IGgtPmlycSkKLQkJCQkJc2F2ZV9tYXRjaChod2lmLCBoLCAmbWF0Y2gpOwotCQkJfQotCQkJaWYgKGgtPnNlcmlhbGl6ZWQpIHsKLQkJCQlpZiAoaC0+bWF0ZSAmJiBod2lmLT5pcnEgPT0gaC0+bWF0ZS0+aXJxKQotCQkJCQlzYXZlX21hdGNoKGh3aWYsIGgsICZtYXRjaCk7CisJCQlpZiAoaHdpZi0+aG9zdC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkUpIHsKKwkJCQlpZiAoaHdpZi0+aG9zdCA9PSBoLT5ob3N0KQorCQkJCQltYXRjaCA9IGg7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMDkyLDE3ICsxMDUxLDE5IEBACiAJCSAqIGxpbmtlZCBsaXN0LCB0aGUgZmlyc3QgZW50cnkgaXMgdGhlIGh3aWYgdGhhdCBvd25zCiAJCSAqIGh3Z3JvdXAtPmhhbmRsZXIgLSBkbyBub3QgY2hhbmdlIHRoYXQuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJmh3Z3JvdXAtPmxvY2spOwogCQlod2lmLT5uZXh0ID0gaHdncm91cC0+aHdpZi0+bmV4dDsKIAkJaHdncm91cC0+aHdpZi0+bmV4dCA9IGh3aWY7CiAJCUJVR19PTihod2lmLT5uZXh0ID09IGh3aWYpOwotCQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAl9IGVsc2UgewogCQlod2dyb3VwID0ga21hbGxvY19ub2RlKHNpemVvZigqaHdncm91cCksIEdGUF9LRVJORUx8X19HRlBfWkVSTywKIAkJCQkgICAgICAgaHdpZl90b19ub2RlKGh3aWYpKTsKIAkJaWYgKGh3Z3JvdXAgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X3VwOwogCisJCXNwaW5fbG9ja19pbml0KCZod2dyb3VwLT5sb2NrKTsKKwogCQlod2lmLT5od2dyb3VwID0gaHdncm91cDsKIAkJaHdncm91cC0+aHdpZiA9IGh3aWYtPm5leHQgPSBod2lmOwogCkBAIC0xMTIyLDggKzEwODMsNyBAQAogCQlzYSA9IElSUUZfU0hBUkVEOwogI2VuZGlmIC8qIF9fbWM2ODAwMF9fICovCiAKLQkJaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3BjaSB8fCBod2lmLT5jaGlwc2V0ID09IGlkZV9jbWQ2NDYgfHwKLQkJICAgIGh3aWYtPmNoaXBzZXQgPT0gaWRlX2FsaTE0eHgpCisJCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV9wY2kpCiAJCQlzYSA9IElSUUZfU0hBUkVEOwogCiAJCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCkBAIC0xMTUwLDggKzExMTAsNyBAQAogCQlpb19wb3J0cy0+ZGF0YV9hZGRyLCBod2lmLT5pcnEpOwogI2VuZGlmIC8qIF9fbWM2ODAwMF9fICovCiAJaWYgKG1hdGNoKQotCQlwcmludGsoS0VSTl9DT05UICIgKCVzZWQgd2l0aCAlcykiLAotCQkJaHdpZi0+c2hhcmluZ19pcnEgPyAic2hhciIgOiAic2VyaWFsaXoiLCBtYXRjaC0+bmFtZSk7CisJCXByaW50ayhLRVJOX0NPTlQgIiAoc2VyaWFsaXplZCB3aXRoICVzKSIsIG1hdGNoLT5uYW1lKTsKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CkBAIC0xMjYzLDIwICsxMjIyLDIxIEBACiBzdGF0aWMgdm9pZCBkcml2ZV9yZWxlYXNlX2RldiAoc3RydWN0IGRldmljZSAqZGV2KQogewogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGNvbnRhaW5lcl9vZihkZXYsIGlkZV9kcml2ZV90LCBnZW5kZXYpOworCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKIAogCWlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGRyaXZlKTsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAlpZGVfcmVtb3ZlX2RyaXZlX2Zyb21faHdncm91cChkcml2ZSk7CiAJa2ZyZWUoZHJpdmUtPmlkKTsKIAlkcml2ZS0+aWQgPSBOVUxMOwogCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCS8qIE1lc3NlZCB1cCBsb2NraW5nIC4uLiAqLwotCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmaHdncm91cC0+bG9jayk7CiAJYmxrX2NsZWFudXBfcXVldWUoZHJpdmUtPnF1ZXVlKTsKLQlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmaHdncm91cC0+bG9jayk7CiAJZHJpdmUtPnF1ZXVlID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmh3Z3JvdXAtPmxvY2spOwogCiAJY29tcGxldGUoJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogfQpAQCAtMTM1Miw3ICsxMzEyLDcgQEAKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQljb250aW51ZTsKIAotCQlzbnByaW50ZihkZXYtPmJ1c19pZCwgQlVTX0lEX1NJWkUsICIldS4ldSIsIGh3aWYtPmluZGV4LCBpKTsKKwkJZGV2X3NldF9uYW1lKGRldiwgIiV1LiV1IiwgaHdpZi0+aW5kZXgsIGkpOwogCQlkZXYtPnBhcmVudCA9ICZod2lmLT5nZW5kZXY7CiAJCWRldi0+YnVzID0gJmlkZV9idXNfdHlwZTsKIAkJZGV2LT5kcml2ZXJfZGF0YSA9IGRyaXZlOwpAQCAtMTQzNiwxMyArMTM5NiwxMSBAQAogCX0KIAogCWlmICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkUpIHx8Ci0JICAgICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVJJQUxJWkVfRE1BKSAmJiBod2lmLT5kbWFfYmFzZSkpIHsKLQkJaWYgKGh3aWYtPm1hdGUpCi0JCQlod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gaHdpZi0+c2VyaWFsaXplZCA9IDE7Ci0JfQorCSAgICAoKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFX0RNQSkgJiYgaHdpZi0+ZG1hX2Jhc2UpKQorCQlod2lmLT5ob3N0LT5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19TRVJJQUxJWkU7CiAKLQlpZiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19SUVNJWkVfMjU2KQotCQlod2lmLT5ycXNpemUgPSAyNTY7CisJaWYgKGQtPm1heF9zZWN0b3JzKQorCQlod2lmLT5ycXNpemUgPSBkLT5tYXhfc2VjdG9yczsKIAogCS8qIGNhbGwgY2hpcHNldCBzcGVjaWZpYyByb3V0aW5lIGZvciBlYWNoIGVuYWJsZWQgcG9ydCAqLwogCWlmIChkLT5pbml0X2h3aWYpCkBAIC0xNzk0LDU5ICsxNzUyLDMgQEAKIAlpZGVfcHJvY19wb3J0X3JlZ2lzdGVyX2RldmljZXMoaHdpZik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcG9ydF9zY2FuKTsKLQotc3RhdGljIHZvaWQgaWRlX2xlZ2FjeV9pbml0X29uZShod19yZWdzX3QgKipod3MsIGh3X3JlZ3NfdCAqaHcsCi0JCQkJdTggcG9ydF9ubywgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkJdW5zaWduZWQgbG9uZyBjb25maWcpCi17Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBjdGw7Ci0JaW50IGlycTsKLQotCWlmIChwb3J0X25vID09IDApIHsKLQkJYmFzZSA9IDB4MWYwOwotCQljdGwgID0gMHgzZjY7Ci0JCWlycSAgPSAxNDsKLQl9IGVsc2UgewotCQliYXNlID0gMHgxNzA7Ci0JCWN0bCAgPSAweDM3NjsKLQkJaXJxICA9IDE1OwotCX0KLQotCWlmICghcmVxdWVzdF9yZWdpb24oYmFzZSwgOCwgZC0+bmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYLTB4JWxYIG5vdCBmcmVlLlxuIiwKLQkJCQlkLT5uYW1lLCBiYXNlLCBiYXNlICsgNyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGN0bCwgMSwgZC0+bmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYIG5vdCBmcmVlLlxuIiwKLQkJCQlkLT5uYW1lLCBjdGwpOwotCQlyZWxlYXNlX3JlZ2lvbihiYXNlLCA4KTsKLQkJcmV0dXJuOwotCX0KLQotCWlkZV9zdGRfaW5pdF9wb3J0cyhodywgYmFzZSwgY3RsKTsKLQlody0+aXJxID0gaXJxOwotCWh3LT5jaGlwc2V0ID0gZC0+Y2hpcHNldDsKLQlody0+Y29uZmlnID0gY29uZmlnOwotCi0JaHdzW3BvcnRfbm9dID0gaHc7Ci19Ci0KLWludCBpZGVfbGVnYWN5X2RldmljZV9hZGQoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIHVuc2lnbmVkIGxvbmcgY29uZmlnKQotewotCWh3X3JlZ3NfdCBod1syXSwgKmh3c1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQotCWlmICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19RRF8yTkRfUE9SVCkgPT0gMCkKLQkJaWRlX2xlZ2FjeV9pbml0X29uZShod3MsICZod1swXSwgMCwgZCwgY29uZmlnKTsKLQlpZGVfbGVnYWN5X2luaXRfb25lKGh3cywgJmh3WzFdLCAxLCBkLCBjb25maWcpOwotCi0JaWYgKGh3c1swXSA9PSBOVUxMICYmIGh3c1sxXSA9PSBOVUxMICYmCi0JICAgIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NJTkdMRSkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcmV0dXJuIGlkZV9ob3N0X2FkZChkLCBod3MsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2xlZ2FjeV9kZXZpY2VfYWRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGYzY2RkZDEuLmExNGUyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtNDYsMTAgKzQ2LDYgQEAKIAljYXNlIGlkZV9xZDY1eHg6CW5hbWUgPSAicWQ2NXh4IjsJYnJlYWs7CiAJY2FzZSBpZGVfdW1jODY3MjoJbmFtZSA9ICJ1bWM4NjcyIjsJYnJlYWs7CiAJY2FzZSBpZGVfaHQ2NTYwYjoJbmFtZSA9ICJodDY1NjBiIjsJYnJlYWs7Ci0JY2FzZSBpZGVfcnoxMDAwOgluYW1lID0gInJ6MTAwMCI7CWJyZWFrOwotCWNhc2UgaWRlX3RybTI5MDoJbmFtZSA9ICJ0cm0yOTAiOwlicmVhazsKLQljYXNlIGlkZV9jbWQ2NDY6CW5hbWUgPSAiY21kNjQ2IjsJYnJlYWs7Ci0JY2FzZSBpZGVfY3k4MmM2OTM6CW5hbWUgPSAiY3k4MmM2OTMiOwlicmVhazsKIAljYXNlIGlkZV80ZHJpdmVzOgluYW1lID0gIjRkcml2ZXMiOwlicmVhazsKIAljYXNlIGlkZV9wbWFjOgkJbmFtZSA9ICJtYWMtaW8iOwlicmVhazsKIAljYXNlIGlkZV9hdTF4eHg6CW5hbWUgPSAiYXUxeHh4IjsJYnJlYWs7CkBAIC0xNTUsMTMgKzE1MSw4IEBACiAJY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKmRzID0gc2V0dGluZy0+c2V0dGluZzsKIAlpbnQgdmFsID0gLUVJTlZBTDsKIAotCWlmIChkcy0+Z2V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJaWYgKGRzLT5nZXQpCiAJCXZhbCA9IGRzLT5nZXQoZHJpdmUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCX0KIAogCXJldHVybiB2YWw7CiB9CkBAIC01ODMsMzEgKzU3NCwxOSBAQAogICoJQ2xlYW4gdXAgdGhlIGRyaXZlciBzcGVjaWZpYyAvcHJvYyBmaWxlcyBhbmQgSURFIHNldHRpbmdzCiAgKglmb3IgYSBnaXZlbiBkcml2ZS4KICAqCi0gKglUYWtlcyBpZGVfc2V0dGluZ19tdHggYW5kIGlkZV9sb2NrLgotICoJQ2FsbGVyIG11c3QgaG9sZCBub25lIG9mIHRoZSBsb2Nrcy4KKyAqCVRha2VzIGlkZV9zZXR0aW5nX210eC4KICAqLwogCiB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2NfZW50cmllcyhkcml2ZSkpOwogCiAJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAkvKgotCSAqIGlkZV9zZXR0aW5nX210eCBwcm90ZWN0cyB0aGUgc2V0dGluZ3MgbGlzdAotCSAqIGlkZV9sb2NrIHByb3RlY3RzIHRoZSB1c2Ugb2Ygc2V0dGluZ3MKLQkgKgotCSAqIHNvIHdlIG5lZWQgdG8gaG9sZCBib3RoLCBpZGVfc2V0dGluZ3Nfc2VtIGJlY2F1c2Ugd2Ugd2FudCB0bwotCSAqIG1vZGlmeSB0aGUgc2V0dGluZ3MgbGlzdCwgYW5kIGlkZV9sb2NrIGJlY2F1c2Ugd2UgY2Fubm90IHRha2UKLQkgKiBhIHNldHRpbmcgb3V0IHRoYXQgaXMgYmVpbmcgdXNlZC4KLQkgKgotCSAqIE9UT0ggYm90aCBpZGVfe3JlYWQsd3JpdGV9X3NldHRpbmcgYXJlIG9ubHkgZXZlciB1c2VkIHVuZGVyCi0JICogaWRlX3NldHRpbmdfbXR4LgorCSAqIGlkZV9zZXR0aW5nX210eCBwcm90ZWN0cyBib3RoIHRoZSBzZXR0aW5ncyBsaXN0IGFuZCB0aGUgdXNlCisJICogb2Ygc2V0dGluZ3MgKHdlIGNhbm5vdCB0YWtlIGEgc2V0dGluZyBvdXQgdGhhdCBpcyBiZWluZyB1c2VkKS4KIAkgKi8KIAlkcml2ZS0+c2V0dGluZ3MgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwogfQogRVhQT1JUX1NZTUJPTChpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDA0ZjhmMTMuLmYwZjA5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC03NCw5ICs3NCw2IEBACiAKIERFRklORV9NVVRFWChpZGVfY2ZnX210eCk7CiAKLV9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhpZGVfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKGlkZV9sb2NrKTsKLQogc3RhdGljIHZvaWQgaWRlX3BvcnRfaW5pdF9kZXZpY2VzX2RhdGEoaWRlX2h3aWZfdCAqKTsKIAogLyoKQEAgLTEzMCw3ICsxMjcsNiBAQAogCX0KIH0KIAotLyogQ2FsbGVkIHdpdGggaWRlX2xvY2sgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIF9faWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaW50IGk7CkBAIC0xMzksMTAgKzEzNSw4IEBACiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbaV07CiAKIAkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKLQkJCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAkJfQogCX0KIH0KQEAgLTE1MCwxMSArMTQ0LDkgQEAKIHZvaWQgaWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAlfX2lkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKIAlod2lmLT5wcmVzZW50ID0gMDsKIAlpZGVfcG9ydF9pbml0X2RldmljZXNfZGF0YShod2lmKTsKLQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKIAltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wb3J0X3VucmVnaXN0ZXJfZGV2aWNlcyk7CkBAIC0xOTIsMTIgKzE4NCwxMCBAQAogCiAJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwogCi0Jc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwogCWlmIChod2lmLT5wcmVzZW50KSB7CiAJCV9faWRlX3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOwogCQlod2lmLT5wcmVzZW50ID0gMDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAKIAlpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaHdpZik7CiAKQEAgLTM0MCw2ICszMzAsNyBAQAogc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfaHdncm91cF90ICpod2dyb3VwID0gaHdpZi0+aHdncm91cDsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwogCiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQpAQCAtMzU0LDkgKzM0NSw5IEBACiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCQkvKiB0YWtlIGxvY2sgZm9yIElERV9ERkxBR19bTk9fXVVOTUFTSy9bTk9fXUlPXzMyQklUICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2dyb3VwLT5sb2NrLCBmbGFncyk7CiAJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlCiAJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwogCX0gZWxzZSB7CkBAIC0zOTcsODAgKzM4OCw2IEBACiBpZGVfZXh0X2RldnNldF9yd19zeW5jKHVzaW5nX2RtYSwgdXNpbmdfZG1hKTsKIF9fSURFX0RFVlNFVChwaW9fbW9kZSwgRFNfU1lOQywgTlVMTCwgc2V0X3Bpb19tb2RlKTsKIAotc3RhdGljIGludCBnZW5lcmljX2lkZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCi17Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZGV2LT5kcml2ZXJfZGF0YSwgKnBhaXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlIHJxcG07Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCWludCByZXQ7Ci0KLQkvKiBjYWxsIEFDUEkgX0dUTSBvbmx5IG9uY2UgKi8KLQlpZiAoKGRyaXZlLT5kbiAmIDEpID09IDAgfHwgcGFpciA9PSBOVUxMKQotCQlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwotCi0JbWVtc2V0KCZycXBtLCAwLCBzaXplb2YocnFwbSkpOwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKLQlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1NVU1BFTkQ7Ci0JcnEtPnNwZWNpYWwgPSAmYXJnczsKLQlycS0+ZGF0YSA9ICZycXBtOwotCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9TVVNQRU5EOwotCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCi0JCW1lc2cuZXZlbnQgPSBQTV9FVkVOVF9GUkVFWkU7Ci0JcnFwbS5wbV9zdGF0ZSA9IG1lc2cuZXZlbnQ7Ci0KLQlyZXQgPSBibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIE5VTEwsIHJxLCAwKTsKLQlibGtfcHV0X3JlcXVlc3QocnEpOwotCi0JLyogY2FsbCBBQ1BJIF9QUzMgb25seSBhZnRlciBib3RoIGRldmljZXMgYXJlIHN1c3BlbmRlZCAqLwotCWlmIChyZXQgPT0gMCAmJiAoKGRyaXZlLT5kbiAmIDEpIHx8IHBhaXIgPT0gTlVMTCkpCi0JCWlkZV9hY3BpX3NldF9zdGF0ZShod2lmLCAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VuZXJpY19pZGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBkZXYtPmRyaXZlcl9kYXRhLCAqcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0Jc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKLQlpZGVfdGFza190IGFyZ3M7Ci0JaW50IGVycjsKLQotCS8qIGNhbGwgQUNQSSBfUFMwIC8gX1NUTSBvbmx5IG9uY2UgKi8KLQlpZiAoKGRyaXZlLT5kbiAmIDEpID09IDAgfHwgcGFpciA9PSBOVUxMKSB7Ci0JCWlkZV9hY3BpX3NldF9zdGF0ZShod2lmLCAxKTsKLQkJaWRlX2FjcGlfcHVzaF90aW1pbmcoaHdpZik7Ci0JfQotCi0JaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOwotCi0JbWVtc2V0KCZycXBtLCAwLCBzaXplb2YocnFwbSkpOwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKLQlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1JFU1VNRTsKLQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9QUkVFTVBUOwotCXJxLT5zcGVjaWFsID0gJmFyZ3M7Ci0JcnEtPmRhdGEgPSAmcnFwbTsKLQlycXBtLnBtX3N0ZXAgPSBJREVfUE1fU1RBUlRfUkVTVU1FOwotCXJxcG0ucG1fc3RhdGUgPSBQTV9FVkVOVF9PTjsKLQotCWVyciA9IGJsa19leGVjdXRlX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCwgcnEsIDEpOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0KLQlpZiAoZXJyID09IDAgJiYgZGV2LT5kcml2ZXIpIHsKLQkJaWRlX2RyaXZlcl90ICpkcnYgPSB0b19pZGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQotCQlpZiAoZHJ2LT5yZXN1bWUpCi0JCQlkcnYtPnJlc3VtZShkcml2ZSk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQogLyoqCiAgKiBpZGVfZGV2aWNlX2dldAktCWdldCBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBhIGlkZV9kcml2ZV90CiAgKiBAZHJpdmU6CWRldmljZSB0byBnZXQgYSByZWZlcmVuY2UgdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZV9hcm0uYyBiL2RyaXZlcnMvaWRlL2lkZV9hcm0uYwppbmRleCBmNzI4ZjI5Li5iZGNhYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlX2FybS5jCkBAIC0xNSwxNSArMTUsOCBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJpZGVfYXJtIgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfQ0xQUzc1MDAKLSMgaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotIwotIyBkZWZpbmUgSURFX0FSTV9JTwkoSVNBU0xPVF9JTyArIDB4MWYwKQotIyBkZWZpbmUgSURFX0FSTV9JUlEJSVJRX0lTQV8xNAotI2Vsc2UKLSMgZGVmaW5lIElERV9BUk1fSU8JMHgxZjAKLSMgZGVmaW5lIElERV9BUk1fSVJRCUlSUV9IQVJERElTSwotI2VuZGlmCisjZGVmaW5lIElERV9BUk1fSU8JMHgxZjAKKyNkZWZpbmUgSURFX0FSTV9JUlEJSVJRX0hBUkRESVNLCiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV9hcm1faW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCA3OTk1NTdjLi42MjRlNjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMzUwLDE2ICszNTAsMTcgQEAKIAkuZG1hX3RpbWVvdXQJCT0gcGRjMjAyeHhfZG1hX3RpbWVvdXQsCiB9OwogCi0jZGVmaW5lIERFQ0xBUkVfUERDMjAyNlhfREVWKHVkbWEsIGV4dHJhX2ZsYWdzKSBcCisjZGVmaW5lIERFQ0xBUkVfUERDMjAyNlhfREVWKHVkbWEsIHNlY3RvcnMpIFwKIAl7IFwKIAkJLm5hbWUJCT0gRFJWX05BTUUsIFwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwgXAogCQkucG9ydF9vcHMJPSAmcGRjMjAyNnhfcG9ydF9vcHMsIFwKIAkJLmRtYV9vcHMJPSAmcGRjMjAyNnhfZG1hX29wcywgXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUERDMjAyWFggfCBleHRyYV9mbGFncywgXAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUERDMjAyWFgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLCBcCiAJCS51ZG1hX21hc2sJPSB1ZG1hLCBcCisJCS5tYXhfc2VjdG9ycwk9IHNlY3RvcnMsIFwKIAl9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBwZGMyMDJ4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC0zNzYsOCArMzc3LDggQEAKIAogCS8qIDE6IFBEQzIwMjZ7MiwzfSAqLwogCURFQ0xBUkVfUERDMjAyNlhfREVWKEFUQV9VRE1BNCwgMCksCi0JLyogMjogUERDMjAyNns1LDd9ICovCi0JREVDTEFSRV9QREMyMDI2WF9ERVYoQVRBX1VETUE1LCBJREVfSEZMQUdfUlFTSVpFXzI1NiksCisJLyogMjogUERDMjAyNns1LDd9OiBVRE1BNSwgbGltaXQgTEJBNDggcmVxdWVzdHMgdG8gMjU2IHNlY3RvcnMgKi8KKwlERUNMQVJFX1BEQzIwMjZYX0RFVihBVEFfVURNQTUsIDI1NiksCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3J6MTAwMC5jIGIvZHJpdmVycy9pZGUvcnoxMDAwLmMKaW5kZXggN2RhZjAxMy4uYTY0MTRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcnoxMDAwLmMKKysrIGIvZHJpdmVycy9pZGUvcnoxMDAwLmMKQEAgLTIyLDM0ICsyMiw0OCBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJyejEwMDAiCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfcnoxMDAwIChpZGVfaHdpZl90ICpod2lmKQorc3RhdGljIGludCBfX2RldmluaXQgcnoxMDAwX2Rpc2FibGVfcmVhZGFoZWFkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAl1MTYgcmVnOwogCiAJaWYgKCFwY2lfcmVhZF9jb25maWdfd29yZCAoZGV2LCAweDQwLCAmcmVnKSAmJgogCSAgICAhcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHg0MCwgcmVnICYgMHhkZmZmKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogZGlzYWJsZWQgY2hpcHNldCByZWFkLWFoZWFkICIKLQkJCSIoYnVnZ3kgUloxMDAwL1JaMTAwMSlcbiIsIGh3aWYtPm5hbWUpOworCQkJIihidWdneSBSWjEwMDAvUloxMDAxKVxuIiwgcGNpX25hbWUoZGV2KSk7CisJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCWlmIChod2lmLT5tYXRlKQotCQkJaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IGh3aWYtPnNlcmlhbGl6ZWQgPSAxOwotCQlod2lmLT5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19OT19VTk1BU0tfSVJRUzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNlcmlhbGl6ZWQsIGRpc2FibGVkIHVubWFza2luZyAiCi0JCQkiKGJ1Z2d5IFJaMTAwMC9SWjEwMDEpXG4iLCBod2lmLT5uYW1lKTsKKwkJCSIoYnVnZ3kgUloxMDAwL1JaMTAwMSlcbiIsIHBjaV9uYW1lKGRldikpOworCQlyZXR1cm4gMTsKIAl9CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyByejEwMDBfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9IERSVl9OQU1FLAotCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcnoxMDAwLAotCS5jaGlwc2V0CT0gaWRlX3J6MTAwMCwKIAkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19ETUEsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCByejEwMDBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXJldHVybiBpZGVfcGNpX2luaXRfb25lKGRldiwgJnJ6MTAwMF9jaGlwc2V0LCBOVUxMKTsKKwlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkID0gcnoxMDAwX2NoaXBzZXQ7CisJaW50IHJjOworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKHJ6MTAwMF9kaXNhYmxlX3JlYWRhaGVhZChkZXYpKSB7CisJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfU0VSSUFMSVpFOworCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX1VOTUFTS19JUlFTOworCX0KKworCXJldHVybiBpZGVfcGNpX2luaXRfb25lKGRldiwgJmQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCByejEwMDBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWRlX3BjaV9yZW1vdmUoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ6MTAwMF9wY2lfdGJsW10gPSB7CkBAIC02Myw3ICs3Nyw3IEBACiAJLm5hbWUJCT0gIlJaMTAwMF9JREUiLAogCS5pZF90YWJsZQk9IHJ6MTAwMF9wY2lfdGJsLAogCS5wcm9iZQkJPSByejEwMDBfaW5pdF9vbmUsCi0JLnJlbW92ZQkJPSBpZGVfcGNpX3JlbW92ZSwKKwkucmVtb3ZlCQk9IHJ6MTAwMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByejEwMDBfaWRlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggNzVlYTYxNS4uMmE1ZWE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTMyOCwxMCArMzI4LDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gdHJtMjkwX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3RybTI5MCwKLQkuY2hpcHNldAk9IGlkZV90cm0yOTAsCiAJLnBvcnRfb3BzCT0gJnRybTI5MF9wb3J0X29wcywKIAkuZG1hX29wcwk9ICZ0cm0yOTBfZG1hX29wcywKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSTTI5MCB8CisJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEgfAogI2lmIDAgLyogcGxheSBpdCBzYWZlIGZvciBub3cgKi8KIAkJCSAgSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKaW5kZXggOTEyMDA2My4uMTNiNjNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCiAJd2hpbGUgKGNvdW50LS0pCiAJCSpwdHIrKyA9IGNwdV90b19sZTE2KF9fcmF3X3JlYWR3KCh2b2lkIF9faW9tZW0gKilwb3J0KSk7Ci0JX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQgKiAyKTsKKwlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCByb3VuZHVwKGxlbiwgMikpOwogfQogCiBzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQlfX3Jhd193cml0ZXcobGUxNl90b19jcHUoKnB0ciksICh2b2lkIF9faW9tZW0gKilwb3J0KTsKIAkJcHRyKys7CiAJfQotCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylidWYsIGNvdW50ICogMik7CisJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJ1Ziwgcm91bmR1cChsZW4sIDIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHR4NDkzOGlkZV90cF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCmluZGV4IGJhZmI3ZDEuLjk3Y2Q5ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCkBAIC0yNTksNiArMjU5LDEyIEBACiAJCQliY291bnQgPSAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKIAkJCWlmIChiY291bnQgPiBjdXJfbGVuKQogCQkJCWJjb3VudCA9IGN1cl9sZW47CisJCQkvKgorCQkJICogVGhpcyB3b3JrYXJvdW5kIGZvciB6ZXJvIGNvdW50IHNlZW1zIHJlcXVpcmVkLgorCQkJICogKHN0YW5kYXJkIGlkZV9idWlsZF9kbWF0YWJsZSBkbyBpdCB0b28pCisJCQkgKi8KKwkJCWlmICgoYmNvdW50ICYgMHhmZmZmKSA9PSAweDAwMDApCisJCQkJYmNvdW50ID0gMHg4MDAwOwogCQkJKnRhYmxlKysgPSBiY291bnQgJiAweGZmZmY7CiAJCQkqdGFibGUrKyA9IGN1cl9hZGRyOwogCQkJY3VyX2FkZHIgKz0gYmNvdW50OwpAQCAtNTU4LDcgKzU2NCw3IEBACiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKnB0cisrID0gY3B1X3RvX2xlMTYoX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKXBvcnQpKTsKLQlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCBjb3VudCAqIDIpOworCV9faWRlX2ZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylidWYsIHJvdW5kdXAobGVuLCAyKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHR4NDkzOWlkZV9vdXRwdXRfZGF0YV9zd2FwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLApAQCAtNTcyLDcgKzU3OCw3IEBACiAJCV9fcmF3X3dyaXRldyhsZTE2X3RvX2NwdSgqcHRyKSwgKHZvaWQgX19pb21lbSAqKXBvcnQpOwogCQlwdHIrKzsKIAl9Ci0JX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJ1ZiwgY291bnQgKiAyKTsKKwlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCByb3VuZHVwKGxlbiwgMikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgdHg0OTM5aWRlX3RwX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3VtYzg2NzIuYyBiL2RyaXZlcnMvaWRlL3VtYzg2NzIuYwppbmRleCAxZGEwNzZlLi5lMjk5NzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS91bWM4NjcyLmMKKysrIGIvZHJpdmVycy9pZGUvdW1jODY3Mi5jCkBAIC0xMDcsMTggKzEwNywyMSBAQAogc3RhdGljIHZvaWQgdW1jX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZGVfaHdncm91cF90ICptYXRlX2h3Z3JvdXAgPSBod2lmLT5tYXRlID8gaHdpZi0+bWF0ZS0+aHdncm91cCA6IE5VTEw7CisJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CiAKIAlwcmludGsoIiVzOiBzZXR0aW5nIHVtYzg2NzIgdG8gUElPIG1vZGUlZCAoc3BlZWQgJWQpXG4iLAogCQlkcml2ZS0+bmFtZSwgcGlvLCBwaW9fdG9fdW1jW3Bpb10pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCWlmIChod2lmLT5tYXRlICYmIGh3aWYtPm1hdGUtPmh3Z3JvdXAtPmhhbmRsZXIpIHsKKwlpZiAobWF0ZV9od2dyb3VwKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWF0ZV9od2dyb3VwLT5sb2NrLCBmbGFncyk7CisJaWYgKG1hdGVfaHdncm91cCAmJiBtYXRlX2h3Z3JvdXAtPmhhbmRsZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1bWM4NjcyOiBvdGhlciBpbnRlcmZhY2UgaXMgYnVzeTogZXhpdGluZyB0dW5lX3VtYygpXG4iKTsKIAl9IGVsc2UgewogCQljdXJyZW50X3NwZWVkc1tkcml2ZS0+bmFtZVsyXSAtICdhJ10gPSBwaW9fdG9fdW1jW3Bpb107CiAJCXVtY19zZXRfc3BlZWRzKGN1cnJlbnRfc3BlZWRzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlpZiAobWF0ZV9od2dyb3VwKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXRlX2h3Z3JvdXAtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgdW1jODY3Ml9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwppbmRleCA2OWU2NzRlLi5kYjIyZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5yb3dzOyBpKyspCi0JCQlkaXNhYmxlX2lycShPTUFQX0dQSU9fSVJRKHJvd19ncGlvc1tpXSkpOworCQkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEocm93X2dwaW9zW2ldKSk7CiAJfSBlbHNlCiAJCS8qIGRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0IGFuZCBzY2hlZHVsZSBmb3IgaGFuZGxpbmcgKi8KIAkJb21hcF93cml0ZXcoMSwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3BfZGF0YS0+cm93czsgaSsrKQotCQkJCWVuYWJsZV9pcnEoT01BUF9HUElPX0lSUShyb3dfZ3Bpb3NbaV0pKTsKKwkJCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHJvd19ncGlvc1tpXSkpOwogCQl9IGVsc2UgewogCQkJb21hcF93cml0ZXcoMCwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKIAkJCWtwX2N1cl9ncm91cCA9IC0xOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCW9tYXBfd3JpdGV3KDAsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JEX01BU0tJVCk7CiAJfSBlbHNlIHsKIAkJZm9yIChpcnFfaWR4ID0gMDsgaXJxX2lkeCA8IG9tYXBfa3AtPnJvd3M7IGlycV9pZHgrKykgewotCQkJaWYgKHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEocm93X2dwaW9zW2lycV9pZHhdKSwKKwkJCWlmIChyZXF1ZXN0X2lycShncGlvX3RvX2lycShyb3dfZ3Bpb3NbaXJxX2lkeF0pLAogCQkJCQlvbWFwX2twX2ludGVycnVwdCwKIAkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkJCSJvbWFwLWtleXBhZCIsIG9tYXBfa3ApIDwgMCkKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJZ3Bpb19mcmVlKGNvbF9ncGlvc1tpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5yb3dzOyBpKyspIHsKIAkJCWdwaW9fZnJlZShyb3dfZ3Bpb3NbaV0pOwotCQkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShyb3dfZ3Bpb3NbaV0pLCAwKTsKKwkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHJvd19ncGlvc1tpXSksIDApOwogCQl9CiAJfSBlbHNlIHsKIAkJb21hcF93cml0ZXcoMSwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKaW5kZXggNmQzMGM2ZC4uMGQyZmM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCQlnb3RvIGZhaWxlZF9mcmVlX21lbTsKIAl9CiAKLQlrZXlwYWQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIktCRENMSyIpOworCWtleXBhZC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGtleXBhZC0+Y2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBjbG9ja1xuIik7CiAJCWVycm9yID0gUFRSX0VSUihrZXlwYWQtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggMjdkNzBkMy4uZGEzYzNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNzksNyArNzksNyBAQAogCiBjb25maWcgU0VSSU9fUlBDS0JECiAJdHJpc3RhdGUgIkFjb3JuIFJpc2NQQyBrZXlib2FyZCBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9BQ09STiB8fCBBUkNIX0NMUFM3NTAwCisJZGVwZW5kcyBvbiBBUkNIX0FDT1JOCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGUgQWNvcm4gUmlzY1BDIGFuZCB3YW50IHRvIHVzZSBhbiBBVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCBiOWI3ZmM2Li5lMWVjZTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJc3RydWN0IGFkczc4NDYJKnRzID0gY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IGFkczc4NDYsIHRpbWVyKTsKIAlpbnQJCXN0YXR1cyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CisJc3Bpbl9sb2NrKCZ0cy0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkoIWdldF9wZW5kb3duX3N0YXRlKHRzKSB8fAogCQkgICAgIGRldmljZV9zdXNwZW5kZWQoJnRzLT5zcGktPmRldikpKSB7CkBAIC03MjgsNyArNzI4LDcgQEAKIAkJCWRldl9lcnIoJnRzLT5zcGktPmRldiwgInNwaV9hc3luYyAtLT4gJWRcbiIsIHN0YXR1cyk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxKCZ0cy0+bG9jayk7CisJc3Bpbl91bmxvY2soJnRzLT5sb2NrKTsKIAlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKaW5kZXggYmE2NDg3NS4uMWQxMWUyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93bTk3eHguaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogCiAjZGVmaW5lIFZFUlNJT04JCSIwLjEzIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZy5oIGIvZHJpdmVycy9sZ3Vlc3QvbGcuaAppbmRleCA1ZmFlZmVhLi5mMmM2NDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZy5oCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xnLmgKQEAgLTE2NCw3ICsxNjQsNyBAQAogdm9pZCBjb3B5X2dkdF90bHMoY29uc3Qgc3RydWN0IGxnX2NwdSAqY3B1LCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCk7CiAKIC8qIHBhZ2VfdGFibGVzLmM6ICovCi1pbnQgaW5pdF9ndWVzdF9wYWdldGFibGUoc3RydWN0IGxndWVzdCAqbGcsIHVuc2lnbmVkIGxvbmcgcGd0YWJsZSk7CitpbnQgaW5pdF9ndWVzdF9wYWdldGFibGUoc3RydWN0IGxndWVzdCAqbGcpOwogdm9pZCBmcmVlX2d1ZXN0X3BhZ2V0YWJsZShzdHJ1Y3QgbGd1ZXN0ICpsZyk7CiB2b2lkIGd1ZXN0X25ld19wYWdldGFibGUoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBsb25nIHBndGFibGUpOwogdm9pZCBndWVzdF9zZXRfcG1kKHN0cnVjdCBsZ3Vlc3QgKmxnLCB1bnNpZ25lZCBsb25nIGdwZ2RpciwgdTMyIGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jCmluZGV4IGE2NjFiYmQuLjkxNWRhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgcGFnZXMgdGhlIHJpbmcgd2lsbCB0YWtlLCBhbmQgbWFwIHRoYXQgbWVtb3J5ICovCiAJbHZxLT5wYWdlcyA9IGxndWVzdF9tYXAoKHVuc2lnbmVkIGxvbmcpbHZxLT5jb25maWcucGZuIDw8IFBBR0VfU0hJRlQsCiAJCQkJRElWX1JPVU5EX1VQKHZyaW5nX3NpemUobHZxLT5jb25maWcubnVtLAotCQkJCQkJCVBBR0VfU0laRSksCisJCQkJCQkJTEdVRVNUX1ZSSU5HX0FMSUdOKSwKIAkJCQkJICAgICBQQUdFX1NJWkUpKTsKIAlpZiAoIWx2cS0+cGFnZXMpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTI1OSw4ICsyNTksOCBAQAogCiAJLyogT0ssIHRlbGwgdmlydGlvX3JpbmcuYyB0byBzZXQgdXAgYSB2aXJ0cXVldWUgbm93IHdlIGtub3cgaXRzIHNpemUKIAkgKiBhbmQgd2UndmUgZ290IGEgcG9pbnRlciB0byBpdHMgcGFnZXMuICovCi0JdnEgPSB2cmluZ19uZXdfdmlydHF1ZXVlKGx2cS0+Y29uZmlnLm51bSwgdmRldiwgbHZxLT5wYWdlcywKLQkJCQkgbGdfbm90aWZ5LCBjYWxsYmFjayk7CisJdnEgPSB2cmluZ19uZXdfdmlydHF1ZXVlKGx2cS0+Y29uZmlnLm51bSwgTEdVRVNUX1ZSSU5HX0FMSUdOLAorCQkJCSB2ZGV2LCBsdnEtPnBhZ2VzLCBsZ19ub3RpZnksIGNhbGxiYWNrKTsKIAlpZiAoIXZxKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gdW5tYXA7CkBAIC0yNzIsNyArMjcyLDcgQEAKIAkgKiB0aGUgaW50ZXJydXB0IGFzIGEgc291cmNlIG9mIHJhbmRvbW5lc3M6IGl0J2QgYmUgbmljZSB0byBoYXZlIHRoYXQKIAkgKiBiYWNrLi4gKi8KIAllcnIgPSByZXF1ZXN0X2lycShsdnEtPmNvbmZpZy5pcnEsIHZyaW5nX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIHZkZXYtPmRldi5idXNfaWQsIHZxKTsKKwkJCSAgZGV2X25hbWUoJnZkZXYtPmRldiksIHZxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlc3Ryb3lfdnJpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCmluZGV4IGU3M2EwMDAuLjM0YmMwMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qTDowMjAgVGhlIGluaXRpYWxpemF0aW9uIHdyaXRlIHN1cHBsaWVzIDQgcG9pbnRlciBzaXplZCAoMzIgb3IgNjQgYml0KQorLypMOjAyMCBUaGUgaW5pdGlhbGl6YXRpb24gd3JpdGUgc3VwcGxpZXMgMyBwb2ludGVyIHNpemVkICgzMiBvciA2NCBiaXQpCiAgKiB2YWx1ZXMgKGluIGFkZGl0aW9uIHRvIHRoZSBMSFJFUV9JTklUSUFMSVpFIHZhbHVlKS4gIFRoZXNlIGFyZToKICAqCiAgKiBiYXNlOiBUaGUgc3RhcnQgb2YgdGhlIEd1ZXN0LXBoeXNpY2FsIG1lbW9yeSBpbnNpZGUgdGhlIExhdW5jaGVyIG1lbW9yeS4KQEAgLTE1NSw5ICsxNTUsNiBAQAogICogYWxsb3dlZCB0byBhY2Nlc3MuICBUaGUgR3Vlc3QgbWVtb3J5IGxpdmVzIGluc2lkZSB0aGUgTGF1bmNoZXIsIHNvIGl0IHNldHMKICAqIHRoaXMgdG8gZW5zdXJlIHRoZSBHdWVzdCBjYW4gb25seSByZWFjaCBpdHMgb3duIG1lbW9yeS4KICAqCi0gKiBwZ2RpcjogVGhlIChHdWVzdC1waHlzaWNhbCkgYWRkcmVzcyBvZiB0aGUgdG9wIG9mIHRoZSBpbml0aWFsIEd1ZXN0Ci0gKiBwYWdldGFibGVzICh3aGljaCBhcmUgc2V0IHVwIGJ5IHRoZSBMYXVuY2hlcikuCi0gKgogICogc3RhcnQ6IFRoZSBmaXJzdCBpbnN0cnVjdGlvbiB0byBleGVjdXRlICgiZWlwIiBpbiB4ODYtc3BlYWspLgogICovCiBzdGF0aWMgaW50IGluaXRpYWxpemUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICppbnB1dCkKQEAgLTE2Niw3ICsxNjMsNyBAQAogCSAqIEd1ZXN0LiAqLwogCXN0cnVjdCBsZ3Vlc3QgKmxnOwogCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBhcmdzWzRdOworCXVuc2lnbmVkIGxvbmcgYXJnc1szXTsKIAogCS8qIFdlIGdyYWIgdGhlIEJpZyBMZ3Vlc3QgbG9jaywgd2hpY2ggcHJvdGVjdHMgYWdhaW5zdCBtdWx0aXBsZQogCSAqIHNpbXVsdGFuZW91cyBpbml0aWFsaXphdGlvbnMuICovCkBAIC0xOTIsMTQgKzE4OSwxNCBAQAogCWxnLT5tZW1fYmFzZSA9ICh2b2lkIF9fdXNlciAqKWFyZ3NbMF07CiAJbGctPnBmbl9saW1pdCA9IGFyZ3NbMV07CiAKLQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBjcHUgKGNwdSAwKSBhbmQgaXQgd2lsbCBzdGFydCBib290aW5nIGF0IGFyZ3NbM10gKi8KLQllcnIgPSBsZ19jcHVfc3RhcnQoJmxnLT5jcHVzWzBdLCAwLCBhcmdzWzNdKTsKKwkvKiBUaGlzIGlzIHRoZSBmaXJzdCBjcHUgKGNwdSAwKSBhbmQgaXQgd2lsbCBzdGFydCBib290aW5nIGF0IGFyZ3NbMl0gKi8KKwllcnIgPSBsZ19jcHVfc3RhcnQoJmxnLT5jcHVzWzBdLCAwLCBhcmdzWzJdKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlbGVhc2VfZ3Vlc3Q7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBHdWVzdCdzIHNoYWRvdyBwYWdlIHRhYmxlcywgdXNpbmcgdGhlIHRvcGxldmVsCiAJICogYWRkcmVzcyB0aGUgTGF1bmNoZXIgZ2F2ZSB1cy4gIFRoaXMgYWxsb2NhdGVzIG1lbW9yeSwgc28gY2FuIGZhaWwuICovCi0JZXJyID0gaW5pdF9ndWVzdF9wYWdldGFibGUobGcsIGFyZ3NbMl0pOworCWVyciA9IGluaXRfZ3Vlc3RfcGFnZXRhYmxlKGxnKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfcmVnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYyBiL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKaW5kZXggODFkMGM2MC4uNTc2YTgzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYworKysgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAjaW5jbHVkZSAibGcuaCIKIAogLypNOjAwOCBXZSBob2xkIHJlZmVyZW5jZSB0byBwYWdlcywgd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIHN3YXBwZWQuCkBAIC01ODEsMTUgKzU4Miw4MiBAQAogCQlyZWxlYXNlX3BnZChsZywgbGctPnBnZGlyc1twZ2Rpcl0ucGdkaXIgKyBpZHgpOwogfQogCisvKiBPbmNlIHdlIGtub3cgaG93IG11Y2ggbWVtb3J5IHdlIGhhdmUgd2UgY2FuIGNvbnN0cnVjdCBzaW1wbGUgaWRlbnRpdHkKKyAqICh3aGljaCBzZXQgdmlydHVhbCA9PSBwaHlzaWNhbCkgYW5kIGxpbmVhciBtYXBwaW5ncworICogd2hpY2ggd2lsbCBnZXQgdGhlIEd1ZXN0IGZhciBlbm91Z2ggaW50byB0aGUgYm9vdCB0byBjcmVhdGUgaXRzIG93bi4KKyAqCisgKiBXZSBsYXkgdGhlbSBvdXQgb2YgdGhlIHdheSwganVzdCBiZWxvdyB0aGUgaW5pdHJkICh3aGljaCBpcyB3aHkgd2UgbmVlZCB0bworICoga25vdyBpdHMgc2l6ZSBoZXJlKS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNldHVwX3BhZ2V0YWJsZXMoc3RydWN0IGxndWVzdCAqbGcsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBtZW0sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbml0cmRfc2l6ZSkKK3sKKwlwZ2RfdCBfX3VzZXIgKnBnZGlyOworCXB0ZV90IF9fdXNlciAqbGluZWFyOworCXVuc2lnbmVkIGludCBtYXBwZWRfcGFnZXMsIGksIGxpbmVhcl9wYWdlcywgcGh5c19saW5lYXI7CisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZSA9ICh1bnNpZ25lZCBsb25nKWxnLT5tZW1fYmFzZTsKKworCS8qIFdlIGhhdmUgbWFwcGVkX3BhZ2VzIGZyYW1lcyB0byBtYXAsIHNvIHdlIG5lZWQKKwkgKiBsaW5lYXJfcGFnZXMgcGFnZSB0YWJsZXMgdG8gbWFwIHRoZW0uICovCisJbWFwcGVkX3BhZ2VzID0gbWVtIC8gUEFHRV9TSVpFOworCWxpbmVhcl9wYWdlcyA9IChtYXBwZWRfcGFnZXMgKyBQVFJTX1BFUl9QVEUgLSAxKSAvIFBUUlNfUEVSX1BURTsKKworCS8qIFdlIHB1dCB0aGUgdG9wbGV2ZWwgcGFnZSBkaXJlY3RvcnkgcGFnZSBhdCB0aGUgdG9wIG9mIG1lbW9yeS4gKi8KKwlwZ2RpciA9IChwZ2RfdCAqKShtZW0gKyBtZW1fYmFzZSAtIGluaXRyZF9zaXplIC0gUEFHRV9TSVpFKTsKKworCS8qIE5vdyB3ZSB1c2UgdGhlIG5leHQgbGluZWFyX3BhZ2VzIHBhZ2VzIGFzIHB0ZSBwYWdlcyAqLworCWxpbmVhciA9ICh2b2lkICopcGdkaXIgLSBsaW5lYXJfcGFnZXMgKiBQQUdFX1NJWkU7CisKKwkvKiBMaW5lYXIgbWFwcGluZyBpcyBlYXN5OiBwdXQgZXZlcnkgcGFnZSdzIGFkZHJlc3MgaW50byB0aGUKKwkgKiBtYXBwaW5nIGluIG9yZGVyLiAqLworCWZvciAoaSA9IDA7IGkgPCBtYXBwZWRfcGFnZXM7IGkrKykgeworCQlwdGVfdCBwdGU7CisJCXB0ZSA9IHBmbl9wdGUoaSwgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVHxfUEFHRV9SV3xfUEFHRV9VU0VSKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoJmxpbmVhcltpXSwgJnB0ZSwgc2l6ZW9mKHB0ZSkpICE9IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBUaGUgdG9wIGxldmVsIHBvaW50cyB0byB0aGUgbGluZWFyIHBhZ2UgdGFibGUgcGFnZXMgYWJvdmUuCisJICogV2Ugc2V0dXAgdGhlIGlkZW50aXR5IGFuZCBsaW5lYXIgbWFwcGluZ3MgaGVyZS4gKi8KKwlwaHlzX2xpbmVhciA9ICh1bnNpZ25lZCBsb25nKWxpbmVhciAtIG1lbV9iYXNlOworCWZvciAoaSA9IDA7IGkgPCBtYXBwZWRfcGFnZXM7IGkgKz0gUFRSU19QRVJfUFRFKSB7CisJCXBnZF90IHBnZDsKKwkJcGdkID0gX19wZ2QoKHBoeXNfbGluZWFyICsgaSAqIHNpemVvZihwdGVfdCkpIHwKKwkJCSAgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUikpOworCisJCWlmIChjb3B5X3RvX3VzZXIoJnBnZGlyW2kgLyBQVFJTX1BFUl9QVEVdLCAmcGdkLCBzaXplb2YocGdkKSkKKwkJICAgIHx8IGNvcHlfdG9fdXNlcigmcGdkaXJbcGdkX2luZGV4KFBBR0VfT0ZGU0VUKQorCQkJCQkgICArIGkgLyBQVFJTX1BFUl9QVEVdLAorCQkJCSAgICAmcGdkLCBzaXplb2YocGdkKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBXZSByZXR1cm4gdGhlIHRvcCBsZXZlbCAoZ3Vlc3QtcGh5c2ljYWwpIGFkZHJlc3M6IHJlbWVtYmVyIHdoZXJlCisJICogdGhpcyBpcy4gKi8KKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpcGdkaXIgLSBtZW1fYmFzZTsKK30KKwogLypIOjUwMCAodmlpKSBTZXR0aW5nIHVwIHRoZSBwYWdlIHRhYmxlcyBpbml0aWFsbHkuCiAgKgogICogV2hlbiBhIEd1ZXN0IGlzIGZpcnN0IGNyZWF0ZWQsIHRoZSBMYXVuY2hlciB0ZWxscyB1cyB3aGVyZSB0aGUgdG9wbGV2ZWwgb2YKICAqIGl0cyBmaXJzdCBwYWdlIHRhYmxlIGlzLiAgV2Ugc2V0IHNvbWUgdGhpbmdzIHVwIGhlcmU6ICovCi1pbnQgaW5pdF9ndWVzdF9wYWdldGFibGUoc3RydWN0IGxndWVzdCAqbGcsIHVuc2lnbmVkIGxvbmcgcGd0YWJsZSkKK2ludCBpbml0X2d1ZXN0X3BhZ2V0YWJsZShzdHJ1Y3QgbGd1ZXN0ICpsZykKIHsKKwl1NjQgbWVtOworCXUzMiBpbml0cmRfc2l6ZTsKKwlzdHJ1Y3QgYm9vdF9wYXJhbXMgX191c2VyICpib290ID0gKHN0cnVjdCBib290X3BhcmFtcyAqKWxnLT5tZW1fYmFzZTsKKworCS8qIEdldCB0aGUgR3Vlc3QgbWVtb3J5IHNpemUgYW5kIHRoZSByYW1kaXNrIHNpemUgZnJvbSB0aGUgYm9vdCBoZWFkZXIKKwkgKiBsb2NhdGVkIGF0IGxnLT5tZW1fYmFzZSAoR3Vlc3QgYWRkcmVzcyAwKS4gKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJm1lbSwgJmJvb3QtPmU4MjBfbWFwWzBdLnNpemUsIHNpemVvZihtZW0pKQorCSAgICB8fCBnZXRfdXNlcihpbml0cmRfc2l6ZSwgJmJvb3QtPmhkci5yYW1kaXNrX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCS8qIFdlIHN0YXJ0IG9uIHRoZSBmaXJzdCBzaGFkb3cgcGFnZSB0YWJsZSwgYW5kIGdpdmUgaXQgYSBibGFuayBQR0QKIAkgKiBwYWdlLiAqLwotCWxnLT5wZ2RpcnNbMF0uZ3BnZGlyID0gcGd0YWJsZTsKKwlsZy0+cGdkaXJzWzBdLmdwZ2RpciA9IHNldHVwX3BhZ2V0YWJsZXMobGcsIG1lbSwgaW5pdHJkX3NpemUpOworCWlmIChJU19FUlJfVkFMVUUobGctPnBnZGlyc1swXS5ncGdkaXIpKQorCQlyZXR1cm4gbGctPnBnZGlyc1swXS5ncGdkaXI7CiAJbGctPnBnZGlyc1swXS5wZ2RpciA9IChwZ2RfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWxnLT5wZ2RpcnNbMF0ucGdkaXIpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IGNlMjZjODQuLjMzMjY3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTEwNjAsNyArMTA2MCw3IEBACiAJCWdvdG8gYmFkX3BhZ2VfcG9vbDsKIAl9CiAKLQljYy0+YnMgPSBiaW9zZXRfY3JlYXRlKE1JTl9JT1MsIE1JTl9JT1MpOworCWNjLT5icyA9IGJpb3NldF9jcmVhdGUoTUlOX0lPUywgMCk7CiAJaWYgKCFjYy0+YnMpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBhbGxvY2F0ZSBjcnlwdCBiaW9zZXQiOwogCQlnb3RvIGJhZF9iczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCAyZmQ2ZDQ0Li5hMzQzMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC01Niw3ICs1Niw3IEBACiAJaWYgKCFjbGllbnQtPnBvb2wpCiAJCWdvdG8gYmFkOwogCi0JY2xpZW50LT5iaW9zID0gYmlvc2V0X2NyZWF0ZSgxNiwgMTYpOworCWNsaWVudC0+YmlvcyA9IGJpb3NldF9jcmVhdGUoMTYsIDApOwogCWlmICghY2xpZW50LT5iaW9zKQogCQlnb3RvIGJhZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDM0MzA5NGMuLjQyMWM5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAJaWYgKCFtZC0+dGlvX3Bvb2wpCiAJCWdvdG8gYmFkX3Rpb19wb29sOwogCi0JbWQtPmJzID0gYmlvc2V0X2NyZWF0ZSgxNiwgMTYpOworCW1kLT5icyA9IGJpb3NldF9jcmVhdGUoMTYsIDApOwogCWlmICghbWQtPmJzKQogCQlnb3RvIGJhZF9ub19iaW9zZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwppbmRleCA0OTUyYWViLi5kODIyOWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCkBAIC0yMzkxLDYgKzIzOTEsNjcgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWwpOwogCisvKiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgSVIKKyAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dbSVJfS0VZVEFCX1NJWkVdID0geworCVsweDBjXSA9IEtFWV9QUk9HMSwJCS8qIEt3b3JsZCBrZXkgKi8KKwlbMHgxNl0gPSBLRVlfQ0xPU0VDRCwJCS8qIC0+ICkgKi8KKwlbMHgxZF0gPSBLRVlfUE9XRVIyLAorCisJWzB4MDBdID0gS0VZXzEsCisJWzB4MDFdID0gS0VZXzIsCisJWzB4MDJdID0gS0VZXzMsCQkJLyogVHdvIGtleXMgaGF2ZSB0aGUgc2FtZSBjb2RlOiAzIGFuZCBsZWZ0ICovCisJWzB4MDNdID0gS0VZXzQsCQkJLyogVHdvIGtleXMgaGF2ZSB0aGUgc2FtZSBjb2RlOiAzIGFuZCByaWdodCAqLworCVsweDA0XSA9IEtFWV81LAorCVsweDA1XSA9IEtFWV82LAorCVsweDA2XSA9IEtFWV83LAorCVsweDA3XSA9IEtFWV84LAorCVsweDA4XSA9IEtFWV85LAorCVsweDBhXSA9IEtFWV8wLAorCisJWzB4MDldID0gS0VZX0FHQUlOLAorCVsweDE0XSA9IEtFWV9NVVRFLAorCisJWzB4MjBdID0gS0VZX1VQLAorCVsweDIxXSA9IEtFWV9ET1dOLAorCVsweDBiXSA9IEtFWV9FTlRFUiwKKworCVsweDEwXSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4MTFdID0gS0VZX0NIQU5ORUxET1dOLAorCisJLyogQ291bGRuJ3QgbWFwIGtleSBsZWZ0L2tleSByaWdodCBzaW5jZSB0aG9zZQorCSAgIGNvbmZsaWN0IHdpdGggJzMnIGFuZCAnNCcgc2NhbmNvZGVzCisJICAgSSBkdW5ubyB3aGF0IHRoZSBvcmlnaW5hbCBkcml2ZXIgZG9lcworCSAqLworCisJWzB4MTNdID0gS0VZX1ZPTFVNRVVQLAorCVsweDEyXSA9IEtFWV9WT0xVTUVET1dOLAorCisJLyogVGhlIGxvd2VyIHBhcnQgb2YgdGhlIElSCisJICAgVGhlcmUgYXJlIHNldmVyYWwgZHVwbGljYXRlZCBrZXljb2RlcyB0aGVyZS4KKwkgICBNb3N0IG9mIHRoZW0gY29uZmxpY3Qgd2l0aCBkaWdpdHMuCisJICAgQWRkIG1hcHBpbmdzIGp1c3QgdG8gdGhlIHVudXNlZCBzY2FuY29kZXMuCisJICAgU29tZWhvdywgdGhlIG9yaWdpbmFsIGRyaXZlciBoYXMgYSB3YXkgdG8ga25vdywKKwkgICBidXQgdGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgb24gc29tZSBHUElPLgorCSAgIEFsc28sIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0aW1lIGJldHdlZW4ga2V5dXAKKwkgICBhbmQga2V5ZG93bi4KKwkgKi8KKwlbMHgxOV0gPSBLRVlfUEFVU0UsCQkvKiBUaW1lc2hpZnQgKi8KKwlbMHgxYV0gPSBLRVlfU1RPUCwKKwlbMHgxYl0gPSBLRVlfUkVDT1JELAorCisJWzB4MjJdID0gS0VZX1RFWFQsCisKKwlbMHgxNV0gPSBLRVlfQVVESU8sCQkvKiAoKCopKSAqLworCVsweDBmXSA9IEtFWV9aT09NLAorCVsweDFjXSA9IEtFWV9TSFVGRkxFLAkJLyogc25hcHNob3QgKi8KKworCVsweDE4XSA9IEtFWV9SRUQsCQkvKiBCICovCisJWzB4MjNdID0gS0VZX0dSRUVOLAkJLyogQyAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyk7CisKIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAlbMHgyMF0gPSBLRVlfTElTVCwKIAlbMHgwMF0gPSBLRVlfUE9XRVIsCkBAIC0yNTExLDMgKzI1NzIsMzUgQEAKIAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpOworCisvKiBBVEkgVFYgV29uZGVyIEhEIDYwMCBVU0IKKyAgIERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgwMF0gPSBLRVlfUkVDT1JELAkJLyogUm93IDEgKi8KKwlbMHgwMV0gPSBLRVlfUExBWVBBVVNFLAorCVsweDAyXSA9IEtFWV9TVE9QLAorCVsweDAzXSA9IEtFWV9QT1dFUiwKKwlbMHgwNF0gPSBLRVlfUFJFVklPVVMsCS8qIFJvdyAyICovCisJWzB4MDVdID0gS0VZX1JFV0lORCwKKwlbMHgwNl0gPSBLRVlfRk9SV0FSRCwKKwlbMHgwN10gPSBLRVlfTkVYVCwKKwlbMHgwOF0gPSBLRVlfRVBHLAkJLyogUm93IDMgKi8KKwlbMHgwOV0gPSBLRVlfSE9NRSwKKwlbMHgwYV0gPSBLRVlfTUVOVSwKKwlbMHgwYl0gPSBLRVlfQ0hBTk5FTFVQLAorCVsweDBjXSA9IEtFWV9CQUNLLAkJLyogUm93IDQgKi8KKwlbMHgwZF0gPSBLRVlfVVAsCisJWzB4MGVdID0gS0VZX0lORk8sCisJWzB4MGZdID0gS0VZX0NIQU5ORUxET1dOLAorCVsweDEwXSA9IEtFWV9MRUZULAkJLyogUm93IDUgKi8KKwlbMHgxMV0gPSBLRVlfU0VMRUNULAorCVsweDEyXSA9IEtFWV9SSUdIVCwKKwlbMHgxM10gPSBLRVlfVk9MVU1FVVAsCisJWzB4MTRdID0gS0VZX0xBU1QsCQkvKiBSb3cgNiAqLworCVsweDE1XSA9IEtFWV9ET1dOLAorCVsweDE2XSA9IEtFWV9NVVRFLAorCVsweDE3XSA9IEtFWV9WT0xVTUVET1dOLAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCAxMjdiMDUyLi43ZDg0NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAvKgogCURFQl9FRSgoImlub2RlOiVwLCBmaWxlOiVwLCBjbWQ6JWQsIGFyZzolbGlcbiIsaW5vZGUsIGZpbGUsIGNtZCwgYXJnKSk7CiAqLwotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7CiB9CiAKIHN0YXRpYyBpbnQgZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKaW5kZXggZmUwYmQ1NS4uMTAxYjAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwpAQCAtODM0LDcgKzgzNCw3IEBACiAgKiBjb3B5aW5nIGlzIGRvbmUgYWxyZWFkeSwgYXJnIGlzIGEga2VybmVsIHBvaW50ZXIuCiAgKi8KIAotc3RhdGljIGludCBfX3NhYTcxNDZfdmlkZW9fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxNDZfZmggKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CkBAIC0xMjE2LDE3ICsxMjE2LDExIEBACiAjZW5kaWYKIAlkZWZhdWx0OgogCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLCBhcmcsCi0JCQkJCQkgIF9fc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7CisJCQkJCQkgIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IHNhYTcxNDZfdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gX19zYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggYTg4NzgyNC4uMzE1MjJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTM1OTgsNyArMzU5OCw3IEBACiAJCTc2LCA3NywgOTEsIDEzNCwgMTM1LCAxMzcsIDE0NywKIAkJMTU2LCAxNjYsIDE2NywgMTY4LCAyNSB9OwogCi0JKmNvdW50ID0gc2l6ZW9mKFJlZ0FkZHIpIC8gc2l6ZW9mKHU4KTsKKwkqY291bnQgPSBBUlJBWV9TSVpFKFJlZ0FkZHIpOwogCiAJc3RhdHVzICs9IE1YTF9CbG9ja0luaXQoZmUpOwogCkBAIC0zNjMwLDcgKzM2MzAsNyBAQAogCSovCiAjZW5kaWYKIAotCSpjb3VudCA9IHNpemVvZihSZWdBZGRyKSAvIHNpemVvZih1OCk7CisJKmNvdW50ID0gQVJSQVlfU0laRShSZWdBZGRyKTsKIAogCWZvciAoaSA9IDAgOyBpIDwgKmNvdW50OyBpKyspIHsKIAkJUmVnTnVtW2ldID0gUmVnQWRkcltpXTsKQEAgLTM2NDgsNyArMzY0OCw3IEBACiAKIAl1OCBSZWdBZGRyW10gPSB7NDMsIDEzNn07CiAKLQkqY291bnQgPSBzaXplb2YoUmVnQWRkcikgLyBzaXplb2YodTgpOworCSpjb3VudCA9IEFSUkFZX1NJWkUoUmVnQWRkcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKmNvdW50OyBpKyspIHsKIAkJUmVnTnVtW2ldID0gUmVnQWRkcltpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCmluZGV4IDRhNzRmNjUuLmY0ZDkzMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYwpAQCAtODAsMTAgKzgwLDExIEBACiAJCW1vZGUgPSAieHgiOwogCX0KIAotCWlmIChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykKKwlpZiAocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pIHsKIAkJcHJpdi0+c2dJRiA9IDg4OyAvKiBpZiBmcmVxdWVuY3kgaXMgNS41IE1IeiAqLwotCi0JZHByaW50aygic2V0dGluZyB0ZGE4Mjd4IHRvIHN5c3RlbSAlc1xuIiwgbW9kZSk7CisJCWRwcmludGsoInNldHRpbmcgdGRhODI3eCB0byByYWRpbyBGTVxuIik7CisJfSBlbHNlCisJCWRwcmludGsoInNldHRpbmcgdGRhODI3eCB0byBzeXN0ZW0gJXNcbiIsIG1vZGUpOwogfQogCiAKQEAgLTE5OSw3ICsyMDAsNyBAQAogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAKLQlwcml2LT5mcmVxdWVuY3kgPSB0dW5lcl9mcmVxIC0gaWZfZnJlcTsgLy8gRklYTUUKKwlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOwogCiAJcmV0dXJuIDA7CkBAIC0zMDQsNyArMzA1LDcgQEAKIAlyZWcyWzFdID0gMHgwODsgICAvKiBWc3luYyBlbiAqLwogCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAKLQlwcml2LT5mcmVxdWVuY3kgPSBmcmVxICogNjI1MDA7CisJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU5MSw3ICs1OTIsNyBAQAogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAKLQlwcml2LT5mcmVxdWVuY3kgPSB0dW5lcl9mcmVxIC0gaWZfZnJlcTsgLy8gRklYTUUKKwlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOwogCiAJcmV0dXJuIDA7CkBAIC02OTEsNyArNjkyLDcgQEAKIAl0dW5lcl9yZWdbMV0gPSAweDE5ICsgKHByaXYtPmxwc2VsIDw8IDEpOwogCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAKLQlwcml2LT5mcmVxdWVuY3kgPSBmcmVxICogNjI1MDA7CisJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCmluZGV4IGMxMTJiZGQuLjBlZTc5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwpAQCAtMzIsNiArMzIsOSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7CiAKK3N0YXRpYyBpbnQgZGVlbXBoYXNpc181MDsKK01PRFVMRV9QQVJNX0RFU0MoZGVlbXBoYXNpc181MCwgIjAgLSA3NXVzIGRlZW1waGFzaXM7IDEgLSA1MHVzIGRlZW1waGFzaXMiKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdGRhODI5MF9wcml2IHsKQEAgLTEzOSw5ICsxNDIsMzQgQEAKIAkJbW9kZSA9ICJ4eCI7CiAJfQogCi0JdHVuZXJfZGJnKCJzZXR0aW5nIHRkYTgyOXggdG8gc3lzdGVtICVzXG4iLCBtb2RlKTsKKwlpZiAocGFyYW1zLT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pIHsKKwkJcHJpdi0+dGRhODI5MF9lYXN5X21vZGUgPSAweDAxOwkJLyogU3RhcnQgd2l0aCBNTiB2YWx1ZXMgKi8KKwkJdHVuZXJfZGJnKCJzZXR0aW5nIHRvIHJhZGlvIEZNXG4iKTsKKwl9IGVsc2UgeworCQl0dW5lcl9kYmcoInNldHRpbmcgdGRhODI5eCB0byBzeXN0ZW0gJXNcbiIsIG1vZGUpOworCX0KIH0KIAorc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHNlcVsyXTsKK30gZm1fbW9kZVtdID0geworCXsgeyAweDAxLCAweDgxfSB9LAkvKiBQdXQgZGV2aWNlIGludG8gZXhwZXJ0IG1vZGUgKi8KKwl7IHsgMHgwMywgMHg0OH0gfSwJLyogRGlzYWJsZSBOT1RDSCBhbmQgVklERU8gZmlsdGVycyAqLworCXsgeyAweDA0LCAweDA0fSB9LAkvKiBEaXNhYmxlIGNvbG9yIGNhcnJpZXIgZmlsdGVyIChTU0lGKSAqLworCXsgeyAweDA1LCAweDA0fSB9LAkvKiBBREMgaGVhZHJvb20gKi8KKwl7IHsgMHgwNiwgMHgxMH0gfSwJLyogZ3JvdXAgZGVsYXkgZmxhdCAqLworCisJeyB7IDB4MDcsIDB4MDB9IH0sCS8qIHVzZSB0aGUgc2FtZSByYWRpbyBEVE8gdmFsdWVzIGFzIGEgdGRhODI5NSAqLworCXsgeyAweDA4LCAweDAwfSB9LAorCXsgeyAweDA5LCAweDgwfSB9LAorCXsgeyAweDBhLCAweGRhfSB9LAorCXsgeyAweDBiLCAweDRifSB9LAorCXsgeyAweDBjLCAweDY4fSB9LAorCisJeyB7IDB4MGQsIDB4MDB9IH0sCS8qIFBMTCBvZmYsIG5vIHZpZGVvIGNhcnJpZXIgZGV0ZWN0ICovCisJeyB7IDB4MTQsIDB4MDB9IH0sCS8qIGRpc2FibGUgYXV0byBtdXRlIGlmIG5vIHZpZGVvICovCit9OworCiBzdGF0aWMgdm9pZCB0ZGE4MjkwX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgICAgc3RydWN0IGFuYWxvZ19wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CkBAIC0xNzgsMTUgKzIwNiwzMCBAQAogCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgc29mdF9yZXNldCwgMik7CiAJbXNsZWVwKDEpOwogCi0JZXhwZXJ0X21vZGVbMV0gPSBwcml2LT50ZGE4MjkwX2Vhc3lfbW9kZSArIDB4ODA7Ci0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBleHBlcnRfbW9kZSwgMik7Ci0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBnYWluc2V0X29mZiwgMik7Ci0JdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBpZl9hZ2Nfc3BkLCAyKTsKLQlpZiAocHJpdi0+dGRhODI5MF9lYXN5X21vZGUgJiAweDYwKQotCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGFkY19oZWFkXzksIDIpOwotCWVsc2UKLQkJdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBhZGNfaGVhZF82LCAyKTsKLQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIHBsbF9id19ub20sIDIpOworCWlmIChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgY2hhciBkZWVtcGhhc2lzW10gID0geyAweDEzLCAxIH07CisKKwkJLyogRklYTUU6IGFsbG93IHVzaW5nIGEgZGlmZmVyZW50IGRlZW1waGFzaXMgKi8KKworCQlpZiAoZGVlbXBoYXNpc181MCkKKwkJCWRlZW1waGFzaXNbMV0gPSAyOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZtX21vZGUpOyBpKyspCisJCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGZtX21vZGVbaV0uc2VxLCAyKTsKKworCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGRlZW1waGFzaXMsIDIpOworCX0gZWxzZSB7CisJCWV4cGVydF9tb2RlWzFdID0gcHJpdi0+dGRhODI5MF9lYXN5X21vZGUgKyAweDgwOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGV4cGVydF9tb2RlLCAyKTsKKwkJdHVuZXJfaTJjX3hmZXJfc2VuZCgmcHJpdi0+aTJjX3Byb3BzLCBnYWluc2V0X29mZiwgMik7CisJCXR1bmVyX2kyY194ZmVyX3NlbmQoJnByaXYtPmkyY19wcm9wcywgaWZfYWdjX3NwZCwgMik7CisJCWlmIChwcml2LT50ZGE4MjkwX2Vhc3lfbW9kZSAmIDB4NjApCisJCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGFkY19oZWFkXzksIDIpOworCQllbHNlCisJCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIGFkY19oZWFkXzYsIDIpOworCQl0dW5lcl9pMmNfeGZlcl9zZW5kKCZwcml2LT5pMmNfcHJvcHMsIHBsbF9id19ub20sIDIpOworCX0KIAogCXRkYTgyOTBfaTJjX2JyaWRnZShmZSwgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE5ODg3LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhOTg4Ny5jCmluZGV4IGZmMTc4OGMuLjU0NGNkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE5ODg3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTk4ODcuYwpAQCAtMTgwLDExICsxODAsMTAgQEAKIAl9LHsKIAkJLnN0ZCAgID0gVjRMMl9TVERfU0VDQU1fQiB8IFY0TDJfU1REX1NFQ0FNX0cgfCBWNEwyX1NURF9TRUNBTV9ILAogCQkubmFtZSAgPSAiU0VDQU0tQkdIIiwKLQkJLmIgICAgID0gKCBjUG9zaXRpdmVBbVRWICB8CisJCS5iICAgICA9ICggY05lZ2F0aXZlRm1UViAgfAogCQkJICAgY1FTUyAgICAgICAgICAgKSwKIAkJLmMgICAgID0gKCBjVG9wRGVmYXVsdCksCi0JCS5lICAgICA9ICggY0dhdGluZ18zNgkgIHwKLQkJCSAgIGNBdWRpb0lGXzVfNSAgIHwKKwkJLmUgICAgID0gKCBjQXVkaW9JRl81XzUgICB8CiAJCQkgICBjVmlkZW9JRl8zOF85MCApLAogCX0sewogCQkuc3RkICAgPSBWNEwyX1NURF9TRUNBTV9MLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCmluZGV4IGI2NWU2ODAuLjFhZGNlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKQEAgLTI4LDYgKzI4LDEyIEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKIAorc3RhdGljIGludCBub19wb3dlcm9mZjsKK21vZHVsZV9wYXJhbShub19wb3dlcm9mZiwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICIwIChkZWZhdWx0KSBwb3dlcnMgZGV2aWNlIG9mZiB3aGVuIG5vdCB1c2VkLlxuIgorCSIxIGtlZXAgZGV2aWNlIGVuZXJnaXplZCBhbmQgd2l0aCB0dW5lciByZWFkeSBhbGwgdGhlIHRpbWVzLlxuIgorCSIgIEZhc3RlciwgYnV0IGNvbnN1bWVzIG1vcmUgcG93ZXIgYW5kIGtlZXBzIHRoZSBkZXZpY2UgaG90dGVyXG4iKTsKKwogc3RhdGljIGNoYXIgYXVkaW9fc3RkWzhdOwogbW9kdWxlX3BhcmFtX3N0cmluZyhhdWRpb19zdGQsIGF1ZGlvX3N0ZCwgc2l6ZW9mKGF1ZGlvX3N0ZCksIDApOwogTU9EVUxFX1BBUk1fREVTQyhhdWRpb19zdGQsCkBAIC0xMDkxLDYgKzEwOTcsMzQgQEAKIAkJCQlUX0RJR0lUQUxfVFYsIHR5cGUsIDAsIGRlbW9kKTsKIH0KIAorc3RhdGljIGludCB4YzIwMjhfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHhjMjAyOF9kYXRhICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJjID0gMDsKKworCS8qIEF2b2lkIGZpcm13YXJlIHJlbG9hZCBvbiBzbG93IGRldmljZXMgKi8KKwlpZiAobm9fcG93ZXJvZmYpCisJCXJldHVybiAwOworCisJdHVuZXJfZGJnKCJQdXR0aW5nIHhjMjAyOC8zMDI4IGludG8gcG93ZXJvZmYgbW9kZS5cbiIpOworCWlmIChkZWJ1ZyA+IDEpIHsKKwkJdHVuZXJfZGJnKCJQcmludGluZyBzbGVlcCBzdGFjayB0cmFjZTpcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJfQorCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAocHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMjAyKQorCQlyYyA9IHNlbmRfc2VxKHByaXYsIHsweDAwLCAweDA4LCAweDAwLCAweDAwfSk7CisJZWxzZQorCQlyYyA9IHNlbmRfc2VxKHByaXYsIHsweDgwLCAweDA4LCAweDAwLCAweDAwfSk7CisKKwlwcml2LT5jdXJfZncudHlwZSA9IDA7CS8qIG5lZWQgZmlybXdhcmUgcmVsb2FkICovCisKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJjOworfQogCiBzdGF0aWMgaW50IHhjMjAyOF9kdmJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKQEAgLTExNzEsNiArMTIwNSw3IEBACiAJLmdldF9mcmVxdWVuY3kgICAgID0geGMyMDI4X2dldF9mcmVxdWVuY3ksCiAJLmdldF9yZl9zdHJlbmd0aCAgID0geGMyMDI4X3NpZ25hbCwKIAkuc2V0X3BhcmFtcyAgICAgICAgPSB4YzIwMjhfc2V0X3BhcmFtcywKKwkuc2xlZXAgICAgICAgICAgICAgPSB4YzIwMjhfc2xlZXAsCiB9OwogCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzIwMjhfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCmluZGV4IGUxMmQxM2UuLjQ5M2NlOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKQEAgLTM2LDEwICszNiw2IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAKLXN0YXRpYyBpbnQgeGM1MDAwX2xvYWRfZndfb25fYXR0YWNoOwotbW9kdWxlX3BhcmFtX25hbWVkKGluaXRfZncsIHhjNTAwMF9sb2FkX2Z3X29uX2F0dGFjaCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5pdF9mdywgIkxvYWQgZmlybXdhcmUgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbi4iKTsKLQogc3RhdGljIERFRklORV9NVVRFWCh4YzUwMDBfbGlzdF9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0KTsKIApAQCAtMTAxNyw5ICsxMDEzLDYgQEAKIAltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmeGM1MDAwX3R1bmVyX29wcywKIAkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CiAKLQlpZiAoeGM1MDAwX2xvYWRfZndfb25fYXR0YWNoKQotCQl4YzUwMDBfaW5pdChmZSk7Ci0KIAlyZXR1cm4gZmU7CiBmYWlsOgogCW11dGV4X3VubG9jaygmeGM1MDAwX2xpc3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggMGJjZDg1Mi4uNDBlYmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC0yLDYgKzIsMTkgQEAKICMgRFZCIGRldmljZSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBEVkJfRFlOQU1JQ19NSU5PUlMKKwlib29sICJEeW5hbWljIERWQiBtaW5vciBhbGxvY2F0aW9uIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIERWQiBzdWJzeXN0ZW0gd2lsbCB1c2UgZHluYW1pYyBtaW5vcgorCSAgYWxsb2NhdGlvbiBmb3IgYW55IGRldmljZSB0aGF0IHVzZXMgdGhlIERWQiBtYWpvciBudW1iZXIuCisJICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBoYXZlIG1vcmUgdGhhbiA0IG9mIGEgc2luZ2xlIHR5cGUKKwkgIG9mIGRldmljZSAobGlrZSBkZW11eGVzIGFuZCBmcm9udGVuZHMpIHBlciBhZGFwdGVyLCBidXQgdWRldgorCSAgd2lsbCBiZSByZXF1aXJlZCB0byBtYW5hZ2UgdGhlIGRldmljZSBub2Rlcy4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgc2F5IE4gaGVyZS4KKwogbWVudWNvbmZpZyBEVkJfQ0FQVFVSRV9EUklWRVJTCiAJYm9vbCAiRFZCL0FUU0MgYWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGIzNDMwMWQuLmE4YzYyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTE0LDYgKzE0LDcgQEAKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX1RVTkVSX0NYMjQxMTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgZGlnaXRhbCBUViByZWNlaXZlciBjaGlwIG1hZGUgYnkgQjJDMiBJbmMuIGluY2x1ZGVkIGluCiAJICBUZWNobmlzYXRzIFBDSSBjYXJkcyBhbmQgVVNCIGJveGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IGEyMWNlOWUuLmY0OGY3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNjgsNyArMzY3LDcgQEAKIHsKIAlkbTExMDVkdmItPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRtMTEwNWR2Yi0+cGRldiwgNipETTExMDVfRE1BX0JZVEVTLCAmZG0xMTA1ZHZiLT5kbWFfYWRkcik7CiAKLQlyZXR1cm4gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtMTEwNWR2Yi0+cGRldiwgZG0xMTA1ZHZiLT5kbWFfYWRkcik7CisJcmV0dXJuICFkbTExMDVkdmItPnRzX2J1ZjsKIH0KIAogc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDdhNDIxZTkuLjE3MWY5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3RlcF9zaXplOwogCWludCBxdWFsaXR5OwogCXVuc2lnbmVkIGludCBjaGVja193cmFwcGVkOworCWVudW0gZHZiZmVfc2VhcmNoIGFsZ29fc3RhdHVzOwogfTsKIAogc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX3dha2V1cChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CkBAIC01MTYsNiArNTE3LDggQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlmZV9zdGF0dXNfdCBzOworCWVudW0gZHZiZmVfYWxnbyBhbGdvOworCiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXM7CiAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwpAQCAtNTYyLDIzICs1NjUsODAgQEAKIAogCQkvKiBkbyBhbiBpdGVyYXRpb24gb2YgdGhlIHR1bmluZyBsb29wICovCiAJCWlmIChmZS0+b3BzLmdldF9mcm9udGVuZF9hbGdvKSB7Ci0JCQlpZiAoZmUtPm9wcy5nZXRfZnJvbnRlbmRfYWxnbyhmZSkgPT0gRkVfQUxHT19IVykgewotCQkJCS8qIGhhdmUgd2UgYmVlbiBhc2tlZCB0byByZXR1bmU/ICovCi0JCQkJcGFyYW1zID0gTlVMTDsKKwkJCWFsZ28gPSBmZS0+b3BzLmdldF9mcm9udGVuZF9hbGdvKGZlKTsKKwkJCXN3aXRjaCAoYWxnbykgeworCQkJY2FzZSBEVkJGRV9BTEdPX0hXOgorCQkJCWRwcmludGsoIiVzOiBGcm9udGVuZCBBTEdPID0gRFZCRkVfQUxHT19IV1xuIiwgX19mdW5jX18pOworCQkJCXBhcmFtcyA9IE5VTEw7IC8qIGhhdmUgd2UgYmVlbiBhc2tlZCB0byBSRVRVTkUgPyAqLworCiAJCQkJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1JFVFVORSkgeworCQkJCQlkcHJpbnRrKCIlczogUmV0dW5lIHJlcXVlc3RlZCwgRkVTVEFURV9SRVRVTkVcbiIsIF9fZnVuY19fKTsKIAkJCQkJcGFyYW1zID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKIAkJCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfVFVORUQ7CiAJCQkJfQogCi0JCQkJZmUtPm9wcy50dW5lKGZlLCBwYXJhbXMsIGZlcHJpdi0+dHVuZV9tb2RlX2ZsYWdzLCAmZmVwcml2LT5kZWxheSwgJnMpOwotCQkJCWlmIChzICE9IGZlcHJpdi0+c3RhdHVzKSB7CisJCQkJaWYgKGZlLT5vcHMudHVuZSkKKwkJCQkJZmUtPm9wcy50dW5lKGZlLCBwYXJhbXMsIGZlcHJpdi0+dHVuZV9tb2RlX2ZsYWdzLCAmZmVwcml2LT5kZWxheSwgJnMpOworCisJCQkJaWYgKHMgIT0gZmVwcml2LT5zdGF0dXMgJiYgIShmZXByaXYtPnR1bmVfbW9kZV9mbGFncyAmIEZFX1RVTkVfTU9ERV9PTkVTSE9UKSkgeworCQkJCQlkcHJpbnRrKCIlczogc3RhdGUgY2hhbmdlZCwgYWRkaW5nIGN1cnJlbnQgc3RhdGVcbiIsIF9fZnVuY19fKTsKIAkJCQkJZHZiX2Zyb250ZW5kX2FkZF9ldmVudChmZSwgcyk7CiAJCQkJCWZlcHJpdi0+c3RhdHVzID0gczsKIAkJCQl9Ci0JCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJCWNhc2UgRFZCRkVfQUxHT19TVzoKKwkJCQlkcHJpbnRrKCIlczogRnJvbnRlbmQgQUxHTyA9IERWQkZFX0FMR09fU1dcbiIsIF9fZnVuY19fKTsKIAkJCQlkdmJfZnJvbnRlbmRfc3d6aWd6YWcoZmUpOwotCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJCWNhc2UgRFZCRkVfQUxHT19DVVNUT006CisJCQkJcGFyYW1zID0gTlVMTDsgLyogaGF2ZSB3ZSBiZWVuIGFza2VkIHRvIFJFVFVORSA/CSovCisJCQkJZHByaW50aygiJXM6IEZyb250ZW5kIEFMR08gPSBEVkJGRV9BTEdPX0NVU1RPTSwgc3RhdGU9JWRcbiIsIF9fZnVuY19fLCBmZXByaXYtPnN0YXRlKTsKKwkJCQlpZiAoZmVwcml2LT5zdGF0ZSAmIEZFU1RBVEVfUkVUVU5FKSB7CisJCQkJCWRwcmludGsoIiVzOiBSZXR1bmUgcmVxdWVzdGVkLCBGRVNUQVRfUkVUVU5FXG4iLCBfX2Z1bmNfXyk7CisJCQkJCXBhcmFtcyA9ICZmZXByaXYtPnBhcmFtZXRlcnM7CisJCQkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX1RVTkVEOworCQkJCX0KKwkJCQkvKiBDYXNlIHdoZXJlIHdlIGFyZSBnb2luZyB0byBzZWFyY2ggZm9yIGEgY2FycmllcgorCQkJCSAqIFVzZXIgYXNrZWQgdXMgdG8gcmV0dW5lIGFnYWluIGZvciBzb21lIHJlYXNvbiwgcG9zc2libHkKKwkJCQkgKiByZXF1ZXN0aW5nIGEgc2VhcmNoIHdpdGggYSBuZXcgc2V0IG9mIHBhcmFtZXRlcnMKKwkJCQkgKi8KKwkJCQlpZiAoZmVwcml2LT5hbGdvX3N0YXR1cyAmIERWQkZFX0FMR09fU0VBUkNIX0FHQUlOKSB7CisJCQkJCWlmIChmZS0+b3BzLnNlYXJjaCkgeworCQkJCQkJZmVwcml2LT5hbGdvX3N0YXR1cyA9IGZlLT5vcHMuc2VhcmNoKGZlLCAmZmVwcml2LT5wYXJhbWV0ZXJzKTsKKwkJCQkJCS8qIFdlIGRpZCBkbyBhIHNlYXJjaCBhcyB3YXMgcmVxdWVzdGVkLCB0aGUgZmxhZ3MgYXJlCisJCQkJCQkgKiBub3cgdW5zZXQgYXMgd2VsbCBhbmQgaGFzIHRoZSBmbGFncyB3cnQgdG8gc2VhcmNoLgorCQkJCQkJICovCisJCQkJCX0gZWxzZSB7CisJCQkJCQlmZXByaXYtPmFsZ29fc3RhdHVzICY9IH5EVkJGRV9BTEdPX1NFQVJDSF9BR0FJTjsKKwkJCQkJfQorCQkJCX0KKwkJCQkvKiBUcmFjayB0aGUgY2FycmllciBpZiB0aGUgc2VhcmNoIHdhcyBzdWNjZXNzZnVsICovCisJCQkJaWYgKGZlcHJpdi0+YWxnb19zdGF0dXMgPT0gRFZCRkVfQUxHT19TRUFSQ0hfU1VDQ0VTUykgeworCQkJCQlpZiAoZmUtPm9wcy50cmFjaykKKwkJCQkJCWZlLT5vcHMudHJhY2soZmUsICZmZXByaXYtPnBhcmFtZXRlcnMpOworCQkJCX0gZWxzZSB7CisJCQkJCWZlcHJpdi0+YWxnb19zdGF0dXMgfD0gRFZCRkVfQUxHT19TRUFSQ0hfQUdBSU47CisJCQkJCWZlcHJpdi0+ZGVsYXkgPSBIWiAvIDI7CisJCQkJfQorCQkJCWZlLT5vcHMucmVhZF9zdGF0dXMoZmUsICZzKTsKKwkJCQlpZiAocyAhPSBmZXByaXYtPnN0YXR1cykgeworCQkJCQlkdmJfZnJvbnRlbmRfYWRkX2V2ZW50KGZlLCBzKTsgLyogdXBkYXRlIGV2ZW50IGxpc3QgKi8KKwkJCQkJZmVwcml2LT5zdGF0dXMgPSBzOworCQkJCQlpZiAoIShzICYgRkVfSEFTX0xPQ0spKSB7CisJCQkJCQlmZXByaXYtPmRlbGF5ID0gSFogLyAxMDsKKwkJCQkJCWZlcHJpdi0+YWxnb19zdGF0dXMgfD0gRFZCRkVfQUxHT19TRUFSQ0hfQUdBSU47CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmZXByaXYtPmRlbGF5ID0gNjAgKiBIWjsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZHByaW50aygiJXM6IFVOREVGSU5FRCBBTEdPICFcbiIsIF9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCWR2Yl9mcm9udGVuZF9zd3ppZ3phZyhmZSk7CisJCX0KIAl9CiAKIAlpZiAoZHZiX3Bvd2VyZG93bl9vbl9zbGVlcCkgewpAQCAtMTIyNiw2ICsxMjg2LDkgQEAKIAkJZHByaW50aygiJXMoKSBGaW5hbGlzZWQgcHJvcGVydHkgY2FjaGVcbiIsIF9fZnVuY19fKTsKIAkJZHR2X3Byb3BlcnR5X2NhY2hlX3N1Ym1pdChmZSk7CiAKKwkJLyogUmVxdWVzdCB0aGUgc2VhcmNoIGFsZ29yaXRobSB0byBzZWFyY2ggKi8KKwkJZmVwcml2LT5hbGdvX3N0YXR1cyB8PSBEVkJGRV9BTEdPX1NFQVJDSF9BR0FJTjsKKwogCQlyIHw9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9GUk9OVEVORCwKIAkJCSZmZXByaXYtPnBhcmFtZXRlcnMpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggZGI0YTYzYi4uZTE3NmRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTY5LDYgKzY5LDEyNSBAQAogCXU2NCBzdGQ7CiB9OwogCitlbnVtIGR2YmZlX21vZGNvZCB7CisJRFZCRkVfTU9EQ09EX0RVTU1ZX1BMRlJBTUUJPSAwLAorCURWQkZFX01PRENPRF9RUFNLXzFfNCwKKwlEVkJGRV9NT0RDT0RfUVBTS18xXzMsCisJRFZCRkVfTU9EQ09EX1FQU0tfMl81LAorCURWQkZFX01PRENPRF9RUFNLXzFfMiwKKwlEVkJGRV9NT0RDT0RfUVBTS18zXzUsCisJRFZCRkVfTU9EQ09EX1FQU0tfMl8zLAorCURWQkZFX01PRENPRF9RUFNLXzNfNCwKKwlEVkJGRV9NT0RDT0RfUVBTS180XzUsCisJRFZCRkVfTU9EQ09EX1FQU0tfNV82LAorCURWQkZFX01PRENPRF9RUFNLXzhfOSwKKwlEVkJGRV9NT0RDT0RfUVBTS185XzEwLAorCURWQkZFX01PRENPRF84UFNLXzNfNSwKKwlEVkJGRV9NT0RDT0RfOFBTS18yXzMsCisJRFZCRkVfTU9EQ09EXzhQU0tfM180LAorCURWQkZFX01PRENPRF84UFNLXzVfNiwKKwlEVkJGRV9NT0RDT0RfOFBTS184XzksCisJRFZCRkVfTU9EQ09EXzhQU0tfOV8xMCwKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzJfMywKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzNfNCwKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzRfNSwKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzVfNiwKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzhfOSwKKwlEVkJGRV9NT0RDT0RfMTZBUFNLXzlfMTAsCisJRFZCRkVfTU9EQ09EXzMyQVBTS18zXzQsCisJRFZCRkVfTU9EQ09EXzMyQVBTS180XzUsCisJRFZCRkVfTU9EQ09EXzMyQVBTS181XzYsCisJRFZCRkVfTU9EQ09EXzMyQVBTS184XzksCisJRFZCRkVfTU9EQ09EXzMyQVBTS185XzEwLAorCURWQkZFX01PRENPRF9SRVNFUlZFRF8xLAorCURWQkZFX01PRENPRF9CUFNLXzFfMywKKwlEVkJGRV9NT0RDT0RfQlBTS18xXzQsCisJRFZCRkVfTU9EQ09EX1JFU0VSVkVEXzIKK307CisKK2VudW0gdHVuZXJfcGFyYW0geworCURWQkZFX1RVTkVSX0ZSRVFVRU5DWQkJPSAoMSA8PCAgMCksCisJRFZCRkVfVFVORVJfVFVORVJTVEVQCQk9ICgxIDw8ICAxKSwKKwlEVkJGRV9UVU5FUl9JRkZSRVEJCT0gKDEgPDwgIDIpLAorCURWQkZFX1RVTkVSX0JBTkRXSURUSAkJPSAoMSA8PCAgMyksCisJRFZCRkVfVFVORVJfUkVGQ0xPQ0sJCT0gKDEgPDwgIDQpLAorCURWQkZFX1RVTkVSX0lRU0VOU0UJCT0gKDEgPDwgIDUpLAorCURWQkZFX1RVTkVSX0RVTU1ZCQk9ICgxIDw8IDMxKQorfTsKKworLyoKKyAqIEFMR09fSFc6IChIYXJkd2FyZSBBbGdvcml0aG0pCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZXZpY2VzIHRoYXQgc3VwcG9ydCB0aGlzIGFsZ29yaXRobSBkbyBldmVyeXRoaW5nIGluIGhhcmR3YXJlCisgKiBhbmQgbm8gc29mdHdhcmUgc3VwcG9ydCBpcyBuZWVkZWQgdG8gaGFuZGxlIHRoZW0uCisgKiBSZXF1ZXN0aW5nIHRoZXNlIGRldmljZXMgdG8gTE9DSyBpcyB0aGUgb25seSB0aGluZyByZXF1aXJlZCwKKyAqIGRldmljZSBpcyBzdXBwb3NlZCB0byBkbyBldmVyeXRoaW5nIGluIHRoZSBoYXJkd2FyZS4KKyAqCisgKiBBTEdPX1NXOiAoU29mdHdhcmUgQWxnb3JpdGhtKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlc2UgYXJlIGR1bWIgZGV2aWNlcywgdGhhdCByZXF1aXJlIHNvZnR3YXJlIHRvIGRvIGV2ZXJ5dGhpbmcKKyAqCisgKiBBTEdPX0NVU1RPTTogKEN1c3RvbWl6YWJsZSBBZ29yaXRobSkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERldmljZXMgaGF2aW5nIHRoaXMgYWxnb3JpdGhtIGNhbiBiZSBjdXN0b21pemVkIHRvIGhhdmUgc3BlY2lmaWMKKyAqIGFsZ29yaXRobXMgaW4gdGhlIGZyb250ZW5kIGRyaXZlciwgcmF0aGVyIHRoYW4gc2ltcGx5IGRvaW5nIGEKKyAqIHNvZnR3YXJlIHppZy16YWcuIEluIHRoaXMgY2FzZSB0aGUgemlnemFnIG1heWJlIGhhcmR3YXJlIGFzc2lzdGVkCisgKiBvciBpdCBtYXliZSBjb21wbGV0ZWx5IGRvbmUgaW4gaGFyZHdhcmUuIEluIGFsbCBjYXNlcywgdXNhZ2Ugb2YKKyAqIHRoaXMgYWxnb3JpdGhtLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzZWFyY2ggYW5kIHRyYWNrCisgKiBjYWxsYmFja3MsIHV0aWxpemVzIHRoZSBkcml2ZXIgc3BlY2lmaWMgYWxnb3JpdGhtLgorICoKKyAqIEFMR09fUkVDT1ZFUlk6IChSZWNvdmVyeSBBbGdvcml0aG0pCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGVzZSBkZXZpY2VzIGhhdmUgQVVUTyByZWNvdmVyeSBjYXBhYmlsaXRpZXMgZnJvbSBMT0NLIGZhaWx1cmUKKyAqLworZW51bSBkdmJmZV9hbGdvIHsKKwlEVkJGRV9BTEdPX0hXCQkJPSAoMSA8PCAgMCksCisJRFZCRkVfQUxHT19TVwkJCT0gKDEgPDwgIDEpLAorCURWQkZFX0FMR09fQ1VTVE9NCQk9ICgxIDw8ICAyKSwKKwlEVkJGRV9BTEdPX1JFQ09WRVJZCQk9ICgxIDw8IDMxKQorfTsKKworc3RydWN0IHR1bmVyX3N0YXRlIHsKKwl1MzIgZnJlcXVlbmN5OworCXUzMiB0dW5lcnN0ZXA7CisJdTMyIGlmcmVxOworCXUzMiBiYW5kd2lkdGg7CisJdTMyIGlxc2Vuc2U7CisJdTMyIHJlZmNsb2NrOworfTsKKworLyoKKyAqIHNlYXJjaCBjYWxsYmFjayBwb3NzaWJsZSByZXR1cm4gc3RhdHVzCisgKgorICogRFZCRkVfQUxHT19TRUFSQ0hfU1VDQ0VTUworICogVGhlIGZyb250ZW5kIHNlYXJjaCBhbGdvcml0aG0gY29tcGxldGVkIGFuZCByZXR1cm5lZCBzdWNjZXNmdWxseQorICoKKyAqIERWQkZFX0FMR09fU0VBUkNIX0FTTEVFUAorICogVGhlIGZyb250ZW5kIHNlYXJjaCBhbGdvcml0aG0gaXMgc2xlZXBpbmcKKyAqCisgKiBEVkJGRV9BTEdPX1NFQVJDSF9GQUlMRUQKKyAqIFRoZSBmcm9udGVuZCBzZWFyY2ggZm9yIGEgc2lnbmFsIGZhaWxlZAorICoKKyAqIERWQkZFX0FMR09fU0VBUkNIX0lOVkFMSUQKKyAqIFRoZSBmcm9udGVuZCBzZWFyY2ggYWxnb3JpdGggd2FzIHByb2JhYmx5IHN1cHBsaWVkIHdpdGggaW52YWxpZAorICogcGFyYW1ldGVycyBhbmQgdGhlIHNlYXJjaCBpcyBhbiBpbnZhbGlkIG9uZQorICoKKyAqIERWQkZFX0FMR09fU0VBUkNIX0VSUk9SCisgKiBUaGUgZnJvbnRlbmQgc2VhcmNoIGFsZ29yaXRobSBmYWlsZWQgZHVlIHRvIHNvbWUgZXJyb3IKKyAqCisgKiBEVkJGRV9BTEdPX1NFQVJDSF9BR0FJTgorICogVGhlIGZyb250ZW5kIHNlYXJjaCBhbGdvcml0aG0gd2FzIHJlcXVlc3RlZCB0byBzZWFyY2ggYWdhaW4KKyAqLworZW51bSBkdmJmZV9zZWFyY2ggeworCURWQkZFX0FMR09fU0VBUkNIX1NVQ0NFU1MJPSAoMSA8PCAgMCksCisJRFZCRkVfQUxHT19TRUFSQ0hfQVNMRUVQCT0gKDEgPDwgIDEpLAorCURWQkZFX0FMR09fU0VBUkNIX0ZBSUxFRAk9ICgxIDw8ICAyKSwKKwlEVkJGRV9BTEdPX1NFQVJDSF9JTlZBTElECT0gKDEgPDwgIDMpLAorCURWQkZFX0FMR09fU0VBUkNIX0FHQUlOCQk9ICgxIDw8ICA0KSwKKwlEVkJGRV9BTEdPX1NFQVJDSF9FUlJPUgkJPSAoMSA8PCAzMSksCit9OworCisKIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHsKIAogCXN0cnVjdCBkdmJfdHVuZXJfaW5mbyBpbmZvOwpAQCAtOTksNiArMjE4LDEzIEBACiAJICogdHVuZXJzIHdoaWNoIHJlcXVpcmUgc29waGlzdGljYXRlZCB0dW5pbmcgbG9vcHMsIGNvbnRyb2xsaW5nIGVhY2ggcGFyYW1ldGVyIHNlcGVyYXRlbHkuICovCiAJaW50ICgqc2V0X2ZyZXF1ZW5jeSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBmcmVxdWVuY3kpOwogCWludCAoKnNldF9iYW5kd2lkdGgpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKTsKKworCS8qCisJICogVGhlc2UgYXJlIHByb3ZpZGVkIHNlcGVyYXRlbHkgZnJvbSBzZXRfcGFyYW1zIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgc2lsaWNvbgorCSAqIHR1bmVycyB3aGljaCByZXF1aXJlIHNvcGhpc3RpY2F0ZWQgdHVuaW5nIGxvb3BzLCBjb250cm9sbGluZyBlYWNoIHBhcmFtZXRlciBzZXBlcmF0ZWx5LgorCSAqLworCWludCAoKnNldF9zdGF0ZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gdHVuZXJfcGFyYW0gcGFyYW0sIHN0cnVjdCB0dW5lcl9zdGF0ZSAqc3RhdGUpOworCWludCAoKmdldF9zdGF0ZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gdHVuZXJfcGFyYW0gcGFyYW0sIHN0cnVjdCB0dW5lcl9zdGF0ZSAqc3RhdGUpOwogfTsKIAogc3RydWN0IGFuYWxvZ19kZW1vZF9pbmZvIHsKQEAgLTE0Miw3ICsyNjgsNyBAQAogCQkgICAgdW5zaWduZWQgaW50ICpkZWxheSwKIAkJICAgIGZlX3N0YXR1c190ICpzdGF0dXMpOwogCS8qIGdldCBmcm9udGVuZCB0dW5pbmcgYWxnb3JpdGhtIGZyb20gdGhlIG1vZHVsZSAqLwotCWludCAoKmdldF9mcm9udGVuZF9hbGdvKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisJZW51bSBkdmJmZV9hbGdvICgqZ2V0X2Zyb250ZW5kX2FsZ28pKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKIAogCS8qIHRoZXNlIHR3byBhcmUgb25seSB1c2VkIGZvciB0aGUgc3d6aWd6YWcgY29kZSAqLwogCWludCAoKnNldF9mcm9udGVuZCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKTsKQEAgLTE2Nyw2ICsyOTMsMTIgQEAKIAlpbnQgKCppMmNfZ2F0ZV9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSk7CiAJaW50ICgqdHNfYnVzX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgYWNxdWlyZSk7CiAKKwkvKiBUaGVzZSBjYWxsYmFja3MgYXJlIGZvciBkZXZpY2VzIHRoYXQgaW1wbGVtZW50IHRoZWlyIG93bgorCSAqIHR1bmluZyBhbGdvcml0aG1zLCByYXRoZXIgdGhhbiBhIHNpbXBsZSBzd3ppZ3phZworCSAqLworCWVudW0gZHZiZmVfc2VhcmNoICgqc2VhcmNoKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKTsKKwlpbnQgKCp0cmFjaykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCk7CisKIAlzdHJ1Y3QgZHZiX3R1bmVyX29wcyB0dW5lcl9vcHM7CiAJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgYW5hbG9nX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCBhMTEzNzQ0Li42YzU3MWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtNTAsMzMgKzUwLDI3IEBACiAJIm5ldCIsICJvc2QiCiB9OwogCisjaWZkZWYgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUworI2RlZmluZSBNQVhfRFZCX01JTk9SUwkJMjU2CisjZGVmaW5lIERWQl9NQVhfSURTCQlNQVhfRFZCX01JTk9SUworI2Vsc2UKICNkZWZpbmUgRFZCX01BWF9JRFMJCTQKICNkZWZpbmUgbnVtczJtaW5vcihudW0sdHlwZSxpZCkJKChudW0gPDwgNikgfCAoaWQgPDwgNCkgfCB0eXBlKQogI2RlZmluZSBNQVhfRFZCX01JTk9SUwkJKERWQl9NQVhfQURBUFRFUlMqNjQpCisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqZHZiX2NsYXNzOwogCi1zdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UqIGR2YmRldl9maW5kX2RldmljZSAoaW50IG1pbm9yKQotewotCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcCwgJmR2Yl9hZGFwdGVyX2xpc3QsIGxpc3RfaGVhZCkgewotCQlzdHJ1Y3QgZHZiX2RldmljZSAqZGV2OwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmFkYXAtPmRldmljZV9saXN0LCBsaXN0X2hlYWQpCi0JCQlpZiAobnVtczJtaW5vcihhZGFwLT5udW0sIGRldi0+dHlwZSwgZGV2LT5pZCkgPT0gbWlub3IpCi0JCQkJcmV0dXJuIGRldjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQorc3RhdGljIHN0cnVjdCBkdmJfZGV2aWNlICpkdmJfbWlub3JzW01BWF9EVkJfTUlOT1JTXTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKG1pbm9yX3J3c2VtKTsKIAogc3RhdGljIGludCBkdmJfZGV2aWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZHZiZGV2ID0gZHZiZGV2X2ZpbmRfZGV2aWNlIChpbWlub3IoaW5vZGUpKTsKKwlkb3duX3JlYWQoJm1pbm9yX3J3c2VtKTsKKwlkdmJkZXYgPSBkdmJfbWlub3JzW2ltaW5vcihpbm9kZSldOwogCiAJaWYgKGR2YmRldiAmJiBkdmJkZXYtPmZvcHMpIHsKIAkJaW50IGVyciA9IDA7CkBAIC05Miw5ICs4NiwxMSBAQAogCQkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KG9sZF9mb3BzKTsKIAkJfQogCQlmb3BzX3B1dChvbGRfZm9wcyk7CisJCXVwX3JlYWQoJm1pbm9yX3J3c2VtKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gZXJyOwogCX0KKwl1cF9yZWFkKCZtaW5vcl9yd3NlbSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMTkyLDYgKzE4OCw3IEBACiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpkdmJkZXZmb3BzOwogCXN0cnVjdCBkZXZpY2UgKmNsc2RldjsKKwlpbnQgbWlub3I7CiAJaW50IGlkOwogCiAJbXV0ZXhfbG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwpAQCAtMjMxLDExICsyMjgsMzEgQEAKIAogCWxpc3RfYWRkX3RhaWwgKCZkdmJkZXYtPmxpc3RfaGVhZCwgJmFkYXAtPmRldmljZV9saXN0KTsKIAorCWRvd25fd3JpdGUoJm1pbm9yX3J3c2VtKTsKKyNpZmRlZiBDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTCisJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgTUFYX0RWQl9NSU5PUlM7IG1pbm9yKyspCisJCWlmIChkdmJfbWlub3JzW21pbm9yXSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwlpZiAobWlub3IgPT0gTUFYX0RWQl9NSU5PUlMpIHsKKwkJa2ZyZWUoZHZiZGV2Zm9wcyk7CisJCWtmcmVlKGR2YmRldik7CisJCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjZWxzZQorCW1pbm9yID0gbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKTsKKyNlbmRpZgorCisJZHZiZGV2LT5taW5vciA9IG1pbm9yOworCWR2Yl9taW5vcnNbbWlub3JdID0gZHZiZGV2OworCXVwX3dyaXRlKCZtaW5vcl9yd3NlbSk7CisKIAltdXRleF91bmxvY2soJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKIAogCWNsc2RldiA9IGRldmljZV9jcmVhdGUoZHZiX2NsYXNzLCBhZGFwLT5kZXZpY2UsCi0JCQkgICAgICAgTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGFkYXAtPm51bSwgdHlwZSwgaWQpKSwKLQkJCSAgICAgICBOVUxMLCAiZHZiJWQuJXMlZCIsIGFkYXAtPm51bSwgZG5hbWVzW3R5cGVdLCBpZCk7CisJCQkgICAgICAgTUtERVYoRFZCX01BSk9SLCBtaW5vciksCisJCQkgICAgICAgZHZiZGV2LCAiZHZiJWQuJXMlZCIsIGFkYXAtPm51bSwgZG5hbWVzW3R5cGVdLCBpZCk7CiAJaWYgKElTX0VSUihjbHNkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIGR2YiVkLiVzJWQgKCVsZClcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgYWRhcC0+bnVtLCBkbmFtZXNbdHlwZV0sIGlkLCBQVFJfRVJSKGNsc2RldikpOwpAQCAtMjQzLDggKzI2MCw3IEBACiAJfQogCiAJZHByaW50ayhLRVJOX0RFQlVHICJEVkI6IHJlZ2lzdGVyIGFkYXB0ZXIlZC8lcyVkIEAgbWlub3I6ICVpICgweCUwMngpXG4iLAotCQlhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQsIG51bXMybWlub3IoYWRhcC0+bnVtLCB0eXBlLCBpZCksCi0JCW51bXMybWlub3IoYWRhcC0+bnVtLCB0eXBlLCBpZCkpOworCQlhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQsIG1pbm9yLCBtaW5vcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1Niw4ICsyNzIsMTEgQEAKIAlpZiAoIWR2YmRldikKIAkJcmV0dXJuOwogCi0JZGV2aWNlX2Rlc3Ryb3koZHZiX2NsYXNzLCBNS0RFVihEVkJfTUFKT1IsIG51bXMybWlub3IoZHZiZGV2LT5hZGFwdGVyLT5udW0sCi0JCSAgICAgICBkdmJkZXYtPnR5cGUsIGR2YmRldi0+aWQpKSk7CisJZG93bl93cml0ZSgmbWlub3JfcndzZW0pOworCWR2Yl9taW5vcnNbZHZiZGV2LT5taW5vcl0gPSBOVUxMOworCXVwX3dyaXRlKCZtaW5vcl9yd3NlbSk7CisKKwlkZXZpY2VfZGVzdHJveShkdmJfY2xhc3MsIE1LREVWKERWQl9NQUpPUiwgZHZiZGV2LT5taW5vcikpOwogCiAJbGlzdF9kZWwgKCZkdmJkZXYtPmxpc3RfaGVhZCk7CiAJa2ZyZWUgKGR2YmRldi0+Zm9wcyk7CkBAIC00MTMsNiArNDMyLDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBkdmJfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWFkZF91ZXZlbnRfdmFyKGVudiwgIkRWQl9ERVZJQ0VfTlVNPSVkIiwgZHZiZGV2LT5pZCk7CisJYWRkX3VldmVudF92YXIoZW52LCAiRFZCX0FEQVBURVJfTlVNPSVkIiwgZHZiZGV2LT5hZGFwdGVyLT5udW0pOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2R2YmRldih2b2lkKQogewogCWludCByZXR2YWw7CkBAIC00MzQsNiArNDYyLDcgQEAKIAkJcmV0dmFsID0gUFRSX0VSUihkdmJfY2xhc3MpOwogCQlnb3RvIGVycm9yOwogCX0KKwlkdmJfY2xhc3MtPmRldl91ZXZlbnQgPSBkdmJfdWV2ZW50OwogCXJldHVybiAwOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggNTc0ZTMzNi4uZGNhNDljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTc0LDYgKzc0LDcgQEAKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwogCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlcjsKIAlpbnQgdHlwZTsKKwlpbnQgbWlub3I7CiAJdTMyIGlkOwogCiAJLyogaW4gdGhlb3J5LCAndXNlcnMnIGNhbiB2YW5pc2ggbm93LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggZTlhYjAyNC4uZTFlOWFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC03MzMsOSArNzMzLDE5IEBACiAJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KIAkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOwogCQkJCWJyZWFrOworCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0RJR0lUVFJBREVfRFZCX1Q6CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJICBhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGUpOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGU7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUpOworCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewotCQkJc3dpdGNoICh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSB7CisJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSB7CiAJCQljYXNlIFVTQl9WSURfTEVBRFRFSzoKIAkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KIAkJCQkgIGFmOTAxNV9yY19rZXlzX2xlYWR0ZWs7CkBAIC03NDgsNyArNzU4LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgVVNCX1ZJRF9WSVNJT05QTFVTOgogCQkJCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQotCQkJCVVTQl9QSURfQVpVUkVXQVZFX0FEX1RVNzAwKSB7CisJCQkJY3B1X3RvX2xlMTYoVVNCX1BJRF9BWlVSRVdBVkVfQURfVFU3MDApKSB7CiAJCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQogCQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47CiAJCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CkBAIC04MDAsNiArODEwLDE2IEBACiAJCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9WSURfQVZFUk1FRElBOgorCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEpOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQpAQCAtMTE5MSw2ICsxMjExLDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVklEX1RFTEVTVEFSLCAgVVNCX1BJRF9URUxFU1RBUl9TVEFSU1RJQ0tfMil9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBLCBVU0JfUElEX0FWRVJNRURJQV9BMzA5KX0sCiAvKiAxNSAqL3tVU0JfREVWSUNFKFVTQl9WSURfTVNJXzIsICAgICBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJSSl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTVVKX0sCiAJezB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhZjkwMTVfdXNiX3RhYmxlKTsKQEAgLTEzNDMsNyArMTM2NCw3IEBACiAKIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDYsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNywKIAkJLmRldmljZXMgPSB7CiAJCQl7CiAJCQkJLm5hbWUgPSAiWHRlbnNpb25zIFhELTM4MCIsCkBAIC0xMzc1LDYgKzEzOTYsMTIgQEAKIAkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTVdLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIktXb3JsZCBVU0IgRFZCLVQgVFYgU3RpY2sgSUkgIiBcCisJCQkJCSIoVlMtRFZCLVQgMzk1VSkiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNl0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCiAJCX0KIAl9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKaW5kZXggNmMzYzk3Mi4uMjFjNzc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC0xMjMsNiArMTIzLDcgQEAKIAlBRjkwMTVfUkVNT1RFX0FfTElOS19EVFVfTSwKIAlBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjMsCiAJQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTgsCisJQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9ULAogfTsKIAogLyogTGVhZHRlayBXaW5GYXN0IERUViBEb25nbGUgR29sZCAqLwpAQCAtNTIwLDQgKzUyMSwxNDMgQEAKIAkweDg2LCAweDZiLCAweDIzLCAweGRjLCAweDQ1LCAweDA3LCAweDAwLAogfTsKIAorLyogQXZlck1lZGlhIFZvbGFyIFggKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhW10gPSB7CisJeyAweDA1LCAweDNkLCBLRVlfUFJPRzEgfSwgICAgICAgLyogU09VUkNFICovCisJeyAweDA1LCAweDEyLCBLRVlfUE9XRVIgfSwgICAgICAgLyogUE9XRVIgKi8KKwl7IDB4MDUsIDB4MWUsIEtFWV8xIH0sICAgICAgICAgICAvKiAxICovCisJeyAweDA1LCAweDFmLCBLRVlfMiB9LCAgICAgICAgICAgLyogMiAqLworCXsgMHgwNSwgMHgyMCwgS0VZXzMgfSwgICAgICAgICAgIC8qIDMgKi8KKwl7IDB4MDUsIDB4MjEsIEtFWV80IH0sICAgICAgICAgICAvKiA0ICovCisJeyAweDA1LCAweDIyLCBLRVlfNSB9LCAgICAgICAgICAgLyogNSAqLworCXsgMHgwNSwgMHgyMywgS0VZXzYgfSwgICAgICAgICAgIC8qIDYgKi8KKwl7IDB4MDUsIDB4MjQsIEtFWV83IH0sICAgICAgICAgICAvKiA3ICovCisJeyAweDA1LCAweDI1LCBLRVlfOCB9LCAgICAgICAgICAgLyogOCAqLworCXsgMHgwNSwgMHgyNiwgS0VZXzkgfSwgICAgICAgICAgIC8qIDkgKi8KKwl7IDB4MDUsIDB4M2YsIEtFWV9MRUZUIH0sICAgICAgICAvKiBMIC8gRElTUExBWSAqLworCXsgMHgwNSwgMHgyNywgS0VZXzAgfSwgICAgICAgICAgIC8qIDAgKi8KKwl7IDB4MDUsIDB4MGYsIEtFWV9SSUdIVCB9LCAgICAgICAvKiBSIC8gQ0ggUlROICovCisJeyAweDA1LCAweDE4LCBLRVlfUFJPRzIgfSwgICAgICAgLyogU05BUCBTSE9UICovCisJeyAweDA1LCAweDFjLCBLRVlfUFJPRzMgfSwgICAgICAgLyogMTYtQ0ggUFJFViAqLworCXsgMHgwNSwgMHgyZCwgS0VZX1ZPTFVNRURPV04gfSwgIC8qIFZPTCBET1dOICovCisJeyAweDA1LCAweDNlLCBLRVlfWk9PTSB9LCAgICAgICAgLyogRlVMTCBTQ1JFRU4gKi8KKwl7IDB4MDUsIDB4MmUsIEtFWV9WT0xVTUVVUCB9LCAgICAvKiBWT0wgVVAgKi8KKwl7IDB4MDUsIDB4MTAsIEtFWV9NVVRFIH0sICAgICAgICAvKiBNVVRFICovCisJeyAweDA1LCAweDA0LCBLRVlfQVVESU8gfSwgICAgICAgLyogQVVESU8gKi8KKwl7IDB4MDUsIDB4MTUsIEtFWV9SRUNPUkQgfSwgICAgICAvKiBSRUNPUkQgKi8KKwl7IDB4MDUsIDB4MTEsIEtFWV9QTEFZIH0sICAgICAgICAvKiBQTEFZICovCisJeyAweDA1LCAweDE2LCBLRVlfU1RPUCB9LCAgICAgICAgLyogU1RPUCAqLworCXsgMHgwNSwgMHgwYywgS0VZX1BMQVlQQVVTRSB9LCAgIC8qIFRJTUVTSElGVCAvIFBBVVNFICovCisJeyAweDA1LCAweDA1LCBLRVlfQkFDSyB9LCAgICAgICAgLyogPDwgLyBSRUQgKi8KKwl7IDB4MDUsIDB4MDksIEtFWV9GT1JXQVJEIH0sICAgICAvKiA+PiAvIFlFTExPVyAqLworCXsgMHgwNSwgMHgxNywgS0VZX1RFWFQgfSwgICAgICAgIC8qIFRFTEVURVhUICovCisJeyAweDA1LCAweDBhLCBLRVlfRVBHIH0sICAgICAgICAgLyogRVBHICovCisJeyAweDA1LCAweDEzLCBLRVlfTUVOVSB9LCAgICAgICAgLyogTUVOVSAqLworCisJeyAweDA1LCAweDBlLCBLRVlfQ0hBTk5FTFVQIH0sICAgLyogQ0ggVVAgKi8KKwl7IDB4MDUsIDB4MGQsIEtFWV9DSEFOTkVMRE9XTiB9LCAvKiBDSCBET1dOICovCisJeyAweDA1LCAweDE5LCBLRVlfRklSU1QgfSwgICAgICAgLyogfDw8IC8gR1JFRU4gKi8KKwl7IDB4MDUsIDB4MDgsIEtFWV9MQVNUIH0sICAgICAgICAvKiA+PnwgLyBCTFVFICovCit9OworCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYVtdID0geworCTB4MDIsIDB4ZmQsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgwMSwgMHhmZSwgMHgzZCwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDAzLCAweGZjLCAweDE3LCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MDQsIDB4ZmIsIDB4MGEsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgwNSwgMHhmYSwgMHgxZSwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDA2LCAweGY5LCAweDFmLCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MDcsIDB4ZjgsIDB4MjAsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgwOSwgMHhmNiwgMHgyMSwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDBhLCAweGY1LCAweDIyLCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MGIsIDB4ZjQsIDB4MjMsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgwZCwgMHhmMiwgMHgyNCwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDBlLCAweGYxLCAweDI1LCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MGYsIDB4ZjAsIDB4MjYsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxMSwgMHhlZSwgMHgyNywgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDA4LCAweGY3LCAweDA0LCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MGMsIDB4ZjMsIDB4M2UsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxMCwgMHhlZiwgMHgxYywgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDEyLCAweGVkLCAweDNmLCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MTMsIDB4ZWMsIDB4MGYsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxNCwgMHhlYiwgMHgxMCwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDE1LCAweGVhLCAweDEzLCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MTcsIDB4ZTgsIDB4MTgsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxOCwgMHhlNywgMHgxMSwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDE5LCAweGU2LCAweDE1LCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MWEsIDB4ZTUsIDB4MGMsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxYiwgMHhlNCwgMHgxNiwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDFjLCAweGUzLCAweDA5LCAweDA1LCAweDAwLAorCTB4MDIsIDB4ZmQsIDB4MWQsIDB4ZTIsIDB4MDUsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhmZCwgMHgxZSwgMHhlMSwgMHgyZCwgMHgwNSwgMHgwMCwKKwkweDAyLCAweGZkLCAweDFmLCAweGUwLCAweDJlLCAweDA1LCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDUsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwMSwgMHhmZSwgMHgxOSwgMHgwNSwgMHgwMCwKKwkweDAzLCAweGZjLCAweDAyLCAweGZkLCAweDBkLCAweDA1LCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDMsIDB4ZmMsIDB4MGUsIDB4MDUsIDB4MDAsCit9OworCisvKiBEaWdpdHRyYWRlIERWQi1UIFVTQiBTdGljayAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlW10gPSB7CisJeyAweDAxLCAweDBmLCBLRVlfTEFTVCB9LAkvKiBSRVRVUk4gKi8KKwl7IDB4MDUsIDB4MTcsIEtFWV9URVhUIH0sCS8qIFRFTEVURVhUICovCisJeyAweDAxLCAweDA4LCBLRVlfRVBHIH0sCS8qIEVQRyAqLworCXsgMHgwNSwgMHgxMywgS0VZX1BPV0VSIH0sCS8qIFBPV0VSICovCisJeyAweDAxLCAweDA5LCBLRVlfWk9PTSB9LAkvKiBGVUxMU0NSRUVOICovCisJeyAweDAwLCAweDQwLCBLRVlfQVVESU8gfSwJLyogRFVBTCBTT1VORCAqLworCXsgMHgwMCwgMHgyYywgS0VZX1BSSU5UIH0sCS8qIFNOQVBTSE9UICovCisJeyAweDA1LCAweDE2LCBLRVlfU1VCVElUTEUgfSwJLyogU1VCVElUTEUgKi8KKwl7IDB4MDAsIDB4NTIsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ0ggVXAgKi8KKwl7IDB4MDAsIDB4NTEsIEtFWV9DSEFOTkVMRE9XTiB9LC8qIENoIERuICovCisJeyAweDAwLCAweDU3LCBLRVlfVk9MVU1FVVAgfSwJLyogVm9sIFVwICovCisJeyAweDAwLCAweDU2LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWb2wgRG4gKi8KKwl7IDB4MDEsIDB4MTAsIEtFWV9NVVRFIH0sCS8qIE1VVEUgKi8KKwl7IDB4MDAsIDB4MjcsIEtFWV8wIH0sCisJeyAweDAwLCAweDFlLCBLRVlfMSB9LAorCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCisJeyAweDAwLCAweDIxLCBLRVlfNCB9LAorCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKKwl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCisJeyAweDAwLCAweDI0LCBLRVlfNyB9LAorCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKKwl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCisJeyAweDAxLCAweDE3LCBLRVlfUExBWVBBVVNFIH0sCS8qIFRJTUVTSElGVCAqLworCXsgMHgwMSwgMHgxNSwgS0VZX1JFQ09SRCB9LAkvKiBSRUNPUkQgKi8KKwl7IDB4MDMsIDB4MTMsIEtFWV9QTEFZIH0sCS8qIFBMQVkgKi8KKwl7IDB4MDEsIDB4MTYsIEtFWV9TVE9QIH0sCS8qIFNUT1AgKi8KKwl7IDB4MDEsIDB4MTMsIEtFWV9QQVVTRSB9LAkvKiBQQVVTRSAqLworfTsKKworc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlW10gPSB7CisJMHgwMCwgMHhmZiwgMHgwNiwgMHhmOSwgMHgxMywgMHgwNSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRkLCAweGIyLCAweDE3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MWYsIDB4ZTAsIDB4MmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwYSwgMHhmNSwgMHgxNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDBlLCAweGYxLCAweDE2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDksIDB4ZjYsIDB4MDksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwMSwgMHhmZSwgMHgwOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDA1LCAweGZhLCAweDEwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDIsIDB4ZmQsIDB4NTYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0MCwgMHhiZiwgMHg1NywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDE5LCAweGU2LCAweDUyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTcsIDB4ZTgsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxMCwgMHhlZiwgMHgwZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDU0LCAweGFiLCAweDI3LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MWIsIDB4ZTQsIDB4MWUsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxMSwgMHhlZSwgMHgxZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDE1LCAweGVhLCAweDIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTIsIDB4ZWQsIDB4MjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxNiwgMHhlOSwgMHgyMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRjLCAweGIzLCAweDIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NDgsIDB4YjcsIDB4MjQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwNCwgMHhmYiwgMHgyNSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDI2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MWUsIDB4ZTEsIDB4MTMsIDB4MDMsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxYSwgMHhlNSwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDAzLCAweGZjLCAweDE3LCAweDA1LCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGQsIDB4ZjIsIDB4MTYsIDB4MDUsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxZCwgMHhlMiwgMHg0MCwgMHgwMCwgMHgwMCwKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKaW5kZXggY2QyZWRiYy4uNTAxN2YwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7Ci0JaW50IHJldCwgaW5jLCBpID0gMDsKKwlpbnQgcmV0ID0gMCwgaW5jLCBpID0gMDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYwppbmRleCAzYWM5Zjc0Li44MGUzN2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jCkBAIC0zMiw3ICszMiw2IEBACiAKIC8qIGRlYnVnICovCiBpbnQgZHZiX3VzYl9jaW5lcmd5dDJfZGVidWc7Ci1pbnQgZGlzYWJsZV9yZW1vdGU7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9jaW5lcmd5dDJfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLCB4ZmVyPTIsIHJjPTQgIgpAQCAtNDUsNyArNDQsNyBAQAogfTsKIAogLyogV2UgYXJlIG1pc3NpbmcgYSByZWxlYXNlIGhvb2sgd2l0aCB1c2JfZGV2aWNlIGRhdGEgKi8KLXN0cnVjdCBkdmJfdXNiX2RldmljZSAqY2luZXJneXQyX3VzYl9kZXZpY2U7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlICpjaW5lcmd5dDJfdXNiX2RldmljZTsKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGNpbmVyZ3l0Ml9wcm9wZXJ0aWVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDIuaAppbmRleCAxMWQ3OWViLi44NGVmZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLmgKQEAgLTcwLDExICs3MCwxMSBAQAogCXVpbnQ4X3QgYmFuZHdpZHRoOwogCXVpbnQxNl90IHRwczsKIAl1aW50OF90IGZsYWdzOwotCXVpbnQxNl90IGdhaW47CisJX19sZTE2IGdhaW47CiAJdWludDhfdCBzbnI7Ci0JdWludDMyX3Qgdml0ZXJiaV9lcnJvcl9yYXRlOworCV9fbGUzMiB2aXRlcmJpX2Vycm9yX3JhdGU7CiAJdWludDMyX3QgcnNfZXJyb3JfcmF0ZTsKLQl1aW50MzJfdCB1bmNvcnJlY3RlZF9ibG9ja19jb3VudDsKKwlfX2xlMzIgdW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7CiAJdWludDhfdCBsb2NrX2JpdHM7CiAJdWludDhfdCBwcmV2X2xvY2tfYml0czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CkBAIC04Miw5ICs4Miw5IEBACiAKIHN0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyB7CiAJdWludDhfdCBjbWQ7Ci0JdWludDMyX3QgZnJlcTsKKwlfX2xlMzIgZnJlcTsKIAl1aW50OF90IGJhbmR3aWR0aDsKLQl1aW50MTZfdCB0cHM7CisJX19sZTE2IHRwczsKIAl1aW50OF90IGZsYWdzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDczODBiOTQuLmE0ZmNhM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTk2LDYgKzk2LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTlVCQkJCTB4ZTM5OQorI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTVVCQkJCTB4ZTM5NgogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9QQzE2MF8yVAkJCQkweGMxNjAKICNkZWZpbmUgVVNCX1BJRF9LV09STERfVlNUUkVBTV9DT0xECQkJMHgxN2RlCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fV0FSTQkJCTB4MTdkZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggNjI4NmZiYi4uYzY1ZjI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC05LDcgKzksNiBAQAogKgogKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgImR3MjEwMi5oIgogI2luY2x1ZGUgInNpMjF4eC5oIgogI2luY2x1ZGUgInN0djAyOTkuaCIKQEAgLTI3LDYgKzI2LDEwIEBACiAjZGVmaW5lIFVTQl9QSURfRFcyMTA0IDB4MjEwNAogI2VuZGlmCiAKKyNpZm5kZWYgVVNCX1BJRF9DSU5FUkdZX1MKKyNkZWZpbmUgVVNCX1BJRF9DSU5FUkdZX1MgMHgwMDY0CisjZW5kaWYKKwogI2RlZmluZSBEVzIxMFhfUkVBRF9NU0cgMAogI2RlZmluZSBEVzIxMFhfV1JJVEVfTVNHIDEKIApAQCAtNTc4LDYgKzU4MSw3IEBACiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9DWVBSRVNTLCAweDIxMDEpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0NZUFJFU1MsIDB4MjEwNCl9LAogCXtVU0JfREVWSUNFKDB4OTAyMiwgMHhkNjUwKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgVVNCX1BJRF9DSU5FUkdZX1MpfSwKIAl7IH0KIH07CiAKQEAgLTY0Nyw2ICs2NTEsNyBAQAogCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiZiwgMHgwMDQwLCAwLCAmcmVzZXQsIDAsCiAJCQkJCURXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9DSU5FUkdZX1M6CiAJCWNhc2UgVVNCX1BJRF9EVzIxMDI6CiAJCQlkdzIxMHhfb3BfcncoZGV2LCAweGJmLCAweDAwNDAsIDAsICZyZXNldCwgMCwKIAkJCQkJRFcyMTBYX1dSSVRFX01TRyk7CkBAIC02NTUsNyArNjYwLDcgQEAKIAkJCS8qIGNoZWNrIFNUVjAyOTkgZnJvbnRlbmQgICovCiAJCQlkdzIxMHhfb3BfcncoZGV2LCAweGI1LCAwLCAwLCAmcmVzZXQxNlswXSwgMiwKIAkJCQkJRFcyMTBYX1JFQURfTVNHKTsKLQkJCWlmIChyZXNldDE2WzBdID09IDB4YTEpIHsKKwkJCWlmICgocmVzZXQxNlswXSA9PSAweGExKSB8fCAocmVzZXQxNlswXSA9PSAweDgwKSkgewogCQkJCWR3MjEwMl9wcm9wZXJ0aWVzLmkyY19hbGdvID0gJmR3MjEwMl9pMmNfYWxnbzsKIAkJCQlkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSAmZHcyMTAyX3R1bmVyX2F0dGFjaDsKIAkJCQlicmVhazsKQEAgLTcyNiw3ICs3MzEsNyBAQAogCQkJfSwKIAkJfQogCX0sCi0JLm51bV9kZXZpY2VfZGVzY3MgPSAyLAorCS5udW1fZGV2aWNlX2Rlc2NzID0gMywKIAkuZGV2aWNlcyA9IHsKIAkJeyJEVkJXb3JsZCBEVkItUyAyMTAyIFVTQjIuMCIsCiAJCQl7JmR3MjEwMl90YWJsZVswXSwgTlVMTH0sCkBAIC03MzYsNiArNzQxLDEwIEBACiAJCQl7JmR3MjEwMl90YWJsZVsxXSwgTlVMTH0sCiAJCQl7TlVMTH0sCiAJCX0sCisJCXsiVGVycmFUZWMgQ2luZXJneSBTIFVTQiIsCisJCQl7JmR3MjEwMl90YWJsZVs0XSwgTlVMTH0sCisJCQl7TlVMTH0sCisJCX0sCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2stZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLWZlLmMKaW5kZXggMjYyYTg1OC4uMjBlYWRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2stZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay1mZS5jCkBAIC0yNSw2ICsyNSwyMCBAQAogCXVuc2lnbmVkIGxvbmcgc3RhdHVzX2NoZWNrX2ludGVydmFsOwogfTsKIAorc3RhdGljIGludCBncDhwc2tfdHVuZWRfdG9fRENJSShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZ3A4cHNrX2ZlX3N0YXRlICpzdCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHN0YXR1czsKKwlncDhwc2tfdXNiX2luX29wKHN0LT5kLCBHRVRfOFBTS19DT05GSUcsIDAsIDAsICZzdGF0dXMsIDEpOworCXJldHVybiBzdGF0dXMgJiBibURDdHVuZWQ7Cit9CisKK3N0YXRpYyBpbnQgZ3A4cHNrX3NldF90dW5lcl9tb2RlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZ3A4cHNrX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXJldHVybiBncDhwc2tfdXNiX291dF9vcChzdGF0ZS0+ZCwgU0VUXzhQU0tfQ09ORklHLCBtb2RlLCAwLCBOVUxMLCAwKTsKK30KKwogc3RhdGljIGludCBncDhwc2tfZmVfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgZ3A4cHNrX2ZlX3N0YXRlICpzdCkKIHsKIAl1OCBidWZbNl07CkBAIC05OSwzOSArMTEzLDExNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGdwOHBza19mZV9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQoreworCWRlYl9mZSgiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3A4cHNrX2ZlX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJZGViX2ZlKCIlcyguLilcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgaW50IGdwOHBza19mZV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKIAlzdHJ1Y3QgZ3A4cHNrX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCXU4IGNtZFsxMF07CiAJdTMyIGZyZXEgPSBmZXAtPmZyZXF1ZW5jeSAqIDEwMDA7CisJaW50IGdwX3Byb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdShzdGF0ZS0+ZC0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJZGViX2ZlKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAljbWRbNF0gPSBmcmVxICAgICAgICAgJiAweGZmOwogCWNtZFs1XSA9IChmcmVxID4+IDgpICAmIDB4ZmY7CiAJY21kWzZdID0gKGZyZXEgPj4gMTYpICYgMHhmZjsKIAljbWRbN10gPSAoZnJlcSA+PiAyNCkgJiAweGZmOwogCi0Jc3dpdGNoKGZlLT5vcHMuaW5mby50eXBlKSB7Ci0JY2FzZSBGRV9RUFNLOgotCQljbWRbMF0gPSAgZmVwLT51LnFwc2suc3ltYm9sX3JhdGUgICAgICAgICYgMHhmZjsKLQkJY21kWzFdID0gKGZlcC0+dS5xcHNrLnN5bWJvbF9yYXRlID4+ICA4KSAmIDB4ZmY7Ci0JCWNtZFsyXSA9IChmZXAtPnUucXBzay5zeW1ib2xfcmF0ZSA+PiAxNikgJiAweGZmOwotCQljbWRbM10gPSAoZmVwLT51LnFwc2suc3ltYm9sX3JhdGUgPj4gMjQpICYgMHhmZjsKLQkJY21kWzhdID0gQURWX01PRF9EVkJfUVBTSzsKLQkJY21kWzldID0gMHgwMzsgLypBRFZfTU9EX0ZFQ19YWFgqLworCXN3aXRjaCAoYy0+ZGVsaXZlcnlfc3lzdGVtKSB7CisJY2FzZSBTWVNfRFZCUzoKKwkJLyogT25seSBRUFNLIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZGViX2ZlKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQljLT5mZWNfaW5uZXIgPSBGRUNfQVVUTzsKIAkJYnJlYWs7CisJY2FzZSBTWVNfRFZCUzI6CisJCWRlYl9mZSgiJXM6IERWQi1TMiBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQkvLyBvdGhlciBtb2RlcyBhcmUgdW5zdXBvcnRlZCByaWdodCBub3cKLQkJY21kWzBdID0gMDsKLQkJY21kWzFdID0gMDsKLQkJY21kWzJdID0gMDsKLQkJY21kWzNdID0gMDsKLQkJY21kWzhdID0gMDsKLQkJY21kWzldID0gMDsKLQkJYnJlYWs7CisJCWRlYl9mZSgiJXM6IHVuc3VwcG9ydGVkIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZCAoJWQpXG4iLAorCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlncDhwc2tfdXNiX291dF9vcChzdGF0ZS0+ZCxUVU5FXzhQU0ssMCwwLGNtZCwxMCk7CisJY21kWzBdID0gIGMtPnN5bWJvbF9yYXRlICAgICAgICAmIDB4ZmY7CisJY21kWzFdID0gKGMtPnN5bWJvbF9yYXRlID4+ICA4KSAmIDB4ZmY7CisJY21kWzJdID0gKGMtPnN5bWJvbF9yYXRlID4+IDE2KSAmIDB4ZmY7CisJY21kWzNdID0gKGMtPnN5bWJvbF9yYXRlID4+IDI0KSAmIDB4ZmY7CisJc3dpdGNoIChjLT5tb2R1bGF0aW9uKSB7CisJY2FzZSBRUFNLOgorCQlpZiAoZ3BfcHJvZHVjdF9pZCA9PSBVU0JfUElEX0dFTlBJWF84UFNLX1JFVl8xX1dBUk0pCisJCQlpZiAoZ3A4cHNrX3R1bmVkX3RvX0RDSUkoZmUpKQorCQkJCWdwOHBza19iY200NTAwX3JlbG9hZChzdGF0ZS0+ZCk7CisJCXN3aXRjaCAoYy0+ZmVjX2lubmVyKSB7CisJCWNhc2UgRkVDXzFfMjoKKwkJCWNtZFs5XSA9IDA7IGJyZWFrOworCQljYXNlIEZFQ18yXzM6CisJCQljbWRbOV0gPSAxOyBicmVhazsKKwkJY2FzZSBGRUNfM180OgorCQkJY21kWzldID0gMjsgYnJlYWs7CisJCWNhc2UgRkVDXzVfNjoKKwkJCWNtZFs5XSA9IDM7IGJyZWFrOworCQljYXNlIEZFQ183Xzg6CisJCQljbWRbOV0gPSA0OyBicmVhazsKKwkJY2FzZSBGRUNfQVVUTzoKKwkJCWNtZFs5XSA9IDU7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJY21kWzldID0gNTsgYnJlYWs7CisJCX0KKwkJY21kWzhdID0gQURWX01PRF9EVkJfUVBTSzsKKwkJYnJlYWs7CisJY2FzZSBQU0tfODogLyogUFNLXzggaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBETiAqLworCQljbWRbOF0gPSBBRFZfTU9EX1RVUkJPXzhQU0s7CisJCXN3aXRjaCAoYy0+ZmVjX2lubmVyKSB7CisJCWNhc2UgRkVDXzJfMzoKKwkJCWNtZFs5XSA9IDA7IGJyZWFrOworCQljYXNlIEZFQ18zXzQ6CisJCQljbWRbOV0gPSAxOyBicmVhazsKKwkJY2FzZSBGRUNfM181OgorCQkJY21kWzldID0gMjsgYnJlYWs7CisJCWNhc2UgRkVDXzVfNjoKKwkJCWNtZFs5XSA9IDM7IGJyZWFrOworCQljYXNlIEZFQ184Xzk6CisJCQljbWRbOV0gPSA0OyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNtZFs5XSA9IDA7IGJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUUFNXzE2OiAvKiBRQU1fMTYgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBETiAqLworCQljbWRbOF0gPSBBRFZfTU9EX1RVUkJPXzE2UUFNOworCQljbWRbOV0gPSAwOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBVbmtub3duIG1vZHVsYXRpb24gKi8KKwkJZGViX2ZlKCIlczogdW5zdXBwb3J0ZWQgbW9kdWxhdGlvbiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKGdwX3Byb2R1Y3RfaWQgPT0gVVNCX1BJRF9HRU5QSVhfOFBTS19SRVZfMV9XQVJNKQorCQlncDhwc2tfc2V0X3R1bmVyX21vZGUoZmUsIDApOworCWdwOHBza191c2Jfb3V0X29wKHN0YXRlLT5kLCBUVU5FXzhQU0ssIDAsIDAsIGNtZCwgMTApOwogCiAJc3RhdGUtPmxvY2sgPSAwOwogCXN0YXRlLT5uZXh0X3N0YXR1c19jaGVjayA9IGppZmZpZXM7CkBAIC0xNDAsMTMgKzIyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3A4cHNrX2ZlX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQotewotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgZ3A4cHNrX2ZlX3NlbmRfZGlzZXFjX21zZyAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJCQkJICAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCiB7CkBAIC0yNjEsOSArMzQzLDEzIEBACiAJCS5zeW1ib2xfcmF0ZV9tYXggICAgICAgID0gNDUwMDAwMDAsCiAJCS5zeW1ib2xfcmF0ZV90b2xlcmFuY2UgID0gNTAwLCAgLyogcHBtICovCiAJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKLQkJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAotCQkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAotCQkJCUZFX0NBTl9RUFNLCisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQkvKgorCQkJICogRkVfQ0FOX1FBTV8xNiBpcyBmb3IgY29tcGF0aWJpbGl0eQorCQkJICogKE15dGggaW5jb3JyZWN0bHkgZGV0ZWN0cyBUdXJiby1RUFNLIGFzIHBsYWluIFFBTS0xNikKKwkJCSAqLworCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2CiAJfSwKIAogCS5yZWxlYXNlID0gZ3A4cHNrX2ZlX3JlbGVhc2UsCkBAIC0yNzEsOCArMzU3LDEwIEBACiAJLmluaXQgPSBOVUxMLAogCS5zbGVlcCA9IE5VTEwsCiAKKwkuc2V0X3Byb3BlcnR5ID0gZ3A4cHNrX2ZlX3NldF9wcm9wZXJ0eSwKKwkuZ2V0X3Byb3BlcnR5ID0gZ3A4cHNrX2ZlX2dldF9wcm9wZXJ0eSwKIAkuc2V0X2Zyb250ZW5kID0gZ3A4cHNrX2ZlX3NldF9mcm9udGVuZCwKLQkuZ2V0X2Zyb250ZW5kID0gZ3A4cHNrX2ZlX2dldF9mcm9udGVuZCwKKwogCS5nZXRfdHVuZV9zZXR0aW5ncyA9IGdwOHBza19mZV9nZXRfdHVuZV9zZXR0aW5ncywKIAogCS5yZWFkX3N0YXR1cyA9IGdwOHBza19mZV9yZWFkX3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5jCmluZGV4IGQ5NjVhOTIuLmMxZGE5NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suYwpAQCAtMTc0LDYgKzE3NCwyMiBAQAogCXJldHVybiAwOwogfQogCitpbnQgZ3A4cHNrX2JjbTQ1MDBfcmVsb2FkKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwl1OCBidWY7CisJaW50IGdwX3Byb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdShkLT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJLyogVHVybiBvZmYgOHBzayBwb3dlciAqLworCWlmIChncDhwc2tfdXNiX2luX29wKGQsIEJPT1RfOFBTSywgMCwgMCwgJmJ1ZiwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCS8qIFR1cm4gT24gOHBzayBwb3dlciAqLworCWlmIChncDhwc2tfdXNiX2luX29wKGQsIEJPT1RfOFBTSywgMSwgMCwgJmJ1ZiwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCS8qIGxvYWQgQkNNNDUwMCBmaXJtd2FyZSAqLworCWlmIChncF9wcm9kdWN0X2lkID09IFVTQl9QSURfR0VOUElYXzhQU0tfUkVWXzFfV0FSTSkKKwkJaWYgKGdwOHBza19sb2FkX2JjbTQ1MDBmdyhkKSkKKwkJCXJldHVybiBFSU5WQUw7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgZ3A4cHNrX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5oCmluZGV4IGU1Y2Q4MTQuLmU4M2E1NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suaApAQCAtOTIsNSArOTIsNiBAQAogZXh0ZXJuIGludCBncDhwc2tfdXNiX2luX29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggcmVxLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTggKmIsIGludCBibGVuKTsKIGV4dGVybiBpbnQgZ3A4cHNrX3VzYl9vdXRfb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwKIAkJCSAgICAgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pOworZXh0ZXJuIGludCBncDhwc2tfYmNtNDUwMF9yZWxvYWQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VzYi11cmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdXNiLXVyYi5jCmluZGV4IGRhOTNiOWUuLjlkYTJjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdXNiLXVyYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdXNiLXVyYi5jCkBAIC0xNTYsNyArMTU2LDggQEAKIAkJCQlzdHJlYW0tPnByb3BzLnUuYnVsay5idWZmZXJzaXplLAogCQkJCXVzYl91cmJfY29tcGxldGUsIHN0cmVhbSk7CiAKLQkJc3RyZWFtLT51cmJfbGlzdFtpXS0+dHJhbnNmZXJfZmxhZ3MgPSAwOworCQlzdHJlYW0tPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQlzdHJlYW0tPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9kbWEgPSBzdHJlYW0tPmRtYV9hZGRyW2ldOwogCQlzdHJlYW0tPnVyYnNfaW5pdGlhbGl6ZWQrKzsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDk2YjkzZTIuLjAwMjY5NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xMiw2ICsxMiwyNSBAQAogCiAJICBJZiB1bnN1cmUgc2F5IE4uCiAKK2NvbW1lbnQgIk11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKKworY29uZmlnIERWQl9TVEIwODk5CisJdHJpc3RhdGUgIlNUQjA4OTkgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMvUzIvRFNTIE11bHRpc3RhbmRhcmQgZGVtb2R1bGF0b3IuIFNheSBZIHdoZW4geW91IHdhbnQKKwkgIHRvIHN1cHBvcnQgdGhpcyBkZW1vZHVsYXRvciBiYXNlZCBmcm9udGVuZHMKKworY29uZmlnIERWQl9TVEI2MTAwCisJdHJpc3RhdGUgIlNUQjYxMDAgYmFzZWQgdHVuZXJzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIFNpbGljb24gdHVuZXIgZnJvbSBTVCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNUQjA4OTkKKwkgIGRlbW9kdWxhdG9yLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KKwogY29tbWVudCAiRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtNzgsNiArOTcsMTMgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfVERBODI2MQorCXRyaXN0YXRlICJQaGlsaXBzIFREQTgyNjEgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29uZmlnIERWQl9WRVMxWDkzCiAJdHJpc3RhdGUgIlZMU0kgVkVTMTg5MyBvciBWRVMxOTkzIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC05Miw2ICsxMTgsMTQgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfVFVORVJfQ1gyNDExMworCXRyaXN0YXRlICJDb25leGFudCBDWDI0MTEzL0NYMjQxMjggdHVuZXIgZm9yIERWQi1TL0RTUyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCisKIGNvbmZpZyBEVkJfVERBODI2WAogCXRyaXN0YXRlICJQaGlsaXBzIFREQTgyNlggc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwpAQCAtMzQ1LDYgKzM3OSwxNCBAQAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfTEdEVDMzMDQKKwl0cmlzdGF0ZSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1M1SDE0MDkKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNUgxNDA5IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC0zNjksNiArNDExLDE3IEBACiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29tbWVudCAiSVNEQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKKworY29uZmlnIERWQl9TOTIxCisJdHJpc3RhdGUgIlNoYXJwIFM5MjEgdHVuZXIiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEFOIElTREItVCBEUVBTSywgUVBTSywgMTZRQU0gYW5kIDY0UUFNIDFzZWcgdHVuZXIgbW9kdWxlLgorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IGFiYTc5ZjQuLmFmN2JkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTUsOCArNSwxMyBAQAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvCiAKK3M5MjEtb2JqcyA6PSBzOTIxX21vZHVsZS5vIHM5MjFfY29yZS5vCitzdGIwODk5LW9ianMgPSBzdGIwODk5X2Rydi5vIHN0YjA4OTlfYWxnby5vCisKIG9iai0kKENPTkZJR19EVkJfUExMKSArPSBkdmItcGxsLm8KIG9iai0kKENPTkZJR19EVkJfU1RWMDI5OSkgKz0gc3R2MDI5OS5vCitvYmotJChDT05GSUdfRFZCX1NUQjA4OTkpICs9IHN0YjA4OTkubworb2JqLSQoQ09ORklHX0RWQl9TVEI2MTAwKSArPSBzdGI2MTAwLm8KIG9iai0kKENPTkZJR19EVkJfU1A4ODcwKSArPSBzcDg4NzAubwogb2JqLSQoQ09ORklHX0RWQl9DWDIyNzAwKSArPSBjeDIyNzAwLm8KIG9iai0kKENPTkZJR19EVkJfQ1gyNDExMCkgKz0gY3gyNDExMC5vCkBAIC0zNSwxOCArNDAsMjEgQEAKIG9iai0kKENPTkZJR19EVkJfQkNNMzUxMCkgKz0gYmNtMzUxMC5vCiBvYmotJChDT05GSUdfRFZCX1M1SDE0MjApICs9IHM1aDE0MjAubwogb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwWCkgKz0gbGdkdDMzMHgubworb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwNCkgKz0gbGdkdDMzMDQubwogb2JqLSQoQ09ORklHX0RWQl9DWDI0MTIzKSArPSBjeDI0MTIzLm8KIG9iai0kKENPTkZJR19EVkJfTE5CUDIxKSArPSBsbmJwMjEubwogb2JqLSQoQ09ORklHX0RWQl9JU0w2NDA1KSArPSBpc2w2NDA1Lm8KIG9iai0kKENPTkZJR19EVkJfSVNMNjQyMSkgKz0gaXNsNjQyMS5vCiBvYmotJChDT05GSUdfRFZCX1REQTEwMDg2KSArPSB0ZGExMDA4Ni5vCiBvYmotJChDT05GSUdfRFZCX1REQTgyNlgpICs9IHRkYTgyNngubworb2JqLSQoQ09ORklHX0RWQl9UREE4MjYxKSArPSB0ZGE4MjYxLm8KIG9iai0kKENPTkZJR19EVkJfVFVORVJfRElCMDA3MCkgKz0gZGliMDA3MC5vCiBvYmotJChDT05GSUdfRFZCX1RVQTYxMDApICs9IHR1YTYxMDAubwogb2JqLSQoQ09ORklHX0RWQl9TNUgxNDA5KSArPSBzNWgxNDA5Lm8KIG9iai0kKENPTkZJR19EVkJfVFVORVJfSVREMTAwMCkgKz0gaXRkMTAwMC5vCiBvYmotJChDT05GSUdfRFZCX0FVODUyMikgKz0gYXU4NTIyLm8KIG9iai0kKENPTkZJR19EVkJfVERBMTAwNDgpICs9IHRkYTEwMDQ4Lm8KK29iai0kKENPTkZJR19EVkJfVFVORVJfQ1gyNDExMykgKz0gY3gyNDExMy5vCiBvYmotJChDT05GSUdfRFZCX1M1SDE0MTEpICs9IHM1aDE0MTEubwogb2JqLSQoQ09ORklHX0RWQl9MR1M4R0w1KSArPSBsZ3M4Z2w1Lm8KIG9iai0kKENPTkZJR19EVkJfRFVNTVlfRkUpICs9IGR2Yl9kdW1teV9mZS5vCkBAIC01NSwzICs2Myw1IEBACiBvYmotJChDT05GSUdfRFZCX1NJMjFYWCkgKz0gc2kyMXh4Lm8KIG9iai0kKENPTkZJR19EVkJfU1RWMDI4OCkgKz0gc3R2MDI4OC5vCiBvYmotJChDT05GSUdfRFZCX1NUQjYwMDApICs9IHN0YjYwMDAubworb2JqLSQoQ09ORklHX0RWQl9TOTIxKSArPSBzOTIxLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jCmluZGV4IDY5MmI2OGEuLmIyYjUwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMKQEAgLTIyMywxMiArMjIzLDEyIEBACiAJaW50IHJldCA9IDA7CiAJdTggaSA9IDA7CiAJdTggYnVmWzI0XTsKLQl1MzIgbnNfY29lZmYxXzIwNDhudTsKLQl1MzIgbnNfY29lZmYxXzgxOTFudTsKLQl1MzIgbnNfY29lZmYxXzgxOTJudTsKLQl1MzIgbnNfY29lZmYxXzgxOTNudTsKLQl1MzIgbnNfY29lZmYyXzJrOwotCXUzMiBuc19jb2VmZjJfOGs7CisJdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKG5zX2NvZWZmMV8yMDQ4bnUpOworCXUzMiB1bmluaXRpYWxpemVkX3Zhcihuc19jb2VmZjFfODE5MW51KTsKKwl1MzIgdW5pbml0aWFsaXplZF92YXIobnNfY29lZmYxXzgxOTJudSk7CisJdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKG5zX2NvZWZmMV84MTkzbnUpOworCXUzMiB1bmluaXRpYWxpemVkX3Zhcihuc19jb2VmZjJfMmspOworCXUzMiB1bmluaXRpYWxpemVkX3Zhcihuc19jb2VmZjJfOGspOwogCiAJZGViX2luZm8oIiVzOiBhZGNfY2xvY2s6JWQgYnc6JWRcbiIsIF9fZnVuY19fLAogCQlzdGF0ZS0+Y29uZmlnLmFkY19jbG9jaywgYncpOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIAlpbnQgcmV0OwogCXU4IGJ1ZlszXSwgaSwgbGVuOwogCXUzMiBxdWFudCA9IDA7Ci0Jc3RydWN0IHNucl90YWJsZSAqc25yX3RhYmxlOworCXN0cnVjdCBzbnJfdGFibGUgKnVuaW5pdGlhbGl6ZWRfdmFyKHNucl90YWJsZSk7CiAKIAkvKiBjaGVjayBpZiBxdWFudGl6ZXIgcmVhZHkgKGZvciBzbnIpICovCiAJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDJlMSwgMywgMSwgJmJ1ZlswXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU3YjAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYwpAQCAtMCwwICsxLDYxNiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIENvbmV4YW50IENYMjQxMTMvQ1gyNDEyOCBUdW5lciAoU2F0ZWxsaXRlKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctOCBQYXRyaWNrIEJvZXR0Y2hlciA8cGJAbGludXh0di5vcmc+CisgKgorICogIERldmVsb3BlZCBmb3IgQkJUSSAvIFRlY2huaXNhdAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiY3gyNDExMy5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisjZGVmaW5lIGluZm8oYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9JTkZPICJDWDI0MTEzOiAiIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBlcnIoYXJncy4uLikgIGRvIHsgcHJpbnRrKEtFUk5fRVJSICAiQ1gyNDExMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSB7IFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJDWDI0MTEzOiAlczogIiwgX19mdW5jX18pOyBcCisJCQlwcmludGsoYXJncyk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworc3RydWN0IGN4MjQxMTNfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBjeDI0MTEzX2NvbmZpZyAqY29uZmlnOworCisjZGVmaW5lIFJFVl9DWDI0MTEzIDB4MjMKKwl1OCByZXY7CisJdTggdmVyOworCisJdTggaWNwX21vZGU6MTsKKworI2RlZmluZSBJQ1BfTEVWRUwxIDAKKyNkZWZpbmUgSUNQX0xFVkVMMiAxCisjZGVmaW5lIElDUF9MRVZFTDMgMgorI2RlZmluZSBJQ1BfTEVWRUw0IDMKKwl1OCBpY3BfbWFuOjI7CisJdTggaWNwX2F1dG9fbG93OjI7CisJdTggaWNwX2F1dG9fbWxvdzoyOworCXU4IGljcF9hdXRvX21oaToyOworCXU4IGljcF9hdXRvX2hpOjI7CisJdTggaWNwX2RpZzsKKworI2RlZmluZSBMTkFfTUlOX0dBSU4gMAorI2RlZmluZSBMTkFfTUlEX0dBSU4gMQorI2RlZmluZSBMTkFfTUFYX0dBSU4gMgorCXU4IGxuYV9nYWluOjI7CisKKwl1OCBhY3Bfb246MTsKKworCXU4IHZjb19tb2RlOjI7CisJdTggdmNvX3NoaWZ0OjE7CisjZGVmaW5lIFZDT0JBTkRTRUxfNiAweDgwCisjZGVmaW5lIFZDT0JBTkRTRUxfNSAweDAxCisjZGVmaW5lIFZDT0JBTkRTRUxfNCAweDAyCisjZGVmaW5lIFZDT0JBTkRTRUxfMyAweDA0CisjZGVmaW5lIFZDT0JBTkRTRUxfMiAweDA4CisjZGVmaW5lIFZDT0JBTkRTRUxfMSAweDEwCisJdTggdmNvX2JhbmQ7CisKKyNkZWZpbmUgVkNPRElWNCA0CisjZGVmaW5lIFZDT0RJVjIgMgorCXU4IHZjb2RpdjsKKworCXU4IGJzX2RlbGF5OjQ7CisJdTE2IGJzX2ZyZXFjbnQ6MTM7CisJdTE2IGJzX3JkaXY7CisJdTggcHJlc2NhbGVyX21vZGU6MTsKKworCXU4IHJmdmdhX2JpYXNfY3RybDsKKworCXMxNiB0dW5lcl9nYWluX3RocmVzOworCXU4ICBnYWluX2xldmVsOworCisJdTMyIGZyZXF1ZW5jeTsKKworCXU4IHJlZmRpdjsKKworCXU4IEZ3aW5kb3dfZW5hYmxlZDsKK307CisKK3N0YXRpYyBpbnQgY3gyNDExM193cml0ZXJlZyhzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUsIGludCByZWcsIGludCBkYXRhKQoreworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+aTJjX2FkZHIsCisJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisJaW50IGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAoZXJyICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgZXJyLCByZWcsIGRhdGEpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfcmVhZHJlZyhzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGI7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5pMmNfYWRkciwKKwkJCS5mbGFncyA9IDAsIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+aTJjX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZiLCAubGVuID0gMSB9CisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwKKwkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjQxMTNfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlKQoreworCXU4IHI7CisKKwlyID0gY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDEwKSAmIDB4ODI7CisJciB8PSBzdGF0ZS0+aWNwX21vZGU7CisJciB8PSBzdGF0ZS0+aWNwX21hbiA8PCA0OworCXIgfD0gc3RhdGUtPmljcF9kaWcgPDwgMjsKKwlyIHw9IHN0YXRlLT5wcmVzY2FsZXJfbW9kZSA8PCA1OworCWN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MTAsIHIpOworCisJciA9IChzdGF0ZS0+aWNwX2F1dG9fbG93ICA8PCAwKSB8IChzdGF0ZS0+aWNwX2F1dG9fbWxvdyA8PCAyKQorCQl8IChzdGF0ZS0+aWNwX2F1dG9fbWhpIDw8IDQpIHwgKHN0YXRlLT5pY3BfYXV0b19oaSA8PCA2KTsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDExLCByKTsKKworCWlmIChzdGF0ZS0+cmV2ID09IFJFVl9DWDI0MTEzKSB7CisJCXIgPSBjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHhlYzsKKwkJciB8PSBzdGF0ZS0+bG5hX2dhaW47CisJCXIgfD0gc3RhdGUtPnJmdmdhX2JpYXNfY3RybCA8PCA0OworCQljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDIwLCByKTsKKwl9CisKKwlyID0gY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDEyKSAmIDB4MDM7CisJciB8PSBzdGF0ZS0+YWNwX29uIDw8IDI7CisJciB8PSBzdGF0ZS0+YnNfZGVsYXkgPDwgNDsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDEyLCByKTsKKworCXIgPSBjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MTgpICYgMHg0MDsKKwlyIHw9IHN0YXRlLT52Y29fc2hpZnQ7CisJaWYgKHN0YXRlLT52Y29fYmFuZCA9PSBWQ09CQU5EU0VMXzYpCisJCXIgfD0gKDEgPDwgNyk7CisJZWxzZQorCQlyIHw9IChzdGF0ZS0+dmNvX2JhbmQgPDwgMSk7CisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxOCwgcik7CisKKwlyICA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxNCkgJiAweDIwOworCXIgfD0gKHN0YXRlLT52Y29fbW9kZSA8PCA2KSB8ICgoc3RhdGUtPmJzX2ZyZXFjbnQgPj4gOCkgJiAweDFmKTsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDE0LCByKTsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDE1LCAoc3RhdGUtPmJzX2ZyZXFjbnQgICAgICAgICYgMHhmZikpOworCisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxNiwgKHN0YXRlLT5ic19yZGl2ID4+IDQpICYgMHhmZik7CisJciA9IChjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MTcpICYgMHgwZikgfAorCQkoKHN0YXRlLT5ic19yZGl2ICYgMHgwZikgPDwgNCk7CisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxNywgcik7Cit9CisKKyNkZWZpbmUgVkdBXzAgMHgwMAorI2RlZmluZSBWR0FfMSAweDA0CisjZGVmaW5lIFZHQV8yIDB4MDIKKyNkZWZpbmUgVkdBXzMgMHgwNgorI2RlZmluZSBWR0FfNCAweDAxCisjZGVmaW5lIFZHQV81IDB4MDUKKyNkZWZpbmUgVkdBXzYgMHgwMworI2RlZmluZSBWR0FfNyAweDA3CisKKyNkZWZpbmUgUkZWR0FfMCAweDAwCisjZGVmaW5lIFJGVkdBXzEgMHgwMQorI2RlZmluZSBSRlZHQV8yIDB4MDIKKyNkZWZpbmUgUkZWR0FfMyAweDAzCisKK3N0YXRpYyBpbnQgY3gyNDExM19zZXRfZ2Fpbl9zZXR0aW5ncyhzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUsCisJCXMxNiBwb3dlcl9lc3RpbWF0aW9uKQoreworCXU4IGFtcG91dCA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxZCkgJiAweGYwLAorCSAgIHZnYSAgICA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxZikgJiAweDNmLAorCSAgIHJmdmdhICA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgJiAweGYzOworCXU4IGdhaW5fbGV2ZWwgPSBwb3dlcl9lc3RpbWF0aW9uID49IHN0YXRlLT50dW5lcl9nYWluX3RocmVzOworCisJZHByaW50aygicG93ZXIgZXN0aW1hdGlvbjogJWQsIHRocmVzOiAlZCwgZ2Fpbl9sZXZlbDogJWQvJWRcbiIsCisJCQlwb3dlcl9lc3RpbWF0aW9uLCBzdGF0ZS0+dHVuZXJfZ2Fpbl90aHJlcywKKwkJCXN0YXRlLT5nYWluX2xldmVsLCBnYWluX2xldmVsKTsKKworCWlmIChnYWluX2xldmVsID09IHN0YXRlLT5nYWluX2xldmVsKQorCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBiZSBkb25lICovCisKKwlhbXBvdXQgfD0gMHhmOworCisJaWYgKGdhaW5fbGV2ZWwpIHsKKwkJcmZ2Z2EgfD0gUkZWR0FfMCA8PCAyOworCQl2Z2EgICB8PSAoVkdBXzcgPDwgMykgfCBWR0FfNzsKKwl9IGVsc2UgeworCQlyZnZnYSB8PSBSRlZHQV8yIDw8IDI7CisJCXZnYSAgfD0gKFZHQV82IDw8IDMpIHwgVkdBXzI7CisJfQorCXN0YXRlLT5nYWluX2xldmVsID0gZ2Fpbl9sZXZlbDsKKworCWN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MWQsIGFtcG91dCk7CisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxZiwgdmdhKTsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDIwLCByZnZnYSk7CisKKwlyZXR1cm4gMTsgLyogZGlkIHNvbWV0aGluZyAqLworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfc2V0X0ZyZWYoc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlLCB1OCBoaWdoKQoreworCXU4IHh0YWwgPSBjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MDIpOworCWlmIChzdGF0ZS0+cmV2ID09IDB4NDMgJiYgc3RhdGUtPnZjb2RpdiA9PSBWQ09ESVY0KQorCQloaWdoID0gMTsKKworCXh0YWwgJj0gfjB4MjsKKwlpZiAoaGlnaCkKKwkJeHRhbCB8PSBoaWdoIDw8IDE7CisJcmV0dXJuIGN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MDIsIHh0YWwpOworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfZW5hYmxlKHN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSwgdTggZW5hYmxlKQoreworCXU4IHIyMSA9IChjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MjEpICYgMHhjMCkgfCBlbmFibGU7CisJaWYgKHN0YXRlLT5yZXYgPT0gUkVWX0NYMjQxMTMpCisJCXIyMSB8PSAoMSA8PCAxKTsKKwlyZXR1cm4gY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgyMSwgcjIxKTsKK30KKworc3RhdGljIGludCBjeDI0MTEzX3NldF9iYW5kd2lkdGgoc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlLCB1MzIgYmFuZHdpZHRoX2toeikKK3sKKwl1OCByOworCisJaWYgKGJhbmR3aWR0aF9raHogPD0gMTkwMDApCisJCXIgPSAweDAzIDw8IDY7CisJZWxzZSBpZiAoYmFuZHdpZHRoX2toeiA8PSAyNTAwMCkKKwkJciA9IDB4MDIgPDwgNjsKKwllbHNlCisJCXIgPSAweDAxIDw8IDY7CisKKwlkcHJpbnRrKCJiYW5kd2lkdGggdG8gYmUgc2V0OiAlZFxuIiwgYmFuZHdpZHRoX2toeik7CisJYmFuZHdpZHRoX2toeiAqPSAxMDsKKwliYW5kd2lkdGhfa2h6IC09IDEwMDAwOworCWJhbmR3aWR0aF9raHogLz0gMTAwMDsKKwliYW5kd2lkdGhfa2h6ICs9IDU7CisJYmFuZHdpZHRoX2toeiAvPSAxMDsKKworCWRwcmludGsoImJhbmR3aWR0aDogJWQgJWRcbiIsIHIgPj4gNiwgYmFuZHdpZHRoX2toeik7CisKKwlyIHw9IGJhbmR3aWR0aF9raHogJiAweDNmOworCisJcmV0dXJuIGN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MWUsIHIpOworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfc2V0X2Nsa19pbnZlcnNpb24oc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlLCB1OCBvbikKK3sKKwl1OCByID0gKGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxMCkgJiAweDdmKSB8ICgob24gJiAweDEpIDw8IDcpOworCXJldHVybiBjeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDEwLCByKTsKK30KKworc3RhdGljIGludCBjeDI0MTEzX2dldF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqc3RhdHVzKQoreworCXN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXU4IHIgPSAoY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDEwKSAmIDB4MDIpID4+IDE7CisJaWYgKHIpCisJCSpzdGF0dXMgfD0gVFVORVJfU1RBVFVTX0xPQ0tFRDsKKwlkcHJpbnRrKCJQTEwgbG9ja2VkOiAlZFxuIiwgcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBjeDI0MTEzX3NldF9yZWZfZGl2KHN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSwgdTggcmVmZGl2KQoreworCWlmIChzdGF0ZS0+cmV2ID09IDB4NDMgJiYgc3RhdGUtPnZjb2RpdiA9PSBWQ09ESVY0KQorCQlyZWZkaXYgPSAyOworCXJldHVybiBzdGF0ZS0+cmVmZGl2ID0gcmVmZGl2OworfQorCitzdGF0aWMgdm9pZCBjeDI0MTEzX2NhbGNfcGxsX25mKHN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSwgdTE2ICpuLCBzMzIgKmYpCit7CisJczMyIE47CisJczY0IEY7CisJdTggUiwgcjsKKwl1OCB2Y29kaXY7CisJdTggZmFjdG9yOworCXMzMiBmcmVxX2h6ID0gc3RhdGUtPmZyZXF1ZW5jeSAqIDEwMDA7CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+eHRhbF9raHogPCAyMDAwMCkKKwkJZmFjdG9yID0gMTsKKwllbHNlCisJCWZhY3RvciA9IDI7CisKKwlpZiAoc3RhdGUtPnJldiA9PSBSRVZfQ1gyNDExMykgeworCQlpZiAoc3RhdGUtPmZyZXF1ZW5jeSA+PSAxMTAwMDAwKQorCQkJdmNvZGl2ID0gVkNPRElWMjsKKwkJZWxzZQorCQkJdmNvZGl2ID0gVkNPRElWNDsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmZyZXF1ZW5jeSA+PSAxMTY1MDAwKQorCQkJdmNvZGl2ID0gVkNPRElWMjsKKwkJZWxzZQorCQkJdmNvZGl2ID0gVkNPRElWNDsKKwl9CisJc3RhdGUtPnZjb2RpdiA9IHZjb2RpdjsKKworCWRwcmludGsoImNhbGN1bGF0aW5nIE4vRiBmb3IgJWRIeiB3aXRoIHZjb2RpdiAlZFxuIiwgZnJlcV9oeiwgdmNvZGl2KTsKKwlSID0gMDsKKwlkbyB7CisJCVIgPSBjeDI0MTEzX3NldF9yZWZfZGl2KHN0YXRlLCBSICsgMSk7CisKKwkJLyogY2FsY3VsYXRlIHR1bmVyIFBMTCBzZXR0aW5nczogKi8KKwkJTiA9ICAoZnJlcV9oeiAvIDEwMCAqIHZjb2RpdikgKiBSOworCQlOIC89IChzdGF0ZS0+Y29uZmlnLT54dGFsX2toeikgKiBmYWN0b3IgKiAyOworCQlOICs9IDU7ICAgICAvKiBGb3Igcm91bmQgdXAuICovCisJCU4gLz0gMTA7CisJCU4gLT0gMzI7CisJfSB3aGlsZSAoTiA8IDYgJiYgUiA8IDMpOworCisJaWYgKE4gPCA2KSB7CisJCWVycigic3RyYW5nZSBmcmVxdWVuY3k6IE4gPCA2XG4iKTsKKwkJcmV0dXJuOworCX0KKwlGID0gZnJlcV9oejsKKwlGICo9ICh1NjQpIChSICogdmNvZGl2ICogMjYyMTQ0KTsKKwlkcHJpbnRrKCIxIE46ICVkLCBGOiAlbGxkLCBSOiAlZFxuIiwgTiwgKGxvbmcgbG9uZylGLCBSKTsKKwlkb19kaXYoRiwgc3RhdGUtPmNvbmZpZy0+eHRhbF9raHoqMTAwMCAqIGZhY3RvciAqIDIpOworCWRwcmludGsoIjIgTjogJWQsIEY6ICVsbGQsIFI6ICVkXG4iLCBOLCAobG9uZyBsb25nKUYsIFIpOworCUYgLT0gKE4gKyAzMikgKiAyNjIxNDQ7CisKKwlkcHJpbnRrKCIzIE46ICVkLCBGOiAlbGxkLCBSOiAlZFxuIiwgTiwgKGxvbmcgbG9uZylGLCBSKTsKKworCWlmIChzdGF0ZS0+RndpbmRvd19lbmFibGVkKSB7CisJCWlmIChGID4gKDI2MjE0NCAvIDIgLSAxNjM4KSkKKwkJCUYgPSAyNjIxNDQgLyAyIC0gMTYzODsKKwkJaWYgKEYgPCAoLTI2MjE0NCAvIDIgKyAxNjM4KSkKKwkJCUYgPSAtMjYyMTQ0IC8gMiArIDE2Mzg7CisJCWlmICgoRiA8IDMyNzcgJiYgRiA+IDApIHx8IChGID4gLTMyNzcgJiYgRiA8IDApKSB7CisJCQlGID0gMDsKKwkJCXIgPSBjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MTApOworCQkJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxMCwgciB8ICgxIDw8IDYpKTsKKwkJfQorCX0KKwlkcHJpbnRrKCI0IE46ICVkLCBGOiAlbGxkLCBSOiAlZFxuIiwgTiwgKGxvbmcgbG9uZylGLCBSKTsKKworCSpuID0gKHUxNikgTjsKKwkqZiA9IChzMzIpIEY7Cit9CisKKworc3RhdGljIHZvaWQgY3gyNDExM19zZXRfbmZyKHN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSwgdTE2IG4sIHMzMiBmLCB1OCByKQoreworCXU4IHJlZzsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDE5LCAobiA+PiAxKSAmIDB4ZmYpOworCisJcmVnID0gKChuICYgMHgxKSA8PCA3KSB8ICgoZiA+PiAxMSkgJiAweDdmKTsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDFhLCByZWcpOworCisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxYiwgKGYgPj4gMykgJiAweGZmKTsKKworCXJlZyA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxYykgJiAweDFmOworCWN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MWMsIHJlZyB8ICgoZiAmIDB4NykgPDwgNSkpOworCisJY3gyNDExM19zZXRfRnJlZihzdGF0ZSwgciAtIDEpOworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxdWVuY3kpCit7CisJdTggciA9IDE7IC8qIG9yIDIgKi8KKwl1MTYgbiA9IDY7CisJczMyIGYgPSAwOworCisJciA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxNCk7CisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxNCwgciAmIDB4M2YpOworCisJciA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxMCk7CisJY3gyNDExM193cml0ZXJlZyhzdGF0ZSwgMHgxMCwgciAmIDB4YmYpOworCisJc3RhdGUtPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKworCWRwcmludGsoInR1bmluZyB0byBmcmVxdWVuY3k6ICVkXG4iLCBmcmVxdWVuY3kpOworCisJY3gyNDExM19jYWxjX3BsbF9uZihzdGF0ZSwgJm4sICZmKTsKKwljeDI0MTEzX3NldF9uZnIoc3RhdGUsIG4sIGYsIHN0YXRlLT5yZWZkaXYpOworCisJciA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgxOCkgJiAweGJmOworCWlmIChzdGF0ZS0+dmNvZGl2ICE9IFZDT0RJVjIpCisJCXIgfD0gMSA8PCA2OworCWN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MTgsIHIpOworCisJLyogVGhlIG5lZWQgZm9yIHRoaXMgc2xlZXAgaXMgbm90IGNsZWFyLiBCdXQgaGVscHMgaW4gc29tZSBjYXNlcyAqLworCW1zbGVlcCg1KTsKKworCXIgPSBjeDI0MTEzX3JlYWRyZWcoc3RhdGUsIDB4MWMpICYgMHhlZjsKKwljeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDFjLCByIHwgKDEgPDwgNCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0OworCisJc3RhdGUtPnR1bmVyX2dhaW5fdGhyZXMgPSAtNTA7CisJc3RhdGUtPmdhaW5fbGV2ZWwgPSAyNTU7IC8qIHRvIGZvcmNlIGEgZ2Fpbi1zZXR0aW5nIGluaXRpYWxpemF0aW9uICovCisJc3RhdGUtPmljcF9tb2RlID0gMDsKKworCWlmIChzdGF0ZS0+Y29uZmlnLT54dGFsX2toeiA8IDExMDAwKSB7CisJCXN0YXRlLT5pY3BfYXV0b19oaSAgPSBJQ1BfTEVWRUw0OworCQlzdGF0ZS0+aWNwX2F1dG9fbWhpICA9IElDUF9MRVZFTDQ7CisJCXN0YXRlLT5pY3BfYXV0b19tbG93ID0gSUNQX0xFVkVMMzsKKwkJc3RhdGUtPmljcF9hdXRvX2xvdyA9IElDUF9MRVZFTDM7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmljcF9hdXRvX2hpICA9IElDUF9MRVZFTDQ7CisJCXN0YXRlLT5pY3BfYXV0b19taGkgID0gSUNQX0xFVkVMNDsKKwkJc3RhdGUtPmljcF9hdXRvX21sb3cgPSBJQ1BfTEVWRUwzOworCQlzdGF0ZS0+aWNwX2F1dG9fbG93ID0gSUNQX0xFVkVMMjsKKwl9CisKKwlzdGF0ZS0+aWNwX2RpZyA9IElDUF9MRVZFTDM7CisJc3RhdGUtPmljcF9tYW4gPSBJQ1BfTEVWRUwxOworCXN0YXRlLT5hY3Bfb24gID0gMTsKKwlzdGF0ZS0+dmNvX21vZGUgPSAwOworCXN0YXRlLT52Y29fc2hpZnQgPSAwOworCXN0YXRlLT52Y29fYmFuZCA9IFZDT0JBTkRTRUxfMTsKKwlzdGF0ZS0+YnNfZGVsYXkgPSA4OworCXN0YXRlLT5ic19mcmVxY250ID0gMHgwZmZmOworCXN0YXRlLT5ic19yZGl2ID0gMHgwZmZmOworCXN0YXRlLT5wcmVzY2FsZXJfbW9kZSA9IDA7CisJc3RhdGUtPmxuYV9nYWluID0gTE5BX01BWF9HQUlOOworCXN0YXRlLT5yZnZnYV9iaWFzX2N0cmwgPSAxOworCXN0YXRlLT5Gd2luZG93X2VuYWJsZWQgPSAxOworCisJY3gyNDExM19zZXRfRnJlZihzdGF0ZSwgMCk7CisJY3gyNDExM19lbmFibGUoc3RhdGUsIDB4M2QpOworCWN4MjQxMTNfc2V0X3BhcmFtZXRlcnMoc3RhdGUpOworCisJY3gyNDExM19zZXRfZ2Fpbl9zZXR0aW5ncyhzdGF0ZSwgLTMwKTsKKworCWN4MjQxMTNfc2V0X2JhbmR3aWR0aChzdGF0ZSwgMTgwMjUpOworCWN4MjQxMTNfc2V0X2Nsa19pbnZlcnNpb24oc3RhdGUsIDEpOworCisJaWYgKHN0YXRlLT5jb25maWctPnh0YWxfa2h6ID49IDQwMDAwKQorCQlyZXQgPSBjeDI0MTEzX3dyaXRlcmVnKHN0YXRlLCAweDAyLAorCQkJKGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgwMikgJiAweGZiKSB8ICgxIDw8IDIpKTsKKwllbHNlCisJCXJldCA9IGN4MjQxMTNfd3JpdGVyZWcoc3RhdGUsIDB4MDIsCisJCQkoY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDAyKSAmIDB4ZmIpIHwgKDAgPDwgMikpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjeDI0MTEzX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwkvKiBmb3IgYSBST0xMLU9GRiBmYWN0b3Igb2YgMC4zNSwgMC4yOiA2MDAsIDAuMjU6IDYyNSAqLworCXUzMiByb2xsX29mZiA9IDY3NTsKKwl1MzIgYnc7CisKKwlidyAgPSAoKHAtPnUucXBzay5zeW1ib2xfcmF0ZS8xMDApICogcm9sbF9vZmYpIC8gMTAwMDsKKwlidyArPSAoMTAwMDAwMDAvMTAwKSArIDU7CisJYncgLz0gMTA7CisJYncgKz0gMTAwMDsKKwljeDI0MTEzX3NldF9iYW5kd2lkdGgoc3RhdGUsIGJ3KTsKKworCWN4MjQxMTNfc2V0X2ZyZXF1ZW5jeShzdGF0ZSwgcC0+ZnJlcXVlbmN5KTsKKwltc2xlZXAoNSk7CisJcmV0dXJuIGN4MjQxMTNfZ2V0X3N0YXR1cyhmZSwgJmJ3KTsKK30KKworc3RhdGljIHM4IGN4MjQxMTNfYWdjX3RhYmxlWzJdWzEwXSA9IHsKKwl7LTU0LCAtNDEsIC0zNSwgLTMwLCAtMjUsIC0yMSwgLTE2LCAtMTAsICAtNiwgIC0yfSwKKwl7LTM5LCAtMzUsIC0zMCwgLTI1LCAtMTksIC0xNSwgLTExLCAgLTUsICAgMSwgICA5fSwKK307CisKK3ZvaWQgY3gyNDExM19hZ2NfY2FsbGJhY2soc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJczE2IHMsIGk7CisJaWYgKCFmZS0+b3BzLnJlYWRfc2lnbmFsX3N0cmVuZ3RoKQorCQlyZXR1cm47CisKKwlkbyB7CisJCS8qIHRoaXMgb25seSB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IENYMjQxMjMgaW1wbGVtZW50YXRpb24gKi8KKwkJZmUtPm9wcy5yZWFkX3NpZ25hbF9zdHJlbmd0aChmZSwgKHUxNiAqKSAmcyk7CisJCXMgPj49IDg7CisJCWRwcmludGsoInNpZ25hbCBzdHJlbmd0aDogJWRcbiIsIHMpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMTNfYWdjX3RhYmxlWzBdKTsgaSsrKQorCQkJaWYgKGN4MjQxMTNfYWdjX3RhYmxlW3N0YXRlLT5nYWluX2xldmVsXVtpXSA+IHMpCisJCQkJYnJlYWs7CisJCXMgPSAtMjUgLSBpKjU7CisJfSB3aGlsZSAoY3gyNDExM19zZXRfZ2Fpbl9zZXR0aW5ncyhzdGF0ZSwgcykpOworfQorRVhQT1JUX1NZTUJPTChjeDI0MTEzX2FnY19jYWxsYmFjayk7CisKK3N0YXRpYyBpbnQgY3gyNDExM19nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgY3gyNDExM19zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwkqZnJlcXVlbmN5ID0gc3RhdGUtPmZyZXF1ZW5jeTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTEzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTNfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJZHByaW50aygiXG4iKTsKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgY3gyNDExM190dW5lcl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJDb25leGFudCBDWDI0MTEzIiwKKwkJLmZyZXF1ZW5jeV9taW4gID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXAgPSAxMjUsCisJfSwKKworCS5yZWxlYXNlICAgICAgID0gY3gyNDExM19yZWxlYXNlLAorCisJLmluaXQgICAgICAgICAgPSBjeDI0MTEzX2luaXQsCisJLnNsZWVwICAgICAgICAgPSBOVUxMLAorCisJLnNldF9wYXJhbXMgICAgPSBjeDI0MTEzX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBjeDI0MTEzX2dldF9mcmVxdWVuY3ksCisJLmdldF9iYW5kd2lkdGggPSBOVUxMLAorCS5nZXRfc3RhdHVzICAgID0gY3gyNDExM19nZXRfc3RhdHVzLAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDExM19hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCWNvbnN0IHN0cnVjdCBjeDI0MTEzX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0cnVjdCBjeDI0MTEzX3N0YXRlICpzdGF0ZSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTEzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaW50IHJjOworCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCWVycigiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKworCWluZm8oInRyeWluZyB0byBkZXRlY3QgbXlzZWxmXG4iKTsKKworCS8qIG1ha2luZyBhIGR1bW15IHJlYWQsIGJlY2F1c2Ugb2Ygc29tZSBleHBlY3RlZCB0cm91YmxlcworCSAqIGFmdGVyIHBvd2VyIG9uICovCisJY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDAwKTsKKworCXJjID0gY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDAwKTsKKwlpZiAocmMgPCAwKSB7CisJCWluZm8oIkNYMjQxMTMgbm90IGZvdW5kLlxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXN0YXRlLT5yZXYgPSByYzsKKworCXN3aXRjaCAocmMpIHsKKwljYXNlIDB4NDM6CisJCWluZm8oImRldGVjdGVkIENYMjQxMTMgdmFyaWFudFxuIik7CisJCWJyZWFrOworCWNhc2UgUkVWX0NYMjQxMTM6CisJCWluZm8oInN1Y2Vzc2Z1bGx5IGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJ1bnN1cHBvcnRlZCBkZXZpY2UgaWQ6ICV4XG4iLCBzdGF0ZS0+cmV2KTsKKwkJZ290byBlcnJvcjsKKwl9CisJc3RhdGUtPnZlciA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgwMSk7CisJaW5mbygidmVyc2lvbjogJXhcbiIsIHN0YXRlLT52ZXIpOworCisJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZjeDI0MTEzX3R1bmVyX29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCWZlLT50dW5lcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuIGZlOworCitlcnJvcjoKKwlrZnJlZShzdGF0ZSk7CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woY3gyNDExM19hdHRhY2gpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOworCitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJAbGludXh0di5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IENYMjQxMTMvQ1gyNDEyOGhhcmR3YXJlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5oCmluZGV4IDVhYjNkZDEuLjVkZTBmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuaApAQCAtMTYsNyArMTYsNyBAQAogICoKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpZm5kZWYgQ1gyNDExM19ICkBAIC0zMCw5ICszMCwxMyBAQAogCXUzMiB4dGFsX2toejsKIH07CiAKLS8qIFRPRE86ICNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfQ1gyNDExMykgfHwgXAotICogKGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKSAqLworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0RWQl9UVU5FUl9DWDI0MTEzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTNfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwKKwljb25zdCBzdHJ1Y3QgY3gyNDExM19jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogCitleHRlcm4gdm9pZCBjeDI0MTEzX2FnY19jYWxsYmFjayhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTEzX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAljb25zdCBzdHJ1Y3QgY3gyNDExM19jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CkBAIC00NCw1ICs0OCw2IEBACiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiB9CisjZW5kaWYKIAogI2VuZGlmIC8qIENYMjQxMTNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKaW5kZXggYjE0NGIzMC4uOWI2Yzg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICNkZWZpbmUgQ1gyNDExNl9IQVNfU1lOQ0xPQ0sgKDB4MDgpCiAjZGVmaW5lIENYMjQxMTZfSEFTX1VOS05PV04xICgweDEwKQogI2RlZmluZSBDWDI0MTE2X0hBU19VTktOT1dOMiAoMHgyMCkKLSNkZWZpbmUgQ1gyNDExNl9TVEFUVVNfTUFTSyAgKDB4M2YpCisjZGVmaW5lIENYMjQxMTZfU1RBVFVTX01BU0sgICgweDBmKQogI2RlZmluZSBDWDI0MTE2X1NJR05BTF9NQVNLICAoMHhjMCkKIAogI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGICAgKDApICAgIC8qIHRvbmVidXJzdCBuZXZlciBzZW50ICovCkBAIC0xNjAsNiArMTYwLDcgQEAKIAlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247CiAJZmVfY29kZV9yYXRlX3QgZmVjOwogCisJZmVfZGVsaXZlcnlfc3lzdGVtX3QgZGVsc3lzOwogCWZlX21vZHVsYXRpb25fdCBtb2R1bGF0aW9uOwogCWZlX3BpbG90X3QgcGlsb3Q7CiAJZmVfcm9sbG9mZl90IHJvbGxvZmY7CkBAIC00MTEsMTQgKzQxMiwxNSBAQAogfTsKIAogc3RhdGljIGludCBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAotCWZlX21vZHVsYXRpb25fdCBtLCBmZV9jb2RlX3JhdGVfdCBmKQorCWZlX2RlbGl2ZXJ5X3N5c3RlbV90IGQsIGZlX21vZHVsYXRpb25fdCBtLCBmZV9jb2RlX3JhdGVfdCBmKQogewogCWludCBpLCByZXQgPSAtRU9QTk9UU1VQUDsKIAogCWRwcmludGsoIiVzKDB4JTAyeCwweCUwMngpXG4iLCBfX2Z1bmNfXywgbSwgZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShDWDI0MTE2X01PREZFQ19NT0RFUyk7IGkrKykgewotCQlpZiAoKG0gPT0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbaV0ubW9kdWxhdGlvbikgJiYKKwkJaWYgKChkID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLmRlbGl2ZXJ5X3N5c3RlbSkgJiYKKwkJCShtID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLm1vZHVsYXRpb24pICYmCiAJCQkoZiA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5mZWMpKSB7CiAJCQkJcmV0ID0gaTsKIAkJCQlicmVhazsKQEAgLTQyOSwxMyArNDMxLDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgY3gyNDExNl9zZXRfZmVjKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwKLQlmZV9tb2R1bGF0aW9uX3QgbW9kLCBmZV9jb2RlX3JhdGVfdCBmZWMpCisJZmVfZGVsaXZlcnlfc3lzdGVtX3QgZGVsc3lzLCBmZV9tb2R1bGF0aW9uX3QgbW9kLCBmZV9jb2RlX3JhdGVfdCBmZWMpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlkcHJpbnRrKCIlcygweCUwMngsMHglMDJ4KVxuIiwgX19mdW5jX18sIG1vZCwgZmVjKTsKIAotCXJldCA9IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdGF0ZSwgbW9kLCBmZWMpOworCXJldCA9IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdGF0ZSwgZGVsc3lzLCBtb2QsIGZlYyk7CiAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTY3OSw3ICs2ODEsOCBAQAogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JaW50IGxvY2sgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMpOworCWludCBsb2NrID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TU1RBVFVTKSAmCisJCUNYMjQxMTZfU1RBVFVTX01BU0s7CiAKIAlkcHJpbnRrKCIlczogc3RhdHVzID0gMHglMDJ4XG4iLCBfX2Z1bmNfXywgbG9jayk7CiAKQEAgLTEyMDUsNyArMTIwOCw3IEBACiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKIAlmZV9zdGF0dXNfdCB0dW5lcnN0YXQ7Ci0JaW50IGksIHN0YXR1cywgcmV0LCByZXR1bmU7CisJaW50IGksIHN0YXR1cywgcmV0LCByZXR1bmUgPSAxOwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC0xMjIyLDcgKzEyMjUsNiBAQAogCiAJCS8qIFBpbG90IGRvZXNuJ3QgZXhpc3QgaW4gRFZCLVMsIHR1cm4gYml0IG9mZiAqLwogCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09GRjsKLQkJcmV0dW5lID0gMTsKIAogCQkvKiBEVkItUyBvbmx5IHN1cHBvcnRzIDAuMzUgKi8KIAkJaWYgKGMtPnJvbGxvZmYgIT0gUk9MTE9GRl8zNSkgewpAQCAtMTI1MCw3ICsxMjUyLDcgQEAKIAkJY2FzZSBQSUxPVF9BVVRPOgkvKiBOb3Qgc3VwcG9ydGVkIGJ1dCBlbXVsYXRlZCAqLwogCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gKGMtPm1vZHVsYXRpb24gPT0gUVBTSykKIAkJCQk/IENYMjQxMTZfUElMT1RfT0ZGIDogQ1gyNDExNl9QSUxPVF9PTjsKLQkJCXJldHVuZSA9IDI7CisJCQlyZXR1bmUrKzsKIAkJCWJyZWFrOwogCQljYXNlIFBJTE9UX09GRjoKIAkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT0ZGOwpAQCAtMTI4Nyw2ICsxMjg5LDcgQEAKIAkJCV9fZnVuY19fLCBjLT5kZWxpdmVyeV9zeXN0ZW0pOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQorCXN0YXRlLT5kbnh0LmRlbHN5cyA9IGMtPmRlbGl2ZXJ5X3N5c3RlbTsKIAlzdGF0ZS0+ZG54dC5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKIAlzdGF0ZS0+ZG54dC5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CiAJc3RhdGUtPmRueHQucGlsb3QgPSBjLT5waWxvdDsKQEAgLTEyOTcsNyArMTMwMCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBGRUNfTk9ORS9BVVRPIGZvciBEVkItUzIgaXMgbm90IHN1cHBvcnRlZCBhbmQgZGV0ZWN0ZWQgaGVyZSAqLwotCXJldCA9IGN4MjQxMTZfc2V0X2ZlYyhzdGF0ZSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKTsKKwlyZXQgPSBjeDI0MTE2X3NldF9mZWMoc3RhdGUsIGMtPmRlbGl2ZXJ5X3N5c3RlbSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKTsKIAlpZiAocmV0ICE9ICAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzA4LDYgKzEzMTEsNyBAQAogCS8qIGRpc2NhcmQgdGhlICdjdXJyZW50JyB0dW5pbmcgcGFyYW1ldGVycyBhbmQgcHJlcGFyZSB0byB0dW5lICovCiAJY3gyNDExNl9jbG9uZV9wYXJhbXMoZmUpOwogCisJZHByaW50aygiJXM6ICAgZGVsc3lzICAgICAgPSAlZFxuIiwgX19mdW5jX18sIHN0YXRlLT5kY3VyLmRlbHN5cyk7CiAJZHByaW50aygiJXM6ICAgbW9kdWxhdGlvbiAgPSAlZFxuIiwgX19mdW5jX18sIHN0YXRlLT5kY3VyLm1vZHVsYXRpb24pOwogCWRwcmludGsoIiVzOiAgIGZyZXF1ZW5jeSAgID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0ZS0+ZGN1ci5mcmVxdWVuY3kpOwogCWRwcmludGsoIiVzOiAgIHBpbG90ICAgICAgID0gJWQgKHZhbCA9IDB4JTAyeClcbiIsIF9fZnVuY19fLApAQCAtMTQyNyw2ICsxNDMxLDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBjeDI0MTE2X3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorCXVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLCB1bnNpZ25lZCBpbnQgKmRlbGF5LCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCSpkZWxheSA9IEhaIC8gNTsKKwlpZiAocGFyYW1zKSB7CisJCWludCByZXQgPSBjeDI0MTE2X3NldF9mcm9udGVuZChmZSwgcGFyYW1zKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBjeDI0MTE2X3JlYWRfc3RhdHVzKGZlLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfZ2V0X2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIERWQkZFX0FMR09fSFc7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDI0MTE2X29wcyA9IHsKIAogCS5pbmZvID0gewpAQCAtMTQ1OCw2ICsxNDc5LDggQEAKIAkuc2V0X3ZvbHRhZ2UgPSBjeDI0MTE2X3NldF92b2x0YWdlLAogCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gY3gyNDExNl9zZW5kX2Rpc2VxY19tc2csCiAJLmRpc2VxY19zZW5kX2J1cnN0ID0gY3gyNDExNl9kaXNlcWNfc2VuZF9idXJzdCwKKwkuZ2V0X2Zyb250ZW5kX2FsZ28gPSBjeDI0MTE2X2dldF9hbGdvLAorCS50dW5lID0gY3gyNDExNl90dW5lLAogCiAJLnNldF9wcm9wZXJ0eSA9IGN4MjQxMTZfc2V0X3Byb3BlcnR5LAogCS5nZXRfcHJvcGVydHkgPSBjeDI0MTE2X2dldF9wcm9wZXJ0eSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKaW5kZXggM2U4MTI2OC4uYWFiODExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKQEAgLTY2LDcgKzY2LDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotZXh0ZXJuIGludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCitzdGF0aWMgaW5saW5lCitpbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCQkJCSAgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCiAJCQkJICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pCiB7CkBAIC03NCwxMyArNzUsMTUgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3N0YXRpYyBpbmxpbmUKK2ludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQorc3RhdGljIGlubGluZQoraW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCmluZGV4IGI5Y2E1YzguLmVjNGUwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIEZfU0VUXzBENGgJMgogCiBlbnVtIGZ3X2l4IHsKLSNkZWZpbmUgX0ZXX0VOVFJZKGEsIGIpCQliCisjZGVmaW5lIF9GV19FTlRSWShhLCBiLCBjKQliCiAjaW5jbHVkZSAiZHJ4Mzk3eERfZncuaCIKIH07CiAKQEAgLTcyLDExICs3MiwxMSBAQAogCWludCByZWZjbnQ7CiAJY29uc3QgdTggKmRhdGFbQVJSQVlfU0laRShibG9iX25hbWUpXTsKIH0gZndbXSA9IHsKLSNkZWZpbmUgX0ZXX0VOVFJZKGEsIGIpCQl7CQkJXAotCQkJLm5hbWUJPSBhLAkJCVwKLQkJCS5maWxlCT0gMCwJCQlcCi0JCQkubG9jawk9IFJXX0xPQ0tfVU5MT0NLRUQsCVwKLQkJCS5yZWZjbnQgPSAwLAkJCVwKKyNkZWZpbmUgX0ZXX0VOVFJZKGEsIGIsIGMpCXsJCQkJCVwKKwkJCS5uYW1lCT0gYSwJCQkJCVwKKwkJCS5maWxlCT0gMCwJCQkJCVwKKwkJCS5sb2NrCT0gX19SV19MT0NLX1VOTE9DS0VEKGZ3W2NdLmxvY2spLAlcCisJCQkucmVmY250ID0gMCwJCQkJCVwKIAkJCS5kYXRhCT0geyB9CQl9CiAjaW5jbHVkZSAiZHJ4Mzk3eERfZncuaCIKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eERfZncuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RF9mdy5oCmluZGV4IDAxZGUwMmEuLmM4YjQ0YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RF9mdy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RF9mdy5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKi8KIAogI2lmZGVmIF9GV19FTlRSWQotCV9GV19FTlRSWSgiZHJ4Mzk3eEQuQTIuZnciLAlEUlhEX0ZXX0EyID0gMAkJKSwKLQlfRldfRU5UUlkoImRyeDM5N3hELkIxLmZ3IiwJRFJYRF9GV19CMQkJKSwKKwlfRldfRU5UUlkoImRyeDM5N3hELkEyLmZ3IiwJRFJYRF9GV19BMiA9IDAsCURSWERfRldfQTIJKSwKKwlfRldfRU5UUlkoImRyeDM5N3hELkIxLmZ3IiwJRFJYRF9GV19CMSwJRFJYRF9GV19CMQkpLAogI3VuZGVmIF9GV19FTlRSWQogI2VuZGlmIC8qIF9GV19FTlRSWSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwppbmRleCBlYTA1ODE1Li45ZjYzNDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCS5jb3VudCA9IDQsCiAJLmVudHJpZXMgPSB7CiAJCXsgMTI1MDAwMCwgNTAwLCAweGM0LCAweDAwfSwKLQkJeyAxNTUwMDAwLCA1MDAsIDB4YzQsIDB4NDB9LAorCQl7IDE0NTAwMDAsIDUwMCwgMHhjNCwgMHg0MH0sCiAJCXsgMjA1MDAwMCwgNTAwLCAweGM0LCAweDgwfSwKIAkJeyAyMTUwMDAwLCA1MDAsIDB4YzQsIDB4YzB9LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIERyaXZlciBmb3IgTEcgQVRTQyBsZ2R0MzMwNCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQHN1bmR0ZWsuZGU+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImxnZHQzMzA0LmgiCisKK3N0YXRpYyAgdW5zaWduZWQgaW50IGRlYnVnID0gMDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsImxnZHQzMzA0IGRlYnVnZ2luZyAoZGVmYXVsdCBvZmYpIik7CisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pIGlmIChkZWJ1ZykgZG8ge1wKKwkJCXByaW50aygibGdkdDMzMDQgZGVidWc6ICIgZm10LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQorCitzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisJX191MzIgc25yOworCV9fdTMyIGN1cnJlbnRfZnJlcXVlbmN5OworCV9fdTggYWRkcjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKK307CisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlX2RlbW9kX2J5dGVzIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgX191OCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX21zZyBpMmNtc2dzID0geworCQkuYWRkciA9IHN0YXRlLT5hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gMywKKwkJLmJ1ZiA9IGJ1ZgorCX07CisJaW50IGk7CisJaW50IGVycjsKKworCWZvciAoaT0wOyBpPGxlbi0xOyBpKz0zKXsKKwkJaWYoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmaTJjbXNncywgMSkpPDApIHsKKwkJCXByaW50aygiJXMgaTJjX3RyYW5zZmVyIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJZWxzZQorCQkJCXJldHVybiAtRVJFTU9URUlPOworCQl9CisJCWkyY21zZ3MuYnVmICs9IDM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA0X2kyY19yZWFkX3JlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGkyY19tc2cgaTJjbXNnc1syXTsKKwlpbnQgcmV0OworCV9fdTggYnVmOworCisJX191OCByZWdidWZbMl0gPSB7IHJlZz4+OCwgcmVnJjB4ZmYgfTsKKworCWkyY21zZ3NbMF0uYWRkciA9IHN0YXRlLT5hZGRyOworCWkyY21zZ3NbMF0uZmxhZ3MgPSAwOworCWkyY21zZ3NbMF0ubGVuID0gMjsKKwlpMmNtc2dzWzBdLmJ1ZiA9IHJlZ2J1ZjsKKworCWkyY21zZ3NbMV0uYWRkciA9IHN0YXRlLT5hZGRyOworCWkyY21zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwlpMmNtc2dzWzFdLmxlbiA9IDE7CisJaTJjbXNnc1sxXS5idWYgPSAmYnVmOworCisJaWYoKHJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBpMmNtc2dzLCAyKSk8MCkgeworCQlwcmludGsoIiVzIGkyY190cmFuc2ZlciBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDRfaTJjX3dyaXRlX3JlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHJlZywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJY2hhciBidWZmZXJbM10gPSB7IHJlZz4+OCwgcmVnJjB4ZmYsIHZhbCB9OworCWludCByZXQ7CisKKwlzdHJ1Y3QgaTJjX21zZyBpMmNtc2dzID0geworCQkuYWRkciA9IHN0YXRlLT5hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gMywKKwkJLmJ1Zj1idWZmZXIKKwl9OworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmaTJjbXNncywgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCXByaW50aygiJXMgaTJjX3RyYW5zZmVyIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBsZ2R0MzMwNF9zb2Z0X1Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWxnZHQzMzA0X2kyY193cml0ZV9yZWcoZmUsIDB4MDAwMiwgMHg5YSk7CisJbGdkdDMzMDRfaTJjX3dyaXRlX3JlZyhmZSwgMHgwMDAyLCAweDliKTsKKwltZGVsYXkoMjAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNF9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkgeworCWludCBlcnIgPSAwOworCisJc3RhdGljIF9fdTggbGdkdDMzMDRfdnNiOF9kYXRhW10gPSB7CisJCS8qIDE2Yml0ICAsIDhiaXQgKi8KKwkJLyogcmVncyAgICwgdmFsICAqLworCQkweDAwLCAweDAwLCAweDAyLAorCQkweDAwLCAweDAwLCAweDEzLAorCQkweDAwLCAweDBkLCAweDAyLAorCQkweDAwLCAweDBlLCAweDAyLAorCQkweDAwLCAweDEyLCAweDMyLAorCQkweDAwLCAweDEzLCAweGM0LAorCQkweDAxLCAweDEyLCAweDE3LAorCQkweDAxLCAweDEzLCAweDE1LAorCQkweDAxLCAweDE0LCAweDE4LAorCQkweDAxLCAweDE1LCAweGZmLAorCQkweDAxLCAweDE2LCAweDJjLAorCQkweDAyLCAweDE0LCAweDY3LAorCQkweDAyLCAweDI0LCAweDhkLAorCQkweDA0LCAweDI3LCAweDEyLAorCQkweDA0LCAweDI4LCAweDRmLAorCQkweDAzLCAweDA4LCAweDgwLAorCQkweDAzLCAweDA5LCAweDAwLAorCQkweDAzLCAweDBkLCAweDAwLAorCQkweDAzLCAweDBlLCAweDFjLAorCQkweDAzLCAweDE0LCAweGUxLAorCQkweDA1LCAweDBlLCAweDViLAorCX07CisKKwkvKiBub3QgeWV0IHRlc3RlZCAuLiAqLworCXN0YXRpYyBfX3U4IGxnZHQzMzA0X3FhbTY0X2RhdGFbXSA9IHsKKwkJLyogMTZiaXQgICwgOGJpdCAqLworCQkvKiByZWdzICAgLCB2YWwgICovCisJCTB4MDAsIDB4MDAsIDB4MTgsCisJCTB4MDAsIDB4MGQsIDB4MDIsCisJCS8vMHgwMCwgMHgwZSwgMHgwMiwKKwkJMHgwMCwgMHgxMiwgMHgyYSwKKwkJMHgwMCwgMHgxMywgMHgwMCwKKwkJMHgwMywgMHgxNCwgMHhlMywKKwkJMHgwMywgMHgwZSwgMHgxYywKKwkJMHgwMywgMHgwOCwgMHg2NiwKKwkJMHgwMywgMHgwOSwgMHg2NiwKKwkJMHgwMywgMHgwYSwgMHgwOCwKKwkJMHgwMywgMHgwYiwgMHg5YiwKKwkJMHgwNSwgMHgwZSwgMHg1YiwKKwl9OworCisKKwkvKiB0ZXN0ZWQgd2l0aCBLV29ybGQgYTM0MCAqLworCXN0YXRpYyBfX3U4IGxnZHQzMzA0X3FhbTI1Nl9kYXRhW10gPSB7CisJCS8qIDE2Yml0ICAsIDhiaXQgKi8KKwkJLyogcmVncyAgICwgdmFsICAqLworCQkweDAwLCAweDAwLCAweDAxLCAgLy8weDE5LAorCQkweDAwLCAweDEyLCAweDJhLAorCQkweDAwLCAweDEzLCAweDgwLAorCQkweDAwLCAweDBkLCAweDAyLAorCQkweDAzLCAweDE0LCAweGUzLAorCisJCTB4MDMsIDB4MGUsIDB4MWMsCisJCTB4MDMsIDB4MDgsIDB4NjYsCisJCTB4MDMsIDB4MDksIDB4NjYsCisJCTB4MDMsIDB4MGEsIDB4MDgsCisJCTB4MDMsIDB4MGIsIDB4OWIsCisKKwkJMHgwMywgMHgwZCwgMHgxNCwKKwkJLy8weDA1LCAweDBlLCAweDViLAorCQkweDAxLCAweDA2LCAweDRhLAorCQkweDAxLCAweDA3LCAweDNkLAorCQkweDAxLCAweDA4LCAweDcwLAorCQkweDAxLCAweDA5LCAweGEzLAorCisJCTB4MDUsIDB4MDQsIDB4ZmQsCisKKwkJMHgwMCwgMHgwZCwgMHg4MiwKKworCQkweDA1LCAweDBlLCAweDViLAorCisJCTB4MDUsIDB4MGUsIDB4NWIsCisKKwkJMHgwMCwgMHgwMiwgMHg5YSwKKworCQkweDAwLCAweDAyLCAweDliLAorCisJCTB4MDAsIDB4MDAsIDB4MDEsCisJCTB4MDAsIDB4MTIsIDB4MmEsCisJCTB4MDAsIDB4MTMsIDB4ODAsCisJCTB4MDAsIDB4MGQsIDB4MDIsCisJCTB4MDMsIDB4MTQsIDB4ZTMsCisKKwkJMHgwMywgMHgwZSwgMHgxYywKKwkJMHgwMywgMHgwOCwgMHg2NiwKKwkJMHgwMywgMHgwOSwgMHg2NiwKKwkJMHgwMywgMHgwYSwgMHgwOCwKKwkJMHgwMywgMHgwYiwgMHg5YiwKKworCQkweDAzLCAweDBkLCAweDE0LAorCQkweDAxLCAweDA2LCAweDRhLAorCQkweDAxLCAweDA3LCAweDNkLAorCQkweDAxLCAweDA4LCAweDcwLAorCQkweDAxLCAweDA5LCAweGEzLAorCisJCTB4MDUsIDB4MDQsIDB4ZmQsCisKKwkJMHgwMCwgMHgwZCwgMHg4MiwKKworCQkweDA1LCAweDBlLCAweDViLAorCX07CisKKwlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaWYgKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gIT0gcGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwkJc3dpdGNoKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJCWNhc2UgVlNCXzg6CisJCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoZmUsIGxnZHQzMzA0X3ZzYjhfZGF0YSwKKwkJCQkJc2l6ZW9mKGxnZHQzMzA0X3ZzYjhfZGF0YSkpOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzY0OgorCQkJZXJyID0gaTJjX3dyaXRlX2RlbW9kX2J5dGVzKGZlLCBsZ2R0MzMwNF9xYW02NF9kYXRhLAorCQkJCQlzaXplb2YobGdkdDMzMDRfcWFtNjRfZGF0YSkpOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzI1NjoKKwkJCWVyciA9IGkyY193cml0ZV9kZW1vZF9ieXRlcyhmZSwgbGdkdDMzMDRfcWFtMjU2X2RhdGEsCisJCQkJCXNpemVvZihsZ2R0MzMwNF9xYW0yNTZfZGF0YSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChlcnIpIHsKKwkJCXByaW50aygiJXMgZXJyb3Igc2V0dGluZyBtb2R1bGF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uOworCQl9CisJfQorCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IHBhcmFtLT5mcmVxdWVuY3k7CisKKwlsZ2R0MzMwNF9zb2Z0X1Jlc2V0KGZlKTsKKworCisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCisJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA0X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpIHsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkgeworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgbGdkdDMzMDRfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGxnZHQzMzA0X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByMDExZDsKKwlpbnQgcWFtX2xjazsKKworCSpzdGF0dXMgPSAwOworCWRwcmludGsoImxnZHQgcmVhZCBzdGF0dXNcbiIpOworCisJcjAxMWQgPSBsZ2R0MzMwNF9pMmNfcmVhZF9yZWcoZmUsIDB4MDExZCk7CisKKwlkcHJpbnRrKCIlMDJ4XG4iLCByMDExZCk7CisKKwlzd2l0Y2goc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWlmIChyMDExZCAmIDB4ODApIHsKKwkJCWRwcmludGsoIlZTQiBMb2NrZWRcbiIpOworCQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCQkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJcWFtX2xjayA9IHIwMTFkICYgMHg3OworCQlzd2l0Y2gocWFtX2xjaykgeworCQkJY2FzZSAweDA6IGRwcmludGsoIlVubG9ja1xuIik7CisJCQkJICBicmVhazsKKwkJCWNhc2UgMHg0OiBkcHJpbnRrKCIxc3QgTG9jayBpbiBhY3F1aXNpdGlvbiBzdGF0ZVxuIik7CisJCQkJICBicmVhazsKKwkJCWNhc2UgMHg2OiBkcHJpbnRrKCIybmQgTG9jayBpbiBhY3F1aXNpdGlvbiBzdGF0ZVxuIik7CisJCQkJICBicmVhazsKKwkJCWNhc2UgMHg3OiBkcHJpbnRrKCJGaW5hbCBMb2NrIGluIGdvb2QgcmVjZXB0aW9uIHN0YXRlXG4iKTsKKwkJCQkgICpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJCQkJICAqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQkJCSAgKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKwkJCQkgICpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwkJCQkgIGJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiJXMgdW5oYW5kbGVkIG1vZHVsYXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgX191MzIgKmJlcikKK3sKKwlkcHJpbnRrKCJyZWFkIGJlclxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDRfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIF9fdTE2ICpzbnIpCit7CisJZHByaW50aygicmVhZCBzbnJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA0X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIF9fdTMyICp1Y2Jsb2NrcykKK3sKKwlkcHJpbnRrKCJyZWFkIHVjYmxvY2tzXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGdkdDMzMDRfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSAqKWZlLT5kZW1vZHVsYXRvcl9wcml2OworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRlbW9kX2xnZHQzMzA0PXsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiTEcgMzMwNCIsCisJCS50eXBlID0gRkVfQVRTQywKKwkJLmZyZXF1ZW5jeV9taW4gPSA1NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSA4NTgwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSA2MjUwMCwKKwkJLnN5bWJvbF9yYXRlX21pbiA9IDUwNTY5NDEsCisJCS5zeW1ib2xfcmF0ZV9tYXggPSAxMDc2MjAwMCwKKwkJLmNhcHMgPSBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYgfCBGRV9DQU5fOFZTQgorCX0sCisJLmluaXQgPSBsZ2R0MzMwNF9pbml0LAorCS5zbGVlcCA9IGxnZHQzMzA0X3NsZWVwLAorCS5zZXRfZnJvbnRlbmQgPSBsZ2R0MzMwNF9zZXRfcGFyYW1ldGVycywKKwkucmVhZF9zbnIgPSBsZ2R0MzMwNF9yZWFkX3NuciwKKwkucmVhZF9iZXIgPSBsZ2R0MzMwNF9yZWFkX2JlciwKKwkucmVhZF9zdGF0dXMgPSBsZ2R0MzMwNF9yZWFkX3N0YXR1cywKKwkucmVhZF91Y2Jsb2NrcyA9IGxnZHQzMzA0X3JlYWRfdWNibG9ja3MsCisJLnJlbGVhc2UgPSBsZ2R0MzMwNF9yZWxlYXNlLAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCogbGdkdDMzMDRfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNF9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisKKwlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnZHQzMzA0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJbWVtc2V0KHN0YXRlLCAweDAsIHNpemVvZihzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUpKTsKKwlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CisJc3RhdGUtPmkyYyA9IGkyYzsKKworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmRlbW9kX2xnZHQzMzA0LCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChsZ2R0MzMwNF9hdHRhY2gpOworTU9EVUxFX0FVVEhPUigiTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGVtcGlhdGVjaC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxHRSBMR0RUMzMwNCBEVkItVCBkZW1vZHVsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0MDlmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBEVkItVCBsZ2R0MzMwNCBkZW1vZHVsYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS49CisgKi8KKworI2lmbmRlZiBMR0RUMzMwNF9ICisjZGVmaW5lIExHRFQzMzA0X0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCitzdHJ1Y3QgbGdkdDMzMDRfY29uZmlnCit7CisJLyogZGVtb2R1bGF0b3IncyBJMkMgYWRkcmVzcyAqLworCXU4IGkyY19hZGRyZXNzOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsZ2R0MzMwNF9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzA0X2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsZ2R0MzMwNF9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzA0X2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFZCX0xHRFQgKi8KKworI2VuZGlmIC8qIExHRFQzMzA0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCmluZGV4IDQwNjQ0YWEuLjY2ZTJkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYwpAQCAtODc0LDYgKzg3NCw5IEBACiAJLyogTm90ZTogTGVhdmluZyB0aGUgSTJDIGdhdGUgb3BlbiBoZXJlLiAqLwogCXM1aDE0MTFfd3JpdGVyZWcoc3RhdGUsIFM1SDE0MTFfSTJDX1RPUF9BRERSLCAweGY1LCAxKTsKIAorCS8qIFB1dCB0aGUgZGV2aWNlIGludG8gbG93LXBvd2VyIG1vZGUgdW50aWwgZmlyc3QgdXNlICovCisJczVoMTQxMV9zZXRfcG93ZXJzdGF0ZSgmc3RhdGUtPmZyb250ZW5kLCAxKTsKKwogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRiNTJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfY29yZS5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogRHJpdmVyIGZvciBTaGFycCBzOTIxIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAc3VuZHRlay5kZT4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJzOTIxX2NvcmUuaCIKKworc3RhdGljIGludCBzOTIxX2lzZGJfaW5pdChzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldik7CitzdGF0aWMgaW50IHM5MjFfaXNkYl9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgc3RydWN0IHM5MjFfaXNkYl90X3RyYW5zbWlzc2lvbl9tb2RlX3BhcmFtcyAqcGFyYW1zKTsKK3N0YXRpYyBpbnQgczkyMV9pc2RiX3R1bmUoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHN0cnVjdCBzOTIxX2lzZGJfdF90dW5lX3BhcmFtcyAqcGFyYW1zKTsKK3N0YXRpYyBpbnQgczkyMV9pc2RiX2dldF9zdGF0dXMoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHZvaWQgKmRhdGEpOworCitzdGF0aWMgdTggaW5pdF90YWJsZVtdPXsgMHgwMSwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwMywgMHg0MCwgMHgwNCwgMHgwMSwKKwkJCSAweDA1LCAweDAwLCAweDA2LCAweDAwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLAorCQkJIDB4MDksIDB4MDAsIDB4MGEsIDB4MDAsIDB4MGIsIDB4NWEsIDB4MGMsIDB4MDAsCisJCQkgMHgwZCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgxMywgMHgxYiwgMHgxNCwgMHg4MCwKKwkJCSAweDE1LCAweDQwLCAweDE3LCAweDcwLCAweDE4LCAweDAxLCAweDE5LCAweDEyLAorCQkJIDB4MWEsIDB4MDEsIDB4MWIsIDB4MTIsIDB4MWMsIDB4YTAsIDB4MWQsIDB4MDAsCisJCQkgMHgxZSwgMHgwYSwgMHgxZiwgMHgwOCwgMHgyMCwgMHg0MCwgMHgyMSwgMHhmZiwKKwkJCSAweDIyLCAweDRjLCAweDIzLCAweDRlLCAweDI0LCAweDRjLCAweDI1LCAweDAwLAorCQkJIDB4MjYsIDB4MDAsIDB4MjcsIDB4ZjQsIDB4MjgsIDB4NjAsIDB4MjksIDB4ODgsCisJCQkgMHgyYSwgMHg0MCwgMHgyYiwgMHg0MCwgMHgyYywgMHhmZiwgMHgyZCwgMHgwMCwKKwkJCSAweDJlLCAweGZmLCAweDJmLCAweDAwLCAweDMwLCAweDIwLCAweDMxLCAweDA2LAorCQkJIDB4MzIsIDB4MGMsIDB4MzQsIDB4MGYsIDB4MzcsIDB4ZmUsIDB4MzgsIDB4MDAsCisJCQkgMHgzOSwgMHg2MywgMHgzYSwgMHgxMCwgMHgzYiwgMHgxMCwgMHg0NywgMHgwMCwKKwkJCSAweDQ5LCAweGU1LCAweDRiLCAweDAwLCAweDUwLCAweGMwLCAweDUyLCAweDIwLAorCQkJIDB4NTQsIDB4NWEsIDB4NTUsIDB4NWIsIDB4NTYsIDB4NDAsIDB4NTcsIDB4NzAsCisJCQkgMHg1YywgMHg1MCwgMHg1ZCwgMHgwMCwgMHg2MiwgMHgxNywgMHg2MywgMHgyZiwKKwkJCSAweDY0LCAweDZmLCAweDY4LCAweDAwLCAweDY5LCAweDg5LCAweDZhLCAweDAwLAorCQkJIDB4NmIsIDB4MDAsIDB4NmMsIDB4MDAsIDB4NmQsIDB4MDAsIDB4NmUsIDB4MDAsCisJCQkgMHg3MCwgMHgwMCwgMHg3MSwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3NiwgMHgzMCwKKwkJCSAweDc3LCAweDAxLCAweGFmLCAweDAwLCAweGIwLCAweGEwLCAweGIyLCAweDNkLAorCQkJIDB4YjMsIDB4MjUsIDB4YjQsIDB4OGIsIDB4YjUsIDB4NGIsIDB4YjYsIDB4M2YsCisJCQkgMHhiNywgMHhmZiwgMHhiOCwgMHhmZiwgMHhiOSwgMHhmYywgMHhiYSwgMHgwMCwKKwkJCSAweGJiLCAweDAwLCAweGJjLCAweDAwLCAweGQwLCAweDMwLCAweGU0LCAweDg0LAorCQkJIDB4ZjAsIDB4NDgsIDB4ZjEsIDB4MTksIDB4ZjIsIDB4NWEsIDB4ZjMsIDB4OGUsCisJCQkgMHhmNCwgMHgyZCwgMHhmNSwgMHgwNywgMHhmNiwgMHg1YSwgMHhmNywgMHhiYSwKKwkJCSAweGY4LCAweGQ3IH07CisKK3N0YXRpYyB1OCBjX3RhYmxlW109eyAweDU4LCAweDhhLCAweDdiLCAweDU5LCAweDhjLCAweDdiLCAweDVhLCAweDhlLCAweDViLAorCQkgICAgICAweDViLCAweDkwLCAweDViLCAweDVjLCAweDkyLCAweDViLCAweDVkLCAweDk0LCAweDViLAorCQkgICAgICAweDVlLCAweDk2LCAweDViLCAweDVmLCAweDk4LCAweDNiLCAweDYwLCAweDlhLCAweDNiLAorCQkgICAgICAweDYxLCAweDljLCAweDNiLCAweDYyLCAweDllLCAweDNiLCAweDYzLCAweGEwLCAweDNiLAorCQkgICAgICAweDY0LCAweGEyLCAweDFiLCAweDY1LCAweGE0LCAweDFiLCAweDY2LCAweGE2LCAweDFiLAorCQkgICAgICAweDY3LCAweGE4LCAweDFiLCAweDY4LCAweGFhLCAweDFiLCAweDY5LCAweGFjLCAweDFiLAorCQkgICAgICAweDZhLCAweGFlLCAweDFiLCAweDZiLCAweGIwLCAweDFiLCAweDZjLCAweGIyLCAweDFiLAorCQkgICAgICAweDZkLCAweGI0LCAweGZiLCAweDZlLCAweGI2LCAweGZiLCAweDZmLCAweGI4LCAweGZiLAorCQkgICAgICAweDcwLCAweGJhLCAweGZiLCAweDcxLCAweGJjLCAweGRiLCAweDcyLCAweGJlLCAweGRiLAorCQkgICAgICAweDczLCAweGMwLCAweGRiLCAweDc0LCAweGMyLCAweGRiLCAweDc1LCAweGM0LCAweGRiLAorCQkgICAgICAweDc2LCAweGM2LCAweGRiLCAweDc3LCAweGM4LCAweGJiLCAweDc4LCAweGNhLCAweGJiLAorCQkgICAgICAweDc5LCAweGNjLCAweGJiLCAweDdhLCAweGNlLCAweGJiLCAweDdiLCAweGQwLCAweGJiLAorCQkgICAgICAweDdjLCAweGQyLCAweGJiLCAweDdkLCAweGQ0LCAweGJiLCAweDdlLCAweGQ2LCAweGJiLAorCQkgICAgICAweDdmLCAweGQ4LCAweGJiLCAweDgwLCAweGRhLCAweDliLCAweDgxLCAweGRjLCAweDliLAorCQkgICAgICAweDgyLCAweGRlLCAweDliLCAweDgzLCAweGUwLCAweDliLCAweDg0LCAweGUyLCAweDliLAorCQkgICAgICAweDg1LCAweGU0LCAweDliLCAweDg2LCAweGU2LCAweDliLCAweDg3LCAweGU4LCAweDliLAorCQkgICAgICAweDg4LCAweGVhLCAweDliLCAweDg5LCAweGVjLCAweDliIH07CisKK2ludCBzOTIxX2lzZGJfY21kKHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2LCB1MzIgY21kLCB2b2lkICpkYXRhKSB7CisJc3dpdGNoKGNtZCkgeworCWNhc2UgSVNEQl9UX0NNRF9JTklUOgorCQlzOTIxX2lzZGJfaW5pdChkZXYpOworCQlicmVhazsKKwljYXNlIElTREJfVF9DTURfU0VUX1BBUkFNOgorCQlzOTIxX2lzZGJfc2V0X3BhcmFtZXRlcnMoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBJU0RCX1RfQ01EX1RVTkU6CisJCXM5MjFfaXNkYl90dW5lKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSVNEQl9UX0NNRF9HRVRfU1RBVFVTOgorCQlzOTIxX2lzZGJfZ2V0X3N0YXR1cyhkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoInVuaGFuZGxlZCBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfaXNkYl9pbml0KHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2KSB7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHJldDsKKwlwcmludGsoImlzZGJfaW5pdFxuIik7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihpbml0X3RhYmxlKTsgaSs9MikgeworCQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCBpbml0X3RhYmxlW2ldLCBpbml0X3RhYmxlW2krMV0pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50aygiaTJjIHdyaXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfaXNkYl9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgc3RydWN0IHM5MjFfaXNkYl90X3RyYW5zbWlzc2lvbl9tb2RlX3BhcmFtcyAqcGFyYW1zKSB7CisKKwlpbnQgcmV0OworCS8qIGF1dG8gaXMgc3VmZmljaWVudCBmb3Igbm93LCBsYXRlcm9uIHRoaXMgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiBhbiBleHRyYSBpbnRlcmZhY2UgKi8KKworCisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGIwLCAweGEwKTsgLy9tb2RfYjIpOworCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjIsIDB4M2QpOyAvL21vZF9iMik7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGIzLCAweDI1KTsgLy9tb2RfYjMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjQsIDB4OGIpOyAvL21vZF9iNCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhiNSwgMHg0Yik7IC8vbW9kX2I1KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGI2LCAweDNmKTsgLy9tb2RfYjYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjcsIDB4M2YpOyAvL21vZF9iNyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIEVfT0s7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9pc2RiX3R1bmUoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHN0cnVjdCBzOTIxX2lzZGJfdF90dW5lX3BhcmFtcyAqcGFyYW1zKSB7CisKKwlpbnQgcmV0OworCWludCBpbmRleDsKKworCWluZGV4ID0gKHBhcmFtcy0+ZnJlcXVlbmN5IC0gNDczMTQzMDAwKS82MDAwMDAwOworCisJaWYgKGluZGV4ID4gNDgpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHg0NywgMHg2MCk7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDY4LCAweDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDY5LCAweDg5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGYwLCAweDQ4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGYxLCAweDE5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGYyLCBjX3RhYmxlW2luZGV4KjNdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGYzLCBjX3RhYmxlW2luZGV4KjMrMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4ZjQsIGNfdGFibGVbaW5kZXgqMysyXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhmNSwgMHhhZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhmNiwgMHhiNyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhmNywgMHhiYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhmOCwgMHhkNyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHg2OCwgMHgwYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHg2OSwgMHgwOSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHgwMSwgMHg0MCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9pc2RiX2dldF9zdGF0dXMoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHZvaWQgKmRhdGEpIHsKKwl1bnNpZ25lZCBpbnQgKnJldCA9ICh1bnNpZ25lZCBpbnQqKWRhdGE7CisJdTggaWZhZ2NfZHQ7CisJdTggcmZhZ2NfZHQ7CisKKwltZGVsYXkoMTApOworCWlmYWdjX2R0ID0gZGV2LT5pMmNfcmVhZChkZXYtPnByaXZfZGV2LCAweDgxKTsKKwlyZmFnY19kdCA9IGRldi0+aTJjX3JlYWQoZGV2LT5wcml2X2RldiwgMHg4Mik7CisJaWYgKHJmYWdjX2R0ID09IDB4NDApIHsKKwkJKnJldCA9IDE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfY29yZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9jb3JlLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX1M5MjFfQ09SRV9ICisjZGVmaW5lIF9TOTIxX0NPUkVfSAorLy8jZGVmaW5lIHU4IHVuc2lnbmVkIGludAorLy8jZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKKworCisKKy8vI2RlZmluZSBFSU5WQUwgLTEKKyNkZWZpbmUgRV9PSyAwCisKK3N0cnVjdCBzOTIxX2lzZGJfdCB7CisJdm9pZCAqcHJpdl9kZXY7CisJaW50ICgqaTJjX3dyaXRlKSh2b2lkICpkZXYsIHU4IHJlZywgdTggdmFsKTsKKwlpbnQgKCppMmNfcmVhZCkodm9pZCAqZGV2LCB1OCByZWcpOworfTsKKworI2RlZmluZSBJU0RCX1RfQ01EX0lOSVQgICAgICAgMAorI2RlZmluZSBJU0RCX1RfQ01EX1NFVF9QQVJBTSAgMQorI2RlZmluZSBJU0RCX1RfQ01EX1RVTkUgICAgICAgMgorI2RlZmluZSBJU0RCX1RfQ01EX0dFVF9TVEFUVVMgMworCitzdHJ1Y3QgczkyMV9pc2RiX3RfdHVuZV9wYXJhbXMgeworCXUzMiBmcmVxdWVuY3k7Cit9OworCitzdHJ1Y3QgczkyMV9pc2RiX3Rfc3RhdHVzIHsKK307CisKK3N0cnVjdCBzOTIxX2lzZGJfdF90cmFuc21pc3Npb25fbW9kZV9wYXJhbXMgeworCXU4IG1vZGU7CisJdTggbGF5ZXJfYV9tb2RlOworI2RlZmluZSBJU0RCX1RfTEFfTU9ERV8xIDAKKyNkZWZpbmUgSVNEQl9UX0xBX01PREVfMiAxCisjZGVmaW5lIElTREJfVF9MQV9NT0RFXzMgMgorCXU4IGxheWVyX2FfY2Fycmllcl9tb2R1bGF0aW9uOworI2RlZmluZSBJU0RCX1RfTEFfQ01fRFFQU0sgMAorI2RlZmluZSBJU0RCX1RfTEFfQ01fUVBTSyAgMQorI2RlZmluZSBJU0RCX1RfTEFfQ01fMTZRQU0gMgorI2RlZmluZSBJU0RCX1RfTEFfQ01fNjRRQU0gMworI2RlZmluZSBJU0RCX1RfTEFfQ01fTk9MQVlFUiA0CisJdTggbGF5ZXJfYV9jb2RlX3JhdGU7CisjZGVmaW5lIElTREJfVF9MQV9DUl8xXzIgICAwCisjZGVmaW5lIElTREJfVF9MQV9DUl8yXzMgICAxCisjZGVmaW5lIElTREJfVF9MQV9DUl8zXzQgICAyCisjZGVmaW5lIElTREJfVF9MQV9DUl81XzYgICA0CisjZGVmaW5lIElTREJfVF9MQV9DUl83XzggICA4CisjZGVmaW5lIElTREJfVF9MQV9DUl9OT0xBWUVSICAgMTYKKwl1OCBsYXllcl9hX3RpbWVfaW50ZXJsZWF2ZTsKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzAgIDAKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzEgIDEKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzIgIDIKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzQgIDQKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzggIDgKKyNkZWZpbmUgSVNEQl9UX0xBX1RJXzE2IDE2CisjZGVmaW5lIElTREJfVF9MQV9USV8zMiAzMgorCXU4IGxheWVyX2FfbnNlZzsKKworCXU4IGxheWVyX2JfbW9kZTsKKyNkZWZpbmUgSVNEQl9UX0xCX01PREVfMSAwCisjZGVmaW5lIElTREJfVF9MQl9NT0RFXzIgMQorI2RlZmluZSBJU0RCX1RfTEJfTU9ERV8zIDIKKwl1OCBsYXllcl9iX2NhcnJpZXJfbW9kdWxhdGlvbjsKKyNkZWZpbmUgSVNEQl9UX0xCX0NNX0RRUFNLIDAKKyNkZWZpbmUgSVNEQl9UX0xCX0NNX1FQU0sgIDEKKyNkZWZpbmUgSVNEQl9UX0xCX0NNXzE2UUFNIDIKKyNkZWZpbmUgSVNEQl9UX0xCX0NNXzY0UUFNIDMKKyNkZWZpbmUgSVNEQl9UX0xCX0NNX05PTEFZRVIgNAorCXU4IGxheWVyX2JfY29kZV9yYXRlOworI2RlZmluZSBJU0RCX1RfTEJfQ1JfMV8yICAgMAorI2RlZmluZSBJU0RCX1RfTEJfQ1JfMl8zICAgMQorI2RlZmluZSBJU0RCX1RfTEJfQ1JfM180ICAgMgorI2RlZmluZSBJU0RCX1RfTEJfQ1JfNV82ICAgNAorI2RlZmluZSBJU0RCX1RfTEJfQ1JfN184ICAgOAorI2RlZmluZSBJU0RCX1RfTEJfQ1JfTk9MQVlFUiAgIDE2CisJdTggbGF5ZXJfYl90aW1lX2ludGVybGVhdmU7CisjZGVmaW5lIElTREJfVF9MQl9USV8wICAwCisjZGVmaW5lIElTREJfVF9MQl9USV8xICAxCisjZGVmaW5lIElTREJfVF9MQl9USV8yICAyCisjZGVmaW5lIElTREJfVF9MQl9USV80ICA0CisjZGVmaW5lIElTREJfVF9MQl9USV84ICA4CisjZGVmaW5lIElTREJfVF9MQl9USV8xNiAxNgorI2RlZmluZSBJU0RCX1RfTEJfVElfMzIgMzIKKwl1OCBsYXllcl9iX25zZWc7CisKKwl1OCBsYXllcl9jX21vZGU7CisjZGVmaW5lIElTREJfVF9MQ19NT0RFXzEgMAorI2RlZmluZSBJU0RCX1RfTENfTU9ERV8yIDEKKyNkZWZpbmUgSVNEQl9UX0xDX01PREVfMyAyCisJdTggbGF5ZXJfY19jYXJyaWVyX21vZHVsYXRpb247CisjZGVmaW5lIElTREJfVF9MQ19DTV9EUVBTSyAwCisjZGVmaW5lIElTREJfVF9MQ19DTV9RUFNLICAxCisjZGVmaW5lIElTREJfVF9MQ19DTV8xNlFBTSAyCisjZGVmaW5lIElTREJfVF9MQ19DTV82NFFBTSAzCisjZGVmaW5lIElTREJfVF9MQ19DTV9OT0xBWUVSIDQKKwl1OCBsYXllcl9jX2NvZGVfcmF0ZTsKKyNkZWZpbmUgSVNEQl9UX0xDX0NSXzFfMiAgIDAKKyNkZWZpbmUgSVNEQl9UX0xDX0NSXzJfMyAgIDEKKyNkZWZpbmUgSVNEQl9UX0xDX0NSXzNfNCAgIDIKKyNkZWZpbmUgSVNEQl9UX0xDX0NSXzVfNiAgIDQKKyNkZWZpbmUgSVNEQl9UX0xDX0NSXzdfOCAgIDgKKyNkZWZpbmUgSVNEQl9UX0xDX0NSX05PTEFZRVIgICAxNgorCXU4IGxheWVyX2NfdGltZV9pbnRlcmxlYXZlOworI2RlZmluZSBJU0RCX1RfTENfVElfMCAgMAorI2RlZmluZSBJU0RCX1RfTENfVElfMSAgMQorI2RlZmluZSBJU0RCX1RfTENfVElfMiAgMgorI2RlZmluZSBJU0RCX1RfTENfVElfNCAgNAorI2RlZmluZSBJU0RCX1RfTENfVElfOCAgOAorI2RlZmluZSBJU0RCX1RfTENfVElfMTYgMTYKKyNkZWZpbmUgSVNEQl9UX0xDX1RJXzMyIDMyCisJdTggbGF5ZXJfY19uc2VnOworfTsKKworaW50IHM5MjFfaXNkYl9jbWQoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHUzMiBjbWQsIHZvaWQgKmRhdGEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIERyaXZlciBmb3IgU2hhcnAgczkyMSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQHN1bmR0ZWsuZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiczkyMV9tb2R1bGUuaCIKKyNpbmNsdWRlICJzOTIxX2NvcmUuaCIKKworc3RhdGljICB1bnNpZ25lZCBpbnQgZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiczkyMSBkZWJ1Z2dpbmcgKGRlZmF1bHQgb2ZmKSIpOworCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKSBpZiAoZGVidWcpIGRvIHtcCisJCQlwcmludGsoInM5MjEgZGVidWc6ICIgZm10LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQorCitzdHJ1Y3QgczkyMV9zdGF0ZQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisJZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKKwlfX3UzMiBzbnI7CisJX191MzIgY3VycmVudF9mcmVxdWVuY3k7CisJX191OCBhZGRyOworCXN0cnVjdCBzOTIxX2lzZGJfdCBkZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7Cit9OworCitzdGF0aWMgaW50IHM5MjFfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pIHsKKwlzdHJ1Y3QgczkyMV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHM5MjFfc3RhdGUgKilmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczkyMV9pc2RiX3RfdHJhbnNtaXNzaW9uX21vZGVfcGFyYW1zIHBhcmFtczsKKwlzdHJ1Y3QgczkyMV9pc2RiX3RfdHVuZV9wYXJhbXMgdHVuZV9wYXJhbXM7CisKKwl0dW5lX3BhcmFtcy5mcmVxdWVuY3kgPSBwYXJhbS0+ZnJlcXVlbmN5OworCXM5MjFfaXNkYl9jbWQoJnN0YXRlLT5kZXYsIElTREJfVF9DTURfU0VUX1BBUkFNLCAmcGFyYW1zKTsKKwlzOTIxX2lzZGJfY21kKCZzdGF0ZS0+ZGV2LCBJU0RCX1RfQ01EX1RVTkUsICZ0dW5lX3BhcmFtcyk7CisJbWRlbGF5KDEwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKSB7CisJcHJpbnRrKCJzOTIxIGluaXRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpIHsKKwlwcmludGsoInM5MjEgc2xlZXBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBzOTIxX3N0YXRlICopZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdW5zaWduZWQgaW50IHJldDsKKwltZGVsYXkoNSk7CisJczkyMV9pc2RiX2NtZCgmc3RhdGUtPmRldiwgSVNEQl9UX0NNRF9HRVRfU1RBVFVTLCAmcmV0KTsKKwkqc3RhdHVzID0gMDsKKworCXByaW50aygic3RhdHVzOiAlMDJ4XG4iLCByZXQpOworCWlmIChyZXQgPT0gMSkgeworCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOworCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOworCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgX191MzIgKmJlcikKK3sKKwlkcHJpbnRrKCJyZWFkIGJlclxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgX191MTYgKnNucikKK3sKKwlkcHJpbnRrKCJyZWFkIHNuclxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBfX3UzMiAqdWNibG9ja3MpCit7CisJZHByaW50aygicmVhZCB1Y2Jsb2Nrc1xuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHM5MjFfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgczkyMV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHM5MjFfc3RhdGUgKilmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkZW1vZF9zOTIxPXsKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJTSEFSUCBTOTIxIiwKKwkJLnR5cGUJCQk9IEZFX09GRE0sCisJCS5mcmVxdWVuY3lfbWluCQk9IDQ3MzE0MzAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gNzY3MTQzMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplCT0gICA2MDAwMDAwLAorCQkuZnJlcXVlbmN5X3RvbGVyYW5jZQk9IDAsCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8CisJCQlGRV9DQU5fRkVDXzNfNCB8IEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfAorCQkJRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfCBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8CisJCQlGRV9DQU5fSElFUkFSQ0hZX0FVVE8gfCBGRV9DQU5fUkVDT1ZFUiB8CisJCQlGRV9DQU5fTVVURV9UUworCX0sCisJLmluaXQgPSBzOTIxX2luaXQsCisJLnNsZWVwID0gczkyMV9zbGVlcCwKKwkuc2V0X2Zyb250ZW5kID0gczkyMV9zZXRfcGFyYW1ldGVycywKKwkucmVhZF9zbnIgPSBzOTIxX3JlYWRfc25yLAorCS5yZWFkX2JlciA9IHM5MjFfcmVhZF9iZXIsCisJLnJlYWRfc3RhdHVzID0gczkyMV9yZWFkX3N0YXR1cywKKwkucmVhZF91Y2Jsb2NrcyA9IHM5MjFfcmVhZF91Y2Jsb2NrcywKKwkucmVsZWFzZSA9IHM5MjFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgczkyMV93cml0ZSh2b2lkICpkZXYsIHU4IHJlZywgdTggdmFsKSB7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZGV2OworCWNoYXIgYnVmWzJdPXtyZWcsdmFsfTsKKwlpbnQgZXJyOworCXN0cnVjdCBpMmNfbXNnIGkyY21zZ3MgPSB7CisJCS5hZGRyID0gc3RhdGUtPmFkZHIsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gPSAyLAorCQkuYnVmID0gYnVmCisJfTsKKworCWlmKChlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJmkyY21zZ3MsIDEpKTwwKSB7CisJCXByaW50aygiJXMgaTJjX3RyYW5zZmVyIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczkyMV9yZWFkKHZvaWQgKmRldiwgdTggcmVnKSB7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZGV2OworCXU4IGIxOworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geyB7IC5hZGRyID0gc3RhdGUtPmFkZHIsCisJCQkJICAgIC5mbGFncyA9IDAsCisJCQkJICAgIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAorCQkJCSAgeyAuYWRkciA9IHN0YXRlLT5hZGRyLAorCQkJCSAgICAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkgICAgLmJ1ZiA9ICZiMSwgLmxlbiA9IDEgfSB9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBiMTsKK30KKworc3RydWN0IGR2Yl9mcm9udGVuZCogczkyMV9hdHRhY2goY29uc3Qgc3RydWN0IHM5MjFfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHM5MjFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwltZW1zZXQoc3RhdGUsIDB4MCwgc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSk7CisKKwlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CisJc3RhdGUtPmkyYyA9IGkyYzsKKwlzdGF0ZS0+ZGV2LmkyY193cml0ZSA9ICZzOTIxX3dyaXRlOworCXN0YXRlLT5kZXYuaTJjX3JlYWQgPSAmczkyMV9yZWFkOworCXN0YXRlLT5kZXYucHJpdl9kZXYgPSBzdGF0ZTsKKworCXM5MjFfaXNkYl9jbWQoJnN0YXRlLT5kZXYsIElTREJfVF9DTURfSU5JVCwgTlVMTCk7CisKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZkZW1vZF9zOTIxLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzOTIxX2F0dGFjaCk7CitNT0RVTEVfQVVUSE9SKCJNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZW1waWF0ZWNoLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2hhcnAgUzkyMSBJU0RCLVQgMVNlZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODY2MDQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIERWQi1UIHM5MjEgZGVtb2R1bGF0b3IKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBzdW5kdGVrLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIFM5MjFfTU9EVUxFX0gKKyNkZWZpbmUgUzkyMV9NT0RVTEVfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiczkyMV9jb3JlLmgiCisKK2ludCBzOTIxX2lzZGJfaW5pdChzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldik7CitpbnQgczkyMV9pc2RiX2NtZChzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgdTMyIGNtZCwgdm9pZCAqZGF0YSk7CisKK3N0cnVjdCBzOTIxX2NvbmZpZworeworCS8qIGRlbW9kdWxhdG9yJ3MgSTJDIGFkZHJlc3MgKi8KKwl1OCBpMmNfYWRkcmVzczsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfUzkyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TOTIxX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM5MjFfYXR0YWNoKGNvbnN0IHN0cnVjdCBzOTIxX2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzOTIxX2F0dGFjaChjb25zdCBzdHJ1Y3QgczkyMV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9TOTIxICovCisKKyNlbmRpZiAvKiBTOTIxX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYwppbmRleCAzZGRiZTY5Li4wYmQxNmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCkBAIC04LDcgKzgsNiBAQAogKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKi8KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDliN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9hbGdvLmMKQEAgLTAsMCArMSwxNTE5IEBACisvKgorCVNUQjA4OTkgTXVsdGlzdGFuZGFyZCBGcm9udGVuZCBkcml2ZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3ByaXYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3JlZy5oIgorCitpbmxpbmUgdTMyIHN0YjA4OTlfZG9fZGl2KHU2NCBuLCB1MzIgZCkKK3sKKwkvKiB3cmFwIGRvX2RpdigpIGZvciBlYXNlIG9mIHVzZSAqLworCisJZG9fZGl2KG4sIGQpOworCXJldHVybiBuOworfQorCisvKgorICogc3RiMDg5OV9jYWxjX3NyYXRlCisgKiBDb21wdXRlIHN5bWJvbCByYXRlCisgKi8KK3N0YXRpYyB1MzIgc3RiMDg5OV9jYWxjX3NyYXRlKHUzMiBtYXN0ZXJfY2xrLCB1OCAqc2ZyKQoreworCXU2NCB0bXA7CisKKwkvKiBzcmF0ZSA9IChTRlIgKiBtYXN0ZXJfY2xrKSA+PiAyMCAqLworCisJLyogc2ZyIGlzIG9mIHNpemUgMjAgYml0LCBzdG9yZWQgd2l0aCBhbiBvZmZzZXQgb2YgNCBiaXQgKi8KKwl0bXAgPSAoKCh1MzIpc2ZyWzBdKSA8PCAxNikgfCAoKCh1MzIpc2ZyWzFdKSA8PCA4KSB8IHNmclsyXTsKKwl0bXAgJj0gfjB4ZjsKKwl0bXAgKj0gbWFzdGVyX2NsazsKKwl0bXAgPj49IDI0OworCisJcmV0dXJuIHRtcDsKK30KKworLyoKKyAqIHN0YjA4OTlfZ2V0X3NyYXRlCisgKiBHZXQgdGhlIGN1cnJlbnQgc3ltYm9sIHJhdGUKKyAqLwordTMyIHN0YjA4OTlfZ2V0X3NyYXRlKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCXU4IHNmclszXTsKKworCXN0YjA4OTlfcmVhZF9yZWdzKHN0YXRlLCBTVEIwODk5X1NGUkgsIHNmciwgMyk7CisKKwlyZXR1cm4gc3RiMDg5OV9jYWxjX3NyYXRlKGludGVybmFsLT5tYXN0ZXJfY2xrLCBzZnIpOworfQorCisvKgorICogc3RiMDg5OV9zZXRfc3JhdGUKKyAqIFNldCBzeW1ib2wgZnJlcXVlbmN5CisgKiBNYXN0ZXJDbG9jazogbWFzdGVyIGNsb2NrIGZyZXF1ZW5jeSAoaHopCisgKiBTeW1ib2xSYXRlOiBzeW1ib2wgcmF0ZSAoYmF1ZHMpCisgKiByZXR1cm4gc3ltYm9sIGZyZXF1ZW5jeQorICovCitzdGF0aWMgdTMyIHN0YjA4OTlfc2V0X3NyYXRlKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdTMyIG1hc3Rlcl9jbGssIHUzMiBzcmF0ZSkKK3sKKwl1MzIgdG1wOworCXU4IHNmclszXTsKKworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0+Iik7CisJLyoKKwkgKiBpbiBvcmRlciB0byBoYXZlIHRoZSBtYXhpbXVtIHByZWNpc2lvbiwgdGhlIHN5bWJvbCByYXRlIGVudGVyZWQgaW50bworCSAqIHRoZSBjaGlwIGlzIGNvbXB1dGVkIGFzIHRoZSBjbG9zZXN0IHZhbHVlIG9mIHRoZSAidHJ1ZSB2YWx1ZSIuCisJICogSW4gdGhpcyBwdXJwb3NlLCB0aGUgc3ltYm9sIHJhdGUgdmFsdWUgaXMgcm91bmRlZCAoMSBpcyBhZGRlZCBvbiB0aGUgYml0CisJICogYmVsb3cgdGhlIExTQiApCisJICoKKwkgKiBzcmF0ZSA9IChTRlIgKiBtYXN0ZXJfY2xrKSA+PiAyMAorCSAqICAgICAgPD0+CisJICogICBTRlIgPSBzcmF0ZSA8PCAyMCAvIG1hc3Rlcl9jbGsKKwkgKgorCSAqIHJvdW5kZWQ6CisJICogICBTRlIgPSAoc3JhdGUgPDwgMjEgKyBtYXN0ZXJfY2xrKSAvICgyICogbWFzdGVyX2NsaykKKwkgKgorCSAqIHN0b3JlZCBhcyAyMCBiaXQgbnVtYmVyIHdpdGggYW4gb2Zmc2V0IG9mIDQgYml0OgorCSAqICAgc2ZyID0gU0ZSIDw8IDQ7CisJICovCisKKwl0bXAgPSBzdGIwODk5X2RvX2RpdigoKCh1NjQpc3JhdGUpIDw8IDIxKSArIG1hc3Rlcl9jbGssIDIgKiBtYXN0ZXJfY2xrKTsKKwl0bXAgPDw9IDQ7CisKKwlzZnJbMF0gPSB0bXAgPj4gMTY7CisJc2ZyWzFdID0gdG1wID4+ICA4OworCXNmclsyXSA9IHRtcDsKKworCXN0YjA4OTlfd3JpdGVfcmVncyhzdGF0ZSwgU1RCMDg5OV9TRlJILCBzZnIsIDMpOworCisJcmV0dXJuIHNyYXRlOworfQorCisvKgorICogc3RiMDg5OV9jYWxjX2Rlcm90X3RpbWUKKyAqIENvbXB1dGUgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCBieSB0aGUgZGVyb3RhdG9yIHRvIGxvY2sKKyAqIFN5bWJvbFJhdGU6IFN5bWJvbCByYXRlCisgKiByZXR1cm46IGRlcm90YXRvciB0aW1lIGNvbnN0YW50IChtcykKKyAqLworc3RhdGljIGxvbmcgc3RiMDg5OV9jYWxjX2Rlcm90X3RpbWUobG9uZyBzcmF0ZSkKK3sKKwlpZiAoc3JhdGUgPiAwKQorCQlyZXR1cm4gKDEwMDAwMCAvIChzcmF0ZSAvIDEwMDApKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogc3RiMDg5OV9jYXJyX3dpZHRoCisgKiBDb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgY2FycmllcgorICogcmV0dXJuOiB3aWR0aCBvZiBjYXJyaWVyIChrSHogb3IgTWh6KQorICovCitsb25nIHN0YjA4OTlfY2Fycl93aWR0aChzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsID0gJnN0YXRlLT5pbnRlcm5hbDsKKworCXJldHVybiAoaW50ZXJuYWwtPnNyYXRlICsgKGludGVybmFsLT5zcmF0ZSAqIGludGVybmFsLT5yb2xsb2ZmKSAvIDEwMCk7Cit9CisKKy8qCisgKiBzdGIwODk5X2ZpcnN0X3N1YnJhbmdlCisgKiBDb21wdXRlIHRoZSBmaXJzdCBzdWJyYW5nZSBvZiB0aGUgc2VhcmNoCisgKi8KK3N0YXRpYyB2b2lkIHN0YjA4OTlfZmlyc3Rfc3VicmFuZ2Uoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbAk9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICpwYXJhbXMJCT0gJnN0YXRlLT5wYXJhbXM7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcJCT0gIHN0YXRlLT5jb25maWc7CisKKwlpbnQgcmFuZ2UgPSAwOworCXUzMiBiYW5kd2lkdGggPSAwOworCisJaWYgKGNvbmZpZy0+dHVuZXJfZ2V0X2JhbmR3aWR0aCkgeworCQlzdGIwODk5X2kyY19nYXRlX2N0cmwoJnN0YXRlLT5mcm9udGVuZCwgMSk7CisJCWNvbmZpZy0+dHVuZXJfZ2V0X2JhbmR3aWR0aCgmc3RhdGUtPmZyb250ZW5kLCAmYmFuZHdpZHRoKTsKKwkJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDApOworCQlyYW5nZSA9IGJhbmR3aWR0aCAtIHN0YjA4OTlfY2Fycl93aWR0aChzdGF0ZSkgLyAyOworCX0KKworCWlmIChyYW5nZSA+IDApCisJCWludGVybmFsLT5zdWJfcmFuZ2UgPSBNSU4oaW50ZXJuYWwtPnNyY2hfcmFuZ2UsIHJhbmdlKTsKKwllbHNlCisJCWludGVybmFsLT5zdWJfcmFuZ2UgPSAwOworCisJaW50ZXJuYWwtPmZyZXEgPSBwYXJhbXMtPmZyZXE7CisJaW50ZXJuYWwtPnR1bmVyX29mZnN0ID0gMEw7CisJaW50ZXJuYWwtPnN1Yl9kaXIgPSAxOworfQorCisvKgorICogc3RiMDg5OV9jaGVja190bWcKKyAqIGNoZWNrIGZvciB0aW1pbmcgbG9jaworICogaW50ZXJuYWwuVHRpbWluZzogdGltZSB0byB3YWl0IGZvciBsb29wIGxvY2sKKyAqLworc3RhdGljIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9jaGVja190bWcoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJaW50IGxvY2s7CisJdTggcmVnOworCXM4IHRpbWluZzsKKworCW1zbGVlcChpbnRlcm5hbC0+dF9kZXJvdCk7CisKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9SVEYsIDB4ZjIpOworCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfVExJUik7CisJbG9jayA9IFNUQjA4OTlfR0VURklFTEQoVExJUl9UTUdfTE9DS19JTkQsIHJlZyk7CisJdGltaW5nID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9SVEYpOworCisJaWYgKGxvY2sgPj0gNDIpIHsKKwkJaWYgKChsb2NrID4gNDgpICYmIChBQlModGltaW5nKSA+PSAxMTApKSB7CisJCQlpbnRlcm5hbC0+c3RhdHVzID0gQU5BTE9HQ0FSUklFUjsKKwkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0+QU5BTE9HIENhcnJpZXIgISIpOworCQl9IGVsc2UgeworCQkJaW50ZXJuYWwtPnN0YXR1cyA9IFRJTUlOR09LOworCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tPlRJTUlORyBPSyAhIik7CisJCX0KKwl9IGVsc2UgeworCQlpbnRlcm5hbC0+c3RhdHVzID0gTk9USU1JTkc7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0+Tk8gVElNSU5HICEiKTsKKwl9CisJcmV0dXJuIGludGVybmFsLT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGIwODk5X3NlYXJjaF90bWcKKyAqIHBlcmZvcm0gYSBmcy8yIHppZy16YWcgdG8gZmluZCB0aW1pbmcKKyAqLworc3RhdGljIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9zZWFyY2hfdG1nKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCXN0cnVjdCBzdGIwODk5X3BhcmFtcyAqcGFyYW1zID0gJnN0YXRlLT5wYXJhbXM7CisKKwlzaG9ydCBpbnQgZGVyb3Rfc3RlcCwgZGVyb3RfZnJlcSA9IDAsIGRlcm90X2xpbWl0LCBuZXh0X2xvb3AgPSAzOworCWludCBpbmRleCA9IDA7CisJdTggY2ZyWzJdOworCisJaW50ZXJuYWwtPnN0YXR1cyA9IE5PVElNSU5HOworCisJLyogdGltaW5nIGxvb3AgY29tcHV0YXRpb24gJiBzeW1ib2wgcmF0ZSBvcHRpbWlzYXRpb24JKi8KKwlkZXJvdF9saW1pdCA9IChpbnRlcm5hbC0+c3ViX3JhbmdlIC8gMkwpIC8gaW50ZXJuYWwtPm1jbGs7CisJZGVyb3Rfc3RlcCA9IChwYXJhbXMtPnNyYXRlIC8gMkwpIC8gaW50ZXJuYWwtPm1jbGs7CisKKwl3aGlsZSAoKHN0YjA4OTlfY2hlY2tfdG1nKHN0YXRlKSAhPSBUSU1JTkdPSykgJiYgbmV4dF9sb29wKSB7CisJCWluZGV4Kys7CisJCWRlcm90X2ZyZXEgKz0gaW5kZXggKiBpbnRlcm5hbC0+ZGlyZWN0aW9uICogZGVyb3Rfc3RlcDsJLyogbmV4dCBkZXJvdCB6aWcgemFnIHBvc2l0aW9uCSovCisKKwkJaWYgKEFCUyhkZXJvdF9mcmVxKSA+IGRlcm90X2xpbWl0KQorCQkJbmV4dF9sb29wLS07CisKKwkJaWYgKG5leHRfbG9vcCkgeworCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ0ZSTSwgY2ZyWzBdLCBNU0Ioc3RhdGUtPmNvbmZpZy0+aW52ZXJzaW9uICogZGVyb3RfZnJlcSkpOworCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ0ZSTCwgY2ZyWzFdLCBMU0Ioc3RhdGUtPmNvbmZpZy0+aW52ZXJzaW9uICogZGVyb3RfZnJlcSkpOworCQkJc3RiMDg5OV93cml0ZV9yZWdzKHN0YXRlLCBTVEIwODk5X0NGUk0sIGNmciwgMik7IC8qIGRlcm90YXRvciBmcmVxdWVuY3kJCSovCisJCX0KKwkJaW50ZXJuYWwtPmRpcmVjdGlvbiA9IC1pbnRlcm5hbC0+ZGlyZWN0aW9uOwkvKiBDaGFuZ2UgemlnemFnIGRpcmVjdGlvbgkJKi8KKwl9CisKKwlpZiAoaW50ZXJuYWwtPnN0YXR1cyA9PSBUSU1JTkdPSykgeworCQlzdGIwODk5X3JlYWRfcmVncyhzdGF0ZSwgU1RCMDg5OV9DRlJNLCBjZnIsIDIpOyAvKiBnZXQgZGVyb3RhdG9yIGZyZXF1ZW5jeQkJKi8KKwkJaW50ZXJuYWwtPmRlcm90X2ZyZXEgPSBzdGF0ZS0+Y29uZmlnLT5pbnZlcnNpb24gKiBNQUtFV09SRDE2KGNmclswXSwgY2ZyWzFdKTsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tPlRJTUlORyBPSyAhIERlcm90IEZyZXEgPSAlZCIsIGludGVybmFsLT5kZXJvdF9mcmVxKTsKKwl9CisKKwlyZXR1cm4gaW50ZXJuYWwtPnN0YXR1czsKK30KKworLyoKKyAqIHN0YjA4OTlfY2hlY2tfY2FycmllcgorICogQ2hlY2sgZm9yIGNhcnJpZXIgZm91bmQKKyAqLworc3RhdGljIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9jaGVja19jYXJyaWVyKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCXU4IHJlZzsKKworCW1zbGVlcChpbnRlcm5hbC0+dF9kZXJvdCk7IC8qIHdhaXQgZm9yIGRlcm90YXRvciBvawkqLworCisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQpOworCVNUQjA4OTlfU0VURklFTERfVkFMKENGRF9PTiwgcmVnLCAxKTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQsIHJlZyk7CisKKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RTVEFUVVMpOworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0+IFNUQjA4OTlfRFNUQVRVUz1bMHglMDJ4XSIsIHJlZyk7CisJaWYgKFNUQjA4OTlfR0VURklFTEQoQ0FSUklFUl9GT1VORCwgcmVnKSkgeworCQlpbnRlcm5hbC0+c3RhdHVzID0gQ0FSUklFUk9LOworCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIi0tLS0tLS0tLS0tLS0+IENBUlJJRVJPSyAhIik7CisJfSBlbHNlIHsKKwkJaW50ZXJuYWwtPnN0YXR1cyA9IE5PQ0FSUklFUjsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tLS0tLS0tPiBOT0NBUlJJRVIgISIpOworCX0KKworCXJldHVybiBpbnRlcm5hbC0+c3RhdHVzOworfQorCisvKgorICogc3RiMDg5OV9zZWFyY2hfY2FycmllcgorICogU2VhcmNoIGZvciBhIFFQU0sgY2FycmllciB3aXRoIHRoZSBkZXJvdGF0b3IKKyAqLworc3RhdGljIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9zZWFyY2hfY2FycmllcihzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsID0gJnN0YXRlLT5pbnRlcm5hbDsKKworCXNob3J0IGludCBkZXJvdF9mcmVxID0gMCwgbGFzdF9kZXJvdF9mcmVxID0gMCwgZGVyb3RfbGltaXQsIG5leHRfbG9vcCA9IDM7CisJaW50IGluZGV4ID0gMDsKKwl1OCBjZnJbMl07CisJdTggcmVnOworCisJaW50ZXJuYWwtPnN0YXR1cyA9IE5PQ0FSUklFUjsKKwlkZXJvdF9saW1pdCA9IChpbnRlcm5hbC0+c3ViX3JhbmdlIC8gMkwpIC8gaW50ZXJuYWwtPm1jbGs7CisJZGVyb3RfZnJlcSA9IGludGVybmFsLT5kZXJvdF9mcmVxOworCisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQpOworCVNUQjA4OTlfU0VURklFTERfVkFMKENGRF9PTiwgcmVnLCAxKTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQsIHJlZyk7CisKKwlkbyB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiRGVyb3QgRnJlcT0lZCwgbWNsaz0lZCIsIGRlcm90X2ZyZXEsIGludGVybmFsLT5tY2xrKTsKKwkJaWYgKHN0YjA4OTlfY2hlY2tfY2FycmllcihzdGF0ZSkgPT0gTk9DQVJSSUVSKSB7CisJCQlpbmRleCsrOworCQkJbGFzdF9kZXJvdF9mcmVxID0gZGVyb3RfZnJlcTsKKwkJCWRlcm90X2ZyZXEgKz0gaW5kZXggKiBpbnRlcm5hbC0+ZGlyZWN0aW9uICogaW50ZXJuYWwtPmRlcm90X3N0ZXA7IC8qIG5leHQgemlnIHphZyBkZXJvdGF0b3IgcG9zaXRpb24gKi8KKworCQkJaWYoQUJTKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCisJCQkJbmV4dF9sb29wLS07CisKKwkJCWlmIChuZXh0X2xvb3ApIHsKKwkJCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0NGRCk7CisJCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ0ZEX09OLCByZWcsIDEpOworCQkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0NGRCwgcmVnKTsKKworCQkJCVNUQjA4OTlfU0VURklFTERfVkFMKENGUk0sIGNmclswXSwgTVNCKHN0YXRlLT5jb25maWctPmludmVyc2lvbiAqIGRlcm90X2ZyZXEpKTsKKwkJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDRlJMLCBjZnJbMV0sIExTQihzdGF0ZS0+Y29uZmlnLT5pbnZlcnNpb24gKiBkZXJvdF9mcmVxKSk7CisJCQkJc3RiMDg5OV93cml0ZV9yZWdzKHN0YXRlLCBTVEIwODk5X0NGUk0sIGNmciwgMik7IC8qIGRlcm90YXRvciBmcmVxdWVuY3kJKi8KKwkJCX0KKwkJfQorCisJCWludGVybmFsLT5kaXJlY3Rpb24gPSAtaW50ZXJuYWwtPmRpcmVjdGlvbjsgLyogQ2hhbmdlIHppZ3phZyBkaXJlY3Rpb24gKi8KKwl9IHdoaWxlICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBDQVJSSUVST0spICYmIG5leHRfbG9vcCk7CisKKwlpZiAoaW50ZXJuYWwtPnN0YXR1cyA9PSBDQVJSSUVST0spIHsKKwkJc3RiMDg5OV9yZWFkX3JlZ3Moc3RhdGUsIFNUQjA4OTlfQ0ZSTSwgY2ZyLCAyKTsgLyogZ2V0IGRlcm90YXRvciBmcmVxdWVuY3kgKi8KKwkJaW50ZXJuYWwtPmRlcm90X2ZyZXEgPSBzdGF0ZS0+Y29uZmlnLT5pbnZlcnNpb24gKiBNQUtFV09SRDE2KGNmclswXSwgY2ZyWzFdKTsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tPiBDQVJSSUVSIE9LICEsIERlcm90IEZyZXE9JWQiLCBpbnRlcm5hbC0+ZGVyb3RfZnJlcSk7CisJfSBlbHNlIHsKKwkJaW50ZXJuYWwtPmRlcm90X2ZyZXEgPSBsYXN0X2Rlcm90X2ZyZXE7CisJfQorCisJcmV0dXJuIGludGVybmFsLT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGIwODk5X2NoZWNrX2RhdGEKKyAqIENoZWNrIGZvciBkYXRhIGZvdW5kCisgKi8KK3N0YXRpYyBlbnVtIHN0YjA4OTlfc3RhdHVzIHN0YjA4OTlfY2hlY2tfZGF0YShzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsID0gJnN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3Qgc3RiMDg5OV9wYXJhbXMgKnBhcmFtcyA9ICZzdGF0ZS0+cGFyYW1zOworCisJaW50IGxvY2sgPSAwLCBpbmRleCA9IDAsIGRhdGFUaW1lID0gNTAwLCBsb29wOworCXU4IHJlZzsKKworCWludGVybmFsLT5zdGF0dXMgPSBOT0RBVEE7CisKKwkvKiBSRVNFVCBGRUMJKi8KKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUyk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRlJFU0FDUywgcmVnLCAxKTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMsIHJlZyk7CisJbXNsZWVwKDEpOworCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfVFNUUkVTKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChGUkVTQUNTLCByZWcsIDApOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUywgcmVnKTsKKworCWlmIChwYXJhbXMtPnNyYXRlIDw9IDIwMDAwMDApCisJCWRhdGFUaW1lID0gMjAwMDsKKwllbHNlIGlmIChwYXJhbXMtPnNyYXRlIDw9IDUwMDAwMDApCisJCWRhdGFUaW1lID0gMTUwMDsKKwllbHNlIGlmIChwYXJhbXMtPnNyYXRlIDw9IDE1MDAwMDAwKQorCQlkYXRhVGltZSA9IDEwMDA7CisJZWxzZQorCQlkYXRhVGltZSA9IDUwMDsKKworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RTVEFUVVMyLCAweDAwKTsgLyogZm9yY2Ugc2VhcmNoIGxvb3AJKi8KKwl3aGlsZSAoMSkgeworCQkvKiBXQVJOSU5HISBWSVQgTE9DS0VEIGhhcyB0byBiZSB0ZXN0ZWQgYmVmb3JlIFZJVF9FTkRfTE9PT1AJKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9WU1RBVFVTKTsKKwkJbG9jayA9IFNUQjA4OTlfR0VURklFTEQoVlNUQVRVU19MT0NLRURWSVQsIHJlZyk7CisJCWxvb3AgPSBTVEIwODk5X0dFVEZJRUxEKFZTVEFUVVNfRU5EX0xPT1BWSVQsIHJlZyk7CisKKwkJaWYgKGxvY2sgfHwgbG9vcCB8fCAoaW5kZXggPiBkYXRhVGltZSkpCisJCQlicmVhazsKKwkJaW5kZXgrKzsKKwl9CisKKwlpZiAobG9jaykgewkvKiBEQVRBIExPQ0sgaW5kaWNhdG9yCSovCisJCWludGVybmFsLT5zdGF0dXMgPSBEQVRBT0s7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tLS0tLS0+IERBVEEgT0sgISIpOworCX0KKworCXJldHVybiBpbnRlcm5hbC0+c3RhdHVzOworfQorCisvKgorICogc3RiMDg5OV9zZWFyY2hfZGF0YQorICogU2VhcmNoIGZvciBhIFFQU0sgY2FycmllciB3aXRoIHRoZSBkZXJvdGF0b3IKKyAqLworc3RhdGljIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9zZWFyY2hfZGF0YShzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc2hvcnQgaW50IGRlcm90X2ZyZXEsIGRlcm90X3N0ZXAsIGRlcm90X2xpbWl0LCBuZXh0X2xvb3AgPSAzOworCXU4IGNmclsyXTsKKwl1OCByZWc7CisJaW50IGluZGV4ID0gMTsKKworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICpwYXJhbXMgPSAmc3RhdGUtPnBhcmFtczsKKworCWRlcm90X3N0ZXAgPSAocGFyYW1zLT5zcmF0ZSAvIDRMKSAvIGludGVybmFsLT5tY2xrOworCWRlcm90X2xpbWl0ID0gKGludGVybmFsLT5zdWJfcmFuZ2UgLyAyTCkgLyBpbnRlcm5hbC0+bWNsazsKKwlkZXJvdF9mcmVxID0gaW50ZXJuYWwtPmRlcm90X2ZyZXE7CisKKwlkbyB7CisJCWlmICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBDQVJSSUVST0spIHx8IChzdGIwODk5X2NoZWNrX2RhdGEoc3RhdGUpICE9IERBVEFPSykpIHsKKworCQkJZGVyb3RfZnJlcSArPSBpbmRleCAqIGludGVybmFsLT5kaXJlY3Rpb24gKiBkZXJvdF9zdGVwOwkvKiBuZXh0IHppZyB6YWcgZGVyb3RhdG9yIHBvc2l0aW9uICovCisJCQlpZiAoQUJTKGRlcm90X2ZyZXEpID4gZGVyb3RfbGltaXQpCisJCQkJbmV4dF9sb29wLS07CisKKwkJCWlmIChuZXh0X2xvb3ApIHsKKwkJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRlcm90IGZyZXE9JWQsIG1jbGs9JWQiLCBkZXJvdF9mcmVxLCBpbnRlcm5hbC0+bWNsayk7CisJCQkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQpOworCQkJCVNUQjA4OTlfU0VURklFTERfVkFMKENGRF9PTiwgcmVnLCAxKTsKKwkJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQsIHJlZyk7CisKKwkJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDRlJNLCBjZnJbMF0sIE1TQihzdGF0ZS0+Y29uZmlnLT5pbnZlcnNpb24gKiBkZXJvdF9mcmVxKSk7CisJCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ0ZSTCwgY2ZyWzFdLCBMU0Ioc3RhdGUtPmNvbmZpZy0+aW52ZXJzaW9uICogZGVyb3RfZnJlcSkpOworCQkJCXN0YjA4OTlfd3JpdGVfcmVncyhzdGF0ZSwgU1RCMDg5OV9DRlJNLCBjZnIsIDIpOyAvKiBkZXJvdGF0b3IgZnJlcXVlbmN5CSovCisKKwkJCQlzdGIwODk5X2NoZWNrX2NhcnJpZXIoc3RhdGUpOworCQkJCWluZGV4Kys7CisJCQl9CisJCX0KKwkJaW50ZXJuYWwtPmRpcmVjdGlvbiA9IC1pbnRlcm5hbC0+ZGlyZWN0aW9uOyAvKiBjaGFuZ2UgemlnIHphZyBkaXJlY3Rpb24gKi8KKwl9IHdoaWxlICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBEQVRBT0spICYmIG5leHRfbG9vcCk7CisKKwlpZiAoaW50ZXJuYWwtPnN0YXR1cyA9PSBEQVRBT0spIHsKKwkJc3RiMDg5OV9yZWFkX3JlZ3Moc3RhdGUsIFNUQjA4OTlfQ0ZSTSwgY2ZyLCAyKTsgLyogZ2V0IGRlcm90YXRvciBmcmVxdWVuY3kgKi8KKwkJaW50ZXJuYWwtPmRlcm90X2ZyZXEgPSBzdGF0ZS0+Y29uZmlnLT5pbnZlcnNpb24gKiBNQUtFV09SRDE2KGNmclswXSwgY2ZyWzFdKTsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0+IERBVEFPSyAhIERlcm90IEZyZXE9JWQiLCBpbnRlcm5hbC0+ZGVyb3RfZnJlcSk7CisJfQorCisJcmV0dXJuIGludGVybmFsLT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGIwODk5X2NoZWNrX3JhbmdlCisgKiBjaGVjayBpZiB0aGUgZm91bmQgZnJlcXVlbmN5IGlzIGluIHRoZSBjb3JyZWN0IHJhbmdlCisgKi8KK3N0YXRpYyBlbnVtIHN0YjA4OTlfc3RhdHVzIHN0YjA4OTlfY2hlY2tfcmFuZ2Uoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICpwYXJhbXMgPSAmc3RhdGUtPnBhcmFtczsKKworCWludCByYW5nZV9vZmZzdCwgdHBfZnJlcTsKKworCXJhbmdlX29mZnN0ID0gaW50ZXJuYWwtPnNyY2hfcmFuZ2UgLyAyMDAwOworCXRwX2ZyZXEgPSBpbnRlcm5hbC0+ZnJlcSArIChpbnRlcm5hbC0+ZGVyb3RfZnJlcSAqIGludGVybmFsLT5tY2xrKSAvIDEwMDA7CisKKwlpZiAoKHRwX2ZyZXEgPj0gcGFyYW1zLT5mcmVxIC0gcmFuZ2Vfb2Zmc3QpICYmICh0cF9mcmVxIDw9IHBhcmFtcy0+ZnJlcSArIHJhbmdlX29mZnN0KSkgeworCQlpbnRlcm5hbC0+c3RhdHVzID0gUkFOR0VPSzsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tPiBSQU5HRU9LICEiKTsKKwl9IGVsc2UgeworCQlpbnRlcm5hbC0+c3RhdHVzID0gT1VUT0ZSQU5HRTsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tPiBPVVQgT0YgUkFOR0UgISIpOworCX0KKworCXJldHVybiBpbnRlcm5hbC0+c3RhdHVzOworfQorCisvKgorICogTmV4dFN1YlJhbmdlCisgKiBDb21wdXRlIHRoZSBuZXh0IHN1YnJhbmdlIG9mIHRoZSBzZWFyY2gKKyAqLworc3RhdGljIHZvaWQgbmV4dF9zdWJfcmFuZ2Uoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICpwYXJhbXMgPSAmc3RhdGUtPnBhcmFtczsKKworCWxvbmcgb2xkX3N1Yl9yYW5nZTsKKworCWlmIChpbnRlcm5hbC0+c3ViX2RpciA+IDApIHsKKwkJb2xkX3N1Yl9yYW5nZSA9IGludGVybmFsLT5zdWJfcmFuZ2U7CisJCWludGVybmFsLT5zdWJfcmFuZ2UgPSBNSU4oKGludGVybmFsLT5zcmNoX3JhbmdlIC8gMikgLQorCQkJCQkgIChpbnRlcm5hbC0+dHVuZXJfb2Zmc3QgKyBpbnRlcm5hbC0+c3ViX3JhbmdlIC8gMiksCisJCQkJCSAgIGludGVybmFsLT5zdWJfcmFuZ2UpOworCisJCWlmIChpbnRlcm5hbC0+c3ViX3JhbmdlIDwgMCkKKwkJCWludGVybmFsLT5zdWJfcmFuZ2UgPSAwOworCisJCWludGVybmFsLT50dW5lcl9vZmZzdCArPSAob2xkX3N1Yl9yYW5nZSArIGludGVybmFsLT5zdWJfcmFuZ2UpIC8gMjsKKwl9CisKKwlpbnRlcm5hbC0+ZnJlcSA9IHBhcmFtcy0+ZnJlcSArIChpbnRlcm5hbC0+c3ViX2RpciAqIGludGVybmFsLT50dW5lcl9vZmZzdCkgLyAxMDAwOworCWludGVybmFsLT5zdWJfZGlyID0gLWludGVybmFsLT5zdWJfZGlyOworfQorCisvKgorICogc3RiMDg5OV9kdmJzX2FsZ28KKyAqIFNlYXJjaCBmb3IgYSBzaWduYWwsIHRpbWluZywgY2FycmllciBhbmQgZGF0YSBmb3IgYQorICogZ2l2ZW4gZnJlcXVlbmN5IGluIGEgZ2l2ZW4gcmFuZ2UKKyAqLworZW51bSBzdGIwODk5X3N0YXR1cyBzdGIwODk5X2R2YnNfYWxnbyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICpwYXJhbXMJCT0gJnN0YXRlLT5wYXJhbXM7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsCT0gJnN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgKmNvbmZpZwkJPSBzdGF0ZS0+Y29uZmlnOworCisJdTggYmNsYywgcmVnOworCXU4IGNmclsyXTsKKwl1OCBlcV9jb25zdFsxMF07CisJczMyIGNsbkkgPSAzOworCXUzMiBiYW5kd2lkdGggPSAwOworCisJLyogQkVUQSB2YWx1ZXMgcmF0ZWQgQCA5OU1IegkqLworCXMzMiBiZXRhVGFiWzVdWzRdID0geworCSAgICAgICAvKiAgNSAgIDEwICAgMjAgICAzME1CcHMgKi8KKwkJeyAzNywgIDM0LCAgMzIsICAzMSB9LCAvKiBRUFNLIDEvMgkqLworCQl7IDM3LCAgMzUsICAzMywgIDMxIH0sIC8qIFFQU0sgMi8zCSovCisJCXsgMzcsICAzNSwgIDMzLCAgMzEgfSwgLyogUVBTSyAzLzQJKi8KKwkJeyAzNywgIDM2LCAgMzMsCSAzMiB9LCAvKiBRUFNLIDUvNgkqLworCQl7IDM3LCAgMzYsICAzMywJIDMyIH0gIC8qIFFQU0sgNy84CSovCisJfTsKKworCWludGVybmFsLT5kaXJlY3Rpb24gPSAxOworCisJc3RiMDg5OV9zZXRfc3JhdGUoc3RhdGUsIGludGVybmFsLT5tYXN0ZXJfY2xrLCBwYXJhbXMtPnNyYXRlKTsKKwkvKiBDYXJyaWVyIGxvb3Agb3B0aW1pemF0aW9uIHZlcnN1cyBzeW1ib2wgcmF0ZSBmb3IgYWNxdWlzaXRpb24qLworCWlmIChwYXJhbXMtPnNyYXRlIDw9IDUwMDAwMDApIHsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQUNMQywgMHg4OSk7CisJCWJjbGMgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChCRVRBLCBiY2xjLCAweDFjKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQkNMQywgYmNsYyk7CisJCWNsbkkgPSAwOworCX0gZWxzZSBpZiAocGFyYW1zLT5zcmF0ZSA8PSAxNTAwMDAwMCkgeworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9BQ0xDLCAweGM5KTsKKwkJYmNsYyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfQkNMQyk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEJFVEEsIGJjbGMsIDB4MjIpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9CQ0xDLCBiY2xjKTsKKwkJY2xuSSA9IDE7CisJfSBlbHNlIGlmKHBhcmFtcy0+c3JhdGUgPD0gMjUwMDAwMDApIHsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQUNMQywgMHg4OSk7CisJCWJjbGMgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChCRVRBLCBiY2xjLCAweDI3KTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQkNMQywgYmNsYyk7CisJCWNsbkkgPSAyOworCX0gZWxzZSB7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0FDTEMsIDB4YzgpOworCQliY2xjID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9CQ0xDKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQkVUQSwgYmNsYywgMHgyOSk7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMsIGJjbGMpOworCQljbG5JID0gMzsKKwl9CisKKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIlNldCB0aGUgdGltaW5nIGxvb3AgdG8gYWNxdWlzaXRpb24iKTsKKwkvKiBTZXQgdGhlIHRpbWluZyBsb29wIHRvIGFjcXVpc2l0aW9uCSovCisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfUlRDLCAweDQ2KTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQsIDB4ZWUpOworCisJLyogISEgV0FSTklORyAhIQorCSAqIERvIG5vdCByZWFkIGFueSBzdGF0dXMgdmFyaWFibGVzIHdoaWxlIGFjcXVpc2l0aW9uLAorCSAqIElmIGFueSBuZWVkZWQsIHJlYWQgYmVmb3JlIHRoZSBhY3F1aXNpdGlvbiBzdGFydHMKKwkgKiBxdWVyeWluZyBzdGF0dXMgd2hpbGUgYWNxdWlyaW5nIGNhdXNlcyB0aGUKKwkgKiBhY3F1aXNpdGlvbiB0byBnbyBiYWQgYW5kIGhlbmNlIG5vIGxvY2tzLgorCSAqLworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiRGVyb3QgUGVyY2VudD0lZCBTcmF0ZT0lZCBtY2xrPSVkIiwKKwkJaW50ZXJuYWwtPmRlcm90X3BlcmNlbnQsIHBhcmFtcy0+c3JhdGUsIGludGVybmFsLT5tY2xrKTsKKworCS8qIEluaXRpYWwgY2FsY3VsYXRpb25zCSovCisJaW50ZXJuYWwtPmRlcm90X3N0ZXAgPSBpbnRlcm5hbC0+ZGVyb3RfcGVyY2VudCAqIChwYXJhbXMtPnNyYXRlIC8gMTAwMEwpIC8gaW50ZXJuYWwtPm1jbGs7IC8qIERlcm90U3RlcC8xMDAwICogRnN5bWJvbAkqLworCWludGVybmFsLT50X2Rlcm90ID0gc3RiMDg5OV9jYWxjX2Rlcm90X3RpbWUocGFyYW1zLT5zcmF0ZSk7CisJaW50ZXJuYWwtPnRfZGF0YSA9IDUwMDsKKworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiUkVTRVQgc3RyZWFtIG1lcmdlciIpOworCS8qIFJFU0VUIFN0cmVhbSBtZXJnZXIJKi8KKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUyk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRlJFU1JTLCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUywgcmVnKTsKKworCS8qCisJICogU2V0IEtESVZJREVSIHRvIGFuIGludGVybWVkaWF0ZSB2YWx1ZSBiZXR3ZWVuCisJICogMS8yIGFuZCA3LzggZm9yIGFjcXVpc2l0aW9uCisJICovCisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ERU1BUFZJVCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoREVNQVBWSVRfS0RJVklERVIsIHJlZywgNjApOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RFTUFQVklULCByZWcpOworCisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRVFPTiwgMHgwMSk7IC8qIEVxdWFsaXplciBPRkYgd2hpbGUgYWNxdWlyaW5nICovCisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVklUU1lOQywgMHgxOSk7CisKKwlzdGIwODk5X2ZpcnN0X3N1YnJhbmdlKHN0YXRlKTsKKwlkbyB7CisJCS8qIEluaXRpYWxpc2F0aW9ucyAqLworCQljZnJbMF0gPSBjZnJbMV0gPSAwOworCQlzdGIwODk5X3dyaXRlX3JlZ3Moc3RhdGUsIFNUQjA4OTlfQ0ZSTSwgY2ZyLCAyKTsgLyogUkVTRVQgZGVyb3RhdG9yIGZyZXF1ZW5jeQkqLworCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1JURiwgMCk7CisJCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfQ0ZEKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ0ZEX09OLCByZWcsIDEpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQsIHJlZyk7CisKKwkJaW50ZXJuYWwtPmRlcm90X2ZyZXEgPSAwOworCQlpbnRlcm5hbC0+c3RhdHVzID0gTk9BR0MxOworCisJCS8qIGVuYWJsZSB0dW5lciBJL08gKi8KKwkJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDEpOworCisJCS8qIE1vdmUgdHVuZXIgdG8gZnJlcXVlbmN5ICovCisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiVHVuZXIgc2V0IGZyZXF1ZW5jeSIpOworCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSkKKwkJCXN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koJnN0YXRlLT5mcm9udGVuZCwgaW50ZXJuYWwtPmZyZXEpOworCisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KQorCQkJc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSgmc3RhdGUtPmZyb250ZW5kLCAmaW50ZXJuYWwtPmZyZXEpOworCisJCW1zbGVlcChpbnRlcm5hbC0+dF9hZ2MxICsgaW50ZXJuYWwtPnRfYWdjMiArIGludGVybmFsLT50X2Rlcm90KTsgLyogQUdDMSwgQUdDMiBhbmQgdGltaW5nIGxvb3AJKi8KKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJjdXJyZW50IGRlcm90IGZyZXE9JWQiLCBpbnRlcm5hbC0+ZGVyb3RfZnJlcSk7CisJCWludGVybmFsLT5zdGF0dXMgPSBBR0MxT0s7CisKKwkJLyogVGhlcmUgaXMgc2lnbmFsIGluIHRoZSBiYW5kCSovCisJCWlmIChjb25maWctPnR1bmVyX2dldF9iYW5kd2lkdGgpCisJCQljb25maWctPnR1bmVyX2dldF9iYW5kd2lkdGgoJnN0YXRlLT5mcm9udGVuZCwgJmJhbmR3aWR0aCk7CisKKwkJLyogZGlzYWJsZSB0dW5lciBJL08gKi8KKwkJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDApOworCisJCWlmIChwYXJhbXMtPnNyYXRlIDw9IGJhbmR3aWR0aCAvIDIpCisJCQlzdGIwODk5X3NlYXJjaF90bWcoc3RhdGUpOyAvKiBGb3IgbG93IHJhdGVzIChTQ1BDKQkqLworCQllbHNlCisJCQlzdGIwODk5X2NoZWNrX3RtZyhzdGF0ZSk7IC8qIEZvciBoaWdoIHJhdGVzIChNQ1BDKQkqLworCisJCWlmIChpbnRlcm5hbC0+c3RhdHVzID09IFRJTUlOR09LKSB7CisJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwKKwkJCQkiVElNSU5HIE9LICEgRGVyb3QgZnJlcT0lZCwgbWNsaz0lZCIsCisJCQkJaW50ZXJuYWwtPmRlcm90X2ZyZXEsIGludGVybmFsLT5tY2xrKTsKKworCQkJaWYgKHN0YjA4OTlfc2VhcmNoX2NhcnJpZXIoc3RhdGUpID09IENBUlJJRVJPSykgewkvKiBTZWFyY2ggZm9yIGNhcnJpZXIJKi8KKwkJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwKKwkJCQkJIkNBUlJJRVIgT0sgISBEZXJvdCBmcmVxPSVkLCBtY2xrPSVkIiwKKwkJCQkJaW50ZXJuYWwtPmRlcm90X2ZyZXEsIGludGVybmFsLT5tY2xrKTsKKworCQkJCWlmIChzdGIwODk5X3NlYXJjaF9kYXRhKHN0YXRlKSA9PSBEQVRBT0spIHsJLyogQ2hlY2sgZm9yIGRhdGEJKi8KKwkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCQkiREFUQSBPSyAhIERlcm90IGZyZXE9JWQsIG1jbGs9JWQiLAorCQkJCQkJaW50ZXJuYWwtPmRlcm90X2ZyZXEsIGludGVybmFsLT5tY2xrKTsKKworCQkJCQlpZiAoc3RiMDg5OV9jaGVja19yYW5nZShzdGF0ZSkgPT0gUkFOR0VPSykgeworCQkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCQkJIlJBTkdFIE9LICEgZGVyb3QgZnJlcT0lZCwgbWNsaz0lZCIsCisJCQkJCQkJaW50ZXJuYWwtPmRlcm90X2ZyZXEsIGludGVybmFsLT5tY2xrKTsKKworCQkJCQkJaW50ZXJuYWwtPmZyZXEgPSBwYXJhbXMtPmZyZXEgKyAoKGludGVybmFsLT5kZXJvdF9mcmVxICogaW50ZXJuYWwtPm1jbGspIC8gMTAwMCk7CisJCQkJCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1BMUEFSTSk7CisJCQkJCQlpbnRlcm5hbC0+ZmVjcmF0ZSA9IFNUQjA4OTlfR0VURklFTEQoVklUQ1VSUFVOLCByZWcpOworCQkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCQkJImZyZXE9JWQsIGludGVybmFsIHJlc3VsdGFudCBmcmVxPSVkIiwKKwkJCQkJCQlwYXJhbXMtPmZyZXEsIGludGVybmFsLT5mcmVxKTsKKworCQkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCQkJImludGVybmFsIHB1bmN0dXJlIHJhdGU9JWQiLAorCQkJCQkJCWludGVybmFsLT5mZWNyYXRlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoaW50ZXJuYWwtPnN0YXR1cyAhPSBSQU5HRU9LKQorCQkJbmV4dF9zdWJfcmFuZ2Uoc3RhdGUpOworCisJfSB3aGlsZSAoaW50ZXJuYWwtPnN1Yl9yYW5nZSAmJiBpbnRlcm5hbC0+c3RhdHVzICE9IFJBTkdFT0spOworCisJLyogU2V0IHRoZSB0aW1pbmcgbG9vcCB0byB0cmFja2luZwkqLworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1JUQywgMHgzMyk7CisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQ0ZELCAweGY3KTsKKwkvKiBpZiBsb2NrZWQgYW5kIHJhbmdlIG9rLCBzZXQgS2RpdgkqLworCWlmIChpbnRlcm5hbC0+c3RhdHVzID09IFJBTkdFT0spIHsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJMb2NrZWQgJiBSYW5nZSBPSyAhIik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0VRT04sIDB4NDEpOwkJLyogRXF1YWxpemVyIE9GRiB3aGlsZSBhY3F1aXJpbmcJKi8KKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVklUU1lOQywgMHgzOSk7CS8qIFNOIHRvIGInMTEgZm9yIGFjcXVpc2l0aW9uCQkqLworCisJCS8qCisJCSAqIENhcnJpZXIgbG9vcCBvcHRpbWl6YXRpb24gdmVyc3VzCisJCSAqIHN5bWJvbCBSYXRlL1B1bmN0dXJlIFJhdGUgZm9yIFRyYWNraW5nCisJCSAqLworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMpOworCQlzd2l0Y2ggKGludGVybmFsLT5mZWNyYXRlKSB7CisJCWNhc2UgU1RCMDg5OV9GRUNfMV8yOgkJLyogMTMJKi8KKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RFTUFQVklULCAweDFhKTsKKwkJCVNUQjA4OTlfU0VURklFTERfVkFMKEJFVEEsIHJlZywgYmV0YVRhYlswXVtjbG5JXSk7CisJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9CQ0xDLCByZWcpOworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9GRUNfMl8zOgkJLyogMTgJKi8KKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RFTUFQVklULCA0NCk7CisJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChCRVRBLCByZWcsIGJldGFUYWJbMV1bY2xuSV0pOworCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQkNMQywgcmVnKTsKKwkJCWJyZWFrOworCQljYXNlIFNUQjA4OTlfRkVDXzNfNDoJCS8qIDIxCSovCisJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ERU1BUFZJVCwgNjApOworCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQkVUQSwgcmVnLCBiZXRhVGFiWzJdW2NsbkldKTsKKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMsIHJlZyk7CisJCQlicmVhazsKKwkJY2FzZSBTVEIwODk5X0ZFQ181XzY6CQkvKiAyNAkqLworCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfREVNQVBWSVQsIDc1KTsKKwkJCVNUQjA4OTlfU0VURklFTERfVkFMKEJFVEEsIHJlZywgYmV0YVRhYlszXVtjbG5JXSk7CisJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9CQ0xDLCByZWcpOworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9GRUNfNl83OgkJLyogMjUJKi8KKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RFTUFQVklULCA4OCk7CisJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9BQ0xDLCAweDg4KTsKKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0JDTEMsIDB4OWEpOworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9GRUNfN184OgkJLyogMjYJKi8KKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RFTUFQVklULCA5NCk7CisJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChCRVRBLCByZWcsIGJldGFUYWJbNF1bY2xuSV0pOworCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQkNMQywgcmVnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJVbnN1cHBvcnRlZCBQdW5jdHVyZSBSYXRlIik7CisJCQlicmVhazsKKwkJfQorCQkvKiByZWxlYXNlIHN0cmVhbSBtZXJnZXIgUkVTRVQJKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChGUkVTUlMsIHJlZywgMCk7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUywgcmVnKTsKKworCQkvKiBkaXNhYmxlIGNhcnJpZXIgZGV0ZWN0b3IJKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkQpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDRkRfT04sIHJlZywgMCk7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0NGRCwgcmVnKTsKKworCQlzdGIwODk5X3JlYWRfcmVncyhzdGF0ZSwgU1RCMDg5OV9FUVVBSTEsIGVxX2NvbnN0LCAxMCk7CisJfQorCisJcmV0dXJuIGludGVybmFsLT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGIwODk5X2R2YnMyX2NvbmZpZ191d3AKKyAqIENvbmZpZ3VyZSBVV1Agc3RhdGUgbWFjaGluZQorICovCitzdGF0aWMgdm9pZCBzdGIwODk5X2R2YnMyX2NvbmZpZ191d3Aoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCXUzMiB1d3AxLCB1d3AyLCB1d3AzLCByZWc7CisKKwl1d3AxID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgVVdQX0NOVFJMMSk7CisJdXdwMiA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIFVXUF9DTlRSTDIpOworCXV3cDMgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBVV1BfQ05UUkwzKTsKKworCVNUQjA4OTlfU0VURklFTERfVkFMKFVXUF9FU04wX0FWRSwgdXdwMSwgY29uZmlnLT5lc25vX2F2ZSk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoVVdQX0VTTjBfUVVBTlQsIHV3cDEsIGNvbmZpZy0+ZXNub19xdWFudCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoVVdQX1RIX1NPRiwgdXdwMSwgY29uZmlnLT51d3BfdGhyZXNob2xkX3NvZik7CisKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChGRV9DT0FSU0VfVFJLLCB1d3AyLCBpbnRlcm5hbC0+YXZfZnJhbWVfY29hcnNlKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChGRV9GSU5FX1RSSywgdXdwMiwgaW50ZXJuYWwtPmF2X2ZyYW1lX2ZpbmUpOworCVNUQjA4OTlfU0VURklFTERfVkFMKFVXUF9NSVNTX1RILCB1d3AyLCBjb25maWctPm1pc3NfdGhyZXNob2xkKTsKKworCVNUQjA4OTlfU0VURklFTERfVkFMKFVXUF9USF9BQ1EsIHV3cDMsIGNvbmZpZy0+dXdwX3RocmVzaG9sZF9hY3EpOworCVNUQjA4OTlfU0VURklFTERfVkFMKFVXUF9USF9UUkFDSywgdXdwMywgY29uZmlnLT51d3BfdGhyZXNob2xkX3RyYWNrKTsKKworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX1VXUF9DTlRSTDEsIFNUQjA4OTlfT0ZGMF9VV1BfQ05UUkwxLCB1d3AxKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9VV1BfQ05UUkwyLCBTVEIwODk5X09GRjBfVVdQX0NOVFJMMiwgdXdwMik7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMywgU1RCMDg5OV9PRkYwX1VXUF9DTlRSTDMsIHV3cDMpOworCisJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgU09GX1NSQ0hfVE8pOworCVNUQjA4OTlfU0VURklFTERfVkFMKFNPRl9TRUFSQ0hfVElNRU9VVCwgcmVnLCBjb25maWctPnNvZl9zZWFyY2hfdGltZW91dCk7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfU09GX1NSQ0hfVE8sIFNUQjA4OTlfT0ZGMF9TT0ZfU1JDSF9UTywgcmVnKTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfY29uZmlnX2NzbV9hdXRvCisgKiBTZXQgQ1NNIHRvIEFVVE8gbW9kZQorICovCitzdGF0aWMgdm9pZCBzdGIwODk5X2R2YnMyX2NvbmZpZ19jc21fYXV0byhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIENTTV9DTlRSTDEpOworCVNUQjA4OTlfU0VURklFTERfVkFMKENTTV9BVVRPX1BBUkFNLCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDEsIFNUQjA4OTlfT0ZGMF9DU01fQ05UUkwxLCByZWcpOworfQorCitsb25nIExvZzJJbnQoaW50IG51bWJlcikKK3sKKwlpbnQgaTsKKworCWkgPSAwOworCXdoaWxlICgoMSA8PCBpKSA8PSBBQlMobnVtYmVyKSkKKwkJaSsrOworCisJaWYgKG51bWJlciA9PSAwKQorCQlpID0gMTsKKworCXJldHVybiBpIC0gMTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfY2FsY19zcmF0ZQorICogY29tcHV0ZSBCVFJfTk9NX0ZSRVEgZm9yIHRoZSBzeW1ib2wgcmF0ZQorICovCitzdGF0aWMgdTMyIHN0YjA4OTlfZHZiczJfY2FsY19zcmF0ZShzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsCT0gJnN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgKmNvbmZpZwkJPSBzdGF0ZS0+Y29uZmlnOworCisJdTMyIGRlY19yYXRpbywgZGVjX3JhdGUsIGRlY2ltLCByZW1haW4sIGludHZhbCwgYnRyX25vbV9mcmVxOworCXUzMiBtYXN0ZXJfY2xrLCBzcmF0ZTsKKworCWRlY19yYXRpbyA9IChpbnRlcm5hbC0+bWFzdGVyX2NsayAqIDIpIC8gKDUgKiBpbnRlcm5hbC0+c3JhdGUpOworCWRlY19yYXRpbyA9IChkZWNfcmF0aW8gPT0gMCkgPyAxIDogZGVjX3JhdGlvOworCWRlY19yYXRlID0gTG9nMkludChkZWNfcmF0aW8pOworCWRlY2ltID0gMSA8PCBkZWNfcmF0ZTsKKwltYXN0ZXJfY2xrID0gaW50ZXJuYWwtPm1hc3Rlcl9jbGsgLyAxMDAwOworCXNyYXRlID0gaW50ZXJuYWwtPnNyYXRlIC8gMTAwMDsKKworCWlmIChkZWNpbSA8PSA0KSB7CisJCWludHZhbCA9IChkZWNpbSAqICgxIDw8IChjb25maWctPmJ0cl9uY29fYml0cyAtIDEpKSkgLyBtYXN0ZXJfY2xrOworCQlyZW1haW4gPSAoZGVjaW0gKiAoMSA8PCAoY29uZmlnLT5idHJfbmNvX2JpdHMgLSAxKSkpICUgbWFzdGVyX2NsazsKKwl9IGVsc2UgeworCQlpbnR2YWwgPSAoMSA8PCAoY29uZmlnLT5idHJfbmNvX2JpdHMgLSAxKSkgLyAobWFzdGVyX2NsayAvIDEwMCkgKiBkZWNpbSAvIDEwMDsKKwkJcmVtYWluID0gKGRlY2ltICogKDEgPDwgKGNvbmZpZy0+YnRyX25jb19iaXRzIC0gMSkpKSAlIG1hc3Rlcl9jbGs7CisJfQorCWJ0cl9ub21fZnJlcSA9IChpbnR2YWwgKiBzcmF0ZSkgKyAoKHJlbWFpbiAqIHNyYXRlKSAvIG1hc3Rlcl9jbGspOworCisJcmV0dXJuIGJ0cl9ub21fZnJlcTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfY2FsY19kZXYKKyAqIGNvbXB1dGUgdGhlIGNvcnJlY3Rpb24gdG8gYmUgYXBwbGllZCB0byBzeW1ib2wgcmF0ZQorICovCitzdGF0aWMgdTMyIHN0YjA4OTlfZHZiczJfY2FsY19kZXYoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJdTMyIGRlY19yYXRpbywgY29ycmVjdGlvbiwgbWFzdGVyX2Nsaywgc3JhdGU7CisKKwlkZWNfcmF0aW8gPSAoaW50ZXJuYWwtPm1hc3Rlcl9jbGsgKiAyKSAvICg1ICogaW50ZXJuYWwtPnNyYXRlKTsKKwlkZWNfcmF0aW8gPSAoZGVjX3JhdGlvID09IDApID8gMSA6IGRlY19yYXRpbzsKKworCW1hc3Rlcl9jbGsgPSBpbnRlcm5hbC0+bWFzdGVyX2NsayAvIDEwMDA7CS8qIGZvciBpbnRlZ2VyIENhY3VsYXRpb24qLworCXNyYXRlID0gaW50ZXJuYWwtPnNyYXRlIC8gMTAwMDsJLyogZm9yIGludGVnZXIgQ2FjdWxhdGlvbiovCisJY29ycmVjdGlvbiA9ICg1MTIgKiBtYXN0ZXJfY2xrKSAvICgyICogZGVjX3JhdGlvICogc3JhdGUpOworCisJcmV0dXJuCWNvcnJlY3Rpb247Cit9CisKKy8qCisgKiBzdGIwODk5X2R2YnMyX3NldF9zcmF0ZQorICogU2V0IERWQlMyIHN5bWJvbCByYXRlCisgKi8KK3N0YXRpYyB2b2lkIHN0YjA4OTlfZHZiczJfc2V0X3NyYXRlKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCisJdTMyIGRlY19yYXRpbywgZGVjX3JhdGUsIHdpbl9zZWwsIGRlY2ltLCBmX3N5bSwgYnRyX25vbV9mcmVxOworCXUzMiBjb3JyZWN0aW9uLCBmcmVxX2FkaiwgYmFuZF9saW0sIGRlY2ltX2NudHJsLCByZWc7CisJdTggYW50aV9hbGlhczsKKworCS8qc2V0IGRlY2ltYXRpb24gdG8gMSovCisJZGVjX3JhdGlvID0gKGludGVybmFsLT5tYXN0ZXJfY2xrICogMikgLyAoNSAqIGludGVybmFsLT5zcmF0ZSk7CisJZGVjX3JhdGlvID0gKGRlY19yYXRpbyA9PSAwKSA/IDEgOiBkZWNfcmF0aW87CisJZGVjX3JhdGUgPSBMb2cySW50KGRlY19yYXRpbyk7CisKKwl3aW5fc2VsID0gMDsKKwlpZiAoZGVjX3JhdGUgPj0gNSkKKwkJd2luX3NlbCA9IGRlY19yYXRlIC0gNDsKKworCWRlY2ltID0gKDEgPDwgZGVjX3JhdGUpOworCS8qIChGU2FtcC9Gc3ltYm9sICoxMDApIGZvciBpbnRlZ2VyIENhY3VsYXRpb24gKi8KKwlmX3N5bSA9IGludGVybmFsLT5tYXN0ZXJfY2xrIC8gKChkZWNpbSAqIGludGVybmFsLT5zcmF0ZSkgLyAxMDAwKTsKKworCWlmIChmX3N5bSA8PSAyMjUwKQkvKiBkb24ndCBiYW5kIGxpbWl0IHNpZ25hbCBnb2luZyBpbnRvIGJ0ciBibG9jayovCisJCWJhbmRfbGltID0gMTsKKwllbHNlCisJCWJhbmRfbGltID0gMDsJLyogYmFuZCBsaW1pdCBzaWduYWwgZ29pbmcgaW50byBidHIgYmxvY2sqLworCisJZGVjaW1fY250cmwgPSAoKHdpbl9zZWwgPDwgMykgJiAweDE4KSArICgoYmFuZF9saW0gPDwgNSkgJiAweDIwKSArIChkZWNfcmF0ZSAmIDB4Nyk7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfREVDSU1fQ05UUkwsIFNUQjA4OTlfT0ZGMF9ERUNJTV9DTlRSTCwgZGVjaW1fY250cmwpOworCisJaWYgKGZfc3ltIDw9IDM0NTApCisJCWFudGlfYWxpYXMgPSAwOworCWVsc2UgaWYgKGZfc3ltIDw9IDQyNTApCisJCWFudGlfYWxpYXMgPSAxOworCWVsc2UKKwkJYW50aV9hbGlhcyA9IDI7CisKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9BTlRJX0FMSUFTX1NFTCwgU1RCMDg5OV9PRkYwX0FOVElfQUxJQVNfU0VMLCBhbnRpX2FsaWFzKTsKKwlidHJfbm9tX2ZyZXEgPSBzdGIwODk5X2R2YnMyX2NhbGNfc3JhdGUoc3RhdGUpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0JUUl9OT01fRlJFUSwgU1RCMDg5OV9PRkYwX0JUUl9OT01fRlJFUSwgYnRyX25vbV9mcmVxKTsKKworCWNvcnJlY3Rpb24gPSBzdGIwODk5X2R2YnMyX2NhbGNfZGV2KHN0YXRlKTsKKwlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBCVFJfQ05UUkwpOworCVNUQjA4OTlfU0VURklFTERfVkFMKEJUUl9GUkVRX0NPUlIsIHJlZywgY29ycmVjdGlvbik7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQlRSX0NOVFJMLCBTVEIwODk5X09GRjBfQlRSX0NOVFJMLCByZWcpOworCisJLyogc2NhbGUgVVdQK0NTTSBmcmVxdWVuY3kgdG8gc2FtcGxlIHJhdGUqLworCWZyZXFfYWRqID0gIGludGVybmFsLT5zcmF0ZSAvIChpbnRlcm5hbC0+bWFzdGVyX2NsayAvIDQwOTYpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0ZSRVFfQURKX1NDQUxFLCBTVEIwODk5X09GRjBfRlJFUV9BREpfU0NBTEUsIGZyZXFfYWRqKTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfc2V0X2J0cl9sb29wYncKKyAqIHNldCBiaXQgdGltaW5nIGxvb3AgYmFuZHdpZHRoIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3ltYm9sIHJhdGUKKyAqLworc3RhdGljIHZvaWQgc3RiMDg5OV9kdmJzMl9zZXRfYnRyX2xvb3BidyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsCT0gJnN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgKmNvbmZpZwkJPSBzdGF0ZS0+Y29uZmlnOworCisJdTMyIHN5bV9wZWFrID0gMjMsIHpldGEgPSA3MDcsIGxvb3Bid19wZXJjZW50ID0gNjA7CisJczMyIGRlY19yYXRpbywgZGVjX3JhdGUsIGtfYnRyMV9yc2hmdCwga19idHIxLCBrX2J0cjBfcnNoZnQ7CisJczMyIGtfYnRyMCwga19idHIyX3JzaGZ0LCBrX2RpcmVjdF9zaGlmdCwga19pbmRpcmVjdF9zaGlmdDsKKwl1MzIgZGVjaW0sIEssIHduLCBrX2RpcmVjdCwga19pbmRpcmVjdDsKKwl1MzIgcmVnOworCisJZGVjX3JhdGlvID0gKGludGVybmFsLT5tYXN0ZXJfY2xrICogMikgLyAoNSAqIGludGVybmFsLT5zcmF0ZSk7CisJZGVjX3JhdGlvID0gKGRlY19yYXRpbyA9PSAwKSA/IDEgOiBkZWNfcmF0aW87CisJZGVjX3JhdGUgPSBMb2cySW50KGRlY19yYXRpbyk7CisJZGVjaW0gPSAoMSA8PCBkZWNfcmF0ZSk7CisKKwlzeW1fcGVhayAqPSA1NzYwMDA7CisJSyA9ICgxIDw8IGNvbmZpZy0+YnRyX25jb19iaXRzKSAvIChpbnRlcm5hbC0+bWFzdGVyX2NsayAvIDEwMDApOworCUsgKj0gKGludGVybmFsLT5zcmF0ZSAvIDEwMDAwMDApICogZGVjaW07IC8qaz1rIDEwXi04Ki8KKworCWlmIChLICE9IDApIHsKKwkJSyA9IHN5bV9wZWFrIC8gSzsKKwkJd24gPSAoNCAqIHpldGEgKiB6ZXRhKSArIDEwMDAwMDA7CisJCXduID0gKDIgKiAobG9vcGJ3X3BlcmNlbnQgKiAxMDAwKSAqIDQwICogemV0YSkgL3duOyAgLyp3biA9d24gMTBeLTgqLworCisJCWtfaW5kaXJlY3QgPSAod24gKiB3bikgLyBLOworCQlrX2luZGlyZWN0ID0ga19pbmRpcmVjdDsJICAvKmtpbmRpcmVjdCA9IGtpbmRpcmVjdCAxMF4tNiovCisJCWtfZGlyZWN0ICAgPSAoMiAqIHduICogemV0YSkgLyBLOwkvKmtEaXJlY3QgPSBrRGlyZWN0IDEwXi0yKi8KKwkJa19kaXJlY3QgICo9IDEwMDsKKworCQlrX2RpcmVjdF9zaGlmdCA9IExvZzJJbnQoa19kaXJlY3QpIC0gTG9nMkludCgxMDAwMCkgLSAyOworCQlrX2J0cjFfcnNoZnQgPSAoLTEgKiBrX2RpcmVjdF9zaGlmdCkgKyBjb25maWctPmJ0cl9nYWluX3NoaWZ0X29mZnNldDsKKwkJa19idHIxID0ga19kaXJlY3QgLyAoMSA8PCBrX2RpcmVjdF9zaGlmdCk7CisJCWtfYnRyMSAvPSAxMDAwMDsKKworCQlrX2luZGlyZWN0X3NoaWZ0ID0gTG9nMkludChrX2luZGlyZWN0ICsgMTUpIC0gMjAgLyotIDIqLzsKKwkJa19idHIwX3JzaGZ0ID0gKC0xICoga19pbmRpcmVjdF9zaGlmdCkgKyBjb25maWctPmJ0cl9nYWluX3NoaWZ0X29mZnNldDsKKwkJa19idHIwID0ga19pbmRpcmVjdCAqICgxIDw8ICgta19pbmRpcmVjdF9zaGlmdCkpOworCQlrX2J0cjAgLz0gMTAwMDAwMDsKKworCQlrX2J0cjJfcnNoZnQgPSAwOworCQlpZiAoa19idHIwX3JzaGZ0ID4gMTUpIHsKKwkJCWtfYnRyMl9yc2hmdCA9IGtfYnRyMF9yc2hmdCAtIDE1OworCQkJa19idHIwX3JzaGZ0ID0gMTU7CisJCX0KKwkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQlRSX0xPT1BfR0FJTik7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEtCVFIwX1JTSEZULCByZWcsIGtfYnRyMF9yc2hmdCk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEtCVFIwLCByZWcsIGtfYnRyMCk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEtCVFIxX1JTSEZULCByZWcsIGtfYnRyMV9yc2hmdCk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEtCVFIxLCByZWcsIGtfYnRyMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEtCVFIyX1JTSEZULCByZWcsIGtfYnRyMl9yc2hmdCk7CisJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0JUUl9MT09QX0dBSU4sIFNUQjA4OTlfT0ZGMF9CVFJfTE9PUF9HQUlOLCByZWcpOworCX0gZWxzZQorCQlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9CVFJfTE9PUF9HQUlOLCBTVEIwODk5X09GRjBfQlRSX0xPT1BfR0FJTiwgMHhjNGM0Zik7Cit9CisKKy8qCisgKiBzdGIwODk5X2R2YnMyX3NldF9jYXJyX2ZyZXEKKyAqIHNldCBub21pbmFsIGZyZXF1ZW5jeSBmb3IgY2FycmllciBzZWFyY2gKKyAqLworc3RhdGljIHZvaWQgc3RiMDg5OV9kdmJzMl9zZXRfY2Fycl9mcmVxKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgczMyIGNhcnJfZnJlcSwgdTMyIG1hc3Rlcl9jbGspCit7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCXMzMiBjcmxfbm9tX2ZyZXE7CisJdTMyIHJlZzsKKworCWNybF9ub21fZnJlcSA9ICgxIDw8IGNvbmZpZy0+Y3JsX25jb19iaXRzKSAvIG1hc3Rlcl9jbGs7CisJY3JsX25vbV9mcmVxICo9IGNhcnJfZnJlcTsKKwlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDUkxfTk9NX0ZSRVEpOworCVNUQjA4OTlfU0VURklFTERfVkFMKENSTF9OT01fRlJFUSwgcmVnLCBjcmxfbm9tX2ZyZXEpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NSTF9OT01fRlJFUSwgU1RCMDg5OV9PRkYwX0NSTF9OT01fRlJFUSwgcmVnKTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfaW5pdF9jYWxjCisgKiBJbml0aWFsaXplIERWQlMyIFVXUCwgQ1NNLCBjYXJyaWVyIGFuZCB0aW1pbmcgbG9vcHMKKyAqLworc3RhdGljIHZvaWQgc3RiMDg5OV9kdmJzMl9pbml0X2NhbGMoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJczMyIHN0ZXBzLCBzdGVwX3NpemU7CisJdTMyIHJhbmdlLCByZWc7CisKKwkvKiBjb25maWcgdXdwIGFuZCBjc20gKi8KKwlzdGIwODk5X2R2YnMyX2NvbmZpZ191d3Aoc3RhdGUpOworCXN0YjA4OTlfZHZiczJfY29uZmlnX2NzbV9hdXRvKHN0YXRlKTsKKworCS8qIGluaXRpYWxpemUgQlRSCSovCisJc3RiMDg5OV9kdmJzMl9zZXRfc3JhdGUoc3RhdGUpOworCXN0YjA4OTlfZHZiczJfc2V0X2J0cl9sb29wYncoc3RhdGUpOworCisJaWYgKGludGVybmFsLT5zcmF0ZSAvIDEwMDAwMDAgPj0gMTUpCisJCXN0ZXBfc2l6ZSA9ICgxIDw8IDE3KSAvIDU7CisJZWxzZSBpZiAoaW50ZXJuYWwtPnNyYXRlIC8gMTAwMDAwMCA+PSAxMCkKKwkJc3RlcF9zaXplID0gKDEgPDwgMTcpIC8gNzsKKwllbHNlIGlmIChpbnRlcm5hbC0+c3JhdGUgLyAxMDAwMDAwID49IDUpCisJCXN0ZXBfc2l6ZSA9ICgxIDw8IDE3KSAvIDEwOworCWVsc2UKKwkJc3RlcF9zaXplID0gKDEgPDwgMTcpIC8gNDsKKworCXJhbmdlID0gaW50ZXJuYWwtPnNyY2hfcmFuZ2UgLyAxMDAwMDAwOworCXN0ZXBzID0gKDEwICogcmFuZ2UgKiAoMSA8PCAxNykpIC8gKHN0ZXBfc2l6ZSAqIChpbnRlcm5hbC0+c3JhdGUgLyAxMDAwMDAwKSk7CisJc3RlcHMgPSAoc3RlcHMgKyA2KSAvIDEwOworCXN0ZXBzID0gKHN0ZXBzID09IDApID8gMSA6IHN0ZXBzOworCWlmIChzdGVwcyAlIDIgPT0gMCkKKwkJc3RiMDg5OV9kdmJzMl9zZXRfY2Fycl9mcmVxKHN0YXRlLCBpbnRlcm5hbC0+Y2VudGVyX2ZyZXEgLQorCQkJCQkgICAoaW50ZXJuYWwtPnN0ZXBfc2l6ZSAqIChpbnRlcm5hbC0+c3JhdGUgLyAyMDAwMDAwMCkpLAorCQkJCQkgICAoaW50ZXJuYWwtPm1hc3Rlcl9jbGspIC8gMTAwMDAwMCk7CisJZWxzZQorCQlzdGIwODk5X2R2YnMyX3NldF9jYXJyX2ZyZXEoc3RhdGUsIGludGVybmFsLT5jZW50ZXJfZnJlcSwgKGludGVybmFsLT5tYXN0ZXJfY2xrKSAvIDEwMDAwMDApOworCisJLypTZXQgQ2FycmllciBTZWFyY2ggcGFyYW1zICh6aWd6YWcsIG51bSBzdGVwcyBhbmQgZnJlcSBzdGVwIHNpemUqLworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIEFDUV9DTlRSTDIpOworCVNUQjA4OTlfU0VURklFTERfVkFMKFpJR1pBRywgcmVnLCAxKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChOVU1fU1RFUFMsIHJlZywgc3RlcHMpOworCVNUQjA4OTlfU0VURklFTERfVkFMKEZSRVFfU1RFUFNJWkUsIHJlZywgc3RlcF9zaXplKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9BQ1FfQ05UUkwyLCBTVEIwODk5X09GRjBfQUNRX0NOVFJMMiwgcmVnKTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfYnRyX2luaXQKKyAqIGluaXRpYWxpemUgdGhlIHRpbWluZyBsb29wCisgKi8KK3N0YXRpYyB2b2lkIHN0YjA4OTlfZHZiczJfYnRyX2luaXQoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXUzMiByZWc7CisKKwkvKiBzZXQgZW5hYmxlIEJUUiBsb29wYmFjawkqLworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIEJUUl9DTlRSTCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoSU5UUlBfUEhTX1NFTlNFLCByZWcsIDEpOworCVNUQjA4OTlfU0VURklFTERfVkFMKEJUUl9FUlJfRU5BLCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0JUUl9DTlRSTCwgU1RCMDg5OV9PRkYwX0JUUl9DTlRSTCwgcmVnKTsKKworCS8qIGZpeCBidHIgZnJlcSBhY2N1bSBhdCAwCSovCisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQlRSX0ZSRVFfSU5JVCwgU1RCMDg5OV9PRkYwX0JUUl9GUkVRX0lOSVQsIDB4MTAwMDAwMDApOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0JUUl9GUkVRX0lOSVQsIFNUQjA4OTlfT0ZGMF9CVFJfRlJFUV9JTklULCAweDAwMDAwMDAwKTsKKworCS8qIGZpeCBidHIgZnJlcSBhY2N1bSBhdCAwCSovCisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQlRSX1BIU19JTklULCBTVEIwODk5X09GRjBfQlRSX1BIU19JTklULCAweDEwMDAwMDAwKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9CVFJfUEhTX0lOSVQsIFNUQjA4OTlfT0ZGMF9CVFJfUEhTX0lOSVQsIDB4MDAwMDAwMDApOworfQorCisvKgorICogc3RiMDg5OV9kdmJzMl9yZWFjcXVpcmUKKyAqIHRyaWdnZXIgYSBEVkItUzIgYWNxdWlzaXRpb24KKyAqLworc3RhdGljIHZvaWQgc3RiMDg5OV9kdmJzMl9yZWFjcXVpcmUoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXUzMiByZWcgPSAwOworCisJLyogZGVtb2Qgc29mdCByZXNldAkqLworCVNUQjA4OTlfU0VURklFTERfVkFMKERWQlMyX1JFU0VULCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX1JFU0VUX0NOVFJMLCBTVEIwODk5X09GRjBfUkVTRVRfQ05UUkwsIHJlZyk7CisKKwkvKlJlc2V0IFRpbWluZyBMb29wCSovCisJc3RiMDg5OV9kdmJzMl9idHJfaW5pdChzdGF0ZSk7CisKKwkvKiByZXNldCBDYXJyaWVyIGxvb3AJKi8KKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9DUkxfRlJFUV9JTklULCBTVEIwODk5X09GRjBfQ1JMX0ZSRVFfSU5JVCwgKDEgPDwgMzApKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9DUkxfRlJFUV9JTklULCBTVEIwODk5X09GRjBfQ1JMX0ZSRVFfSU5JVCwgMCk7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQ1JMX0xPT1BfR0FJTiwgU1RCMDg5OV9PRkYwX0NSTF9MT09QX0dBSU4sIDApOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NSTF9QSFNfSU5JVCwgU1RCMDg5OV9PRkYwX0NSTF9QSFNfSU5JVCwgKDEgPDwgMzApKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9DUkxfUEhTX0lOSVQsIFNUQjA4OTlfT0ZGMF9DUkxfUEhTX0lOSVQsIDApOworCisJLypyZWxlYXNlIGRlbW9kIHNvZnQgcmVzZXQJKi8KKwlyZWcgPSAwOworCVNUQjA4OTlfU0VURklFTERfVkFMKERWQlMyX1JFU0VULCByZWcsIDApOworCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX1JFU0VUX0NOVFJMLCBTVEIwODk5X09GRjBfUkVTRVRfQ05UUkwsIHJlZyk7CisKKwkvKiBzdGFydCBhY3F1aXNpdGlvbiBwcm9jZXNzCSovCisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQUNRVUlSRV9UUklHLCBTVEIwODk5X09GRjBfQUNRVUlSRV9UUklHLCAxKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9MT0NLX0xPU1QsIFNUQjA4OTlfT0ZGMF9MT0NLX0xPU1QsIDApOworCisJLyogZXF1YWxpemVyIEluaXQJKi8KKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9FUVVBTElaRVJfSU5JVCwgU1RCMDg5OV9PRkYwX0VRVUFMSVpFUl9JTklULCAxKTsKKworCS8qU3RhcnQgZXF1aWxpemVyCSovCisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfRVFVQUxJWkVSX0lOSVQsIFNUQjA4OTlfT0ZGMF9FUVVBTElaRVJfSU5JVCwgMCk7CisKKwlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBFUV9DTlRSTCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRVFfU0hJRlQsIHJlZywgMCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRVFfRElTQUJMRV9VUERBVEUsIHJlZywgMCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRVFfREVMQVksIHJlZywgMHgwNSk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRVFfQURBUFRfTU9ERSwgcmVnLCAweDAxKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9FUV9DTlRSTCwgU1RCMDg5OV9PRkYwX0VRX0NOVFJMLCByZWcpOworCisJLyogUkVTRVQgUGFja2V0IGRlbGluZWF0b3IJKi8KKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9QREVMQ1RSTCwgMHg0YSk7Cit9CisKKy8qCisgKiBzdGIwODk5X2R2YnMyX2dldF9kbWRfc3RhdHVzCisgKiBnZXQgRFZCLVMyIERlbW9kIExPQ0sgc3RhdHVzCisgKi8KK3N0YXRpYyBlbnVtIHN0YjA4OTlfc3RhdHVzIHN0YjA4OTlfZHZiczJfZ2V0X2RtZF9zdGF0dXMoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgdGltZSA9IC0xMCwgbG9jayA9IDAsIHV3cCwgY3NtOworCXUzMiByZWc7CisKKwlkbyB7CisJCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIERNRF9TVEFUVVMpOworCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRNRF9TVEFUVVM9WzB4JTAyeF0iLCByZWcpOworCQlpZiAoU1RCMDg5OV9HRVRGSUVMRChJRl9BR0NfTE9DSywgcmVnKSkKKwkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tLT5JRiBBR0MgTE9DS0VEICEiKTsKKwkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgRE1EX1NUQVQyKTsKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tLS0tLT5ETUQgU1RBVDI9WzB4JTAyeF0iLCByZWcpOworCQl1d3AgPSBTVEIwODk5X0dFVEZJRUxEKFVXUF9MT0NLLCByZWcpOworCQljc20gPSBTVEIwODk5X0dFVEZJRUxEKENTTV9MT0NLLCByZWcpOworCQlpZiAodXdwICYmIGNzbSkKKwkJCWxvY2sgPSAxOworCisJCXRpbWUgKz0gMTA7CisJCW1zbGVlcCgxMCk7CisKKwl9IHdoaWxlICgoIWxvY2spICYmICh0aW1lIDw9IHRpbWVvdXQpKTsKKworCWlmIChsb2NrKSB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tLS0tLT4gRFZCLVMyIExPQ0sgISIpOworCQlyZXR1cm4gRFZCUzJfREVNT0RfTE9DSzsKKwl9IGVsc2UgeworCQlyZXR1cm4gRFZCUzJfREVNT0RfTk9MT0NLOworCX0KK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfZ2V0X2RhdGFfbG9jaworICogZ2V0IEZFQyBzdGF0dXMKKyAqLworc3RhdGljIGludCBzdGIwODk5X2R2YnMyX2dldF9kYXRhX2xvY2soc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgdGltZSA9IDAsIGxvY2sgPSAwOworCXU4IHJlZzsKKworCXdoaWxlICgoIWxvY2spICYmICh0aW1lIDwgdGltZW91dCkpIHsKKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9DRkdQREVMU1RBVFVTMSk7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tPiBDRkdQREVMU1RBVFVTPVsweCUwMnhdIiwgcmVnKTsKKwkJbG9jayA9IFNUQjA4OTlfR0VURklFTEQoQ0ZHUERFTFNUQVRVU19MT0NLLCByZWcpOworCQl0aW1lKys7CisJfQorCisJcmV0dXJuIGxvY2s7Cit9CisKKy8qCisgKiBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzCisgKiBnZXQgRFZCLVMyIEZFQyBMT0NLIHN0YXR1cworICovCitzdGF0aWMgZW51bSBzdGIwODk5X3N0YXR1cyBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpCit7CisJaW50IHRpbWUgPSAwLCBMb2NrZWQ7CisKKwlkbyB7CisJCUxvY2tlZCA9IHN0YjA4OTlfZHZiczJfZ2V0X2RhdGFfbG9jayhzdGF0ZSwgMSk7CisJCXRpbWUrKzsKKwkJbXNsZWVwKDEpOworCisJfSB3aGlsZSAoKCFMb2NrZWQpICYmICh0aW1lIDwgdGltZW91dCkpOworCisJaWYgKExvY2tlZCkgeworCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIi0tLS0tLS0tLS0+RFZCLVMyIEZFQyBMT0NLICEiKTsKKwkJcmV0dXJuIERWQlMyX0ZFQ19MT0NLOworCX0gZWxzZSB7CisJCXJldHVybiBEVkJTMl9GRUNfTk9MT0NLOworCX0KK30KKworCisvKgorICogc3RiMDg5OV9kdmJzMl9pbml0X2NzbQorICogc2V0IHBhcmFtZXRlcnMgZm9yIG1hbnVhbCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHN0YjA4OTlfZHZiczJfaW5pdF9jc20oc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCBpbnQgcGlsb3RzLCBlbnVtIHN0YjA4OTlfbW9kY29kIG1vZGNvZCkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCisJczMyIGR2dF90YmwgPSAxLCB0d29fcGFzcyA9IDAsIGFnY19nYWluID0gNiwgYWdjX3NoaWZ0ID0gMCwgbG9vcF9zaGlmdCA9IDAsIHBoc19kaWZmX3RociA9IDB4ODA7CisJczMyIGdhbW1hX2FjcSwgZ2FtbWFfcmhvX2FjcSwgZ2FtbWFfdHJrLCBnYW1tYV9yaG9fdHJrLCBsb2NrX2NvdW50X3RocjsKKwl1MzIgY3NtMSwgY3NtMiwgY3NtMywgY3NtNDsKKworCWlmICgoKGludGVybmFsLT5tYXN0ZXJfY2xrIC8gaW50ZXJuYWwtPnNyYXRlKSA8PSA0KSAmJiAobW9kY29kIDw9IDExKSAmJiAocGlsb3RzID09IDEpKSB7CisJCXN3aXRjaCAobW9kY29kKSB7CisJCWNhc2UgU1RCMDg5OV9RUFNLXzEyOgorCQkJZ2FtbWFfYWNxCQk9IDI1OworCQkJZ2FtbWFfcmhvX2FjcQkJPSAyNzAwOworCQkJZ2FtbWFfdHJrCQk9IDEyOworCQkJZ2FtbWFfcmhvX3RyawkJPSAxODA7CisJCQlsb2NrX2NvdW50X3RocgkJPSA4OworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9RUFNLXzM1OgorCQkJZ2FtbWFfYWNxCQk9IDM4OworCQkJZ2FtbWFfcmhvX2FjcQkJPSA3MTgyOworCQkJZ2FtbWFfdHJrCQk9IDE0OworCQkJZ2FtbWFfcmhvX3RyawkJPSAzMDg7CisJCQlsb2NrX2NvdW50X3RocgkJPSA4OworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9RUFNLXzIzOgorCQkJZ2FtbWFfYWNxCQk9IDQyOworCQkJZ2FtbWFfcmhvX2FjcQkJPSA5NDA4OworCQkJZ2FtbWFfdHJrCQk9IDE3OworCQkJZ2FtbWFfcmhvX3RyawkJPSA0NzY7CisJCQlsb2NrX2NvdW50X3RocgkJPSA4OworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9RUFNLXzM0OgorCQkJZ2FtbWFfYWNxCQk9IDUzOworCQkJZ2FtbWFfcmhvX2FjcQkJPSAxNjY0MjsKKwkJCWdhbW1hX3RyawkJPSAxOTsKKwkJCWdhbW1hX3Job190cmsJCT0gNjQ2OworCQkJbG9ja19jb3VudF90aHIJCT0gODsKKwkJCWJyZWFrOworCQljYXNlIFNUQjA4OTlfUVBTS180NToKKwkJCWdhbW1hX2FjcQkJPSA1MzsKKwkJCWdhbW1hX3Job19hY3EJCT0gMTcxMTk7CisJCQlnYW1tYV90cmsJCT0gMjI7CisJCQlnYW1tYV9yaG9fdHJrCQk9IDg4MDsKKwkJCWxvY2tfY291bnRfdGhyCQk9IDg7CisJCQlicmVhazsKKwkJY2FzZSBTVEIwODk5X1FQU0tfNTY6CisJCQlnYW1tYV9hY3EJCT0gNTU7CisJCQlnYW1tYV9yaG9fYWNxCQk9IDE5MjUwOworCQkJZ2FtbWFfdHJrCQk9IDIzOworCQkJZ2FtbWFfcmhvX3RyawkJPSA5ODk7CisJCQlsb2NrX2NvdW50X3RocgkJPSA4OworCQkJYnJlYWs7CisJCWNhc2UgU1RCMDg5OV9RUFNLXzg5OgorCQkJZ2FtbWFfYWNxCQk9IDYwOworCQkJZ2FtbWFfcmhvX2FjcQkJPSAyNDI0MDsKKwkJCWdhbW1hX3RyawkJPSAyNDsKKwkJCWdhbW1hX3Job190cmsJCT0gMTE3NjsKKwkJCWxvY2tfY291bnRfdGhyCQk9IDg7CisJCQlicmVhazsKKwkJY2FzZSBTVEIwODk5X1FQU0tfOTEwOgorCQkJZ2FtbWFfYWNxCQk9IDY2OworCQkJZ2FtbWFfcmhvX2FjcQkJPSAyOTYzNDsKKwkJCWdhbW1hX3RyawkJPSAyNDsKKwkJCWdhbW1hX3Job190cmsJCT0gMTE3NjsKKwkJCWxvY2tfY291bnRfdGhyCQk9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdhbW1hX2FjcQkJPSA2NjsKKwkJCWdhbW1hX3Job19hY3EJCT0gMjk2MzQ7CisJCQlnYW1tYV90cmsJCT0gMjQ7CisJCQlnYW1tYV9yaG9fdHJrCQk9IDExNzY7CisJCQlsb2NrX2NvdW50X3RocgkJPSA4OworCQkJYnJlYWs7CisJCX0KKworCQljc20xID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQ1NNX0NOVFJMMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKENTTV9BVVRPX1BBUkFNLCBjc20xLCAwKTsKKwkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQ1NNX0NOVFJMMSwgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDEsIGNzbTEpOworCisJCWNzbTEgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDU01fQ05UUkwxKTsKKwkJY3NtMiA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIENTTV9DTlRSTDIpOworCQljc20zID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQ1NNX0NOVFJMMyk7CisJCWNzbTQgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDU01fQ05UUkw0KTsKKworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDU01fRFZUX1RBQkxFLCBjc20xLCBkdnRfdGJsKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX1RXT19QQVNTLCBjc20xLCB0d29fcGFzcyk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKENTTV9BR0NfR0FJTiwgY3NtMSwgYWdjX2dhaW4pOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDU01fQUdDX1NISUZULCBjc20xLCBhZ2Nfc2hpZnQpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChGRV9MT09QX1NISUZULCBjc20xLCBsb29wX3NoaWZ0KTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX0dBTU1BX0FDUSwgY3NtMiwgZ2FtbWFfYWNxKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX0dBTU1BX1JIT0FDUSwgY3NtMiwgZ2FtbWFfcmhvX2FjcSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKENTTV9HQU1NQV9UUkFDSywgY3NtMywgZ2FtbWFfdHJrKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX0dBTU1BX1JIT1RSQUNLLCBjc20zLCBnYW1tYV9yaG9fdHJrKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX0xPQ0tDT1VOVF9USFJFU0gsIGNzbTQsIGxvY2tfY291bnRfdGhyKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoQ1NNX1BIQVNFRElGRl9USFJFU0gsIGNzbTQsIHBoc19kaWZmX3Rocik7CisKKwkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQ1NNX0NOVFJMMSwgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDEsIGNzbTEpOworCQlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9DU01fQ05UUkwyLCBTVEIwODk5X09GRjBfQ1NNX0NOVFJMMiwgY3NtMik7CisJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDMsIFNUQjA4OTlfT0ZGMF9DU01fQ05UUkwzLCBjc20zKTsKKwkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQ1NNX0NOVFJMNCwgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDQsIGNzbTQpOworCX0KK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfZ2V0X3NyYXRlCisgKiBnZXQgRFZCLVMyIFN5bWJvbCBSYXRlCisgKi8KK3N0YXRpYyB1MzIgc3RiMDg5OV9kdmJzMl9nZXRfc3JhdGUoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCisJdTMyIGJUck5vbUZyZXEsIHNyYXRlLCBkZWNpbVJhdGUsIGludHZhbDEsIGludHZhbDIsIHJlZzsKKwlpbnQgZGl2MSwgZGl2MiwgcmVtMSwgcmVtMjsKKworCWRpdjEgPSBjb25maWctPmJ0cl9uY29fYml0cyAvIDI7CisJZGl2MiA9IGNvbmZpZy0+YnRyX25jb19iaXRzIC0gZGl2MSAtIDE7CisKKwliVHJOb21GcmVxID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQlRSX05PTV9GUkVRKTsKKworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIERFQ0lNX0NOVFJMKTsKKwlkZWNpbVJhdGUgPSBTVEIwODk5X0dFVEZJRUxEKERFQ0lNX1JBVEUsIHJlZyk7CisJZGVjaW1SYXRlID0gKDEgPDwgZGVjaW1SYXRlKTsKKworCWludHZhbDEgPSBpbnRlcm5hbC0+bWFzdGVyX2NsayAvICgxIDw8IGRpdjEpOworCWludHZhbDIgPSBiVHJOb21GcmVxIC8gKDEgPDwgZGl2Mik7CisKKwlyZW0xID0gaW50ZXJuYWwtPm1hc3Rlcl9jbGsgJSAoMSA8PCBkaXYxKTsKKwlyZW0yID0gYlRyTm9tRnJlcSAlICgxIDw8IGRpdjIpOworCS8qIG9ubHkgZm9yIGludGVnZXIgY2FsY3VsYXRpb24JKi8KKwlzcmF0ZSA9IChpbnR2YWwxICogaW50dmFsMikgKyAoKGludHZhbDEgKiByZW0yKSAvICgxIDw8IGRpdjIpKSArICgoaW50dmFsMiAqIHJlbTEpIC8gKDEgPDwgZGl2MSkpOworCXNyYXRlIC89IGRlY2ltUmF0ZTsJLypzeW1icmF0ZSA9IChidHJub21mcmVxX3JlZ2lzdGVyX3ZhbCpNYXN0ZXJDbG9jaykvMl4oMjcrZGVjaW1fcmF0ZV9maWVsZCkgKi8KKworCXJldHVybglzcmF0ZTsKK30KKworLyoKKyAqIHN0YjA4OTlfZHZiczJfYWxnbworICogU2VhcmNoIGZvciBzaWduYWwsIHRpbWluZywgY2FycmllciBhbmQgZGF0YSBmb3IgYSBnaXZlbgorICogZnJlcXVlbmN5IGluIGEgZ2l2ZW4gcmFuZ2UKKyAqLworZW51bSBzdGIwODk5X3N0YXR1cyBzdGIwODk5X2R2YnMyX2FsZ28oc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBzdGIwODk5X21vZGNvZCBtb2Rjb2Q7CisKKwlzMzIgb2Zmc2V0ZnJlcSwgc2VhcmNoVGltZSwgRmVjTG9ja1RpbWUsIHBpbG90cywgaXFTcGVjdHJ1bTsKKwlpbnQgaSA9IDA7CisJdTMyIHJlZywgY3NtMTsKKworCWlmIChpbnRlcm5hbC0+c3JhdGUgPD0gMjAwMDAwMCkgeworCQlzZWFyY2hUaW1lCT0gNTAwMDsJLyogNTAwMCBtcyBtYXggdGltZSB0byBsb2NrIFVXUCBhbmQgQ1NNLCBTWU1CIDw9IDJNYnMJCSovCisJCUZlY0xvY2tUaW1lCT0gMzUwOwkvKiAzNTAgIG1zIG1heCB0aW1lIHRvIGxvY2sgRkVDLCBTWU1CIDw9IDJNYnMJCQkqLworCX0gZWxzZSBpZiAoaW50ZXJuYWwtPnNyYXRlIDw9IDUwMDAwMDApIHsKKwkJc2VhcmNoVGltZQk9IDI1MDA7CS8qIDI1MDAgbXMgbWF4IHRpbWUgdG8gbG9jayBVV1AgYW5kIENTTSwgMk1icyA8IFNZTUIgPD0gNU1icwkqLworCQlGZWNMb2NrVGltZQk9IDE3MDsJLyogMTcwICBtcyBtYXggdGltZSB0byBsb2NrIEZFQywgMk1iczwgU1lNQiA8PSA1TWJzCQkqLworCX0gZWxzZSBpZiAoaW50ZXJuYWwtPnNyYXRlIDw9IDEwMDAwMDAwKSB7CisJCXNlYXJjaFRpbWUJPSAxNTAwOwkvKiAxNTAwIG1zIG1heCB0aW1lIHRvIGxvY2sgVVdQIGFuZCBDU00sIDVNYnMgPFNZTUIgPD0gMTBNYnMJKi8KKwkJRmVjTG9ja1RpbWUJPSA4MDsJLyogODAgIG1zIG1heCB0aW1lIHRvIGxvY2sgRkVDLCA1TWJzPCBTWU1CIDw9IDEwTWJzCQkqLworCX0gZWxzZSBpZiAoaW50ZXJuYWwtPnNyYXRlIDw9IDE1MDAwMDAwKSB7CisJCXNlYXJjaFRpbWUJPSA1MDA7CS8qIDUwMCBtcyBtYXggdGltZSB0byBsb2NrIFVXUCBhbmQgQ1NNLCAxME1icyA8U1lNQiA8PSAxNU1icwkqLworCQlGZWNMb2NrVGltZQk9IDUwOwkvKiA1MCAgbXMgbWF4IHRpbWUgdG8gbG9jayBGRUMsIDEwTWJzPCBTWU1CIDw9IDE1TWJzCQkqLworCX0gZWxzZSBpZiAoaW50ZXJuYWwtPnNyYXRlIDw9IDIwMDAwMDAwKSB7CisJCXNlYXJjaFRpbWUJPSAzMDA7CS8qIDMwMCBtcyBtYXggdGltZSB0byBsb2NrIFVXUCBhbmQgQ1NNLCAxNU1icyA8IFNZTUIgPD0gMjBNYnMJKi8KKwkJRmVjTG9ja1RpbWUJPSAzMDsJLyogNTAgIG1zIG1heCB0aW1lIHRvIGxvY2sgRkVDLCAxNU1iczwgU1lNQiA8PSAyME1icwkJKi8KKwl9IGVsc2UgaWYgKGludGVybmFsLT5zcmF0ZSA8PSAyNTAwMDAwMCkgeworCQlzZWFyY2hUaW1lCT0gMjUwOwkvKiAyNTAgbXMgbWF4IHRpbWUgdG8gbG9jayBVV1AgYW5kIENTTSwgMjAgTWJzIDwgU1lNQiA8PSAyNU1icwkqLworCQlGZWNMb2NrVGltZQk9IDI1OwkvKiAyNSBtcyBtYXggdGltZSB0byBsb2NrIEZFQywgMjBNYnM8IFNZTUIgPD0gMjVNYnMJCSovCisJfSBlbHNlIHsKKwkJc2VhcmNoVGltZQk9IDE1MDsJLyogMTUwIG1zIG1heCB0aW1lIHRvIGxvY2sgVVdQIGFuZCBDU00sIFNZTUIgPiAyNU1icwkJKi8KKwkJRmVjTG9ja1RpbWUJPSAyMDsJLyogMjAgbXMgbWF4IHRpbWUgdG8gbG9jayBGRUMsIDIwTWJzPCBTWU1CIDw9IDI1TWJzCQkqLworCX0KKworCS8qIE1haW50YWluIFN0cmVhbSBNZXJnZXIgaW4gcmVzZXQgZHVyaW5nIGFjcXVpc2l0aW9uCSovCisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMpOworCVNUQjA4OTlfU0VURklFTERfVkFMKEZSRVNSUywgcmVnLCAxKTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMsIHJlZyk7CisKKwkvKiBlbmFibGUgdHVuZXIgSS9PICovCisJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDEpOworCisJLyogTW92ZSB0dW5lciB0byBmcmVxdWVuY3kJKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSkKKwkJc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSgmc3RhdGUtPmZyb250ZW5kLCBpbnRlcm5hbC0+ZnJlcSk7CisJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3kpCisJCXN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3koJnN0YXRlLT5mcm9udGVuZCwgJmludGVybmFsLT5mcmVxKTsKKworCS8qIGRpc2FibGUgdHVuZXIgSS9PICovCisJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDApOworCisJLyogU2V0IElGIEFHQyB0byBhY3F1aXNpdGlvbgkqLworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIElGX0FHQ19DTlRSTCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoSUZfTE9PUF9HQUlOLCByZWcsICA0KTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChJRl9BR0NfUkVGLCByZWcsIDMyKTsKKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9JRl9BR0NfQ05UUkwsIFNUQjA4OTlfT0ZGMF9JRl9BR0NfQ05UUkwsIHJlZyk7CisKKwlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBJRl9BR0NfQ05UUkwyKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChJRl9BR0NfRFVNUF9QRVIsIHJlZywgMCk7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfSUZfQUdDX0NOVFJMMiwgU1RCMDg5OV9PRkYwX0lGX0FHQ19DTlRSTDIsIHJlZyk7CisKKwkvKiBJbml0aWFsaXNhdGlvbgkqLworCXN0YjA4OTlfZHZiczJfaW5pdF9jYWxjKHN0YXRlKTsKKworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIERNRF9DTlRSTDIpOworCXN3aXRjaCAoaW50ZXJuYWwtPmludmVyc2lvbikgeworCWNhc2UgSVFfU1dBUF9PRkY6CisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNQRUNUUlVNX0lOVkVSVCwgcmVnLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBJUV9TV0FQX09OOgorCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTUEVDVFJVTV9JTlZFUlQsIHJlZywgMSk7CisJCWJyZWFrOworCWNhc2UgSVFfU1dBUF9BVVRPOgkvKiB1c2UgbGFzdCBzdWNjZXNzZnVsIHNlYXJjaCBmaXJzdAkqLworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTUEVDVFJVTV9JTlZFUlQsIHJlZywgMSk7CisJCWJyZWFrOworCX0KKwlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9ETURfQ05UUkwyLCBTVEIwODk5X09GRjBfRE1EX0NOVFJMMiwgcmVnKTsKKwlzdGIwODk5X2R2YnMyX3JlYWNxdWlyZShzdGF0ZSk7CisKKwkvKiBXYWl0IGZvciBkZW1vZCBsb2NrIChVV1AgYW5kIENTTSkJKi8KKwlpbnRlcm5hbC0+c3RhdHVzID0gc3RiMDg5OV9kdmJzMl9nZXRfZG1kX3N0YXR1cyhzdGF0ZSwgc2VhcmNoVGltZSk7CisKKwlpZiAoaW50ZXJuYWwtPnN0YXR1cyA9PSBEVkJTMl9ERU1PRF9MT0NLKSB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tPiBEVkItUzIgREVNT0QgTE9DSyAhIik7CisJCWkgPSAwOworCQkvKiBEZW1vZCBMb2NrZWQsIGNoZWNrIEZFQyBzdGF0dXMJKi8KKwkJaW50ZXJuYWwtPnN0YXR1cyA9IHN0YjA4OTlfZHZiczJfZ2V0X2ZlY19zdGF0dXMoc3RhdGUsIEZlY0xvY2tUaW1lKTsKKworCQkvKklmIGZhbHNlIGxvY2sgKFVXUCBhbmQgQ1NNIExvY2tlZCBidXQgbm8gRkVDKSB0cnkgMyB0aW1lIG1heCovCisJCXdoaWxlICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBEVkJTMl9GRUNfTE9DSykgJiYgKGkgPCAzKSkgeworCQkJLyoJUmVhZCB0aGUgZnJlcXVlbmN5IG9mZnNldCovCisJCQlvZmZzZXRmcmVxID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQ1JMX0ZSRVEpOworCisJCQkvKiBTZXQgdGhlIE5vbWluYWwgZnJlcXVlbmN5IHRvIHRoZSBmb3VuZCBmcmVxdWVuY3kgb2Zmc2V0IGZvciB0aGUgbmV4dCByZWFjcXVpcmUqLworCQkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQ1JMX05PTV9GUkVRKTsKKwkJCVNUQjA4OTlfU0VURklFTERfVkFMKENSTF9OT01fRlJFUSwgcmVnLCBvZmZzZXRmcmVxKTsKKwkJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NSTF9OT01fRlJFUSwgU1RCMDg5OV9PRkYwX0NSTF9OT01fRlJFUSwgcmVnKTsKKwkJCXN0YjA4OTlfZHZiczJfcmVhY3F1aXJlKHN0YXRlKTsKKwkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0YXRlLCBzZWFyY2hUaW1lKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmIChpbnRlcm5hbC0+c3RhdHVzICE9IERWQlMyX0ZFQ19MT0NLKSB7CisJCWlmIChpbnRlcm5hbC0+aW52ZXJzaW9uID09IElRX1NXQVBfQVVUTykgeworCQkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgRE1EX0NOVFJMMik7CisJCQlpcVNwZWN0cnVtID0gU1RCMDg5OV9HRVRGSUVMRChTUEVDVFJVTV9JTlZFUlQsIHJlZyk7CisJCQkvKiBJUSBTcGVjdHJ1bSBJbnZlcnNpb24JKi8KKwkJCVNUQjA4OTlfU0VURklFTERfVkFMKFNQRUNUUlVNX0lOVkVSVCwgcmVnLCAhaXFTcGVjdHJ1bSk7CisJCQlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9ETURfQ05UUkwyLCBTVEIwODk5X09GRjBfRE1EX0NOVFJMMiwgcmVnKTsKKwkJCS8qIHN0YXJ0IGFjcXVpc3Rpb24gcHJvY2VzcwkqLworCQkJc3RiMDg5OV9kdmJzMl9yZWFjcXVpcmUoc3RhdGUpOworCisJCQkvKiBXYWl0IGZvciBkZW1vZCBsb2NrIChVV1AgYW5kIENTTSkJKi8KKwkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9kbWRfc3RhdHVzKHN0YXRlLCBzZWFyY2hUaW1lKTsKKwkJCWlmIChpbnRlcm5hbC0+c3RhdHVzID09IERWQlMyX0RFTU9EX0xPQ0spIHsKKwkJCQlpID0gMDsKKwkJCQkvKiBEZW1vZCBMb2NrZWQsIGNoZWNrIEZFQwkqLworCQkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0YXRlLCBGZWNMb2NrVGltZSk7CisJCQkJLyp0cnkgdGhyaWNlIGZvciBmYWxzZSBsb2NrcywgKFVXUCBhbmQgQ1NNIExvY2tlZCBidXQgbm8gRkVDKQkqLworCQkJCXdoaWxlICgoaW50ZXJuYWwtPnN0YXR1cyAhPSBEVkJTMl9GRUNfTE9DSykgJiYgKGkgPCAzKSkgeworCQkJCQkvKglSZWFkIHRoZSBmcmVxdWVuY3kgb2Zmc2V0Ki8KKwkJCQkJb2Zmc2V0ZnJlcSA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIENSTF9GUkVRKTsKKworCQkJCQkvKiBTZXQgdGhlIE5vbWluYWwgZnJlcXVlbmN5IHRvIHRoZSBmb3VuZCBmcmVxdWVuY3kgb2Zmc2V0IGZvciB0aGUgbmV4dCByZWFjcXVpcmUqLworCQkJCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDUkxfTk9NX0ZSRVEpOworCQkJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDUkxfTk9NX0ZSRVEsIHJlZywgb2Zmc2V0ZnJlcSk7CisJCQkJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NSTF9OT01fRlJFUSwgU1RCMDg5OV9PRkYwX0NSTF9OT01fRlJFUSwgcmVnKTsKKworCQkJCQlzdGIwODk5X2R2YnMyX3JlYWNxdWlyZShzdGF0ZSk7CisJCQkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0YXRlLCBzZWFyY2hUaW1lKTsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKy8qCisJCQlpZiAocFBhcmFtcy0+RFZCUzJTdGF0ZSA9PSBGRV9EVkJTMl9GRUNfTE9DS0VEKQorCQkJCXBQYXJhbXMtPklRTG9ja2VkID0gIWlxU3BlY3RydW07CisqLworCQl9CisJfQorCWlmIChpbnRlcm5hbC0+c3RhdHVzID09IERWQlMyX0ZFQ19MT0NLKSB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiLS0tLS0tLS0tLS0tLS0tLT4gRFZCLVMyIEZFQyBMb2NrICEiKTsKKwkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgVVdQX1NUQVQyKTsKKwkJbW9kY29kID0gU1RCMDg5OV9HRVRGSUVMRChVV1BfREVDT0RFX01PRCwgcmVnKSA+PiAyOworCQlwaWxvdHMgPSBTVEIwODk5X0dFVEZJRUxEKFVXUF9ERUNPREVfTU9ELCByZWcpICYgMHgwMTsKKworCQlpZiAoKCgoMTAgKiBpbnRlcm5hbC0+bWFzdGVyX2NsaykgLyAoaW50ZXJuYWwtPnNyYXRlIC8gMTApKSA8PSA0MTApICYmCisJCSAgICAgIChJTlJBTkdFKFNUQjA4OTlfUVBTS18yMywgbW9kY29kLCBTVEIwODk5X1FQU0tfOTEwKSkgJiYKKwkJICAgICAgKHBpbG90cyA9PSAxKSkgeworCisJCQlzdGIwODk5X2R2YnMyX2luaXRfY3NtKHN0YXRlLCBwaWxvdHMsIG1vZGNvZCk7CisJCQkvKiBXYWl0IGZvciBVV1AsQ1NNIGFuZCBkYXRhIExPQ0sgMjBtcyBtYXgJKi8KKwkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0YXRlLCBGZWNMb2NrVGltZSk7CisKKwkJCWkgPSAwOworCQkJd2hpbGUgKChpbnRlcm5hbC0+c3RhdHVzICE9IERWQlMyX0ZFQ19MT0NLKSAmJiAoaSA8IDMpKSB7CisJCQkJY3NtMSA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIENTTV9DTlRSTDEpOworCQkJCVNUQjA4OTlfU0VURklFTERfVkFMKENTTV9UV09fUEFTUywgY3NtMSwgMSk7CisJCQkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfQ1NNX0NOVFJMMSwgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDEsIGNzbTEpOworCQkJCWNzbTEgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDU01fQ05UUkwxKTsKKwkJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChDU01fVFdPX1BBU1MsIGNzbTEsIDApOworCQkJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDEsIFNUQjA4OTlfT0ZGMF9DU01fQ05UUkwxLCBjc20xKTsKKworCQkJCWludGVybmFsLT5zdGF0dXMgPSBzdGIwODk5X2R2YnMyX2dldF9mZWNfc3RhdHVzKHN0YXRlLCBGZWNMb2NrVGltZSk7CisJCQkJaSsrOworCQkJfQorCQl9CisKKwkJaWYgKCgoKDEwICogaW50ZXJuYWwtPm1hc3Rlcl9jbGspIC8gKGludGVybmFsLT5zcmF0ZSAvIDEwKSkgPD0gNDEwKSAmJgorCQkgICAgICAoSU5SQU5HRShTVEIwODk5X1FQU0tfMTIsIG1vZGNvZCwgU1RCMDg5OV9RUFNLXzM1KSkgJiYKKwkJICAgICAgKHBpbG90cyA9PSAxKSkgeworCisJCQkvKiBFcXVhbGl6ZXIgRGlzYWJsZSB1cGRhdGUJICovCisJCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBFUV9DTlRSTCk7CisJCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChFUV9ESVNBQkxFX1VQREFURSwgcmVnLCAxKTsKKwkJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0VRX0NOVFJMLCBTVEIwODk5X09GRjBfRVFfQ05UUkwsIHJlZyk7CisJCX0KKworCQkvKiBzbG93IGRvd24gdGhlIEVxdWFsaXplciBvbmNlIGxvY2tlZAkqLworCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBFUV9DTlRSTCk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEVRX1NISUZULCByZWcsIDB4MDIpOworCQlzdGIwODk5X3dyaXRlX3MycmVnKHN0YXRlLCBTVEIwODk5X1MyREVNT0QsIFNUQjA4OTlfQkFTRV9FUV9DTlRSTCwgU1RCMDg5OV9PRkYwX0VRX0NOVFJMLCByZWcpOworCisJCS8qIFN0b3JlIHNpZ25hbCBwYXJhbWV0ZXJzCSovCisJCW9mZnNldGZyZXEgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBDUkxfRlJFUSk7CisKKwkJb2Zmc2V0ZnJlcSA9IG9mZnNldGZyZXEgLyAoKDEgPDwgMzApIC8gMTAwMCk7CisJCW9mZnNldGZyZXEgKj0gKGludGVybmFsLT5tYXN0ZXJfY2xrIC8gMTAwMDAwMCk7CisJCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIERNRF9DTlRSTDIpOworCQlpZiAoU1RCMDg5OV9HRVRGSUVMRChTUEVDVFJVTV9JTlZFUlQsIHJlZykpCisJCQlvZmZzZXRmcmVxICo9IC0xOworCisJCWludGVybmFsLT5mcmVxID0gaW50ZXJuYWwtPmZyZXEgLSBvZmZzZXRmcmVxOworCQlpbnRlcm5hbC0+c3JhdGUgPSBzdGIwODk5X2R2YnMyX2dldF9zcmF0ZShzdGF0ZSk7CisKKwkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgVVdQX1NUQVQyKTsKKwkJaW50ZXJuYWwtPm1vZGNvZCA9IFNUQjA4OTlfR0VURklFTEQoVVdQX0RFQ09ERV9NT0QsIHJlZykgPj4gMjsKKwkJaW50ZXJuYWwtPnBpbG90cyA9IFNUQjA4OTlfR0VURklFTEQoVVdQX0RFQ09ERV9NT0QsIHJlZykgJiAweDAxOworCQlpbnRlcm5hbC0+ZnJhbWVfbGVuZ3RoID0gKFNUQjA4OTlfR0VURklFTEQoVVdQX0RFQ09ERV9NT0QsIHJlZykgPj4gMSkgJiAweDAxOworCisJCSAvKiBTZXQgSUYgQUdDIHRvIHRyYWNraW5nCSovCisJCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIElGX0FHQ19DTlRSTCk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKElGX0xPT1BfR0FJTiwgcmVnLCAgMyk7CisKKwkJLyogaWYgUVBTSyAxLzIsUVBTSyAzLzUgb3IgUVBTSyAyLzMgc2V0IElGIEFHQyByZWZlcmVuY2UgdG8gMTYgb3RoZXJ3aXNlIDMyKi8KKwkJaWYgKElOUkFOR0UoU1RCMDg5OV9RUFNLXzEyLCBpbnRlcm5hbC0+bW9kY29kLCBTVEIwODk5X1FQU0tfMjMpKQorCQkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoSUZfQUdDX1JFRiwgcmVnLCAxNik7CisKKwkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfSUZfQUdDX0NOVFJMLCBTVEIwODk5X09GRjBfSUZfQUdDX0NOVFJMLCByZWcpOworCisJCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIElGX0FHQ19DTlRSTDIpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChJRl9BR0NfRFVNUF9QRVIsIHJlZywgNyk7CisJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwgU1RCMDg5OV9CQVNFX0lGX0FHQ19DTlRSTDIsIFNUQjA4OTlfT0ZGMF9JRl9BR0NfQ05UUkwyLCByZWcpOworCX0KKworCS8qIFJlbGVhc2UgU3RyZWFtIE1lcmdlciBSZXNldAkJKi8KKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUyk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRlJFU1JTLCByZWcsIDApOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUywgcmVnKTsKKworCXJldHVybiBpbnRlcm5hbC0+c3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfY2ZnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY3OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfY2ZnLmgKQEAgLTAsMCArMSwyODcgQEAKKy8qCisJU1RCMDg5OSBNdWx0aXN0YW5kYXJkIEZyb250ZW5kIGRyaXZlcgorCUNvcHlyaWdodCAoQykgTWFudSBBYnJhaGFtIChhYnJhaGFtLm1hbnVAZ21haWwuY29tKQorCisJQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX19TVEIwODk5X0NGR19ICisjZGVmaW5lIF9fU1RCMDg5OV9DRkdfSAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczJfcmVnICBzdGIwODk5X3MyX2luaXRfMltdID0geworCisJeyBTVEIwODk5X09GRjBfRE1EX1NUQVRVUwksIFNUQjA4OTlfQkFTRV9ETURfU1RBVFVTCSwgMHgwMDAwMDEwMyB9LAkvKiBETURTVEFUVVMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9DUkxfRlJFUQkJLCBTVEIwODk5X0JBU0VfQ1JMX0ZSRVEJCSwgMHgzZWQxZGE1NiB9LAkvKiBDUkxGUkVRCSovCisJeyBTVEIwODk5X09GRjBfQlRSX0ZSRVEJCSwgU1RCMDg5OV9CQVNFX0JUUl9GUkVRCQksIDB4MDAwMDQwMDAgfSwJLyogQlRSRlJFUQkqLworCXsgU1RCMDg5OV9PRkYwX0lGX0FHQ19HQUlOCSwgU1RCMDg5OV9CQVNFX0lGX0FHQ19HQUlOCSwgMHgwMDAwMmFkZSB9LAkvKiBJRkFHQ0dBSU4JKi8KKwl7IFNUQjA4OTlfT0ZGMF9CQl9BR0NfR0FJTgksIFNUQjA4OTlfQkFTRV9CQl9BR0NfR0FJTgksIDB4MDAwMDAxYmMgfSwJLyogQkJBR0NHQUlOCSovCisJeyBTVEIwODk5X09GRjBfRENfT0ZGU0VUCSwgU1RCMDg5OV9CQVNFX0RDX09GRlNFVAksIDB4MDAwMDAyMDAgfSwJLyogRENPRkZTRVQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9ETURfQ05UUkwJLCBTVEIwODk5X0JBU0VfRE1EX0NOVFJMCSwgMHgwMDAwMDAwZiB9LAkvKiBETURDTlRSTAkqLworCisJeyBTVEIwODk5X09GRjBfSUZfQUdDX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0lGX0FHQ19DTlRSTAksIDB4MDNmYjRhMjAgfSwJLyogSUZBR0NDTlRSTAkqLworCXsgU1RCMDg5OV9PRkYwX0JCX0FHQ19DTlRSTAksIFNUQjA4OTlfQkFTRV9CQl9BR0NfQ05UUkwJLCAweDAwMjAwYzk3IH0sCS8qIEJCQUdDQ05UUkwJKi8KKworCXsgU1RCMDg5OV9PRkYwX0NSTF9DTlRSTAksIFNUQjA4OTlfQkFTRV9DUkxfQ05UUkwJLCAweDAwMDAwMDE2IH0sCS8qIENSTENOVFJMCSovCisJeyBTVEIwODk5X09GRjBfQ1JMX1BIU19JTklUCSwgU1RCMDg5OV9CQVNFX0NSTF9QSFNfSU5JVAksIDB4MDAwMDAwMDAgfSwJLyogQ1JMUEhTSU5JVAkqLworCXsgU1RCMDg5OV9PRkYwX0NSTF9GUkVRX0lOSVQJLCBTVEIwODk5X0JBU0VfQ1JMX0ZSRVFfSU5JVAksIDB4MDAwMDAwMDAgfSwJLyogQ1JMRlJFUUlOSVQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9DUkxfTE9PUF9HQUlOCSwgU1RCMDg5OV9CQVNFX0NSTF9MT09QX0dBSU4JLCAweDAwMDAwMDAwIH0sCS8qIENSTExPT1BHQUlOCSovCisJeyBTVEIwODk5X09GRjBfQ1JMX05PTV9GUkVRCSwgU1RCMDg5OV9CQVNFX0NSTF9OT01fRlJFUQksIDB4M2VkMDk3YjYgfSwJLyogQ1JMTk9NRlJFUQkqLworCXsgU1RCMDg5OV9PRkYwX0NSTF9TV1BfUkFURQksIFNUQjA4OTlfQkFTRV9DUkxfU1dQX1JBVEUJLCAweDAwMDAwMDAwIH0sCS8qIENSTFNXUFJBVEUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9DUkxfTUFYX1NXUAksIFNUQjA4OTlfQkFTRV9DUkxfTUFYX1NXUAksIDB4MDAwMDAwMDAgfSwJLyogQ1JMTUFYU1dQCSovCisJeyBTVEIwODk5X09GRjBfQ1JMX0xLX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0NSTF9MS19DTlRSTAksIDB4MGY2Y2RjMDEgfSwJLyogQ1JMTEtDTlRSTAkqLworCXsgU1RCMDg5OV9PRkYwX0RFQ0lNX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0RFQ0lNX0NOVFJMCSwgMHgwMDAwMDAwMCB9LAkvKiBERUNJTUNOVFJMCSovCisJeyBTVEIwODk5X09GRjBfQlRSX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0JUUl9DTlRSTAksIDB4MDAwMDM5OTMgfSwJLyogQlRSQ05UUkwJKi8KKwl7IFNUQjA4OTlfT0ZGMF9CVFJfTE9PUF9HQUlOCSwgU1RCMDg5OV9CQVNFX0JUUl9MT09QX0dBSU4JLCAweDAwMGQzYzZmIH0sCS8qIEJUUkxPT1BHQUlOCSovCisJeyBTVEIwODk5X09GRjBfQlRSX1BIU19JTklUCSwgU1RCMDg5OV9CQVNFX0JUUl9QSFNfSU5JVAksIDB4MDAwMDAwMDAgfSwJLyogQlRSUEhTSU5JVAkqLworCXsgU1RCMDg5OV9PRkYwX0JUUl9GUkVRX0lOSVQJLCBTVEIwODk5X0JBU0VfQlRSX0ZSRVFfSU5JVAksIDB4MDAwMDAwMDAgfSwJLyogQlRSRlJFUUlOSVQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9CVFJfTk9NX0ZSRVEJLCBTVEIwODk5X0JBU0VfQlRSX05PTV9GUkVRCSwgMHgwMjM4ZTM4ZSB9LAkvKiBCVFJOT01GUkVRCSovCisJeyBTVEIwODk5X09GRjBfQlRSX0xLX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0JUUl9MS19DTlRSTAksIDB4MDAwMDAwMDAgfSwJLyogQlRSTEtDTlRSTAkqLworCXsgU1RCMDg5OV9PRkYwX0RFQ05fQ05UUkwJLCBTVEIwODk5X0JBU0VfREVDTl9DTlRSTAksIDB4MDAwMDAwMDAgfSwJLyogREVDTkNOVFJMCSovCisJeyBTVEIwODk5X09GRjBfVFBfQ05UUkwJCSwgU1RCMDg5OV9CQVNFX1RQX0NOVFJMCQksIDB4MDAwMDAwMDAgfSwJLyogVFBDTlRSTAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRl9TVEFUVVMJLCBTVEIwODk5X0JBU0VfVFBfQlVGX1NUQVRVUwksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZTVEFUVVMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9EQ19FU1RJTQkJLCBTVEIwODk5X0JBU0VfRENfRVNUSU0JCSwgMHgwMDAwMDAwMCB9LAkvKiBEQ0VTVElNCSovCisJeyBTVEIwODk5X09GRjBfRkxMX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0ZMTF9DTlRSTAksIDB4MDAwMDAwMDAgfSwJLyogRkxMQ05UUkwJKi8KKwl7IFNUQjA4OTlfT0ZGMF9GTExfRlJFUV9XRAksIFNUQjA4OTlfQkFTRV9GTExfRlJFUV9XRAksIDB4NDAwNzAwMDAgfSwJLyogRkxMRlJFUVdECSovCisJeyBTVEIwODk5X09GRjBfQU5USV9BTElBU19TRUwJLCBTVEIwODk5X0JBU0VfQU5USV9BTElBU19TRUwJLCAweDAwMDAwMDAxIH0sCS8qIEFOVElBTElBU1NFTCAqLworCXsgU1RCMDg5OV9PRkYwX1JSQ19BTFBIQQksIFNUQjA4OTlfQkFTRV9SUkNfQUxQSEEJLCAweDAwMDAwMDAyIH0sCS8qIFJSQ0FMUEhBCSovCisJeyBTVEIwODk5X09GRjBfRENfQURBUFRfTFNIRlQJLCBTVEIwODk5X0JBU0VfRENfQURBUFRfTFNIRlQJLCAweDAwMDAwMDAwIH0sCS8qIERDQURBUFRJU0hGVCAqLworCXsgU1RCMDg5OV9PRkYwX0lNQl9PRkZTRVQJLCBTVEIwODk5X0JBU0VfSU1CX09GRlNFVAksIDB4MDAwMGZlMDEgfSwJLyogSU1CT0ZGU0VUCSovCisJeyBTVEIwODk5X09GRjBfSU1CX0VTVElNQVRFCSwgU1RCMDg5OV9CQVNFX0lNQl9FU1RJTUFURQksIDB4MDAwMDAwMDAgfSwJLyogSU1CRVNUSU1BVEUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9JTUJfQ05UUkwJLCBTVEIwODk5X0JBU0VfSU1CX0NOVFJMCSwgMHgwMDAwMDAwMSB9LAkvKiBJTUJDTlRSTAkqLworCXsgU1RCMDg5OV9PRkYwX0lGX0FHQ19DTlRSTDIJLCBTVEIwODk5X0JBU0VfSUZfQUdDX0NOVFJMMgksIDB4MDAwMDUwMDcgfSwJLyogSUZBR0NDTlRSTDIJKi8KKwl7IFNUQjA4OTlfT0ZGMF9ETURfQ05UUkwyCSwgU1RCMDg5OV9CQVNFX0RNRF9DTlRSTDIJLCAweDAwMDAwMDAyIH0sCS8qIERNRENOVFJMMgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUgksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxCSwgMHgwMDAwMDAwMCB9LAkvKiBUUEJVRkZFUjEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjIJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSMgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMwksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZGRVIzCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0CSwgMHgwMDAwMDAwMCB9LAkvKiBUUEJVRkZFUjQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjUJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSNQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNgksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZGRVI2CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNwksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI3CSwgMHgwMDAwMDAwMCB9LAkvKiBUUEJVRkZFUjcJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI4CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjgJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSOAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjkJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSOQksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZGRVI5CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTAJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTAJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSMTAJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxMQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxMQksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZGRVIxMQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjEyCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjEyCSwgMHgwMDAwMDAwMCB9LAkvKiBUUEJVRkZFUjEyCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTMJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTMJLCAweDAwMDAwMDAwIH0sCS8qIFRQQlVGRkVSMTMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxNAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxNAksIDB4MDAwMDAwMDAgfSwJLyogVFBCVUZGRVIxNAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjE1CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjE1CSwgMHgwMDAwMDAwMCB9LAkvKiBUUEJVRkZFUjE1CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTYJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTYJLCAweDAwMDBmZjAwIH0sCS8qIFRQQlVGRkVSMTYJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxNwksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxNwksIDB4MDAwMDAxMDAgfSwJLyogVFBCVUZGRVIxNwkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjE4CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjE4CSwgMHgwMDAwZmUwMSB9LAkvKiBUUEJVRkZFUjE4CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTkJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTkJLCAweDAwMDAwNGZlIH0sCS8qIFRQQlVGRkVSMTkJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyMAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyMAksIDB4MDAwMGNmZTcgfSwJLyogVFBCVUZGRVIyMAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjIxCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjIxCSwgMHgwMDAwYmVjNiB9LAkvKiBUUEJVRkZFUjIxCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjIJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjIJLCAweDAwMDBjMmJmIH0sCS8qIFRQQlVGRkVSMjIJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyMwksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyMwksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVIyMwkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjI0CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjI0CSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjI0CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjUJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjUJLCAweDAwMDBjMWMxIH0sCS8qIFRQQlVGRkVSMjUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyNgksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyNgksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVIyNgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjI3CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjI3CSwgMHgwMDAwYzFjMCB9LAkvKiBUUEJVRkZFUjI3CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjgJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjgJLCAweDAwMDBjMGMwIH0sCS8qIFRQQlVGRkVSMjgJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyOQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyOQksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVIyOQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMwCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjMwCSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjMwCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzEJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzEJLCAweDAwMDBjMGMxIH0sCS8qIFRQQlVGRkVSMzEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzMgksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzMgksIDB4MDAwMGMwYzEgfSwJLyogVFBCVUZGRVIzMgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMzCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjMzCSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjMzCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzQJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzQJLCAweDAwMDBjMWMxIH0sCS8qIFRQQlVGRkVSMzQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzNQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzNQksIDB4MDAwMGMwYzEgfSwJLyogVFBCVUZGRVIzNQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjM2CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjM2CSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjM2CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzcJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzcJLCAweDAwMDBjMGMxIH0sCS8qIFRQQlVGRkVSMzcJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzOAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzOAksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVIzOAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjM5CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjM5CSwgMHgwMDAwYzBjMCB9LAkvKiBUUEJVRkZFUjM5CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDAJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDAJLCAweDAwMDBjMWMwIH0sCS8qIFRQQlVGRkVSNDAJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0MQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0MQksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVI0MQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQyCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQyCSwgMHgwMDAwYzBjMCB9LAkvKiBUUEJVRkZFUjQyCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDMJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDMJLCAweDAwMDBjMWMwIH0sCS8qIFRQQlVGRkVSNDMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0NAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0NAksIDB4MDAwMGMwYzEgfSwJLyogVFBCVUZGRVI0NAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQ1CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQ1CSwgMHgwMDAwYzFiZSB9LAkvKiBUUEJVRkZFUjQ1CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDYJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDYJLCAweDAwMDBjMWM5IH0sCS8qIFRQQlVGRkVSNDYJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0NwksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0NwksIDB4MDAwMGMwZGEgfSwJLyogVFBCVUZGRVI0NwkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQ4CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQ4CSwgMHgwMDAwYzBiYSB9LAkvKiBUUEJVRkZFUjQ4CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDkJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDkJLCAweDAwMDBjMWM0IH0sCS8qIFRQQlVGRkVSNDkJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1MAksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1MAksIDB4MDAwMGMxYmYgfSwJLyogVFBCVUZGRVI1MAkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjUxCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjUxCSwgMHgwMDAwYzBjMSB9LAkvKiBUUEJVRkZFUjUxCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTIJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTIJLCAweDAwMDBjMWMwIH0sCS8qIFRQQlVGRkVSNTIJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1MwksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1MwksIDB4MDAwMGMwYzEgfSwJLyogVFBCVUZGRVI1MwkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjU0CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjU0CSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjU0CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTUJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTUJLCAweDAwMDBjMWMxIH0sCS8qIFRQQlVGRkVSNTUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1NgksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1NgksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVI1NgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjU3CSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjU3CSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjU3CSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTgJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTgJLCAweDAwMDBjMWMxIH0sCS8qIFRQQlVGRkVSNTgJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1OQksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1OQksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVI1OQkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYwCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjYwCSwgMHgwMDAwYzFjMSB9LAkvKiBUUEJVRkZFUjYwCSovCisJeyBTVEIwODk5X09GRjBfVFBfQlVGRkVSNjEJLCBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNjEJLCAweDAwMDBjMWMxIH0sCS8qIFRQQlVGRkVSNjEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI2MgksIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI2MgksIDB4MDAwMGMxYzEgfSwJLyogVFBCVUZGRVI2MgkqLworCXsgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYzCSwgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjYzCSwgMHgwMDAwYzFjMCB9LAkvKiBUUEJVRkZFUjYzCSovCisJeyBTVEIwODk5X09GRjBfUkVTRVRfQ05UUkwJLCBTVEIwODk5X0JBU0VfUkVTRVRfQ05UUkwJLCAweDAwMDAwMDAxIH0sCS8qIFJFU0VUQ05UUkwJKi8KKwl7IFNUQjA4OTlfT0ZGMF9BQ01fRU5BQkxFCSwgU1RCMDg5OV9CQVNFX0FDTV9FTkFCTEUJLCAweDAwMDA1NjU0IH0sCS8qIEFDTUVOQUJMRQkqLworCXsgU1RCMDg5OV9PRkYwX0RFU0NSX0NOVFJMCSwgU1RCMDg5OV9CQVNFX0RFU0NSX0NOVFJMCSwgMHgwMDAwMDAwMCB9LAkvKiBERVNDUkNOVFJMCSovCisJeyBTVEIwODk5X09GRjBfQ1NNX0NOVFJMMQksIFNUQjA4OTlfQkFTRV9DU01fQ05UUkwxCSwgMHgwMDAyMDAxOSB9LAkvKiBDU01DTlRSTDEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9DU01fQ05UUkwyCSwgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDIJLCAweDAwNGIzMjM3IH0sCS8qIENTTUNOVFJMMgkqLworCXsgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDMJLCBTVEIwODk5X0JBU0VfQ1NNX0NOVFJMMwksIDB4MDAwM2RkMTcgfSwJLyogQ1NNQ05UUkwzCSovCisJeyBTVEIwODk5X09GRjBfQ1NNX0NOVFJMNAksIFNUQjA4OTlfQkFTRV9DU01fQ05UUkw0CSwgMHgwMDAwODAwOCB9LAkvKiBDU01DTlRSTDQJKi8KKwl7IFNUQjA4OTlfT0ZGMF9VV1BfQ05UUkwxCSwgU1RCMDg5OV9CQVNFX1VXUF9DTlRSTDEJLCAweDAwMmEzMTA2IH0sCS8qIFVXUENOVFJMMQkqLworCXsgU1RCMDg5OV9PRkYwX1VXUF9DTlRSTDIJLCBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMgksIDB4MDAwNjE0MGEgfSwJLyogVVdQQ05UUkwyCSovCisJeyBTVEIwODk5X09GRjBfVVdQX1NUQVQxCSwgU1RCMDg5OV9CQVNFX1VXUF9TVEFUMQksIDB4MDAwMDgwMDAgfSwJLyogVVdQU1RBVDEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9VV1BfU1RBVDIJLCBTVEIwODk5X0JBU0VfVVdQX1NUQVQyCSwgMHgwMDAwMDAwMCB9LAkvKiBVV1BTVEFUMgkqLworCXsgU1RCMDg5OV9PRkYwX0RNRF9TVEFUMgksIFNUQjA4OTlfQkFTRV9ETURfU1RBVDIJLCAweDAwMDAwMDAwIH0sCS8qIERNRFNUQVQyCSovCisJeyBTVEIwODk5X09GRjBfRlJFUV9BREpfU0NBTEUJLCBTVEIwODk5X0JBU0VfRlJFUV9BREpfU0NBTEUJLCAweDAwMDAwNDcxIH0sCS8qIEZSRVFBREpTQ0FMRSAqLworCXsgU1RCMDg5OV9PRkYwX1VXUF9DTlRSTDMJLCBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMwksIDB4MDE3YjA0NjUgfSwJLyogVVdQQ05UUkwzCSovCisJeyBTVEIwODk5X09GRjBfU1lNX0NMS19TRUwJLCBTVEIwODk5X0JBU0VfU1lNX0NMS19TRUwJLCAweDAwMDAwMDAyIH0sCS8qIFNZTUNMS1NFTAkqLworCXsgU1RCMDg5OV9PRkYwX1NPRl9TUkNIX1RPCSwgU1RCMDg5OV9CQVNFX1NPRl9TUkNIX1RPCSwgMHgwMDE5NjQ2NCB9LAkvKiBTT0ZTUkNIVE8JKi8KKwl7IFNUQjA4OTlfT0ZGMF9BQ1FfQ05UUkwxCSwgU1RCMDg5OV9CQVNFX0FDUV9DTlRSTDEJLCAweDAwMDAwNjAzIH0sCS8qIEFDUUNOVFJMMQkqLworCXsgU1RCMDg5OV9PRkYwX0FDUV9DTlRSTDIJLCBTVEIwODk5X0JBU0VfQUNRX0NOVFJMMgksIDB4MDIwNDY2NjYgfSwJLyogQUNRQ05UUkwyCSovCisJeyBTVEIwODk5X09GRjBfQUNRX0NOVFJMMwksIFNUQjA4OTlfQkFTRV9BQ1FfQ05UUkwzCSwgMHgxMDA0NjU4MyB9LAkvKiBBQ1FDTlRSTDMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9GRV9TRVRUTEUJLCBTVEIwODk5X0JBU0VfRkVfU0VUVExFCSwgMHgwMDAxMDQwNCB9LAkvKiBGRVNFVFRMRQkqLworCXsgU1RCMDg5OV9PRkYwX0FDX0RXRUxMCQksIFNUQjA4OTlfQkFTRV9BQ19EV0VMTAkJLCAweDAwMDJhYThhIH0sCS8qIEFDRFdFTEwJKi8KKwl7IFNUQjA4OTlfT0ZGMF9BQ1FVSVJFX1RSSUcJLCBTVEIwODk5X0JBU0VfQUNRVUlSRV9UUklHCSwgMHgwMDAwMDAwMCB9LAkvKiBBQ1FVSVJFVFJJRwkqLworCXsgU1RCMDg5OV9PRkYwX0xPQ0tfTE9TVAksIFNUQjA4OTlfQkFTRV9MT0NLX0xPU1QJLCAweDAwMDAwMDAxIH0sCS8qIExPQ0tMT1NUCSovCisJeyBTVEIwODk5X09GRjBfQUNRX1NUQVQxCSwgU1RCMDg5OV9CQVNFX0FDUV9TVEFUMQksIDB4MDAwMDA1MDAgfSwJLyogQUNRU1RBVDEJKi8KKwl7IFNUQjA4OTlfT0ZGMF9BQ1FfVElNRU9VVAksIFNUQjA4OTlfQkFTRV9BQ1FfVElNRU9VVAksIDB4MDAyOGEwYTAgfSwJLyogQUNRVElNRU9VVAkqLworCXsgU1RCMDg5OV9PRkYwX0FDUV9USU1FCQksIFNUQjA4OTlfQkFTRV9BQ1FfVElNRQkJLCAweDAwMDAwMDAwIH0sCS8qIEFDUVRJTUUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9GSU5BTF9BR0NfQ05UUkwJLCBTVEIwODk5X0JBU0VfRklOQUxfQUdDX0NOVFJMCSwgMHgwMDgwMGMxNyB9LAkvKiBGSU5BTEFHQ0NOVFJMKi8KKwl7IFNUQjA4OTlfT0ZGMF9GSU5BTF9BR0NfR0FJTgksIFNUQjA4OTlfQkFTRV9GSU5BTF9BR0NfR0FJTgksIDB4MDAwMDAwMDAgfSwJLyogRklOQUxBR0NDR0FJTiovCisJeyBTVEIwODk5X09GRjBfRVFVQUxJWkVSX0lOSVQJLCBTVEIwODk5X0JBU0VfRVFVQUxJWkVSX0lOSVQJLCAweDAwMDAwMDAwIH0sCS8qIEVRVUlMSVpFUklOSVQqLworCXsgU1RCMDg5OV9PRkYwX0VRX0NOVFJMCQksIFNUQjA4OTlfQkFTRV9FUV9DTlRSTAkJLCAweDAwMDU0ODAyIH0sCS8qIEVRQ05UTAkqLworCXsgU1RCMDg5OV9PRkYwX0VRX0lfSU5JVF9DT0VGRl8wLCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGMCAqLworCXsgU1RCMDg5OV9PRkYxX0VRX0lfSU5JVF9DT0VGRl8xLCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGMSAqLworCXsgU1RCMDg5OV9PRkYyX0VRX0lfSU5JVF9DT0VGRl8yLCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGMiAqLworCXsgU1RCMDg5OV9PRkYzX0VRX0lfSU5JVF9DT0VGRl8zLCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGMyAqLworCXsgU1RCMDg5OV9PRkY0X0VRX0lfSU5JVF9DT0VGRl80LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGNCAqLworCXsgU1RCMDg5OV9PRkY1X0VRX0lfSU5JVF9DT0VGRl81LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDA0MDAgfSwJLyogRVFJSU5JVENPRUZGNSAqLworCXsgU1RCMDg5OV9PRkY2X0VRX0lfSU5JVF9DT0VGRl82LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGNiAqLworCXsgU1RCMDg5OV9PRkY3X0VRX0lfSU5JVF9DT0VGRl83LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGNyAqLworCXsgU1RCMDg5OV9PRkY4X0VRX0lfSU5JVF9DT0VGRl84LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGOCAqLworCXsgU1RCMDg5OV9PRkY5X0VRX0lfSU5JVF9DT0VGRl85LCBTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGOSAqLworCXsgU1RCMDg5OV9PRkZhX0VRX0lfSU5JVF9DT0VGRl8xMCxTVEIwODk5X0JBU0VfRVFfSV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFJSU5JVENPRUZGMTAqLworCXsgU1RCMDg5OV9PRkYwX0VRX1FfSU5JVF9DT0VGRl8wLCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGMCAqLworCXsgU1RCMDg5OV9PRkYxX0VRX1FfSU5JVF9DT0VGRl8xLCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGMSAqLworCXsgU1RCMDg5OV9PRkYyX0VRX1FfSU5JVF9DT0VGRl8yLCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGMiAqLworCXsgU1RCMDg5OV9PRkYzX0VRX1FfSU5JVF9DT0VGRl8zLCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGMyAqLworCXsgU1RCMDg5OV9PRkY0X0VRX1FfSU5JVF9DT0VGRl80LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGNCAqLworCXsgU1RCMDg5OV9PRkY1X0VRX1FfSU5JVF9DT0VGRl81LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGNSAqLworCXsgU1RCMDg5OV9PRkY2X0VRX1FfSU5JVF9DT0VGRl82LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGNiAqLworCXsgU1RCMDg5OV9PRkY3X0VRX1FfSU5JVF9DT0VGRl83LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGNyAqLworCXsgU1RCMDg5OV9PRkY4X0VRX1FfSU5JVF9DT0VGRl84LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGOCAqLworCXsgU1RCMDg5OV9PRkY5X0VRX1FfSU5JVF9DT0VGRl85LCBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGOSAqLworCXsgU1RCMDg5OV9PRkZhX0VRX1FfSU5JVF9DT0VGRl8xMCxTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04sIDB4MDAwMDAwMDAgfSwJLyogRVFRSU5JVENPRUZGMTAqLworCXsgU1RCMDg5OV9PRkYwX0VRX0lfT1VUX0NPRUZGXzAJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUMCAqLworCXsgU1RCMDg5OV9PRkYxX0VRX0lfT1VUX0NPRUZGXzEJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUMSAqLworCXsgU1RCMDg5OV9PRkYyX0VRX0lfT1VUX0NPRUZGXzIJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUMiAqLworCXsgU1RCMDg5OV9PRkYzX0VRX0lfT1VUX0NPRUZGXzMJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUMyAqLworCXsgU1RCMDg5OV9PRkY0X0VRX0lfT1VUX0NPRUZGXzQJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUNCAqLworCXsgU1RCMDg5OV9PRkY1X0VRX0lfT1VUX0NPRUZGXzUJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUNSAqLworCXsgU1RCMDg5OV9PRkY2X0VRX0lfT1VUX0NPRUZGXzYJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUNiAqLworCXsgU1RCMDg5OV9PRkY3X0VRX0lfT1VUX0NPRUZGXzcJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUNyAqLworCXsgU1RCMDg5OV9PRkY4X0VRX0lfT1VUX0NPRUZGXzgJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUOCAqLworCXsgU1RCMDg5OV9PRkY5X0VRX0lfT1VUX0NPRUZGXzkJLCBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgksIDB4MDAwMDAwMDAgfSwgLyogRVFJQ09FRkZTT1VUOSAqLworCXsgU1RCMDg5OV9PRkZhX0VRX0lfT1VUX0NPRUZGXzEwLFNUQjA4OTlfQkFTRV9FUV9JX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LCAvKiBFUUlDT0VGRlNPVVQxMCovCisJeyBTVEIwODk5X09GRjBfRVFfUV9PVVRfQ09FRkZfMAksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQwICovCisJeyBTVEIwODk5X09GRjFfRVFfUV9PVVRfQ09FRkZfMQksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQxICovCisJeyBTVEIwODk5X09GRjJfRVFfUV9PVVRfQ09FRkZfMgksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQyICovCisJeyBTVEIwODk5X09GRjNfRVFfUV9PVVRfQ09FRkZfMwksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQzICovCisJeyBTVEIwODk5X09GRjRfRVFfUV9PVVRfQ09FRkZfNAksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ0ICovCisJeyBTVEIwODk5X09GRjVfRVFfUV9PVVRfQ09FRkZfNQksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ1ICovCisJeyBTVEIwODk5X09GRjZfRVFfUV9PVVRfQ09FRkZfNiAsIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ2ICovCisJeyBTVEIwODk5X09GRjdfRVFfUV9PVVRfQ09FRkZfNwksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ3ICovCisJeyBTVEIwODk5X09GRjhfRVFfUV9PVVRfQ09FRkZfOAksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ4ICovCisJeyBTVEIwODk5X09GRjlfRVFfUV9PVVRfQ09FRkZfOQksIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQ5ICovCisJeyBTVEIwODk5X09GRmFfRVFfUV9PVVRfQ09FRkZfMTAsIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCSwgMHgwMDAwMDAwMCB9LAkvKiBFUVFDT0VGRlNPVVQxMCovCisJeyAweGZmZmYJCQksIDB4ZmZmZmZmZmYJCQksIDB4ZmZmZmZmZmYgfSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczJfcmVnIHN0YjA4OTlfczJfaW5pdF80W10gPSB7CisJeyBTVEIwODk5X09GRjBfQkxPQ0tfTE5HVEgJLCBTVEIwODk5X0JBU0VfQkxPQ0tfTE5HVEgJLCAweDAwMDAwMDA4IH0sCS8qIEJMT0NLTE5HVEgJKi8KKwl7IFNUQjA4OTlfT0ZGMF9ST1dfU1RSCQksIFNUQjA4OTlfQkFTRV9ST1dfU1RSCQksIDB4MDAwMDAwYjQgfSwJLyogUk9XU1RSCSovCisJeyBTVEIwODk5X09GRjBfQk5fRU5EX0FERFIJLCBTVEIwODk5X0JBU0VfQk5fRU5EX0FERFIJLCAweDAwMDAwNGI1IH0sCS8qIEJOQU5EQUREUgkqLworCXsgU1RCMDg5OV9PRkYwX0NOX0VORF9BRERSCSwgU1RCMDg5OV9CQVNFX0NOX0VORF9BRERSCSwgMHgwMDAwMGI0YiB9LAkvKiBDTkFOREFERFIJKi8KKwl7IFNUQjA4OTlfT0ZGMF9JTkZPX0xFTkdUSAksIFNUQjA4OTlfQkFTRV9JTkZPX0xFTkdUSAksIDB4MDAwMDAwNzggfSwJLyogSU5GT0xFTkdUSAkqLworCXsgU1RCMDg5OV9PRkYwX0JPVF9BRERSCQksIFNUQjA4OTlfQkFTRV9CT1RfQUREUgkJLCAweDAwMDAwMWUwIH0sCS8qIEJPVF9BRERSCSovCisJeyBTVEIwODk5X09GRjBfQkNIX0JMS19MTgksIFNUQjA4OTlfQkFTRV9CQ0hfQkxLX0xOCSwgMHgwMDAwYThjMCB9LAkvKiBCQ0hCTEtMTgkqLworCXsgU1RCMDg5OV9PRkYwX0JDSF9UCQksIFNUQjA4OTlfQkFTRV9CQ0hfVAkJLCAweDAwMDAwMDBjIH0sCS8qIEJDSFQJCSovCisJeyBTVEIwODk5X09GRjBfQ05GR19NT0RFCSwgU1RCMDg5OV9CQVNFX0NORkdfTU9ERQksIDB4MDAwMDAwMDEgfSwJLyogQ05GR01PREUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9MRFBDX1NUQVQJLCBTVEIwODk5X0JBU0VfTERQQ19TVEFUCSwgMHgwMDAwMDAwZCB9LAkvKiBMRFBDU1RBVAkqLworCXsgU1RCMDg5OV9PRkYwX0lURVJfU0NBTEUJLCBTVEIwODk5X0JBU0VfSVRFUl9TQ0FMRQksIDB4MDAwMDAwNDAgfSwJLyogSVRFUlNDQUxFCSovCisJeyBTVEIwODk5X09GRjBfSU5QVVRfTU9ERQksIFNUQjA4OTlfQkFTRV9JTlBVVF9NT0RFCSwgMHgwMDAwMDAwMCB9LAkvKiBJTlBVVE1PREUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9MRFBDREVDUlNUCSwgU1RCMDg5OV9CQVNFX0xEUENERUNSU1QJLCAweDAwMDAwMDAwIH0sCS8qIExEUENERUNSU1QJKi8KKwl7IFNUQjA4OTlfT0ZGMF9DTEtfUEVSX0JZVEVfUlcJLCBTVEIwODk5X0JBU0VfQ0xLX1BFUl9CWVRFX1JXCSwgMHgwMDAwMDAwOCB9LAkvKiBDTEtQRVJCWVRFCSovCisJeyBTVEIwODk5X09GRjBfQkNIX0VSUk9SUwksIFNUQjA4OTlfQkFTRV9CQ0hfRVJST1JTCSwgMHgwMDAwMDAwMCB9LAkvKiBCQ0hFUlJPUlMJKi8KKwl7IFNUQjA4OTlfT0ZGMF9MRFBDX0VSUk9SUwksIFNUQjA4OTlfQkFTRV9MRFBDX0VSUk9SUwksIDB4MDAwMDAwMDAgfSwJLyogTERQQ0VSUk9SUwkqLworCXsgU1RCMDg5OV9PRkYwX0JDSF9NT0RFCQksIFNUQjA4OTlfQkFTRV9CQ0hfTU9ERQkJLCAweDAwMDAwMDAwIH0sCS8qIEJDSE1PREUJKi8KKwl7IFNUQjA4OTlfT0ZGMF9FUlJfQUNDX1BFUgksIFNUQjA4OTlfQkFTRV9FUlJfQUNDX1BFUgksIDB4MDAwMDAwMDggfSwJLyogRVJSQUNDUEVSCSovCisJeyBTVEIwODk5X09GRjBfQkNIX0VSUl9BQ0MJLCBTVEIwODk5X0JBU0VfQkNIX0VSUl9BQ0MJLCAweDAwMDAwMDAwIH0sCS8qIEJDSEVSUkFDQwkqLworCXsgU1RCMDg5OV9PRkYwX0ZFQ19UUF9TRUwJLCBTVEIwODk5X0JBU0VfRkVDX1RQX1NFTAksIDB4MDAwMDAwMDAgfSwJLyogRkVDVFBTRUwJKi8KKwl7IDB4ZmZmZgkJCSwgMHhmZmZmZmZmZgkJCSwgMHhmZmZmZmZmZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGIwODk5X3MxX3JlZyBzdGIwODk5X3MxX2luaXRfNVtdID0geworCXsgU1RCMDg5OV9UU1RDSwkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVFJFUwksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUT1VUCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RJTgkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVFNZUwksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUQ0hJUAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNURlJFRQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUSTJDCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CSVRTUEVFRE0JLCAweDAwIH0sCisJeyBTVEIwODk5X0JJVFNQRUVETAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVEJVU0JJVAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNURElTCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RESVNSWAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUSkVUT04JLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVERDQURKCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RBR0MxCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RBR0MxTgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUUE9MWVBICSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RSCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUQUdDMgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUQ1RMMQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUQ1RMMgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUQ1RMMwksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUREVNQVAJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVERFTUFQMgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUREVNTU9OCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RSQVRFCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RTRUxPVVQJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTWU5DCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNURVJSCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RSQU0xCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RWU0VMT1VUCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RGT1JDRUlOCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1RSUzEJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVFJTMgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNUUlMzCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9HSE9TVFJFRwksIDB4ODEgfSwKKwl7IDB4ZmZmZgkJLCAweGZmIH0sCit9OworCisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfRVNOT19BVkUJCQkzCisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfRVNOT19RVUFOVAkJMzIKKyNkZWZpbmUgU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19DT0FSU0UJCTEwCisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfQVZGUkFNRVNfRklORQkJMjAKKyNkZWZpbmUgU1RCMDg5OV9EVkJTMl9NSVNTX1RIUkVTSE9MRAkJNgorI2RlZmluZSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfQUNRCQkxMTI1CisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9UUkFDSwk3NTgKKyNkZWZpbmUgU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1NPRgkJMTM1MAorI2RlZmluZSBTVEIwODk5X0RWQlMyX1NPRl9TRUFSQ0hfVElNRU9VVAkxNjY0MTAwCisKKyNkZWZpbmUgU1RCMDg5OV9EVkJTMl9CVFJfTkNPX0JJVFMJCTI4CisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfQlRSX0dBSU5fU0hJRlRfT0ZGU0VUCTE1CisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfQ1JMX05DT19CSVRTCQkzMAorI2RlZmluZSBTVEIwODk5X0RWQlMyX0xEUENfTUFYX0lURVIJCTcwCisKKyNlbmRpZiAvL19fU1RCMDg5OV9DRkdfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg4MjAxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMKQEAgLTAsMCArMSwxNjg0IEBACisvKgorCVNUQjA4OTkgTXVsdGlzdGFuZGFyZCBGcm9udGVuZCBkcml2ZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJzdGIwODk5X2Rydi5oIgorI2luY2x1ZGUgInN0YjA4OTlfcHJpdi5oIgorI2luY2x1ZGUgInN0YjA4OTlfcmVnLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZSA9IDA7Ly8xOworbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CisKKy8qIEMvTiBpbiBkQi8xMCwgTklSTS9OSVJMICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfdGFiIHN0YjA4OTlfY25fdGFiW10gPSB7CisJeyAyMDAsCTI2MDAgfSwKKwl7IDE5MCwJMjcwMCB9LAorCXsgMTgwLAkyODYwIH0sCisJeyAxNzAsCTMwMjAgfSwKKwl7IDE2MCwJMzIxMCB9LAorCXsgMTUwLAkzNDQwIH0sCisJeyAxNDAsCTM3MTAgfSwKKwl7IDEzMCwJNDAxMCB9LAorCXsgMTIwLAk0MzYwIH0sCisJeyAxMTAsCTQ3NDAgfSwKKwl7IDEwMCwJNTE5MCB9LAorCXsgOTAsCTU2NzAgfSwKKwl7IDgwLAk2MjAwIH0sCisJeyA3MCwJNjc3MCB9LAorCXsgNjAsCTczNjAgfSwKKwl7IDUwLAk3OTcwIH0sCisJeyA0MCwJODI1MCB9LAorCXsgMzAsCTkwMDAgfSwKKwl7IDIwLAk5NDUwIH0sCisJeyAxNSwJOTYwMCB9LAorfTsKKworLyogRFZCLVMgQUdDSVFfVkFMVUUgdnMuIHNpZ25hbCBsZXZlbCBpbiBkQm0vMTAuCisgKiBBcyBtZWFzdXJlZCwgY29ubmVjdGVkIHRvIGEgbW9kdWxhdG9yLgorICogLTguMCB0byAtNTAuMCBkQm0gZGlyZWN0bHkgY29ubmVjdGVkLAorICogLTUyLjAgdG8gLTc0Ljggd2l0aCBleHRyYSBhdHRlbnVhdGlvbi4KKyAqIEN1dC1vZmYgdG8gQUdDSVFfVkFMVUUgPSAweDgwIGJlbG93IC03NC44ZEJtLgorICogQ3J1ZGUgbGluZWFyIGV4dHJhcG9sYXRpb24gYmVsb3cgLTg0LjhkQm0gYW5kIGFib3ZlIC04LjBkQm0uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV90YWIgc3RiMDg5OV9kdmJzcmZfdGFiW10gPSB7CisJeyAtOTUwLAktMTI4IH0sCisJeyAtNzQ4LAkgLTk0IH0sCisJeyAtNzQ1LAkgLTkyIH0sCisJeyAtNzM1LAkgLTkwIH0sCisJeyAtNzIwLAkgLTg3IH0sCisJeyAtNjcwLAkgLTc3IH0sCisJeyAtNjQwLAkgLTcwIH0sCisJeyAtNjEwLAkgLTYyIH0sCisJeyAtNjAwLAkgLTYwIH0sCisJeyAtNTkwLAkgLTU2IH0sCisJeyAtNTYwLAkgLTQxIH0sCisJeyAtNTQwLAkgLTI1IH0sCisJeyAtNTMwLAkgLTE3IH0sCisJeyAtNTIwLAkgLTExIH0sCisJeyAtNTAwLAkgICAxIH0sCisJeyAtNDkwLAkgICA2IH0sCisJeyAtNDgwLAkgIDEwIH0sCisJeyAtNDQwLAkgIDIyIH0sCisJeyAtNDIwLAkgIDI3IH0sCisJeyAtNDAwLAkgIDMxIH0sCisJeyAtMzgwLAkgIDM0IH0sCisJeyAtMzQwLAkgIDQwIH0sCisJeyAtMzIwLAkgIDQzIH0sCisJeyAtMjgwLAkgIDQ4IH0sCisJeyAtMjUwLAkgIDUyIH0sCisJeyAtMjMwLAkgIDU1IH0sCisJeyAtMTgwLAkgIDYxIH0sCisJeyAtMTQwLAkgIDY2IH0sCisJeyAgLTkwLAkgIDczIH0sCisJeyAgLTgwLAkgIDc0IH0sCisJeyAgNTAwLAkgMTI3IH0KK307CisKKy8qIERWQi1TMiBJRl9BR0NfR0FJTiB2cy4gc2lnbmFsIGxldmVsIGluIGRCbS8xMC4KKyAqIEFzIG1lYXN1cmVkLCBjb25uZWN0ZWQgdG8gYSBtb2R1bGF0b3IuCisgKiAtOC4wIHRvIC01MC4xIGRCbSBkaXJlY3RseSBjb25uZWN0ZWQsCisgKiAtNTMuMCB0byAtNzYuNiB3aXRoIGV4dHJhIGF0dGVudWF0aW9uLgorICogQ3V0LW9mZiB0byBJRl9BR0NfR0FJTiA9IDB4M2ZmZiBiZWxvdyAtNzYuNmRCbS4KKyAqIENydWRlIGxpbmVhciBleHRyYXBvbGF0aW9uIGJlbG93IC03Ni42ZEJtIGFuZCBhYm92ZSAtOC4wZEJtLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfdGFiIHN0YjA4OTlfZHZiczJyZl90YWJbXSA9IHsKKwl7ICA3MDAsCSAgICAwIH0sCisJeyAgLTgwLAkgMzIxNyB9LAorCXsgLTE1MCwJIDM4OTMgfSwKKwl7IC0xOTAsCSA0MjE3IH0sCisJeyAtMjQwLAkgNDYyMSB9LAorCXsgLTI4MCwJIDQ5NDUgfSwKKwl7IC0zMjAsCSA1MjczIH0sCisJeyAtMzUwLAkgNTU0NSB9LAorCXsgLTM3MCwJIDU3NDEgfSwKKwl7IC00MTAsCSA2MTQ3IH0sCisJeyAtNDUwLAkgNjY3MSB9LAorCXsgLTQ5MCwJIDc0MTMgfSwKKwl7IC01MDEsCSA3NjY1IH0sCisJeyAtNTMwLAkgODc2NyB9LAorCXsgLTU2MCwJMTAyMTkgfSwKKwl7IC01ODAsCTEwOTM5IH0sCisJeyAtNTkwLAkxMTUxOCB9LAorCXsgLTYwMCwJMTE3MjMgfSwKKwl7IC02NTAsCTEyNjU5IH0sCisJeyAtNjkwLAkxMzIxOSB9LAorCXsgLTczMCwJMTM2NDUgfSwKKwl7IC03NTAsCTEzOTA5IH0sCisJeyAtNzY2LAkxNDE1MyB9LAorCXsgLTk5OSwJMTYzODMgfQorfTsKKworLyogRFZCLVMyIEVzL04wIHF1YW50IGluIGRCLzEwMCB2cyByZWFkIHZhbHVlICogMTAwKi8KK3N0cnVjdCBzdGIwODk5X3RhYiBzdGIwODk5X3F1YW50X3RhYltdID0geworCXsgICAgMCwJICAgIDAgfSwKKwl7ICAgIDAsCSAgMTAwIH0sCisJeyAgNjAwLAkgIDIwMCB9LAorCXsgIDk1MCwJICAyOTkgfSwKKwl7IDEyMDAsCSAgMzk4IH0sCisJeyAxNDAwLAkgIDUwMSB9LAorCXsgMTU2MCwJICA2MDMgfSwKKwl7IDE2OTAsCSAgNzAwIH0sCisJeyAxODEwLAkgIDgwNCB9LAorCXsgMTkxMCwJICA5MDIgfSwKKwl7IDIwMDAsCSAxMDAwIH0sCisJeyAyMDgwLAkgMTA5NiB9LAorCXsgMjE2MCwJIDEyMDIgfSwKKwl7IDIyMzAsCSAxMzAzIH0sCisJeyAyMzUwLAkgMTQ5NiB9LAorCXsgMjQxMCwJIDE2MDMgfSwKKwl7IDI0NjAsCSAxNjk4IH0sCisJeyAyNTEwLAkgMTc5OSB9LAorCXsgMjYwMCwJIDE5OTUgfSwKKwl7IDI2NTAsCSAyMTEzIH0sCisJeyAyNjkwLCAgMjIxMyB9LAorCXsgMjcyMCwJIDIyOTEgfSwKKwl7IDI3NjAsCSAyMzk5IH0sCisJeyAyODAwLAkgMjUxMiB9LAorCXsgMjg2MCwJIDI2OTIgfSwKKwl7IDI5MzAsCSAyOTE3IH0sCisJeyAyOTYwLAkgMzAyMCB9LAorCXsgMzAxMCwJIDMxOTkgfSwKKwl7IDMwNDAsCSAzMzExIH0sCisJeyAzMDYwLAkgMzM4OCB9LAorCXsgMzEyMCwJIDM2MzEgfSwKKwl7IDMxOTAsCSAzOTM2IH0sCisJeyAzNDAwLAkgNTAxMiB9LAorCXsgMzYxMCwJIDYzODMgfSwKKwl7IDM4MDAsCSA3OTQzIH0sCisJeyA0MjEwLAkxMjczNSB9LAorCXsgNDUwMCwJMTc3ODMgfSwKKwl7IDQ2OTAsCTIyMTMxIH0sCisJeyA0ODEwLAkyNTQxMCB9Cit9OworCisvKiBEVkItUzIgRXMvTjAgZXN0aW1hdGUgaW4gZEIvMTAwIHZzIHJlYWQgdmFsdWUgKi8KK3N0cnVjdCBzdGIwODk5X3RhYiBzdGIwODk5X2VzdF90YWJbXSA9IHsKKwl7ICAgIDAsCSAgICAgMCB9LAorCXsgICAgMCwJICAgICAxIH0sCisJeyAgMzAxLAkgICAgIDIgfSwKKwl7IDEyMDQsCSAgICAxNiB9LAorCXsgMTgwNiwJICAgIDY0IH0sCisJeyAyNDA4LAkgICAyNTYgfSwKKwl7IDI3MDksCSAgIDUxMiB9LAorCXsgMzAxMCwJICAxMDIzIH0sCisJeyAzMzExLAkgIDIwNDYgfSwKKwl7IDM2MTIsCSAgNDA5MyB9LAorCXsgMzgyMywJICA2NjUzIH0sCisJeyAzOTEzLAkgIDgxODUgfSwKKwl7IDQwMTAsCSAxMDIzMyB9LAorCXsgNDEwNywJIDEyNzk0IH0sCisJeyA0MjE0LAkgMTYzNjggfSwKKwl7IDQyNjYsCSAxODQ1MCB9LAorCXsgNDMxMSwJIDIwNDY0IH0sCisJeyA0MzUzLAkgMjI1NDIgfSwKKwl7IDQzOTEsCSAyNDYwNCB9LAorCXsgNDQyNSwJIDI2NjA3IH0sCisJeyA0NDU3LAkgMjg2NDIgfSwKKwl7IDQ0ODcsCSAzMDY5MCB9LAorCXsgNDUxNSwJIDMyNzM0IH0sCisJeyA0NjEyLAkgNDA5MjYgfSwKKwl7IDQ2OTIsCSA0OTIwNCB9LAorCXsgNDgxNiwJIDY1NDY0IH0sCisJeyA0OTEzLAkgODE4NDYgfSwKKwl7IDQ5OTMsCSA5ODQwMSB9LAorCXsgNTA2MCwJMTE0ODE1IH0sCisJeyA1MTE4LAkxMzEyMjAgfSwKKwl7IDUyMDAsCTE1ODQ4OSB9LAorCXsgNTMwMCwJMTk5NTI2IH0sCisJeyA1NDAwLAkyNTExODkgfSwKKwl7IDU1MDAsCTMxNjIyOCB9LAorCXsgNTYwMCwJMzk4MTA3IH0sCisJeyA1NzIwLAk1MjQ4MDcgfSwKKwl7IDU3MjEsCTUyNjAxNyB9LAorfTsKKworaW50IF9zdGIwODk5X3JlYWRfcmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpbnQgcmV0OworCisJdTggYjBbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYgfTsKKwl1OCBidWY7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzCT0gMCwKKwkJCS5idWYJPSBiMCwKKwkJCS5sZW4JPSAyCisJCX0seworCQkJLmFkZHIJPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzCT0gSTJDX01fUkQsCisJCQkuYnVmCT0gJmJ1ZiwKKwkJCS5sZW4JPSAxCisJCX0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisJaWYgKHJldCAhPSAyKSB7CisJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsCisJCQkJIlJlYWQgZXJyb3IsIFJlZz1bMHglMDJ4XSwgU3RhdHVzPSVkIiwKKwkJCQlyZWcsIHJldCk7CisKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRVJFTU9URUlPOworCX0KKwlpZiAodW5saWtlbHkoKnN0YXRlLT52ZXJib3NlID49IEZFX0RFQlVHUkVHKSkKKwkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsICJSZWc9WzB4JTAyeF0sIGRhdGE9JTAyeCIsCisJCQlyZWcsIGJ1Zik7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludClidWY7Cit9CisKK2ludCBzdGIwODk5X3JlYWRfcmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gX3N0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIHJlZyk7CisJLyoKKwkgKiBCdWcgSUQgOToKKwkgKiBhY2Nlc3MgdG8gMHhmMnh4LzB4ZjZ4eAorCSAqIG11c3QgYmUgZm9sbG93ZWQgYnkgcmVhZCBmcm9tIDB4ZjJmZi8weGY2ZmYuCisJICovCisJaWYgKChyZWcgIT0gMHhmMmZmKSAmJiAocmVnICE9IDB4ZjZmZikgJiYKKwkgICAgKCgocmVnICYgMHhmZjAwKSA9PSAweGYyMDApIHx8ICgocmVnICYgMHhmZjAwKSA9PSAweGY2MDApKSkKKwkJX3N0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIChyZWcgfCAweDAwZmYpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3UzMiBfc3RiMDg5OV9yZWFkX3MycmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwKKwkJCXUzMiBzdGIwODk5X2kyY2RldiwKKwkJCXUzMiBzdGIwODk5X2Jhc2VfYWRkciwKKwkJCXUxNiBzdGIwODk5X3JlZ19vZmZzZXQpCit7CisJaW50IHN0YXR1czsKKwl1MzIgZGF0YTsKKwl1OCBidWZbN10gPSB7IDAgfTsKKwl1MTYgdG1wYWRkcjsKKworCXU4IGJ1Zl8wW10gPSB7CisJCUdFVEJZVEUoc3RiMDg5OV9pMmNkZXYsIEJZVEUxKSwJCS8qIDB4ZjMJUzIgQmFzZSBBZGRyZXNzIChNU0IpCSovCisJCUdFVEJZVEUoc3RiMDg5OV9pMmNkZXYsIEJZVEUwKSwJCS8qIDB4ZmMJUzIgQmFzZSBBZGRyZXNzIChMU0IpCSovCisJCUdFVEJZVEUoc3RiMDg5OV9iYXNlX2FkZHIsIEJZVEUwKSwJLyogMHgwMAlCYXNlIEFkZHJlc3MgKExTQikJKi8KKwkJR0VUQllURShzdGIwODk5X2Jhc2VfYWRkciwgQllURTEpLAkvKiAweDA0CUJhc2UgQWRkcmVzcyAoTFNCKQkqLworCQlHRVRCWVRFKHN0YjA4OTlfYmFzZV9hZGRyLCBCWVRFMiksCS8qIDB4MDAJQmFzZSBBZGRyZXNzIChNU0IpCSovCisJCUdFVEJZVEUoc3RiMDg5OV9iYXNlX2FkZHIsIEJZVEUzKSwJLyogMHgwMAlCYXNlIEFkZHJlc3MgKE1TQikJKi8KKwl9OworCXU4IGJ1Zl8xW10gPSB7CisJCTB4MDAsCS8qIDB4ZjMJUmVnIE9mZnNldAkqLworCQkweDAwLAkvKiAweDQ0CVJlZyBPZmZzZXQJKi8KKwl9OworCisJc3RydWN0IGkyY19tc2cgbXNnXzAgPSB7CisJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGJ1Zl8wLAorCQkubGVuCT0gNgorCX07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfMSA9IHsKKwkJLmFkZHIJPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gYnVmXzEsCisJCS5sZW4JPSAyCisJfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ19yID0geworCQkuYWRkcgk9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncwk9IEkyQ19NX1JELAorCQkuYnVmCT0gYnVmLAorCQkubGVuCT0gNAorCX07CisKKwl0bXBhZGRyID0gc3RiMDg5OV9yZWdfb2Zmc2V0ICYgMHhmZjAwOworCWlmICghKHN0YjA4OTlfcmVnX29mZnNldCAmIDB4OCkpCisJCXRtcGFkZHIgPSBzdGIwODk5X3JlZ19vZmZzZXQgfCAweDIwOworCisJYnVmXzFbMF0gPSBHRVRCWVRFKHRtcGFkZHIsIEJZVEUxKTsKKwlidWZfMVsxXSA9IEdFVEJZVEUodG1wYWRkciwgQllURTApOworCisJc3RhdHVzID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2dfMCwgMSk7CisJaWYgKHN0YXR1cyA8IDEpIHsKKwkJaWYgKHN0YXR1cyAhPSAtRVJFU1RBUlRTWVMpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzIEVSUigxKSwgRGV2aWNlPVsweCUwNHhdLCBCYXNlIGFkZHJlc3M9WzB4JTA4eF0sIE9mZnNldD1bMHglMDR4XSwgU3RhdHVzPSVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBzdGIwODk5X2kyY2Rldiwgc3RiMDg5OV9iYXNlX2FkZHIsIHN0YjA4OTlfcmVnX29mZnNldCwgc3RhdHVzKTsKKworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBEdW1teQkqLworCXN0YXR1cyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnXzEsIDEpOworCWlmIChzdGF0dXMgPCAxKQorCQlnb3RvIGVycjsKKworCXN0YXR1cyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnX3IsIDEpOworCWlmIChzdGF0dXMgPCAxKQorCQlnb3RvIGVycjsKKworCWJ1Zl8xWzBdID0gR0VUQllURShzdGIwODk5X3JlZ19vZmZzZXQsIEJZVEUxKTsKKwlidWZfMVsxXSA9IEdFVEJZVEUoc3RiMDg5OV9yZWdfb2Zmc2V0LCBCWVRFMCk7CisKKwkvKiBBY3R1YWwJKi8KKwlzdGF0dXMgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZ18xLCAxKTsKKwlpZiAoc3RhdHVzIDwgMSkgeworCQlpZiAoc3RhdHVzICE9IC1FUkVTVEFSVFNZUykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgRVJSKDIpLCBEZXZpY2U9WzB4JTA0eF0sIEJhc2UgYWRkcmVzcz1bMHglMDh4XSwgT2Zmc2V0PVsweCUwNHhdLCBTdGF0dXM9JWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHN0YjA4OTlfaTJjZGV2LCBzdGIwODk5X2Jhc2VfYWRkciwgc3RiMDg5OV9yZWdfb2Zmc2V0LCBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisKKwlzdGF0dXMgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZ19yLCAxKTsKKwlpZiAoc3RhdHVzIDwgMSkgeworCQlpZiAoc3RhdHVzICE9IC1FUkVTVEFSVFNZUykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgRVJSKDMpLCBEZXZpY2U9WzB4JTA0eF0sIEJhc2UgYWRkcmVzcz1bMHglMDh4XSwgT2Zmc2V0PVsweCUwNHhdLCBTdGF0dXM9JWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHN0YjA4OTlfaTJjZGV2LCBzdGIwODk5X2Jhc2VfYWRkciwgc3RiMDg5OV9yZWdfb2Zmc2V0LCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzIDwgMCA/IHN0YXR1cyA6IC1FUkVNT1RFSU87CisJfQorCisJZGF0YSA9IE1BS0VXT1JEMzIoYnVmWzNdLCBidWZbMl0sIGJ1ZlsxXSwgYnVmWzBdKTsKKwlpZiAodW5saWtlbHkoKnN0YXRlLT52ZXJib3NlID49IEZFX0RFQlVHUkVHKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIERldmljZT1bMHglMDR4XSwgQmFzZSBhZGRyZXNzPVsweCUwOHhdLCBPZmZzZXQ9WzB4JTA0eF0sIERhdGE9WzB4JTA4eF1cbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RiMDg5OV9pMmNkZXYsIHN0YjA4OTlfYmFzZV9hZGRyLCBzdGIwODk5X3JlZ19vZmZzZXQsIGRhdGEpOworCisJcmV0dXJuIGRhdGE7CisKK2VycjoKKwlyZXR1cm4gc3RhdHVzIDwgMCA/IHN0YXR1cyA6IC1FUkVNT1RFSU87Cit9CisKK2ludCBzdGIwODk5X3dyaXRlX3MycmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwKKwkJCXUzMiBzdGIwODk5X2kyY2RldiwKKwkJCXUzMiBzdGIwODk5X2Jhc2VfYWRkciwKKwkJCXUxNiBzdGIwODk5X3JlZ19vZmZzZXQsCisJCQl1MzIgc3RiMDg5OV9kYXRhKQoreworCWludCBzdGF0dXM7CisKKwkvKiBCYXNlIEFkZHJlc3MgU2V0dXAJKi8KKwl1OCBidWZfMFtdID0geworCQlHRVRCWVRFKHN0YjA4OTlfaTJjZGV2LCBCWVRFMSksCQkvKiAweGYzCVMyIEJhc2UgQWRkcmVzcyAoTVNCKQkqLworCQlHRVRCWVRFKHN0YjA4OTlfaTJjZGV2LCBCWVRFMCksCQkvKiAweGZjCVMyIEJhc2UgQWRkcmVzcyAoTFNCKQkqLworCQlHRVRCWVRFKHN0YjA4OTlfYmFzZV9hZGRyLCBCWVRFMCksCS8qIDB4MDAJQmFzZSBBZGRyZXNzIChMU0IpCSovCisJCUdFVEJZVEUoc3RiMDg5OV9iYXNlX2FkZHIsIEJZVEUxKSwJLyogMHgwNAlCYXNlIEFkZHJlc3MgKExTQikJKi8KKwkJR0VUQllURShzdGIwODk5X2Jhc2VfYWRkciwgQllURTIpLAkvKiAweDAwCUJhc2UgQWRkcmVzcyAoTVNCKQkqLworCQlHRVRCWVRFKHN0YjA4OTlfYmFzZV9hZGRyLCBCWVRFMyksCS8qIDB4MDAJQmFzZSBBZGRyZXNzIChNU0IpCSovCisJfTsKKwl1OCBidWZfMVtdID0geworCQkweDAwLAkvKiAweGYzCVJlZyBPZmZzZXQJKi8KKwkJMHgwMCwJLyogMHg0NAlSZWcgT2Zmc2V0CSovCisJCTB4MDAsCS8qIGRhdGEJCQkqLworCQkweDAwLAkvKiBkYXRhCQkJKi8KKwkJMHgwMCwJLyogZGF0YQkJCSovCisJCTB4MDAsCS8qIGRhdGEJCQkqLworCX07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfMCA9IHsKKwkJLmFkZHIJPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gYnVmXzAsCisJCS5sZW4JPSA2CisJfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ18xID0geworCQkuYWRkcgk9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWZfMSwKKwkJLmxlbgk9IDYKKwl9OworCisJYnVmXzFbMF0gPSBHRVRCWVRFKHN0YjA4OTlfcmVnX29mZnNldCwgQllURTEpOworCWJ1Zl8xWzFdID0gR0VUQllURShzdGIwODk5X3JlZ19vZmZzZXQsIEJZVEUwKTsKKwlidWZfMVsyXSA9IEdFVEJZVEUoc3RiMDg5OV9kYXRhLCBCWVRFMCk7CisJYnVmXzFbM10gPSBHRVRCWVRFKHN0YjA4OTlfZGF0YSwgQllURTEpOworCWJ1Zl8xWzRdID0gR0VUQllURShzdGIwODk5X2RhdGEsIEJZVEUyKTsKKwlidWZfMVs1XSA9IEdFVEJZVEUoc3RiMDg5OV9kYXRhLCBCWVRFMyk7CisKKwlpZiAodW5saWtlbHkoKnN0YXRlLT52ZXJib3NlID49IEZFX0RFQlVHUkVHKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIERldmljZT1bMHglMDR4XSwgQmFzZSBBZGRyZXNzPVsweCUwOHhdLCBPZmZzZXQ9WzB4JTA0eF0sIERhdGE9WzB4JTA4eF1cbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RiMDg5OV9pMmNkZXYsIHN0YjA4OTlfYmFzZV9hZGRyLCBzdGIwODk5X3JlZ19vZmZzZXQsIHN0YjA4OTlfZGF0YSk7CisKKwlzdGF0dXMgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZ18wLCAxKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzIDwgMSkpIHsKKwkJaWYgKHN0YXR1cyAhPSAtRVJFU1RBUlRTWVMpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzIEVSUiAoMSksIERldmljZT1bMHglMDR4XSwgQmFzZSBBZGRyZXNzPVsweCUwOHhdLCBPZmZzZXQ9WzB4JTA0eF0sIERhdGE9WzB4JTA4eF0sIHN0YXR1cz0lZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgc3RiMDg5OV9pMmNkZXYsIHN0YjA4OTlfYmFzZV9hZGRyLCBzdGIwODk5X3JlZ19vZmZzZXQsIHN0YjA4OTlfZGF0YSwgc3RhdHVzKTsKKwkJZ290byBlcnI7CisJfQorCXN0YXR1cyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnXzEsIDEpOworCWlmICh1bmxpa2VseShzdGF0dXMgPCAxKSkgeworCQlpZiAoc3RhdHVzICE9IC1FUkVTVEFSVFNZUykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgRVJSICgyKSwgRGV2aWNlPVsweCUwNHhdLCBCYXNlIEFkZHJlc3M9WzB4JTA4eF0sIE9mZnNldD1bMHglMDR4XSwgRGF0YT1bMHglMDh4XSwgc3RhdHVzPSVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBzdGIwODk5X2kyY2Rldiwgc3RiMDg5OV9iYXNlX2FkZHIsIHN0YjA4OTlfcmVnX29mZnNldCwgc3RiMDg5OV9kYXRhLCBzdGF0dXMpOworCisJCXJldHVybiBzdGF0dXMgPCAwID8gc3RhdHVzIDogLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiBzdGF0dXMgPCAwID8gc3RhdHVzIDogLUVSRU1PVEVJTzsKK30KKworaW50IHN0YjA4OTlfcmVhZF9yZWdzKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZywgdTggKmJ1ZiwgdTMyIGNvdW50KQoreworCWludCBzdGF0dXM7CisKKwl1OCBiMFtdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncwk9IDAsCisJCQkuYnVmCT0gYjAsCisJCQkubGVuCT0gMgorCQl9LHsKKwkJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncwk9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJCS5sZW4JPSBjb3VudAorCQl9CisJfTsKKworCXN0YXR1cyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCWlmIChzdGF0dXMgIT0gMikgeworCQlpZiAoc3RhdHVzICE9IC1FUkVTVEFSVFNZUykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgUmVhZCBlcnJvciwgUmVnPVsweCUwNHhdLCBDb3VudD0ldSwgU3RhdHVzPSVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCByZWcsIGNvdW50LCBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisJLyoKKwkgKiBCdWcgSUQgOToKKwkgKiBhY2Nlc3MgdG8gMHhmMnh4LzB4ZjZ4eAorCSAqIG11c3QgYmUgZm9sbG93ZWQgYnkgcmVhZCBmcm9tIDB4ZjJmZi8weGY2ZmYuCisJICovCisJaWYgKChyZWcgIT0gMHhmMmZmKSAmJiAocmVnICE9IDB4ZjZmZikgJiYKKwkgICAgKCgocmVnICYgMHhmZjAwKSA9PSAweGYyMDApIHx8ICgocmVnICYgMHhmZjAwKSA9PSAweGY2MDApKSkKKwkJX3N0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIChyZWcgfCAweDAwZmYpKTsKKworCWlmICh1bmxpa2VseSgqc3RhdGUtPnZlcmJvc2UgPj0gRkVfREVCVUdSRUcpKSB7CisJCWludCBpOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyBbMHglMDR4XToiLCBfX2Z1bmNfXywgcmVnKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCXByaW50aygiICUwMngiLCBidWZbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gc3RhdHVzIDwgMCA/IHN0YXR1cyA6IC1FUkVNT1RFSU87Cit9CisKK2ludCBzdGIwODk5X3dyaXRlX3JlZ3Moc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqZGF0YSwgdTMyIGNvdW50KQoreworCWludCByZXQ7CisJdTggYnVmWzIgKyBjb3VudF07CisJc3RydWN0IGkyY19tc2cgaTJjX21zZyA9IHsKKwkJLmFkZHIJPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gYnVmLAorCQkubGVuCT0gMiArIGNvdW50CisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJbWVtY3B5KCZidWZbMl0sIGRhdGEsIGNvdW50KTsKKworCWlmICh1bmxpa2VseSgqc3RhdGUtPnZlcmJvc2UgPj0gRkVfREVCVUdSRUcpKSB7CisJCWludCBpOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyBbMHglMDR4XToiLCBfX2Z1bmNfXywgcmVnKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZpMmNfbXNnLCAxKTsKKworCS8qCisJICogQnVnIElEIDk6CisJICogYWNjZXNzIHRvIDB4ZjJ4eC8weGY2eHgKKwkgKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IHJlYWQgZnJvbSAweGYyZmYvMHhmNmZmLgorCSAqLworCWlmICgoKChyZWcgJiAweGZmMDApID09IDB4ZjIwMCkgfHwgKChyZWcgJiAweGZmMDApID09IDB4ZjYwMCkpKQorCQlzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCAocmVnIHwgMHgwMGZmKSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgIlJlZz1bMHglMDR4XSwgRGF0YT1bMHglMDJ4IC4uLl0sIENvdW50PSV1LCBTdGF0dXM9JWQiLAorCQkJCXJlZywgZGF0YVswXSwgY291bnQsIHJldCk7CisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHN0YjA4OTlfd3JpdGVfcmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZywgdTggZGF0YSkKK3sKKwlyZXR1cm4gc3RiMDg5OV93cml0ZV9yZWdzKHN0YXRlLCByZWcsICZkYXRhLCAxKTsKK30KKworLyoKKyAqIHN0YjA4OTlfZ2V0X21jbGsKKyAqIEdldCBTVEIwODk5IG1hc3RlciBjbG9jayBmcmVxdWVuY3kKKyAqIEV4dENsazogZXh0ZXJuYWwgY2xvY2sgZnJlcXVlbmN5IChIeikKKyAqLworc3RhdGljIHUzMiBzdGIwODk5X2dldF9tY2xrKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwl1MzIgbWNsayA9IDAsIGRpdiA9IDA7CisKKwlkaXYgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X05DT0FSU0UpOworCW1jbGsgPSAoZGl2ICsgMSkgKiBzdGF0ZS0+Y29uZmlnLT54dGFsX2ZyZXEgLyA2OworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiZGl2PSVkLCBtY2xrPSVkIiwgZGl2LCBtY2xrKTsKKworCXJldHVybiBtY2xrOworfQorCisvKgorICogc3RiMDg5OV9zZXRfbWNsaworICogU2V0IFNUQjA4OTkgbWFzdGVyIENsb2NrIGZyZXF1ZW5jeQorICogTWNsazogZGVtb2R1bGF0b3IgbWFzdGVyIGNsb2NrCisgKiBFeHRDbGs6IGV4dGVybmFsIGNsb2NrIGZyZXF1ZW5jeSAoSHopCisgKi8KK3N0YXRpYyB2b2lkIHN0YjA4OTlfc2V0X21jbGsoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCB1MzIgTWNsaykKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCXU4IG1kaXYgPSAwOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJzdGF0ZS0+Y29uZmlnPSVwIiwgc3RhdGUtPmNvbmZpZyk7CisJbWRpdiA9ICgoNiAqIE1jbGspIC8gc3RhdGUtPmNvbmZpZy0+eHRhbF9mcmVxKSAtIDE7CisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJtZGl2PSVkIiwgbWRpdik7CisKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9OQ09BUlNFLCBtZGl2KTsKKwlpbnRlcm5hbC0+bWFzdGVyX2NsayA9IHN0YjA4OTlfZ2V0X21jbGsoc3RhdGUpOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJNYXN0ZXJDTE9DSz0lZCIsIGludGVybmFsLT5tYXN0ZXJfY2xrKTsKK30KKworc3RhdGljIGludCBzdGIwODk5X3Bvc3Rwcm9jKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgdTggY3RsLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzdGIwODk5X2NvbmZpZyAqY29uZmlnCQk9IHN0YXRlLT5jb25maWc7CisJY29uc3Qgc3RydWN0IHN0YjA4OTlfcG9zdHByb2MgKnBvc3Rwcm9jCT0gY29uZmlnLT5wb3N0cHJvYzsKKworCS8qIHBvc3QgcHJvY2VzcyBldmVudCAqLworCWlmIChwb3N0cHJvYykgeworCQlpZiAoZW5hYmxlKSB7CisJCQlpZiAocG9zdHByb2NbY3RsXS5sZXZlbCA9PSBTVEIwODk5X0dQSU9QVUxMVVApCisJCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIHBvc3Rwcm9jW2N0bF0uZ3BpbywgMHgwMik7CisJCQllbHNlCisJCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIHBvc3Rwcm9jW2N0bF0uZ3BpbywgMHg4Mik7CisJCX0gZWxzZSB7CisJCQlpZiAocG9zdHByb2NbY3RsXS5sZXZlbCA9PSBTVEIwODk5X0dQSU9QVUxMVVApCisJCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIHBvc3Rwcm9jW2N0bF0uZ3BpbywgMHg4Mik7CisJCQllbHNlCisJCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIHBvc3Rwcm9jW2N0bF0uZ3BpbywgMHgwMik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YjA4OTlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiUmVsZWFzZSBGcm9udGVuZCIpOworCS8qIHBvc3QgcHJvY2VzcyBldmVudCAqLworCXN0YjA4OTlfcG9zdHByb2Moc3RhdGUsIFNUQjA4OTlfUE9TVFBST0NfR1BJT19QT1dFUiwgMCk7CisJa2ZyZWUoc3RhdGUpOworfQorCisvKgorICogc3RiMDg5OV9nZXRfYWxwaGEKKyAqIHJldHVybjogcm9sbG9mZgorICovCitzdGF0aWMgaW50IHN0YjA4OTlfZ2V0X2FscGhhKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBtb2RlX2NvZWZmOworCisJbW9kZV9jb2VmZiA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfREVNT0QpOworCisJaWYgKFNUQjA4OTlfR0VURklFTEQoTU9ERUNPRUZGLCBtb2RlX2NvZWZmKSA9PSAxKQorCQlyZXR1cm4gMjA7CisJZWxzZQorCQlyZXR1cm4gMzU7Cit9CisKKy8qCisgKiBzdGIwODk5X2luaXRfY2FsYworICovCitzdGF0aWMgdm9pZCBzdGIwODk5X2luaXRfY2FsYyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsID0gJnN0YXRlLT5pbnRlcm5hbDsKKwlpbnQgbWFzdGVyX2NsazsKKwl1OCBhZ2NbMl07CisJdTggYWdjMWNuOworCXUzMiByZWc7CisKKwkvKiBSZWFkIHJlZ2lzdGVycyAoaW4gYnVyc3QgbW9kZSkJKi8KKwlhZ2MxY24gPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0FHQzFDTik7CisJc3RiMDg5OV9yZWFkX3JlZ3Moc3RhdGUsIFNUQjA4OTlfQUdDMVJFRiwgYWdjLCAyKTsgLyogQUdDMVIgYW5kIEFHQzJPCSovCisKKwkvKiBJbml0aWFsIGNhbGN1bGF0aW9ucwkqLworCW1hc3Rlcl9jbGsJCQk9IHN0YjA4OTlfZ2V0X21jbGsoc3RhdGUpOworCWludGVybmFsLT50X2FnYzEJCT0gMDsKKwlpbnRlcm5hbC0+dF9hZ2MyCQk9IDA7CisJaW50ZXJuYWwtPm1hc3Rlcl9jbGsJCT0gbWFzdGVyX2NsazsKKwlpbnRlcm5hbC0+bWNsawkJCT0gbWFzdGVyX2NsayAvIDY1NTM2TDsKKwlpbnRlcm5hbC0+cm9sbG9mZgkJPSBzdGIwODk5X2dldF9hbHBoYShzdGF0ZSk7CisKKwkvKiBEVkJTMiBJbml0aWFsIGNhbGN1bGF0aW9ucwkqLworCS8qIFNldCBBR0MgdmFsdWUgdG8gdGhlIG1pZGRsZQkqLworCWludGVybmFsLT5hZ2NfZ2FpbgkJPSA4MTU0OworCXJlZyA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyREVNT0QsIElGX0FHQ19DTlRSTCk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoSUZfR0FJTl9JTklULCByZWcsIGludGVybmFsLT5hZ2NfZ2Fpbik7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfSUZfQUdDX0NOVFJMLCBTVEIwODk5X09GRjBfSUZfQUdDX0NOVFJMLCByZWcpOworCisJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgUlJDX0FMUEhBKTsKKwlpbnRlcm5hbC0+cnJjX2FscGhhCQk9IFNUQjA4OTlfR0VURklFTEQoUlJDX0FMUEhBLCByZWcpOworCisJaW50ZXJuYWwtPmNlbnRlcl9mcmVxCQk9IDA7CisJaW50ZXJuYWwtPmF2X2ZyYW1lX2NvYXJzZQk9IDEwOworCWludGVybmFsLT5hdl9mcmFtZV9maW5lCQk9IDIwOworCWludGVybmFsLT5zdGVwX3NpemUJCT0gMjsKKy8qCisJaWYgKChwUGFyYW1zLT5TcGVjdHJhbEludiA9PSBGRV9JUV9OT1JNQUwpIHx8IChwUGFyYW1zLT5TcGVjdHJhbEludiA9PSBGRV9JUV9BVVRPKSkKKwkJcFBhcmFtcy0+SVFMb2NrZWQgPSAwOworCWVsc2UKKwkJcFBhcmFtcy0+SVFMb2NrZWQgPSAxOworKi8KK30KKworc3RhdGljIGludCBzdGIwODk5X3dhaXRfZGlzZXFjX2ZpZm9fZW1wdHkoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCBpbnQgdGltZW91dCkKK3sKKwl1OCByZWcgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOworCisJd2hpbGUgKDEpIHsKKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNTVEFUVVMpOworCQlpZiAoIVNUQjA4OTlfR0VURklFTEQoRklGT0ZVTEwsIHJlZykpCisJCQlicmVhazsKKwkJaWYgKChqaWZmaWVzIC0gc3RhcnQpID4gdGltZW91dCkgeworCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsICJ0aW1lZCBvdXQgISEiKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiMDg5OV9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCByZWcsIGk7CisKKwlpZiAoY21kLT5tc2dfbGVuID4gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBlbmFibGUgRklGTyBwcmVjaGFyZ2UJKi8KKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRElTUFJFQ0hBUkdFLCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSwgcmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5tc2dfbGVuOyBpKyspIHsKKwkJLyogd2FpdCBmb3IgRklGTyBlbXB0eQkqLworCQlpZiAoc3RiMDg5OV93YWl0X2Rpc2VxY19maWZvX2VtcHR5KHN0YXRlLCAxMCkgPCAwKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRElTRklGTywgY21kLT5tc2dbaV0pOworCX0KKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSk7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRElTUFJFQ0hBUkdFLCByZWcsIDApOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfd2FpdF9kaXNlcWNfcnhpZGxlKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpCit7CisJdTggcmVnID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKworCXdoaWxlICghU1RCMDg5OV9HRVRGSUVMRChSWEVORCwgcmVnKSkgeworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU1JYX1NUMCk7CisJCWlmIChqaWZmaWVzIC0gc3RhcnQgPiB0aW1lb3V0KSB7CisJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgInRpbWVkIG91dCEhIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQltc2xlZXAoMTApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfcmVjdl9zbGF2ZV9yZXBseShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgKnJlcGx5KQoreworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHJlZywgbGVuZ3RoID0gMCwgaTsKKwlpbnQgcmVzdWx0OworCisJaWYgKHN0YjA4OTlfd2FpdF9kaXNlcWNfcnhpZGxlKHN0YXRlLCAxMDApIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU1JYX1NUMCk7CisJaWYgKFNUQjA4OTlfR0VURklFTEQoUlhFTkQsIHJlZykpIHsKKworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU1JYX1NUMSk7CisJCWxlbmd0aCA9IFNUQjA4OTlfR0VURklFTEQoRklGT0JZVEVOQlIsIHJlZyk7CisKKwkJaWYgKGxlbmd0aCA+IHNpemVvZiAocmVwbHktPm1zZykpIHsKKwkJCXJlc3VsdCA9IC1FT1ZFUkZMT1c7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVwbHktPm1zZ19sZW4gPSBsZW5ndGg7CisKKwkJLyogZXh0cmFjdCBkYXRhICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKwkJCXJlcGx5LT5tc2dbaV0gPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0ZJRk8pOworCX0KKworCXJldHVybiAwOworZXhpdDoKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc3RiMDg5OV93YWl0X2Rpc2VxY190eGlkbGUoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLCBpbnQgdGltZW91dCkKK3sKKwl1OCByZWcgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOworCisJd2hpbGUgKCFTVEIwODk5X0dFVEZJRUxEKFRYSURMRSwgcmVnKSkgeworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU1NUQVRVUyk7CisJCWlmIChqaWZmaWVzIC0gc3RhcnQgPiB0aW1lb3V0KSB7CisJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgInRpbWVkIG91dCEhIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQltc2xlZXAoMTApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X3NlbmRfZGlzZXFjX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCByZWcsIG9sZF9zdGF0ZTsKKworCS8qIHdhaXQgZm9yIGRpc2VxYyBpZGxlCSovCisJaWYgKHN0YjA4OTlfd2FpdF9kaXNlcWNfdHhpZGxlKHN0YXRlLCAxMDApIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSk7CisJb2xkX3N0YXRlID0gcmVnOworCS8qIHNldCB0byBidXJzdCBtb2RlCSovCisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRElTRVFDTU9ERSwgcmVnLCAweDAyKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChESVNQUkVDSEFSR0UsIHJlZywgMHgwMSk7CisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxLCByZWcpOworCXN3aXRjaCAoYnVyc3QpIHsKKwljYXNlIFNFQ19NSU5JX0E6CisJCS8qIHVubW9kdWxhdGVkCSovCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0ZJRk8sIDB4MDApOworCQlicmVhazsKKwljYXNlIFNFQ19NSU5JX0I6CisJCS8qIG1vZHVsYXRlZAkqLworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNGSUZPLCAweGZmKTsKKwkJYnJlYWs7CisJfQorCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChESVNQUkVDSEFSR0UsIHJlZywgMHgwMCk7CisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxLCByZWcpOworCS8qIHdhaXQgZm9yIGRpc2VxYyBpZGxlCSovCisJaWYgKHN0YjA4OTlfd2FpdF9kaXNlcWNfdHhpZGxlKHN0YXRlLCAxMDApIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiByZXN0b3JlIHN0YXRlCSovCisJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxLCBvbGRfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiMDg5OV9kaXNlcWNfaW5pdChzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCB0eF9kYXRhOworLyoKKwlzdHJ1Y3QgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseSByeF9kYXRhOworKi8KKwl1OCBmMjJfdHgsIGYyMl9yeCwgcmVnOworCisJdTMyIG1jbGssIHR4X2ZyZXEgPSAyMjAwMDsvKiBjb3VudCA9IDAsIGk7ICovCisJdHhfZGF0YS5tc2dbMF0gPSAweGUyOworCXR4X2RhdGEubXNnX2xlbiA9IDM7CisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDIpOworCVNUQjA4OTlfU0VURklFTERfVkFMKE9ORUNISVBfVFJYLCByZWcsIDApOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMiwgcmVnKTsKKworCS8qIGRpc2FibGUgVHggc3B5CSovCisJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDEpOworCVNUQjA4OTlfU0VURklFTERfVkFMKERJU0VRQ1JFU0VULCByZWcsIDEpOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0NOVFJMMSwgcmVnKTsKKworCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfRElTQ05UUkwxKTsKKwlTVEIwODk5X1NFVEZJRUxEX1ZBTChESVNFUUNSRVNFVCwgcmVnLCAwKTsKKwlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDEsIHJlZyk7CisKKwltY2xrID0gc3RiMDg5OV9nZXRfbWNsayhzdGF0ZSk7CisJZjIyX3R4ID0gbWNsayAvICh0eF9mcmVxICogMzIpOworCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0YyMiwgZjIyX3R4KTsgLyogRGlTRXFDIFR4IGZyZXEJKi8KKwlzdGF0ZS0+cnhfZnJlcSA9IDIwMDAwOworCWYyMl9yeCA9IG1jbGsgLyAoc3RhdGUtPnJ4X2ZyZXEgKiAzMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworLyoKKwl1OCByZWc7CisqLworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiR29pbmcgdG8gU2xlZXAgLi4gKFJlYWxseSB0aXJlZCAuLiA6LSkpIik7CisJLyogcG9zdCBwcm9jZXNzIGV2ZW50ICovCisJc3RiMDg5OV9wb3N0cHJvYyhzdGF0ZSwgU1RCMDg5OV9QT1NUUFJPQ19HUElPX1BPV0VSLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfd2FrZXVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWludCByYzsKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmICgocmMgPSBzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9TWU5UQ1RSTCwgU1RCMDg5OV9TRUxPU0NJKSkpCisJCXJldHVybiByYzsKKwkvKiBBY3RpdmF0ZSBhbGwgY2xvY2tzOyBEVkItUzIgcmVnaXN0ZXJzIGFyZSBpbmFjY2Vzc2libGUgb3RoZXJ3aXNlLiAqLworCWlmICgocmMgPSBzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9TVE9QQ0xLMSwgMHgwMCkpKQorCQlyZXR1cm4gcmM7CisJaWYgKChyYyA9IHN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1NUT1BDTEsyLCAweDAwKSkpCisJCXJldHVybiByYzsKKworCS8qIHBvc3QgcHJvY2VzcyBldmVudCAqLworCXN0YjA4OTlfcG9zdHByb2Moc3RhdGUsIFNUQjA4OTlfUE9TVFBST0NfR1BJT19QT1dFUiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJaW50IGk7CisJc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJJbml0aWFsaXppbmcgU1RCMDg5OSAuLi4gIik7CisKKwkvKiBpbml0IGRldmljZQkJKi8KKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgImluaXQgZGV2aWNlIik7CisJZm9yIChpID0gMDsgY29uZmlnLT5pbml0X2RldltpXS5hZGRyZXNzICE9IDB4ZmZmZjsgaSsrKQorCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgY29uZmlnLT5pbml0X2RldltpXS5hZGRyZXNzLCBjb25maWctPmluaXRfZGV2W2ldLmRhdGEpOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJpbml0IFMyIGRlbW9kIik7CisJLyogaW5pdCBTMiBkZW1vZAkqLworCWZvciAoaSA9IDA7IGNvbmZpZy0+aW5pdF9zMl9kZW1vZFtpXS5vZmZzZXQgIT0gMHhmZmZmOyBpKyspCisJCXN0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIFNUQjA4OTlfUzJERU1PRCwKKwkJCQkgICAgY29uZmlnLT5pbml0X3MyX2RlbW9kW2ldLmJhc2VfYWRkcmVzcywKKwkJCQkgICAgY29uZmlnLT5pbml0X3MyX2RlbW9kW2ldLm9mZnNldCwKKwkJCQkgICAgY29uZmlnLT5pbml0X3MyX2RlbW9kW2ldLmRhdGEpOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJpbml0IFMxIGRlbW9kIik7CisJLyogaW5pdCBTMSBkZW1vZAkqLworCWZvciAoaSA9IDA7IGNvbmZpZy0+aW5pdF9zMV9kZW1vZFtpXS5hZGRyZXNzICE9IDB4ZmZmZjsgaSsrKQorCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgY29uZmlnLT5pbml0X3MxX2RlbW9kW2ldLmFkZHJlc3MsIGNvbmZpZy0+aW5pdF9zMV9kZW1vZFtpXS5kYXRhKTsKKworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiaW5pdCBTMiBGRUMiKTsKKwkvKiBpbml0IFMyIGZlYwkJKi8KKwlmb3IgKGkgPSAwOyBjb25maWctPmluaXRfczJfZmVjW2ldLm9mZnNldCAhPSAweGZmZmY7IGkrKykKKwkJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkZFQywKKwkJCQkgICAgY29uZmlnLT5pbml0X3MyX2ZlY1tpXS5iYXNlX2FkZHJlc3MsCisJCQkJICAgIGNvbmZpZy0+aW5pdF9zMl9mZWNbaV0ub2Zmc2V0LAorCQkJCSAgICBjb25maWctPmluaXRfczJfZmVjW2ldLmRhdGEpOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJpbml0IFRTVCIpOworCS8qIGluaXQgdGVzdAkJKi8KKwlmb3IgKGkgPSAwOyBjb25maWctPmluaXRfdHN0W2ldLmFkZHJlc3MgIT0gMHhmZmZmOyBpKyspCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBjb25maWctPmluaXRfdHN0W2ldLmFkZHJlc3MsIGNvbmZpZy0+aW5pdF90c3RbaV0uZGF0YSk7CisKKwlzdGIwODk5X2luaXRfY2FsYyhzdGF0ZSk7CisJc3RiMDg5OV9kaXNlcWNfaW5pdChzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X3RhYmxlX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc3RiMDg5OV90YWIgKnRhYiwgaW50IG1heCwgaW50IHZhbCkKK3sKKwlpbnQgcmVzID0gMDsKKwlpbnQgbWluID0gMCwgbWVkOworCisJaWYgKHZhbCA8IHRhYlttaW5dLnJlYWQpCisJCXJlcyA9IHRhYlttaW5dLnJlYWw7CisJZWxzZSBpZiAodmFsID49IHRhYlttYXhdLnJlYWQpCisJCXJlcyA9IHRhYlttYXhdLnJlYWw7CisJZWxzZSB7CisJCXdoaWxlICgobWF4IC0gbWluKSA+IDEpIHsKKwkJCW1lZCA9IChtYXggKyBtaW4pIC8gMjsKKwkJCWlmICh2YWwgPj0gdGFiW21pbl0ucmVhZCAmJiB2YWwgPCB0YWJbbWVkXS5yZWFkKQorCQkJCW1heCA9IG1lZDsKKwkJCWVsc2UKKwkJCQltaW4gPSBtZWQ7CisJCX0KKwkJcmVzID0gKCh2YWwgLSB0YWJbbWluXS5yZWFkKSAqCisJCSAgICAgICAodGFiW21heF0ucmVhbCAtIHRhYlttaW5dLnJlYWwpIC8KKwkJICAgICAgICh0YWJbbWF4XS5yZWFkIC0gdGFiW21pbl0ucmVhZCkpICsKKwkJCXRhYlttaW5dLnJlYWw7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzdGIwODk5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZQkJPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwJPSAmc3RhdGUtPmludGVybmFsOworCisJaW50IHZhbDsKKwl1MzIgcmVnOworCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgeworCWNhc2UgU1lTX0RWQlM6CisJY2FzZSBTWVNfRFNTOgorCQlpZiAoaW50ZXJuYWwtPmxvY2spIHsKKwkJCXJlZyAgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1ZTVEFUVVMpOworCQkJaWYgKFNUQjA4OTlfR0VURklFTEQoVlNUQVRVU19MT0NLRURWSVQsIHJlZykpIHsKKworCQkJCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfQUdDSVFJTik7CisJCQkJdmFsID0gKHMzMikoczgpU1RCMDg5OV9HRVRGSUVMRChBR0NJUVZBTFVFLCByZWcpOworCisJCQkJKnN0cmVuZ3RoID0gc3RiMDg5OV90YWJsZV9sb29rdXAoc3RiMDg5OV9kdmJzcmZfdGFiLCBBUlJBWV9TSVpFKHN0YjA4OTlfZHZic3JmX3RhYikgLSAxLCB2YWwpOworCQkJCSpzdHJlbmd0aCArPSA3NTA7CisJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJBR0NJUVZBTFVFID0gMHglMDJ4LCBDID0gJWQgKiAwLjEgZEJtIiwKKwkJCQkJdmFsICYgMHhmZiwgKnN0cmVuZ3RoKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFNZU19EVkJTMjoKKwkJaWYgKGludGVybmFsLT5sb2NrKSB7CisJCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9ERU1PRCwgSUZfQUdDX0dBSU4pOworCQkJdmFsID0gU1RCMDg5OV9HRVRGSUVMRChJRl9BR0NfR0FJTiwgcmVnKTsKKworCQkJKnN0cmVuZ3RoID0gc3RiMDg5OV90YWJsZV9sb29rdXAoc3RiMDg5OV9kdmJzMnJmX3RhYiwgQVJSQVlfU0laRShzdGIwODk5X2R2YnMycmZfdGFiKSAtIDEsIHZhbCk7CisJCQkqc3RyZW5ndGggKz0gNzUwOworCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJJRl9BR0NfR0FJTiA9IDB4JTA0eCwgQyA9ICVkICogMC4xIGRCbSIsCisJCQkJdmFsICYgMHgzZmZmLCAqc3RyZW5ndGgpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiVW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZQkJPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwJPSAmc3RhdGUtPmludGVybmFsOworCisJdW5zaWduZWQgaW50IHZhbCwgcXVhbnQsIHF1YW50biA9IC0xLCBlc3QsIGVzdG4gPSAtMTsKKwl1OCBidWZbMl07CisJdTMyIHJlZzsKKworCXJlZyAgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1ZTVEFUVVMpOworCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgeworCWNhc2UgU1lTX0RWQlM6CisJY2FzZSBTWVNfRFNTOgorCQlpZiAoaW50ZXJuYWwtPmxvY2spIHsKKwkJCWlmIChTVEIwODk5X0dFVEZJRUxEKFZTVEFUVVNfTE9DS0VEVklULCByZWcpKSB7CisKKwkJCQlzdGIwODk5X3JlYWRfcmVncyhzdGF0ZSwgU1RCMDg5OV9OSVJNLCBidWYsIDIpOworCQkJCXZhbCA9IE1BS0VXT1JEMTYoYnVmWzBdLCBidWZbMV0pOworCisJCQkJKnNuciA9IHN0YjA4OTlfdGFibGVfbG9va3VwKHN0YjA4OTlfY25fdGFiLCBBUlJBWV9TSVpFKHN0YjA4OTlfY25fdGFiKSAtIDEsIHZhbCk7CisJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJOSVIgPSAweCUwMnglMDJ4ID0gJXUsIEMvTiA9ICVkICogMC4xIGRCbVxuIiwKKwkJCQkJYnVmWzBdLCBidWZbMV0sIHZhbCwgKnNucik7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTWVNfRFZCUzI6CisJCWlmIChpbnRlcm5hbC0+bG9jaykgeworCQkJcmVnID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgVVdQX0NOVFJMMSk7CisJCQlxdWFudCA9IFNUQjA4OTlfR0VURklFTEQoVVdQX0VTTjBfUVVBTlQsIHJlZyk7CisJCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBVV1BfU1RBVDIpOworCQkJZXN0ID0gU1RCMDg5OV9HRVRGSUVMRChFU04wX0VTVCwgcmVnKTsKKwkJCWlmIChlc3QgPT0gMSkKKwkJCQl2YWwgPSAzMDE7IC8qIEMvTiA9IDMwLjEgZEIgKi8KKwkJCWVsc2UgaWYgKGVzdCA9PSAyKQorCQkJCXZhbCA9IDI3MDsgLyogQy9OID0gMjcuMCBkQiAqLworCQkJZWxzZSB7CisJCQkJLyogcXVhbnRuID0gMTAwICogbG9nKHF1YW50XjIpICovCisJCQkJcXVhbnRuID0gc3RiMDg5OV90YWJsZV9sb29rdXAoc3RiMDg5OV9xdWFudF90YWIsIEFSUkFZX1NJWkUoc3RiMDg5OV9xdWFudF90YWIpIC0gMSwgcXVhbnQgKiAxMDApOworCQkJCS8qIGVzdG4gPSAxMDAgKiBsb2coZXN0KSAqLworCQkJCWVzdG4gPSBzdGIwODk5X3RhYmxlX2xvb2t1cChzdGIwODk5X2VzdF90YWIsIEFSUkFZX1NJWkUoc3RiMDg5OV9lc3RfdGFiKSAtIDEsIGVzdCk7CisJCQkJLyogc25yKGRCbS8xMCkgPSAtMTAqKGxvZyhlc3QpLWxvZyhxdWFudF4yKSkgPT4gc25yKGRCbS8xMCkgPSAoMTAwKmxvZyhxdWFudF4yKS0xMDAqbG9nKGVzdCkpLzEwICovCisJCQkJdmFsID0gKHF1YW50biAtIGVzdG4pIC8gMTA7CisJCQl9CisJCQkqc25yID0gdmFsOworCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJFcy9OMCBxdWFudCA9ICVkICglZCkgZXN0aW1hdGUgPSAldSAoJWQpLCBDL04gPSAlZCAqIDAuMSBkQm0iLAorCQkJCXF1YW50LCBxdWFudG4sIGVzdCwgZXN0biwgdmFsKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIlVuc3VwcG9ydGVkIGRlbGl2ZXJ5IHN5c3RlbSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZlX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZQkJPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwJPSAmc3RhdGUtPmludGVybmFsOworCXU4IHJlZzsKKwkqc3RhdHVzID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgeworCWNhc2UgU1lTX0RWQlM6CisJY2FzZSBTWVNfRFNTOgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRlbGl2ZXJ5IHN5c3RlbSBEVkItUy9EU1MiKTsKKwkJaWYgKGludGVybmFsLT5sb2NrKSB7CisJCQlyZWcgID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9WU1RBVFVTKTsKKwkJCWlmIChTVEIwODk5X0dFVEZJRUxEKFZTVEFUVVNfTE9DS0VEVklULCByZWcpKSB7CisJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tLT4gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSyIpOworCQkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfTE9DSzsKKworCQkJCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfUExQQVJNKTsKKwkJCQlpZiAoU1RCMDg5OV9HRVRGSUVMRChWSVRDVVJQVU4sIHJlZykpIHsKKwkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICItLS0tLS0tLT4gRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQyIpOworCQkJCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJIHwgRkVfSEFTX1NZTkM7CisJCQkJCS8qIHBvc3QgcHJvY2VzcyBldmVudCAqLworCQkJCQlzdGIwODk5X3Bvc3Rwcm9jKHN0YXRlLCBTVEIwODk5X1BPU1RQUk9DX0dQSU9fTE9DSywgMSk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgU1lTX0RWQlMyOgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRlbGl2ZXJ5IHN5c3RlbSBEVkItUzIiKTsKKwkJaWYgKGludGVybmFsLT5sb2NrKSB7CisJCQlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBETURfU1RBVDIpOworCQkJaWYgKFNUQjA4OTlfR0VURklFTEQoVVdQX0xPQ0ssIHJlZykgJiYgU1RCMDg5OV9HRVRGSUVMRChDU01fTE9DSywgcmVnKSkgeworCQkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCSJVV1AgJiBDU00gTG9jayAhIC0tLT4gRFZCLVMyIEZFX0hBU19DQVJSSUVSIik7CisKKwkJCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0NGR1BERUxTVEFUVVMxKTsKKwkJCQlpZiAoU1RCMDg5OV9HRVRGSUVMRChDRkdQREVMU1RBVFVTX0xPQ0ssIHJlZykpIHsKKwkJCQkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwkJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCQkiUGFja2V0IERlbGluZWF0b3IgTG9ja2VkICEgLS0tLS0+IERWQi1TMiBGRV9IQVNfTE9DSyIpOworCisJCQkJfQorCQkJCWlmIChTVEIwODk5X0dFVEZJRUxEKENPTlRJTlVPVVNfU1RSRUFNLCByZWcpKSB7CisJCQkJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJCQkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLAorCQkJCQkJIlBhY2tldCBEZWxpbmVhdG9yIGZvdW5kIFZJVEVSQkkgISAtLS0tLT4gRFZCLVMyIEZFX0hBU19WSVRFUkJJIik7CisJCQkJfQorCQkJCWlmIChTVEIwODk5X0dFVEZJRUxEKEFDQ0VQVEVEX1NUUkVBTSwgcmVnKSkgeworCQkJCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCQkJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwKKwkJCQkJCSJQYWNrZXQgRGVsaW5lYXRvciBmb3VuZCBTWU5DICEgLS0tLS0+IERWQi1TMiBGRV9IQVNfU1lOQyIpOworCQkJCQkvKiBwb3N0IHByb2Nlc3MgZXZlbnQgKi8KKwkJCQkJc3RiMDg5OV9wb3N0cHJvYyhzdGF0ZSwgU1RCMDg5OV9QT1NUUFJPQ19HUElPX0xPQ0ssIDEpOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIlVuc3VwcG9ydGVkIGRlbGl2ZXJ5IHN5c3RlbSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzdGIwODk5X2dldF9lcnJvcgorICogdml0ZXJiaSBlcnJvciBmb3IgRFZCLVMvRFNTCisgKiBwYWNrZXQgZXJyb3IgZm9yIERWQi1TMgorICogQml0IEVycm9yIFJhdGUgb3IgUGFja2V0IEVycm9yIFJhdGUgKiAxMCBeIDcKKyAqLworc3RhdGljIGludCBzdGIwODk5X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUJCT0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsCT0gJnN0YXRlLT5pbnRlcm5hbDsKKworCXU4ICBsc2IsIG1zYjsKKwl1MzIgaTsKKworCSpiZXIgPSAwOworCisJc3dpdGNoIChzdGF0ZS0+ZGVsc3lzKSB7CisJY2FzZSBTWVNfRFZCUzoKKwljYXNlIFNZU19EU1M6CisJCWlmIChpbnRlcm5hbC0+bG9jaykgeworCQkJLyogYXZlcmFnZSA1IEJFUiB2YWx1ZXMJKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQlsc2IgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0VDTlQxTCk7CisJCQkJbXNiID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9FQ05UMU0pOworCQkJCSpiZXIgKz0gTUFLRVdPUkQxNihtc2IsIGxzYik7CisJCQl9CisJCQkqYmVyIC89IDU7CisJCQkvKiBWaXRlcmJpIENoZWNrCSovCisJCQlpZiAoU1RCMDg5OV9HRVRGSUVMRChWU1RBVFVTX1BSRlZJVCwgaW50ZXJuYWwtPnZfc3RhdHVzKSkgeworCQkJCS8qIEVycm9yIFJhdGUJCSovCisJCQkJKmJlciAqPSA5NzY2OworCQkJCS8qIGJlciA9IGJlciAqIDEwIF4gNwkqLworCQkJCSpiZXIgLz0gKC0xICsgKDEgPDwgKDIgKiBTVEIwODk5X0dFVEZJRUxEKE5PRSwgaW50ZXJuYWwtPmVycl9jdHJsKSkpKTsKKwkJCQkqYmVyIC89IDg7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTWVNfRFZCUzI6CisJCWlmIChpbnRlcm5hbC0+bG9jaykgeworCQkJLyogQXZlcmFnZSA1IFBFUiB2YWx1ZXMJKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQlsc2IgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0VDTlQxTCk7CisJCQkJbXNiID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9FQ05UMU0pOworCQkJCSpiZXIgKz0gTUFLRVdPUkQxNihtc2IsIGxzYik7CisJCQl9CisJCQkvKiBiZXIgPSBiZXIgKiAxMCBeIDcJKi8KKwkJCSpiZXIgKj0gMTAwMDAwMDA7CisJCQkqYmVyIC89ICgtMSArICgxIDw8ICg0ICsgMiAqIFNUQjA4OTlfR0VURklFTEQoTk9FLCBpbnRlcm5hbC0+ZXJyX2N0cmwpKSkpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiVW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMENGRywgMHg4Mik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMUNGRywgMHgwMik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMkNGRywgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMENGRywgMHgwMik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMUNGRywgMHgwMik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0dQSU8wMkNGRywgMHg4Mik7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9HUElPMDBDRkcsIDB4ODIpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9HUElPMDFDRkcsIDB4ODIpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9HUElPMDJDRkcsIDB4ODIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwODk5X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3RiMDg5OV9pbnRlcm5hbCAqaW50ZXJuYWwgPSAmc3RhdGUtPmludGVybmFsOworCisJdTggZGl2LCByZWc7CisKKwkvKiB3YWl0IGZvciBkaXNlcWMgaWRsZQkqLworCWlmIChzdGIwODk5X3dhaXRfZGlzZXFjX3R4aWRsZShzdGF0ZSwgMTAwKSA8IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJc3dpdGNoICh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PTjoKKwkJZGl2ID0gKGludGVybmFsLT5tYXN0ZXJfY2xrIC8gMTAwKSAvIDU2MzI7CisJCWRpdiA9IChkaXYgKyA1KSAvIDEwOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNFUUNPQ0ZHLCAweDY2KTsKKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9BQ1JQUkVTQyk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEFDUlBSRVNDLCByZWcsIDB4MDMpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9BQ1JQUkVTQywgcmVnKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfQUNSRElWMSwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0RJU0VRQ09DRkcsIDB4MjApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdGIwODk5X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCit7CisJaW50IGkyY19zdGF0OworCXN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaTJjX3N0YXQgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0kyQ1JQVCk7CisJaWYgKGkyY19zdGF0IDwgMCkKKwkJZ290byBlcnI7CisKKwlpZiAoZW5hYmxlKSB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiRW5hYmxpbmcgSTJDIFJlcGVhdGVyIC4uLiIpOworCQlpMmNfc3RhdCB8PSAgU1RCMDg5OV9JMkNUT047CisJCWlmIChzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9JMkNSUFQsIGkyY19zdGF0KSA8IDApCisJCQlnb3RvIGVycjsKKwl9IGVsc2UgeworCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRpc2FibGluZyBJMkMgUmVwZWF0ZXIgLi4uIik7CisJCWkyY19zdGF0ICY9IH5TVEIwODk5X0kyQ1RPTjsKKwkJaWYgKHN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0kyQ1JQVCwgaTJjX3N0YXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gMDsKK2VycjoKKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgIkkyQyBSZXBlYXRlciBjb250cm9sIGZhaWxlZCIpOworCXJldHVybiAtRVJFTU9URUlPOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBDT05WRVJUMzIodTMyIHgsIGNoYXIgKnN0cikKK3sKKwkqc3RyKysJPSAoeCA+PiAyNCkgJiAweGZmOworCSpzdHIrKwk9ICh4ID4+IDE2KSAmIDB4ZmY7CisJKnN0cisrCT0gKHggPj4gIDgpICYgMHhmZjsKKwkqc3RyKysJPSAoeCA+PiAgMCkgJiAweGZmOworCSpzdHIJPSAnXDAnOworfQorCitpbnQgc3RiMDg5OV9nZXRfZGV2X2lkKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBjaGlwX2lkLCByZWxlYXNlOworCXUxNiBpZDsKKwl1MzIgZGVtb2RfdmVyID0gMCwgZmVjX3ZlciA9IDA7CisJY2hhciBkZW1vZF9zdHJbNV0gPSB7IDAgfTsKKwljaGFyIGZlY19zdHJbNV0gPSB7IDAgfTsKKworCWlkID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ERVZfSUQpOworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiSUQgcmVnPVsweCUwMnhdIiwgaWQpOworCWNoaXBfaWQgPSBTVEIwODk5X0dFVEZJRUxEKENISVBfSUQsIGlkKTsKKwlyZWxlYXNlID0gU1RCMDg5OV9HRVRGSUVMRChDSElQX1JFTCwgaWQpOworCisJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsICJEZXZpY2UgSUQ9WyVkXSwgUmVsZWFzZT1bJWRdIiwKKwkJY2hpcF9pZCwgcmVsZWFzZSk7CisKKwlDT05WRVJUMzIoU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgRE1EX0NPUkVfSUQpLCAoY2hhciAqKSZkZW1vZF9zdHIpOworCisJZGVtb2RfdmVyID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgRE1EX1ZFUlNJT05fSUQpOworCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0VSUk9SLCAxLCAiRGVtb2R1bGF0b3IgQ29yZSBJRD1bJXNdLCBWZXJzaW9uPVslZF0iLCAoY2hhciAqKSAmZGVtb2Rfc3RyLCBkZW1vZF92ZXIpOworCUNPTlZFUlQzMihTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkZFQywgRkVDX0NPUkVfSURfUkVHKSwgKGNoYXIgKikmZmVjX3N0cik7CisJZmVjX3ZlciA9IFNUQjA4OTlfUkVBRF9TMlJFRyhTVEIwODk5X1MyRkVDLCBGRUNfVkVSX0lEX1JFRyk7CisJaWYgKCEgKGNoaXBfaWQgPiAwKSkgeworCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgImNvdWxkbid0IGZpbmQgYSBTVEIgMDg5OSIpOworCisJCXJldHVybiAtRU5PREVWOworCX0KKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgIkZFQyBDb3JlIElEPVslc10sIFZlcnNpb249WyVkXSIsIChjaGFyKikgJmZlY19zdHIsIGZlY192ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YjA4OTlfc2V0X2RlbGl2ZXJ5KHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCByZWc7CisJdTggc3RvcF9jbGtbMl07CisKKwlzdG9wX2Nsa1swXSA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfU1RPUENMSzEpOworCXN0b3BfY2xrWzFdID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9TVE9QQ0xLMik7CisKKwlzd2l0Y2ggKHN0YXRlLT5kZWxzeXMpIHsKKwljYXNlIFNZU19EVkJTOgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkRlbGl2ZXJ5IFN5c3RlbSAtLSBEVkItUyIpOworCQkvKiBGRUNNL1ZpdGVyYmkgT04JKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9SU1ZEMCwgcmVnLCAwKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9WSVRFUkJJX09OLCByZWcsIDEpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNLCByZWcpOworCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1JTVUxDLCAweGIxKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVFNVTEMsIDB4NDApOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9SU0xMQywgMHg0Mik7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTTFBMLCAweDEyKTsKKworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUyk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEZSRVNMRFBDLCByZWcsIDEpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMsIHJlZyk7CisKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DSEs4UFNLLCBzdG9wX2Nsa1swXSwgMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tGRUMxMDgsIHN0b3BfY2xrWzBdLCAxKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS0ZFQzIxNiwgc3RvcF9jbGtbMF0sIDEpOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tQS0RMSU4xMDgsIHN0b3BfY2xrWzFdLCAxKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS1BLRExJTjIxNiwgc3RvcF9jbGtbMV0sIDEpOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tJTlRCVUYyMTYsIHN0b3BfY2xrWzBdLCAxKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS0NPUkUyMTYsIHN0b3BfY2xrWzBdLCAwKTsKKworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTVE9QX0NLUzJETUQxMDgsIHN0b3BfY2xrWzFdLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfRFZCUzI6CisJCS8qIEZFQ00vVml0ZXJiaSBPRkYJKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9SU1ZEMCwgcmVnLCAwKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9WSVRFUkJJX09OLCByZWcsIDApOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNLCByZWcpOworCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1JTVUxDLCAweGIxKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVFNVTEMsIDB4NDIpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9SU0xMQywgMHg0MCk7CisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1RTTFBMLCAweDAyKTsKKworCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X1RTVFJFUyk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKEZSRVNMRFBDLCByZWcsIDApOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMsIHJlZyk7CisKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DSEs4UFNLLCBzdG9wX2Nsa1swXSwgMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tGRUMxMDgsIHN0b3BfY2xrWzBdLCAwKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS0ZFQzIxNiwgc3RvcF9jbGtbMF0sIDApOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tQS0RMSU4xMDgsIHN0b3BfY2xrWzFdLCAwKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS1BLRExJTjIxNiwgc3RvcF9jbGtbMV0sIDApOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tJTlRCVUYyMTYsIHN0b3BfY2xrWzBdLCAwKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS0NPUkUyMTYsIHN0b3BfY2xrWzBdLCAwKTsKKworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTVE9QX0NLUzJETUQxMDgsIHN0b3BfY2xrWzFdLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfRFNTOgorCQkvKiBGRUNNL1ZpdGVyYmkgT04JKi8KKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9SU1ZEMCwgcmVnLCAxKTsKKwkJU1RCMDg5OV9TRVRGSUVMRF9WQUwoRkVDTV9WSVRFUkJJX09OLCByZWcsIDEpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9GRUNNLCByZWcpOworCisJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X1JTVUxDLCAweGExKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVFNVTEMsIDB4NjEpOworCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9SU0xMQywgMHg0Mik7CisKKwkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9UU1RSRVMpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChGUkVTTERQQywgcmVnLCAxKTsKKwkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfVFNUUkVTLCByZWcpOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0hLOFBTSywgc3RvcF9jbGtbMF0sIDEpOworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTVE9QX0NLRkVDMTA4LCBzdG9wX2Nsa1swXSwgMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tGRUMyMTYsIHN0b3BfY2xrWzBdLCAxKTsKKworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTVE9QX0NLUEtETElOMTA4LCBzdG9wX2Nsa1sxXSwgMSk7CisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tQS0RMSU4yMTYsIHN0b3BfY2xrWzFdLCAxKTsKKworCQlTVEIwODk5X1NFVEZJRUxEX1ZBTChTVE9QX0NLQ09SRTIxNiwgc3RvcF9jbGtbMF0sIDApOworCisJCVNUQjA4OTlfU0VURklFTERfVkFMKFNUT1BfQ0tTMkRNRDEwOCwgc3RvcF9jbGtbMV0sIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgIlVuc3VwcG9ydGVkIGRlbGl2ZXJ5IHN5c3RlbSIpOworCQlicmVhazsKKwl9CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoU1RPUF9DS0FEQ0kxMDgsIHN0b3BfY2xrWzBdLCAwKTsKKwlzdGIwODk5X3dyaXRlX3JlZ3Moc3RhdGUsIFNUQjA4OTlfU1RPUENMSzEsIHN0b3BfY2xrLCAyKTsKK30KKworLyoKKyAqIHN0YjA4OTlfc2V0X2l0ZXJhdGlvbnMKKyAqIHNldCB0aGUgTERQQyBpdGVyYXRpb24gc2NhbGUgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgc3RiMDg5OV9zZXRfaXRlcmF0aW9ucyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgKmludGVybmFsID0gJnN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CisKKwlzMzIgaXRlcl9zY2FsZTsKKwl1MzIgcmVnOworCisJaXRlcl9zY2FsZSA9IDE3ICogKGludGVybmFsLT5tYXN0ZXJfY2xrIC8gMTAwMCk7CisJaXRlcl9zY2FsZSArPSA0MTAwMDA7CisJaXRlcl9zY2FsZSAvPSAoaW50ZXJuYWwtPnNyYXRlIC8gMTAwMDAwMCk7CisJaXRlcl9zY2FsZSAvPSAxMDAwOworCisJaWYgKGl0ZXJfc2NhbGUgPiBjb25maWctPmxkcGNfbWF4X2l0ZXIpCisJCWl0ZXJfc2NhbGUgPSBjb25maWctPmxkcGNfbWF4X2l0ZXI7CisKKwlyZWcgPSBTVEIwODk5X1JFQURfUzJSRUcoU1RCMDg5OV9TMkRFTU9ELCBNQVhfSVRFUik7CisJU1RCMDg5OV9TRVRGSUVMRF9WQUwoTUFYX0lURVJBVElPTlMsIHJlZywgaXRlcl9zY2FsZSk7CisJc3RiMDg5OV93cml0ZV9zMnJlZyhzdGF0ZSwgU1RCMDg5OV9TMkRFTU9ELCBTVEIwODk5X0JBU0VfTUFYX0lURVIsIFNUQjA4OTlfT0ZGMF9NQVhfSVRFUiwgcmVnKTsKK30KKworc3RhdGljIGVudW0gZHZiZmVfc2VhcmNoIHN0YjA4OTlfc2VhcmNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0YjA4OTlfcGFyYW1zICppX3BhcmFtcyA9ICZzdGF0ZS0+cGFyYW1zOworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbCA9ICZzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqcHJvcHMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCXUzMiBTZWFyY2hSYW5nZSwgZ2FpbjsKKworCWlfcGFyYW1zLT5mcmVxCT0gcC0+ZnJlcXVlbmN5OworCWlfcGFyYW1zLT5zcmF0ZSA9IHAtPnUucXBzay5zeW1ib2xfcmF0ZTsKKwlzdGF0ZS0+ZGVsc3lzID0gcHJvcHMtPmRlbGl2ZXJ5X3N5c3RlbTsKKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgImRlbGl2ZXJ5IHN5c3RlbT0lZCIsIHN0YXRlLT5kZWxzeXMpOworCisJU2VhcmNoUmFuZ2UgPSAxMDAwMDAwMDsKKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkZyZXF1ZW5jeT0lZCwgU3JhdGU9JWQiLCBpX3BhcmFtcy0+ZnJlcSwgaV9wYXJhbXMtPnNyYXRlKTsKKwkvKiBjaGVja2luZyBTZWFyY2ggUmFuZ2UgaXMgbWVhbmluZ2xlc3MgZm9yIGEgZml4ZWQgMyBNaHoJCQkqLworCWlmIChJTlJBTkdFKGlfcGFyYW1zLT5zcmF0ZSwgMTAwMDAwMCwgNDUwMDAwMDApKSB7CisJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiUGFyYW1ldGVycyBJTiBSQU5HRSIpOworCQlzdGIwODk5X3NldF9kZWxpdmVyeShzdGF0ZSk7CisKKwkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9yZnNpZ2dhaW4pIHsKKwkJCWlmIChpbnRlcm5hbC0+c3JhdGUgPiAxNTAwMDAwMCkKKwkJCQlnYWluID0gIDg7IC8qIDE1TWIgPCBzcmF0ZSA8IDQ1TWIsIGdhaW4gPSA4ZEIJKi8KKwkJCWVsc2UgaWYgKGludGVybmFsLT5zcmF0ZSA+IDUwMDAwMDApCisJCQkJZ2FpbiA9IDEyOyAvKiAgNU1iIDwgc3JhdGUgPCAxNU1iLCBnYWluID0gMTJkQgkqLworCQkJZWxzZQorCQkJCWdhaW4gPSAxNDsgLyogIDFNYiA8IHNyYXRlIDwgIDVNYiwgZ2FpbiA9IDE0ZGIJKi8KKwkJCXN0YXRlLT5jb25maWctPnR1bmVyX3NldF9yZnNpZ2dhaW4oZmUsIGdhaW4pOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5zcmF0ZSA8PSA1MDAwMDAwKQorCQkJc3RiMDg5OV9zZXRfbWNsayhzdGF0ZSwgY29uZmlnLT5sb19jbGspOworCQllbHNlCisJCQlzdGIwODk5X3NldF9tY2xrKHN0YXRlLCBjb25maWctPmhpX2Nsayk7CisKKwkJc3dpdGNoIChzdGF0ZS0+ZGVsc3lzKSB7CisJCWNhc2UgU1lTX0RWQlM6CisJCWNhc2UgU1lTX0RTUzoKKwkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiRFZCLVMgZGVsaXZlcnkgc3lzdGVtIik7CisJCQlpbnRlcm5hbC0+ZnJlcQk9IGlfcGFyYW1zLT5mcmVxOworCQkJaW50ZXJuYWwtPnNyYXRlCT0gaV9wYXJhbXMtPnNyYXRlOworCQkJLyoKKwkJCSAqIHNlYXJjaCA9IHVzZXIgc2VhcmNoIHJhbmdlICsKKwkJCSAqCSAgICA1MDBLaHogKworCQkJICoJICAgIDIgKiBUdW5lcl9zdGVwX3NpemUgKworCQkJICoJICAgIDEwJSBvZiB0aGUgc3ltYm9sIHJhdGUKKwkJCSAqLworCQkJaW50ZXJuYWwtPnNyY2hfcmFuZ2UJPSBTZWFyY2hSYW5nZSArIDE1MDAwMDAgKyAoaV9wYXJhbXMtPnNyYXRlIC8gNSk7CisJCQlpbnRlcm5hbC0+ZGVyb3RfcGVyY2VudAk9IDMwOworCisJCQkvKiBXaGF0IHRvIGRvIGZvciB0dW5lcnMgaGF2aW5nIG5vIGJhbmR3aWR0aCBzZXR1cCA/CSovCisJCQkvKiBlbmFibGUgdHVuZXIgSS9PICovCisJCQlzdGIwODk5X2kyY19nYXRlX2N0cmwoJnN0YXRlLT5mcm9udGVuZCwgMSk7CisKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKQorCQkJCXN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsICgxMyAqIChzdGIwODk5X2NhcnJfd2lkdGgoc3RhdGUpICsgU2VhcmNoUmFuZ2UpKSAvIDEwKTsKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfYmFuZHdpZHRoKQorCQkJCXN0YXRlLT5jb25maWctPnR1bmVyX2dldF9iYW5kd2lkdGgoZmUsICZpbnRlcm5hbC0+dHVuZXJfYncpOworCisJCQkvKiBkaXNhYmxlIHR1bmVyIEkvTyAqLworCQkJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDApOworCisJCQkvKiBTZXQgRFZCLVMxIEFHQwkJKi8KKwkJCXN0YjA4OTlfd3JpdGVfcmVnKHN0YXRlLCBTVEIwODk5X0FHQ1JGQ0ZHLCAweDExKTsKKworCQkJLyogUnVuIHRoZSBzZWFyY2ggYWxnb3JpdGhtCSovCisJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgInJ1bm5pbmcgRFZCLVMgc2VhcmNoIGFsZ28gLi4iKTsKKwkJCWlmIChzdGIwODk5X2R2YnNfYWxnbyhzdGF0ZSkJPT0gUkFOR0VPSykgeworCQkJCWludGVybmFsLT5sb2NrCQk9IDE7CisJCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsCisJCQkJCSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBEVkItUyBMT0NLICEiKTsKKworLy8JCQkJc3RiMDg5OV93cml0ZV9yZWcoc3RhdGUsIFNUQjA4OTlfRVJSQ1RSTDEsIDB4M2QpOyAvKiBWaXRlcmJpIEVycm9ycwkqLworLy8JCQkJaW50ZXJuYWwtPnZfc3RhdHVzID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9WU1RBVFVTKTsKKy8vCQkJCWludGVybmFsLT5lcnJfY3RybCA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfRVJSQ1RSTDEpOworLy8JCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJWU1RBVFVTPTB4JTAyeCIsIGludGVybmFsLT52X3N0YXR1cyk7CisvLwkJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkVSUl9DVFJMPTB4JTAyeCIsIGludGVybmFsLT5lcnJfY3RybCk7CisKKwkJCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfU1VDQ0VTUzsKKwkJCX0gZWxzZSB7CisJCQkJaW50ZXJuYWwtPmxvY2sJCT0gMDsKKworCQkJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9GQUlMRUQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTWVNfRFZCUzI6CisJCQlpbnRlcm5hbC0+ZnJlcQkJCT0gaV9wYXJhbXMtPmZyZXE7CisJCQlpbnRlcm5hbC0+c3JhdGUJCQk9IGlfcGFyYW1zLT5zcmF0ZTsKKwkJCWludGVybmFsLT5zcmNoX3JhbmdlCQk9IFNlYXJjaFJhbmdlOworCisJCQkvKiBlbmFibGUgdHVuZXIgSS9PICovCisJCQlzdGIwODk5X2kyY19nYXRlX2N0cmwoJnN0YXRlLT5mcm9udGVuZCwgMSk7CisKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKQorCQkJCXN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgoZmUsIChzdGIwODk5X2NhcnJfd2lkdGgoc3RhdGUpICsgU2VhcmNoUmFuZ2UpKTsKKwkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfYmFuZHdpZHRoKQorCQkJCXN0YXRlLT5jb25maWctPnR1bmVyX2dldF9iYW5kd2lkdGgoZmUsICZpbnRlcm5hbC0+dHVuZXJfYncpOworCisJCQkvKiBkaXNhYmxlIHR1bmVyIEkvTyAqLworCQkJc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKCZzdGF0ZS0+ZnJvbnRlbmQsIDApOworCisvLwkJCXBQYXJhbXMtPlNwZWN0cmFsSW52CQk9IHBTZWFyY2gtPklRX0ludmVyc2lvbjsKKworCQkJLyogU2V0IERWQi1TMiBBR0MJCSovCisJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9BR0NSRkNGRywgMHgxYyk7CisKKwkJCS8qIFNldCBJdGVyU2NhbGUgPWYoTUNMSyxTWU1CKQkqLworCQkJc3RiMDg5OV9zZXRfaXRlcmF0aW9ucyhzdGF0ZSk7CisKKwkJCS8qIFJ1biB0aGUgc2VhcmNoIGFsZ29yaXRobQkqLworCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfREVCVUcsIDEsICJydW5uaW5nIERWQi1TMiBzZWFyY2ggYWxnbyAuLiIpOworCQkJaWYgKHN0YjA4OTlfZHZiczJfYWxnbyhzdGF0ZSkJPT0gRFZCUzJfRkVDX0xPQ0spIHsKKwkJCQlpbnRlcm5hbC0+bG9jawkJPSAxOworCQkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0RFQlVHLCAxLAorCQkJCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gRFZCLVMyIExPQ0sgISIpOworCisvLwkJCQlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9FUlJDVFJMMSwgMHhiNik7IC8qIFBhY2tldCBFcnJvcnMJKi8KKy8vCQkJCWludGVybmFsLT52X3N0YXR1cyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfVlNUQVRVUyk7CisvLwkJCQlpbnRlcm5hbC0+ZXJyX2N0cmwgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0VSUkNUUkwxKTsKKworCQkJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9TVUNDRVNTOworCQkJfSBlbHNlIHsKKwkJCQlpbnRlcm5hbC0+bG9jawkJPSAwOworCisJCQkJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX0ZBSUxFRDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsICJVbnN1cHBvcnRlZCBkZWxpdmVyeSBzeXN0ZW0iKTsKKwkJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9JTlZBTElEOworCQl9CisJfQorCisJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX0VSUk9SOworfQorLyoKKyAqIHN0YjA4OTlfdHJhY2sKKyAqIHBlcmlvZGljYWxseSBjaGVjayB0aGUgc2lnbmFsIGxldmVsIGFnYWluc3QgYSBzcGVjaWZpZWQKKyAqIHRocmVzaG9sZCBsZXZlbCBhbmQgcGVyZm9ybSBkZXJvdGF0b3IgY2VudGVyaW5nLgorICogY2FsbGVkIG9uY2Ugd2UgaGF2ZSBhIGxvY2sgZnJvbSBhIHN1Y2Nlc2Z1bCBzZWFyY2gKKyAqIGV2ZW50LgorICoKKyAqIFdpbGwgYmUgY2FsbGVkIHBlcmlvZGljYWxseSBjYWxsZWQgdG8gbWFpbnRhaW4gdGhlCisgKiBsb2NrLgorICoKKyAqIFdpbGwgYmUgdXNlZCB0byBnZXQgcGFyYW1ldGVycyBhcyB3ZWxsIGFzIGluZm8gZnJvbQorICogdGhlIGRlY29kZWQgYmFzZWJhbmQgaGVhZGVyCisgKgorICogT25jZSBhIG5ldyBsb2NrIGhhcyBlc3RhYmxpc2hlZCwgdGhlIGludGVybmFsIHN0YXRlCisgKiBmcmVxdWVuY3kgKGludGVybmFsLT5mcmVxKSBpcyB1cGRhdGVkCisgKi8KK3N0YXRpYyBpbnQgc3RiMDg5OV90cmFjayhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA4OTlfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlCQk9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdGIwODk5X2ludGVybmFsICppbnRlcm5hbAk9ICZzdGF0ZS0+aW50ZXJuYWw7CisKKwlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9ERUJVRywgMSwgIkdldCBwYXJhbXMiKTsKKwlwLT51LnFwc2suc3ltYm9sX3JhdGUgPSBpbnRlcm5hbC0+c3JhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gZHZiZmVfYWxnbyBzdGIwODk5X2Zyb250ZW5kX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIERWQkZFX0FMR09fQ1VTVE9NOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc3RiMDg5OV9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUgCQkJPSAiU1RCMDg5OSBNdWx0aXN0YW5kYXJkIiwKKwkJLnR5cGUgCQkJPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbgkJPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4IAkJPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplCT0gMCwKKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAorCQkuc3ltYm9sX3JhdGVfbWluIAk9ICA1MDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfbWF4IAk9IDQ1MDAwMDAwLAorCisJCS5jYXBzIAkJCT0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPCXwKKwkJCQkJICBGRV9DQU5fRkVDX0FVVE8JfAorCQkJCQkgIEZFX0NBTl9RUFNLCisJfSwKKworCS5yZWxlYXNlCQkJPSBzdGIwODk5X3JlbGVhc2UsCisJLmluaXQJCQkJPSBzdGIwODk5X2luaXQsCisJLnNsZWVwCQkJCT0gc3RiMDg5OV9zbGVlcCwKKy8vCS53YWtldXAJCQkJPSBzdGIwODk5X3dha2V1cCwKKworCS5pMmNfZ2F0ZV9jdHJsCQkJPSBzdGIwODk5X2kyY19nYXRlX2N0cmwsCisKKwkuZ2V0X2Zyb250ZW5kX2FsZ28JCT0gc3RiMDg5OV9mcm9udGVuZF9hbGdvLAorCS5zZWFyY2gJCQkJPSBzdGIwODk5X3NlYXJjaCwKKwkudHJhY2sJCQkJPSBzdGIwODk5X3RyYWNrLAorCS5nZXRfZnJvbnRlbmQJCQk9IHN0YjA4OTlfZ2V0X2Zyb250ZW5kLAorCisKKwkucmVhZF9zdGF0dXMJCQk9IHN0YjA4OTlfcmVhZF9zdGF0dXMsCisJLnJlYWRfc25yCQkJPSBzdGIwODk5X3JlYWRfc25yLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aAkJPSBzdGIwODk5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX2JlcgkJCT0gc3RiMDg5OV9yZWFkX2JlciwKKworCS5zZXRfdm9sdGFnZQkJCT0gc3RiMDg5OV9zZXRfdm9sdGFnZSwKKwkuc2V0X3RvbmUJCQk9IHN0YjA4OTlfc2V0X3RvbmUsCisKKwkuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZAkJPSBzdGIwODk5X3NlbmRfZGlzZXFjX21zZywKKwkuZGlzZXFjX3JlY3Zfc2xhdmVfcmVwbHkJPSBzdGIwODk5X3JlY3Zfc2xhdmVfcmVwbHksCisJLmRpc2VxY19zZW5kX2J1cnN0CQk9IHN0YjA4OTlfc2VuZF9kaXNlcWNfYnVyc3QsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGIwODk5X2F0dGFjaChzdHJ1Y3Qgc3RiMDg5OV9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwllbnVtIHN0YjA4OTlfaW52ZXJzaW9uIGludmVyc2lvbjsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzdGIwODk5X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwlpbnZlcnNpb24JCQkJPSBjb25maWctPmludmVyc2lvbjsKKwlzdGF0ZS0+dmVyYm9zZQkJCQk9ICZ2ZXJib3NlOworCXN0YXRlLT5jb25maWcJCQkJPSBjb25maWc7CisJc3RhdGUtPmkyYwkJCQk9IGkyYzsKKwlzdGF0ZS0+ZnJvbnRlbmQub3BzCQkJPSBzdGIwODk5X29wczsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdgk9IHN0YXRlOworCXN0YXRlLT5pbnRlcm5hbC5pbnZlcnNpb24JCT0gaW52ZXJzaW9uOworCisJc3RiMDg5OV93YWtldXAoJnN0YXRlLT5mcm9udGVuZCk7CisJaWYgKHN0YjA4OTlfZ2V0X2Rldl9pZChzdGF0ZSkgPT0gLUVOT0RFVikgeworCQlwcmludGsoIiVzOiBFeGl0aW5nIC4uICFcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwcmludGsoIiVzOiBBdHRhY2hpbmcgU1RCMDg5OSBcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzdGIwODk5X2F0dGFjaCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJTZXQgVmVyYm9zaXR5IGxldmVsIik7CitNT0RVTEVfQVVUSE9SKCJNYW51IEFicmFoYW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RCMDg5OSBNdWx0aS1TdGQgZnJvbnRlbmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMjAwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X2Rydi5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorCVNUQjA4OTkgTXVsdGlzdGFuZGFyZCBGcm9udGVuZCBkcml2ZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIF9fU1RCMDg5OV9EUlZfSAorI2RlZmluZSBfX1NUQjA4OTlfRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNkZWZpbmUgU1RCMDg5OV9UU01PREVfU0VSSUFMCQkxCisjZGVmaW5lIFNUQjA4OTlfQ0xLUE9MX0ZBTExJTkcJCTIKKyNkZWZpbmUgU1RCMDg5OV9DTEtOVUxMX1BBUklUWQkJMworI2RlZmluZSBTVEIwODk5X1NZTkNfRk9SQ0VECQk0CisjZGVmaW5lIFNUQjA4OTlfRkVDTU9ERV9EU1MJCTUKKworc3RydWN0IHN0YjA4OTlfczFfcmVnIHsKKwl1MTYJYWRkcmVzczsKKwl1OAlkYXRhOworfTsKKworc3RydWN0IHN0YjA4OTlfczJfcmVnIHsKKwl1MTYJb2Zmc2V0OworCXUzMgliYXNlX2FkZHJlc3M7CisJdTMyCWRhdGE7Cit9OworCitlbnVtIHN0YjA4OTlfaW52ZXJzaW9uIHsKKwlJUV9TV0FQX09GRgk9IDAsCisJSVFfU1dBUF9PTiwKKwlJUV9TV0FQX0FVVE8KK307CisKKyNkZWZpbmUgU1RCMDg5OV9HUElPMDAJCQkJMHhmMTQwCisjZGVmaW5lIFNUQjA4OTlfR1BJTzAxCQkJCTB4ZjE0MQorI2RlZmluZSBTVEIwODk5X0dQSU8wMgkJCQkweGYxNDIKKyNkZWZpbmUgU1RCMDg5OV9HUElPMDMJCQkJMHhmMTQzCisjZGVmaW5lIFNUQjA4OTlfR1BJTzA0CQkJCTB4ZjE0NAorI2RlZmluZSBTVEIwODk5X0dQSU8wNQkJCQkweGYxNDUKKyNkZWZpbmUgU1RCMDg5OV9HUElPMDYJCQkJMHhmMTQ2CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA3CQkJCTB4ZjE0NworI2RlZmluZSBTVEIwODk5X0dQSU8wOAkJCQkweGYxNDgKKyNkZWZpbmUgU1RCMDg5OV9HUElPMDkJCQkJMHhmMTQ5CisjZGVmaW5lIFNUQjA4OTlfR1BJTzEwCQkJCTB4ZjE0YQorI2RlZmluZSBTVEIwODk5X0dQSU8xMQkJCQkweGYxNGIKKyNkZWZpbmUgU1RCMDg5OV9HUElPMTIJCQkJMHhmMTRjCisjZGVmaW5lIFNUQjA4OTlfR1BJTzEzCQkJCTB4ZjE0ZAorI2RlZmluZSBTVEIwODk5X0dQSU8xNAkJCQkweGYxNGUKKyNkZWZpbmUgU1RCMDg5OV9HUElPMTUJCQkJMHhmMTRmCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE2CQkJCTB4ZjE1MAorI2RlZmluZSBTVEIwODk5X0dQSU8xNwkJCQkweGYxNTEKKyNkZWZpbmUgU1RCMDg5OV9HUElPMTgJCQkJMHhmMTUyCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE5CQkJCTB4ZjE1MworI2RlZmluZSBTVEIwODk5X0dQSU8yMAkJCQkweGYxNTQKKworI2RlZmluZSBTVEIwODk5X0dQSU9QVUxMVVAJCQkweDAxIC8qIE91dHB1dCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIFZkZCAqLworI2RlZmluZSBTVEIwODk5X0dQSU9QVUxMRE4JCQkweDAwIC8qIE91dHB1dCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIFZzcyAqLworCisjZGVmaW5lIFNUQjA4OTlfUE9TVFBST0NfR1BJT19QT1dFUgkJMHgwMAorI2RlZmluZSBTVEIwODk5X1BPU1RQUk9DX0dQSU9fTE9DSwkJMHgwMQorCisvKgorICogUG9zdCBwcm9jZXNzIG91dHB1dCBjb25maWd1cmF0aW9uIGNvbnRyb2wKKyAqIDEuIFBPV0VSIE9OL09GRgkJKGluZGV4IDApCisgKiAyLiBGRV9IQVNfTE9DSy9MT0NLX0xPU1MJKGluZGV4IDEpCisgKgorICogQGdwaW8gCT0gb25lIG9mIHRoZSBhYm92ZSBsaXN0ZWQgR1BJTydzCisgKiBAbGV2ZWwJPSBvdXRwdXQgc3RhdGU6IHB1bGxlZCB1cCBvciBsb3cKKyAqLworc3RydWN0IHN0YjA4OTlfcG9zdHByb2MgeworCXUxNglncGlvOworCXU4CWxldmVsOworfTsKKworc3RydWN0IHN0YjA4OTlfY29uZmlnIHsKKwljb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcJKmluaXRfZGV2OworCWNvbnN0IHN0cnVjdCBzdGIwODk5X3MyX3JlZwkqaW5pdF9zMl9kZW1vZDsKKwljb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcJKmluaXRfczFfZGVtb2Q7CisJY29uc3Qgc3RydWN0IHN0YjA4OTlfczJfcmVnCSppbml0X3MyX2ZlYzsKKwljb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcJKmluaXRfdHN0OworCisJY29uc3Qgc3RydWN0IHN0YjA4OTlfcG9zdHByb2MJKnBvc3Rwcm9jOworCisJZW51bSBzdGIwODk5X2ludmVyc2lvbgkJaW52ZXJzaW9uOworCisJdTMyCXh0YWxfZnJlcTsKKworCXU4CWRlbW9kX2FkZHJlc3M7CisJdTgJdHNfb3V0cHV0X21vZGU7CisJdTgJYmxvY2tfc3luY19tb2RlOworCXU4CXRzX3BmYml0X3RvZ2dsZTsKKworCXU4CWNsb2NrX3BvbGFyaXR5OworCXU4CWRhdGFfY2xrX3Bhcml0eTsKKwl1OAlmZWNfbW9kZTsKKwl1OAlkYXRhX291dHB1dF9jdGw7CisJdTgJZGF0YV9maWZvX21vZGU7CisJdTgJb3V0X3JhdGVfY29tcDsKKwl1OAlpMmNfcmVwZWF0ZXI7CisvLwlpbnQJaW52ZXJzaW9uOworCWludAlsb19jbGs7CisJaW50CWhpX2NsazsKKworCXUzMgllc25vX2F2ZTsKKwl1MzIJZXNub19xdWFudDsKKwl1MzIJYXZmcmFtZXNfY29hcnNlOworCXUzMglhdmZyYW1lc19maW5lOworCXUzMgltaXNzX3RocmVzaG9sZDsKKwl1MzIJdXdwX3RocmVzaG9sZF9hY3E7CisJdTMyCXV3cF90aHJlc2hvbGRfdHJhY2s7CisJdTMyCXV3cF90aHJlc2hvbGRfc29mOworCXUzMglzb2Zfc2VhcmNoX3RpbWVvdXQ7CisKKwl1MzIJYnRyX25jb19iaXRzOworCXUzMglidHJfZ2Fpbl9zaGlmdF9vZmZzZXQ7CisJdTMyCWNybF9uY29fYml0czsKKwl1MzIJbGRwY19tYXhfaXRlcjsKKworCWludCAoKnR1bmVyX3NldF9mcmVxdWVuY3kpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5KTsKKwlpbnQgKCp0dW5lcl9nZXRfZnJlcXVlbmN5KShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpOworCWludCAoKnR1bmVyX3NldF9iYW5kd2lkdGgpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKTsKKwlpbnQgKCp0dW5lcl9nZXRfYmFuZHdpZHRoKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiYW5kd2lkdGgpOworCWludCAoKnR1bmVyX3NldF9yZnNpZ2dhaW4pKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgcmZfZ2Fpbik7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUQjA4OTkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RCMDg5OV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKKworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0YjA4OTlfYXR0YWNoKHN0cnVjdCBzdGIwODk5X2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc3RiMDg5OV9hdHRhY2goc3RydWN0IHN0YjA4OTlfY29uZmlnICpjb25maWcsCisJCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYgLy9DT05GSUdfRFZCX1NUQjA4OTkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDYxOWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfcHJpdi5oCkBAIC0wLDAgKzEsMjY3IEBACisvKgorCVNUQjA4OTkgTXVsdGlzdGFuZGFyZCBGcm9udGVuZCBkcml2ZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIF9fU1RCMDg5OV9QUklWX0gKKyNkZWZpbmUgX19TVEIwODk5X1BSSVZfSAorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKworI2RlZmluZSBGRV9FUlJPUgkJCQkwCisjZGVmaW5lIEZFX05PVElDRQkJCQkxCisjZGVmaW5lIEZFX0lORk8JCQkJCTIKKyNkZWZpbmUgRkVfREVCVUcJCQkJMworI2RlZmluZSBGRV9ERUJVR1JFRwkJCQk0CisKKyNkZWZpbmUgZHByaW50ayh4LCB5LCB6LCBmb3JtYXQsIGFyZy4uLikgZG8gewkJCQkJCVwKKwlpZiAoeikgewkJCQkJCQkJCVwKKwkJaWYJKCgqeCA+IEZFX0VSUk9SKSAmJiAoKnggPiB5KSkJCQkJCVwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fZnVuY19fICwgIyNhcmcpOwkJXAorCQllbHNlIGlmCSgoKnggPiBGRV9OT1RJQ0UpICYmICgqeCA+IHkpKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiBmb3JtYXQgIlxuIiwgX19mdW5jX18gLCAjI2FyZyk7CVwKKwkJZWxzZSBpZiAoKCp4ID4gRkVfSU5GTykgJiYgKCp4ID4geSkpCQkJCQlcCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQgIlxuIiwgX19mdW5jX18gLCAjI2FyZyk7CQlcCisJCWVsc2UgaWYgKCgqeCA+IEZFX0RFQlVHKSAmJiAoKnggPiB5KSkJCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiwgX19mdW5jX18gLCAjI2FyZyk7CVwKKwl9IGVsc2UgewkJCQkJCQkJCVwKKwkJaWYgKCp4ID4geSkJCQkJCQkJCVwKKwkJCXByaW50ayhmb3JtYXQsICMjYXJnKTsJCQkJCQlcCisJfQkJCQkJCQkJCQlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgSU5SQU5HRSh2YWwsIHgsIHkpCQkJKCgoeCA8PSB2YWwpICYmICh2YWwgPD0geSkpIHx8CQlcCisJCQkJCQkgKCh5IDw9IHZhbCkgJiYgKHZhbCA8PSB4KSkgPyAxIDogMCkKKworI2RlZmluZSBCWVRFMAkJCQkJMAorI2RlZmluZSBCWVRFMQkJCQkJOAorI2RlZmluZSBCWVRFMgkJCQkJMTYKKyNkZWZpbmUgQllURTMJCQkJCTI0CisKKyNkZWZpbmUgR0VUQllURSh4LCB5KQkJCQkoKCh4KSA+PiAoeSkpICYgMHhmZikKKyNkZWZpbmUgTUFLRVdPUkQzMihhLCBiLCBjLCBkKQkJCSgoKGEpIDw8IDI0KSB8ICgoYikgPDwgMTYpIHwgKChjKSA8PCA4KSB8IChkKSkKKyNkZWZpbmUgTUFLRVdPUkQxNihhLCBiKQkJCSgoKGEpIDw8IDgpIHwgKGIpKQorCisjZGVmaW5lIE1JTih4LCB5KQkJCQkoKHgpIDw9ICh5KSA/ICh4KSA6ICh5KSkKKyNkZWZpbmUgTUFYKHgsIHkpCQkJCSgoeCkgPj0gKHkpID8gKHgpIDogKHkpKQorI2RlZmluZSBBQlMoeCkJCQkJCSgoeCkgPj0gMCA/ICh4KSA6IC0oeCkpCisKKyNkZWZpbmUgTFNCKHgpCQkJCQkoKHggJiAweGZmKSkKKyNkZWZpbmUgTVNCKHkpCQkJCQkoKHkgPj4gOCkgJiAweGZmKQorCisKKyNkZWZpbmUgU1RCMDg5OV9HRVRGSUVMRChiaXRmLCB2YWwpCQkoKHZhbCA+PiBTVEIwODk5X09GRlNUXyMjYml0ZikgJiAoKDEgPDwgU1RCMDg5OV9XSURUSF8jI2JpdGYpIC0gMSkpCisKKworI2RlZmluZSBTVEIwODk5X1NFVEZJRUxEKG1hc2ssIHZhbCwgd2lkdGgsIG9mZnNldCkgICAgICAobWFzayAmICh+KCgoMSA8PCB3aWR0aCkgLSAxKSA8PAlcCisJCQkJCQkJIG9mZnNldCkpKSB8ICgodmFsICYJCQlcCisJCQkJCQkJICgoMSA8PCB3aWR0aCkgLSAxKSkgPDwgb2Zmc2V0KQorCisjZGVmaW5lIFNUQjA4OTlfU0VURklFTERfVkFMKGJpdGYsIG1hc2ssIHZhbCkJKG1hc2sgPSAobWFzayAmICh+KCgoMSA8PCBTVEIwODk5X1dJRFRIXyMjYml0ZikgLSAxKSA8PFwKKwkJCQkJCQkgU1RCMDg5OV9PRkZTVF8jI2JpdGYpKSkgfCBcCisJCQkJCQkJICh2YWwgPDwgU1RCMDg5OV9PRkZTVF8jI2JpdGYpKQorCisKK2VudW0gc3RiMDg5OV9zdGF0dXMgeworCU5PQUdDMQk9IDAsCisJQUdDMU9LLAorCU5PVElNSU5HLAorCUFOQUxPR0NBUlJJRVIsCisJVElNSU5HT0ssCisJTk9BR0MyLAorCUFHQzJPSywKKwlOT0NBUlJJRVIsCisJQ0FSUklFUk9LLAorCU5PREFUQSwKKwlGQUxTRUxPQ0ssCisJREFUQU9LLAorCU9VVE9GUkFOR0UsCisJUkFOR0VPSywKKwlEVkJTMl9ERU1PRF9MT0NLLAorCURWQlMyX0RFTU9EX05PTE9DSywKKwlEVkJTMl9GRUNfTE9DSywKKwlEVkJTMl9GRUNfTk9MT0NLCit9OworCitlbnVtIHN0YjA4OTlfbW9kY29kIHsKKwlTVEIwODk5X0RVTU1ZX1BMRiwKKwlTVEIwODk5X1FQU0tfMTQsCisJU1RCMDg5OV9RUFNLXzEzLAorCVNUQjA4OTlfUVBTS18yNSwKKwlTVEIwODk5X1FQU0tfMTIsCisJU1RCMDg5OV9RUFNLXzM1LAorCVNUQjA4OTlfUVBTS18yMywKKwlTVEIwODk5X1FQU0tfMzQsCisJU1RCMDg5OV9RUFNLXzQ1LAorCVNUQjA4OTlfUVBTS181NiwKKwlTVEIwODk5X1FQU0tfODksCisJU1RCMDg5OV9RUFNLXzkxMCwKKwlTVEIwODk5XzhQU0tfMzUsCisJU1RCMDg5OV84UFNLXzIzLAorCVNUQjA4OTlfOFBTS18zNCwKKwlTVEIwODk5XzhQU0tfNTYsCisJU1RCMDg5OV84UFNLXzg5LAorCVNUQjA4OTlfOFBTS185MTAsCisJU1RCMDg5OV8xNkFQU0tfMjMsCisJU1RCMDg5OV8xNkFQU0tfMzQsCisJU1RCMDg5OV8xNkFQU0tfNDUsCisJU1RCMDg5OV8xNkFQU0tfNTYsCisJU1RCMDg5OV8xNkFQU0tfODksCisJU1RCMDg5OV8xNkFQU0tfOTEwLAorCVNUQjA4OTlfMzJBUFNLXzM0LAorCVNUQjA4OTlfMzJBUFNLXzQ1LAorCVNUQjA4OTlfMzJBUFNLXzU2LAorCVNUQjA4OTlfMzJBUFNLXzg5LAorCVNUQjA4OTlfMzJBUFNLXzkxMAorfTsKKworZW51bSBzdGIwODk5X2ZyYW1lIHsKKwlTVEIwODk5X0xPTkdfRlJBTUUsCisJU1RCMDg5OV9TSE9SVF9GUkFNRQorfTsKKworZW51bSBzdGIwODk5X2FscGhhIHsKKwlSUkNfMjAsCisJUlJDXzI1LAorCVJSQ18zNQorfTsKKworc3RydWN0IHN0YjA4OTlfdGFiIHsKKwlzMzIgcmVhbDsKKwlzMzIgcmVhZDsKK307CisKK2VudW0gc3RiMDg5OV9mZWMgeworCVNUQjA4OTlfRkVDXzFfMgkJCT0gMTMsCisJU1RCMDg5OV9GRUNfMl8zCQkJPSAxOCwKKwlTVEIwODk5X0ZFQ18zXzQJCQk9IDIxLAorCVNUQjA4OTlfRkVDXzVfNgkJCT0gMjQsCisJU1RCMDg5OV9GRUNfNl83CQkJPSAyNSwKKwlTVEIwODk5X0ZFQ183XzgJCQk9IDI2Cit9OworCitzdHJ1Y3Qgc3RiMDg5OV9wYXJhbXMgeworCXUzMglmcmVxOwkJCQkJLyogRnJlcXVlbmN5CSovCisJdTMyCXNyYXRlOwkJCQkJLyogU3ltYm9sIHJhdGUJKi8KKwllbnVtIGZlX2NvZGVfcmF0ZSBmZWNyYXRlOworfTsKKworc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwgeworCXUzMgkJCW1hc3Rlcl9jbGs7CisJdTMyCQkJZnJlcTsJCQkvKiBEZW1vZCBpbnRlcm5hbCBGcmVxdWVuY3kJCSovCisJdTMyCQkJc3JhdGU7CQkJLyogRGVtb2QgaW50ZXJuYWwgU3ltYm9sIHJhdGUJCSovCisJZW51bSBzdGIwODk5X2ZlYwlmZWNyYXRlOwkJLyogRGVtb2QgaW50ZXJuYWwgRkVDIHJhdGUJCSovCisJdTMyCQkJc3JjaF9yYW5nZTsJCS8qIERlbW9kIGludGVybmFsIFNlYXJjaCBSYW5nZQkJKi8KKwl1MzIJCQlzdWJfcmFuZ2U7CQkvKiBEZW1vZCBjdXJyZW50IHN1YiByYW5nZSAoSHopCQkqLworCXUzMgkJCXR1bmVyX3N0ZXA7CQkvKiBUdW5lciBzdGVwIChIeikJCQkqLworCXUzMgkJCXR1bmVyX29mZnN0OwkJLyogUmVsYXRpdmUgb2Zmc2V0IHRvIGNhcnJpZXIgKEh6KQkqLworCXUzMgkJCXR1bmVyX2J3OwkJLyogQ3VycmVudCBiYW5kd2lkdGggb2YgdGhlIHR1bmVyIChIeikJKi8KKworCXMzMgkJCW1jbGs7CQkJLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKGJpbmFyeSkJKi8KKwlzMzIJCQlyb2xsb2ZmOwkJLyogQ3VycmVudCBSb2xsT2ZmIG9mIHRoZSBmaWx0ZXIgKHgxMDApCSovCisKKwlzMTYJCQlkZXJvdF9mcmVxOwkJLyogQ3VycmVudCBkZXJvdGF0b3IgZnJlcXVlbmN5IChIeikJKi8KKwlzMTYJCQlkZXJvdF9wZXJjZW50OworCisJczE2CQkJZGlyZWN0aW9uOwkJLyogQ3VycmVudCBkZXJvdGF0b3Igc2VhcmNoIGRpcmVjdGlvbgkqLworCXMxNgkJCWRlcm90X3N0ZXA7CQkvKiBEZXJvdGF0b3Igc3RlcCAoYmluYXJ5IHZhbHVlKQkqLworCXMxNgkJCXRfZGVyb3Q7CQkvKiBEZXJvdGF0b3IgdGltZSBjb25zdGFudCAobXMpCQkqLworCXMxNgkJCXRfZGF0YTsJCQkvKiBEYXRhIHJlY292ZXJ5IHRpbWUgY29uc3RhbnQgKG1zKQkqLworCXMxNgkJCXN1Yl9kaXI7CQkvKiBEaXJlY3Rpb24gb2YgdGhlIG5leHQgc3ViIHJhbmdlCSovCisKKwlzMTYJCQl0X2FnYzE7CQkJLyogQWdjMSB0aW1lIGNvbnN0YW50IChtcykJCSovCisJczE2CQkJdF9hZ2MyOwkJCS8qIEFnYzIgdGltZSBjb25zdGFudCAobXMpCQkqLworCisJdTMyCQkJbG9jazsJCQkvKiBEZW1vZCBpbnRlcm5hbCBsb2NrIHN0YXRlCQkqLworCWVudW0gc3RiMDg5OV9zdGF0dXMJc3RhdHVzOwkJCS8qIERlbW9kIGludGVybmFsIHN0YXR1cwkJKi8KKworCS8qIERWQi1TMiAqLworCXMzMgkJCWFnY19nYWluOwkJLyogUkYgQUdDIEdhaW4JCQkJKi8KKwlzMzIJCQljZW50ZXJfZnJlcTsJCS8qIE5vbWluYWwgY2FycmllciBmcmVxdWVuY3kJCSovCisJczMyCQkJYXZfZnJhbWVfY29hcnNlOwkvKiBDb2Fyc2UgY2FycmllciBmcmVxIHNlYXJjaCBmcmFtZXMJKi8KKwlzMzIJCQlhdl9mcmFtZV9maW5lOwkJLyogRmluZSBjYXJyaWVyIGZyZXEgc2VhcmNoIGZyYW1lcwkqLworCisJczE2CQkJc3RlcF9zaXplOwkJLyogQ2FycmllciBmcmVxdWVuY3kgc2VhcmNoIHN0ZXAgc2l6ZQkqLworCisJZW51bSBzdGIwODk5X2FscGhhCXJyY19hbHBoYTsKKwllbnVtIHN0YjA4OTlfaW52ZXJzaW9uCWludmVyc2lvbjsKKwllbnVtIHN0YjA4OTlfbW9kY29kCW1vZGNvZDsKKwl1OAkJCXBpbG90czsJCQkvKiBQaWxvdHMgZm91bmQJCQkJKi8KKworCWVudW0gc3RiMDg5OV9mcmFtZQlmcmFtZV9sZW5ndGg7CisJdTgJCQl2X3N0YXR1czsJCS8qIFZTVEFUVVMJCQkJKi8KKwl1OAkJCWVycl9jdHJsOwkJLyogRVJSQ1RSTG4JCQkJKi8KK307CisKK3N0cnVjdCBzdGIwODk5X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmM7CisJc3RydWN0IHN0YjA4OTlfY29uZmlnCQkqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQJCWZyb250ZW5kOworCisJdTMyCQkJCSp2ZXJib3NlOwkvKiBDYWNoZWQgbW9kdWxlIHZlcmJvc2l0eSBsZXZlbAkqLworCisJc3RydWN0IHN0YjA4OTlfaW50ZXJuYWwJCWludGVybmFsOwkvKiBEZXZpY2UgaW50ZXJuYWwgcGFyYW1ldGVycwkJKi8KKworCS8qCWNhY2hlZCBwYXJhbXMgZnJvbSBBUEkJKi8KKwllbnVtIGZlX2RlbGl2ZXJ5X3N5c3RlbQkJZGVsc3lzOworCXN0cnVjdCBzdGIwODk5X3BhcmFtcwkJcGFyYW1zOworCisJdTMyCQkJCXJ4X2ZyZXE7CS8qIERpU0VxQyAyLjAgcmVjZWl2ZXIgZnJlcQkJKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlzZWFyY2hfbG9jazsKK307CisvKiBzdGIwODk5LmMJCSovCitleHRlcm4gaW50IHN0YjA4OTlfcmVhZF9yZWcoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLAorCQkJICAgIHVuc2lnbmVkIGludCByZWcpOworCitleHRlcm4gdTMyIF9zdGIwODk5X3JlYWRfczJyZWcoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHUzMiBzdGIwODk5X2kyY2RldiwKKwkJCSAgICAgICB1MzIgc3RiMDg5OV9iYXNlX2FkZHIsCisJCQkgICAgICAgdTE2IHN0YjA4OTlfcmVnX29mZnNldCk7CisKK2V4dGVybiBpbnQgc3RiMDg5OV9yZWFkX3JlZ3Moc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqYnVmLAorCQkJICAgICB1MzIgY291bnQpOworCitleHRlcm4gaW50IHN0YjA4OTlfd3JpdGVfcmVncyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqZGF0YSwKKwkJCSAgICAgIHUzMiBjb3VudCk7CisKK2V4dGVybiBpbnQgc3RiMDg5OV93cml0ZV9yZWcoc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1OCBkYXRhKTsKKworZXh0ZXJuIGludCBzdGIwODk5X3dyaXRlX3MycmVnKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICB1MzIgc3RiMDg5OV9pMmNkZXYsCisJCQkgICAgICAgdTMyIHN0YjA4OTlfYmFzZV9hZGRyLAorCQkJICAgICAgIHUxNiBzdGIwODk5X3JlZ19vZmZzZXQsCisJCQkgICAgICAgdTMyIHN0YjA4OTlfZGF0YSk7CisKK2V4dGVybiBpbnQgc3RiMDg5OV9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKTsKKworCisjZGVmaW5lIFNUQjA4OTlfUkVBRF9TMlJFRyhERVZJQ0UsIFJFRykgCShfc3RiMDg5OV9yZWFkX3MycmVnKHN0YXRlLCBERVZJQ0UsIFNUQjA4OTlfQkFTRV8jI1JFRywgU1RCMDg5OV9PRkYwXyMjUkVHKSkKKy8vI2RlZmluZSBTVEIwODk5X1dSSVRFX1MyUkVHKERFVklDRSwgUkVHLCBEQVRBKQkoX3N0YjA4OTlfd3JpdGVfczJyZWcoc3RhdGUsIERFVklDRSwgU1RCMDg5OV9CQVNFXyMjUkVHLCBTVEIwODk5X09GRjBfIyNSRUcsIERBVEEpKQorCisvKiBzdGIwODk5X2FsZ28uYwkqLworZXh0ZXJuIGVudW0gc3RiMDg5OV9zdGF0dXMgc3RiMDg5OV9kdmJzX2FsZ28oc3RydWN0IHN0YjA4OTlfc3RhdGUgKnN0YXRlKTsKK2V4dGVybiBlbnVtIHN0YjA4OTlfc3RhdHVzIHN0YjA4OTlfZHZiczJfYWxnbyhzdHJ1Y3Qgc3RiMDg5OV9zdGF0ZSAqc3RhdGUpOworZXh0ZXJuIGxvbmcgc3RiMDg5OV9jYXJyX3dpZHRoKHN0cnVjdCBzdGIwODk5X3N0YXRlICpzdGF0ZSk7CisKKyNlbmRpZiAvL19fU1RCMDg5OV9QUklWX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3JlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExZWQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGIwODk5X3JlZy5oCkBAIC0wLDAgKzEsMjAyNyBAQAorLyoKKwlTVEIwODk5IE11bHRpc3RhbmRhcmQgRnJvbnRlbmQgZHJpdmVyCisJQ29weXJpZ2h0IChDKSBNYW51IEFicmFoYW0gKGFicmFoYW0ubWFudUBnbWFpbC5jb20pCisKKwlDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MKKworCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKwl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfX1NUQjA4OTlfUkVHX0gKKyNkZWZpbmUgX19TVEIwODk5X1JFR19ICisKKy8qCVMxCSovCisjZGVmaW5lIFNUQjA4OTlfREVWX0lECQkJCTB4ZjAwMAorI2RlZmluZSBTVEIwODk5X0NISVBfSUQJCQkJKDB4MGYgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DSElQX0lECQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NISVBfSUQJCQk0CisjZGVmaW5lIFNUQjA4OTlfQ0hJUF9SRUwJCQkoMHgwZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NISVBfUkVMCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NISVBfUkVMCQkJNAorCisjZGVmaW5lIFNUQjA4OTlfREVNT0QJCQkJMHhmNDBlCisjZGVmaW5lIFNUQjA4OTlfTU9ERUNPRUZGCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9NT0RFQ09FRkYJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTU9ERUNPRUZGCQkJMQorCisjZGVmaW5lIFNUQjA4OTlfUkNPTVBDCQkJCTB4ZjQxMAorI2RlZmluZSBTVEIwODk5X0FHQzFDTgkJCQkweGY0MTIKKyNkZWZpbmUgU1RCMDg5OV9BR0MxUkVGCQkJCTB4ZjQxMworI2RlZmluZSBTVEIwODk5X1JUQwkJCQkweGY0MTcKKyNkZWZpbmUgU1RCMDg5OV9UTUdDRkcJCQkJMHhmNDE4CisjZGVmaW5lIFNUQjA4OTlfQUdDMlJFRgkJCQkweGY0MTkKKyNkZWZpbmUgU1RCMDg5OV9UTFNSCQkJCTB4ZjQxYQorCisjZGVmaW5lIFNUQjA4OTlfQ0ZECQkJCTB4ZjQxYgorI2RlZmluZSBTVEIwODk5X0NGRF9PTgkJCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NGRF9PTgkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DRkRfT04JCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9BQ0xDCQkJCTB4ZjQxYworCisjZGVmaW5lIFNUQjA4OTlfQkNMQwkJCQkweGY0MWQKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTEdPCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FMR09fUVBTSzIJCTIKKyNkZWZpbmUgU1RCMDg5OV9BTEdPX1FQU0syCQkJKDIgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9BTEdPX1FQU0sxCQkJKDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9BTEdPX0JQU0sJCQkoMCA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JFVEEJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkVUQQkJCTYKKworI2RlZmluZSBTVEIwODk5X0VRT04JCQkJMHhmNDFlCisjZGVmaW5lIFNUQjA4OTlfTERUCQkJCTB4ZjQxZgorI2RlZmluZSBTVEIwODk5X0xEVDIJCQkJMHhmNDIwCisjZGVmaW5lIFNUQjA4OTlfRVFVQUxSRUYJCQkweGY0MjUKKyNkZWZpbmUgU1RCMDg5OV9UTUdSQU1QCQkJCTB4ZjQyNgorI2RlZmluZSBTVEIwODk5X1RNR1RIRAkJCQkweGY0MjcKKyNkZWZpbmUgU1RCMDg5OV9JRENDT01QCQkJCTB4ZjQyOAorI2RlZmluZSBTVEIwODk5X1FEQ0NPTVAJCQkJMHhmNDI5CisjZGVmaW5lIFNUQjA4OTlfUE9XRVJJCQkJCTB4ZjQyYQorI2RlZmluZSBTVEIwODk5X1BPV0VSUQkJCQkweGY0MmIKKyNkZWZpbmUgU1RCMDg5OV9SQ09NUAkJCQkweGY0MmMKKworI2RlZmluZSBTVEIwODk5X0FHQ0lRSU4JCQkJMHhmNDJlCisjZGVmaW5lIFNUQjA4OTlfQUdDSVFWQUxVRQkJCSgweGZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQUdDSVFWQUxVRQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FHQ0lRVkFMVUUJCTgKKworI2RlZmluZSBTVEIwODk5X0FHQzJJMQkJCQkweGY0MzYKKyNkZWZpbmUgU1RCMDg5OV9BR0MySTIJCQkJMHhmNDM3CisKKyNkZWZpbmUgU1RCMDg5OV9UTElSCQkJCTB4ZjQzOAorI2RlZmluZSBTVEIwODk5X1RMSVJfVE1HX0xPQ0tfSU5ECQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RMSVJfVE1HX0xPQ0tfSU5ECQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVExJUl9UTUdfTE9DS19JTkQJCTgKKworI2RlZmluZSBTVEIwODk5X1JURgkJCQkweGY0MzkKKyNkZWZpbmUgU1RCMDg5OV9SVEZfVElNSU5HX0xPT1BfRlJFUQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9SVEZfVElNSU5HX0xPT1BfRlJFUQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUlRGX1RJTUlOR19MT09QX0ZSRVEJOAorCisjZGVmaW5lIFNUQjA4OTlfRFNUQVRVUwkJCQkweGY0M2EKKyNkZWZpbmUgU1RCMDg5OV9DQVJSSUVSX0ZPVU5ECQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DQVJSSUVSX0ZPVU5ECQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ0FSUklFUl9GT1VORAkJMQorI2RlZmluZSBTVEIwODk5X1RNR19MT0NLCQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UTUdfTE9DSwkJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9UTUdfTE9DSwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9ERU1PRF9MT0NLCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ERU1PRF9MT0NLCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfREVNT0RfTE9DSwkJMQorI2RlZmluZSBTVEIwODk5X1RNR19BVVRPCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UTUdfQVVUTwkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9UTUdfQVVUTwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9FTkRfTUFJTgkJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRU5EX01BSU4JCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRU5EX01BSU4JCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9MREkJCQkJMHhmNDNiCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTERJCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0xESQkJCTgKKworI2RlZmluZSBTVEIwODk5X0NGUk0JCQkJMHhmNDNlCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ0ZSTQkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DRlJNCQkJOAorCisjZGVmaW5lIFNUQjA4OTlfQ0ZSTAkJCQkweGY0M2YKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DRlJMCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NGUkwJCQk4CisKKyNkZWZpbmUgU1RCMDg5OV9OSVJNCQkJCTB4ZjQ0MAorI2RlZmluZSBTVEIwODk5X09GRlNUX05JUk0JCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTklSTQkJCTgKKworI2RlZmluZSBTVEIwODk5X05JUkwJCQkJMHhmNDQxCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTklSTAkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9OSVJMCQkJOAorCisjZGVmaW5lIFNUQjA4OTlfSVNZTUIJCQkJMHhmNDQ0CisjZGVmaW5lIFNUQjA4OTlfUVNZTUIJCQkJMHhmNDQ1CisKKyNkZWZpbmUgU1RCMDg5OV9TRlJICQkJCTB4ZjQ0NgorI2RlZmluZSBTVEIwODk5X09GRlNUX1NGUkgJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU0ZSSAkJCTgKKworI2RlZmluZSBTVEIwODk5X1NGUk0JCQkJMHhmNDQ3CisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU0ZSTQkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TRlJNCQkJOAorCisjZGVmaW5lIFNUQjA4OTlfU0ZSTAkJCQkweGY0NDgKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TRlJMCQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NGUkwJCQk0CisKKyNkZWZpbmUgU1RCMDg5OV9TRlJVUEgJCQkJMHhmNDRjCisjZGVmaW5lIFNUQjA4OTlfU0ZSVVBNCQkJCTB4ZjQ0ZAorI2RlZmluZSBTVEIwODk5X1NGUlVQTAkJCQkweGY0NGUKKworI2RlZmluZSBTVEIwODk5X0VRVUFJMQkJCQkweGY0ZTAKKyNkZWZpbmUgU1RCMDg5OV9FUVVBUTEJCQkJMHhmNGUxCisjZGVmaW5lIFNUQjA4OTlfRVFVQUkyCQkJCTB4ZjRlMgorI2RlZmluZSBTVEIwODk5X0VRVUFRMgkJCQkweGY0ZTMKKyNkZWZpbmUgU1RCMDg5OV9FUVVBSTMJCQkJMHhmNGU0CisjZGVmaW5lIFNUQjA4OTlfRVFVQVEzCQkJCTB4ZjRlNQorI2RlZmluZSBTVEIwODk5X0VRVUFJNAkJCQkweGY0ZTYKKyNkZWZpbmUgU1RCMDg5OV9FUVVBUTQJCQkJMHhmNGU3CisjZGVmaW5lIFNUQjA4OTlfRVFVQUk1CQkJCTB4ZjRlOAorI2RlZmluZSBTVEIwODk5X0VRVUFRNQkJCQkweGY0ZTkKKworI2RlZmluZSBTVEIwODk5X0RTVEFUVVMyCQkJMHhmNTBjCisjZGVmaW5lIFNUQjA4OTlfRFMyX1RNR19BVVRPU1JDSAkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCODk5OV9PRkZTVF9EUzJfVE1HX0FVVE9TUkNICQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRFMyX1RNR19BVVRPU1JDSAkJMQorI2RlZmluZSBTVEIwODk5X0RTMl9FTkRfTUFJTkxPT1AJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRFMyX0VORF9NQUlOTE9PUAkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0RTMl9FTkRfTUFJTkxPT1AJCTEKKyNkZWZpbmUgU1RCMDg5OV9EUzJfQ0ZTWU5DCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9EUzJfQ0ZTWU5DCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRFMyX0NGU1lOQwkJMQorI2RlZmluZSBTVEIwODk5X0RTMl9UTUdMT0NLCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9EUzJfVE1HTE9DSwkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0RTMl9UTUdMT0NLCQkxCisjZGVmaW5lIFNUQjA4OTlfRFMyX0RFTU9EV0FJVAkJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRFMyX0RFTU9EV0FJVAkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0RTMl9ERU1PRFdBSVQJCTEKKyNkZWZpbmUgU1RCMDg5OV9EUzJfRkVDT04JCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RTMl9GRUNPTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9EUzJfRkVDT04JCQkxCisKKy8qCVMxIEZFQwkqLworI2RlZmluZSBTVEIwODk5X1ZTVEFUVVMJCQkJMHhmNTBkCisjZGVmaW5lIFNUQjA4OTlfVlNUQVRVU19WSVRFUkJJX09OCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1ZTVEFUVVNfVklURVJCSV9PTgk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVlNUQVRVU19WSVRFUkJJX09OCTEKKyNkZWZpbmUgU1RCMDg5OV9WU1RBVFVTX0VORF9MT09QVklUCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1ZTVEFUVVNfRU5EX0xPT1BWSVQJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1ZTVEFUVVNfRU5EX0xPT1BWSVQJMQorI2RlZmluZSBTVEIwODk5X1ZTVEFUVVNfUFJGVklUCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9WU1RBVFVTX1BSRlZJVAkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1ZTVEFUVVNfUFJGVklUCQkxCisjZGVmaW5lIFNUQjA4OTlfVlNUQVRVU19MT0NLRURWSVQJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVlNUQVRVU19MT0NLRURWSVQJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9WU1RBVFVTX0xPQ0tFRFZJVAkJMQorCisjZGVmaW5lIFNUQjA4OTlfVkVSUk9SCQkJCTB4ZjUwZgorCisjZGVmaW5lIFNUQjA4OTlfSVFTV0FQCQkJCTB4ZjUyMworI2RlZmluZSBTVEIwODk5X1NZTQkJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NZTQkJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TWU0JCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9GRUNBVVRPMQkJCTB4ZjUzMAorI2RlZmluZSBTVEIwODk5X0RTU1NSQ0gJCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9EU1NTUkNICQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0RTU1NSQ0gJCQkxCisjZGVmaW5lIFNUQjA4OTlfU1lNU1JDSAkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NZTVNSQ0gJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1lNU1JDSAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9RUFNLU1JDSAkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUVBTS1NSQ0gJCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUVBTS1NSQ0gJCQkxCisjZGVmaW5lIFNUQjA4OTlfQlBTS1NSQ0gJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JQU0tTUkNICQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JQU0tTUkNICQkJMQorCisjZGVmaW5lIFNUQjA4OTlfRkVDTQkJCQkweGY1MzMKKyNkZWZpbmUgU1RCMDg5OV9GRUNNX05PVF9EVkIJCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFQ01fTk9UX0RWQgkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZFQ01fTk9UX0RWQgkJMQorI2RlZmluZSBTVEIwODk5X0ZFQ01fUlNWRDEJCQkoMHgwNyA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFQ01fUlNWRDEJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GRUNNX1JTVkQxCQkzCisjZGVmaW5lIFNUQjA4OTlfRkVDTV9WSVRFUkJJX09OCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GRUNNX1ZJVEVSQklfT04JCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GRUNNX1ZJVEVSQklfT04JCTEKKyNkZWZpbmUgU1RCMDg5OV9GRUNNX1JTVkQwCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GRUNNX1JTVkQwCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVDTV9SU1ZEMAkJMQorI2RlZmluZSBTVEIwODk5X0ZFQ01fU1lOQ0RJUwkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRkVDTV9TWU5DRElTCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVDTV9TWU5DRElTCQkxCisjZGVmaW5lIFNUQjA4OTlfRkVDTV9TWU1JCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GRUNNX1NZTUkJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVDTV9TWU1JCQkJMQorCisjZGVmaW5lIFNUQjA4OTlfVlRIMTIJCQkJMHhmNTM0CisjZGVmaW5lIFNUQjA4OTlfVlRIMjMJCQkJMHhmNTM1CisjZGVmaW5lIFNUQjA4OTlfVlRIMzQJCQkJMHhmNTM2CisjZGVmaW5lIFNUQjA4OTlfVlRINTYJCQkJMHhmNTM3CisjZGVmaW5lIFNUQjA4OTlfVlRINjcJCQkJMHhmNTM4CisjZGVmaW5lIFNUQjA4OTlfVlRINzgJCQkJMHhmNTM5CisKKyNkZWZpbmUgU1RCMDg5OV9QUlZJVAkJCQkweGY1M2MKKyNkZWZpbmUgU1RCMDg5OV9QUl83XzgJCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9QUl83XzgJCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUFJfN184CQkJMQorI2RlZmluZSBTVEIwODk5X1BSXzZfNwkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1BSXzZfNwkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9QUl82XzcJCQkxCisjZGVmaW5lIFNUQjA4OTlfUFJfNV82CQkJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUFJfNV82CQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX1BSXzVfNgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9QUl8zXzQJCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9QUl8zXzQJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUFJfM180CQkJMQorI2RlZmluZSBTVEIwODk5X1BSXzJfMwkJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1BSXzJfMwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9QUl8yXzMJCQkxCisjZGVmaW5lIFNUQjA4OTlfUFJfMV8yCQkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUFJfMV8yCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1BSXzFfMgkJCTEKKworI2RlZmluZSBTVEIwODk5X1ZJVFNZTkMJCQkJMHhmNTNkCisjZGVmaW5lIFNUQjA4OTlfQU0JCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTQkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BTQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9GUkVFWkUJCQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GUkVFWkUJCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRlJFRVpFCQkJMQorI2RlZmluZSBTVEIwODk5X1NOXzY1NTM2CQkJKDB4MDMgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TTl82NTUzNgkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TTl82NTUzNgkJCTIKKyNkZWZpbmUgU1RCMDg5OV9TTl8xNjM4NAkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU05fMTYzODQJCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU05fMTYzODQJCQkxCisjZGVmaW5lIFNUQjA4OTlfU05fNDA5NgkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NOXzQwOTYJCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU05fNDA5NgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9TTl8xMDI0CQkJCSgweDAwIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU05fMTAyNAkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TTl8xMDI0CQkJMAorI2RlZmluZSBTVEIwODk5X1RPXzEyOAkJCQkoMHgwMyA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RPXzEyOAkJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9UT18xMjgJCQkyCisjZGVmaW5lIFNUQjA4OTlfVE9fNjQJCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UT182NAkJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9UT182NAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9UT18zMgkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RPXzMyCQkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1RPXzMyCQkJMQorI2RlZmluZSBTVEIwODk5X1RPXzE2CQkJCSgweDAwIDw8IDIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVE9fMTYJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVE9fMTYJCQkwCisjZGVmaW5lIFNUQjA4OTlfSFlTVF8xMjgJCQkoMHgwMyA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0hZU1RfMTI4CQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0hZU1RfMTI4CQkJMgorI2RlZmluZSBTVEIwODk5X0hZU1RfNjQJCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9IWVNUXzY0CQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0hZU1RfNjQJCQkxCisjZGVmaW5lIFNUQjA4OTlfSFlTVF8zMgkJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0hZU1RfMzIJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSFlTVF8zMgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9IWVNUXzE2CQkJCSgweDAwIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSFlTVF8xNgkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9IWVNUXzE2CQkJMAorCisjZGVmaW5lIFNUQjA4OTlfUlNVTEMJCQkJMHhmNTQ4CisjZGVmaW5lIFNUQjA4OTlfVUxESUxfT04JCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VMRElMX09OCQkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX1VMRElMX09OCQkJMQorI2RlZmluZSBTVEIwODk5X1VMQVVUT19PTgkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVUxBVVRPX09OCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VMQVVUT19PTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9VTFJTX09OCQkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVUxSU19PTgkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9VTFJTX09OCQkJMQorI2RlZmluZSBTVEIwODk5X1VMREVTQ1JBTV9PTgkJCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVUxERVNDUkFNX09OCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVUxERVNDUkFNX09OCQkxCisjZGVmaW5lIFNUQjA4OTlfVUxfRElTQUJMRQkJCSgweDAxIDw8IDIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVUxfRElTQUJMRQkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VMX0RJU0FCTEUJCTEKKyNkZWZpbmUgU1RCMDg5OV9OT0ZUSFJFU0hPTEQJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX05PRlRIUkVTSE9MRAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX05PRlRIUkVTSE9MRAkJMQorCisjZGVmaW5lIFNUQjA4OTlfUlNMTEMJCQkJMHhmNTRhCisjZGVmaW5lIFNUQjA4OTlfREVNQVBWSVQJCQkweGY1ODMKKyNkZWZpbmUgU1RCMDg5OV9ERU1BUFZJVF9SU1ZECQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ERU1BUFZJVF9SU1ZECQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfREVNQVBWSVRfUlNWRAkJMQorI2RlZmluZSBTVEIwODk5X0RFTUFQVklUX0tESVZJREVSCQkoMHg3ZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RFTUFQVklUX0tESVZJREVSCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfREVNQVBWSVRfS0RJVklERVIJCTcKKworI2RlZmluZSBTVEIwODk5X1BMUEFSTQkJCQkweGY1OGMKKyNkZWZpbmUgU1RCMDg5OV9WSVRNQVBQSU5HCQkJKDB4MDcgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9WSVRNQVBQSU5HCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVklUTUFQUElORwkJMworI2RlZmluZSBTVEIwODk5X1ZJVE1BUFBJTkdfQlBTSwkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVklUTUFQUElOR19CUFNLCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVklUTUFQUElOR19CUFNLCQkxCisjZGVmaW5lIFNUQjA4OTlfVklUTUFQUElOR19RUFNLCQkJKDB4MDAgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9WSVRNQVBQSU5HX1FQU0sJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9WSVRNQVBQSU5HX1FQU0sJCTAKKyNkZWZpbmUgU1RCMDg5OV9WSVRDVVJQVU4JCQkoMHgxZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1ZJVENVUlBVTgkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9WSVRDVVJQVU4JCQk1CisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzFfMgkJCSgweDBkIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzJfMwkJCSgweDEyIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzNfNAkJCSgweDE1IDw8IDApCisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzVfNgkJCSgweDE4IDw8IDApCisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzZfNwkJCSgweDE5IDw8IDApCisjZGVmaW5lIFNUQjA4OTlfVklUQ1VSUFVOXzdfOAkJCSgweDFhIDw8IDApCisKKy8qCVMyIERFTU9ECSovCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ETURfU1RBVFVTCQkJMHhmMzAwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ETURfU1RBVFVTCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0lGX0FHQ19MT0NLCQkJKDB4MDEgPDwgOCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JRl9BR0NfTE9DSwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lGX0FHQ19MT0NLCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NSTF9GUkVRCQkJMHhmMzA0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9DUkxfRlJFUQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9DQVJSX0ZSRVEJCQkoMHgzZmZmZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NBUlJfRlJFUQkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DQVJSX0ZSRVEJCQkzMAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9CVFJfRlJFUQkJCTB4ZjMwOAorI2RlZmluZSBTVEIwODk5X0JBU0VfQlRSX0ZSRVEJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQlRSX0ZSRVEJCQkoMHhmZmZmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQlRSX0ZSRVEJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQlRSX0ZSRVEJCQkyOAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9JRl9BR0NfR0FJTgkJMHhmMzBjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9JRl9BR0NfR0FJTgkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0lGX0FHQ19HQUlOCQkJKDB4M2ZmZiA8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSUZfQUdDX0dBSU4JCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JRl9BR0NfR0FJTgkJMTQKKworI2RlZmluZSBTVEIwODk5X09GRjBfQkJfQUdDX0dBSU4JCTB4ZjMxMAorI2RlZmluZSBTVEIwODk5X0JBU0VfQkJfQUdDX0dBSU4JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CQl9BR0NfR0FJTgkJCSgweDNmZmYgPCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JCX0FHQ19HQUlOCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkJfQUdDX0dBSU4JCTE0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0RDX09GRlNFVAkJCTB4ZjMxNAorI2RlZmluZSBTVEIwODk5X0JBU0VfRENfT0ZGU0VUCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0kJCQkJKDB4ZmYgPCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0kJCQkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0kJCQkJOAorI2RlZmluZSBTVEIwODk5X1EJCQkJKDB4ZmYgPCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1EJCQkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1EJCQkJOAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ETURfQ05UUkwJCQkweGYzMWMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0RNRF9DTlRSTAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9BREMwX1BJTlMxSU4JCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FEQzBfUElOUzFJTiAgICAgICAgICAgICAgNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FEQzBfUElOUzFJTiAgICAgICAgICAgICAgMQorI2RlZmluZSBTVEIwODk5X0lOMkNPTVAxX09GRkJJTjAJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSU4yQ09NUDFfT0ZGQklOMCAgICAgICAgICAzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSU4yQ09NUDFfT0ZGQklOMCAgICAgICAgICAxCisjZGVmaW5lIFNUQjA4OTlfRENfQ09NUAkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RDX0NPTVAJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRENfQ09NUAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9NT0RNT0RFCQkJCSgweDAzIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTU9ETU9ERQkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9NT0RNT0RFCQkJMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9JRl9BR0NfQ05UUkwJCTB4ZjMyMAorI2RlZmluZSBTVEIwODk5X0JBU0VfSUZfQUdDX0NOVFJMCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfSUZfR0FJTl9JTklUCQkJKDB4M2ZmZiA8PCAxMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JRl9HQUlOX0lOSVQJCTEzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSUZfR0FJTl9JTklUCQkxNAorI2RlZmluZSBTVEIwODk5X0lGX0dBSU5fU0VOU0UJCQkoMHgwMSA8PCAxMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JRl9HQUlOX1NFTlNFCQkxMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lGX0dBSU5fU0VOU0UJCTEKKyNkZWZpbmUgU1RCMDg5OV9JRl9MT09QX0dBSU4JCQkoMHgwZiA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0lGX0xPT1BfR0FJTgkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lGX0xPT1BfR0FJTgkJNAorI2RlZmluZSBTVEIwODk5X0lGX0xEX0dBSU5fSU5JVAkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSUZfTERfR0FJTl9JTklUCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSUZfTERfR0FJTl9JTklUCQkxCisjZGVmaW5lIFNUQjA4OTlfSUZfQUdDX1JFRgkJCSgweDdmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSUZfQUdDX1JFRgkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lGX0FHQ19SRUYJCTcKKworI2RlZmluZSBTVEIwODk5X09GRjBfQkJfQUdDX0NOVFJMCQkweGYzMjQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JCX0FHQ19DTlRSTAkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0JCX0dBSU5fSU5JVAkJCSgweDNmZmYgPDwgMTIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkJfR0FJTl9JTklUCQkxMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JCX0dBSU5fSU5JVAkJMTQKKyNkZWZpbmUgU1RCMDg5OV9CQl9MT09QX0dBSU4JCQkoMHgwZiA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JCX0xPT1BfR0FJTgkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JCX0xPT1BfR0FJTgkJNAorI2RlZmluZSBTVEIwODk5X0JCX0xEX0dBSU5fSU5JVAkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkJfTERfR0FJTl9JTklUCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkJfTERfR0FJTl9JTklUCQkxCisjZGVmaW5lIFNUQjA4OTlfQkJfQUdDX1JFRgkJCSgweDdmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkJfQUdDX1JFRgkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JCX0FHQ19SRUYJCTcKKworI2RlZmluZSBTVEIwODk5X09GRjBfQ1JMX0NOVFJMCQkJMHhmMzI4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9DUkxfQ05UUkwJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQ1JMX0xPQ0tfQ0xFQVIJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9MT0NLX0NMRUFSCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX0xPQ0tfQ0xFQVIJCTEKKyNkZWZpbmUgU1RCMDg5OV9DUkxfU1dQUl9DTEVBUgkJCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX1NXUFJfQ0xFQVIJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfU1dQUl9DTEVBUgkJMQorI2RlZmluZSBTVEIwODk5X0NSTF9TV1BfRU5BCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DUkxfU1dQX0VOQQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSTF9TV1BfRU5BCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JMX0RFVF9TRUwJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9ERVRfU0VMCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX0RFVF9TRUwJCTEKKyNkZWZpbmUgU1RCMDg5OV9DUkxfU0VOU0UJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9TRU5TRQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfU0VOU0UJCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JMX1BIU0VSUl9DTEVBUgkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DUkxfUEhTRVJSX0NMRUFSCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX1BIU0VSUl9DTEVBUgkJMQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9DUkxfUEhTX0lOSVQJCTB4ZjMyYworI2RlZmluZSBTVEIwODk5X0JBU0VfQ1JMX1BIU19JTklUCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQ1JMX1BIU19JTklUXzMxCQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DUkxfUEhTX0lOSVRfMzEJCTMwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX1BIU19JTklUXzMxCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JMX0xEX0lOSVRfUEhBU0UJCSgweDEgPDwgMjQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX0xEX0lOSVRfUEhBU0UJCTI0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX0xEX0lOSVRfUEhBU0UJCTEKKyNkZWZpbmUgU1RCMDg5OV9DUkxfSU5JVF9QSEFTRQkJCSgweGZmZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9JTklUX1BIQVNFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JMX0lOSVRfUEhBU0UJCTI0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NSTF9GUkVRX0lOSVQJCTB4ZjMzMAorI2RlZmluZSBTVEIwODk5X0JBU0VfQ1JMX0ZSRVFfSU5JVAkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0NSTF9GUkVRX0lOSVRfMzEJCSgweDEgPDwgMzApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX0ZSRVFfSU5JVF8zMQkJMzAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfRlJFUV9JTklUXzMxCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JMX0xEX0ZSRVFfSU5JVAkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DUkxfTERfRlJFUV9JTklUCQkyNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSTF9MRF9GUkVRX0lOSVQJCTEKKyNkZWZpbmUgU1RCMDg5OV9DUkxfRlJFUV9JTklUCQkJKDB4ZmZmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX0ZSRVFfSU5JVAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSTF9GUkVRX0lOSVQJCTI0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NSTF9MT09QX0dBSU4JCTB4ZjMzNAorI2RlZmluZSBTVEIwODk5X0JBU0VfQ1JMX0xPT1BfR0FJTgkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0tDUkwyX1JTSEZUCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9LQ1JMMl9SU0hGVAkJMTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9LQ1JMMl9SU0hGVAkJNAorI2RlZmluZSBTVEIwODk5X0tDUkwxCQkJCSgweGYgPDwgMTIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfS0NSTDEJCQkxMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0tDUkwxCQkJNAorI2RlZmluZSBTVEIwODk5X0tDUkwxX1JTSEZUCQkJKDB4ZiA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0tDUkwxX1JTSEZUCQk4CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfS0NSTDFfUlNIRlQJCTQKKyNkZWZpbmUgU1RCMDg5OV9LQ1JMMAkJCQkoMHhmIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfS0NSTDAJCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfS0NSTDAJCQk0CisjZGVmaW5lIFNUQjA4OTlfS0NSTDBfUlNIRlQJCQkoMHhmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfS0NSTDBfUlNIRlQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9LQ1JMMF9SU0hGVAkJNAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9DUkxfTk9NX0ZSRVEJCTB4ZjMzOAorI2RlZmluZSBTVEIwODk5X0JBU0VfQ1JMX05PTV9GUkVRCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQ1JMX05PTV9GUkVRCQkJKDB4M2ZmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DUkxfTk9NX0ZSRVEJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfTk9NX0ZSRVEJCTMwCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NSTF9TV1BfUkFURQkJMHhmMzNjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9DUkxfU1dQX1JBVEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9DUkxfU1dQX1JBVEUJCQkoMHgzZmZmZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9TV1BfUkFURQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSTF9TV1BfUkFURQkJMzAKKworI2RlZmluZSBTVEIwODk5X09GRjBfQ1JMX01BWF9TV1AJCTB4ZjM0MAorI2RlZmluZSBTVEIwODk5X0JBU0VfQ1JMX01BWF9TV1AJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9DUkxfTUFYX1NXUAkJCSgweDNmZmZmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX01BWF9TV1AJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfTUFYX1NXUAkJMzAKKworI2RlZmluZSBTVEIwODk5X09GRjBfQ1JMX0xLX0NOVFJMCQkweGYzNDQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NSTF9MS19DTlRSTAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ERUNJTV9DTlRSTAkJMHhmMzQ4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ERUNJTV9DTlRSTAkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0JBTkRfTElNSVRfQgkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkFORF9MSU1JVF9CCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkFORF9MSU1JVF9CCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lOX1NFTAkJCQkoMHgwMyA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1dJTl9TRUwJCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfV0lOX1NFTAkJCTIKKyNkZWZpbmUgU1RCMDg5OV9ERUNJTV9SQVRFCQkJKDB4MDcgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ERUNJTV9SQVRFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfREVDSU1fUkFURQkJMworCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9CVFJfQ05UUkwJCQkweGYzNGMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JUUl9DTlRSTAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CVFJfRlJFUV9DT1JSCQkJKDB4N2ZmIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQlRSX0ZSRVFfQ09SUgkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JUUl9GUkVRX0NPUlIJCTExCisjZGVmaW5lIFNUQjA4OTlfQlRSX0NMUl9MT0NLCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfQ0xSX0xPQ0sJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfQ0xSX0xPQ0sJCTEKKyNkZWZpbmUgU1RCMDg5OV9CVFJfU0VOU0UJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JUUl9TRU5TRQkJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfU0VOU0UJCQkxCisjZGVmaW5lIFNUQjA4OTlfQlRSX0VSUl9FTkEJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JUUl9FUlJfRU5BCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQlRSX0VSUl9FTkEJCTEKKyNkZWZpbmUgU1RCMDg5OV9JTlRSUF9QSFNfU0VOU0UJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0lOVFJQX1BIU19TRU5TRQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lOVFJQX1BIU19TRU5TRQkJMQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9CVFJfTE9PUF9HQUlOCQkweGYzNTAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JUUl9MT09QX0dBSU4JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9LQlRSMl9SU0hGVAkJCSgweDBmIDw8IDE2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0tCVFIyX1JTSEZUCQkxNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0tCVFIyX1JTSEZUCQk0CisjZGVmaW5lIFNUQjA4OTlfS0JUUjEJCQkJKDB4MGYgPDwgMTIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfS0JUUjEJCQkxMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0tCVFIxCQkJNAorI2RlZmluZSBTVEIwODk5X0tCVFIxX1JTSEZUCQkJKDB4MGYgPDwgOCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9LQlRSMV9SU0hGVAkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0tCVFIxX1JTSEZUCQk0CisjZGVmaW5lIFNUQjA4OTlfS0JUUjAJCQkJKDB4MGYgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9LQlRSMAkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9LQlRSMAkJCTQKKyNkZWZpbmUgU1RCMDg5OV9LQlRSMF9SU0hGVAkJCSgweDBmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfS0JUUjBfUlNIRlQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9LQlRSMF9SU0hGVAkJNAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9CVFJfUEhTX0lOSVQJCTB4ZjM1NAorI2RlZmluZSBTVEIwODk5X0JBU0VfQlRSX1BIU19JTklUCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQlRSX0xEX1BIQVNFX0lOSVQJCSgweDAxIDw8IDI4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JUUl9MRF9QSEFTRV9JTklUCQkyOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JUUl9MRF9QSEFTRV9JTklUCQkxCisjZGVmaW5lIFNUQjA4OTlfQlRSX0lOSVRfUEhBU0UJCQkoMHhmZmZmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQlRSX0lOSVRfUEhBU0UJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfSU5JVF9QSEFTRQkJMjgKKworI2RlZmluZSBTVEIwODk5X09GRjBfQlRSX0ZSRVFfSU5JVAkJMHhmMzU4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9CVFJfRlJFUV9JTklUCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQlRSX0xEX0ZSRVFfSU5JVAkJKDEgPDwgMjgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQlRSX0xEX0ZSRVFfSU5JVAkJMjgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfTERfRlJFUV9JTklUCQkxCisjZGVmaW5lIFNUQjA4OTlfQlRSX0ZSRVFfSU5JVAkJCSgweGZmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfRlJFUV9JTklUCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQlRSX0ZSRVFfSU5JVAkJMjgKKworI2RlZmluZSBTVEIwODk5X09GRjBfQlRSX05PTV9GUkVRCQkweGYzNWMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JUUl9OT01fRlJFUQkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0JUUl9OT01fRlJFUQkJCSgweGZmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfTk9NX0ZSRVEJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfTk9NX0ZSRVEJCTI4CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0JUUl9MS19DTlRSTAkJMHhmMzYwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9CVFJfTEtfQ05UUkwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CVFJfTUlOX0VORVJHWQkJCSgweDBmIDw8IDI0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JUUl9NSU5fRU5FUkdZCQkyNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JUUl9NSU5fRU5FUkdZCQk0CisjZGVmaW5lIFNUQjA4OTlfQlRSX0xPQ0tfVEhfTE8JCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfTE9DS19USF9MTwkJMTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CVFJfTE9DS19USF9MTwkJOAorI2RlZmluZSBTVEIwODk5X0JUUl9MT0NLX1RIX0hJCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfTE9DS19USF9ISQkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JUUl9MT0NLX1RIX0hJCQk4CisjZGVmaW5lIFNUQjA4OTlfQlRSX0xPQ0tfR0FJTgkJCSgweDAzIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQlRSX0xPQ0tfR0FJTgkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JUUl9MT0NLX0dBSU4JCTIKKyNkZWZpbmUgU1RCMDg5OV9CVFJfTE9DS19MRUFLCQkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CVFJfTE9DS19MRUFLCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQlRSX0xPQ0tfTEVBSwkJNgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ERUNOX0NOVFJMCQkJMHhmMzY0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ERUNOX0NOVFJMCQkJMHgwMDAwMDAwMAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9DTlRSTAkJCTB4ZjM2OAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQ05UUkwJCQkweDAwMDAwMDAwCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRl9TVEFUVVMJCTB4ZjM2YworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGX1NUQVRVUwkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X1RQX0JVRkZFUl9GVUxMICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTVEIwODk5X09GRjBfRENfRVNUSU0JCQkweGYzN2MKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0RDX0VTVElNCQkJMHgwMDAwCisjZGVmaW5lIFNUQjA4OTlfSV9EQ19FU1RJTUFURQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSV9EQ19FU1RJTUFURQkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lfRENfRVNUSU1BVEUJCTgKKyNkZWZpbmUgU1RCMDg5OV9RX0RDX0VTVElNQVRFCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9RX0RDX0VTVElNQVRFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUV9EQ19FU1RJTUFURQkJOAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9GTExfQ05UUkwJCQkweGYzMTAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZMTF9DTlRSTAkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU1RCMDg5OV9DUkxfRkxMX0FDQwkJCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JMX0ZMTF9BQ0MJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DUkxfRkxMX0FDQwkJMQorI2RlZmluZSBTVEIwODk5X0ZMTF9BVkdfUEVSSU9ECQkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GTExfQVZHX1BFUklPRAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZMTF9BVkdfUEVSSU9ECQk0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZMTF9GUkVRX1dECQkweGYzMTQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZMTF9GUkVRX1dECQkweDAwMDAwMDIwCisjZGVmaW5lIFNUQjA4OTlfRkxMX0ZSRVFfV0QJCQkoMHhmZmZmZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZMTF9GUkVRX1dECQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkxMX0ZSRVFfV0QJCTMyCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0FOVElfQUxJQVNfU0VMCQkweGYzNTgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0FOVElfQUxJQVNfU0VMCQkweDAwMDAwMDIwCisjZGVmaW5lIFNUQjA4OTlfQU5USV9BTElBU19TRUxCCQkJKDB4MDMgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTlRJX0FMSUFTX1NFTEIJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BTlRJX0FMSUFTX1NFTEIJCTIKKworI2RlZmluZSBTVEIwODk5X09GRjBfUlJDX0FMUEhBCQkJMHhmMzVjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9SUkNfQUxQSEEJCQkweDAwMDAwMDIwCisjZGVmaW5lIFNUQjA4OTlfUlJDX0FMUEhBCQkJKDB4MDMgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9SUkNfQUxQSEEJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUlJDX0FMUEhBCQkJMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9EQ19BREFQVF9MU0hGVAkJMHhmMzYwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9EQ19BREFQVF9MU0hGVAkJMHgwMDAwMDAyMAorI2RlZmluZSBTVEIwODk5X0RDX0FEQVBUX0xTSEZUCQkJKDB4MDc3IDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRENfQURBUFRfTFNIRlQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9EQ19BREFQVF9MU0hGVAkJMworCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9JTUJfT0ZGU0VUCQkJMHhmMzY0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9JTUJfT0ZGU0VUCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTVEIwODk5X1BIU19JTUJfQ09NUAkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUEhTX0lNQl9DT01QCQk4CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUEhTX0lNQl9DT01QCQk4CisjZGVmaW5lIFNUQjA4OTlfQU1QTF9JTUJfQ09NUAkJCSgweGZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQU1QTF9JTUJfQ09NUAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FNUExfSU1CX0NPTVAJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfSU1CX0VTVElNQVRFCQkweGYzNjgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0lNQl9FU1RJTUFURQkJMHgwMDAwMDAyMAorI2RlZmluZSBTVEIwODk5X1BIU19JTUJfRVNUSU1BVEUJCSgweGZmIDw8IDgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUEhTX0lNQl9FU1RJTUFURQkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1BIU19JTUJfRVNUSU1BVEUJCTgKKyNkZWZpbmUgU1RCMDg5OV9BTVBMX0lNQl9FU1RJTUFURQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTVBMX0lNQl9FU1RJTUFURQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FNUExfSU1CX0VTVElNQVRFCQk4CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0lNQl9DTlRSTAkJCTB4ZjM2YworI2RlZmluZSBTVEIwODk5X0JBU0VfSU1CX0NOVFJMCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTVEIwODk5X1BIU19BREFQVF9MU0hGVAkJCSgweDA3IDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUEhTX0FEQVBUX0xTSEZUCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUEhTX0FEQVBUX0xTSEZUCQkzCisjZGVmaW5lIFNUQjA4OTlfQU1QTF9BREFQVF9MU0hGVAkJKDB4MDcgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTVBMX0FEQVBUX0xTSEZUCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQU1QTF9BREFQVF9MU0hGVAkJMworI2RlZmluZSBTVEIwODk5X0lNQl9DT01QCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JTUJfQ09NUAkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JTUJfQ09NUAkJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfSUZfQUdDX0NOVFJMMgkJMHhmMzc0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9JRl9BR0NfQ05UUkwyCQkweDAwMDAwMDIwCisjZGVmaW5lIFNUQjA4OTlfSUZfQUdDX0xPQ0tfVEgJCQkoMHhmZiA8PCAxMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JRl9BR0NfTE9DS19USAkJMTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JRl9BR0NfTE9DS19USAkJOAorI2RlZmluZSBTVEIwODk5X0lGX0FHQ19TRF9ESVYJCQkoMHhmZiA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0lGX0FHQ19TRF9ESVYJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JRl9BR0NfU0RfRElWCQk4CisjZGVmaW5lIFNUQjA4OTlfSUZfQUdDX0RVTVBfUEVSCQkJKDB4MDcgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JRl9BR0NfRFVNUF9QRVIJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JRl9BR0NfRFVNUF9QRVIJCTMKKworI2RlZmluZSBTVEIwODk5X09GRjBfRE1EX0NOVFJMMgkJCTB4ZjM3OAorI2RlZmluZSBTVEIwODk5X0JBU0VfRE1EX0NOVFJMMgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU1RCMDg5OV9TUEVDVFJVTV9JTlZFUlQJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NQRUNUUlVNX0lOVkVSVAkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NQRUNUUlVNX0lOVkVSVAkJMQorI2RlZmluZSBTVEIwODk5X0FHQ19NT0RFCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BR0NfTU9ERQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BR0NfTU9ERQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9DUkxfRlJFUV9BREoJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSTF9GUkVRX0FESgkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSTF9GUkVRX0FESgkJMQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIJCQkweGYzMDAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUgkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9UUF9CVUZGRVJfSU4JCQkoMHhmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVFBfQlVGRkVSX0lOCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVFBfQlVGRkVSX0lOCQkxNgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxCQkJMHhmMzA0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxCQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMgkJCTB4ZjMwOAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMgkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMJCQkweGYzMGMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjMJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0CQkJMHhmMzEwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0CQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNQkJCTB4ZjMxNAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYJCQkweGYzMTgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjYJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI3CQkJMHhmMzFjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI3CQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSOAkJCTB4ZjMyMAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSOAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjkJCQkweGYzMjQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxMAkJMHhmMzI4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxMAkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTEJCTB4ZjMyYworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTEJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjEyCQkweGYzMzAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjEyCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxMwkJMHhmMzM0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxMwkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTQJCTB4ZjMzOAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjE1CQkweGYzM2MKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjE1CQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxNgkJMHhmMzQwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxNgkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMTcJCTB4ZjM0NAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMTcJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjE4CQkweGYzNDgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjE4CQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIxOQkJMHhmMzRjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIxOQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjAJCTB4ZjM1MAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjAJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjIxCQkweGYzNTQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjIxCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyMgkJMHhmMzU4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyMgkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjMJCTB4ZjM1YworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjMJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjI0CQkweGYzNjAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjI0CQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyNQkJMHhmMzY0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyNQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjYJCTB4ZjM2OAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjYJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjI3CQkweGYzNmMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjI3CQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIyOAkJMHhmMzcwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIyOAkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMjkJCTB4ZjM3NAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMjkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMwCQkweGYzNzgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjMwCQkweDAwMDAwMDQwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzMQkJMHhmMzdjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzMQkJMHgwMDAwMDA0MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzIJCTB4ZjMwMAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzIJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjMzCQkweGYzMDQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjMzCQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzNAkJMHhmMzA4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzNAkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzUJCTB4ZjMwYworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzUJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjM2CQkweGYzMTAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjM2CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVIzNwkJMHhmMzE0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVIzNwkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSMzgJCTB4ZjMxOAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSMzgJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjM5CQkweGYzMWMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjM5CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0MAkJMHhmMzIwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0MAkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDEJCTB4ZjMyNAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDEJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQyCQkweGYzMjgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQyCQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0MwkJMHhmMzJjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0MwkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDQJCTB4ZjMzMAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDQJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQ1CQkweGYzMzQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQ1CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0NgkJMHhmMzM4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0NgkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNDcJCTB4ZjMzYworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNDcJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjQ4CQkweGYzNDAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjQ4CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI0OQkJMHhmMzQ0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI0OQkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTAJCTB4ZjM0OAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTAJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjUxCQkweGYzNGMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjUxCQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1MgkJMHhmMzUwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1MgkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTMJCTB4ZjM1NAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTMJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjU0CQkweGYzNTgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjU0CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1NQkJMHhmMzVjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1NQkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTYJCTB4ZjM2MAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTYJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjU3CQkweGYzNjQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjU3CQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI1OAkJMHhmMzY4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI1OAkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNTkJCTB4ZjM2YworI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNTkJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYwCQkweGYzNzAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjYwCQkweDAwMDAwMDYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9UUF9CVUZGRVI2MQkJMHhmMzc0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9UUF9CVUZGRVI2MQkJMHgwMDAwMDA2MAorI2RlZmluZSBTVEIwODk5X09GRjBfVFBfQlVGRkVSNjIJCTB4ZjM3OAorI2RlZmluZSBTVEIwODk5X0JBU0VfVFBfQlVGRkVSNjIJCTB4MDAwMDAwNjAKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1RQX0JVRkZFUjYzCQkweGYzN2MKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1RQX0JVRkZFUjYzCQkweDAwMDAwMDYwCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX1JFU0VUX0NOVFJMCQkweGYzMDAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1JFU0VUX0NOVFJMCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfRFZCUzJfUkVTRVQJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RWQlMyX1JFU0VUCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRFZCUzJfUkVTRVQJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNNX0VOQUJMRQkJCTB4ZjMwNAorI2RlZmluZSBTVEIwODk5X0JBU0VfQUNNX0VOQUJMRQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9BQ01fRU5BQkxFCQkJMQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ERVNDUl9DTlRSTAkJMHhmMzBjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ERVNDUl9DTlRSTAkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X09GRlNUX0RFU0NSX0NOVFJMICAgICAgICAgICAgICAgMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0RFU0NSX0NOVFJMICAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBTVEIwODk5X09GRjBfVVdQX0NOVFJMMQkJCTB4ZjMyMAorI2RlZmluZSBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9VV1BfVEhfU09GCQkJKDB4N2ZmZiA8PCAxMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VV1BfVEhfU09GCQkxMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXUF9USF9TT0YJCTE1CisjZGVmaW5lIFNUQjA4OTlfVVdQX0VTTjBfUVVBTlQJCQkoMHhmZiA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VXUF9FU04wX1FVQU5UCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVVdQX0VTTjBfUVVBTlQJCTgKKyNkZWZpbmUgU1RCMDg5OV9VV1BfRVNOMF9BVkUJCQkoMHgwMyA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VXUF9FU04wX0FWRQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXUF9FU04wX0FWRQkJMgorI2RlZmluZSBTVEIwODk5X1VXUF9TVEFSVAkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVVdQX1NUQVJUCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXUF9TVEFSVAkJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfVVdQX0NOVFJMMgkJCTB4ZjMyNAorI2RlZmluZSBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMgkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9VV1BfTUlTU19USAkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VXUF9NSVNTX1RICQkxNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXUF9NSVNTX1RICQk4CisjZGVmaW5lIFNUQjA4OTlfRkVfRklORV9UUksJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFX0ZJTkVfVFJLCQk4CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVfRklORV9UUksJCTgKKyNkZWZpbmUgU1RCMDg5OV9GRV9DT0FSU0VfVFJLCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GRV9DT0FSU0VfVFJLCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVfQ09BUlNFX1RSSwkJOAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9VV1BfU1RBVDEJCQkweGYzMjgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1VXUF9TVEFUMQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9VV1BfU1RBVEUJCQkoMHgwM2ZmIDw8IDE1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VXUF9TVEFURQkJCTE1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVVdQX1NUQVRFCQkJMTAKKyNkZWZpbmUgU1RCMDg5OV9VV19NQVhfUEVBSwkJCSgweDdmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VV19NQVhfUEVBSwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXX01BWF9QRUFLCQkxNQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9VV1BfU1RBVDIJCQkweGYzMmMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX1VXUF9TVEFUMgkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9FU05PX0VTVAkJCSgweDA3ZmZmZiA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VTTjBfRVNUCQkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX0VTTjBfRVNUCQkJMTkKKyNkZWZpbmUgU1RCMDg5OV9VV1BfREVDT0RFX01PRAkJCSgweDdmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVVdQX0RFQ09ERV9NT0QJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9VV1BfREVDT0RFX01PRAkJNworCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ETURfQ09SRV9JRAkJMHhmMzM0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ETURfQ09SRV9JRAkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0NPUkVfSUQJCQkJKDB4ZmZmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DT1JFX0lECQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NPUkVfSUQJCQkzMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9ETURfVkVSU0lPTl9JRAkJMHhmMzNjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9ETURfVkVSU0lPTl9JRAkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X1ZFUlNJT05fSUQJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1ZFUlNJT05fSUQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9WRVJTSU9OX0lECQk4CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0RNRF9TVEFUMgkJCTB4ZjM0MAorI2RlZmluZSBTVEIwODk5X0JBU0VfRE1EX1NUQVQyCQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0NTTV9MT0NLCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DU01fTE9DSwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fTE9DSwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9VV1BfTE9DSwkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVVdQX0xPQ0sJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVVdQX0xPQ0sJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZSRVFfQURKX1NDQUxFCQkweGYzNDQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZSRVFfQURKX1NDQUxFCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfRlJFUV9BREpfU0NBTEUJCQkoMHgwZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlJFUV9BREpfU0NBTEUJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GUkVRX0FESl9TQ0FMRQkJMTIKKworI2RlZmluZSBTVEIwODk5X09GRjBfVVdQX0NOVFJMMwkJCTB4ZjM0YworI2RlZmluZSBTVEIwODk5X0JBU0VfVVdQX0NOVFJMMwkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9VV1BfVEhfVFJBQ0sJCQkoMHg3ZmZmIDw8IDE1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VXUF9USF9UUkFDSwkJMTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9VV1BfVEhfVFJBQ0sJCTE1CisjZGVmaW5lIFNUQjA4OTlfVVdQX1RIX0FDUQkJCSgweDdmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VV1BfVEhfQUNRCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVVdQX1RIX0FDUQkJMTUKKworI2RlZmluZSBTVEIwODk5X09GRjBfU1lNX0NMS19TRUwJCTB4ZjM1MAorI2RlZmluZSBTVEIwODk5X0JBU0VfU1lNX0NMS19TRUwJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9TWU1fQ0xLX1NFTAkJCSgweDAzIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1lNX0NMS19TRUwJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TWU1fQ0xLX1NFTAkJMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9TT0ZfU1JDSF9UTwkJMHhmMzU0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9TT0ZfU1JDSF9UTwkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X1NPRl9TRUFSQ0hfVElNRU9VVAkJKDB4M2ZmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU09GX1NFQVJDSF9USU1FT1VUCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TT0ZfU0VBUkNIX1RJTUVPVVQJMjIKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNRX0NOVFJMMQkJCTB4ZjM1OAorI2RlZmluZSBTVEIwODk5X0JBU0VfQUNRX0NOVFJMMQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9GRV9GSU5FX0FDUQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRkVfRklORV9BQ1EJCTgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GRV9GSU5FX0FDUQkJOAorI2RlZmluZSBTVEIwODk5X0ZFX0NPQVJTRV9BQ1EJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFX0NPQVJTRV9BQ1EJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GRV9DT0FSU0VfQUNRCQk4CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0FDUV9DTlRSTDIJCQkweGYzNWMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0FDUV9DTlRSTDIJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfWklHWkFHCQkJCSgweDAxIDw8IDI1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1pJR1pBRwkJCTI1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfWklHWkFHCQkJMQorI2RlZmluZSBTVEIwODk5X05VTV9TVEVQUwkJCSgweGZmIDw8IDE3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX05VTV9TVEVQUwkJCTE3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTlVNX1NURVBTCQkJOAorI2RlZmluZSBTVEIwODk5X0ZSRVFfU1RFUFNJWkUJCQkoMHgxZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZSRVFfU1RFUFNJWkUJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GUkVRX1NURVBTSVpFCQkxNworCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9BQ1FfQ05UUkwzCQkJMHhmMzYwCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9BQ1FfQ05UUkwzCQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X1RIUkVTSE9MRF9TQ0wJCQkoMHgzZiA8PCAyMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9USFJFU0hPTERfU0NMCQkyMworI2RlZmluZSBTVEIwODk5X1dJRFRIX1RIUkVTSE9MRF9TQ0wJCTYKKyNkZWZpbmUgU1RCMDg5OV9VV1BfVEhfU1JDSAkJCSgweDdmZmYgPDwgOCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VV1BfVEhfU1JDSAkJOAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VXUF9USF9TUkNICQkxNQorI2RlZmluZSBTVEIwODk5X0FVVE9fUkVBQ1FVSVJFCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BVVRPX1JFQUNRVUlSRQkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX0FVVE9fUkVBQ1FVSVJFCQkxCisjZGVmaW5lIFNUQjA4OTlfVFJBQ0tfTE9DS19TRUwJCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RSQUNLX0xPQ0tfU0VMCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVFJBQ0tfTE9DS19TRUwJCTEKKyNkZWZpbmUgU1RCMDg5OV9BQ1FfU0VBUkNIX01PREUJCQkoMHgwMyA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FDUV9TRUFSQ0hfTU9ERQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FDUV9TRUFSQ0hfTU9ERQkJMgorI2RlZmluZSBTVEIwODk5X0NPTkZJUk1fRlJBTUVTCQkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DT05GSVJNX0ZSQU1FUwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NPTkZJUk1fRlJBTUVTCQk0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZFX1NFVFRMRQkJCTB4ZjM2NAorI2RlZmluZSBTVEIwODk5X0JBU0VfRkVfU0VUVExFCQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X1NFVFRMSU5HX1RJTUUJCQkoMHgzZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TRVRUTElOR19USU1FCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU0VUVExJTkdfVElNRQkJMjIKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNfRFdFTEwJCQkweGYzNjgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0FDX0RXRUxMCQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0RXRUxMX1RJTUUJCQkoMHgzZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9EV0VMTF9USU1FCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRFdFTExfVElNRQkJMjIKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNRVUlSRV9UUklHCQkweGYzNmMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0FDUVVJUkVfVFJJRwkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0FDUVVJUkUJCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BQ1FVSVJFCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FDUVVJUkUJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0xPQ0tfTE9TVAkJCTB4ZjM3MAorI2RlZmluZSBTVEIwODk5X0JBU0VfTE9DS19MT1NUCQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0xPQ0tfTE9TVAkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTE9DS19MT1NUCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0xPQ0tfTE9TVAkJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNRX1NUQVQxCQkJMHhmMzc0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9BQ1FfU1RBVDEJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfU1RFUF9GUkVRCQkJKDB4MWZmZmZmIDw8IDExKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NURVBfRlJFUQkJCTExCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RFUF9GUkVRCQkJMjEKKyNkZWZpbmUgU1RCMDg5OV9BQ1FfU1RBVEUJCQkoMHgwNyA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FDUV9TVEFURQkJCTgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BQ1FfU1RBVEUJCQkzCisjZGVmaW5lIFNUQjA4OTlfVVdfREVURUNUX0NPVU5UCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VV19ERVRFQ1RfQ09VTlQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9VV19ERVRFQ1RfQ09VTlQJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfQUNRX1RJTUVPVVQJCTB4ZjM3OAorI2RlZmluZSBTVEIwODk5X0JBU0VfQUNRX1RJTUVPVVQJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9BQ1FfVElNRU9VVAkJCSgweDNmZmZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FDUV9USU1FT1VUCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQUNRX1RJTUVPVVQJCTIyCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0FDUV9USU1FCQkJMHhmMzdjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9BQ1FfVElNRQkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU1RCMDg5OV9BQ1FfVElNRV9TWU0JCQkoMHhmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BQ1FfVElNRV9TWU0JCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BQ1FfVElNRV9TWU0JCTI0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZJTkFMX0FHQ19DTlRSTAkJMHhmMzA4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9GSU5BTF9BR0NfQ05UUkwJCTB4MDAwMDA0NDAKKyNkZWZpbmUgU1RCMDg5OV9GSU5BTF9HQUlOX0lOSVQJCQkoMHgzZmZmIDw8IDEyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZJTkFMX0dBSU5fSU5JVAkJMTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSU5BTF9HQUlOX0lOSVQJCTE0CisjZGVmaW5lIFNUQjA4OTlfRklOQUxfTE9PUF9HQUlOCQkJKDB4MGYgPDwgOCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GSU5BTF9MT09QX0dBSU4JCTgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSU5BTF9MT09QX0dBSU4JCTQKKyNkZWZpbmUgU1RCMDg5OV9GSU5BTF9MRF9HQUlOX0lOSVQJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRklOQUxfTERfR0FJTl9JTklUCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSU5BTF9MRF9HQUlOX0lOSVQJMQorI2RlZmluZSBTVEIwODk5X0ZJTkFMX0FHQ19SRUYJCQkoMHg3ZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZJTkFMX0FHQ19SRUYJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSU5BTF9BR0NfUkVGCQk3CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZJTkFMX0FHQ19HQUlOCQkweGYzMGMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZJTkFMX0FHQ19HQUlOCQkweDAwMDAwNDQwCisjZGVmaW5lIFNUQjA4OTlfRklOQUxfQUdDX0dBSU4JCQkoMHgzZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRklOQUxfQUdDX0dBSU4JCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSU5BTF9BR0NfR0FJTgkJMTQKKworI2RlZmluZSBTVEIwODk5X09GRjBfRVFVQUxJWkVSX0lOSVQJCTB4ZjMxMAorI2RlZmluZSBTVEIwODk5X0JBU0VfRVFVQUxJWkVSX0lOSVQJCTB4MDAwMDA0NDAKKyNkZWZpbmUgU1RCMDg5OV9FUV9TUlNUCQkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRVFfU1JTVAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FUV9TUlNUCQkJMQorI2RlZmluZSBTVEIwODk5X0VRX0lOSVQJCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9JTklUCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0VRX0lOSVQJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0VRX0NOVFJMCQkJMHhmMzE0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9FUV9DTlRSTAkJCTB4MDAwMDA0NDAKKyNkZWZpbmUgU1RCMDg5OV9FUV9BREFQVF9NT0RFCQkJKDB4MDEgPDwgMTgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRVFfQURBUFRfTU9ERQkJMTgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FUV9BREFQVF9NT0RFCQkxCisjZGVmaW5lIFNUQjA4OTlfRVFfREVMQVkJCQkoMHgwZiA8PCAxNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9ERUxBWQkJCTE0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVFfREVMQVkJCQk0CisjZGVmaW5lIFNUQjA4OTlfRVFfUVVBTlRfTEVWRUwJCQkoMHhmZiA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VRX1FVQU5UX0xFVkVMCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVFfUVVBTlRfTEVWRUwJCTgKKyNkZWZpbmUgU1RCMDg5OV9FUV9ESVNBQkxFX1VQREFURQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9ESVNBQkxFX1VQREFURQkJNQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0VRX0RJU0FCTEVfVVBEQVRFCQkxCisjZGVmaW5lIFNUQjA4OTlfRVFfQllQQVNTCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9CWVBBU1MJCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVFfQllQQVNTCQkJMQorI2RlZmluZSBTVEIwODk5X0VRX1NISUZUCQkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9TSElGVAkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FUV9TSElGVAkJCTQKKworI2RlZmluZSBTVEIwODk5X09GRjBfRVFfSV9JTklUX0NPRUZGXzAJCTB4ZjMyMAorI2RlZmluZSBTVEIwODk5X09GRjFfRVFfSV9JTklUX0NPRUZGXzEJCTB4ZjMyNAorI2RlZmluZSBTVEIwODk5X09GRjJfRVFfSV9JTklUX0NPRUZGXzIJCTB4ZjMyOAorI2RlZmluZSBTVEIwODk5X09GRjNfRVFfSV9JTklUX0NPRUZGXzMJCTB4ZjMyYworI2RlZmluZSBTVEIwODk5X09GRjRfRVFfSV9JTklUX0NPRUZGXzQJCTB4ZjMzMAorI2RlZmluZSBTVEIwODk5X09GRjVfRVFfSV9JTklUX0NPRUZGXzUJCTB4ZjMzNAorI2RlZmluZSBTVEIwODk5X09GRjZfRVFfSV9JTklUX0NPRUZGXzYJCTB4ZjMzOAorI2RlZmluZSBTVEIwODk5X09GRjdfRVFfSV9JTklUX0NPRUZGXzcJCTB4ZjMzYworI2RlZmluZSBTVEIwODk5X09GRjhfRVFfSV9JTklUX0NPRUZGXzgJCTB4ZjM0MAorI2RlZmluZSBTVEIwODk5X09GRjlfRVFfSV9JTklUX0NPRUZGXzkJCTB4ZjM0NAorI2RlZmluZSBTVEIwODk5X09GRmFfRVFfSV9JTklUX0NPRUZGXzEwCQkweGYzNDgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0VRX0lfSU5JVF9DT0VGRl9OCQkweDAwMDAwNDQwCisjZGVmaW5lIFNUQjA4OTlfRVFfSV9JTklUX0NPRUZGX04JCSgweDBmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9JX0lOSVRfQ09FRkZfTgkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0VRX0lfSU5JVF9DT0VGRl9OCQkxMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9FUV9RX0lOSVRfQ09FRkZfMAkJMHhmMzUwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMV9FUV9RX0lOSVRfQ09FRkZfMQkJMHhmMzU0CisjZGVmaW5lIFNUQjA4OTlfT0ZGMl9FUV9RX0lOSVRfQ09FRkZfMgkJMHhmMzU4CisjZGVmaW5lIFNUQjA4OTlfT0ZGM19FUV9RX0lOSVRfQ09FRkZfMwkJMHhmMzVjCisjZGVmaW5lIFNUQjA4OTlfT0ZGNF9FUV9RX0lOSVRfQ09FRkZfNAkJMHhmMzYwCisjZGVmaW5lIFNUQjA4OTlfT0ZGNV9FUV9RX0lOSVRfQ09FRkZfNQkJMHhmMzY0CisjZGVmaW5lIFNUQjA4OTlfT0ZGNl9FUV9RX0lOSVRfQ09FRkZfNgkJMHhmMzY4CisjZGVmaW5lIFNUQjA4OTlfT0ZGN19FUV9RX0lOSVRfQ09FRkZfNwkJMHhmMzZjCisjZGVmaW5lIFNUQjA4OTlfT0ZGOF9FUV9RX0lOSVRfQ09FRkZfOAkJMHhmMzcwCisjZGVmaW5lIFNUQjA4OTlfT0ZGOV9FUV9RX0lOSVRfQ09FRkZfOQkJMHhmMzc0CisjZGVmaW5lIFNUQjA4OTlfT0ZGYV9FUV9RX0lOSVRfQ09FRkZfMTAJCTB4ZjM3OAorI2RlZmluZSBTVEIwODk5X0JBU0VfRVFfUV9JTklUX0NPRUZGX04JCTB4MDAwMDA0NDAKKyNkZWZpbmUgU1RCMDg5OV9FUV9RX0lOSVRfQ09FRkZfTgkJKDB4MGZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VRX1FfSU5JVF9DT0VGRl9OCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVFfUV9JTklUX0NPRUZGX04JCTEyCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0VRX0lfT1VUX0NPRUZGXzAJCTB4ZjMwMAorI2RlZmluZSBTVEIwODk5X09GRjFfRVFfSV9PVVRfQ09FRkZfMQkJMHhmMzA0CisjZGVmaW5lIFNUQjA4OTlfT0ZGMl9FUV9JX09VVF9DT0VGRl8yCQkweGYzMDgKKyNkZWZpbmUgU1RCMDg5OV9PRkYzX0VRX0lfT1VUX0NPRUZGXzMJCTB4ZjMwYworI2RlZmluZSBTVEIwODk5X09GRjRfRVFfSV9PVVRfQ09FRkZfNAkJMHhmMzEwCisjZGVmaW5lIFNUQjA4OTlfT0ZGNV9FUV9JX09VVF9DT0VGRl81CQkweGYzMTQKKyNkZWZpbmUgU1RCMDg5OV9PRkY2X0VRX0lfT1VUX0NPRUZGXzYJCTB4ZjMxOAorI2RlZmluZSBTVEIwODk5X09GRjdfRVFfSV9PVVRfQ09FRkZfNwkJMHhmMzFjCisjZGVmaW5lIFNUQjA4OTlfT0ZGOF9FUV9JX09VVF9DT0VGRl84CQkweGYzMjAKKyNkZWZpbmUgU1RCMDg5OV9PRkY5X0VRX0lfT1VUX0NPRUZGXzkJCTB4ZjMyNAorI2RlZmluZSBTVEIwODk5X09GRmFfRVFfSV9PVVRfQ09FRkZfMTAJCTB4ZjMyOAorI2RlZmluZSBTVEIwODk5X0JBU0VfRVFfSV9PVVRfQ09FRkZfTgkJMHgwMDAwMDQ2MAorI2RlZmluZSBTVEIwODk5X0VRX0lfT1VUX0NPRUZGX04JCSgweDBmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUV9JX09VVF9DT0VGRl9OCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVFfSV9PVVRfQ09FRkZfTgkJMTIKKworI2RlZmluZSBTVEIwODk5X09GRjBfRVFfUV9PVVRfQ09FRkZfMAkJMHhmMzMwCisjZGVmaW5lIFNUQjA4OTlfT0ZGMV9FUV9RX09VVF9DT0VGRl8xCQkweGYzMzQKKyNkZWZpbmUgU1RCMDg5OV9PRkYyX0VRX1FfT1VUX0NPRUZGXzIJCTB4ZjMzOAorI2RlZmluZSBTVEIwODk5X09GRjNfRVFfUV9PVVRfQ09FRkZfMwkJMHhmMzNjCisjZGVmaW5lIFNUQjA4OTlfT0ZGNF9FUV9RX09VVF9DT0VGRl80CQkweGYzNDAKKyNkZWZpbmUgU1RCMDg5OV9PRkY1X0VRX1FfT1VUX0NPRUZGXzUJCTB4ZjM0NAorI2RlZmluZSBTVEIwODk5X09GRjZfRVFfUV9PVVRfQ09FRkZfNgkJMHhmMzQ4CisjZGVmaW5lIFNUQjA4OTlfT0ZGN19FUV9RX09VVF9DT0VGRl83CQkweGYzNGMKKyNkZWZpbmUgU1RCMDg5OV9PRkY4X0VRX1FfT1VUX0NPRUZGXzgJCTB4ZjM1MAorI2RlZmluZSBTVEIwODk5X09GRjlfRVFfUV9PVVRfQ09FRkZfOQkJMHhmMzU0CisjZGVmaW5lIFNUQjA4OTlfT0ZGYV9FUV9RX09VVF9DT0VGRl8xMAkJMHhmMzU4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9FUV9RX09VVF9DT0VGRl9OCQkweDAwMDAwNDYwCisjZGVmaW5lIFNUQjA4OTlfRVFfUV9PVVRfQ09FRkZfTgkJKDB4MGZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VRX1FfT1VUX0NPRUZGX04JCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FUV9RX09VVF9DT0VGRl9OCQkxMgorCisvKglTMiBGRUMJKi8KKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0JMT0NLX0xOR1RICQkweGZhMDQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JMT0NLX0xOR1RICQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfQkxPQ0tfTEVOR1RICQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CTE9DS19MRU5HVEgJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9CTE9DS19MRU5HVEgJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfUk9XX1NUUgkJCTB4ZmEwOAorI2RlZmluZSBTVEIwODk5X0JBU0VfUk9XX1NUUgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9ST1dfU1RSSURFCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ST1dfU1RSSURFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUk9XX1NUUklERQkJOAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9NQVhfSVRFUgkJCTB4ZmEwYworI2RlZmluZSBTVEIwODk5X0JBU0VfTUFYX0lURVIJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfTUFYX0lURVJBVElPTlMJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX01BWF9JVEVSQVRJT05TCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTUFYX0lURVJBVElPTlMJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfQk5fRU5EX0FERFIJCTB4ZmExMAorI2RlZmluZSBTVEIwODk5X0JBU0VfQk5fRU5EX0FERFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CTl9FTkRfQUREUgkJCSgweDBmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CTl9FTkRfQUREUgkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JOX0VORF9BRERSCQkxMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9DTl9FTkRfQUREUgkJMHhmYTE0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9DTl9FTkRfQUREUgkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0NOX0VORF9BRERSCQkJKDB4MGZmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NOX0VORF9BRERSCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ05fRU5EX0FERFIJCTEyCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0lORk9fTEVOR1RICQkweGZhMWMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0lORk9fTEVOR1RICQkweDAwMDAwMDAwCisjZGVmaW5lIFNUQjA4OTlfSU5GT19MRU5HVEgJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0lORk9fTEVOR1RICQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSU5GT19MRU5HVEgJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfQk9UX0FERFIJCQkweGZhMjAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JPVF9BRERSCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTVEIwODk5X0JPVFRPTV9CQVNFX0FERFIJCSgweDAzZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CT1RUT01fQkFTRV9BRERSCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQk9UVE9NX0JBU0VfQUREUgkJMTAKKworI2RlZmluZSBTVEIwODk5X09GRjBfQkNIX0JMS19MTgkJCTB4ZmEyNAorI2RlZmluZSBTVEIwODk5X0JBU0VfQkNIX0JMS19MTgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CQ0hfQkxPQ0tfTEVOR1RICQkoMHhmZmZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkNIX0JMT0NLX0xFTkdUSAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9CTE9DS19MRU5HVEgJCTE2CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0JDSF9UCQkJMHhmYTI4CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9CQ0hfVAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1RCMDg5OV9CQ0hfVAkJCQkoMHgwZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JDSF9UCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9UCQkJNAorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9DTkZHX01PREUJCQkweGZhMDAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NORkdfTU9ERQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgU1RCMDg5OV9NT0RDT0QJCQkJKDB4MWYgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9NT0RDT0QJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTU9EQ09ECQkJNQorI2RlZmluZSBTVEIwODk5X01PRENPRF9TRUwJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX01PRENPRF9TRUwJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9NT0RDT0RfU0VMCQkxCisjZGVmaW5lIFNUQjA4OTlfQ09ORklHX01PREUJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NPTkZJR19NT0RFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ09ORklHX01PREUJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfTERQQ19TVEFUCQkJMHhmYTA0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9MRFBDX1NUQVQJCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfSVRFUkFUSU9OCQkJKDB4ZmYgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JVEVSQVRJT04JCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSVRFUkFUSU9OCQkJOAorI2RlZmluZSBTVEIwODk5X0xEUENfREVDX1NUQVRFCQkJKDB4MDcgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MRFBDX0RFQ19TVEFURQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0xEUENfREVDX1NUQVRFCQkzCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0lURVJfU0NBTEUJCQkweGZhMDgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0lURVJfU0NBTEUJCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfSVRFUkFUSU9OX1NDQUxFCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JVEVSQVRJT05fU0NBTEUJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JVEVSQVRJT05fU0NBTEUJCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfSU5QVVRfTU9ERQkJCTB4ZmEwYworI2RlZmluZSBTVEIwODk5X0JBU0VfSU5QVVRfTU9ERQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgU1RCMDg5OV9TRF9CTE9DSzFfU1RSRUFNMAkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TRF9CTE9DSzFfU1RSRUFNMAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NEX0JMT0NLMV9TVFJFQU0wCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0xEUENERUNSU1QJCQkweGZhMTAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0xEUENERUNSU1QJCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfTERQQ19ERUNfUlNUCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MRFBDX0RFQ19SU1QJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9MRFBDX0RFQ19SU1QJCTEKKworI2RlZmluZSBTVEIwODk5X09GRjBfQ0xLX1BFUl9CWVRFX1JXCQkweGZhMTQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NMS19QRVJfQllURV9SVwkJMHgwMDAwMDgwMAorI2RlZmluZSBTVEIwODk5X0NMS1NfUEVSX0JZVEUJCQkoMHgwZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NMS1NfUEVSX0JZVEUJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DTEtTX1BFUl9CWVRFCQk1CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0JDSF9FUlJPUlMJCQkweGZhMTgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JDSF9FUlJPUlMJCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfQkNIX0VSUk9SUwkJCSgweDBmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkNIX0VSUk9SUwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9FUlJPUlMJCTQKKworI2RlZmluZSBTVEIwODk5X09GRjBfTERQQ19FUlJPUlMJCTB4ZmExYworI2RlZmluZSBTVEIwODk5X0JBU0VfTERQQ19FUlJPUlMJCTB4MDAwMDA4MDAKKyNkZWZpbmUgU1RCMDg5OV9MRFBDX0VSUk9SUwkJCSgweGZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MRFBDX0VSUk9SUwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0xEUENfRVJST1JTCQkxNgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9CQ0hfTU9ERQkJCTB4ZmEyMAorI2RlZmluZSBTVEIwODk5X0JBU0VfQkNIX01PREUJCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfQkNIX0NPUlJFQ1RfTgkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkNIX0NPUlJFQ1RfTgkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9DT1JSRUNUX04JCTEKKyNkZWZpbmUgU1RCMDg5OV9GVUxMX0JZUEFTUwkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlVMTF9CWVBBU1MJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GVUxMX0JZUEFTUwkJMQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9FUlJfQUNDX1BFUgkJMHhmYTI0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9FUlJfQUNDX1BFUgkJMHgwMDAwMDgwMAorI2RlZmluZSBTVEIwODk5X0JDSF9FUlJfQUNDX1BFUklPRAkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQ0hfRVJSX0FDQ19QRVJJT0QJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9FUlJfQUNDX1BFUklPRAk0CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0JDSF9FUlJfQUNDCQkweGZhMjgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0JDSF9FUlJfQUNDCQkweDAwMDAwODAwCisjZGVmaW5lIFNUQjA4OTlfQkNIX0VSUl9BQ0NVTQkJCSgweGZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQkNIX0VSUl9BQ0NVTQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9FUlJfQUNDVU0JCTgKKworI2RlZmluZSBTVEIwODk5X09GRjBfRkVDX0NPUkVfSURfUkVHCQkweGZhMmMKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZFQ19DT1JFX0lEX1JFRwkJMHgwMDAwMDgwMAorI2RlZmluZSBTVEIwODk5X0ZFQ19DT1JFX0lECQkJKDB4ZmZmZmZmZmYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GRUNfQ09SRV9JRAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZFQ19DT1JFX0lECQkzMgorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9GRUNfVkVSX0lEX1JFRwkJMHhmYTM0CisjZGVmaW5lIFNUQjA4OTlfQkFTRV9GRUNfVkVSX0lEX1JFRwkJMHgwMDAwMDgwMAorI2RlZmluZSBTVEIwODk5X0ZFQ19WRVJfSUQJCQkoMHhmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFQ19WRVJfSUQJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GRUNfVkVSX0lECQk4CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0ZFQ19UUF9TRUwJCQkweGZhMzgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0ZFQ19UUF9TRUwJCQkweDAwMDAwODAwCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDEJCQkweGYzMTAKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDEJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfQ1NNX0ZPUkNFX0ZSRVFMT0NLCQkoMHgwMSA8PCAxOSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DU01fRk9SQ0VfRlJFUUxPQ0sJMTkKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fRk9SQ0VfRlJFUUxPQ0sJMQorI2RlZmluZSBTVEIwODk5X0NTTV9GUkVRX0xPQ0tTVEFURQkJKDB4MDEgPDwgMTgpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1NNX0ZSRVFfTE9DS1NUQVRFCTE4CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1NNX0ZSRVFfTE9DS1NUQVRFCTEKKyNkZWZpbmUgU1RCMDg5OV9DU01fQVVUT19QQVJBTQkJCSgweDAxIDw8IDE3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9BVVRPX1BBUkFNCQkxNworI2RlZmluZSBTVEIwODk5X1dJRFRIX0NTTV9BVVRPX1BBUkFNCQkxCisjZGVmaW5lIFNUQjA4OTlfRkVfTE9PUF9TSElGVAkJCSgweDA3IDw8IDE0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZFX0xPT1BfU0hJRlQJCTE0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRkVfTE9PUF9TSElGVAkJMworI2RlZmluZSBTVEIwODk5X0NTTV9BR0NfU0hJRlQJCQkoMHgwNyA8PCAxMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DU01fQUdDX1NISUZUCQkxMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NTTV9BR0NfU0hJRlQJCTMKKyNkZWZpbmUgU1RCMDg5OV9DU01fQUdDX0dBSU4JCQkoMHgxZmYgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DU01fQUdDX0dBSU4JCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fQUdDX0dBSU4JCTkKKyNkZWZpbmUgU1RCMDg5OV9DU01fVFdPX1BBU1MJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9UV09fUEFTUwkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NTTV9UV09fUEFTUwkJMQorI2RlZmluZSBTVEIwODk5X0NTTV9EVlRfVEFCTEUJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9EVlRfVEFCTEUJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fRFZUX1RBQkxFCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDIJCQkweGYzMTQKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDIJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfQ1NNX0dBTU1BX1JIT19BQ1EJCSgweDFmZiA8PCA5KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9HQU1NQV9SSE9BQ1EJCTkKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fR0FNTUFfUkhPQUNRCQk5CisjZGVmaW5lIFNUQjA4OTlfQ1NNX0dBTU1BX0FDUQkJCSgweDFmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9HQU1NQV9BQ1EJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fR0FNTUFfQUNRCQk5CisKKyNkZWZpbmUgU1RCMDg5OV9PRkYwX0NTTV9DTlRSTDMJCQkweGYzMTgKKyNkZWZpbmUgU1RCMDg5OV9CQVNFX0NTTV9DTlRSTDMJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNUQjA4OTlfQ1NNX0dBTU1BX1JIT19UUkFDSwkJKDB4MWZmIDw8IDkpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1NNX0dBTU1BX1JIT1RSQUNLCTkKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fR0FNTUFfUkhPVFJBQ0sJOQorI2RlZmluZSBTVEIwODk5X0NTTV9HQU1NQV9UUkFDSwkJCSgweDFmZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9HQU1NQV9UUkFDSwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NTTV9HQU1NQV9UUkFDSwkJOQorCisjZGVmaW5lIFNUQjA4OTlfT0ZGMF9DU01fQ05UUkw0CQkJMHhmMzFjCisjZGVmaW5lIFNUQjA4OTlfQkFTRV9DU01fQ05UUkw0CQkJMHgwMDAwMDQwMAorI2RlZmluZSBTVEIwODk5X0NTTV9QSEFTRURJRkZfVEhSRVNICQkoMHgwZiA8PCA4KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NTTV9QSEFTRURJRkZfVEhSRVNICTgKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DU01fUEhBU0VESUZGX1RIUkVTSAk0CisjZGVmaW5lIFNUQjA4OTlfQ1NNX0xPQ0tDT1VOVF9USFJFU0gJCSgweGZmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1NNX0xPQ0tDT1VOVF9USFJFU0gJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NTTV9MT0NLQ09VTlRfVEhSRVNICTgKKworLyoJQ2hlY2sgb24gY2hhcHRlciA4IHBhZ2UgNDIJKi8KKyNkZWZpbmUgU1RCMDg5OV9FUlJDVFJMMQkJCTB4ZjU3NAorI2RlZmluZSBTVEIwODk5X0VSUkNUUkwyCQkJMHhmNTc1CisjZGVmaW5lIFNUQjA4OTlfRVJSQ1RSTDMJCQkweGY1NzYKKyNkZWZpbmUgU1RCMDg5OV9FUlJfU1JDX1MxCQkJKDB4MWYgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUlJfU1JDX1MxCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVJSX1NSQ19TMQkJNQorI2RlZmluZSBTVEIwODk5X0VSUl9TUkNfUzIJCQkoMHgwZiA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VSUl9TUkNfUzIJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FUlJfU1JDX1MyCQk0CisjZGVmaW5lIFNUQjA4OTlfTk9FCQkJCSgweDA3IDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTk9FCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX05PRQkJCTMKKworI2RlZmluZSBTVEIwODk5X0VDTlQxTQkJCQkweGY1MjQKKyNkZWZpbmUgU1RCMDg5OV9FQ05UMUwJCQkJMHhmNTI1CisjZGVmaW5lIFNUQjA4OTlfRUNOVDJNCQkJCTB4ZjUyNgorI2RlZmluZSBTVEIwODk5X0VDTlQyTAkJCQkweGY1MjcKKyNkZWZpbmUgU1RCMDg5OV9FQ05UM00JCQkJMHhmNTI4CisjZGVmaW5lIFNUQjA4OTlfRUNOVDNMCQkJCTB4ZjUyOQorCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzEJCQkweGY1N2IKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMV9XQUlUXzFTVEVQCQkoMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X0RNT05NU0sxX0ZSRUVfMTQJCSgxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzFfQVZSR1ZJVF9DQUxDCQkoMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X0RNT05NU0sxX0ZSRUVfMTIJCSgxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzFfRlJFRV8xMQkJKDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMV9CMERJVl9DQUxDCQkoMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X0RNT05NU0sxX0tESVZCMV9DQUxDCQkoMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X0RNT05NU0sxX0tESVZCMl9DQUxDCQkoMSA8PCAwKQorCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzAJCQkweGY1N2MKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMF9TTU9UVEhfQ0FMQwkJKDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMF9GUkVFXzYJCQkoMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X0RNT05NU0swX1NJR1BPV0VSX0NBTEMJCSgxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzBfUVNFVUlMX0NBTEMJCSgxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfRE1PTk1TSzBfRlJFRV8zCQkJKDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMF9GUkVFXzIJCQkoMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X0RNT05NU0swX0tWRElWQjFfQ0FMQwkJKDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9ETU9OTVNLMF9LVkRJVkIyX0NBTEMJCSgxIDw8IDApCisKKyNkZWZpbmUgU1RCMDg5OV9UU1VMQwkJCQkweGY1NDkKKyNkZWZpbmUgU1RCMDg5OV9VTE5PU1lOQ0JZVEVTCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VTE5PU1lOQ0JZVEVTCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVUxOT1NZTkNCWVRFUwkJMQorI2RlZmluZSBTVEIwODk5X1VMUEFSSVRZX09OCQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VTFBBUklUWV9PTgkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1VMUEFSSVRZX09OCQkxCisjZGVmaW5lIFNUQjA4OTlfVUxTWU5DT1VUUlMJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1VMU1lOQ09VVFJTCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVUxTWU5DT1VUUlMJCTEKKyNkZWZpbmUgU1RCMDg5OV9VTERTU19QQUNLRVRTCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9VTERTU19QQUNLRVRTCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVUxEU1NfUEFDS0VUUwkJMQorCisjZGVmaW5lIFNUQjA4OTlfVFNMUEwJCQkJMHhmNTRiCisjZGVmaW5lIFNUQjA4OTlfTExEVkJTMl9NT0RFCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MTERWQlMyX01PREUJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9MTERWQlMyX01PREUJCTEKKyNkZWZpbmUgU1RCMDg5OV9MTElTU1lJX09OCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MTElTU1lJX09OCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTExJU1NZSV9PTgkJMQorI2RlZmluZSBTVEIwODk5X0xMTlBEX09OCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MTE5QRF9PTgkJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9MTE5QRF9PTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9MTENSQzhfT04JCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0xMQ1JDOF9PTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9MTENSQzhfT04JCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9UU0NGR0gJCQkJMHhmNTRjCisjZGVmaW5lIFNUQjA4OTlfT1VUUlNfUFMJCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX09VVFJTX1BTCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX09VVFJTX1BTCQkJMQorI2RlZmluZSBTVEIwODk5X1NZTkNCWVRFCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TWU5DQllURQkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TWU5DQllURQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9QRkJJVAkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1BGQklUCQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1BGQklUCQkJMQorI2RlZmluZSBTVEIwODk5X0VSUl9CSVQJCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUlJfQklUCQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0VSUl9CSVQJCQkxCisjZGVmaW5lIFNUQjA4OTlfTVBFRwkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX01QRUcJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTVBFRwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9DTEtfUE9MCQkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ0xLX1BPTAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DTEtfUE9MCQkJMQorI2RlZmluZSBTVEIwODk5X0ZPUkNFMAkJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZPUkNFMAkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GT1JDRTAJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9UU0NGR00JCQkJMHhmNTRkCisjZGVmaW5lIFNUQjA4OTlfTExQUklPUklUWQkJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTExQUklPUklZCQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0xMUFJJT1JJVFkJCTEKKyNkZWZpbmUgU1RCMDg5OV9FTjE4OAkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VOMTg4CQkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0VOMTg4CQkJMQorCisjZGVmaW5lIFNUQjA4OTlfVFNDRkdMCQkJCTB4ZjU0ZQorI2RlZmluZSBTVEIwODk5X0RFTF9FUlJQQ0sJCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RFTF9FUlJQQ0sJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9ERUxfRVJSUENLCQkxCisjZGVmaW5lIFNUQjA4OTlfRVJSRkxBR1NURAkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRVJSRkxBR1NURAkJNQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0VSUkZMQUdTVEQJCTEKKyNkZWZpbmUgU1RCMDg5OV9NUEVHRVJSCQkJCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTVBFR0VSUgkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9NUEVHRVJSCQkJMQorI2RlZmluZSBTVEIwODk5X0JDSF9DSEsJCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQ0hfQ0hLCQkJNQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9DSEsJCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JDOENISwkJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NSQzhDSEsJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1JDOENISwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9TUEVDX0lORk8JCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NQRUNfSU5GTwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TUEVDX0lORk8JCQkxCisjZGVmaW5lIFNUQjA4OTlfTE9XX1BSSU9fQ0xLCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9MT1dfUFJJT19DTEsJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9MT1dfUFJJT19DTEsJCTEKKyNkZWZpbmUgU1RCMDg5OV9FUlJPUl9OT1JNCQkJKDB4MDAgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9FUlJPUl9OT1JNCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVJST1JfTk9STQkJMAorCisjZGVmaW5lIFNUQjA4OTlfVFNPVVQJCQkJMHhmNTRmCisjZGVmaW5lIFNUQjA4OTlfUlNTWU5DREVMCQkJMHhmNTUwCisjZGVmaW5lIFNUQjA4OTlfVFNJTkhERUxICQkJMHhmNTUxCisjZGVmaW5lIFNUQjA4OTlfVFNJTkhERUxNCQkJMHhmNTUyCisjZGVmaW5lIFNUQjA4OTlfVFNJTkhERUxMCQkJMHhmNTUzCisjZGVmaW5lIFNUQjA4OTlfVFNMTFNUS00JCQkweGY1NWEKKyNkZWZpbmUgU1RCMDg5OV9UU0xMU1RLTAkJCTB4ZjU1YgorI2RlZmluZSBTVEIwODk5X1RTVUxTVEtNCQkJMHhmNTVjCisjZGVmaW5lIFNUQjA4OTlfVFNVTFNUS0wJCQkweGY1NWQKKyNkZWZpbmUgU1RCMDg5OV9UU1NUQVRVUwkJCTB4ZjU2MQorCisjZGVmaW5lIFNUQjA4OTlfUERFTENUUkwJCQkweGY2MDAKKyNkZWZpbmUgU1RCMDg5OV9JTlZFUlRfUkVTCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JTlZFUlRfUkVTCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSU5WRVJUX1JFUwkJMQorI2RlZmluZSBTVEIwODk5X0ZPUkNFX0FDQ0VQVEVECQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GT1JDRV9BQ0NFUFRFRAkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZPUkNFX0FDQ0VQVEVECQkxCisjZGVmaW5lIFNUQjA4OTlfRklMVEVSX0VOCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GSUxURVJfRU4JCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRklMVEVSX0VOCQkJMQorI2RlZmluZSBTVEIwODk5X0xPQ0tGQUxMX1RIUkVTSAkJCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTE9DS0ZBTExfVEhSRVNICQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTE9DS0ZBTExfVEhSRVNICQkxCisjZGVmaW5lIFNUQjA4OTlfSFlTVF9FTgkJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0hZU1RfRU4JCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSFlTVF9FTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9IWVNUX1NXUlNUCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9IWVNUX1NXUlNUCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSFlTVF9TV1JTVAkJMQorI2RlZmluZSBTVEIwODk5X0FMR09fRU4JCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BTEdPX0VOCQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FMR09fRU4JCQkxCisjZGVmaW5lIFNUQjA4OTlfQUxHT19TV1JTVAkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQUxHT19TV1JTVAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FMR09fU1dSU1QJCTEKKworI2RlZmluZSBTVEIwODk5X1BERUxDVFJMMgkJCTB4ZjYwMQorI2RlZmluZSBTVEIwODk5X0JCSENUUkwxCQkJMHhmNjAyCisjZGVmaW5lIFNUQjA4OTlfQkJIQ1RSTDIJCQkweGY2MDMKKyNkZWZpbmUgU1RCMDg5OV9IWVNUVEhSRVNICQkJMHhmNjA0CisKKyNkZWZpbmUgU1RCMDg5OV9NQVRDU1RNCQkJCTB4ZjYwNQorI2RlZmluZSBTVEIwODk5X01BVENTVEwJCQkJMHhmNjA2CisjZGVmaW5lIFNUQjA4OTlfVVBMQ1NUTQkJCQkweGY2MDcKKyNkZWZpbmUgU1RCMDg5OV9VUExDU1RMCQkJCTB4ZjYwOAorI2RlZmluZSBTVEIwODk5X0RGTENTVE0JCQkJMHhmNjA5CisjZGVmaW5lIFNUQjA4OTlfREZMQ1NUTAkJCQkweGY2MGEKKyNkZWZpbmUgU1RCMDg5OV9TWU5DQ1NUCQkJCTB4ZjYwYgorI2RlZmluZSBTVEIwODk5X1NZTkNEQ1NUTQkJCTB4ZjYwYworI2RlZmluZSBTVEIwODk5X1NZTkNEQ1NUTAkJCTB4ZjYwZAorI2RlZmluZSBTVEIwODk5X0lTSV9FTlRSWQkJCTB4ZjYwZQorI2RlZmluZSBTVEIwODk5X0lTSV9CSVRfRU4JCQkweGY2MGYKKyNkZWZpbmUgU1RCMDg5OV9NQVRTVFJNCQkJCTB4ZjYxMAorI2RlZmluZSBTVEIwODk5X01BVFNUUkwJCQkJMHhmNjExCisjZGVmaW5lIFNUQjA4OTlfVVBMU1RSTQkJCQkweGY2MTIKKyNkZWZpbmUgU1RCMDg5OV9VUExTVFJMCQkJCTB4ZjYxMworI2RlZmluZSBTVEIwODk5X0RGTFNUUk0JCQkJMHhmNjE0CisjZGVmaW5lIFNUQjA4OTlfREZMU1RSTAkJCQkweGY2MTUKKyNkZWZpbmUgU1RCMDg5OV9TWU5DU1RSCQkJCTB4ZjYxNgorI2RlZmluZSBTVEIwODk5X1NZTkNEU1RSTQkJCTB4ZjYxNworI2RlZmluZSBTVEIwODk5X1NZTkNEU1RSTAkJCTB4ZjYxOAorCisjZGVmaW5lIFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzEJCQkweGY2MTkKKyNkZWZpbmUgU1RCMDg5OV9CQURERkwJCQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQURERkwJCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkFEREZMCQkJMQorI2RlZmluZSBTVEIwODk5X0NPTlRJTlVPVVNfU1RSRUFNCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0NPTlRJTlVPVVNfU1RSRUFNCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ09OVElOVU9VU19TVFJFQU0JCTEKKyNkZWZpbmUgU1RCMDg5OV9BQ0NFUFRFRF9TVFJFQU0JCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FDQ0VQVEVEX1NUUkVBTQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FDQ0VQVEVEX1NUUkVBTQkJMQorI2RlZmluZSBTVEIwODk5X0JDSF9FUlJGTEFHCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQ0hfRVJSRkxBRwkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDSF9FUlJGTEFHCQkxCisjZGVmaW5lIFNUQjA4OTlfQ1JDUkVTCQkJCSgweDAxIDw8IDIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1JDUkVTCQkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0NSQ1JFUwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9DRkdQREVMU1RBVFVTX0xPQ0sJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ0ZHUERFTFNUQVRVU19MT0NLCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DRkdQREVMU1RBVFVTX0xPQ0sJMQorI2RlZmluZSBTVEIwODk5XzFTVExPQ0sJCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF8xU1RMT0NLCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIXzFTVExPQ0sJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9DRkdQREVMU1RBVFVTMgkJCTB4ZjYxYQorI2RlZmluZSBTVEIwODk5X0JCRkVSUk9STQkJCTB4ZjYxYgorI2RlZmluZSBTVEIwODk5X0JCRkVSUk9STAkJCTB4ZjYxYworI2RlZmluZSBTVEIwODk5X1VQS1RFUlJPUk0JCQkweGY2MWQKKyNkZWZpbmUgU1RCMDg5OV9VUEtURVJST1JMCQkJMHhmNjFlCisKKyNkZWZpbmUgU1RCMDg5OV9UU1RDSwkJCQkweGZmMTAKKworI2RlZmluZSBTVEIwODk5X1RTVFJFUwkJCQkweGZmMTEKKyNkZWZpbmUgU1RCMDg5OV9GUkVTTERQQwkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlJFU0xEUEMJCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRlJFU0xEUEMJCQkxCisjZGVmaW5lIFNUQjA4OTlfRlJFU1JTCQkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlJFU1JTCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZSRVNSUwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9GUkVTVklUCQkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlJFU1ZJVAkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GUkVTVklUCQkJMQorI2RlZmluZSBTVEIwODk5X0ZSRVNNQVMxXzIJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZSRVNNQVMxXzIJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GUkVTTUFTMV8yCQkxCisjZGVmaW5lIFNUQjA4OTlfRlJFU0FDUwkJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZSRVNBQ1MJCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRlJFU0FDUwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9GUkVTU1lNCQkJCSgweDAxIDw8IDIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRlJFU1NZTQkJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GUkVTU1lNCQkJMQorI2RlZmluZSBTVEIwODk5X0ZSRVNNQVMJCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GUkVTTUFTCQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZSRVNNQVMJCQkxCisjZGVmaW5lIFNUQjA4OTlfRlJFU0lOVAkJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZSRVNJTklUCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZSRVNJTklUCQkJMQorCisjZGVmaW5lIFNUQjA4OTlfVFNUT1VUCQkJCTB4ZmYxMgorI2RlZmluZSBTVEIwODk5X0VOX1NJR05BVFVSRQkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRU5fU0lHTkFUVVJFCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRU5fU0lHTkFUVVJFCQkxCisjZGVmaW5lIFNUQjA4OTlfQkNMS19DTEsJCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0JDTEtfQ0xLCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDTEtfQ0xLCQkJMQorI2RlZmluZSBTVEIwODk5X1NHTkxfT1VUCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TR05MX09VVAkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TR05MX09VVAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9UUwkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RTCQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1RTCQkJMQorI2RlZmluZSBTVEIwODk5X0NURVNUCQkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQ1RFU1QJCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQ1RFU1QJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9UU1RJTgkJCQkweGZmMTMKKyNkZWZpbmUgU1RCMDg5OV9URVNUX0lOCQkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVEVTVF9JTgkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9URVNUX0lOCQkJMQorI2RlZmluZSBTVEIwODk5X0VOX0FEQwkJCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VOX0FEQwkJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FTkFEQwkJCTEKKyNkZWZpbmUgU1RCMDg5OV9TR05fQURDCQkJCSgweDAxIDw8IDUpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU0dOX0FEQwkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TR05fQURDCQkJMQorI2RlZmluZSBTVEIwODk5X0JDTEtfSU4JCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQ0xLX0lOCQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JDTEtfSU4JCQkxCisjZGVmaW5lIFNUQjA4OTlfSkVUT05JTl9NT0RFCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9KRVRPTklOX01PREUJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9KRVRPTklOX01PREUJCTEKKyNkZWZpbmUgU1RCMDg5OV9CQ0xLX1ZBTFVFCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CQ0xLX1ZBTFVFCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQkNMS19WQUxVRQkJMQorI2RlZmluZSBTVEIwODk5X1NHTlJTVF9UMTIJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NHTlJTVF9UMTIJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TR05SU1RfVDEyCQkxCisjZGVmaW5lIFNUQjA4OTlfTE9XU1BfRU5BWAkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTE9XU1BfRU5BWAkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0xPV1NQX0VOQVgJCTEKKworI2RlZmluZSBTVEIwODk5X1RTVFNZUwkJCQkweGZmMTQKKyNkZWZpbmUgU1RCMDg5OV9UU1RDSElQCQkJCTB4ZmYxNQorI2RlZmluZSBTVEIwODk5X1RTVEZSRUUJCQkJMHhmZjE2CisjZGVmaW5lIFNUQjA4OTlfVFNUSTJDCQkJCTB4ZmYxNworI2RlZmluZSBTVEIwODk5X0JJVFNQRUVETQkJCTB4ZmYxYworI2RlZmluZSBTVEIwODk5X0JJVFNQRUVETAkJCTB4ZmYxZAorI2RlZmluZSBTVEIwODk5X1RCVVNCSVQJCQkJMHhmZjFlCisjZGVmaW5lIFNUQjA4OTlfVFNURElTCQkJCTB4ZmYyNAorI2RlZmluZSBTVEIwODk5X1RTVERJU1JYCQkJMHhmZjI1CisjZGVmaW5lIFNUQjA4OTlfVFNUSkVUT04JCQkweGZmMjgKKyNkZWZpbmUgU1RCMDg5OV9UU1REQ0FESgkJCTB4ZmY0MAorI2RlZmluZSBTVEIwODk5X1RTVEFHQzEJCQkJMHhmZjQxCisjZGVmaW5lIFNUQjA4OTlfVFNUQUdDMU4JCQkweGZmNDIKKyNkZWZpbmUgU1RCMDg5OV9UU1RQT0xZUEgJCQkweGZmNDgKKyNkZWZpbmUgU1RCMDg5OV9UU1RSCQkJCTB4ZmY0OQorI2RlZmluZSBTVEIwODk5X1RTVEFHQzIJCQkJMHhmZjRhCisjZGVmaW5lIFNUQjA4OTlfVFNUQ1RMMQkJCQkweGZmNGIKKyNkZWZpbmUgU1RCMDg5OV9UU1RDVEwyCQkJCTB4ZmY0YworI2RlZmluZSBTVEIwODk5X1RTVENUTDMJCQkJMHhmZjRkCisjZGVmaW5lIFNUQjA4OTlfVFNUREVNQVAJCQkweGZmNTAKKyNkZWZpbmUgU1RCMDg5OV9UU1RERU1BUDIJCQkweGZmNTEKKyNkZWZpbmUgU1RCMDg5OV9UU1RERU1NT04JCQkweGZmNTIKKyNkZWZpbmUgU1RCMDg5OV9UU1RSQVRFCQkJCTB4ZmY1MworI2RlZmluZSBTVEIwODk5X1RTVFNFTE9VVAkJCTB4ZmY1NAorI2RlZmluZSBTVEIwODk5X1RTWU5DCQkJCTB4ZmY1NQorI2RlZmluZSBTVEIwODk5X1RTVEVSUgkJCQkweGZmNTYKKyNkZWZpbmUgU1RCMDg5OV9UU1RSQU0xCQkJCTB4ZmY1OAorI2RlZmluZSBTVEIwODk5X1RTVFZTRUxPVVQJCQkweGZmNTkKKyNkZWZpbmUgU1RCMDg5OV9UU1RGT1JDRUlOCQkJMHhmZjVhCisjZGVmaW5lIFNUQjA4OTlfVFNUUlMxCQkJCTB4ZmY1YworI2RlZmluZSBTVEIwODk5X1RTVFJTMgkJCQkweGZmNWQKKyNkZWZpbmUgU1RCMDg5OV9UU1RSUzMJCQkJMHhmZjUzCisKKyNkZWZpbmUgU1RCMDg5OV9JTlRCVUZTVEFUVVMJCQkweGYyMDAKKyNkZWZpbmUgU1RCMDg5OV9JTlRCVUZDVFJMCQkJMHhmMjAxCisjZGVmaW5lIFNUQjA4OTlfUENLTEVOVUwJCQkweGY1NWUKKyNkZWZpbmUgU1RCMDg5OV9QQ0tMRU5MTAkJCTB4ZjU1ZgorI2RlZmluZSBTVEIwODk5X1JTUENLTEVOCQkJMHhmNTYwCisKKy8qCTIgcmVnaXN0ZXJzCSovCisjZGVmaW5lIFNUQjA4OTlfU1lOQ0RDU1QJCQkweGY2MGMKKworLyoJRGlTRXFDCSovCisjZGVmaW5lIFNUQjA4OTlfRElTQ05UUkwxCQkJMHhmMGEwCisjZGVmaW5lIFNUQjA4OTlfVElNT0ZGCQkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfVElNT0ZGCQkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX1RJTU9GRgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9ESVNFUUNSRVNFVAkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRElTRVFDUkVTRVQJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9ESVNFUUNSRVNFVAkJMQorI2RlZmluZSBTVEIwODk5X1RJTUNNRAkJCQkoMHgwMyA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RJTUNNRAkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9USU1DTUQJCQkyCisjZGVmaW5lIFNUQjA4OTlfRElTUFJFQ0hBUkdFCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ESVNQUkVDSEFSR0UJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9ESVNQUkVDSEFSR0UJCTEKKyNkZWZpbmUgU1RCMDg5OV9ESVNFUUNNT0RFCQkJKDB4MDMgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ESVNFUUNNT0RFCQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRElTRVFDTU9ERQkJMgorCisjZGVmaW5lIFNUQjA4OTlfRElTQ05UUkwyCQkJMHhmMGExCisjZGVmaW5lIFNUQjA4OTlfUkVDRUlWRVJfT04JCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1JFQ0VJVkVSX09OCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUkVDRUlWRVJfT04JCTEKKyNkZWZpbmUgU1RCMDg5OV9JR05PX1NIT1JUXzIySwkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSUdOT19TSE9SVF8yMksJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JR05PX1NIT1JUXzIySwkJMQorI2RlZmluZSBTVEIwODk5X09ORUNISVBfVFJYCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9PTkVDSElQX1RSWAkJNQorI2RlZmluZSBTVEIwODk5X1dJRFRIX09ORUNISVBfVFJYCQkxCisjZGVmaW5lIFNUQjA4OTlfRVhUX0VOVkVMT1AJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0VYVF9FTlZFTE9QCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRVhUX0VOVkVMT1AJCTEKKyNkZWZpbmUgU1RCMDg5OV9QSU5fU0VMRUNUCQkJKDB4MDMgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9QSU5fU0VMQ1QJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUElOX1NFTENUCQkJMgorI2RlZmluZSBTVEIwODk5X0lSUV9SWEVORAkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSVJRX1JYRU5ECQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX0lSUV9SWEVORAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9JUlFfNE5CWVRFUwkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSVJRXzROQllURVMJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JUlFfNE5CWVRFUwkJMQorCisjZGVmaW5lIFNUQjA4OTlfRElTUlhfU1QwCQkJMHhmMGE0CisjZGVmaW5lIFNUQjA4OTlfUlhFTkQJCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9SWEVORAkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9SWEVORAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9SWEFDVElWRQkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUlhBQ1RJVkUJCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUlhBQ1RJVkUJCQkxCisjZGVmaW5lIFNUQjA4OTlfU0hPUlQyMksJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NIT1JUMjJLCQkJNQorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NIT1JUMjJLCQkJMQorI2RlZmluZSBTVEIwODk5X0NPTlRUT05FCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9DT05UVE9ORQkJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9DT05UT05FCQkJMQorI2RlZmluZSBTVEIwODk5XzRCRklGT1JFRFkJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUXzRCRklGT1JFRFkJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF80QkZJRk9SRURZCQkxCisjZGVmaW5lIFNUQjA4OTlfRklGT0VNUFRZCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GSUZPRU1QVFkJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRklGT0VNUFRZCQkJMQorI2RlZmluZSBTVEIwODk5X0FCT1JUVFJYCQkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BQk9SVFRSWAkJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BQk9SVFRSWAkJCTEKKworI2RlZmluZSBTVEIwODk5X0RJU1JYX1NUMQkJCTB4ZjBhNQorI2RlZmluZSBTVEIwODk5X1JYRkFJTAkJCQkoMHgwMSA8PCA3KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1JYRkFJTAkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9SWEZBSUwJCQkxCisjZGVmaW5lIFNUQjA4OTlfRklGT1BGQUlMCQkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9GSUZPUEZBSUwJCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRklGT1BGQUlMCQkJMQorI2RlZmluZSBTVEIwODk5X1JYTk9OQllURVMJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1JYTk9OQllURVMJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9SWE5PTkJZVEVTCQkxCisjZGVmaW5lIFNUQjA4OTlfRklGT09WRgkJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZJRk9PVkYJCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfRklGT09WRgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9GSUZPQllURU5CUgkJCSgweDBmIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRklGT0JZVEVOQlIJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9GSUZPQllURU5CUgkJNAorCisjZGVmaW5lIFNUQjA4OTlfRElTUEFSSVRZCQkJMHhmMGE2CisKKyNkZWZpbmUgU1RCMDg5OV9ESVNGSUZPCQkJCTB4ZjBhNworCisjZGVmaW5lIFNUQjA4OTlfRElTU1RBVFVTCQkJMHhmMGE4CisjZGVmaW5lIFNUQjA4OTlfRklGT0ZVTEwJCQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0ZJRk9GVUxMCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0ZJRk9GVUxMCQkJMQorI2RlZmluZSBTVEIwODk5X1RYSURMRQkJCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1RYSURMRQkJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9UWElETEUJCQkxCisjZGVmaW5lIFNUQjA4OTlfR0FQQlVSU1QJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0dBUEJVUlNUCQkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0dBUEJVUlNUCQkJMQorI2RlZmluZSBTVEIwODk5X1RYRklGT0JZVEVTCQkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UWEZJRk9CWVRFUwkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1RYRklGT0JZVEVTCQk0CisjZGVmaW5lIFNUQjA4OTlfRElTRjIyCQkJCTB4ZjBhOQorCisjZGVmaW5lIFNUQjA4OTlfRElTRjIyUlgJCQkweGYwYWEKKworLyoJR2VuZXJhbCBQdXJwb3NlCSovCisjZGVmaW5lIFNUQjA4OTlfU1lTUkVHCQkJCTB4ZjEwMQorI2RlZmluZSBTVEIwODk5X0FDUlBSRVNDCQkJMHhmMTEwCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUlNWRDIJCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUlNWRDIJCQkxCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQUNSUFJFU0MJCQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQUNSUFJFU0MJCQkzCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfUlNWRDEJCQkzCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfUlNWRDEJCQkxCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQUNSUFJFU0MyCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FDUlBSRVNDMgkJCTMKKworI2RlZmluZSBTVEIwODk5X0FDUkRJVjEJCQkJMHhmMTExCisjZGVmaW5lIFNUQjA4OTlfQUNSRElWMgkJCQkweGYxMTIKKyNkZWZpbmUgU1RCMDg5OV9EQUNSMQkJCQkweGYxMTMKKyNkZWZpbmUgU1RCMDg5OV9EQUNSMgkJCQkweGYxMTQKKyNkZWZpbmUgU1RCMDg5OV9PVVRDRkcJCQkJMHhmMTFjCisjZGVmaW5lIFNUQjA4OTlfTU9ERUNGRwkJCQkweGYxMWQKKyNkZWZpbmUgU1RCMDg5OV9OQ09BUlNFCQkJCTB4ZjFiMworCisjZGVmaW5lIFNUQjA4OTlfU1lOVENUUkwJCQkweGYxYjYKKyNkZWZpbmUgU1RCMDg5OV9TVEFOREJZCQkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1RBTkRCWQkJCTcKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVEFOREJZCQkJMQorI2RlZmluZSBTVEIwODk5X0JZUEFTU1BMTAkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQllQQVNTUExMCQkJNgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0JZUEFTU1BMTAkJCTEKKyNkZWZpbmUgU1RCMDg5OV9TRUwxWFJBVElPCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TRUwxWFJBVElPCQk1CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU0VMMVhSQVRJTwkJMQorI2RlZmluZSBTVEIwODk5X1NFTE9TQ0kJCQkJKDB4MDEgPDwgMSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TRUxPU0NJCQkJMQorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NFTE9TQ0kJCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9GSUxUQ1RSTAkJCTB4ZjFiNworI2RlZmluZSBTVEIwODk5X1NZU0NUUkwJCQkJMHhmMWI4CisKKyNkZWZpbmUgU1RCMDg5OV9TVE9QQ0xLMQkJCTB4ZjFjMgorI2RlZmluZSBTVEIwODk5X1NUT1BfQ0tJTlRCVUYxMDgJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1RPUF9DS0lOVEJVRjEwOAkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX1NUT1BfQ0tJTlRCVUYxMDgJCTEKKyNkZWZpbmUgU1RCMDg5OV9TVE9QX0NLSU5UQlVGMjE2CQkoMHgwMSA8PCA2KQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUT1BfQ0tJTlRCVUYyMTYJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NLSU5UQlVGMjE2CQkxCisjZGVmaW5lIFNUQjA4OTlfU1RPUF9DSEs4UFNLCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TVE9QX0NISzhQU0sJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NISzhQU0sJCTEKKyNkZWZpbmUgU1RCMDg5OV9TVE9QX0NLRkVDMTA4CQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TVE9QX0NLRkVDMTA4CQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RPUF9DS0ZFQzEwOAkJMQorI2RlZmluZSBTVEIwODk5X1NUT1BfQ0tGRUMyMTYJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUT1BfQ0tGRUMyMTYJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NLRkVDMjE2CQkxCisjZGVmaW5lIFNUQjA4OTlfU1RPUF9DS0NPUkUyMTYJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUT1BfQ0tDT1JFMjE2CQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RPUF9DS0NPUkUyMTYJCTEKKyNkZWZpbmUgU1RCMDg5OV9TVE9QX0NLQURDSTEwOAkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1RPUF9DS0FEQ0kxMDgJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NLQURDSTEwOAkJMQorI2RlZmluZSBTVEIwODk5X1NUT1BfSU5WQ0tBRENJMTA4CQkoMHgwMSA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUT1BfSU5WQ0tBRENJMTA4CQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RPUF9JTlZDS0FEQ0kxMDgJCTEKKworI2RlZmluZSBTVEIwODk5X1NUT1BDTEsyCQkJMHhmMWMzCisjZGVmaW5lIFNUQjA4OTlfU1RPUF9DS1MyRE1EMTA4CQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TVE9QX0NLUzJETUQxMDgJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NLUzJETUQxMDgJCTEKKyNkZWZpbmUgU1RCMDg5OV9TVE9QX0NLUEtETElOMTA4CQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUT1BfQ0tQS0RMSU4xMDgJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QX0NLUEtETElOMTA4CQkxCisjZGVmaW5lIFNUQjA4OTlfU1RPUF9DS1BLRExJTjIxNgkJKDB4MDEgPDwgMCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9TVE9QX0NLUEtETElOMjE2CQkwCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RPUF9DS1BLRExJTjIxNgkJMQorCisjZGVmaW5lIFNUQjA4OTlfVFNUVE5SMQkJCQkweGYxZTAKKyNkZWZpbmUgU1RCMDg5OV9CWVBBU1NfQURDCQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9CWVBBU1NfQURDCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfQllQQVNTX0FEQwkJMQorI2RlZmluZSBTVEIwODk5X0lOVkFEQ0lDS09VVAkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSU5WQURDSUNLT1VUCQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSU5WQURDSUNLT1VUCQkxCisjZGVmaW5lIFNUQjA4OTlfQURDVEVTVF9WT0xUQUdFCQkJKDB4MDMgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9BRENURVNUX1ZPTFRBR0UJCTQKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BRENURVNUX1ZPTFRBR0UJCTEKKyNkZWZpbmUgU1RCMDg5OV9BRENfUkVTRVQJCQkoMHgwMSA8PCAzKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FEQ19SRVNFVAkJCTMKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BRENfUkVTRVQJCQkxCisjZGVmaW5lIFNUQjA4OTlfVFNUVE5SMV8yCQkJKDB4MDEgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UU1RUTlIxXzIJCQkyCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVFNUVE5SMV8yCQkJMQorI2RlZmluZSBTVEIwODk5X0FEQ1BPTgkJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0FEQ1BPTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9BRENQT04JCQkxCisjZGVmaW5lIFNUQjA4OTlfQURDSU5fTU9ERQkJCSgweDAxIDw8IDApCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfQURDSU5fTU9ERQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0FEQ0lOX01PREUJCTEKKworI2RlZmluZSBTVEIwODk5X1RTVFROUjIJCQkJMHhmMWUxCisjZGVmaW5lIFNUQjA4OTlfVFNUVE5SMl83CQkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9UU1RUTlIyXzcJCQk3CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfVFNUVE5SMl83CQkJMQorI2RlZmluZSBTVEIwODk5X05PVF9ESVNSWF9XSVJFRAkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfTk9UX0RJU1JYX1dJUkVECQk2CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfTk9UX0RJU1JYX1dJUkVECQkxCisjZGVmaW5lIFNUQjA4OTlfRElTRVFDX0RDVVJSRU5UCQkJKDB4MDEgPDwgNSkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ESVNFUUNfRENVUlJFTlQJCTUKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9ESVNFUUNfRENVUlJFTlQJCTEKKyNkZWZpbmUgU1RCMDg5OV9ESVNFUUNfWkNVUlJFTlQJCQkoMHgwMSA8PCA0KQorI2RlZmluZSBTVEIwODk5X09GRlNUX0RJU0VRQ19aQ1VSUkVOVAkJNAorI2RlZmluZSBTVEIwODk5X1dJRFRIX0RJU0VRQ19aQ1VSUkVOVAkJMQorI2RlZmluZSBTVEIwODk5X0RJU0VRQ19TSU5DX1NPVVJDRQkJKDB4MDMgPDwgMikKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9ESVNFUUNfU0lOQ19TT1VSQ0UJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX0RJU0VRQ19TSU5DX1NPVVJDRQkyCisjZGVmaW5lIFNUQjA4OTlfU0VMSVFTUkMJCQkoMHgwMyA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NFTElRU1JDCQkJMAorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NFTElRU1JDCQkJMgorCisjZGVmaW5lIFNUQjA4OTlfVFNUVE5SMwkJCQkweGYxZTIKKworI2RlZmluZSBTVEIwODk5X0kyQ0NGRwkJCQkweGYxMjkKKyNkZWZpbmUgU1RCMDg5OV9JMkNDRkdSU1ZECQkJKDB4MGYgPDwgNCkKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JMkNDRkdSU1ZECQk0CisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfSTJDQ0ZHUlNWRAkJNAorI2RlZmluZSBTVEIwODk5X0kyQ0ZBU1RNT0RFCQkJKDB4MDEgPDwgMykKKyNkZWZpbmUgU1RCMDg5OV9PRkZTVF9JMkNGQVNUTU9ERQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX0kyQ0ZBU1RNT0RFCQkxCisjZGVmaW5lIFNUQjA4OTlfU1RBVFVTV1IJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEIwODk5X09GRlNUX1NUQVRVU1dSCQkJMgorI2RlZmluZSBTVEIwODk5X1dJRFRIX1NUQVRVU1dSCQkJMQorI2RlZmluZSBTVEIwODk5X0kyQ0FERFJJTkMJCQkoMHgwMyA8PCAwKQorI2RlZmluZSBTVEIwODk5X09GRlNUX0kyQ0FERFJJTkMJCTAKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9JMkNBRERSSU5DCQkyCisKKyNkZWZpbmUgU1RCMDg5OV9JMkNSUFQJCQkJMHhmMTJhCisjZGVmaW5lIFNUQjA4OTlfSTJDVE9OCQkJCSgweDAxIDw8IDcpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfSTJDVE9OCQkJNworI2RlZmluZSBTVEIwODk5X1dJRFRIX0kyQ1RPTgkJCTEKKyNkZWZpbmUgU1RCMDg5OV9FTkFSUFRMRVZFTAkJCSgweDAxIDw8IDYpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfRU5BUlBUTEVWRUwJCTYKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9FTkFSUFRMRVZFTAkJMgorI2RlZmluZSBTVEIwODk5X1NDTFRERUxBWQkJCSgweDAxIDw8IDMpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU0NMVERFTEFZCQkJMworI2RlZmluZSBTVEIwODk5X1dJRFRIX1NDTFRERUxBWQkJCTEKKyNkZWZpbmUgU1RCMDg5OV9TVE9QRU5BCQkJCSgweDAxIDw8IDIpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1RPUEVOQQkJCTIKKyNkZWZpbmUgU1RCMDg5OV9XSURUSF9TVE9QRU5BCQkJMQorI2RlZmluZSBTVEIwODk5X1NUT1BTREFUMlNEQQkJCSgweDAxIDw8IDEpCisjZGVmaW5lIFNUQjA4OTlfT0ZGU1RfU1RPUFNEQVQyU0RBCQkxCisjZGVmaW5lIFNUQjA4OTlfV0lEVEhfU1RPUFNEQVQyU0RBCQkxCisKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTgJCQkweGYxMzYKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTcJCQkweGYxMzcKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTYJCQkweGYxMzgKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTUJCQkweGYxMzkKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTQJCQkweGYxM2EKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTMJCQkweGYxM2IKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTIJCQkweGYxM2MKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTEJCQkweGYxM2QKKyNkZWZpbmUgU1RCMDg5OV9JT1BWQUxVRTAJCQkweGYxM2UKKworI2RlZmluZSBTVEIwODk5X0dQSU8wMENGRwkJCTB4ZjE0MAorCisjZGVmaW5lIFNUQjA4OTlfR1BJTzAxQ0ZHCQkJMHhmMTQxCisjZGVmaW5lIFNUQjA4OTlfR1BJTzAyQ0ZHCQkJMHhmMTQyCisjZGVmaW5lIFNUQjA4OTlfR1BJTzAzQ0ZHCQkJMHhmMTQzCisjZGVmaW5lIFNUQjA4OTlfR1BJTzA0Q0ZHCQkJMHhmMTQ0CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA1Q0ZHCQkJMHhmMTQ1CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA2Q0ZHCQkJMHhmMTQ2CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA3Q0ZHCQkJMHhmMTQ3CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA4Q0ZHCQkJMHhmMTQ4CisjZGVmaW5lIFNUQjA4OTlfR1BJTzA5Q0ZHCQkJMHhmMTQ5CisjZGVmaW5lIFNUQjA4OTlfR1BJTzEwQ0ZHCQkJMHhmMTRhCisjZGVmaW5lIFNUQjA4OTlfR1BJTzExQ0ZHCQkJMHhmMTRiCisjZGVmaW5lIFNUQjA4OTlfR1BJTzEyQ0ZHCQkJMHhmMTRjCisjZGVmaW5lIFNUQjA4OTlfR1BJTzEzQ0ZHCQkJMHhmMTRkCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE0Q0ZHCQkJMHhmMTRlCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE1Q0ZHCQkJMHhmMTRmCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE2Q0ZHCQkJMHhmMTUwCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE3Q0ZHCQkJMHhmMTUxCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE4Q0ZHCQkJMHhmMTUyCisjZGVmaW5lIFNUQjA4OTlfR1BJTzE5Q0ZHCQkJMHhmMTUzCisjZGVmaW5lIFNUQjA4OTlfR1BJTzIwQ0ZHCQkJMHhmMTU0CisKKyNkZWZpbmUgU1RCMDg5OV9TREFUQ0ZHCQkJCTB4ZjE1NQorI2RlZmluZSBTVEIwODk5X1NDTFRDRkcJCQkJMHhmMTU2CisjZGVmaW5lIFNUQjA4OTlfQUdDUkZDRkcJCQkweGYxNTcKKyNkZWZpbmUgU1RCMDg5OV9HUElPMjIJCQkJMHhmMTU4CS8qIEFHQ0JCMkNGRwkqLworI2RlZmluZSBTVEIwODk5X0dQSU8yMQkJCQkweGYxNTkgIC8qIEFHQ0JCMUNGRwkqLworI2RlZmluZSBTVEIwODk5X0RJUkNMS0NGRwkJCTB4ZjE1YQorI2RlZmluZSBTVEIwODk5X0NMS09VVDI3Q0ZHCQkJMHhmMTViCisjZGVmaW5lIFNUQjA4OTlfU1REQllDRkcJCQkweGYxNWMKKyNkZWZpbmUgU1RCMDg5OV9DUzBDRkcJCQkJMHhmMTVkCisjZGVmaW5lIFNUQjA4OTlfQ1MxQ0ZHCQkJCTB4ZjE1ZQorI2RlZmluZSBTVEIwODk5X0RJU0VRQ09DRkcJCQkweGYxNWYKKworI2RlZmluZSBTVEIwODk5X0dQSU8zMkNGRwkJCTB4ZjE2MAorI2RlZmluZSBTVEIwODk5X0dQSU8zM0NGRwkJCTB4ZjE2MQorI2RlZmluZSBTVEIwODk5X0dQSU8zNENGRwkJCTB4ZjE2MgorI2RlZmluZSBTVEIwODk5X0dQSU8zNUNGRwkJCTB4ZjE2MworI2RlZmluZSBTVEIwODk5X0dQSU8zNkNGRwkJCTB4ZjE2NAorI2RlZmluZSBTVEIwODk5X0dQSU8zN0NGRwkJCTB4ZjE2NQorI2RlZmluZSBTVEIwODk5X0dQSU8zOENGRwkJCTB4ZjE2NgorI2RlZmluZSBTVEIwODk5X0dQSU8zOUNGRwkJCTB4ZjE2NworCisjZGVmaW5lIFNUQjA4OTlfSVJRU1RBVFVTXzMJCQkweGYxMjAKKyNkZWZpbmUgU1RCMDg5OV9JUlFTVEFUVVNfMgkJCTB4ZjEyMQorI2RlZmluZSBTVEIwODk5X0lSUVNUQVRVU18xCQkJMHhmMTIyCisjZGVmaW5lIFNUQjA4OTlfSVJRU1RBVFVTXzAJCQkweGYxMjMKKworI2RlZmluZSBTVEIwODk5X0lSUU1TS18zCQkJMHhmMTI0CisjZGVmaW5lIFNUQjA4OTlfSVJRTVNLXzIJCQkweGYxMjUKKyNkZWZpbmUgU1RCMDg5OV9JUlFNU0tfMQkJCTB4ZjEyNgorI2RlZmluZSBTVEIwODk5X0lSUU1TS18wCQkJMHhmMTI3CisKKyNkZWZpbmUgU1RCMDg5OV9JUlFDRkcJCQkJMHhmMTI4CisKKyNkZWZpbmUgU1RCMDg5OV9HSE9TVFJFRwkJCTB4ZjAwMAorCisjZGVmaW5lIFNUQjA4OTlfUzJERU1PRAkJCQkweGYzZmMKKyNkZWZpbmUgU1RCMDg5OV9TMkZFQwkJCQkweGZhZmMKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMzkyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCkBAIC0wLDAgKzEsNTQ1IEBACisvKgorCVNUQjYxMDAgU2lsaWNvbiBUdW5lcgorCUNvcHlyaWdodCAoQykgTWFudSBBYnJhaGFtIChhYnJhaGFtLm1hbnVAZ21haWwuY29tKQorCisJQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJzdGI2MTAwLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKK21vZHVsZV9wYXJhbSh2ZXJib3NlLCBpbnQsIDA2NDQpOworCisKKyNkZWZpbmUgRkVfRVJST1IJCTAKKyNkZWZpbmUgRkVfTk9USUNFCQkxCisjZGVmaW5lIEZFX0lORk8JCQkyCisjZGVmaW5lIEZFX0RFQlVHCQkzCisKKyNkZWZpbmUgZHByaW50ayh4LCB5LCB6LCBmb3JtYXQsIGFyZy4uLikgZG8gewkJCQkJCVwKKwlpZiAoeikgewkJCQkJCQkJCVwKKwkJaWYJKCh4ID4gRkVfRVJST1IpICYmICh4ID4geSkpCQkJCQlcCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX2Z1bmNfXyAsICMjYXJnKTsJCVwKKwkJZWxzZSBpZgkoKHggPiBGRV9OT1RJQ0UpICYmICh4ID4geSkpCQkJCQlcCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX2Z1bmNfXyAsICMjYXJnKTsJXAorCQllbHNlIGlmICgoeCA+IEZFX0lORk8pICYmICh4ID4geSkpCQkJCQlcCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQgIlxuIiwgX19mdW5jX18gLCAjI2FyZyk7CQlcCisJCWVsc2UgaWYgKCh4ID4gRkVfREVCVUcpICYmICh4ID4geSkpCQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fZnVuY19fICwgIyNhcmcpOwlcCisJfSBlbHNlIHsJCQkJCQkJCQlcCisJCWlmICh4ID4geSkJCQkJCQkJCVwKKwkJCXByaW50ayhmb3JtYXQsICMjYXJnKTsJCQkJCQlcCisJfQkJCQkJCQkJCQlcCit9IHdoaWxlKDApCisKK3N0cnVjdCBzdGI2MTAwX2xrdXAgeworCXUzMiB2YWxfbG93OworCXUzMiB2YWxfaGlnaDsKKwl1OCAgIHJlZzsKK307CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGI2MTAwX2xrdXAgbGt1cFtdID0geworCXsgICAgICAgMCwgIDk1MDAwMCwgMHgwYSB9LAorCXsgIDk1MDAwMCwgMTAwMDAwMCwgMHgwYSB9LAorCXsgMTAwMDAwMCwgMTA3NTAwMCwgMHgwYyB9LAorCXsgMTA3NTAwMCwgMTIwMDAwMCwgMHgwMCB9LAorCXsgMTIwMDAwMCwgMTMwMDAwMCwgMHgwMSB9LAorCXsgMTMwMDAwMCwgMTM3MDAwMCwgMHgwMiB9LAorCXsgMTM3MDAwMCwgMTQ3MDAwMCwgMHgwNCB9LAorCXsgMTQ3MDAwMCwgMTUzMDAwMCwgMHgwNSB9LAorCXsgMTUzMDAwMCwgMTY1MDAwMCwgMHgwNiB9LAorCXsgMTY1MDAwMCwgMTgwMDAwMCwgMHgwOCB9LAorCXsgMTgwMDAwMCwgMTk1MDAwMCwgMHgwYSB9LAorCXsgMTk1MDAwMCwgMjE1MDAwMCwgMHgwYyB9LAorCXsgMjE1MDAwMCwgOTk5OTk5OSwgMHgwYyB9LAorCXsgICAgICAgMCwgICAgICAgMCwgMHgwMCB9Cit9OworCisvKiBSZWdpc3RlciBuYW1lcyBmb3IgZWFzeSBkZWJ1Z2dpbmcuCSovCitzdGF0aWMgY29uc3QgY2hhciAqc3RiNjEwMF9yZWduYW1lc1tdID0geworCVtTVEI2MTAwX0xEXQkJPSAiTEQiLAorCVtTVEI2MTAwX1ZDT10JCT0gIlZDTyIsCisJW1NUQjYxMDBfTkldCQk9ICJOSSIsCisJW1NUQjYxMDBfTkZfTFNCXQk9ICJORiIsCisJW1NUQjYxMDBfS10JCT0gIksiLAorCVtTVEI2MTAwX0ddCQk9ICJHIiwKKwlbU1RCNjEwMF9GXQkJPSAiRiIsCisJW1NUQjYxMDBfRExCXQkJPSAiRExCIiwKKwlbU1RCNjEwMF9URVNUMV0JCT0gIlRFU1QxIiwKKwlbU1RCNjEwMF9GQ0NLXQkJPSAiRkNDSyIsCisJW1NUQjYxMDBfTFBFTl0JCT0gIkxQRU4iLAorCVtTVEI2MTAwX1RFU1QzXQkJPSAiVEVTVDMiLAorfTsKKworLyogVGVtcGxhdGUgZm9yIG5vcm1hbGlzYXRpb24sIGkuZS4gc2V0dGluZyB1bnVzZWQgb3IgdW5kb2N1bWVudGVkCisgKiBiaXRzIGFzIHJlcXVpcmVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKyAqLworc3RydWN0IHN0YjYxMDBfcmVnbWFzayB7CisJdTggbWFzazsKKwl1OCBzZXQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjYxMDBfcmVnbWFzayBzdGI2MTAwX3RlbXBsYXRlW10gPSB7CisJW1NUQjYxMDBfTERdCQk9IHsgMHhmZiwgMHgwMCB9LAorCVtTVEI2MTAwX1ZDT10JCT0geyAweGZmLCAweDAwIH0sCisJW1NUQjYxMDBfTkldCQk9IHsgMHhmZiwgMHgwMCB9LAorCVtTVEI2MTAwX05GX0xTQl0JPSB7IDB4ZmYsIDB4MDAgfSwKKwlbU1RCNjEwMF9LXQkJPSB7IDB4YzcsIDB4MzggfSwKKwlbU1RCNjEwMF9HXQkJPSB7IDB4ZWYsIDB4MTAgfSwKKwlbU1RCNjEwMF9GXQkJPSB7IDB4MWYsIDB4YzAgfSwKKwlbU1RCNjEwMF9ETEJdCQk9IHsgMHgzOCwgMHhjNCB9LAorCVtTVEI2MTAwX1RFU1QxXQkJPSB7IDB4MDAsIDB4OGYgfSwKKwlbU1RCNjEwMF9GQ0NLXQkJPSB7IDB4NDAsIDB4MGQgfSwKKwlbU1RCNjEwMF9MUEVOXQkJPSB7IDB4ZjAsIDB4MGIgfSwKKwlbU1RCNjEwMF9URVNUM10JCT0geyAweDAwLCAweGRlIH0sCit9OworCitzdGF0aWMgdm9pZCBzdGI2MTAwX25vcm1hbGlzZV9yZWdzKHU4IHJlZ3NbXSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTVEI2MTAwX05VTVJFR1M7IGkrKykKKwkJcmVnc1tpXSA9IChyZWdzW2ldICYgc3RiNjEwMF90ZW1wbGF0ZVtpXS5tYXNrKSB8IHN0YjYxMDBfdGVtcGxhdGVbaV0uc2V0OworfQorCitzdGF0aWMgaW50IHN0YjYxMDBfcmVhZF9yZWdzKHN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSwgdTggcmVnc1tdKQoreworCWludCByYzsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcywKKwkJLmZsYWdzCT0gSTJDX01fUkQsCisJCS5idWYJPSByZWdzLAorCQkubGVuCT0gU1RCNjEwMF9OVU1SRUdTCisJfTsKKworCXJjID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmICh1bmxpa2VseShyYyAhPSAxKSkgeworCQlkcHJpbnRrKHZlcmJvc2UsIEZFX0VSUk9SLCAxLCAiUmVhZCAoMHgleCkgZXJyLCByYz1bJWRdIiwKKwkJCXN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIHJjKTsKKworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJaWYgKHVubGlrZWx5KHZlcmJvc2UgPiBGRV9ERUJVRykpIHsKKwkJaW50IGk7CisKKwkJZHByaW50ayh2ZXJib3NlLCBGRV9ERUJVRywgMSwgIiAgICBSZWFkIGZyb20gMHglMDJ4Iiwgc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcyk7CisJCWZvciAoaSA9IDA7IGkgPCBTVEI2MTAwX05VTVJFR1M7IGkrKykKKwkJCWRwcmludGsodmVyYm9zZSwgRkVfREVCVUcsIDEsICIgICAgICAgICVzOiAweCUwMngiLCBzdGI2MTAwX3JlZ25hbWVzW2ldLCByZWdzW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9yZWFkX3JlZyhzdHJ1Y3Qgc3RiNjEwMF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwl1OCByZWdzW1NUQjYxMDBfTlVNUkVHU107CisJaW50IHJjOworCisJaWYgKHVubGlrZWx5KHJlZyA+PSBTVEI2MTAwX05VTVJFR1MpKSB7CisJCWRwcmludGsodmVyYm9zZSwgRkVfRVJST1IsIDEsICJJbnZhbGlkIHJlZ2lzdGVyIG9mZnNldCAweCV4IiwgcmVnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgocmMgPSBzdGI2MTAwX3JlYWRfcmVncyhzdGF0ZSwgcmVncykpIDwgMCkKKwkJcmV0dXJuIHJjOworCXJldHVybiAodW5zaWduZWQgaW50KXJlZ3NbcmVnXTsKK30KKworc3RhdGljIGludCBzdGI2MTAwX3dyaXRlX3JlZ19yYW5nZShzdHJ1Y3Qgc3RiNjEwMF9zdGF0ZSAqc3RhdGUsIHU4IGJ1ZltdLCBpbnQgc3RhcnQsIGludCBsZW4pCit7CisJaW50IHJjOworCXU4IGNtZGJ1ZltsZW4gKyAxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcywKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGNtZGJ1ZiwKKwkJLmxlbgk9IGxlbiArIDEKKwl9OworCisJaWYgKHVubGlrZWx5KHN0YXJ0IDwgMSB8fCBzdGFydCArIGxlbiA+IFNUQjYxMDBfTlVNUkVHUykpIHsKKwkJZHByaW50ayh2ZXJib3NlLCBGRV9FUlJPUiwgMSwgIkludmFsaWQgcmVnaXN0ZXIgcmFuZ2UgJWQ6JWQiLAorCQkJc3RhcnQsIGxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltZW1jcHkoJmNtZGJ1ZlsxXSwgYnVmLCBsZW4pOworCWNtZGJ1ZlswXSA9IHN0YXJ0OworCisJaWYgKHVubGlrZWx5KHZlcmJvc2UgPiBGRV9ERUJVRykpIHsKKwkJaW50IGk7CisKKwkJZHByaW50ayh2ZXJib3NlLCBGRV9ERUJVRywgMSwgIiAgICBXcml0ZSBAIDB4JTAyeDogWyVkOiVkXSIsIHN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIHN0YXJ0LCBsZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQlkcHJpbnRrKHZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiICAgICAgICAlczogMHglMDJ4Iiwgc3RiNjEwMF9yZWduYW1lc1tzdGFydCArIGldLCBidWZbaV0pOworCX0KKwlyYyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAodW5saWtlbHkocmMgIT0gMSkpIHsKKwkJZHByaW50ayh2ZXJib3NlLCBGRV9FUlJPUiwgMSwgIigweCV4KSB3cml0ZSBlcnIgWyVkOiVkXSwgcmM9WyVkXSIsCisJCQkodW5zaWduZWQgaW50KXN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIHN0YXJ0LCBsZW4sCXJjKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjYxMDBfd3JpdGVfcmVnKHN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQoreworCWlmICh1bmxpa2VseShyZWcgPj0gU1RCNjEwMF9OVU1SRUdTKSkgeworCQlkcHJpbnRrKHZlcmJvc2UsIEZFX0VSUk9SLCAxLCAiSW52YWxpZCByZWdpc3RlciBvZmZzZXQgMHgleCIsIHJlZyk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlkYXRhID0gKGRhdGEgJiBzdGI2MTAwX3RlbXBsYXRlW3JlZ10ubWFzaykgfCBzdGI2MTAwX3RlbXBsYXRlW3JlZ10uc2V0OworCXJldHVybiBzdGI2MTAwX3dyaXRlX3JlZ19yYW5nZShzdGF0ZSwgJmRhdGEsIHJlZywgMSk7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF93cml0ZV9yZWdzKHN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSwgdTggcmVnc1tdKQoreworCXN0YjYxMDBfbm9ybWFsaXNlX3JlZ3MocmVncyk7CisJcmV0dXJuIHN0YjYxMDBfd3JpdGVfcmVnX3JhbmdlKHN0YXRlLCAmcmVnc1sxXSwgMSwgU1RCNjEwMF9OVU1SRUdTIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9nZXRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnN0YXR1cykKK3sKKwlpbnQgcmM7CisJc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpZiAoKHJjID0gc3RiNjEwMF9yZWFkX3JlZyhzdGF0ZSwgU1RCNjEwMF9MRCkpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIChyYyAmIFNUQjYxMDBfTERfTE9DSykgPyBUVU5FUl9TVEFUVVNfTE9DS0VEIDogMDsKK30KKworc3RhdGljIGludCBzdGI2MTAwX2dldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCWludCByYzsKKwl1OCBmOworCXN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJaWYgKChyYyA9IHN0YjYxMDBfcmVhZF9yZWcoc3RhdGUsIFNUQjYxMDBfRikpIDwgMCkKKwkJcmV0dXJuIHJjOworCWYgPSByYyAmIFNUQjYxMDBfRl9GOworCisJc3RhdGUtPnN0YXR1cy5iYW5kd2lkdGggPSAoZiArIDUpICogMjAwMDsJLyogeDIgZm9yIFpJRgkqLworCisJKmJhbmR3aWR0aCA9IHN0YXRlLT5iYW5kd2lkdGggPSBzdGF0ZS0+c3RhdHVzLmJhbmR3aWR0aCAqIDEwMDA7CisJZHByaW50ayh2ZXJib3NlLCBGRV9ERUJVRywgMSwgImJhbmR3aWR0aCA9ICV1IEh6Iiwgc3RhdGUtPmJhbmR3aWR0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKQoreworCXUzMiB0bXA7CisJaW50IHJjOworCXN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJZHByaW50ayh2ZXJib3NlLCBGRV9ERUJVRywgMSwgInNldCBiYW5kd2lkdGggdG8gJXUgSHoiLCBiYW5kd2lkdGgpOworCisJYmFuZHdpZHRoIC89IDI7IC8qIFpJRiAqLworCisJaWYgKGJhbmR3aWR0aCA+PSAzNjAwMDAwMCkJLyogRls0OjBdIEJXLzIgbWF4ID0zMSs1PTM2IG1oeiBmb3IgRj0zMQkqLworCQl0bXAgPSAzMTsKKwllbHNlIGlmIChiYW5kd2lkdGggPD0gNTAwMDAwMCkJLyogYncvMiBtaW4gPSA1TWh6IGZvciBGPTAJCQkqLworCQl0bXAgPSAwOworCWVsc2UJCQkJLyogaWYgNSA8IGJ3LzIgPCAzNgkJCQkqLworCQl0bXAgPSAoYmFuZHdpZHRoICsgNTAwMDAwKSAvIDEwMDAwMDAgLSA1OworCisJLyogVHVybiBvbiBMUEYgYmFuZHdpZHRoIHNldHRpbmcgY2xvY2sgY29udHJvbCwKKwkgKiBzZXQgYmFuZHdpZHRoLCB3YWl0IDEwbXMsIHR1cm4gb2ZmLgorCSAqLworCWlmICgocmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9GQ0NLLCAweDBkIHwgU1RCNjEwMF9GQ0NLX0ZDQ0spKSA8IDApCisJCXJldHVybiByYzsKKwlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRiwgMHhjMCB8IHRtcCkpIDwgMCkKKwkJcmV0dXJuIHJjOworCW1zbGVlcCgxKTsKKwlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHgwZCkpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlpbnQgcmM7CisJdTMyIG5pbnQsIG5mcmFjLCBmdmNvOworCWludCBwc2QyLCBvZGl2OworCXN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXU4IHJlZ3NbU1RCNjEwMF9OVU1SRUdTXTsKKworCWlmICgocmMgPSBzdGI2MTAwX3JlYWRfcmVncyhzdGF0ZSwgcmVncykpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJb2RpdiA9IChyZWdzW1NUQjYxMDBfVkNPXSAmIFNUQjYxMDBfVkNPX09ESVYpID4+IFNUQjYxMDBfVkNPX09ESVZfU0hJRlQ7CisJcHNkMiA9IChyZWdzW1NUQjYxMDBfS10gJiBTVEI2MTAwX0tfUFNEMikgPj4gU1RCNjEwMF9LX1BTRDJfU0hJRlQ7CisJbmludCA9IHJlZ3NbU1RCNjEwMF9OSV07CisJbmZyYWMgPSAoKHJlZ3NbU1RCNjEwMF9LXSAmIFNUQjYxMDBfS19ORl9NU0IpIDw8IDgpIHwgcmVnc1tTVEI2MTAwX05GX0xTQl07CisJZnZjbyA9IChuZnJhYyAqIHN0YXRlLT5yZWZlcmVuY2UgPj4gKDkgLSBwc2QyKSkgKyAobmludCAqIHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMik7CisJKmZyZXF1ZW5jeSA9IHN0YXRlLT5mcmVxdWVuY3kgPSBmdmNvID4+IChvZGl2ICsgMSk7CisKKwlkcHJpbnRrKHZlcmJvc2UsIEZFX0RFQlVHLCAxLAorCQkiZnJlcXVlbmN5ID0gJXUga0h6LCBvZGl2ID0gJXUsIHBzZDIgPSAldSwgZnh0YWwgPSAldSBrSHosIGZ2Y28gPSAldSBrSHosIE4oSSkgPSAldSwgTihGKSA9ICV1IiwKKwkJc3RhdGUtPmZyZXF1ZW5jeSwgb2RpdiwgcHNkMiwgc3RhdGUtPnJlZmVyZW5jZSwJZnZjbywgbmludCwgbmZyYWMpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3RiNjEwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5KQoreworCWludCByYzsKKwljb25zdCBzdHJ1Y3Qgc3RiNjEwMF9sa3VwICpwdHI7CisJc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHA7CisKKwl1MzIgc3JhdGUgPSAwLCBmdmNvLCBuaW50LCBuZnJhYzsKKwl1OCByZWdzW1NUQjYxMDBfTlVNUkVHU107CisJdTggZywgcHNkMiwgb2RpdjsKKworCWlmICgocmMgPSBzdGI2MTAwX3JlYWRfcmVncyhzdGF0ZSwgcmVncykpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKGZlLT5vcHMuZ2V0X2Zyb250ZW5kKSB7CisJCWRwcmludGsodmVyYm9zZSwgRkVfREVCVUcsIDEsICJHZXQgZnJvbnRlbmQgcGFyYW1ldGVycyIpOworCQlmZS0+b3BzLmdldF9mcm9udGVuZChmZSwgJnApOworCX0KKwlzcmF0ZSA9IHAudS5xcHNrLnN5bWJvbF9yYXRlOworCisJcmVnc1tTVEI2MTAwX0RMQl0gPSAweGRjOworCS8qIERpc2FibGUgTFBFTiAqLworCXJlZ3NbU1RCNjEwMF9MUEVOXSAmPSB+U1RCNjEwMF9MUEVOX0xQRU47IC8qIFBMTCBMb29wIGRpc2FibGVkICovCisKKwlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWdzKHN0YXRlLCByZWdzKSkgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBCYXNlYmFuZCBnYWluLgkqLworCWlmIChzcmF0ZSA+PSAxNTAwMDAwMCkKKwkJZyA9IDk7ICAvLyAgKzQgZEIKKwllbHNlIGlmIChzcmF0ZSA+PSA1MDAwMDAwKQorCQlnID0gMTE7IC8vICArOCBkQgorCWVsc2UKKwkJZyA9IDE0OyAvLyArMTQgZEIKKworCXJlZ3NbU1RCNjEwMF9HXSA9IChyZWdzW1NUQjYxMDBfR10gJiB+U1RCNjEwMF9HX0cpIHwgZzsKKwlyZWdzW1NUQjYxMDBfR10gJj0gflNUQjYxMDBfR19HQ1Q7IC8qIG1hc2sgR0NUICovCisJcmVnc1tTVEI2MTAwX0ddIHw9ICgxIDw8IDUpOyAvKiAyVnAtcCBNb2RlICovCisKKwkvKiBWQ08gZGl2aWRlIHJhdGlvIChMTyBkaXZpZGUgcmF0aW8sIFZDTyBwcmVzY2FsZXIgZW5hYmxlKS4JKi8KKwlpZiAoZnJlcXVlbmN5IDw9IDEwNzUwMDApCisJCW9kaXYgPSAxOworCWVsc2UKKwkJb2RpdiA9IDA7CisJcmVnc1tTVEI2MTAwX1ZDT10gPSAocmVnc1tTVEI2MTAwX1ZDT10gJiB+U1RCNjEwMF9WQ09fT0RJVikgfCAob2RpdiA8PCBTVEI2MTAwX1ZDT19PRElWX1NISUZUKTsKKworCWlmICgoZnJlcXVlbmN5ID4gMTA3NTAwMCkgJiYgKGZyZXF1ZW5jeSA8PSAxMzI1MDAwKSkKKwkJcHNkMiA9IDA7CisJZWxzZQorCQlwc2QyID0gMTsKKwlyZWdzW1NUQjYxMDBfS10gPSAocmVnc1tTVEI2MTAwX0tdICYgflNUQjYxMDBfS19QU0QyKSB8IChwc2QyIDw8IFNUQjYxMDBfS19QU0QyX1NISUZUKTsKKworCS8qIE9TTQkqLworCWZvciAocHRyID0gbGt1cDsKKwkgICAgIChwdHItPnZhbF9oaWdoICE9IDApICYmICFDSEtSQU5HRShmcmVxdWVuY3ksIHB0ci0+dmFsX2xvdywgcHRyLT52YWxfaGlnaCk7CisJICAgICBwdHIrKyk7CisJaWYgKHB0ci0+dmFsX2hpZ2ggPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlOiAldSBrSHpcbiIsIF9fZnVuY19fLCBmcmVxdWVuY3kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVnc1tTVEI2MTAwX1ZDT10gPSAocmVnc1tTVEI2MTAwX1ZDT10gJiB+U1RCNjEwMF9WQ09fT1NNKSB8IHB0ci0+cmVnOworCisJLyogRihWQ08pID0gRihMTykgKiAoT0RJViA9PSAwID8gMiA6IDQpCQkJKi8KKwlmdmNvID0gZnJlcXVlbmN5IDw8ICgxICsgb2Rpdik7CisJLyogTihJKSA9IGZsb29yKGYoVkNPKSAvIChmKFhUQUwpICogKFBTRDIgPyAyIDogMSkpKQkqLworCW5pbnQgPSBmdmNvIC8gKHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMik7CisJLyogTihGKSA9IHJvdW5kKGYoVkNPKSAvIGYoWFRBTCkgKiAoUFNEMiA/IDIgOiAxKSAtIE4oSSkpICogMiBeIDkJKi8KKwluZnJhYyA9ICgoKGZ2Y28gLSAobmludCAqIHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMikpIDw8ICg5IC0gcHNkMikpICsgc3RhdGUtPnJlZmVyZW5jZSAvIDIpIC8gc3RhdGUtPnJlZmVyZW5jZTsKKwlkcHJpbnRrKHZlcmJvc2UsIEZFX0RFQlVHLCAxLAorCQkiZnJlcXVlbmN5ID0gJXUsIHNyYXRlID0gJXUsIGcgPSAldSwgb2RpdiA9ICV1LCBwc2QyID0gJXUsIGZ4dGFsID0gJXUsIG9zbSA9ICV1LCBmdmNvID0gJXUsIE4oSSkgPSAldSwgTihGKSA9ICV1IiwKKwkJZnJlcXVlbmN5LCBzcmF0ZSwgKHVuc2lnbmVkIGludClnLCAodW5zaWduZWQgaW50KW9kaXYsCisJCSh1bnNpZ25lZCBpbnQpcHNkMiwgc3RhdGUtPnJlZmVyZW5jZSwKKwkJcHRyLT5yZWcsIGZ2Y28sIG5pbnQsIG5mcmFjKTsKKwlyZWdzW1NUQjYxMDBfTkldID0gbmludDsKKwlyZWdzW1NUQjYxMDBfTkZfTFNCXSA9IG5mcmFjOworCXJlZ3NbU1RCNjEwMF9LXSA9IChyZWdzW1NUQjYxMDBfS10gJiB+U1RCNjEwMF9LX05GX01TQikgfCAoKG5mcmFjID4+IDgpICYgU1RCNjEwMF9LX05GX01TQik7CisJcmVnc1tTVEI2MTAwX1ZDT10gfD0gU1RCNjEwMF9WQ09fT1NDSDsJCS8qIFZDTyBzZWFyY2ggZW5hYmxlZAkJKi8KKwlyZWdzW1NUQjYxMDBfVkNPXSB8PSBTVEI2MTAwX1ZDT19PQ0s7CQkvKiBWQ08gc2VhcmNoIGNsb2NrIG9mZgkJKi8KKwlyZWdzW1NUQjYxMDBfRkNDS10gfD0gU1RCNjEwMF9GQ0NLX0ZDQ0s7CS8qIExQRiBCVyBzZXR0aW5nIGNsb2NrIGVuYWJsZWQJKi8KKwlyZWdzW1NUQjYxMDBfTFBFTl0gJj0gflNUQjYxMDBfTFBFTl9MUEVOOwkvKiBQTEwgbG9vcCBkaXNhYmxlZAkJKi8KKwkvKiBQb3dlciB1cC4gKi8KKwlyZWdzW1NUQjYxMDBfTFBFTl0gfD0gU1RCNjEwMF9MUEVOX1NZTlAJfCBTVEI2MTAwX0xQRU5fT1NDUCB8IFNUQjYxMDBfTFBFTl9CRU47CisKKwltc2xlZXAoMik7CisJaWYgKChyYyA9IHN0YjYxMDBfd3JpdGVfcmVncyhzdGF0ZSwgcmVncykpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXNsZWVwKDIpOworCXJlZ3NbU1RCNjEwMF9MUEVOXSB8PSBTVEI2MTAwX0xQRU5fTFBFTjsJLyogUExMIGxvb3AgZW5hYmxlZAkJKi8KKwlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfTFBFTiwgcmVnc1tTVEI2MTAwX0xQRU5dKSkgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZWdzW1NUQjYxMDBfVkNPXSAmPSB+U1RCNjEwMF9WQ09fT0NLOwkJLyogVkNPIGZhc3Qgc2VhcmNoCQkqLworCWlmICgocmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9WQ08sIHJlZ3NbU1RCNjEwMF9WQ09dKSkgPCAwKQorCQlyZXR1cm4gcmM7CisKKwltc2xlZXAoMTApOwkJCQkJLyogd2FpdCBmb3IgTE8gdG8gbG9jawkJKi8KKwlyZWdzW1NUQjYxMDBfVkNPXSAmPSB+U1RCNjEwMF9WQ09fT1NDSDsJCS8qIHZjbyBzZWFyY2ggZGlzYWJsZWQJCSovCisJcmVnc1tTVEI2MTAwX1ZDT10gfD0gU1RCNjEwMF9WQ09fT0NLOwkJLyogc2VhcmNoIGNsb2NrIG9mZgkJKi8KKwlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfVkNPLCByZWdzW1NUQjYxMDBfVkNPXSkpIDwgMCkKKwkJcmV0dXJuIHJjOworCXJlZ3NbU1RCNjEwMF9GQ0NLXSAmPSB+U1RCNjEwMF9GQ0NLX0ZDQ0s7ICAgICAgIC8qIExQRiBCVyBjbG9jayBkaXNhYmxlZAkqLworCXN0YjYxMDBfbm9ybWFsaXNlX3JlZ3MocmVncyk7CisJaWYgKChyYyA9IHN0YjYxMDBfd3JpdGVfcmVnX3JhbmdlKHN0YXRlLCAmcmVnc1sxXSwgMSwgU1RCNjEwMF9OVU1SRUdTIC0gMykpIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXNsZWVwKDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGI2MTAwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCS8qIFRPRE86IHBvd2VyIGRvd24JKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGI2MTAwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IHR1bmVyX3N0YXRlICpzdGF0dXMgPSAmc3RhdGUtPnN0YXR1czsKKworCXN0YXR1cy0+dHVuZXJzdGVwCT0gMTI1MDAwOworCXN0YXR1cy0+aWZyZXEJCT0gMDsKKwlzdGF0dXMtPnJlZmNsb2NrCT0gMjcwMDAwMDA7CS8qIEh6CSovCisJc3RhdHVzLT5pcXNlbnNlCQk9IDE7CisJc3RhdHVzLT5iYW5kd2lkdGgJPSAzNjAwMDsJLyoga0h6CSovCisJc3RhdGUtPmJhbmR3aWR0aAk9IHN0YXR1cy0+YmFuZHdpZHRoICogMTAwMDsJLyogTUh6CSovCisJc3RhdGUtPnJlZmVyZW5jZQk9IHN0YXR1cy0+cmVmY2xvY2sgLyAxMDAwOwkvKiBrSHoJKi8KKworCS8qIFNldCBkZWZhdWx0IGJhbmR3aWR0aC4JKi8KKwlyZXR1cm4gc3RiNjEwMF9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0dXMtPmJhbmR3aWR0aCk7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9nZXRfc3RhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgIGVudW0gdHVuZXJfcGFyYW0gcGFyYW0sCisJCQkgICAgIHN0cnVjdCB0dW5lcl9zdGF0ZSAqc3RhdGUpCit7CisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRFZCRkVfVFVORVJfRlJFUVVFTkNZOgorCQlzdGI2MTAwX2dldF9mcmVxdWVuY3koZmUsICZzdGF0ZS0+ZnJlcXVlbmN5KTsKKwkJYnJlYWs7CisJY2FzZSBEVkJGRV9UVU5FUl9UVU5FUlNURVA6CisJCWJyZWFrOworCWNhc2UgRFZCRkVfVFVORVJfSUZGUkVROgorCQlicmVhazsKKwljYXNlIERWQkZFX1RVTkVSX0JBTkRXSURUSDoKKwkJc3RiNjEwMF9nZXRfYmFuZHdpZHRoKGZlLCAmc3RhdGUtPmJhbmR3aWR0aCk7CisJCWJyZWFrOworCWNhc2UgRFZCRkVfVFVORVJfUkVGQ0xPQ0s6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjYxMDBfc2V0X3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICBlbnVtIHR1bmVyX3BhcmFtIHBhcmFtLAorCQkJICAgICBzdHJ1Y3QgdHVuZXJfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGI2MTAwX3N0YXRlICp0c3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIERWQkZFX1RVTkVSX0ZSRVFVRU5DWToKKwkJc3RiNjEwMF9zZXRfZnJlcXVlbmN5KGZlLCBzdGF0ZS0+ZnJlcXVlbmN5KTsKKwkJdHN0YXRlLT5mcmVxdWVuY3kgPSBzdGF0ZS0+ZnJlcXVlbmN5OworCQlicmVhazsKKwljYXNlIERWQkZFX1RVTkVSX1RVTkVSU1RFUDoKKwkJYnJlYWs7CisJY2FzZSBEVkJGRV9UVU5FUl9JRkZSRVE6CisJCWJyZWFrOworCWNhc2UgRFZCRkVfVFVORVJfQkFORFdJRFRIOgorCQlzdGI2MTAwX3NldF9iYW5kd2lkdGgoZmUsIHN0YXRlLT5iYW5kd2lkdGgpOworCQl0c3RhdGUtPmJhbmR3aWR0aCA9IHN0YXRlLT5iYW5kd2lkdGg7CisJCWJyZWFrOworCWNhc2UgRFZCRkVfVFVORVJfUkVGQ0xPQ0s6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgc3RiNjEwMF9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU1RCNjEwMCBTaWxpY29uIFR1bmVyIiwKKwkJLmZyZXF1ZW5jeV9taW4JCT0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heAkJPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXAJCT0gMCwKKwl9LAorCisJLmluaXQJCT0gc3RiNjEwMF9pbml0LAorCS5zbGVlcCAgICAgICAgICA9IHN0YjYxMDBfc2xlZXAsCisJLmdldF9zdGF0dXMJPSBzdGI2MTAwX2dldF9zdGF0dXMsCisJLmdldF9zdGF0ZQk9IHN0YjYxMDBfZ2V0X3N0YXRlLAorCS5zZXRfc3RhdGUJPSBzdGI2MTAwX3NldF9zdGF0ZSwKKwkucmVsZWFzZQk9IHN0YjYxMDBfcmVsZWFzZQorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqc3RiNjEwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIHN0cnVjdCBzdGI2MTAwX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3RiNjEwMF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHN0YjYxMDBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCXN0YXRlLT5jb25maWcJCT0gY29uZmlnOworCXN0YXRlLT5pMmMJCT0gaTJjOworCXN0YXRlLT5mcm9udGVuZAkJPSBmZTsKKwlzdGF0ZS0+cmVmZXJlbmNlCT0gY29uZmlnLT5yZWZjbG9jayAvIDEwMDA7IC8qIGtIeiAqLworCWZlLT50dW5lcl9wcml2CQk9IHN0YXRlOworCWZlLT5vcHMudHVuZXJfb3BzCT0gc3RiNjEwMF9vcHM7CisKKwlwcmludGsoIiVzOiBBdHRhY2hpbmcgU1RCNjEwMCBcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gZmU7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzdGI2MTAwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJa2ZyZWUoc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woc3RiNjEwMF9hdHRhY2gpOworTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NlLCAiU2V0IFZlcmJvc2l0eSBsZXZlbCIpOworCitNT0RVTEVfQVVUSE9SKCJNYW51IEFicmFoYW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RCNjEwMCBTaWxpY29uIHR1bmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTVkMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKwlTVEI2MTAwIFNpbGljb24gVHVuZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIF9fU1RCXzYxMDBfUkVHX0gKKyNkZWZpbmUgX19TVEJfNjEwMF9SRUdfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNkZWZpbmUgU1RCNjEwMF9MRAkJCTB4MDAKKyNkZWZpbmUgU1RCNjEwMF9MRF9MT0NLCQkJKDEgPDwgMCkKKworI2RlZmluZSBTVEI2MTAwX1ZDTwkJCTB4MDEKKyNkZWZpbmUgU1RCNjEwMF9WQ09fT1NDSAkJKDB4MDEgPDwgNykKKyNkZWZpbmUgU1RCNjEwMF9WQ09fT1NDSF9TSElGVAkJNworI2RlZmluZSBTVEI2MTAwX1ZDT19PQ0sJCQkoMHgwMyA8PCA1KQorI2RlZmluZSBTVEI2MTAwX1ZDT19PQ0tfU0hJRlQJCTUKKyNkZWZpbmUgU1RCNjEwMF9WQ09fT0RJVgkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgU1RCNjEwMF9WQ09fT0RJVl9TSElGVAkJNAorI2RlZmluZSBTVEI2MTAwX1ZDT19PU00JCQkoMHgwZiA8PCAwKQorCisjZGVmaW5lIFNUQjYxMDBfTkkJCQkweDAyCisjZGVmaW5lIFNUQjYxMDBfTkZfTFNCCQkJMHgwMworCisjZGVmaW5lIFNUQjYxMDBfSwkJCTB4MDQKKyNkZWZpbmUgU1RCNjEwMF9LX1BTRDIJCQkoMHgwMSA8PCAyKQorI2RlZmluZSBTVEI2MTAwX0tfUFNEMl9TSElGVCAgICAgICAgICAgIDIKKyNkZWZpbmUgU1RCNjEwMF9LX05GX01TQgkJKDB4MDMgPDwgMCkKKworI2RlZmluZSBTVEI2MTAwX0cJCQkweDA1CisjZGVmaW5lIFNUQjYxMDBfR19HCQkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgU1RCNjEwMF9HX0dDVAkJCSgweDA3IDw8IDUpCisKKyNkZWZpbmUgU1RCNjEwMF9GCQkJMHgwNgorI2RlZmluZSBTVEI2MTAwX0ZfRgkJCSgweDFmIDw8IDApCisKKyNkZWZpbmUgU1RCNjEwMF9ETEIJCQkweDA3CisKKyNkZWZpbmUgU1RCNjEwMF9URVNUMQkJCTB4MDgKKworI2RlZmluZSBTVEI2MTAwX0ZDQ0sJCQkweDA5CisjZGVmaW5lIFNUQjYxMDBfRkNDS19GQ0NLCQkoMHgwMSA8PCA2KQorCisjZGVmaW5lIFNUQjYxMDBfTFBFTgkJCTB4MGEKKyNkZWZpbmUgU1RCNjEwMF9MUEVOX0xQRU4JCSgweDAxIDw8IDQpCisjZGVmaW5lIFNUQjYxMDBfTFBFTl9TWU5QCQkoMHgwMSA8PCA1KQorI2RlZmluZSBTVEI2MTAwX0xQRU5fT1NDUAkJKDB4MDEgPDwgNikKKyNkZWZpbmUgU1RCNjEwMF9MUEVOX0JFTgkJKDB4MDEgPDwgNykKKworI2RlZmluZSBTVEI2MTAwX1RFU1QzCQkJMHgwYgorCisjZGVmaW5lIFNUQjYxMDBfTlVNUkVHUyAgICAgICAgICAgICAgICAgMHgwYworCisKKyNkZWZpbmUgSU5SQU5HRSh2YWwsIHgsIHkpCQkoKCh4IDw9IHZhbCkgJiYgKHZhbCA8PSB5KSkgfHwJCVwKKwkJCQkJICgoeSA8PSB2YWwpICYmICh2YWwgPD0geCkpID8gMSA6IDApCisKKyNkZWZpbmUgQ0hLUkFOR0UodmFsLCB4LCB5KQkJKCgodmFsID49IHgpICYmICh2YWwgPCB5KSkgPyAxIDogMCkKKworc3RydWN0IHN0YjYxMDBfY29uZmlnIHsKKwl1OAl0dW5lcl9hZGRyZXNzOworCXUzMglyZWZjbG9jazsKK307CisKK3N0cnVjdCBzdGI2MTAwX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKworCWNvbnN0IHN0cnVjdCBzdGI2MTAwX2NvbmZpZwkqY29uZmlnOworCXN0cnVjdCBkdmJfdHVuZXJfb3BzCQlvcHM7CisJc3RydWN0IGR2Yl9mcm9udGVuZAkJKmZyb250ZW5kOworCXN0cnVjdCB0dW5lcl9zdGF0ZQkJc3RhdHVzOworCisJdTMyIGZyZXF1ZW5jeTsKKwl1MzIgc3JhdGU7CisJdTMyIGJhbmR3aWR0aDsKKwl1MzIgcmVmZXJlbmNlOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVEI2MTAwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUQjYxMDBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MTAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJICAgc3RydWN0IHN0YjYxMDBfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MTAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJCSAgc3RydWN0IHN0YjYxMDBfY29uZmlnICpjb25maWcsCisJCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYgLy9DT05GSUdfRFZCX1NUQjYxMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTMzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKwlTVEI2MTAwIFNpbGljb24gVHVuZXIKKwlDb3B5cmlnaHQgKEMpIE1hbnUgQWJyYWhhbSAoYWJyYWhhbS5tYW51QGdtYWlsLmNvbSkKKworCUNvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCitzdGF0aWMgaW50IHN0YjYxMDBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMJKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMJKnR1bmVyX29wcyA9IE5VTEw7CisJc3RydWN0IHR1bmVyX3N0YXRlCXRfc3RhdGU7CisJaW50IGVyciA9IDA7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKwlpZiAodHVuZXJfb3BzLT5nZXRfc3RhdGUpIHsKKwkJaWYgKChlcnIgPSB0dW5lcl9vcHMtPmdldF9zdGF0ZShmZSwgRFZCRkVfVFVORVJfRlJFUVVFTkNZLCAmdF9zdGF0ZSkpIDwgMCkgeworCQkJcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJKmZyZXF1ZW5jeSA9IHRfc3RhdGUuZnJlcXVlbmN5OworCQlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjYxMDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcwkqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcwkqdHVuZXJfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgdHVuZXJfc3RhdGUJdF9zdGF0ZTsKKwlpbnQgZXJyID0gMDsKKworCXRfc3RhdGUuZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCWlmICh0dW5lcl9vcHMtPnNldF9zdGF0ZSkgeworCQlpZiAoKGVyciA9IHR1bmVyX29wcy0+c2V0X3N0YXRlKGZlLCBEVkJGRV9UVU5FUl9GUkVRVUVOQ1ksICZ0X3N0YXRlKSkgPCAwKSB7CisJCQlwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjEwMF9nZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcwkqZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMJKnR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKwlzdHJ1Y3QgdHVuZXJfc3RhdGUJdF9zdGF0ZTsKKwlpbnQgZXJyID0gMDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCWlmICh0dW5lcl9vcHMtPmdldF9zdGF0ZSkgeworCQlpZiAoKGVyciA9IHR1bmVyX29wcy0+Z2V0X3N0YXRlKGZlLCBEVkJGRV9UVU5FUl9CQU5EV0lEVEgsICZ0X3N0YXRlKSkgPCAwKSB7CisJCQlwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQkqYmFuZHdpZHRoID0gdF9zdGF0ZS5iYW5kd2lkdGg7CisJfQorCXByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuYmFuZHdpZHRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGI2MTAwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBiYW5kd2lkdGgpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMJKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMJKnR1bmVyX29wcyA9IE5VTEw7CisJc3RydWN0IHR1bmVyX3N0YXRlCXRfc3RhdGU7CisJaW50IGVyciA9IDA7CisKKwl0X3N0YXRlLmJhbmR3aWR0aCA9IGJhbmR3aWR0aDsKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKwlpZiAodHVuZXJfb3BzLT5zZXRfc3RhdGUpIHsKKwkJaWYgKChlcnIgPSB0dW5lcl9vcHMtPnNldF9zdGF0ZShmZSwgRFZCRkVfVFVORVJfQkFORFdJRFRILCAmdF9zdGF0ZSkpIDwgMCkgeworCQkJcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJcHJpbnRrKCIlczogQmFuZHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5iYW5kd2lkdGgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkMTc3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisJVERBODI2MSA4UFNLL1FQU0sgdHVuZXIgZHJpdmVyCisJQ29weXJpZ2h0IChDKSBNYW51IEFicmFoYW0gKGFicmFoYW0ubWFudUBnbWFpbC5jb20pCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInRkYTgyNjEuaCIKKworc3RydWN0IHRkYTgyNjFfc3RhdGUgeworCXN0cnVjdCBkdmJfZnJvbnRlbmQJCSpmZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmM7CisJY29uc3Qgc3RydWN0IHRkYTgyNjFfY29uZmlnCSpjb25maWc7CisKKwkvKiBzdGF0ZSBjYWNoZSAqLworCXUzMiBmcmVxdWVuY3k7CisJdTMyIGJhbmR3aWR0aDsKK307CisKK3N0YXRpYyBpbnQgdGRhODI2MV9yZWFkKHN0cnVjdCB0ZGE4MjYxX3N0YXRlICpzdGF0ZSwgdTggKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgdGRhODI2MV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAyIH07CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKKwkJcHJpbnRrKCIlczogcmVhZCBlcnJvciwgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGRhODI2MV93cml0ZShzdHJ1Y3QgdGRhODI2MV9zdGF0ZSAqc3RhdGUsIHU4ICpidWYpCit7CisJY29uc3Qgc3RydWN0IHRkYTgyNjFfY29uZmlnICpjb25maWcgPSBzdGF0ZS0+Y29uZmlnOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBjb25maWctPmFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSA0IH07CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKKwkJcHJpbnRrKCIlczogd3JpdGUgZXJyb3IsIGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRkYTgyNjFfZ2V0X3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpzdGF0dXMpCit7CisJc3RydWN0IHRkYTgyNjFfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTggcmVzdWx0ID0gMDsKKwlpbnQgZXJyID0gMDsKKworCSpzdGF0dXMgPSAwOworCisJaWYgKChlcnIgPSB0ZGE4MjYxX3JlYWQoc3RhdGUsICZyZXN1bHQpKSA8IDApIHsKKwkJcHJpbnRrKCIlczogSS9PIEVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBlcnI7CisJfQorCWlmICgocmVzdWx0ID4+IDYpICYgMHgwMSkgeworCQlwcmludGsoIiVzOiBUdW5lciBQaGFzZSBMb2NrZWRcbiIsIF9fZnVuY19fKTsKKwkJKnN0YXR1cyA9IDE7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHUzMiBkaXZfdGFiW10gPSB7IDIwMDAsIDEwMDAsICA1MDAsICAyNTAsICAxMjUgfTsgLyoga0h6ICovCitzdGF0aWMgY29uc3QgdTggIHJlZl9kaXZbXSA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwNyB9OworCitzdGF0aWMgaW50IHRkYTgyNjFfZ2V0X3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICBlbnVtIHR1bmVyX3BhcmFtIHBhcmFtLAorCQkJICAgICBzdHJ1Y3QgdHVuZXJfc3RhdGUgKnRzdGF0ZSkKK3sKKwlzdHJ1Y3QgdGRhODI2MV9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIERWQkZFX1RVTkVSX0ZSRVFVRU5DWToKKwkJdHN0YXRlLT5mcmVxdWVuY3kgPSBzdGF0ZS0+ZnJlcXVlbmN5OworCQlicmVhazsKKwljYXNlIERWQkZFX1RVTkVSX0JBTkRXSURUSDoKKwkJdHN0YXRlLT5iYW5kd2lkdGggPSA0MDAwMDAwMDsgLyogRklYTUUhIG5lZWQgdG8gY2FsY3VsYXRlIEJhbmR3aWR0aCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiVzOiBVbmtub3duIHBhcmFtZXRlciAocGFyYW09JWQpXG4iLCBfX2Z1bmNfXywgcGFyYW0pOworCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRkYTgyNjFfc2V0X3N0YXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICBlbnVtIHR1bmVyX3BhcmFtIHBhcmFtLAorCQkJICAgICBzdHJ1Y3QgdHVuZXJfc3RhdGUgKnRzdGF0ZSkKK3sKKwlzdHJ1Y3QgdGRhODI2MV9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwljb25zdCBzdHJ1Y3QgdGRhODI2MV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CisJdTMyIGZyZXF1ZW5jeSwgTiwgc3RhdHVzID0gMDsKKwl1OCBidWZbNF07CisJaW50IGVyciA9IDA7CisKKwlpZiAocGFyYW0gJiBEVkJGRV9UVU5FUl9GUkVRVUVOQ1kpIHsKKwkJLyoqCisJCSAqIE4gPSBNYXggVkNPIEZyZXF1ZW5jeSAvIENoYW5uZWwgU3BhY2luZworCQkgKiBNYXggVkNPIEZyZXF1ZW5jeSA9IFZDTyBmcmVxdWVuY3kgKyAoY2hhbm5lbCBzcGFjaW5nIC0gMSkKKwkJICogKHRvIGFjY291bnQgZm9yIGhhbGYgY2hhbm5lbCBzcGFjaW5nIG9uIGVpdGhlciBzaWRlKQorCQkgKi8KKwkJZnJlcXVlbmN5ID0gdHN0YXRlLT5mcmVxdWVuY3k7CisJCWlmICgoZnJlcXVlbmN5IDwgOTUwMDAwKSB8fCAoZnJlcXVlbmN5ID4gMjE1MDAwMCkpIHsKKwkJCXByaW50aygiJXM6IEZyZXF1ZW5jeSBiZXlvbmQgbGltaXRzLCBmcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCBmcmVxdWVuY3kpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJTiA9IChmcmVxdWVuY3kgKyAoZGl2X3RhYltjb25maWctPnN0ZXBfc2l6ZV0gLSAxKSkgLyBkaXZfdGFiW2NvbmZpZy0+c3RlcF9zaXplXTsKKwkJcHJpbnRrKCIlczogU3RlcCBzaXplPSVkLCBEaXZpZGVyPSVkLCBQRz0weCUwMnggKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjb25maWctPnN0ZXBfc2l6ZSwgZGl2X3RhYltjb25maWctPnN0ZXBfc2l6ZV0sIE4sIE4pOworCisJCWJ1ZlswXSA9IChOID4+IDgpICYgMHhmZjsKKwkJYnVmWzFdID0gTiAmIDB4ZmY7CisJCWJ1ZlsyXSA9ICgweDAxIDw8IDcpIHwgKChyZWZfZGl2W2NvbmZpZy0+c3RlcF9zaXplXSAmIDB4MDcpIDw8IDEpOworCisJCWlmIChmcmVxdWVuY3kgPCAxNDUwMDAwKQorCQkJYnVmWzNdID0gMHgwMDsKKwkJaWYgKGZyZXF1ZW5jeSA8IDIwMDAwMDApCisJCQlidWZbM10gPSAweDQwOworCQlpZiAoZnJlcXVlbmN5IDwgMjE1MDAwMCkKKwkJCWJ1ZlszXSA9IDB4ODA7CisKKwkJLyogU2V0IHBhcmFtcyAqLworCQlpZiAoKGVyciA9IHRkYTgyNjFfd3JpdGUoc3RhdGUsIGJ1ZikpIDwgMCkgeworCQkJcHJpbnRrKCIlczogSS9PIEVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCS8qIHNsZWVwIGZvciBzb21lIHRpbWUgKi8KKwkJcHJpbnRrKCIlczogV2FpdGluZyB0byBQaGFzZSBMT0NLXG4iLCBfX2Z1bmNfXyk7CisJCW1zbGVlcCgyMCk7CisJCS8qIGNoZWNrIHN0YXR1cyAqLworCQlpZiAoKGVyciA9IHRkYTgyNjFfZ2V0X3N0YXR1cyhmZSwgJnN0YXR1cykpIDwgMCkgeworCQkJcHJpbnRrKCIlczogSS9PIEVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChzdGF0dXMgPT0gMSkgeworCQkJcHJpbnRrKCIlczogVHVuZXIgUGhhc2UgbG9ja2VkOiBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJc3RhdGUtPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsgLyogY2FjaGUgc3VjY2Vzc2Z1bCBzdGF0ZSAqLworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIlczogTm8gUGhhc2UgbG9jazogc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50aygiJXM6IFVua25vd24gcGFyYW1ldGVyIChwYXJhbT0lZClcbiIsIF9fZnVuY19fLCBwYXJhbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTgyNjFfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhODI2MV9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyB0ZGE4MjYxX29wcyA9IHsKKworCS5pbmZvID0geworCQkubmFtZQkJPSAiVERBODI2MSIsCisvLwkJLnR1bmVyX25hbWUJPSBOVUxMLAorCQkuZnJlcXVlbmN5X21pbgk9ICA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4CT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gMAorCX0sCisKKwkuc2V0X3N0YXRlCT0gdGRhODI2MV9zZXRfc3RhdGUsCisJLmdldF9zdGF0ZQk9IHRkYTgyNjFfZ2V0X3N0YXRlLAorCS5nZXRfc3RhdHVzCT0gdGRhODI2MV9nZXRfc3RhdHVzLAorCS5yZWxlYXNlCT0gdGRhODI2MV9yZWxlYXNlCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0ZGE4MjYxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHRkYTgyNjFfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCB0ZGE4MjYxX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlpZiAoKHN0YXRlID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCB0ZGE4MjYxX3N0YXRlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCWdvdG8gZXhpdDsKKworCXN0YXRlLT5jb25maWcJCT0gY29uZmlnOworCXN0YXRlLT5pMmMJCT0gaTJjOworCXN0YXRlLT5mZQkJPSBmZTsKKwlmZS0+dHVuZXJfcHJpdgkJPSBzdGF0ZTsKKwlmZS0+b3BzLnR1bmVyX29wcwk9IHRkYTgyNjFfb3BzOworCisJZmUtPm9wcy50dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfc3RlcCA9IGRpdl90YWJbY29uZmlnLT5zdGVwX3NpemVdOworLy8JZmUtPm9wcy50dW5lcl9vcHMudHVuZXJfbmFtZQkgPSAmY29uZmlnLT5idWY7CisKKy8vCXByaW50aygiJXM6IEF0dGFjaGluZyAlcyBUREE4MjYxIDhQU0svUVBTSyB0dW5lclxuIiwKKy8vCQlfX2Z1bmNfXywgZmUtPm9wcy50dW5lcl9vcHMudHVuZXJfbmFtZSk7CisJcHJpbnRrKCIlczogQXR0YWNoaW5nIFREQTgyNjEgOFBTSy9RUFNLIHR1bmVyXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gZmU7CisKK2V4aXQ6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKHRkYTgyNjFfYXR0YWNoKTsKK01PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIlNldCB2ZXJib3NpdHkgbGV2ZWwiKTsKKworTU9EVUxFX0FVVEhPUigiTWFudSBBYnJhaGFtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlREQTgyNjEgOFBTSy9RUFNLIFR1bmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDZlNDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuaApAQCAtMCwwICsxLDU1IEBACisvKgorCVREQTgyNjEgOFBTSy9RUFNLIHR1bmVyIGRyaXZlcgorCUNvcHlyaWdodCAoQykgTWFudSBBYnJhaGFtIChhYnJhaGFtLm1hbnVAZ21haWwuY29tKQorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaWZuZGVmIF9fVERBODI2MV9ICisjZGVmaW5lIF9fVERBODI2MV9ICisKK2VudW0gdGRhODI2MV9zdGVwIHsKKwlUREE4MjYxX1NURVBfMjAwMCA9IDAsCS8qIDIwMDAga0h6ICovCisJVERBODI2MV9TVEVQXzEwMDAsCS8qIDEwMDAga0h6ICovCisJVERBODI2MV9TVEVQXzUwMCwJLyogIDUwMCBrSHogKi8KKwlUREE4MjYxX1NURVBfMjUwLAkvKiAgMjUwIGtIeiAqLworCVREQTgyNjFfU1RFUF8xMjUJLyogIDEyNSBrSHogKi8KK307CisKK3N0cnVjdCB0ZGE4MjYxX2NvbmZpZyB7CisvLwl1OAkJCWJ1ZlsxNl07CisJdTgJCQlhZGRyOworCWVudW0gdGRhODI2MV9zdGVwCXN0ZXBfc2l6ZTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBODI2MSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9UREE4MjYxX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqdGRhODI2MV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCB0ZGE4MjYxX2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqdGRhODI2MV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCB0ZGE4MjYxX2NvbmZpZyAqY29uZmlnLAorCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8vQ09ORklHX0RWQl9UREE4MjYxCisKKyNlbmRpZi8vIF9fVERBODI2MV9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MV9jZmcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxX2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZjFlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MV9jZmcuaApAQCAtMCwwICsxLDg0IEBACisvKgorCVREQTgyNjEgOFBTSy9RUFNLIHR1bmVyIGRyaXZlcgorCUNvcHlyaWdodCAoQykgTWFudSBBYnJhaGFtIChhYnJhaGFtLm1hbnVAZ21haWwuY29tKQorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCitzdGF0aWMgaW50IHRkYTgyNjFfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMJKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMJKnR1bmVyX29wcyA9IE5VTEw7CisJc3RydWN0IHR1bmVyX3N0YXRlCXRfc3RhdGU7CisJaW50IGVyciA9IDA7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKwlpZiAodHVuZXJfb3BzLT5nZXRfc3RhdGUpIHsKKwkJaWYgKChlcnIgPSB0dW5lcl9vcHMtPmdldF9zdGF0ZShmZSwgRFZCRkVfVFVORVJfRlJFUVVFTkNZLCAmdF9zdGF0ZSkpIDwgMCkgeworCQkJcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJKmZyZXF1ZW5jeSA9IHRfc3RhdGUuZnJlcXVlbmN5OworCQlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTgyNjFfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcwkqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcwkqdHVuZXJfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgdHVuZXJfc3RhdGUJdF9zdGF0ZTsKKwlpbnQgZXJyID0gMDsKKworCXRfc3RhdGUuZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCWlmICh0dW5lcl9vcHMtPnNldF9zdGF0ZSkgeworCQlpZiAoKGVyciA9IHR1bmVyX29wcy0+c2V0X3N0YXRlKGZlLCBEVkJGRV9UVU5FUl9GUkVRVUVOQ1ksICZ0X3N0YXRlKSkgPCAwKSB7CisJCQlwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhODI2MV9nZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcwkqZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMJKnR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKwlzdHJ1Y3QgdHVuZXJfc3RhdGUJdF9zdGF0ZTsKKwlpbnQgZXJyID0gMDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCWlmICh0dW5lcl9vcHMtPmdldF9zdGF0ZSkgeworCQlpZiAoKGVyciA9IHR1bmVyX29wcy0+Z2V0X3N0YXRlKGZlLCBEVkJGRV9UVU5FUl9CQU5EV0lEVEgsICZ0X3N0YXRlKSkgPCAwKSB7CisJCQlwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQkqYmFuZHdpZHRoID0gdF9zdGF0ZS5iYW5kd2lkdGg7CisJfQorCXByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuYmFuZHdpZHRoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCmluZGV4IDM2YTVhMWMuLjU1MDZmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtMjIwLDE1ICsyMjAsMTggQEAKIAkJLyogVGhlc2UgYXJlIGV4dHJhcG9sYXRlZCBmcm9tIHRoZSA3IGFuZCA4TUh6IHZhbHVlcyAqLwogCQl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgTUNMS19SQVRJTywgMHg5Nyk7CiAJCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDY0LCAweDM0KTsKKwkJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4Y2MsIDB4ZGQpOwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF83X01IWjoKIAkJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIE1DTEtfUkFUSU8sIDB4ODYpOwogCQl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2NCwgMHgzNSk7CisJCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweGNjLCAweDczKTsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CiAJZGVmYXVsdDoKIAkJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIE1DTEtfUkFUSU8sIDB4NzUpOwogCQl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2NCwgMHgzNik7CisJCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweGNjLCAweDczKTsKIAl9CiAKIAl6bDEwMzUzX2NhbGNfbm9taW5hbF9yYXRlKGZlLCBvcC0+YmFuZHdpZHRoLCAmbm9taW5hbF9yYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKaW5kZXggZTk4ZDZjYS4uZmQ2MmUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKQEAgLTM4LDYgKzM4LDE2IEBACiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0EgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDEpLAogCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19CIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDkpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMiB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwYSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTkpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUwMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MTApLApAQCAtOTYsNiArMTA2LDIxIEBACiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBXaW5UViBNaW5pU3RpY2siLAogCQkudHlwZQk9IFNNU19OT1ZBX0IwLAogCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWR2YnQtMDIuZnciLAorCQkubGVkX3Bvd2VyID0gMjYsCisJCS5sZWRfbG8gICAgPSAyNywKKwkJLmxlZF9oaSAgICA9IDI4LAorCX0sCisJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEXSA9IHsKKwkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlDYXJkIiwKKwkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKKwkJLmxuYV9jdHJsICA9IDI5LAorCX0sCisJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyXSA9IHsKKwkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlDYXJkIiwKKwkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKKwkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKKwkJLmxuYV9jdHJsICA9IDEsCiAJfSwKIH07CiAKQEAgLTEwNiwzICsxMzEsODggQEAKIAlyZXR1cm4gJnNtc19ib2FyZHNbaWRdOwogfQogCitzdGF0aWMgaW50IHNtc19zZXRfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTMyIHBpbiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbXNjb3JlX2dwaW9fY29uZmlnIGdwaW9jb25maWcgPSB7CisJCS5kaXJlY3Rpb24gICAgICAgICAgICA9IFNNU19HUElPX0RJUkVDVElPTl9PVVRQVVQsCisJCS5wdWxsdXBkb3duICAgICAgICAgICA9IFNNU19HUElPX1BVTExVUERPV05fTk9ORSwKKwkJLmlucHV0Y2hhcmFjdGVyaXN0aWNzID0gU01TX0dQSU9fSU5QVVRDSEFSQUNURVJJU1RJQ1NfTk9STUFMLAorCQkub3V0cHV0c2xld3JhdGUgICAgICAgPSBTTVNfR1BJT19PVVRQVVRTTEVXUkFURV9GQVNULAorCQkub3V0cHV0ZHJpdmluZyAgICAgICAgPSBTTVNfR1BJT19PVVRQVVREUklWSU5HXzRtQSwKKwl9OworCisJaWYgKHBpbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHNtc2NvcmVfY29uZmlndXJlX2dwaW8oY29yZWRldiwgcGluLCAmZ3Bpb2NvbmZpZyk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbXNjb3JlX3NldF9ncGlvKGNvcmVkZXYsIHBpbiwgZW5hYmxlKTsKK30KKworaW50IHNtc19ib2FyZF9zZXR1cChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKK3sKKwlpbnQgYm9hcmRfaWQgPSBzbXNjb3JlX2dldF9ib2FyZF9pZChjb3JlZGV2KTsKKwlzdHJ1Y3Qgc21zX2JvYXJkICpib2FyZCA9IHNtc19nZXRfYm9hcmQoYm9hcmRfaWQpOworCisJc3dpdGNoIChib2FyZF9pZCkgeworCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTToKKwkJLyogdHVybiBvZmYgYWxsIExFRHMgKi8KKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsIGJvYXJkLT5sZWRfcG93ZXIsIDApOworCQlzbXNfc2V0X2dwaW8oY29yZWRldiwgYm9hcmQtPmxlZF9oaSwgMCk7CisJCXNtc19zZXRfZ3Bpbyhjb3JlZGV2LCBib2FyZC0+bGVkX2xvLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMjoKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEOgorCQkvKiB0dXJuIG9mZiBMTkEgKi8KKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsIGJvYXJkLT5sbmFfY3RybCwgMCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHNtc19ib2FyZF9wb3dlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IG9ub2ZmKQoreworCWludCBib2FyZF9pZCA9IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKGNvcmVkZXYpOworCXN0cnVjdCBzbXNfYm9hcmQgKmJvYXJkID0gc21zX2dldF9ib2FyZChib2FyZF9pZCk7CisKKwlzd2l0Y2ggKGJvYXJkX2lkKSB7CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNOgorCQkvKiBwb3dlciBMRUQgKi8KKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkgICAgIGJvYXJkLT5sZWRfcG93ZXIsIG9ub2ZmID8gMSA6IDApOworCQlicmVhazsKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyOgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQ6CisJCS8qIExOQSAqLworCQlzbXNfc2V0X2dwaW8oY29yZWRldiwKKwkJCSAgICAgYm9hcmQtPmxuYV9jdHJsLCBvbm9mZiA/IDEgOiAwKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc21zX2JvYXJkX2xlZF9mZWVkYmFjayhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IGxlZCkKK3sKKwlpbnQgYm9hcmRfaWQgPSBzbXNjb3JlX2dldF9ib2FyZF9pZChjb3JlZGV2KTsKKwlzdHJ1Y3Qgc21zX2JvYXJkICpib2FyZCA9IHNtc19nZXRfYm9hcmQoYm9hcmRfaWQpOworCisJLyogZG9udCB0b3VjaCBHUElPIGlmIExFRHMgYXJlIGFscmVhZHkgc2V0ICovCisJaWYgKHNtc2NvcmVfbGVkX3N0YXRlKGNvcmVkZXYsIC0xKSA9PSBsZWQpCisJCXJldHVybiAwOworCisJc3dpdGNoIChib2FyZF9pZCkgeworCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTToKKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkgICAgIGJvYXJkLT5sZWRfbG8sIChsZWQgJiBTTVNfTEVEX0xPKSA/IDEgOiAwKTsKKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkgICAgIGJvYXJkLT5sZWRfaGksIChsZWQgJiBTTVNfTEVEX0hJKSA/IDEgOiAwKTsKKworCQlzbXNjb3JlX2xlZF9zdGF0ZShjb3JlZGV2LCBsZWQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCmluZGV4IGM4ZjNkYTYuLjhlMGZlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCkBAIC0zMiwxNCArMzIsMjcgQEAKICNkZWZpbmUgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQSA2CiAjZGVmaW5lIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0IgNwogI2RlZmluZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIDgKKyNkZWZpbmUgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgOQorI2RlZmluZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMiAxMAogCiBzdHJ1Y3Qgc21zX2JvYXJkIHsKIAllbnVtIHNtc19kZXZpY2VfdHlwZV9zdCB0eXBlOwogCWNoYXIgKm5hbWUsICpmd1tERVZJQ0VfTU9ERV9NQVhdOworCisJLyogZ3Bpb3MgKi8KKwlpbnQgbGVkX3Bvd2VyLCBsZWRfaGksIGxlZF9sbywgbG5hX2N0cmw7CiB9OwogCiBzdHJ1Y3Qgc21zX2JvYXJkICpzbXNfZ2V0X2JvYXJkKGludCBpZCk7CiAKK2ludCBzbXNfYm9hcmRfc2V0dXAoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOworCisjZGVmaW5lIFNNU19MRURfT0ZGIDAKKyNkZWZpbmUgU01TX0xFRF9MTyAgMQorI2RlZmluZSBTTVNfTEVEX0hJICAyCitpbnQgc21zX2JvYXJkX2xlZF9mZWVkYmFjayhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IGxlZCk7CitpbnQgc21zX2JvYXJkX3Bvd2VyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpOworCiBleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW107CiAKICNlbmRpZiAvKiBfX1NNU19DQVJEU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwppbmRleCA2NTc2ZmJiLi5jZjYxM2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCkBAIC05MSw2ICs5MSw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gaW5pdF9kZXZpY2VfZG9uZSwgcmVsb2FkX3N0YXJ0X2RvbmUsIHJlc3VtZV9kb25lOwogCiAJaW50IGJvYXJkX2lkOworCWludCBsZWRfc3RhdGU7CiB9OwogCiB2b2lkIHNtc2NvcmVfc2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgaWQpCkBAIC05OCw2ICs5OSwxMyBAQAogCWNvcmUtPmJvYXJkX2lkID0gaWQ7CiB9CiAKK2ludCBzbXNjb3JlX2xlZF9zdGF0ZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZSwgaW50IGxlZCkKK3sKKwlpZiAobGVkID49IDApCisJCWNvcmUtPmxlZF9zdGF0ZSA9IGxlZDsKKwlyZXR1cm4gY29yZS0+bGVkX3N0YXRlOworfQorCiBpbnQgc21zY29yZV9nZXRfYm9hcmRfaWQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmUpCiB7CiAJcmV0dXJuIGNvcmUtPmJvYXJkX2lkOwpAQCAtMTE4Nyw2ICsxMTk1LDc2IEBACiB9CiAKIAoraW50IHNtc2NvcmVfY29uZmlndXJlX2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHUzMiBwaW4sCisJCQkgICBzdHJ1Y3Qgc21zY29yZV9ncGlvX2NvbmZpZyAqcGluY29uZmlnKQoreworCXN0cnVjdCB7CisJCXN0cnVjdCBTbXNNc2dIZHJfU1QgaGRyOworCQl1MzIgZGF0YVs2XTsKKwl9IG1zZzsKKworCWlmIChjb3JlZGV2LT5kZXZpY2VfZmxhZ3MgJiBTTVNfREVWSUNFX0ZBTUlMWTIpIHsKKwkJbXNnLmhkci5tc2dTcmNJZCA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCQltc2cuaGRyLm1zZ0RzdElkID0gSElGX1RBU0s7CisJCW1zZy5oZHIubXNnRmxhZ3MgPSAwOworCQltc2cuaGRyLm1zZ1R5cGUgID0gTVNHX1NNU19HUElPX0NPTkZJR19FWF9SRVE7CisJCW1zZy5oZHIubXNnTGVuZ3RoID0gc2l6ZW9mKG1zZyk7CisKKwkJbXNnLmRhdGFbMF0gPSBwaW47CisJCW1zZy5kYXRhWzFdID0gcGluY29uZmlnLT5wdWxsdXBkb3duOworCisJCS8qIENvbnZlcnQgc2xldyByYXRlIGZvciBOb3ZhOiBGYXN0KDApID0gMyAvIFNsb3coMSkgPSAwOyAqLworCQltc2cuZGF0YVsyXSA9IHBpbmNvbmZpZy0+b3V0cHV0c2xld3JhdGUgPT0gMCA/IDMgOiAwOworCisJCXN3aXRjaCAocGluY29uZmlnLT5vdXRwdXRkcml2aW5nKSB7CisJCWNhc2UgU01TX0dQSU9fT1VUUFVURFJJVklOR18xNm1BOgorCQkJbXNnLmRhdGFbM10gPSA3OyAvKiBOb3ZhIC0gMTZtQSAqLworCQkJYnJlYWs7CisJCWNhc2UgU01TX0dQSU9fT1VUUFVURFJJVklOR18xMm1BOgorCQkJbXNnLmRhdGFbM10gPSA1OyAvKiBOb3ZhIC0gMTFtQSAqLworCQkJYnJlYWs7CisJCWNhc2UgU01TX0dQSU9fT1VUUFVURFJJVklOR184bUE6CisJCQltc2cuZGF0YVszXSA9IDM7IC8qIE5vdmEgLSA3bUEgKi8KKwkJCWJyZWFrOworCQljYXNlIFNNU19HUElPX09VVFBVVERSSVZJTkdfNG1BOgorCQlkZWZhdWx0OgorCQkJbXNnLmRhdGFbM10gPSAyOyAvKiBOb3ZhIC0gNG1BICovCisJCQlicmVhazsKKwkJfQorCisJCW1zZy5kYXRhWzRdID0gcGluY29uZmlnLT5kaXJlY3Rpb247CisJCW1zZy5kYXRhWzVdID0gMDsKKwl9IGVsc2UgLyogVE9ETzogU01TX0RFVklDRV9GQU1JTFkxICovCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNvcmVkZXYtPnNlbmRyZXF1ZXN0X2hhbmRsZXIoY29yZWRldi0+Y29udGV4dCwKKwkJCQkJICAgICZtc2csIHNpemVvZihtc2cpKTsKK30KKworaW50IHNtc2NvcmVfc2V0X2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHUzMiBwaW4sIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgU21zTXNnSGRyX1NUIGhkcjsKKwkJdTMyIGRhdGFbM107CisJfSBtc2c7CisKKwlpZiAocGluID4gTUFYX0dQSU9fUElOX05VTUJFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc2cuaGRyLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CisJbXNnLmhkci5tc2dEc3RJZCA9IEhJRl9UQVNLOworCW1zZy5oZHIubXNnRmxhZ3MgPSAwOworCW1zZy5oZHIubXNnVHlwZSAgPSBNU0dfU01TX0dQSU9fU0VUX0xFVkVMX1JFUTsKKwltc2cuaGRyLm1zZ0xlbmd0aCA9IHNpemVvZihtc2cpOworCisJbXNnLmRhdGFbMF0gPSBwaW47CisJbXNnLmRhdGFbMV0gPSBsZXZlbCA/IDEgOiAwOworCW1zZy5kYXRhWzJdID0gMDsKKworCXJldHVybiBjb3JlZGV2LT5zZW5kcmVxdWVzdF9oYW5kbGVyKGNvcmVkZXYtPmNvbnRleHQsCisJCQkJCSAgICAmbXNnLCBzaXplb2YobXNnKSk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNtc2NvcmVfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IDhkOTczZjcuLjc2MGUyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTE4Niw2ICsxODYsOCBAQAogI2RlZmluZSBNU0dfU1dfUkVMT0FEX0VYRUNfUkVRCQkJCTcwNAogI2RlZmluZSBNU0dfU1dfUkVMT0FEX0VYRUNfUkVTCQkJCTcwNQogI2RlZmluZSBNU0dfU01TX1NQSV9JTlRfTElORV9TRVRfUkVRCQk3MTAKKyNkZWZpbmUgTVNHX1NNU19HUElPX0NPTkZJR19FWF9SRVEJCQk3MTIKKyNkZWZpbmUgTVNHX1NNU19HUElPX0NPTkZJR19FWF9SRVMJCQk3MTMKICNkZWZpbmUgTVNHX1NNU19JU0RCVF9UVU5FX1JFUQkJCQk3NzYKICNkZWZpbmUgTVNHX1NNU19JU0RCVF9UVU5FX1JFUwkJCQk3NzcKIApAQCAtMzQxLDYgKzM0MywzMiBAQAogfTsKIAogCitzdHJ1Y3Qgc21zY29yZV9ncGlvX2NvbmZpZyB7CisjZGVmaW5lIFNNU19HUElPX0RJUkVDVElPTl9JTlBVVCAgMAorI2RlZmluZSBTTVNfR1BJT19ESVJFQ1RJT05fT1VUUFVUIDEKKwl1OCBkaXJlY3Rpb247CisKKyNkZWZpbmUgU01TX0dQSU9fUFVMTFVQRE9XTl9OT05FICAgICAwCisjZGVmaW5lIFNNU19HUElPX1BVTExVUERPV05fUFVMTERPV04gMQorI2RlZmluZSBTTVNfR1BJT19QVUxMVVBET1dOX1BVTExVUCAgIDIKKyNkZWZpbmUgU01TX0dQSU9fUFVMTFVQRE9XTl9LRUVQRVIgICAzCisJdTggcHVsbHVwZG93bjsKKworI2RlZmluZSBTTVNfR1BJT19JTlBVVENIQVJBQ1RFUklTVElDU19OT1JNQUwgIDAKKyNkZWZpbmUgU01TX0dQSU9fSU5QVVRDSEFSQUNURVJJU1RJQ1NfU0NITUlUVCAxCisJdTggaW5wdXRjaGFyYWN0ZXJpc3RpY3M7CisKKyNkZWZpbmUgU01TX0dQSU9fT1VUUFVUU0xFV1JBVEVfRkFTVCAwCisjZGVmaW5lIFNNU19HUElPX09VVFBVVFNMRVdSQVRFX1NMT1cgMQorCXU4IG91dHB1dHNsZXdyYXRlOworCisjZGVmaW5lIFNNU19HUElPX09VVFBVVERSSVZJTkdfNG1BICAwCisjZGVmaW5lIFNNU19HUElPX09VVFBVVERSSVZJTkdfOG1BICAxCisjZGVmaW5lIFNNU19HUElPX09VVFBVVERSSVZJTkdfMTJtQSAyCisjZGVmaW5lIFNNU19HUElPX09VVFBVVERSSVZJTkdfMTZtQSAzCisJdTggb3V0cHV0ZHJpdmluZzsKK307CisKIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgewogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAKQEAgLTM1Myw3ICszODEsNyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmQJZnJvbnRlbmQ7CiAKIAlmZV9zdGF0dXNfdAkJZmVfc3RhdHVzOwotCWludAkJCWZlX2JlciwgZmVfc25yLCBmZV9zaWduYWxfc3RyZW5ndGg7CisJaW50CQkJZmVfYmVyLCBmZV9zbnIsIGZlX3VuYywgZmVfc2lnbmFsX3N0cmVuZ3RoOwogCiAJc3RydWN0IGNvbXBsZXRpb24JdHVuZV9kb25lLCBzdGF0X2RvbmU7CiAKQEAgLTM5Niw5ICs0MjQsMTUgQEAKIGV4dGVybiB2b2lkIHNtc2NvcmVfcHV0YnVmZmVyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJICAgICAgc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiKTsKIAoraW50IHNtc2NvcmVfY29uZmlndXJlX2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHUzMiBwaW4sCisJCQkgICBzdHJ1Y3Qgc21zY29yZV9ncGlvX2NvbmZpZyAqcGluY29uZmlnKTsKK2ludCBzbXNjb3JlX3NldF9ncGlvKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCB1MzIgcGluLCBpbnQgbGV2ZWwpOworCiB2b2lkIHNtc2NvcmVfc2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgaWQpOwogaW50IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlKTsKIAoraW50IHNtc2NvcmVfbGVkX3N0YXRlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgbGVkKTsKKwogLyogc21zZHZiLmMgKi8KIGludCBzbXNkdmJfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIHNtc2R2Yl91bnJlZ2lzdGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwppbmRleCA4ZDQ5MGUxLi4yZGE5NTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpAQCAtNjAsNiArNjAsNyBAQAogCiAJCQljbGllbnQtPmZlX3NuciA9IHAtPlN0YXQuU05SOwogCQkJY2xpZW50LT5mZV9iZXIgPSBwLT5TdGF0LkJFUjsKKwkJCWNsaWVudC0+ZmVfdW5jID0gcC0+U3RhdC5CRVJFcnJvckNvdW50OwogCiAJCQlpZiAocC0+U3RhdC5JbkJhbmRQd3IgPCAtOTUpCiAJCQkJY2xpZW50LT5mZV9zaWduYWxfc3RyZW5ndGggPSAwOwpAQCAtNzIsNiArNzMsNyBAQAogCQkJY2xpZW50LT5mZV9zdGF0dXMgPSAwOwogCQkJY2xpZW50LT5mZV9zbnIgPQogCQkJY2xpZW50LT5mZV9iZXIgPQorCQkJY2xpZW50LT5mZV91bmMgPQogCQkJY2xpZW50LT5mZV9zaWduYWxfc3RyZW5ndGggPSAwOwogCQl9CiAKQEAgLTE2NSw4ICsxNjcsMTggQEAKIAlzdHJ1Y3QgU21zTXNnSGRyX1NUIE1zZyA9IHsgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEsCiAJCQkgICAgIERWQlRfQkRBX0NPTlRST0xfTVNHX0lELAogCQkJICAgICBISUZfVEFTSywgc2l6ZW9mKHN0cnVjdCBTbXNNc2dIZHJfU1QpLCAwIH07Ci0JcmV0dXJuIHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAotCQkJCQkgICAmY2xpZW50LT5zdGF0X2RvbmUpOworCWludCByZXQgPSBzbXNkdmJfc2VuZHJlcXVlc3RfYW5kX3dhaXQoY2xpZW50LCAmTXNnLCBzaXplb2YoTXNnKSwKKwkJCQkJICAgICAgJmNsaWVudC0+c3RhdF9kb25lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjbGllbnQtPmZlX3N0YXR1cyAmIEZFX0hBU19MT0NLKQorCQlzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKGNsaWVudC0+Y29yZWRldiwKKwkJCQkgICAgICAgKGNsaWVudC0+ZmVfdW5jID09IDApID8KKwkJCQkgICAgICAgU01TX0xFRF9ISSA6IFNNU19MRURfTE8pOworCWVsc2UKKwkJc21zX2JvYXJkX2xlZF9mZWVkYmFjayhjbGllbnQtPmNvcmVkZXYsIFNNU19MRURfT0ZGKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXQpCkBAIC0yMTcsNiArMjI5LDE4IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOworCWludCByYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCisJaWYgKCFyYykKKwkJKnVjYmxvY2tzID0gY2xpZW50LT5mZV91bmM7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgc21zZHZiX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCiB7CkBAIC0yNzMsNiArMjk3LDI4IEBACiAJLyogdG9kbzogKi8KIAltZW1jcHkoZmVwLCAmY2xpZW50LT5mZV9wYXJhbXMsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtc2R2Yl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9CisJCWNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOworCisJc21zX2JvYXJkX3Bvd2VyKGNsaWVudC0+Y29yZWRldiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXNkdmJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisKKwlzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKGNsaWVudC0+Y29yZWRldiwgU01TX0xFRF9PRkYpOworCXNtc19ib2FyZF9wb3dlcihjbGllbnQtPmNvcmVkZXYsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwOCw2ICszNTQsMTAgQEAKIAkucmVhZF9iZXIgPSBzbXNkdmJfcmVhZF9iZXIsCiAJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAogCS5yZWFkX3NuciA9IHNtc2R2Yl9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IHNtc2R2Yl9yZWFkX3VjYmxvY2tzLAorCisJLmluaXQgPSBzbXNkdmJfaW5pdCwKKwkuc2xlZXAgPSBzbXNkdmJfc2xlZXAsCiB9OwogCiBzdGF0aWMgaW50IHNtc2R2Yl9ob3RwbHVnKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LApAQCAtNDAyLDYgKzQ1Miw4IEBACiAKIAlzbXNfaW5mbygic3VjY2VzcyIpOwogCisJc21zX2JvYXJkX3NldHVwKGNvcmVkZXYpOworCiAJcmV0dXJuIDA7CiAKIGNsaWVudF9lcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKaW5kZXggODdhM2MyNC4uNWQ3Y2EzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTQzMiwxMSArNDMyLDU2IEBACiAJc21zdXNiX3Rlcm1fZGV2aWNlKGludGYpOwogfQogCitzdGF0aWMgaW50IHNtc3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiA9CisJCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcyAgRW50ZXJpbmcgc3RhdHVzICVkLlxuIiwgX19mdW5jX18sIG1zZy5ldmVudCk7CisJc21zdXNiX3N0b3Bfc3RyZWFtaW5nKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21zdXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQgcmMsIGk7CisJc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2ID0KKwkJKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzICBFbnRlcmluZy5cbiIsIF9fZnVuY19fKTsKKwl1c2JfY2xlYXJfaGFsdCh1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgMHg4MSkpOworCXVzYl9jbGVhcl9oYWx0KHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDAyKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKQorCQlwcmludGsoS0VSTl9JTkZPICJlbmRwb2ludCAlZCAlMDJ4ICUwMnggJWRcbiIsIGksCisJCSAgICAgICBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAorCQkgICAgICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2MuYm1BdHRyaWJ1dGVzLAorCQkgICAgICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemUpOworCisJaWYgKGludGYtPm51bV9hbHRzZXR0aW5nID4gMCkgeworCQlyYyA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsCisJCQkJICAgICAgIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLgorCQkJCSAgICAgICBiSW50ZXJmYWNlTnVtYmVyLCAwKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICIlcyB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIHJjICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlzbXN1c2Jfc3RhcnRfc3RyZWFtaW5nKGRldik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbXN1c2JfZHJpdmVyID0gewogCS5uYW1lCQkJPSAic21zMXh4eCIsCiAJLnByb2JlCQkJPSBzbXN1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJCT0gc21zdXNiX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlCQk9IHNtc3VzYl9pZF90YWJsZSwKKworCS5zdXNwZW5kCQk9IHNtc3VzYl9zdXNwZW5kLAorCS5yZXN1bWUJCQk9IHNtc3VzYl9yZXN1bWUsCiB9OwogCiBpbnQgc21zdXNiX3JlZ2lzdGVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCA0MDFhMDRlLi5hYjBiY2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTEwNCw2ICsxMDQsOCBAQAogCXNlbGVjdCBEVkJfU1RWMDI5NyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwNFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjA4OTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjYxMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCkBAIC0xMzEsNiArMTMzLDggQEAKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UREExMDAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjA4OTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTgyNjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVQTYxMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggMTAzMmVhNy4uZjk5NmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTM1LDYgKzM1LDExIEBACiAKICNpbmNsdWRlICJidWRnZXQuaCIKICNpbmNsdWRlICJzdHYwMjk5LmgiCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3JlZy5oIgorI2luY2x1ZGUgInN0YjA4OTlfY2ZnLmgiCisjaW5jbHVkZSAidGRhODI2MS5oIgorI2luY2x1ZGUgInRkYTgyNjFfY2ZnLmgiCiAjaW5jbHVkZSAidGRhMTAwMnguaCIKICNpbmNsdWRlICJ0ZGExMDA0eC5oIgogI2luY2x1ZGUgInR1YTYxMDAuaCIKQEAgLTg4Miw2ICs4ODcsMjgxIEBACiAJLnNldF9zeW1ib2xfcmF0ZSA9IHBoaWxpcHNfc2QxODc4X2NpX3NldF9zeW1ib2xfcmF0ZSwKIH07CiAKKy8qIEtOQzEgRFZCLVMgKFNUQjA4OTkpIEluaXR0YWIJKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcga25jMV9zdGIwODk5X3MxX2luaXRfMVtdID0geworCisJeyBTVEIwODk5X0RFVl9JRAkJLCAweDgxIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMQkJLCAweDMyIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMgkJLCAweDgwIH0sCisJeyBTVEIwODk5X0RJU1JYX1NUMAkJLCAweDA0IH0sCisJeyBTVEIwODk5X0RJU1JYX1NUMQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU1BBUklUWQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU0ZJRk8JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNTVEFUVVMJCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9ESVNGMjIJCSwgMHg4YyB9LAorCXsgU1RCMDg5OV9ESVNGMjJSWAkJLCAweDlhIH0sCisJeyBTVEIwODk5X1NZU1JFRwkJLCAweDBiIH0sCisJeyBTVEIwODk5X0FDUlBSRVNDCQksIDB4MTEgfSwKKwl7IFNUQjA4OTlfQUNSRElWMQkJLCAweDBhIH0sCisJeyBTVEIwODk5X0FDUkRJVjIJCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9EQUNSMQkJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9EQUNSMgkJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9PVVRDRkcJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NT0RFQ0ZHCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzMJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMgkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18xCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzAJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMwkJLCAweGYzIH0sCisJeyBTVEIwODk5X0lSUU1TS18yCQksIDB4ZmMgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzEJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMAkJLCAweGZmIH0sCisJeyBTVEIwODk5X0lSUUNGRwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0kyQ0NGRwkJLCAweDg4IH0sCisJeyBTVEIwODk5X0kyQ1JQVAkJLCAweDU4IH0sIC8qIFJlcGVhdGVyPTgsIFN0b3A9ZGlzYWJsZWQgKi8KKwl7IFNUQjA4OTlfSU9QVkFMVUU1CQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUU0CQksIDB4MjAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUzCQksIDB4YzkgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUyCQksIDB4OTAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUxCQksIDB4NDAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUwCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfR1BJTzAwQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAxQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAyQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAzQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA0Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA1Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA2Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA3Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA4Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA5Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEwQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzExQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEyQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEzQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE0Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE1Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE2Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE3Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE4Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE5Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzIwQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfU0RBVENGRwkJLCAweGI4IH0sCisJeyBTVEIwODk5X1NDTFRDRkcJCSwgMHhiYSB9LAorCXsgU1RCMDg5OV9BR0NSRkNGRwkJLCAweDA4IH0sIC8qIDB4MWMgKi8KKwl7IFNUQjA4OTlfR1BJTzIyCQksIDB4ODIgfSwgLyogQUdDQkIyQ0ZHICovCisJeyBTVEIwODk5X0dQSU8yMQkJLCAweDkxIH0sIC8qIEFHQ0JCMUNGRyAqLworCXsgU1RCMDg5OV9ESVJDTEtDRkcJCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DTEtPVVQyN0NGRwkJLCAweDdlIH0sCisJeyBTVEIwODk5X1NUREJZQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MwQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MxQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfRElTRVFDT0NGRwkJLCAweDIwIH0sCisJeyBTVEIwODk5X0dQSU8zMkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zM0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zN0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X05DT0FSU0UJCSwgMHgxNSB9LCAvKiAweDE1ID0gMjcgTWh6IENsb2NrLCBGLzMgPSAxOThNSHosIEYvNiA9IDk5TUh6ICovCisJeyBTVEIwODk5X1NZTlRDVFJMCQksIDB4MDIgfSwgLyogMHgwMCA9IENMSyBmcm9tIENMS0ksIDB4MDIgPSBDTEsgZnJvbSBYVEFMSSAqLworCXsgU1RCMDg5OV9GSUxUQ1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZU0NUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TVE9QQ0xLMQkJLCAweDIwIH0sCisJeyBTVEIwODk5X1NUT1BDTEsyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU5UQlVGQ1RSTAkJLCAweDBhIH0sCisJeyAweGZmZmYJCQksIDB4ZmYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcga25jMV9zdGIwODk5X3MxX2luaXRfM1tdID0geworCXsgU1RCMDg5OV9ERU1PRAkJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9SQ09NUEMJCSwgMHhjOSB9LAorCXsgU1RCMDg5OV9BR0MxQ04JCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9BR0MxUkVGCQksIDB4MDggfSwKKwl7IFNUQjA4OTlfUlRDCQkJLCAweDdhIH0sCisJeyBTVEIwODk5X1RNR0NGRwkJLCAweDRlIH0sCisJeyBTVEIwODk5X0FHQzJSRUYJCSwgMHgzMyB9LAorCXsgU1RCMDg5OV9UTFNSCQkJLCAweDg0IH0sCisJeyBTVEIwODk5X0NGRAkJCSwgMHhlZSB9LAorCXsgU1RCMDg5OV9BQ0xDCQkJLCAweDg3IH0sCisJeyBTVEIwODk5X0JDTEMJCQksIDB4OTQgfSwKKwl7IFNUQjA4OTlfRVFPTgkJCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9MRFQJCQksIDB4ZGQgfSwKKwl7IFNUQjA4OTlfTERUMgkJCSwgMHhjOSB9LAorCXsgU1RCMDg5OV9FUVVBTFJFRgkJLCAweGI0IH0sCisJeyBTVEIwODk5X1RNR1JBTVAJCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9UTUdUSEQJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JRENDT01QCQksIDB4ZmIgfSwKKwl7IFNUQjA4OTlfUURDQ09NUAkJLCAweDAzIH0sCisJeyBTVEIwODk5X1BPV0VSSQkJLCAweDNiIH0sCisJeyBTVEIwODk5X1BPV0VSUQkJLCAweDNkIH0sCisJeyBTVEIwODk5X1JDT01QCQkJLCAweDgxIH0sCisJeyBTVEIwODk5X0FHQ0lRSU4JCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9BR0MySTEJCSwgMHgwNCB9LAorCXsgU1RCMDg5OV9BR0MySTIJCSwgMHhmNSB9LAorCXsgU1RCMDg5OV9UTElSCQkJLCAweDI1IH0sCisJeyBTVEIwODk5X1JURgkJCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9EU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTERJCQkJLCAweGNhIH0sCisJeyBTVEIwODk5X0NGUk0JCQksIDB4ZjEgfSwKKwl7IFNUQjA4OTlfQ0ZSTAkJCSwgMHhmMyB9LAorCXsgU1RCMDg5OV9OSVJNCQkJLCAweDJhIH0sCisJeyBTVEIwODk5X05JUkwJCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfSVNZTUIJCQksIDB4MTcgfSwKKwl7IFNUQjA4OTlfUVNZTUIJCQksIDB4ZmEgfSwKKwl7IFNUQjA4OTlfU0ZSSAkJCSwgMHgyZiB9LAorCXsgU1RCMDg5OV9TRlJNCQkJLCAweDY4IH0sCisJeyBTVEIwODk5X1NGUkwJCQksIDB4NDAgfSwKKwl7IFNUQjA4OTlfU0ZSVVBICQksIDB4MmYgfSwKKwl7IFNUQjA4OTlfU0ZSVVBNCQksIDB4NjggfSwKKwl7IFNUQjA4OTlfU0ZSVVBMCQksIDB4NDAgfSwKKwl7IFNUQjA4OTlfRVFVQUkxCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfRVFVQVExCQksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRVFVQUkyCQksIDB4MGYgfSwKKwl7IFNUQjA4OTlfRVFVQVEyCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfRVFVQUkzCQksIDB4ZGYgfSwKKwl7IFNUQjA4OTlfRVFVQVEzCQksIDB4ZmEgfSwKKwl7IFNUQjA4OTlfRVFVQUk0CQksIDB4MzcgfSwKKwl7IFNUQjA4OTlfRVFVQVE0CQksIDB4MGQgfSwKKwl7IFNUQjA4OTlfRVFVQUk1CQksIDB4YmQgfSwKKwl7IFNUQjA4OTlfRVFVQVE1CQksIDB4ZjcgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUzIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9WU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVkVSUk9SCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVFTV0FQCQksIDB4MmEgfSwKKwl7IFNUQjA4OTlfRUNOVDFNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDFMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRkVDQVVUTzEJCSwgMHgwNiB9LAorCXsgU1RCMDg5OV9GRUNNCQkJLCAweDAxIH0sCisJeyBTVEIwODk5X1ZUSDEyCQkJLCAweGYwIH0sCisJeyBTVEIwODk5X1ZUSDIzCQkJLCAweGEwIH0sCisJeyBTVEIwODk5X1ZUSDM0CQkJLCAweDc4IH0sCisJeyBTVEIwODk5X1ZUSDU2CQkJLCAweDRlIH0sCisJeyBTVEIwODk5X1ZUSDY3CQkJLCAweDQ4IH0sCisJeyBTVEIwODk5X1ZUSDc4CQkJLCAweDM4IH0sCisJeyBTVEIwODk5X1BSVklUCQkJLCAweGZmIH0sCisJeyBTVEIwODk5X1ZJVFNZTkMJCSwgMHgxOSB9LAorCXsgU1RCMDg5OV9SU1VMQwkJCSwgMHhiMSB9LCAvKiBEVkIgPSAweGIxLCBEU1MgPSAweGExICovCisJeyBTVEIwODk5X1RTVUxDCQkJLCAweDQyIH0sCisJeyBTVEIwODk5X1JTTExDCQkJLCAweDQwIH0sCisJeyBTVEIwODk5X1RTTFBMCQkJLCAweDEyIH0sCisJeyBTVEIwODk5X1RTQ0ZHSAkJLCAweDBjIH0sCisJeyBTVEIwODk5X1RTQ0ZHTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTQ0ZHTAkJLCAweDBjIH0sCisJeyBTVEIwODk5X1RTT1VUCQkJLCAweDBkIH0sIC8qIDB4MGQgZm9yIENBTSAqLworCXsgU1RCMDg5OV9SU1NZTkNERUwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEgJCSwgMHgwMiB9LAorCXsgU1RCMDg5OV9UU0lOSERFTE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0xMU1RLTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTTExTVEtMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNVTFNUS00JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU1VMU1RLTAkJLCAweGFiIH0sCisJeyBTVEIwODk5X1BDS0xFTlVMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfUENLTEVOTEwJCSwgMHhjYyB9LAorCXsgU1RCMDg5OV9SU1BDS0xFTgkJLCAweGNjIH0sCisJeyBTVEIwODk5X1RTU1RBVFVTCQksIDB4ODAgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDEJCSwgMHhiNiB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMgkJLCAweDk2IH0sCisJeyBTVEIwODk5X0VSUkNUUkwzCQksIDB4ODkgfSwKKwl7IFNUQjA4OTlfRE1PTk1TSzEJCSwgMHgyNyB9LAorCXsgU1RCMDg5OV9ETU9OTVNLMAkJLCAweDAzIH0sCisJeyBTVEIwODk5X0RFTUFQVklUCQksIDB4NWMgfSwKKwl7IFNUQjA4OTlfUExQQVJNCQksIDB4MWYgfSwKKwl7IFNUQjA4OTlfUERFTENUUkwJCSwgMHg0OCB9LAorCXsgU1RCMDg5OV9QREVMQ1RSTDIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkhDVFJMMQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCSENUUkwyCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSFlTVFRIUkVTSAkJLCAweDc3IH0sCisJeyBTVEIwODk5X01BVENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NQVRDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNDU1QJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JU0lfRU5UUlkJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JU0lfQklUX0VOCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTUFUU1RSTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVFNUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExTVFJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMU1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTFNUUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxTVFJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ1NUUgkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEU1RSTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNEU1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0NGR1BERUxTVEFUVVMxCSwgMHgxMCB9LAorCXsgU1RCMDg5OV9DRkdQREVMU1RBVFVTMgksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJGRVJST1JNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJGRVJST1JMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBLVEVSUk9STQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQS1RFUlJPUkwJCSwgMHgwMCB9LAorCXsgMHhmZmZmCQkJLCAweGZmIH0sCit9OworCisvKiBTVEIwODk5IGRlbW9kdWxhdG9yIGNvbmZpZyBmb3IgdGhlIEtOQzEgYW5kIGNsb25lcyAqLworc3RhdGljIHN0cnVjdCBzdGIwODk5X2NvbmZpZyBrbmMxX2R2YnMyX2NvbmZpZyA9IHsKKwkuaW5pdF9kZXYJCT0ga25jMV9zdGIwODk5X3MxX2luaXRfMSwKKwkuaW5pdF9zMl9kZW1vZAkJPSBzdGIwODk5X3MyX2luaXRfMiwKKwkuaW5pdF9zMV9kZW1vZAkJPSBrbmMxX3N0YjA4OTlfczFfaW5pdF8zLAorCS5pbml0X3MyX2ZlYwkJPSBzdGIwODk5X3MyX2luaXRfNCwKKwkuaW5pdF90c3QJCT0gc3RiMDg5OV9zMV9pbml0XzUsCisKKwkucG9zdHByb2MJCT0gTlVMTCwKKworCS5kZW1vZF9hZGRyZXNzCQk9IDB4NjgsCisvLwkudHNfb3V0cHV0X21vZGUJCT0gU1RCMDg5OV9PVVRfUEFSQUxMRUwsCS8qIHR5cGVzID0gU0VSSUFML1BBUkFMTEVMCSovCisJLmJsb2NrX3N5bmNfbW9kZQk9IFNUQjA4OTlfU1lOQ19GT1JDRUQsCS8qIERTUywgU1lOQ19GT1JDRUQvVU5TWU5DRUQJKi8KKy8vCS50c19wZmJpdF90b2dnbGUJPSBTVEIwODk5X01QRUdfTk9STUFMLAkvKiBEaXJlY1RWLCBNUEVHIHRvZ2dsaW5nIHNlcQkqLworCisJLnh0YWxfZnJlcQkJPSAyNzAwMDAwMCwKKwkuaW52ZXJzaW9uCQk9IElRX1NXQVBfT0ZGLCAvKiAxICovCisKKwkubG9fY2xrCQkJPSA3NjUwMDAwMCwKKwkuaGlfY2xrCQkJPSA5MDAwMDAwMCwKKworCS5lc25vX2F2ZQkJPSBTVEIwODk5X0RWQlMyX0VTTk9fQVZFLAorCS5lc25vX3F1YW50CQk9IFNUQjA4OTlfRFZCUzJfRVNOT19RVUFOVCwKKwkuYXZmcmFtZXNfY29hcnNlCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19DT0FSU0UsCisJLmF2ZnJhbWVzX2ZpbmUJCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19GSU5FLAorCS5taXNzX3RocmVzaG9sZAkJPSBTVEIwODk5X0RWQlMyX01JU1NfVEhSRVNIT0xELAorCS51d3BfdGhyZXNob2xkX2FjcQk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9BQ1EsCisJLnV3cF90aHJlc2hvbGRfdHJhY2sJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfVFJBQ0ssCisJLnV3cF90aHJlc2hvbGRfc29mCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1NPRiwKKwkuc29mX3NlYXJjaF90aW1lb3V0CT0gU1RCMDg5OV9EVkJTMl9TT0ZfU0VBUkNIX1RJTUVPVVQsCisKKwkuYnRyX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQlRSX05DT19CSVRTLAorCS5idHJfZ2Fpbl9zaGlmdF9vZmZzZXQJPSBTVEIwODk5X0RWQlMyX0JUUl9HQUlOX1NISUZUX09GRlNFVCwKKwkuY3JsX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQ1JMX05DT19CSVRTLAorCS5sZHBjX21heF9pdGVyCQk9IFNUQjA4OTlfRFZCUzJfTERQQ19NQVhfSVRFUiwKKworCS50dW5lcl9nZXRfZnJlcXVlbmN5CT0gdGRhODI2MV9nZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfZnJlcXVlbmN5CT0gdGRhODI2MV9zZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfYmFuZHdpZHRoCT0gTlVMTCwKKwkudHVuZXJfZ2V0X2JhbmR3aWR0aAk9IHRkYTgyNjFfZ2V0X2JhbmR3aWR0aCwKKwkudHVuZXJfc2V0X3Jmc2lnZ2Fpbgk9IE5VTEwKK307CisKKy8qCisgKiBTRDE4NzgvU0hBIHR1bmVyIGNvbmZpZworICogMUYsIFNpbmdsZSBJL1AsIEhvcml6b250YWwgbW91bnQsIEhpZ2ggU2Vuc2l0aXZpdHkKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZGE4MjYxX2NvbmZpZyBzZDE4NzhjX2NvbmZpZyA9IHsKKy8vCS5uYW1lCQk9ICJTRDE4NzgvU0hBIiwKKwkuYWRkcgkJPSAweDYwLAorCS5zdGVwX3NpemUJPSBUREE4MjYxX1NURVBfMTAwMCAvKiBrSHogKi8KK307CisKIHN0YXRpYyB1OCByZWFkX3B3bShzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYpCiB7CiAJdTggYiA9IDB4ZmY7CkBAIC05MDUsOCArMTE4NSwxMSBAQAogI2RlZmluZSBTVUJJRF9EVkJTX1RWX1NUQVIJCTB4MDAxNAogI2RlZmluZSBTVUJJRF9EVkJTX1RWX1NUQVJfUExVU19YNAkweDAwMTUKICNkZWZpbmUgU1VCSURfRFZCU19UVl9TVEFSX0NJCQkweDAwMTYKKyNkZWZpbmUgU1VCSURfRFZCUzJfS05DMQkJMHgwMDE4CisjZGVmaW5lIFNVQklEX0RWQlMyX0tOQzFfT0VNCQkweDAwMTkKICNkZWZpbmUgU1VCSURfRFZCU19FQVNZV0FUQ0hfMSAgCTB4MDAxYQogI2RlZmluZSBTVUJJRF9EVkJTX0VBU1lXQVRDSF8yICAJMHgwMDFiCisjZGVmaW5lIFNVQklEX0RWQlMyX0VBU1lXQVRDSAkJMHgwMDFkCiAjZGVmaW5lIFNVQklEX0RWQlNfRUFTWVdBVENICQkweDAwMWUKIAogI2RlZmluZSBTVUJJRF9EVkJDX0VBU1lXQVRDSAkJMHgwMDJhCkBAIC05NDEsNiArMTIyNCw5IEBACiAJCWNhc2UgU1VCSURfRFZCVF9LTkMxX1BMVVM6CiAJCWNhc2UgU1VCSURfRFZCQ19FQVNZV0FUQ0g6CiAJCWNhc2UgU1VCSURfRFZCQ19LTkMxX1BMVVNfTUszOgorCQljYXNlIFNVQklEX0RWQlMyX0tOQzE6CisJCWNhc2UgU1VCSURfRFZCUzJfS05DMV9PRU06CisJCWNhc2UgU1VCSURfRFZCUzJfRUFTWVdBVENIOgogCQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAkJCWJyZWFrOwogCX0KQEAgLTk5Myw3ICsxMjc5LDE0IEBACiAJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19zdTEyNzhfdHlfY2lfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKKwljYXNlIFNVQklEX0RWQlMyX0tOQzE6CisJY2FzZSBTVUJJRF9EVkJTMl9LTkMxX09FTToKKwljYXNlIFNVQklEX0RWQlMyX0VBU1lXQVRDSDoKKwkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOworCQlpZiAoKGZlID0gZHZiX2F0dGFjaChzdGIwODk5X2F0dGFjaCwgJmtuYzFfZHZiczJfY29uZmlnLCAmYnVkZ2V0X2F2LT5idWRnZXQuaTJjX2FkYXApKSkKKwkJCWR2Yl9hdHRhY2godGRhODI2MV9hdHRhY2gsIGZlLCAmc2QxODc4Y19jb25maWcsICZidWRnZXRfYXYtPmJ1ZGdldC5pMmNfYWRhcCk7CiAKKwkJYnJlYWs7CiAJY2FzZSBTVUJJRF9EVkJTX0NJTkVSR1kxMjAwOgogCQlmZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZjaW5lcmd5XzEyMDBzX2NvbmZpZywKIAkJCQkgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwKTsKQEAgLTEyNjAsNiArMTU1Myw4IEBACiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CiAKIE1BS0VfQlVER0VUX0lORk8oa25jMXMsICJLTkMxIERWQi1TIiwgQlVER0VUX0tOQzFTKTsKK01BS0VfQlVER0VUX0lORk8oa25jMXMyLCJLTkMxIERWQi1TMiIsIEJVREdFVF9LTkMxUzIpOworTUFLRV9CVURHRVRfSU5GTyhzYXRlczIsIlNhdGVsY28gRWFzeVdhdGNoIERWQi1TMiIsIEJVREdFVF9LTkMxUzIpOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxYywgIktOQzEgRFZCLUMiLCBCVURHRVRfS05DMUMpOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxdCwgIktOQzEgRFZCLVQiLCBCVURHRVRfS05DMVQpOwogTUFLRV9CVURHRVRfSU5GTyhrbmN4cywgIktOQyBUViBTVEFSIERWQi1TIiwgQlVER0VUX1RWU1RBUik7CkBAIC0xMjkwLDYgKzE1ODUsOSBAQAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTQpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxc3B4NCwgMHgxODk0LCAweDAwMTUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTYpLAorCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxczIsIDB4MTg5NCwgMHgwMDE4KSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMyLCAweDE4OTQsIDB4MDAxOSksCisJTUFLRV9FWFRFTlNJT05fUENJKHNhdGVzMiwgMHgxODk0LCAweDAwMWQpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BscywgMHgxODk0LCAweDAwMWUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BsczEsIDB4MTg5NCwgMHgwMDFhKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdwcywgMHgxODk0LCAweDAwMWIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCAwYTVhYWQ0Li4zNTA3NDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtNDMsNiArNDMsMTEgQEAKICNpbmNsdWRlICJzdHYwMjk5LmgiCiAjaW5jbHVkZSAic3R2MDI5Ny5oIgogI2luY2x1ZGUgInRkYTEwMDR4LmgiCisjaW5jbHVkZSAic3RiMDg5OV9kcnYuaCIKKyNpbmNsdWRlICJzdGIwODk5X3JlZy5oIgorI2luY2x1ZGUgInN0YjA4OTlfY2ZnLmgiCisjaW5jbHVkZSAic3RiNjEwMC5oIgorI2luY2x1ZGUgInN0YjYxMDBfY2ZnLmgiCiAjaW5jbHVkZSAibG5icDIxLmgiCiAjaW5jbHVkZSAiYnNiZTEuaCIKICNpbmNsdWRlICJic3J1Ni5oIgpAQCAtMTA3MSw3ICsxMDc2LDI3MSBAQAogCS5kZWx0YWYgPSAweGE1MTEsCiB9OwogCisvKiBUVCBTMi0zMjAwIERWQi1TIChTVEIwODk5KSBJbml0dGFiICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIHR0MzIwMF9zdGIwODk5X3MxX2luaXRfMVtdID0gewogCisJeyBTVEIwODk5X0RFVl9JRAkJLCAweDgxIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMQkJLCAweDMyIH0sCisJeyBTVEIwODk5X0RJU0NOVFJMMiAgICAgCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9ESVNSWF9TVDAgICAgIAksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRElTUlhfU1QxICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU1BBUklUWSAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNGSUZPICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTU1RBVFVTCQksIDB4MjAgfSwKKwl7IFNUQjA4OTlfRElTRjIyICAgICAgICAJLCAweDhjIH0sCisJeyBTVEIwODk5X0RJU0YyMlJYICAgICAgCSwgMHg5YSB9LAorCXsgU1RCMDg5OV9TWVNSRUcJCSwgMHgwYiB9LAorCXsgU1RCMDg5OV9BQ1JQUkVTQyAgICAgIAksIDB4MTEgfSwKKwl7IFNUQjA4OTlfQUNSRElWMSAgICAgICAJLCAweDBhIH0sCisJeyBTVEIwODk5X0FDUkRJVjIgICAgICAgCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9EQUNSMSAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREFDUjIgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X09VVENGRyAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NT0RFQ0ZHICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzMJCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMgkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18xCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzAJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMyAgICAgIAksIDB4ZjMgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzIgICAgICAJLCAweGZjIH0sCisJeyBTVEIwODk5X0lSUU1TS18xICAgICAgCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMAkJLCAweGZmIH0sCisJeyBTVEIwODk5X0lSUUNGRwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0kyQ0NGRyAgICAgICAgCSwgMHg4OCB9LAorCXsgU1RCMDg5OV9JMkNSUFQgICAgICAgIAksIDB4NDggfSwgLyogMTJrIFB1bGx1cCwgUmVwZWF0ZXI9MTYsIFN0b3A9ZGlzYWJsZWQgKi8KKwl7IFNUQjA4OTlfSU9QVkFMVUU1CQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUU0CQksIDB4MjAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUzCQksIDB4YzkgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUyCQksIDB4OTAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUxCQksIDB4NDAgfSwKKwl7IFNUQjA4OTlfSU9QVkFMVUUwCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfR1BJTzAwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wMUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDJDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAzQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDVDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA2Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wN0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDhDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA5Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTFDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzEyQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xM0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTRDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE1Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTdDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE4Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xOUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMjBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfU0RBVENGRyAgICAgICAJLCAweGI4IH0sCisJeyBTVEIwODk5X1NDTFRDRkcgICAgICAgCSwgMHhiYSB9LAorCXsgU1RCMDg5OV9BR0NSRkNGRyAgICAgIAksIDB4MWMgfSwgLyogMHgxMSAqLworCXsgU1RCMDg5OV9HUElPMjIgICAgICAgIAksIDB4ODIgfSwgLyogQUdDQkIyQ0ZHICovCisJeyBTVEIwODk5X0dQSU8yMSAgICAgICAgCSwgMHg5MSB9LCAvKiBBR0NCQjFDRkcgKi8KKwl7IFNUQjA4OTlfRElSQ0xLQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NMS09VVDI3Q0ZHICAgCSwgMHg3ZSB9LAorCXsgU1RCMDg5OV9TVERCWUNGRyAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfQ1MwQ0ZHICAgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NTMUNGRyAgICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9ESVNFUUNPQ0ZHICAgIAksIDB4MjAgfSwKKwl7IFNUQjA4OTlfR1BJTzMyQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzMzQ0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM0Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM1Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM2Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM3Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM4Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzM5Q0ZHCQksIDB4ODIgfSwKKwl7IFNUQjA4OTlfTkNPQVJTRSAgICAgICAJLCAweDE1IH0sIC8qIDB4MTUgPSAyNyBNaHogQ2xvY2ssIEYvMyA9IDE5OE1IeiwgRi82ID0gOTlNSHogKi8KKwl7IFNUQjA4OTlfU1lOVENUUkwgICAgICAJLCAweDAyIH0sIC8qIDB4MDAgPSBDTEsgZnJvbSBDTEtJLCAweDAyID0gQ0xLIGZyb20gWFRBTEkgKi8KKwl7IFNUQjA4OTlfRklMVENUUkwgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZU0NUUkwgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TVE9QQ0xLMSAgICAgIAksIDB4MjAgfSwKKwl7IFNUQjA4OTlfU1RPUENMSzIgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0lOVEJVRlNUQVRVUwkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lOVEJVRkNUUkwgICAgCSwgMHgwYSB9LAorCXsgMHhmZmZmCQkJLCAweGZmIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIHR0MzIwMF9zdGIwODk5X3MxX2luaXRfM1tdID0geworCXsgU1RCMDg5OV9ERU1PRCAgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfUkNPTVBDICAgICAgICAJLCAweGM5IH0sCisJeyBTVEIwODk5X0FHQzFDTiAgICAgICAgCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9BR0MxUkVGICAgICAgIAksIDB4MTAgfSwKKwl7IFNUQjA4OTlfUlRDCQkJLCAweDdhIH0sCisJeyBTVEIwODk5X1RNR0NGRyAgICAgICAgCSwgMHg0ZSB9LAorCXsgU1RCMDg5OV9BR0MyUkVGICAgICAgIAksIDB4MzQgfSwKKwl7IFNUQjA4OTlfVExTUiAgICAgICAgICAJLCAweDg0IH0sCisJeyBTVEIwODk5X0NGRCAgICAgICAgICAgCSwgMHhjNyB9LAorCXsgU1RCMDg5OV9BQ0xDCQkJLCAweDg3IH0sCisJeyBTVEIwODk5X0JDTEMgICAgICAgICAgCSwgMHg5NCB9LAorCXsgU1RCMDg5OV9FUU9OICAgICAgICAgIAksIDB4NDEgfSwKKwl7IFNUQjA4OTlfTERUICAgICAgICAgICAJLCAweGRkIH0sCisJeyBTVEIwODk5X0xEVDIgICAgICAgICAgCSwgMHhjOSB9LAorCXsgU1RCMDg5OV9FUVVBTFJFRiAgICAgIAksIDB4YjQgfSwKKwl7IFNUQjA4OTlfVE1HUkFNUCAgICAgICAJLCAweDEwIH0sCisJeyBTVEIwODk5X1RNR1RIRCAgICAgICAgCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JRENDT01QCQksIDB4ZmIgfSwKKwl7IFNUQjA4OTlfUURDQ09NUAkJLCAweDAzIH0sCisJeyBTVEIwODk5X1BPV0VSSQkJLCAweDNiIH0sCisJeyBTVEIwODk5X1BPV0VSUQkJLCAweDNkIH0sCisJeyBTVEIwODk5X1JDT01QCQkJLCAweDgxIH0sCisJeyBTVEIwODk5X0FHQ0lRSU4JCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9BR0MySTEJCSwgMHgwNCB9LAorCXsgU1RCMDg5OV9BR0MySTIJCSwgMHhmNSB9LAorCXsgU1RCMDg5OV9UTElSCQkJLCAweDI1IH0sCisJeyBTVEIwODk5X1JURgkJCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9EU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTERJCQkJLCAweGNhIH0sCisJeyBTVEIwODk5X0NGUk0JCQksIDB4ZjEgfSwKKwl7IFNUQjA4OTlfQ0ZSTAkJCSwgMHhmMyB9LAorCXsgU1RCMDg5OV9OSVJNCQkJLCAweDJhIH0sCisJeyBTVEIwODk5X05JUkwJCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfSVNZTUIJCQksIDB4MTcgfSwKKwl7IFNUQjA4OTlfUVNZTUIJCQksIDB4ZmEgfSwKKwl7IFNUQjA4OTlfU0ZSSCAgICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUk0gICAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJMICAgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfU0ZSVVBIICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUlVQTSAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJVUEwgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfRVFVQUkxCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfRVFVQVExCQksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRVFVQUkyCQksIDB4MGYgfSwKKwl7IFNUQjA4OTlfRVFVQVEyCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfRVFVQUkzCQksIDB4ZGYgfSwKKwl7IFNUQjA4OTlfRVFVQVEzCQksIDB4ZmEgfSwKKwl7IFNUQjA4OTlfRVFVQUk0CQksIDB4MzcgfSwKKwl7IFNUQjA4OTlfRVFVQVE0CQksIDB4MGQgfSwKKwl7IFNUQjA4OTlfRVFVQUk1CQksIDB4YmQgfSwKKwl7IFNUQjA4OTlfRVFVQVE1CQksIDB4ZjcgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUzIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9WU1RBVFVTICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVkVSUk9SCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVFTV0FQCQksIDB4MmEgfSwKKwl7IFNUQjA4OTlfRUNOVDFNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDFMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRkVDQVVUTzEgICAgICAJLCAweDA2IH0sCisJeyBTVEIwODk5X0ZFQ00JCQksIDB4MDEgfSwKKwl7IFNUQjA4OTlfVlRIMTIgICAgICAgICAJLCAweGYwIH0sCisJeyBTVEIwODk5X1ZUSDIzICAgICAgICAgCSwgMHhhMCB9LAorCXsgU1RCMDg5OV9WVEgzNAkJCSwgMHg3OCB9LAorCXsgU1RCMDg5OV9WVEg1NiAgICAgICAgIAksIDB4NGUgfSwKKwl7IFNUQjA4OTlfVlRINjcgICAgICAgICAJLCAweDQ4IH0sCisJeyBTVEIwODk5X1ZUSDc4ICAgICAgICAgCSwgMHgzOCB9LAorCXsgU1RCMDg5OV9QUlZJVCAgICAgICAgIAksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfVklUU1lOQyAgICAgICAJLCAweDE5IH0sCisJeyBTVEIwODk5X1JTVUxDICAgICAgICAgCSwgMHhiMSB9LCAvKiBEVkIgPSAweGIxLCBEU1MgPSAweGExICovCisJeyBTVEIwODk5X1RTVUxDICAgICAgICAgCSwgMHg0MiB9LAorCXsgU1RCMDg5OV9SU0xMQyAgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfVFNMUEwJCQksIDB4MTIgfSwKKwl7IFNUQjA4OTlfVFNDRkdIICAgICAgICAJLCAweDBjIH0sCisJeyBTVEIwODk5X1RTQ0ZHTSAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0NGR0wgICAgICAgIAksIDB4MGMgfSwKKwl7IFNUQjA4OTlfVFNPVVQJCQksIDB4MGQgfSwgLyogMHgwZCBmb3IgQ0FNICovCisJeyBTVEIwODk5X1JTU1lOQ0RFTCAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEggICAgIAksIDB4MDIgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNMTFNUS00JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0xMU1RLTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1RTVUxTVEtNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNVTFNUS0wJCSwgMHhhYiB9LAorCXsgU1RCMDg5OV9QQ0tMRU5VTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1BDS0xFTkxMCQksIDB4Y2MgfSwKKwl7IFNUQjA4OTlfUlNQQ0tMRU4JCSwgMHhjYyB9LAorCXsgU1RCMDg5OV9UU1NUQVRVUwkJLCAweDgwIH0sCisJeyBTVEIwODk5X0VSUkNUUkwxICAgICAgCSwgMHhiNiB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMiAgICAgIAksIDB4OTYgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDMgICAgICAJLCAweDg5IH0sCisJeyBTVEIwODk5X0RNT05NU0sxCQksIDB4MjcgfSwKKwl7IFNUQjA4OTlfRE1PTk1TSzAJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9ERU1BUFZJVCAgICAgIAksIDB4NWMgfSwKKwl7IFNUQjA4OTlfUExQQVJNCQksIDB4MWYgfSwKKwl7IFNUQjA4OTlfUERFTENUUkwgICAgICAJLCAweDQ4IH0sCisJeyBTVEIwODk5X1BERUxDVFJMMiAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkhDVFJMMSAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJIQ1RSTDIgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0hZU1RUSFJFU0ggICAgCSwgMHg3NyB9LAorCXsgU1RCMDg5OV9NQVRDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTUFUQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DQ1NUCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0VOVFJZCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0JJVF9FTgkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVFNUUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9NQVRTVFJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVVBMU1RSTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTFNUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ERkxTVFJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMU1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNTVFIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUkwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9DRkdQREVMU1RBVFVTMQksIDB4MTAgfSwKKwl7IFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzIJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQS1RFUlJPUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUEtURVJST1JMCQksIDB4MDAgfSwKKwl7IDB4ZmZmZgkJCSwgMHhmZiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzdGIwODk5X2NvbmZpZyB0dDMyMDBfY29uZmlnID0geworCS5pbml0X2RldgkJPSB0dDMyMDBfc3RiMDg5OV9zMV9pbml0XzEsCisJLmluaXRfczJfZGVtb2QJCT0gc3RiMDg5OV9zMl9pbml0XzIsCisJLmluaXRfczFfZGVtb2QJCT0gdHQzMjAwX3N0YjA4OTlfczFfaW5pdF8zLAorCS5pbml0X3MyX2ZlYwkJPSBzdGIwODk5X3MyX2luaXRfNCwKKwkuaW5pdF90c3QJCT0gc3RiMDg5OV9zMV9pbml0XzUsCisKKwkucG9zdHByb2MJCT0gTlVMTCwKKworCS5kZW1vZF9hZGRyZXNzIAkJPSAweDY4LAorCisJLnh0YWxfZnJlcQkJPSAyNzAwMDAwMCwKKwkuaW52ZXJzaW9uCQk9IElRX1NXQVBfT04sIC8qIDEgKi8KKworCS5sb19jbGsJCQk9IDc2NTAwMDAwLAorCS5oaV9jbGsJCQk9IDk5MDAwMDAwLAorCisJLmVzbm9fYXZlCQk9IFNUQjA4OTlfRFZCUzJfRVNOT19BVkUsCisJLmVzbm9fcXVhbnQJCT0gU1RCMDg5OV9EVkJTMl9FU05PX1FVQU5ULAorCS5hdmZyYW1lc19jb2Fyc2UJPSBTVEIwODk5X0RWQlMyX0FWRlJBTUVTX0NPQVJTRSwKKwkuYXZmcmFtZXNfZmluZQkJPSBTVEIwODk5X0RWQlMyX0FWRlJBTUVTX0ZJTkUsCisJLm1pc3NfdGhyZXNob2xkCQk9IFNUQjA4OTlfRFZCUzJfTUlTU19USFJFU0hPTEQsCisJLnV3cF90aHJlc2hvbGRfYWNxCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX0FDUSwKKwkudXdwX3RocmVzaG9sZF90cmFjawk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9UUkFDSywKKwkudXdwX3RocmVzaG9sZF9zb2YJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfU09GLAorCS5zb2Zfc2VhcmNoX3RpbWVvdXQJPSBTVEIwODk5X0RWQlMyX1NPRl9TRUFSQ0hfVElNRU9VVCwKKworCS5idHJfbmNvX2JpdHMJCT0gU1RCMDg5OV9EVkJTMl9CVFJfTkNPX0JJVFMsCisJLmJ0cl9nYWluX3NoaWZ0X29mZnNldAk9IFNUQjA4OTlfRFZCUzJfQlRSX0dBSU5fU0hJRlRfT0ZGU0VULAorCS5jcmxfbmNvX2JpdHMJCT0gU1RCMDg5OV9EVkJTMl9DUkxfTkNPX0JJVFMsCisJLmxkcGNfbWF4X2l0ZXIJCT0gU1RCMDg5OV9EVkJTMl9MRFBDX01BWF9JVEVSLAorCisJLnR1bmVyX2dldF9mcmVxdWVuY3kJPSBzdGI2MTAwX2dldF9mcmVxdWVuY3ksCisJLnR1bmVyX3NldF9mcmVxdWVuY3kJPSBzdGI2MTAwX3NldF9mcmVxdWVuY3ksCisJLnR1bmVyX3NldF9iYW5kd2lkdGgJPSBzdGI2MTAwX3NldF9iYW5kd2lkdGgsCisJLnR1bmVyX2dldF9iYW5kd2lkdGgJPSBzdGI2MTAwX2dldF9iYW5kd2lkdGgsCisJLnR1bmVyX3NldF9yZnNpZ2dhaW4JPSBOVUxMCit9OworCitzdHJ1Y3Qgc3RiNjEwMF9jb25maWcgdHQzMjAwX3N0YjYxMDBfY29uZmlnID0geworCS50dW5lcl9hZGRyZXNzCT0gMHg2MCwKKwkucmVmY2xvY2sJPSAyNzAwMDAwMCwKK307CiAKIHN0YXRpYyB2b2lkIGZyb250ZW5kX2luaXQoc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpKQogewpAQCAtMTE1Miw2ICsxNDIxLDQ2IEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7CisKKwljYXNlIDB4MTAxOToJCS8vIFRUIFMyLTMyMDAgUENJCisJCS8qCisJCSAqIE5PVEUhIG9uIHNvbWUgU1RCMDg5OSB2ZXJzaW9ucywgdGhlIGludGVybmFsIFBMTCB0YWtlcyBhIGxvbmdlciB0aW1lCisJCSAqIHRvIHNldHRsZSwgYWthIExPQ0suIE9uIHRoZSBvbGRlciByZXZpc2lvbnMgb2YgdGhlIGNoaXAsIHdlIGRvbid0IHNlZQorCQkgKiB0aGlzLCBhcyBhIHJlc3VsdCBvbiB0aGUgbmV3ZXIgY2hpcHMgdGhlIGVudGlyZSBjbG9jayB0cmVlLCB3aWxsIG5vdAorCQkgKiBiZSBzdGFibGUgYWZ0ZXIgYSBmcmVzaGx5IFBPV0VSICdlZCB1cCBzaXR1YXRpb24uCisJCSAqIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIFJFU0VUIHRoZSBTVEIwODk5IChBY3RpdmUgTE9XKSBhbmQgd2FpdCBmb3IKKwkJICogUExMIHN0YWJpbGl6YXRpb24uCisJCSAqCisJCSAqIE9uIHRoZSBUVCBTMiAzMjAwIGFuZCBjbG9uZXMsIHRoZSBTVEIwODk5IGRlbW9kdWxhdG9yJ3MgUkVTRVRCIGlzCisJCSAqIGNvbm5lY3RlZCB0byB0aGUgU0FBNzE0NiBHUElPLCBHUElPMiwgUGluIDE0MgorCQkgKi8KKwkJLyogUmVzZXQgRGVtb2R1bGF0b3IgKi8KKwkJc2FhNzE0Nl9zZXRncGlvKGJ1ZGdldF9jaS0+YnVkZ2V0LmRldiwgMiwgU0FBNzE0Nl9HUElPX09VVExPKTsKKwkJLyogV2FpdCBmb3IgZXZlcnl0aGluZyB0byBkaWUgKi8KKwkJbXNsZWVwKDUwKTsKKwkJLyogUHVsbCBpdCB1cCBvdXQgb2YgUmVzZXQgc3RhdGUgKi8KKwkJc2FhNzE0Nl9zZXRncGlvKGJ1ZGdldF9jaS0+YnVkZ2V0LmRldiwgMiwgU0FBNzE0Nl9HUElPX09VVEhJKTsKKwkJLyogV2FpdCBmb3IgUExMIHRvIHN0YWJpbGl6ZSAqLworCQltc2xlZXAoMjUwKTsKKwkJLyoKKwkJICogUExMIHN0YXRlIHNob3VsZCBiZSBzdGFibGUgbm93LiBJZGVhbGx5LCB3ZSBzaG91bGQgY2hlY2sKKwkJICogZm9yIFBMTCBMT0NLIHN0YXR1cy4gQnV0IHdlbGwsIG5ldmVyIG1pbmQhCisJCSAqLworCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0YjA4OTlfYXR0YWNoLCAmdHQzMjAwX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKKwkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkgeworCQkJaWYgKGR2Yl9hdHRhY2goc3RiNjEwMF9hdHRhY2gsIGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgJnR0MzIwMF9zdGI2MTAwX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKSkgeworCQkJCWlmICghZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgMCwgMCkpIHsKKwkJCQkJcHJpbnRrKCIlczogTm8gTE5CUDIxIGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCQkJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBOVUxMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwkJCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gTlVMTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwogCX0KIAogCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPT0gTlVMTCkgewpAQCAtMTI0Miw2ICsxNTUxLDcgQEAKIE1BS0VfQlVER0VUX0lORk8odHRidGNpLCAiVFQtQnVkZ2V0LVQtQ0kgUENJIiwgQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRiY2NpLCAiVFQtQnVkZ2V0LUMtQ0kgUENJIiwgQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRjMTUwMSwgIlRULUJ1ZGdldCBDLTE1MDEgUENJIiwgQlVER0VUX1RUKTsKK01BS0VfQlVER0VUX0lORk8odHQzMjAwLCAiVFQtQnVkZ2V0IFMyLTMyMDAgUENJIiwgQlVER0VUX1RUKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiY2ksIDB4MTNjMiwgMHgxMDBjKSwKQEAgLTEyNTEsNiArMTU2MSw3IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YnRjaSwgMHgxM2MyLCAweDEwMTIpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzMiwgMHgxM2MyLCAweDEwMTcpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGMxNTAxLCAweDEzYzIsIDB4MTAxYSksCisJTUFLRV9FWFRFTlNJT05fUENJKHR0MzIwMCwgMHgxM2MyLCAweDEwMTkpLAogCXsKIAkgLnZlbmRvciA9IDAsCiAJIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKaW5kZXggODY0MzViZi4uM2FkMGM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2RlZmluZSBCVURHRVRfQ0lOMTIwMENfTUszCSAgIDE1CiAjZGVmaW5lIEJVREdFVF9LTkMxQ19NSzMJICAgMTYKICNkZWZpbmUgQlVER0VUX0tOQzFDUF9NSzMJICAgMTcKKyNkZWZpbmUgQlVER0VUX0tOQzFTMiAgICAgICAgICAgICAgMTgKIAogI2RlZmluZSBCVURHRVRfVklERU9fUE9SVEEgICAgICAgICAwCiAjZGVmaW5lIEJVREdFVF9WSURFT19QT1JUQiAgICAgICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKaW5kZXggYTVjYTE3Ni4uNTQ3NGEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKQEAgLTEsNSArMSw1IEBACi0vKiBBIGRyaXZlciBmb3IgdGhlIEQtTGluayBEU0ItUjEwMCBVU0IgcmFkaW8uICBUaGUgUjEwMCBwbHVncwotIGludG8gYm90aCB0aGUgVVNCIGFuZCBhbiBhbmFsb2cgYXVkaW8gaW5wdXQsIHNvIHRoaXMgdGhpbmcKKy8qIEEgZHJpdmVyIGZvciB0aGUgRC1MaW5rIERTQi1SMTAwIFVTQiByYWRpbyBhbmQgR2VtdGVrIFVTQiBSYWRpbyAyMS4KKyBUaGUgZGV2aWNlIHBsdWdzIGludG8gYm90aCB0aGUgVVNCIGFuZCBhbiBhbmFsb2cgYXVkaW8gaW5wdXQsIHNvIHRoaXMgdGhpbmcKICBvbmx5IGRlYWxzIHdpdGggaW5pdGlhbGlzYXRpb24gYW5kIGZyZXF1ZW5jeSBzZXR0aW5nLCB0aGUKICBhdWRpbyBkYXRhIGhhcyB0byBiZSBoYW5kbGVkIGJ5IGEgc291bmQgZHJpdmVyLgogCkBAIC0zMyw2ICszMywxMCBAQAogCiAgSGlzdG9yeToKIAorIFZlcnNpb24gMC40NDoKKwlBZGQgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zLCBmaXggdW5wbHVnIG9mIGRldmljZSwKKwlhIGxvdCBvZiBjbGVhbnVwcyBhbmQgZml4ZXMgYnkgQWxleGV5IEtsaW1vdiA8a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4KKwogIFZlcnNpb24gMC40MzoKIAlPbGl2ZXIgTmV1a3VtOiBhdm9pZGVkIERNQSBjb2hlcmVuY3kgaXNzdWUKIApAQCAtOTMsOCArOTcsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNDEiCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCw0LDEpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC40NCIKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCA0LCA0KQogCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CiAJewpAQCAtMTA0LDcgKzEwOCwyNyBAQAogCQkubWF4aW11bSAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMSwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0KKwl9LAorLyogSElOVDogdGhlIGRpc2FibGVkIGNvbnRyb2xzIGFyZSBvbmx5IGhlcmUgdG8gc2F0aWZ5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCisJeyAgICAgICAuaWQgICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5mbGFncyAgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCX0sCisJeworCQkuaWQgICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAorCQkuZmxhZ3MgICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fQkFTUywKKwkJLmZsYWdzICAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZCAgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKKwkJLmZsYWdzICAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZCAgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0xPVURORVNTLAorCQkuZmxhZ3MgICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKKwl9LAogfTsKIAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXJrdXMgRGVtbGVpdG5lciA8bXNkZW1sZWlAdHVjYW5hLmhhcnZhcmQuZWR1PiIKQEAgLTEyNSwxMiArMTQ5LDE2IEBACiAjZGVmaW5lIEZSRVFfTUFYIDEwOC4wCiAjZGVmaW5lIEZSRVFfTVVMIDE2MDAwCiAKKyNkZWZpbmUgdmlkZW9kZXZfdG9fcmFkaW8oZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBkc2JyMTAwX2RldmljZSwgdmlkZW9kZXYpCiAKIHN0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCB1c2JfZHNicjEwMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyBpbnQgdXNiX2RzYnIxMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkJCXBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwpAQCAtMTM4LDggKzE2Niw5IEBACiAvKiBEYXRhIGZvciBvbmUgKHBoeXNpY2FsKSBkZXZpY2UgKi8KIHN0cnVjdCBkc2JyMTAwX2RldmljZSB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZpZGVvZGV2OwogCXU4ICp0cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IG11dGV4IGxvY2s7CS8qIGJ1ZmZlciBsb2NraW5nICovCiAJaW50IGN1cmZyZXE7CiAJaW50IHN0ZXJlbzsKIAlpbnQgdXNlcnM7CkBAIC0xNDcsNyArMTc2LDYgQEAKIAlpbnQgbXV0ZWQ7CiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfZHNicjEwMF9kZXZpY2VfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKERTQjEwMF9WRU5ET1IsIERTQjEwMF9QUk9EVUNUKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0xNTcsMTAgKzE4NSwxNCBAQAogCiAvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9kc2JyMTAwX2RyaXZlciA9IHsKLQkubmFtZSA9CQkiZHNicjEwMCIsCi0JLnByb2JlID0JdXNiX2RzYnIxMDBfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQl1c2JfZHNicjEwMF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXVzYl9kc2JyMTAwX2RldmljZV90YWJsZSwKKwkubmFtZQkJCT0gImRzYnIxMDAiLAorCS5wcm9iZQkJCT0gdXNiX2RzYnIxMDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX2RzYnIxMDBfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJCT0gdXNiX2RzYnIxMDBfZGV2aWNlX3RhYmxlLAorCS5zdXNwZW5kCQk9IHVzYl9kc2JyMTAwX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gdXNiX2RzYnIxMDBfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUJCT0gdXNiX2RzYnIxMDBfcmVzdW1lLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDAsCiB9OwogCiAvKiBMb3ctbGV2ZWwgZGV2aWNlIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLwpAQCAtMTY4LDk1ICsyMDAsMTkwIEBACiAvKiBzd2l0Y2ggb24gcmFkaW8gKi8KIHN0YXRpYyBpbnQgZHNicjEwMF9zdGFydChzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvKQogewotCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAotCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAotCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkweDAwLCAweEM3LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCB8fAotCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCQlEU0IxMDBfT05PRkYsCi0JCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKLQkJCTB4MDEsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwKQotCQlyZXR1cm4gLTE7Ci0JcmFkaW8tPm11dGVkPTA7Ci0JcmV0dXJuIChyYWRpby0+dHJhbnNmZXJfYnVmZmVyKVswXTsKLX0KKwlpbnQgcmV0dmFsOworCWludCByZXF1ZXN0OwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCisJCXVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJMHgwMCwgMHhDNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTsKKworCWlmIChyZXR2YWwgPCAwKSB7CisJCXJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCWdvdG8gdXNiX2NvbnRyb2xfbXNnX2ZhaWxlZDsKKwl9CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQlEU0IxMDBfT05PRkYsCisJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmVxdWVzdCA9IERTQjEwMF9PTk9GRjsKKwkJZ290byB1c2JfY29udHJvbF9tc2dfZmFpbGVkOworCX0KKworCXJhZGlvLT5tdXRlZCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJcmV0dXJuIChyYWRpby0+dHJhbnNmZXJfYnVmZmVyKVswXTsKKwordXNiX2NvbnRyb2xfbXNnX2ZhaWxlZDoKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwlkZXZfZXJyKCZyYWRpby0+dXNiZGV2LT5kZXYsCisJCSIlcyAtIHVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlaSwgcmVxdWVzdCAlaVxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHJlcXVlc3QpOworCXJldHVybiByZXR2YWw7CisKK30KIAogLyogc3dpdGNoIG9mZiByYWRpbyAqLwogc3RhdGljIGludCBkc2JyMTAwX3N0b3Aoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbykKIHsKLQlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJCVVTQl9SRVFfR0VUX1NUQVRVUywKLQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAotCQkJMHgxNiwgMHgxQywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKSA8IDAgfHwKLQl1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAotCQkJRFNCMTAwX09OT0ZGLAotCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkweDAwLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCkKLQkJcmV0dXJuIC0xOwotCXJhZGlvLT5tdXRlZD0xOworCWludCByZXR2YWw7CisJaW50IHJlcXVlc3Q7CisKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQlVU0JfUkVRX0dFVF9TVEFUVVMsCisJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkweDE2LCAweDFDLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmVxdWVzdCA9IFVTQl9SRVFfR0VUX1NUQVRVUzsKKwkJZ290byB1c2JfY29udHJvbF9tc2dfZmFpbGVkOworCX0KKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCURTQjEwMF9PTk9GRiwKKwkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCTB4MDAsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlyZXF1ZXN0ID0gRFNCMTAwX09OT0ZGOworCQlnb3RvIHVzYl9jb250cm9sX21zZ19mYWlsZWQ7CisJfQorCisJcmFkaW8tPm11dGVkID0gMTsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworCit1c2JfY29udHJvbF9tc2dfZmFpbGVkOgorCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCWRldl9lcnIoJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJIiVzIC0gdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVpLCByZXF1ZXN0ICVpXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcmVxdWVzdCk7CisJcmV0dXJuIHJldHZhbDsKKwogfQogCiAvKiBzZXQgYSBmcmVxdWVuY3ksIGZyZXEgaXMgZGVmaW5lZCBieSB2NGwncyBUVU5FUl9MT1csIGkuZS4gMS8xNnRoIGtIeiAqLwogc3RhdGljIGludCBkc2JyMTAwX3NldGZyZXEoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbywgaW50IGZyZXEpCiB7CisJaW50IHJldHZhbDsKKwlpbnQgcmVxdWVzdDsKKwogCWZyZXEgPSAoZnJlcSAvIDE2ICogODApIC8gMTAwMCArIDg1NjsKLQlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJCURTQjEwMF9UVU5FLAotCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCQkoZnJlcSA+PiA4KSAmIDB4MDBmZiwgZnJlcSAmIDB4ZmYsCi0JCQlyYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCB8fAotCSAgIHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCQlVU0JfUkVRX0dFVF9TVEFUVVMsCi0JCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKLQkJCTB4OTYsIDB4QjcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwIHx8Ci0JdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJCVVTQl9SRVFfR0VUX1NUQVRVUywKLQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCAgVVNCX0RJUl9JTiwKLQkJCTB4MDAsIDB4MjQsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCkgPCAwKSB7Ci0JCXJhZGlvLT5zdGVyZW8gPSAtMTsKLQkJcmV0dXJuIC0xOworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCURTQjEwMF9UVU5FLAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJKGZyZXEgPj4gOCkgJiAweDAwZmYsIGZyZXEgJiAweGZmLAorCQlyYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmVxdWVzdCA9IERTQjEwMF9UVU5FOworCQlnb3RvIHVzYl9jb250cm9sX21zZ19mYWlsZWQ7CiAJfQorCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCisJCXVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJMHg5NiwgMHhCNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTsKKworCWlmIChyZXR2YWwgPCAwKSB7CisJCXJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCWdvdG8gdXNiX2NvbnRyb2xfbXNnX2ZhaWxlZDsKKwl9CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQlVU0JfUkVRX0dFVF9TVEFUVVMsCisJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCAgVVNCX0RJUl9JTiwKKwkJMHgwMCwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTsKKworCWlmIChyZXR2YWwgPCAwKSB7CisJCXJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCWdvdG8gdXNiX2NvbnRyb2xfbXNnX2ZhaWxlZDsKKwl9CisKIAlyYWRpby0+c3RlcmVvID0gISgocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF0gJiAweDAxKTsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworCit1c2JfY29udHJvbF9tc2dfZmFpbGVkOgorCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwlkZXZfZXJyKCZyYWRpby0+dXNiZGV2LT5kZXYsCisJCSIlcyAtIHVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlaSwgcmVxdWVzdCAlaVxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHJlcXVlc3QpOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qIHJldHVybiB0aGUgZGV2aWNlIHN0YXR1cy4gIFRoaXMgaXMsIGluIGVmZmVjdCwganVzdCB3aGV0aGVyIGl0CiBzZWVzIGEgc3RlcmVvIHNpZ25hbCBvciBub3QuICBQaXR5LiAqLwogc3RhdGljIHZvaWQgZHNicjEwMF9nZXRzdGF0KHN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8pCiB7Ci0JaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJaW50IHJldHZhbDsKKworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCiAJCVVTQl9SRVFfR0VUX1NUQVRVUywKIAkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCi0JCTB4MDAgLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApIDwgMCkKLQkJcmFkaW8tPnN0ZXJlbyA9IC0xOwotCWVsc2UKLQkJcmFkaW8tPnN0ZXJlbyA9ICEocmFkaW8tPnRyYW5zZmVyX2J1ZmZlclswXSAmIDB4MDEpOwotfQorCQkweDAwICwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTsKIAorCWlmIChyZXR2YWwgPCAwKSB7CisJCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwkJZGV2X2VycigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJIiVzIC0gdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVpLCByZXF1ZXN0ICVpXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIFVTQl9SRVFfR0VUX1NUQVRVUyk7CisJfSBlbHNlIHsKKwkJcmFkaW8tPnN0ZXJlbyA9ICEocmFkaW8tPnRyYW5zZmVyX2J1ZmZlclswXSAmIDB4MDEpOworCX0KKworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworfQogCiAvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLwogCi0vKiBoYW5kbGUgdW5wbHVnZ2luZyBvZiB0aGUgZGV2aWNlLCByZWxlYXNlIGRhdGEgc3RydWN0dXJlcwotaWYgbm90aGluZyBrZWVwcyB1cyBmcm9tIGRvaW5nIGl0LiAgSWYgc29tZXRoaW5nIGlzIHN0aWxsCi1rZWVwaW5nIHVzIGJ1c3ksIHRoZSByZWxlYXNlIGNhbGxiYWNrIG9mIHY0bCB3aWxsIHRha2UgY2FyZQotb2YgcmVsZWFzaW5nIGl0LiAqLworLyoKKyAqIEhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UuCisgKiBXZSBjYWxsIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlIGluIGFueSBjYXNlLgorICogVGhlIGxhc3QgZnVuY3Rpb24gY2FsbGVkIGluIHRoaXMgcHJvY2VkdXJlIGlzCisgKiB1c2JfZHNicjEwMF92aWRlb19kZXZpY2VfcmVsZWFzZQorICovCiBzdGF0aWMgdm9pZCB1c2JfZHNicjEwMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7Ci0JaWYgKHJhZGlvKSB7Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7Ci0JCXJhZGlvLT52aWRlb2RldiA9IE5VTEw7Ci0JCWlmIChyYWRpby0+dXNlcnMpIHsKLQkJCWtmcmVlKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJa2ZyZWUocmFkaW8pOwotCQl9IGVsc2UgewotCQkJcmFkaW8tPnJlbW92ZWQgPSAxOwotCQl9Ci0JfQorCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCXJhZGlvLT5yZW1vdmVkID0gMTsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZyYWRpby0+dmlkZW9kZXYpOwogfQogCiAKQEAgLTI3Niw2ICs0MDMsMTAgQEAKIHsKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjk3LDYgKzQyOCwxMiBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzA3LDkgKzQ0NCwxNSBAQAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsOworCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKIAogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWlmIChkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKSA9PSAtMSkKKwlyZXR2YWwgPSBkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwgIlNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxOSw2ICs0NjIsMTAgQEAKIHsKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSByYWRpby0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKQEAgLTM0Myw2ICs0OTAsMTAgQEAKIHsKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQljdHJsLT52YWx1ZSA9IHJhZGlvLT5tdXRlZDsKQEAgLTM1NSwxNyArNTA2LDI0IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsOworCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJaWYgKGRzYnIxMDBfc3RvcChyYWRpbykgPT0gLTEpIHsKKwkJCXJldHZhbCA9IGRzYnIxMDBfc3RvcChyYWRpbyk7CisJCQlpZiAocmV0dmFsIDwgMCkgewogCQkJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsCiAJCQkJCSAiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5XG4iKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pID09IC0xKSB7CisJCQlyZXR2YWwgPSBkc2JyMTAwX3N0YXJ0KHJhZGlvKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKIAkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOwogCQkJCXJldHVybiAtRUJVU1k7CkBAIC00MTcsNyArNTc1LDggQEAKIAlyYWRpby0+dXNlcnMgPSAxOwogCXJhZGlvLT5tdXRlZCA9IDE7CiAKLQlpZiAoZHNicjEwMF9zdGFydChyYWRpbykgPCAwKSB7CisJcmV0dmFsID0gZHNicjEwMF9zdGFydChyYWRpbyk7CisJaWYgKHJldHZhbCA8IDApIHsKIAkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKIAkJCSAiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseVxuIik7CiAJCXJhZGlvLT51c2VycyA9IDA7CkBAIC00MjYsOSArNTg1LDkgQEAKIAl9CiAKIAlyZXR2YWwgPSBkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKLQotCWlmIChyZXR2YWwgPT0gLTEpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUgIjogU2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOworCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJInNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKQEAgLTQzNywxNyArNTk2LDYyIEBACiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWw7CiAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJhZGlvLT51c2VycyA9IDA7Ci0JaWYgKHJhZGlvLT5yZW1vdmVkKSB7Ci0JCWtmcmVlKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpOwotCQlrZnJlZShyYWRpbyk7CisJaWYgKCFyYWRpby0+cmVtb3ZlZCkgeworCQlyZXR2YWwgPSBkc2JyMTAwX3N0b3AocmFkaW8pOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkiZHNicjEwMF9zdG9wIGZhaWxlZFxuIik7CisJCX0KKwogCX0KIAlyZXR1cm4gMDsKIH0KIAorLyogU3VzcGVuZCBkZXZpY2UgLSBzdG9wIGRldmljZS4gKi8KK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGRzYnIxMDBfc3RvcChyYWRpbyk7CisJaWYgKHJldHZhbCA8IDApCisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJkc2JyMTAwX3N0b3AgZmFpbGVkXG4iKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJnb2luZyBpbnRvIHN1c3BlbmQuLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzdW1lIGRldmljZSAtIHN0YXJ0IGRldmljZS4gKi8KK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBkc2JyMTAwX3N0YXJ0KHJhZGlvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImRzYnIxMDBfc3RhcnQgZmFpbGVkXG4iKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjb21pbmcgb3V0IG9mIHN1c3BlbmQuLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnJlZSBkYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyB2b2lkIHVzYl9kc2JyMTAwX3ZpZGVvX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2KQoreworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb2Rldl90b19yYWRpbyh2aWRlb2Rldik7CisKKwlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKKwlrZnJlZShyYWRpbyk7Cit9CisKIC8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2RzYnIxMDBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC00NzYsMTkgKzY4MCwxOSBAQAogfTsKIAogLyogVjRMMiBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBkc2JyMTAwX3ZpZGVvZGV2X2RhdGEgPSB7CiAJLm5hbWUJCT0gIkQtTGluayBEU0ItUiAxMDAiLAogCS5mb3BzCQk9ICZ1c2JfZHNicjEwMF9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnVzYl9kc2JyMTAwX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gdXNiX2RzYnIxMDBfdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi0vKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAotdXNiIGlmIGl0IGlzICovCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZCB1c2IgaWYgaXQgaXMgKi8KIHN0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW87CisJaW50IHJldHZhbDsKIAogCXJhZGlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYnIxMDBfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTUwMSwyMyArNzA1LDE4IEBACiAJCWtmcmVlKHJhZGlvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCi0JaWYgKCEocmFkaW8tPnZpZGVvZGV2KSkgewotCQlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJa2ZyZWUocmFkaW8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJmRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUsCi0JCXNpemVvZihkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlKSk7CisJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOworCXJhZGlvLT52aWRlb2RldiA9IGRzYnIxMDBfdmlkZW9kZXZfZGF0YTsKKwogCXJhZGlvLT5yZW1vdmVkID0gMDsKIAlyYWRpby0+dXNlcnMgPSAwOwogCXJhZGlvLT51c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXJhZGlvLT5jdXJmcmVxID0gRlJFUV9NSU4gKiBGUkVRX01VTDsKLQl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOworCXZpZGVvX3NldF9kcnZkYXRhKCZyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwogCQlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggOTMwNWU5NS4uZGQ2ZDNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTEsNyArMSw3IEBACiAvKiByYWRpb3RyYWNrIChyYWRpb3JldmVhbCkgZHJpdmVyIGZvciBMaW51eCByYWRpbyBzdXBwb3J0CiAgKiAoYykgMTk5NyBNLiBLaXJrd29vZAogICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotICogQ29udmVydGVkIHRvIG5ldyBBUEkgYnkgQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqIENvbnZlcnRlZCB0byBuZXcgQVBJIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKiBWYXJpb3VzIGJ1Z2ZpeGVzIGFuZCBlbmhhbmNlbWVudHMgYnkgUnVzc2VsbCBLcm9sbCA8cmtyb2xsQGV4cGxvaXRzLm9yZz4KICAqCiAgKiBIaXN0b3J5OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IDA0OTBhMWYuLmJmZDM3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICAqIDIwMDItMDEtMTcJQWRhbSBCZWxheSA8YW1ieDFAbmVvLnJyLmNvbT4KICAqCQlVcGRhdGVkIHRvIGxhdGVzdCBwbnAgY29kZQogICoKLSAqIDIwMDMtMDEtMzEJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqIDIwMDMtMDEtMzEJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCQlDbGVhbmVkIHVwIGxvY2tpbmcsIGRlbGF5IGNvZGUsIGdlbmVyYWwgb2RkcyBhbmQgZW5kcwogICoKICAqIDIwMDYtMDctMzAJSGFucyBKLiBLb2NoIDxrb2NoQGhqay1hei5kZT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCmluZGV4IGQxMzFhNWQuLmUxMzExOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwpAQCAtOCw3ICs4LDcgQEAKICAqICAgIFJhZGlvVHJhY2sgSUkgZHJpdmVyIGZvciBMaW51eCByYWRpbyBzdXBwb3J0IChDKSAxOTk4IEJlbiBQZmFmZgogICoKICAqICAgIEJhc2VkIG9uIFJhZGlvVHJhY2sgSS9SYWRpb1JldmVhbCAoQykgMTk5NyBNLiBLaXJrd29vZAotICogICAgQ29udmVydGVkIHRvIG5ldyBBUEkgYnkgQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqICAgIENvbnZlcnRlZCB0byBuZXcgQVBJIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKiAgICBWYXJpb3VzIGJ1Z2ZpeGVzIGFuZCBlbmhhbmNlbWVudHMgYnkgUnVzc2VsbCBLcm9sbCA8cmtyb2xsQGV4cGxvaXRzLm9yZz4KICAqCiAgKiBUT0RPOiBBbGxvdyBmb3IgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmb29saXNoIGVudGl0aWVzIDotKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCmluZGV4IDI1NmNiZWYuLmU3MzBlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKQEAgLTcyLDYgKzcyLDExIEBACiAjZGVmaW5lIFVTQl9BTVJBRElPX1ZFTkRPUiAweDA3Y2EKICNkZWZpbmUgVVNCX0FNUkFESU9fUFJPRFVDVCAweGI4MDAKIAorLyogZGV2X3dhcm4gbWFjcm8gd2l0aCBkcml2ZXIgbmFtZSAqLworI2RlZmluZSBNUjgwMF9EUklWRVJfTkFNRSAicmFkaW8tbXI4MDAiCisjZGVmaW5lIGFtcmFkaW9fZGV2X3dhcm4oZGV2LCBmbXQsIGFyZy4uLikJCQkJXAorCQlkZXZfd2FybihkZXYsIE1SODAwX0RSSVZFUl9OQU1FICIgLSAiIGZtdCwgIyNhcmcpCisKIC8qIFByb2JhYmx5IFVTQl9USU1FT1VUIHNob3VsZCBiZSBtb2RpZmllZCBpbiBtb2R1bGUgcGFyYW1ldGVyICovCiAjZGVmaW5lIEJVRkZFUl9MRU5HVEggOAogI2RlZmluZSBVU0JfVElNRU9VVCA1MDAKQEAgLTE1NCwxNCArMTU5LDE0IEBACiAKIC8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2FtcmFkaW9fZHJpdmVyID0gewotCS5uYW1lCQkJPSAicmFkaW8tbXI4MDAiLAorCS5uYW1lCQkJPSBNUjgwMF9EUklWRVJfTkFNRSwKIAkucHJvYmUJCQk9IHVzYl9hbXJhZGlvX3Byb2JlLAogCS5kaXNjb25uZWN0CQk9IHVzYl9hbXJhZGlvX2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQJCT0gdXNiX2FtcmFkaW9fc3VzcGVuZCwKIAkucmVzdW1lCQkJPSB1c2JfYW1yYWRpb19yZXN1bWUsCiAJLnJlc2V0X3Jlc3VtZQkJPSB1c2JfYW1yYWRpb19yZXN1bWUsCiAJLmlkX3RhYmxlCQk9IHVzYl9hbXJhZGlvX2RldmljZV90YWJsZSwKLQkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSAxLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDAsCiB9OwogCiAvKiBzd2l0Y2ggb24gcmFkaW8uIFNlbmQgOCBieXRlcyB0byBkZXZpY2UuICovCkBAIC0yMDIsNiArMjA3LDEwIEBACiAJaW50IHJldHZhbDsKIAlpbnQgc2l6ZTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlyYWRpby0+YnVmZmVyWzBdID0gMHgwMDsKQEAgLTIzNSw2ICsyNDQsMTAgQEAKIAlpbnQgc2l6ZTsKIAl1bnNpZ25lZCBzaG9ydCBmcmVxX3NlbmQgPSAweDEzICsgKGZyZXEgPj4gMykgLyAyNTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlyYWRpby0+YnVmZmVyWzBdID0gMHgwMDsKQEAgLTI4OCwxOCArMzAxLDEyIEBACiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKwlyYWRpby0+cmVtb3ZlZCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKLQlpZiAocmFkaW8pIHsKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKLQkJcmFkaW8tPnZpZGVvZGV2ID0gTlVMTDsKLQkJaWYgKHJhZGlvLT51c2VycykgewotCQkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7Ci0JCQlrZnJlZShyYWRpbyk7Ci0JCX0gZWxzZSB7Ci0JCQlyYWRpby0+cmVtb3ZlZCA9IDE7Ci0JCX0KLQl9CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwogfQogCiAvKiB2aWRpb2NfcXVlcnljYXAgLSBxdWVyeSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCkBAIC0zMjAsNiArMzI3LDEwIEBACiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOwogCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKKwogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zNDYsNiArMzU3LDEyIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogeworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKQEAgLTM1Nyw5ICszNzQsMTQgQEAKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CiAKKwkvKiBzYWZldHkgY2hlY2sgKi8KKwlpZiAocmFkaW8tPnJlbW92ZWQpCisJCXJldHVybiAtRUlPOworCiAJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJaWYgKGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpIDwgMCkKLQkJd2FybigiU2V0IGZyZXF1ZW5jeSBmYWlsZWQiKTsKKwkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkic2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0zNjksNiArMzkxLDEwIEBACiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOwogCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKKwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJhZGlvLT5jdXJmcmVxOwogCXJldHVybiAwOwpAQCAtMzgyLDggKzQwOCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewogCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMzk2LDYgKzQyMSwxMCBAQAogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKIAorCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQljdHJsLT52YWx1ZSA9IHJhZGlvLT5tdXRlZDsKQEAgLTQxMCwxNiArNDM5LDIyIEBACiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOwogCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkgewogCQkJaWYgKGFtcmFkaW9fc3RvcChyYWRpbykgPCAwKSB7Ci0JCQkJd2FybigiYW1yYWRpb19zdG9wKCkgZmFpbGVkIik7CisJCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJCSJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKSB7Ci0JCQkJd2FybigiYW1yYWRpb19zdGFydCgpIGZhaWxlZCIpOworCQkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJCQkiYW1yYWRpb19zdGFydCBmYWlsZWRcbiIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQpAQCAtNDc1LDMwICs1MTAsMzggQEAKIAlyYWRpby0+bXV0ZWQgPSAxOwogCiAJaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkgewotCQl3YXJuKCJSYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5Iik7CisJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHlcbiIpOwogCQlyYWRpby0+dXNlcnMgPSAwOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQotCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qY2xvc2UgZGV2aWNlIC0gZnJlZSBkcml2ZXIgc3RydWN0dXJlcyAqLworLypjbG9zZSBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJhZGlvLT51c2VycyA9IDA7Ci0JaWYgKHJhZGlvLT5yZW1vdmVkKSB7Ci0JCWtmcmVlKHJhZGlvLT5idWZmZXIpOwotCQlrZnJlZShyYWRpbyk7CisKKwlpZiAoIXJhZGlvLT5yZW1vdmVkKSB7CisJCXJldHZhbCA9IGFtcmFkaW9fc3RvcChyYWRpbyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC01MDgsOSArNTUxLDkgQEAKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCWlmIChhbXJhZGlvX3N0b3AocmFkaW8pIDwgMCkKLQkJd2FybigiYW1yYWRpb19zdG9wKCkgZmFpbGVkIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKIAotCWluZm8oInJhZGlvLW1yODAwOiBHb2luZyBpbnRvIHN1c3BlbmQuLiIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJnb2luZyBpbnRvIHN1c3BlbmQuLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMSw5ICs1NjQsOSBAQAogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkKLQkJd2FybigiYW1yYWRpb19zdGFydCgpIGZhaWxlZCIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiYW1yYWRpb19zdGFydCBmYWlsZWRcbiIpOwogCi0JaW5mbygicmFkaW8tbXI4MDA6IENvbWluZyBvdXQgb2Ygc3VzcGVuZC4uIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgImNvbWluZyBvdXQgb2Ygc3VzcGVuZC4uXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTU1LDEyICs1OTgsMjQgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCitzdGF0aWMgdm9pZCB1c2JfYW1yYWRpb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb2RldikKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9kZXYpOworCisJLyogd2UgY2FsbCB2NGwgdG8gZnJlZSByYWRpby0+dmlkZW9kZXYgKi8KKwl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aWRlb2Rldik7CisKKwkvKiBmcmVlIHJlc3QgbWVtb3J5ICovCisJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJa2ZyZWUocmFkaW8pOworfQorCiAvKiBWNEwyIGludGVyZmFjZSAqLwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgYW1yYWRpb192aWRlb2Rldl90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJPSAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gUmFkaW8iLAogCS5mb3BzCQk9ICZ1c2JfYW1yYWRpb19mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnVzYl9hbXJhZGlvX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gdXNiX2FtcmFkaW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCiAvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZApAQCAtNjAyLDcgKzY1Nyw3IEBACiAKIAl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSkgewotCQl3YXJuKCJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKQEAgLTYxNyw5ICs2NzIsMTMgQEAKIHsKIAlpbnQgcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYW1yYWRpb19kcml2ZXIpOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MpOworCXByX2luZm8oS0JVSUxEX01PRE5BTUUKKwkJIjogdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyAiXG4iKTsKKwogCWlmIChyZXR2YWwpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWRcbiIsIHJldHZhbCk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCmluZGV4IGE2NzA3OTcuLjc3MDRmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCkBAIC0xLDcgKzEsNyBAQAogLyogUmFkaW9UcmFjayBJSSBkcml2ZXIgZm9yIExpbnV4IHJhZGlvIHN1cHBvcnQgKEMpIDE5OTggQmVuIFBmYWZmCiAgKgogICogQmFzZWQgb24gUmFkaW9UcmFjayBJL1JhZGlvUmV2ZWFsIChDKSAxOTk3IE0uIEtpcmt3b29kCi0gKiBDb252ZXJ0ZWQgdG8gbmV3IEFQSSBieSBBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorICogQ29udmVydGVkIHRvIG5ldyBBUEkgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqIFZhcmlvdXMgYnVnZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBieSBSdXNzZWxsIEtyb2xsIDxya3JvbGxAZXhwbG9pdHMub3JnPgogICoKICAqIFRPRE86IEFsbG93IGZvciBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGZvb2xpc2ggZW50aXRpZXMgOi0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IDMyOWM5MGIuLjgzNGQ0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0zLDcgKzMsNyBAQAogICogKGMpIDE5OTcgTS4gS2lya3dvb2QKICAqIChjKSAxOTk4IFBldHIgVmFuZHJvdmVjLCB2YW5kcm92ZUB2Yy5jdnV0LmN6CiAgKgotICogRml0dGVkIHRvIG5ldyBpbnRlcmZhY2UgYnkgQWxhbiBDb3ggPGFsYW4uY294QGxpbnV4Lm9yZz4KKyAqIEZpdHRlZCB0byBuZXcgaW50ZXJmYWNlIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKiBNYWRlIHdvcmtpbmcgYW5kIGNsZWFuZWQgdXAgZnVuY3Rpb25zIDxtaWthZWwuaGVkaW5AaXJmLnNlPgogICogU3VwcG9ydCBmb3IgSVNBUG5QIGJ5IExhZGlzbGF2IE1pY2hsIDxsYWRpc0Bwc2kuY3o+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDA1N2ZkN2UxLi4xOWNmM2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0xODQsNyArMTg0LDcgQEAKIAogY29uZmlnIFZJREVPX0NTNTM0NQogCXRyaXN0YXRlICJDaXJydXMgTG9naWMgQ1M1MzQ1IGF1ZGlvIEFEQyIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgQ2lycnVzIExvZ2ljIENTNTM0NSAyNC1iaXQsIDE5MiBrSHoKIAkgIHN0ZXJlbyBBL0QgY29udmVydGVyLgpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIGNvbmZpZyBWSURFT19NNTI3OTAKICAgICAgICB0cmlzdGF0ZSAiTWl0c3ViaXNoaSBNNTI3OTAgQS9WIHN3aXRjaCIKLSAgICAgICBkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorICAgICAgIGRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKICAgICAgICAtLS1oZWxwLS0tCiAJIFN1cHBvcnQgZm9yIHRoZSBNaXRzdWJpc2hpIE01Mjc5MCBBL1Ygc3dpdGNoLgogCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogY29uZmlnIFZJREVPX1ZQMjdTTVBYCiAJdHJpc3RhdGUgIlBhbmFzb25pYyBWUDI3cyBpbnRlcm5hbCBNUFgiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIGludGVybmFsIE1QWCBvZiB0aGUgUGFuYXNvbmljIFZQMjdzIHR1bmVyLgogCkBAIC0zNjEsNiArMzYxLDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTkxLgogCitjb25maWcgVklERU9fVFZQNTE0WAorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTR4IHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSBWaWRlbzRMaW51eDIgc2Vuc29yLWxldmVsIGRyaXZlciBmb3IgdGhlIFRJIFRWUDUxNDYvNDcKKwkgIGRlY29kZXIuIEl0IGlzIGN1cnJlbnRseSB3b3JraW5nIHdpdGggdGhlIFRJIE9NQVAzIGNhbWVyYQorCSAgY29udHJvbGxlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHZwNTE0eC4KKwogY29uZmlnIFZJREVPX1RWUDUxNTAKIAl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgVFZQNTE1MCB2aWRlbyBkZWNvZGVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKQEAgLTM4Nyw3ICszOTgsNyBAQAogCiBjb25maWcgVklERU9fQ1gyMzQxWAogCXRyaXN0YXRlICJDb25leGFudCBDWDIzNDF4IE1QRUcgZW5jb2RlcnMiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEVYUEVSSU1FTlRBTCAmJiBWSURFT19WNEwyX0NPTU1PTgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBWSURFT19WNEwyX0NPTU1PTgogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBDb25leGFudCBDWDIzNDE2IE1QRUcgZW5jb2RlcnMKIAkgIGFuZCBDWDIzNDE1IE1QRUcgZW5jb2Rlci9kZWNvZGVycy4KQEAgLTcyNSwxMCArNzM2LDE2IEBACiAJICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCiAKIGNvbmZpZyBTT0NfQ0FNRVJBX01UOU0xMTEKLQl0cmlzdGF0ZSAibXQ5bTExMSBzdXBwb3J0IgorCXRyaXN0YXRlICJtdDltMTExIGFuZCBtdDltMTEyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQwogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOU0xMTEgY2FtZXJhcyBmcm9tIE1pY3JvbgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5TTExMSBhbmQgTVQ5TTExMiBjYW1lcmFzIGZyb20gTWljcm9uCisKK2NvbmZpZyBTT0NfQ0FNRVJBX01UOVQwMzEKKwl0cmlzdGF0ZSAibXQ5dDAzMSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlUMDMxIGNhbWVyYXMgZnJvbSBNaWNyb24uCiAKIGNvbmZpZyBTT0NfQ0FNRVJBX01UOVYwMjIKIAl0cmlzdGF0ZSAibXQ5djAyMiBzdXBwb3J0IgpAQCAtNzQ0LDEyICs3NjEsMjQgQEAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5VjAyMiBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KIAkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKIAorY29uZmlnIFNPQ19DQU1FUkFfVFc5OTEwCisJdHJpc3RhdGUgInR3OTkxMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKKwloZWxwCisJICBUaGlzIGlzIGEgdHc5OTEwIHZpZGVvIGRyaXZlcgorCiBjb25maWcgU09DX0NBTUVSQV9QTEFURk9STQogCXRyaXN0YXRlICJwbGF0Zm9ybSBjYW1lcmEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19DQU1FUkEKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJpYyBTb0MgY2FtZXJhIHBsYXRmb3JtIGRyaXZlciwgdXNlZnVsIGZvciB0ZXN0aW5nCiAKK2NvbmZpZyBTT0NfQ0FNRVJBX09WNzcyWAorCXRyaXN0YXRlICJvdjc3MnggY2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCWhlbHAKKwkgIFRoaXMgaXMgYSBvdjc3MnggY2FtZXJhIGRyaXZlcgorCiBjb25maWcgVklERU9fUFhBMjd4CiAJdHJpc3RhdGUgIlBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUFhBMjd4ICYmIFNPQ19DQU1FUkEKQEAgLTc2NCw2ICs3OTMsMTMgQEAKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBTdXBlckggTW9iaWxlIENFVSBJbnRlcmZhY2UKIAorY29uZmlnIFZJREVPX09NQVAyCisJdHJpc3RhdGUgIk9NQVAyIENhbWVyYSBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgQVJDSF9PTUFQMgorCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBUSSBPTUFQMiBjYW1lcmEgY2FwdHVyZSBpbnRlcmZhY2UKKwogIwogIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggMTY5NjJmMy4uMTYxMWMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC04LDkgKzgsMTEgQEAKIAogc3Rrd2ViY2FtLW9ianMJOj0Jc3RrLXdlYmNhbS5vIHN0ay1zZW5zb3IubwogCi12aWRlb2Rldi1vYmpzCTo9CXY0bDItZGV2Lm8gdjRsMi1pb2N0bC5vCitvbWFwMmNhbS1vYmpzCTo9CW9tYXAyNHh4Y2FtLm8gb21hcDI0eHhjYW0tZG1hLm8KIAotb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gdmlkZW9kZXYubyBjb21wYXRfaW9jdGwzMi5vIHY0bDItaW50LWRldmljZS5vCit2aWRlb2Rldi1vYmpzCTo9CXY0bDItZGV2Lm8gdjRsMi1pb2N0bC5vIHY0bDItZGV2aWNlLm8gdjRsMi1zdWJkZXYubworCitvYmotJChDT05GSUdfVklERU9fREVWKSArPSB2aWRlb2Rldi5vIHY0bDItY29tcGF0LWlvY3RsMzIubyB2NGwyLWludC1kZXZpY2UubwogCiBvYmotJChDT05GSUdfVklERU9fVjRMMl9DT01NT04pICs9IHY0bDItY29tbW9uLm8KIApAQCAtMjUsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1RWQVVESU8pICs9IHR2YXVkaW8ubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTc0MzIpICs9IHRkYTc0MzIubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTk4NzUpICs9IHRkYTk4NzUubworb2JqLSQoQ09ORklHX1NPVU5EX1RWTUlYRVIpICs9IHR2bWl4ZXIubwogCiBvYmotJChDT05GSUdfVklERU9fU0FBNjU4OCkgKz0gc2FhNjU4OC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNTI0NkEpICs9IHNhYTUyNDZhLm8KQEAgLTY2LDYgKzY5LDcgQEAKIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KIG9iai0kKENPTkZJR19WSURFT19VU0JWSVNJT04pICs9IHVzYnZpc2lvbi8KIG9iai0kKENPTkZJR19WSURFT19UVlA1MTUwKSArPSB0dnA1MTUwLm8KK29iai0kKENPTkZJR19WSURFT19UVlA1MTRYKSArPSB0dnA1MTR4Lm8KIG9iai0kKENPTkZJR19WSURFT19QVlJVU0IyKSArPSBwdnJ1c2IyLwogb2JqLSQoQ09ORklHX1ZJREVPX01TUDM0MDApICs9IG1zcDM0MDAubwogb2JqLSQoQ09ORklHX1ZJREVPX0NTNTM0NSkgKz0gY3M1MzQ1Lm8KQEAgLTEyOSwxMSArMTMzLDE1IEBACiAKIG9iai0kKENPTkZJR19WSURFT19QWEEyN3gpCSs9IHB4YV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUpCSs9IHNoX21vYmlsZV9jZXVfY2FtZXJhLm8KK29iai0kKENPTkZJR19WSURFT19PTUFQMikJCSs9IG9tYXAyY2FtLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBKQkrPSBzb2NfY2FtZXJhLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEpCSs9IG10OW0wMDEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSkJKz0gbXQ5bTExMS5vCitvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxKQkrPSBtdDl0MDMxLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIpCSs9IG10OXYwMjIubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYKQkJKz0gb3Y3NzJ4Lm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNKQkrPSBzb2NfY2FtZXJhX3BsYXRmb3JtLm8KK29iai0kKENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCkJCSs9IHR3OTkxMC5vCiAKIG9iai0kKENPTkZJR19WSURFT19BVTA4MjgpICs9IGF1MDgyOC8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKaW5kZXggZTA5YjAwNi4uMmJhNmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCkBAIC0zOTYsOCArMzk2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFyX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBhcl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IGFyX2RldmljZSAqYXIgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNTQzLDcgKzU0Miw3IEBACiBzdGF0aWMgaW50IGFyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgYXJfZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgYXJfZG9faW9jdGwpOwogfQogCiAjaWYgVVNFX0lOVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDgzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDgzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZmYzk2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIEJ0ODMyIENNT1MgQ2FtZXJhIFZpZGVvIFByb2Nlc3NvcgotICAgIGkyYy1hZGRyZXNzZXM6IDB4ODggb3IgMHg4YQotCi0gIFRoZSBCVDgzMiBpbnRlcmZhY2VzIHRvIGEgUXVhcnR6c2lnaHQgRGlnaXRhbCBDYW1lcmEgKDM1MngyODgsIDI1IG9yIDMwIGZwcykKLSAgdmlhIGEgOSBwaW4gY29ubmVjdG9yICggNC13aXJlIFNEQVRBLCAyLXdpcmUgaTJjLCBTQ0xLLCBWQ0MsIEdORCkuCi0gIEl0IG91dHB1dHMgYW4gOC1iaXQgNDoyOjIgWVVWIG9yIFlDckNiIHZpZGVvIHNpZ25hbCB3aGljaCBjYW4gYmUgZGlyZWN0bHkKLSAgY29ubmVjdGVkIHRvIGJ0ODQ4L2J0ODc4IEdQSU8gcGlucyBvbiB0aGlzIHB1cnBvc2UuCi0gIChzZWU6IFZMU0kgVmlzaW9uIEx0ZC4gd3d3LnZ2bC5jby51ayBmb3IgY2FtZXJhIGRhdGFzaGVldHMpCi0KLSAgU3VwcG9ydGVkIENhcmRzOgotICAtICBQaXhlbHZpZXcgUmV2LjRFOiAweDhhCi0JCUdQSU8gMHg0MDAwMDAgdG9nZ2xlcyBCdDgzMiBSRVNFVCwgYW5kIHRoZSBjaGlwIGNoYW5nZXMgdG8gaTJjIDB4ODggIQotCi0gIChjKSBHdW50aGVyIE1heWVyLCAyMDAyCi0KLSAgU1RBVFVTOgotICAtIGRldGVjdCBjaGlwIGFuZCBoZXhkdW1wCi0gIC0gcmVzZXQgY2hpcCBhbmQgbGVhdmUgbG93IHBvd2VyIG1vZGUKLSAgLSBkZXRlY3QgY2FtZXJhIHByZXNlbnQKLQotICBUT0RPOgotICAtIG1ha2UgaXQgd29yayAoZmluZCBjb3JyZWN0IHNldHVwIGZvciBCdDgzMiBhbmQgQnQ4NzgpCi0qLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotCi0jaW5jbHVkZSAiYnR0di5oIgotI2luY2x1ZGUgImJ0ODMyLmgiCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX0JUODMyX0FMVDE+PjEsIEkyQ19BRERSX0JUODMyX0FMVDI+PjEsCi0JCQkJICAgICAgIEkyQ19DTElFTlRfRU5EIH07Ci1JMkNfQ0xJRU5UX0lOU01PRDsKLQotaW50IGRlYnVnOyAgICAvKiBkZWJ1ZyBvdXRwdXQgKi8KLW1vZHVsZV9wYXJhbShkZWJ1ZywgICAgICAgICAgICBpbnQsIDA2NDQpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgYnQ4MzJfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCi1zdHJ1Y3QgYnQ4MzIgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKLX07Ci0KLWludCBidDgzMl9oZXhkdW1wKHN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50X3MsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKLXsKLQlpbnQgaSxyYzsKLQlidWZbMF09MHg4MDsgLy8gc3RhcnQgYXQgcmVnaXN0ZXIgMCB3aXRoIGF1dG8taW5jcmVtZW50Ci0JaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMSkpKQotCQl2NGxfZXJyKGkyY19jbGllbnRfcywiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIixyYyk7Ci0KLQlmb3IoaT0wO2k8NjU7aSsrKQotCQlidWZbaV09MDsKLQlpZiAoNjUgIT0gKHJjPWkyY19tYXN0ZXJfcmVjdihpMmNfY2xpZW50X3MsYnVmLDY1KSkpCi0JCXY0bF9lcnIoaTJjX2NsaWVudF9zLCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDY1KVxuIixyYyk7Ci0KLQkvLyBOb3RlOiBPbiBSRUFEIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBjdXJyZW50IGluZGV4Ci0JLy8gIChlLmcuIDB4ODAsIHdoYXQgd2UganVzdCB3cm90ZSkKLQotCWlmKGRlYnVnPjEpIHsKLQkJaW50IGk7Ci0JCXY0bF9kYmcoMiwgZGVidWcsaTJjX2NsaWVudF9zLCJoZXhkdW1wOiIpOwotCQlmb3IoaT0xO2k8NjU7aSsrKSB7Ci0JCQlpZihpIT0xKSB7Ci0JCQkJaWYoKChpLTEpJTgpPT0wKSBwcmludGsoIiAiKTsKLQkJCQlpZigoKGktMSklMTYpPT0wKSB7Ci0JCQkJCXByaW50aygiXG4iKTsKLQkJCQkJdjRsX2RiZygyLCBkZWJ1ZyxpMmNfY2xpZW50X3MsImhleGR1bXA6Iik7Ci0JCQkJfQotCQkJfQotCQkJcHJpbnRrKCIgJTAyeCIsYnVmW2ldKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCXJldHVybiAwOwotfQotCi0vLyBSZXR1cm46IDEgKGlzIGEgYnQ4MzIpLCAwIChObyBidDgzMiBoZXJlKQotaW50IGJ0ODMyX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnRfcykKLXsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JaW50IHJjOwotCi0JYnVmPWttYWxsb2MoNjUsR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJdjRsX2VycigmdC0+Y2xpZW50LAotCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkuIERldGFjaGluZy5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKLQotCWlmKGJ1ZlsweDQwXSAhPSAweDMxKSB7Ci0JCXY0bF9lcnIoaTJjX2NsaWVudF9zLCJUaGlzIGkyYyBjaGlwIGlzIG5vIGJ0ODMyIChpZD0lMDJ4KS4gRGV0YWNoaW5nLlxuIixidWZbMHg0MF0pOwotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl2NGxfZXJyKGkyY19jbGllbnRfcywiV3JpdGUgMCB0cCBWUFNUQVRVU1xuIik7Ci0JYnVmWzBdPUJUODMyX1ZQX1NUQVRVUzsgLy8gUmVnLjUyCi0JYnVmWzFdPSAweDAwOwotCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKLQkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKLQotCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7Ci0KLQotCS8vIExlYXZlIGxvdyBwb3dlciBtb2RlOgotCXY0bF9lcnIoaTJjX2NsaWVudF9zLCJsZWF2ZSBsb3cgcG93ZXIgbW9kZS5cbiIpOwotCWJ1ZlswXT1CVDgzMl9DQU1fU0VUVVAwOyAvLzB4MzkgNTcKLQlidWZbMV09MHgwODsKLQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCi0JCXY0bF9lcnIoaTJjX2NsaWVudF9zLCJpMmMgaS9vIGVycm9yIExMUE06IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwotCi0JYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKLQotCXY0bF9pbmZvKGkyY19jbGllbnRfcywiV3JpdGUgMCB0cCBWUFNUQVRVU1xuIik7Ci0JYnVmWzBdPUJUODMyX1ZQX1NUQVRVUzsgLy8gUmVnLjUyCi0JYnVmWzFdPSAweDAwOwotCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKLQkJdjRsX2VycihpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKLQotCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7Ci0KLQotCS8vIEVuYWJsZSBPdXRwdXQKLQl2NGxfaW5mbyhpMmNfY2xpZW50X3MsIkVuYWJsZSBPdXRwdXRcbiIpOwotCWJ1ZlswXT1CVDgzMl9WUF9DT05UUk9MMTsgLy8gUmVnLjQwCi0JYnVmWzFdPSAweDI3ICYgKH4weDAxKTsgLy8gRGVmYXVsdCB8ICFza2lwCi0JaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotCQl2NGxfZXJyKGkyY19jbGllbnRfcywiaTJjIGkvbyBlcnJvciBFTzogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7Ci0KLQlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwotCi0KLQkvLyBmb3IgdGVzdGluZyAoZXZlbiB3b3JrcyB3aGVuIG5vIGNhbWVyYSBhdHRhY2hlZCkKLQl2NGxfaW5mbyhpMmNfY2xpZW50X3MsIioqKiBHZW5lcmF0ZSBOVFNDIE0gQmFycyAqKioqKlxuIik7Ci0JYnVmWzBdPUJUODMyX1ZQX1RFU1RDT05UUk9MMDsgLy8gUmVnLiA0MgotCWJ1ZlsxXT0zOyAvLyBHZW5lcmF0ZSBOVFNDIFN5c3RlbSBNIGJhcnMsIEdlbmVyYXRlIEZyYW1lIHRpbWluZyBpbnRlcm5hbGx5Ci0JaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotCQl2NGxfaW5mbyhpMmNfY2xpZW50X3MsImkyYyBpL28gZXJyb3IgTUJBUjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7Ci0KLQl2NGxfaW5mbyhpMmNfY2xpZW50X3MsIkNhbWVyYSBQcmVzZW50OiAlc1xuIiwKLQkJKGJ1ZlsxK0JUODMyX0NBTV9TVEFUVVNdICYgQlQ4MzJfNTZfQ0FNRVJBX1BSRVNFTlQpID8gInllcyI6Im5vIik7Ci0KLQlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIDE7Ci19Ci0KLQotCi1zdGF0aWMgaW50IGJ0ODMyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKLXsKLQlzdHJ1Y3QgYnQ4MzIgKnQ7Ci0KLQljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7Ci0JY2xpZW50X3RlbXBsYXRlLmFkZHIgICAgPSBhZGRyOwotCi0JaWYgKE5VTEwgPT0gKHQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdC0+Y2xpZW50ID0gY2xpZW50X3RlbXBsYXRlOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmdC0+Y2xpZW50LCB0KTsKLQlpMmNfYXR0YWNoX2NsaWVudCgmdC0+Y2xpZW50KTsKLQotCXY0bF9pbmZvKCZ0LT5jbGllbnQsImNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKLQotCWlmKCEgYnQ4MzJfaW5pdCgmdC0+Y2xpZW50KSkgewotCQlidDgzMl9kZXRhY2goJnQtPmNsaWVudCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidDgzMl9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBidDgzMl9hdHRhY2gpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJ0ODMyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidDgzMiAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JdjRsX2luZm8oJnQtPmNsaWVudCwiZGV0dGFjaFxuIik7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZSh0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYnQ4MzJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGJ0ODMyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpZiAoZGVidWc+MSkKLQkJdjRsX2kyY19wcmludF9pb2N0bCgmdC0+Y2xpZW50LGNtZCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIEJUODMyX0hFWERVTVA6IHsKLQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQkJCWJ1ZiA9IGttYWxsb2MoNjUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFidWYpIHsKLQkJCQl2NGxfZXJyKCZ0LT5jbGllbnQsCi0JCQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJ0ODMyX2hleGR1bXAoJnQtPmNsaWVudCxidWYpOwotCQkJa2ZyZWUoYnVmKTsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBCVDgzMl9SRUFUVEFDSDoKLQkJCXY0bF9pbmZvKCZ0LT5jbGllbnQsInJlLWF0dGFjaFxuIik7Ci0JCQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLQkJCWkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJidDgzMiIsCi0JfSwKLQkuaWQgICAgICAgICAgICAgPSAwLCAvKiBGSVhNRSAqLwotCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODMyX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IGJ0ODMyX2RldGFjaCwKLQkuY29tbWFuZCAgICAgICAgPSBidDgzMl9jb21tYW5kLAotfTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPQotewotCS5uYW1lICAgICAgID0gImJ0ODMyIiwKLQkuZHJpdmVyICAgICA9ICZkcml2ZXIsCi19OwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGJ0ODMyX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYnQ4MzJfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoYnQ4MzJfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYnQ4MzJfY2xlYW51cF9tb2R1bGUpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlOGZhNzFmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKiBCdDgzMiBDTU9TIENhbWVyYSBWaWRlbyBQcm9jZXNzb3IgKFZQKQotCi0gVGhlIEJ0ODMyIENNT1MgQ2FtZXJhIFZpZGVvIFByb2Nlc3NvciBjaGlwIGNvbm5lY3RzIGEgUXVhcnRzaWdodCBDTU9TCi0gIGNvbG9yIGRpZ2l0YWwgY2FtZXJhIGRpcmVjdGx5IHRvIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyB2aWEgYW4gOC1iaXQsCi0gIDQ6MjoyIFlVViBvciBZQ3JDYiB2aWRlbyBpbnRlcmZhY2UuCi0KLSBpMmMgYWRkcmVzc2VzOiAweDg4IG9yIDB4OGEKLSAqLwotCi0vKiBUaGUgNjQgcmVnaXN0ZXJzOiAqLwotCi0vLyBJbnB1dCBQcm9jZXNzb3IKLSNkZWZpbmUgQlQ4MzJfT0ZGU0VUIDAKLSNkZWZpbmUgQlQ4MzJfUkNPTVAJMQotI2RlZmluZSBCVDgzMl9HMUNPTVAJMgotI2RlZmluZSBCVDgzMl9HMkNPTVAJMwotI2RlZmluZSBCVDgzMl9CQ09NUAk0Ci0vLyBFeHBvc3VyZXM6Ci0jZGVmaW5lIEJUODMyX0ZJTkVICTUKLSNkZWZpbmUgQlQ4MzJfRklORUwJNgotI2RlZmluZSBCVDgzMl9DT0FSU0VICTcKLSNkZWZpbmUgQlQ4MzJfQ09BUlNFTCAgIDgKLSNkZWZpbmUgQlQ4MzJfQ0FNR0FJTgk5Ci0vLyBNYWluIFByb2Nlc3NvcjoKLSNkZWZpbmUgQlQ4MzJfTTAwCTEwCi0jZGVmaW5lIEJUODMyX00wMQkxMQotI2RlZmluZSBCVDgzMl9NMDIJMTIKLSNkZWZpbmUgQlQ4MzJfTTEwCTEzCi0jZGVmaW5lIEJUODMyX00xMQkxNAotI2RlZmluZSBCVDgzMl9NMTIJMTUKLSNkZWZpbmUgQlQ4MzJfTTIwCTE2Ci0jZGVmaW5lIEJUODMyX00yMQkxNwotI2RlZmluZSBCVDgzMl9NMjIJMTgKLSNkZWZpbmUgQlQ4MzJfQVBDT1IJMTkKLSNkZWZpbmUgQlQ4MzJfR0FNQ09SCTIwCi0vLyBMZXZlbCBBY2N1bXVsYXRvciBJbnB1dHMKLSNkZWZpbmUgQlQ4MzJfVlBDT05UUk9MMgkyMQotI2RlZmluZSBCVDgzMl9aT05FQ09ERTAJMjIKLSNkZWZpbmUgQlQ4MzJfWk9ORUNPREUxCTIzCi0jZGVmaW5lIEJUODMyX1pPTkVDT0RFMgkyNAotI2RlZmluZSBCVDgzMl9aT05FQ09ERTMJMjUKLS8vIExldmVsIEFjY3VtdWxhdG9yIE91dHB1dHM6Ci0jZGVmaW5lIEJUODMyX1JBQ0MJMjYKLSNkZWZpbmUgQlQ4MzJfR0FDQwkyNwotI2RlZmluZSBCVDgzMl9CQUNDCTI4Ci0jZGVmaW5lIEJUODMyX0JMQUNLQUNDCTI5Ci0jZGVmaW5lIEJUODMyX0VYUF9BR0MJMzAKLSNkZWZpbmUgQlQ4MzJfTEFDQzAJMzEKLSNkZWZpbmUgQlQ4MzJfTEFDQzEJMzIKLSNkZWZpbmUgQlQ4MzJfTEFDQzIJMzMKLSNkZWZpbmUgQlQ4MzJfTEFDQzMJMzQKLSNkZWZpbmUgQlQ4MzJfTEFDQzQJMzUKLSNkZWZpbmUgQlQ4MzJfTEFDQzUJMzYKLSNkZWZpbmUgQlQ4MzJfTEFDQzYJMzcKLSNkZWZpbmUgQlQ4MzJfTEFDQzcJMzgKLS8vIFN5c3RlbToKLSNkZWZpbmUgQlQ4MzJfVlBfQ09OVFJPTDAJMzkKLSNkZWZpbmUgQlQ4MzJfVlBfQ09OVFJPTDEJNDAKLSNkZWZpbmUgQlQ4MzJfVEhSRVNICTQxCi0jZGVmaW5lIEJUODMyX1ZQX1RFU1RDT05UUk9MMAk0MgotI2RlZmluZSBCVDgzMl9WUF9ETUNPREUJNDMKLSNkZWZpbmUgQlQ4MzJfQUNCX0NPTkZJRwk0NAotI2RlZmluZSBCVDgzMl9BQ0JfR05CQVNFCTQ1Ci0jZGVmaW5lIEJUODMyX0FDQl9NVQk0NgotI2RlZmluZSBCVDgzMl9DQU1fVEVTVDAJNDcKLSNkZWZpbmUgQlQ4MzJfQUVDX0NPTkZJRwk0OAotI2RlZmluZSBCVDgzMl9BRUNfVEwJNDkKLSNkZWZpbmUgQlQ4MzJfQUVDX1RDCTUwCi0jZGVmaW5lIEJUODMyX0FFQ19USAk1MQotLy8gU3RhdHVzOgotI2RlZmluZSBCVDgzMl9WUF9TVEFUVVMJNTIKLSNkZWZpbmUgQlQ4MzJfVlBfTElORUNPVU5UCTUzCi0jZGVmaW5lIEJUODMyX0NBTV9ERVZJQ0VMCTU0IC8vIGUuZy4gMHgxOQotI2RlZmluZSBCVDgzMl9DQU1fREVWSUNFSAk1NSAvLyBlLmcuIDB4NDAgID09IDB4MTk0IE1hc2swLCAweDE5NCA9IDQwNCBkZWNpbWFsIChWVkwtNDA0IGNhbWVyYSkKLSNkZWZpbmUgQlQ4MzJfQ0FNX1NUQVRVUwkJNTYKLSAjZGVmaW5lIEJUODMyXzU2X0NBTUVSQV9QUkVTRU5UIDB4MjAKLS8vQ2FtZXJhIFNldHVwczoKLSNkZWZpbmUgQlQ4MzJfQ0FNX1NFVFVQMAk1NwotI2RlZmluZSBCVDgzMl9DQU1fU0VUVVAxCTU4Ci0jZGVmaW5lIEJUODMyX0NBTV9TRVRVUDIJNTkKLSNkZWZpbmUgQlQ4MzJfQ0FNX1NFVFVQMwk2MAotLy8gU3lzdGVtOgotI2RlZmluZSBCVDgzMl9ERUZDT1IJCTYxCi0jZGVmaW5lIEJUODMyX1ZQX1RFU1RDT05UUk9MMQk2MgotI2RlZmluZSBCVDgzMl9ERVZJQ0VfSUQJCTYzCi0jIGRlZmluZSBCVDgzMl9ERVZJQ0VfSURfXzMxCQkweDMxIC8vIEJ0ODMyIGhhcyBJRCAweDMxCi0KLS8qIFNUTWljcm9lbGVjdHJvbml2Y3MgVlY1NDA0IGNhbWVyYSBtb2R1bGUKLSAgIGkyYzogMHgyMDogc2Vuc29yIGFkZHJlc3MKLSAgIGkyYzogMHhhMDogZWVwcm9tIGZvciBjY2QgZGVmZWN0IG1hcAotICovCi0jZGVmaW5lIFZWNTQwNF9kZXZpY2VfaAkJMHgwMCAgLy8gMHgxOQotI2RlZmluZSBWVjU0MDRfZGV2aWNlX2wJCTB4MDEgIC8vIDB4NDAKLSNkZWZpbmUgVlY1NDA0X3N0YXR1czAJCTB4MDIKLSNkZWZpbmUgVlY1NDA0X2xpbmVjb3VudGMJMHgwMyAvLyBjdXJyZW50IGxpbmUgY291bnRlcgotI2RlZmluZSBWVjU0MDRfbGluZWNvdW50bAkweDA0Ci0jZGVmaW5lIFZWNTQwNF9zZXR1cDAJCTB4MTAKLSNkZWZpbmUgVlY1NDA0X3NldHVwMQkJMHgxMQotI2RlZmluZSBWVjU0MDRfc2V0dXAyCQkweDEyCi0jZGVmaW5lIFZWNTQwNF9zZXR1cDQJCTB4MTQKLSNkZWZpbmUgVlY1NDA0X3NldHVwNQkJMHgxNQotI2RlZmluZSBWVjU0MDRfZmluZV9oCQkweDIwICAvLyBmaW5lIGV4cG9zdXJlCi0jZGVmaW5lIFZWNTQwNF9maW5lX2wJCTB4MjEKLSNkZWZpbmUgVlY1NDA0X2NvYXJzZV9oCQkweDIyICAvL2NvYXJzZSBleHBvc3VyZQotI2RlZmluZSBWVjU0MDRfY29hcnNlX2wJCTB4MjMKLSNkZWZpbmUgVlY1NDA0X2dhaW4JCTB4MjQgLy8gQURDIHByZS1hbXAgZ2FpbiBzZXR0aW5nCi0jZGVmaW5lIFZWNTQwNF9jbGtfZGl2CQkweDI1Ci0jZGVmaW5lIFZWNTQwNF9jcgkJMHg3NiAvLyBjb250cm9sIHJlZ2lzdGVyCi0jZGVmaW5lIFZWNTQwNF9hczAJCTB4NzcgLy8gQURDIHNldHVwIHJlZ2lzdGVyCi0KLQotLy8gSU9DVEwKLSNkZWZpbmUgQlQ4MzJfSEVYRFVNUCAgIF9JT1IoJ2InLDEsaW50KQotI2RlZmluZSBCVDgzMl9SRUFUVEFDSAlfSU9SKCdiJywyLGludCkKLQotLyogZnJvbSBCVDh4OFZYRC9jYXBkcnYvZGlhbG9ncy5jcHAgKi8KLQotLyoKLXR5cGVkZWYgZW51bSB7IFNWSSwgTG9naXRlY2gsIFJvY2t3ZWxsIH0gQ0FNRVJBOwotCi1zdGF0aWMgQ09NQk9CT1hfRU5UUlkgZ3dDYW1lcmFPcHRpb25zW10gPQotewotICAgeyBTVkksICAgICAgIlNpbGljb24gVmlzaW9uIDUxMk4iIH0sCi0gICB7IExvZ2l0ZWNoLCAiTG9naXRlY2ggVmlkZW9NYW4gMS4zIiAgfSwKLSAgIHsgUm9ja3dlbGwsICJSb2Nrd2VsbCBRdWFydHpTaWdodCBQQ0kgMS4wIiAgIH0KLX07Ci0KLS8vIFNSQU0gdGFibGUgdmFsdWVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBlbnVtIHsgVEdCX05UU0M2MjQsIFRHQl9OVFNDNzgwLCBUR0JfTlRTQzg1OCwgVEdCX05UU0MzOTIgfSBUaW1lR2VuQnl0ZTsKLQotQllURSBTUkFNVGFibGVbXVsgNjAgXSA9Ci17Ci0gICAvLyBUR0JfTlRTQzYyNAotICAgewotICAgICAgMHgzMywgLy8gc2l6ZSBvZiB0YWJsZSA9IDUxCi0gICAgICAweDBFLCAweEMwLCAweDAwLCAweDAwLCAweDkwLCAweDAyLCAweDAzLCAweDEwLCAweDAzLCAweDA2LAotICAgICAgMHgxMCwgMHgwNCwgMHgxMiwgMHgxMiwgMHgwNSwgMHgwMiwgMHgxMywgMHgwNCwgMHgxOSwgMHgwMCwKLSAgICAgIDB4MDQsIDB4MzksIDB4MDAsIDB4MDYsIDB4NTksIDB4MDgsIDB4MDMsIDB4ODUsIDB4MDgsIDB4MDcsCi0gICAgICAweDAzLCAweDUwLCAweDAwLCAweDkxLCAweDQwLCAweDAwLCAweDExLCAweDAxLCAweDAxLCAweDRELAotICAgICAgMHgwRCwgMHgwMiwgMHgwMywgMHgxMSwgMHgwMSwgMHgwNSwgMHgzNywgMHgwMCwgMHgzNywgMHgyMSwgMHgwMAotICAgfSwKLSAgIC8vIFRHQl9OVFNDNzgwCi0gICB7Ci0gICAgICAweDMzLCAvLyBzaXplIG9mIHRhYmxlID0gNTEKLSAgICAgIDB4MGUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTIsIDB4MDMsIDB4MTAsIDB4MDMsIDB4MDYsCi0gICAgICAweDEwLCAweDM0LCAweDEyLCAweDEyLCAweDY1LCAweDAyLCAweDEzLCAweDI0LCAweDE5LCAweDAwLAotICAgICAgMHgyNCwgMHgzOSwgMHgwMCwgMHg5NiwgMHg1OSwgMHgwOCwgMHg5MywgMHg4NSwgMHgwOCwgMHg5NywKLSAgICAgIDB4MDMsIDB4NTAsIDB4NTAsIDB4YWYsIDB4NDAsIDB4MzAsIDB4NWYsIDB4MDEsIDB4ZjEsIDB4N2YsCi0gICAgICAweDBkLCAweGYyLCAweDAzLCAweDExLCAweGYxLCAweDA1LCAweDM3LCAweDMwLCAweDg1LCAweDIxLCAweDUwCi0gICB9LAotICAgLy8gVEdCX05UU0M4NTgKLSAgIHsKLSAgICAgIDB4MzMsIC8vIHNpemUgb2YgdGFibGUgPSA1MQotICAgICAgMHgwYywgMHhjMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHhjMiwgMHgwMywgMHgxMCwgMHgwMywgMHgwNiwKLSAgICAgIDB4MTAsIDB4MzQsIDB4MTIsIDB4MTIsIDB4NjUsIDB4MDIsIDB4MTMsIDB4MjQsIDB4MTksIDB4MDAsCi0gICAgICAweDI0LCAweDM5LCAweDAwLCAweDk2LCAweDU5LCAweDA4LCAweDkzLCAweDgzLCAweDA4LCAweDk3LAotICAgICAgMHgwMywgMHg1MCwgMHgzMCwgMHhjMCwgMHg0MCwgMHgzMCwgMHg4NiwgMHgwMSwgMHgwMSwgMHhhNiwKLSAgICAgIDB4MGQsIDB4NjIsIDB4MDMsIDB4MTEsIDB4NjEsIDB4MDUsIDB4MzcsIDB4MzAsIDB4YWMsIDB4MjEsIDB4NTAKLSAgIH0sCi0gICAvLyBUR0JfTlRTQzM5MgotICAgLy8gVGhpcyB0YWJsZSBoYXMgYmVlbiBtb2RpZmllZCB0byBiZSB1c2VkIGZvciBGdXNpb24gUmV2IEQKLSAgIHsKLSAgICAgIDB4MkEsIC8vIHNpemUgb2YgdGFibGUgPSA0MgotICAgICAgMHgwNiwgMHgwOCwgMHgwNCwgMHgwYSwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMywgMHgyNCwKLSAgICAgIDB4MDgsIDB4MDcsIDB4MDIsIDB4OTAsIDB4MDIsIDB4MDgsIDB4MTAsIDB4MDQsIDB4MGMsIDB4MTAsCi0gICAgICAweDA1LCAweDJjLCAweDExLCAweDA0LCAweDU1LCAweDQ4LCAweDAwLCAweDA1LCAweDUwLCAweDAwLAotICAgICAgMHhiZiwgMHgwYywgMHgwMiwgMHgyZiwgMHgzZCwgMHgwMCwgMHgyZiwgMHgzZiwgMHgwMCwgMHhjMywKLSAgICAgIDB4MjAsIDB4MDAKLSAgIH0KLX07Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNhbWVyYSBzcGVjaWZpY2F0aW9ucwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXR5cGVkZWYgc3RydWN0IHRhZ19jYW1lcmFTcGVjCi17Ci0gICBTaWduYWxGb3JtYXQgc2lnbmFsOyAgICAgICAvLyB3aGljaCBkaWdpdGFsIHNpZ25hbCBmb3JtYXQgdGhlIGNhbWVyYSBoYXMKLSAgIFZpZGVvRm9ybWF0ICB2aWRGb3JtYXQ7ICAgIC8vIHZpZGVvIHN0YW5kYXJkCi0gICBTeW5jVmlkZW9SZWYgc3luY1JlZjsgICAgICAvLyB3aGljaCBzeW5jIHZpZGVvIHJlZmVyZW5jZSBpcyB1c2VkCi0gICBTdGF0ZSAgICAgICAgc3luY091dHB1dDsgICAvLyBlbmFibGUgc3luYyBvdXRwdXQgZm9yIHN5bmMgdmlkZW8gaW5wdXQ/Ci0gICBEZWNJbnB1dENsayAgaUNsazsgICAgICAgICAvLyB3aGljaCBpbnB1dCBjbG9jayBpcyB1c2VkCi0gICBUaW1lR2VuQnl0ZSAgdGdiOyAgICAgICAgICAvLyB3aGljaCB0aW1pbmcgZ2VuZXJhdG9yIGJ5dGUgZG9lcyB0aGUgY2FtZXJhIHVzZQotICAgaW50ICAgICAgICAgIEhSZXNldDsgICAgICAgLy8gc2VsZWN0IDY0LCA0OCwgMzIsIG9yIDE2IENMS3gxIGZvciBIUmVzZXQKLSAgIFBMTEZyZXEgICAgICBwbGxGcmVxOyAgICAgIC8vIHdoYXQgc3ludGhlc2l6ZWQgZnJlcXVlbmN5IHRvIHNldCBQTEwgdG8KLSAgIFZTSVpFUEFSTVMgICB2U2l6ZTsgICAgICAgIC8vIHZpZGVvIHNpemUgdGhlIGNhbWVyYSBwcm9kdWNlcwotICAgaW50ICAgICAgICAgIGxpbmVDb3VudDsgICAgLy8gZXhwZWN0ZWQgdG90YWwgbnVtYmVyIG9mIGhhbGYtbGluZSBwZXIgZnJhbWUgLSAxCi0gICBCT09MICAgICAgICAgaW50ZXJsYWNlOyAgICAvLyBpbnRlcmxhY2Ugc2lnbmFsPwotfSBDYW1lcmFTcGVjOwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPFVQREFURSBSRVFVSVJFRD4KLS8vIENhbWVyYSBzcGVjaWZpY2F0aW9ucyBkYXRhYmFzZS4gVXBkYXRlIHRoaXMgdGFibGUgd2hlbmV2ZXIgY2FtZXJhIHNwZWMKLS8vIGhhcyBiZWVuIGNoYW5nZWQgb3IgYWRkZWQvZGVsZXRlZCBzdXBwb3J0ZWQgY2FtZXJhIG1vZGVscwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBDYW1lcmFTcGVjIGRiQ2FtZXJhU3BlY1sgTl9DQU1FUkFPUFRJT05TIF0gPQoteyAgLy8gU2lsaWNvbiBWaXNpb24gNTEyTgotICAgeyBTaWduYWxfQ0NJUjY1NiwgVkZvcm1hdF9OVFNDLCBWUmVmX2FsaWduZWRDYiwgT2ZmLCBEZWNDbGtfR1BDTEssIFRHQl9OVFNDNjI0LCA2NCwgS0h6MTk2MzYsCi0gICAgICAvLyBDbGt4MV9IQUNUSVZFLCBDbGt4MV9IREVMQVksIFZBY3RpdmUsIFZEZWxheSwgbGluZXNQZXJGaWVsZDsgbGluZUNvdW50LCBJbnRlcmxhY2UKLSAgIHsgICAgICAgICA1MTIsICAgICAgICAgICAweDY0LCAgICAgICA0ODAsICAgIDB4MTMsICAgICAgMjQwIH0sICAgICAgICAgMCwgICAgICAgVFJVRQotICAgfSwKLSAgIC8vIExvZ2l0ZWNoIFZpZGVvTWFuIDEuMwotICAgeyBTaWduYWxfQ0NJUjY1NiwgVkZvcm1hdF9OVFNDLCBWUmVmX2FsaWduZWRDYiwgT2ZmLCBEZWNDbGtfR1BDTEssIFRHQl9OVFNDNzgwLCA2NCwgS0h6MjQ1NDUsCi0gICAgICAvLyBDbGt4MV9IQUNUSVZFLCBDbGt4MV9IREVMQVksIFZBY3RpdmUsIFZEZWxheSwgbGluZXNQZXJGaWVsZDsgbGluZUNvdW50LCBJbnRlcmxhY2UKLSAgICAgIHsgICAgICA2NDAsICAgICAgICAgICAweDgwLCAgICAgICA0ODAsICAgIDB4MUEsICAgICAgMjQwIH0sICAgICAgICAgMCwgICAgICAgVFJVRQotICAgfSwKLSAgIC8vIFJvY2t3ZWxsIFF1YXJ0elNpZ2h0Ci0gICAvLyBOb3RlOiBGdXNpb24gUmV2IEQgKHJldiBJRCAweDAyKSBhbmQgbGF0ZXIgc3VwcG9ydHMgMTYgcGl4ZWxzIGZvciBIUmVzZXQgd2hpY2ggaXMgcHJlZmVyYWJsZS4KLSAgIC8vICAgICAgIFVzZSAzMiBmb3IgZWFybGllciB2ZXJzaW9uIG9mIGhhcmR3YXJlLiBDbGt4MV9IREVMQVkgYWxzbyBjaGFuZ2VkIGZyb20gMHgyNyB0byAweDIwLgotICAgeyBTaWduYWxfQ0NJUjY1NiwgVkZvcm1hdF9OVFNDLCBWUmVmX2FsaWduZWRDYiwgT2ZmLCBEZWNDbGtfR1BDTEssIFRHQl9OVFNDMzkyLCAxNiwgS0h6Mjg2MzYsCi0gICAgICAvLyBDbGt4MV9IQUNUSVZFLCBDbGt4MV9IREVMQVksIFZBY3RpdmUsIFZEZWxheSwgbGluZXNQZXJGaWVsZDsgbGluZUNvdW50LCBJbnRlcmxhY2UKLSAgICAgIHsgICAgICAzNTIsICAgICAgICAgICAweDIwLCAgICAgICA1NzYsICAgIDB4MDgsICAgICAgMjg4IH0sICAgICAgIDYwNywgICAgICAgRkFMU0UKLSAgIH0KLX07Ci0qLwotCi0vKgotVGhlIGNvcnJlc3BvbmRpbmcgQVBJcyByZXF1aXJlZCB0byBiZSBpbnZva2VkIGFyZToKLVNldENvbm5lY3RvciggQ29uQ2FtZXJhLCBUUlVFL0ZBTFNFICk7Ci1TZXRTaWduYWxGb3JtYXQoIHNwZWMuc2lnbmFsICk7Ci1TZXRWaWRlb0Zvcm1hdCggc3BlYy52aWRGb3JtYXQgKTsKLVNldFN5bmNWaWRlb1JlZiggc3BlYy5zeW5jUmVmICk7Ci1TZXRFbmFibGVTeW5jT3V0cHV0KCBzcGVjLnN5bmNPdXRwdXQgKTsKLVNldFRpbUdlbkJ5dGUoIFNSQU1UYWJsZVsgc3BlYy50Z2IgXSwgU1JBTVRhYmxlU2l6ZVsgc3BlYy50Z2IgXSApOwotU2V0SFJlc2V0KCBzcGVjLkhSZXNldCApOwotU2V0UExMKCBzcGVjLnBsbEZyZXEgKTsKLVNldERlY0lucHV0Q2xvY2soIHNwZWMuaUNsayApOwotU2V0VmlkZW9JbmZvKCBzcGVjLnZTaXplICk7Ci1TZXRUb3RhbExpbmVDb3VudCggc3BlYy5saW5lQ291bnQgKTsKLVNldEludGVybGFjZU1vZGUoIHNwZWMuaW50ZXJsYWNlICk7Ci0qLwotCi0vKiBmcm9tIHdlYjoKLSBWaWRlbyBTYW1wbGluZwotRGlnaXRhbCB2aWRlbyBpcyBhIHNhbXBsZWQgZm9ybSBvZiBhbmFsb2cgdmlkZW8uIFRoZSBtb3N0IGNvbW1vbiBzYW1wbGluZyBzY2hlbWVzIGluIHVzZSB0b2RheSBhcmU6Ci0JCSAgUGl4ZWwgQ2xvY2sgICBIb3JpeiAgICBIb3JpeiAgICBWZXJ0Ci0JCSAgIFJhdGUgICAgICAgICBUb3RhbCAgICBBY3RpdmUKLU5UU0Mgc3F1YXJlIHBpeGVsICAxMi4yNyBNSHogICAgNzgwICAgICAgNjQwICAgICAgNTI1Ci1OVFNDIENDSVItNjAxICAgICAgMTMuNSAgTUh6ICAgIDg1OCAgICAgIDcyMCAgICAgIDUyNQotTlRTQyA0RlNjICAgICAgICAgIDE0LjMyIE1IeiAgICA5MTAgICAgICA3NjggICAgICA1MjUKLVBBTCAgc3F1YXJlIHBpeGVsICAxNC43NSBNSHogICAgOTQ0ICAgICAgNzY4ICAgICAgNjI1Ci1QQUwgIENDSVItNjAxICAgICAgMTMuNSAgTUh6ICAgIDg2NCAgICAgIDcyMCAgICAgIDYyNQotUEFMICA0RlNjICAgICAgICAgIDE3LjcyIE1IeiAgIDExMzUgICAgICA5NDggICAgICA2MjUKLQotRm9yIHRoZSBDQ0lSLTYwMSBzdGFuZGFyZHMsIHRoZSBzYW1wbGluZyBpcyBiYXNlZCBvbiBhIHN0YXRpYyBvcnRob2dvbmFsIHNhbXBsaW5nIGdyaWQuIFRoZSBsdW1pbmFuY2UgY29tcG9uZW50IChZKSBpcyBzYW1wbGVkIGF0IDEzLjUgTUh6LCB3aGlsZSB0aGUgdHdvIGNvbG9yIGRpZmZlcmVuY2Ugc2lnbmFscywgQ3IgYW5kIENiIGFyZSBzYW1wbGVkIGF0IGhhbGYgdGhhdCwgb3IgNi43NSBNSHouIFRoZSBDciBhbmQgQ2Igc2FtcGxlcyBhcmUgY29sb2NhdGVkIHdpdGggYWx0ZXJuYXRlIFkgc2FtcGxlcywgYW5kIHRoZXkgYXJlIHRha2VuIGF0IHRoZSBzYW1lIHBvc2l0aW9uIG9uIGVhY2ggbGluZSwgc3VjaCB0aGF0IG9uZSBzYW1wbGUgaXMgY29pbmNpZGVudCB3aXRoIHRoZSA1MCUgcG9pbnQgb2YgdGhlIGZhbGxpbmcgZWRnZSBvZiBhbmFsb2cgc3luYy4gVGhlIHNhbXBsZXMgYXJlIGNvZGVkIHRvIGVpdGhlciA4IG9yIDEwIGJpdHMgcGVyIGNvbXBvbmVudC4KLSovCi0KLS8qIGZyb20gRFNjYWxlcjoqLwotLyoKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDQ0lSNjU2IERpZ2l0YWwgSW5wdXQgU3VwcG9ydDogVGhlIHRhYmxlcyB3ZXJlIHRha2VuIGZyb20gRFNjYWxlciBwcm95ZWN0Ci0vLwotLy8gMTMgRGVjIDIwMDAgLSBNaWNoYWVsIEVza2luLCBDb25leGFudCBTeXN0ZW1zIC0gSW5pdGlhbCB2ZXJzaW9uCi0vLwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gVGltaW5nIGdlbmVyYXRvciBTUkFNIHRhYmxlIHZhbHVlcyBmb3IgQ0NJUjYwMSA3MjB4NDgwIE5UU0MKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGb3IgTlRTQyBDQ0lSNjU2Ci1CWVRFIEJ0Q2FyZDo6U1JBTVRhYmxlX05UU0NbXSA9Ci17Ci0gICAgLy8gU1JBTSBUaW1pbmcgVGFibGUgZm9yIE5UU0MKLSAgICAweDBjLCAweGMwLCAweDAwLAotICAgIDB4MDAsIDB4OTAsIDB4YzIsCi0gICAgMHgwMywgMHgxMCwgMHgwMywKLSAgICAweDA2LCAweDEwLCAweDM0LAotICAgIDB4MTIsIDB4MTIsIDB4NjUsCi0gICAgMHgwMiwgMHgxMywgMHgyNCwKLSAgICAweDE5LCAweDAwLCAweDI0LAotICAgIDB4MzksIDB4MDAsIDB4OTYsCi0gICAgMHg1OSwgMHgwOCwgMHg5MywKLSAgICAweDgzLCAweDA4LCAweDk3LAotICAgIDB4MDMsIDB4NTAsIDB4MzAsCi0gICAgMHhjMCwgMHg0MCwgMHgzMCwKLSAgICAweDg2LCAweDAxLCAweDAxLAotICAgIDB4YTYsIDB4MGQsIDB4NjIsCi0gICAgMHgwMywgMHgxMSwgMHg2MSwKLSAgICAweDA1LCAweDM3LCAweDMwLAotICAgIDB4YWMsIDB4MjEsIDB4NTAKLX07Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBUaW1pbmcgZ2VuZXJhdG9yIFNSQU0gdGFibGUgdmFsdWVzIGZvciBDQ0lSNjAxIDcyMHg1NzYgTlRTQwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZvciBQQUwgQ0NJUjY1NgotQllURSBCdENhcmQ6OlNSQU1UYWJsZV9QQUxbXSA9Ci17Ci0gICAgLy8gU1JBTSBUaW1pbmcgVGFibGUgZm9yIFBBTAotICAgIDB4MzYsIDB4MTEsIDB4MDEsCi0gICAgMHgwMCwgMHg5MCwgMHgwMiwKLSAgICAweDA1LCAweDEwLCAweDA0LAotICAgIDB4MTYsIDB4MTQsIDB4MDUsCi0gICAgMHgxMSwgMHgwMCwgMHgwNCwKLSAgICAweDEyLCAweGMwLCAweDAwLAotICAgIDB4MzEsIDB4MDAsIDB4MDYsCi0gICAgMHg1MSwgMHgwOCwgMHgwMywKLSAgICAweDg5LCAweDA4LCAweDA3LAotICAgIDB4YzAsIDB4NDQsIDB4MDAsCi0gICAgMHg4MSwgMHgwMSwgMHgwMSwKLSAgICAweGE5LCAweDBkLCAweDAyLAotICAgIDB4MDIsIDB4NTAsIDB4MDMsCi0gICAgMHgzNywgMHgzZCwgMHgwMCwKLSAgICAweGFmLCAweDIxLCAweDAwLAotfTsKLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IDEzNzQyYjAuLmQyNGRjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC00NCw3ICs0NCw2IEBACiAKIC8qIGZ3ZCBkZWNsICovCiBzdGF0aWMgdm9pZCBib290X21zcDM0eHgoc3RydWN0IGJ0dHYgKmJ0diwgaW50IHBpbik7Ci1zdGF0aWMgdm9pZCBib290X2J0ODMyKHN0cnVjdCBidHR2ICpidHYpOwogc3RhdGljIHZvaWQgaGF1cHBhdWdlX2VlcHJvbShzdHJ1Y3QgYnR0diAqYnR2KTsKIHN0YXRpYyB2b2lkIGF2ZXJtZWRpYV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0dik7CiBzdGF0aWMgdm9pZCBvc3ByZXlfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYsIGNvbnN0IHU4IGVlWzI1Nl0pOwpAQCAtMjIxNyw5ICsyMjE2LDkgQEAKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCi0JW0JUVFZfQk9BUkRfVkQwMDlYMV9NSU5JRElOXSA9IHsKKwlbQlRUVl9CT0FSRF9WRDAwOVgxX1ZEMDExX01JTklESU5dID0gewogCQkvKiBNLktsYWhyQHBoeXRlYy5kZSAqLwotCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOS1YMSBNaW5pRElOIChidDg3OCkiLAorCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOS1YMSBWRC0wMTEgTWluaURJTiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKIAkJLmF1ZGlvX2lucHV0cyAgID0gMCwKIAkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCkBAIC0yMjI3LDE0ICsyMjI2LDE0IEBACiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCi0JW0JUVFZfQk9BUkRfVkQwMDlYMV9DT01CSV0gPSB7Ci0JCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkiLAorCVtCVFRWX0JPQVJEX1ZEMDA5WDFfVkQwMTFfQ09NQkldID0geworCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOS1YMSBWRC0wMTEgQ29tYmkgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCiAJCS5hdWRpb19pbnB1dHMgICA9IDAsCiAJCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwpAQCAtMjI0Miw3ICsyMjQxLDcgQEAKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC0zMDYxLDYgKzMwNjAsNTQgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJCVtCVFRWX0JPQVJEX1ZEMDEyXSA9IHsKKwkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLworCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMiAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyBzLXZpZGVvICovCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMiwgMywgMSB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJCVtCVFRWX0JPQVJEX1ZEMDEyX1gxXSA9IHsKKwkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLworCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMi1YMSAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJCVtCVFRWX0JPQVJEX1ZEMDEyX1gyXSA9IHsKKwkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLworCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMi1YMiAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMiwgMSB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0KIH07CiAKQEAgLTM2NzMsMTMgKzM3MjAsNiBAQAogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX21vZGVfZ3BpbykKIAkJYnR2LT5hdWRpb19tb2RlX2dwaW89YnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19tb2RlX2dwaW87CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0NBTUVSQSkgewotCQkvKiBkZXRlY3QgQnQ4MzIgY2hpcCBmb3IgcXVhcnR6c2lnaHQgZGlnaXRhbCBjYW1lcmEgKi8KLQkJaWYgKChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9CVDgzMl9BTFQxLCAiQnQ4MzIiKSA+PTApIHx8Ci0JCSAgICAoYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfQlQ4MzJfQUxUMiwgIkJ0ODMyIikgPj0wKSkKLQkJCWJvb3RfYnQ4MzIoYnR2KTsKLQl9Ci0KIAlpZiAoIWF1dG9sb2FkKQogCQlyZXR1cm47CiAKQEAgLTQwNzUsMTAgKzQxMTUsNiBAQAogCQkgICAgICAgImluaXQgWyVkXVxuIiwgYnR2LT5jLm5yLCBwaW4pOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYm9vdF9idDgzMihzdHJ1Y3QgYnR0diAqYnR2KQotewotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogIEltYWdlbmF0aW9uIEwtTW9kZWwgUFhDMjAwIEZyYW1lZ3JhYmJlciAqLwogLyogIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIHByb2NlZHVyZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1ncGlvLmMKaW5kZXggZGNlNmRhZS4uNzRjMzI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZ3Bpby5jCkBAIC00Miw3ICs0Miw3IEBACiAJc3RydWN0IGJ0dHZfc3ViX2RyaXZlciAqc3ViID0gdG9fYnR0dl9zdWJfZHJ2KGRydik7CiAJaW50IGxlbiA9IHN0cmxlbihzdWItPndhbnRlZCk7CiAKLQlpZiAoMCA9PSBzdHJuY21wKGRldi0+YnVzX2lkLCBzdWItPndhbnRlZCwgbGVuKSkKKwlpZiAoMCA9PSBzdHJuY21wKGRldl9uYW1lKGRldiksIHN1Yi0+d2FudGVkLCBsZW4pKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxLDE1ICs5MSwxNCBAQAogCXN1Yi0+ZGV2LnBhcmVudCAgPSAmY29yZS0+cGNpLT5kZXY7CiAJc3ViLT5kZXYuYnVzICAgICA9ICZidHR2X3N1Yl9idXNfdHlwZTsKIAlzdWItPmRldi5yZWxlYXNlID0gcmVsZWFzZV9zdWJfZGV2aWNlOwotCXNucHJpbnRmKHN1Yi0+ZGV2LmJ1c19pZCxzaXplb2Yoc3ViLT5kZXYuYnVzX2lkKSwiJXMlZCIsCi0JCSBuYW1lLCBjb3JlLT5ucik7CisJZGV2X3NldF9uYW1lKCZzdWItPmRldiwgIiVzJWQiLCBuYW1lLCBjb3JlLT5ucik7CiAKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJnN1Yi0+ZGV2KTsKIAlpZiAoMCAhPSBlcnIpIHsKIAkJa2ZyZWUoc3ViKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcHJpbnRrKCJidHR2JWQ6IGFkZCBzdWJkZXZpY2UgXCIlc1wiXG4iLCBjb3JlLT5uciwgc3ViLT5kZXYuYnVzX2lkKTsKKwlwcmludGsoImJ0dHYlZDogYWRkIHN1YmRldmljZSBcIiVzXCJcbiIsIGNvcmUtPm5yLCBkZXZfbmFtZSgmc3ViLT5kZXYpKTsKIAlsaXN0X2FkZF90YWlsKCZzdWItPmxpc3QsJmNvcmUtPnN1YnMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAppbmRleCA0NmNiOTBlLi41MjliZjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaApAQCAtMTMwLDggKzEzMCw4IEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfWEdVQVJEICAgICAgICAgICAgICAgICAgMHg2NwogI2RlZmluZSBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYgICAgICAgICAgIDB4NjgKICNkZWZpbmUgQlRUVl9CT0FSRF9QVjE0MyAgICAgICAgICAgICAgICAgICAweDY5Ci0jZGVmaW5lIEJUVFZfQk9BUkRfVkQwMDlYMV9NSU5JRElOICAgICAgICAgMHg2YQotI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDA5WDFfQ09NQkkgICAgICAgICAgIDB4NmIKKyNkZWZpbmUgQlRUVl9CT0FSRF9WRDAwOVgxX1ZEMDExX01JTklESU4gICAweDZhCisjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMDlYMV9WRDAxMV9DT01CSSAgICAgMHg2YgogI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDA5X01JTklESU4gICAgICAgICAgIDB4NmMKICNkZWZpbmUgQlRUVl9CT0FSRF9WRDAwOV9DT01CSSAgICAgICAgICAgICAweDZkCiAjZGVmaW5lIEJUVFZfQk9BUkRfSVZDMTAwICAgICAgICAgICAgICAgICAgMHg2ZQpAQCAtMTc3LDYgKzE3NywxMCBAQAogI2RlZmluZSBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMAkgICAweDk2CiAjZGVmaW5lIEJUVFZfQk9BUkRfS09aVU1JX0tUVl8wMUMgICAgICAgICAgMHg5NwogI2RlZmluZSBCVFRWX0JPQVJEX0VOTFRWX0ZNXzIJCSAgIDB4OTgKKyNkZWZpbmUgQlRUVl9CT0FSRF9WRDAxMgkJICAgMHg5OQorI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDEyX1gxCQkgICAweDlhCisjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMTJfWDIJCSAgIDB4OWIKKwogCiAvKiBtb3JlIGNhcmQtc3BlY2lmaWMgZGVmaW5lcyAqLwogI2RlZmluZSBQVDIyNTRfTF9DSEFOTkVMIDB4MTAKQEAgLTMwOCw3ICszMTIsNyBAQAogCiBzdHJ1Y3QgYnR0dl9zdWJfZHJpdmVyIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgIGRydjsKLQljaGFyICAgICAgICAgICAgICAgICAgIHdhbnRlZFtCVVNfSURfU0laRV07CisJY2hhciAgICAgICAgICAgICAgICAgICB3YW50ZWRbMjBdOwogCWludCAgICAgICAgICAgICAgICAgICAgKCpwcm9iZSkoc3RydWN0IGJ0dHZfc3ViX2RldmljZSAqc3ViKTsKIAl2b2lkICAgICAgICAgICAgICAgICAgICgqcmVtb3ZlKShzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICpzdWIpOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAppbmRleCBiNGQ5NDBiLi4xOTlhNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCkBAIC00NTksNyArNDU5LDcgQEAKIH07CiAKIC8qIG91ciBkZXZpY2VzICovCi0jZGVmaW5lIEJUVFZfTUFYIDE2CisjZGVmaW5lIEJUVFZfTUFYIDMyCiBleHRlcm4gdW5zaWduZWQgaW50IGJ0dHZfbnVtOwogZXh0ZXJuIHN0cnVjdCBidHR2IGJ0dHZzW0JUVFZfTUFYXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYwppbmRleCBhY2U0ZmY5Li4xN2Y4MGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYwpAQCAtNzA2LDggKzcwNiw3IEBACiAgKglWaWRlbzRsaW51eCBpbnRlcmZhY2luZwogICovCiAKLXN0YXRpYyBpbnQgcWNhbV9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHFjYW1fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBxY2FtX2RldmljZSAqcWNhbT0oc3RydWN0IHFjYW1fZGV2aWNlICopZGV2OwpAQCAtODY3LDcgKzg2Niw3IEBACiBzdGF0aWMgaW50IHFjYW1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgcWNhbV9kb19pb2N0bCk7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBxY2FtX2RvX2lvY3RsKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcWNhbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKaW5kZXggMGY5MzBkMy4uMjFjNzFlYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYwpAQCAtNTAwLDggKzUwMCw3IEBACiAgKglWaWRlbzRsaW51eCBpbnRlcmZhY2luZwogICovCiAKLXN0YXRpYyBpbnQgcWNhbV9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHFjYW1fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBxY2FtX2RldmljZSAqcWNhbT0oc3RydWN0IHFjYW1fZGV2aWNlICopZGV2OwpAQCAtNjY3LDkgKzY2Niw5IEBACiB9CiAKIHN0YXRpYyBpbnQgcWNhbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgcWNhbV9kb19pb2N0bCk7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBxY2FtX2RvX2lvY3RsKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcWNhbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWE4NWEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDkzNSArMCwwIEBACi0vKgotICogaW9jdGwzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBpb2N0bHMuCi0gKglTZXBhcmF0ZWQgZnJvbSBmcyBzdHVmZiBieSBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwICBKYWt1YiBKZWxpbmVrICAoamFrdWJAcmVkaGF0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiAgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEBzdXNlLmN6KQotICogQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBtYWNxZWwuYmUpCi0gKgotICogVGhlc2Ugcm91dGluZXMgbWFpbnRhaW4gYXJndW1lbnQgc2l6ZSBjb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0Ci0gKiBpb2N0bHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0cnVjdCB2aWRlb190dW5lcjMyIHsKLQljb21wYXRfaW50X3QgdHVuZXI7Ci0JY2hhciBuYW1lWzMyXTsKLQljb21wYXRfdWxvbmdfdCByYW5nZWxvdywgcmFuZ2VoaWdoOwotCXUzMiBmbGFnczsJLyogSXQgaXMgcmVhbGx5IHUzMiBpbiB2aWRlb2Rldi5oICovCi0JdTE2IG1vZGUsIHNpZ25hbDsKLX07Ci0KLXN0YXRpYyBpbnQgZ2V0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKLXsKLQlpZighYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb190dW5lcjMyKSkgfHwKLQkJZ2V0X3VzZXIoa3AtPnR1bmVyLCAmdXAtPnR1bmVyKSB8fAotCQljb3B5X2Zyb21fdXNlcihrcC0+bmFtZSwgdXAtPm5hbWUsIDMyKSB8fAotCQlnZXRfdXNlcihrcC0+cmFuZ2Vsb3csICZ1cC0+cmFuZ2Vsb3cpIHx8Ci0JCWdldF91c2VyKGtwLT5yYW5nZWhpZ2gsICZ1cC0+cmFuZ2VoaWdoKSB8fAotCQlnZXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8Ci0JCWdldF91c2VyKGtwLT5tb2RlLCAmdXAtPm1vZGUpIHx8Ci0JCWdldF91c2VyKGtwLT5zaWduYWwsICZ1cC0+c2lnbmFsKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKLXsKLQlpZighYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fdHVuZXIzMikpIHx8Ci0JCXB1dF91c2VyKGtwLT50dW5lciwgJnVwLT50dW5lcikgfHwKLQkJY29weV90b191c2VyKHVwLT5uYW1lLCBrcC0+bmFtZSwgMzIpIHx8Ci0JCXB1dF91c2VyKGtwLT5yYW5nZWxvdywgJnVwLT5yYW5nZWxvdykgfHwKLQkJcHV0X3VzZXIoa3AtPnJhbmdlaGlnaCwgJnVwLT5yYW5nZWhpZ2gpIHx8Ci0JCXB1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykgfHwKLQkJcHV0X3VzZXIoa3AtPm1vZGUsICZ1cC0+bW9kZSkgfHwKLQkJcHV0X3VzZXIoa3AtPnNpZ25hbCwgJnVwLT5zaWduYWwpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RydWN0IHZpZGVvX2J1ZmZlcjMyIHsKLQljb21wYXRfY2FkZHJfdCBiYXNlOwotCWNvbXBhdF9pbnRfdCBoZWlnaHQsIHdpZHRoLCBkZXB0aCwgYnl0ZXNwZXJsaW5lOwotfTsKLQotc3RhdGljIGludCBnZXRfdmlkZW9fYnVmZmVyMzIoc3RydWN0IHZpZGVvX2J1ZmZlciAqa3AsIHN0cnVjdCB2aWRlb19idWZmZXIzMiBfX3VzZXIgKnVwKQotewotCXUzMiB0bXA7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYnVmZmVyMzIpKSB8fAotCQlnZXRfdXNlcih0bXAsICZ1cC0+YmFzZSkgfHwKLQkJZ2V0X3VzZXIoa3AtPmhlaWdodCwgJnVwLT5oZWlnaHQpIHx8Ci0JCWdldF91c2VyKGtwLT53aWR0aCwgJnVwLT53aWR0aCkgfHwKLQkJZ2V0X3VzZXIoa3AtPmRlcHRoLCAmdXAtPmRlcHRoKSB8fAotCQlnZXRfdXNlcihrcC0+Ynl0ZXNwZXJsaW5lLCAmdXAtPmJ5dGVzcGVybGluZSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBwaHlzaWNhbCBhZGRyZXNzIHN0b3JlZAotCSAqIGFzIGEgdm9pZCBwb2ludGVyLgotCSAqLwotCWtwLT5iYXNlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgdG1wOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX2J1ZmZlcjMyKHN0cnVjdCB2aWRlb19idWZmZXIgKmtwLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyMzIgX191c2VyICp1cCkKLXsKLQl1MzIgdG1wID0gKHUzMikoKHVuc2lnbmVkIGxvbmcpa3AtPmJhc2UpOwotCi0JaWYoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2J1ZmZlcjMyKSkgfHwKLQkJcHV0X3VzZXIodG1wLCAmdXAtPmJhc2UpIHx8Ci0JCXB1dF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KSB8fAotCQlwdXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpIHx8Ci0JCXB1dF91c2VyKGtwLT5kZXB0aCwgJnVwLT5kZXB0aCkgfHwKLQkJcHV0X3VzZXIoa3AtPmJ5dGVzcGVybGluZSwgJnVwLT5ieXRlc3BlcmxpbmUpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2aWRlb19jbGlwMzIgewotCXMzMiB4LCB5LCB3aWR0aCwgaGVpZ2h0OwkvKiBJdHMgcmVhbGx5IHMzMiBpbiB2aWRlb2Rldi5oICovCi0JY29tcGF0X2NhZGRyX3QgbmV4dDsKLX07Ci0KLXN0cnVjdCB2aWRlb193aW5kb3czMiB7Ci0JdTMyIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNocm9tYWtleSwgZmxhZ3M7Ci0JY29tcGF0X2NhZGRyX3QgY2xpcHM7Ci0JY29tcGF0X2ludF90IGNsaXBjb3VudDsKLX07Ci0jZW5kaWYKLQotc3RhdGljIGludCBuYXRpdmVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXQgPSAtRU5PSU9DVExDTUQ7Ci0KLQlpZiAoZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwpCi0JCXJldCA9IGZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLQllbHNlIGlmIChmaWxlLT5mX29wLT5pb2N0bCkgewotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXQgPSBmaWxlLT5mX29wLT5pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIFlvdSBnZXQgYmFjayBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2xpcHMuLi4gKi8KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX3dpbmRvdzMyKHN0cnVjdCB2aWRlb193aW5kb3cgKmtwLCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIgX191c2VyICp1cCkKLXsKLQlpZighYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93MzIpKSB8fAotCQlwdXRfdXNlcihrcC0+eCwgJnVwLT54KSB8fAotCQlwdXRfdXNlcihrcC0+eSwgJnVwLT55KSB8fAotCQlwdXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpIHx8Ci0JCXB1dF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KSB8fAotCQlwdXRfdXNlcihrcC0+Y2hyb21ha2V5LCAmdXAtPmNocm9tYWtleSkgfHwKLQkJcHV0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKSB8fAotCQlwdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgdjRsMl9jbGlwMzIKLXsKLQlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBjOwotCWNvbXBhdF9jYWRkcl90IAkJbmV4dDsKLX07Ci0KLXN0cnVjdCB2NGwyX3dpbmRvdzMyCi17Ci0Jc3RydWN0IHY0bDJfcmVjdCAgICAgICAgdzsKLQllbnVtIHY0bDJfZmllbGQgIAlmaWVsZDsKLQlfX3UzMgkJCWNocm9tYWtleTsKLQljb21wYXRfY2FkZHJfdAkJY2xpcHM7IC8qIGFjdHVhbGx5IHN0cnVjdCB2NGwyX2NsaXAzMiAqICovCi0JX191MzIJCQljbGlwY291bnQ7Ci0JY29tcGF0X2NhZGRyX3QJCWJpdG1hcDsKLX07Ci0KLXN0YXRpYyBpbnQgZ2V0X3Y0bDJfd2luZG93MzIoc3RydWN0IHY0bDJfd2luZG93ICprcCwgc3RydWN0IHY0bDJfd2luZG93MzIgX191c2VyICp1cCkKLXsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl93aW5kb3czMikpIHx8Ci0JCWNvcHlfZnJvbV91c2VyKCZrcC0+dywgJnVwLT53LCBzaXplb2YodXAtPncpKSB8fAotCQlnZXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8Ci0JCWdldF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAotCQlnZXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoa3AtPmNsaXBjb3VudCA+IDIwNDgpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChrcC0+Y2xpcGNvdW50KSB7Ci0JCXN0cnVjdCB2NGwyX2NsaXAzMiBfX3VzZXIgKnVjbGlwczsKLQkJc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKmtjbGlwczsKLQkJaW50IG4gPSBrcC0+Y2xpcGNvdW50OwotCQljb21wYXRfY2FkZHJfdCBwOwotCi0JCWlmIChnZXRfdXNlcihwLCAmdXAtPmNsaXBzKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQl1Y2xpcHMgPSBjb21wYXRfcHRyKHApOwotCQlrY2xpcHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuICogc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApKTsKLQkJa3AtPmNsaXBzID0ga2NsaXBzOwotCQl3aGlsZSAoLS1uID49IDApIHsKLQkJCWlmIChjb3B5X2luX3VzZXIoJmtjbGlwcy0+YywgJnVjbGlwcy0+Yywgc2l6ZW9mKHVjbGlwcy0+YykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHB1dF91c2VyKG4gPyBrY2xpcHMgKyAxIDogTlVMTCwgJmtjbGlwcy0+bmV4dCkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl1Y2xpcHMgKz0gMTsKLQkJCWtjbGlwcyArPSAxOwotCQl9Ci0JfSBlbHNlCi0JCWtwLT5jbGlwcyA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3Y0bDJfd2luZG93MzIoc3RydWN0IHY0bDJfd2luZG93ICprcCwgc3RydWN0IHY0bDJfd2luZG93MzIgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV90b191c2VyKCZ1cC0+dywgJmtwLT53LCBzaXplb2YodXAtPncpKSB8fAotCQlwdXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8Ci0JCXB1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAotCQlwdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0X3Y0bDJfcGl4X2Zvcm1hdChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBfX3VzZXIgKnVwKQotewotCWlmIChjb3B5X2Zyb21fdXNlcihrcCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl9waXhfZm9ybWF0KHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IF9fdXNlciAqdXApCi17Ci0JaWYgKGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRfdjRsMl92YmlfZm9ybWF0KHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IF9fdXNlciAqdXApCi17Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGtwLCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB1dF92NGwyX3ZiaV9mb3JtYXQoc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV90b191c2VyKHVwLCBrcCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2NGwyX2Zvcm1hdDMyCi17Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7Ci0JdW5pb24KLQl7Ci0JCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQJcGl4OyAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCi0JCXN0cnVjdCB2NGwyX3dpbmRvdzMyCXdpbjsgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWQotCQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0CXZiaTsgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKLQkJX191OAlyYXdfZGF0YVsyMDBdOyAgICAgICAgLy8gdXNlci1kZWZpbmVkCi0JfSBmbXQ7Ci19OwotCi1zdGF0aWMgaW50IGdldF92NGwyX2Zvcm1hdDMyKHN0cnVjdCB2NGwyX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyIF9fdXNlciAqdXApCi17Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm9ybWF0MzIpKSB8fAotCQkJZ2V0X3VzZXIoa3AtPnR5cGUsICZ1cC0+dHlwZSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlzd2l0Y2ggKGtwLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCXJldHVybiBnZXRfdjRsMl9waXhfZm9ybWF0KCZrcC0+Zm10LnBpeCwgJnVwLT5mbXQucGl4KTsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJcmV0dXJuIGdldF92NGwyX3dpbmRvdzMyKCZrcC0+Zm10LndpbiwgJnVwLT5mbXQud2luKTsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBnZXRfdjRsMl92YmlfZm9ybWF0KCZrcC0+Zm10LnZiaSwgJnVwLT5mbXQudmJpKTsKLQlkZWZhdWx0OgotCQlwcmludGsoImNvbXBhdF9pb2N0bCA6IHVuZXhwZWN0ZWQgVklESU9DX0ZNVCB0eXBlICVkXG4iLAotCQkJCQkJCQlrcC0+dHlwZSk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotfQotCi1zdGF0aWMgaW50IHB1dF92NGwyX2Zvcm1hdDMyKHN0cnVjdCB2NGwyX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyIF9fdXNlciAqdXApCi17Ci0JaWYoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm9ybWF0MzIpKSB8fAotCQlwdXRfdXNlcihrcC0+dHlwZSwgJnVwLT50eXBlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc3dpdGNoIChrcC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlyZXR1cm4gcHV0X3Y0bDJfcGl4X2Zvcm1hdCgma3AtPmZtdC5waXgsICZ1cC0+Zm10LnBpeCk7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCXJldHVybiBwdXRfdjRsMl93aW5kb3czMigma3AtPmZtdC53aW4sICZ1cC0+Zm10Lndpbik7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gcHV0X3Y0bDJfdmJpX2Zvcm1hdCgma3AtPmZtdC52YmksICZ1cC0+Zm10LnZiaSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdldF92NGwyX3N0YW5kYXJkKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHV0X3Y0bDJfc3RhbmRhcmQoc3RydWN0IHY0bDJfc3RhbmRhcmQgKmtwLCBzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBfX3VzZXIgKnVwKQotewotCWlmIChjb3B5X3RvX3VzZXIodXAsIGtwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2NGwyX3N0YW5kYXJkMzIKLXsKLQlfX3UzMgkJICAgICBpbmRleDsKLQlfX3UzMgkJICAgICBpZFsyXTsgLyogX191NjQgd291bGQgZ2V0IHRoZSBhbGlnbm1lbnQgd3JvbmcgKi8KLQlfX3U4CQkgICAgIG5hbWVbMjRdOwotCXN0cnVjdCB2NGwyX2ZyYWN0ICAgIGZyYW1lcGVyaW9kOyAvKiBGcmFtZXMsIG5vdCBmaWVsZHMgKi8KLQlfX3UzMgkJICAgICBmcmFtZWxpbmVzOwotCV9fdTMyCQkgICAgIHJlc2VydmVkWzRdOwotfTsKLQotc3RhdGljIGludCBnZXRfdjRsMl9zdGFuZGFyZDMyKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMiBfX3VzZXIgKnVwKQotewotCS8qIG90aGVyIGZpZWxkcyBhcmUgbm90IHNldCBieSB0aGUgdXNlciwgbm9yIHVzZWQgYnkgdGhlIGRyaXZlciAqLwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkMzIpKSB8fAotCQlnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwdXRfdjRsMl9zdGFuZGFyZDMyKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMiBfX3VzZXIgKnVwKQotewotCWlmKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkMzIpKSB8fAotCQlwdXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpIHx8Ci0JCWNvcHlfdG9fdXNlcih1cC0+aWQsICZrcC0+aWQsIHNpemVvZihfX3U2NCkpIHx8Ci0JCWNvcHlfdG9fdXNlcih1cC0+bmFtZSwga3AtPm5hbWUsIDI0KSB8fAotCQljb3B5X3RvX3VzZXIoJnVwLT5mcmFtZXBlcmlvZCwgJmtwLT5mcmFtZXBlcmlvZCwgc2l6ZW9mKGtwLT5mcmFtZXBlcmlvZCkpIHx8Ci0JCXB1dF91c2VyKGtwLT5mcmFtZWxpbmVzLCAmdXAtPmZyYW1lbGluZXMpIHx8Ci0JCWNvcHlfdG9fdXNlcih1cC0+cmVzZXJ2ZWQsIGtwLT5yZXNlcnZlZCwgNCAqIHNpemVvZihfX3UzMikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdldF92NGwyX3R1bmVyKHN0cnVjdCB2NGwyX3R1bmVyICprcCwgc3RydWN0IHY0bDJfdHVuZXIgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfdHVuZXIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHV0X3Y0bDJfdHVuZXIoc3RydWN0IHY0bDJfdHVuZXIgKmtwLCBzdHJ1Y3QgdjRsMl90dW5lciBfX3VzZXIgKnVwKQotewotCWlmIChjb3B5X3RvX3VzZXIodXAsIGtwLCBzaXplb2Yoc3RydWN0IHY0bDJfdHVuZXIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2NGwyX2J1ZmZlcjMyCi17Ci0JX191MzIJCQlpbmRleDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOwotCV9fdTMyCQkJYnl0ZXN1c2VkOwotCV9fdTMyCQkJZmxhZ3M7Ci0JZW51bSB2NGwyX2ZpZWxkCQlmaWVsZDsKLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwJdGltZXN0YW1wOwotCXN0cnVjdCB2NGwyX3RpbWVjb2RlCXRpbWVjb2RlOwotCV9fdTMyCQkJc2VxdWVuY2U7Ci0KLQkvKiBtZW1vcnkgbG9jYXRpb24gKi8KLQllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7Ci0JdW5pb24gewotCQlfX3UzMiAgICAgICAgICAgb2Zmc2V0OwotCQljb21wYXRfbG9uZ190ICAgdXNlcnB0cjsKLQl9IG07Ci0JX191MzIJCQlsZW5ndGg7Ci0JX191MzIJCQlpbnB1dDsKLQlfX3UzMgkJCXJlc2VydmVkOwotfTsKLQotc3RhdGljIGludCBnZXRfdjRsMl9idWZmZXIzMihzdHJ1Y3QgdjRsMl9idWZmZXIgKmtwLCBzdHJ1Y3QgdjRsMl9idWZmZXIzMiBfX3VzZXIgKnVwKQotewotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfYnVmZmVyMzIpKSB8fAotCQlnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpIHx8Ci0JCWdldF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpIHx8Ci0JCWdldF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykgfHwKLQkJZ2V0X3VzZXIoa3AtPm1lbW9yeSwgJnVwLT5tZW1vcnkpIHx8Ci0JCWdldF91c2VyKGtwLT5pbnB1dCwgJnVwLT5pbnB1dCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlzd2l0Y2goa3AtPm1lbW9yeSkgewotCWNhc2UgVjRMMl9NRU1PUllfTU1BUDoKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgotCQl7Ci0JCWNvbXBhdF9sb25nX3QgdG1wOwotCi0JCWlmIChnZXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCkgfHwKLQkJICAgIGdldF91c2VyKHRtcCwgJnVwLT5tLnVzZXJwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJa3AtPm0udXNlcnB0ciA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIodG1wKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFY0TDJfTUVNT1JZX09WRVJMQVk6Ci0JCWlmKGdldF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHB1dF92NGwyX2J1ZmZlcjMyKHN0cnVjdCB2NGwyX2J1ZmZlciAqa3AsIHN0cnVjdCB2NGwyX2J1ZmZlcjMyIF9fdXNlciAqdXApCi17Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcjMyKSkgfHwKLQkJcHV0X3VzZXIoa3AtPmluZGV4LCAmdXAtPmluZGV4KSB8fAotCQlwdXRfdXNlcihrcC0+dHlwZSwgJnVwLT50eXBlKSB8fAotCQlwdXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8Ci0JCXB1dF91c2VyKGtwLT5tZW1vcnksICZ1cC0+bWVtb3J5KSB8fAotCQlwdXRfdXNlcihrcC0+aW5wdXQsICZ1cC0+aW5wdXQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc3dpdGNoKGtwLT5tZW1vcnkpIHsKLQljYXNlIFY0TDJfTUVNT1JZX01NQVA6Ci0JCWlmIChwdXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCkgfHwKLQkJCXB1dF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgotCQlpZiAocHV0X3VzZXIoa3AtPmxlbmd0aCwgJnVwLT5sZW5ndGgpIHx8Ci0JCQlwdXRfdXNlcihrcC0+bS51c2VycHRyLCAmdXAtPm0udXNlcnB0cikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01FTU9SWV9PVkVSTEFZOgotCQlpZiAocHV0X3VzZXIoa3AtPm0ub2Zmc2V0LCAmdXAtPm0ub2Zmc2V0KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQl9Ci0JaWYgKHB1dF91c2VyKGtwLT5ieXRlc3VzZWQsICZ1cC0+Ynl0ZXN1c2VkKSB8fAotCQlwdXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8Ci0JCXB1dF91c2VyKGtwLT50aW1lc3RhbXAudHZfc2VjLCAmdXAtPnRpbWVzdGFtcC50dl9zZWMpIHx8Ci0JCXB1dF91c2VyKGtwLT50aW1lc3RhbXAudHZfdXNlYywgJnVwLT50aW1lc3RhbXAudHZfdXNlYykgfHwKLQkJY29weV90b191c2VyKCZ1cC0+dGltZWNvZGUsICZrcC0+dGltZWNvZGUsIHNpemVvZihzdHJ1Y3QgdjRsMl90aW1lY29kZSkpIHx8Ci0JCXB1dF91c2VyKGtwLT5zZXF1ZW5jZSwgJnVwLT5zZXF1ZW5jZSkgfHwKLQkJcHV0X3VzZXIoa3AtPnJlc2VydmVkLCAmdXAtPnJlc2VydmVkKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyCi17Ci0JX191MzIJCQljYXBhYmlsaXR5OwotCV9fdTMyCQkJZmxhZ3M7Ci0JY29tcGF0X2NhZGRyX3QgCQliYXNlOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQJZm10OwotfTsKLQotc3RhdGljIGludCBnZXRfdjRsMl9mcmFtZWJ1ZmZlcjMyKHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICprcCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMiBfX3VzZXIgKnVwKQotewotCXUzMiB0bXA7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyKSkgfHwKLQkJZ2V0X3VzZXIodG1wLCAmdXAtPmJhc2UpIHx8Ci0JCWdldF91c2VyKGtwLT5jYXBhYmlsaXR5LCAmdXAtPmNhcGFiaWxpdHkpIHx8Ci0JCWdldF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQlrcC0+YmFzZSA9IGNvbXBhdF9wdHIodG1wKTsKLQlnZXRfdjRsMl9waXhfZm9ybWF0KCZrcC0+Zm10LCAmdXAtPmZtdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3Y0bDJfZnJhbWVidWZmZXIzMihzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqa3AsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyMzIgX191c2VyICp1cCkKLXsKLQl1MzIgdG1wID0gKHUzMikoKHVuc2lnbmVkIGxvbmcpa3AtPmJhc2UpOwotCi0JaWYoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMikpIHx8Ci0JCXB1dF91c2VyKHRtcCwgJnVwLT5iYXNlKSB8fAotCQlwdXRfdXNlcihrcC0+Y2FwYWJpbGl0eSwgJnVwLT5jYXBhYmlsaXR5KSB8fAotCQlwdXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcHV0X3Y0bDJfcGl4X2Zvcm1hdCgma3AtPmZtdCwgJnVwLT5mbXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRfdjRsMl9pbnB1dDMyKHN0cnVjdCB2NGwyX2lucHV0ICprcCwgc3RydWN0IHY0bDJfaW5wdXQgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpIC0gNCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl9pbnB1dDMyKHN0cnVjdCB2NGwyX2lucHV0ICprcCwgc3RydWN0IHY0bDJfaW5wdXQgX191c2VyICp1cCkKLXsKLQlpZiAoY29weV90b191c2VyKHVwLCBrcCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSAtIDQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0X3Y0bDJfaW5wdXQoc3RydWN0IHY0bDJfaW5wdXQgKmtwLCBzdHJ1Y3QgdjRsMl9pbnB1dCBfX3VzZXIgKnVwKQotewotCWlmIChjb3B5X2Zyb21fdXNlcihrcCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHV0X3Y0bDJfaW5wdXQoc3RydWN0IHY0bDJfaW5wdXQgKmtwLCBzdHJ1Y3QgdjRsMl9pbnB1dCBfX3VzZXIgKnVwKQotewotCWlmIChjb3B5X3RvX3VzZXIodXAsIGtwLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0cnVjdCB2aWRlb19jb2RlMzIKLXsKLQljaGFyCQlsb2Fkd2hhdFsxNl07CS8qIG5hbWUgb3IgdGFnIG9mIGZpbGUgYmVpbmcgcGFzc2VkICovCi0JY29tcGF0X2ludF90CWRhdGFzaXplOwotCXVuc2lnbmVkIGNoYXIJKmRhdGE7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBtaWNyb2NvZGUzMihzdHJ1Y3QgdmlkZW9fY29kZSAqa3AsIHN0cnVjdCB2aWRlb19jb2RlMzIgX191c2VyICp1cCkKLXsKLQlpZighYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jb2RlMzIpKSB8fAotCQljb3B5X2Zyb21fdXNlcihrcC0+bG9hZHdoYXQsIHVwLT5sb2Fkd2hhdCwgc2l6ZW9mICh1cC0+bG9hZHdoYXQpKSB8fAotCQlnZXRfdXNlcihrcC0+ZGF0YXNpemUsICZ1cC0+ZGF0YXNpemUpIHx8Ci0JCWNvcHlfZnJvbV91c2VyKGtwLT5kYXRhLCB1cC0+ZGF0YSwgdXAtPmRhdGFzaXplKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFZJRElPQ0dUVU5FUjMyCQlfSU9XUigndicsNCwgc3RydWN0IHZpZGVvX3R1bmVyMzIpCi0jZGVmaW5lIFZJRElPQ1NUVU5FUjMyCQlfSU9XKCd2Jyw1LCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMikKLSNkZWZpbmUgVklESU9DR1dJTjMyCQlfSU9SKCd2Jyw5LCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCi0jZGVmaW5lIFZJRElPQ1NXSU4zMgkJX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3czMikKLSNkZWZpbmUgVklESU9DR0ZCVUYzMgkJX0lPUigndicsMTEsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKLSNkZWZpbmUgVklESU9DU0ZCVUYzMgkJX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKLSNkZWZpbmUgVklESU9DR0ZSRVEzMgkJX0lPUigndicsMTQsIHUzMikKLSNkZWZpbmUgVklESU9DU0ZSRVEzMgkJX0lPVygndicsMTUsIHUzMikKLSNkZWZpbmUgVklESU9DU01JQ1JPQ09ERTMyCV9JT1coJ3YnLDI3LCBzdHJ1Y3QgdmlkZW9fY29kZTMyKQotCi0jZW5kaWYKLQotLyogVklESU9DX0VOVU1JTlBVVDMyIGlzIFZJRElPQ19FTlVNSU5QVVQgbWludXMgNCBieXRlcyBvZiBwYWRkaW5nIGFsaWduZW1lbnQgKi8KLSNkZWZpbmUgVklESU9DX0VOVU1JTlBVVDMyCVZJRElPQ19FTlVNSU5QVVQgLSBfSU9DKDAsIDAsIDAsIDQpCi0jZGVmaW5lIFZJRElPQ19HX0ZNVDMyCQlfSU9XUiAoJ1YnLCAgNCwgc3RydWN0IHY0bDJfZm9ybWF0MzIpCi0jZGVmaW5lIFZJRElPQ19TX0ZNVDMyCQlfSU9XUiAoJ1YnLCAgNSwgc3RydWN0IHY0bDJfZm9ybWF0MzIpCi0jZGVmaW5lIFZJRElPQ19RVUVSWUJVRjMyCV9JT1dSICgnVicsICA5LCBzdHJ1Y3QgdjRsMl9idWZmZXIzMikKLSNkZWZpbmUgVklESU9DX0dfRkJVRjMyCQlfSU9SICAoJ1YnLCAxMCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMikKLSNkZWZpbmUgVklESU9DX1NfRkJVRjMyCQlfSU9XICAoJ1YnLCAxMSwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMikKLS8qIFZJRElPQ19PVkVSTEFZIGlzIG5vdyBfSU9XLCBidXQgd2FzIF9JT1dSICovCi0jZGVmaW5lIFZJRElPQ19PVkVSTEFZMzIJX0lPV1IgKCdWJywgMTQsIGNvbXBhdF9pbnRfdCkKLSNkZWZpbmUgVklESU9DX1FCVUYzMgkJX0lPV1IgKCdWJywgMTUsIHN0cnVjdCB2NGwyX2J1ZmZlcjMyKQotI2RlZmluZSBWSURJT0NfRFFCVUYzMgkJX0lPV1IgKCdWJywgMTcsIHN0cnVjdCB2NGwyX2J1ZmZlcjMyKQotI2RlZmluZSBWSURJT0NfU1RSRUFNT04zMglfSU9XICAoJ1YnLCAxOCwgY29tcGF0X2ludF90KQotI2RlZmluZSBWSURJT0NfU1RSRUFNT0ZGMzIJX0lPVyAgKCdWJywgMTksIGNvbXBhdF9pbnRfdCkKLSNkZWZpbmUgVklESU9DX0VOVU1TVEQzMglfSU9XUiAoJ1YnLCAyNSwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMikKLS8qIFZJRElPQ19TX0NUUkwgaXMgbm93IF9JT1dSLCBidXQgd2FzIF9JT1cgKi8KLSNkZWZpbmUgVklESU9DX1NfQ1RSTDMyCQlfSU9XICAoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKLSNkZWZpbmUgVklESU9DX0dfSU5QVVQzMglfSU9SICAoJ1YnLCAzOCwgY29tcGF0X2ludF90KQotI2RlZmluZSBWSURJT0NfU19JTlBVVDMyCV9JT1dSICgnVicsIDM5LCBjb21wYXRfaW50X3QpCi0jZGVmaW5lIFZJRElPQ19UUllfRk1UMzIgICAgICAJX0lPV1IgKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQotCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1lbnVtIHsKLQlNYXhDbGlwcyA9ICh+MFUtc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKS9zaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApCi19OwotCi1zdGF0aWMgaW50IGRvX3NldF93aW5kb3coc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwID0gY29tcGF0X3B0cihhcmcpOwotCXN0cnVjdCB2aWRlb193aW5kb3cgX191c2VyICp2dzsKLQlzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKnA7Ci0JaW50IG5jbGlwczsKLQl1MzIgbjsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3czMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChnZXRfdXNlcihuY2xpcHMsICZ1cC0+Y2xpcGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBQZWN1bGlhciBpbnRlcmZhY2UuLi4gKi8KLQlpZiAobmNsaXBzIDwgMCkKLQkJbmNsaXBzID0gVklERU9fQ0xJUE1BUF9TSVpFOwotCi0JaWYgKG5jbGlwcyA+IE1heENsaXBzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXZ3ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpICsKLQkJCQkgICAgbmNsaXBzICogc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSk7Ci0KLQlwID0gbmNsaXBzID8gKHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqKSh2dyArIDEpIDogTlVMTDsKLQotCWlmIChnZXRfdXNlcihuLCAmdXAtPngpIHx8IHB1dF91c2VyKG4sICZ2dy0+eCkgfHwKLQkgICAgZ2V0X3VzZXIobiwgJnVwLT55KSB8fCBwdXRfdXNlcihuLCAmdnctPnkpIHx8Ci0JICAgIGdldF91c2VyKG4sICZ1cC0+d2lkdGgpIHx8IHB1dF91c2VyKG4sICZ2dy0+d2lkdGgpIHx8Ci0JICAgIGdldF91c2VyKG4sICZ1cC0+aGVpZ2h0KSB8fCBwdXRfdXNlcihuLCAmdnctPmhlaWdodCkgfHwKLQkgICAgZ2V0X3VzZXIobiwgJnVwLT5jaHJvbWFrZXkpIHx8IHB1dF91c2VyKG4sICZ2dy0+Y2hyb21ha2V5KSB8fAotCSAgICBnZXRfdXNlcihuLCAmdXAtPmZsYWdzKSB8fCBwdXRfdXNlcihuLCAmdnctPmZsYWdzKSB8fAotCSAgICBnZXRfdXNlcihuLCAmdXAtPmNsaXBjb3VudCkgfHwgcHV0X3VzZXIobiwgJnZ3LT5jbGlwY291bnQpIHx8Ci0JICAgIGdldF91c2VyKG4sICZ1cC0+Y2xpcHMpIHx8IHB1dF91c2VyKHAsICZ2dy0+Y2xpcHMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChuY2xpcHMpIHsKLQkJc3RydWN0IHZpZGVvX2NsaXAzMiBfX3VzZXIgKnUgPSBjb21wYXRfcHRyKG4pOwotCQlpbnQgaTsKLQkJaWYgKCF1KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWZvciAoaSA9IDA7IGkgPCBuY2xpcHM7IGkrKywgdSsrLCBwKyspIHsKLQkJCXMzMiB2OwotCQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcDMyKSkgfHwKLQkJCSAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgcCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwMzIpKSB8fAotCQkJICAgIGdldF91c2VyKHYsICZ1LT54KSB8fAotCQkJICAgIHB1dF91c2VyKHYsICZwLT54KSB8fAotCQkJICAgIGdldF91c2VyKHYsICZ1LT55KSB8fAotCQkJICAgIHB1dF91c2VyKHYsICZwLT55KSB8fAotCQkJICAgIGdldF91c2VyKHYsICZ1LT53aWR0aCkgfHwKLQkJCSAgICBwdXRfdXNlcih2LCAmcC0+d2lkdGgpIHx8Ci0JCQkgICAgZ2V0X3VzZXIodiwgJnUtPmhlaWdodCkgfHwKLQkJCSAgICBwdXRfdXNlcih2LCAmcC0+aGVpZ2h0KSB8fAotCQkJICAgIHB1dF91c2VyKE5VTEwsICZwLT5uZXh0KSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiBuYXRpdmVfaW9jdGwoZmlsZSwgVklESU9DU1dJTiwgKHVuc2lnbmVkIGxvbmcpdncpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgZG9fdmlkZW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXVuaW9uIHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkJc3RydWN0IHZpZGVvX3R1bmVyIHZ0OwotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIHZiOwotCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OwotCQlzdHJ1Y3QgdmlkZW9fY29kZSB2YzsKLQkJc3RydWN0IHZpZGVvX2F1ZGlvIHZhOwotI2VuZGlmCi0JCXN0cnVjdCB2NGwyX2Zvcm1hdCB2MmY7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciB2MmI7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIHYyZmI7Ci0JCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHYyczsKLQkJc3RydWN0IHY0bDJfaW5wdXQgdjJpOwotCQlzdHJ1Y3QgdjRsMl90dW5lciB2MnQ7Ci0JCXVuc2lnbmVkIGxvbmcgdng7Ci0JfSBrYXJnOwotCXZvaWQgX191c2VyICp1cCA9IGNvbXBhdF9wdHIoYXJnKTsKLQlpbnQgY29tcGF0aWJsZV9hcmcgPSAxOwotCWludCBlcnIgPSAwOwotCWludCByZWFsY21kID0gY21kOwotCi0JLyogRmlyc3QsIGNvbnZlcnQgdGhlIGNvbW1hbmQuICovCi0Jc3dpdGNoKGNtZCkgewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR1RVTkVSMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NHVFVORVI7IGJyZWFrOwotCWNhc2UgVklESU9DU1RVTkVSMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NTVFVORVI7IGJyZWFrOwotCWNhc2UgVklESU9DR1dJTjMyOiByZWFsY21kID0gY21kID0gVklESU9DR1dJTjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NHRkJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DR0ZCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DU0ZCVUYzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ1NGQlVGOyBicmVhazsKLQljYXNlIFZJRElPQ0dGUkVRMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NHRlJFUTsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTRlJFUTMyOiByZWFsY21kID0gY21kID0gVklESU9DU0ZSRVE7IGJyZWFrOwotCWNhc2UgVklESU9DU01JQ1JPQ09ERTMyOiByZWFsY21kID0gY21kID0gVklESU9DU01JQ1JPQ09ERTsgYnJlYWs7Ci0jZW5kaWYKLQljYXNlIFZJRElPQ19HX0ZNVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX0dfRk1UOyBicmVhazsKLQljYXNlIFZJRElPQ19TX0ZNVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKLQljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DX1FVRVJZQlVGOyBicmVhazsKLQljYXNlIFZJRElPQ19RQlVGMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfUUJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfRFFCVUYzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19EUUJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfU1RSRUFNT04zMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19TVFJFQU1PTjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfU1RSRUFNT0ZGOyBicmVhazsKLQljYXNlIFZJRElPQ19HX0ZCVUYzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19HX0ZCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DX1NfRkJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DX1NfRkJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfT1ZFUkxBWTMyOiByZWFsY21kID0gY21kID0gVklESU9DX09WRVJMQVk7IGJyZWFrOwotCWNhc2UgVklESU9DX0VOVU1TVEQzMjogcmVhbGNtZCA9IFZJRElPQ19FTlVNU1REOyBicmVhazsKLQljYXNlIFZJRElPQ19FTlVNSU5QVVQzMjogcmVhbGNtZCA9IFZJRElPQ19FTlVNSU5QVVQ7IGJyZWFrOwotCWNhc2UgVklESU9DX1NfQ1RSTDMyOiByZWFsY21kID0gY21kID0gVklESU9DX1NfQ1RSTDsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfR19JTlBVVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX0dfSU5QVVQ7IGJyZWFrOwotCWNhc2UgVklESU9DX1NfSU5QVVQzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19TX0lOUFVUOyBicmVhazsKLQljYXNlIFZJRElPQ19UUllfRk1UMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfVFJZX0ZNVDsgYnJlYWs7Ci0JfTsKLQotCXN3aXRjaChjbWQpIHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQljYXNlIFZJRElPQ1NUVU5FUjoKLQljYXNlIFZJRElPQ0dUVU5FUjoKLQkJZXJyID0gZ2V0X3ZpZGVvX3R1bmVyMzIoJmthcmcudnQsIHVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAwOwotCi0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTRkJVRjoKLQkJZXJyID0gZ2V0X3ZpZGVvX2J1ZmZlcjMyKCZrYXJnLnZiLCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQotCWNhc2UgVklESU9DU0ZSRVE6Ci0jZW5kaWYKLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCWNhc2UgVklESU9DX09WRVJMQVk6Ci0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQllcnIgPSBnZXRfdXNlcihrYXJnLnZ4LCAodTMyIF9fdXNlciAqKXVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAxOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfRkJVRjoKLQkJZXJyID0gZ2V0X3Y0bDJfZnJhbWVidWZmZXIzMigma2FyZy52MmZiLCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQljYXNlIFZJRElPQ19TX0ZNVDoKLQljYXNlIFZJRElPQ19UUllfRk1UOgotCQllcnIgPSBnZXRfdjRsMl9mb3JtYXQzMigma2FyZy52MmYsIHVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCWNhc2UgVklESU9DX1FCVUY6Ci0JY2FzZSBWSURJT0NfRFFCVUY6Ci0JCWVyciA9IGdldF92NGwyX2J1ZmZlcjMyKCZrYXJnLnYyYiwgdXApOwotCQljb21wYXRpYmxlX2FyZyA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTVNURDoKLQkJZXJyID0gZ2V0X3Y0bDJfc3RhbmRhcmQoJmthcmcudjJzLCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNU1REMzI6Ci0JCWVyciA9IGdldF92NGwyX3N0YW5kYXJkMzIoJmthcmcudjJzLCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JCWVyciA9IGdldF92NGwyX2lucHV0KCZrYXJnLnYyaSwgdXApOwotCQljb21wYXRpYmxlX2FyZyA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTUlOUFVUMzI6Ci0JCWVyciA9IGdldF92NGwyX2lucHV0MzIoJmthcmcudjJpLCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCWVyciA9IGdldF92NGwyX3R1bmVyKCZrYXJnLnYydCwgdXApOwotCQljb21wYXRpYmxlX2FyZyA9IDA7Ci0JCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NHV0lOOgotCWNhc2UgVklESU9DR0ZCVUY6Ci0JY2FzZSBWSURJT0NHRlJFUToKLSNlbmRpZgotCWNhc2UgVklESU9DX0dfRkJVRjoKLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQljb21wYXRpYmxlX2FyZyA9IDA7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DU01JQ1JPQ09ERToKLQkJZXJyID0gbWljcm9jb2RlMzIoJmthcmcudmMsIHVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAwOwotCQlicmVhazsKLSNlbmRpZgotCX07Ci0JaWYoZXJyKQotCQlnb3RvIG91dDsKLQotCWlmKGNvbXBhdGlibGVfYXJnKQotCQllcnIgPSBuYXRpdmVfaW9jdGwoZmlsZSwgcmVhbGNtZCwgKHVuc2lnbmVkIGxvbmcpdXApOwotCWVsc2UgewotCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0KLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCWVyciA9IG5hdGl2ZV9pb2N0bChmaWxlLCByZWFsY21kLCAodW5zaWduZWQgbG9uZykgJmthcmcpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQl9Ci0JaWYoZXJyID09IDApIHsKLQkJc3dpdGNoKGNtZCkgewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCQljYXNlIFZJRElPQ0dUVU5FUjoKLQkJCWVyciA9IHB1dF92aWRlb190dW5lcjMyKCZrYXJnLnZ0LCB1cCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJRElPQ0dXSU46Ci0JCQllcnIgPSBwdXRfdmlkZW9fd2luZG93MzIoJmthcmcudncsIHVwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklESU9DR0ZCVUY6Ci0JCQllcnIgPSBwdXRfdmlkZW9fYnVmZmVyMzIoJmthcmcudmIsIHVwKTsKLQkJCWJyZWFrOwotCi0jZW5kaWYKLQkJY2FzZSBWSURJT0NfR19GQlVGOgotCQkJZXJyID0gcHV0X3Y0bDJfZnJhbWVidWZmZXIzMigma2FyZy52MmZiLCB1cCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJRElPQ19HX0ZNVDoKLQkJY2FzZSBWSURJT0NfU19GTVQ6Ci0JCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JCQllcnIgPSBwdXRfdjRsMl9mb3JtYXQzMigma2FyZy52MmYsIHVwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCQljYXNlIFZJRElPQ19RQlVGOgotCQljYXNlIFZJRElPQ19EUUJVRjoKLQkJCWVyciA9IHB1dF92NGwyX2J1ZmZlcjMyKCZrYXJnLnYyYiwgdXApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURJT0NfRU5VTVNURDoKLQkJCWVyciA9IHB1dF92NGwyX3N0YW5kYXJkKCZrYXJnLnYycywgdXApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURJT0NfRU5VTVNURDMyOgotCQkJZXJyID0gcHV0X3Y0bDJfc3RhbmRhcmQzMigma2FyZy52MnMsIHVwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCQllcnIgPSBwdXRfdjRsMl90dW5lcigma2FyZy52MnQsIHVwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQkJCWVyciA9IHB1dF92NGwyX2lucHV0KCZrYXJnLnYyaSwgdXApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURJT0NfRU5VTUlOUFVUMzI6Ci0JCQllcnIgPSBwdXRfdjRsMl9pbnB1dDMyKCZrYXJnLnYyaSwgdXApOwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkJY2FzZSBWSURJT0NHRlJFUToKLSNlbmRpZgotCQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQkJZXJyID0gcHV0X3VzZXIoKCh1MzIpa2FyZy52eCksICh1MzIgX191c2VyICopdXApOwotCQkJYnJlYWs7Ci0JCX07Ci0JfQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLWxvbmcgdjRsX2NvbXBhdF9pb2N0bDMyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOwotCi0JaWYgKCFmaWxlLT5mX29wLT5pb2N0bCAmJiAhZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwpCi0JCXJldHVybiByZXQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DU1dJTjMyOgotCQlyZXQgPSBkb19zZXRfd2luZG93KGZpbGUsIGNtZCwgYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NHVFVORVIzMjoKLQljYXNlIFZJRElPQ1NUVU5FUjMyOgotCWNhc2UgVklESU9DR1dJTjMyOgotCWNhc2UgVklESU9DR0ZCVUYzMjoKLQljYXNlIFZJRElPQ1NGQlVGMzI6Ci0JY2FzZSBWSURJT0NHRlJFUTMyOgotCWNhc2UgVklESU9DU0ZSRVEzMjoKLQljYXNlIFZJRElPQ0dBVURJTzoKLQljYXNlIFZJRElPQ1NBVURJTzoKLQljYXNlIFZJRElPQ0dWQklGTVQ6Ci0JY2FzZSBWSURJT0NTVkJJRk1UOgotI2VuZGlmCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JY2FzZSBWSURJT0NfR19GTVQzMjoKLQljYXNlIFZJRElPQ19DUk9QQ0FQOgotCWNhc2UgVklESU9DX1NfQ1JPUDoKLQljYXNlIFZJRElPQ19TX0ZNVDMyOgotCWNhc2UgVklESU9DX1JFUUJVRlM6Ci0JY2FzZSBWSURJT0NfUVVFUllCVUYzMjoKLQljYXNlIFZJRElPQ19HX0ZCVUYzMjoKLQljYXNlIFZJRElPQ19TX0ZCVUYzMjoKLQljYXNlIFZJRElPQ19PVkVSTEFZMzI6Ci0JY2FzZSBWSURJT0NfUUJVRjMyOgotCWNhc2UgVklESU9DX0RRQlVGMzI6Ci0JY2FzZSBWSURJT0NfU1RSRUFNT04zMjoKLQljYXNlIFZJRElPQ19TVFJFQU1PRkYzMjoKLQljYXNlIFZJRElPQ19HX1BBUk06Ci0JY2FzZSBWSURJT0NfU19QQVJNOgotCWNhc2UgVklESU9DX0dfU1REOgotCWNhc2UgVklESU9DX1NfU1REOgotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQljYXNlIFZJRElPQ19FTlVNU1REOgotCWNhc2UgVklESU9DX0VOVU1TVEQzMjoKLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUMzI6Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQljYXNlIFZJRElPQ19TX0NUUkwzMjoKLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JY2FzZSBWSURJT0NfR19JTlBVVDMyOgotCWNhc2UgVklESU9DX1NfSU5QVVQzMjoKLQljYXNlIFZJRElPQ19UUllfRk1UMzI6Ci0JY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6Ci0JY2FzZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTOgotCWNhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6Ci0JCXJldCA9IGRvX3ZpZGVvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkvKiBMaXR0bGUgdiwgdGhlIHZpZGVvNGxpbnV4IGlvY3RscyAoY29uZmxpY3Q/KSAqLwotCWNhc2UgVklESU9DR0NBUDoKLQljYXNlIFZJRElPQ0dDSEFOOgotCWNhc2UgVklESU9DU0NIQU46Ci0JY2FzZSBWSURJT0NHUElDVDoKLQljYXNlIFZJRElPQ1NQSUNUOgotCWNhc2UgVklESU9DQ0FQVFVSRToKLQljYXNlIFZJRElPQ0tFWToKLQljYXNlIFZJRElPQ1NZTkM6Ci0JY2FzZSBWSURJT0NNQ0FQVFVSRToKLQljYXNlIFZJRElPQ0dNQlVGOgotCWNhc2UgVklESU9DR1VOSVQ6Ci0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQljYXNlIFZJRElPQ1NDQVBUVVJFOgotCi0JLyogQlRUViBzcGVjaWZpYy4uLiAqLwotCWNhc2UgX0lPVygndicsICBCQVNFX1ZJRElPQ1BSSVZBVEUrMCwgY2hhciBbMjU2XSk6Ci0JY2FzZSBfSU9SKCd2JywgIEJBU0VfVklESU9DUFJJVkFURSsxLCBjaGFyIFsyNTZdKToKLQljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzIsIHVuc2lnbmVkIGludCk6Ci0JY2FzZSBfSU9XKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSszLCBjaGFyIFsxNl0pOiAvKiBzdHJ1Y3QgYnR0dl9wbGxfaW5mbyAqLwotCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNCwgaW50KToKLQljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzUsIGludCk6Ci0JY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs2LCBpbnQpOgotCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNywgaW50KToKLQkJcmV0ID0gbmF0aXZlX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQl2NGxfcHJpbnRfaW9jdGwoImNvbXBhdF9pb2N0bDMyIiwgY21kKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1sb25nIHY0bF9jb21wYXRfaW9jdGwzMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLSNlbmRpZgotRVhQT1JUX1NZTUJPTF9HUEwodjRsX2NvbXBhdF9pb2N0bDMyKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCAxNmMwOTRmLi4wMjhhNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzMzMyw4ICszMzMzLDcgQEAKIAlyZXR1cm4gY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgY3BpYV9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgaW9jdGxuciwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjcGlhX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTMzNDcsOSArMzM0Niw5IEBACiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQogCQlyZXR1cm4gLUVJTlRSOwogCi0JLy9EQkcoImNwaWFfaW9jdGw6ICV1XG4iLCBpb2N0bG5yKTsKKwkvKiBEQkcoImNwaWFfaW9jdGw6ICV1XG4iLCBjbWQpOyAqLwogCi0Jc3dpdGNoIChpb2N0bG5yKSB7CisJc3dpdGNoIChjbWQpIHsKIAkvKiBxdWVyeSBjYXBhYmlsaXRpZXMgKi8KIAljYXNlIFZJRElPQ0dDQVA6CiAJewpAQCAtMzcyNCw3ICszNzIzLDcgQEAKIHN0YXRpYyBpbnQgY3BpYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBjcGlhX2RvX2lvY3RsKTsKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIGNwaWFfZG9faW9jdGwpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKaW5kZXggN2U3OTFiNi4uMWNjMGRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKiAgU3RyaXBwZWQgb2YgMi40IHN0dWZmIHJlYWR5IGZvciBtYWluIGtlcm5lbCBzdWJtaXQgYnkKLSAqCQlBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jCmluZGV4IDczNTExYTUuLmRjNWIwN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYwpAQCAtMjUsNyArMjUsNyBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqICBTdHJpcHBlZCBvZiAyLjQgc3R1ZmYgcmVhZHkgZm9yIG1haW4ga2VybmVsIHN1Ym1pdCBieQotICoJCUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwppbmRleCAxYzZiZDYzLi4zYzJkN2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKiAgU3RyaXBwZWQgb2YgMi40IHN0dWZmIHJlYWR5IGZvciBtYWluIGtlcm5lbCBzdWJtaXQgYnkKLSAqCQlBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTE1NzIsOCArMTU3Miw3IEBACiAgKiAgY3BpYTJfaW9jdGwKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGNwaWEyX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgaW9jdGxfbnIsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgY3BpYTJfZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0xNTkxLDcgKzE1OTAsNyBAQAogCX0KIAogCS8qIFByaW9yaXR5IGNoZWNrICovCi0Jc3dpdGNoIChpb2N0bF9ucikgeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NTV0lOOgogCWNhc2UgVklESU9DTUNBUFRVUkU6CiAJY2FzZSBWSURJT0NfU19GTVQ6CkBAIC0xNjE4LDcgKzE2MTcsNyBAQAogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2ggKGlvY3RsX25yKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJRElPQ0dDQVA6CS8qIHF1ZXJ5IGNhcGFiaWxpdGllcyAqLwogCQlyZXR2YWwgPSBpb2N0bF9jYXBfcXVlcnkoYXJnLCBjYW0pOwogCQlicmVhazsKQEAgLTE2ODMsNyArMTY4Miw3IEBACiAJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgogCWNhc2UgVklESU9DX0dfSU5QVVQ6CiAJY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJcmV0dmFsID0gaW9jdGxfaW5wdXQoaW9jdGxfbnIsIGFyZyxjYW0pOworCQlyZXR2YWwgPSBpb2N0bF9pbnB1dChjbWQsIGFyZywgY2FtKTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19FTlVNX0ZNVDoKQEAgLTE4NDMsOSArMTg0Miw5IEBACiB9CiAKIHN0YXRpYyBpbnQgY3BpYTJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgaW9jdGxfbnIsIHVuc2lnbmVkIGxvbmcgaWFyZykKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgaW9jdGxfbnIsIGlhcmcsIGNwaWEyX2RvX2lvY3RsKTsKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIGNwaWEyX2RvX2lvY3RsKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKaW5kZXggYTY2MmIxNS4uNzBmY2QwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCkBAIC0yMyw5ICsyMyw5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBkZXZpY2UgZHJpdmVyIGZvciBjczUzNDUgQXVkaW8gQURDIik7CiBNT0RVTEVfQVVUSE9SKCJIYW5zIFZlcmt1aWwiKTsKQEAgLTQwLDExMSArNDAsMTQzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGNzNTM0NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgY3M1MzQ1X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3M1MzQ1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgY3M1MzQ1X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCitzdGF0aWMgaW50IGNzNTM0NV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJaWYgKChyb3V0ZS0+aW5wdXQgJiAweGYpID4gNikgeworCQl2NGwyX2VycihzZCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3M1MzQ1X3dyaXRlKHNkLCAweDA5LCByb3V0ZS0+aW5wdXQgJiAweGYpOworCWNzNTM0NV93cml0ZShzZCwgMHgwNSwgcm91dGUtPmlucHV0ICYgMHhmMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M1MzQ1X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCWN0cmwtPnZhbHVlID0gKGNzNTM0NV9yZWFkKHNkLCAweDA0KSAmIDB4MDgpICE9IDA7CisJCXJldHVybiAwOworCX0KKwlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fVk9MVU1FKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljdHJsLT52YWx1ZSA9IGNzNTM0NV9yZWFkKHNkLCAweDA3KSAmIDB4M2Y7CisJaWYgKGN0cmwtPnZhbHVlID49IDMyKQorCQljdHJsLT52YWx1ZSA9IGN0cmwtPnZhbHVlIC0gNjQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M1MzQ1X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCWNzNTM0NV93cml0ZShzZCwgMHgwNCwgY3RybC0+dmFsdWUgPyAweDgwIDogMCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fVk9MVU1FKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3RybC0+dmFsdWUgPiAyNCB8fCBjdHJsLT52YWx1ZSA8IC0yNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3M1MzQ1X3dyaXRlKHNkLCAweDA3LCAoKHU4KWN0cmwtPnZhbHVlKSAmIDB4M2YpOworCWNzNTM0NV93cml0ZShzZCwgMHgwOCwgKCh1OCljdHJsLT52YWx1ZSkgJiAweDNmKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgY3M1MzQ1X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnZhbCA9IGNzNTM0NV9yZWFkKHNkLCByZWctPnJlZyAmIDB4MWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNTM0NV9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCisJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJY3M1MzQ1X3dyaXRlKHNkLCByZWctPnJlZyAmIDB4MWYsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjczUzNDVfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9DUzUzNDUsIDApOworfQorCitzdGF0aWMgaW50IGNzNTM0NV9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJdTggdiA9IGNzNTM0NV9yZWFkKHNkLCAweDA5KSAmIDc7CisJdTggbSA9IGNzNTM0NV9yZWFkKHNkLCAweDA0KTsKKwlpbnQgdm9sID0gY3M1MzQ1X3JlYWQoc2QsIDB4MDgpICYgMHgzZjsKKworCXY0bDJfaW5mbyhzZCwgIklucHV0OiAgJWQlc1xuIiwgdiwKKwkJCShtICYgMHg4MCkgPyAiIChtdXRlZCkiIDogIiIpOworCWlmICh2b2wgPj0gMzIpCisJCXZvbCA9IHZvbCAtIDY0OworCXY0bDJfaW5mbyhzZCwgIlZvbHVtZTogJWQgZEJcbiIsIHZvbCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3M1MzQ1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKLQkJcm91dGUtPmlucHV0ID0gY3M1MzQ1X3JlYWQoY2xpZW50LCAweDA5KSAmIDc7Ci0JCXJvdXRlLT5pbnB1dCB8PSBjczUzNDVfcmVhZChjbGllbnQsIDB4MDUpICYgMHg3MDsKLQkJcm91dGUtPm91dHB1dCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJaWYgKChyb3V0ZS0+aW5wdXQgJiAweGYpID4gNikgewotCQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIGlucHV0ICVkLlxuIiwgcm91dGUtPmlucHV0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWNzNTM0NV93cml0ZShjbGllbnQsIDB4MDksIHJvdXRlLT5pbnB1dCAmIDB4Zik7Ci0JCWNzNTM0NV93cml0ZShjbGllbnQsIDB4MDUsIHJvdXRlLT5pbnB1dCAmIDB4ZjApOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCWN0cmwtPnZhbHVlID0gKGNzNTM0NV9yZWFkKGNsaWVudCwgMHgwNCkgJiAweDA4KSAhPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IGNzNTM0NV9yZWFkKGNsaWVudCwgMHgwNykgJiAweDNmOwotCQlpZiAoY3RybC0+dmFsdWUgPj0gMzIpCi0JCQljdHJsLT52YWx1ZSA9IGN0cmwtPnZhbHVlIC0gNjQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlicmVhazsKLQkJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCWNzNTM0NV93cml0ZShjbGllbnQsIDB4MDQsIGN0cmwtPnZhbHVlID8gMHg4MCA6IDApOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoY3RybC0+dmFsdWUgPiAyNCB8fCBjdHJsLT52YWx1ZSA8IC0yNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljczUzNDVfd3JpdGUoY2xpZW50LCAweDA3LCAoKHU4KWN0cmwtPnZhbHVlKSAmIDB4M2YpOwotCQljczUzNDVfd3JpdGUoY2xpZW50LCAweDA4LCAoKHU4KWN0cmwtPnZhbHVlKSAmIDB4M2YpOwotCQlicmVhazsKLQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKLQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7Ci0KLQkJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCi0JCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJCXJlZy0+dmFsID0gY3M1MzQ1X3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4MWYpOwotCQllbHNlCi0JCQljczUzNDVfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4MWYsIHJlZy0+dmFsICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAotCQkJCWFyZywgVjRMMl9JREVOVF9DUzUzNDUsIDApOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJewotCQkJdTggdiA9IGNzNTM0NV9yZWFkKGNsaWVudCwgMHgwOSkgJiA3OwotCQkJdTggbSA9IGNzNTM0NV9yZWFkKGNsaWVudCwgMHgwNCk7Ci0JCQlpbnQgdm9sID0gY3M1MzQ1X3JlYWQoY2xpZW50LCAweDA4KSAmIDB4M2Y7Ci0KLQkJCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAgJWQlc1xuIiwgdiwKLQkJCQkgICAgICAobSAmIDB4ODApID8gIiAobXV0ZWQpIiA6ICIiKTsKLQkJCWlmICh2b2wgPj0gMzIpCi0JCQkJdm9sID0gdm9sIC0gNjQ7Ci0JCQl2NGxfaW5mbyhjbGllbnQsICJWb2x1bWU6ICVkIGRCXG4iLCB2b2wpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGNzNTM0NV9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IGNzNTM0NV9sb2dfc3RhdHVzLAorCS5nX2NoaXBfaWRlbnQgPSBjczUzNDVfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBjczUzNDVfZ19jdHJsLAorCS5zX2N0cmwgPSBjczUzNDVfc19jdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IGNzNTM0NV9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gY3M1MzQ1X3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGNzNTM0NV9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGNzNTM0NV9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBjczUzNDVfb3BzID0geworCS5jb3JlID0gJmNzNTM0NV9jb3JlX29wcywKKwkuYXVkaW8gPSAmY3M1MzQ1X2F1ZGlvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHN0YXRpYyBpbnQgY3M1MzQ1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNTIsOSArMTg0LDI1IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY3M1MzQ1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwMCk7Ci0JY3M1MzQ1X3dyaXRlKGNsaWVudCwgMHgwNCwgMHgwMSk7Ci0JY3M1MzQ1X3dyaXRlKGNsaWVudCwgMHgwOSwgMHgwMSk7CisJc2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmNzNTM0NV9vcHMpOworCisJY3M1MzQ1X3dyaXRlKHNkLCAweDAyLCAweDAwKTsKKwljczUzNDVfd3JpdGUoc2QsIDB4MDQsIDB4MDEpOworCWNzNTM0NV93cml0ZShzZCwgMHgwOSwgMHgwMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgY3M1MzQ1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZShzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MSw1ICsyMTksNiBAQAogCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9DUzUzNDUsCiAJLmNvbW1hbmQgPSBjczUzNDVfY29tbWFuZCwKIAkucHJvYmUgPSBjczUzNDVfcHJvYmUsCisJLnJlbW92ZSA9IGNzNTM0NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gY3M1MzQ1X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwppbmRleCBjNDQ0NDUwLi5jYjY1ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIApAQCAtNDcsODYgKzQ3LDEwNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGNzNTNsMzJhX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW50IGNzNTNsMzJhX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBjczUzbDMyYV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbnQgY3M1M2wzMmFfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKK3N0YXRpYyBpbnQgY3M1M2wzMmFfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCS8qIFRoZXJlIGFyZSAyIHBoeXNpY2FsIGlucHV0cywgYnV0IHRoZSBzZWNvbmQgaW5wdXQgY2FuIGJlCisJICAgcGxhY2VkIGluIHR3byBtb2RlcywgdGhlIGZpcnN0IG1vZGUgYnlwYXNzZXMgdGhlIFBHQSAoZ2FpbiksCisJICAgdGhlIHNlY29uZCBnb2VzIHRocm91Z2ggdGhlIFBHQS4gSGVuY2UgdGhlcmUgYXJlIHRocmVlCisJICAgcG9zc2libGUgaW5wdXRzIHRvIGNob29zZSBmcm9tLiAqLworCWlmIChyb3V0ZS0+aW5wdXQgPiAyKSB7CisJCXY0bDJfZXJyKHNkLCAiSW52YWxpZCBpbnB1dCAlZC5cbiIsIHJvdXRlLT5pbnB1dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljczUzbDMyYV93cml0ZShzZCwgMHgwMSwgMHgwMSArIChyb3V0ZS0+aW5wdXQgPDwgNCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCWN0cmwtPnZhbHVlID0gKGNzNTNsMzJhX3JlYWQoc2QsIDB4MDMpICYgMHhjMCkgIT0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCisJCXJldHVybiAtRUlOVkFMOworCWN0cmwtPnZhbHVlID0gKHM4KWNzNTNsMzJhX3JlYWQoc2QsIDB4MDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCWNzNTNsMzJhX3dyaXRlKHNkLCAweDAzLCBjdHJsLT52YWx1ZSA/IDB4ZjAgOiAweDMwKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjdHJsLT52YWx1ZSA+IDEyIHx8IGN0cmwtPnZhbHVlIDwgLTk2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwljczUzbDMyYV93cml0ZShzZCwgMHgwNCwgKHU4KSBjdHJsLT52YWx1ZSk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDUsICh1OCkgY3RybC0+dmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNTNsMzJhX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsCisJCQljaGlwLCBWNEwyX0lERU5UX0NTNTNsMzJBLCAwKTsKK30KKworc3RhdGljIGludCBjczUzbDMyYV9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJdTggdiA9IGNzNTNsMzJhX3JlYWQoc2QsIDB4MDEpOworCXU4IG0gPSBjczUzbDMyYV9yZWFkKHNkLCAweDAzKTsKKwlzOCB2b2wgPSBjczUzbDMyYV9yZWFkKHNkLCAweDA0KTsKKworCXY0bDJfaW5mbyhzZCwgIklucHV0OiAgJWQlc1xuIiwgKHYgPj4gNCkgJiAzLAorCQkJKG0gJiAweEMwKSA/ICIgKG11dGVkKSIgOiAiIik7CisJdjRsMl9pbmZvKHNkLCAiVm9sdW1lOiAlZCBkQlxuIiwgdm9sKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjczUzbDMyYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkc6Ci0JCXJvdXRlLT5pbnB1dCA9IChjczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwMSkgPj4gNCkgJiAzOwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgotCQkvKiBUaGVyZSBhcmUgMiBwaHlzaWNhbCBpbnB1dHMsIGJ1dCB0aGUgc2Vjb25kIGlucHV0IGNhbiBiZQotCQkgICBwbGFjZWQgaW4gdHdvIG1vZGVzLCB0aGUgZmlyc3QgbW9kZSBieXBhc3NlcyB0aGUgUEdBIChnYWluKSwKLQkJICAgdGhlIHNlY29uZCBnb2VzIHRocm91Z2ggdGhlIFBHQS4gSGVuY2UgdGhlcmUgYXJlIHRocmVlCi0JCSAgIHBvc3NpYmxlIGlucHV0cyB0byBjaG9vc2UgZnJvbS4gKi8KLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDIpIHsKLQkJCXY0bF9lcnIoY2xpZW50LCAiSW52YWxpZCBpbnB1dCAlZC5cbiIsIHJvdXRlLT5pbnB1dCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDEgKyAocm91dGUtPmlucHV0IDw8IDQpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7Ci0JCQljdHJsLT52YWx1ZSA9IChjczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwMykgJiAweGMwKSAhPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IChzOCljczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwNCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAzLCBjdHJsLT52YWx1ZSA/IDB4ZjAgOiAweDMwKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGN0cmwtPnZhbHVlID4gMTIgfHwgY3RybC0+dmFsdWUgPCAtOTYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA0LCAodTgpIGN0cmwtPnZhbHVlKTsKLQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA1LCAodTgpIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsCi0JCQkJYXJnLCBWNEwyX0lERU5UX0NTNTNsMzJBLCAwKTsKLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXsKLQkJCXU4IHYgPSBjczUzbDMyYV9yZWFkKGNsaWVudCwgMHgwMSk7Ci0JCQl1OCBtID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDMpOwotCQkJczggdm9sID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDQpOwotCi0JCQl2NGxfaW5mbyhjbGllbnQsICJJbnB1dDogICVkJXNcbiIsICh2ID4+IDQpICYgMywKLQkJCQkgICAgICAobSAmIDB4QzApID8gIiAobXV0ZWQpIiA6ICIiKTsKLQkJCXY0bF9pbmZvKGNsaWVudCwgIlZvbHVtZTogJWQgZEJcbiIsIHZvbCk7Ci0JCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOworCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3M1M2wzMmFfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBjczUzbDMyYV9sb2dfc3RhdHVzLAorCS5nX2NoaXBfaWRlbnQgPSBjczUzbDMyYV9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGNzNTNsMzJhX2dfY3RybCwKKwkuc19jdHJsID0gY3M1M2wzMmFfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgY3M1M2wzMmFfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBjczUzbDMyYV9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBjczUzbDMyYV9vcHMgPSB7CisJLmNvcmUgPSAmY3M1M2wzMmFfY29yZV9vcHMsCisJLmF1ZGlvID0gJmNzNTNsMzJhX2F1ZGlvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIC8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLwogCiAvKgpAQCAtMTM3LDYgKzE1Nyw3IEBACiBzdGF0aWMgaW50IGNzNTNsMzJhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwpAQCAtMTQ5LDMyICsxNzAsNDYgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgewotCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIGkpOworCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZjczUzbDMyYV9vcHMpOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlJlYWQgUmVnICVkICUwMnhcbiIsIGksIHYpOworCWZvciAoaSA9IDE7IGkgPD0gNzsgaSsrKSB7CisJCXU4IHYgPSBjczUzbDMyYV9yZWFkKHNkLCBpKTsKKworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJSZWFkIFJlZyAlZCAlMDJ4XG4iLCBpLCB2KTsKIAl9CiAKIAkvKiBTZXQgY3M1M2wzMmEgaW50ZXJuYWwgcmVnaXN0ZXIgZm9yIEFkYXB0ZWMgMjAxMC8yNDEwIHNldHVwICovCiAKLQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDEsICh1OCkgMHgyMSk7Ci0JY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAyLCAodTgpIDB4MjkpOwotCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMywgKHU4KSAweDMwKTsKLQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDQsICh1OCkgMHgwMCk7Ci0JY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA1LCAodTgpIDB4MDApOwotCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwNiwgKHU4KSAweDAwKTsKLQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDcsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDEsICh1OCkgMHgyMSk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDIsICh1OCkgMHgyOSk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDMsICh1OCkgMHgzMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDQsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDUsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDYsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDcsICh1OCkgMHgwMCk7CiAKIAkvKiBEaXNwbGF5IHJlc3VsdHMsIHNob3VsZCBiZSAweDIxLDB4MjksMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwICovCiAKIAlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgewotCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIGkpOworCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChzZCwgaSk7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiUmVhZCBSZWcgJWQgJTAyeFxuIiwgaSwgdik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlJlYWQgUmVnICVkICUwMnhcbiIsIGksIHYpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjczUzbDMyYV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUoc2QpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgY3M1M2wzMmFfaWRbXSA9IHsKIAl7ICJjczUzbDMyYSIsIDAgfSwKIAl7IH0KQEAgLTE4NSw2ICsyMjAsNyBAQAogCS5uYW1lID0gImNzNTNsMzJhIiwKIAkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEsCiAJLmNvbW1hbmQgPSBjczUzbDMyYV9jb21tYW5kLAorCS5yZW1vdmUgPSBjczUzbDMyYV9yZW1vdmUsCiAJLnByb2JlID0gY3M1M2wzMmFfcHJvYmUsCiAJLmlkX3RhYmxlID0gY3M1M2wzMmFfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKaW5kZXggMGI1NTgzNy4uYTJmMGFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBjeDI1ODQwLWF1ZGlvLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzAsOTggKzMxLDE2NSBAQAogCWlmIChmcmVxICE9IDMyMDAwICYmIGZyZXEgIT0gNDQxMDAgJiYgZnJlcSAhPSA0ODAwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDEwICovCi0JY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NTApOworCS8qCisJICogVGhlIFBMTCBwYXJhbWV0ZXJzIGFyZSBiYXNlZCBvbiB0aGUgZXh0ZXJuYWwgY3J5c3RhbCBmcmVxdWVuY3kgdGhhdAorCSAqIHdvdWxkIGlkZWFsbHkgYmU6CisJICoKKwkgKiBOVFNDIENvbG9yIHN1YmNhcnJpZXIgZnJlcSAqIDggPQorCSAqIAk0LjUgTUh6LzI4NiAqIDQ1NS8yICogOCA9IDI4LjYzNjM2MzYzLi4uIE1IegorCSAqCisJICogVGhlIGFjY2lkZW50cyBvZiBoaXN0b3J5IGFuZCByYXRpb25hbGUgdGhhdCBleHBsYWluIGZyb20gd2hlcmUgdGhpcworCSAqIGNvbWJpbmF0aW9uIG9mIG1hZ2ljIG51bWJlcnMgb3JpZ2luYXRlIGNhbiBiZSBmb3VuZCBpbjoKKwkgKgorCSAqIFsxXSBBYnJhaGFtcywgSS4gQy4sICJDaG9pY2Ugb2YgQ2hyb21pbmFuY2UgU3ViY2FycmllciBGcmVxdWVuY3kgaW4KKwkgKiB0aGUgTlRTQyBTdGFuZGFyZHMiLCBQcm9jZWVkaW5ncyBvZiB0aGUgSS1SLUUsIEphbnVhcnkgMTk1NCwgcHAgNzktODAKKwkgKgorCSAqIFsyXSBBYnJhaGFtcywgSS4gQy4sICJUaGUgJ0ZyZXF1ZW5jeSBJbnRlcmxlYXZpbmcnIFByaW5jaXBsZSBpbiB0aGUKKwkgKiBOVFNDIFN0YW5kYXJkcyIsIFByb2NlZWRpbmdzIG9mIHRoZSBJLVItRSwgSmFudWFyeSAxOTU0LCBwcCA4MS04MworCSAqCisJICogQXMgTWlrZSBCcmFkbGV5IGhhcyByaWdodGx5IHBvaW50ZWQgb3V0LCBpdCdzIG5vdCB0aGUgZXhhY3QgY3J5c3RhbAorCSAqIGZyZXF1ZW5jeSB0aGF0IG1hdHRlcnMsIG9ubHkgdGhhdCBhbGwgcGFydHMgb2YgdGhlIGRyaXZlciBhbmQKKwkgKiBmaXJtd2FyZSBhcmUgdXNpbmcgdGhlIHNhbWUgdmFsdWUgKGNsb3NlIHRvIHRoZSBpZGVhbCB2YWx1ZSkuCisJICoKKwkgKiBTaW5jZSBJIGhhdmUgYSBzdHJvbmcgc3VzcGljaW9uIHRoYXQsIGlmIHRoZSBmaXJtd2FyZSBldmVyIGFzc3VtZXMgYQorCSAqIGNyeXN0YWwgdmFsdWUgYXQgYWxsLCBpdCB3aWxsIGFzc3VtZSAyOC42MzYzNjAgTUh6LCB0aGUgY3J5c3RhbAorCSAqIGZyZXEgdXNlZCBpbiBjYWxjdWxhdGlvbnMgaW4gdGhpcyBkcml2ZXIgd2lsbCBiZToKKwkgKgorCSAqCXh0YWxfZnJlcSA9IDI4LjYzNjM2MCBNSHoKKwkgKgorCSAqIGFuIGVycm9yIG9mIGxlc3MgdGhhbiAwLjEzIHBwbSB3aGljaCBpcyB3YXksIHdheSBiZXR0ZXIgdGhhbiBhbnkgb2ZmCisJICogdGhlIHNoZWxmIGNyeXN0YWwgd2lsbCBoYXZlIGZvciBhY2N1cmFjeSBhbnl3YXkuCisJICoKKwkgKiBCZWxvdyBJIGFpbSB0byBydW4gdGhlIFBMTHMnIFZDT3MgbmVhciA0MDAgTUh6IHRvIG1pbmltemUgZXJyb3IuCisJICoKKwkgKiBNYW55IHRoYW5rcyB0byBKZWZmIENhbXBiZWxsIGFuZCBNaWtlIEJyYWRsZXkgZm9yIHRoZWlyIGV4dGVuc2l2ZQorCSAqIGludmVzdGlnYXRpb24sIGV4cGVyaW1lbnRhdGlvbiwgdGVzdGluZywgYW5kIHN1Z2dlc3RlZCBzb2x1dGlvbnMgb2YKKwkgKiBvZiBhdWRpby92aWRlbyBzeW5jIHByb2JsZW1zIHdpdGggU1ZpZGVvIGFuZCBDVkJTIGNhcHR1cmVzLgorCSAqLwogCiAJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKIAkJc3dpdGNoIChmcmVxKSB7CiAJCWNhc2UgMzIwMDA6Ci0JCQkvKiBWSURfUExMIGFuZCBBVVhfUExMICovCi0JCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMDgsIDB4MTQwODA0MGYpOworCQkJLyoKKwkJCSAqIFZJRF9QTEwgSW50ZWdlciA9IDB4MGYsIFZJRF9QTEwgUG9zdCBEaXZpZGVyID0gMHgwNAorCQkJICogQVVYX1BMTCBJbnRlZ2VyID0gMHgwZCwgQVVYIFBMTCBQb3N0IERpdmlkZXIgPSAweDIwCisJCQkgKi8KKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwOCwgMHgyMDBkMDQwZik7CiAKLQkJCS8qIEFVWF9QTExfRlJBQyAqLwotCQkJLyogMHg4Ljk1MDQzMThhICogMjgsNjM2LDM2My42MzYgLyAweDE0ID0gMzIwMDAgKiAzODQgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDExMCwgMHgwMTJhMDg2Myk7CisJCQkvKiBWSURfUExMIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KKwkJCS8qIHh0YWwgKiAweGYuMTVmMTdmMC80ID0gMTA4IE1IejogNDMyIE1IeiBwcmUtcG9zdGRpdiovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMGMsIDB4MDAyYmUyZmUpOworCisJCQkvKiBBVVhfUExMIEZyYWN0aW9uID0gMHgxNzY3NDBjICovCisJCQkvKiB4dGFsICogMHhkLmJiM2EwNjAvMHgyMCA9IDMyMDAwICogMzg0OiAzOTMgTUh6IHAtcGQqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTEwLCAweDAxNzY3NDBjKTsKIAogCQkJLyogc3JjMy80LzZfY3RsICovCi0JCQkvKiAweDEuZjc3ZiA9ICg0ICogMTU3MzQuMjYpIC8gMzIwMDAgKi8KKwkJCS8qIDB4MS5mNzdmID0gKDQgKiB4dGFsLzgqMi80NTUpIC8gMzIwMDAgKi8KIAkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDkwMCwgMHgwODAxZjc3Zik7CiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MDQsIDB4MDgwMWY3N2YpOwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4OTBjLCAweDA4MDFmNzdmKTsKIAotCQkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxNCAqLwotCQkJY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NTQpOworCQkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgyMCAqLworCQkJY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NjApOwogCiAJCQkvKiBBVURfQ09VTlQgPSAweDJmZmYgPSA4IHNhbXBsZXMgKiA0ICogMzg0IC0gMSAqLwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTJjLCAweDExMjAyZmZmKTsKIAogCQkJLyoKLQkJCSAqIEVOX0FWX0xPQ0sgPSAxCisJCQkgKiBFTl9BVl9MT0NLID0gMAogCQkJICogVklEX0NPVU5UID0gMHgwZDJlZjggPSAxMDc5OTkuMDAwICogOCA9CiAJCQkgKiAgKCg4IHNhbXBsZXMvMzIsMDAwKSAqICgxMyw1MDAsMDAwICogOCkgKiA0IC0gMSkgKiA4CiAJCQkgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEyOCwgMHhhMTBkMmVmOCk7CisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMjgsIDB4YTAwZDJlZjgpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSA0NDEwMDoKLQkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwOCwgMHgxMDA5MDQwZik7CisJCQkvKgorCQkJICogVklEX1BMTCBJbnRlZ2VyID0gMHgwZiwgVklEX1BMTCBQb3N0IERpdmlkZXIgPSAweDA0CisJCQkgKiBBVVhfUExMIEludGVnZXIgPSAweDBlLCBBVVggUExMIFBvc3QgRGl2aWRlciA9IDB4MTgKKwkJCSAqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTA4LCAweDE4MGUwNDBmKTsKIAotCQkJLyogQVVYX1BMTF9GUkFDICovCi0JCQkvKiAweDkuNzYzNWU3ICogMjgsNjM2LDM2My42MyAvIDB4MTAgPSA0NDEwMCAqIDM4NCAqLwotCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTEwLCAweDAwZWM2YmNlKTsKKwkJCS8qIFZJRF9QTEwgRnJhY3Rpb24gPSAweDJiZTJmZSAqLworCQkJLyogeHRhbCAqIDB4Zi4xNWYxN2YwLzQgPSAxMDggTUh6OiA0MzIgTUh6IHByZS1wb3N0ZGl2Ki8KKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwYywgMHgwMDJiZTJmZSk7CisKKwkJCS8qIEFVWF9QTEwgRnJhY3Rpb24gPSAweDA2MmExZjIgKi8KKwkJCS8qIHh0YWwgKiAweGUuMzE1MGY5MC8weDE4ID0gNDQxMDAgKiAzODQ6IDQwNiBNSHogcC1wZCovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMTAsIDB4MDA2MmExZjIpOwogCiAJCQkvKiBzcmMzLzQvNl9jdGwgKi8KLQkJCS8qIDB4MS42ZDU5ID0gKDQgKiAxNTczNC4yNikgLyA0NDEwMCAqLworCQkJLyogMHgxLjZkNTkgPSAoNCAqIHh0YWwvOCoyLzQ1NSkgLyA0NDEwMCAqLwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4OTAwLCAweDA4MDE2ZDU5KTsKIAkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDkwNCwgMHgwODAxNmQ1OSk7CiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MGMsIDB4MDgwMTZkNTkpOwogCisJCQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDE4ICovCisJCQljeDE4X2F2X3dyaXRlKGN4LCAweDEyNywgMHg1OCk7CisKIAkJCS8qIEFVRF9DT1VOVCA9IDB4OTJmZiA9IDQ5IHNhbXBsZXMgKiAyICogMzg0IC0gMSAqLwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTJjLCAweDExMjA5MmZmKTsKIAogCQkJLyoKLQkJCSAqIEVOX0FWX0xPQ0sgPSAxCisJCQkgKiBFTl9BVl9MT0NLID0gMAogCQkJICogVklEX0NPVU5UID0gMHgxZDRiZjggPSAyMzk5OTkuMDAwICogOCA9CiAJCQkgKiAgKCg0OSBzYW1wbGVzLzQ0LDEwMCkgKiAoMTMsNTAwLDAwMCAqIDgpICogMiAtIDEpICogOAogCQkJICovCi0JCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMjgsIDB4YTExZDRiZjgpOworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTI4LCAweGEwMWQ0YmY4KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgNDgwMDA6Ci0JCQkvKiBWSURfUExMIGFuZCBBVVhfUExMICovCi0JCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMDgsIDB4MTAwYTA0MGYpOworCQkJLyoKKwkJCSAqIFZJRF9QTEwgSW50ZWdlciA9IDB4MGYsIFZJRF9QTEwgUG9zdCBEaXZpZGVyID0gMHgwNAorCQkJICogQVVYX1BMTCBJbnRlZ2VyID0gMHgwZSwgQVVYIFBMTCBQb3N0IERpdmlkZXIgPSAweDE2CisJCQkgKi8KKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwOCwgMHgxNjBlMDQwZik7CiAKLQkJCS8qIEFVWF9QTExfRlJBQyAqLwotCQkJLyogMHhhLjRjNmI2ZWEgKiAyOCw2MzYsMzYzLjYzIC8gMHgxMCA9IDQ4MDAwICogMzg0ICovCi0JCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMTAsIDB4MDA5OGQ2ZGQpOworCQkJLyogVklEX1BMTCBGcmFjdGlvbiA9IDB4MmJlMmZlICovCisJCQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogcHJlLXBvc3RkaXYqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTBjLCAweDAwMmJlMmZlKTsKKworCQkJLyogQVVYX1BMTCBGcmFjdGlvbiA9IDB4MDUyMjdhZCAqLworCQkJLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBwLXBkKi8KKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDExMCwgMHgwMDUyMjdhZCk7CiAKIAkJCS8qIHNyYzMvNC82X2N0bCAqLwotCQkJLyogMHgxLjRmYWEgPSAoNCAqIDE1NzM0LjI2KSAvIDQ4MDAwICovCisJCQkvKiAweDEuNGZhYSA9ICg0ICogeHRhbC84KjIvNDU1KSAvIDQ4MDAwICovCiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MDAsIDB4MDgwMTRmYWEpOwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4OTA0LCAweDA4MDE0ZmFhKTsKIAkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDkwYywgMHgwODAxNGZhYSk7CiAKKwkJCS8qIFNBX01DTEtfU0VMPTEsIFNBX01DTEtfRElWPTB4MTYgKi8KKwkJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTI3LCAweDU2KTsKKwogCQkJLyogQVVEX0NPVU5UID0gMHg1ZmZmID0gNCBzYW1wbGVzICogMTYgKiAzODQgLSAxICovCiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMmMsIDB4MTEyMDVmZmYpOwogCiAJCQkvKgotCQkJICogRU5fQVZfTE9DSyA9IDEKKwkJCSAqIEVOX0FWX0xPQ0sgPSAwCiAJCQkgKiBWSURfQ09VTlQgPSAweDExOTNmOCA9IDE0Mzk5OS4wMDAgKiA4ID0KIAkJCSAqICAoKDQgc2FtcGxlcy80OCwwMDApICogKDEzLDUwMCwwMDAgKiA4KSAqIDE2IC0gMSkgKiA4CiAJCQkgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEyOCwgMHhhMTExOTNmOCk7CisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMjgsIDB4YTAxMTkzZjgpOwogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKGZyZXEpIHsKIAkJY2FzZSAzMjAwMDoKLQkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwOCwgMHgxZTA4MDQwZik7CisJCQkvKgorCQkJICogVklEX1BMTCBJbnRlZ2VyID0gMHgwZiwgVklEX1BMTCBQb3N0IERpdmlkZXIgPSAweDA0CisJCQkgKiBBVVhfUExMIEludGVnZXIgPSAweDBkLCBBVVggUExMIFBvc3QgRGl2aWRlciA9IDB4MzAKKwkJCSAqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTA4LCAweDMwMGQwNDBmKTsKIAotCQkJLyogQVVYX1BMTF9GUkFDICovCi0JCQkvKiAweDguOTUwNDMxOCAqIDI4LDYzNiwzNjMuNjMgLyAweDFlID0gMzIwMDAgKiAyNTYgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDExMCwgMHgwMTJhMDg2Myk7CisJCQkvKiBWSURfUExMIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KKwkJCS8qIHh0YWwgKiAweGYuMTVmMTdmMC80ID0gMTA4IE1IejogNDMyIE1IeiBwcmUtcG9zdGRpdiovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMGMsIDB4MDAyYmUyZmUpOworCisJCQkvKiBBVVhfUExMIEZyYWN0aW9uID0gMHgxNzY3NDBjICovCisJCQkvKiB4dGFsICogMHhkLmJiM2EwNjAvMHgzMCA9IDMyMDAwICogMjU2OiAzOTMgTUh6IHAtcGQqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTEwLCAweDAxNzY3NDBjKTsKIAogCQkJLyogc3JjMV9jdGwgKi8KIAkJCS8qIDB4MS4wMDAwID0gMzIwMDAvMzIwMDAgKi8KQEAgLTEzMywyNyArMjAxLDM0IEBACiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MDQsIDB4MDgwMjAwMDApOwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4OTBjLCAweDA4MDIwMDAwKTsKIAotCQkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxNCAqLwotCQkJY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NTQpOworCQkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgzMCAqLworCQkJY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NzApOwogCiAJCQkvKiBBVURfQ09VTlQgPSAweDFmZmYgPSA4IHNhbXBsZXMgKiA0ICogMjU2IC0gMSAqLwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTJjLCAweDExMjAxZmZmKTsKIAogCQkJLyoKLQkJCSAqIEVOX0FWX0xPQ0sgPSAxCisJCQkgKiBFTl9BVl9MT0NLID0gMAogCQkJICogVklEX0NPVU5UID0gMHgwZDJlZjggPSAxMDc5OTkuMDAwICogOCA9CiAJCQkgKiAgKCg4IHNhbXBsZXMvMzIsMDAwKSAqICgxMyw1MDAsMDAwICogOCkgKiA0IC0gMSkgKiA4CiAJCQkgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEyOCwgMHhhMTBkMmVmOCk7CisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMjgsIDB4YTAwZDJlZjgpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSA0NDEwMDoKLQkJCS8qIFZJRF9QTEwgYW5kIEFVWF9QTEwgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwOCwgMHgxODA5MDQwZik7CisJCQkvKgorCQkJICogVklEX1BMTCBJbnRlZ2VyID0gMHgwZiwgVklEX1BMTCBQb3N0IERpdmlkZXIgPSAweDA0CisJCQkgKiBBVVhfUExMIEludGVnZXIgPSAweDBlLCBBVVggUExMIFBvc3QgRGl2aWRlciA9IDB4MjQKKwkJCSAqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTA4LCAweDI0MGUwNDBmKTsKIAotCQkJLyogQVVYX1BMTF9GUkFDICovCi0JCQkvKiAweDkuNzYzNWU3NCAqIDI4LDYzNiwzNjMuNjMgLyAweDE4ID0gNDQxMDAgKiAyNTYgKi8KLQkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDExMCwgMHgwMGVjNmJjZSk7CisJCQkvKiBWSURfUExMIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KKwkJCS8qIHh0YWwgKiAweGYuMTVmMTdmMC80ID0gMTA4IE1IejogNDMyIE1IeiBwcmUtcG9zdGRpdiovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMGMsIDB4MDAyYmUyZmUpOworCisJCQkvKiBBVVhfUExMIEZyYWN0aW9uID0gMHgwNjJhMWYyICovCisJCQkvKiB4dGFsICogMHhlLjMxNTBmOTAvMHgyNCA9IDQ0MTAwICogMjU2OiA0MDYgTUh6IHAtcGQqLworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTEwLCAweDAwNjJhMWYyKTsKIAogCQkJLyogc3JjMV9jdGwgKi8KIAkJCS8qIDB4MS42MGNkID0gNDQxMDAvMzIwMDAgKi8KQEAgLTE2NSwyNCArMjQwLDM0IEBACiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MDQsIDB4MDgwMTczODUpOwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4OTBjLCAweDA4MDE3Mzg1KTsKIAorCQkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgyNCAqLworCQkJY3gxOF9hdl93cml0ZShjeCwgMHgxMjcsIDB4NjQpOworCiAJCQkvKiBBVURfQ09VTlQgPSAweDYxZmYgPSA0OSBzYW1wbGVzICogMiAqIDI1NiAtIDEgKi8KIAkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEyYywgMHgxMTIwNjFmZik7CiAKIAkJCS8qCi0JCQkgKiBFTl9BVl9MT0NLID0gMQorCQkJICogRU5fQVZfTE9DSyA9IDAKIAkJCSAqIFZJRF9DT1VOVCA9IDB4MWQ0YmY4ID0gMjM5OTk5LjAwMCAqIDggPQogCQkJICogICgoNDkgc2FtcGxlcy80NCwxMDApICogKDEzLDUwMCwwMDAgKiA4KSAqIDIgLSAxKSAqIDgKIAkJCSAqLwotCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTI4LCAweGExMWQ0YmY4KTsKKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEyOCwgMHhhMDFkNGJmOCk7CiAJCQlicmVhazsKIAogCQljYXNlIDQ4MDAwOgotCQkJLyogVklEX1BMTCBhbmQgQVVYX1BMTCAqLwotCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTA4LCAweDE4MGEwNDBmKTsKKwkJCS8qCisJCQkgKiBWSURfUExMIEludGVnZXIgPSAweDBmLCBWSURfUExMIFBvc3QgRGl2aWRlciA9IDB4MDQKKwkJCSAqIEFVWF9QTEwgSW50ZWdlciA9IDB4MGQsIEFVWCBQTEwgUG9zdCBEaXZpZGVyID0gMHgyMAorCQkJICovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMDgsIDB4MjAwZDA0MGYpOwogCi0JCQkvKiBBVVhfUExMX0ZSQUMgKi8KLQkJCS8qIDB4YS40YzZiNmVhICogMjgsNjM2LDM2My42MyAvIDB4MTggPSA0ODAwMCAqIDI1NiAqLwotCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTEwLCAweDAwOThkNmRkKTsKKwkJCS8qIFZJRF9QTEwgRnJhY3Rpb24gPSAweDJiZTJmZSAqLworCQkJLyogeHRhbCAqIDB4Zi4xNWYxN2YwLzQgPSAxMDggTUh6OiA0MzIgTUh6IHByZS1wb3N0ZGl2Ki8KKwkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDEwYywgMHgwMDJiZTJmZSk7CisKKwkJCS8qIEFVWF9QTEwgRnJhY3Rpb24gPSAweDE3Njc0MGMgKi8KKwkJCS8qIHh0YWwgKiAweGQuYmIzYTA2MC8weDIwID0gNDgwMDAgKiAyNTY6IDM5MyBNSHogcC1wZCovCisJCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMTAsIDB4MDE3Njc0MGMpOwogCiAJCQkvKiBzcmMxX2N0bCAqLwogCQkJLyogMHgxLjgwMDAgPSA0ODAwMC8zMjAwMCAqLwpAQCAtMTk0LDE1ICsyNzksMTggQEAKIAkJCWN4MThfYXZfd3JpdGU0KGN4LCAweDkwNCwgMHgwODAxNTU1NSk7CiAJCQljeDE4X2F2X3dyaXRlNChjeCwgMHg5MGMsIDB4MDgwMTU1NTUpOwogCisJCQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDIwICovCisJCQljeDE4X2F2X3dyaXRlKGN4LCAweDEyNywgMHg2MCk7CisKIAkJCS8qIEFVRF9DT1VOVCA9IDB4M2ZmZiA9IDQgc2FtcGxlcyAqIDE2ICogMjU2IC0gMSAqLwogCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTJjLCAweDExMjAzZmZmKTsKIAogCQkJLyoKLQkJCSAqIEVOX0FWX0xPQ0sgPSAxCisJCQkgKiBFTl9BVl9MT0NLID0gMAogCQkJICogVklEX0NPVU5UID0gMHgxMTkzZjggPSAxNDM5OTkuMDAwICogOCA9CiAJCQkgKiAgKCg0IHNhbXBsZXMvNDgsMDAwKSAqICgxMyw1MDAsMDAwICogOCkgKiAxNiAtIDEpICogOAogCQkJICovCi0JCQljeDE4X2F2X3dyaXRlNChjeCwgMHgxMjgsIDB4YTExMTkzZjgpOworCQkJY3gxOF9hdl93cml0ZTQoY3gsIDB4MTI4LCAweGEwMTE5M2Y4KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjE1LDEyICszMDMsMTUgQEAKIHZvaWQgY3gxOF9hdl9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwl1OCB2OwogCiAJLyogc3RvcCBtaWNyb2NvbnRyb2xsZXIgKi8KLQljeDE4X2F2X2FuZF9vcihjeCwgMHg4MDMsIH4weDEwLCAwKTsKKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgJiB+MHgxMDsKKwljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOwogCiAJLyogYXNzZXJ0IHNvZnQgcmVzZXQgKi8KLQljeDE4X2F2X2FuZF9vcihjeCwgMHg4MTAsIH4weDEsIDB4MDEpOworCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSB8IDB4MDE7CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKIAogCS8qIE11dGUgZXZlcnl0aGluZyB0byBwcmV2ZW50IHRoZSBQRkZUISAqLwogCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKQEAgLTI0MCwxMiArMzMxLDE0IEBACiAJc2V0X2F1ZGNsa19mcmVxKGN4LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogCiAJLyogZGVhc3NlcnQgc29mdCByZXNldCAqLwotCWN4MThfYXZfYW5kX29yKGN4LCAweDgxMCwgfjB4MSwgMHgwMCk7CisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApICYgfjB4MDE7CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKIAogCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CiAJCS8qIFdoZW4gdGhlIG1pY3JvY29udHJvbGxlciBkZXRlY3RzIHRoZQogCQkgKiBhdWRpbyBmb3JtYXQsIGl0IHdpbGwgdW5tdXRlIHRoZSBsaW5lcyAqLwotCQljeDE4X2F2X2FuZF9vcihjeCwgMHg4MDMsIH4weDEwLCAweDEwKTsKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpIHwgMHgxMDsKKwkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKIAl9CiB9CiAKQEAgLTM0NywxOSArNDQwLDIzIEBACiBzdGF0aWMgdm9pZCBzZXRfbXV0ZShzdHJ1Y3QgY3gxOCAqY3gsIGludCBtdXRlKQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJdTggdjsKIAogCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CiAJCS8qIE11c3QgdHVybiBvZmYgbWljcm9jb250cm9sbGVyIGluIG9yZGVyIHRvIG11dGUgc291bmQuCiAJCSAqIE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGJlc3QgbWV0aG9kLCBidXQgaXQgZG9lcyB3b3JrLgogCQkgKiBJZiB0aGUgbWljcm9jb250cm9sbGVyIGlzIHJ1bm5pbmcsIHRoZW4gaXQgd2lsbCB1bmRvIGFueQogCQkgKiBjaGFuZ2VzIHRvIHRoZSBtdXRlIHJlZ2lzdGVyLiAqLworCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMyk7CiAJCWlmIChtdXRlKSB7CiAJCQkvKiBkaXNhYmxlIG1pY3JvY29udHJvbGxlciAqLwotCQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODAzLCB+MHgxMCwgMHgwMCk7CisJCQl2ICY9IH4weDEwOworCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKIAkJCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGVuYWJsZSBtaWNyb2NvbnRyb2xsZXIgKi8KLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwMywgfjB4MTAsIDB4MTApOworCQkJdiB8PSAweDEwOworCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIFNSQzFfTVVURV9FTiAqLwpAQCAtMzc1LDE2ICs0NzIsMjYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CisJeworCQl1OCB2OwogCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewotCQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODAzLCB+MHgxMCwgMCk7CisJCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgJiB+MHgxMDsKKwkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CiAJCQljeDE4X2F2X3dyaXRlKGN4LCAweDhkMywgMHgxZik7CiAJCX0KLQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODEwLCB+MHgxLCAxKTsKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApIHwgMHgxOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOworCiAJCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjeCwgKih1MzIgKilhcmcpOwotCQljeDE4X2F2X2FuZF9vcihjeCwgMHg4MTAsIH4weDEsIDApOwotCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikKLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwMywgfjB4MTAsIDB4MTApOworCisJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSAmIH4weDE7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7CisJCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CisJCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgfCAweDEwOworCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKKwkJfQogCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWNhc2UgVklESU9DX0dfQ1RSTDoKIAkJc3dpdGNoIChjdHJsLT5pZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCmluZGV4IDczZjUxNDEuLjBiMWM4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgRGVyaXZlZCBmcm9tIGN4MjU4NDAtY29yZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTM2LDEyICszNywzMSBAQAogCXJldHVybiAwOwogfQogCitpbnQgY3gxOF9hdl93cml0ZV9leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUsIHU4IGV2YWwsIHU4IG1hc2spCit7CisJdTMyIHJlZyA9IDB4YzQwMDAwICsgKGFkZHIgJiB+Myk7CisJaW50IHNoaWZ0ID0gKGFkZHIgJiAzKSAqIDg7CisJdTMyIHggPSBjeDE4X3JlYWRfcmVnKGN4LCByZWcpOworCisJeCA9ICh4ICYgfigodTMyKTB4ZmYgPDwgc2hpZnQpKSB8ICgodTMyKXZhbHVlIDw8IHNoaWZ0KTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHgsIHJlZywKKwkJCQkoKHUzMilldmFsIDw8IHNoaWZ0KSwgKCh1MzIpbWFzayA8PCBzaGlmdCkpOworCXJldHVybiAwOworfQorCiBpbnQgY3gxOF9hdl93cml0ZTQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKQogewogCWN4MThfd3JpdGVfcmVnKGN4LCB2YWx1ZSwgMHhjNDAwMDAgKyBhZGRyKTsKIAlyZXR1cm4gMDsKIH0KIAoraW50CitjeDE4X2F2X3dyaXRlNF9leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlLCB1MzIgZXZhbCwgdTMyIG1hc2spCit7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCB2YWx1ZSwgMHhjNDAwMDAgKyBhZGRyLCBldmFsLCBtYXNrKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGN4MThfYXZfd3JpdGU0X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKQogewogCWN4MThfd3JpdGVfcmVnX25vcmV0cnkoY3gsIHZhbHVlLCAweGM0MDAwMCArIGFkZHIpOwpAQCAtNjEsMTEgKzgxLDYgQEAKIAlyZXR1cm4gY3gxOF9yZWFkX3JlZyhjeCwgMHhjNDAwMDAgKyBhZGRyKTsKIH0KIAotdTMyIGN4MThfYXZfcmVhZDRfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKQotewotCXJldHVybiBjeDE4X3JlYWRfcmVnX25vcmV0cnkoY3gsIDB4YzQwMDAwICsgYWRkcik7Ci19Ci0KIGludCBjeDE4X2F2X2FuZF9vcihzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBhbmRfbWFzaywKIAkJICAgdTggb3JfdmFsdWUpCiB7CkBAIC05OCwxNCArMTEzLDE2IEBACiAKIAljeDE4X2F2X2xvYWRmdyhjeCk7CiAJLyogU3RvcCA4MDUxIGNvZGUgZXhlY3V0aW9uICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19ETF9DVEwsIDB4MDMwMDAwMDApOworCWN4MThfYXZfd3JpdGU0X2V4cGVjdChjeCwgQ1hBREVDX0RMX0NUTCwgMHgwMzAwMDAwMCwKKwkJCQkJCSAweDAzMDAwMDAwLCAweDEzMDAwMDAwKTsKIAogCS8qIGluaXRhbGxpemUgdGhlIFBMTCBieSB0b2dnbGluZyBzbGVlcCBiaXQgKi8KIAl2ID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX0hPU1RfUkVHMSk7Ci0JLyogZW5hYmxlIHNsZWVwIG1vZGUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0hPU1RfUkVHMSwgdiB8IDEpOworCS8qIGVuYWJsZSBzbGVlcCBtb2RlIC0gcmVnaXN0ZXIgYXBwZWFycyB0byBiZSByZWFkIG9ubHkuLi4gKi8KKwljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19IT1NUX1JFRzEsIHYgfCAxLCB2LCAweGZmZmUpOwogCS8qIGRpc2FibGUgc2xlZXAgbW9kZSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfSE9TVF9SRUcxLCB2ICYgMHhmZmZlKTsKKwljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19IT1NUX1JFRzEsIHYgJiAweGZmZmUsCisJCQkJCQkgICAgdiAmIDB4ZmZmZSwgMHhmZmZmKTsKIAogCS8qIGluaXRpYWxpemUgRExMcyAqLwogCXYgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfRExMMV9ESUFHX0NUUkwpICYgMHhFMUZGRkVGRjsKQEAgLTEyNSw5ICsxNDIsMTAgQEAKIAogCXYgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfQUZFX0RJQUdfQ1RSTDMpIHwgMTsKIAkvKiBlbmFibGUgVFVORV9GSUxfUlNUICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19BRkVfRElBR19DVFJMMywgdik7CisJY3gxOF9hdl93cml0ZTRfZXhwZWN0KGN4LCBDWEFERUNfQUZFX0RJQUdfQ1RSTDMsIHYsIHYsIDB4MDMwMDlGMEYpOwogCS8qIGRpc2FibGUgVFVORV9GSUxfUlNUICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19BRkVfRElBR19DVFJMMywgdiAmIDB4RkZGRkZGRkUpOworCWN4MThfYXZfd3JpdGU0X2V4cGVjdChjeCwgQ1hBREVDX0FGRV9ESUFHX0NUUkwzLAorCQkJICAgICAgdiAmIDB4RkZGRkZGRkUsIHYgJiAweEZGRkZGRkZFLCAweDAzMDA5RjBGKTsKIAogCS8qIGVuYWJsZSA2NTYgb3V0cHV0ICovCiAJY3gxOF9hdl9hbmRfb3I0KGN4LCBDWEFERUNfUElOX0NUUkwxLCB+MCwgMHgwNDBDMDApOwpAQCAtMjUxLDEwICsyNjksOSBAQAogCQkJcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0KTsKIAogCWlmIChwbGxfcG9zdCkgewotCQlpbnQgZmluLCBmc2M7Ci0JCWludCBwbGwgPSAyODYzNjM2M0wgKiAoKCgodTY0KXBsbF9pbnQpIDw8IDI1KSArIHBsbF9mcmFjKTsKKwkJaW50IGZpbiwgZnNjLCBwbGw7CiAKLQkJcGxsID4+PSAyNTsKKwkJcGxsID0gKDI4NjM2MzYwTCAqICgoKCh1NjQpcGxsX2ludCkgPDwgMjUpICsgcGxsX2ZyYWMpKSA+PiAyNTsKIAkJcGxsIC89IHBsbF9wb3N0OwogCQlDWDE4X0RFQlVHX0lORk8oIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAogCQkJCQlwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKQEAgLTMyNCw2ICszNDEsNyBAQAogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CiAJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKKwl1OCB2OwogCiAJLyogRm9sbG93IHN0ZXAgOGMgYW5kIDhkIG9mIHNlY3Rpb24gMy4xNiBpbiB0aGUgY3gxOF9hdiBkYXRhc2hlZXQgKi8KIAljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgKHN0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgxNCA6IDB4MTEpOwpAQCAtMzMzLDMxICszNTEsMzQgQEAKIAlpZiAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSB7CiAJCWlmIChzdGQgPT0gVjRMMl9TVERfTlRTQ19NX0pQKSB7CiAJCQkvKiBKYXBhbiB1c2VzIEVJQUogYXVkaW8gc3RhbmRhcmQgKi8KLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4ODA4LCAweGY3KTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4ODBiLCAweDAyKTsKKwkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwOCwgMHhmNywgMHhmNywgMHhmZik7CisJCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MGIsIDB4MDIsIDB4MDIsIDB4M2YpOwogCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9OVFNDX01fS1IpIHsKIAkJCS8qIFNvdXRoIEtvcmVhIHVzZXMgQTIgYXVkaW8gc3RhbmRhcmQgKi8KLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4ODA4LCAweGY4KTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4ODBiLCAweDAzKTsKKwkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwOCwgMHhmOCwgMHhmOCwgMHhmZik7CisJCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MGIsIDB4MDMsIDB4MDMsIDB4M2YpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJzIHVzZSB0aGUgQlRTQyBhdWRpbyBzdGFuZGFyZCAqLwotCQkJY3gxOF9hdl93cml0ZShjeCwgMHg4MDgsIDB4ZjYpOwotCQkJY3gxOF9hdl93cml0ZShjeCwgMHg4MGIsIDB4MDEpOworCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODA4LCAweGY2LCAweGY2LCAweGZmKTsKKwkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwYiwgMHgwMSwgMHgwMSwgMHgzZik7CiAJCX0KIAl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgewogCQkvKiBGb2xsb3cgdHVuZXIgY2hhbmdlIHByb2NlZHVyZSBmb3IgUEFMICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4ODA4LCAweGZmKTsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg4MGIsIDB4MDMpOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDgsIDB4ZmYsIDB4ZmYsIDB4ZmYpOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MGIsIDB4MDMsIDB4MDMsIDB4M2YpOwogCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKIAkJLyogU2VsZWN0IGF1dG9kZXRlY3QgZm9yIFNFQ0FNICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4ODA4LCAweGZmKTsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg4MGIsIDB4MDMpOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDgsIDB4ZmYsIDB4ZmYsIDB4ZmYpOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MGIsIDB4MDMsIDB4MDMsIDB4M2YpOwogCX0KIAotCWlmIChjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSAmIDB4MTApIHsKKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMyk7CisJaWYgKHYgJiAweDEwKSB7CiAJCS8qIHJlc3RhcnQgYXVkaW8gZGVjb2RlciBtaWNyb2NvbnRyb2xsZXIgKi8KLQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4ODAzLCB+MHgxMCwgMHgwMCk7Ci0JCWN4MThfYXZfYW5kX29yKGN4LCAweDgwMywgfjB4MTAsIDB4MTApOworCQl2ICY9IH4weDEwOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOworCQl2IHw9IDB4MTA7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CiAJfQogfQogCkBAIC0zNjgsNiArMzg5LDcgQEAKIAl1OCBpc19jb21wb3NpdGUgPSAodmlkX2lucHV0ID49IENYMThfQVZfQ09NUE9TSVRFMSAmJgogCQkJICAgdmlkX2lucHV0IDw9IENYMThfQVZfQ09NUE9TSVRFOCk7CiAJdTggcmVnOworCXU4IHY7CiAKIAlDWDE4X0RFQlVHX0lORk8oImRlY29kZXIgc2V0IHZpZGVvIGlucHV0ICVkLCBhdWRpbyBpbnB1dCAlZFxuIiwKIAkJCXZpZF9pbnB1dCwgYXVkX2lucHV0KTsKQEAgLTQxMywxNiArNDM1LDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWN4MThfYXZfd3JpdGUoY3gsIDB4MTAzLCByZWcpOworCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDEwMywgcmVnLCByZWcsIDB4ZjcpOwogCS8qIFNldCBJTlBVVF9NT0RFIHRvIENvbXBvc2l0ZSAoMCkgb3IgUy1WaWRlbyAoMSkgKi8KIAljeDE4X2F2X2FuZF9vcihjeCwgMHg0MDEsIH4weDYsIGlzX2NvbXBvc2l0ZSA/IDAgOiAweDAyKTsKKwogCS8qIFNldCBDSF9TRUxfQURDMiB0byAxIGlmIGlucHV0IGNvbWVzIGZyb20gQ0gzICovCi0JY3gxOF9hdl9hbmRfb3IoY3gsIDB4MTAyLCB+MHgyLCAocmVnICYgMHg4MCkgPT0gMCA/IDIgOiAwKTsKKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwMik7CisJaWYgKHJlZyAmIDB4ODApCisJCXYgJj0gfjB4MjsKKwllbHNlCisJCXYgfD0gMHgyOwogCS8qIFNldCBEVUFMX01PREVfQURDMiB0byAxIGlmIGlucHV0IGNvbWVzIGZyb20gYm90aCBDSDIgYW5kIENIMyAqLwogCWlmICgocmVnICYgMHhjMCkgIT0gMHhjMCAmJiAocmVnICYgMHgzMCkgIT0gMHgzMCkKLQkJY3gxOF9hdl9hbmRfb3IoY3gsIDB4MTAyLCB+MHg0LCA0KTsKKwkJdiB8PSAweDQ7CiAJZWxzZQotCQljeDE4X2F2X2FuZF9vcihjeCwgMHgxMDIsIH4weDQsIDApOworCQl2ICY9IH4weDQ7CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4MTAyLCB2LCB2LCAweDE3KTsKKwogCS8qY3gxOF9hdl9hbmRfb3I0KGN4LCAweDEwNCwgfjB4MDAxYjQxODAsIDB4MDAwMDQxODApOyovCiAKIAlzdGF0ZS0+dmlkX2lucHV0ID0gdmlkX2lucHV0OwpAQCAtNzk5LDQwICs4MjgsNDcgQEAKIAl9CiAKIAljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJdTggdjsKKwogCQlpZiAoc3RhdGUtPnJhZGlvKQogCQkJYnJlYWs7CiAKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDkpOworCQl2ICY9IH4weGY7CisKIAkJc3dpdGNoICh2dC0+YXVkbW9kZSkgewogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgogCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KIAkJCSAgIHN0ZXJlbyAgICAtPiBtb25vCiAJCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwOSwgfjB4ZiwgMHgwMCk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKIAkJCS8qIG1vbm8gICAgICAtPiBtb25vCiAJCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCiAJCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwOSwgfjB4ZiwgMHgwNCk7CisJCQl2IHw9IDB4NDsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKIAkJCS8qIG1vbm8gICAgICAtPiBtb25vCiAJCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCiAJCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEvbGFuZzIgKi8KLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwOSwgfjB4ZiwgMHgwNyk7CisJCQl2IHw9IDB4NzsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKIAkJCS8qIG1vbm8gICAgICAtPiBtb25vCiAJCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCiAJCQkgICBiaWxpbmd1YWwgLT4gbGFuZzIgKi8KLQkJCWN4MThfYXZfYW5kX29yKGN4LCAweDgwOSwgfjB4ZiwgMHgwMSk7CisJCQl2IHw9IDB4MTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODA5LCB2LCB2LCAweGZmKTsKIAkJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKIAkJYnJlYWs7CisJfQogCiAJY2FzZSBWSURJT0NfR19GTVQ6CiAJCXJldHVybiBnZXRfdjRsZm10KGN4LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAppbmRleCBiNjdkOGRmLi5jZjY4YTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBjeDI1ODQwLWNvcmUuaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zMDIsOSArMzAzLDExIEBACiBpbnQgY3gxOF9hdl93cml0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1OCB2YWx1ZSk7CiBpbnQgY3gxOF9hdl93cml0ZTQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKTsKIGludCBjeDE4X2F2X3dyaXRlNF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiB2YWx1ZSk7CitpbnQgY3gxOF9hdl93cml0ZV9leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUsIHU4IGV2YWwsIHU4IG1hc2spOworaW50IGN4MThfYXZfd3JpdGU0X2V4cGVjdChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgdmFsdWUsIHUzMiBldmFsLAorCQkJICB1MzIgbWFzayk7CiB1OCBjeDE4X2F2X3JlYWQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcik7CiB1MzIgY3gxOF9hdl9yZWFkNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKTsKLXUzMiBjeDE4X2F2X3JlYWQ0X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcik7CiBpbnQgY3gxOF9hdl9hbmRfb3Ioc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdW5zaWduZWQgbWFzaywgdTggdmFsdWUpOwogaW50IGN4MThfYXZfYW5kX29yNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIGludCBjeDE4X2F2X2NtZChzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYwppbmRleCA1MjJhMDM1Li5jNjRmZDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgY3gxOCBBREVDIGZpcm13YXJlIGZ1bmN0aW9ucwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC00MywxMSArNDQsMTMgQEAKIAkvKiBUaGUgZmlybXdhcmUgbG9hZCBvZnRlbiBoYXMgYnl0ZSBlcnJvcnMsIHNvIGFsbG93IGZvciBzZXZlcmFsCiAJICAgcmV0cmllcywgYm90aCBhdCBieXRlIGxldmVsIGFuZCBhdCB0aGUgZmlybXdhcmUgbG9hZCBsZXZlbC4gKi8KIAl3aGlsZSAocmV0cmllczEgPCA1KSB7Ci0JCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfQ0hJUF9DVFJMLCAweDAwMDEwMDAwKTsKLQkJY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX1NURF9ERVRfQ1RMLCAweGY2KTsKKwkJY3gxOF9hdl93cml0ZTRfZXhwZWN0KGN4LCBDWEFERUNfQ0hJUF9DVFJMLCAweDAwMDEwMDAwLAorCQkJCQkgIDB4MDAwMDg0MzAsIDB4ZmZmZmZmZmYpOyAvKiBjeDI1ODQzICovCisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCBDWEFERUNfU1REX0RFVF9DVEwsIDB4ZjYsIDB4ZjYsIDB4ZmYpOwogCi0JCS8qIFJlc2V0IHRoZSBNYWtvIGNvcmUgKFJlZ2lzdGVyIGlzIHVuZG9jdW1lbnRlZC4pICovCi0JCWN4MThfYXZfd3JpdGU0KGN4LCAweDgxMDAsIDB4MDAwMTAwMDApOworCQkvKiBSZXNldCB0aGUgTWFrbyBjb3JlLCBSZWdpc3RlciBpcyBhbGlhcyBvZiBDWEFERUNfQ0hJUF9DVFJMICovCisJCWN4MThfYXZfd3JpdGU0X2V4cGVjdChjeCwgMHg4MTAwLCAweDAwMDEwMDAwLAorCQkJCQkgIDB4MDAwMDg0MzAsIDB4ZmZmZmZmZmYpOyAvKiBjeDI1ODQzICovCiAKIAkJLyogUHV0IHRoZSA4MDUxIGluIHJlc2V0IGFuZCBlbmFibGUgZmlybXdhcmUgdXBsb2FkICovCiAJCWN4MThfYXZfd3JpdGU0X25vcmV0cnkoY3gsIENYQURFQ19ETF9DVEwsIDB4MEYwMDAwMDApOwpAQCAtNjEsMTMgKzY0LDEyIEBACiAJCQlpbnQgcmV0cmllczI7CiAJCQlpbnQgdW5yZWNfZXJyID0gMDsKIAotCQkJZm9yIChyZXRyaWVzMiA9IDA7IHJldHJpZXMyIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOworCQkJZm9yIChyZXRyaWVzMiA9IDA7IHJldHJpZXMyIDwgQ1gxOF9NQVhfTU1JT19XUl9SRVRSSUVTOwogCQkJICAgICByZXRyaWVzMisrKSB7CiAJCQkJY3gxOF9hdl93cml0ZTRfbm9yZXRyeShjeCwgQ1hBREVDX0RMX0NUTCwKIAkJCQkJCSAgICAgICBkbF9jb250cm9sKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCXZhbHVlID0gY3gxOF9hdl9yZWFkNF9ub3JldHJ5KGN4LAotCQkJCQkJCSAgICAgIENYQURFQ19ETF9DVEwpOworCQkJCXZhbHVlID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX0RMX0NUTCk7CiAJCQkJaWYgKHZhbHVlID09IGRsX2NvbnRyb2wpCiAJCQkJCWJyZWFrOwogCQkJCS8qIENoZWNrIGlmIHdlIGNhbiBjb3JyZWN0IHRoZSBieXRlIGJ5IGNoYW5naW5nCkBAIC03OCw5ICs4MCw3IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIHJldHJpZXMyLAotCQkJCQljeC0+cmVnX21lbSArIDB4YzQwMDAwICsgQ1hBREVDX0RMX0NUTCk7Ci0JCQlpZiAodW5yZWNfZXJyIHx8IHJldHJpZXMyID49IENYMThfTUFYX01NSU9fUkVUUklFUykKKwkJCWlmICh1bnJlY19lcnIgfHwgcmV0cmllczIgPj0gQ1gxOF9NQVhfTU1JT19XUl9SRVRSSUVTKQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpID09IHNpemUpCkBAIC05Myw3ICs5Myw4IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfRExfQ1RMLCAweDEzMDAwMDAwIHwgZnctPnNpemUpOworCWN4MThfYXZfd3JpdGU0X2V4cGVjdChjeCwgQ1hBREVDX0RMX0NUTCwKKwkJCQkweDEzMDAwMDAwIHwgZnctPnNpemUsIDB4MTMwMDAwMDAsIDB4MTMwMDAwMDApOwogCiAJLyogT3V0cHV0IHRvIHRoZSA0MTYgKi8KIAljeDE4X2F2X2FuZF9vcjQoY3gsIENYQURFQ19QSU5fQ1RSTDEsIH4wLCAweDc4MDAwKTsKQEAgLTExOCw3ICsxMTksOCBAQAogCSAgIHBhc3N0aHJvdWdoICovCiAJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1MDAwQjY4Nyk7CiAKLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1NURF9ERVRfQ1RMLCAweDAwMDAwMEY2KTsKKwljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19TVERfREVUX0NUTCwgMHgwMDAwMDBGNiwgMHgwMDAwMDBGNiwKKwkJCQkJCQkJICAweDNGMDBGRkZGKTsKIAkvKiBDeERldldyUmVnKENYQURFQ19TVERfREVUX0NUTCwgMHgwMDAwMDBGRik7ICovCiAKIAkvKiBTZXQgYml0IDAgaW4gcmVnaXN0ZXIgMHg5Q0MgdG8gc2lnbmlmeSB0aGF0IHRoaXMgaXMgTWluaU1lLiAqLwpAQCAtMTM2LDcgKzEzOCw3IEBACiAJdiB8PSAweEZGOyAgIC8qIEF1dG8gYnkgZGVmYXVsdCAqLwogCXYgfD0gMHg0MDA7ICAvKiBTdGVyZW8gYnkgZGVmYXVsdCAqLwogCXYgfD0gMHgxNDAwMDAwMDsKLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1NURF9ERVRfQ1RMLCB2KTsKKwljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19TVERfREVUX0NUTCwgdiwgdiwgMHgzRjAwRkZGRik7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi12YmkuYwppbmRleCAwMmZkZjU3Li4xNTI3ZWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi12YmkuYwpAQCAtMTQxLDEwICsxNDEsMTEgQEAKIAkJdTggbGNyWzI0XTsKIAogCQlmbXQgPSBhcmc7Ci0JCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgJiYKKwkJICAgIGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXN2YmkgPSAmZm10LT5mbXQuc2xpY2VkOwotCQlpZiAoc3ZiaS0+c2VydmljZV9zZXQgPT0gMCkgeworCQlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKIAkJCS8qIHJhdyBWQkkgKi8KIAkJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggNWVmZTAxZS4uZTI3NDA0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBpdnR2LWNhcmRzLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDcgKzUxLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9odnIxNjAwX2VzbXQgPSB7CiAJLnR5cGUgPSBDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCwKIAkubmFtZSA9ICJIYXVwcGF1Z2UgSFZSLTE2MDAiLAotCS5jb21tZW50ID0gIlZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkuY29tbWVudCA9ICJSYXcgVkJJIHN1cHBvcnRlZDsgU2xpY2VkIFZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAogCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAogCS5od19tdXhlciA9IENYMThfSFdfQ1M1MzQ1LApAQCAtOTYsNyArOTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2h2cjE2MDBfc2Ftc3VuZyA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9IVlJfMTYwMF9TQU1TVU5HLAogCS5uYW1lID0gIkhhdXBwYXVnZSBIVlItMTYwMCAoUHJlcHJvZHVjdGlvbikiLAotCS5jb21tZW50ID0gIlZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkuY29tbWVudCA9ICJSYXcgVkJJIHN1cHBvcnRlZDsgU2xpY2VkIFZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAogCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAogCS5od19tdXhlciA9IENYMThfSFdfQ1M1MzQ1LApAQCAtMTUxLDcgKzE1Miw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfaDkwMCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9DT01QUk9fSDkwMCwKIAkubmFtZSA9ICJDb21wcm8gVmlkZW9NYXRlIEg5MDAiLAotCS5jb21tZW50ID0gIlZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkuY29tbWVudCA9ICJSYXcgVkJJIHN1cHBvcnRlZDsgU2xpY2VkIFZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAogCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAogCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLApAQCAtMjQ4LDcgKzI0OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfY254dF9yYXB0b3JfcGFsID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0NOWFRfUkFQVE9SX1BBTCwKIAkubmFtZSA9ICJDb25leGFudCBSYXB0b3IgUEFML1NFQ0FNIiwKLQkuY29tbWVudCA9ICJWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKIAkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKIAkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaAppbmRleCAzMjE1NWY2Li42ZmE3YmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKQEAgLTQsNiArNCw3IEBACiAgKiAgRGVyaXZlZCBmcm9tIGl2dHYtY2FyZHMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDcsOCArNDgsOSBAQAogCiAvKiBWNEwyIGNhcGFiaWxpdHkgYWxpYXNlcyAqLwogI2RlZmluZSBDWDE4X0NBUF9FTkNPREVSIChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVFVORVIgfCBcCi0JCQkgIFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkVBRFdSSVRFKQotLyogfCBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgbm90IHlldCAqLworCQkJICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFwKKwkJCSAgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCisvKiB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgbm90IHlldCAqLwogCiBzdHJ1Y3QgY3gxOF9jYXJkX3ZpZGVvX2lucHV0IHsKIAl1OCAgdmlkZW9fdHlwZTsgCS8qIHZpZGVvIGlucHV0IHR5cGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCmluZGV4IGY0NmM3ZTUuLjE3ZWRmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwpAQCAtMjU5LDYgKzI1OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKIAkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGN4LT5wYXJhbXM7CiAJCWludCBlcnIgPSBjeDIzNDF4X2V4dF9jdHJscygmcCwgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSwKIAkJCQkJCWMsIFZJRElPQ19TX0VYVF9DVFJMUyk7CkBAIC0yNzgsNyArMjc5LDkgQEAKIAkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGN4LT5wYXJhbXMuaGVpZ2h0OwogCQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgJmZtdCk7CiAJCX0KLQkJZXJyID0gY3gyMzQxeF91cGRhdGUoY3gsIGN4MThfYXBpX2Z1bmMsICZjeC0+cGFyYW1zLCAmcCk7CisJCXByaXYuY3ggPSBjeDsKKwkJcHJpdi5zID0gJmN4LT5zdHJlYW1zW2lkLT50eXBlXTsKKwkJZXJyID0gY3gyMzQxeF91cGRhdGUoJnByaXYsIGN4MThfYXBpX2Z1bmMsICZjeC0+cGFyYW1zLCAmcCk7CiAJCWlmICghZXJyICYmIGN4LT5wYXJhbXMuc3RyZWFtX3ZiaV9mbXQgIT0gcC5zdHJlYW1fdmJpX2ZtdCkKIAkJCWVyciA9IGN4MThfc2V0dXBfdmJpX2ZtdChjeCwgcC5zdHJlYW1fdmJpX2ZtdCk7CiAJCWN4LT5wYXJhbXMgPSBwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCA3ODc0ZDk3Li5mNTBjZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtNzUsNDggKzc1LDc2IEBACiAJCQkJICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJCQkJICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJCQkJICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEgfTsKLXN0YXRpYyBpbnQgbW1pb19uZGVsYXlbQ1gxOF9NQVhfQ0FSRFNdID0geyAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JCQkJCSAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkJCQkJICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCQkJCQkgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEgfTsKIHN0YXRpYyB1bnNpZ25lZCBjYXJkdHlwZV9jID0gMTsKIHN0YXRpYyB1bnNpZ25lZCB0dW5lcl9jID0gMTsKIHN0YXRpYyB1bnNpZ25lZCByYWRpb19jID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBtbWlvX25kZWxheV9jID0gMTsKIHN0YXRpYyBjaGFyIHBhbFtdID0gIi0tIjsKIHN0YXRpYyBjaGFyIHNlY2FtW10gPSAiLS0iOwogc3RhdGljIGNoYXIgbnRzY1tdID0gIi0iOwogCiAvKiBCdWZmZXJzICovCi1zdGF0aWMgaW50IGVuY19tcGdfYnVmZmVycyA9IENYMThfREVGQVVMVF9FTkNfTVBHX0JVRkZFUlM7CiBzdGF0aWMgaW50IGVuY190c19idWZmZXJzID0gQ1gxOF9ERUZBVUxUX0VOQ19UU19CVUZGRVJTOworc3RhdGljIGludCBlbmNfbXBnX2J1ZmZlcnMgPSBDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZGRVJTOworc3RhdGljIGludCBlbmNfaWR4X2J1ZmZlcnMgPSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZGRVJTOwogc3RhdGljIGludCBlbmNfeXV2X2J1ZmZlcnMgPSBDWDE4X0RFRkFVTFRfRU5DX1lVVl9CVUZGRVJTOwogc3RhdGljIGludCBlbmNfdmJpX2J1ZmZlcnMgPSBDWDE4X0RFRkFVTFRfRU5DX1ZCSV9CVUZGRVJTOwogc3RhdGljIGludCBlbmNfcGNtX2J1ZmZlcnMgPSBDWDE4X0RFRkFVTFRfRU5DX1BDTV9CVUZGRVJTOwogCitzdGF0aWMgaW50IGVuY190c19idWZzaXplID0gQ1gxOF9ERUZBVUxUX0VOQ19UU19CVUZTSVpFOworc3RhdGljIGludCBlbmNfbXBnX2J1ZnNpemUgPSBDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZTSVpFOworc3RhdGljIGludCBlbmNfaWR4X2J1ZnNpemUgPSBDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFOworc3RhdGljIGludCBlbmNfeXV2X2J1ZnNpemUgPSBDWDE4X0RFRkFVTFRfRU5DX1lVVl9CVUZTSVpFOworLyogVkJJIGJ1ZnNpemUgYmFzZWQgb24gc3RhbmRhcmRzIHN1cHBvcnRlZCBieSBjYXJkIHR1bmVyIGZvciBub3cgKi8KK3N0YXRpYyBpbnQgZW5jX3BjbV9idWZzaXplID0gQ1gxOF9ERUZBVUxUX0VOQ19QQ01fQlVGU0laRTsKKworc3RhdGljIGludCBlbmNfdHNfYnVmcyA9IC0xOworc3RhdGljIGludCBlbmNfbXBnX2J1ZnMgPSAtMTsKK3N0YXRpYyBpbnQgZW5jX2lkeF9idWZzID0gLTE7CitzdGF0aWMgaW50IGVuY195dXZfYnVmcyA9IC0xOworc3RhdGljIGludCBlbmNfdmJpX2J1ZnMgPSAtMTsKK3N0YXRpYyBpbnQgZW5jX3BjbV9idWZzID0gLTE7CisKKwogc3RhdGljIGludCBjeDE4X3BjaV9sYXRlbmN5ID0gMTsKIAotaW50IGN4MThfcmV0cnlfbW1pbyA9IDE7CitzdGF0aWMgaW50IG1taW9fbmRlbGF5Oworc3RhdGljIGludCByZXRyeV9tbWlvID0gMTsKKwogaW50IGN4MThfZGVidWc7CiAKIG1vZHVsZV9wYXJhbV9hcnJheSh0dW5lciwgaW50LCAmdHVuZXJfYywgMDY0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocmFkaW8sIGJvb2wsICZyYWRpb19jLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheShjYXJkdHlwZSwgaW50LCAmY2FyZHR5cGVfYywgMDY0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkobW1pb19uZGVsYXksIGludCwgJm1taW9fbmRlbGF5X2MsIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhwYWwsIHBhbCwgc2l6ZW9mKHBhbCksIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhzZWNhbSwgc2VjYW0sIHNpemVvZihzZWNhbSksIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhudHNjLCBudHNjLCBzaXplb2YobnRzYyksIDA2NDQpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBjeDE4X2RlYnVnLCBpbnQsIDA2NDQpOwotbW9kdWxlX3BhcmFtX25hbWVkKHJldHJ5X21taW8sIGN4MThfcmV0cnlfbW1pbywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShtbWlvX25kZWxheSwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShyZXRyeV9tbWlvLCBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGN4MThfcGNpX2xhdGVuY3ksIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oY3gxOF9maXJzdF9taW5vciwgaW50LCAwNjQ0KTsKIAotbW9kdWxlX3BhcmFtKGVuY19tcGdfYnVmZmVycywgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShlbmNfdHNfYnVmZmVycywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShlbmNfbXBnX2J1ZmZlcnMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZW5jX2lkeF9idWZmZXJzLCBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGVuY195dXZfYnVmZmVycywgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShlbmNfdmJpX2J1ZmZlcnMsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZW5jX3BjbV9idWZmZXJzLCBpbnQsIDA2NDQpOwogCittb2R1bGVfcGFyYW0oZW5jX3RzX2J1ZnNpemUsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZW5jX21wZ19idWZzaXplLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGVuY19pZHhfYnVmc2l6ZSwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShlbmNfeXV2X2J1ZnNpemUsIGludCwgMDY0NCk7CisvKiBWQkkgYnVmc2l6ZSBiYXNlZCBvbiBzdGFuZGFyZHMgc3VwcG9ydGVkIGJ5IGNhcmQgdHVuZXIgZm9yIG5vdyAqLworbW9kdWxlX3BhcmFtKGVuY19wY21fYnVmc2l6ZSwgaW50LCAwNjQ0KTsKKworbW9kdWxlX3BhcmFtKGVuY190c19idWZzLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGVuY19tcGdfYnVmcywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShlbmNfaWR4X2J1ZnMsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZW5jX3l1dl9idWZzLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGVuY192YmlfYnVmcywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShlbmNfcGNtX2J1ZnMsIGludCwgMDY0NCk7CisKIE1PRFVMRV9QQVJNX0RFU0ModHVuZXIsICJUdW5lciB0eXBlIHNlbGVjdGlvbixcbiIKIAkJCSJcdFx0XHRzZWUgdHVuZXIuaCBmb3IgdmFsdWVzIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvLApAQCAtMTUyLDI4ICsxODAsNjIgQEAKIAkJICJDaGFuZ2UgdGhlIFBDSSBsYXRlbmN5IHRvIDY0IGlmIGxvd2VyOiAwID0gTm8sIDEgPSBZZXMsXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogWWVzIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJldHJ5X21taW8sCi0JCSAiQ2hlY2sgYW5kIHJldHJ5IG1lbW9yeSBtYXBwZWQgSU8gYWNjZXNzZXNcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAxIFtZZXNdIik7CisJCSAiKERlcHJlY2F0ZWQpIE1NSU8gd3JpdGVzIGFyZSBub3cgYWx3YXlzIGNoZWNrZWQgYW5kIHJldHJpZWRcbiIKKwkJICJcdFx0XHRFZmZlY3RpdmVseTogMSBbWWVzXSIpOwogTU9EVUxFX1BBUk1fREVTQyhtbWlvX25kZWxheSwKLQkJICJEZWxheSAobnMpIGZvciBlYWNoIENYMjM0MTggbWVtb3J5IG1hcHBlZCBJTyBhY2Nlc3MuXG4iCi0JCSAiXHRcdFx0VHJ5IGxhcmdlciB2YWx1ZXMgdGhhdCBhcmUgY2xvc2UgdG8gYSBtdWx0aXBsZSBvZiB0aGVcbiIKLQkJICJcdFx0XHRQQ0kgY2xvY2sgcGVyaW9kLCAzMC4zIG5zLCBpZiB5b3VyIGNhcmQgZG9lc24ndCB3b3JrLlxuIgotCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX01NSU9fTkRFTEFZKSk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuY19tcGdfYnVmZmVycywKLQkJICJFbmNvZGVyIE1QRyBCdWZmZXJzIChpbiBNQilcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfTVBHX0JVRkZFUlMpKTsKKwkJICIoRGVwcmVjYXRlZCkgTU1JTyBhY2Nlc3NlcyBhcmUgbm93IG5ldmVyIHB1cnBvc2VseSBkZWxheWVkXG4iCisJCSAiXHRcdFx0RWZmZWN0aXZlbHk6IDAgbnMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX3RzX2J1ZmZlcnMsCi0JCSAiRW5jb2RlciBUUyBCdWZmZXJzIChpbiBNQilcbiIKKwkJICJFbmNvZGVyIFRTIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY190c19idWZzIGNhbiBvdmVycmlkZSlcbiIKIAkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfVFNfQlVGRkVSUykpOworTU9EVUxFX1BBUk1fREVTQyhlbmNfdHNfYnVmc2l6ZSwKKwkJICJTaXplIG9mIGFuIGVuY29kZXIgVFMgYnVmZmVyIChrQilcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfVFNfQlVGU0laRSkpOworTU9EVUxFX1BBUk1fREVTQyhlbmNfdHNfYnVmcywKKwkJICJOdW1iZXIgb2YgZW5jb2RlciBUUyBidWZmZXJzXG4iCisJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY190c18qIHBhcmFtZXRlcnMiKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5jX21wZ19idWZmZXJzLAorCQkgIkVuY29kZXIgTVBHIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY19tcGdfYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZGRVJTKSk7CitNT0RVTEVfUEFSTV9ERVNDKGVuY19tcGdfYnVmc2l6ZSwKKwkJICJTaXplIG9mIGFuIGVuY29kZXIgTVBHIGJ1ZmZlciAoa0IpXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZTSVpFKSk7CitNT0RVTEVfUEFSTV9ERVNDKGVuY19tcGdfYnVmcywKKwkJICJOdW1iZXIgb2YgZW5jb2RlciBNUEcgYnVmZmVyc1xuIgorCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfbXBnXyogcGFyYW1ldGVycyIpOworTU9EVUxFX1BBUk1fREVTQyhlbmNfaWR4X2J1ZmZlcnMsCisJCSAiRW5jb2RlciBJRFggYnVmZmVyIG1lbW9yeSAoTUIpLiAoZW5jX2lkeF9idWZzIGNhbiBvdmVycmlkZSlcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRkZFUlMpKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzaXplLAorCQkgIlNpemUgb2YgYW4gZW5jb2RlciBJRFggYnVmZmVyIChrQilcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRlNJWkUpKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5jX2lkeF9idWZzLAorCQkgIk51bWJlciBvZiBlbmNvZGVyIElEWCBidWZmZXJzXG4iCisJCSAiXHRcdFx0RGVmYXVsdCBpcyBjb21wdXRlZCBmcm9tIG90aGVyIGVuY19pZHhfKiBwYXJhbWV0ZXJzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY195dXZfYnVmZmVycywKLQkJICJFbmNvZGVyIFlVViBCdWZmZXJzIChpbiBNQilcbiIKKwkJICJFbmNvZGVyIFlVViBidWZmZXIgbWVtb3J5IChNQikuIChlbmNfeXV2X2J1ZnMgY2FuIG92ZXJyaWRlKVxuIgogCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGRkVSUykpOworTU9EVUxFX1BBUk1fREVTQyhlbmNfeXV2X2J1ZnNpemUsCisJCSAiU2l6ZSBvZiBhbiBlbmNvZGVyIFlVViBidWZmZXIgKGtCKVxuIgorCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGU0laRSkpOworTU9EVUxFX1BBUk1fREVTQyhlbmNfeXV2X2J1ZnMsCisJCSAiTnVtYmVyIG9mIGVuY29kZXIgWVVWIGJ1ZmZlcnNcbiIKKwkJICJcdFx0XHREZWZhdWx0IGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgZW5jX3l1dl8qIHBhcmFtZXRlcnMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX3ZiaV9idWZmZXJzLAotCQkgIkVuY29kZXIgVkJJIEJ1ZmZlcnMgKGluIE1CKVxuIgorCQkgIkVuY29kZXIgVkJJIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY192YmlfYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX1ZCSV9CVUZGRVJTKSk7CitNT0RVTEVfUEFSTV9ERVNDKGVuY192YmlfYnVmcywKKwkJICJOdW1iZXIgb2YgZW5jb2RlciBWQkkgYnVmZmVyc1xuIgorCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBlbmNfdmJpX2J1ZmZlcnMgJiB0dW5lciBzdGQiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5jX3BjbV9idWZmZXJzLAotCQkgIkVuY29kZXIgUENNIGJ1ZmZlcnMgKGluIE1CKVxuIgorCQkgIkVuY29kZXIgUENNIGJ1ZmZlciBtZW1vcnkgKE1CKS4gKGVuY19wY21fYnVmcyBjYW4gb3ZlcnJpZGUpXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX1BDTV9CVUZGRVJTKSk7CitNT0RVTEVfUEFSTV9ERVNDKGVuY19wY21fYnVmc2l6ZSwKKwkJICJTaXplIG9mIGFuIGVuY29kZXIgUENNIGJ1ZmZlciAoa0IpXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX1BDTV9CVUZTSVpFKSk7CitNT0RVTEVfUEFSTV9ERVNDKGVuY19wY21fYnVmcywKKwkJICJOdW1iZXIgb2YgZW5jb2RlciBQQ00gYnVmZmVyc1xuIgorCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfcGNtXyogcGFyYW1ldGVycyIpOwogCiBNT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQga2VybmVsIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CiAKQEAgLTE4Nyw3ICsyNDksNyBAQAogLyogR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogaW50IGN4MThfbXNsZWVwX3RpbWVvdXQodW5zaWduZWQgaW50IG1zZWNzLCBpbnQgaW50cikKIHsKLQlpbnQgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpOworCWxvbmcgaW50IHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG1zZWNzKTsKIAlpbnQgc2lnOwogCiAJZG8gewpAQCAtMzY2LDIwICs0MjgsNjkgQEAKIHsKIAlpbnQgaSwgajsKIAotCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddID0gZW5jX21wZ19idWZmZXJzOwogCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9UU10gPSBlbmNfdHNfYnVmZmVyczsKKwljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHXSA9IGVuY19tcGdfYnVmZmVyczsKKwljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXSA9IGVuY19pZHhfYnVmZmVyczsKIAljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWXSA9IGVuY195dXZfYnVmZmVyczsKIAljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9IGVuY192YmlfYnVmZmVyczsKIAljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IGVuY19wY21fYnVmZmVyczsKKwljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUkFEXSA9IDA7IC8qIGNvbnRyb2wgb25seSAqLworCisJY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1RTXSA9IGVuY190c19idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddID0gZW5jX21wZ19idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdID0gZW5jX2lkeF9idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVZdID0gZW5jX3l1dl9idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0gZW5jX3ZiaV9idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dID0gZW5jX3BjbV9idWZzOworCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9SQURdID0gMDsgLyogY29udHJvbCwgbm8gZGF0YSAqLworCisJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9UU10gPSBlbmNfdHNfYnVmc2l6ZTsKKwljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX01QR10gPSBlbmNfbXBnX2J1ZnNpemU7CisJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdID0gZW5jX2lkeF9idWZzaXplOworCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWXSA9IGVuY195dXZfYnVmc2l6ZTsKKwljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSAwOyAvKiBjb21wdXRlZCBsYXRlciAqLworCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IGVuY19wY21fYnVmc2l6ZTsKKwljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1JBRF0gPSAwOyAvKiBjb250cm9sIG5vIGRhdGEgKi8KKworCS8qIEV4Y2VwdCBmb3IgVkJJIGVuc3VyZSBzdHJlYW1fYnVmZmVycyAmIHN0cmVhbV9idWZfc2l6ZSBhcmUgdmFsaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfU1RSRUFNUzsgaSsrKSB7CisJCS8qIFVzZXIgc2FpZCB0byB1c2UgMCBidWZmZXJzICovCisJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPT0gMCkgeworCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKKwkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPSAwOworCQkJY29udGludWU7CisJCX0KKwkJLyogVXNlciBzYWlkIHRvIHVzZSAwIE1CIHRvdGFsICovCisJCWlmIChjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPD0gMCkgeworCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKKwkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IDA7CisJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFZCSSBpcyBjb21wdXRlZCBsYXRlciBvciB1c2VyIHNhaWQgYnVmZmVyIGhhcyBzaXplIDAgKi8KKwkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgeworCQkJaWYgKGkgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7CisJCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKKwkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSAwOworCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPSAwOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKKwkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IGN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQKKwkJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKKwkJfSBlbHNlIHsKKwkJCS8qIE4uQi4gVGhpcyBtaWdodCByb3VuZCBkb3duIHRvIDAgKi8KKwkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9CisJCQkgIGN4LT5zdHJlYW1fYnVmZmVyc1tpXSAqIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gLyAxMDI0OworCQl9CisJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gKj0gMTAyNDsgLyogY29udmVydCBmcm9tIGtCIHRvIGJ5dGVzICovCisJfQorCiAJY3gtPm9wdGlvbnMuY2FyZHR5cGUgPSBjYXJkdHlwZVtjeC0+bnVtXTsKIAljeC0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2N4LT5udW1dOwogCWN4LT5vcHRpb25zLnJhZGlvID0gcmFkaW9bY3gtPm51bV07CiAKLQlpZiAobW1pb19uZGVsYXlbY3gtPm51bV0gPCAwKQotCQljeC0+b3B0aW9ucy5tbWlvX25kZWxheSA9IENYMThfREVGQVVMVF9NTUlPX05ERUxBWTsKLQllbHNlCi0JCWN4LT5vcHRpb25zLm1taW9fbmRlbGF5ID0gbW1pb19uZGVsYXlbY3gtPm51bV07Ci0KIAljeC0+c3RkID0gY3gxOF9wYXJzZV9zdGQoY3gpOwogCWlmIChjeC0+b3B0aW9ucy5jYXJkdHlwZSA9PSAtMSkgewogCQlDWDE4X0lORk8oIklnbm9yZSBjYXJkXG4iKTsKQEAgLTQ0MCwyMiArNTUxLDMwIEBACiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfaW5pdF9zdHJ1Y3QxKHN0cnVjdCBjeDE4ICpjeCkKIHsKKwlpbnQgaTsKKwogCWN4LT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY3gtPmRldiwgMCk7CiAKIAltdXRleF9pbml0KCZjeC0+c2VyaWFsaXplX2xvY2spOwogCW11dGV4X2luaXQoJmN4LT5pMmNfYnVzX2xvY2tbMF0pOwogCW11dGV4X2luaXQoJmN4LT5pMmNfYnVzX2xvY2tbMV0pOwogCW11dGV4X2luaXQoJmN4LT5ncGlvX2xvY2spOworCW11dGV4X2luaXQoJmN4LT5lcHUyYXB1X21iX2xvY2spOworCW11dGV4X2luaXQoJmN4LT5lcHUyY3B1X21iX2xvY2spOwogCiAJc3Bpbl9sb2NrX2luaXQoJmN4LT5sb2NrKTsKIAogCWN4LT53b3JrX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoY3gtPm5hbWUpOwogCWlmIChjeC0+d29ya19xdWV1ZSA9PSBOVUxMKSB7Ci0JCUNYMThfRVJSKCJDb3VsZCBub3QgY3JlYXRlIHdvcmsgcXVldWVcbiIpOwotCQlyZXR1cm4gLTE7CisJCUNYMThfRVJSKCJVbmFibGUgdG8gY3JlYXRlIHdvcmsgaGFuZGVyIHRocmVhZFxuIik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCUlOSVRfV09SSygmY3gtPndvcmssIGN4MThfd29ya19oYW5kbGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfRVBVX1dPUktfT1JERVJTOyBpKyspIHsKKwkJY3gtPmVwdV93b3JrX29yZGVyW2ldLmN4ID0gY3g7CisJCWN4LT5lcHVfd29ya19vcmRlcltpXS5zdHIgPSBjeC0+ZXB1X2RlYnVnX3N0cjsKKwkJSU5JVF9XT1JLKCZjeC0+ZXB1X3dvcmtfb3JkZXJbaV0ud29yaywgY3gxOF9lcHVfd29ya19oYW5kbGVyKTsKKwl9CiAKIAkvKiBzdGFydCBjb3VudGluZyBvcGVuX2lkIGF0IDEgKi8KIAljeC0+b3Blbl9pZCA9IDE7CkBAIC00NzIsMjAgKzU5MSw1NSBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5jYXBfdyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPm1iX2FwdV93YWl0cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPm1iX2NwdV93YWl0cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPm1iX2VwdV93YWl0cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPm1iX2hwdV93YWl0cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPmRtYV93YWl0cSk7CiAKIAkvKiBWQkkgKi8KLQljeC0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwljeC0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCWN4LT52Ymkuc2xpY2VkX2luID0gJmN4LT52YmkuaW4uZm10LnNsaWNlZDsKLQljeC0+dmJpLnJhd19zaXplID0gMTQ1NjsKLQljeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSA9IDE0NTY7Ci0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkID0gMHgyMDsKLQljeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkID0gMHg2MDsKLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IDI3MjsKLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQgPSAweEIwOwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X2V2ZW5fZmllbGQgPSAweEYwOworCisJLyoKKwkgKiBUaGUgVkJJIGxpbmUgc2l6ZXMgZGVwZW5kIG9uIHRoZSBwaXhlbCBjbG9jayBhbmQgdGhlIGhvcml6IHJhdGUKKwkgKgorCSAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKKwkgKiAgICAgPSA0IGJ5dGVzIEVBViArIEFuYyBkYXRhIGluIGhibGFuayArIDQgYnl0ZXMgU0FWICsgYWN0aXZlIHNhbXBsZXMKKwkgKgorCSAqICBTbGljZWQgVkJJIGlzIHNlbnQgYXMgYW5jaWxsYXJ5IGRhdGEgZHVyaW5nIGhvcml6b250YWwgYmxhbmtpbmcKKwkgKiAgUmF3IFZCSSBpcyBzZW50IGFzIGFjdGl2ZSB2aWRlbyBzYW1wbGVzIGR1cmluZyB2ZXJ0Y2FsIGJsYW5raW5nCisJICoKKwkgKiAgV2UgdXNlIGEgIEJULjY1NiBweGllbCBjbG9jayBvZiAxMy41IE1IeiBhbmQgYSBCVC42NTYgYWN0aXZlIGxpbmUKKwkgKiAgbGVuZ3RoIG9mIDcyMCBwaXhlbHMgQCA0OjI6MiBzYW1wbGluZy4gIFRodXMuLi4KKwkgKgorCSAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjczNCBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCisJICogIE5UU0MtTSwgUEFMLU0sIFBBTC02MCwgYW5kIG90aGVyIDYwIEh6LzUyNSBsaW5lIHN5c3RlbXMsIHdlIGhhdmU6CisJICoKKwkgKiAgKDEvMTUuNzM0IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzE2IHNhbXBsZXMvbGluZSA9CisJICogIDQgYnl0ZXMgU0FWICsgMjY4IGJ5dGVzIGFuYyBkYXRhICsgNCBieXRlcyBTQVYgKyAxNDQwIGFjdGl2ZSBzYW1wbGVzCisJICoKKwkgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS42MjUga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcworCSAqICBQQUwtQi9HL0gsIFBBTC1JLCBTRUNBTS1MIGFuZCBvdGhlciA1MCBIei82MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgorCSAqCisJICogICgxLzE1LjYyNSBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcyOCBzYW1wbGVzL2xpbmUgPQorCSAqICA0IGJ5dGVzIFNBViArIDI4MCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcworCSAqCisJICovCisKKwkvKiBGSVhNRTogaW5pdCB0aGVzZSBiYXNlZCBvbiB0dW5lciBzdGQgJiBtb2RpZnkgd2hlbiBzdGQgY2hhbmdlcyAqLworCS8qIENYMTgtQVYtQ29yZSBudW1iZXIgb2YgVkJJIHNhbXBsZXMgb3V0cHV0IHBlciBob3Jpem9udGFsIGxpbmUgKi8KKwljeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSA9IDE0NDQ7ICAgLyogNCBieXRlIFNBViArIDIgKiA3MjAgKi8KKwljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IDI3MjsgLyogNjAgSHo6IDI2OCs0LCA1MCBIejogMjgwKzQgKi8KKworCS8qIENYMTgtQVYtQ29yZSBWQkkgc2FtcGxlcy9saW5lIHBvc3NpYmx5IHJvdW5kZWQgdXAgKi8KKwljeC0+dmJpLnJhd19zaXplID0gMTQ0NDsgICAvKiBSZWFsIG1heCBzaXplIGlzIDE0NDQgKi8KKwljeC0+dmJpLnNsaWNlZF9zaXplID0gMjg0OyAvKiBSZWFsIG1heCBzaXplIGlzICAyODQgKi8KKworCS8qCisJICogQ1gxOC1BVi1Db3JlIFNBVi9FQVYgUlAgY29kZXMgaW4gVklQIDEueCBtb2RlCisJICogVGFzayBGaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwCisJICovCisJY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkID0gMHgyMDsgICAgIC8qICAgViAgKi8KKwljeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkID0gMHg2MDsgICAgLyogIEZWICAqLworCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZCA9IDB4QjA7ICAvKiBUIFZIIC0gYWN0dWFsbHkgRUFWICovCisJY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCA9IDB4RjA7IC8qIFRGVkggLSBhY3R1YWxseSBFQVYgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTE4LDYgKzY3Miw3IEBACiAJY3gtPmF2X3N0YXRlLmF1ZF9pbnB1dCA9IENYMThfQVZfQVVESU84OwogCWN4LT5hdl9zdGF0ZS5hdWRjbGtfZnJlcSA9IDQ4MDAwOwogCWN4LT5hdl9zdGF0ZS5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCS8qIEZJWE1FIC0gOCBpcyBOVFNDIHZhbHVlLCBpbnZlc3RpZ2F0ZSAqLwogCWN4LT5hdl9zdGF0ZS52YmlfbGluZV9vZmZzZXQgPSA4OwogfQogCkBAIC02NjIsMTIgKzgxNyw5IEBACiAKIAkvKiBQQ0kgRGV2aWNlIFNldHVwICovCiAJcmV0dmFsID0gY3gxOF9zZXR1cF9wY2koY3gsIGRldiwgcGNpX2lkKTsKLQlpZiAocmV0dmFsICE9IDApIHsKLQkJaWYgKHJldHZhbCA9PSAtRUlPKQotCQkJZ290byBmcmVlX3dvcmtxdWV1ZTsKLQkJZWxzZSBpZiAocmV0dmFsID09IC1FTlhJTykKLQkJCWdvdG8gZnJlZV9tZW07Ci0JfQorCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBmcmVlX3dvcmtxdWV1ZTsKKwogCS8qIHNhdmUgY3ggaW4gdGhlIHBjaSBzdHJ1Y3QgZm9yIGxhdGVyIHVzZSAqLwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGN4KTsKIApAQCAtNzI2LDYgKzg3OCw3IEBACiAJCWdvdG8gZnJlZV9pMmM7CiAJfQogCWN4MThfaW5pdF9tZW1vcnkoY3gpOworCWN4MThfaW5pdF9zY2IoY3gpOwogCiAJLyogUmVnaXN0ZXIgSVJRICovCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoY3gtPmRldi0+aXJxLCBjeDE4X2lycV9oYW5kbGVyLApAQCAtNzM5LDggKzg5Miw2IEBACiAJCWN4LT5zdGQgPSBWNEwyX1NURF9OVFNDX007CiAKIAlpZiAoY3gtPm9wdGlvbnMudHVuZXIgPT0gLTEpIHsKLQkJaW50IGk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IENYMThfQ0FSRF9NQVhfVFVORVJTOyBpKyspIHsKIAkJCWlmICgoY3gtPnN0ZCAmIGN4LT5jYXJkLT50dW5lcnNbaV0uc3RkKSA9PSAwKQogCQkJCWNvbnRpbnVlOwpAQCAtNzc3LDEzICs5MjgsMjMgQEAKIAl9CiAJY3gtPnBhcmFtcy52aWRlb19nb3Bfc2l6ZSA9IGN4LT5pc182MGh6ID8gMTUgOiAxMjsKIAotCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHXSA9IDB4MDgwMDA7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9UU10gPSAweDA4MDAwOwotCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IDB4MDEyMDA7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVZdID0gMHgyMDAwMDsKKwkvKgorCSAqIEZJWE1FOiBzZXR0aW5nIHRoZSBidWZmZXIgc2l6ZSBiYXNlZCBvbiB0aGUgdHVuZXIgc3RhbmRhcmQgaXMKKwkgKiBzdWJvcHRpbWFsLCBhcyB0aGUgQ1ZCUyBhbmQgU1ZpZGVvIGlucHV0cyBjb3VsZCB1c2UgYSBkaWZmZXJlbnQgc3RkCisJICogYW5kIHRoZSBidWZmZXIgY291bGQgZW5kIHVwIGJlaW5nIHRvbyBzbWFsbCBpbiB0aGF0IGNhc2UuCisJICovCiAJdmJpX2J1Zl9zaXplID0gY3gtPnZiaS5yYXdfc2l6ZSAqIChjeC0+aXNfNjBoeiA/IDI0IDogMzYpIC8gMjsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSB2YmlfYnVmX3NpemU7CiAKKwlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPCAwKQorCQljeC0+c3RyZWFtX2J1ZmZlcnNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9CisJCSAgIGN4LT5vcHRpb25zLm1lZ2FieXRlc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldICogMTAyNCAqIDEwMjQKKwkJICAgLyB2YmlfYnVmX3NpemU7CisJZWxzZQorCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9CisJCSAgICAgY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gKiB2YmlfYnVmX3NpemUKKwkJICAgICAvICgxMDI0ICogMTAyNCk7CisKIAlpZiAoY3gtPm9wdGlvbnMucmFkaW8gPiAwKQogCQljeC0+djRsMl9jYXAgfD0gVjRMMl9DQVBfUkFESU87CiAKQEAgLTg0NCw3ICsxMDA1LDYgQEAKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJQ1gxOF9FUlIoIkVycm9yICVkIG9uIGluaXRpYWxpemF0aW9uXG4iLCByZXR2YWwpOwotCWN4MThfbG9nX3N0YXRpc3RpY3MoY3gpOwogCiAJaSA9IGN4LT5udW07CiAJc3Bpbl9sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwpAQCAtOTIzLDYgKzEwODMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgY3gxOF9jYW5jZWxfZXB1X3dvcmtfb3JkZXJzKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfRVBVX1dPUktfT1JERVJTOyBpKyspCisJCWNhbmNlbF93b3JrX3N5bmMoJmN4LT5lcHVfd29ya19vcmRlcltpXS53b3JrKTsKK30KKwogc3RhdGljIHZvaWQgY3gxOF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwpAQCAtOTQwLDcgKzExMDcsOCBAQAogCiAJY3gxOF9oYWx0X2Zpcm13YXJlKGN4KTsKIAotCWZsdXNoX3dvcmtxdWV1ZShjeC0+d29ya19xdWV1ZSk7CisJY3gxOF9jYW5jZWxfZXB1X3dvcmtfb3JkZXJzKGN4KTsKKwogCWRlc3Ryb3lfd29ya3F1ZXVlKGN4LT53b3JrX3F1ZXVlKTsKIAogCWN4MThfc3RyZWFtc19jbGVhbnVwKGN4LCAxKTsKQEAgLTk1NSw3ICsxMTIzLDYgQEAKIAogCXBjaV9kaXNhYmxlX2RldmljZShjeC0+ZGV2KTsKIAotCWN4MThfbG9nX3N0YXRpc3RpY3MoY3gpOwogCUNYMThfSU5GTygiUmVtb3ZlZCAlcywgY2FyZCAjJWRcbiIsIGN4LT5jYXJkX25hbWUsIGN4LT5udW0pOwogfQogCkBAIC0xMDA0LDYgKzExNzEsNyBAQAogCQkJY29udGludWU7CiAJCWtmcmVlKGN4MThfY2FyZHNbaV0pOwogCX0KKwogfQogCiBtb2R1bGVfaW5pdChtb2R1bGVfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCBiYmRkNWYyLi4wZDJlZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1kcml2ZXIuaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjQsOSArNjUsNiBAQAogIyAgZXJyb3IgIlRoaXMgZHJpdmVyIHJlcXVpcmVzIGtlcm5lbCBQQ0kgc3VwcG9ydC4iCiAjZW5kaWYKIAotLyogRGVmYXVsdCBkZWxheSB0byB0aHJvdHRsZSBtbWlvIGFjY2VzcyB0byB0aGUgQ1gyMzQxOCAqLwotI2RlZmluZSBDWDE4X0RFRkFVTFRfTU1JT19OREVMQVkgMCAvKiAwIG5zID0gMCBQQ0kgY2xvY2socykgLyAzMyBNSHogKi8KLQogI2RlZmluZSBDWDE4X01FTV9PRkZTRVQJMHgwMDAwMDAwMAogI2RlZmluZSBDWDE4X01FTV9TSVpFCTB4MDQwMDAwMDAKICNkZWZpbmUgQ1gxOF9SRUdfT0ZGU0VUCTB4MDIwMDAwMDAKQEAgLTExNyw2ICsxMTUsMTcgQEAKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19WQklfQlVGRkVSUyAxCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfUENNX0JVRkZFUlMgMQogCisvKiBNYXhpbXVtIGZpcm13YXJlIERNQSBidWZmZXJzIHBlciBzdHJlYW0gKi8KKyNkZWZpbmUgQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNIDYzCisKKy8qIERNQSBidWZmZXIsIGRlZmF1bHQgc2l6ZSBpbiBrQiBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19UU19CVUZTSVpFICAgMzIKKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19NUEdfQlVGU0laRSAgMzIKKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSAgMzIKKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGU0laRSAxMjgKKy8qIERlZmF1bHQgVkJJIGJ1ZnNpemUgYmFzZWQgb24gc3RhbmRhcmRzIHN1cHBvcnRlZCBieSBjYXJkIHR1bmVyIGZvciBub3cgKi8KKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19QQ01fQlVGU0laRSAgIDQKKwogLyogaTJjIHN0dWZmICovCiAjZGVmaW5lIEkyQ19DTElFTlRTX01BWCAxNgogCkBAIC0xNzYsNyArMTg1LDYgQEAKIAogI2RlZmluZSBDWDE4X01BWF9QR01fSU5ERVggKDQwMCkKIAotZXh0ZXJuIGludCBjeDE4X3JldHJ5X21taW87CS8qIGVuYWJsZSBjaGVjayAmIHJldHJ5IG9mIG1taW8gYWNjZXNzZXMgKi8KIGV4dGVybiBpbnQgY3gxOF9kZWJ1ZzsKIAogCkBAIC0xODUsNyArMTkzLDYgQEAKIAlpbnQgY2FyZHR5cGU7CQkvKiBmb3JjZSBjYXJkIHR5cGUgb24gbG9hZCAqLwogCWludCB0dW5lcjsJCS8qIHNldCB0dW5lciBvbiBsb2FkICovCiAJaW50IHJhZGlvOwkJLyogZW5hYmxlL2Rpc2FibGUgcmFkaW8gKi8KLQl1bnNpZ25lZCBsb25nIG1taW9fbmRlbGF5OyAvKiBkZWxheSBpbiBucyBhZnRlciBldmVyeSBQQ0kgbW1pbyBhY2Nlc3MgKi8KIH07CiAKIC8qIHBlci1idWZmZXIgYml0IGZsYWdzICovCkBAIC0yMDMsMTEgKzIxMCw4IEBACiAjZGVmaW5lIENYMThfRl9JX0VPUwkJCTQgCS8qIEVuZCBvZiBlbmNvZGVyIHN0cmVhbSAqLwogI2RlZmluZSBDWDE4X0ZfSV9SQURJT19VU0VSCQk1IAkvKiByYWRpbyB0dW5lciBpcyBzZWxlY3RlZCAqLwogI2RlZmluZSBDWDE4X0ZfSV9FTkNfUEFVU0VECQkxMyAJLyogdGhlIGVuY29kZXIgaXMgcGF1c2VkICovCi0jZGVmaW5lIENYMThfRl9JX0hBVkVfV09SSwkJMTUgICAJLyogdGhlcmUgaXMgd29yayB0byBiZSBkb25lICovCi0jZGVmaW5lIENYMThfRl9JX1dPUktfSEFORExFUl9EVkIJMTggICAJLyogd29yayB0byBiZSBkb25lIGZvciBEVkIgKi8KICNkZWZpbmUgQ1gxOF9GX0lfSU5JVEVECQkJMjEgCS8qIHNldCBhZnRlciBmaXJzdCBvcGVuICovCiAjZGVmaW5lIENYMThfRl9JX0ZBSUxFRAkJCTIyIAkvKiBzZXQgaWYgZmlyc3Qgb3BlbiBmYWlsZWQgKi8KLSNkZWZpbmUgQ1gxOF9GX0lfV09SS19JTklURUQJCTIzCS8qIHdvcmtlciB0aHJlYWQgaW5pdGlhbGl6ZWQgKi8KIAogLyogVGhlc2UgYXJlIHRoZSBWQkkgdHlwZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGVtYmVkZGVkIFZCSSBwcml2YXRlIHBhY2tldHMuICovCiAjZGVmaW5lIENYMThfU0xJQ0VEX1RZUEVfVEVMRVRFWFRfQiAgICAgKDEpCkBAIC0yMjAsNiArMjI0LDcgQEAKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJdTMyIGlkOwogCXVuc2lnbmVkIGxvbmcgYl9mbGFnczsKKwl1bnNpZ25lZCBza2lwcGVkOwogCWNoYXIgKmJ1ZjsKIAogCXUzMiBieXRlc3VzZWQ7CkBAIC0yNDgsNiArMjUzLDI3IEBACiBzdHJ1Y3QgY3gxODsJIC8qIGZvcndhcmQgcmVmZXJlbmNlICovCiBzdHJ1Y3QgY3gxOF9zY2I7IC8qIGZvcndhcmQgcmVmZXJlbmNlICovCiAKKworI2RlZmluZSBDWDE4X01BWF9NRExfQUNLUyAyCisjZGVmaW5lIENYMThfTUFYX0VQVV9XT1JLX09SREVSUyAoQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNICsgNykKKy8qIENQVV9ERV9SRUxFQVNFX01ETCBjYW4gYnVyc3QgQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNIG9yZGVycyBpbiBhIGdyb3VwICovCisKKyNkZWZpbmUgQ1gxOF9GX0VXT19NQl9TVEFMRV9VUE9OX1JFQ0VJUFQgMHgxCisjZGVmaW5lIENYMThfRl9FV09fTUJfU1RBTEVfV0hJTEVfUFJPQyAgIDB4MgorI2RlZmluZSBDWDE4X0ZfRVdPX01CX1NUQUxFIFwKKwkgICAgIChDWDE4X0ZfRVdPX01CX1NUQUxFX1VQT05fUkVDRUlQVCB8IENYMThfRl9FV09fTUJfU1RBTEVfV0hJTEVfUFJPQykKKworc3RydWN0IGN4MThfZXB1X3dvcmtfb3JkZXIgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWF0b21pY190IHBlbmRpbmc7CisJc3RydWN0IGN4MTggKmN4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJwdTsKKwlzdHJ1Y3QgY3gxOF9tYWlsYm94IG1iOworCXN0cnVjdCBjeDE4X21kbF9hY2sgbWRsX2Fja1tDWDE4X01BWF9NRExfQUNLU107CisJY2hhciAqc3RyOworfTsKKwogI2RlZmluZSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUgMHhmZmZmZmZmZgogCiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewpAQCAtMjYxLDcgKzI4Nyw3IEBACiAJdW5zaWduZWQgbWRsX29mZnNldDsKIAogCXUzMiBpZDsKLQlzcGlubG9ja190IHFsb2NrOyAJLyogbG9ja3MgYWNjZXNzIHRvIHRoZSBxdWV1ZXMgKi8KKwlzdHJ1Y3QgbXV0ZXggcWxvY2s7IAkvKiBsb2NrcyBhY2Nlc3MgdG8gdGhlIHF1ZXVlcyAqLwogCXVuc2lnbmVkIGxvbmcgc19mbGFnczsJLyogc3RhdHVzIGZsYWdzLCBzZWUgYWJvdmUgKi8KIAlpbnQgZG1hOwkJLyogY2FuIGJlIFBDSV9ETUFfVE9ERVZJQ0UsCiAJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFIG9yCkBAIC0yNzUsOCArMzAxLDggQEAKIAogCS8qIEJ1ZmZlciBRdWV1ZXMgKi8KIAlzdHJ1Y3QgY3gxOF9xdWV1ZSBxX2ZyZWU7CS8qIGZyZWUgYnVmZmVycyAqLwotCXN0cnVjdCBjeDE4X3F1ZXVlIHFfZnVsbDsJLyogZnVsbCBidWZmZXJzICovCi0Jc3RydWN0IGN4MThfcXVldWUgcV9pbzsJCS8qIHdhaXRpbmcgZm9yIEkvTyAqLworCXN0cnVjdCBjeDE4X3F1ZXVlIHFfYnVzeTsJLyogYnVzeSBidWZmZXJzIC0gaW4gdXNlIGJ5IGZpcm13YXJlICovCisJc3RydWN0IGN4MThfcXVldWUgcV9mdWxsOwkvKiBmdWxsIGJ1ZmZlcnMgLSBkYXRhIGZvciB1c2VyIGFwcHMgKi8KIAogCS8qIERWQiAvIERpZ2l0YWwgVHJhbnNwb3J0ICovCiAJc3RydWN0IGN4MThfZHZiIGR2YjsKQEAgLTM1MywxMiArMzc5LDcgQEAKIAlpbnQgYnVzX2luZGV4OyAgIC8qIDAgb3IgMSBmb3IgdGhlIGN4MjM0MTgncyAxc3Qgb3IgMm5kIEkyQyBidXMgKi8KIH07CiAKLSNkZWZpbmUgQ1gxOF9NQVhfTU1JT19SRVRSSUVTIDEwCi0KLXN0cnVjdCBjeDE4X21taW9fc3RhdHMgewotCWF0b21pY190IHJldHJpZWRfd3JpdGVbQ1gxOF9NQVhfTU1JT19SRVRSSUVTKzFdOwotCWF0b21pY190IHJldHJpZWRfcmVhZFtDWDE4X01BWF9NTUlPX1JFVFJJRVMrMV07Ci19OworI2RlZmluZSBDWDE4X01BWF9NTUlPX1dSX1JFVFJJRVMgMTAKIAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBjeDE4IGNhcmRzICovCiBzdHJ1Y3QgY3gxOCB7CkBAIC0zNzgsNyArMzk5LDkgQEAKIAl1MzIgdjRsMl9jYXA7CQkvKiBWNEwyIGNhcGFiaWxpdGllcyBvZiBjYXJkICovCiAJdTMyIGh3X2ZsYWdzOyAJCS8qIEhhcmR3YXJlIGRlc2NyaXB0aW9uIG9mIHRoZSBib2FyZCAqLwogCXVuc2lnbmVkIG1kbF9vZmZzZXQ7Ci0Jc3RydWN0IGN4MThfc2NiIF9faW9tZW0gKnNjYjsgICAvKiBwb2ludGVyIHRvIFNDQiAqLworCXN0cnVjdCBjeDE4X3NjYiBfX2lvbWVtICpzY2I7IC8qIHBvaW50ZXIgdG8gU0NCICovCisJc3RydWN0IG11dGV4IGVwdTJhcHVfbWJfbG9jazsgLyogcHJvdGVjdCBkcml2ZXIgdG8gY2hpcCBtYWlsYm94IGluIFNDQiovCisJc3RydWN0IG11dGV4IGVwdTJjcHVfbWJfbG9jazsgLyogcHJvdGVjdCBkcml2ZXIgdG8gY2hpcCBtYWlsYm94IGluIFNDQiovCiAKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSBhdl9zdGF0ZTsKIApAQCAtMzk3LDYgKzQyMCw3IEBACiAKIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplX2xvY2s7ICAgIC8qIG11dGV4IHVzZWQgdG8gc2VyaWFsaXplIG9wZW4vY2xvc2Uvc3RhcnQvc3RvcC9pb2N0bCBvcGVyYXRpb25zICovCiAJc3RydWN0IGN4MThfb3B0aW9ucyBvcHRpb25zOyAJLyogVXNlciBvcHRpb25zICovCisJaW50IHN0cmVhbV9idWZmZXJzW0NYMThfTUFYX1NUUkVBTVNdOyAvKiAjIG9mIGJ1ZmZlcnMgZm9yIGVhY2ggc3RyZWFtICovCiAJaW50IHN0cmVhbV9idWZfc2l6ZVtDWDE4X01BWF9TVFJFQU1TXTsgLyogU3RyZWFtIGJ1ZmZlciBzaXplICovCiAJc3RydWN0IGN4MThfc3RyZWFtIHN0cmVhbXNbQ1gxOF9NQVhfU1RSRUFNU107IAkvKiBTdHJlYW0gZGF0YSAqLwogCXVuc2lnbmVkIGxvbmcgaV9mbGFnczsgIC8qIGdsb2JhbCBjeDE4IGZsYWdzICovCkBAIC00MjgsMTQgKzQ1MiwxNyBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgbWJfYXB1X3dhaXRxOwogCXdhaXRfcXVldWVfaGVhZF90IG1iX2NwdV93YWl0cTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBtYl9lcHVfd2FpdHE7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgbWJfaHB1X3dhaXRxOwogCXdhaXRfcXVldWVfaGVhZF90IGNhcF93OwogCS8qIHdoZW4gdGhlIGN1cnJlbnQgRE1BIGlzIGZpbmlzaGVkIHRoaXMgcXVldWUgaXMgd29rZW4gdXAgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBkbWFfd2FpdHE7CiAKKwl1MzIgc3cxX2lycV9tYXNrOworCXUzMiBzdzJfaXJxX21hc2s7CisJdTMyIGh3Ml9pcnFfbWFzazsKKwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3F1ZXVlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBjeDE4X2VwdV93b3JrX29yZGVyIGVwdV93b3JrX29yZGVyW0NYMThfTUFYX0VQVV9XT1JLX09SREVSU107CisJY2hhciBlcHVfZGVidWdfc3RyWzI1Nl07IC8qIENYMThfRVBVX0RFQlVHIGlzIHJhcmU6IHVzZSBzaGFyZWQgc3BhY2UgKi8KIAogCS8qIGkyYyAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcFsyXTsKQEAgLTQ1MCw5ICs0NzcsNiBAQAogCXUzMiBncGlvX3ZhbDsKIAlzdHJ1Y3QgbXV0ZXggZ3Bpb19sb2NrOwogCi0JLyogU3RhdGlzdGljcyAqLwotCXN0cnVjdCBjeDE4X21taW9fc3RhdHMgbW1pb19zdGF0czsKLQogCS8qIHY0bDIgYW5kIFVzZXIgc2V0dGluZ3MgKi8KIAogCS8qIGNvZGVjIHNldHRpbmdzICovCkBAIC00ODEsNCArNTA1LDEwIEBACiAvKiBGaXJzdC1vcGVuIGluaXRpYWxpemF0aW9uOiBsb2FkIGZpcm13YXJlLCBldGMuICovCiBpbnQgY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oc3RydWN0IGN4MTggKmN4KTsKIAorLyogVGVzdCBpZiB0aGUgY3VycmVudCBWQkkgbW9kZSBpcyByYXcgKDEpIG9yIHNsaWNlZCAoMCkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGN4MThfcmF3X3ZiaShjb25zdCBzdHJ1Y3QgY3gxOCAqY3gpCit7CisJcmV0dXJuIGN4LT52YmkuaW4udHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworfQorCiAjZW5kaWYgLyogQ1gxOF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCA0NTQyZTJlLi5iZDVlNmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMiw2ICsyLDcgQEAKICAqICBjeDE4IGZ1bmN0aW9ucyBmb3IgRFZCIHN1cHBvcnQKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDggKzI0LDYgQEAKICNpbmNsdWRlICJjeDE4LWR2Yi5oIgogI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKLSNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCi0jaW5jbHVkZSAiY3gxOC1zY2IuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgogI2luY2x1ZGUgIm14bDUwMDVzLmgiCkBAIC0xMDksMjAgKzEwOCwyMyBAQAogCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc3RyZWFtKSB7Ci0JCW11dGV4X2xvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKLQkJaWYgKHN0cmVhbS0+ZHZiLmZlZWRpbmcrKyA9PSAwKSB7Ci0JCQlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0aW5nIFRyYW5zcG9ydCBETUFcbiIpOwotCQkJcmV0ID0gY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc3RyZWFtKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJQ1gxOF9ERUJVR19JTkZPKAotCQkJCQkiRmFpbGVkIHRvIHN0YXJ0IFRyYW5zcG9ydCBETUFcbiIpOwotCQkJCXN0cmVhbS0+ZHZiLmZlZWRpbmctLTsKLQkJCX0KLQkJfSBlbHNlCi0JCQlyZXQgPSAwOwotCQltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKLQl9CisJaWYgKCFzdHJlYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOworCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nKysgPT0gMCkgeworCQlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0aW5nIFRyYW5zcG9ydCBETUFcbiIpOworCQlzZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CisJCXJldCA9IGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlDWDE4X0RFQlVHX0lORk8oIkZhaWxlZCB0byBzdGFydCBUcmFuc3BvcnQgRE1BXG4iKTsKKwkJCXN0cmVhbS0+ZHZiLmZlZWRpbmctLTsKKwkJCWlmIChzdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApCisJCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnN0cmVhbS0+c19mbGFncyk7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gMDsKKwltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTUsNiArMjE3LDEwIEBACiAJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZHZiLT5kdmJuZXQsIGRteCk7CiAKIAlDWDE4X0lORk8oIkRWQiBGcm9udGVuZCByZWdpc3RlcmVkXG4iKTsKKwlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgRFZCIGFkYXB0ZXIlZCBmb3IgJXMgKCVkIHggJWQga0IpXG4iLAorCQkgIHN0cmVhbS0+ZHZiLmR2Yl9hZGFwdGVyLm51bSwgc3RyZWFtLT5uYW1lLAorCQkgIHN0cmVhbS0+YnVmZmVycywgc3RyZWFtLT5idWZfc2l6ZS8xMDI0KTsKKwogCW11dGV4X2luaXQoJmR2Yi0+ZmVlZGxvY2spOwogCWR2Yi0+ZW5hYmxlZCA9IDE7CiAJcmV0dXJuIHJldDsKQEAgLTMwMiwyNCArMzA4LDMgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLXZvaWQgY3gxOF9kdmJfd29ya19oYW5kbGVyKHN0cnVjdCBjeDE4ICpjeCkKLXsKLQlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFNdOwotCi0Jd2hpbGUgKChidWYgPSBjeDE4X2RlcXVldWUocywgJnMtPnFfZnVsbCkpICE9IE5VTEwpIHsKLQkJaWYgKHMtPmR2Yi5lbmFibGVkKQotCQkJZHZiX2RteF9zd2ZpbHRlcigmcy0+ZHZiLmRlbXV4LCBidWYtPmJ1ZiwKLQkJCQkJIGJ1Zi0+Ynl0ZXN1c2VkKTsKLQotCQljeDE4X2VucXVldWUocywgYnVmLCAmcy0+cV9mcmVlKTsKLQkJY3gxOF9idWZfc3luY19mb3JfZGV2aWNlKHMsIGJ1Zik7Ci0JCWlmIChzLT5oYW5kbGUgPT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSAvKiBGSVhNRTogaW1wcm92ZSAqLwotCQkJY29udGludWU7Ci0KLQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9TRVRfTURMLCA1LCBzLT5oYW5kbGUsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopJmN4LT5zY2ItPmNwdV9tZGxbYnVmLT5pZF0gLSBjeC0+ZW5jX21lbSwKLQkJICAgICAgIDEsIGJ1Zi0+aWQsIHMtPmJ1Zl9zaXplKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5oCmluZGV4IGJiZGNlZmMuLmJmOGQ4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5oCkBAIC0yMyw0ICsyMywzIEBACiAKIGludCBjeDE4X2R2Yl9yZWdpc3RlcihzdHJ1Y3QgY3gxOF9zdHJlYW0gKnN0cmVhbSk7CiB2b2lkIGN4MThfZHZiX3VucmVnaXN0ZXIoc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0pOwotdm9pZCBjeDE4X2R2Yl93b3JrX2hhbmRsZXIoc3RydWN0IGN4MTggKmN4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCA1ZjkwODk5Li40MjUyNzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBpdnR2LWZpbGVvcHMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjYsMTIgKzY3LDExIEBACiAJfQogCXMtPmlkID0gaWQtPm9wZW5faWQ7CiAKLQkvKiBDWDE4X0RFQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gY2xhaW0gQ1gxOF9ERUNfU1RSRUFNX1RZUEVfVkJJLAotCSAgIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byBjbGFpbSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkKKwkvKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gY2xhaW0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJCiAJICAgKHByb3ZpZGVkIFZCSSBpbnNlcnRpb24gaXMgb24gYW5kIHNsaWNlZCBWQkkgaXMgc2VsZWN0ZWQpLCBmb3IgYWxsCiAJICAgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lICovCiAJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JCSAgIGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0KSB7CisJICAgIGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgIWN4MThfcmF3X3ZiaShjeCkpIHsKIAkJdmJpX3R5cGUgPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkk7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIDA7CkBAIC0xODUsOCArMTg1LDEwIEBACiAJCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKIAkJCQl3aGlsZSAoKGJ1ZiA9IGN4MThfZGVxdWV1ZShzX3ZiaSwgJnNfdmJpLT5xX2Z1bGwpKSkgewogCQkJCQkvKiBieXRlc3dhcCBhbmQgcHJvY2VzcyBWQkkgZGF0YSAqLwotLyoJCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLCBzX3ZiaS0+ZG1hX3B0cywgc192YmktPnR5cGUpOyAqLwotCQkJCQljeDE4X2VucXVldWUoc192YmksIGJ1ZiwgJnNfdmJpLT5xX2ZyZWUpOworCQkJCQljeDE4X3Byb2Nlc3NfdmJpX2RhdGEoY3gsIGJ1ZiwKKwkJCQkJCQkgICAgICBzX3ZiaS0+ZG1hX3B0cywKKwkJCQkJCQkgICAgICBzX3ZiaS0+dHlwZSk7CisJCQkJCWN4MThfc3RyZWFtX3B1dF9idWZfZncoc192YmksIGJ1Zik7CiAJCQkJfQogCQkJfQogCQkJYnVmID0gJmN4LT52Ymkuc2xpY2VkX21wZWdfYnVmOwpAQCAtMTk0LDExICsxOTYsNiBAQAogCQkJCXJldHVybiBidWY7CiAJCX0KIAotCQkvKiBkbyB3ZSBoYXZlIGxlZnRvdmVyIGRhdGE/ICovCi0JCWJ1ZiA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9pbyk7Ci0JCWlmIChidWYpCi0JCQlyZXR1cm4gYnVmOwotCiAJCS8qIGRvIHdlIGhhdmUgbmV3IGRhdGE/ICovCiAJCWJ1ZiA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mdWxsKTsKIAkJaWYgKGJ1ZikgewpAQCAtMjYyLDcgKzI1OSw3IEBACiAJaWYgKGxlbiA+IHVjb3VudCkKIAkJbGVuID0gdWNvdW50OwogCWlmIChjeC0+dmJpLmluc2VydF9tcGVnICYmIHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIGN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCAmJiBidWYgIT0gJmN4LT52Ymkuc2xpY2VkX21wZWdfYnVmKSB7CisJICAgICFjeDE4X3Jhd192YmkoY3gpICYmIGJ1ZiAhPSAmY3gtPnZiaS5zbGljZWRfbXBlZ19idWYpIHsKIAkJY29uc3QgY2hhciAqc3RhcnQgPSBidWYtPmJ1ZiArIGJ1Zi0+cmVhZHBvczsKIAkJY29uc3QgY2hhciAqcCA9IHN0YXJ0ICsgMTsKIAkJY29uc3QgdTggKnE7CkBAIC0zMzcsOCArMzM0LDcgQEAKIAkvKiBFYWNoIFZCSSBidWZmZXIgaXMgb25lIGZyYW1lLCB0aGUgdjRsMiBBUEkgc2F5cyB0aGF0IGZvciBWQkkgdGhlCiAJICAgZnJhbWVzIHNob3VsZCBhcnJpdmUgb25lLWJ5LW9uZSwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIG91dHB1dCBtb3JlCiAJICAgdGhhbiBvbmUgVkJJIGZyYW1lIGF0IGEgdGltZSAqLwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgotCSAgICBjeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQpCisJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJICYmICFjeDE4X3Jhd192YmkoY3gpKQogCQlzaW5nbGVfZnJhbWUgPSAxOwogCiAJZm9yICg7OykgewpAQCAtMzY1LDE2ICszNjEsMTAgQEAKIAkJCQl0b3RfY291bnQgLSB0b3Rfd3JpdHRlbik7CiAKIAkJaWYgKGJ1ZiAhPSAmY3gtPnZiaS5zbGljZWRfbXBlZ19idWYpIHsKLQkJCWlmIChidWYtPnJlYWRwb3MgPT0gYnVmLT5ieXRlc3VzZWQpIHsKLQkJCQljeDE4X2J1Zl9zeW5jX2Zvcl9kZXZpY2UocywgYnVmKTsKLQkJCQljeDE4X2VucXVldWUocywgYnVmLCAmcy0+cV9mcmVlKTsKLQkJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0RFX1NFVF9NREwsIDUsCi0JCQkJCXMtPmhhbmRsZSwKLQkJCQkJKHZvaWQgX19pb21lbSAqKSZjeC0+c2NiLT5jcHVfbWRsW2J1Zi0+aWRdIC0KLQkJCQkJICBjeC0+ZW5jX21lbSwKLQkJCQkJMSwgYnVmLT5pZCwgcy0+YnVmX3NpemUpOwotCQkJfSBlbHNlCi0JCQkJY3gxOF9lbnF1ZXVlKHMsIGJ1ZiwgJnMtPnFfaW8pOworCQkJaWYgKGJ1Zi0+cmVhZHBvcyA9PSBidWYtPmJ5dGVzdXNlZCkKKwkJCQljeDE4X3N0cmVhbV9wdXRfYnVmX2Z3KHMsIGJ1Zik7CisJCQllbHNlCisJCQkJY3gxOF9wdXNoKHMsIGJ1ZiwgJnMtPnFfZnVsbCk7CiAJCX0gZWxzZSBpZiAoYnVmLT5yZWFkcG9zID09IGJ1Zi0+Ynl0ZXN1c2VkKSB7CiAJCQlpbnQgaWR4ID0gY3gtPnZiaS5pbnNlcnRlZF9mcmFtZSAlIENYMThfVkJJX0ZSQU1FUzsKIApAQCAtNTE4LDcgKzUwOCw3IEBACiAJQ1gxOF9ERUJVR19ISV9GSUxFKCJFbmNvZGVyIHBvbGxcbiIpOwogCXBvbGxfd2FpdChmaWxwLCAmcy0+d2FpdHEsIHdhaXQpOwogCi0JaWYgKGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuYnVmZmVycykgfHwgYXRvbWljX3JlYWQoJnMtPnFfaW8uYnVmZmVycykpCisJaWYgKGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuYnVmZmVycykpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCWlmIChlb2YpCiAJCXJldHVybiBQT0xMSFVQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKaW5kZXggNTE1MzQ0Mi4uMWZhOTVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCkBAIC0yLDYgKzIsNyBAQAogICogIGN4MTggZmlybXdhcmUgZnVuY3Rpb25zCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNSw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKICNpbmNsdWRlICJjeDE4LWZpcm13YXJlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgorI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNkZWZpbmUgQ1gxOF9QUk9DX1NPRlRfUkVTRVQgCQkweGM3MDAxMApAQCAtMTIxLDYgKzEyMyw3IEBACiAJCQlpZiAoY3gxOF9yYXdfcmVhZGwoY3gsIGRzdCkgIT0gKnNyYykgewogCQkJCUNYMThfRVJSKCJNaXNtYXRjaCBhdCBvZmZzZXQgJXhcbiIsIGkpOwogCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJCWN4MThfc2V0dXBfcGFnZShjeCwgMCk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCQlkc3QrKzsKQEAgLTEzMSwxMCArMTM0LDEyIEBACiAJCUNYMThfSU5GTygibG9hZGVkICVzIGZpcm13YXJlICglemQgYnl0ZXMpXG4iLCBmbiwgZnctPnNpemUpOwogCXNpemUgPSBmdy0+c2l6ZTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwljeDE4X3NldHVwX3BhZ2UoY3gsIFNDQl9PRkZTRVQpOwogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgaW50IGxvYWRfYXB1X2Z3X2RpcmVjdChjb25zdCBjaGFyICpmbiwgdTggX19pb21lbSAqZHN0LCBzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgaW50IGxvYWRfYXB1X2Z3X2RpcmVjdChjb25zdCBjaGFyICpmbiwgdTggX19pb21lbSAqZHN0LCBzdHJ1Y3QgY3gxOCAqY3gsCisJCQkJdTMyICplbnRyeV9hZGRyKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwogCWludCBpLCBqOwpAQCAtMTQ5LDkgKzE1NCwxMSBAQAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZjeC0+ZGV2LT5kZXYpKSB7CiAJCUNYMThfRVJSKCJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgZm4pOwogCQlDWDE4X0VSUigiZGlkIHlvdSBwdXQgdGhlIGZpcm13YXJlIGluIHRoZSBob3RwbHVnIGZpcm13YXJlIGRpcmVjdG9yeT9cbiIpOworCQljeDE4X3NldHVwX3BhZ2UoY3gsIDApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwkqZW50cnlfYWRkciA9IDA7CiAJc3JjID0gKGNvbnN0IHUzMiAqKWZ3LT5kYXRhOwogCXZlcnMgPSBmdy0+ZGF0YSArIHNpemVvZihzZWdoZHIpOwogCXN6ID0gZnctPnNpemU7CkBAIC0xNjgsMTAgKzE3NSwxMiBAQAogCQl9CiAJCUNYMThfREVCVUdfSU5GTygibG9hZCBzZWdtZW50ICV4LSV4XG4iLCBzZWdoZHIuYWRkciwKIAkJCQlzZWdoZHIuYWRkciArIHNlZ2hkci5zaXplIC0gMSk7CisJCWlmICgqZW50cnlfYWRkciA9PSAwKQorCQkJKmVudHJ5X2FkZHIgPSBzZWdoZHIuYWRkcjsKIAkJaWYgKG9mZnNldCArIHNlZ2hkci5zaXplID4gc3opCiAJCQlicmVhazsKIAkJZm9yIChpID0gMDsgaSA8IHNlZ2hkci5zaXplOyBpICs9IDQwOTYpIHsKLQkJCWN4MThfc2V0dXBfcGFnZShjeCwgb2Zmc2V0ICsgaSk7CisJCQljeDE4X3NldHVwX3BhZ2UoY3gsIHNlZ2hkci5hZGRyICsgaSk7CiAJCQlmb3IgKGogPSBpOyBqIDwgc2VnaGRyLnNpemUgJiYgaiA8IGkgKyA0MDk2OyBqICs9IDQpIHsKIAkJCQkvKiBubyBuZWVkIGZvciBlbmRpYW5uZXNzIGNvbnZlcnNpb24gb24gdGhlIHBwYyAqLwogCQkJCWN4MThfcmF3X3dyaXRlbChjeCwgc3JjWyhvZmZzZXQgKyBqKSAvIDRdLApAQCAtMTgxLDYgKzE5MCw3IEBACiAJCQkJCUNYMThfRVJSKCJNaXNtYXRjaCBhdCBvZmZzZXQgJXhcbiIsCiAJCQkJCQkgb2Zmc2V0ICsgaik7CiAJCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJCQljeDE4X3NldHVwX3BhZ2UoY3gsIDApOwogCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQl9CiAJCQl9CkBAIC0xOTIsMTYgKzIwMiwxNyBAQAogCQkJCWZuLCBhcHVfdmVyc2lvbiwgZnctPnNpemUpOwogCXNpemUgPSBmdy0+c2l6ZTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkvKiBDbGVhciBiaXQwIGZvciBBUFUgdG8gc3RhcnQgZnJvbSAwICovCi0JY3gxOF93cml0ZV9yZWcoY3gsIGN4MThfcmVhZF9yZWcoY3gsIDB4YzcyMDMwKSAmIH4xLCAweGM3MjAzMCk7CisJY3gxOF9zZXR1cF9wYWdlKGN4LCAwKTsKIAlyZXR1cm4gc2l6ZTsKIH0KIAogdm9pZCBjeDE4X2hhbHRfZmlybXdhcmUoc3RydWN0IGN4MTggKmN4KQogewogCUNYMThfREVCVUdfSU5GTygiUHJlcGFyaW5nIGZvciBmaXJtd2FyZSBoYWx0LlxuIik7Ci0JY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwRjAwMEYsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogc3RvcCB0aGUgZncgKi8KLQljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAyMDAwMiwgQ1gxOF9BREVDX0NPTlRST0wpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgMHgwMDBGMDAwRiwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQsCisJCQkJICAweDAwMDAwMDBGLCAweDAwMEYwMDBGKTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4MDAwMjAwMDIsIENYMThfQURFQ19DT05UUk9MLAorCQkJCSAgMHgwMDAwMDAwMiwgMHgwMDAyMDAwMik7CiB9CiAKIHZvaWQgY3gxOF9pbml0X3Bvd2VyKHN0cnVjdCBjeDE4ICpjeCwgaW50IGxvd3B3cikKQEAgLTIxMSw5ICsyMjIsNDggQEAKIAljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDAwOCwgQ1gxOF9QTExfUE9XRVJfRE9XTik7CiAKIAkvKiBBREVDIG91dCBvZiBzbGVlcCAqLwotCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDIwMDAwLCBDWDE4X0FERUNfQ09OVFJPTCk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwMDIwMDAwLCBDWDE4X0FERUNfQ09OVFJPTCwKKwkJCQkgIDB4MDAwMDAwMDAsIDB4MDAwMjAwMDIpOwogCi0JLyogVGhlIGZhc3QgY2xvY2sgaXMgYXQgMjAwLzI0NSBNSHogKi8KKwkvKgorCSAqIFRoZSBQTEwgcGFyYW1ldGVycyBhcmUgYmFzZWQgb24gdGhlIGV4dGVybmFsIGNyeXN0YWwgZnJlcXVlbmN5IHRoYXQKKwkgKiB3b3VsZCBpZGVhbGx5IGJlOgorCSAqCisJICogTlRTQyBDb2xvciBzdWJjYXJyaWVyIGZyZXEgKiA4ID0KKwkgKiAJNC41IE1Iei8yODYgKiA0NTUvMiAqIDggPSAyOC42MzYzNjM2My4uLiBNSHoKKwkgKgorCSAqIFRoZSBhY2NpZGVudHMgb2YgaGlzdG9yeSBhbmQgcmF0aW9uYWxlIHRoYXQgZXhwbGFpbiBmcm9tIHdoZXJlIHRoaXMKKwkgKiBjb21iaW5hdGlvbiBvZiBtYWdpYyBudW1iZXJzIG9yaWdpbmF0ZSBjYW4gYmUgZm91bmQgaW46CisJICoKKwkgKiBbMV0gQWJyYWhhbXMsIEkuIEMuLCAiQ2hvaWNlIG9mIENocm9taW5hbmNlIFN1YmNhcnJpZXIgRnJlcXVlbmN5IGluCisJICogdGhlIE5UU0MgU3RhbmRhcmRzIiwgUHJvY2VlZGluZ3Mgb2YgdGhlIEktUi1FLCBKYW51YXJ5IDE5NTQsIHBwIDc5LTgwCisJICoKKwkgKiBbMl0gQWJyYWhhbXMsIEkuIEMuLCAiVGhlICdGcmVxdWVuY3kgSW50ZXJsZWF2aW5nJyBQcmluY2lwbGUgaW4gdGhlCisJICogTlRTQyBTdGFuZGFyZHMiLCBQcm9jZWVkaW5ncyBvZiB0aGUgSS1SLUUsIEphbnVhcnkgMTk1NCwgcHAgODEtODMKKwkgKgorCSAqIEFzIE1pa2UgQnJhZGxleSBoYXMgcmlnaHRseSBwb2ludGVkIG91dCwgaXQncyBub3QgdGhlIGV4YWN0IGNyeXN0YWwKKwkgKiBmcmVxdWVuY3kgdGhhdCBtYXR0ZXJzLCBvbmx5IHRoYXQgYWxsIHBhcnRzIG9mIHRoZSBkcml2ZXIgYW5kCisJICogZmlybXdhcmUgYXJlIHVzaW5nIHRoZSBzYW1lIHZhbHVlIChjbG9zZSB0byB0aGUgaWRlYWwgdmFsdWUpLgorCSAqCisJICogU2luY2UgSSBoYXZlIGEgc3Ryb25nIHN1c3BpY2lvbiB0aGF0LCBpZiB0aGUgZmlybXdhcmUgZXZlciBhc3N1bWVzIGEKKwkgKiBjcnlzdGFsIHZhbHVlIGF0IGFsbCwgaXQgd2lsbCBhc3N1bWUgMjguNjM2MzYwIE1IeiwgdGhlIGNyeXN0YWwKKwkgKiBmcmVxIHVzZWQgaW4gY2FsY3VsYXRpb25zIGluIHRoaXMgZHJpdmVyIHdpbGwgYmU6CisJICoKKwkgKgl4dGFsX2ZyZXEgPSAyOC42MzYzNjAgTUh6CisJICoKKwkgKiBhbiBlcnJvciBvZiBsZXNzIHRoYW4gMC4xMyBwcG0gd2hpY2ggaXMgd2F5LCB3YXkgYmV0dGVyIHRoYW4gYW55IG9mZgorCSAqIHRoZSBzaGVsZiBjcnlzdGFsIHdpbGwgaGF2ZSBmb3IgYWNjdXJhY3kgYW55d2F5LgorCSAqCisJICogQmVsb3cgSSBhaW0gdG8gcnVuIHRoZSBQTExzJyBWQ09zIG5lYXIgNDAwIE1IeiB0byBtaW5pbXplIGVycm9ycy4KKwkgKgorCSAqIE1hbnkgdGhhbmtzIHRvIEplZmYgQ2FtcGJlbGwgYW5kIE1pa2UgQnJhZGxleSBmb3IgdGhlaXIgZXh0ZW5zaXZlCisJICogaW52ZXN0aWdhdGlvbiwgZXhwZXJpbWVudGF0aW9uLCB0ZXN0aW5nLCBhbmQgc3VnZ2VzdGVkIHNvbHV0aW9ucyBvZgorCSAqIG9mIGF1ZGlvL3ZpZGVvIHN5bmMgcHJvYmxlbXMgd2l0aCBTVmlkZW8gYW5kIENWQlMgY2FwdHVyZXMuCisJICovCisKKwkvKiB0aGUgZmFzdCBjbG9jayBpcyBhdCAyMDAvMjQ1IE1IeiAqLworCS8qIDEgKiB4dGFsX2ZyZXEgKiAweDBkLmY3ZGY5YjggLyAyID0gMjAwIE1IejogNDAwIE1IeiBwcmUgcG9zdC1kaXZpZGUqLworCS8qIDEgKiB4dGFsX2ZyZXEgKiAweDExLjFjNzFlYjggLyAyID0gMjQ1IE1IejogNDkwIE1IeiBwcmUgcG9zdC1kaXZpZGUqLwogCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweEQgOiAweDExLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX0lOVCk7CiAJY3gxOF93cml0ZV9yZWcoY3gsIGxvd3B3ciA/IDB4MUVGQkYzNyA6IDB4MDM4RTNENywKIAkJCQkJCUNYMThfRkFTVF9DTE9DS19QTExfRlJBQyk7CkBAIC0yMjMsMTYgKzI3MywzNiBAQAogCWN4MThfd3JpdGVfcmVnKGN4LCA0LCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX0FESlVTVF9CQU5EV0lEVEgpOwogCiAJLyogc2V0IHNsb3cgY2xvY2sgdG8gMTI1LzEyMCBNSHogKi8KLQljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHgxMSA6IDB4MTAsIENYMThfU0xPV19DTE9DS19QTExfSU5UKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHhFQkFGMDUgOiAweDE4NjE4QTgsCisJLyogeHRhbF9mcmVxICogMHgwZC4xODYxYTIwIC8gMyA9IDEyNSBNSHo6IDM3NSBNSHogYmVmb3JlIHBvc3QtZGl2aWRlICovCisJLyogeHRhbF9mcmVxICogMHgwYy45MjQ5M2Y4IC8gMyA9IDEyMCBNSHo6IDM2MCBNSHogYmVmb3JlIHBvc3QtZGl2aWRlICovCisJY3gxOF93cml0ZV9yZWcoY3gsIGxvd3B3ciA/IDB4RCA6IDB4QywgQ1gxOF9TTE9XX0NMT0NLX1BMTF9JTlQpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweDMwQzM0NCA6IDB4MTI0OTI3RiwKIAkJCQkJCUNYMThfU0xPV19DTE9DS19QTExfRlJBQyk7Ci0JY3gxOF93cml0ZV9yZWcoY3gsIDQsIENYMThfU0xPV19DTE9DS19QTExfUE9TVCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDMsIENYMThfU0xPV19DTE9DS19QTExfUE9TVCk7CiAKIAkvKiBtcGVnIGNsb2NrIHBsbCA1NE1IeiAqLworCS8qIHh0YWxfZnJlcSAqIDB4Zi4xNWYxN2YwIC8gOCA9IDU0IE1IejogNDMyIE1IeiBiZWZvcmUgcG9zdC1kaXZpZGUgKi8KIAljeDE4X3dyaXRlX3JlZyhjeCwgMHhGLCBDWDE4X01QRUdfQ0xPQ0tfUExMX0lOVCk7Ci0JY3gxOF93cml0ZV9yZWcoY3gsIDB4MkJDRkVGLCBDWDE4X01QRUdfQ0xPQ0tfUExMX0ZSQUMpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDJCRTJGRSwgQ1gxOF9NUEVHX0NMT0NLX1BMTF9GUkFDKTsKIAljeDE4X3dyaXRlX3JlZyhjeCwgOCwgQ1gxOF9NUEVHX0NMT0NLX1BMTF9QT1NUKTsKIAorCS8qCisJICogVkRDTEsgIEludGVnZXIgPSAweDBmLCBQb3N0IERpdmlkZXIgPSAweDA0CisJICogQUlNQ0xLIEludGVnZXIgPSAweDBlLCBQb3N0IERpdmlkZXIgPSAweDE2CisJICovCisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QTExfQ1RSTDEsIDB4MTYwZTA0MGYpOworCisJLyogVkRDTEsgRnJhY3Rpb24gPSAweDJiZTJmZSAqLworCS8qIHh0YWwgKiAweGYuMTVmMTdmMC80ID0gMTA4IE1IejogNDMyIE1IeiBiZWZvcmUgcG9zdCBkaXZpZGUgKi8KKwljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1ZJRF9QTExfRlJBQywgMHgwMDJiZTJmZSk7CisKKwkvKiBBSU1DTEsgRnJhY3Rpb24gPSAweDA1MjI3YWQgKi8KKwkvKiB4dGFsICogMHhlLjI5MTNkNjgvMHgxNiA9IDQ4MDAwICogMzg0OiA0MDYgTUh6IGJlZm9yZSBwb3N0LWRpdmlkZSAqLworCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfQVVYX1BMTF9GUkFDLCAweDAwNTIyN2FkKTsKKworCS8qIFNBX01DTEtfU0VMPTEsIFNBX01DTEtfRElWPTB4MTYgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCBDWEFERUNfSTJTX01DTEssIDB4NTYpOworCiAJLyogRGVmYXVsdHMgKi8KIAkvKiBBUFUgPSBTQyBvciBTQy8yID0gMTI1LzYyLjUgKi8KIAkvKiBFUFUgPSBTQyA9IDEyNSAqLwpAQCAtMjQ4LDIyICszMTgsMzQgQEAKIAkvKiBWRkMgPSBkaXNhYmxlZCAqLwogCS8qIFVTQiA9IGRpc2FibGVkICovCiAKLQljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHhGRkZGMDAyMCA6IDB4MDAwNjAwMDQsCi0JCQkJCQkJQ1gxOF9DTE9DS19TRUxFQ1QxKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHhGRkZGMDAwNCA6IDB4MDAwNjAwMDYsCi0JCQkJCQkJQ1gxOF9DTE9DS19TRUxFQ1QyKTsKKwlpZiAobG93cHdyKSB7CisJCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgMHhGRkZGMDAyMCwgQ1gxOF9DTE9DS19TRUxFQ1QxLAorCQkJCQkgIDB4MDAwMDAwMjAsIDB4RkZGRkZGRkYpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4RkZGRjAwMDQsIENYMThfQ0xPQ0tfU0VMRUNUMiwKKwkJCQkJICAweDAwMDAwMDA0LCAweEZGRkZGRkZGKTsKKwl9IGVsc2UgeworCQkvKiBUaGlzIGRvZXNuJ3QgZXhwbGljaXRseSBzZXQgZXZlcnkgY2xvY2sgc2VsZWN0ICovCisJCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgMHgwMDA2MDAwNCwgQ1gxOF9DTE9DS19TRUxFQ1QxLAorCQkJCQkgIDB4MDAwMDAwMDQsIDB4MDAwNjAwMDYpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4MDAwNjAwMDYsIENYMThfQ0xPQ0tfU0VMRUNUMiwKKwkJCQkJICAweDAwMDAwMDA2LCAweDAwMDYwMDA2KTsKKwl9CiAKLQljeDE4X3dyaXRlX3JlZyhjeCwgMHhGRkZGMDAwMiwgQ1gxOF9IQUxGX0NMT0NLX1NFTEVDVDEpOwotCWN4MThfd3JpdGVfcmVnKGN4LCAweEZGRkYwMTA0LCBDWDE4X0hBTEZfQ0xPQ0tfU0VMRUNUMik7Ci0KLQljeDE4X3dyaXRlX3JlZyhjeCwgMHhGRkZGOTAyNiwgQ1gxOF9DTE9DS19FTkFCTEUxKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgMHhGRkZGMzEwNSwgQ1gxOF9DTE9DS19FTkFCTEUyKTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4RkZGRjAwMDIsIENYMThfSEFMRl9DTE9DS19TRUxFQ1QxLAorCQkJCSAgMHgwMDAwMDAwMiwgMHhGRkZGRkZGRik7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweEZGRkYwMTA0LCBDWDE4X0hBTEZfQ0xPQ0tfU0VMRUNUMiwKKwkJCQkgIDB4MDAwMDAxMDQsIDB4RkZGRkZGRkYpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgMHhGRkZGOTAyNiwgQ1gxOF9DTE9DS19FTkFCTEUxLAorCQkJCSAgMHgwMDAwOTAyNiwgMHhGRkZGRkZGRik7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweEZGRkYzMTA1LCBDWDE4X0NMT0NLX0VOQUJMRTIsCisJCQkJICAweDAwMDAzMTA1LCAweEZGRkZGRkZGKTsKIH0KIAogdm9pZCBjeDE4X2luaXRfbWVtb3J5KHN0cnVjdCBjeDE4ICpjeCkKIHsKIAljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgMHgxMDAwMCwgQ1gxOF9ERFJfU09GVF9SRVNFVCk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwMDEwMDAwLCBDWDE4X0REUl9TT0ZUX1JFU0VULAorCQkJCSAgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSk7CiAJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAKIAljeDE4X3dyaXRlX3JlZyhjeCwgY3gtPmNhcmQtPmRkci5jaGlwX2NvbmZpZywgQ1gxOF9ERFJfQ0hJUF9DT05GSUcpOwpAQCAtMjgyLDEzICszNjQsMTUgQEAKIAogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCi0JY3gxOF93cml0ZV9yZWcoY3gsIDB4MjAwMDAsIENYMThfRERSX1NPRlRfUkVTRVQpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgMHgwMDAyMDAwMCwgQ1gxOF9ERFJfU09GVF9SRVNFVCwKKwkJCQkgIDB4MDAwMDAwMDAsIDB4MDAwMjAwMDIpOwogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCiAJLyogdXNlIHBvd2VyLWRvd24gbW9kZSB3aGVuIGlkbGUgKi8KIAljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDAxMCwgQ1gxOF9ERFJfUE9XRVJfUkVHKTsKIAotCWN4MThfd3JpdGVfcmVnKGN4LCAweDEwMDAxLCBDWDE4X1JFR19CVVNfVElNRU9VVF9FTik7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwMDEwMDAxLCBDWDE4X1JFR19CVVNfVElNRU9VVF9FTiwKKwkJCQkgIDB4MDAwMDAwMDEsIDB4MDAwMTAwMDEpOwogCiAJY3gxOF93cml0ZV9yZWcoY3gsIDB4NDgsIENYMThfRERSX01CX1BFUl9ST1dfNyk7CiAJY3gxOF93cml0ZV9yZWcoY3gsIDB4RTAwMDAsIENYMThfRERSX0JBU0VfNjNfQUREUik7CkBAIC0zMDcsNTEgKzM5MSw3NiBAQAogCiBpbnQgY3gxOF9maXJtd2FyZV9pbml0KHN0cnVjdCBjeDE4ICpjeCkKIHsKKwl1MzIgZndfZW50cnlfYWRkcjsKKwlpbnQgc3osIHJldHJpZXM7CisJdTMyIGFwaV9hcmdzW01BWF9NQl9BUkdVTUVOVFNdOworCiAJLyogQWxsb3cgY2hpcCB0byBjb250cm9sIENMS1JVTiAqLwogCWN4MThfd3JpdGVfcmVnKGN4LCAweDUsIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyk7CiAKLQljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDBGMDAwRiwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOyAvKiBzdG9wIHRoZSBmdyAqLworCS8qIFN0b3AgdGhlIGZpcm13YXJlICovCisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwMEYwMDBGLCBDWDE4X1BST0NfU09GVF9SRVNFVCwKKwkJCQkgIDB4MDAwMDAwMEYsIDB4MDAwRjAwMEYpOwogCiAJY3gxOF9tc2xlZXBfdGltZW91dCgxLCAwKTsKIAorCS8qIElmIHRoZSBDUFUgaXMgc3RpbGwgcnVubmluZyAqLworCWlmICgoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpICYgOCkgPT0gMCkgeworCQlDWDE4X0VSUigiJXM6IGNvdWxkbid0IHN0b3AgQ1BVIHRvIGxvYWQgZmlybXdhcmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJY3gxOF9zdzFfaXJxX2VuYWJsZShjeCwgSVJRX0NQVV9UT19FUFUgfCBJUlFfQVBVX1RPX0VQVSk7CiAJY3gxOF9zdzJfaXJxX2VuYWJsZShjeCwgSVJRX0NQVV9UT19FUFVfQUNLIHwgSVJRX0FQVV9UT19FUFVfQUNLKTsKIAotCS8qIE9ubHkgaWYgdGhlIHByb2Nlc3NvciBpcyBub3QgcnVubmluZyAqLwotCWlmIChjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1BST0NfU09GVF9SRVNFVCkgJiA4KSB7Ci0JCWludCBzeiA9IGxvYWRfYXB1X2Z3X2RpcmVjdCgidjRsLWN4MjM0MTgtYXB1LmZ3IiwKLQkJCSAgICAgICBjeC0+ZW5jX21lbSwgY3gpOworCXN6ID0gbG9hZF9jcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1jcHUuZnciLCBjeC0+ZW5jX21lbSwgY3gpOworCWlmIChzeiA8PSAwKQorCQlyZXR1cm4gc3o7CiAKLQkJY3gxOF93cml0ZV9lbmMoY3gsIDB4RTUxRkYwMDQsIDApOwotCQljeDE4X3dyaXRlX2VuYyhjeCwgMHhhMDAwMDAsIDQpOyAgLyogdG9kbzogbm90IGhhcmRjb2RlZCAqLwotCQkvKiBTdGFydCBBUFUgKi8KLQkJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMTAwMDAsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsKLQkJY3gxOF9tc2xlZXBfdGltZW91dCg1MDAsIDApOworCS8qIFRoZSBTQ0IgJiBJUEMgYXJlYSAqbXVzdCogYmUgY29ycmVjdCBiZWZvcmUgc3RhcnRpbmcgdGhlIGZpcm13YXJlcyAqLworCWN4MThfaW5pdF9zY2IoY3gpOwogCi0JCXN6ID0gc3ogPD0gMCA/IHN6IDogbG9hZF9jcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1jcHUuZnciLAotCQkJCQljeC0+ZW5jX21lbSwgY3gpOworCWZ3X2VudHJ5X2FkZHIgPSAwOworCXN6ID0gbG9hZF9hcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1hcHUuZnciLCBjeC0+ZW5jX21lbSwgY3gsCisJCQkJJmZ3X2VudHJ5X2FkZHIpOworCWlmIChzeiA8PSAwKQorCQlyZXR1cm4gc3o7CiAKLQkJaWYgKHN6ID4gMCkgewotCQkJaW50IHJldHJpZXMgPSAwOworCS8qIFN0YXJ0IHRoZSBDUFUuIFRoZSBDUFUgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIEFQVSBmb3IgdXMuICovCisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwMDgwMDAwLCBDWDE4X1BST0NfU09GVF9SRVNFVCwKKwkJCQkgIDB4MDAwMDAwMDAsIDB4MDAwODAwMDgpOwogCi0JCQkvKiBzdGFydCB0aGUgQ1BVICovCi0JCQljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDA4MDAwMCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOwotCQkJd2hpbGUgKHJldHJpZXMrKyA8IDUwKSB7IC8qIExvb3AgZm9yIG1heCA1MDBtUyAqLwotCQkJCWlmICgoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpCi0JCQkJICAgICAmIDEpID09IDApCi0JCQkJCWJyZWFrOwotCQkJCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwotCQkJfQotCQkJY3gxOF9tc2xlZXBfdGltZW91dCgyMDAsIDApOwotCQkJaWYgKHJldHJpZXMgPT0gNTEpIHsKLQkJCQlDWDE4X0VSUigiQ291bGQgbm90IHN0YXJ0IHRoZSBDUFVcbiIpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9Ci0JCWlmIChzeiA8PSAwKQotCQkJcmV0dXJuIC1FSU87CisJLyogV2FpdCB1cCB0byA1MDAgbXMgZm9yIHRoZSBBUFUgdG8gY29tZSBvdXQgb2YgcmVzZXQgKi8KKwlmb3IgKHJldHJpZXMgPSAwOworCSAgICAgcmV0cmllcyA8IDUwICYmIChjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1BST0NfU09GVF9SRVNFVCkgJiAxKSA9PSAxOworCSAgICAgcmV0cmllcysrKQorCQljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKKworCWN4MThfbXNsZWVwX3RpbWVvdXQoMjAwLCAwKTsKKworCWlmIChyZXRyaWVzID09IDUwICYmCisJICAgIChjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1BST0NfU09GVF9SRVNFVCkgJiAxKSA9PSAxKSB7CisJCUNYMThfRVJSKCJDb3VsZCBub3Qgc3RhcnQgdGhlIENQVVxuIik7CisJCXJldHVybiAtRUlPOwogCX0KKworCS8qCisJICogVGhlIENQVSBoYWQgb25jZSBiZWZvcmUgc2V0IHVwIHRvIHJlY2VpdmUgYW4gaW50ZXJydXB0IGZvciBpdCdzCisJICogb3V0Z29pbmcgSVJRX0NQVV9UT19FUFVfQUNLIHRvIHVzLiAgSWYgaXQgZXZlciBkb2VzIHRoaXMsIHdlIGdldCBhbgorCSAqIGludGVycnVwdCB3aGVuIGl0IHNlbmRzIHVzIGFuIGFjaywgYnV0IGJ5IHRoZSB0aW1lIHdlIHByb2Nlc3MgaXQsCisJICogdGhhdCBmbGFnIGluIHRoZSBTVzIgc3RhdHVzIHJlZ2lzdGVyIGhhcyBiZWVuIGNsZWFyZWQgYnkgdGhlIENQVQorCSAqIGZpcm13YXJlLiAgV2UnbGwgcHJldmVudCB0aGF0IG5vdCBzbyB1c2VmdWwgY29uZGl0aW9uIGZyb20gaGFwcGVuaW5nCisJICogYnkgY2xlYXJpbmcgdGhlIENQVSdzIGludGVycnVwdCBlbmFibGVzIGZvciBBY2sgSVJRJ3Mgd2Ugd2FudCB0bworCSAqIHByb2Nlc3MuCisJICovCisJY3gxOF9zdzJfaXJxX2Rpc2FibGVfY3B1KGN4LCBJUlFfQ1BVX1RPX0VQVV9BQ0sgfCBJUlFfQVBVX1RPX0VQVV9BQ0spOworCisJLyogVHJ5IGEgYmVuaWduIGNvbW1hbmQgdG8gc2VlIGlmIHRoZSBDUFUgaXMgYWxpdmUgYW5kIHdlbGwgKi8KKwlzeiA9IGN4MThfdmFwaV9yZXN1bHQoY3gsIGFwaV9hcmdzLCBDWDE4X0NQVV9ERUJVR19QRUVLMzIsIDEsIDApOworCWlmIChzeiA8IDApCisJCXJldHVybiBzejsKKwogCS8qIGluaXRpYWxpemUgR1BJTyAqLwotCWN4MThfd3JpdGVfcmVnKGN4LCAweDE0MDAxNDAwLCAweEM3ODExMCk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDE0MDAxNDAwLCAweGM3ODExMCwgMHgwMDAwMTQwMCwgMHgxNDAwMTQwMCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKaW5kZXggMGU1NjA0Mi4uMWE5OTMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwpAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1ncGlvLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ3LDE1ICs0OCwxOSBAQAogCiBzdGF0aWMgdm9pZCBncGlvX3dyaXRlKHN0cnVjdCBjeDE4ICpjeCkKIHsKLQl1MzIgZGlyID0gY3gtPmdwaW9fZGlyOwotCXUzMiB2YWwgPSBjeC0+Z3Bpb192YWw7CisJdTMyIGRpcl9sbyA9IGN4LT5ncGlvX2RpciAmIDB4ZmZmZjsKKwl1MzIgdmFsX2xvID0gY3gtPmdwaW9fdmFsICYgMHhmZmZmOworCXUzMiBkaXJfaGkgPSBjeC0+Z3Bpb19kaXIgPj4gMTY7CisJdTMyIHZhbF9oaSA9IGN4LT5ncGlvX3ZhbCA+PiAxNjsKIAotCWN4MThfd3JpdGVfcmVnKGN4LCAoZGlyICYgMHhmZmZmKSA8PCAxNiwgQ1gxOF9SRUdfR1BJT19ESVIxKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgKChkaXIgJiAweGZmZmYpIDw8IDE2KSB8ICh2YWwgJiAweGZmZmYpLAotCQkJQ1gxOF9SRUdfR1BJT19PVVQxKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgZGlyICYgMHhmZmZmMDAwMCwgQ1gxOF9SRUdfR1BJT19ESVIyKTsKLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAoZGlyICYgMHhmZmZmMDAwMCkgfCAoKHZhbCAmIDB4ZmZmZjAwMDApID4+IDE2KSwKLQkJCUNYMThfUkVHX0dQSU9fT1VUMik7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCBkaXJfbG8gPDwgMTYsCisJCQkJCUNYMThfUkVHX0dQSU9fRElSMSwgfmRpcl9sbywgZGlyX2xvKTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIChkaXJfbG8gPDwgMTYpIHwgdmFsX2xvLAorCQkJCQlDWDE4X1JFR19HUElPX09VVDEsIHZhbF9sbywgZGlyX2xvKTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIGRpcl9oaSA8PCAxNiwKKwkJCQkJQ1gxOF9SRUdfR1BJT19ESVIyLCB+ZGlyX2hpLCBkaXJfaGkpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgKGRpcl9oaSA8PCAxNikgfCB2YWxfaGksCisJCQkJCUNYMThfUkVHX0dQSU9fT1VUMiwgdmFsX2hpLCBkaXJfaGkpOwogfQogCiB2b2lkIGN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKHN0cnVjdCBjeDE4ICpjeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAppbmRleCBiZWI3NDI0Li4zOWZmY2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBpdnR2LWdwaW8uaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYwppbmRleCBhYTA5ZTU1Li44OTQxZjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYwpAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1pMmMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgImN4MTgtZ3Bpby5oIgogI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCisjaW5jbHVkZSAiY3gxOC1pcnEuaCIKIAogI2RlZmluZSBDWDE4X1JFR19JMkNfMV9XUiAgIDB4ZjE1MDAwCiAjZGVmaW5lIENYMThfUkVHX0kyQ18xX1JEICAgMHhmMTUwMDgKQEAgLTE2MCw5ICsxNjIsOSBAQAogCXUzMiByID0gY3gxOF9yZWFkX3JlZyhjeCwgYWRkcik7CiAKIAlpZiAoc3RhdGUpCi0JCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgfCBTRVRTQ0xfQklULCBhZGRyKTsKKwkJY3gxOF93cml0ZV9yZWcoY3gsIHIgfCBTRVRTQ0xfQklULCBhZGRyKTsKIAllbHNlCi0JCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgJiB+U0VUU0NMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnKGN4LCByICYgflNFVFNDTF9CSVQsIGFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3NldHNkYSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC0xNzMsOSArMTc1LDkgQEAKIAl1MzIgciA9IGN4MThfcmVhZF9yZWcoY3gsIGFkZHIpOwogCiAJaWYgKHN0YXRlKQotCQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCByIHwgU0VUU0RMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnKGN4LCByIHwgU0VUU0RMX0JJVCwgYWRkcik7CiAJZWxzZQotCQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCByICYgflNFVFNETF9CSVQsIGFkZHIpOworCQljeDE4X3dyaXRlX3JlZyhjeCwgciAmIH5TRVRTRExfQklULCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBjeDE4X2dldHNjbCh2b2lkICpkYXRhKQpAQCAtMzk2LDMwICszOTgsMzMgQEAKIAlpZiAoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKIAkJLyogUmVzZXQvVW5yZXNldCBJMkMgaGFyZHdhcmUgYmxvY2sgKi8KIAkJLyogQ2xvY2sgc2VsZWN0IDIyME1IeiAqLwotCQljeDE4X3dyaXRlX3JlZyhjeCwgMHgxMDAwMDAwMCwgMHhjNzEwMDQpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4MTAwMDAwMDAsIDB4YzcxMDA0LAorCQkJCQkgIDB4MDAwMDAwMDAsIDB4MTAwMDEwMDApOwogCQkvKiBDbG9jayBFbmFibGUgKi8KLQkJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgxMDAwMTAwMCwgMHhjNzEwMjQpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIDB4MTAwMDEwMDAsIDB4YzcxMDI0LAorCQkJCQkgIDB4MDAwMDEwMDAsIDB4MTAwMDEwMDApOwogCX0KIAkvKiBjb3VydGVzeSBvZiBTdGV2ZW4gVG90aCA8c3RvdGhAaGF1cHBhdWdlLmNvbT4gKi8KLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYyk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYywgMHgwMDAwMDAwMCwgMHgwMGMwMDBjMCk7CiAJbWRlbGF5KDEwKTsKLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMGMwLCAweGM3MDAxYyk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwYzAwMGMwLCAweGM3MDAxYywgMHgwMDAwMDBjMCwgMHgwMGMwMDBjMCk7CiAJbWRlbGF5KDEwKTsKLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYyk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYywgMHgwMDAwMDAwMCwgMHgwMGMwMDBjMCk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIFNldCB0byBlZGdlLXRyaWdnZXJlZCBpbnRycy4gKi8KLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MzBjOCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDBjMDAwMDAsIDB4YzczMGM4KTsKIAkvKiBDbGVhciBhbnkgc3RhbGUgaW50cnMgKi8KLQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MzBjNCk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCBIVzJfSTJDMV9JTlR8SFcyX0kyQzJfSU5ULCBIVzJfSU5UX0NMUl9TVEFUVVMsCisJCSAgICAgICB+KEhXMl9JMkMxX0lOVHxIVzJfSTJDMl9JTlQpLCBIVzJfSTJDMV9JTlR8SFcyX0kyQzJfSU5UKTsKIAogCS8qIEh3IEkyQzEgQ2xvY2sgRnJlcSB+MTAwa0h6ICovCi0JY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMV9XUik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMjFjMGYgJiB+NCwgQ1gxOF9SRUdfSTJDXzFfV1IpOwogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVswXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdLCAxKTsKIAogCS8qIEh3IEkyQzIgQ2xvY2sgRnJlcSB+MTAwa0h6ICovCi0JY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMl9XUik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMjFjMGYgJiB+NCwgQ1gxOF9SRUdfSTJDXzJfV1IpOwogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzFdLCAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmMKaW5kZXggMjIwZmFlOC4uZWM1YjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pby5jCkBAIC0yNCwxNzkgKzI0LDYgQEAKICNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKIAotdm9pZCBjeDE4X2xvZ19zdGF0aXN0aWNzKHN0cnVjdCBjeDE4ICpjeCkKLXsKLQlpbnQgaTsKLQotCWlmICghKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19JTkZPKSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8PSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykKLQkJQ1gxOF9ERUJVR19JTkZPKCJyZXRyaWVkX3dyaXRlWyVkXSA9ICVkXG4iLCBpLAotCQkJCWF0b21pY19yZWFkKCZjeC0+bW1pb19zdGF0cy5yZXRyaWVkX3dyaXRlW2ldKSk7Ci0JZm9yIChpID0gMDsgaSA8PSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykKLQkJQ1gxOF9ERUJVR19JTkZPKCJyZXRyaWVkX3JlYWRbJWRdID0gJWRcbiIsIGksCi0JCQkJYXRvbWljX3JlYWQoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfcmVhZFtpXSkpOwotCXJldHVybjsKLX0KLQotdm9pZCBjeDE4X3Jhd193cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7Ci0JCWN4MThfcmF3X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCQlpZiAodmFsID09IGN4MThfcmF3X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpKQotCQkJYnJlYWs7Ci0JfQotCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIGksIGFkZHIpOwotfQotCi11MzIgY3gxOF9yYXdfcmVhZGxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaW50IGk7Ci0JdTMyIHZhbDsKLQlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKLQkJdmFsID0gY3gxOF9yYXdfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7Ci0JCWlmICh2YWwgIT0gMHhmZmZmZmZmZikgLyogUENJIGJ1cyByZWFkIGVycm9yICovCi0JCQlicmVhazsKLQl9Ci0JY3gxOF9sb2dfcmVhZF9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKLQlyZXR1cm4gdmFsOwotfQotCi11MTYgY3gxOF9yYXdfcmVhZHdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaW50IGk7Ci0JdTE2IHZhbDsKLQlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKLQkJdmFsID0gY3gxOF9yYXdfcmVhZHdfbm9yZXRyeShjeCwgYWRkcik7Ci0JCWlmICh2YWwgIT0gMHhmZmZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KLQkJCWJyZWFrOwotCX0KLQljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOwotCXJldHVybiB2YWw7Ci19Ci0KLXZvaWQgY3gxOF93cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7Ci0JCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JCWlmICh2YWwgPT0gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKSkKLQkJCWJyZWFrOwotCX0KLQljeDE4X2xvZ193cml0ZV9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKLX0KLQotdm9pZCBfY3gxOF93cml0ZWxfZXhwZWN0KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyLAotCQkJIHUzMiBldmFsLCB1MzIgbWFzaykKLXsKLQlpbnQgaTsKLQlldmFsICY9IG1hc2s7Ci0JZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7Ci0JCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JCWlmIChldmFsID09IChjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpICYgbWFzaykpCi0JCQlicmVhazsKLQl9Ci0JY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhjeCwgaSwgYWRkcik7Ci19Ci0KLXZvaWQgY3gxOF93cml0ZXdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7Ci0JCWN4MThfd3JpdGV3X25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JCWlmICh2YWwgPT0gY3gxOF9yZWFkd19ub3JldHJ5KGN4LCBhZGRyKSkKLQkJCWJyZWFrOwotCX0KLQljeDE4X2xvZ193cml0ZV9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKLX0KLQotdm9pZCBjeDE4X3dyaXRlYl9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgewotCQljeDE4X3dyaXRlYl9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCQlpZiAodmFsID09IGN4MThfcmVhZGJfbm9yZXRyeShjeCwgYWRkcikpCi0JCQlicmVhazsKLQl9Ci0JY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhjeCwgaSwgYWRkcik7Ci19Ci0KLXUzMiBjeDE4X3JlYWRsX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWludCBpOwotCXUzMiB2YWw7Ci0JZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7Ci0JCXZhbCA9IGN4MThfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7Ci0JCWlmICh2YWwgIT0gMHhmZmZmZmZmZikgLyogUENJIGJ1cyByZWFkIGVycm9yICovCi0JCQlicmVhazsKLQl9Ci0JY3gxOF9sb2dfcmVhZF9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKLQlyZXR1cm4gdmFsOwotfQotCi11MTYgY3gxOF9yZWFkd19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpbnQgaTsKLQl1MTYgdmFsOwotCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgewotCQl2YWwgPSBjeDE4X3JlYWR3X25vcmV0cnkoY3gsIGFkZHIpOwotCQlpZiAodmFsICE9IDB4ZmZmZikgLyogUENJIGJ1cyByZWFkIGVycm9yICovCi0JCQlicmVhazsKLQl9Ci0JY3gxOF9sb2dfcmVhZF9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKLQlyZXR1cm4gdmFsOwotfQotCi11OCBjeDE4X3JlYWRiX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWludCBpOwotCXU4IHZhbDsKLQlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKLQkJdmFsID0gY3gxOF9yZWFkYl9ub3JldHJ5KGN4LCBhZGRyKTsKLQkJaWYgKHZhbCAhPSAweGZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KLQkJCWJyZWFrOwotCX0KLQljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOwotCXJldHVybiB2YWw7Ci19Ci0KLXZvaWQgY3gxOF9tZW1jcHlfZnJvbWlvKHN0cnVjdCBjeDE4ICpjeCwgdm9pZCAqdG8sCi0JCQljb25zdCB2b2lkIF9faW9tZW0gKmZyb20sIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JY29uc3QgdTggX19pb21lbSAqc3JjID0gZnJvbTsKLQl1OCAqZHN0ID0gdG87Ci0KLQkvKiBBbGlnbiByZWFkcyBvbiB0aGUgQ1gyMzQxOCdzIGFkZHJlc3NlcyAqLwotCWlmICgobGVuID4gMCkgJiYgKCh1bnNpZ25lZCBsb25nKSBzcmMgJiAxKSkgewotCQkqZHN0ID0gY3gxOF9yZWFkYihjeCwgc3JjKTsKLQkJbGVuLS07Ci0JCWRzdCsrOwotCQlzcmMrKzsKLQl9Ci0JaWYgKChsZW4gPiAxKSAmJiAoKHVuc2lnbmVkIGxvbmcpIHNyYyAmIDIpKSB7Ci0JCSooKHUxNiAqKWRzdCkgPSBjeDE4X3Jhd19yZWFkdyhjeCwgc3JjKTsKLQkJbGVuIC09IDI7Ci0JCWRzdCArPSAyOwotCQlzcmMgKz0gMjsKLQl9Ci0Jd2hpbGUgKGxlbiA+IDMpIHsKLQkJKigodTMyICopZHN0KSA9IGN4MThfcmF3X3JlYWRsKGN4LCBzcmMpOwotCQlsZW4gLT0gNDsKLQkJZHN0ICs9IDQ7Ci0JCXNyYyArPSA0OwotCX0KLQlpZiAobGVuID4gMSkgewotCQkqKCh1MTYgKilkc3QpID0gY3gxOF9yYXdfcmVhZHcoY3gsIHNyYyk7Ci0JCWxlbiAtPSAyOwotCQlkc3QgKz0gMjsKLQkJc3JjICs9IDI7Ci0JfQotCWlmIChsZW4gPiAwKQotCQkqZHN0ID0gY3gxOF9yZWFkYihjeCwgc3JjKTsKLX0KLQogdm9pZCBjeDE4X21lbXNldF9pbyhzdHJ1Y3QgY3gxOCAqY3gsIHZvaWQgX19pb21lbSAqYWRkciwgaW50IHZhbCwgc2l6ZV90IGNvdW50KQogewogCXU4IF9faW9tZW0gKmRzdCA9IGFkZHI7CkBAIC0yMzAsMzIgKzU3LDM1IEBACiAKIHZvaWQgY3gxOF9zdzFfaXJxX2VuYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpCiB7Ci0JdTMyIHI7CiAJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCB2YWwsIFNXMV9JTlRfU1RBVFVTLCB+dmFsLCB2YWwpOwotCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX0VOQUJMRV9QQ0kpOwotCWN4MThfd3JpdGVfcmVnKGN4LCByIHwgdmFsLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOworCWN4LT5zdzFfaXJxX21hc2sgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX0VOQUJMRV9QQ0kpIHwgdmFsOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+c3cxX2lycV9tYXNrLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOwogfQogCiB2b2lkIGN4MThfc3cxX2lycV9kaXNhYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCkKIHsKLQl1MzIgcjsKLQlyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cxX0lOVF9FTkFCTEVfUENJKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgciAmIH52YWwsIFNXMV9JTlRfRU5BQkxFX1BDSSk7CisJY3gtPnN3MV9pcnFfbWFzayA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMV9JTlRfRU5BQkxFX1BDSSkgJiB+dmFsOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+c3cxX2lycV9tYXNrLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOwogfQogCiB2b2lkIGN4MThfc3cyX2lycV9lbmFibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKQogewotCXUzMiByOwogCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgdmFsLCBTVzJfSU5UX1NUQVRVUywgfnZhbCwgdmFsKTsKLQlyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9FTkFCTEVfUENJKTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgciB8IHZhbCwgU1cyX0lOVF9FTkFCTEVfUENJKTsKKwljeC0+c3cyX2lycV9tYXNrID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9FTkFCTEVfUENJKSB8IHZhbDsKKwljeDE4X3dyaXRlX3JlZyhjeCwgY3gtPnN3Ml9pcnFfbWFzaywgU1cyX0lOVF9FTkFCTEVfUENJKTsKIH0KIAogdm9pZCBjeDE4X3N3Ml9pcnFfZGlzYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpCiB7CisJY3gtPnN3Ml9pcnFfbWFzayA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMl9JTlRfRU5BQkxFX1BDSSkgJiB+dmFsOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+c3cyX2lycV9tYXNrLCBTVzJfSU5UX0VOQUJMRV9QQ0kpOworfQorCit2b2lkIGN4MThfc3cyX2lycV9kaXNhYmxlX2NwdShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpCit7CiAJdTMyIHI7Ci0JciA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMl9JTlRfRU5BQkxFX1BDSSk7Ci0JY3gxOF93cml0ZV9yZWcoY3gsIHIgJiB+dmFsLCBTVzJfSU5UX0VOQUJMRV9QQ0kpOworCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzJfSU5UX0VOQUJMRV9DUFUpOworCWN4MThfd3JpdGVfcmVnKGN4LCByICYgfnZhbCwgU1cyX0lOVF9FTkFCTEVfQ1BVKTsKIH0KIAogdm9pZCBjeDE4X3NldHVwX3BhZ2Uoc3RydWN0IGN4MTggKmN4LCB1MzIgYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pby5oCmluZGV4IDQyNTI0NDQuLjI2MzViM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaApAQCAtMjUsMjMyICsyNSwxMjUgQEAKIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X2lvX2RlbGF5KHN0cnVjdCBjeDE4ICpjeCkKLXsKLQlpZiAoY3gtPm9wdGlvbnMubW1pb19uZGVsYXkpCi0JCW5kZWxheShjeC0+b3B0aW9ucy5tbWlvX25kZWxheSk7Ci19Ci0KIC8qCiAgKiBSZWFkYmFjayBhbmQgcmV0cnkgb2YgTU1JTyBhY2Nlc3MgZm9yIHJlbGlhYmlsaXR5OgogICogVGhlIGNvbmNlcHQgd2FzIHN1Z2dlc3RlZCBieSBTdGV2ZSBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4uCiAgKiBUaGUgaW1wbG1lbnRhdGlvbiBpcyB0aGUgZmF1bHQgb2YgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4uCisgKgorICogKndyaXRlKiBmdW5jdGlvbnMgYXJlIGltcGxpZWQgdG8gcmV0cnkgdGhlIG1taW8gdW5sZXNzIHN1ZmZpeGVkIHdpdGggX25vcmV0cnkKKyAqICpyZWFkKiBmdW5jdGlvbnMgbmV2ZXIgcmV0cnkgdGhlIG1taW8gKGl0IG5ldmVyIGhlbHBzIHRvIGRvIHNvKQogICovCiAKLS8qIFN0YXRpc3RpY3MgZ2F0aGVyaW5nICovCi1zdGF0aWMgaW5saW5lCi12b2lkIGN4MThfbG9nX3dyaXRlX3JldHJpZXMoc3RydWN0IGN4MTggKmN4LCBpbnQgaSwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChpID4gQ1gxOF9NQVhfTU1JT19SRVRSSUVTKQotCQlpID0gQ1gxOF9NQVhfTU1JT19SRVRSSUVTOwotCWF0b21pY19pbmMoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfd3JpdGVbaV0pOwotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBjeDE4X2xvZ19yZWFkX3JldHJpZXMoc3RydWN0IGN4MTggKmN4LCBpbnQgaSwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChpID4gQ1gxOF9NQVhfTU1JT19SRVRSSUVTKQotCQlpID0gQ1gxOF9NQVhfTU1JT19SRVRSSUVTOwotCWF0b21pY19pbmMoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfcmVhZFtpXSk7Ci0JcmV0dXJuOwotfQotCi12b2lkIGN4MThfbG9nX3N0YXRpc3RpY3Moc3RydWN0IGN4MTggKmN4KTsKLQogLyogTm9uIGJ5dGVzd2FwcGluZyBtZW1vcnkgbWFwcGVkIElPICovCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3Jhd19yZWFkbChzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoYWRkcik7Cit9CisKIHN0YXRpYyBpbmxpbmUKIHZvaWQgY3gxOF9yYXdfd3JpdGVsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJX19yYXdfd3JpdGVsKHZhbCwgYWRkcik7Ci0JY3gxOF9pb19kZWxheShjeCk7CiB9CiAKLXZvaWQgY3gxOF9yYXdfd3JpdGVsX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGN4MThfcmF3X3dyaXRlbChzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQlpZiAoY3gxOF9yZXRyeV9tbWlvKQotCQljeDE4X3Jhd193cml0ZWxfcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JZWxzZQorCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1dSX1JFVFJJRVM7IGkrKykgewogCQljeDE4X3Jhd193cml0ZWxfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJaWYgKHZhbCA9PSBjeDE4X3Jhd19yZWFkbChjeCwgYWRkcikpCisJCQlicmVhazsKKwl9CiB9CiAKLQotc3RhdGljIGlubGluZQotdTMyIGN4MThfcmF3X3JlYWRsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTMyIHJldCA9IF9fcmF3X3JlYWRsKGFkZHIpOwotCWN4MThfaW9fZGVsYXkoY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXUzMiBjeDE4X3Jhd19yZWFkbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcik7Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmF3X3JlYWRsKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCXJldHVybiBjeDE4X3Jhd19yZWFkbF9yZXRyeShjeCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF9yYXdfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7Ci19Ci0KLQotc3RhdGljIGlubGluZQotdTE2IGN4MThfcmF3X3JlYWR3X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTE2IHJldCA9IF9fcmF3X3JlYWR3KGFkZHIpOwotCWN4MThfaW9fZGVsYXkoY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXUxNiBjeDE4X3Jhd19yZWFkd19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcik7Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGN4MThfcmF3X3JlYWR3KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCXJldHVybiBjeDE4X3Jhd19yZWFkd19yZXRyeShjeCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF9yYXdfcmVhZHdfbm9yZXRyeShjeCwgYWRkcik7Ci19Ci0KLQogLyogTm9ybWFsIG1lbW9yeSBtYXBwZWQgSU8gKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZGwoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpOworfQorCiBzdGF0aWMgaW5saW5lCiB2b2lkIGN4MThfd3JpdGVsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJd3JpdGVsKHZhbCwgYWRkcik7Ci0JY3gxOF9pb19kZWxheShjeCk7CiB9CiAKLXZvaWQgY3gxOF93cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZWwoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JZWxzZQorCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1dSX1JFVFJJRVM7IGkrKykgewogCQljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCQlpZiAodmFsID09IGN4MThfcmVhZGwoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQogfQogCi12b2lkIF9jeDE4X3dyaXRlbF9leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIsCi0JCQkgdTMyIGV2YWwsIHUzMiBtYXNrKTsKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY3gxOF93cml0ZWxfZXhwZWN0KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJdTMyIGV2YWwsIHUzMiBtYXNrKQoreworCWludCBpOworCXUzMiByOworCWV2YWwgJj0gbWFzazsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19XUl9SRVRSSUVTOyBpKyspIHsKKwkJY3gxOF93cml0ZWxfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJciA9IGN4MThfcmVhZGwoY3gsIGFkZHIpOworCQlpZiAociA9PSAweGZmZmZmZmZmICYmIGV2YWwgIT0gMHhmZmZmZmZmZikKKwkJCWNvbnRpbnVlOworCQlpZiAoZXZhbCA9PSAociAmIG1hc2spKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHUxNiBjeDE4X3JlYWR3KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkdyhhZGRyKTsKK30KIAogc3RhdGljIGlubGluZQogdm9pZCBjeDE4X3dyaXRld19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQogewogCXdyaXRldyh2YWwsIGFkZHIpOwotCWN4MThfaW9fZGVsYXkoY3gpOwogfQogCi12b2lkIGN4MThfd3JpdGV3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGV3KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQogewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCWN4MThfd3JpdGV3X3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCWVsc2UKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19XUl9SRVRSSUVTOyBpKyspIHsKIAkJY3gxOF93cml0ZXdfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJaWYgKHZhbCA9PSBjeDE4X3JlYWR3KGN4LCBhZGRyKSkKKwkJCWJyZWFrOworCX0KIH0KIAorc3RhdGljIGlubGluZSB1OCBjeDE4X3JlYWRiKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkYihhZGRyKTsKK30KIAogc3RhdGljIGlubGluZQogdm9pZCBjeDE4X3dyaXRlYl9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJd3JpdGViKHZhbCwgYWRkcik7Ci0JY3gxOF9pb19kZWxheShjeCk7CiB9CiAKLXZvaWQgY3gxOF93cml0ZWJfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlYihzdHJ1Y3QgY3gxOCAqY3gsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQogewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCWN4MThfd3JpdGViX3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCWVsc2UKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19XUl9SRVRSSUVTOyBpKyspIHsKIAkJY3gxOF93cml0ZWJfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTMyIHJldCA9IHJlYWRsKGFkZHIpOwotCWN4MThfaW9fZGVsYXkoY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXUzMiBjeDE4X3JlYWRsX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKLQotc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkbChzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpZiAoY3gxOF9yZXRyeV9tbWlvKQotCQlyZXR1cm4gY3gxOF9yZWFkbF9yZXRyeShjeCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHUxNiBjeDE4X3JlYWR3X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTE2IHJldCA9IHJlYWR3KGFkZHIpOwotCWN4MThfaW9fZGVsYXkoY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXUxNiBjeDE4X3JlYWR3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKLQotc3RhdGljIGlubGluZSB1MTYgY3gxOF9yZWFkdyhzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpZiAoY3gxOF9yZXRyeV9tbWlvKQotCQlyZXR1cm4gY3gxOF9yZWFkd19yZXRyeShjeCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF9yZWFkd19ub3JldHJ5KGN4LCBhZGRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHU4IGN4MThfcmVhZGJfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQl1OCByZXQgPSByZWFkYihhZGRyKTsKLQljeDE4X2lvX2RlbGF5KGN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi11OCBjeDE4X3JlYWRiX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKLQotc3RhdGljIGlubGluZSB1OCBjeDE4X3JlYWRiKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCXJldHVybiBjeDE4X3JlYWRiX3JldHJ5KGN4LCBhZGRyKTsKLQotCXJldHVybiBjeDE4X3JlYWRiX25vcmV0cnkoY3gsIGFkZHIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUKLXUzMiBjeDE4X3dyaXRlX3N5bmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpOworCQlpZiAodmFsID09IGN4MThfcmVhZGIoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgaW5saW5lCi11MzIgY3gxOF93cml0ZV9zeW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWN4MThfd3JpdGVsX3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotCXJldHVybiBjeDE4X3JlYWRsX3JldHJ5KGN4LCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgY3gxOF93cml0ZV9zeW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCXJldHVybiBjeDE4X3dyaXRlX3N5bmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci19Ci0KLQogdm9pZCBjeDE4X21lbWNweV9mcm9taW8oc3RydWN0IGN4MTggKmN4LCB2b2lkICp0bywKLQkJCWNvbnN0IHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7CisJCQljb25zdCB2b2lkIF9faW9tZW0gKmZyb20sIHVuc2lnbmVkIGludCBsZW4pCit7CisJbWVtY3B5X2Zyb21pbyh0bywgZnJvbSwgbGVuKTsKK30KKwogdm9pZCBjeDE4X21lbXNldF9pbyhzdHJ1Y3QgY3gxOCAqY3gsIHZvaWQgX19pb21lbSAqYWRkciwgaW50IHZhbCwgc2l6ZV90IGNvdW50KTsKIAogCkBAIC0yNjAsMTM2ICsxNTMsMzkgQEAKIAljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGN4LT5yZWdfbWVtICsgcmVnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfcmVnX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKLXsKLQljeDE4X3dyaXRlbF9yZXRyeShjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX3JlZyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCiB7Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJY3gxOF93cml0ZV9yZWdfcmV0cnkoY3gsIHZhbCwgcmVnKTsKLQllbHNlCi0JCWN4MThfd3JpdGVfcmVnX25vcmV0cnkoY3gsIHZhbCwgcmVnKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9jeDE4X3dyaXRlX3JlZ19leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnLAotCQkJCQkgIHUzMiBldmFsLCB1MzIgbWFzaykKLXsKLQlfY3gxOF93cml0ZWxfZXhwZWN0KGN4LCB2YWwsIGN4LT5yZWdfbWVtICsgcmVnLCBldmFsLCBtYXNrKTsKKwljeDE4X3dyaXRlbChjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX3JlZ19leHBlY3Qoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnLAogCQkJCQkgdTMyIGV2YWwsIHUzMiBtYXNrKQogewotCWlmIChjeDE4X3JldHJ5X21taW8pCi0JCV9jeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHZhbCwgcmVnLCBldmFsLCBtYXNrKTsKLQllbHNlCi0JCWN4MThfd3JpdGVfcmVnX25vcmV0cnkoY3gsIHZhbCwgcmVnKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRfcmVnX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgcmVnKQotewotCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGN4LT5yZWdfbWVtICsgcmVnKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX3JlZ19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiByZWcpCi17Ci0JcmV0dXJuIGN4MThfcmVhZGxfcmV0cnkoY3gsIGN4LT5yZWdfbWVtICsgcmVnKTsKKwljeDE4X3dyaXRlbF9leHBlY3QoY3gsIHZhbCwgY3gtPnJlZ19tZW0gKyByZWcsIGV2YWwsIG1hc2spOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRfcmVnKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHJlZykKIHsKLQlpZiAoY3gxOF9yZXRyeV9tbWlvKQotCQlyZXR1cm4gY3gxOF9yZWFkX3JlZ19yZXRyeShjeCwgcmVnKTsKLQotCXJldHVybiBjeDE4X3JlYWRfcmVnX25vcmV0cnkoY3gsIHJlZyk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1MzIgY3gxOF93cml0ZV9yZWdfc3luY19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKLXsKLQlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX25vcmV0cnkoY3gsIHZhbCwgY3gtPnJlZ19tZW0gKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBjeDE4X3dyaXRlX3JlZ19zeW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKLXsKLQlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX3JldHJ5KGN4LCB2YWwsIGN4LT5yZWdfbWVtICsgcmVnKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgY3gxOF93cml0ZV9yZWdfc3luYyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCi17Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJcmV0dXJuIGN4MThfd3JpdGVfcmVnX3N5bmNfcmV0cnkoY3gsIHZhbCwgcmVnKTsKLQotCXJldHVybiBjeDE4X3dyaXRlX3JlZ19zeW5jX25vcmV0cnkoY3gsIHZhbCwgcmVnKTsKKwlyZXR1cm4gY3gxOF9yZWFkbChjeCwgY3gtPnJlZ19tZW0gKyByZWcpOwogfQogCiAKIC8qIEFjY2VzcyAiZW5jb2RlciBtZW1vcnkiIHJlZ2lvbiBvZiBDWDIzNDE4IG1lbW9yeSBtYXBwZWQgSS9PICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9lbmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiBhZGRyKQotewotCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfZW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCi17Ci0JY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfZW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCiB7Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJY3gxOF93cml0ZV9lbmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0JZWxzZQotCQljeDE4X3dyaXRlX2VuY19ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9lbmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBhZGRyKQotewotCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGN4LT5lbmNfbWVtICsgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9lbmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgYWRkcikKLXsKLQlyZXR1cm4gY3gxOF9yZWFkbF9yZXRyeShjeCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKKwljeDE4X3dyaXRlbChjeCwgdmFsLCBjeC0+ZW5jX21lbSArIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRfZW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpCiB7Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJcmV0dXJuIGN4MThfcmVhZF9lbmNfcmV0cnkoY3gsIGFkZHIpOwotCi0JcmV0dXJuIGN4MThfcmVhZF9lbmNfbm9yZXRyeShjeCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXUzMiBjeDE4X3dyaXRlX2VuY19zeW5jX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKLXsKLQlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX25vcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZQotdTMyIGN4MThfd3JpdGVfZW5jX3N5bmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKLXsKLQlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX3JldHJ5KGN4LCB2YWwsIGN4LT5lbmNfbWVtICsgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXUzMiBjeDE4X3dyaXRlX2VuY19zeW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCi17Ci0JaWYgKGN4MThfcmV0cnlfbW1pbykKLQkJcmV0dXJuIGN4MThfd3JpdGVfZW5jX3N5bmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7Ci0KLQlyZXR1cm4gY3gxOF93cml0ZV9lbmNfc3luY19ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCXJldHVybiBjeDE4X3JlYWRsKGN4LCBjeC0+ZW5jX21lbSArIGFkZHIpOwogfQogCiB2b2lkIGN4MThfc3cxX2lycV9lbmFibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKIHZvaWQgY3gxOF9zdzFfaXJxX2Rpc2FibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKIHZvaWQgY3gxOF9zdzJfaXJxX2VuYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpOwogdm9pZCBjeDE4X3N3Ml9pcnFfZGlzYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpOwordm9pZCBjeDE4X3N3Ml9pcnFfZGlzYWJsZV9jcHUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKIHZvaWQgY3gxOF9zZXR1cF9wYWdlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpOwogCiAjZW5kaWYgLyogQ1gxOF9JT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCBmMGNhNTBmLi5lNjA4NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgRGVyaXZlZCBmcm9tIGl2dHYtaW9jdGwuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjM3LDEzICsyMzgsMTIgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGlkLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJgotCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ICYmCi0JCQlhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwlpZiAoIWN4MThfcmF3X3ZiaShjeCkgJiYgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKIAljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZjeC0+dmJpLmluKTsKKwljeC0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsIGZtdCk7CiAJcmV0dXJuIGN4MThfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKIH0KIApAQCAtNzQ1LDE0ICs3NDUsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQlDWDE4X0lORk8oIlN0cmVhbSAlczogc3RhdHVzIDB4JTA0bHgsICVkJSUgb2YgJWQgS2lCICglZCBidWZmZXJzKSBpbiB1c2VcbiIsCiAJCQkgIHMtPm5hbWUsIHMtPnNfZmxhZ3MsCi0JCQkgIChzLT5idWZmZXJzIC0gYXRvbWljX3JlYWQoJnMtPnFfZnJlZS5idWZmZXJzKSkKLQkJCQkqIDEwMCAvIHMtPmJ1ZmZlcnMsCisJCQkgIGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuYnVmZmVycykgKiAxMDAgLyBzLT5idWZmZXJzLAogCQkJICAocy0+YnVmZmVycyAqIHMtPmJ1Zl9zaXplKSAvIDEwMjQsIHMtPmJ1ZmZlcnMpOwogCX0KIAlDWDE4X0lORk8oIlJlYWQgTVBFRy9WQkk6ICVsbGQvJWxsZCBieXRlc1xuIiwKIAkJCShsb25nIGxvbmcpY3gtPm1wZ19kYXRhX3JlY2VpdmVkLAogCQkJKGxvbmcgbG9uZyljeC0+dmJpX2RhdGFfaW5zZXJ0ZWQpOwotCWN4MThfbG9nX3N0YXRpc3RpY3MoY3gpOwogCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT09ICBFTkQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PT1cbiIsIGN4LT5udW0pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmgKaW5kZXggMjIyMmY2Ny4uMDhmZTI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5oCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBpdnR2LWlvY3RsLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKaW5kZXggNWZiZmJkMC4uYWYyZjUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgY3gxOCBpbnRlcnJ1cHQgaGFuZGxpbmcKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDEzMiArMjIsOSBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LWlvLmgiCi0jaW5jbHVkZSAiY3gxOC1maXJtd2FyZS5oIgotI2luY2x1ZGUgImN4MTgtZmlsZW9wcy5oIgotI2luY2x1ZGUgImN4MTgtcXVldWUuaCIKICNpbmNsdWRlICJjeDE4LWlycS5oIgotI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKLSNpbmNsdWRlICJjeDE4LXZiaS5oIgogI2luY2x1ZGUgImN4MTgtc2NiLmgiCi0jaW5jbHVkZSAiY3gxOC1kdmIuaCIKLQotdm9pZCBjeDE4X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGN4MTggKmN4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDE4LCB3b3JrKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9JX1dPUktfSU5JVEVELCAmY3gtPmlfZmxhZ3MpKSB7Ci0JCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8tMSB9OwotCQkvKiBUaGlzIHRocmVhZCBtdXN0IHVzZSB0aGUgRklGTyBzY2hlZHVsZXIgYXMgaXQKLQkJICogaXMgcmVhbHRpbWUgc2Vuc2l0aXZlLiAqLwotCQlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKLQl9Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfSV9XT1JLX0hBTkRMRVJfRFZCLCAmY3gtPmlfZmxhZ3MpKQotCQljeDE4X2R2Yl93b3JrX2hhbmRsZXIoY3gpOwotfQotCi1zdGF0aWMgdm9pZCBlcHVfZG1hX2RvbmUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9tYWlsYm94ICptYikKLXsKLQl1MzIgaGFuZGxlID0gbWItPmFyZ3NbMF07Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzID0gTlVMTDsKLQlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKLQl1MzIgb2ZmOwotCWludCBpOwotCWludCBpZDsKLQotCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKLQkJcyA9ICZjeC0+c3RyZWFtc1tpXTsKLQkJaWYgKChoYW5kbGUgPT0gcy0+aGFuZGxlKSAmJiAocy0+ZHZiLmVuYWJsZWQpKQotCQkJYnJlYWs7Ci0JCWlmIChzLT52NGwyZGV2ICYmIGhhbmRsZSA9PSBzLT5oYW5kbGUpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gQ1gxOF9NQVhfU1RSRUFNUykgewotCQlDWDE4X1dBUk4oIkdvdCBETUEgZG9uZSBub3RpZmljYXRpb24gZm9yIHVua25vd24vaW5hY3RpdmUiCi0JCQkgICIgaGFuZGxlICVkXG4iLCBoYW5kbGUpOwotCQltYi0+ZXJyb3IgPSBDWEVSUl9OT1RfT1BFTjsKLQkJbWItPmNtZCA9IDA7Ci0JCWN4MThfbWJfYWNrKGN4LCBtYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvZmYgPSBtYi0+YXJnc1sxXTsKLQlpZiAobWItPmFyZ3NbMl0gIT0gMSkKLQkJQ1gxOF9XQVJOKCJBY2sgc3RydWN0ID0gJWQgZm9yICVzXG4iLAotCQkJbWItPmFyZ3NbMl0sIHMtPm5hbWUpOwotCWlkID0gY3gxOF9yZWFkX2VuYyhjeCwgb2ZmKTsKLQlidWYgPSBjeDE4X3F1ZXVlX2dldF9idWZfaXJxKHMsIGlkLCBjeDE4X3JlYWRfZW5jKGN4LCBvZmYgKyA0KSk7Ci0JQ1gxOF9ERUJVR19ISV9ETUEoIkRNQSBET05FIGZvciAlcyAoYnVmZmVyICVkKVxuIiwgcy0+bmFtZSwgaWQpOwotCWlmIChidWYpIHsKLQkJY3gxOF9idWZfc3luY19mb3JfY3B1KHMsIGJ1Zik7Ci0JCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTICYmIHMtPmR2Yi5lbmFibGVkKSB7Ci0JCQlDWDE4X0RFQlVHX0hJX0RNQSgiVFMgcmVjdiBieXRlc3VzZWQgPSAlZFxuIiwKLQkJCQkJYnVmLT5ieXRlc3VzZWQpOwotCi0JCQlzZXRfYml0KENYMThfRl9JX1dPUktfSEFORExFUl9EVkIsICZjeC0+aV9mbGFncyk7Ci0JCQlzZXRfYml0KENYMThfRl9JX0hBVkVfV09SSywgJmN4LT5pX2ZsYWdzKTsKLQkJfSBlbHNlCi0JCQlzZXRfYml0KENYMThfRl9CX05FRURfQlVGX1NXQVAsICZidWYtPmJfZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCUNYMThfV0FSTigiQ291bGQgbm90IGZpbmQgYnVmICVkIGZvciBzdHJlYW0gJXNcbiIsCi0JCQkJY3gxOF9yZWFkX2VuYyhjeCwgb2ZmKSwgcy0+bmFtZSk7Ci0JfQotCW1iLT5lcnJvciA9IDA7Ci0JbWItPmNtZCA9IDA7Ci0JY3gxOF9tYl9hY2soY3gsIG1iKTsKLQl3YWtlX3VwKCZjeC0+ZG1hX3dhaXRxKTsKLQlpZiAocy0+aWQgIT0gLTEpCi0JCXdha2VfdXAoJnMtPndhaXRxKTsKLX0KLQotc3RhdGljIHZvaWQgZXB1X2RlYnVnKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfbWFpbGJveCAqbWIpCi17Ci0JY2hhciBzdHJbMjU2XSA9IHsgMCB9OwotCWNoYXIgKnA7Ci0KLQlpZiAobWItPmFyZ3NbMV0pIHsKLQkJY3gxOF9zZXR1cF9wYWdlKGN4LCBtYi0+YXJnc1sxXSk7Ci0JCWN4MThfbWVtY3B5X2Zyb21pbyhjeCwgc3RyLCBjeC0+ZW5jX21lbSArIG1iLT5hcmdzWzFdLCAyNTIpOwotCQlzdHJbMjUyXSA9IDA7Ci0JfQotCWN4MThfbWJfYWNrKGN4LCBtYik7Ci0JQ1gxOF9ERUJVR19JTkZPKCIleCAlc1xuIiwgbWItPmFyZ3NbMF0sIHN0cik7Ci0JcCA9IHN0cmNocihzdHIsICcuJyk7Ci0JaWYgKCF0ZXN0X2JpdChDWDE4X0ZfSV9MT0FERURfRlcsICZjeC0+aV9mbGFncykgJiYgcCAmJiBwID4gc3RyKQotCQlDWDE4X0lORk8oIkZXIHZlcnNpb246ICVzXG4iLCBwIC0gMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVwdV9jbWQoc3RydWN0IGN4MTggKmN4LCB1MzIgc3cxKQotewotCXN0cnVjdCBjeDE4X21haWxib3ggbWI7Ci0KLQlpZiAoc3cxICYgSVJRX0NQVV9UT19FUFUpIHsKLQkJY3gxOF9tZW1jcHlfZnJvbWlvKGN4LCAmbWIsICZjeC0+c2NiLT5jcHUyZXB1X21iLCBzaXplb2YobWIpKTsKLQkJbWIuZXJyb3IgPSAwOwotCi0JCXN3aXRjaCAobWIuY21kKSB7Ci0JCWNhc2UgQ1gxOF9FUFVfRE1BX0RPTkU6Ci0JCQllcHVfZG1hX2RvbmUoY3gsICZtYik7Ci0JCQlicmVhazsKLQkJY2FzZSBDWDE4X0VQVV9ERUJVRzoKLQkJCWVwdV9kZWJ1ZyhjeCwgJm1iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQ1gxOF9XQVJOKCJVbmtub3duIENQVV9UT19FUFUgbWFpbGJveCBjb21tYW5kICUjMDh4XG4iLAotCQkJCSAgbWIuY21kKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHN3MSAmIElSUV9BUFVfVE9fRVBVKSB7Ci0JCWN4MThfbWVtY3B5X2Zyb21pbyhjeCwgJm1iLCAmY3gtPnNjYi0+YXB1MmVwdV9tYiwgc2l6ZW9mKG1iKSk7Ci0JCUNYMThfV0FSTigiVW5rbm93biBBUFVfVE9fRVBVIG1haWxib3ggY29tbWFuZCAlIzA4eFxuIiwgbWIuY21kKTsKLQl9Ci0KLQlpZiAoc3cxICYgSVJRX0hQVV9UT19FUFUpIHsKLQkJY3gxOF9tZW1jcHlfZnJvbWlvKGN4LCAmbWIsICZjeC0+c2NiLT5ocHUyZXB1X21iLCBzaXplb2YobWIpKTsKLQkJQ1gxOF9XQVJOKCJVbmtub3duIEhQVV9UT19FUFUgbWFpbGJveCBjb21tYW5kICUjMDh4XG4iLCBtYi5jbWQpOwotCX0KLX0KIAogc3RhdGljIHZvaWQgeHB1X2FjayhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBzdzIpCiB7CkBAIC0xNTQsMjMgKzMyLDI0IEBACiAJCXdha2VfdXAoJmN4LT5tYl9jcHVfd2FpdHEpOwogCWlmIChzdzIgJiBJUlFfQVBVX1RPX0VQVV9BQ0spCiAJCXdha2VfdXAoJmN4LT5tYl9hcHVfd2FpdHEpOwotCWlmIChzdzIgJiBJUlFfSFBVX1RPX0VQVV9BQ0spCi0JCXdha2VfdXAoJmN4LT5tYl9ocHVfd2FpdHEpOworfQorCitzdGF0aWMgdm9pZCBlcHVfY21kKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHN3MSkKK3sKKwlpZiAoc3cxICYgSVJRX0NQVV9UT19FUFUpCisJCWN4MThfYXBpX2VwdV9jbWRfaXJxKGN4LCBDUFUpOworCWlmIChzdzEgJiBJUlFfQVBVX1RPX0VQVSkKKwkJY3gxOF9hcGlfZXB1X2NtZF9pcnEoY3gsIEFQVSk7CiB9CiAKIGlycXJldHVybl90IGN4MThfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjeDE4ICpjeCA9IChzdHJ1Y3QgY3gxOCAqKWRldl9pZDsKLQl1MzIgc3cxLCBzdzFfbWFzazsKLQl1MzIgc3cyLCBzdzJfbWFzazsKLQl1MzIgaHcyLCBodzJfbWFzazsKKwl1MzIgc3cxLCBzdzIsIGh3MjsKIAotCXN3MV9tYXNrID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cxX0lOVF9FTkFCTEVfUENJKTsKLQlzdzEgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX1NUQVRVUykgJiBzdzFfbWFzazsKLQlzdzJfbWFzayA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMl9JTlRfRU5BQkxFX1BDSSk7Ci0Jc3cyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9TVEFUVVMpICYgc3cyX21hc2s7Ci0JaHcyX21hc2sgPSBjeDE4X3JlYWRfcmVnKGN4LCBIVzJfSU5UX01BU0s1X1BDSSk7Ci0JaHcyID0gY3gxOF9yZWFkX3JlZyhjeCwgSFcyX0lOVF9DTFJfU1RBVFVTKSAmIGh3Ml9tYXNrOworCXN3MSA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMV9JTlRfU1RBVFVTKSAmIGN4LT5zdzFfaXJxX21hc2s7CisJc3cyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9TVEFUVVMpICYgY3gtPnN3Ml9pcnFfbWFzazsKKwlodzIgPSBjeDE4X3JlYWRfcmVnKGN4LCBIVzJfSU5UX0NMUl9TVEFUVVMpICYgY3gtPmh3Ml9pcnFfbWFzazsKIAogCWlmIChzdzEpCiAJCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgc3cxLCBTVzFfSU5UX1NUQVRVUywgfnN3MSwgc3cxKTsKQEAgLTE4MCw3ICs1OSwxNSBAQAogCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIGh3MiwgSFcyX0lOVF9DTFJfU1RBVFVTLCB+aHcyLCBodzIpOwogCiAJaWYgKHN3MSB8fCBzdzIgfHwgaHcyKQotCQlDWDE4X0RFQlVHX0hJX0lSUSgiU1cxOiAleCAgU1cyOiAleCAgSFcyOiAleFxuIiwgc3cxLCBzdzIsIGh3Mik7CisJCUNYMThfREVCVUdfSElfSVJRKCJyZWNlaXZlZCBpbnRlcnJ1cHRzICIKKwkJCQkgICJTVzE6ICV4ICBTVzI6ICV4ICBIVzI6ICV4XG4iLCBzdzEsIHN3MiwgaHcyKTsKKworCS8qCisJICogU1cxIHJlc3BvbnNlcyBoYXZlIHRvIGhhcHBlbiBmaXJzdC4gIFRoZSBzZW5kaW5nIFhQVSB0aW1lcyBvdXQgdGhlCisJICogaW5jb21pbmcgbWFpbGJveGVzIG9uIHVzIHJhdGhlciByYXBpZGx5LgorCSAqLworCWlmIChzdzEpCisJCWVwdV9jbWQoY3gsIHN3MSk7CiAKIAkvKiBUbyBkbzogaW50ZXJydXB0LWJhc2VkIEkyQyBoYW5kbGluZwogCWlmIChodzIgJiAoSFcyX0kyQzFfSU5UfEhXMl9JMkMyX0lOVCkpIHsKQEAgLTE5MCwxMSArNzcsNSBAQAogCWlmIChzdzIpCiAJCXhwdV9hY2soY3gsIHN3Mik7CiAKLQlpZiAoc3cxKQotCQllcHVfY21kKGN4LCBzdzEpOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfSV9IQVZFX1dPUkssICZjeC0+aV9mbGFncykpCi0JCXF1ZXVlX3dvcmsoY3gtPndvcmtfcXVldWUsICZjeC0+d29yayk7Ci0KIAlyZXR1cm4gKHN3MSB8fCBzdzIgfHwgaHcyKSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pcnEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5oCmluZGV4IDYxNzNjYTMuLjkxZjBiNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5oCkBAIC0yLDYgKzIsNyBAQAogICogIGN4MTggaW50ZXJydXB0IGhhbmRsaW5nCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCw4ICsyOSw3IEBACiAjZGVmaW5lIFNXMV9JTlRfRU5BQkxFX1BDSSAgICAgICAgICAgICAgMHhjNzMxMWMKICNkZWZpbmUgU1cyX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAweGM3MzE0MAogI2RlZmluZSBTVzJfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4YzczMTQ0CisjZGVmaW5lIFNXMl9JTlRfRU5BQkxFX0NQVSAgICAgICAgICAgICAgMHhjNzMxNTgKICNkZWZpbmUgU1cyX0lOVF9FTkFCTEVfUENJICAgICAgICAgICAgICAweGM3MzE1YwogCiBpcnFyZXR1cm5fdCBjeDE4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0KLXZvaWQgY3gxOF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwppbmRleCBhY2ZmN2RmLi5kZTVlNzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCkBAIC0yLDYgKzIsNyBAQAogICogIGN4MTggbWFpbGJveCBmdW5jdGlvbnMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI2LDE1ICsyNywxNCBAQAogI2luY2x1ZGUgImN4MTgtc2NiLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKKyNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCisjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpycHVfc3RyW10gPSB7ICJBUFUiLCAiQ1BVIiwgIkVQVSIsICJIUFUiIH07CiAKICNkZWZpbmUgQVBJX0ZBU1QgKDEgPDwgMikgLyogU2hvcnQgdGltZW91dCAqLwogI2RlZmluZSBBUElfU0xPVyAoMSA8PCAzKSAvKiBBZGRpdGlvbmFsIDMwMG1zIHRpbWVvdXQgKi8KIAotI2RlZmluZSBBUFUgMAotI2RlZmluZSBDUFUgMQotI2RlZmluZSBFUFUgMgotI2RlZmluZSBIUFUgMwotCiBzdHJ1Y3QgY3gxOF9hcGlfaW5mbyB7CiAJdTMyIGNtZDsKIAl1OCBmbGFnczsJCS8qIEZsYWdzLCBzZWUgYWJvdmUgKi8KQEAgLTgyLDggKzgyLDkgQEAKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9HRVRfRU5DX1BUUywgICAgICAgICAgICAgICAgICAgIDApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NRExfQUNLLAkJCTApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NREwsCQkJQVBJX0ZBU1QpLAotCUFQSV9FTlRSWShDUFUsIENYMThfQVBVX1JFU0VUQUksCQkJQVBJX0ZBU1QpLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLAkJCUFQSV9TTE9XKSwKKwlBUElfRU5UUlkoQVBVLCBDWDE4X0FQVV9SRVNFVEFJLAkJCTApLAorCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFQlVHX1BFRUszMiwJCQkwKSwKIAlBUElfRU5UUlkoMCwgMCwJCQkJCQkwKSwKIH07CiAKQEAgLTk3LDcwICs5OCwxNzUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBjeDE4X21haWxib3ggX19pb21lbSAqY3gxOF9tYl9pc19jb21wbGV0ZShzdHJ1Y3QgY3gxOCAqY3gsIGludCBycHUsCi0JCXUzMiAqc3RhdGUsIHUzMiAqaXJxLCB1MzIgKnJlcSkKK3N0YXRpYyB2b2lkIGR1bXBfbWIoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9tYWlsYm94ICptYiwgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgY3gxOF9tYWlsYm94IF9faW9tZW0gKm1iID0gTlVMTDsKLQlpbnQgd2FpdF9jb3VudCA9IDA7Ci0JdTMyIGFjazsKKwljaGFyIGFyZ3N0cltNQVhfTUJfQVJHVU1FTlRTKjExKzFdOworCWNoYXIgKnA7CisJaW50IGk7CiAKLQlzd2l0Y2ggKHJwdSkgewotCWNhc2UgQVBVOgotCQltYiA9ICZjeC0+c2NiLT5lcHUyYXB1X21iOwotCQkqc3RhdGUgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+YXB1X3N0YXRlKTsKLQkJKmlycSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5lcHUyYXB1X2lycSk7Ci0JCWJyZWFrOworCWlmICghKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19BUEkpKQorCQlyZXR1cm47CiAKLQljYXNlIENQVToKLQkJbWIgPSAmY3gtPnNjYi0+ZXB1MmNwdV9tYjsKLQkJKnN0YXRlID0gY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmNwdV9zdGF0ZSk7Ci0JCSppcnEgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+ZXB1MmNwdV9pcnEpOwotCQlicmVhazsKLQotCWNhc2UgSFBVOgotCQltYiA9ICZjeC0+c2NiLT5lcHUyaHB1X21iOwotCQkqc3RhdGUgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+aHB1X3N0YXRlKTsKLQkJKmlycSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5lcHUyaHB1X2lycSk7Ci0JCWJyZWFrOworCWZvciAoaSA9IDAsIHAgPSBhcmdzdHI7IGkgPCBNQVhfTUJfQVJHVU1FTlRTOyBpKyssIHAgKz0gMTEpIHsKKwkJLyoga2VybmVsIHNucHJpbnRmKCkgYXBwZW5kcyAnXDAnIGFsd2F5cyAqLworCQlzbnByaW50ZihwLCAxMiwgIiAlIzAxMHgiLCBtYi0+YXJnc1tpXSk7CiAJfQotCi0JaWYgKG1iID09IE5VTEwpCi0JCXJldHVybiBtYjsKLQotCWRvIHsKLQkJKnJlcSA9IGN4MThfcmVhZGwoY3gsICZtYi0+cmVxdWVzdCk7Ci0JCWFjayA9IGN4MThfcmVhZGwoY3gsICZtYi0+YWNrKTsKLQkJd2FpdF9jb3VudCsrOwotCX0gd2hpbGUgKCpyZXEgIT0gYWNrICYmIHdhaXRfY291bnQgPCA2MDApOwotCi0JaWYgKCpyZXEgPT0gYWNrKSB7Ci0JCSgqcmVxKSsrOwotCQlpZiAoKnJlcSA9PSAwIHx8ICpyZXEgPT0gMHhmZmZmZmZmZikKLQkJCSpyZXEgPSAxOwotCQlyZXR1cm4gbWI7Ci0JfQotCXJldHVybiBOVUxMOworCUNYMThfREVCVUdfQVBJKCIlczogcmVxICUjMDEweCBhY2sgJSMwMTB4IGNtZCAlIzAxMHggZXJyICUjMDEweCBhcmdzJXMiCisJCSJcbiIsIG5hbWUsIG1iLT5yZXF1ZXN0LCBtYi0+YWNrLCBtYi0+Y21kLCBtYi0+ZXJyb3IsIGFyZ3N0cik7CiB9CiAKLWxvbmcgY3gxOF9tYl9hY2soc3RydWN0IGN4MTggKmN4LCBjb25zdCBzdHJ1Y3QgY3gxOF9tYWlsYm94ICptYikKKworLyoKKyAqIEZ1bmN0aW9ucyB0aGF0IHJ1biBpbiBhIHdvcmtfcXVldWUgd29yayBoYW5kbGluZyBjb250ZXh0CisgKi8KKworc3RhdGljIHZvaWQgZXB1X2RtYV9kb25lKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfZXB1X3dvcmtfb3JkZXIgKm9yZGVyKQogewotCWNvbnN0IHN0cnVjdCBjeDE4X2FwaV9pbmZvICppbmZvID0gZmluZF9hcGlfaW5mbyhtYi0+Y21kKTsKLQlzdHJ1Y3QgY3gxOF9tYWlsYm94IF9faW9tZW0gKmFja19tYjsKLQl1MzIgYWNrX2lycTsKLQl1OCBycHUgPSBDUFU7CisJdTMyIGhhbmRsZSwgbWRsX2Fja19jb3VudCwgaWQ7CisJc3RydWN0IGN4MThfbWFpbGJveCAqbWI7CisJc3RydWN0IGN4MThfbWRsX2FjayAqbWRsX2FjazsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CisJaW50IGk7CiAKLQlpZiAoaW5mbyA9PSBOVUxMICYmIG1iLT5jbWQpIHsKLQkJQ1gxOF9XQVJOKCJDYW5ub3QgYWNrIHVua25vd24gY29tbWFuZCAleFxuIiwgbWItPmNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCW1iID0gJm9yZGVyLT5tYjsKKwloYW5kbGUgPSBtYi0+YXJnc1swXTsKKwlzID0gY3gxOF9oYW5kbGVfdG9fc3RyZWFtKGN4LCBoYW5kbGUpOworCisJaWYgKHMgPT0gTlVMTCkgeworCQlDWDE4X1dBUk4oIkdvdCBETUEgZG9uZSBub3RpZmljYXRpb24gZm9yIHVua25vd24vaW5hY3RpdmUiCisJCQkgICIgaGFuZGxlICVkLCAlcyBtYWlsYm94IHNlcSBubyAlZFxuIiwgaGFuZGxlLAorCQkJICAob3JkZXItPmZsYWdzICYgQ1gxOF9GX0VXT19NQl9TVEFMRV9VUE9OX1JFQ0VJUFQpID8KKwkJCSAgInN0YWxlIiA6ICJnb29kIiwgbWItPnJlcXVlc3QpOworCQlyZXR1cm47CiAJfQotCWlmIChpbmZvKQotCQlycHUgPSBpbmZvLT5ycHU7CiAKLQlzd2l0Y2ggKHJwdSkgewotCWNhc2UgSFBVOgotCQlhY2tfaXJxID0gSVJRX0VQVV9UT19IUFVfQUNLOwotCQlhY2tfbWIgPSAmY3gtPnNjYi0+aHB1MmVwdV9tYjsKKwltZGxfYWNrX2NvdW50ID0gbWItPmFyZ3NbMl07CisJbWRsX2FjayA9IG9yZGVyLT5tZGxfYWNrOworCWZvciAoaSA9IDA7IGkgPCBtZGxfYWNrX2NvdW50OyBpKyssIG1kbF9hY2srKykgeworCQlpZCA9IG1kbF9hY2stPmlkOworCQkvKgorCQkgKiBTaW1wbGUgaW50ZWdyaXR5IGNoZWNrIGZvciBwcm9jZXNzaW5nIGEgc3RhbGUgKGFuZCBwb3NzaWJseQorCQkgKiBpbmNvbnNpc3RlbnQgbWFpbGJveCk6IG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlkIGlzIGluIHRoZQorCQkgKiB2YWxpZCByYW5nZSBmb3IgdGhlIHN0cmVhbS4KKwkJICoKKwkJICogV2UgZ28gdGhyb3VnaCB0aGUgdHJvdWJsZSBvZiBkZWFsaW5nIHdpdGggc3RhbGUgbWFpbGJveGVzCisJCSAqIGJlY2F1c2UgbW9zdCBvZiB0aGUgdGltZSwgdGhlIG1haWxib3ggZGF0YSBpcyBzdGlsbCB2YWxpZCBhbmQKKwkJICogdW5jaGFuZ2VkIChhbmQgaW4gcHJhY3RpY2UgdGhlIGZpcm13YXJlIHBpbmctcG9uZ3MgdGhlCisJCSAqIHR3byBtZGxfYWNrIGJ1ZmZlcnMgc28gbWRsX2Fja3MgYXJlIG5vdCBzdGFsZSkuCisJCSAqCisJCSAqIFRoZXJlIGFyZSBvY2Nhc2lvbnMgd2hlbiB3ZSBnZXQgYSBoYWxmIGNoYW5nZWQgbWFpbGJveCwKKwkJICogd2hpY2ggdGhpcyBjaGVjayBjYXRjaGVzIGZvciBhIGhhbmRsZSAmIGlkIG1pc21hdGNoLiAgSWYgdGhlCisJCSAqIGhhbmRsZSBhbmQgaWQgZG8gY29ycmVzcG9uZCwgdGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB3ZQorCQkgKiBjb21wbGV0ZWx5IGxvc3QgdGhlIG9sZCBidWZmZXIsIGJ1dCBwaWNrIHVwIHRoZSBuZXcgYnVmZmVyCisJCSAqIGVhcmx5IChidXQgdGhlIG5ldyBtZGxfYWNrIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ29vZCBpbiB0aGlzCisJCSAqIGNhc2UgYXMgdGhlIGZpcm13YXJlIHdvdWxkbid0IHBvaW50IHVzIHRvIGEgbmV3IG1kbF9hY2sgdW50aWwKKwkJICogaXQncyBmaWxsZWQgaW4pLgorCQkgKgorCQkgKiBjeDE4X3F1ZXVlX2dldCBidWYoKSB3aWxsIGRldGVjdCB0aGUgbG9zdCBidWZmZXJzCisJCSAqIGFuZCBzZW5kIHRoZW0gYmFjayB0byBxX2ZyZWUgZm9yIGZ3IHJvdGF0aW9uIGV2ZW50dWFsbHkuCisJCSAqLworCQlpZiAoKG9yZGVyLT5mbGFncyAmIENYMThfRl9FV09fTUJfU1RBTEVfVVBPTl9SRUNFSVBUKSAmJgorCQkgICAgIShpZCA+PSBzLT5tZGxfb2Zmc2V0ICYmCisJCSAgICAgIGlkIDwgKHMtPm1kbF9vZmZzZXQgKyBzLT5idWZmZXJzKSkpIHsKKwkJCUNYMThfV0FSTigiRmVsbCBiZWhpbmQhIElnbm9yaW5nIHN0YWxlIG1haWxib3ggd2l0aCAiCisJCQkJICAiIGluY29uc2lzdGVudCBkYXRhLiBMb3N0IGJ1ZmZlciBmb3IgbWFpbGJveCAiCisJCQkJICAic2VxIG5vICVkXG4iLCBtYi0+cmVxdWVzdCk7CisJCQlicmVhazsKKwkJfQorCQlidWYgPSBjeDE4X3F1ZXVlX2dldF9idWYocywgaWQsIG1kbF9hY2stPmRhdGFfdXNlZCk7CisKKwkJQ1gxOF9ERUJVR19ISV9ETUEoIkRNQSBET05FIGZvciAlcyAoYnVmZmVyICVkKVxuIiwgcy0+bmFtZSwgaWQpOworCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCUNYMThfV0FSTigiQ291bGQgbm90IGZpbmQgYnVmICVkIGZvciBzdHJlYW0gJXNcbiIsCisJCQkJICBpZCwgcy0+bmFtZSk7CisJCQkvKiBQdXQgYXMgbWFueSBidWZmZXJzIGFzIHBvc3NpYmxlIGJhY2sgaW50byBmdyB1c2UgKi8KKwkJCWN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUocyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTICYmIHMtPmR2Yi5lbmFibGVkKSB7CisJCQlDWDE4X0RFQlVHX0hJX0RNQSgiVFMgcmVjdiBieXRlc3VzZWQgPSAlZFxuIiwKKwkJCQkJICBidWYtPmJ5dGVzdXNlZCk7CisJCQlkdmJfZG14X3N3ZmlsdGVyKCZzLT5kdmIuZGVtdXgsIGJ1Zi0+YnVmLAorCQkJCQkgYnVmLT5ieXRlc3VzZWQpOworCQl9CisJCS8qIFB1dCBhcyBtYW55IGJ1ZmZlcnMgYXMgcG9zc2libGUgYmFjayBpbnRvIGZ3IHVzZSAqLworCQljeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHMpOworCQkvKiBQdXQgYmFjayBUUyBidWZmZXIsIHNpbmNlIGl0IHdhcyByZW1vdmVkIGZyb20gYWxsIHF1ZXVlcyAqLworCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykKKwkJCWN4MThfc3RyZWFtX3B1dF9idWZfZncocywgYnVmKTsKKwl9CisJd2FrZV91cCgmY3gtPmRtYV93YWl0cSk7CisJaWYgKHMtPmlkICE9IC0xKQorCQl3YWtlX3VwKCZzLT53YWl0cSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwdV9kZWJ1ZyhzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2VwdV93b3JrX29yZGVyICpvcmRlcikKK3sKKwljaGFyICpwOworCWNoYXIgKnN0ciA9IG9yZGVyLT5zdHI7CisKKwlDWDE4X0RFQlVHX0lORk8oIiV4ICVzXG4iLCBvcmRlci0+bWIuYXJnc1swXSwgc3RyKTsKKwlwID0gc3RyY2hyKHN0ciwgJy4nKTsKKwlpZiAoIXRlc3RfYml0KENYMThfRl9JX0xPQURFRF9GVywgJmN4LT5pX2ZsYWdzKSAmJiBwICYmIHAgPiBzdHIpCisJCUNYMThfSU5GTygiRlcgdmVyc2lvbjogJXNcbiIsIHAgLSAxKTsKK30KKworc3RhdGljIHZvaWQgZXB1X2NtZChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2VwdV93b3JrX29yZGVyICpvcmRlcikKK3sKKwlzd2l0Y2ggKG9yZGVyLT5ycHUpIHsKKwljYXNlIENQVToKKwl7CisJCXN3aXRjaCAob3JkZXItPm1iLmNtZCkgeworCQljYXNlIENYMThfRVBVX0RNQV9ET05FOgorCQkJZXB1X2RtYV9kb25lKGN4LCBvcmRlcik7CisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0VQVV9ERUJVRzoKKwkJCWVwdV9kZWJ1ZyhjeCwgb3JkZXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlDWDE4X1dBUk4oIlVua25vd24gQ1BVIHRvIEVQVSBtYWlsYm94IGNvbW1hbmQgJSMweFxuIiwKKwkJCQkgIG9yZGVyLT5tYi5jbWQpOworCQkJYnJlYWs7CisJCX0KIAkJYnJlYWs7CisJfQorCWNhc2UgQVBVOgorCQlDWDE4X1dBUk4oIlVua25vd24gQVBVIHRvIEVQVSBtYWlsYm94IGNvbW1hbmQgJSMweFxuIiwKKwkJCSAgb3JkZXItPm1iLmNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljCit2b2lkIGZyZWVfZXB1X3dvcmtfb3JkZXIoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqb3JkZXIpCit7CisJYXRvbWljX3NldCgmb3JkZXItPnBlbmRpbmcsIDApOworfQorCit2b2lkIGN4MThfZXB1X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGN4MThfZXB1X3dvcmtfb3JkZXIgKm9yZGVyID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciwgd29yayk7CisJc3RydWN0IGN4MTggKmN4ID0gb3JkZXItPmN4OworCWVwdV9jbWQoY3gsIG9yZGVyKTsKKwlmcmVlX2VwdV93b3JrX29yZGVyKGN4LCBvcmRlcik7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9ucyB0aGF0IHJ1biBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxpbmcgY29udGV4dAorICovCisKK3N0YXRpYyB2b2lkIG1iX2Fja19pcnEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqb3JkZXIpCit7CisJc3RydWN0IGN4MThfbWFpbGJveCBfX2lvbWVtICphY2tfbWI7CisJdTMyIGFja19pcnEsIHJlcTsKKworCXN3aXRjaCAob3JkZXItPnJwdSkgewogCWNhc2UgQVBVOgogCQlhY2tfaXJxID0gSVJRX0VQVV9UT19BUFVfQUNLOwogCQlhY2tfbWIgPSAmY3gtPnNjYi0+YXB1MmVwdV9tYjsKQEAgLTE3MCwyNiArMjc2LDE5NyBAQAogCQlhY2tfbWIgPSAmY3gtPnNjYi0+Y3B1MmVwdV9tYjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQ1gxOF9XQVJOKCJVbmtub3duIFJQVSBmb3IgY29tbWFuZCAleFxuIiwgbWItPmNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlDWDE4X1dBUk4oIlVuaGFuZGxlZCBSUFUgKCVkKSBmb3IgY29tbWFuZCAleCBhY2tcbiIsCisJCQkgIG9yZGVyLT5ycHUsIG9yZGVyLT5tYi5jbWQpOworCQlyZXR1cm47CiAJfQogCi0JY3gxOF9zZXR1cF9wYWdlKGN4LCBTQ0JfT0ZGU0VUKTsKLQljeDE4X3dyaXRlX3N5bmMoY3gsIG1iLT5yZXF1ZXN0LCAmYWNrX21iLT5hY2spOworCXJlcSA9IG9yZGVyLT5tYi5yZXF1ZXN0OworCS8qIERvbid0IGFjayBpZiB0aGUgUlBVIGhhcyBnb3R0ZW4gaW1wYXRpZW50IGFuZCB0aW1lZCB1cyBvdXQgKi8KKwlpZiAocmVxICE9IGN4MThfcmVhZGwoY3gsICZhY2tfbWItPnJlcXVlc3QpIHx8CisJICAgIHJlcSA9PSBjeDE4X3JlYWRsKGN4LCAmYWNrX21iLT5hY2spKSB7CisJCUNYMThfREVCVUdfV0FSTigiUG9zc2libHkgZmFsbGluZyBiZWhpbmQ6ICVzIHNlbGYtYWNrJ2VkIG91ciAiCisJCQkJImluY29taW5nICVzIHRvIEVQVSBtYWlsYm94IChzZXF1ZW5jZSBuby4gJXUpICIKKwkJCQkid2hpbGUgcHJvY2Vzc2luZ1xuIiwKKwkJCQlycHVfc3RyW29yZGVyLT5ycHVdLCBycHVfc3RyW29yZGVyLT5ycHVdLCByZXEpOworCQlvcmRlci0+ZmxhZ3MgfD0gQ1gxOF9GX0VXT19NQl9TVEFMRV9XSElMRV9QUk9DOworCQlyZXR1cm47CisJfQorCWN4MThfd3JpdGVsKGN4LCByZXEsICZhY2tfbWItPmFjayk7CiAJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCBhY2tfaXJxLCBTVzJfSU5UX1NFVCwgYWNrX2lycSwgYWNrX2lycSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGVwdV9kbWFfZG9uZV9pcnEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqb3JkZXIpCit7CisJdTMyIGhhbmRsZSwgbWRsX2Fja19vZmZzZXQsIG1kbF9hY2tfY291bnQ7CisJc3RydWN0IGN4MThfbWFpbGJveCAqbWI7CisKKwltYiA9ICZvcmRlci0+bWI7CisJaGFuZGxlID0gbWItPmFyZ3NbMF07CisJbWRsX2Fja19vZmZzZXQgPSBtYi0+YXJnc1sxXTsKKwltZGxfYWNrX2NvdW50ID0gbWItPmFyZ3NbMl07CisKKwlpZiAoaGFuZGxlID09IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSB8fAorCSAgICBtZGxfYWNrX2NvdW50ID09IDAgfHwgbWRsX2Fja19jb3VudCA+IENYMThfTUFYX01ETF9BQ0tTKSB7CisJCWlmICgob3JkZXItPmZsYWdzICYgQ1gxOF9GX0VXT19NQl9TVEFMRSkgPT0gMCkKKwkJCW1iX2Fja19pcnEoY3gsIG9yZGVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWN4MThfbWVtY3B5X2Zyb21pbyhjeCwgb3JkZXItPm1kbF9hY2ssIGN4LT5lbmNfbWVtICsgbWRsX2Fja19vZmZzZXQsCisJCQkgICBzaXplb2Yoc3RydWN0IGN4MThfbWRsX2FjaykgKiBtZGxfYWNrX2NvdW50KTsKKworCWlmICgob3JkZXItPmZsYWdzICYgQ1gxOF9GX0VXT19NQl9TVEFMRSkgPT0gMCkKKwkJbWJfYWNrX2lycShjeCwgb3JkZXIpOworCXJldHVybiAxOworfQorCitzdGF0aWMKK2ludCBlcHVfZGVidWdfaXJxKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfZXB1X3dvcmtfb3JkZXIgKm9yZGVyKQoreworCXUzMiBzdHJfb2Zmc2V0OworCWNoYXIgKnN0ciA9IG9yZGVyLT5zdHI7CisKKwlzdHJbMF0gPSAnXDAnOworCXN0cl9vZmZzZXQgPSBvcmRlci0+bWIuYXJnc1sxXTsKKwlpZiAoc3RyX29mZnNldCkgeworCQljeDE4X3NldHVwX3BhZ2UoY3gsIHN0cl9vZmZzZXQpOworCQljeDE4X21lbWNweV9mcm9taW8oY3gsIHN0ciwgY3gtPmVuY19tZW0gKyBzdHJfb2Zmc2V0LCAyNTIpOworCQlzdHJbMjUyXSA9ICdcMCc7CisJCWN4MThfc2V0dXBfcGFnZShjeCwgU0NCX09GRlNFVCk7CisJfQorCisJaWYgKChvcmRlci0+ZmxhZ3MgJiBDWDE4X0ZfRVdPX01CX1NUQUxFKSA9PSAwKQorCQltYl9hY2tfaXJxKGN4LCBvcmRlcik7CisKKwlyZXR1cm4gc3RyX29mZnNldCA/IDEgOiAwOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgZXB1X2NtZF9pcnEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqb3JkZXIpCit7CisJaW50IHJldCA9IC0xOworCisJc3dpdGNoIChvcmRlci0+cnB1KSB7CisJY2FzZSBDUFU6CisJeworCQlzd2l0Y2ggKG9yZGVyLT5tYi5jbWQpIHsKKwkJY2FzZSBDWDE4X0VQVV9ETUFfRE9ORToKKwkJCXJldCA9IGVwdV9kbWFfZG9uZV9pcnEoY3gsIG9yZGVyKTsKKwkJCWJyZWFrOworCQljYXNlIENYMThfRVBVX0RFQlVHOgorCQkJcmV0ID0gZXB1X2RlYnVnX2lycShjeCwgb3JkZXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlDWDE4X1dBUk4oIlVua25vd24gQ1BVIHRvIEVQVSBtYWlsYm94IGNvbW1hbmQgJSMweFxuIiwKKwkJCQkgIG9yZGVyLT5tYi5jbWQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgQVBVOgorCQlDWDE4X1dBUk4oIlVua25vd24gQVBVIHRvIEVQVSBtYWlsYm94IGNvbW1hbmQgJSMweFxuIiwKKwkJCSAgb3JkZXItPm1iLmNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqYWxsb2NfZXB1X3dvcmtfb3JkZXJfaXJxKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3gxOF9lcHVfd29ya19vcmRlciAqb3JkZXIgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX0VQVV9XT1JLX09SREVSUzsgaSsrKSB7CisJCS8qCisJCSAqIFdlIG9ubHkgbmVlZCAicGVuZGluZyIgYXRvbWljIHRvIGluc3BlY3QgaXRzIGNvbnRlbnRzLAorCQkgKiBhbmQgbmVlZCBub3QgZG8gYSBjaGVjayBhbmQgc2V0IGJlY2F1c2U6CisJCSAqIDEuIEFueSB3b3JrIGhhbmRsZXIgdGhyZWFkIG9ubHkgY2xlYXJzICJwZW5kaW5nIiBhbmQgb25seQorCQkgKiBvbiBvbmUsIHBhcnRpY3VsYXIgd29yayBvcmRlciBhdCBhIHRpbWUsIHBlciBoYW5kbGVyIHRocmVhZC4KKwkJICogMi4gInBlbmRpbmciIGlzIG9ubHkgc2V0IGhlcmUsIGFuZCB3ZSdyZSBzZXJpYWxpemVkIGJlY2F1c2UKKwkJICogd2UncmUgY2FsbGVkIGluIGFuIElSUSBoYW5kbGVyIGNvbnRleHQuCisJCSAqLworCQlpZiAoYXRvbWljX3JlYWQoJmN4LT5lcHVfd29ya19vcmRlcltpXS5wZW5kaW5nKSA9PSAwKSB7CisJCQlvcmRlciA9ICZjeC0+ZXB1X3dvcmtfb3JkZXJbaV07CisJCQlhdG9taWNfc2V0KCZvcmRlci0+cGVuZGluZywgMSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gb3JkZXI7Cit9CisKK3ZvaWQgY3gxOF9hcGlfZXB1X2NtZF9pcnEoc3RydWN0IGN4MTggKmN4LCBpbnQgcnB1KQoreworCXN0cnVjdCBjeDE4X21haWxib3ggX19pb21lbSAqbWI7CisJc3RydWN0IGN4MThfbWFpbGJveCAqb3JkZXJfbWI7CisJc3RydWN0IGN4MThfZXB1X3dvcmtfb3JkZXIgKm9yZGVyOworCWludCBzdWJtaXQ7CisKKwlzd2l0Y2ggKHJwdSkgeworCWNhc2UgQ1BVOgorCQltYiA9ICZjeC0+c2NiLT5jcHUyZXB1X21iOworCQlicmVhazsKKwljYXNlIEFQVToKKwkJbWIgPSAmY3gtPnNjYi0+YXB1MmVwdV9tYjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCW9yZGVyID0gYWxsb2NfZXB1X3dvcmtfb3JkZXJfaXJxKGN4KTsKKwlpZiAob3JkZXIgPT0gTlVMTCkgeworCQlDWDE4X1dBUk4oIlVuYWJsZSB0byBmaW5kIGJsYW5rIHdvcmsgb3JkZXIgZm9ybSB0byBzY2hlZHVsZSAiCisJCQkgICJpbmNvbWluZyBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlvcmRlci0+ZmxhZ3MgPSAwOworCW9yZGVyLT5ycHUgPSBycHU7CisJb3JkZXJfbWIgPSAmb3JkZXItPm1iOworCisJLyogbWItPmNtZCBhbmQgbWItPmFyZ3NbMF0gdGhyb3VnaCBtYi0+YXJnc1syXSAqLworCWN4MThfbWVtY3B5X2Zyb21pbyhjeCwgJm9yZGVyX21iLT5jbWQsICZtYi0+Y21kLCA0ICogc2l6ZW9mKHUzMikpOworCS8qIG1iLT5yZXF1ZXN0IGFuZCBtYi0+YWNrLiAgTi5CLiB3ZSB3YW50IHRvIHJlYWQgbWItPmFjayBsYXN0ICovCisJY3gxOF9tZW1jcHlfZnJvbWlvKGN4LCAmb3JkZXJfbWItPnJlcXVlc3QsICZtYi0+cmVxdWVzdCwKKwkJCSAgIDIgKiBzaXplb2YodTMyKSk7CisKKwlpZiAob3JkZXJfbWItPnJlcXVlc3QgPT0gb3JkZXJfbWItPmFjaykgeworCQlDWDE4X0RFQlVHX1dBUk4oIlBvc3NpYmx5IGZhbGxpbmcgYmVoaW5kOiAlcyBzZWxmLWFjaydlZCBvdXIgIgorCQkJCSJpbmNvbWluZyAlcyB0byBFUFUgbWFpbGJveCAoc2VxdWVuY2Ugbm8uICV1KSIKKwkJCQkiXG4iLAorCQkJCXJwdV9zdHJbcnB1XSwgcnB1X3N0cltycHVdLCBvcmRlcl9tYi0+cmVxdWVzdCk7CisJCWR1bXBfbWIoY3gsIG9yZGVyX21iLCAiaW5jb21pbmciKTsKKwkJb3JkZXItPmZsYWdzID0gQ1gxOF9GX0VXT19NQl9TVEFMRV9VUE9OX1JFQ0VJUFQ7CisJfQorCisJLyoKKwkgKiBJbmRpdmlkdWFsIEVQVSBjb21tYW5kIHByb2Nlc3NpbmcgaXMgcmVzcG9uc2libGUgZm9yIGFjay1pbmcKKwkgKiBhIG5vbi1zdGFsZSBtYWlsYm94IGFzIHNvb24gYXMgcG9zc2libGUKKwkgKi8KKwlzdWJtaXQgPSBlcHVfY21kX2lycShjeCwgb3JkZXIpOworCWlmIChzdWJtaXQgPiAwKSB7CisJCXF1ZXVlX3dvcmsoY3gtPndvcmtfcXVldWUsICZvcmRlci0+d29yayk7CisJfQorfQorCisKKy8qCisgKiBGdW5jdGlvbnMgY2FsbGVkIGZyb20gYSBub24taW50ZXJydXB0LCBub24gd29ya19xdWV1ZSBjb250ZXh0CisgKi8KIAogc3RhdGljIGludCBjeDE4X2FwaV9jYWxsKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGNtZCwgaW50IGFyZ3MsIHUzMiBkYXRhW10pCiB7CiAJY29uc3Qgc3RydWN0IGN4MThfYXBpX2luZm8gKmluZm8gPSBmaW5kX2FwaV9pbmZvKGNtZCk7Ci0JdTMyIHN0YXRlID0gMCwgaXJxID0gMCwgcmVxLCBvbGRyZXEsIGVycjsKKwl1MzIgc3RhdGUsIGlycSwgcmVxLCBhY2ssIGVycjsKIAlzdHJ1Y3QgY3gxOF9tYWlsYm94IF9faW9tZW0gKm1iOworCXUzMiBfX2lvbWVtICp4cHVfc3RhdGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRxOwotCWludCB0aW1lb3V0ID0gMTAwOwotCWludCBjbnQgPSAwOwotCWludCBzaWcgPSAwOworCXN0cnVjdCBtdXRleCAqbWJfbG9jazsKKwlsb25nIGludCB0aW1lb3V0LCByZXQ7CiAJaW50IGk7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CkBAIC0yMDEsNTAgKzQ3OCwxMDQgQEAKIAkJQ1gxOF9ERUJVR19ISV9BUEkoIiVzXG4iLCBpbmZvLT5uYW1lKTsKIAllbHNlCiAJCUNYMThfREVCVUdfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7Ci0JY3gxOF9zZXR1cF9wYWdlKGN4LCBTQ0JfT0ZGU0VUKTsKLQltYiA9IGN4MThfbWJfaXNfY29tcGxldGUoY3gsIGluZm8tPnJwdSwgJnN0YXRlLCAmaXJxLCAmcmVxKTsKIAotCWlmIChtYiA9PSBOVUxMKSB7Ci0JCUNYMThfRVJSKCJtYiAlcyBidXN5XG4iLCBpbmZvLT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwlzd2l0Y2ggKGluZm8tPnJwdSkgeworCWNhc2UgQVBVOgorCQl3YWl0cSA9ICZjeC0+bWJfYXB1X3dhaXRxOworCQltYl9sb2NrID0gJmN4LT5lcHUyYXB1X21iX2xvY2s7CisJCWlycSA9IElSUV9FUFVfVE9fQVBVOworCQltYiA9ICZjeC0+c2NiLT5lcHUyYXB1X21iOworCQl4cHVfc3RhdGUgPSAmY3gtPnNjYi0+YXB1X3N0YXRlOworCQlicmVhazsKKwljYXNlIENQVToKKwkJd2FpdHEgPSAmY3gtPm1iX2NwdV93YWl0cTsKKwkJbWJfbG9jayA9ICZjeC0+ZXB1MmNwdV9tYl9sb2NrOworCQlpcnEgPSBJUlFfRVBVX1RPX0NQVTsKKwkJbWIgPSAmY3gtPnNjYi0+ZXB1MmNwdV9tYjsKKwkJeHB1X3N0YXRlID0gJmN4LT5zY2ItPmNwdV9zdGF0ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQ1gxOF9XQVJOKCJVbmtub3duIFJQVSAoJWQpIGZvciBBUEkgY2FsbFxuIiwgaW5mby0+cnB1KTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb2xkcmVxID0gcmVxIC0gMTsKKwltdXRleF9sb2NrKG1iX2xvY2spOworCS8qCisJICogV2FpdCBmb3IgYW4gaW4tdXNlIG1haWxib3ggdG8gY29tcGxldGUKKwkgKgorCSAqIElmIHRoZSBYUFUgaXMgcmVzcG9uZGluZyB3aXRoIEFjaydzLCB0aGUgbWFpbGJveCBzaG91bGRuJ3QgYmUgaW4KKwkgKiBhIGJ1c3kgc3RhdGUsIHNpbmNlIHdlIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gaXQgb24gb3VyIGVuZC4KKwkgKgorCSAqIElmIHRoZSB3YWl0IGZvciBhY2sgYWZ0ZXIgc2VuZGluZyBhIHByZXZpb3VzIGNvbW1hbmQgd2FzIGludGVycnVwdGVkCisJICogYnkgYSBzaWduYWwsIHdlIG1heSBnZXQgaGVyZSBhbmQgZmluZCBhIGJ1c3kgbWFpbGJveC4gIEFmdGVyIHdhaXRpbmcsCisJICogbWFyayBpdCAibm90IGJ1c3kiIGZyb20gb3VyIGVuZCwgaWYgdGhlIFhQVSBoYXNuJ3QgYWNrJ2VkIGl0IHN0aWxsLgorCSAqLworCXN0YXRlID0gY3gxOF9yZWFkbChjeCwgeHB1X3N0YXRlKTsKKwlyZXEgPSBjeDE4X3JlYWRsKGN4LCAmbWItPnJlcXVlc3QpOworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwKTsKKwlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoKndhaXRxLAorCQkJCSAoYWNrID0gY3gxOF9yZWFkbChjeCwgJm1iLT5hY2spKSA9PSByZXEsCisJCQkJIHRpbWVvdXQpOworCWlmIChyZXEgIT0gYWNrKSB7CisJCS8qIHdhaXRlZCBsb25nIGVub3VnaCwgbWFrZSB0aGUgbWJveCAibm90IGJ1c3kiIGZyb20gb3VyIGVuZCAqLworCQljeDE4X3dyaXRlbChjeCwgcmVxLCAmbWItPmFjayk7CisJCUNYMThfRVJSKCJtYm94IHdhcyBmb3VuZCBzdHVjayBidXN5IHdoZW4gc2V0dGluZyB1cCBmb3IgJXM7ICIKKwkJCSAiY2xlYXJpbmcgYnVzeSBhbmQgdHJ5aW5nIHRvIHByb2NlZWRcbiIsIGluZm8tPm5hbWUpOworCX0gZWxzZSBpZiAocmV0ICE9IHRpbWVvdXQpCisJCUNYMThfREVCVUdfQVBJKCJ3YWl0ZWQgJXUgbXNlY3MgZm9yIGJ1c3kgbWJveCB0byBiZSBhY2tlZFxuIiwKKwkJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQtcmV0KSk7CisKKwkvKiBCdWlsZCB0aGUgb3V0Z29pbmcgbWFpbGJveCAqLworCXJlcSA9ICgocmVxICYgMHhmZmZmZmZmZSkgPT0gMHhmZmZmZmZmZSkgPyAxIDogcmVxICsgMTsKKwogCWN4MThfd3JpdGVsKGN4LCBjbWQsICZtYi0+Y21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnczsgaSsrKQogCQljeDE4X3dyaXRlbChjeCwgZGF0YVtpXSwgJm1iLT5hcmdzW2ldKTsKIAljeDE4X3dyaXRlbChjeCwgMCwgJm1iLT5lcnJvcik7CiAJY3gxOF93cml0ZWwoY3gsIHJlcSwgJm1iLT5yZXF1ZXN0KTsKKwljeDE4X3dyaXRlbChjeCwgcmVxIC0gMSwgJm1iLT5hY2spOyAvKiBlbnN1cmUgYWNrICYgcmVxIGFyZSBkaXN0aW5jdCAqLwogCi0Jc3dpdGNoIChpbmZvLT5ycHUpIHsKLQljYXNlIEFQVTogd2FpdHEgPSAmY3gtPm1iX2FwdV93YWl0cTsgYnJlYWs7Ci0JY2FzZSBDUFU6IHdhaXRxID0gJmN4LT5tYl9jcHVfd2FpdHE7IGJyZWFrOwotCWNhc2UgRVBVOiB3YWl0cSA9ICZjeC0+bWJfZXB1X3dhaXRxOyBicmVhazsKLQljYXNlIEhQVTogd2FpdHEgPSAmY3gtPm1iX2hwdV93YWl0cTsgYnJlYWs7Ci0JZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChpbmZvLT5mbGFncyAmIEFQSV9GQVNUKQotCQl0aW1lb3V0IC89IDI7CisJLyoKKwkgKiBOb3RpZnkgdGhlIFhQVSBhbmQgd2FpdCBmb3IgaXQgdG8gc2VuZCBhbiBBY2sgYmFjaworCSAqLworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKChpbmZvLT5mbGFncyAmIEFQSV9GQVNUKSA/IDEwIDogMjApOworCisJQ1gxOF9ERUJVR19ISV9JUlEoInNlbmRpbmcgaW50ZXJydXB0IFNXMTogJXggdG8gc2VuZCAlc1xuIiwKKwkJCSAgaXJxLCBpbmZvLT5uYW1lKTsKIAljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIGlycSwgU1cxX0lOVF9TRVQsIGlycSwgaXJxKTsKIAotCXdoaWxlICghc2lnICYmIGN4MThfcmVhZGwoY3gsICZtYi0+YWNrKSAhPSBjeDE4X3JlYWRsKGN4LCAmbWItPnJlcXVlc3QpCi0JICAgICAgICYmIGNudCA8IDY2MCkgewotCQlpZiAoY250ID4gMjAwICYmICFpbl9hdG9taWMoKSkKLQkJCXNpZyA9IGN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDEpOwotCQljbnQrKzsKLQl9Ci0JaWYgKHNpZykKLQkJcmV0dXJuIC1FSU5UUjsKLQlpZiAoY250ID09IDY2MCkgewotCQljeDE4X3dyaXRlbChjeCwgb2xkcmVxLCAmbWItPnJlcXVlc3QpOwotCQlDWDE4X0VSUigibWIgJXMgZmFpbGVkXG4iLCBpbmZvLT5uYW1lKTsKKwlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoCisJCSAgICAgICAqd2FpdHEsCisJCSAgICAgICBjeDE4X3JlYWRsKGN4LCAmbWItPmFjaykgPT0gY3gxOF9yZWFkbChjeCwgJm1iLT5yZXF1ZXN0KSwKKwkJICAgICAgIHRpbWVvdXQpOworCisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFRpbWVkIG91dCAqLworCQltdXRleF91bmxvY2sobWJfbG9jayk7CisJCUNYMThfREVCVUdfV0FSTigic2VuZGluZyAlcyB0aW1lZCBvdXQgd2FpdGluZyAlZCBtc2VjcyBmb3IgUlBVICIKKwkJCQkiYWNrbm93bGVkZ2VtZW50XG4iLAorCQkJCWluZm8tPm5hbWUsIGppZmZpZXNfdG9fbXNlY3ModGltZW91dCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlpZiAocmV0ICE9IHRpbWVvdXQpCisJCUNYMThfREVCVUdfSElfQVBJKCJ3YWl0ZWQgJXUgbXNlY3MgZm9yICVzIHRvIGJlIGFja2VkXG4iLAorCQkJCSAgamlmZmllc190b19tc2Vjcyh0aW1lb3V0LXJldCksIGluZm8tPm5hbWUpOworCisJLyogQ29sbGVjdCBkYXRhIHJldHVybmVkIGJ5IHRoZSBYUFUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX01CX0FSR1VNRU5UUzsgaSsrKQogCQlkYXRhW2ldID0gY3gxOF9yZWFkbChjeCwgJm1iLT5hcmdzW2ldKTsKIAllcnIgPSBjeDE4X3JlYWRsKGN4LCAmbWItPmVycm9yKTsKLQlpZiAoIWluX2F0b21pYygpICYmIChpbmZvLT5mbGFncyAmIEFQSV9TTE9XKSkKKwltdXRleF91bmxvY2sobWJfbG9jayk7CisKKwkvKgorCSAqIFdhaXQgZm9yIFhQVSB0byBwZXJmb3JtIGV4dHJhIGFjdGlvbnMgZm9yIHRoZSBjYWxsZXIgaW4gc29tZSBjYXNlcy4KKwkgKiBlLmcuIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMIHdpbGwgY2F1c2UgdGhlIENQVSB0byBzZW5kIGFsbCBidWZmZXJzCisJICogYmFjayBpbiBhIGJ1cnN0IHNob3J0bHkgdGhlcmVhZnRlcgorCSAqLworCWlmIChpbmZvLT5mbGFncyAmIEFQSV9TTE9XKQogCQljeDE4X21zbGVlcF90aW1lb3V0KDMwMCwgMCk7CisKIAlpZiAoZXJyKQogCQlDWDE4X0RFQlVHX0FQSSgibWFpbGJveCBlcnJvciAlMDh4IGZvciBjb21tYW5kICVzXG4iLCBlcnIsCiAJCQkJaW5mby0+bmFtZSk7CkBAIC0yNTMsMTIgKzU4NCw3IEBACiAKIGludCBjeDE4X2FwaShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBjbWQsIGludCBhcmdzLCB1MzIgZGF0YVtdKQogewotCWludCByZXMgPSBjeDE4X2FwaV9jYWxsKGN4LCBjbWQsIGFyZ3MsIGRhdGEpOwotCi0JLyogQWxsb3cgYSBzaW5nbGUgcmV0cnksIHByb2JhYmx5IGFscmVhZHkgdG9vIGxhdGUgdGhvdWdoLgotCSAgIElmIHRoZXJlIGlzIG5vIGZyZWUgbWFpbGJveCB0aGVuIHRoYXQgaXMgdXN1YWxseSBhbiBpbmRpY2F0aW9uCi0JICAgb2YgYSBtb3JlIHNlcmlvdXMgcHJvYmxlbS4gKi8KLQlyZXR1cm4gKHJlcyA9PSAtRUJVU1kpID8gY3gxOF9hcGlfY2FsbChjeCwgY21kLCBhcmdzLCBkYXRhKSA6IHJlczsKKwlyZXR1cm4gY3gxOF9hcGlfY2FsbChjeCwgY21kLCBhcmdzLCBkYXRhKTsKIH0KIAogc3RhdGljIGludCBjeDE4X3NldF9maWx0ZXJfcGFyYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKQpAQCAtMjgxLDggKzYwNyw5IEBACiBpbnQgY3gxOF9hcGlfZnVuYyh2b2lkICpwcml2LCB1MzIgY21kLCBpbnQgaW4sIGludCBvdXQsCiAJCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV0pCiB7Ci0Jc3RydWN0IGN4MTggKmN4ID0gcHJpdjsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHXTsKKwlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlICphcGlfcHJpdiA9IHByaXY7CisJc3RydWN0IGN4MTggKmN4ID0gYXBpX3ByaXYtPmN4OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IGFwaV9wcml2LT5zOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9PVVRQVVRfUE9SVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guaAppbmRleCBkOTk1NjQxLi5jZTJiNjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5oCkBAIC0yLDYgKzIsNyBAQAogICogIGN4MTggbWFpbGJveCBmdW5jdGlvbnMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMwLDggKzMxLDI0IEBACiAjZGVmaW5lIE1CX1JFU0VSVkVEX0hBTkRMRV8wIDAKICNkZWZpbmUgTUJfUkVTRVJWRURfSEFORExFXzEgMHhGRkZGRkZGRgogCisjZGVmaW5lIEFQVSAwCisjZGVmaW5lIENQVSAxCisjZGVmaW5lIEVQVSAyCisjZGVmaW5lIEhQVSAzCisKIHN0cnVjdCBjeDE4OwogCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSBDUFUgdG8gcHJvdmlkZSBjb21wbGV0ZWQgYnVmZmVycyBpbmZvcm1hdGlvbgorICogSXRzIHN0cnVjdHVyZSBpcyBkaWN0cmF0ZWQgYnkgdGhlIGxheW91dCBvZiB0aGUgU0NCLCByZXF1aXJlZCBieSB0aGUKKyAqIGZpcm13YXJlLCBidXQgaXRzIGRlZmludGlvbiBuZWVkcyB0byBiZSBoZXJlLCBpbnN0ZWFkIG9mIGluIGN4MTgtc2NiLmgsCisgKiBmb3IgbWFpbGJveCB3b3JrIG9yZGVyIHNjaGVkdWxpbmcKKyAqLworc3RydWN0IGN4MThfbWRsX2FjayB7CisgICAgdTMyIGlkOyAgICAgICAgLyogSUQgb2YgYSBjb21wbGV0ZWQgTURMICovCisgICAgdTMyIGRhdGFfdXNlZDsgLyogVG90YWwgZGF0YSBmaWxsZWQgaW4gdGhlIE1ETCBmb3IgYnVmZmVyICdpZCcgKi8KK307CisKIC8qIFRoZSBjeDE4X21haWxib3ggc3RydWN0IGlzIHRoZSBtYWlsYm94IHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBwYXNzaW5nCiAgICBtZXNzYWdlcyBiZXR3ZWVuIHByb2Nlc3NvcnMgKi8KIHN0cnVjdCBjeDE4X21haWxib3ggewpAQCAtNjIsMTIgKzc5LDIyIEBACiAgICAgdTMyICAgICAgIGVycm9yOwogfTsKIAorc3RydWN0IGN4MThfc3RyZWFtOworCitzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHsKKwlzdHJ1Y3QgY3gxOCAqY3g7CisJc3RydWN0IGN4MThfc3RyZWFtICpzOworfTsKKwogaW50IGN4MThfYXBpKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGNtZCwgaW50IGFyZ3MsIHUzMiBkYXRhW10pOwogaW50IGN4MThfdmFwaV9yZXN1bHQoc3RydWN0IGN4MTggKmN4LCB1MzIgZGF0YVtNQVhfTUJfQVJHVU1FTlRTXSwgdTMyIGNtZCwKIAkJaW50IGFyZ3MsIC4uLik7CiBpbnQgY3gxOF92YXBpKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGNtZCwgaW50IGFyZ3MsIC4uLik7CiBpbnQgY3gxOF9hcGlfZnVuYyh2b2lkICpwcml2LCB1MzIgY21kLCBpbnQgaW4sIGludCBvdXQsCiAJCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV0pOwotbG9uZyBjeDE4X21iX2FjayhzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHN0cnVjdCBjeDE4X21haWxib3ggKm1iKTsKKwordm9pZCBjeDE4X2FwaV9lcHVfY21kX2lycShzdHJ1Y3QgY3gxOCAqY3gsIGludCBycHUpOworCit2b2lkIGN4MThfZXB1X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCmluZGV4IDE3NDY4MmMuLjhkOTQ0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwpAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1xdWV1ZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MSw5MSArNDIsMTI2IEBACiAJcS0+Ynl0ZXN1c2VkID0gMDsKIH0KIAotdm9pZCBjeDE4X2VucXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKLQkJc3RydWN0IGN4MThfcXVldWUgKnEpCitzdHJ1Y3QgY3gxOF9xdWV1ZSAqX2N4MThfZW5xdWV1ZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsIHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAorCQkJCSBzdHJ1Y3QgY3gxOF9xdWV1ZSAqcSwgaW50IHRvX2Zyb250KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCi0JLyogY2xlYXIgdGhlIGJ1ZmZlciBpZiBpdCBpcyBnb2luZyB0byBiZSBlbnF1ZXVlZCB0byB0aGUgZnJlZSBxdWV1ZSAqLwotCWlmIChxID09ICZzLT5xX2ZyZWUpIHsKKwkvKiBjbGVhciB0aGUgYnVmZmVyIGlmIGl0IGlzIG5vdCB0byBiZSBlbnF1ZXVlZCB0byB0aGUgZnVsbCBxdWV1ZSAqLworCWlmIChxICE9ICZzLT5xX2Z1bGwpIHsKIAkJYnVmLT5ieXRlc3VzZWQgPSAwOwogCQlidWYtPnJlYWRwb3MgPSAwOwogCQlidWYtPmJfZmxhZ3MgPSAwOworCQlidWYtPnNraXBwZWQgPSAwOwogCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+cWxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZxLT5saXN0KTsKLQlhdG9taWNfaW5jKCZxLT5idWZmZXJzKTsKKworCW11dGV4X2xvY2soJnMtPnFsb2NrKTsKKworCS8qIHFfYnVzeSBpcyByZXN0cmljdGVkIHRvIGEgbWF4IGJ1ZmZlciBjb3VudCBpbXBvc2VkIGJ5IGZpcm13YXJlICovCisJaWYgKHEgPT0gJnMtPnFfYnVzeSAmJgorCSAgICBhdG9taWNfcmVhZCgmcS0+YnVmZmVycykgPj0gQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNKQorCQlxID0gJnMtPnFfZnJlZTsKKworCWlmICh0b19mcm9udCkKKwkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJnEtPmxpc3QpOyAvKiBMSUZPICovCisJZWxzZQorCQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZxLT5saXN0KTsgLyogRklGTyAqLwogCXEtPmJ5dGVzdXNlZCArPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5xbG9jaywgZmxhZ3MpOworCWF0b21pY19pbmMoJnEtPmJ1ZmZlcnMpOworCisJbXV0ZXhfdW5sb2NrKCZzLT5xbG9jayk7CisJcmV0dXJuIHE7CiB9CiAKIHN0cnVjdCBjeDE4X2J1ZmZlciAqY3gxOF9kZXF1ZXVlKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgc3RydWN0IGN4MThfcXVldWUgKnEpCiB7CiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnFsb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+cWxvY2spOwogCWlmICghbGlzdF9lbXB0eSgmcS0+bGlzdCkpIHsKLQkJYnVmID0gbGlzdF9lbnRyeShxLT5saXN0Lm5leHQsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQocS0+bGlzdC5uZXh0KTsKLQkJYXRvbWljX2RlYygmcS0+YnVmZmVycyk7CisJCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnEtPmxpc3QsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7CiAJCXEtPmJ5dGVzdXNlZCAtPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKKwkJYnVmLT5za2lwcGVkID0gMDsKKwkJYXRvbWljX2RlYygmcS0+YnVmZmVycyk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnFsb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5xbG9jayk7CiAJcmV0dXJuIGJ1ZjsKIH0KIAotc3RydWN0IGN4MThfYnVmZmVyICpjeDE4X3F1ZXVlX2dldF9idWZfaXJxKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgdTMyIGlkLAorc3RydWN0IGN4MThfYnVmZmVyICpjeDE4X3F1ZXVlX2dldF9idWYoc3RydWN0IGN4MThfc3RyZWFtICpzLCB1MzIgaWQsCiAJdTMyIGJ5dGVzdXNlZCkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOworCXN0cnVjdCBjeDE4X2J1ZmZlciAqdG1wOworCXN0cnVjdCBjeDE4X2J1ZmZlciAqcmV0ID0gTlVMTDsKIAotCXNwaW5fbG9jaygmcy0+cWxvY2spOwotCWxpc3RfZm9yX2VhY2gocCwgJnMtPnFfZnJlZS5saXN0KSB7Ci0JCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmID0KLQkJCWxpc3RfZW50cnkocCwgc3RydWN0IGN4MThfYnVmZmVyLCBsaXN0KTsKLQotCQlpZiAoYnVmLT5pZCAhPSBpZCkKKwltdXRleF9sb2NrKCZzLT5xbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgdG1wLCAmcy0+cV9idXN5Lmxpc3QsIGxpc3QpIHsKKwkJaWYgKGJ1Zi0+aWQgIT0gaWQpIHsKKwkJCWJ1Zi0+c2tpcHBlZCsrOworCQkJaWYgKGJ1Zi0+c2tpcHBlZCA+PSBhdG9taWNfcmVhZCgmcy0+cV9idXN5LmJ1ZmZlcnMpLTEpIHsKKwkJCQkvKiBidWZmZXIgbXVzdCBoYXZlIGZhbGxlbiBvdXQgb2Ygcm90YXRpb24gKi8KKwkJCQlDWDE4X1dBUk4oIlNraXBwZWQgJXMsIGJ1ZmZlciAlZCwgJWQgIgorCQkJCQkgICJ0aW1lcyAtIGl0IG11c3QgaGF2ZSBkcm9wcGVkIG91dCBvZiAiCisJCQkJCSAgInJvdGF0aW9uXG4iLCBzLT5uYW1lLCBidWYtPmlkLAorCQkJCQkgIGJ1Zi0+c2tpcHBlZCk7CisJCQkJLyogbW92ZSBpdCB0byBxX2ZyZWUgKi8KKwkJCQlsaXN0X21vdmVfdGFpbCgmYnVmLT5saXN0LCAmcy0+cV9mcmVlLmxpc3QpOworCQkJCWJ1Zi0+Ynl0ZXN1c2VkID0gYnVmLT5yZWFkcG9zID0gYnVmLT5iX2ZsYWdzID0KKwkJCQkJYnVmLT5za2lwcGVkID0gMDsKKwkJCQlhdG9taWNfZGVjKCZzLT5xX2J1c3kuYnVmZmVycyk7CisJCQkJYXRvbWljX2luYygmcy0+cV9mcmVlLmJ1ZmZlcnMpOworCQkJfQogCQkJY29udGludWU7CisJCX0KIAogCQlidWYtPmJ5dGVzdXNlZCA9IGJ5dGVzdXNlZDsKLQkJYXRvbWljX2RlYygmcy0+cV9mcmVlLmJ1ZmZlcnMpOwotCQlhdG9taWNfaW5jKCZzLT5xX2Z1bGwuYnVmZmVycyk7Ci0JCXMtPnFfZnVsbC5ieXRlc3VzZWQgKz0gYnVmLT5ieXRlc3VzZWQ7Ci0JCWxpc3RfbW92ZV90YWlsKCZidWYtPmxpc3QsICZzLT5xX2Z1bGwubGlzdCk7CisJCS8qIFN5bmMgdGhlIGJ1ZmZlciBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgcWxvY2sgKi8KKwkJY3gxOF9idWZfc3luY19mb3JfY3B1KHMsIGJ1Zik7CisJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7CisJCQkvKgorCQkJICogVFMgZG9lc24ndCB1c2UgcV9mdWxsLiAgQXMgd2UgcHVsbCB0aGUgYnVmZmVyIG9mZiBvZgorCQkJICogdGhlIHF1ZXVlIGhlcmUsIHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIHB1dCBpdCBiYWNrLgorCQkJICovCisJCQlsaXN0X2RlbF9pbml0KCZidWYtPmxpc3QpOworCQl9IGVsc2UgeworCQkJLyogTW92ZSBidWZmZXIgZnJvbSBxX2J1c3kgdG8gcV9mdWxsICovCisJCQlsaXN0X21vdmVfdGFpbCgmYnVmLT5saXN0LCAmcy0+cV9mdWxsLmxpc3QpOworCQkJc2V0X2JpdChDWDE4X0ZfQl9ORUVEX0JVRl9TV0FQLCAmYnVmLT5iX2ZsYWdzKTsKKwkJCXMtPnFfZnVsbC5ieXRlc3VzZWQgKz0gYnVmLT5ieXRlc3VzZWQ7CisJCQlhdG9taWNfaW5jKCZzLT5xX2Z1bGwuYnVmZmVycyk7CisJCX0KKwkJYXRvbWljX2RlYygmcy0+cV9idXN5LmJ1ZmZlcnMpOwogCi0JCXNwaW5fdW5sb2NrKCZzLT5xbG9jayk7Ci0JCXJldHVybiBidWY7CisJCXJldCA9IGJ1ZjsKKwkJYnJlYWs7CiAJfQotCXNwaW5fdW5sb2NrKCZzLT5xbG9jayk7Ci0JQ1gxOF9FUlIoIkNhbm5vdCBmaW5kIGJ1ZmZlciAlZCBmb3Igc3RyZWFtICVzXG4iLCBpZCwgcy0+bmFtZSk7Ci0JcmV0dXJuIE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZzLT5xbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogTW92ZSBhbGwgYnVmZmVycyBvZiBhIHF1ZXVlIHRvIHFfZnJlZSwgd2hpbGUgZmx1c2hpbmcgdGhlIGJ1ZmZlcnMgKi8KIHN0YXRpYyB2b2lkIGN4MThfcXVldWVfZmx1c2goc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9xdWV1ZSAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOwogCiAJaWYgKHEgPT0gJnMtPnFfZnJlZSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnFsb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+cWxvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcS0+bGlzdCkpIHsKLQkJYnVmID0gbGlzdF9lbnRyeShxLT5saXN0Lm5leHQsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7Ci0JCWxpc3RfbW92ZV90YWlsKHEtPmxpc3QubmV4dCwgJnMtPnFfZnJlZS5saXN0KTsKLQkJYnVmLT5ieXRlc3VzZWQgPSBidWYtPnJlYWRwb3MgPSBidWYtPmJfZmxhZ3MgPSAwOworCQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZxLT5saXN0LCBzdHJ1Y3QgY3gxOF9idWZmZXIsIGxpc3QpOworCQlsaXN0X21vdmVfdGFpbCgmYnVmLT5saXN0LCAmcy0+cV9mcmVlLmxpc3QpOworCQlidWYtPmJ5dGVzdXNlZCA9IGJ1Zi0+cmVhZHBvcyA9IGJ1Zi0+Yl9mbGFncyA9IGJ1Zi0+c2tpcHBlZCA9IDA7CiAJCWF0b21pY19pbmMoJnMtPnFfZnJlZS5idWZmZXJzKTsKIAl9CiAJY3gxOF9xdWV1ZV9pbml0KHEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnFsb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5xbG9jayk7CiB9CiAKIHZvaWQgY3gxOF9mbHVzaF9xdWV1ZXMoc3RydWN0IGN4MThfc3RyZWFtICpzKQogewotCWN4MThfcXVldWVfZmx1c2gocywgJnMtPnFfaW8pOworCWN4MThfcXVldWVfZmx1c2gocywgJnMtPnFfYnVzeSk7CiAJY3gxOF9xdWV1ZV9mbHVzaChzLCAmcy0+cV9mdWxsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmgKaW5kZXggN2Y5M2JiMS4uNDU2Y2VjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oCkBAIC00LDYgKzQsNyBAQAogICogIERlcml2ZWQgZnJvbSBpdnR2LXF1ZXVlLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQyLDExICs0MywyNiBAQAogdm9pZCBjeDE4X2J1Zl9zd2FwKHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmKTsKIAogLyogY3gxOF9xdWV1ZSB1dGlsaXR5IGZ1bmN0aW9ucyAqLworc3RydWN0IGN4MThfcXVldWUgKl9jeDE4X2VucXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKKwkJCQkgc3RydWN0IGN4MThfcXVldWUgKnEsIGludCB0b19mcm9udCk7CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBjeDE4X3F1ZXVlICpjeDE4X2VucXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKKwkJCQlzdHJ1Y3QgY3gxOF9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gX2N4MThfZW5xdWV1ZShzLCBidWYsIHEsIDApOyAvKiBGSUZPICovCit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBjeDE4X3F1ZXVlICpjeDE4X3B1c2goc3RydWN0IGN4MThfc3RyZWFtICpzLCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKKwkJCSAgICAgc3RydWN0IGN4MThfcXVldWUgKnEpCit7CisJcmV0dXJuIF9jeDE4X2VucXVldWUocywgYnVmLCBxLCAxKTsgLyogTElGTyAqLworfQorCiB2b2lkIGN4MThfcXVldWVfaW5pdChzdHJ1Y3QgY3gxOF9xdWV1ZSAqcSk7Ci12b2lkIGN4MThfZW5xdWV1ZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsIHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAotCXN0cnVjdCBjeDE4X3F1ZXVlICpxKTsKIHN0cnVjdCBjeDE4X2J1ZmZlciAqY3gxOF9kZXF1ZXVlKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgc3RydWN0IGN4MThfcXVldWUgKnEpOwotc3RydWN0IGN4MThfYnVmZmVyICpjeDE4X3F1ZXVlX2dldF9idWZfaXJxKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgdTMyIGlkLAorc3RydWN0IGN4MThfYnVmZmVyICpjeDE4X3F1ZXVlX2dldF9idWYoc3RydWN0IGN4MThfc3RyZWFtICpzLCB1MzIgaWQsCiAJdTMyIGJ5dGVzdXNlZCk7CiB2b2lkIGN4MThfZmx1c2hfcXVldWVzKHN0cnVjdCBjeDE4X3N0cmVhbSAqcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXNjYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmMKaW5kZXggZjU2ZDM3Ny4uMzRiNGQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgY3gxOCBTeXN0ZW0gQ29udHJvbCBCbG9jayBpbml0aWFsaXphdGlvbgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTE3LDYgKzExOCw1IEBACiAJY3gxOF93cml0ZWwoY3gsIFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdV9zdGF0ZSksCiAJCQkmY3gtPnNjYi0+aXBjX29mZnNldCk7CiAKLQljeDE4X3dyaXRlbChjeCwgMSwgJmN4LT5zY2ItPmhwdV9zdGF0ZSk7CiAJY3gxOF93cml0ZWwoY3gsIDEsICZjeC0+c2NiLT5lcHVfc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zY2IuaAppbmRleCA1OTQ3MTNiYi4uMWRjMWM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmgKQEAgLTIsNiArMiw3IEBACiAgKiAgY3gxOCBTeXN0ZW0gQ29udHJvbCBCbG9jayBpbml0aWFsaXphdGlvbgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtODUsMTIgKzg2LDYgQEAKICAgICB1MzIgbGVuZ3RoOyAvKiBMZW5ndGggb2YgdGhlIGJ1ZmZlciBzZWdtZW50ICovCiB9OwogCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IENQVSB0byBwcm92aWRlIGNvbXBsZXRlZCBidWZmZXJzIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgY3gxOF9tZGxfYWNrIHsKLSAgICB1MzIgaWQ7ICAgICAgICAvKiBJRCBvZiBhIGNvbXBsZXRlZCBNREwgKi8KLSAgICB1MzIgZGF0YV91c2VkOyAvKiBUb3RhbCBkYXRhIGZpbGxlZCBpbiB0aGUgTURMIGZvciBidWZmZXIgJ2lkJyAqLwotfTsKLQogc3RydWN0IGN4MThfc2NiIHsKIAkvKiBUaGVzZSBmaWVsZHMgZm9ybSB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgd2hpY2ggaXMgdXNlZCBhdCBib290IHRpbWUKIAkgICBmb3IgbG9jYWxpemluZyB0aGUgSVBDIGRhdGEgYXMgd2VsbCBhcyB0aGUgY29kZSBwb3NpdGlvbnMgZm9yIGFsbApAQCAtMjc2LDcgKzI3MSw3IEBACiAJc3RydWN0IGN4MThfbWFpbGJveCAgaHB1MmVwdV9tYjsKIAlzdHJ1Y3QgY3gxOF9tYWlsYm94ICBwcHUyZXB1X21iOwogCi0Jc3RydWN0IGN4MThfbWRsX2FjayAgY3B1X21kbF9hY2tbQ1gxOF9NQVhfU1RSRUFNU11bMl07CisJc3RydWN0IGN4MThfbWRsX2FjayAgY3B1X21kbF9hY2tbQ1gxOF9NQVhfU1RSRUFNU11bQ1gxOF9NQVhfTURMX0FDS1NdOwogCXN0cnVjdCBjeDE4X21kbCAgICAgIGNwdV9tZGxbMV07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggZTVmZjc3MC4uNjNjMzM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1zdHJlYW1zLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTExMCw3ICsxMTEsNiBAQAogewogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBzLT52NGwyZGV2OwotCXUzMiBtYXhfc2l6ZSA9IGN4LT5vcHRpb25zLm1lZ2FieXRlc1t0eXBlXSAqIDEwMjQgKiAxMDI0OwogCiAJLyogd2UgbmVlZCB0byBrZWVwIHY0bDJkZXYsIHNvIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcyAqLwogCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKQEAgLTEyMywyMSArMTIzLDE1IEBACiAJcy0+aGFuZGxlID0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwogCiAJcy0+ZG1hID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5kbWE7CisJcy0+YnVmZmVycyA9IGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXTsKIAlzLT5idWZfc2l6ZSA9IGN4LT5zdHJlYW1fYnVmX3NpemVbdHlwZV07Ci0JaWYgKHMtPmJ1Zl9zaXplKQotCQlzLT5idWZmZXJzID0gbWF4X3NpemUgLyBzLT5idWZfc2l6ZTsKLQlpZiAocy0+YnVmZmVycyA+IDYzKSB7Ci0JCS8qIEVhY2ggc3RyZWFtIGhhcyBhIG1heGltdW0gb2YgNjMgYnVmZmVycywKLQkJICAgZW5zdXJlIHdlIGRvIG5vdCBleGNlZWQgdGhhdC4gKi8KLQkJcy0+YnVmZmVycyA9IDYzOwotCQlzLT5idWZfc2l6ZSA9IChtYXhfc2l6ZSAvIHMtPmJ1ZmZlcnMpICYgfjB4ZmZmOwotCX0KLQlzcGluX2xvY2tfaW5pdCgmcy0+cWxvY2spOworCisJbXV0ZXhfaW5pdCgmcy0+cWxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPndhaXRxKTsKIAlzLT5pZCA9IC0xOwogCWN4MThfcXVldWVfaW5pdCgmcy0+cV9mcmVlKTsKKwljeDE4X3F1ZXVlX2luaXQoJnMtPnFfYnVzeSk7CiAJY3gxOF9xdWV1ZV9pbml0KCZzLT5xX2Z1bGwpOwotCWN4MThfcXVldWVfaW5pdCgmcy0+cV9pbyk7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9wcmVwX2RldihzdHJ1Y3QgY3gxOCAqY3gsIGludCB0eXBlKQpAQCAtMTY3LDcgKzE2MSw3IEBACiAJLyogVXNlciBleHBsaWNpdGx5IHNlbGVjdGVkIDAgYnVmZmVycyBmb3IgdGhlc2Ugc3RyZWFtcywgc28gZG9uJ3QKIAkgICBjcmVhdGUgdGhlbS4gKi8KIAlpZiAoY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5kbWEgIT0gUENJX0RNQV9OT05FICYmCi0JICAgIGN4LT5vcHRpb25zLm1lZ2FieXRlc1t0eXBlXSA9PSAwKSB7CisJICAgIGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSA9PSAwKSB7CiAJCUNYMThfSU5GTygiRGlzYWJsZWQgJXMgZGV2aWNlXG4iLCBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yNjcsOCArMjYxLDkgQEAKIAogCXN3aXRjaCAodmZsX3R5cGUpIHsKIAljYXNlIFZGTF9UWVBFX0dSQUJCRVI6Ci0JCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZCBmb3IgJXMgKCVkIE1CKVxuIiwKLQkJCW51bSwgcy0+bmFtZSwgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKTsKKwkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIGZvciAlcyAoJWQgeCAlZCBrQilcbiIsCisJCQkgIG51bSwgcy0+bmFtZSwgY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdLAorCQkJICBjeC0+c3RyZWFtX2J1Zl9zaXplW3R5cGVdLzEwMjQpOwogCQlicmVhazsKIAogCWNhc2UgVkZMX1RZUEVfUkFESU86CkBAIC0yNzcsMTAgKzI3MiwxMSBAQAogCQlicmVhazsKIAogCWNhc2UgVkZMX1RZUEVfVkJJOgotCQlpZiAoY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKQotCQkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2YmklZCBmb3IgJXMgKCVkIE1CKVxuIiwKLQkJCQludW0sCi0JCQkJcy0+bmFtZSwgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKTsKKwkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSkKKwkJCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWQgZm9yICVzICIKKwkJCQkgICIoJWQgeCAlZCBieXRlcylcbiIsCisJCQkJICBudW0sIHMtPm5hbWUsIGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSwKKwkJCQkgIGN4LT5zdHJlYW1fYnVmX3NpemVbdHlwZV0pOwogCQllbHNlCiAJCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlc1xuIiwKIAkJCQludW0sIHMtPm5hbWUpOwpAQCAtMzQ0LDcgKzM0MCw3IEBACiBzdGF0aWMgdm9pZCBjeDE4X3ZiaV9zZXR1cChzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7Ci0JaW50IHJhdyA9IGN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9PSAwOworCWludCByYXcgPSBjeDE4X3Jhd192YmkoY3gpOwogCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV07CiAJaW50IGxpbmVzOwogCkBAIC0zNjIsOCArMzU4LDcgQEAKIAljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCAmY3gtPnZiaS5pbik7CiAKIAkvKiBkZXRlcm1pbmUgbnVtYmVyIG9mIGxpbmVzIGFuZCB0b3RhbCBudW1iZXIgb2YgVkJJIGJ5dGVzLgotCSAgIEEgcmF3IGxpbmUgdGFrZXMgMTQ0MyBieXRlczogMiAqIDcyMCArIDQgYnl0ZSBmcmFtZSBoZWFkZXIgLSAxCi0JICAgVGhlICctIDEnIGJ5dGUgaXMgcHJvYmFibHkgYW4gdW51c2VkIFUgb3IgViBieXRlLiBPciBzb21ldGhpbmcuLi4KKwkgICBBIHJhdyBsaW5lIHRha2VzIDE0NDQgYnl0ZXM6IDQgYnl0ZSBTQVYgY29kZSArIDIgKiA3MjAKIAkgICBBIHNsaWNlZCBsaW5lIHRha2VzIDUxIGJ5dGVzOiA0IGJ5dGUgZnJhbWUgaGVhZGVyLCA0IGJ5dGUgaW50ZXJuYWwKIAkgICBoZWFkZXIsIDQyIGRhdGEgYnl0ZXMgKyBjaGVja3N1bSAodG8gYmUgY29uZmlybWVkKSAqLwogCWlmIChyYXcpIHsKQEAgLTM4MSwxNCArMzc2LDE1IEBACiAJLyogTGluZXMgcGVyIGZpZWxkICovCiAJZGF0YVsxXSA9IChsaW5lcyAvIDIpIHwgKChsaW5lcyAvIDIpIDw8IDE2KTsKIAkvKiBieXRlcyBwZXIgbGluZSAqLwotCWRhdGFbMl0gPSAocmF3ID8gY3gtPnZiaS5yYXdfc2l6ZSA6IGN4LT52Ymkuc2xpY2VkX3NpemUpOworCWRhdGFbMl0gPSAocmF3ID8gY3gtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemUKKwkJICAgICAgIDogY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9saW5lX3NpemUpOwogCS8qIEV2ZXJ5IFggbnVtYmVyIG9mIGZyYW1lcyBhIFZCSSBpbnRlcnJ1cHQgYXJyaXZlcwogCSAgIChmcmFtZXMgYXMgaW4gMjUgb3IgMzAgZnBzKSAqLwogCWRhdGFbM10gPSAxOwogCS8qIFNldHVwIFZCSSBmb3IgdGhlIGN4MjU4NDAgZGlnaXRpemVyICovCiAJaWYgKHJhdykgewogCQlkYXRhWzRdID0gMHgyMDYwMjA2MDsKLQkJZGF0YVs1XSA9IDB4MzA3MDMwNzA7CisJCWRhdGFbNV0gPSAweDMwNzA5MGQwOwogCX0gZWxzZSB7CiAJCWRhdGFbNF0gPSAweEIwRjBCMEYwOwogCQlkYXRhWzVdID0gMHhBMEUwQTBFMDsKQEAgLTQwMSwxMSArMzk3LDUyIEBACiAJCWN4MThfYXBpKGN4LCBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSwgNiwgZGF0YSk7CiB9CiAKK3N0cnVjdCBjeDE4X3F1ZXVlICpjeDE4X3N0cmVhbV9wdXRfYnVmX2Z3KHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKKwkJCQkJICBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKKwlzdHJ1Y3QgY3gxOF9xdWV1ZSAqcTsKKworCS8qIERvbid0IGdpdmUgaXQgdG8gdGhlIGZpcm13YXJlLCBpZiB3ZSdyZSBub3QgcnVubmluZyBhIGNhcHR1cmUgKi8KKwlpZiAocy0+aGFuZGxlID09IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSB8fAorCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpCisJCXJldHVybiBjeDE4X2VucXVldWUocywgYnVmLCAmcy0+cV9mcmVlKTsKKworCXEgPSBjeDE4X2VucXVldWUocywgYnVmLCAmcy0+cV9idXN5KTsKKwlpZiAocSAhPSAmcy0+cV9idXN5KQorCQlyZXR1cm4gcTsgLyogVGhlIGZpcm13YXJlIGhhcyB0aGUgbWF4IGJ1ZmZlcnMgaXQgY2FuIGhhbmRsZSAqLworCisJY3gxOF9idWZfc3luY19mb3JfZGV2aWNlKHMsIGJ1Zik7CisJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9TRVRfTURMLCA1LCBzLT5oYW5kbGUsCisJCSAgKHZvaWQgX19pb21lbSAqKSAmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXSAtIGN4LT5lbmNfbWVtLAorCQkgIDEsIGJ1Zi0+aWQsIHMtPmJ1Zl9zaXplKTsKKwlyZXR1cm4gcTsKK30KKwordm9pZCBjeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKK3sKKwlzdHJ1Y3QgY3gxOF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKKworCWlmIChhdG9taWNfcmVhZCgmcy0+cV9mcmVlLmJ1ZmZlcnMpID09IDAgfHwKKwkgICAgYXRvbWljX3JlYWQoJnMtPnFfYnVzeS5idWZmZXJzKSA+PSBDWDE4X01BWF9GV19NRExTX1BFUl9TVFJFQU0pCisJCXJldHVybjsKKworCS8qIE1vdmUgZnJvbSBxX2ZyZWUgdG8gcV9idXN5IG5vdGlmeWluZyB0aGUgZmlybXdhcmUsIHVudGlsIHRoZSBsaW1pdCAqLworCWRvIHsKKwkJYnVmID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2ZyZWUpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQlicmVhazsKKwkJcSA9IGN4MThfc3RyZWFtX3B1dF9idWZfZncocywgYnVmKTsKKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmcy0+cV9idXN5LmJ1ZmZlcnMpIDwgQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNCisJCSAmJiBxID09ICZzLT5xX2J1c3kpOworfQorCiBpbnQgY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKQogewogCXUzMiBkYXRhW01BWF9NQl9BUkdVTUVOVFNdOwogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwotCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CiAJaW50IHRzID0gMDsKIAlpbnQgY2FwdHlwZSA9IDA7CiAKQEAgLTQzNCw4ICs0NzEsOCBAQAogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfUENNOwogCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSToKLQkJY2FwdHlwZSA9IGN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA/Ci0JCSAgICBDQVBUVVJFX0NIQU5ORUxfVFlQRV9TTElDRURfVkJJIDogQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJOworCQljYXB0eXBlID0gY3gxOF9yYXdfdmJpKGN4KSA/CisJCSAgICAgQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJIDogQ0FQVFVSRV9DSEFOTkVMX1RZUEVfU0xJQ0VEX1ZCSTsKIAkJY3gtPnZiaS5mcmFtZSA9IDA7CiAJCWN4LT52YmkuaW5zZXJ0ZWRfZnJhbWUgPSAwOwogCQltZW1zZXQoY3gtPnZiaS5zbGljZWRfbXBlZ19zaXplLApAQCAtNDU3LDYgKzQ5NCw4IEBACiAJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQ0hBTk5FTF9UWVBFLCAyLCBzLT5oYW5kbGUsIGNhcHR5cGUpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPT0gMCAmJiAhdHMpIHsKKwkJc3RydWN0IGN4MThfYXBpX2Z1bmNfcHJpdmF0ZSBwcml2OworCiAJCS8qIFN0dWZmIGZyb20gV2luZG93cywgd2UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzICovCiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZFUl9DUk9QX0xJTkUsIDIsIHMtPmhhbmRsZSwgMCk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMywgcy0+aGFuZGxlLCAzLCAxKTsKQEAgLTQ3Niw3ICs1MTUsOSBAQAogCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CiAKIAkJLyogU2V0dXAgQVBJIGZvciBTdHJlYW0gKi8KLQkJY3gyMzQxeF91cGRhdGUoY3gsIGN4MThfYXBpX2Z1bmMsIE5VTEwsICZjeC0+cGFyYW1zKTsKKwkJcHJpdi5jeCA9IGN4OworCQlwcml2LnMgPSBzOworCQljeDIzNDF4X3VwZGF0ZSgmcHJpdiwgY3gxOF9hcGlfZnVuYywgTlVMTCwgJmN4LT5wYXJhbXMpOwogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmY3gtPnRvdF9jYXB0dXJpbmcpID09IDApIHsKQEAgLTQ4OCwxNiArNTI5LDE3IEBACiAJCSh2b2lkIF9faW9tZW0gKikmY3gtPnNjYi0+Y3B1X21kbF9hY2tbcy0+dHlwZV1bMF0gLSBjeC0+ZW5jX21lbSwKIAkJKHZvaWQgX19pb21lbSAqKSZjeC0+c2NiLT5jcHVfbWRsX2Fja1tzLT50eXBlXVsxXSAtIGN4LT5lbmNfbWVtKTsKIAotCWxpc3RfZm9yX2VhY2gocCwgJnMtPnFfZnJlZS5saXN0KSB7Ci0JCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgY3gxOF9idWZmZXIsIGxpc3QpOwotCisJLyogSW5pdCBhbGwgdGhlIGNwdV9tZGxzIGZvciB0aGlzIHN0cmVhbSAqLworCWN4MThfZmx1c2hfcXVldWVzKHMpOworCW11dGV4X2xvY2soJnMtPnFsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJnMtPnFfZnJlZS5saXN0LCBsaXN0KSB7CiAJCWN4MThfd3JpdGVsKGN4LCBidWYtPmRtYV9oYW5kbGUsCiAJCQkJCSZjeC0+c2NiLT5jcHVfbWRsW2J1Zi0+aWRdLnBhZGRyKTsKIAkJY3gxOF93cml0ZWwoY3gsIHMtPmJ1Zl9zaXplLCAmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXS5sZW5ndGgpOwotCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0RFX1NFVF9NREwsIDUsIHMtPmhhbmRsZSwKLQkJCSh2b2lkIF9faW9tZW0gKikmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXSAtIGN4LT5lbmNfbWVtLAotCQkJMSwgYnVmLT5pZCwgcy0+YnVmX3NpemUpOwogCX0KKwltdXRleF91bmxvY2soJnMtPnFsb2NrKTsKKwljeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHMpOworCiAJLyogYmVnaW5fY2FwdHVyZSAqLwogCWlmIChjeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfU1RBUlQsIDEsIHMtPmhhbmRsZSkpIHsKIAkJQ1gxOF9ERUJVR19XQVJOKCJFcnJvciBzdGFydGluZyBjYXB0dXJlIVxuIik7CkBAIC01MDYsOSArNTQ4LDE1IEBACiAJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfU1RPUCwgMiwgcy0+aGFuZGxlLCAxKTsKIAkJZWxzZQogCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1NUT1AsIDEsIHMtPmhhbmRsZSk7CisJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKKwkJLyogRklYTUUgLSBDWDE4X0ZfU19TVFJFQU1PRkYgYXMgd2VsbD8gKi8KIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCwgMSwgcy0+aGFuZGxlKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0RFU1RST1lfVEFTSywgMSwgcy0+aGFuZGxlKTsKLQkJLyogRklYTUUgLSBjbGVhbi11cCBEU1AwX0lOVCBtYXNrLCBpX2ZsYWdzLCBzX2ZsYWdzLCBldGMuICovCisJCXMtPmhhbmRsZSA9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRTsKKwkJaWYgKGF0b21pY19yZWFkKCZjeC0+dG90X2NhcHR1cmluZykgPT0gMCkgeworCQkJc2V0X2JpdChDWDE4X0ZfSV9FT1MsICZjeC0+aV9mbGFncyk7CisJCQljeDE4X3dyaXRlX3JlZyhjeCwgNSwgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKKwkJfQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU2MCw5ICs2MDgsNiBAQAogCQlDWDE4X0lORk8oImlnbm9yaW5nIGdvcF9lbmQ6IG5vdCAoeWV0Pykgc3VwcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZVxuIik7CiAJfQogCi0JLyogVGVsbCB0aGUgQ1gyMzQxOCBpdCBjYW4ndCB1c2Ugb3VyIGJ1ZmZlcnMgYW55bW9yZSAqLwotCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfREVfUkVMRUFTRV9NREwsIDEsIHMtPmhhbmRsZSk7Ci0KIAlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykKIAkJYXRvbWljX2RlYygmY3gtPmFuYV9jYXB0dXJpbmcpOwogCWF0b21pY19kZWMoJmN4LT50b3RfY2FwdHVyaW5nKTsKQEAgLTU3MCw2ICs2MTUsOSBAQAogCS8qIENsZWFyIGNhcHR1cmUgYW5kIG5vLXJlYWQgYml0cyAqLwogCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKIAorCS8qIFRlbGwgdGhlIENYMjM0MTggaXQgY2FuJ3QgdXNlIG91ciBidWZmZXJzIGFueW1vcmUgKi8KKwljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLCAxLCBzLT5oYW5kbGUpOworCiAJY3gxOF92YXBpKGN4LCBDWDE4X0RFU1RST1lfVEFTSywgMSwgcy0+aGFuZGxlKTsKIAlzLT5oYW5kbGUgPSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEU7CiAKQEAgLTU5NSwzICs2NDMsMjEgQEAKIAl9CiAJcmV0dXJuIENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRTsKIH0KKworc3RydWN0IGN4MThfc3RyZWFtICpjeDE4X2hhbmRsZV90b19zdHJlYW0oc3RydWN0IGN4MTggKmN4LCB1MzIgaGFuZGxlKQoreworCWludCBpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKworCWlmIChoYW5kbGUgPT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKKwkJcyA9ICZjeC0+c3RyZWFtc1tpXTsKKwkJaWYgKHMtPmhhbmRsZSAhPSBoYW5kbGUpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnY0bDJkZXYgfHwgcy0+ZHZiLmVuYWJsZWQpCisJCQlyZXR1cm4gczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKaW5kZXggZjMyN2U5NC4uNDIwZTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaApAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1zdHJlYW1zLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDExICsyMywxNSBAQAogICovCiAKIHUzMiBjeDE4X2ZpbmRfaGFuZGxlKHN0cnVjdCBjeDE4ICpjeCk7CitzdHJ1Y3QgY3gxOF9zdHJlYW0gKmN4MThfaGFuZGxlX3RvX3N0cmVhbShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBoYW5kbGUpOwogaW50IGN4MThfc3RyZWFtc19zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpOwogaW50IGN4MThfc3RyZWFtc19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3N0cmVhbXNfY2xlYW51cChzdHJ1Y3QgY3gxOCAqY3gsIGludCB1bnJlZ2lzdGVyKTsKIAogLyogQ2FwdHVyZSByZWxhdGVkICovCit2b2lkIGN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUoc3RydWN0IGN4MThfc3RyZWFtICpzKTsKK3N0cnVjdCBjeDE4X3F1ZXVlICpjeDE4X3N0cmVhbV9wdXRfYnVmX2Z3KHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKKwkJCQkJICBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1Zik7CiBpbnQgY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc3RydWN0IGN4MThfc3RyZWFtICpzKTsKIGludCBjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcywgaW50IGdvcF9lbmQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jCmluZGV4IDIyZTc2ZWUuLmZiNTk1YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jCkBAIC0xNjAsMTEgKzE2MCwxNCBAQAogCQlyZXR1cm47CiAKIAkvKiBSYXcgVkJJIGRhdGEgKi8KLQlpZiAoY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID09IDApIHsKKwlpZiAoY3gxOF9yYXdfdmJpKGN4KSkgewogCQl1OCB0eXBlOwogCiAJCWN4MThfYnVmX3N3YXAoYnVmKTsKIAorCQkvKiBTa2lwIDEyIGJ5dGVzIG9mIGhlYWRlciB0aGF0IGdldHMgc3R1ZmZlZCBpbiAqLworCQlzaXplIC09IDEyOworCQltZW1jcHkocCwgJmJ1Zi0+YnVmWzEyXSwgc2l6ZSk7CiAJCXR5cGUgPSBwWzNdOwogCiAJCXNpemUgPSBidWYtPmJ5dGVzdXNlZCA9IGNvbXByZXNzX3Jhd19idWYoY3gsIHAsIHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCmluZGV4IDlmNmJlMmQuLjg0YzBmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgQ1gxOF9EUklWRVJfTkFNRSAiY3gxOCIKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgMAotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMQorI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgNAogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SLCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA2NjhmOTY4Li42MDFmM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogLyogQWxsIGNvbW1hbmRzIGZvciBDUFUgaGF2ZSB0aGUgZm9sbG93aW5nIG1hc2sgc2V0ICovCiAjZGVmaW5lIENQVV9DTURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIAkweDIwMDAwMDAwCisjZGVmaW5lIENQVV9DTURfTUFTS19ERUJVRyAgICAgICAJCShDUFVfQ01EX01BU0sgfCAweDAwMDAwMDAwKQogI2RlZmluZSBDUFVfQ01EX01BU0tfQUNLICAgICAgICAgICAgICAgICAgICAJKENQVV9DTURfTUFTSyB8IDB4ODAwMDAwMDApCiAjZGVmaW5lIENQVV9DTURfTUFTS19DQVBUVVJFICAgICAgICAgICAgICAgIAkoQ1BVX0NNRF9NQVNLIHwgMHgwMDAyMDAwMCkKICNkZWZpbmUgQ1BVX0NNRF9NQVNLX1RTICAgICAgICAgICAgICAgICAgICAgCShDUFVfQ01EX01BU0sgfCAweDAwMDQwMDAwKQpAQCAtNzEsNiArNzIsMTEgQEAKIAkgICAwL3plcm8vTlVMTCBtZWFucyAiSSBoYXZlIG5vdGhpbmcgdG8gc2F5IiAqLwogI2RlZmluZSBDWDE4X0VQVV9ERUJVRyAJCQkJKEVQVV9DTURfTUFTS19ERUJVRyB8IDB4MDAwMykKIAorLyogUmVhZHMgbWVtb3J5L3JlZ2lzdGVycyAoMzItYml0KQorICAgSU5bMF0gLSBBZGRyZXNzCisgICBPVVRbMV0gLSBWYWx1ZSAqLworI2RlZmluZSBDWDE4X0NQVV9ERUJVR19QRUVLMzIJCQkoQ1BVX0NNRF9NQVNLX0RFQlVHIHwgMHgwMDAzKQorCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIHN0YXJ0cyBzdHJlYW1pbmcgd2l0aCB0aGUgc2V0IGNoYW5uZWwgdHlwZQogICAgSU5bMF0gLSBUYXNrIGhhbmRsZS4gSGFuZGxlIG9mIHRoZSB0YXNrIHRvIHN0YXJ0CiAgICBSZXR1cm5Db2RlIC0gT25lIG9mIHRoZSBFUlJfQ0FQVFVSRV8uLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggMDA4MzFmMy4uNzk4ZDI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogIFN1cHBvcnQgZm9yIGEgY3gyMzQxNyBtcGVnIGVuY29kZXIgdmlhIGN4MjM4ODUgaG9zdCBwb3J0LgogICoKLSAqICAgIChjKSAyMDA0IEplbGxlIEZva3MgPGplbGxlQGZva3MuOG0uY29tPgorICogICAgKGMpIDIwMDQgSmVsbGUgRm9rcyA8amVsbGVAZm9rcy51cz4KICAqICAgIChjKSAyMDA0IEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KICAqICAgIChjKSAyMDA4IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4KICAqICAgICAgLSBDWDIzODg1LzcvOCBzdXBwb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCBkYWM1Y2NjLi5jYWEwOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTE1OCw2ICsxNTgsMTAgQEAKIAkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luZmFzdCBQeERWUjMyMDAgSCIsCiAJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAogCX0sCisJW0NYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRl0gPSB7CisJCS5uYW1lCQk9ICJDb21wcm8gVmlkZW9NYXRlIEU2NTBGIiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMjM3LDYgKzI0MSwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgxMDdkLAogCQkuc3ViZGV2aWNlID0gMHg2NjgxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0gsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxODViLAorCQkuc3ViZGV2aWNlID0gMHhlODAwLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtMzkwLDYgKzM5OCw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKIAkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLwogCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CkBAIC01MzAsNiArNTM5LDcgQEAKIAkJY3hfc2V0KEdQMF9JTywgMHgwMDBmMDAwZik7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJCS8qIEdQSU8tMiAgeGMzMDI4IHR1bmVyIHJlc2V0ICovCiAKIAkJLyogVGhlIGZvbGxvd2luZyBHUElPJ3MgYXJlIG9uIHRoZSBpbnRlcm5hbCBBVkNvcmUgKGN4MjU4NDApICovCkBAIC02MzAsNiArNjQwLDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJZGVmYXVsdDoKIAkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwpAQCAtNjQ0LDYgKzY1NSw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJCXJlcXVlc3RfbW9kdWxlKCJjeDI1ODQwIik7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggZTFhYWMwNy4uMWM0NTQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTUwMiw2ICs1MDIsNyBAQAogCQlicmVhazsKIAl9CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CiAKIAkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggMWQ1M2Y1NC4uNjc4MjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQIDEwCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUCAxMQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSCAxMgorI2RlZmluZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEYgICAxMwogCiAvKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjogUEFML0gsIE5UU0MvS3IsIFNFQ0FNIEIvRy9IL0xDICovCiAjZGVmaW5lIENYMjM4ODVfTk9STVMgKFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWcKaW5kZXggZGU1MTVkYS4uNDUxMTMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVklERU9fQ1gyNTg0MAogCXRyaXN0YXRlICJDb25leGFudCBDWDI1ODR4IGF1ZGlvL3ZpZGVvIGRlY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBDb25leGFudCBDWDI1ODR4IGF1ZGlvL3ZpZGVvIGRlY29kZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwppbmRleCBkNjQyMWUxLi5kMTk5ZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIGludCBzZXRfYXVkY2xrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCiAJaWYgKGZyZXEgIT0gMzIwMDAgJiYgZnJlcSAhPSA0NDEwMCAmJiBmcmVxICE9IDQ4MDAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiB2b2lkIGN4MjU4NDBfYXVkaW9fc2V0X3BhdGgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAKIAkvKiBhc3NlcnQgc29mdCByZXNldCAqLwogCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDB4MDEpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X3ZvbHVtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlpbnQgdm9sOwogCiAJaWYgKHN0YXRlLT51bm11dGVfdm9sdW1lID49IDApCkBAIC0yNTIsNyArMjUyLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X3ZvbHVtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdm9sdW1lKQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlpbnQgdm9sOwogCiAJaWYgKHN0YXRlLT51bm11dGVfdm9sdW1lID49IDApIHsKQEAgLTM0MCwxNCArMzQwLDE0IEBACiAKIHN0YXRpYyBpbnQgZ2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAKIAlyZXR1cm4gc3RhdGUtPnVubXV0ZV92b2x1bWUgPj0gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG11dGUpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCiAJaWYgKG11dGUgJiYgc3RhdGUtPnVubXV0ZV92b2x1bWUgPT0gLTEpIHsKIAkJaW50IHZvbCA9IGdldF92b2x1bWUoY2xpZW50KTsKQEAgLTM2NSw3ICszNjUsNyBAQAogCiBpbnQgY3gyNTg0MF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CiAJaW50IHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDRkYThjZDcuLjJhZDI3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogc3RhdGljIHZvaWQgY3gyNTg0MF9pbml0aWFsaXplKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpxOwogCiAJLyogZGF0YXNoZWV0IHN0YXJ0dXAgaW4gbnVtYmVyZWQgc3RlcHMsIHJlZmVyIHRvIHBhZ2UgMy03NyAqLwpAQCAtMjU5LDcgKzI1OSw3IEBACiBzdGF0aWMgdm9pZCBjeDIzODg1X2luaXRpYWxpemUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnE7CiAKIAkvKiBJbnRlcm5hbCBSZXNldCAqLwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIHZvaWQgY3gyNTg0MF9zdGRfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKIAlpbnQgaGJsYW5rLCBoYWN0aXZlLCBidXJzdCwgdmJsYW5rLCB2YWN0aXZlLCBzYzsKIAlpbnQgdmJsYW5rNjU2LCBzcmNfZGVjaW1hdGlvbjsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCiBzdGF0aWMgdm9pZCBpbnB1dF9jaGFuZ2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKIAogCS8qIEZvbGxvdyBzdGVwIDhjIGFuZCA4ZCBvZiBzZWN0aW9uIDMuMTYgaW4gdGhlIGN4MjU4NDAgZGF0YXNoZWV0ICovCkBAIC01NTEsNyArNTUxLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGVudW0gY3gyNTg0MF92aWRlb19pbnB1dCB2aWRfaW5wdXQsCiAJCQkJCQllbnVtIGN4MjU4NDBfYXVkaW9faW5wdXQgYXVkX2lucHV0KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAl1OCBpc19jb21wb3NpdGUgPSAodmlkX2lucHV0ID49IENYMjU4NDBfQ09NUE9TSVRFMSAmJgogCQkJICAgdmlkX2lucHV0IDw9IENYMjU4NDBfQ09NUE9TSVRFOCk7CiAJdTggcmVnOwpAQCAtNjcxLDcgKzY3MSw3IEBACiAKIHN0YXRpYyBpbnQgc2V0X3Y0bHN0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAl1OCBmbXQgPSAwOyAJLyogemVybyBpcyBhdXRvZGV0ZWN0ICovCiAJdTggcGFsX20gPSAwOwogCkBAIC03MjAsOSArNzIwLDEwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2V0X3Y0bGN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgY3gyNTg0MF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgQ1gyNTg0MF9DSURfRU5BQkxFX1BWUjE1MF9XT1JLQVJPVU5EOgpAQCAtNzg2LDkgKzc4NywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF92NGxjdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGN4MjU4NDBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIENYMjU4NDBfQ0lEX0VOQUJMRV9QVlIxNTBfV09SS0FST1VORDoKQEAgLTgyMywyMSArODI1LDIzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgZ2V0X3Y0bGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgY3gyNTg0MF9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlzd2l0Y2ggKGZtdC0+dHlwZSkgewogCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6CiAJCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19HX0ZNVCwgZm10KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfdjRsZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBjeDI1ODQwX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwogCWludCBIU0MsIFZTQywgVnNyYywgSHNyYywgZmlsdGVyLCBWbGluZXM7CiAJaW50IGlzXzUwSHogPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwpAQCAtOTE0LDcgKzkxOCw3IEBACiAJCSIweEQiLCAiMHhFIiwgIjB4RiIKIAl9OwogCi0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXU4IHZpZGZtdF9zZWwgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQwMCkgJiAweGY7CiAJdTggZ2VuX3N0YXQxID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MGQpOwogCXU4IGdlbl9zdGF0MiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDBlKTsKQEAgLTk0NCw3ICs5NDgsNyBAQAogCiBzdGF0aWMgdm9pZCBsb2dfYXVkaW9fc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXU4IGRvd25sb2FkX2N0bCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4ODAzKTsKIAl1OCBtb2RfZGV0X3N0YXQwID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDQpOwogCXU4IG1vZF9kZXRfc3RhdDEgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwNSk7CkBAIC0xMDk3LDIxICsxMTAxLDEyIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgY3gyNTg0MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB2b2lkICphcmcpCitzdGF0aWMgaW50IGN4MjU4NDBfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKLQotCS8qIGlnbm9yZSB0aGVzZSBjb21tYW5kcyAqLwotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgVFVORVJfU0VUX1RZUEVfQUREUjoKLQkJCXJldHVybiAwOwotCX0KKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJaWYgKCFzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQpIHsKLQkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJjbWQgJTA4eCB0cmlnZ2VyZWQgZncgbG9hZFxuIiwgY21kKTsKIAkJLyogaW5pdGlhbGl6ZSBvbiBmaXJzdCB1c2UgKi8KIAkJc3RhdGUtPmlzX2luaXRpYWxpemVkID0gMTsKIAkJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQpAQCAtMTEyMSw1MCArMTExNiw2OSBAQAogCQllbHNlCiAJCQljeDI1ODQwX2luaXRpYWxpemUoY2xpZW50KTsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQlzd2l0Y2ggKGNtZCkgewogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzcyB0byB0aGUKLQkgKiBjeDI1ODQwIHJlZ2lzdGVycyBmb3IgdGVzdGluZyAqLwotCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKK3N0YXRpYyBpbnQgY3gyNTg0MF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCByZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnZhbCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHgwZmZmKTsKKwlyZXR1cm4gMDsKK30KIAotCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJCXJlZy0+dmFsID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgcmVnLT5yZWcgJiAweDBmZmYpOwotCQllbHNlCi0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgcmVnLT5yZWcgJiAweDBmZmYsIHJlZy0+dmFsICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbnQgY3gyNTg0MF9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCisJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJY3gyNTg0MF93cml0ZShjbGllbnQsIHJlZy0+cmVnICYgMHgwZmZmLCByZWctPnZhbCAmIDB4ZmYpOworCXJldHVybiAwOworfQogI2VuZGlmCiAKLQljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCQlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBjbWQsIGFyZyk7CitzdGF0aWMgaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIGNtZCwgYXJnKTsKKwlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSwgdmJpKTsKK30KIAotCWNhc2UgVklESU9DX1NUUkVBTU9OOgotCQl2NGxfZGJnKDEsIGN4MjU4NDBfZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXRcbiIpOworc3RhdGljIGludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwgJmZyZXEpOworfQorCitzdGF0aWMgaW50IGN4MjU4NDBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJaWYgKGVuYWJsZSkgewogCQlpZiAoc3RhdGUtPmlzX2N4MjM4ODUpIHsKIAkJCXU4IHYgPSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYik7CiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MjEsIHYpOwogCQl9IGVsc2UgewogCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LAotCQkJCXN0YXRlLT5pc19jeDI1ODM2ID8gMHgwYyA6IDB4OGMpOworCQkJCQlzdGF0ZS0+aXNfY3gyNTgzNiA/IDB4MGMgOiAweDhjKTsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwKLQkJCQlzdGF0ZS0+aXNfY3gyNTgzNiA/IDB4MDQgOiAweDA3KTsKKwkJCQkJc3RhdGUtPmlzX2N4MjU4MzYgPyAweDA0IDogMHgwNyk7CiAJCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiZGlzYWJsZSBvdXRwdXRcbiIpOworCX0gZWxzZSB7CiAJCWlmIChzdGF0ZS0+aXNfY3gyMzg4NSkgewogCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSAmIH4oMHgwYik7CiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MjEsIHYpOwpAQCAtMTE3MiwxMzMgKzExODYsMTM2IEBACiAJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIDB4MDApOwogCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCAweDAwKTsKIAkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI1ODQwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwlkZWZhdWx0OgogCQlicmVhazsKKwl9CisJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCWxvZ192aWRlb19zdGF0dXMoY2xpZW50KTsKLQkJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKLQkJCWxvZ19hdWRpb19zdGF0dXMoY2xpZW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBnZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHNldF92NGxjdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQotCQlzd2l0Y2ggKHFjLT5pZCkgewotCQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoc3RhdGUtPmlzX2N4MjU4MzYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzd2l0Y2ggKHFjLT5pZCkgewotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKLQkJCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LAorCQkJCTY1NTM1IC8gMTAwLCBzdGF0ZS0+ZGVmYXVsdF92b2x1bWUpOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKLQljYXNlIFZJRElPQ19HX1NURDoKLQkJKih2NGwyX3N0ZF9pZCAqKWFyZyA9IHN0YXRlLT5zdGQ7Ci0JCWJyZWFrOworc3RhdGljIGludCBjeDI1ODQwX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCWlmIChzdGF0ZS0+cmFkaW8gPT0gMCAmJiBzdGF0ZS0+c3RkID09ICoodjRsMl9zdGRfaWQgKilhcmcpCi0JCQlyZXR1cm4gMDsKLQkJc3RhdGUtPnJhZGlvID0gMDsKLQkJc3RhdGUtPnN0ZCA9ICoodjRsMl9zdGRfaWQgKilhcmc7Ci0JCXJldHVybiBzZXRfdjRsc3RkKGNsaWVudCk7CisJaWYgKHN0YXRlLT5yYWRpbyA9PSAwICYmIHN0YXRlLT5zdGQgPT0gc3RkKQorCQlyZXR1cm4gMDsKKwlzdGF0ZS0+cmFkaW8gPSAwOworCXN0YXRlLT5zdGQgPSBzdGQ7CisJcmV0dXJuIHNldF92NGxzdGQoY2xpZW50KTsKK30KIAotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCXN0YXRlLT5yYWRpbyA9IDE7Ci0JCWJyZWFrOworc3RhdGljIGludCBjeDI1ODQwX3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+dmlkX2lucHV0OwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7CisJc3RhdGUtPnJhZGlvID0gMTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6Ci0JCXJldHVybiBzZXRfaW5wdXQoY2xpZW50LCByb3V0ZS0+aW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOworc3RhdGljIGludCBjeDI1ODQwX3NfdmlkZW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKLQkJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5hdWRfaW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOwotCQlicmVhazsKKwlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgcm91dGUtPmlucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKK30KIAotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKK3N0YXRpYyBpbnQgY3gyNTg0MF9zX2F1ZGlvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KSB7Ci0JCQlpbnB1dF9jaGFuZ2UoY2xpZW50KTsKLQkJfQotCQlicmVhazsKKwlpZiAoc3RhdGUtPmlzX2N4MjU4MzYpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBzZXRfaW5wdXQoY2xpZW50LCBzdGF0ZS0+dmlkX2lucHV0LCByb3V0ZS0+aW5wdXQpOworfQogCi0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXU4IHZwcmVzID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MGUpICYgMHgyMDsKLQkJdTggbW9kZTsKLQkJaW50IHZhbCA9IDA7CitzdGF0aWMgaW50IGN4MjU4NDBfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOworCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCisJCWlucHV0X2NoYW5nZShjbGllbnQpOworCXJldHVybiAwOworfQogCi0JCXZ0LT5zaWduYWwgPSB2cHJlcyA/IDB4ZmZmZiA6IDB4MDsKLQkJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQotCQkJYnJlYWs7CitzdGF0aWMgaW50IGN4MjU4NDBfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2cHJlcyA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDBlKSAmIDB4MjA7CisJdTggbW9kZTsKKwlpbnQgdmFsID0gMDsKIAotCQl2dC0+Y2FwYWJpbGl0eSB8PQotCQkgICAgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAotCQkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CisJaWYgKHN0YXRlLT5yYWRpbykKKwkJcmV0dXJuIDA7CiAKLQkJbW9kZSA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4ODA0KTsKKwl2dC0+c2lnbmFsID0gdnByZXMgPyAweGZmZmYgOiAweDA7CisJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQorCQlyZXR1cm4gMDsKIAotCQkvKiBnZXQgcnhzdWJjaGFucyBhbmQgYXVkbW9kZSAqLwotCQlpZiAoKG1vZGUgJiAweGYpID09IDEpCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQllbHNlCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwl2dC0+Y2FwYWJpbGl0eSB8PQorCQlWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CisJCVY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwogCi0JCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQotCQkJdmFsID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKKwltb2RlID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDQpOwogCi0JCWlmIChtb2RlICYgMHgxMCkKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TQVA7CisJLyogZ2V0IHJ4c3ViY2hhbnMgYW5kIGF1ZG1vZGUgKi8KKwlpZiAoKG1vZGUgJiAweGYpID09IDEpCisJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJZWxzZQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAotCQl2dC0+cnhzdWJjaGFucyA9IHZhbDsKLQkJdnQtPmF1ZG1vZGUgPSBzdGF0ZS0+YXVkbW9kZTsKLQkJYnJlYWs7Ci0JfQorCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQorCQl2YWwgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwogCi0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQkJaWYgKHN0YXRlLT5yYWRpbyB8fCBzdGF0ZS0+aXNfY3gyNTgzNikKLQkJCWJyZWFrOworCWlmIChtb2RlICYgMHgxMCkKKwkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX1NBUDsKIAotCQlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CisJdnQtPnJ4c3ViY2hhbnMgPSB2YWw7CisJdnQtPmF1ZG1vZGUgPSBzdGF0ZS0+YXVkbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI1ODQwX3NfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoc3RhdGUtPnJhZGlvIHx8IHN0YXRlLT5pc19jeDI1ODM2KQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodnQtPmF1ZG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAkJCS8qIG1vbm8gICAgICAtPiBtb25vCiAJCQkgICBzdGVyZW8gICAgLT4gbW9ubwpAQCAtMTMyNiw0MSArMTM0MywxMDAgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQkJcmV0dXJuIGdldF92NGxmbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKLQotCWNhc2UgVklESU9DX1NfRk1UOgotCQlyZXR1cm4gc2V0X3Y0bGZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCQlpZiAoc3RhdGUtPmlzX2N4MjU4MzYpCi0JCQljeDI1ODM2X2luaXRpYWxpemUoY2xpZW50KTsKLQkJZWxzZSBpZiAoc3RhdGUtPmlzX2N4MjM4ODUpCi0JCQljeDIzODg1X2luaXRpYWxpemUoY2xpZW50KTsKLQkJZWxzZQotCQkJY3gyNTg0MF9pbml0aWFsaXplKGNsaWVudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBhcmcsIHN0YXRlLT5pZCwgc3RhdGUtPnJldik7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4MjU4NDBfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKHN0YXRlLT5pc19jeDI1ODM2KQorCQljeDI1ODM2X2luaXRpYWxpemUoY2xpZW50KTsKKwllbHNlIGlmIChzdGF0ZS0+aXNfY3gyMzg4NSkKKwkJY3gyMzg4NV9pbml0aWFsaXplKGNsaWVudCk7CisJZWxzZQorCQljeDI1ODQwX2luaXRpYWxpemUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI1ODQwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBzdGF0ZS0+aWQsIHN0YXRlLT5yZXYpOworfQorCitzdGF0aWMgaW50IGN4MjU4NDBfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlsb2dfdmlkZW9fc3RhdHVzKGNsaWVudCk7CisJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKKwkJbG9nX2F1ZGlvX3N0YXR1cyhjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjU4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MjU4NDBfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBjeDI1ODQwX2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IGN4MjU4NDBfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBjeDI1ODQwX2dfY3RybCwKKwkuc19jdHJsID0gY3gyNTg0MF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IGN4MjU4NDBfcXVlcnljdHJsLAorCS5yZXNldCA9IGN4MjU4NDBfcmVzZXQsCisJLmluaXQgPSBjeDI1ODQwX2luaXQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gY3gyNTg0MF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gY3gyNTg0MF9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBjeDI1ODQwX3R1bmVyX29wcyA9IHsKKwkuc19mcmVxdWVuY3kgPSBjeDI1ODQwX3NfZnJlcXVlbmN5LAorCS5zX3N0ZCA9IGN4MjU4NDBfc19zdGQsCisJLnNfcmFkaW8gPSBjeDI1ODQwX3NfcmFkaW8sCisJLmdfdHVuZXIgPSBjeDI1ODQwX2dfdHVuZXIsCisJLnNfdHVuZXIgPSBjeDI1ODQwX3NfdHVuZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDI1ODQwX2F1ZGlvX29wcyA9IHsKKwkuc19jbG9ja19mcmVxID0gY3gyNTg0MF9zX2Nsb2NrX2ZyZXEsCisJLnNfcm91dGluZyA9IGN4MjU4NDBfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgY3gyNTg0MF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGN4MjU4NDBfc192aWRlb19yb3V0aW5nLAorCS5nX2ZtdCA9IGN4MjU4NDBfZ19mbXQsCisJLnNfZm10ID0gY3gyNTg0MF9zX2ZtdCwKKwkuZGVjb2RlX3ZiaV9saW5lID0gY3gyNTg0MF9kZWNvZGVfdmJpX2xpbmUsCisJLnNfc3RyZWFtID0gY3gyNTg0MF9zX3N0cmVhbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGN4MjU4NDBfb3BzID0geworCS5jb3JlID0gJmN4MjU4NDBfY29yZV9vcHMsCisJLnR1bmVyID0gJmN4MjU4NDBfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZjeDI1ODQwX2F1ZGlvX29wcywKKwkudmlkZW8gPSAmY3gyNTg0MF92aWRlb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGN4MjU4NDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCXUzMiBpZDsKIAl1MTYgZGV2aWNlX2lkOwogCkBAIC0xMzkyLDEwICsxNDY4LDExIEBACiAJfQogCiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAorCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmY3gyNTg0MF9vcHMpOwogCS8qIE5vdGU6IHJldmlzaW9uICcoZGV2aWNlX2lkICYgMHgwZikgPT0gMicgd2FzIG5ldmVyIGJ1aWx0LiBUaGUKIAkgICBtYXJraW5nIHNraXBzIGZyb20gMHgxID09IDIyIHRvIDB4MyA9PSAyMy4gKi8KIAl2NGxfaW5mbyhjbGllbnQsICJjeDI1JTN4LTIleCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKQEAgLTE0MDMsNyArMTQ4MCw2IEBACiAJCSAgICAoZGV2aWNlX2lkICYgMHgwZikgPCAzID8gKGRldmljZV9pZCAmIDB4MGYpICsgMSA6IChkZXZpY2VfaWQgJiAweDBmKSwKIAkJICAgIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOwogCXN0YXRlLT5jID0gY2xpZW50OwogCXN0YXRlLT5pc19jeDI1ODM2ID0gKChkZXZpY2VfaWQgJiAweGZmMDApID09IDB4ODMwMCk7CiAJc3RhdGUtPmlzX2N4MjM4ODUgPSAoZGV2aWNlX2lkID09IDB4MDAwMCkgfHwgKGRldmljZV9pZCA9PSAweDEzMTMpOwpAQCAtMTQzMCw3ICsxNTA2LDEwIEBACiAKIHN0YXRpYyBpbnQgY3gyNTg0MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaAppbmRleCBiODczMzdlLi5iZTA1NTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKIC8qIEVOQUJMRV9QVlIxNTBfV09SS0FST1VORCBhY3RpdmF0ZXMgYSB3b3JrYXJvdW5kIGZvciBhIGhhcmR3YXJlIGJ1ZyB0aGF0IGlzCkBAIC0zNCw2ICszNSw3IEBACiAKIHN0cnVjdCBjeDI1ODQwX3N0YXRlIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJaW50IHB2cjE1MF93b3JrYXJvdW5kOwogCWludCByYWRpbzsKIAl2NGwyX3N0ZF9pZCBzdGQ7CkBAIC01Myw2ICs1NSwxMSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBmd193b3JrOyAgIC8qIHdvcmsgZW50cnkgZm9yIGZ3IGxvYWQgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4MjU4NDBfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGN4MjU4NDBfc3RhdGUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtY29yZS5jIAkJCQkJCQkgICAqLwogaW50IGN4MjU4NDBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGFkZHIsIHU4IHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jCmluZGV4IDhkNDg5YTQuLjBiMmRjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYwpAQCAtOTEsNyArOTEsNyBAQAogCiBpbnQgY3gyNTg0MF9sb2FkZncoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CiAJdTggYnVmZmVyW0ZXU0VORF07CiAJY29uc3QgdTggKnB0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggNThlNmVmMS4uMDNmMDliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAogaW50IGN4MjU4NDBfdmJpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCAwNmYxNzFhLi42NmM3NTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC03NDIsNyArNzQyLDYgQEAKIAljb3JlID0gY3g4OF9jb3JlX2dldChwY2kpOwogCWlmIChOVUxMID09IGNvcmUpIHsKIAkJZXJyID0gLUVJTlZBTDsKLQkJa2ZyZWUgKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtODEyLDcgKzgxMSw3IEBACiAKIAllcnIgPSBzbmRfY3g4OF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAoZXJyKTsKKwkJZ290byBlcnJvcjsKIAogCWVyciA9IHNuZF9jeDg4X3BjbShjaGlwLCAwLCAiQ1g4OCBEaWdpdGFsIik7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IGQzYWU1YjQuLmUxNjJhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0zLDcgKzMsNyBAQAogICogIFN1cHBvcnQgZm9yIGEgY3gyMzQxNiBtcGVnIGVuY29kZXIgdmlhIGN4MjM4OHggaG9zdCBwb3J0LgogICogICJibGFja2JpcmQiIHJlZmVyZW5jZSBkZXNpZ24uCiAgKgotICogICAgKGMpIDIwMDQgSmVsbGUgRm9rcyA8amVsbGVAZm9rcy44bS5jb20+CisgKiAgICAoYykgMjAwNCBKZWxsZSBGb2tzIDxqZWxsZUBmb2tzLnVzPgogICogICAgKGMpIDIwMDQgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogICoKICAqICAgIChjKSAyMDA1LTIwMDYgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiY3g4OC5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgY3gyMzg4eC9jeDIzNDE2IGJhc2VkIG1wZWcgZW5jb2RlciBjYXJkcyIpOwotTU9EVUxFX0FVVEhPUigiSmVsbGUgRm9rcyA8amVsbGVAZm9rcy44bS5jb20+LCBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CitNT0RVTEVfQVVUSE9SKCJKZWxsZSBGb2tzIDxqZWxsZUBmb2tzLnVzPiwgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1wZWdidWZzID0gMzI7CkBAIC0xMjQ0LDggKzEyNDQsMTYgQEAKIAkJICogV2UncmUgYmVpbmcgZ2l2ZW4gYWNjZXNzIHRvIHJlLWFycmFuZ2UgdGhlIEdQSU9zLgogCQkgKiBUYWtlIHRoZSBidXMgb2ZmIHRoZSBjeDIyNzAyIGFuZCBwdXQgdGhlIGN4MjM0MTYgb24gaXQuCiAJCSAqLwotCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOyAvKiBjeDIyNzAyIGluIHJlc2V0ICovCi0JCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDAwNCk7IC8qIERpc2FibGUgdGhlIGN4MjI3MDIgKi8KKwkJLyogVG9nZ2xlIHJlc2V0IG9uIGN4MjI3MDIgbGVhdmluZyBpMmMgYWN0aXZlICovCisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCXVkZWxheSg1MCk7CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCS8qIHRyaS1zdGF0ZSB0aGUgY3gyMjcwMiBwaW5zICovCisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwMDQpOworCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCA1YmNiYjRjLi43MzNlZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTEyMzcsNyArMTIzNyw2IEBACiAJCX0sCiAJfSwKIAlbQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIXSA9IHsKLQkJLyogdmlkZW8gaW5wdXRzIGFuZCByYWRpbyBzdGlsbCBpbiB0ZXN0aW5nICovCiAJCS5uYW1lICAgICAgICAgICA9ICJXaW5GYXN0IERUVjIwMDAgSCIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCkBAIC0xMjUxLDcgKzEyNTAsMzUgQEAKIAkJCS5ncGlvMSAgPSAweDAwMDA4MjAzLAogCQkJLmdwaW8yICA9IDB4MDAwMTczMDQsCiAJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDAxZDcwMSwKKwkJCS5ncGlvMSAgPSAweDAwMDBiMjA3LAorCQkJLmdwaW8yICA9IDB4MDAwMWQ3MDEsCisJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUyLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHgwMDAxZDUwMywKKwkJCS5ncGlvMSAgPSAweDAwMDBiMjA3LAorCQkJLmdwaW8yICA9IDB4MDAwMWQ1MDMsCisJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMywKKwkJCS5ncGlvMCAgPSAweDAwMDFkNzAxLAorCQkJLmdwaW8xICA9IDB4MDAwMGIyMDcsCisJCQkuZ3BpbzIgID0gMHgwMDAxZDcwMSwKKwkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAogCQl9fSwKKwkJLnJhZGlvID0geworCQkJIC50eXBlICA9IENYODhfUkFESU8sCisJCQkgLmdwaW8wID0gMHgwMDAxNTcwMiwKKwkJCSAuZ3BpbzEgPSAweDAwMDBmMjA3LAorCQkJIC5ncGlvMiA9IDB4MDAwMTU3MDIsCisJCQkgLmdwaW8zID0gMHgwMjAwMDAwMCwKKwkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0dFTklBVEVDSF9EVkJTXSA9IHsKQEAgLTE4NDcsNiArMTg3NCwxOCBAQAogCQl9IH0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9UQlNfODkxMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUQlMgODkxMCBEVkItUyIsCisJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAorCQkJLnZtdXggICA9IDAsCisJCX0gfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwl9LAogCVtDWDg4X0JPQVJEX1RCU184OTIwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRCUyA4OTIwIERWQi1TL1MyIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMTg1OSw2ICsxODk4LDE4IEBACiAJCX0gfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAorCVtDWDg4X0JPQVJEX1BST0ZfNjIwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQcm9mIDYyMDAgRFZCLVMiLAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKIAlbQ1g4OF9CT0FSRF9QUk9GXzczMDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUFJPRiA3MzAwIERWQi1TL1MyIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCkBAIC0xODcxLDYgKzE5MjIsMTggQEAKIAkJfSB9LAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCisJW0NYODhfQk9BUkRfU0FUVFJBREVfU1Q0MjAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlNBVFRSQURFIFNUNDIwMCBEVkItUy9TMiIsCisJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAorCQkJLnZtdXggICA9IDAsCisJCX0gfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xODk3LDcgKzE5NjAsMTEgQEAKIAkJLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfQVRJLAogCQkuc3ViZGV2aWNlID0gMHgwMGY4LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVElfV09OREVSX1BSTywKLQl9LHsKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0FUSSwKKwkJLnN1YmRldmljZSA9IDB4MDBmOSwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVRJX1dPTkRFUl9QUk8sCisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxMDdkLAogCQkuc3ViZGV2aWNlID0gMHg2NjExLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVCwKQEAgLTIyNTcsMTMgKzIzMjQsMjUgQEAKIAkJLnN1YmRldmljZSA9IDB4MjAxMSwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0ksCiAJfSwgeworCQkuc3VidmVuZG9yID0gMHg4OTEwLAorCQkuc3ViZGV2aWNlID0gMHg4ODg4LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9UQlNfODkxMCwKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDg5MjAsCiAJCS5zdWJkZXZpY2UgPSAweDg4ODgsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RCU184OTIwLAogCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4YjAyMiwKKwkJLnN1YmRldmljZSA9IDB4MzAyMiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfUFJPRl82MjAwLAorCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4QjAzMywKIAkJLnN1YmRldmljZSA9IDB4MzAzMywKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfUFJPRl83MzAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4YjIwMCwKKwkJLnN1YmRldmljZSA9IDB4NDIwMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfU0FUVFJBREVfU1Q0MjAwLAogCX0sCiB9OwogCkBAIC0yODc0LDggKzI5NTMsMTEgQEAKIAljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CiAJY2FzZSAgQ1g4OF9CT0FSRF9URVZJSV9TNDYwOgogCWNhc2UgIENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0k6CisJY2FzZSAgQ1g4OF9CT0FSRF9UQlNfODkxMDoKIAljYXNlICBDWDg4X0JPQVJEX1RCU184OTIwOgorCWNhc2UgIENYODhfQk9BUkRfUFJPRl82MjAwOgogCWNhc2UgIENYODhfQk9BUkRfUFJPRl83MzAwOgorCWNhc2UgIENYODhfQk9BUkRfU0FUVFJBREVfU1Q0MjAwOgogCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDYwNzA1YjA4Li5iMDQ1ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC04NDQsNiArODQ0LDkgQEAKIAl9IGVsc2UgaWYgKFY0TDJfU1REX1NFQ0FNX0wgJiBub3JtKSB7CiAJCWNvcmUtPnR2YXVkaW8gPSBXV19MOwogCisJfSBlbHNlIGlmICgoVjRMMl9TVERfU0VDQU1fQiB8IFY0TDJfU1REX1NFQ0FNX0cgfCBWNEwyX1NURF9TRUNBTV9IKSAmIG5vcm0pIHsKKwkJY29yZS0+dHZhdWRpbyA9IFdXX0JHOworCiAJfSBlbHNlIGlmIChWNEwyX1NURF9TRUNBTV9ESyAmIG5vcm0pIHsKIAkJY29yZS0+dHZhdWRpbyA9IFdXX0RLOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IDMwOWNhNWUuLmRhNGRkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC00MDYsNyArNDA2LDcgQEAKIAkJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwNjA2MCk7CiAJCQlicmVhazsKIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCSAgIAlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CisJCQlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CiAJCQlicmVhazsKIAl9CiAKQEAgLTYwNiw3ICs2MDYsNyBAQAogCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KIAlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CiAJaWYgKCFmZTApCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAogCS8qIG11bHRpLWZyb250ZW5kIGdhdGUgY29udHJvbCBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdHMgdG8gZmUwICovCiAJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDA7CkBAIC02NTMsMzggKzY1MywzNSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwkJLyogTUZFIGZyb250ZW5kIDEgKi8KKwkJbWZlX3NoYXJlZCA9IDE7CisJCWRldi0+ZnJvbnRlbmRzLmdhdGUgPSAyOwogCQkvKiBEVkItUyBpbml0ICovCiAJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKLQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmFzX2NvbmZpZywKLQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQkJCSZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKLQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCkpIHsKLQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1TIExOQiBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVMgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsCisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkJMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9Ci0JCS8qIERWQi1UIGluaXQgKi8KKwkJLyogTUZFIGZyb250ZW5kIDIgKi8KIAkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOwotCQlpZiAoZmUxKSB7Ci0JCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKLQkJCW1mZV9zaGFyZWQgPSAxOwotCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAotCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKLQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7Ci0JCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOwotCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAotCQkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4NjEsCi0JCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKSB7Ci0JCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgbWlzYyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGNhbid0IGZpbmQgZnJvbnRlbmQgMi5cbiIsIF9fZnVuY19fKTsKKwkJaWYgKCFmZTEpCisJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJLyogRFZCLVQgaW5pdCAqLworCQlmZTEtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kLT5pZCA9IDE7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwKKwkJCQkJZmUxLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLAorCQkJCQkweDYxLCBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVM6CkBAIC05OTgsNTAgKzk5NSw1MSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJLyogTUZFIGZyb250ZW5kIDEgKi8KKwkJbWZlX3NoYXJlZCA9IDE7CisJCWRldi0+ZnJvbnRlbmRzLmdhdGUgPSAyOwogCQkvKiBEVkItUy9TMiBJbml0ICovCiAJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKLQkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCi0JCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZighZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCi0JCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkgewotCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVMgTE5CIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQkJfQotCQl9IGVsc2UgewotCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItUyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCWlmICghZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLAorCQkJCQkweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCkpCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KLQkJLyogRFZCLVQgSW5pdCAqLworCQkvKiBNRkUgZnJvbnRlbmQgMiAqLwogCQlmZTEgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMik7Ci0JCWlmIChmZTEpIHsKLQkJCWRldi0+ZnJvbnRlbmRzLmdhdGUgPSAyOwotCQkJbWZlX3NoYXJlZCA9IDE7Ci0JCQlmZTEtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCi0JCQkJJmhhdXBwYXVnZV9odnJfY29uZmlnLAotCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKLQkJCWlmIChmZTEtPmR2Yi5mcm9udGVuZCkgewotCQkJCWZlMS0+ZHZiLmZyb250ZW5kLT5pZCA9IDE7Ci0JCQkJaWYoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUxLT5kdmIuZnJvbnRlbmQsCi0JCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDYxLAotCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKSB7Ci0JCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVQgbWlzYyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVQgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIEluaXQ6IGNhbid0IGZpbmQgZnJvbnRlbmQgMi5cbiIsIF9fZnVuY19fKTsKKwkJaWYgKCFmZTEpCisJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJLyogRFZCLVQgSW5pdCAqLworCQlmZTEtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kLT5pZCA9IDE7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwKKwkJCQkJZmUxLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLAorCQkJCQkweDYxLCBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CiAJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKLQkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCi0JCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKLQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKLQkJCQkweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCk7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsCisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkJMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9QUk9GXzYyMDA6CisJY2FzZSBDWDg4X0JPQVJEX1RCU184OTEwOgogCWNhc2UgQ1g4OF9CT0FSRF9URVZJSV9TNDIwOgogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsCiAJCQkJCQkmdGV2aWlfdHVuZXJfc2hhcnBfY29uZmlnLApAQCAtMTA3MCwyMSArMTA2OCwxOCBAQAogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCiAJCQkJCSAgICAgICAmdGV2aWlfczQ2MF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQogCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX09NSUNPTV9TUzRfUENJOgogCWNhc2UgQ1g4OF9CT0FSRF9UQlNfODkyMDoKIAljYXNlIENYODhfQk9BUkRfUFJPRl83MzAwOgorCWNhc2UgQ1g4OF9CT0FSRF9TQVRUUkFERV9TVDQyMDA6CiAJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKIAkJCQkJICAgICAgICZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQogCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCkBAIC0xMDkyLDExICsxMDg3LDExIEBACiAJCWJyZWFrOwogCX0KIAotICAgICAgICBpZiAoIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB8fCAoZmUxICYmIE5VTEwgPT0gZmUxLT5kdmIuZnJvbnRlbmQpICkgeworCWlmICggKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHx8IChmZTEgJiYgTlVMTCA9PSBmZTEtPmR2Yi5mcm9udGVuZCkgKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzLzI6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJfQogCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwogCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CkBAIC0xMTMzLDQwICsxMTI4LDQ0IEBACiAJCSAqIG9uIHRoZSBidXMuIFRha2UgdGhlIGJ1cyBmcm9tIHRoZSBjeDIzNDE2IGFuZCBlbmFibGUgdGhlCiAJCSAqIGN4MjI3MDIgZGVtb2QKIAkJICovCi0JCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDA4MCk7IC8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0IGFuZCBlbmFibGUgKi8KKwkJLyogVG9nZ2xlIHJlc2V0IG9uIGN4MjI3MDIgbGVhdmluZyBpMmMgYWN0aXZlICovCisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCXVkZWxheSg1MCk7CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCS8qIGVuYWJsZSB0aGUgY3gyMjcwMiBwaW5zICovCiAJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CiAJCXVkZWxheSgxMDAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgotCQlpZihjb3JlLT5kdmJkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPT0gMSkgewotCQkJLyogRFZCLVMvUzIgRW5hYmxlZCAqLwotCi0JCQkvKiBUb2dnbGUgcmVzZXQgb24gY3gyMjcwMiBsZWF2aW5nIGkyYyBhY3RpdmUgKi8KLQkJCWN4X3dyaXRlKE1PX0dQMF9JTywgKGNvcmUtPmJvYXJkLmlucHV0WzBdLmdwaW8wICYgMHgwMDAwZmYwMCkgfCAweDAwMDAwMDgwKTsKLQkJCXVkZWxheSgxMDAwKTsKLQkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7Ci0JCQl1ZGVsYXkoNTApOwotCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7IC8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0ICovCi0JCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsgLyogdHJpLXN0YXRlIHRoZSBjeDIyNzAyIHBpbnMgKi8KLQkJCXVkZWxheSgxMDAwKTsKLQotCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7IC8qIFRha2UgdGhlIGN4MjQxMTYvY3gyNDEyMyBvdXQgb2YgcmVzZXQgKi8KKwkJLyogVG9nZ2xlIHJlc2V0IG9uIGN4MjI3MDIgbGVhdmluZyBpMmMgYWN0aXZlICovCisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCXVkZWxheSg1MCk7CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoMTAwMCk7CisJCXN3aXRjaCAoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkKSB7CisJCWNhc2UgMTogLyogRFZCLVMvUzIgRW5hYmxlZCAqLworCQkJLyogdHJpLXN0YXRlIHRoZSBjeDIyNzAyIHBpbnMgKi8KKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwMDQpOworCQkJLyogVGFrZSB0aGUgY3gyNDExNi9jeDI0MTIzIG91dCBvZiByZXNldCAqLworCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7CiAJCQljb3JlLT5kdmJkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDI7IC8qIFBhcmFsbGVsIElPICovCi0JCX0gZWxzZQotCQlpZiAoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID09IDIpIHsKLQkJCS8qIERWQi1UIEVuYWJsZWQgKi8KLQorCQkJYnJlYWs7CisJCWNhc2UgMjogLyogRFZCLVQgRW5hYmxlZCAqLwogCQkJLyogUHV0IHRoZSBjeDI0MTE2L2N4MjQxMjMgaW50byByZXNldCAqLwogCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMCk7Ci0KLQkJCS8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0IGFuZCBlbmFibGUgaXQgKi8KLQkJCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDA4MCk7CisJCQkvKiBlbmFibGUgdGhlIGN4MjI3MDIgcGlucyAqLwogCQkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsKIAkJCWNvcmUtPmR2YmRldi0+dHNfZ2VuX2NudHJsID0gMHgwYzsgLyogU2VyaWFsIElPICovCi0JCQl1ZGVsYXkoMTAwMCk7CisJCQlicmVhazsKIAkJfQorCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTExOTksOCArMTE5OCw3IEBACiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZHJ2LT5jb3JlLT5kdmJkZXY7Ci0JaW50IGVyciwgaTsKLQlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKwlpbnQgZXJyOwogCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJZHByaW50ayggMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCkBAIC0xMjE2LDMxICsxMjE0LDQ3IEBACiAJLyogSWYgdnAzMDU0IGlzbid0IGVuYWJsZWQsIGEgc3R1YiB3aWxsIGp1c3QgcmV0dXJuIDAgKi8KIAllcnIgPSB2cDMwNTRfaTJjX3Byb2JlKGRldik7CiAJaWYgKDAgIT0gZXJyKQotCQlnb3RvIGZhaWxfY29yZTsKKwkJZ290byBmYWlsX3Byb2JlOwogCiAJLyogZHZiIHN0dWZmICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogY3gyMzg4eCBiYXNlZCBEVkIvQVRTQyBjYXJkXG4iLCBjb3JlLT5uYW1lKTsKIAlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgewotCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzLCBpKTsKLQkJaWYgKCFmZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBnZXQgZnJvbnRlbmQoJWQpXG4iLCBfX2Z1bmNfXywgaSk7Ci0JCQljb250aW51ZTsKKwllcnIgPSAtRU5PREVWOworCWlmIChjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKSB7CisJCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgeworCQkJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZjb3JlLT5kdmJkZXYtPmZyb250ZW5kcywgaSk7CisJCQlpZiAoZmUgPT0gTlVMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gZ2V0IGZyb250ZW5kKCVkKVxuIiwKKwkJCQkJX19mdW5jX18sIGkpOworCQkJCWdvdG8gZmFpbF9wcm9iZTsKKwkJCX0KKwkJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZlLT5kdmIuZHZicSwgJmR2Yl9xb3BzLAorCQkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCisJCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgVjRMMl9GSUVMRF9UT1AsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgY3g4OF9idWZmZXIpLAorCQkJCSAgICBkZXYpOworCQkJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCisJCQlmZS0+ZHZiLm5hbWUgPSBkZXYtPmNvcmUtPm5hbWU7CiAJCX0KLQkJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCi0JCQkgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAotCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICBWNEwyX0ZJRUxEX1RPUCwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGN4ODhfYnVmZmVyKSwKLQkJCSAgICBkZXYpOwotCQkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KLQkJZmUtPmR2Yi5uYW1lID0gZGV2LT5jb3JlLT5uYW1lOworCX0gZWxzZSB7CisJCS8qIG5vIGZyb250ZW5kcyBhbGxvY2F0ZWQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlcy8yIC5udW1fZnJvbnRlbmRzIHNob3VsZCBiZSBub24temVyb1xuIiwKKwkJCWNvcmUtPm5hbWUpOworCQlnb3RvIGZhaWxfY29yZTsKIAl9CiAJZXJyID0gZHZiX3JlZ2lzdGVyKGRldik7Ci0JaWYgKGVyciAhPSAwKQorCWlmIChlcnIpCisJCS8qIGZyb250ZW5kcy9hZGFwdGVyIGRlLWFsbG9jYXRlZCBpbiBkdmJfcmVnaXN0ZXIgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBkdmJfcmVnaXN0ZXIgZmFpbGVkIChlcnIgPSAlZClcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lLCBlcnIpOworCXJldHVybiBlcnI7CitmYWlsX3Byb2JlOgorCXZpZGVvYnVmX2R2Yl9kZWFsbG9jX2Zyb250ZW5kcygmY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMpOwogZmFpbF9jb3JlOgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggM2ViZGNkMS4uYTA0ZmVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMyw3ICszLDcgQEAKICAqICBTdXBwb3J0IGZvciB0aGUgbXBlZyB0cmFuc3BvcnQgc3RyZWFtIHRyYW5zZmVycwogICogIFBDSSBmdW5jdGlvbiAjMiBvZiB0aGUgY3gyMzg4eC4KICAqCi0gKiAgICAoYykgMjAwNCBKZWxsZSBGb2tzIDxqZWxsZUBmb2tzLjhtLmNvbT4KKyAqICAgIChjKSAyMDA0IEplbGxlIEZva3MgPGplbGxlQGZva3MudXM+CiAgKiAgICAoYykgMjAwNCBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PgogICogICAgKGMpIDIwMDQgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogICoKQEAgLTM0LDcgKzM0LDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIm1wZWcgZHJpdmVyIGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIik7Ci1NT0RVTEVfQVVUSE9SKCJKZWxsZSBGb2tzIDxqZWxsZUBmb2tzLjhtLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkplbGxlIEZva3MgPGplbGxlQGZva3MudXM+Iik7CiBNT0RVTEVfQVVUSE9SKCJDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggZjQyNDA5Ni4uMjA2NDliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC01MywxMiArNTMsMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkZWZpbmVzIGFuZCBlbnVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0vKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjogUEFML0gsIE5UU0MvS3IsIFNFQ0FNIEIvRy9IL0xDICovCi0jZGVmaW5lIENYODhfTk9STVMgKFwKLQlWNEwyX1NURF9OVFNDX018ICBWNEwyX1NURF9OVFNDX01fSlB8ICBWNEwyX1NURF9OVFNDXzQ0MyB8IFwKLQlWNEwyX1NURF9QQUxfQkd8ICBWNEwyX1NURF9QQUxfREsgICB8ICBWNEwyX1NURF9QQUxfSSAgICB8IFwKLQlWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfTiAgICB8ICBWNEwyX1NURF9QQUxfTmMgICB8IFwKLQlWNEwyX1NURF9QQUxfNjB8ICBWNEwyX1NURF9TRUNBTV9MICB8ICBWNEwyX1NURF9TRUNBTV9ESyApCisvKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjogUEFML0gsIE5UU0MvS3IsIFNFQ0FNL0xDICovCisjZGVmaW5lIENYODhfTk9STVMgKFY0TDJfU1REX0FMTCAJCVwKKwkJICAgICYgflY0TDJfU1REX1BBTF9ICQlcCisJCSAgICAmIH5WNEwyX1NURF9OVFNDX01fS1IJXAorCQkgICAgJiB+VjRMMl9TVERfU0VDQU1fTEMpCiAKICNkZWZpbmUgRk9STUFUX0ZMQUdTX1BBQ0tFRCAgICAgICAweDAxCiAjZGVmaW5lIEZPUk1BVF9GTEFHU19QTEFOQVIgICAgICAgMHgwMgpAQCAtMjI5LDYgKzIyOCw5IEBACiAjZGVmaW5lIENYODhfQk9BUkRfVEVWSUlfUzQyMCAgICAgICAgICAgICAgNzMKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWX0dMT0JBTF9YVFJFTUUgNzQKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9GXzczMDAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBDWDg4X0JPQVJEX1NBVFRSQURFX1NUNDIwMCAgICAgICAgIDc2CisjZGVmaW5lIENYODhfQk9BUkRfVEJTXzg5MTAgICAgICAgICAgICAgICAgNzcKKyNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9GXzYyMDAgICAgICAgICAgICAgICA3OAogCiBlbnVtIGN4ODhfaXR5cGUgewogCUNYODhfVk1VWF9DT01QT1NJVEUxID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggN2E4ZDQ5ZS4uMTVjMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTQyNCwxMSArNDI0LDEyIEBACiAJc3RydWN0IHNuZF9wY20gICAgICAqcGNtOwogCXN0cnVjdCBzbmRfY2FyZCAgICAgKmNhcmQ7CiAJc3RhdGljIGludCAgICAgICAgICBkZXZucjsKLQlpbnQgICAgICAgICAgICAgICAgIHJldCwgZXJyOworCWludCAgICAgICAgICAgICAgICAgZXJyOwogCi0JaWYgKGRldi0+aGFzX2F1ZGlvX2NsYXNzKSB7CisJaWYgKGRldi0+aGFzX2Fsc2FfYXVkaW8gIT0gMSkgewogCQkvKiBUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBleHRlbnNpb24gKGluIHRoaXMgY2FzZQotCQkgICB0aGUgZGV2aWNlIGlzIGV4cGVjdGluZyB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUgKi8KKwkJICAgdGhlIGRldmljZSBpcyBleHBlY3RpbmcgdGhlIHNuZC11c2ItYXVkaW8gbW9kdWxlIG9yCisJCSAgIGRvZXNuJ3QgaGF2ZSBhbmFsb2cgYXVkaW8gc3VwcG9ydCBhdCBhbGwpICovCiAJCXJldHVybiAwOwogCX0KIApAQCAtNDQ5LDcgKzQ1MCwxMiBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZhZGV2LT5zbG9jayk7Ci0JcmV0ID0gc25kX3BjbV9uZXcoY2FyZCwgIkVtMjh4eCBBdWRpbyIsIDAsIDAsIDEsICZwY20pOworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKwogCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9lbTI4eHhfcGNtX2NhcHR1cmUpOwogCXBjbS0+aW5mb19mbGFncyA9IDA7CiAJcGNtLT5wcml2YXRlX2RhdGEgPSBkZXY7CkBAIC00NjEsNyArNDY3LDcgQEAKIAllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJYWRldi0+c25kY2FyZCA9IGNhcmQ7CiAJYWRldi0+dWRldiA9IGRldi0+dWRldjsKQEAgLTQ3NSw5ICs0ODEsMTAgQEAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaWYgKGRldi0+aGFzX2F1ZGlvX2NsYXNzKSB7CisJaWYgKGRldi0+aGFzX2Fsc2FfYXVkaW8gIT0gMSkgewogCQkvKiBUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBleHRlbnNpb24gKGluIHRoaXMgY2FzZQotCQkgICB0aGUgZGV2aWNlIGlzIGV4cGVjdGluZyB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUgKi8KKwkJICAgdGhlIGRldmljZSBpcyBleHBlY3RpbmcgdGhlIHNuZC11c2ItYXVkaW8gbW9kdWxlIG9yCisJCSAgIGRvZXNuJ3QgaGF2ZSBhbmFsb2cgYXVkaW8gc3VwcG9ydCBhdCBhbGwpICovCiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCBkNjVkMDU3Li5lNzc2Njk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMzcsNiArMzcsOCBAQAogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAKKyNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAiZW0yOHh4IgorCiBzdGF0aWMgaW50IHR1bmVyID0gLTE7CiBtb2R1bGVfcGFyYW0odHVuZXIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCAidHVuZXIgdHlwZSIpOwpAQCAtNDUsMTIyICs0NywxNzcgQEAKIG1vZHVsZV9wYXJhbShkaXNhYmxlX2lyLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2lyLCAiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbXSAgICAgPSB7WzAgLi4uIChFTTI4WFhfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZCwgICAgICJjYXJkIHR5cGUiKTsKKworLyogQml0bWFzayBtYXJraW5nIGFsbG9jYXRlZCBkZXZpY2VzIGZyb20gMCB0byBFTTI4WFhfTUFYQk9BUkRTICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbTI4eHhfZGV2dXNlZDsKKwogc3RydWN0IGVtMjh4eF9oYXNoX3RhYmxlIHsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CiAJdW5zaWduZWQgaW50ICBtb2RlbDsKIAl1bnNpZ25lZCBpbnQgIHR1bmVyOwogfTsKIAorLyoKKyAqICBSZXNldCBzZXF1ZW5jZXMgZm9yIGFuYWxvZy9kaWdpdGFsIG1vZGVzCisgKi8KKworLyogUmVzZXQgZm9yIHRoZSBtb3N0IFthbmFsb2ddIGJvYXJkcyAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X2FuYWxvZ1tdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmQsICAgfkVNX0dQSU9fNCwJMTB9LAorCXsJLTEsCQktMSwJLTEsCQktMX0sCit9OworCisvKiBSZXNldCBmb3IgdGhlIG1vc3QgW2RpZ2l0YWxdIGJvYXJkcyAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X2RpZ2l0YWxbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweDZlLAl+RU1fR1BJT180LAkxMH0sCisJewktMSwJCS0xLAktMSwJCS0xfSwKK307CisKKy8qIEJvYXJkIEhhdXBwYXVnZSBXaW5UViBIVlIgOTAwIGFuYWxvZyAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2dbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweDJkLAl+RU1fR1BJT180LAkxMH0sCisJezB4MDUsCQkJMHhmZiwJMHgxMCwJCTEwfSwKKwl7ICAtMSwJCQktMSwJLTEsCQktMX0sCit9OworCisvKiBCb2FyZCBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCBkaWdpdGFsICovCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWxbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweDJlLAl+RU1fR1BJT180LAkxMH0sCisJe0VNMjg4MF9SMDRfR1BPLAkweDA0LAkweDBmLAkJMTB9LAorCXtFTTI4ODBfUjA0X0dQTywJMHgwYywJMHgwZiwJCTEwfSwKKwl7IC0xLAkJCS0xLAktMSwJCS0xfSwKK307CisKKy8qIEJvYXJkcyAtIEVNMjg4MCBNU0kgRElHSVZPWCBBRCBhbmQgRU0yODgwX0JPQVJEX01TSV9ESUdJVk9YX0FEX0lJICovCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGVtMjg4MF9tc2lfZGlnaXZveF9hZF9hbmFsb2dbXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLCAgICAgICAweDY5LCAgIH5FTV9HUElPXzQsCSAxMH0sCisJewktMSwJCS0xLAktMSwJCSAtMX0sCit9OworCisvKiBCb2FyZHMgLSBFTTI4ODAgTVNJIERJR0lWT1ggQUQgYW5kIEVNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRF9JSSAqLworCisvKiBCb2FyZCAgLSBFTTI4NzAgS3dvcmxkIDM1NXUKKyAgIEFuYWxvZyAtIE5vIGlucHV0IGFuYWxvZyAqLworCisvKiBDYWxsYmFjayBmb3IgdGhlIG1vc3QgYm9hcmRzICovCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGRlZmF1bHRfdHVuZXJfZ3Bpb1tdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCUVNX0dQSU9fNCwJRU1fR1BJT180LAkxMH0sCisJe0VNMjhYWF9SMDhfR1BJTywJMCwJCUVNX0dQSU9fNCwJMTB9LAorCXtFTTI4WFhfUjA4X0dQSU8sCUVNX0dQSU9fNCwJRU1fR1BJT180LAkxMH0sCisJeyAgLTEsCQkJLTEsCQktMSwJCS0xfSwKK307CisKKy8qCisgKiAgQm9hcmQgZGVmaW5pdGlvbnMKKyAqLwogc3RydWN0IGVtMjh4eF9ib2FyZCBlbTI4eHhfYm9hcmRzW10gPSB7CiAJW0VNMjc1MF9CT0FSRF9VTktOT1dOXSA9IHsKIAkJLm5hbWUgICAgICAgICAgPSAiVW5rbm93biBFTTI3NTAvRU0yNzUxIHdlYmNhbSBncmFiYmVyIiwKLQkJLnZjaGFubmVscyAgICAgPSAxLAorCQkueGNsayAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV80OE1IWiwKKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCS8qIFRoaXMgaXMgYSB3ZWJjYW0gKi8KIAkJLmlucHV0ICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSAwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKIAlbRU0yODAwX0JPQVJEX1VOS05PV05dID0gewogCQkubmFtZSAgICAgICAgID0gIlVua25vd24gRU0yODAwIHZpZGVvIGdyYWJiZXIiLAogCQkuaXNfZW0yODAwICAgID0gMSwKLQkJLnZjaGFubmVscyAgICA9IDIsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgICA9IHsgeworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfVU5LTk9XTl0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiVW5rbm93biBFTTI3NTAvMjh4eCB2aWRlbyBncmFiYmVyIiwKLQkJLmlzX2VtMjgwMCAgICA9IDAsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCisJCS5uYW1lICAgICAgICAgID0gIlVua25vd24gRU0yNzUwLzI4eHggdmlkZW8gZ3JhYmJlciIsCisJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAogCX0sCiAJW0VNMjc1MF9CT0FSRF9ETENXXzEzMF0gPSB7CiAJCS8qIEJlaWppbmcgSHVhcWkgSW5mb3JtYXRpb24gRGlnaXRhbCBUZWNobm9sb2d5IENvLiwgTHRkICovCiAJCS5uYW1lICAgICAgICAgID0gIkh1YXFpIERMQ1ctMTMwIiwKIAkJLnZhbGlkICAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICAgPSAxLAorCQkueGNsayAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV80OE1IWiwKKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCS8qIFRoaXMgaXMgYSB3ZWJjYW0gKi8KIAkJLmlucHV0ICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSAwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX0tXT1JMRF9QVlJUVjI4MDBSRl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiS3dvcmxkIFBWUiBUViAyODAwIFJGIiwKLQkJLmlzX2VtMjgwMCAgICA9IDAsCi0JCS52Y2hhbm5lbHMgICAgPSAyLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCi0JCS5pbnB1dCAgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IDI1MCBVU0IiLAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzJdID0gewogCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgVVNCIDIiLAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAyIiwKLQkJLnZjaGFubmVscyAgICA9IDMsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAogCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFfAogCQkJCVREQTk4ODdfUE9SVDJfQUNUSVZFLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5oYXNfbXNwMzR4eCAgPSAxLAotCQkvKkZJWE1FOiBTLVZpZGVvIG5vdCB0ZXN0ZWQgKi8KLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCiAJCQkuYW11eCAgICAgPSBNU1BfSU5QVVRfREVGQVVMVCwKQEAgLTE3NCwzMjcgKzIzMSwzMDUgQEAKIAlbRU0yODIwX0JPQVJEX0RMSU5LX1VTQl9UVl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiRC1MaW5rIERVQi1UMjEwIFRWIFR1bmVyIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKLQkJLmlzX2VtMjgwMCAgICA9IDAsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX0hFUkNVTEVTX1NNQVJUX1RWX1VTQjJdID0gewogCQkubmFtZSAgICAgICAgID0gIkhlcmN1bGVzIFNtYXJ0IFRWIFVTQiAyLjAiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yX0ZNMTIxNk1FXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFVTQiAyIChQaGlsaXBzIEZNMTIxNk1FKSIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICA9IDMsCi0JCS5pc19lbTI4MDAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9HQURNRUlfVVRWMzEwXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJHYWRtZWkgVVRWMzEwIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1RORl81MzM1TUYsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSV9ERUxVWEVdID0gewogCQkubmFtZSAgICAgICAgID0gIkxlYWR0ZWsgV2luZmFzdCBVU0IgSUkgRGVsdXhlIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTQsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCi0JCQkudm11eCAgICAgPSAyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAotCQkJLnZtdXggICAgID0gMCwKLQkJCS5hbXV4ICAgICA9IDEsCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKLQkJCS52bXV4ICAgICA9IDksCi0JCQkuYW11eCAgICAgPSAxLAotCQl9IH0sCi0JfSwKLQlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ18xMDBdID0gewotCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgMTAwIiwKLQkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQl0gPSB7Ci0JCS5uYW1lICAgICAgICAgID0gIlZpZGVvbG9neSAyMEsxNFhVU0IgVVNCMi4wIiwKKwkJLm5hbWUgICAgICAgICA9ICJWaWRlb2xvZ3kgMjBLMTRYVVNCIFVTQjIuMCIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICAgPSAxLAotCQkuaW5wdXQgICAgICAgICA9IHsgeworCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAkvKiBUaGlzIGlzIGEgd2ViY2FtICovCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSAwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKIAlbRU0yODIxX0JPQVJEX1BST0xJTktfUExBWVRWX1VTQjJdID0gewogCQkubmFtZSAgICAgICAgID0gIlNJSUcgQVZUdW5lci1QVlIvUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICA9IDMsCi0JCS5pc19lbTI4MDAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAkvKiB1bmtub3duPyAqLwogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAkvKiB1bmtub3duPyAqLwotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAogCX0sCiAJW0VNMjgyMV9CT0FSRF9TVVBFUkNPTVBfVVNCXzJdID0gewogCQkubmFtZSAgICAgICAgID0gIlN1cGVyY29tcCBVU0IgMi4wIFRWIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKLQkJLmlzX2VtMjgwMCAgICA9IDAsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAogCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFIHwKIAkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIxX0JPQVJEX1VTQkdFQVJfVkQyMDRdID0gewotCQkubmFtZSAgICAgICAgICA9ICJVc2JnZWFyIFZEMjA0djkiLAorCQkubmFtZSAgICAgICAgID0gIlVzYmdlYXIgVkQyMDR2OSIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICAgPSAyLAotCQkuZGVjb2RlciAgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwJLyogQ2FwdHVyZSBvbmx5IGRldmljZSAqLworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgPSAxLAorCQkJLmFtdXggID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggID0gMSwKKwkJCS5hbXV4ICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4NjBfQk9BUkRfTkVUR01CSF9DQU1dID0gewogCQkvKiBCZWlqaW5nIEh1YXFpIEluZm9ybWF0aW9uIERpZ2l0YWwgVGVjaG5vbG9neSBDby4sIEx0ZCAqLwotCQkubmFtZSAgICAgICAgICA9ICJOZXRHTUJIIENhbSIsCi0JCS52YWxpZCAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgICA9IDEsCi0JCS5pbnB1dCAgICAgICAgID0geyB7CisJCS5uYW1lICAgICAgICAgPSAiTmV0R01CSCBDYW0iLAorCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCS8qIFRoaXMgaXMgYSB3ZWJjYW0gKi8KKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IDAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCiAJCX0gfSwKIAl9LAogCVtFTTI4NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVJdID0gewotCQkubmFtZSAgICAgICAgICA9ICJUeXBob29uIERWRCBNYWtlciIsCi0JCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICAgPSAyLAotCQkuZGVjb2RlciAgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLm5hbWUgICAgICAgICA9ICJUeXBob29uIERWRCBNYWtlciIsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwJLyogQ2FwdHVyZSBvbmx5IGRldmljZSAqLworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggID0gMSwKKwkJCS5hbXV4ICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICA9IDEsCisJCQkuYW11eCAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODYwX0JPQVJEX0dBRE1FSV9VVFYzMzBdID0gewogCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBVVFYzMzAiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfVE5GXzUzMzVNRiwKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODYwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU10gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBBIEh5YnJpZCBYUyIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICA9IDMsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODYxX0JPQVJEX0tXT1JMRF9QVlJUVl8zMDBVXSA9IHsKIAkJLm5hbWUJICAgICAgPSAiS1dvcmxkIFBWUlRWIDMwMFUiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4NjFfQk9BUkRfWUFLVU1PX01PVklFX01JWEVSXSA9IHsKIAkJLm5hbWUgICAgICAgICAgPSAiWWFrdW1vIE1vdmllTWl4ZXIiLAotCQkudmFsaWQgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnZjaGFubmVscyAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAkvKiBDYXB0dXJlIG9ubHkgZGV2aWNlICovCiAJCS5kZWNvZGVyICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5pbnB1dCAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4NjFfQk9BUkRfUExFWFRPUl9QWF9UVjEwMFVdID0gewogCQkubmFtZSAgICAgICAgID0gIlBsZXh0b3IgQ29udmVydFggUFgtVFYxMDBVIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1RORl81MzM1TUYsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKKworCS8qIFRob3NlIGJvYXJkcyB3aXRoIGVtMjg3MCBhcmUgRFZCIE9ubHkqLworCiAJW0VNMjg3MF9CT0FSRF9URVJSQVRFQ19YU10gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBUIFhTIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCX0sCiAJW0VNMjg3MF9CT0FSRF9URVJSQVRFQ19YU19NVDIwNjBdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgVCBYUyAoTVQyMDYwKSIsCkBAIC01MDUsNiArNTQwLDcgQEAKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgMzUwIFUgRFZCLVQiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJfSwKIAlbRU0yODcwX0JPQVJEX0tXT1JMRF8zNTVVXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgMzU1IFUgRFZCLVQiLApAQCAtNTE0LDE2NCArNTUwLDIxNiBAQAogCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgRFZCLVQiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIE1UMjA2MCAqLworCQkvKiBkamggLSBJIGhhdmUgc2VyaW91cyBkb3VidHMgdGhpcyBpcyByaWdodC4uLiAqLworCQkueGNsayAgICAgICAgID0gRU0yOFhYX1hDTEtfSVJfUkM1X01PREUgfAorCQkJCUVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xME1IWiwKIAl9LAogCVtFTTI4NzBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiQ29tcHJvLCBWaWRlb01hdGUgVTMiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIE1UMjA2MCAqLwogCX0sCisKIAlbRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YU19GUl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgSHlicmlkIFhTIFNlY2FtIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLmhhc19tc3AzNHh4ICA9IDEsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKIAkJfSB9LAogCX0sCiAJW0VNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIEhWUiA5MDAiLAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLm10c19maXJtd2FyZSA9IDEsCi0JCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwX1IyXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAoUjIpIiwKLQkJLnZjaGFubmVscyAgICA9IDMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJCS5tdHNfZmlybXdhcmUgPSAxLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCisJCX0gfSwKKwl9LAorCVtFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIEhWUiA4NTAiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLm10c19maXJtd2FyZSAgID0gMSwKKwkJLmhhc19kdmIgICAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICAgID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldywKKwkJLmRlY29kZXIgICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBIVlIgOTUwIiwKLQkJLnZjaGFubmVscyAgICAgID0gMywKLQkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLm10c19maXJtd2FyZSAgID0gMSwKLQkJLmhhc18xMm1oel9pMnMgID0gMSwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICAgID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldywKIAkJLmRlY29kZXIgICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgSEQgUHJvIFN0aWNrIiwKLQkJLnZjaGFubmVscyAgICAgID0gMywKLQkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJCS5tdHNfZmlybXdhcmUgICA9IDEsCi0JCS5oYXNfMTJtaHpfaTJzICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5kdmJfZ3BpbyAgICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCisJCS5pcl9jb2RlcyAgICAgICA9IGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQsCiAJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaW5wdXQgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSB9LAogCX0sCiAJW0VNMjg4MF9CT0FSRF9BTURfQVRJX1RWX1dPTkRFUl9IRF82MDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQU1EIEFUSSBUViBXb25kZXIgSEQgNjAwIiwKLQkJLnZjaGFubmVscyAgICAgID0gMywKLQkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLm10c19maXJtd2FyZSAgID0gMSwKLQkJLmhhc18xMm1oel9pMnMgID0gMSwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICAgID0gaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDAsCiAJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaW5wdXQgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSB9LAogCX0sCiAJW0VNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNdID0gewotCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIEh5YnJpZCBYUyIsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAotCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAotCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLmRlY29kZXIgICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS5kdmJfZ3BpbyAgICAgICA9IGRlZmF1bHRfYW5hbG9nLAogCQkuaW5wdXQgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKIAkJfSB9LAogCX0sCiAJLyogbWF5YmUgdGhlcmUncyBhIHJlYXNvbiBiZWhpbmQgaXQgd2h5IFRlcnJhdGVjIHNlbGxzIHRoZSBIeWJyaWQgWFMKQEAgLTY3OSwxNzIgKzc2NywxOTAgQEAKIAkgICBtYXliZSB3ZSdsbCBuZWVkIGl0IGxhdGVyb24gKi8KIAlbRU0yODgwX0JPQVJEX1RFUlJBVEVDX1BST0RJR1lfWFNdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIFByb2RpZ3kgWFMiLAotCQkudmNoYW5uZWxzICAgID0gMywKLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzJdID0gewogCQkubmFtZQkJICAgPSAiTVNJIFZPWCBVU0IgMi4wIiwKLQkJLnZjaGFubmVscwkgICA9IDMsCiAJCS50dW5lcl90eXBlCSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAogCQkudGRhOTg4N19jb25mCSAgID0gVERBOTg4N19QUkVTRU5UICAgICAgfAogCQkJCSAgICAgVERBOTg4N19QT1JUMV9BQ1RJVkUgfAogCQkJCSAgICAgVERBOTg4N19QT1JUMl9BQ1RJVkUsCiAJCS5tYXhfcmFuZ2VfNjQwXzQ4MCA9IDEsCi0KLQkJLmRlY29kZXIgICAgICAgICAgID0gRU0yOFhYX1NBQTcxMTQsCisJCS5kZWNvZGVyICAgICAgICAgICA9IEVNMjhYWF9TQUE3MTFYLAogCQkuaW5wdXQgICAgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFNCwKLQkJCS5hbXV4ICAgICAgPSAwLAorCQkJLmFtdXggICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgID0gMSwKKwkJCS5hbXV4ICAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICAgPSAxLAorCQkJLmFtdXggICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yMDBdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjAwIFVTQiIsCiAJCS5pc19lbTI4MDAgICAgPSAxLAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODAwX0JPQVJEX0dSQUJCRUVYX1VTQjI4MDBdID0gewogCQkubmFtZSAgICAgICAgID0gImVNUElBIFRlY2hub2xvZ3ksIEluYy4gR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIiLAogCQkuaXNfZW0yODAwICAgID0gMSwKLQkJLnZjaGFubmVscyAgICA9IDIsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwgLyogY2FwdHVyZSBvbmx5IGJvYXJkICovCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJMZWFkdGVrIFdpbmZhc3QgVVNCIElJIiwKIAkJLmlzX2VtMjgwMCAgICA9IDEsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfS1dPUkxEX1VTQjI4MDBdID0gewogCQkubmFtZSAgICAgICAgID0gIkt3b3JsZCBVU0IyODAwIiwKIAkJLmlzX2VtMjgwMCAgICA9IDEsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GQ1YxMjM2RCwKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgRGF6emxlIERWQyA5MC9EVkMgMTAwIiwKLQkJLnZjaGFubmVscyAgICA9IDMsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIGNhcHR1cmUgb25seSBib2FyZCAqLworCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfVkdFQVJfUE9DS0VUVFZdID0gewogCQkubmFtZSAgICAgICAgID0gIlYtR2VhciBQb2NrZXRUViIsCiAJCS5pc19lbTI4MDAgICAgPSAxLAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX1BST0xJTktfUExBWVRWX0JPWDRfVVNCMl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiUGl4ZWx2aWV3IFBsYXlUViBCb3ggNCBVU0IgMi4wIiwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkuYW91dCAgICAgPSBFTTI4WFhfQU9VVF9NT05PIHwgCS8qIEkyUyAqLworCQkJCSAgICBFTTI4WFhfQU9VVF9NQVNURVIsCS8qIExpbmUgb3V0IHBpbiAqLworCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAorCQkuaGFzX3NuYXBzaG90X2J1dHRvbiA9IDEsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9ZTUVDX1RWRl81NTMzTUYsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5hb3V0ICAgICA9IEVNMjhYWF9BT1VUX01PTk8gfCAJLyogSTJTICovCisJCQkJICAgIEVNMjhYWF9BT1VUX01BU1RFUiwJLyogTGluZSBvdXQgcGluICovCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCkBAIC04NTYsMjI4ICs5NjIsMjUyIEBACiAJCX0gfSwKIAl9LAogCVtFTTI4NjBfQk9BUkRfUE9JTlROSVhfSU5UUkFPUkFMX0NBTUVSQV0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiUG9pbnROaXggSW50cmEtT3JhbCBDYW1lcmEiLAorCQkubmFtZSAgICAgICAgICAgICAgICA9ICJQb2ludE5peCBJbnRyYS1PcmFsIENhbWVyYSIsCiAJCS5oYXNfc25hcHNob3RfYnV0dG9uID0gMSwKLQkJLnZjaGFubmVscyAgICA9IDEsCi0JCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS50ZGE5ODg3X2NvbmYgICAgICAgID0gVERBOTg4N19QUkVTRU5ULAorCQkudHVuZXJfdHlwZSAgICAgICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLmRlY29kZXIgICAgICAgICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmlucHV0ICAgICAgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKIAkJfSB9LAogCX0sCiAJW0VNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiTVNJIERpZ2lWb3ggQS9EIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGVtMjg4MF9tc2lfZGlnaXZveF9hZF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGVtMjg4MF9tc2lfZGlnaXZveF9hZF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBlbTI4ODBfbXNpX2RpZ2l2b3hfYWRfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgwX0JPQVJEX01TSV9ESUdJVk9YX0FEX0lJXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJNU0kgRGlnaVZveCBBL0QgSUkiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZW0yODgwX21zaV9kaWdpdm94X2FkX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZW0yODgwX21zaV9kaWdpdm94X2FkX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGVtMjg4MF9tc2lfZGlnaXZveF9hZF9hbmFsb2csCiAJCX0gfSwKIAl9LAogCVtFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMDVVXSA9IHsKIAkJLm5hbWUJICAgICAgPSAiS1dvcmxkIERWQi1UIDMwNVUiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgewotCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKLQkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCi0JCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAotCQl9LCB7Ci0JCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCi0JCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCi0JCX0gfSwKLQl9LAotCVtFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVXSA9IHsKLQkJLm5hbWUJICAgICAgPSAiS1dvcmxkIERWQi1UIDMxMFUiLAotCQkudmNoYW5uZWxzICAgID0gMywKLQkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKLQkJLmhhc19kdmIgICAgICA9IDEsCi0JCS5tdHNfZmlybXdhcmUgPSAxLAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BQzk3X0xJTkVfSU4sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0gfSwKKwl9LAorCVtFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVXSA9IHsKKwkJLm5hbWUJICAgICAgPSAiS1dvcmxkIERWQi1UIDMxMFUiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAorCQkuaGFzX2R2YiAgICAgID0gMSwKKwkJLmR2Yl9ncGlvICAgICA9IGRlZmF1bHRfZGlnaXRhbCwKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmlucHV0ICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0sIHsJLyogUy12aWRlbyBoYXMgbm90IGJlZW4gdGVzdGVkIHlldCAqLwogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BQzk3X0xJTkVfSU4sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0gfSwKIAl9LAogCVtFTTI4ODFfQk9BUkRfRE5UX0RBMl9IWUJSSURdID0gewogCQkubmFtZSAgICAgICAgID0gIkROVCBEQTIgSHlicmlkIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAotCQkudmNoYW5uZWxzICAgID0gMywKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGRlZmF1bHRfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBkZWZhdWx0X2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGRlZmF1bHRfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk9dID0gewogCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIEh5YnJpZCBQcm8iLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGRlZmF1bHRfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0gfSwKIAl9LAogCVtFTTI4ODJfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BST10gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgSHlicmlkIFBybyAoMikiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkubXRzX2Zpcm13YXJlID0gMSwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKLQkJCS5hbXV4ICAgICA9IDEsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKIAlbRU0yODgyX0JPQVJEX0tXT1JMRF9WU19EVkJUXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgVlMtRFZCLVQgMzIzVVIiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKIAl9LAogCVtFTTI4ODJfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMgKGVtMjg4MikiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCi0JCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2csCiAJCX0gfSwKIAl9LAogCVtFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF9BMzE2XSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgUGx1c1RWIEhEIEh5YnJpZCAzMzAiLAotCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS52Y2hhbm5lbHMgICAgPSAzLAotCQkuaXNfZW0yODAwICAgID0gMCwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAotCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGVmYXVsdF9kaWdpdGFsLAorCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAotCQkJLmFtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCi0JCQkuYW11eCAgICAgPSAxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2FuYWxvZywKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9DT01QUk9fVklERU9NQVRFX0ZPUllPVV0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiQ29tcHJvIFZpZGVvTWF0ZSBGb3JZb3UvU3RlcmVvIiwKLQkJLnZjaGFubmVscyAgICA9IDIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKLQkJLmlucHV0ICAgICAgICAgID0geyB7CisJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLApAQCAtMTEwMSw3ICsxMjMxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjEpLAotCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BST0xJTktfUExBWVRWX1VTQjIgfSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODYwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODYxKSwKQEAgLTExNjQsOCArMTI5NCw4IEBACiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85NTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDY1MWIpLCAvKiBSUCAgSFZSLTk1MCAqLwogCQkJLmRyaXZlcl9pbmZvID0gRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg2NTFmKSwgLyogSENXIEhWUi04NTAgKi8KLQkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NjUxZiksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDM4LCAweGIwMDIpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODgwX0JPQVJEX0FNRF9BVElfVFZfV09OREVSX0hEXzYwMCB9LAogCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4ZjExMiksCkBAIC0xMTg5LDc4ICsxMzE5LDEyIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZW0yOHh4X2lkX3RhYmxlKTsKIAogLyoKLSAqICBSZXNldCBzZXF1ZW5jZXMgZm9yIGFuYWxvZy9kaWdpdGFsIG1vZGVzCi0gKi8KLQotLyogUmVzZXQgZm9yIHRoZSBtb3N0IFthbmFsb2ddIGJvYXJkcyAqLwotc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X2FuYWxvZ1tdID0gewotCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmQsICAgfkVNX0dQSU9fNCwJMTB9LAotCXsJLTEsCQktMSwJLTEsCQktMX0sCi19OwotCi0vKiBSZXNldCBmb3IgdGhlIG1vc3QgW2RpZ2l0YWxdIGJvYXJkcyAqLwotc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X2RpZ2l0YWxbXSA9IHsKLQl7RU0yOFhYX1IwOF9HUElPLAkweDZlLAl+RU1fR1BJT180LAkxMH0sCi0JewktMSwJCS0xLAktMSwJCS0xfSwKLX07Ci0KLS8qIEJvYXJkIEhhdXBwYXVnZSBXaW5UViBIVlIgOTAwIGFuYWxvZyAqLwotc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2dbXSA9IHsKLQl7RU0yOFhYX1IwOF9HUElPLAkweDJkLAl+RU1fR1BJT180LAkxMH0sCi0JezB4MDUsCQkJMHhmZiwJMHgxMCwJCTEwfSwKLQl7ICAtMSwJCQktMSwJLTEsCQktMX0sCi19OwotCi0vKiBCb2FyZCBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCBkaWdpdGFsICovCi1zdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWxbXSA9IHsKLQl7RU0yOFhYX1IwOF9HUElPLAkweDJlLAl+RU1fR1BJT180LAkxMH0sCi0Je0VNMjg4MF9SMDRfR1BPLAkweDA0LAkweDBmLAkJMTB9LAotCXtFTTI4ODBfUjA0X0dQTywJMHgwYywJMHgwZiwJCTEwfSwKLQl7IC0xLAkJCS0xLAktMSwJCS0xfSwKLX07Ci0KLS8qIEJvYXJkcyAtIEVNMjg4MCBNU0kgRElHSVZPWCBBRCBhbmQgRU0yODgwX0JPQVJEX01TSV9ESUdJVk9YX0FEX0lJICovCi1zdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGVtMjg4MF9tc2lfZGlnaXZveF9hZF9hbmFsb2dbXSA9IHsKLQl7RU0yOFhYX1IwOF9HUElPLCAgICAgICAweDY5LCAgIH5FTV9HUElPXzQsCSAxMH0sCi0JewktMSwJCS0xLAktMSwJCSAtMX0sCi19OwotCi0vKiBCb2FyZHMgLSBFTTI4ODAgTVNJIERJR0lWT1ggQUQgYW5kIEVNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRF9JSSAqLwotc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBlbTI4ODBfbXNpX2RpZ2l2b3hfYWRfZGlnaXRhbFtdID0gewotCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmEsCX5FTV9HUElPXzQsCTEwfSwKLQl7CS0xLAkJLTEsCS0xLAkJLTF9LAotfTsKLQotLyogQm9hcmQgIC0gRU0yODcwIEt3b3JsZCAzNTV1Ci0gICBBbmFsb2cgLSBObyBpbnB1dCBhbmFsb2cgKi8KLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgZW0yODcwX2t3b3JsZF8zNTV1X2RpZ2l0YWxbXSA9IHsKLQl7RU0yODgwX1IwNF9HUE8sCTB4MDEsCTB4ZmYsCQkxMH0sCi0JeyAgLTEsCQkJLTEsCS0xLAkJLTF9LAotfTsKLQotLyogQ2FsbGJhY2sgZm9yIHRoZSBtb3N0IGJvYXJkcyAqLwotc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBkZWZhdWx0X2NhbGxiYWNrW10gPSB7Ci0Je0VNMjhYWF9SMDhfR1BJTywJRU1fR1BJT180LAlFTV9HUElPXzQsCTEwfSwKLQl7RU0yOFhYX1IwOF9HUElPLAkwLAkJRU1fR1BJT180LAkxMH0sCi0Je0VNMjhYWF9SMDhfR1BJTywJRU1fR1BJT180LAlFTV9HUElPXzQsCTEwfSwKLQl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAotfTsKLQotLyogQ2FsbGJhY2sgZm9yIEVNMjg4MiBURVJSQVRFQyBIWUJSSUQgWFMgKi8KLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgZW0yODgyX3RlcnJhdGVjX2h5YnJpZF94c19kaWdpdGFsW10gPSB7Ci0Je0VNMjhYWF9SMDhfR1BJTywgICAgICAgMHgyZSwgICAweGZmLAkJICAgNn0sCi0Je0VNMjhYWF9SMDhfR1BJTywgICAgICAgMHgzZSwgICB+RU1fR1BJT180LAkgICA2fSwKLQl7RU0yODgwX1IwNF9HUE8sICAgICAgICAweDA0LCAgIDB4ZmYsCQkgIDEwfSwKLQl7RU0yODgwX1IwNF9HUE8sICAgICAgICAweDBjLCAgIDB4ZmYsCQkgIDEwfSwKLQl7ICAtMSwJCQktMSwJLTEsCQkgIC0xfSwKLX07Ci0KLS8qCiAgKiBFRVBST00gaGFzaCB0YWJsZSBmb3IgZGV2aWNlcyB3aXRoIGdlbmVyaWMgVVNCIElEcwogICovCiBzdGF0aWMgc3RydWN0IGVtMjh4eF9oYXNoX3RhYmxlIGVtMjh4eF9lZXByb21faGFzaCBbXSA9IHsKIAkvKiBQL046IFNBIDYwMDAyMDcwNDY1IFR1bmVyOiBUVkY3NTMzLU1GICovCiAJezB4NmNlMDVhOGYsIEVNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LAorCXsweDcyY2M1YThiLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LAogCXsweDk2NmEwNDQxLCBFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVLCBUVU5FUl9YQzIwMjh9LAogfTsKIApAQCAtMTI4MiwyNyArMTM0NiwyNiBAQAogCWlmIChjb21tYW5kICE9IFhDMjAyOF9UVU5FUl9SRVNFVCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZGV2LT5tb2RlID09IEVNMjhYWF9BTkFMT0dfTU9ERSkKLQkJcmMgPSBlbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPnR1bl9hbmFsb2dfZ3Bpbyk7Ci0JZWxzZQotCQlyYyA9IGVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+dHVuX2RpZ2l0YWxfZ3Bpbyk7CisJcmMgPSBlbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLnR1bmVyX2dwaW8pOwogCiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X3R1bmVyX2NhbGxiYWNrKTsKIAotc3RhdGljIHZvaWQgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitzdGF0aWMgdm9pZCBpbmxpbmUgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7Ci0JZGV2LT5pc19lbTI4MDAgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLmlzX2VtMjgwMDsKLQlkZXYtPmhhc19tc3AzNHh4ID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5oYXNfbXNwMzR4eDsKLQlkZXYtPnRkYTk4ODdfY29uZiA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0udGRhOTg4N19jb25mOwotCWRldi0+ZGVjb2RlciA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0uZGVjb2RlcjsKLQlkZXYtPnZpZGVvX2lucHV0cyA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0udmNoYW5uZWxzOwotCWRldi0+aGFzXzEybWh6X2kycyA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0uaGFzXzEybWh6X2kyczsKLQlkZXYtPm1heF9yYW5nZV82NDBfNDgwID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5tYXhfcmFuZ2VfNjQwXzQ4MDsKLQlkZXYtPmhhc19kdmIgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLmhhc19kdmI7Ci0JZGV2LT5oYXNfc25hcHNob3RfYnV0dG9uID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5oYXNfc25hcHNob3RfYnV0dG9uOwotCWRldi0+dmFsaWQgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLnZhbGlkOworCW1lbWNweSgmZGV2LT5ib2FyZCwgJmVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0sIHNpemVvZihkZXYtPmJvYXJkKSk7CisKKwkvKiBUaG9zZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFqb3JpdHkgb2YgYm9hcmRzCisJICAgVXNlIHRob3NlIHZhbHVlcyBpZiBub3Qgc3BlY2lmaWVkIG90aGVyd2lzZSBhdCBib2FyZHMgZW50cnkKKwkgKi8KKwlpZiAoIWRldi0+Ym9hcmQueGNsaykKKwkJZGV2LT5ib2FyZC54Y2xrID0gRU0yOFhYX1hDTEtfSVJfUkM1X01PREUgfAorCQkJCSAgRU0yOFhYX1hDTEtfRlJFUVVFTkNZXzEyTUhaOworCisJaWYgKCFkZXYtPmJvYXJkLmkyY19zcGVlZCkKKwkJZGV2LT5ib2FyZC5pMmNfc3BlZWQgPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8CisJCQkJICAgICAgIEVNMjhYWF9JMkNfRlJFUV8xMDBfS0haOwogfQogCiAvKiBTaW5jZSBlbTI4eHhfcHJlX2NhcmRfc2V0dXAoKSByZXF1aXJlcyBhIHByb3BlciBkZXYtPm1vZGVsLApAQCAtMTMxMiwyMDUgKzEzNzUsMTI2IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4ODBfUjA0X0dQTyk7Ci0JaWYgKHJjID49IDApCi0JCWRldi0+cmVnX2dwbyA9IHJjOworCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKworCWVtMjh4eF9pbmZvKCJJZGVudGlmaWVkIGFzICVzIChjYXJkPSVkKVxuIiwKKwkJICAgIGRldi0+Ym9hcmQubmFtZSwgZGV2LT5tb2RlbCk7CisKKwkvKiBTZXQgdGhlIGRlZmF1bHQgR1BPL0dQSU8gZm9yIGxlZ2FjeSBkZXZpY2VzICovCisJZGV2LT5yZWdfZ3BvX251bSA9IEVNMjg4MF9SMDRfR1BPOworCWRldi0+cmVnX2dwaW9fbnVtID0gRU0yOFhYX1IwOF9HUElPOwogCiAJZGV2LT53YWl0X2FmdGVyX3dyaXRlID0gNTsKKworCS8qIEJhc2VkIG9uIHRoZSBDaGlwIElELCBzZXQgdGhlIGRldmljZSBjb25maWd1cmF0aW9uICovCiAJcmMgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjBBX0NISVBJRCk7CiAJaWYgKHJjID4gMCkgewotCQlzd2l0Y2ggKHJjKSB7CisJCWRldi0+Y2hpcF9pZCA9IHJjOworCisJCXN3aXRjaCAoZGV2LT5jaGlwX2lkKSB7CisJCWNhc2UgQ0hJUF9JRF9FTTI3NTA6CisJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI3NTBcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9JRF9FTTI4MjA6CisJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI4MjBcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9JRF9FTTI4NDA6CisJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI4NDBcbiIpOworCQkJYnJlYWs7CiAJCWNhc2UgQ0hJUF9JRF9FTTI4NjA6CiAJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI4NjBcbiIpOwogCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9JRF9FTTI4NzA6CisJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI4NzBcbiIpOworCQkJZGV2LT53YWl0X2FmdGVyX3dyaXRlID0gMDsKKwkJCWJyZWFrOworCQljYXNlIENISVBfSURfRU0yODc0OgorCQkJZW0yOHh4X2luZm8oImNoaXAgSUQgaXMgZW0yODc0XG4iKTsKKwkJCWRldi0+cmVnX2dwaW9fbnVtID0gRU0yODc0X1I4MF9HUElPOworCQkJZGV2LT53YWl0X2FmdGVyX3dyaXRlID0gMDsKKwkJCWJyZWFrOwogCQljYXNlIENISVBfSURfRU0yODgzOgogCQkJZW0yOHh4X2luZm8oImNoaXAgSUQgaXMgZW0yODgyL2VtMjg4M1xuIik7CiAJCQlkZXYtPndhaXRfYWZ0ZXJfd3JpdGUgPSAwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllbTI4eHhfaW5mbygiZW0yOHh4IGNoaXAgSUQgPSAlZFxuIiwgcmMpOworCQkJZW0yOHh4X2luZm8oImVtMjh4eCBjaGlwIElEID0gJWRcbiIsIGRldi0+Y2hpcF9pZCk7CiAJCX0KIAl9Ci0JZW0yOHh4X3NldF9tb2RlbChkZXYpOworCisJLyogUHJlcG9wdWxhdGUgY2FjaGVkIEdQTyByZWdpc3RlciBjb250ZW50ICovCisJcmMgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBkZXYtPnJlZ19ncG9fbnVtKTsKKwlpZiAocmMgPj0gMCkKKwkJZGV2LT5yZWdfZ3BvID0gcmM7CisKKwkvKiBTZXQgdGhlIGluaXRpYWwgWENMSyBhbmQgSTJDIGNsb2NrIHZhbHVlcyBiYXNlZCBvbiB0aGUgYm9hcmQKKwkgICBkZWZpbml0aW9uICovCisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSywgZGV2LT5ib2FyZC54Y2xrICYgMHg3Zik7CisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgZGV2LT5ib2FyZC5pMmNfc3BlZWQpOworCW1zbGVlcCg1MCk7CiAKIAkvKiByZXF1ZXN0IHNvbWUgbW9kdWxlcyAqLwogCXN3aXRjaCAoZGV2LT5tb2RlbCkgewotCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX1BST0RJR1lfWFM6Ci0JY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDA6Ci0JY2FzZSBFTTI4ODBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85MDBfUjI6Ci0JY2FzZSBFTTI4NjBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgotCWNhc2UgRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgotCWNhc2UgRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPOgotCWNhc2UgRU0yODgyX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk86Ci0JY2FzZSBFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF9BMzE2OgotCWNhc2UgRU0yODgwX0JPQVJEX0FNRF9BVElfVFZfV09OREVSX0hEXzYwMDoKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBGX1hDTEssICAgICJceDI3IiwgMSk7Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCAiXHg0MCIsIDEpOwotCQltc2xlZXAoNTApOwotCi0JCS8qIFNldHMgR1BPL0dQSU8gc2VxdWVuY2VzIGZvciB0aGlzIGRldmljZSAqLwotCQlkZXYtPmFuYWxvZ19ncGlvICAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9hbmFsb2c7Ci0JCWRldi0+ZGlnaXRhbF9ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWw7Ci0JCWRldi0+dHVuX2FuYWxvZ19ncGlvICA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWRldi0+dHVuX2RpZ2l0YWxfZ3BpbyA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWJyZWFrOwotCi0JY2FzZSBFTTI4ODJfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgICAgIlx4MjciLCAxKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssICJceDQwIiwgMSk7Ci0JCW1zbGVlcCg1MCk7Ci0KLQkJLyogc2hvdWxkIGJlIGFkZGVkIGlyX2NvZGVzIGhlcmUgKi8KLQotCQkvKiBTZXRzIEdQTy9HUElPIHNlcXVlbmNlcyBmb3IgdGhpcyBkZXZpY2UgKi8KLQkJZGV2LT5hbmFsb2dfZ3BpbyAgICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nOwotCQlkZXYtPmRpZ2l0YWxfZ3BpbyAgICAgPSBoYXVwcGF1Z2Vfd2ludHZfaHZyXzkwMF9kaWdpdGFsOwotCQlkZXYtPnR1bl9hbmFsb2dfZ3BpbyAgPSBkZWZhdWx0X2NhbGxiYWNrOwotCQlkZXYtPnR1bl9kaWdpdGFsX2dwaW8gPSBlbTI4ODJfdGVycmF0ZWNfaHlicmlkX3hzX2RpZ2l0YWw7Ci0JCWJyZWFrOwotCi0JY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSOgotCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKLQljYXNlIEVNMjg3MF9CT0FSRF9URVJSQVRFQ19YUzoKLQljYXNlIEVNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPOgotCWNhc2UgRU0yODgwX0JPQVJEX0tXT1JMRF9EVkJfMzEwVToKLQljYXNlIEVNMjg3MF9CT0FSRF9LV09STERfMzUwVToKLQljYXNlIEVNMjg4MV9CT0FSRF9ETlRfREEyX0hZQlJJRDoKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBGX1hDTEssICAgICJceDI3IiwgMSk7Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCAiXHg0MCIsIDEpOwotCQltc2xlZXAoNTApOwotCi0JCS8qIE5PVEU6IEVNMjg4MV9ETlRfREEyX0hZQlJJRCBzcGVuZCAxNDAgbXNsZWVwIGZvciBkaWdpdGFsCi0JCQkgYW5kIGFuYWxvZyBjb21tYW5kcy4gSWYgdGhpcyBjb21tYW5kcyBkb2Vzbid0IHdvcmssCi0JCQkgYWRkIHRoaXMgdGltZXIuICovCi0KLQkJLyogU2V0cyBHUE8vR1BJTyBzZXF1ZW5jZXMgZm9yIHRoaXMgZGV2aWNlICovCi0JCWRldi0+YW5hbG9nX2dwaW8gICAgICA9IGRlZmF1bHRfYW5hbG9nOwotCQlkZXYtPmRpZ2l0YWxfZ3BpbyAgICAgPSBkZWZhdWx0X2RpZ2l0YWw7Ci0JCWRldi0+dHVuX2FuYWxvZ19ncGlvICA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWRldi0+dHVuX2RpZ2l0YWxfZ3BpbyA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWJyZWFrOwotCi0JY2FzZSBFTTI4ODBfQk9BUkRfTVNJX0RJR0lWT1hfQUQ6Ci0JY2FzZSBFTTI4ODBfQk9BUkRfTVNJX0RJR0lWT1hfQURfSUk6Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAgICAiXHgyNyIsIDEpOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKLQkJbXNsZWVwKDUwKTsKLQotCQkvKiBTZXRzIEdQTy9HUElPIHNlcXVlbmNlcyBmb3IgdGhpcyBkZXZpY2UgKi8KLQkJZGV2LT5hbmFsb2dfZ3BpbyAgICAgID0gZW0yODgwX21zaV9kaWdpdm94X2FkX2FuYWxvZzsKLQkJZGV2LT5kaWdpdGFsX2dwaW8gICAgID0gZW0yODgwX21zaV9kaWdpdm94X2FkX2RpZ2l0YWw7Ci0JCWRldi0+dHVuX2FuYWxvZ19ncGlvICA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWRldi0+dHVuX2RpZ2l0YWxfZ3BpbyA9IGRlZmF1bHRfY2FsbGJhY2s7Ci0JCWJyZWFrOwotCi0JY2FzZSBFTTI3NTBfQk9BUkRfVU5LTk9XTjoKLQljYXNlIEVNMjc1MF9CT0FSRF9ETENXXzEzMDoKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBGX1hDTEssICJceDBhIiwgMSk7Ci0JCWJyZWFrOwotCiAJY2FzZSBFTTI4NjFfQk9BUkRfUExFWFRPUl9QWF9UVjEwMFU6Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgyNyIsIDEpOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKIAkJLyogRklYTUUgZ3Vlc3MgKi8KIAkJLyogVHVybiBvbiBhbmFsb2cgYXVkaW8gb3V0cHV0ICovCi0JCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDgsICJceGZkIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZmQpOwogCQlicmVhazsKLQogCWNhc2UgRU0yODYxX0JPQVJEX0tXT1JMRF9QVlJUVl8zMDBVOgogCWNhc2UgRU0yODgwX0JPQVJEX0tXT1JMRF9EVkJfMzA1VToKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBGX1hDTEssICJceDI3IiwgMSk7Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCAiXHg0YyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweDZkKTsKIAkJbXNsZWVwKDEwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg2ZCIsIDEpOwotCQltc2xlZXAoMTApOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDdkIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4N2QpOwogCQltc2xlZXAoMTApOwogCQlicmVhazsKLQotCWNhc2UgRU0yODcwX0JPQVJEX0tXT1JMRF8zNTVVOgotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgIlx4MjciLCAxKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssICJceDQwIiwgMSk7Ci0JCW1zbGVlcCg1MCk7Ci0KLQkJLyogU2V0cyBHUE8vR1BJTyBzZXF1ZW5jZXMgZm9yIHRoaXMgZGV2aWNlICovCi0JCWRldi0+ZGlnaXRhbF9ncGlvICAgICA9IGVtMjg3MF9rd29ybGRfMzU1dV9kaWdpdGFsOwotCQlicmVhazsKLQogCWNhc2UgRU0yODcwX0JPQVJEX0NPTVBST19WSURFT01BVEU6Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgyNyIsIDEpOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKIAkJLyogVE9ETzogc29tZW9uZSBjYW4gZG8gc29tZSBjbGVhbnVwIGhlcmUuLi4KIAkJCSBub3QgZXZlcnl0aGluZydzIG5lZWRlZCAqLwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDQsICJceDAwIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4ODBfUjA0X0dQTywgMHgwMCk7CiAJCW1zbGVlcCgxMCk7Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwNCwgIlx4MDEiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjg4MF9SMDRfR1BPLCAweDAxKTsKIAkJbXNsZWVwKDEwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZCIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZkKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmYyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZjKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhkYyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGRjKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmYyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZjKTsKIAkJbWRlbGF5KDcwKTsKIAkJYnJlYWs7Ci0KIAljYXNlIEVNMjg3MF9CT0FSRF9URVJSQVRFQ19YU19NVDIwNjA6Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgyNyIsIDEpOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKIAkJLyogdGhpcyBkZXZpY2UgbmVlZHMgc29tZSBncGlvIHdyaXRlcyB0byBnZXQgdGhlIERWQi1UCiAJCSAgIGRlbW9kIHdvcmsgKi8KLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZSIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhkZSIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGRlKTsKIAkJbWRlbGF5KDcwKTsKLQkJZGV2LT5lbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZlIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZmUpOwogCQltZGVsYXkoNzApOwogCQlicmVhazsKLQogCWNhc2UgRU0yODcwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfRFZCOgotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKIAkJLyogdGhpcyBkZXZpY2UgbmVlZHMgc29tZSBncGlvIHdyaXRlcyB0byBnZXQgdGhlCiAJCSAgIERWQi1UIGRlbW9kIHdvcmsgKi8KLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZSIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhkZSIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGRlKTsKIAkJbWRlbGF5KDcwKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZSIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKIAkJbWRlbGF5KDcwKTsKLQkJLyogc3dpdGNoIGVtMjg4MCByYyBwcm90b2NvbCAqLwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgIlx4MjIiLCAxKTsKLQkJLyogc2hvdWxkIGJlIGFkZGVkIGlyX2NvZGVzIGhlcmUgKi8KIAkJYnJlYWs7Ci0KIAljYXNlIEVNMjgyMF9CT0FSRF9HQURNRUlfVVRWMzEwOgotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgIlx4MjciLCAxKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssICJceDQwIiwgMSk7Ci0JCS8qIFR1cm4gb24gYW5hbG9nIGF1ZGlvIG91dHB1dCAqLwotCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmZCIsIDEpOwotCQlicmVhazsKLQotCWNhc2UgRU0yODYwX0JPQVJEX0dBRE1FSV9VVFYzMzA6Ci0JCS8qIFR1cm4gb24gSVIgKi8KLQkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjBGX1hDTEssICJceDA3IiwgMSk7Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCAiXHg0MCIsIDEpOwotCQkvKiBzaG91bGQgYmUgYWRkZWQgaXJfY29kZXMgaGVyZSAqLwotCQlicmVhazsKLQogCWNhc2UgRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzI6Ci0JCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgyNyIsIDEpOwotCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKLQkJLyogZW5hYmxlcyBhdWRpbyBmb3IgdGhhdCBkZXZpY2UgKi8KLQkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmQiLCAxKTsKKwkJLyogZW5hYmxlcyBhdWRpbyBmb3IgdGhhdCBkZXZpY2VzICovCisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZmQpOwogCQlicmVhazsKIAl9CiAKLQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPnR1bl9hbmFsb2dfZ3Bpbyk7CisJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKIAllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfQU5BTE9HX01PREUpOwogCiAJLyogVW5sb2NrIGRldmljZSAqLwotCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9NT0RFX1VOREVGSU5FRCk7CisJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX1NVU1BFTkQpOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfc2V0dXBfeGMzMDI4KHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IHhjMjAyOF9jdHJsICpjdGwpCkBAIC0xNTM2LDYgKzE1MjAsNyBAQAogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CiAJCWN0bC0+Zm5hbWUgPSBYQzMwMjhMX0RFRkFVTFRfRklSTVdBUkU7CiAJCWJyZWFrOworCWNhc2UgRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfODUwOgogCWNhc2UgRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTUwOgogCWNhc2UgRU0yODgwX0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfUFJPOgogCQkvKiBGSVhNRTogQmV0dGVyIHRvIHNwZWNpZnkgdGhlIG5lZWRlZCBJRiAqLwpAQCAtMTcxMiwxMiArMTY5NywxNSBAQAogCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKIAogCWRldi0+dHVuZXJfdHlwZSA9IGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0udHVuZXJfdHlwZTsKKwlpZiAoZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS50dW5lcl9hZGRyKQorCQlkZXYtPnR1bmVyX2FkZHIgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLnR1bmVyX2FkZHI7CiAKIAkvKiByZXF1ZXN0IHNvbWUgbW9kdWxlcyAqLwogCXN3aXRjaCAoZGV2LT5tb2RlbCkgewogCWNhc2UgRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMjoKIAljYXNlIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMDoKIAljYXNlIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMF9SMjoKKwljYXNlIEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzg1MDoKIAljYXNlIEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MDoKIAl7CiAJCXN0cnVjdCB0dmVlcHJvbSB0djsKQEAgLTE3MzMsNyArMTcyMSw3IEBACiAKIAkJaWYgKHR2LmF1ZGlvX3Byb2Nlc3NvciA9PSBWNEwyX0lERU5UX01TUFg0WFgpIHsKIAkJCWRldi0+aTJzX3NwZWVkID0gMjA0ODAwMDsKLQkJCWRldi0+aGFzX21zcDM0eHggPSAxOworCQkJZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCA9IDE7CiAJCX0KICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQlpZiAodHYuaGFzX2lyKQpAQCAtMTc0Myw3ICsxNzMxLDcgQEAKIAl9CiAJY2FzZSBFTTI4MjBfQk9BUkRfS1dPUkxEX1BWUlRWMjgwMFJGOgogCQkvKiBHUElPIGVuYWJsZXMgc291bmQgb24gS1dPUkxEIFBWUiBUViAyODAwUkYgKi8KLQkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZjkiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmOSk7CiAJCWJyZWFrOwogCWNhc2UgRU0yODIwX0JPQVJEX1VOS05PV046CiAJY2FzZSBFTTI4MDBfQk9BUkRfVU5LTk9XTjoKQEAgLTE3NjYsMTAgKzE3NTQsMTAgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGRldi0+aGFzX3NuYXBzaG90X2J1dHRvbikKKwlpZiAoZGV2LT5ib2FyZC5oYXNfc25hcHNob3RfYnV0dG9uKQogCQllbTI4eHhfcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKGRldik7CiAKLQlpZiAoZGV2LT52YWxpZCA9PSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCkgeworCWlmIChkZXYtPmJvYXJkLnZhbGlkID09IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVEKSB7CiAJCWVtMjh4eF9lcnJkZXYoIlxuXG4iKTsKIAkJZW0yOHh4X2VycmRldigiVGhlIHN1cHBvcnQgZm9yIHRoaXMgYm9hcmQgd2VyZW4ndCAiCiAJCQkgICAgICAidmFsaWQgeWV0LlxuIik7CkBAIC0xNzg0LDE1ICsxNzcyLDQzMyBAQAogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKiByZXF1ZXN0IHNvbWUgbW9kdWxlcyAqLwotCWlmIChkZXYtPmhhc19tc3AzNHh4KQorCWlmIChkZXYtPmJvYXJkLmhhc19tc3AzNHh4KQogCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOwotCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMTMgfHwgZGV2LT5kZWNvZGVyID09IEVNMjhYWF9TQUE3MTE0KQorCWlmIChkZXYtPmJvYXJkLmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMVgpCiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTE1Iik7Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBFTTI4WFhfVFZQNTE1MCkKKwlpZiAoZGV2LT5ib2FyZC5kZWNvZGVyID09IEVNMjhYWF9UVlA1MTUwKQogCQlyZXF1ZXN0X21vZHVsZSgidHZwNTE1MCIpOwotCWlmIChkZXYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQorCWlmIChkZXYtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQogCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKICNlbmRpZgogCiAJZW0yOHh4X2NvbmZpZ190dW5lcihkZXYpOworCisJZW0yOHh4X2lyX2luaXQoZGV2KTsKIH0KKworCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCitzdGF0aWMgdm9pZCByZXF1ZXN0X21vZHVsZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssCisJCQkgICAgIHN0cnVjdCBlbTI4eHgsIHJlcXVlc3RfbW9kdWxlX3drKTsKKworCWlmIChkZXYtPmhhc19hdWRpb19jbGFzcykKKwkJcmVxdWVzdF9tb2R1bGUoInNuZC11c2ItYXVkaW8iKTsKKwllbHNlIGlmIChkZXYtPmhhc19hbHNhX2F1ZGlvKQorCQlyZXF1ZXN0X21vZHVsZSgiZW0yOHh4LWFsc2EiKTsKKworCWlmIChkZXYtPmJvYXJkLmhhc19kdmIpCisJCXJlcXVlc3RfbW9kdWxlKCJlbTI4eHgtZHZiIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJSU5JVF9XT1JLKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drLCByZXF1ZXN0X21vZHVsZV9hc3luYyk7CisJc2NoZWR1bGVfd29yaygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7Cit9CisjZWxzZQorI2RlZmluZSByZXF1ZXN0X21vZHVsZXMoZGV2KQorI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKKy8qCisgKiBlbTI4eHhfcmVhbGVhc2VfcmVzb3VyY2VzKCkKKyAqIHVucmVnaXN0ZXJzIHRoZSB2NGwyLGkyYyBhbmQgdXNiIGRldmljZXMKKyAqIGNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgZ2V0cyBkaXNjb25lY3RlZCBvciBhdCBtb2R1bGUgdW5sb2FkCisqLwordm9pZCBlbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWlmIChkZXYtPnNidXR0b25faW5wdXRfZGV2KQorCQllbTI4eHhfZGVyZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oZGV2KTsKKworCWlmIChkZXYtPmlyKQorCQllbTI4eHhfaXJfZmluaShkZXYpOworCisJLypGSVhNRTogSTJDIElSIHNob3VsZCBiZSBkaXNjb25uZWN0ZWQgKi8KKworCWVtMjh4eF9yZWxlYXNlX2FuYWxvZ19yZXNvdXJjZXMoZGV2KTsKKworCWVtMjh4eF9yZW1vdmVfZnJvbV9kZXZsaXN0KGRldik7CisKKwllbTI4eHhfaTJjX3VucmVnaXN0ZXIoZGV2KTsKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCisJLyogTWFyayBkZXZpY2UgYXMgdW51c2VkICovCisJZW0yOHh4X2RldnVzZWQgJj0gfigxIDw8IGRldi0+ZGV2bm8pOworfTsKKworLyoKKyAqIGVtMjh4eF9pbml0X2RldigpCisgKiBhbGxvY2F0ZXMgYW5kIGluaXRzIHRoZSBkZXZpY2Ugc3RydWN0cywgcmVnaXN0ZXJzIGkyYyBidXMgYW5kIHY0bCBkZXZpY2UKKyAqLworaW50IGVtMjh4eF9pbml0X2RldihzdHJ1Y3QgZW0yOHh4ICoqZGV2aGFuZGxlLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgIGludCBtaW5vcikKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSAqZGV2aGFuZGxlOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBlcnJDb2RlOworCisJZGV2LT51ZGV2ID0gdWRldjsKKwltdXRleF9pbml0KCZkZXYtPmN0cmxfdXJiX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPm9wZW4pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9mcmFtZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3N0cmVhbSk7CisKKwlkZXYtPmVtMjh4eF93cml0ZV9yZWdzID0gZW0yOHh4X3dyaXRlX3JlZ3M7CisJZGV2LT5lbTI4eHhfcmVhZF9yZWcgPSBlbTI4eHhfcmVhZF9yZWc7CisJZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbiA9IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuOworCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxOworCWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcSA9IGVtMjh4eF9yZWFkX3JlZ19yZXE7CisJZGV2LT5ib2FyZC5pc19lbTI4MDAgPSBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLmlzX2VtMjgwMDsKKworCWVtMjh4eF9wcmVfY2FyZF9zZXR1cChkZXYpOworCisJaWYgKCFkZXYtPmJvYXJkLmlzX2VtMjgwMCkgeworCQkvKiBTZXRzIEkyQyBzcGVlZCB0byAxMDAgS0h6ICovCisJCXJldHZhbCA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssIDB4NDApOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZW0yOHh4X2VycmRldigiJXM6IGVtMjh4eF93cml0ZV9yZWdzX3JlcSBmYWlsZWQhIgorCQkJCSAgICAgICIgcmV0dmFsIFslZF1cbiIsCisJCQkJICAgICAgX19mdW5jX18sIHJldHZhbCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJLyogcmVnaXN0ZXIgaTJjIGJ1cyAqLworCWVyckNvZGUgPSBlbTI4eHhfaTJjX3JlZ2lzdGVyKGRldik7CisJaWYgKGVyckNvZGUgPCAwKSB7CisJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfaTJjX3JlZ2lzdGVyIC0gZXJyQ29kZSBbJWRdIVxuIiwKKwkJCV9fZnVuY19fLCBlcnJDb2RlKTsKKwkJcmV0dXJuIGVyckNvZGU7CisJfQorCisJLyogRG8gYm9hcmQgc3BlY2lmaWMgaW5pdCBhbmQgZWVwcm9tIHJlYWRpbmcgKi8KKwllbTI4eHhfY2FyZF9zZXR1cChkZXYpOworCisJLyogQ29uZmlndXJlIGF1ZGlvICovCisJZXJyQ29kZSA9IGVtMjh4eF9hdWRpb19zZXR1cChkZXYpOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogRXJyb3Igd2hpbGUgc2V0dGluZyBhdWRpbyAtIGVyckNvZGUgWyVkXSFcbiIsCisJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CisJfQorCisJLyogd2FrZSBpMmMgZGV2aWNlcyAqLworCWVtMjh4eF93YWtlX2kyYyhkZXYpOworCisJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEucXVldWVkKTsKKworCisJaWYgKGRldi0+Ym9hcmQuaGFzX21zcDM0eHgpIHsKKwkJLyogU2VuZCBhIHJlc2V0IHRvIG90aGVyIGNoaXBzIHZpYSBncGlvICovCisJCWVyckNvZGUgPSBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGY3KTsKKwkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIC0gIgorCQkJCSAgICAgICJtc3AzNHh4KDEpIGZhaWxlZCEgZXJyQ29kZSBbJWRdXG4iLAorCQkJCSAgICAgIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CisJCW1zbGVlcCgzKTsKKworCQllcnJDb2RlID0gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZik7CisJCWlmIChlcnJDb2RlIDwgMCkgeworCQkJZW0yOHh4X2VycmRldigiJXM6IGVtMjh4eF93cml0ZV9yZWdzX3JlcSAtICIKKwkJCQkgICAgICAibXNwMzR4eCgyKSBmYWlsZWQhIGVyckNvZGUgWyVkXVxuIiwKKwkJCQkgICAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQorCQltc2xlZXAoMyk7CisJfQorCisJZW0yOHh4X2FkZF9pbnRvX2Rldmxpc3QoZGV2KTsKKworCXJldHZhbCA9IGVtMjh4eF9yZWdpc3Rlcl9hbmFsb2dfZGV2aWNlcyhkZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOworCQlnb3RvIGZhaWxfcmVnX2RldmljZXM7CisJfQorCisJZW0yOHh4X2luaXRfZXh0ZW5zaW9uKGRldik7CisKKwkvKiBTYXZlIHNvbWUgcG93ZXIgYnkgcHV0dGluZyB0dW5lciB0byBzbGVlcCAqLworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfcmVnX2RldmljZXM6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGVtMjh4eF91c2JfcHJvYmUoKQorICogY2hlY2tzIGZvciBzdXBwb3J0ZWQgZGV2aWNlcworICovCitzdGF0aWMgaW50IGVtMjh4eF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWlmOworCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJaW50IGksIG5yLCBpZm51bSwgaXNvY19waXBlOworCWNoYXIgKnNwZWVkOworCWNoYXIgZGVzY3JbMjU1XSA9ICIiOworCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJaWZudW0gPSBpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJLyogQ2hlY2sgdG8gc2VlIG5leHQgZnJlZSBkZXZpY2UgYW5kIG1hcmsgYXMgdXNlZCAqLworCW5yID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZW0yOHh4X2RldnVzZWQsIEVNMjhYWF9NQVhCT0FSRFMpOworCWVtMjh4eF9kZXZ1c2VkIHw9IDE8PG5yOworCisJLyogRG9uJ3QgcmVnaXN0ZXIgYXVkaW8gaW50ZXJmYWNlcyAqLworCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPKSB7CisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBhdWRpbyBkZXZpY2UgKCUwNHg6JTA0eCk6ICIKKwkJCSJpbnRlcmZhY2UgJWksIGNsYXNzICVpXG4iLAorCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQlpZm51bSwKKwkJCWludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisKKwkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisKKwkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGhhcyB0aGUgaXNvIGluIGVuZHBvaW50IGF0IHRoZSBjb3JyZWN0IHBsYWNlICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZW5kcG9pbnQpCisJICAgICYmCisJICAgIChpbnRlcmZhY2UtPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSA9PSA5NDApKSB7CisJCS8qIEl0J3MgYSBuZXdlciBlbTI4NzQvZW0yODc1IGRldmljZSAqLworCQlpc29jX3BpcGUgPSAwOworCX0gZWxzZSB7CisJCWludCBjaGVja19pbnRlcmZhY2UgPSAxOworCQlpc29jX3BpcGUgPSAxOworCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOworCQlpZiAodXNiX2VuZHBvaW50X3R5cGUoZW5kcG9pbnQpICE9CisJCSAgICBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJY2hlY2tfaW50ZXJmYWNlID0gMDsKKworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpKQorCQkJY2hlY2tfaW50ZXJmYWNlID0gMDsKKworCQlpZiAoIWNoZWNrX2ludGVyZmFjZSkgeworCQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHZpZGVvIGRldmljZSAoJTA0eDolMDR4KTogIgorCQkJCSJpbnRlcmZhY2UgJWksIGNsYXNzICVpIGZvdW5kLlxuIiwKKwkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQkJaWZudW0sCisJCQkJaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKworCQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIFRoaXMgaXMgYW4gYW5jaWxpYXJ5ICIKKwkJCQkiaW50ZXJmYWNlIG5vdCB1c2VkIGJ5IHRoZSBkcml2ZXJcbiIpOworCisJCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PG5yKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJc3BlZWQgPSAiMS41IjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlzcGVlZCA9ICIxMiI7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXNwZWVkID0gIjQ4MCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWVkID0gInVua25vd24iOworCX0KKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmxjcHkoZGVzY3IsIHVkZXYtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKGRlc2NyKSk7CisKKwlpZiAodWRldi0+cHJvZHVjdCkgeworCQlpZiAoKmRlc2NyKQorCQkJc3RybGNhdChkZXNjciwgIiAiLCBzaXplb2YoZGVzY3IpKTsKKwkJc3RybGNhdChkZXNjciwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mKGRlc2NyKSk7CisJfQorCWlmICgqZGVzY3IpCisJCXN0cmxjYXQoZGVzY3IsICIgIiwgc2l6ZW9mKGRlc2NyKSk7CisKKwlwcmludGsoRFJJVkVSX05BTUUgIjogTmV3IGRldmljZSAlc0AgJXMgTWJwcyAiCisJCSIoJTA0eDolMDR4LCBpbnRlcmZhY2UgJWQsIGNsYXNzICVkKVxuIiwKKwkJZGVzY3IsCisJCXNwZWVkLAorCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQlpZm51bSwKKwkJaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJaWYgKG5yID49IEVNMjhYWF9NQVhCT0FSRFMpIHsKKwkJcHJpbnRrKERSSVZFUl9OQU1FICI6IFN1cHBvcnRzIG9ubHkgJWkgZW0yOHh4IGJvYXJkcy5cbiIsCisJCQkJRU0yOFhYX01BWEJPQVJEUyk7CisJCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8bnIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIjogb3V0IG9mIG1lbW9yeSFcbiIpOworCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PG5yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc25wcmludGYoZGV2LT5uYW1lLCAyOSwgImVtMjh4eCAjJWQiLCBucik7CisJZGV2LT5kZXZubyA9IG5yOworCWRldi0+bW9kZWwgPSBpZC0+ZHJpdmVyX2luZm87CisJZGV2LT5hbHQgICA9IC0xOworCisJLyogQ2hlY2tzIGlmIGF1ZGlvIGlzIHByb3ZpZGVkIGJ5IHNvbWUgaW50ZXJmYWNlICovCisJZm9yIChpID0gMDsgaSA8IHVkZXYtPmNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCXVpZiA9IHVkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlpZiAodWlmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19BVURJTykgeworCQkJZGV2LT5oYXNfYXVkaW9fY2xhc3MgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjb21wdXRlIGFsdGVybmF0ZSBtYXggcGFja2V0IHNpemVzICovCisJdWlmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF07CisKKwlkZXYtPm51bV9hbHQgPSB1aWYtPm51bV9hbHRzZXR0aW5nOworCWRldi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIgKiBkZXYtPm51bV9hbHQsIEdGUF9LRVJORUwpOworCisJaWYgKGRldi0+YWx0X21heF9wa3Rfc2l6ZSA9PSBOVUxMKSB7CisJCWVtMjh4eF9lcnJkZXYoIm91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9hbHQgOyBpKyspIHsKKwkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KHVpZi0+YWx0c2V0dGluZ1tpXS5lbmRwb2ludFtpc29jX3BpcGVdLmRlc2Mud01heFBhY2tldFNpemUpOworCQlkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPQorCQkgICAgKHRtcCAmIDB4MDdmZikgKiAoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOworCX0KKworCWlmICgoY2FyZFtucl0gPj0gMCkgJiYgKGNhcmRbbnJdIDwgZW0yOHh4X2Jjb3VudCkpCisJCWRldi0+bW9kZWwgPSBjYXJkW25yXTsKKworCS8qIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3QgKi8KKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmV0dmFsID0gZW0yOHh4X2luaXRfZGV2KCZkZXYsIHVkZXYsIG5yKTsKKwlpZiAocmV0dmFsKSB7CisJCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8ZGV2LT5kZXZubyk7CisJCWtmcmVlKGRldik7CisKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBpbnRlcmZhY2UgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwlyZXF1ZXN0X21vZHVsZXMoZGV2KTsKKworCS8qIFNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyB0byBkbywgdG8gYXZvaWQgbmV3ZXIgdWRldidzIHRvCisJICAgb3BlbiB0aGUgZGV2aWNlIGJlZm9yZSBmdWxseSBpbml0aWFsaXppbmcgaXQKKwkgKi8KKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF91c2JfZGlzY29ubmVjdCgpCisgKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGljb25lbmN0ZWQKKyAqIHZpZGVvIGRldmljZSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBvbiB2NGwyX2Nsb3NlIGluIGNhc2UgaXQgaXMgc3RpbGwgb3BlbgorICovCitzdGF0aWMgdm9pZCBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXY7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWVtMjh4eF9pbmZvKCJkaXNjb25uZWN0aW5nICVzXG4iLCBkZXYtPnZkZXYtPm5hbWUpOworCisJLyogd2FpdCB1bnRpbCBhbGwgY3VycmVudCB2NGwyIGlvIGlzIGZpbmlzaGVkIHRoZW4gZGVhbGxvY2F0ZQorCSAgIHJlc291cmNlcyAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPm9wZW4pOworCisJaWYgKGRldi0+dXNlcnMpIHsKKwkJZW0yOHh4X3dhcm4KKwkJICAgICgiZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKKwkJICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS5cbiIsCisJCQkJZGV2LT52ZGV2LT5udW0pOworCisJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RyZWFtKTsKKwl9IGVsc2UgeworCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOworCX0KKworCWVtMjh4eF9jbG9zZV9leHRlbnNpb24oZGV2KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICghZGV2LT51c2VycykgeworCQlrZnJlZShkZXYtPmFsdF9tYXhfcGt0X3NpemUpOworCQlrZnJlZShkZXYpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF91c2JfZHJpdmVyID0geworCS5uYW1lID0gImVtMjh4eCIsCisJLnByb2JlID0gZW0yOHh4X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGVtMjh4eF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBlbTI4eHhfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlbTI4eHhfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmZW0yOHh4X3VzYl9kcml2ZXIpOworCWlmIChyZXN1bHQpCisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUKKwkJCSAgICIgdXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkLlxuIiwgcmVzdWx0KTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiBkcml2ZXIgbG9hZGVkXG4iKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbTI4eHhfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmZW0yOHh4X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlbTI4eHhfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoZW0yOHh4X21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCmluZGV4IDE1ZTJiNTIuLmY4NTA0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAKQEAgLTY2LDcgKzY3LDggQEAKIGludCBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywKIAkJCQkgICBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0JaW50IHJldCwgYnl0ZTsKKwlpbnQgcmV0OworCWludCBwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCk7CiAKIAlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzQsMTAgKzc2LDE4IEBACiAJaWYgKGxlbiA+IFVSQl9NQVhfQ1RSTF9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVtMjh4eF9yZWdkYmcoInJlcT0lMDJ4LCByZWc9JTAyeCAiLCByZXEsIHJlZyk7CisJaWYgKHJlZ19kZWJ1ZykgeworCQlwcmludGsoIEtFUk5fREVCVUcgIihwaXBlIDB4JTA4eCk6ICIKKwkJCSJJTjogICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiLAorCQkJcGlwZSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJcmVxLCAwLCAwLAorCQkJcmVnICYgMHhmZiwgcmVnID4+IDgsCisJCQlsZW4gJiAweGZmLCBsZW4gPj4gOCk7CisJfQogCiAJbXV0ZXhfbG9jaygmZGV2LT5jdHJsX3VyYl9sb2NrKTsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgcmVxLAorCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHBpcGUsIHJlcSwKIAkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJICAgICAgMHgwMDAwLCByZWcsIGRldi0+dXJiX2J1ZiwgbGVuLCBIWik7CiAJaWYgKHJldCA8IDApIHsKQEAgLTkzLDcgKzEwMyw5IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmN0cmxfdXJiX2xvY2spOwogCiAJaWYgKHJlZ19kZWJ1ZykgewotCQlwcmludGsoIiUwMnggdmFsdWVzOiAiLCByZXQpOworCQlpbnQgYnl0ZTsKKworCQlwcmludGsoIjw8PCIpOwogCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbGVuOyBieXRlKyspCiAJCQlwcmludGsoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2J5dGVdKTsKIAkJcHJpbnRrKCJcbiIpOwpAQCAtMTA4LDI4ICsxMjAsMTIgQEAKICAqLwogaW50IGVtMjh4eF9yZWFkX3JlZ19yZXEoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcpCiB7Ci0JdTggdmFsOwogCWludCByZXQ7CisJdTggdmFsOwogCi0JaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQotCQlyZXR1cm4oLUVOT0RFVik7Ci0KLQllbTI4eHhfcmVnZGJnKCJyZXE9JTAyeCwgcmVnPSUwMng6IiwgcmVxLCByZWcpOwotCi0JbXV0ZXhfbG9jaygmZGV2LT5jdHJsX3VyYl9sb2NrKTsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgcmVxLAotCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICAweDAwMDAsIHJlZywgZGV2LT51cmJfYnVmLCAxLCBIWik7Ci0JdmFsID0gZGV2LT51cmJfYnVmWzBdOwotCW11dGV4X3VubG9jaygmZGV2LT5jdHJsX3VyYl9sb2NrKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiIGZhaWxlZCFcbiIpOworCXJldCA9IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKGRldiwgcmVxLCByZWcsICZ2YWwsIDEpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChyZWdfZGVidWcpCi0JCXByaW50aygiJTAyeFxuIiwgKHVuc2lnbmVkIGNoYXIpIHZhbCk7CiAKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTQ3LDYgKzE0Myw3IEBACiAJCQkJIGludCBsZW4pCiB7CiAJaW50IHJldDsKKwlpbnQgcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApOwogCiAJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE1NCwxNyArMTUxLDI1IEBACiAJaWYgKChsZW4gPCAxKSB8fCAobGVuID4gVVJCX01BWF9DVFJMX1NJWkUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVtMjh4eF9yZWdkYmcoInJlcT0lMDJ4IHJlZz0lMDJ4OiIsIHJlcSwgcmVnKTsKIAlpZiAocmVnX2RlYnVnKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0JCQlwcmludGsoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2ldKTsKKwkJaW50IGJ5dGU7CisKKwkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCQkiT1VUOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggPj4+IiwKKwkJCXBpcGUsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQlyZXEsIDAsIDAsCisJCQlyZWcgJiAweGZmLCByZWcgPj4gOCwKKwkJCWxlbiAmIDB4ZmYsIGxlbiA+PiA4KTsKKworCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbGVuOyBieXRlKyspCisJCQlwcmludGsoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2J5dGVdKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAogCW11dGV4X2xvY2soJmRldi0+Y3RybF91cmJfbG9jayk7CiAJbWVtY3B5KGRldi0+dXJiX2J1ZiwgYnVmLCBsZW4pOwotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLCByZXEsCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgcGlwZSwgcmVxLAogCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJICAgICAgMHgwMDAwLCByZWcsIGRldi0+dXJiX2J1ZiwgbGVuLCBIWik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmN0cmxfdXJiX2xvY2spOwpAQCAtMTg3LDE1ICsxOTIsMjEgQEAKIAkgICBOb3Qgc3VyZSB3aGF0IGhhcHBlbnMgb24gcmVhZGluZyBHUE8gcmVnaXN0ZXIuCiAJICovCiAJaWYgKHJjID49IDApIHsKLQkJaWYgKHJlZyA9PSBFTTI4ODBfUjA0X0dQTykKKwkJaWYgKHJlZyA9PSBkZXYtPnJlZ19ncG9fbnVtKQogCQkJZGV2LT5yZWdfZ3BvID0gYnVmWzBdOwotCQllbHNlIGlmIChyZWcgPT0gRU0yOFhYX1IwOF9HUElPKQorCQllbHNlIGlmIChyZWcgPT0gZGV2LT5yZWdfZ3Bpb19udW0pCiAJCQlkZXYtPnJlZ19ncGlvID0gYnVmWzBdOwogCX0KIAogCXJldHVybiByYzsKIH0KIAorLyogV3JpdGUgYSBzaW5nbGUgcmVnaXN0ZXIgKi8KK2ludCBlbTI4eHhfd3JpdGVfcmVnKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsKQoreworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIHJlZywgJnZhbCwgMSk7Cit9CisKIC8qCiAgKiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoKQogICogc2V0cyBvbmx5IHNvbWUgYml0cyAoc3BlY2lmaWVkIGJ5IGJpdG1hc2spIG9mIGEgcmVnaXN0ZXIsIGJ5IGZpcnN0IHJlYWRpbmcKQEAgLTIwOCw5ICsyMTksOSBAQAogCXU4IG5ld3ZhbDsKIAogCS8qIFVzZXMgY2FjaGUgZm9yIGdwby9ncGlvIHJlZ2lzdGVycyAqLwotCWlmIChyZWcgPT0gRU0yODgwX1IwNF9HUE8pCisJaWYgKHJlZyA9PSBkZXYtPnJlZ19ncG9fbnVtKQogCQlvbGR2YWwgPSBkZXYtPnJlZ19ncG87Ci0JZWxzZSBpZiAocmVnID09IEVNMjhYWF9SMDhfR1BJTykKKwllbHNlIGlmIChyZWcgPT0gZGV2LT5yZWdfZ3Bpb19udW0pCiAJCW9sZHZhbCA9IGRldi0+cmVnX2dwaW87CiAJZWxzZQogCQlvbGR2YWwgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCByZWcpOwpAQCAtMjI0LDE1ICsyMzUsMzggQEAKIH0KIAogLyoKLSAqIGVtMjh4eF93cml0ZV9hYzk3KCkKLSAqIHdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgQUM5NyBhZGRyZXNzIChMU0IgZmlyc3QhKQorICogZW0yOHh4X2lzX2FjOTdfcmVhZHkoKQorICogQ2hlY2tzIGlmIGFjOTcgaXMgcmVhZHkKICAqLwotc3RhdGljIGludCBlbTI4eHhfd3JpdGVfYWM5NyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlZywgdTggKnZhbCkKK3N0YXRpYyBpbnQgZW0yOHh4X2lzX2FjOTdfcmVhZHkoc3RydWN0IGVtMjh4eCAqZGV2KQogewogCWludCByZXQsIGk7Ci0JdTggYWRkciA9IHJlZyAmIDB4N2Y7CiAKLQlyZXQgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SNDBfQUM5N0xTQiwgdmFsLCAyKTsKKwkvKiBXYWl0IHVwIHRvIDUwIG1zIGZvciBBQzk3IGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKywgbXNsZWVwKDUpKSB7CisJCXJldCA9IGVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SNDNfQUM5N0JVU1kpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCEocmV0ICYgMHgwMSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwllbTI4eHhfd2FybigiQUM5NyBjb21tYW5kIHN0aWxsIGJlaW5nIGV4ZWN1dGVkOiBub3QgaGFuZGxlZCBwcm9wZXJseSFcbiIpOworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKiBlbTI4eHhfcmVhZF9hYzk3KCkKKyAqIHdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgQUM5NyBhZGRyZXNzIChMU0IgZmlyc3QhKQorICovCitpbnQgZW0yOHh4X3JlYWRfYWM5NyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGFkZHIgPSAocmVnICYgMHg3ZikgfCAweDgwOworCXUxNiB2YWw7CisKKwlyZXQgPSBlbTI4eHhfaXNfYWM5N19yZWFkeShkZXYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNDAsNTggKzI3NCwxMDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFdhaXQgdXAgdG8gNTAgbXMgZm9yIEFDOTcgY29tbWFuZCB0byBjb21wbGV0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXJldCA9IGVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SNDNfQUM5N0JVU1kpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihkZXYsIDAsIEVNMjhYWF9SNDBfQUM5N0xTQiwKKwkJCQkJICAgKHU4ICopJnZhbCwgc2l6ZW9mKHZhbCkpOwogCi0JCWlmICghKHJldCAmIDB4MDEpKQotCQkJcmV0dXJuIDA7Ci0JCW1zbGVlcCg1KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKK30KKworLyoKKyAqIGVtMjh4eF93cml0ZV9hYzk3KCkKKyAqIHdyaXRlIGEgMTYgYml0IHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgQUM5NyBhZGRyZXNzIChMU0IgZmlyc3QhKQorICovCitpbnQgZW0yOHh4X3dyaXRlX2FjOTcoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZWcsIHUxNiB2YWwpCit7CisJaW50IHJldDsKKwl1OCBhZGRyID0gcmVnICYgMHg3ZjsKKwlfX2xlMTYgdmFsdWU7CisKKwl2YWx1ZSA9IGNwdV90b19sZTE2KHZhbCk7CisKKwlyZXQgPSBlbTI4eHhfaXNfYWM5N19yZWFkeShkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjQwX0FDOTdMU0IsICh1OCAqKSAmdmFsdWUsIDIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjQyX0FDOTdBRERSLCAmYWRkciwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGVtMjh4eF92b2xfdGFibGUgeworCWVudW0gZW0yOHh4X2FtdXggbXV4OworCXU4CQkgcmVnOworfTsKKworc3RhdGljIHN0cnVjdCBlbTI4eHhfdm9sX3RhYmxlIGlucHV0c1tdID0geworCXsgRU0yOFhYX0FNVVhfVklERU8sIAlBQzk3X1ZJREVPX1ZPTCAgIH0sCisJeyBFTTI4WFhfQU1VWF9MSU5FX0lOLAlBQzk3X0xJTkVJTl9WT0wgIH0sCisJeyBFTTI4WFhfQU1VWF9QSE9ORSwJQUM5N19QSE9ORV9WT0wgICB9LAorCXsgRU0yOFhYX0FNVVhfTUlDLAlBQzk3X01JQ19WT0wgICAgIH0sCisJeyBFTTI4WFhfQU1VWF9DRCwJQUM5N19DRF9WT0wgICAgICB9LAorCXsgRU0yOFhYX0FNVVhfQVVYLAlBQzk3X0FVWF9WT0wgICAgIH0sCisJeyBFTTI4WFhfQU1VWF9QQ01fT1VULAlBQzk3X1BDTV9PVVRfVk9MIH0sCit9OworCitzdGF0aWMgaW50IHNldF9hYzk3X2lucHV0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgcmV0LCBpOworCWVudW0gZW0yOHh4X2FtdXggYW11eCA9IGRldi0+Y3RsX2FpbnB1dDsKKworCS8qIEVNMjhYWF9BTVVYX1ZJREVPMiBpcyBhIHNwZWNpYWwgY2FzZSB1c2VkIHRvIGluZGljYXRlIHRoYXQKKwkgICBlbTI4eHggc2hvdWxkIHBvaW50IHRvIExJTkUgSU4sIHdoaWxlIEFDOTcgc2hvdWxkIHVzZSBWSURFTworCSAqLworCWlmIChhbXV4ID09IEVNMjhYWF9BTVVYX1ZJREVPMikKKwkJYW11eCA9IEVNMjhYWF9BTVVYX1ZJREVPOworCisJLyogTXV0ZSBhbGwgZW50cmVzIGJ1dCB0aGUgb25lIHRoYXQgd2VyZSBzZWxlY3RlZCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlucHV0cyk7IGkrKykgeworCQlpZiAoYW11eCA9PSBpbnB1dHNbaV0ubXV4KQorCQkJcmV0ID0gZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBpbnB1dHNbaV0ucmVnLCAweDA4MDgpOworCQllbHNlCisJCQlyZXQgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIGlucHV0c1tpXS5yZWcsIDB4ODAwMCk7CisKKwkJaWYgKHJldCA8IDApCisJCQllbTI4eHhfd2FybigiY291bGRuJ3Qgc2V0dXAgQUM5NyByZWdpc3RlciAlZFxuIiwKKwkJCQkgICAgIGlucHV0c1tpXS5yZWcpOwogCX0KLQllbTI4eHhfd2FybigiQUM5NyBjb21tYW5kIHN0aWxsIGJlaW5nIGV4ZWN1dGVkOiBub3QgaGFuZGxlZCBwcm9wZXJseSFcbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVtMjh4eF9zZXRfYXVkaW9fc291cmNlKHN0cnVjdCBlbTI4eHggKmRldikKIHsKLQlzdGF0aWMgY2hhciAqZW5hYmxlICA9ICJceDA4XHgwOCI7Ci0Jc3RhdGljIGNoYXIgKmRpc2FibGUgPSAiXHgwOFx4ODgiOwotCWNoYXIgKnZpZGVvID0gZW5hYmxlLCAqbGluZSA9IGRpc2FibGU7CiAJaW50IHJldDsKIAl1OCBpbnB1dDsKIAotCWlmIChkZXYtPmlzX2VtMjgwMCkgewotCQlpZiAoZGV2LT5jdGxfYWlucHV0KQotCQkJaW5wdXQgPSBFTTI4MDBfQVVESU9fU1JDX0xJTkU7Ci0JCWVsc2UKKwlpZiAoZGV2LT5ib2FyZC5pc19lbTI4MDApIHsKKwkJaWYgKGRldi0+Y3RsX2FpbnB1dCA9PSBFTTI4WFhfQU1VWF9WSURFTykKIAkJCWlucHV0ID0gRU0yODAwX0FVRElPX1NSQ19UVU5FUjsKKwkJZWxzZQorCQkJaW5wdXQgPSBFTTI4MDBfQVVESU9fU1JDX0xJTkU7CiAKIAkJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4MDBfUjA4X0FVRElPU1JDLCAmaW5wdXQsIDEpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGRldi0+aGFzX21zcDM0eHgpCisJaWYgKGRldi0+Ym9hcmQuaGFzX21zcDM0eHgpCiAJCWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKIAllbHNlIHsKIAkJc3dpdGNoIChkZXYtPmN0bF9haW5wdXQpIHsKIAkJY2FzZSBFTTI4WFhfQU1VWF9WSURFTzoKIAkJCWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKIAkJCWJyZWFrOwotCQljYXNlIEVNMjhYWF9BTVVYX0xJTkVfSU46CisJCWRlZmF1bHQ6CiAJCQlpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfTElORTsKLQkJCXZpZGVvID0gZGlzYWJsZTsKLQkJCWxpbmUgID0gZW5hYmxlOwotCQkJYnJlYWs7Ci0JCWNhc2UgRU0yOFhYX0FNVVhfQUM5N19WSURFTzoKLQkJCWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19MSU5FOwotCQkJYnJlYWs7Ci0JCWNhc2UgRU0yOFhYX0FNVVhfQUM5N19MSU5FX0lOOgotCQkJaW5wdXQgPSBFTTI4WFhfQVVESU9fU1JDX0xJTkU7Ci0JCQl2aWRlbyA9IGRpc2FibGU7Ci0JCQlsaW5lICA9IGVuYWJsZTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzAxLDQxICszODMsNTAgQEAKIAkJcmV0dXJuIHJldDsKIAltc2xlZXAoNSk7CiAKLQkvKiBTZXRzIEFDOTcgbWl4ZXIgcmVnaXN0ZXJzCi0JICAgVGhpcyBpcyBzZWVtcyB0byBiZSBuZWVkZWQsIGV2ZW4gZm9yIG5vbi1hYzk3IGNvbmZpZ3MKLQkgKi8KLQlyZXQgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIEVNMjhYWF9SMTRfVklERU9fQUM5NywgdmlkZW8pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBFTTI4WFhfUjEwX0xJTkVfSU5fQUM5NywgbGluZSk7CisJc3dpdGNoIChkZXYtPmF1ZGlvX21vZGUuYWM5NykgeworCWNhc2UgRU0yOFhYX05PX0FDOTc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IHNldF9hYzk3X2lucHV0KGRldik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGVtMjh4eF92b2xfdGFibGUgb3V0cHV0c1tdID0geworCXsgRU0yOFhYX0FPVVRfTUFTVEVSLCBBQzk3X01BU1RFUl9WT0wgICAgICB9LAorCXsgRU0yOFhYX0FPVVRfTElORSwgICBBQzk3X0xJTkVfTEVWRUxfVk9MICB9LAorCXsgRU0yOFhYX0FPVVRfTU9OTywgICBBQzk3X01BU1RFUl9NT05PX1ZPTCB9LAorCXsgRU0yOFhYX0FPVVRfTEZFLCAgICBBQzk3X0xGRV9NQVNURVJfVk9MICB9LAorCXsgRU0yOFhYX0FPVVRfU1VSUiwgICBBQzk3X1NVUlJfTUFTVEVSX1ZPTCB9LAorfTsKKwogaW50IGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KHN0cnVjdCBlbTI4eHggKmRldikKIHsKLQlpbnQgcmV0OwotCWNoYXIgc1syXSA9IHsgMHgwMCwgMHgwMCB9OwotCXU4IHhjbGsgPSAweDA3OworCWludCByZXQsIGk7CisJdTggeGNsazsKIAotCXNbMF0gfD0gMHgxZiAtIGRldi0+dm9sdW1lOwotCXNbMV0gfD0gMHgxZiAtIGRldi0+dm9sdW1lOworCWlmICghZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbykKKwkJcmV0dXJuIDA7CiAKLQkvKiBNdXRlICovCi0Jc1sxXSB8PSAweDgwOwotCXJldCA9IGVtMjh4eF93cml0ZV9hYzk3KGRldiwgRU0yOFhYX1IwMl9NQVNURVJfQUM5Nywgcyk7CisJLyogSXQgaXMgYXNzdW1lZCB0aGF0IGFsbCBkZXZpY2VzIHVzZSBtYXN0ZXIgdm9sdW1lIGZvciBvdXRwdXQuCisJICAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gdXNlIGFsc28gbGluZSBvdXRwdXQuCisJICovCisJaWYgKGRldi0+YXVkaW9fbW9kZS5hYzk3ICE9IEVNMjhYWF9OT19BQzk3KSB7CisJCS8qIE11dGUgYWxsIG91dHB1dHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3V0cHV0cyk7IGkrKykgeworCQkJcmV0ID0gZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBvdXRwdXRzW2ldLnJlZywgMHg4MDAwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWVtMjh4eF93YXJuKCJjb3VsZG4ndCBzZXR1cCBBQzk3IHJlZ2lzdGVyICVkXG4iLAorCQkJCSAgICAgb3V0cHV0c1tpXS5yZWcpOworCQl9CisJfQogCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoZGV2LT5oYXNfMTJtaHpfaTJzKQotCQl4Y2xrIHw9IDB4MjA7Ci0KKwl4Y2xrID0gZGV2LT5ib2FyZC54Y2xrICYgMHg3ZjsKIAlpZiAoIWRldi0+bXV0ZSkKIAkJeGNsayB8PSAweDgwOwogCi0JcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCB4Y2xrLCAweGE3KTsKKwlyZXQgPSBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCB4Y2xrKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAltc2xlZXAoMTApOwpAQCAtMzQzLDM2ICs0MzQsMTY5IEBACiAJLyogU2VsZWN0cyB0aGUgcHJvcGVyIGF1ZGlvIGlucHV0ICovCiAJcmV0ID0gZW0yOHh4X3NldF9hdWRpb19zb3VyY2UoZGV2KTsKIAotCS8qIFVubXV0ZSBkZXZpY2UgKi8KLQlpZiAoIWRldi0+bXV0ZSkKLQkJc1sxXSAmPSB+MHg4MDsKLQlyZXQgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIEVNMjhYWF9SMDJfTUFTVEVSX0FDOTcsIHMpOworCS8qIFNldHMgdm9sdW1lICovCisJaWYgKGRldi0+YXVkaW9fbW9kZS5hYzk3ICE9IEVNMjhYWF9OT19BQzk3KSB7CisJCWludCB2b2w7CisKKwkJLyogTFNCOiBsZWZ0IGNoYW5uZWwgLSBib3RoIGNoYW5uZWxzIHdpdGggdGhlIHNhbWUgbGV2ZWwgKi8KKwkJdm9sID0gKDB4MWYgLSBkZXYtPnZvbHVtZSkgfCAoKDB4MWYgLSBkZXYtPnZvbHVtZSkgPDwgOCk7CisKKwkJLyogTXV0ZSBkZXZpY2UsIGlmIG5lZWRlZCAqLworCQlpZiAoZGV2LT5tdXRlKQorCQkJdm9sIHw9IDB4ODAwMDsKKworCQkvKiBTZXRzIHZvbHVtZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdXRwdXRzKTsgaSsrKSB7CisJCQlpZiAoZGV2LT5jdGxfYW91dHB1dCAmIG91dHB1dHNbaV0ubXV4KQorCQkJCXJldCA9IGVtMjh4eF93cml0ZV9hYzk3KGRldiwgb3V0cHV0c1tpXS5yZWcsCisJCQkJCQkJdm9sKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWVtMjh4eF93YXJuKCJjb3VsZG4ndCBzZXR1cCBBQzk3IHJlZ2lzdGVyICVkXG4iLAorCQkJCSAgICAgb3V0cHV0c1tpXS5yZWcpOworCQl9CisJfQogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KTsKIAoraW50IGVtMjh4eF9hdWRpb19zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaW50IHZpZDEsIHZpZDIsIGZlYXQsIGNmZzsKKwl1MzIgdmlkOworCisJaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg3MCB8fCBkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NzQpIHsKKwkJLyogRGlnaXRhbCBvbmx5IGRldmljZSAtIGRvbid0IGxvYWQgYW55IGFsc2EgbW9kdWxlICovCisJCWRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8gPSAwOworCQlkZXYtPmhhc19hdWRpb19jbGFzcyA9IDA7CisJCWRldi0+aGFzX2Fsc2FfYXVkaW8gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFVzYiBBdWRpbyBDbGFzcywgdXNlIHZlbmRvciBjbGFzcyAqLworCWlmICghZGV2LT5oYXNfYXVkaW9fY2xhc3MpCisJCWRldi0+aGFzX2Fsc2FfYXVkaW8gPSAxOworCisJZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbyA9IDE7CisKKwkvKiBTZWUgaG93IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgKi8KKwljZmcgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjAwX0NISVBDRkcpOworCWlmIChjZmcgPCAwKQorCQljZmcgPSBFTTI4WFhfQ0hJUENGR19BQzk3OyAvKiBCZSBjb25zZXJ2YXRpdmUgKi8KKwllbHNlCisJCWVtMjh4eF9pbmZvKCJDb25maWcgcmVnaXN0ZXIgcmF3IGRhdGE6IDB4JTAyeFxuIiwgY2ZnKTsKKworCWlmICgoY2ZnICYgRU0yOFhYX0NISVBDRkdfQVVESU9NQVNLKSA9PQorCQkgICAgRU0yOFhYX0NISVBDRkdfSTJTXzNfU0FNUFJBVEVTKSB7CisJCWVtMjh4eF9pbmZvKCJJMlMgQXVkaW8gKDMgc2FtcGxlIHJhdGVzKVxuIik7CisJCWRldi0+YXVkaW9fbW9kZS5pMnNfM3JhdGVzID0gMTsKKwl9CisJaWYgKChjZmcgJiBFTTI4WFhfQ0hJUENGR19BVURJT01BU0spID09CisJCSAgICBFTTI4WFhfQ0hJUENGR19JMlNfNV9TQU1QUkFURVMpIHsKKwkJZW0yOHh4X2luZm8oIkkyUyBBdWRpbyAoNSBzYW1wbGUgcmF0ZXMpXG4iKTsKKwkJZGV2LT5hdWRpb19tb2RlLmkyc181cmF0ZXMgPSAxOworCX0KKworCWlmICgoY2ZnICYgRU0yOFhYX0NISVBDRkdfQVVESU9NQVNLKSAhPSBFTTI4WFhfQ0hJUENGR19BQzk3KSB7CisJCS8qIFNraXAgdGhlIGNvZGUgdGhhdCBkb2VzIEFDOTcgdmVuZG9yIGRldGVjdGlvbiAqLworCQlkZXYtPmF1ZGlvX21vZGUuYWM5NyA9IEVNMjhYWF9OT19BQzk3OworCQlnb3RvIGluaXRfYXVkaW87CisJfQorCisJZGV2LT5hdWRpb19tb2RlLmFjOTcgPSBFTTI4WFhfQUM5N19PVEhFUjsKKworCXZpZDEgPSBlbTI4eHhfcmVhZF9hYzk3KGRldiwgQUM5N19WRU5ET1JfSUQxKTsKKwlpZiAodmlkMSA8IDApIHsKKwkJLyogRGV2aWNlIGxpa2VseSBkb2Vzbid0IHN1cHBvcnQgQUM5NyAqLworCQllbTI4eHhfd2FybigiQUM5NyBjaGlwIHR5cGUgY291bGRuJ3QgYmUgZGV0ZXJtaW5lZFxuIik7CisJCWdvdG8gaW5pdF9hdWRpbzsKKwl9CisKKwl2aWQyID0gZW0yOHh4X3JlYWRfYWM5NyhkZXYsIEFDOTdfVkVORE9SX0lEMik7CisJaWYgKHZpZDIgPCAwKQorCQlnb3RvIGluaXRfYXVkaW87CisKKwl2aWQgPSB2aWQxIDw8IDE2IHwgdmlkMjsKKworCWRldi0+YXVkaW9fbW9kZS5hYzk3X3ZlbmRvcl9pZCA9IHZpZDsKKwllbTI4eHhfd2FybigiQUM5NyB2ZW5kb3IgSUQgPSAweCUwOHhcbiIsIHZpZCk7CisKKwlmZWF0ID0gZW0yOHh4X3JlYWRfYWM5NyhkZXYsIEFDOTdfUkVTRVQpOworCWlmIChmZWF0IDwgMCkKKwkJZ290byBpbml0X2F1ZGlvOworCisJZGV2LT5hdWRpb19tb2RlLmFjOTdfZmVhdCA9IGZlYXQ7CisJZW0yOHh4X3dhcm4oIkFDOTcgZmVhdHVyZXMgPSAweCUwNHhcbiIsIGZlYXQpOworCisJLyogVHJ5IHRvIGlkZW50aWZ5IHdoYXQgYXVkaW8gcHJvY2Vzc29yIHdlIGhhdmUgKi8KKwlpZiAoKHZpZCA9PSAweGZmZmZmZmZmKSAmJiAoZmVhdCA9PSAweDZhOTApKQorCQlkZXYtPmF1ZGlvX21vZGUuYWM5NyA9IEVNMjhYWF9BQzk3X0VNMjAyOworCWVsc2UgaWYgKCh2aWQgPj4gOCkgPT0gMHg4Mzg0NzYpCisJCWRldi0+YXVkaW9fbW9kZS5hYzk3ID0gRU0yOFhYX0FDOTdfU0lHTUFURUw7CisKK2luaXRfYXVkaW86CisJLyogUmVwb3J0cyBkZXRlY3RlZCBBQzk3IHByb2Nlc3NvciAqLworCXN3aXRjaCAoZGV2LT5hdWRpb19tb2RlLmFjOTcpIHsKKwljYXNlIEVNMjhYWF9OT19BQzk3OgorCQllbTI4eHhfaW5mbygiTm8gQUM5NyBhdWRpbyBwcm9jZXNzb3JcbiIpOworCQlicmVhazsKKwljYXNlIEVNMjhYWF9BQzk3X0VNMjAyOgorCQllbTI4eHhfaW5mbygiRW1waWEgMjAyIEFDOTcgYXVkaW8gcHJvY2Vzc29yIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfQUM5N19TSUdNQVRFTDoKKwkJZW0yOHh4X2luZm8oIlNpZ21hdGVsIGF1ZGlvIHByb2Nlc3NvciBkZXRlY3RlZChzdGFjIDk3JTAyeClcbiIsCisJCQkgICAgZGV2LT5hdWRpb19tb2RlLmFjOTdfdmVuZG9yX2lkICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FDOTdfT1RIRVI6CisJCWVtMjh4eF93YXJuKCJVbmtub3duIEFDOTcgYXVkaW8gcHJvY2Vzc29yIGRldGVjdGVkIVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X2F1ZGlvX3NldHVwKTsKKwogaW50IGVtMjh4eF9jb2xvcmxldmVsc19zZXRfZGVmYXVsdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7Ci0JZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjIwX1lHQUlOLCAiXHgxMCIsIDEpOwkvKiBjb250cmFzdCAqLwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IyMV9ZT0ZGU0VULCAiXHgwMCIsIDEpOwkvKiBicmlnaHRuZXNzICovCi0JZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjIyX1VWR0FJTiwgIlx4MTAiLCAxKTsJLyogc2F0dXJhdGlvbiAqLwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IyM19VT0ZGU0VULCAiXHgwMCIsIDEpOwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IyNF9WT0ZGU0VULCAiXHgwMCIsIDEpOwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IyNV9TSEFSUE5FU1MsICJceDAwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMjBfWUdBSU4sIDB4MTApOwkvKiBjb250cmFzdCAqLworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjIxX1lPRkZTRVQsIDB4MDApOwkvKiBicmlnaHRuZXNzICovCisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMjJfVVZHQUlOLCAweDEwKTsJLyogc2F0dXJhdGlvbiAqLworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjIzX1VPRkZTRVQsIDB4MDApOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjI0X1ZPRkZTRVQsIDB4MDApOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjI1X1NIQVJQTkVTUywgMHgwMCk7CiAKLQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMTRfR0FNTUEsICJceDIwIiwgMSk7Ci0JZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjE1X1JHQUlOLCAiXHgyMCIsIDEpOwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IxNl9HR0FJTiwgIlx4MjAiLCAxKTsKLQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMTdfQkdBSU4sICJceDIwIiwgMSk7Ci0JZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjE4X1JPRkZTRVQsICJceDAwIiwgMSk7Ci0JZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjE5X0dPRkZTRVQsICJceDAwIiwgMSk7Ci0JcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IxQV9CT0ZGU0VULCAiXHgwMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjE0X0dBTU1BLCAweDIwKTsKKwllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxNV9SR0FJTiwgMHgyMCk7CisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTZfR0dBSU4sIDB4MjApOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjE3X0JHQUlOLCAweDIwKTsKKwllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxOF9ST0ZGU0VULCAweDAwKTsKKwllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxOV9HT0ZGU0VULCAweDAwKTsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMUFfQk9GRlNFVCwgMHgwMCk7CiB9CiAKIGludCBlbTI4eHhfY2FwdHVyZV9zdGFydChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBzdGFydCkKIHsKIAlpbnQgcmM7CisKKwlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODc0KSB7CisJCS8qIFRoZSBUcmFuc3BvcnQgU3RyZWFtIEVuYWJsZSBSZWdpc3RlciBtb3ZlZCBpbiBlbTI4NzQgKi8KKwkJaWYgKCFzdGFydCkgeworCQkJcmMgPSBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4NzRfUjVGX1RTX0VOQUJMRSwKKwkJCQkJCSAgIDB4MDAsCisJCQkJCQkgICBFTTI4NzRfVFMxX0NBUFRVUkVfRU5BQkxFKTsKKwkJCXJldHVybiByYzsKKwkJfQorCisJCS8qIEVuYWJsZSBUcmFuc3BvcnQgU3RyZWFtICovCisJCXJjID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yODc0X1I1Rl9UU19FTkFCTEUsCisJCQkJCSAgIEVNMjg3NF9UUzFfQ0FQVFVSRV9FTkFCTEUsCisJCQkJCSAgIEVNMjg3NF9UUzFfQ0FQVFVSRV9FTkFCTEUpOworCQlyZXR1cm4gcmM7CisJfQorCisKIAkvKiBGSVhNRTogd2hpY2ggaXMgdGhlIGJlc3Qgb3JkZXI/ICovCiAJLyogdmlkZW8gcmVnaXN0ZXJzIGFyZSBzYW1wbGVkIGJ5IFZSRUYgKi8KIAlyYyA9IGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIEVNMjhYWF9SMENfVVNCU1VTUCwKQEAgLTM4MiwyOCArNjA2LDM3IEBACiAKIAlpZiAoIXN0YXJ0KSB7CiAJCS8qIGRpc2FibGUgdmlkZW8gY2FwdHVyZSAqLwotCQlyYyA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IxMl9WSU5FTkFCTEUsICJceDI3IiwgMSk7CisJCXJjID0gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTJfVklORU5BQkxFLCAweDI3KTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIGVuYWJsZSB2aWRlbyBjYXB0dXJlICovCi0JcmMgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDQ4LCAiXHgwMCIsIDEpOworCXJjID0gZW0yOHh4X3dyaXRlX3JlZyhkZXYsIDB4NDgsIDB4MDApOwogCiAJaWYgKGRldi0+bW9kZSA9PSBFTTI4WFhfQU5BTE9HX01PREUpCi0JCXJjID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjEyX1ZJTkVOQUJMRSwgIlx4NjciLCAxKTsKKwkJcmMgPSBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMl9WSU5FTkFCTEUsIDB4NjcpOwogCWVsc2UKLQkJcmMgPSBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMTJfVklORU5BQkxFLCAiXHgzNyIsIDEpOworCQlyYyA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjEyX1ZJTkVOQUJMRSwgMHgzNyk7CiAKIAltc2xlZXAoNik7CiAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBlbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoc3RydWN0IGVtMjh4eCAqZGV2KQoraW50IGVtMjh4eF9zZXRfb3V0Zm10KHN0cnVjdCBlbTI4eHggKmRldikKIHsKLQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMjdfT1VURk1ULCAiXHgzNCIsIDEpOwotCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IxMF9WSU5NT0RFLCAiXHgxMCIsIDEpOwotCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgIlx4MTEiLCAxKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IyN19PVVRGTVQsCisJCQkJICAgIGRldi0+Zm9ybWF0LT5yZWcgfCAweDIwLCAweDNmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjEwX1ZJTk1PREUsIDB4MTApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIDB4MTEpOwogfQogCiBzdGF0aWMgaW50IGVtMjh4eF9hY2N1bXVsYXRvcl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCB4bWluLCB1OCB4bWF4LApAQCAtNDQwLDcgKzY3Myw3IEBACiB7CiAJdTggbW9kZTsKIAkvKiB0aGUgZW0yODAwIHNjYWxlciBvbmx5IHN1cHBvcnRzIHNjYWxpbmcgZG93biB0byA1MCUgKi8KLQlpZiAoZGV2LT5pc19lbTI4MDApCisJaWYgKGRldi0+Ym9hcmQuaXNfZW0yODAwKQogCQltb2RlID0gKHYgPyAweDIwIDogMHgwMCkgfCAoaCA/IDB4MTAgOiAweDAwKTsKIAllbHNlIHsKIAkJdTggYnVmWzJdOwpAQCAtNDY0LDcgKzY5Nyw3IEBACiAJd2lkdGggPSBub3JtX21heHcoZGV2KTsKIAloZWlnaHQgPSBub3JtX21heGgoZGV2KSA+PiAxOwogCi0JZW0yOHh4X291dGZtdF9zZXRfeXV2NDIyKGRldik7CisJZW0yOHh4X3NldF9vdXRmbXQoZGV2KTsKIAllbTI4eHhfYWNjdW11bGF0b3Jfc2V0KGRldiwgMSwgKHdpZHRoIC0gNCkgPj4gMiwgMSwgKGhlaWdodCAtIDQpID4+IDIpOwogCWVtMjh4eF9jYXB0dXJlX2FyZWFfc2V0KGRldiwgMCwgMCwgd2lkdGggPj4gMiwgaGVpZ2h0ID4+IDIpOwogCXJldHVybiBlbTI4eHhfc2NhbGVyX3NldChkZXYsIGRldi0+aHNjYWxlLCBkZXYtPnZzY2FsZSk7CkBAIC01MTksMTIgKzc1MiwxNCBAQAogCWlmICghZ3BpbykKIAkJcmV0dXJuIHJjOwogCi0JZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDQ4LCAiXHgwMCIsIDEpOwotCWlmIChkZXYtPm1vZGUgPT0gRU0yOFhYX0FOQUxPR19NT0RFKQotCQlkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MTIsICJceDY3IiwgMSk7Ci0JZWxzZQotCQlkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MTIsICJceDM3IiwgMSk7Ci0JbXNsZWVwKDYpOworCWlmIChkZXYtPm1vZGUgIT0gRU0yOFhYX1NVU1BFTkQpIHsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIDB4NDgsIDB4MDApOworCQlpZiAoZGV2LT5tb2RlID09IEVNMjhYWF9BTkFMT0dfTU9ERSkKKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjEyX1ZJTkVOQUJMRSwgMHg2Nyk7CisJCWVsc2UKKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjEyX1ZJTkVOQUJMRSwgMHgzNyk7CisJCW1zbGVlcCg2KTsKKwl9CiAKIAkvKiBTZW5kIEdQSU8gcmVzZXQgc2VxdWVuY2VzIHNwZWNpZmllZCBhdCBib2FyZCBlbnRyeSAqLwogCXdoaWxlIChncGlvLT5zbGVlcCA+PSAwKSB7CkBAIC01NDksMTcgKzc4NCwyMCBAQAogCWlmIChkZXYtPm1vZGUgPT0gc2V0X21vZGUpCiAJCXJldHVybiAwOwogCi0JaWYgKHNldF9tb2RlID09IEVNMjhYWF9NT0RFX1VOREVGSU5FRCkgeworCWlmIChzZXRfbW9kZSA9PSBFTTI4WFhfU1VTUEVORCkgewogCQlkZXYtPm1vZGUgPSBzZXRfbW9kZTsKLQkJcmV0dXJuIDA7CisKKwkJLyogRklYTUU6IGFkZCBzdXNwZW5kIHN1cHBvcnQgZm9yIGFjOTcgKi8KKworCQlyZXR1cm4gZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC5zdXNwZW5kX2dwaW8pOwogCX0KIAogCWRldi0+bW9kZSA9IHNldF9tb2RlOwogCiAJaWYgKGRldi0+bW9kZSA9PSBFTTI4WFhfRElHSVRBTF9NT0RFKQotCQlyZXR1cm4gZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5kaWdpdGFsX2dwaW8pOworCQlyZXR1cm4gZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC5kdmJfZ3Bpbyk7CiAJZWxzZQotCQlyZXR1cm4gZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5hbmFsb2dfZ3Bpbyk7CisJCXJldHVybiBlbTI4eHhfZ3Bpb19zZXQoZGV2LCBJTlBVVChkZXYtPmN0bF9pbnB1dCktPmdwaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X3NldF9tb2RlKTsKIApAQCAtNzM4LDMgKzk3NiwxNDUgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVtMjh4eF9pbml0X2lzb2MpOworCisvKgorICogZW0yOHh4X3dha2VfaTJjKCkKKyAqIGNvbmZpZ3VyZSBpMmMgYXR0YWNoZWQgZGV2aWNlcworICovCit2b2lkIGVtMjh4eF93YWtlX2kyYyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwlpbnQgemVybyA9IDA7CisKKwlyb3V0ZS5pbnB1dCA9IElOUFVUKGRldi0+Y3RsX2lucHV0KS0+dm11eDsKKwlyb3V0ZS5vdXRwdXQgPSAwOworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9SRVNFVCwgJnplcm8pOworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU1RSRUFNT04sIE5VTEwpOworfQorCisvKgorICogRGV2aWNlIGNvbnRyb2wgbGlzdAorICovCisKK3N0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2Rldmxpc3QpOworc3RhdGljIERFRklORV9NVVRFWChlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisKK3N0cnVjdCBlbTI4eHggKmVtMjh4eF9nZXRfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGVudW0gdjRsMl9idWZfdHlwZSAqZmhfdHlwZSwKKwkJCQkgaW50ICpoYXNfcmFkaW8pCit7CisJc3RydWN0IGVtMjh4eCAqaCwgKmRldiA9IE5VTEw7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCSpmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCSpoYXNfcmFkaW8gPSAwOworCisJbXV0ZXhfbG9jaygmZW0yOHh4X2Rldmxpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmVtMjh4eF9kZXZsaXN0LCBkZXZsaXN0KSB7CisJCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikKKwkJCWRldiA9IGg7CisJCWlmIChoLT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCSpmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJfQorCQlpZiAoaC0+cmFkaW9fZGV2ICYmCisJCSAgICBoLT5yYWRpb19kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJKmhhc19yYWRpbyA9IDE7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisKKwlyZXR1cm4gZGV2OworfQorCisvKgorICogZW0yOHh4X3JlYWxlYXNlX3Jlc291cmNlcygpCisgKiB1bnJlZ2lzdGVycyB0aGUgdjRsMixpMmMgYW5kIHVzYiBkZXZpY2VzCisgKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGlzY29uZWN0ZWQgb3IgYXQgbW9kdWxlIHVubG9hZAorKi8KK3ZvaWQgZW0yOHh4X3JlbW92ZV9mcm9tX2Rldmxpc3Qoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCW11dGV4X2xvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKKwlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKK307CisKK3ZvaWQgZW0yOHh4X2FkZF9pbnRvX2Rldmxpc3Qoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCW11dGV4X2xvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsICZlbTI4eHhfZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Cit9OworCisvKgorICogRXh0ZW5zaW9uIGludGVyZmFjZQorICovCisKK3N0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOworCitpbnQgZW0yOHh4X3JlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm9wcy0+bmV4dCwgJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZlbTI4eHhfZGV2bGlzdCwgZGV2bGlzdCkgeworCQlpZiAoZGV2KQorCQkJb3BzLT5pbml0KGRldik7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkVtMjh4eDogSW5pdGlhbGl6ZWQgKCVzKSBleHRlbnNpb25cbiIsIG9wcy0+bmFtZSk7CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGVtMjh4eF9yZWdpc3Rlcl9leHRlbnNpb24pOworCit2b2lkIGVtMjh4eF91bnJlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZlbTI4eHhfZGV2bGlzdCwgZGV2bGlzdCkgeworCQlpZiAoZGV2KQorCQkJb3BzLT5maW5pKGRldik7CisJfQorCisJbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOworCXByaW50ayhLRVJOX0lORk8gIkVtMjh4eDogUmVtb3ZlZCAoJXMpIGV4dGVuc2lvblxuIiwgb3BzLT5uYW1lKTsKKwlsaXN0X2RlbCgmb3BzLT5uZXh0KTsKKwltdXRleF91bmxvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woZW0yOHh4X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKTsKKwordm9pZCBlbTI4eHhfaW5pdF9leHRlbnNpb24oc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXN0cnVjdCBlbTI4eHhfb3BzICpvcHMgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCwgbmV4dCkgeworCQkJaWYgKG9wcy0+aW5pdCkKKwkJCQlvcHMtPmluaXQoZGV2KTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKK30KKwordm9pZCBlbTI4eHhfY2xvc2VfZXh0ZW5zaW9uKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzID0gTlVMTDsKKworCW11dGV4X2xvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsICZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QsIG5leHQpIHsKKwkJCWlmIChvcHMtPmZpbmkpCisJCQkJb3BzLT5maW5pKGRldik7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggYzk5ZTIzOC4uZDM4Y2IyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIAllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKIAotCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9NT0RFX1VOREVGSU5FRCk7CisJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX1NVU1BFTkQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTUsNyArMjE1LDcgQEAKIAlpZiAoYWNxdWlyZSkKIAkJcmV0dXJuIGVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9ESUdJVEFMX01PREUpOwogCWVsc2UKLQkJcmV0dXJuIGVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9NT0RFX1VOREVGSU5FRCk7CisJCXJldHVybiBlbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfU1VTUEVORCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGVtMjh4eF9kdmIgKmR2YjsKIAotCWlmICghZGV2LT5oYXNfZHZiKSB7CisJaWYgKCFkZXYtPmJvYXJkLmhhc19kdmIpIHsKIAkJLyogVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uICovCiAJCXJldHVybiAwOwogCX0KQEAgLTQwOSw4ICs0MDksMTAgQEAKIAllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfRElHSVRBTF9NT0RFKTsKIAkvKiBpbml0IGZyb250ZW5kICovCiAJc3dpdGNoIChkZXYtPm1vZGVsKSB7CisJY2FzZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTA6CiAJY2FzZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85NTA6CiAJY2FzZSBFTTI4ODBfQk9BUkRfUElOTkFDTEVfUENUVl9IRF9QUk86CisJY2FzZSBFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF9BMzE2OgogCWNhc2UgRU0yODgwX0JPQVJEX0FNRF9BVElfVFZfV09OREVSX0hEXzYwMDoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAmZW0yODgwX2xnZHQzMzAzX2RldiwKQEAgLTQ2NiwxMiArNDY4LDEyIEBACiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfTU9ERV9VTkRFRklORUQpOworCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9TVVNQRU5EKTsKIAlwcmludGsoS0VSTl9JTkZPICJTdWNjZXNzZnVsbHkgbG9hZGVkIGVtMjh4eC1kdmJcbiIpOwogCXJldHVybiAwOwogCiBvdXRfZnJlZToKLQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfTU9ERV9VTkRFRklORUQpOworCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9TVVNQRU5EKTsKIAlrZnJlZShkdmIpOwogCWRldi0+ZHZiID0gTlVMTDsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNDc5LDcgKzQ4MSw3IEBACiAKIHN0YXRpYyBpbnQgZHZiX2Zpbmkoc3RydWN0IGVtMjh4eCAqZGV2KQogewotCWlmICghZGV2LT5oYXNfZHZiKSB7CisJaWYgKCFkZXYtPmJvYXJkLmhhc19kdmIpIHsKIAkJLyogVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uICovCiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCAyMzYwYzYxLi5kNjlmMGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJCSAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSA/ICJyZWFkIiA6ICJ3cml0ZSIsCiAJCQkgaSA9PSBudW0gLSAxID8gInN0b3AiIDogIm5vbnN0b3AiLCBhZGRyLCBtc2dzW2ldLmxlbik7CiAJCWlmICghbXNnc1tpXS5sZW4pIHsgLyogbm8gbGVuOiBjaGVjayBvbmx5IGZvciBkZXZpY2UgcHJlc2VuY2UgKi8KLQkJCWlmIChkZXYtPmlzX2VtMjgwMCkKKwkJCWlmIChkZXYtPmJvYXJkLmlzX2VtMjgwMCkKIAkJCQlyYyA9IGVtMjgwMF9pMmNfY2hlY2tfZm9yX2RldmljZShkZXYsIGFkZHIpOwogCQkJZWxzZQogCQkJCXJjID0gZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKGRldiwgYWRkcik7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAogCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewogCQkJLyogcmVhZCBieXRlcyAqLwotCQkJaWYgKGRldi0+aXNfZW0yODAwKQorCQkJaWYgKGRldi0+Ym9hcmQuaXNfZW0yODAwKQogCQkJCXJjID0gZW0yODAwX2kyY19yZWN2X2J5dGVzKGRldiwgYWRkciwKIAkJCQkJCQkgICBtc2dzW2ldLmJ1ZiwKIAkJCQkJCQkgICBtc2dzW2ldLmxlbik7CkBAIC0yNzksNyArMjc5LDcgQEAKIAkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykKIAkJCQkJcHJpbnRrKCIgJTAyeCIsIG1zZ3NbaV0uYnVmW2J5dGVdKTsKIAkJCX0KLQkJCWlmIChkZXYtPmlzX2VtMjgwMCkKKwkJCWlmIChkZXYtPmJvYXJkLmlzX2VtMjgwMCkKIAkJCQlyYyA9IGVtMjgwMF9pMmNfc2VuZF9ieXRlcyhkZXYsIGFkZHIsCiAJCQkJCQkJICAgbXNnc1tpXS5idWYsCiAJCQkJCQkJICAgbXNnc1tpXS5sZW4pOwpAQCAtMzMyLDYgKzMzMiwxNyBAQAogCXN0cnVjdCBlbTI4eHhfZWVwcm9tICplbV9lZXByb20gPSAodm9pZCAqKWVlZGF0YTsKIAlpbnQgaSwgZXJyLCBzaXplID0gbGVuLCBibG9jazsKIAorCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NzQpIHsKKwkJLyogRW1waWEgc3dpdGNoZWQgdG8gYSAxNi1iaXQgYWRkcmVzc2FibGUgZWVwcm9tIGluIG5ld2VyCisJCSAgIGRldmljZXMuICBXaGlsZSB3ZSBjb3VsZCBjZXJ0YWlubHkgd3JpdGUgYSByb3V0aW5lIHRvIHJlYWQKKwkJICAgdGhlIGVlcHJvbSwgdGhlcmUgaXMgbm90aGluZyBvZiB1c2UgaW4gdGhlcmUgdGhhdCBjYW5ub3QgYmUKKwkJICAgYWNjZXNzZWQgdGhyb3VnaCByZWdpc3RlcnMsIGFuZCB0aGVyZSBpcyB0aGUgcmlzayB0aGF0IHdlCisJCSAgIGNvdWxkIGNvcnJ1cHQgdGhlIGVlcHJvbSAoc2luY2UgYSAxNi1iaXQgcmVhZCBjYWxsIGlzCisJCSAgIGludGVycHJldGVkIGFzIGEgd3JpdGUgY2FsbCBieSA4LWJpdCBlZXByb21zKS4KKwkJKi8KKwkJcmV0dXJuIDA7CisJfQorCiAJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweGEwID4+IDE7CiAKIAkvKiBDaGVjayBpZiBib2FyZCBoYXMgZWVwcm9tICovCkBAIC0zNzcsNDcgKzM4OCw0OSBAQAogCWlmIChlbV9lZXByb20tPmlkID09IDB4OTU2N2ViMWEpCiAJCWRldi0+aGFzaCA9IGVtMjh4eF9oYXNoX21lbShlZWRhdGEsIGxlbiwgMzIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRUVQUk9NIElEPSAweCUwOHgsIGhhc2ggPSAweCUwOGx4XG4iLAotCSAgICAgICBlbV9lZXByb20tPmlkLCBkZXYtPmhhc2gpOwotCXByaW50ayhLRVJOX0lORk8gIlZlbmRvci9Qcm9kdWN0IElEPSAlMDR4OiUwNHhcbiIsIGVtX2VlcHJvbS0+dmVuZG9yX0lELAotCSAgICAgICBlbV9lZXByb20tPnByb2R1Y3RfSUQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFRVBST00gSUQ9IDB4JTA4eCwgRUVQUk9NIGhhc2ggPSAweCUwOGx4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGVtX2VlcHJvbS0+aWQsIGRldi0+aGFzaCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogRUVQUk9NIGluZm86XG4iLCBkZXYtPm5hbWUpOwogCiAJc3dpdGNoIChlbV9lZXByb20tPmNoaXBfY29uZiA+PiA0ICYgMHgzKSB7CiAJY2FzZSAwOgotCQlwcmludGsoS0VSTl9JTkZPICJObyBhdWRpbyBvbiBib2FyZC5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdE5vIGF1ZGlvIG9uIGJvYXJkLlxuIiwgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlwcmludGsoS0VSTl9JTkZPICJBQzk3IGF1ZGlvICg1IHNhbXBsZSByYXRlcylcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEFDOTcgYXVkaW8gKDUgc2FtcGxlIHJhdGVzKVxuIiwKKwkJCQkgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlwcmludGsoS0VSTl9JTkZPICJJMlMgYXVkaW8sIHNhbXBsZSByYXRlPTMya1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiSTJTIGF1ZGlvLCAzIHNhbXBsZSByYXRlc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCAzIHNhbXBsZSByYXRlc1xuIiwgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKGVtX2VlcHJvbS0+Y2hpcF9jb25mICYgMSA8PCAzKQotCQlwcmludGsoS0VSTl9JTkZPICJVU0IgUmVtb3RlIHdha2V1cCBjYXBhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRVU0IgUmVtb3RlIHdha2V1cCBjYXBhYmxlXG4iLCBkZXYtPm5hbWUpOwogCiAJaWYgKGVtX2VlcHJvbS0+Y2hpcF9jb25mICYgMSA8PCAyKQotCQlwcmludGsoS0VSTl9JTkZPICJVU0IgU2VsZiBwb3dlciBjYXBhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRVU0IgU2VsZiBwb3dlciBjYXBhYmxlXG4iLCBkZXYtPm5hbWUpOwogCiAJc3dpdGNoIChlbV9lZXByb20tPmNoaXBfY29uZiAmIDB4MykgewogCWNhc2UgMDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiNTAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHQ1MDBtQSBtYXggcG93ZXJcbiIsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJcHJpbnRrKEtFUk5fSU5GTyAiNDAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHQ0MDBtQSBtYXggcG93ZXJcbiIsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiMzAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHQzMDBtQSBtYXggcG93ZXJcbiIsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiMjAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHQyMDBtQSBtYXggcG93ZXJcbiIsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJUYWJsZSBhdCAweCUwMngsIHN0cmluZ3M9MHglMDR4LCAweCUwNHgsIDB4JTA0eFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczpcdFRhYmxlIGF0IDB4JTAyeCwgc3RyaW5ncz0weCUwNHgsIDB4JTA0eCwgMHglMDR4XG4iLAorCQkJCWRldi0+bmFtZSwKIAkJCQllbV9lZXByb20tPnN0cmluZ19pZHhfdGFibGUsCiAJCQkJZW1fZWVwcm9tLT5zdHJpbmcxLAogCQkJCWVtX2VlcHJvbS0+c3RyaW5nMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKaW5kZXggZWFiM2Q5NS4uNDJiYmFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKQEAgLTM4LDEyICszOCw0OCBAQAogbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcl9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbSVJdIik7CiAKLSNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikgXAorI2RlZmluZSBpMmNkcHJpbnRrKGZtdCwgYXJnLi4uKSBcCiAJaWYgKGlyX2RlYnVnKSB7IFwKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZyk7IFwKIAl9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pIFwKKwlpZiAoaXJfZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXMvaXI6ICIgZm10LCBpci0+bmFtZSAsICMjIGFyZyk7IFwKKwl9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUG9sbGluZyBzdHJ1Y3R1cmUgdXNlZCBieSBlbTI4eHggSVIncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBlbTI4eHhfaXJfcG9sbF9yZXN1bHQgeworCXVuc2lnbmVkIGludCB0b2dnbGVfYml0OjE7CisJdW5zaWduZWQgaW50IHJlYWRfY291bnQ6NzsKKwl1OCByY19hZGRyZXNzOworCXU4IHJjX2RhdGFbNF07IC8qIDEgYnl0ZSBvbiBlbTI4NjAvMjg4MCwgNCBvbiBlbTI4NzQgKi8KK307CisKK3N0cnVjdCBlbTI4eHhfSVIgeworCXN0cnVjdCBlbTI4eHggKmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgaXI7CisJY2hhciBuYW1lWzMyXTsKKwljaGFyIHBoeXNbMzJdOworCisJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCisJaW50IHBvbGxpbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJdW5zaWduZWQgaW50IGxhc3RfdG9nZ2xlOjE7CisJdW5zaWduZWQgaW50IGxhc3RfcmVhZGNvdW50OworCXVuc2lnbmVkIGludCByZXBlYXRfaW50ZXJ2YWw7CisKKwlpbnQgICgqZ2V0X2tleSkoc3RydWN0IGVtMjh4eF9JUiAqLCBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICopOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBJMkMgSVIgYmFzZWQgZ2V0IGtleWNvZGVzIC0gc2hvdWxkIGJlIHVzZWQgd2l0aCBpci1rYmQtaTJjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogaW50IGVtMjh4eF9nZXRfa2V5X3RlcnJhdGVjKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7CkBAIC01MSw3ICs4Nyw3IEBACiAKIAkvKiBwb2xsIElSIGNoaXAgKi8KIAlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCAmYiwgMSkpIHsKLQkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTU5LDcgKzk1LDcgQEAKIAkgICBkb3duLCB3aGlsZSAweGZmIGluZGljYXRlcyB0aGF0IG5vIGJ1dHRvbiBpcyBob2xkCiAJICAgZG93bi4gMHhmZSBzZXF1ZW5jZXMgYXJlIHNvbWV0aW1lcyBpbnRlcnJ1cHRlZCBieSAweEZGICovCiAKLQlkcHJpbnRrKCJrZXkgJTAyeFxuIiwgYik7CisJaTJjZHByaW50aygia2V5ICUwMnhcbiIsIGIpOwogCiAJaWYgKGIgPT0gMHhmZikKIAkJcmV0dXJuIDA7CkBAIC03Myw3ICsxMDksNiBAQAogCXJldHVybiAxOwogfQogCi0KIGludCBlbTI4eHhfZ2V0X2tleV9lbV9oYXVwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbMl07CkBAIC05Nyw3ICsxMzIsNyBAQAogCQkgKChidWZbMF0mMHgxMCk+PjMpIHwgLyogMDAwMCAwMDEwICovCiAJCSAoKGJ1ZlswXSYweDIwKT4+NSk7ICAvKiAwMDAwIDAwMDEgKi8KIAotCWRwcmludGsoImlyIGhhdXBwYXVnZSAoZW0yODQwKTogY29kZT0weCUwMnggKHJjdj0weCUwMngpXG4iLAorCWkyY2RwcmludGsoImlyIGhhdXBwYXVnZSAoZW0yODQwKTogY29kZT0weCUwMnggKHJjdj0weCUwMngpXG4iLAogCQkJY29kZSwgYnVmWzBdKTsKIAogCS8qIHJldHVybiBrZXkgKi8KQEAgLTExNCwxMSArMTQ5LDExIEBACiAJLyogcG9sbCBJUiBjaGlwICovCiAKIAlpZiAoMyAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCBidWYsIDMpKSB7Ci0JCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZHByaW50aygia2V5ICUwMnhcbiIsIGJ1ZlsyXSYweDNmKTsKKwlpMmNkcHJpbnRrKCJrZXkgJTAyeFxuIiwgYnVmWzJdJjB4M2YpOwogCWlmIChidWZbMF0gIT0gMHgwMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTEyOCw2ICsxNjMsMjYwIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUG9sbCBiYXNlZCBnZXQga2V5Y29kZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGZvciB0aGUgZW0yODYwL2VtMjg4MCAqLworc3RhdGljIGludCBkZWZhdWx0X3BvbGxpbmdfZ2V0a2V5KHN0cnVjdCBlbTI4eHhfSVIgKmlyLAorCQkJCSAgc3RydWN0IGVtMjh4eF9pcl9wb2xsX3Jlc3VsdCAqcG9sbF9yZXN1bHQpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gaXItPmRldjsKKwlpbnQgcmM7CisJdTggbXNnWzNdID0geyAwLCAwLCAwIH07CisKKwkvKiBSZWFkIGtleSB0b2dnbGUsIGJyYW5kLCBhbmQga2V5IGNvZGUKKwkgICBvbiByZWdpc3RlcnMgMHg0NSwgMHg0NiBhbmQgMHg0NworCSAqLworCXJjID0gZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihkZXYsIDAsIEVNMjhYWF9SNDVfSVIsCisJCQkJCSAgbXNnLCBzaXplb2YobXNnKSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5mcmFyZWQgdG9nZ2xlIChSZWcgMHg0NVs3XSkgKi8KKwlwb2xsX3Jlc3VsdC0+dG9nZ2xlX2JpdCA9IChtc2dbMF0gPj4gNyk7CisKKwkvKiBJbmZyYXJlZCByZWFkIGNvdW50IChSZWcgMHg0NVs2OjBdICovCisJcG9sbF9yZXN1bHQtPnJlYWRfY291bnQgPSAobXNnWzBdICYgMHg3Zik7CisKKwkvKiBSZW1vdGUgQ29udHJvbCBBZGRyZXNzIChSZWcgMHg0NikgKi8KKwlwb2xsX3Jlc3VsdC0+cmNfYWRkcmVzcyA9IG1zZ1sxXTsKKworCS8qIFJlbW90ZSBDb250cm9sIERhdGEgKFJlZyAweDQ3KSAqLworCXBvbGxfcmVzdWx0LT5yY19kYXRhWzBdID0gbXNnWzJdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yODc0X3BvbGxpbmdfZ2V0a2V5KHN0cnVjdCBlbTI4eHhfSVIgKmlyLAorCQkJCSBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICpwb2xsX3Jlc3VsdCkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBpci0+ZGV2OworCWludCByYzsKKwl1OCBtc2dbNV0gPSB7IDAsIDAsIDAsIDAsIDAgfTsKKworCS8qIFJlYWQga2V5IHRvZ2dsZSwgYnJhbmQsIGFuZCBrZXkgY29kZQorCSAgIG9uIHJlZ2lzdGVycyAweDUxLTU1CisJICovCisJcmMgPSBkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKGRldiwgMCwgRU0yODc0X1I1MV9JUiwKKwkJCQkJICBtc2csIHNpemVvZihtc2cpKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBJbmZyYXJlZCB0b2dnbGUgKFJlZyAweDUxWzddKSAqLworCXBvbGxfcmVzdWx0LT50b2dnbGVfYml0ID0gKG1zZ1swXSA+PiA3KTsKKworCS8qIEluZnJhcmVkIHJlYWQgY291bnQgKFJlZyAweDUxWzY6MF0gKi8KKwlwb2xsX3Jlc3VsdC0+cmVhZF9jb3VudCA9IChtc2dbMF0gJiAweDdmKTsKKworCS8qIFJlbW90ZSBDb250cm9sIEFkZHJlc3MgKFJlZyAweDUyKSAqLworCXBvbGxfcmVzdWx0LT5yY19hZGRyZXNzID0gbXNnWzFdOworCisJLyogUmVtb3RlIENvbnRyb2wgRGF0YSAoUmVnIDB4NTMtNTUpICovCisJcG9sbF9yZXN1bHQtPnJjX2RhdGFbMF0gPSBtc2dbMl07CisJcG9sbF9yZXN1bHQtPnJjX2RhdGFbMV0gPSBtc2dbM107CisJcG9sbF9yZXN1bHQtPnJjX2RhdGFbMl0gPSBtc2dbNF07CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBQb2xsaW5nIGNvZGUgZm9yIGVtMjh4eAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGVtMjh4eF9pcl9oYW5kbGVfa2V5KHN0cnVjdCBlbTI4eHhfSVIgKmlyKQoreworCWludCByZXN1bHQ7CisJaW50IGRvX3NlbmRrZXkgPSAwOworCXN0cnVjdCBlbTI4eHhfaXJfcG9sbF9yZXN1bHQgcG9sbF9yZXN1bHQ7CisKKwkvKiByZWFkIHRoZSByZWdpc3RlcnMgY29udGFpbmluZyB0aGUgSVIgc3RhdHVzICovCisJcmVzdWx0ID0gaXItPmdldF9rZXkoaXIsICZwb2xsX3Jlc3VsdCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZHByaW50aygiaXItPmdldF9rZXkoKSBmYWlsZWQgJWRcbiIsIHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlkcHJpbnRrKCJpci0+Z2V0X2tleSByZXN1bHQgdGI9JTAyeCByYz0lMDJ4IGxyPSUwMnggZGF0YT0lMDJ4XG4iLAorCQlwb2xsX3Jlc3VsdC50b2dnbGVfYml0LCBwb2xsX3Jlc3VsdC5yZWFkX2NvdW50LAorCQlpci0+bGFzdF9yZWFkY291bnQsIHBvbGxfcmVzdWx0LnJjX2RhdGFbMF0pOworCisJaWYgKGlyLT5kZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NzQpIHsKKwkJLyogVGhlIGVtMjg3NCBjbGVhcnMgdGhlIHJlYWRjb3VudCBmaWVsZCBldmVyeSB0aW1lIHRoZQorCQkgICByZWdpc3RlciBpcyByZWFkLiAgVGhlIGVtMjg2MC8yODgwIGRhdGFzaGVldCBzYXlzIHRoYXQgaXQKKwkJICAgaXMgc3VwcG9zZWQgdG8gY2xlYXIgdGhlIHJlYWRjb3VudCwgYnV0IGl0IGRvZXNuJ3QuICBTbyB3aXRoCisJCSAgIHRoZSBlbTI4NzQsIHdlIGFyZSBsb29raW5nIGZvciBhIG5vbi16ZXJvIHJlYWQgY291bnQgYXMKKwkJICAgb3Bwb3NlZCB0byBhIHJlYWRjb3VudCB0aGF0IGlzIGluY3JlbWVudGluZyAqLworCQlpci0+bGFzdF9yZWFkY291bnQgPSAwOworCX0KKworCWlmIChwb2xsX3Jlc3VsdC5yZWFkX2NvdW50ID09IDApIHsKKwkJLyogVGhlIGJ1dHRvbiBoYXMgbm90IGJlZW4gcHJlc3NlZCBzaW5jZSB0aGUgbGFzdCByZWFkICovCisJfSBlbHNlIGlmIChpci0+bGFzdF90b2dnbGUgIT0gcG9sbF9yZXN1bHQudG9nZ2xlX2JpdCkgeworCQkvKiBBIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkICovCisJCWRwcmludGsoImJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkXG4iKTsKKwkJaXItPmxhc3RfdG9nZ2xlID0gcG9sbF9yZXN1bHQudG9nZ2xlX2JpdDsKKwkJaXItPnJlcGVhdF9pbnRlcnZhbCA9IDA7CisJCWRvX3NlbmRrZXkgPSAxOworCX0gZWxzZSBpZiAocG9sbF9yZXN1bHQudG9nZ2xlX2JpdCA9PSBpci0+bGFzdF90b2dnbGUgJiYKKwkJICAgcG9sbF9yZXN1bHQucmVhZF9jb3VudCA+IDAgJiYKKwkJICAgcG9sbF9yZXN1bHQucmVhZF9jb3VudCAhPSBpci0+bGFzdF9yZWFkY291bnQpIHsKKwkJLyogVGhlIGJ1dHRvbiBpcyBzdGlsbCBiZWluZyBoZWxkIGRvd24gKi8KKwkJZHByaW50aygiYnV0dG9uIGJlaW5nIGhlbGQgZG93blxuIik7CisKKwkJLyogRGVib3VuY2VyIGZvciBmaXJzdCBrZXlwcmVzcyAqLworCQlpZiAoaXItPnJlcGVhdF9pbnRlcnZhbCsrID4gOSkgeworCQkJLyogU3RhcnQgcmVwZWF0aW5nIGFmdGVyIDEgc2Vjb25kICovCisJCQlkb19zZW5ka2V5ID0gMTsKKwkJfQorCX0KKworCWlmIChkb19zZW5ka2V5KSB7CisJCWRwcmludGsoInNlbmRpbmcga2V5cHJlc3NcbiIpOworCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dCwgJmlyLT5pciwgcG9sbF9yZXN1bHQucmNfZGF0YVswXSwKKwkJCQkgcG9sbF9yZXN1bHQucmNfZGF0YVswXSk7CisJCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dCwgJmlyLT5pcik7CisJfQorCisJaXItPmxhc3RfcmVhZGNvdW50ID0gcG9sbF9yZXN1bHQucmVhZF9jb3VudDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IChzdHJ1Y3QgZW0yOHh4X0lSICopZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKK30KKworc3RhdGljIHZvaWQgZW0yOHh4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmspOworCisJZW0yOHh4X2lyX2hhbmRsZV9rZXkoaXIpOworCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOworfQorCit2b2lkIGVtMjh4eF9pcl9zdGFydChzdHJ1Y3QgZW0yOHh4X0lSICppcikKK3sKKwlzZXR1cF90aW1lcigmaXItPnRpbWVyLCBpcl90aW1lciwgKHVuc2lnbmVkIGxvbmcpaXIpOworCUlOSVRfV09SSygmaXItPndvcmssIGVtMjh4eF9pcl93b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZpci0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGVtMjh4eF9pcl9zdG9wKHN0cnVjdCBlbTI4eHhfSVIgKmlyKQoreworCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXIpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Cit9CisKK2ludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGVtMjh4eF9JUiAqaXI7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXU4IGlyX2NvbmZpZzsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWlmIChkZXYtPmJvYXJkLmlyX2NvZGVzID09IE5VTEwpIHsKKwkJLyogTm8gcmVtb3RlIGNvbnRyb2wgc3VwcG9ydCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaXIgfHwgIWlucHV0X2RldikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlpci0+aW5wdXQgPSBpbnB1dF9kZXY7CisKKwkvKiBTZXR1cCB0aGUgcHJvcGVyIGhhbmRsZXIgYmFzZWQgb24gdGhlIGNoaXAgKi8KKwlzd2l0Y2ggKGRldi0+Y2hpcF9pZCkgeworCWNhc2UgQ0hJUF9JRF9FTTI4NjA6CisJY2FzZSBDSElQX0lEX0VNMjg4MzoKKwkJaXItPmdldF9rZXkgPSBkZWZhdWx0X3BvbGxpbmdfZ2V0a2V5OworCQlicmVhazsKKwljYXNlIENISVBfSURfRU0yODc0OgorCQlpci0+Z2V0X2tleSA9IGVtMjg3NF9wb2xsaW5nX2dldGtleTsKKwkJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgUkM1LCBzbyBlbmFibGUgaXQgKi8KKwkJaXJfY29uZmlnID0gRU0yODc0X0lSX1JDNTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4NzRfUjUwX0lSX0NPTkZJRywgJmlyX2NvbmZpZywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiVW5yZWNvZ25pemVkIGVtMjh4eCBjaGlwIGlkOiBJUiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJLyogVGhpcyBpcyBob3cgb2Z0ZW4gd2UgYXNrIHRoZSBjaGlwIGZvciBJUiBpbmZvcm1hdGlvbiAqLworCWlyLT5wb2xsaW5nID0gMTAwOyAvKiBtcyAqLworCisJLyogaW5pdCBpbnB1dCBkZXZpY2UgKi8KKwlzbnByaW50Zihpci0+bmFtZSwgc2l6ZW9mKGlyLT5uYW1lKSwgImVtMjh4eCBJUiAoJXMpIiwKKwkJCQkJCWRldi0+bmFtZSk7CisKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgaXItPnBoeXMsIHNpemVvZihpci0+cGh5cykpOworCXN0cmxjYXQoaXItPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGlyLT5waHlzKSk7CisKKwlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUiwgZGV2LT5ib2FyZC5pcl9jb2Rlcyk7CisJaW5wdXRfZGV2LT5uYW1lID0gaXItPm5hbWU7CisJaW5wdXRfZGV2LT5waHlzID0gaXItPnBoeXM7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOworCWlucHV0X2Rldi0+aWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKwkvKiByZWNvcmQgaGFuZGxlcyB0byBvdXJzZWxmICovCisJaXItPmRldiA9IGRldjsKKwlkZXYtPmlyID0gaXI7CisKKwllbTI4eHhfaXJfc3RhcnQoaXIpOworCisJLyogYWxsIGRvbmUgKi8KKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc3RvcDsKKworCXJldHVybiAwOworIGVycl9vdXRfc3RvcDoKKwllbTI4eHhfaXJfc3RvcChpcik7CisJZGV2LT5pciA9IE5VTEw7CisgZXJyX291dF9mcmVlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoaXIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBlbTI4eHhfaXJfZmluaShzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJc3RydWN0IGVtMjh4eF9JUiAqaXIgPSBkZXYtPmlyOworCisJLyogc2tpcCBkZXRhY2ggb24gbm9uIGF0dGFjaGVkIGJvYXJkcyAqLworCWlmICghaXIpCisJCXJldHVybiAwOworCisJZW0yOHh4X2lyX3N0b3AoaXIpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJa2ZyZWUoaXIpOworCisJLyogZG9uZSAqLworCWRldi0+aXIgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIEhhbmRsZSBXZWJjYW0gc25hcHNob3QgYnV0dG9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogc3RhdGljIHZvaWQgZW0yOHh4X3F1ZXJ5X3NidXR0b24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCS8qIFBvbGwgdGhlIHJlZ2lzdGVyIGFuZCBzZWUgaWYgdGhlIGJ1dHRvbiBpcyBkZXByZXNzZWQgKi8KQEAgLTIxMCw5ICs0OTksMyBAQAogCX0KIAlyZXR1cm47CiB9Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAppbmRleCBmYWMxYWIyLi42NWRjYjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCkBAIC0xNywxNyArMTcsNTggQEAKIAogLyogZW0yOHh4IHJlZ2lzdGVycyAqLwogCisjZGVmaW5lIEVNMjhYWF9SMDBfQ0hJUENGRwkweDAwCisKKy8qIGVtMjh4eCBDaGlwIENvbmZpZ3VyYXRpb24gMHgwMCAqLworI2RlZmluZSBFTTI4WFhfQ0hJUENGR19WRU5ET1JfQVVESU8JCTB4ODAKKyNkZWZpbmUgRU0yOFhYX0NISVBDRkdfSTJTX1ZPTFVNRV9DQVBBQkxFCTB4NDAKKyNkZWZpbmUgRU0yOFhYX0NISVBDRkdfSTJTXzVfU0FNUFJBVEVTCQkweDMwCisjZGVmaW5lIEVNMjhYWF9DSElQQ0ZHX0kyU18zX1NBTVBSQVRFUwkJMHgyMAorI2RlZmluZSBFTTI4WFhfQ0hJUENGR19BQzk3CQkJMHgxMAorI2RlZmluZSBFTTI4WFhfQ0hJUENGR19BVURJT01BU0sJCTB4MzAKKwogCS8qIEdQSU8vR1BPIHJlZ2lzdGVycyAqLwogI2RlZmluZSBFTTI4ODBfUjA0X0dQTwkweDA0ICAgIC8qIGVtMjg4MC1lbTI4ODMgb25seSAqLwogI2RlZmluZSBFTTI4WFhfUjA4X0dQSU8JMHgwOAkvKiBlbTI4MjAgb3IgdXBwZXIgKi8KIAogI2RlZmluZSBFTTI4WFhfUjA2X0kyQ19DTEsJMHgwNgorCisvKiBlbTI4eHggSTJDIENsb2NrIFJlZ2lzdGVyICgweDA2KSAqLworI2RlZmluZSBFTTI4WFhfSTJDX0NMS19BQ0tfTEFTVF9SRUFECTB4ODAKKyNkZWZpbmUgRU0yOFhYX0kyQ19DTEtfV0FJVF9FTkFCTEUJMHg0MAorI2RlZmluZSBFTTI4WFhfSTJDX0VFUFJPTV9PTl9CT0FSRAkweDA4CisjZGVmaW5lIEVNMjhYWF9JMkNfRUVQUk9NX0tFWV9WQUxJRAkweDA0CisjZGVmaW5lIEVNMjg3NF9JMkNfU0VDT05EQVJZX0JVU19TRUxFQ1QJMHgwNCAvKiBlbTI4NzQgaGFzIHR3byBpMmMgYnVzc2VzICovCisjZGVmaW5lIEVNMjhYWF9JMkNfRlJFUV8xXzVfTUhaCQkweDAzIC8qIGJ1cyBmcmVxdWVuY3kgKGJpdHMgWzEtMF0pICovCisjZGVmaW5lIEVNMjhYWF9JMkNfRlJFUV8yNV9LSFoJCTB4MDIKKyNkZWZpbmUgRU0yOFhYX0kyQ19GUkVRXzQwMF9LSFoJCTB4MDEKKyNkZWZpbmUgRU0yOFhYX0kyQ19GUkVRXzEwMF9LSFoJCTB4MDAKKworCiAjZGVmaW5lIEVNMjhYWF9SMEFfQ0hJUElECTB4MGEKICNkZWZpbmUgRU0yOFhYX1IwQ19VU0JTVVNQCTB4MGMJLyogKi8KIAogI2RlZmluZSBFTTI4WFhfUjBFX0FVRElPU1JDCTB4MGUKICNkZWZpbmUgRU0yOFhYX1IwRl9YQ0xLCTB4MGYKIAorLyogZW0yOHh4IFhDTEsgUmVnaXN0ZXIgKDB4MGYpICovCisjZGVmaW5lIEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURQkweDgwIC8qIG90aGVyd2lzZSBhdWRpbyBtdXRlZCAqLworI2RlZmluZSBFTTI4WFhfWENMS19JMlNfTVNCX1RJTUlORwkweDQwIC8qIG90aGVyd2lzZSBzdGFuZGFyZCB0aW1pbmcgKi8KKyNkZWZpbmUgRU0yOFhYX1hDTEtfSVJfUkM1X01PREUJCTB4MjAgLyogb3RoZXJ3aXNlIE5FQyBtb2RlICovCisjZGVmaW5lIEVNMjhYWF9YQ0xLX0lSX05FQ19DSEtfUEFSSVRZCTB4MTAKKyNkZWZpbmUgRU0yOFhYX1hDTEtfRlJFUVVFTkNZXzMwTUhaCTB4MDAgLyogRnJlcS4gc2VsZWN0IChiaXRzIFszLTBdKSAqLworI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTVNSFoJMHgwMQorI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTBNSFoJMHgwMgorI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfN181TUhaCTB4MDMKKyNkZWZpbmUgRU0yOFhYX1hDTEtfRlJFUVVFTkNZXzZNSFoJMHgwNAorI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfNU1IWgkweDA1CisjZGVmaW5lIEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV80XzNNSFoJMHgwNgorI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFoJMHgwNworI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMjBNSFoJMHgwOAorI2RlZmluZSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMjBNSFpfMgkweDA5CisjZGVmaW5lIEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV80OE1IWgkweDBhCisjZGVmaW5lIEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8yNE1IWgkweDBiCisKICNkZWZpbmUgRU0yOFhYX1IxMF9WSU5NT0RFCTB4MTAKICNkZWZpbmUgRU0yOFhYX1IxMV9WSU5DVFJMCTB4MTEKICNkZWZpbmUgRU0yOFhYX1IxMl9WSU5FTkFCTEUJMHgxMgkvKiAqLwpAQCAtNTYsNiArOTcsMTkgQEAKICNkZWZpbmUgRU0yOFhYX1IyNl9DT01QUgkweDI2CiAjZGVmaW5lIEVNMjhYWF9SMjdfT1VURk1UCTB4MjcKIAorLyogZW0yOHh4IE91dHB1dCBGb3JtYXQgUmVnaXN0ZXIgKDB4MjcpICovCisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzhfUkdSRwkweDAwCisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzhfR1JHUgkweDAxCisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzhfR0JHQgkweDAyCisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzhfQkdCRwkweDAzCisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzE2XzY1NgkweDA0CisjZGVmaW5lIEVNMjhYWF9PVVRGTVRfUkdCXzhfQkFZRVIJMHgwOCAvKiBQYXR0ZXJuIGluIFJlZyAweDEwWzEtMF0gKi8KKyNkZWZpbmUgRU0yOFhYX09VVEZNVF9ZVVYyMTEJCTB4MTAKKyNkZWZpbmUgRU0yOFhYX09VVEZNVF9ZVVY0MjJfWTBVWTFWCTB4MTQKKyNkZWZpbmUgRU0yOFhYX09VVEZNVF9ZVVY0MjJfWTFVWTBWCTB4MTUKKyNkZWZpbmUgRU0yOFhYX09VVEZNVF9ZVVY0MTEJCTB4MTgKKworCiAjZGVmaW5lIEVNMjhYWF9SMjhfWE1JTgkweDI4CiAjZGVmaW5lIEVNMjhYWF9SMjlfWE1BWAkweDI5CiAjZGVmaW5lIEVNMjhYWF9SMkFfWU1JTgkweDJhCkBAIC03MSwxMCArMTI1LDMyIEBACiAjZGVmaW5lIEVNMjhYWF9SNDJfQUM5N0FERFIJMHg0MgogI2RlZmluZSBFTTI4WFhfUjQzX0FDOTdCVVNZCTB4NDMKIAotLyogZW0yMDIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVNMjhYWF9SMDJfTUFTVEVSX0FDOTcJMHgwMgotI2RlZmluZSBFTTI4WFhfUjEwX0xJTkVfSU5fQUM5NyAgICAweDEwCi0jZGVmaW5lIEVNMjhYWF9SMTRfVklERU9fQUM5NwkweDE0CisjZGVmaW5lIEVNMjhYWF9SNDVfSVIJCTB4NDUKKwkvKiAweDQ1ICBiaXQgNyAgICAtIHBhcml0eSBiaXQKKwkJIGJpdHMgNi0wIC0gY291bnQKKwkgICAweDQ2ICBJUiBicmFuZAorCSAgIDB4NDcgIElSIGRhdGEKKwkgKi8KKworLyogZW0yODc0IHJlZ2lzdGVycyAqLworI2RlZmluZSBFTTI4NzRfUjUwX0lSX0NPTkZJRyAgICAweDUwCisjZGVmaW5lIEVNMjg3NF9SNTFfSVIgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgRU0yODc0X1I1Rl9UU19FTkFCTEUgICAgMHg1ZgorI2RlZmluZSBFTTI4NzRfUjgwX0dQSU8gICAgICAgICAweDgwCisKKy8qIGVtMjg3NCBJUiBjb25maWcgcmVnaXN0ZXIgKDB4NTApICovCisjZGVmaW5lIEVNMjg3NF9JUl9ORUMgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRU0yODc0X0lSX1JDNSAgICAgICAgICAgMHgwNAorI2RlZmluZSBFTTI4NzRfSVJfUkM1X01PREVfMCAgICAweDA4CisjZGVmaW5lIEVNMjg3NF9JUl9SQzVfTU9ERV82QSAgIDB4MGIKKworLyogZW0yODc0IFRyYW5zcG9ydCBTdHJlYW0gRW5hYmxlIFJlZ2lzdGVyICgweDVmKSAqLworI2RlZmluZSBFTTI4NzRfVFMxX0NBUFRVUkVfRU5BQkxFICgxIDw8IDApCisjZGVmaW5lIEVNMjg3NF9UUzFfRklMVEVSX0VOQUJMRSAgKDEgPDwgMSkKKyNkZWZpbmUgRU0yODc0X1RTMV9OVUxMX0RJU0NBUkQgICAoMSA8PCAyKQorI2RlZmluZSBFTTI4NzRfVFMyX0NBUFRVUkVfRU5BQkxFICgxIDw8IDQpCisjZGVmaW5lIEVNMjg3NF9UUzJfRklMVEVSX0VOQUJMRSAgKDEgPDwgNSkKKyNkZWZpbmUgRU0yODc0X1RTMl9OVUxMX0RJU0NBUkQgICAoMSA8PCA2KQogCiAvKiByZWdpc3RlciBzZXR0aW5ncyAqLwogI2RlZmluZSBFTTI4MDBfQVVESU9fU1JDX1RVTkVSICAweDBkCkBAIC04NCw2ICsxNjAsNzUgQEAKIAogLyogRklYTUU6IE5lZWQgdG8gYmUgcG9wdWxhdGVkIHdpdGggdGhlIG90aGVyIGNoaXAgSUQncyAqLwogZW51bSBlbTI4eHhfY2hpcF9pZCB7CisJQ0hJUF9JRF9FTTI4MjAgPSAxOCwKKwlDSElQX0lEX0VNMjg0MCA9IDIwLAorCUNISVBfSURfRU0yNzUwID0gMzMsCiAJQ0hJUF9JRF9FTTI4NjAgPSAzNCwKKwlDSElQX0lEX0VNMjg3MCA9IDM1LAogCUNISVBfSURfRU0yODgzID0gMzYsCisJQ0hJUF9JRF9FTTI4NzQgPSA2NSwKIH07CisKKy8qCisgKiBSZWdpc3RlcnMgdXNlZCBieSBlbTIwMiBhbmQgb3RoZXIgQUM5NyBjaGlwcworICovCisKKy8qIFN0YW5kYXJkIEFDOTcgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFDOTdfUkVTRVQgICAgICAgICAgICAgICAweDAwCisKKwkvKiBPdXRwdXQgdm9sdW1lcyAqLworI2RlZmluZSBBQzk3X01BU1RFUl9WT0wgICAgICAgICAgMHgwMgorI2RlZmluZSBBQzk3X0xJTkVfTEVWRUxfVk9MICAgICAgMHgwNAkvKiBTb21lIGRldmljZXMgdXNlIGZvciBoZWFkcGhvbmVzICovCisjZGVmaW5lIEFDOTdfTUFTVEVSX01PTk9fVk9MICAgICAweDA2CisKKwkvKiBJbnB1dCB2b2x1bWVzICovCisjZGVmaW5lIEFDOTdfUENfQkVFUF9WT0wgICAgICAgICAweDBhCisjZGVmaW5lIEFDOTdfUEhPTkVfVk9MICAgICAgICAgICAweDBjCisjZGVmaW5lIEFDOTdfTUlDX1ZPTCAgICAgICAgICAgICAweDBlCisjZGVmaW5lIEFDOTdfTElORUlOX1ZPTCAgICAgICAgICAweDEwCisjZGVmaW5lIEFDOTdfQ0RfVk9MICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIEFDOTdfVklERU9fVk9MICAgICAgICAgICAweDE0CisjZGVmaW5lIEFDOTdfQVVYX1ZPTCAgICAgICAgICAgICAweDE2CisjZGVmaW5lIEFDOTdfUENNX09VVF9WT0wgICAgICAgICAweDE4CisKKwkvKiBjYXB0dXJlIHJlZ2lzdGVycyAqLworI2RlZmluZSBBQzk3X1JFQ09SRF9TRUxFQ1QgICAgICAgMHgxYQorI2RlZmluZSBBQzk3X1JFQ09SRF9HQUlOICAgICAgICAgMHgxYworCisJLyogY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUM5N19HRU5FUkFMX1BVUlBPU0UgICAgIDB4MjAKKyNkZWZpbmUgQUM5N18zRF9DVFJMICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgQUM5N19BVURfSU5UX0FORF9QQUcgICAgIDB4MjQKKyNkZWZpbmUgQUM5N19QT1dFUl9ET1dOX0NUUkwgICAgIDB4MjYKKyNkZWZpbmUgQUM5N19FWFRfQVVEX0lEICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQUM5N19FWFRfQVVEX0NUUkwgICAgICAgIDB4MmEKKworLyogU3VwcG9ydGVkIHJhdGUgdmFyaWVzIGZvciBlYWNoIEFDOTcgZGV2aWNlCisgICBpZiB3cml0ZSBhbiB1bnN1cHBvcnRlZCB2YWx1ZSwgaXQgd2lsbCByZXR1cm4gdGhlIGNsb3Nlc3Qgb25lCisgKi8KKyNkZWZpbmUgQUM5N19QQ01fT1VUX0ZST05UX1NSQVRFIDB4MmMKKyNkZWZpbmUgQUM5N19QQ01fT1VUX1NVUlJfU1JBVEUgIDB4MmUKKyNkZWZpbmUgQUM5N19QQ01fT1VUX0xGRV9TUkFURSAgIDB4MzAKKyNkZWZpbmUgQUM5N19QQ01fSU5fU1JBVEUgICAgICAgIDB4MzIKKworCS8qIEZvciBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDIgY2hhbm5lbHMsIGV4dHJhIG91dHB1dCB2b2x1bWVzICovCisjZGVmaW5lIEFDOTdfTEZFX01BU1RFUl9WT0wgICAgICAweDM2CisjZGVmaW5lIEFDOTdfU1VSUl9NQVNURVJfVk9MICAgICAweDM4CisKKwkvKiBEaWdpdGFsIFNQRElGIG91dHB1dCBjb250cm9sICovCisjZGVmaW5lIEFDOTdfU1BESUZfT1VUX0NUUkwgICAgICAweDNhCisKKwkvKiBWZW5kb3IgSUQgaWRlbnRpZmllciAqLworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDEgICAgICAgICAgMHg3YworI2RlZmluZSBBQzk3X1ZFTkRPUl9JRDIgICAgICAgICAgMHg3ZQorCisvKiBFTVAyMDIgdmVuZG9yIHJlZ2lzdGVycyAqLworI2RlZmluZSBFTTIwMl9FWFRfTU9ERU1fQ1RSTCAgICAgMHgzZQorI2RlZmluZSBFTTIwMl9HUElPX0NPTkYgICAgICAgICAgMHg0YworI2RlZmluZSBFTTIwMl9HUElPX1BPTEFSSVRZICAgICAgMHg0ZQorI2RlZmluZSBFTTIwMl9HUElPX1NUSUNLWSAgICAgICAgMHg1MAorI2RlZmluZSBFTTIwMl9HUElPX01BU0sgICAgICAgICAgMHg1MgorI2RlZmluZSBFTTIwMl9HUElPX1NUQVRVUyAgICAgICAgMHg1NAorI2RlZmluZSBFTTIwMl9TUERJRl9PVVRfU0VMICAgICAgMHg2YQorI2RlZmluZSBFTTIwMl9BTlRJUE9QICAgICAgICAgICAgMHg3MgorI2RlZmluZSBFTTIwMl9FQVBEX0dQSU9fQUNDRVNTICAgMHg3NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA0ZWExZjFlLi41MzUyNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImVtMjh4eC5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCkBAIC00Nyw5ICs0OCw4IEBACiAJCSAgICAgICJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4sICIgXAogCQkgICAgICAiU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+IgogCi0jZGVmaW5lIERSSVZFUl9OQU1FICAgICAgICAgImVtMjh4eCIKICNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAiRW1waWEgZW0yOHh4IGJhc2VkIFVTQiB2aWRlbyBkZXZpY2UgZHJpdmVyIgotI2RlZmluZSBFTTI4WFhfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigwLCAxLCAwKQorI2RlZmluZSBFTTI4WFhfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigwLCAxLCAxKQogCiAjZGVmaW5lIGVtMjh4eF92aWRlb2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAodmlkZW9fZGVidWcpIFwKQEAgLTcyLDE5ICs3MiwxMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIExJU1RfSEVBRChlbTI4eHhfZGV2bGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGVtMjh4eF9kZXZsaXN0X211dGV4KTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYXJkW10gICAgID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX25yW10gPSB7WzAgLi4uIChFTTI4WFhfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmJpX25yW10gICA9IHtbMCAuLi4gKEVNMjhYWF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCByYWRpb19ucltdID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CiAKLW1vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2YmlfbnIsIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocmFkaW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNhcmQsICAgICAiY2FyZCB0eXBlIik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gZGV2aWNlIG51bWJlcnMiKTsKIE1PRFVMRV9QQVJNX0RFU0ModmJpX25yLCAgICJ2YmkgZGV2aWNlIG51bWJlcnMiKTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJyYWRpbyBkZXZpY2UgbnVtYmVycyIpOwpAQCAtOTMsOCArODcsMTUgQEAKIG1vZHVsZV9wYXJhbSh2aWRlb19kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmlkZW9fZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW3ZpZGVvXSIpOwogCi0vKiBCaXRtYXNrIG1hcmtpbmcgYWxsb2NhdGVkIGRldmljZXMgZnJvbSAwIHRvIEVNMjhYWF9NQVhCT0FSRFMgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVtMjh4eF9kZXZ1c2VkOworLyogc3VwcG9ydGVkIHZpZGVvIHN0YW5kYXJkcyAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfZm10IGZvcm1hdFtdID0geworCXsKKwkJLm5hbWUgICAgID0gIjE2YnBwIFlVWTIsIDQ6MjoyLCBwYWNrZWQiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmRlcHRoICAgID0gMTYsCisJCS5yZWcJICA9IEVNMjhYWF9PVVRGTVRfWVVWNDIyX1kwVVkxViwKKwl9LAorfTsKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCiAvKiBDb21tb24gdG8gYWxsIGJvYXJkcyAqLwpAQCAtMTIwLDggKzEyMSw2IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF91c2JfZHJpdmVyOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlETUEgYW5kIHRocmVhZCBmdW5jdGlvbnMKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zODYsMTYgKzM4NSwxOCBAQAogCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSBmOwogCi0JKnNpemUgPSAxNiAqIGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ID4+IDM7CisJKnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiBkZXYtPmZvcm1hdC0+ZGVwdGggKyA3KSA+PiAzOworCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSBFTTI4WFhfREVGX0JVRjsKIAogCWlmICgqY291bnQgPCBFTTI4WFhfTUlOX0JVRikKIAkJKmNvdW50ID0gRU0yOFhYX01JTl9CVUY7CiAKLQkvKiBBc2sgdHVuZXIgdG8gZ28gdG8gYW5hbG9nIG1vZGUgKi8KKwkvKiBBc2sgdHVuZXIgdG8gZ28gdG8gYW5hbG9nIG9yIHJhZGlvIG1vZGUgKi8KIAltZW1zZXQoJmYsIDAsIHNpemVvZihmKSk7CiAJZi5mcmVxdWVuY3kgPSBkZXYtPmN0bF9mcmVxOworCWYudHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAogCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCAmZik7CiAKQEAgLTQzOCw5ICs0MzksNyBAQAogCXN0cnVjdCBlbTI4eHggICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCWludCAgICAgICAgICAgICAgICAgIHJjID0gMCwgdXJiX2luaXQgPSAwOwogCi0JLyogRklYTUU6IEl0IGFzc3VtZXMgZGVwdGggPSAxNiAqLwotCS8qIFRoZSBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9ybWF0IGlzIDE2IGJpdHMvcGl4ZWwgKi8KLQlidWYtPnZiLnNpemUgPSAxNiAqIGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCA+PiAzOworCWJ1Zi0+dmIuc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIGRldi0+Zm9ybWF0LT5kZXB0aCArIDcpID4+IDM7CiAKIAlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MDgsNTYgKzUwNyw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKiogIHY0bDIgaW50ZXJmYWNlICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIGVtMjh4eF9jb25maWcoKQotICogaW5pdHMgcmVnaXN0ZXJzIHdpdGggc2FuZSBkZWZhdWx0cwotICovCi1zdGF0aWMgaW50IGVtMjh4eF9jb25maWcoc3RydWN0IGVtMjh4eCAqZGV2KQotewotCWludCByZXR2YWw7Ci0KLQkvKiBTZXRzIEkyQyBzcGVlZCB0byAxMDAgS0h6ICovCi0JaWYgKCFkZXYtPmlzX2VtMjgwMCkgewotCQlyZXR2YWwgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA2LCAiXHg0MCIsIDEpOwotCQlpZiAocmV0dmFsIDwgMCkgewotCQkJZW0yOHh4X2VycmRldigiJXM6IGVtMjh4eF93cml0ZV9yZWdzX3JlcSBmYWlsZWQhIHJldHZhbCBbJWRdXG4iLAotCQkJCV9fZnVuY19fLCByZXR2YWwpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCX0KLQotCS8qIGVuYWJsZSB2YmkgY2FwdHVyaW5nICovCi0KLS8qCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MGUsICJceEMwIiwgMSk7IGF1ZGlvIHJlZ2lzdGVyICovCi0vKgllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDBmLCAiXHg4MCIsIDEpOyBjbGsgcmVnaXN0ZXIgKi8KLQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDExLCAiXHg1MSIsIDEpOwotCi0JZGV2LT5tdXRlID0gMTsJCS8qIG1heWJlIG5vdCB0aGUgcmlnaHQgcGxhY2UuLi4gKi8KLQlkZXYtPnZvbHVtZSA9IDB4MWY7Ci0KLQllbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoZGV2KTsKLQllbTI4eHhfY29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoZGV2KTsKLQllbTI4eHhfY29tcHJlc3Npb25fZGlzYWJsZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBlbTI4eHhfY29uZmlnX2kyYygpCi0gKiBjb25maWd1cmUgaTJjIGF0dGFjaGVkIGRldmljZXMKLSAqLwotc3RhdGljIHZvaWQgZW0yOHh4X2NvbmZpZ19pMmMoc3RydWN0IGVtMjh4eCAqZGV2KQotewotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JaW50IHplcm8gPSAwOwotCi0Jcm91dGUuaW5wdXQgPSBJTlBVVChkZXYtPmN0bF9pbnB1dCktPnZtdXg7Ci0Jcm91dGUub3V0cHV0ID0gMDsKLQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfUkVTRVQsICZ6ZXJvKTsKLQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOwotCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NUUkVBTU9OLCBOVUxMKTsKLX0KLQogc3RhdGljIHZvaWQgdmlkZW9fbXV4KHN0cnVjdCBlbTI4eHggKmRldiwgaW50IGluZGV4KQogewogCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CkBAIC01NjYsMTAgKzUxNSwxNCBAQAogCXJvdXRlLm91dHB1dCA9IDA7CiAJZGV2LT5jdGxfaW5wdXQgPSBpbmRleDsKIAlkZXYtPmN0bF9haW5wdXQgPSBJTlBVVChpbmRleCktPmFtdXg7CisJZGV2LT5jdGxfYW91dHB1dCA9IElOUFVUKGluZGV4KS0+YW91dDsKKworCWlmICghZGV2LT5jdGxfYW91dHB1dCkKKwkJZGV2LT5jdGxfYW91dHB1dCA9IEVNMjhYWF9BT1VUX01BU1RFUjsKIAogCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CiAKLQlpZiAoZGV2LT5oYXNfbXNwMzR4eCkgeworCWlmIChkZXYtPmJvYXJkLmhhc19tc3AzNHh4KSB7CiAJCWlmIChkZXYtPmkyc19zcGVlZCkgewogCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRLAogCQkJCSZkZXYtPmkyc19zcGVlZCk7CkBAIC01OTUsMTIgKzU0OCwxMCBAQAogCQlyZXR1cm4gcmM7CiAKIAlpZiAoZGV2LT5zdHJlYW1fb24pCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVCVVNZOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPnN0cmVhbV9vbiA9IDE7CiAJZmgtPnN0cmVhbV9vbiAgPSAxOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTYxMywxMCArNTY0LDggQEAKIHsKIAlzdHJ1Y3QgZW0yOHh4ICAgICpkZXYgPSBmaC0+ZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlmaC0+c3RyZWFtX29uID0gMDsKIAlkZXYtPnN0cmVhbV9vbiA9IDA7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCiAvKgpAQCAtNzAzLDggKzY1Miw4IEBACiAKIAlmLT5mbXQucGl4LndpZHRoID0gZGV2LT53aWR0aDsKIAlmLT5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OwotCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKLQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBkZXYtPmZvcm1hdC0+Zm91cmNjOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gKGRldi0+d2lkdGggKiBkZXYtPmZvcm1hdC0+ZGVwdGggKyA3KSA+PiAzOwogCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgICogZGV2LT5oZWlnaHQ7CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKIApAQCAtNzE2LDYgKzY2NSwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGVtMjh4eF9mbXQgKmZvcm1hdF9ieV9mb3VyY2ModW5zaWduZWQgaW50IGZvdXJjYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdCk7IGkrKykKKwkJaWYgKGZvcm1hdFtpXS5mb3VyY2MgPT0gZm91cmNjKQorCQkJcmV0dXJuICZmb3JtYXRbaV07CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewpAQCAtNzI2LDI0ICs2ODYsMzAgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgbWF4dyAgID0gbm9ybV9tYXh3KGRldik7CiAJdW5zaWduZWQgaW50ICAgICAgICAgIG1heGggICA9IG5vcm1fbWF4aChkZXYpOwogCXVuc2lnbmVkIGludCAgICAgICAgICBoc2NhbGUsIHZzY2FsZTsKKwlzdHJ1Y3QgZW0yOHh4X2ZtdCAgICAgKmZtdDsKKworCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJaWYgKCFmbXQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJGb3VyY2MgZm9ybWF0ICglMDh4KSBpbnZhbGlkLlxuIiwKKwkJCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogd2lkdGggbXVzdCBldmVuIGJlY2F1c2Ugb2YgdGhlIFlVWVYgZm9ybWF0CiAJICAgaGVpZ2h0IG11c3QgYmUgZXZlbiBiZWNhdXNlIG9mIGludGVybGFjaW5nICovCiAJaGVpZ2h0ICY9IDB4ZmZmZTsKLQl3aWR0aCAmPSAweGZmZmU7CisJd2lkdGggICY9IDB4ZmZmZTsKIAotCWlmIChoZWlnaHQgPCAzMikKKwlpZiAodW5saWtlbHkoaGVpZ2h0IDwgMzIpKQogCQloZWlnaHQgPSAzMjsKLQlpZiAoaGVpZ2h0ID4gbWF4aCkKKwlpZiAodW5saWtlbHkoaGVpZ2h0ID4gbWF4aCkpCiAJCWhlaWdodCA9IG1heGg7Ci0JaWYgKHdpZHRoIDwgNDgpCisJaWYgKHVubGlrZWx5KHdpZHRoIDwgNDgpKQogCQl3aWR0aCA9IDQ4OwotCWlmICh3aWR0aCA+IG1heHcpCisJaWYgKHVubGlrZWx5KHdpZHRoID4gbWF4dykpCiAJCXdpZHRoID0gbWF4dzsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQlpZiAoZGV2LT5pc19lbTI4MDApIHsKKwlpZiAoZGV2LT5ib2FyZC5pc19lbTI4MDApIHsKIAkJLyogdGhlIGVtMjgwMCBjYW4gb25seSBzY2FsZSBkb3duIHRvIDUwJSAqLwogCQlpZiAoaGVpZ2h0ICUgKG1heGggLyAyKSkKIAkJCWhlaWdodCA9IG1heGg7CkBAIC03NjYsMTMgKzczMiwxMiBAQAogCiAJZi0+Zm10LnBpeC53aWR0aCA9IHdpZHRoOwogCWYtPmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OwotCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKLQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IHdpZHRoICogMjsKLQlmLT5mbXQucGl4LnNpemVpbWFnZSA9IHdpZHRoICogMiAqIGhlaWdodDsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZm10LT5mb3VyY2M7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAoZGV2LT53aWR0aCAqIGZtdC0+ZGVwdGggKyA3KSA+PiAzOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgKiBoZWlnaHQ7CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKIAlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC03ODIsMTQgKzc0NywyMSBAQAogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgKmRldiA9IGZoLT5kZXY7CiAJaW50ICAgICAgICAgICAgICAgICAgIHJjOworCXN0cnVjdCBlbTI4eHhfZm10ICAgICAqZm10OwogCiAJcmMgPSBjaGVja19kZXYoZGV2KTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCiAJdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoIWZtdCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAogCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKIAkJZW0yOHh4X2VycmRldigiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOwpAQCAtODA2LDYgKzc3OCw3IEBACiAJLyogc2V0IG5ldyBpbWFnZSBzaXplICovCiAJZGV2LT53aWR0aCA9IGYtPmZtdC5waXgud2lkdGg7CiAJZGV2LT5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlkZXYtPmZvcm1hdCA9IGZtdDsKIAlnZXRfc2NhbGUoZGV2LCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgJmRldi0+aHNjYWxlLCAmZGV2LT52c2NhbGUpOwogCiAJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKQEAgLTgzMSwxNSArODA0LDEyIEBACiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+bm9ybSA9ICpub3JtOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCS8qIEFkanVzdHMgd2lkdGgvaGVpZ2h0LCBpZiBuZWVkZWQgKi8KIAlmLmZtdC5waXgud2lkdGggPSBkZXYtPndpZHRoOwogCWYuZm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKIAl2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsICZmKTsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KIAkvKiBzZXQgbmV3IGltYWdlIHNpemUgKi8KIAlkZXYtPndpZHRoID0gZi5mbXQucGl4LndpZHRoOwogCWRldi0+aGVpZ2h0ID0gZi5mbXQucGl4LmhlaWdodDsKQEAgLTkyOCwyMCArODk4LDM4IEBACiB7CiAJc3RydWN0IGVtMjh4eF9maCAgICpmaCAgICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICpkZXYgICA9IGZoLT5kZXY7Ci0JdW5zaWduZWQgaW50ICAgICAgICBpbmRleCA9IGEtPmluZGV4OwogCi0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpbmRleCA9IGRldi0+Y3RsX2FpbnB1dDsKLQotCWlmIChpbmRleCA9PSAwKQorCXN3aXRjaCAoYS0+aW5kZXgpIHsKKwljYXNlIEVNMjhYWF9BTVVYX1ZJREVPOgogCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKLQllbHNlCisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FNVVhfTElORV9JTjoKIAkJc3RyY3B5KGEtPm5hbWUsICJMaW5lIEluIik7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FNVVhfVklERU8yOgorCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24gYWx0Iik7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FNVVhfUEhPTkU6CisJCXN0cmNweShhLT5uYW1lLCAiUGhvbmUiKTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfQU1VWF9NSUM6CisJCXN0cmNweShhLT5uYW1lLCAiTWljIik7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FNVVhfQ0Q6CisJCXN0cmNweShhLT5uYW1lLCAiQ0QiKTsKKwkJYnJlYWs7CisJY2FzZSBFTTI4WFhfQU1VWF9BVVg6CisJCXN0cmNweShhLT5uYW1lLCAiQXV4Iik7CisJCWJyZWFrOworCWNhc2UgRU0yOFhYX0FNVVhfUENNX09VVDoKKwkJc3RyY3B5KGEtPm5hbWUsICJQQ00iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCisJYS0+aW5kZXggPSBkZXYtPmN0bF9haW5wdXQ7CiAJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlhLT5pbmRleCA9IGluZGV4OwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NTEsOSArOTM5LDE1IEBACiAJc3RydWN0IGVtMjh4eF9maCAgICpmaCAgPSBwcml2OwogCXN0cnVjdCBlbTI4eHggICAgICAqZGV2ID0gZmgtPmRldjsKIAotCWlmIChhLT5pbmRleCAhPSBkZXYtPmN0bF9haW5wdXQpCi0JCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKKwlkZXYtPmN0bF9haW5wdXQgPSBJTlBVVChhLT5pbmRleCktPmFtdXg7CisJZGV2LT5jdGxfYW91dHB1dCA9IElOUFVUKGEtPmluZGV4KS0+YW91dDsKKworCWlmICghZGV2LT5jdGxfYW91dHB1dCkKKwkJZGV2LT5jdGxfYW91dHB1dCA9IEVNMjhYWF9BT1VUX01BU1RFUjsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTc0LDcgKzk2OCw3IEBACiAKIAlxYy0+aWQgPSBpZDsKIAotCWlmICghZGV2LT5oYXNfbXNwMzR4eCkgeworCWlmICghZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbTI4eHhfcWN0cmwpOyBpKyspIHsKIAkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IGVtMjh4eF9xY3RybFtpXS5pZCkgewogCQkJCW1lbWNweShxYywgJihlbTI4eHhfcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7CkBAIC0xMDAyLDE3ICs5OTYsMTQgQEAKIAlyYyA9IGNoZWNrX2RldihkZXYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKKwlyYyA9IDA7CisKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0JaWYgKCFkZXYtPmhhc19tc3AzNHh4KQotCQlyYyA9IGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOwotCWVsc2UKLQkJcmMgPSAtRUlOVkFMOwotCi0JaWYgKHJjID09IC1FSU5WQUwpIHsKKwlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKLQkJcmMgPSAwOwotCX0KKwllbHNlCisJCXJjID0gZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJjOwpAQCAtMTAzMiw3ICsxMDIzLDcgQEAKIAogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlpZiAoZGV2LT5oYXNfbXNwMzR4eCkKKwlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19DVFJMLCBjdHJsKTsKIAllbHNlIHsKIAkJcmMgPSAxOwpAQCAtMTExMiw4ICsxMTAzLDEwIEBACiAJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OwogCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmN0bF9mcmVxOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0Myw2ICsxMTM2LDcgQEAKIAllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1OSw2ICsxMTUzLDIxIEBACiAJfQogfQogCitzdGF0aWMgaW50IHZpZGlvY19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJICAgICAgIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGVtMjh4eF9maCAgICAgICpmaCAgPSBwcml2OworCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfQ0hJUF9JREVOVCwgY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQogewpAQCAtMTE2NiwxOSArMTE3NSw0MyBAQAogCXN0cnVjdCBlbTI4eHggICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAlpbnQgcmV0OwogCi0JaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocmVnLT5tYXRjaF90eXBlKSB7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfQUM5NzoKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0ID0gZW0yOHh4X3JlYWRfYWM5NyhkZXYsIHJlZy0+cmVnKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAKKwkJcmVnLT52YWwgPSByZXQ7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI6CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjoKKwkJLyogTm90IHN1cHBvcnRlZCB5ZXQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBNYXRjaCBob3N0ICovCiAJaWYgKGVtMjh4eF9yZWdfbGVuKHJlZy0+cmVnKSA9PSAxKSB7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCXJldCA9IGVtMjh4eF9yZWFkX3JlZyhkZXYsIHJlZy0+cmVnKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAogCQlyZWctPnZhbCA9IHJldDsKIAl9IGVsc2UgewogCQlfX2xlNjQgdmFsID0gMDsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0ID0gZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oZGV2LCBVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCQkJCQkgICByZWctPnJlZywgKGNoYXIgKikmdmFsLCAyKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTExOTQsMTEgKzEyMjcsMzUgQEAKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OwogCV9fbGU2NCBidWY7CisJaW50ICAgIHJjOwogCisJc3dpdGNoIChyZWctPm1hdGNoX3R5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9BQzk3OgorCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlyYyA9IGVtMjh4eF93cml0ZV9hYzk3KGRldiwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJCXJldHVybiByYzsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSOgorCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI6CisJCS8qIE5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCXJldHVybiAtRUlOVkFMOworCWRlZmF1bHQ6CisJCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTWF0Y2ggaG9zdCAqLwogCWJ1ZiA9IGNwdV90b19sZTY0KHJlZy0+dmFsKTsKIAotCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIHJlZy0+cmVnLCAoY2hhciAqKSZidWYsCi0JCQkJIGVtMjh4eF9yZWdfbGVuKHJlZy0+cmVnKSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IGVtMjh4eF93cml0ZV9yZWdzKGRldiwgcmVnLT5yZWcsIChjaGFyICopJmJ1ZiwKKwkJCSAgICAgICBlbTI4eHhfcmVnX2xlbihyZWctPnJlZykpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByYzsKIH0KICNlbmRpZgogCkBAIC0xMjM1LDEwICsxMjkyLDE1IEBACiAJCXJldHVybiByYzsKIAogCi0JaWYgKHVubGlrZWx5KHJlc19nZXQoZmgpIDwgMCkpCi0JCXJldHVybiAtRUJVU1k7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpKTsKKwlpZiAobGlrZWx5KHJjID49IDApKQorCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTEyNTcsOSArMTMxOSwxMyBAQAogCWlmICh0eXBlICE9IGZoLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKIAl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKIAlyZXNfZnJlZShmaCk7CiAKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI3MSw3ICsxMzM3LDcgQEAKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnVkZXYtPmRldi5idXNfaWQsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCiAJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKIApAQCAtMTI4OCwxNSArMTM1NCwxMyBAQAogfQogCiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZCkKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKLQlpZiAoZm10ZC0+aW5kZXggIT0gMCkKKwlpZiAodW5saWtlbHkoZi0+aW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmbXRkLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCXN0cmNweShmbXRkLT5kZXNjcmlwdGlvbiwgIlBhY2tlZCBZVVkyIik7Ci0JZm10ZC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKLQltZW1zZXQoZm10ZC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihmbXRkLT5yZXNlcnZlZCkpOworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdFtmLT5pbmRleF0ubmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRbZi0+aW5kZXhdLmZvdXJjYzsKIAogCXJldHVybiAwOwogfQpAQCAtMTQyNCw3ICsxNDg4LDcgQEAKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnVkZXYtPmRldi5idXNfaWQsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCiAJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwpAQCAtMTQ0Miw3ICsxNTA2LDEwIEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ3NCw3ICsxNTQxLDkgQEAKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfVFVORVIsIHQpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUxNiwyOCArMTU4NSwxMyBAQAogc3RhdGljIGludCBlbTI4eHhfdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaW50IGVyckNvZGUgPSAwLCByYWRpbyA9IDA7Ci0Jc3RydWN0IGVtMjh4eCAqaCwgKmRldiA9IE5VTEw7CisJaW50IGVyckNvZGUgPSAwLCByYWRpbzsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXY7CisJZW51bSB2NGwyX2J1Zl90eXBlIGZoX3R5cGU7CiAJc3RydWN0IGVtMjh4eF9maCAqZmg7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIGZoX3R5cGUgPSAwOwogCi0JbXV0ZXhfbG9jaygmZW0yOHh4X2Rldmxpc3RfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmVtMjh4eF9kZXZsaXN0LCBkZXZsaXN0KSB7Ci0JCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ICA9IGg7Ci0JCQlmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQl9Ci0JCWlmIChoLT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJZGV2ICA9IGg7Ci0JCQlmaF90eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQkJfQotCQlpZiAoaC0+cmFkaW9fZGV2ICYmCi0JCSAgICBoLT5yYWRpb19kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlyYWRpbyA9IDE7Ci0JCQlkZXYgICA9IGg7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CisJZGV2ID0gZW0yOHh4X2dldF9kZXZpY2UoaW5vZGUsICZmaF90eXBlLCAmcmFkaW8pOworCiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTU3MSw3ICsxNjI1LDcgQEAKIAkJLyogTmVlZGVkLCBzaW5jZSBHUElPIG1pZ2h0IGhhdmUgZGlzYWJsZWQgcG93ZXIgb2YKIAkJICAgc29tZSBpMmMgZGV2aWNlCiAJCSAqLwotCQllbTI4eHhfY29uZmlnX2kyYyhkZXYpOworCQllbTI4eHhfd2FrZV9pMmMoZGV2KTsKIAogCX0KIAlpZiAoZmgtPnJhZGlvKSB7CkBAIC0xNTk1LDE2ICsxNjQ5LDExIEBACiAgKiB1bnJlZ2lzdGVycyB0aGUgdjRsMixpMmMgYW5kIHVzYiBkZXZpY2VzCiAgKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGlzY29uZWN0ZWQgb3IgYXQgbW9kdWxlIHVubG9hZAogKi8KLXN0YXRpYyB2b2lkIGVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit2b2lkIGVtMjh4eF9yZWxlYXNlX2FuYWxvZ19yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KQogewogCiAJLypGSVhNRTogSTJDIElSIHNob3VsZCBiZSBkaXNjb25uZWN0ZWQgKi8KIAotCWVtMjh4eF9pbmZvKCJWNEwyIGRldmljZXMgL2Rldi92aWRlbyVkIGFuZCAvZGV2L3ZiaSVkIGRlcmVnaXN0ZXJlZFxuIiwKLQkJCQlkZXYtPnZkZXYtPm51bSwgZGV2LT52YmlfZGV2LT5udW0pOwotCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwotCWlmIChkZXYtPnNidXR0b25faW5wdXRfZGV2KQotCQllbTI4eHhfZGVyZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oZGV2KTsKIAlpZiAoZGV2LT5yYWRpb19kZXYpIHsKIAkJaWYgKC0xICE9IGRldi0+cmFkaW9fZGV2LT5taW5vcikKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+cmFkaW9fZGV2KTsKQEAgLTE2MTMsNiArMTY2Miw4IEBACiAJCWRldi0+cmFkaW9fZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+dmJpX2RldikgeworCQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92YmklZCBkZXJlZ2lzdGVyZWRcbiIsCisJCQkgICAgZGV2LT52YmlfZGV2LT5udW0pOwogCQlpZiAoLTEgIT0gZGV2LT52YmlfZGV2LT5taW5vcikKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2Rldik7CiAJCWVsc2UKQEAgLTE2MjAsMTcgKzE2NzEsMTQgQEAKIAkJZGV2LT52YmlfZGV2ID0gTlVMTDsKIAl9CiAJaWYgKGRldi0+dmRldikgeworCQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKKwkJCSAgICBkZXYtPnZkZXYtPm51bSk7CiAJCWlmICgtMSAhPSBkZXYtPnZkZXYtPm1pbm9yKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2KTsKIAkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZGV2KTsKIAkJZGV2LT52ZGV2ID0gTlVMTDsKIAl9Ci0JZW0yOHh4X2kyY191bnJlZ2lzdGVyKGRldik7Ci0JdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKLQotCS8qIE1hcmsgZGV2aWNlIGFzIHVudXNlZCAqLwotCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8ZGV2LT5kZXZubyk7CiB9CiAKIC8qCkBAIC0xNjQ3LDExICsxNjk1LDEwIEBACiAJZW0yOHh4X3ZpZGVvZGJnKCJ1c2Vycz0lZFxuIiwgZGV2LT51c2Vycyk7CiAKIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJaWYgKHJlc19jaGVjayhmaCkpCiAJCXJlc19mcmVlKGZoKTsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KIAlpZiAoZGV2LT51c2VycyA9PSAxKSB7CiAJCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKIAkJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CkBAIC0xNjY1LDkgKzE3MTIsMTIgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKKwkJLyogU2F2ZSBzb21lIHBvd2VyIGJ5IHB1dHRpbmcgdHVuZXIgdG8gc2xlZXAgKi8KKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisKIAkJLyogZG8gdGhpcyBiZWZvcmUgc2V0dGluZyBhbHRlcm5hdGUhICovCiAJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOwotCQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfTU9ERV9VTkRFRklORUQpOworCQllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfU1VTUEVORCk7CiAKIAkJLyogc2V0IGFsdGVybmF0ZSAwICovCiAJCWRldi0+YWx0ID0gMDsKQEAgLTE3MDYsOCArMTc1NiwxMiBAQAogCSAqLwogCiAJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQlpZiAodW5saWtlbHkocmVzX2dldChmaCkpKQotCQkJcmV0dXJuIC1FQlVTWTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJcmMgPSByZXNfZ2V0KGZoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJCWlmICh1bmxpa2VseShyYyA8IDApKQorCQkJcmV0dXJuIHJjOwogCiAJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZpZHEsIGJ1ZiwgY291bnQsIHBvcywgMCwKIAkJCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwpAQCAtMTcyOSw3ICsxNzgzLDExIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JaWYgKHVubGlrZWx5KHJlc19nZXQoZmgpIDwgMCkpCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh1bmxpa2VseShyYyA8IDApKQogCQlyZXR1cm4gUE9MTEVSUjsKIAogCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZmgtPnR5cGUpCkBAIC0xNzQ3LDEzICsxODA1LDE3IEBACiAJc3RydWN0IGVtMjh4eAkgKmRldiAgID0gZmgtPmRldjsKIAlpbnQJCSByYzsKIAotCWlmICh1bmxpa2VseShyZXNfZ2V0KGZoKSA8IDApKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJcmMgPSBjaGVja19kZXYoZGV2KTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gcmVzX2dldChmaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCXJldHVybiByYzsKKwogCXJjID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92aWRxLCB2bWEpOwogCiAJZW0yOHh4X3ZpZGVvZGJnKCJ2bWEgc3RhcnQ9MHglMDhseCwgc2l6ZT0lbGQsIHJldD0lZFxuIiwKQEAgLTE4MTAsNiArMTg3Miw3IEBACiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS52aWRpb2NfZ19yZWdpc3RlciAgICAgICAgICA9IHZpZGlvY19nX3JlZ2lzdGVyLAogCS52aWRpb2Nfc19yZWdpc3RlciAgICAgICAgICA9IHZpZGlvY19zX3JlZ2lzdGVyLAorCS52aWRpb2NfZ19jaGlwX2lkZW50ICAgICAgICA9IHZpZGlvY19nX2NoaXBfaWRlbnQsCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAkudmlkaW9jZ21idWYgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKQEAgLTE4NjUsNDQgKzE5MjgsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHVzYiBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLXN0YXRpYyBMSVNUX0hFQUQoZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOwotCi1pbnQgZW0yOHh4X3JlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzKQotewotCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm9wcy0+bmV4dCwgJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZlbTI4eHhfZGV2bGlzdCwgZGV2bGlzdCkgewotCQlpZiAoZGV2KQotCQkJb3BzLT5pbml0KGRldik7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIkVtMjh4eDogSW5pdGlhbGl6ZWQgKCVzKSBleHRlbnNpb25cbiIsIG9wcy0+bmFtZSk7Ci0JbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGVtMjh4eF9yZWdpc3Rlcl9leHRlbnNpb24pOwotCi12b2lkIGVtMjh4eF91bnJlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzKQotewotCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZlbTI4eHhfZGV2bGlzdCwgZGV2bGlzdCkgewotCQlpZiAoZGV2KQotCQkJb3BzLT5maW5pKGRldik7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOwotCXByaW50ayhLRVJOX0lORk8gIkVtMjh4eDogUmVtb3ZlZCAoJXMpIGV4dGVuc2lvblxuIiwgb3BzLT5uYW1lKTsKLQlsaXN0X2RlbCgmb3BzLT5uZXh0KTsKLQltdXRleF91bmxvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKLQltdXRleF91bmxvY2soJmVtMjh4eF9kZXZsaXN0X211dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0woZW0yOHh4X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgKmVtMjh4eF92ZGV2X2luaXQoc3RydWN0IGVtMjh4eCAqZGV2LAogCQkJCQkgICAgIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgKnRlbXBsYXRlLApAQCAtMTkyNSwxMSArMTk1MCw0MyBAQAogCXJldHVybiB2ZmQ7CiB9CiAKLQotc3RhdGljIGludCByZWdpc3Rlcl9hbmFsb2dfZGV2aWNlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCitpbnQgZW0yOHh4X3JlZ2lzdGVyX2FuYWxvZ19kZXZpY2VzKHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAlpbnQgcmV0OwogCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHY0bDIgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWRcbiIsCisJCWRldi0+bmFtZSwKKwkJKEVNMjhYWF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkJKEVNMjhYWF9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLCBFTTI4WFhfVkVSU0lPTl9DT0RFICYgMHhmZik7CisKKwkvKiBBbmFsb2cgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKwlkZXYtPmZvcm1hdCA9ICZmb3JtYXRbMF07CisJdmlkZW9fbXV4KGRldiwgMCk7CisKKwkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLworCisvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgMHhjMCk7IGF1ZGlvIHJlZ2lzdGVyICovCisvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAweDgwKTsgY2xrIHJlZ2lzdGVyICovCisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMTFfVklOQ1RSTCwgMHg1MSk7CisKKwlkZXYtPm11dGUgPSAxOwkJLyogbWF5YmUgbm90IHRoZSByaWdodCBwbGFjZS4uLiAqLworCWRldi0+dm9sdW1lID0gMHgxZjsKKworCWVtMjh4eF9zZXRfb3V0Zm10KGRldik7CisJZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KGRldik7CisJZW0yOHh4X2NvbXByZXNzaW9uX2Rpc2FibGUoZGV2KTsKKworCS8qIHNldCBkZWZhdWx0IG5vcm0gKi8KKwlkZXYtPm5vcm0gPSBlbTI4eHhfdmlkZW9fdGVtcGxhdGUuY3VycmVudF9ub3JtOworCWRldi0+d2lkdGggPSBub3JtX21heHcoZGV2KTsKKwlkZXYtPmhlaWdodCA9IG5vcm1fbWF4aChkZXYpOworCWRldi0+aW50ZXJsYWNlZCA9IEVNMjhYWF9JTlRFUkxBQ0VEX0RFRkFVTFQ7CisJZGV2LT5oc2NhbGUgPSAwOworCWRldi0+dnNjYWxlID0gMDsKKworCS8qIEZJWE1FOiBUaGlzIGlzIGEgdmVyeSBiYWQgaGFjayEgTm90IGFsbCBkZXZpY2VzIGhhdmUgVFYgb24gaW5wdXQgMiAqLworCWRldi0+Y3RsX2lucHV0ID0gMjsKKwogCS8qIGFsbG9jYXRlIGFuZCBmaWxsIHZpZGVvIHZpZGVvX2RldmljZSBzdHJ1Y3QgKi8KIAlkZXYtPnZkZXYgPSBlbTI4eHhfdmRldl9pbml0KGRldiwgJmVtMjh4eF92aWRlb190ZW1wbGF0ZSwgInZpZGVvIik7CiAJaWYgKCFkZXYtPnZkZXYpIHsKQEAgLTE5NzgsMzgzICsyMDM1LDMgQEAKIAogCXJldHVybiAwOwogfQotCi0KLS8qCi0gKiBlbTI4eHhfaW5pdF9kZXYoKQotICogYWxsb2NhdGVzIGFuZCBpbml0cyB0aGUgZGV2aWNlIHN0cnVjdHMsIHJlZ2lzdGVycyBpMmMgYnVzIGFuZCB2NGwgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgZW0yOHh4X2luaXRfZGV2KHN0cnVjdCBlbTI4eHggKipkZXZoYW5kbGUsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAotCQkJICAgaW50IG1pbm9yKQotewotCXN0cnVjdCBlbTI4eHhfb3BzICpvcHMgPSBOVUxMOwotCXN0cnVjdCBlbTI4eHggKmRldiA9ICpkZXZoYW5kbGU7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IGVyckNvZGU7Ci0JdW5zaWduZWQgaW50IG1heGgsIG1heHc7Ci0KLQlkZXYtPnVkZXYgPSB1ZGV2OwotCW11dGV4X2luaXQoJmRldi0+bG9jayk7Ci0JbXV0ZXhfaW5pdCgmZGV2LT5jdHJsX3VyYl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5vcGVuKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZnJhbWUpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9zdHJlYW0pOwotCi0JZGV2LT5lbTI4eHhfd3JpdGVfcmVncyA9IGVtMjh4eF93cml0ZV9yZWdzOwotCWRldi0+ZW0yOHh4X3JlYWRfcmVnID0gZW0yOHh4X3JlYWRfcmVnOwotCWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4gPSBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbjsKLQlkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcSA9IGVtMjh4eF93cml0ZV9yZWdzX3JlcTsKLQlkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEgPSBlbTI4eHhfcmVhZF9yZWdfcmVxOwotCWRldi0+aXNfZW0yODAwID0gZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5pc19lbTI4MDA7Ci0KLQllbTI4eHhfcHJlX2NhcmRfc2V0dXAoZGV2KTsKLQotCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7Ci0JaWYgKGVyckNvZGUpIHsKLQkJZW0yOHh4X2VycmRldigiZXJyb3IgY29uZmlndXJpbmcgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogcmVnaXN0ZXIgaTJjIGJ1cyAqLwotCWVyckNvZGUgPSBlbTI4eHhfaTJjX3JlZ2lzdGVyKGRldik7Ci0JaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfaTJjX3JlZ2lzdGVyIC0gZXJyQ29kZSBbJWRdIVxuIiwKLQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKLQkJcmV0dXJuIGVyckNvZGU7Ci0JfQotCi0JLyogRG8gYm9hcmQgc3BlY2lmaWMgaW5pdCBhbmQgZWVwcm9tIHJlYWRpbmcgKi8KLQllbTI4eHhfY2FyZF9zZXR1cChkZXYpOwotCi0JLyogQ29uZmlndXJlIGF1ZGlvICovCi0JZXJyQ29kZSA9IGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7Ci0JaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldCAtIGVyckNvZGUgWyVkXSFcbiIsCi0JCQlfX2Z1bmNfXywgZXJyQ29kZSk7Ci0JCXJldHVybiBlcnJDb2RlOwotCX0KLQotCS8qIGNvbmZpZ3VyZSB0aGUgZGV2aWNlICovCi0JZW0yOHh4X2NvbmZpZ19pMmMoZGV2KTsKLQotCS8qIHNldCBkZWZhdWx0IG5vcm0gKi8KLQlkZXYtPm5vcm0gPSBlbTI4eHhfdmlkZW9fdGVtcGxhdGUuY3VycmVudF9ub3JtOwotCi0JbWF4dyA9IG5vcm1fbWF4dyhkZXYpOwotCW1heGggPSBub3JtX21heGgoZGV2KTsKLQotCS8qIHNldCBkZWZhdWx0IGltYWdlIHNpemUgKi8KLQlkZXYtPndpZHRoID0gbWF4dzsKLQlkZXYtPmhlaWdodCA9IG1heGg7Ci0JZGV2LT5pbnRlcmxhY2VkID0gRU0yOFhYX0lOVEVSTEFDRURfREVGQVVMVDsKLQlkZXYtPmhzY2FsZSA9IDA7Ci0JZGV2LT52c2NhbGUgPSAwOwotCWRldi0+Y3RsX2lucHV0ID0gMjsKLQotCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7Ci0JaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfY29uZmlnIC0gZXJyQ29kZSBbJWRdIVxuIiwKLQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKLQkJcmV0dXJuIGVyckNvZGU7Ci0JfQotCi0JLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCi0JSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEucXVldWVkKTsKLQotCi0JaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKLQkJLyogU2VuZCBhIHJlc2V0IHRvIG90aGVyIGNoaXBzIHZpYSBncGlvICovCi0JCWVyckNvZGUgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmNyIsIDEpOwotCQlpZiAoZXJyQ29kZSA8IDApIHsKLQkJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfd3JpdGVfcmVnc19yZXEgLSBtc3AzNHh4KDEpIGZhaWxlZCEgZXJyQ29kZSBbJWRdXG4iLAotCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKLQkJCXJldHVybiBlcnJDb2RlOwotCQl9Ci0JCW1zbGVlcCgzKTsKLQotCQllcnJDb2RlID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKLQkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIC0gbXNwMzR4eCgyKSBmYWlsZWQhIGVyckNvZGUgWyVkXVxuIiwKLQkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7Ci0JCQlyZXR1cm4gZXJyQ29kZTsKLQkJfQotCQltc2xlZXAoMyk7Ci0JfQotCi0JdmlkZW9fbXV4KGRldiwgMCk7Ci0KLQltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAmZW0yOHh4X2Rldmxpc3QpOwotCXJldHZhbCA9IHJlZ2lzdGVyX2FuYWxvZ19kZXZpY2VzKGRldik7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJZW0yOHh4X3JlbGVhc2VfcmVzb3VyY2VzKGRldik7Ci0JCW11dGV4X3VubG9jaygmZW0yOHh4X2Rldmxpc3RfbXV0ZXgpOwotCQlnb3RvIGZhaWxfcmVnX2RldmljZXM7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0X2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0KSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdCwgbmV4dCkgewotCQkJaWYgKG9wcy0+aWQpCi0JCQkJb3BzLT5pbml0KGRldik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbF9yZWdfZGV2aWNlczoKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFKQotc3RhdGljIHZvaWQgcmVxdWVzdF9tb2R1bGVfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBlbTI4eHggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJICAgICBzdHJ1Y3QgZW0yOHh4LCByZXF1ZXN0X21vZHVsZV93ayk7Ci0KLQlpZiAoZGV2LT5oYXNfYXVkaW9fY2xhc3MpCi0JCXJlcXVlc3RfbW9kdWxlKCJzbmQtdXNiLWF1ZGlvIik7Ci0JZWxzZQotCQlyZXF1ZXN0X21vZHVsZSgiZW0yOHh4LWFsc2EiKTsKLQotCWlmIChkZXYtPmhhc19kdmIpCi0JCXJlcXVlc3RfbW9kdWxlKCJlbTI4eHgtZHZiIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCi17Ci0JSU5JVF9XT1JLKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drLCByZXF1ZXN0X21vZHVsZV9hc3luYyk7Ci0Jc2NoZWR1bGVfd29yaygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7Ci19Ci0jZWxzZQotI2RlZmluZSByZXF1ZXN0X21vZHVsZXMoZGV2KQotI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCi0KLS8qCi0gKiBlbTI4eHhfdXNiX3Byb2JlKCkKLSAqIGNoZWNrcyBmb3Igc3VwcG9ydGVkIGRldmljZXMKLSAqLwotc3RhdGljIGludCBlbTI4eHhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpZjsKLQlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBOVUxMOwotCWludCByZXR2YWwgPSAtRU5PREVWOwotCWludCBpLCBuciwgaWZudW07Ci0KLQl1ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKLQlpZm51bSA9IGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0KLQkvKiBDaGVjayB0byBzZWUgbmV4dCBmcmVlIGRldmljZSBhbmQgbWFyayBhcyB1c2VkICovCi0JbnIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZlbTI4eHhfZGV2dXNlZCwgRU0yOFhYX01BWEJPQVJEUyk7Ci0JZW0yOHh4X2RldnVzZWQgfD0gMTw8bnI7Ci0KLQkvKiBEb24ndCByZWdpc3RlciBhdWRpbyBpbnRlcmZhY2VzICovCi0JaWYgKGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8pIHsKLQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIGF1ZGlvIGRldmljZSAoJTA0eDolMDR4KTogaW50ZXJmYWNlICVpLCBjbGFzcyAlaVxuIiwKLQkJCQl1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLAotCQkJCXVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0LAotCQkJCWlmbnVtLAotCQkJCWludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7Ci0KLQkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBuZXcgdmlkZW8gZGV2aWNlICglMDR4OiUwNHgpOiBpbnRlcmZhY2UgJWksIGNsYXNzICVpXG4iLAotCQkJdWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciwKLQkJCXVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0LAotCQkJaWZudW0sCi0JCQlpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOwotCi0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKLQotCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaGFzIHRoZSBpc28gaW4gZW5kcG9pbnQgYXQgdGhlIGNvcnJlY3QgcGxhY2UgKi8KLQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgIT0KLQkgICAgVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewotCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FICIgcHJvYmluZyBlcnJvcjogZW5kcG9pbnQgaXMgbm9uLUlTTyBlbmRwb2ludCFcbiIpOwotCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PG5yKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSB7Ci0JCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBwcm9iaW5nIGVycm9yOiBlbmRwb2ludCBpcyBJU08gT1VUIGVuZHBvaW50IVxuIik7Ci0JCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8bnIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAobnIgPj0gRU0yOFhYX01BWEJPQVJEUykgewotCQlwcmludGsoRFJJVkVSX05BTUUgIjogU3VwcG9ydHMgb25seSAlaSBlbTI4eHggYm9hcmRzLlxuIiwKLQkJCQlFTTI4WFhfTUFYQk9BUkRTKTsKLQkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwotCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiOiBvdXQgb2YgbWVtb3J5IVxuIik7Ci0JCWVtMjh4eF9kZXZ1c2VkICY9IH4oMTw8bnIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzbnByaW50ZihkZXYtPm5hbWUsIDI5LCAiZW0yOHh4ICMlZCIsIG5yKTsKLQlkZXYtPmRldm5vID0gbnI7Ci0JZGV2LT5tb2RlbCA9IGlkLT5kcml2ZXJfaW5mbzsKLQlkZXYtPmFsdCAgID0gLTE7Ci0KLQkvKiBDaGVja3MgaWYgYXVkaW8gaXMgcHJvdmlkZWQgYnkgc29tZSBpbnRlcmZhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgdWRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKLQkJdWlmID0gdWRldi0+Y29uZmlnLT5pbnRlcmZhY2VbaV07Ci0JCWlmICh1aWYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPKSB7Ci0JCQlkZXYtPmhhc19hdWRpb19jbGFzcyA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiAlcyB1c2IgYXVkaW8gY2xhc3NcbiIsCi0JCSAgIGRldi0+aGFzX2F1ZGlvX2NsYXNzID8gIkhhcyIgOiAiRG9lc24ndCBoYXZlIik7Ci0KLQkvKiBjb21wdXRlIGFsdGVybmF0ZSBtYXggcGFja2V0IHNpemVzICovCi0JdWlmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF07Ci0KLQlkZXYtPm51bV9hbHQgPSB1aWYtPm51bV9hbHRzZXR0aW5nOwotCWVtMjh4eF9pbmZvKCJBbHRlcm5hdGUgc2V0dGluZ3M6ICVpXG4iLCBkZXYtPm51bV9hbHQpOwotLyoJZGV2LT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYyhzaXplb2YoKmRldi0+YWx0X21heF9wa3Rfc2l6ZSkqICovCi0JZGV2LT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYygzMiAqIGRldi0+bnVtX2FsdCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoZGV2LT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKLQkJZW0yOHh4X2VycmRldigib3V0IG9mIG1lbW9yeSFcbiIpOwotCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PG5yKTsKLQkJa2ZyZWUoZGV2KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2FsdCA7IGkrKykgewotCQl1MTYgdG1wID0gbGUxNl90b19jcHUodWlmLT5hbHRzZXR0aW5nW2ldLmVuZHBvaW50WzFdLmRlc2MuCi0JCQkJCQkJd01heFBhY2tldFNpemUpOwotCQlkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPQotCQkgICAgKHRtcCAmIDB4MDdmZikgKiAoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOwotCQllbTI4eHhfaW5mbygiQWx0ZXJuYXRlIHNldHRpbmcgJWksIG1heCBzaXplPSAlaVxuIiwgaSwKLQkJCQkJCWRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXSk7Ci0JfQotCi0JaWYgKChjYXJkW25yXSA+PSAwKSAmJiAoY2FyZFtucl0gPCBlbTI4eHhfYmNvdW50KSkKLQkJZGV2LT5tb2RlbCA9IGNhcmRbbnJdOwotCi0JLyogYWxsb2NhdGUgZGV2aWNlIHN0cnVjdCAqLwotCXJldHZhbCA9IGVtMjh4eF9pbml0X2RldigmZGV2LCB1ZGV2LCBucik7Ci0JaWYgKHJldHZhbCkgewotCQllbTI4eHhfZGV2dXNlZCAmPSB+KDE8PGRldi0+ZGV2bm8pOwotCQlrZnJlZShkZXYpOwotCi0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JZW0yOHh4X2luZm8oIkZvdW5kICVzXG4iLCBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUpOwotCi0JLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCi0JcmVxdWVzdF9tb2R1bGVzKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGVtMjh4eF91c2JfZGlzY29ubmVjdCgpCi0gKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGljb25lbmN0ZWQKLSAqIHZpZGVvIGRldmljZSB3aWxsIGJlIHVucmVnaXN0ZXJlZCBvbiB2NGwyX2Nsb3NlIGluIGNhc2UgaXQgaXMgc3RpbGwgb3BlbgotICovCi1zdGF0aWMgdm9pZCBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgZW0yOHh4ICpkZXY7Ci0Jc3RydWN0IGVtMjh4eF9vcHMgKm9wcyA9IE5VTEw7Ci0KLQlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQotCWVtMjh4eF9pbmZvKCJkaXNjb25uZWN0aW5nICVzXG4iLCBkZXYtPnZkZXYtPm5hbWUpOwotCi0JLyogd2FpdCB1bnRpbCBhbGwgY3VycmVudCB2NGwyIGlvIGlzIGZpbmlzaGVkIHRoZW4gZGVhbGxvY2F0ZQotCSAgIHJlc291cmNlcyAqLwotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPm9wZW4pOwotCi0JaWYgKGRldi0+dXNlcnMpIHsKLQkJZW0yOHh4X3dhcm4KLQkJICAgICgiZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKLQkJICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS5cbiIsCi0JCQkJZGV2LT52ZGV2LT5udW0pOwotCi0JCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7Ci0JCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOwotCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RyZWFtKTsKLQl9IGVsc2UgewotCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7Ci0JCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOwotCX0KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQltdXRleF9sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCAmZW0yOHh4X2V4dGVuc2lvbl9kZXZsaXN0LCBuZXh0KSB7Ci0JCQlvcHMtPmZpbmkoZGV2KTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmVtMjh4eF9leHRlbnNpb25fZGV2bGlzdF9sb2NrKTsKLQotCWlmICghZGV2LT51c2VycykgewotCQlrZnJlZShkZXYtPmFsdF9tYXhfcGt0X3NpemUpOwotCQlrZnJlZShkZXYpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF91c2JfZHJpdmVyID0gewotCS5uYW1lID0gImVtMjh4eCIsCi0JLnByb2JlID0gZW0yOHh4X3VzYl9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IGVtMjh4eF91c2JfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBlbTI4eHhfaWRfdGFibGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlbTI4eHhfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiIHY0bDIgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAotCSAgICAgICAoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAotCSAgICAgICAoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsIEVNMjhYWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKLSNpZmRlZiBTTkFQU0hPVAotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAotCSAgICAgICBTTkFQU0hPVCAvIDEwMDAwLCAoU05BUFNIT1QgLyAxMDApICUgMTAwLCBTTkFQU0hPVCAlIDEwMCk7Ci0jZW5kaWYKLQotCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KLQlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmVtMjh4eF91c2JfZHJpdmVyKTsKLQlpZiAocmVzdWx0KQotCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FCi0JCQkgICAiIHVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZC5cbiIsIHJlc3VsdCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZW0yOHh4X21vZHVsZV9leGl0KHZvaWQpCi17Ci0JLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCi0JdXNiX2RlcmVnaXN0ZXIoJmVtMjh4eF91c2JfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZW0yOHh4X21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KGVtMjh4eF9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IDU5NTZlOWIuLmI1ZWRkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC02Nyw3ICs2Nyw2IEBACiAjZGVmaW5lIEVNMjgyMF9CT0FSRF9IRVJDVUxFU19TTUFSVF9UVl9VU0IyCSAgMjYKICNkZWZpbmUgRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yX0ZNMTIxNk1FCSAgMjcKICNkZWZpbmUgRU0yODIwX0JPQVJEX0xFQURURUtfV0lORkFTVF9VU0JJSV9ERUxVWEUgMjgKLSNkZWZpbmUgRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ18xMDAJCSAgMjkKICNkZWZpbmUgRU0yODIwX0JPQVJEX1ZJREVPTE9HWV8yMEsxNFhVU0IJICAzMAogI2RlZmluZSBFTTI4MjFfQk9BUkRfVVNCR0VBUl9WRDIwNAkJICAzMQogI2RlZmluZSBFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yCQkgIDMyCkBAIC05Nyw2ICs5Niw4IEBACiAjZGVmaW5lIEVNMjg4Ml9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPCSAgNTYKICNkZWZpbmUgRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfQTMxNgkJICA1NwogI2RlZmluZSBFTTI4MjBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9GT1JZT1UJICA1OAorI2RlZmluZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTAJICA2MAorI2RlZmluZSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyCSAgNjEKIAogLyogTGltaXRzIG1pbmltdW0gYW5kIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRU0yOFhYX01JTl9CVUYgNApAQCAtMTU5LDcgKzE2MCw3IEBACiAjZGVmaW5lIEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVCAyMAogCiBlbnVtIGVtMjh4eF9tb2RlIHsKLQlFTTI4WFhfTU9ERV9VTkRFRklORUQsCisJRU0yOFhYX1NVU1BFTkQsCiAJRU0yOFhYX0FOQUxPR19NT0RFLAogCUVNMjhYWF9ESUdJVEFMX01PREUsCiB9OwpAQCAtMjA3LDkgKzIwOCwxMiBAQAogCiB9OwogCisvKiBTdHJ1Y3QgdG8gZW51bWJlcmF0ZSB2aWRlbyBmb3JtYXRzICovCiBzdHJ1Y3QgZW0yOHh4X2ZtdCB7CiAJY2hhciAgKm5hbWU7CiAJdTMyICAgZm91cmNjOyAgICAgICAgICAvKiB2NGwyIGZvcm1hdCBpZCAqLworCWludCAgIGRlcHRoOworCWludCAgIHJlZzsKIH07CiAKIC8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCkBAIC0yNTUsMjUgKzI1OSw1MiBAQAogCUVNMjhYWF9SQURJTywKIH07CiAKK2VudW0gZW0yOHh4X2FjOTdfbW9kZSB7CisJRU0yOFhYX05PX0FDOTcgPSAwLAorCUVNMjhYWF9BQzk3X0VNMjAyLAorCUVNMjhYWF9BQzk3X1NJR01BVEVMLAorCUVNMjhYWF9BQzk3X09USEVSLAorfTsKKworc3RydWN0IGVtMjh4eF9hdWRpb19tb2RlIHsKKwllbnVtIGVtMjh4eF9hYzk3X21vZGUgYWM5NzsKKworCXUxNiBhYzk3X2ZlYXQ7CisJdTMyIGFjOTdfdmVuZG9yX2lkOworCisJdW5zaWduZWQgaW50IGhhc19hdWRpbzoxOworCisJdW5zaWduZWQgaW50IGkyc18zcmF0ZXM6MTsKKwl1bnNpZ25lZCBpbnQgaTJzXzVyYXRlczoxOworfTsKKworLyogZW0yOHh4IGhhcyB0d28gYXVkaW8gaW5wdXRzOiB0dW5lciBhbmQgbGluZSBpbi4KKyAgIEhvd2V2ZXIsIG9uIG1vc3QgZGV2aWNlcywgYW4gYXV4aWxpYXJ5IEFDOTcgY29kZWMgZGV2aWNlIGlzIHVzZWQuCisgICBUaGUgQUM5NyBkZXZpY2UgbWF5IGhhdmUgc2V2ZXJhbCBkaWZmZXJlbnQgaW5wdXRzIGFuZCBvdXRwdXRzLAorICAgZGVwZW5kaW5nIG9uIHRoZWlyIG1vZGVsLiBTbywgaXQgaXMgcG9zc2libGUgdG8gdXNlIEFDOTcgbWl4ZXIgdG8KKyAgIGFkZHJlc3MgbW9yZSB0aGFuIHR3byBkaWZmZXJlbnQgZW50cmllcy4KKyAqLwogZW51bSBlbTI4eHhfYW11eCB7Ci0JRU0yOFhYX0FNVVhfVklERU8sCi0JRU0yOFhYX0FNVVhfTElORV9JTiwKLQlFTTI4WFhfQU1VWF9BQzk3X1ZJREVPLAotCUVNMjhYWF9BTVVYX0FDOTdfTElORV9JTiwKKwkvKiBUaGlzIGlzIHRoZSBvbmx5IGVudHJ5IGZvciBlbTI4eHggdHVuZXIgaW5wdXQgKi8KKwlFTTI4WFhfQU1VWF9WSURFTywJLyogZW0yOHh4IHR1bmVyLCBBQzk3IG1peGVyIFZpZGVvICovCisKKwlFTTI4WFhfQU1VWF9MSU5FX0lOLAkvKiBBQzk3IG1peGVyIExpbmUgSW4gKi8KKworCS8qIFNvbWUgbGVzcy1jb21tb24gbWl4ZXIgc2V0dXBzICovCisJRU0yOFhYX0FNVVhfVklERU8yLAkvKiBlbTI4eHggTGluZSBpbiwgQUM5NyBtaXhlciBWaWRlbyAqLworCUVNMjhYWF9BTVVYX1BIT05FLAorCUVNMjhYWF9BTVVYX01JQywKKwlFTTI4WFhfQU1VWF9DRCwKKwlFTTI4WFhfQU1VWF9BVVgsCisJRU0yOFhYX0FNVVhfUENNX09VVCwKIH07CiAKLXN0cnVjdCBlbTI4eHhfaW5wdXQgewotCWVudW0gZW51bTI4eHhfaXR5cGUgdHlwZTsKLQl1bnNpZ25lZCBpbnQgdm11eDsKLQllbnVtIGVtMjh4eF9hbXV4IGFtdXg7Ci19OwotCi0jZGVmaW5lIElOUFVUKG5yKSAoJmVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0uaW5wdXRbbnJdKQotCi1lbnVtIGVtMjh4eF9kZWNvZGVyIHsKLQlFTTI4WFhfVFZQNTE1MCwKLQlFTTI4WFhfU0FBNzExMywKLQlFTTI4WFhfU0FBNzExNAorZW51bSBlbTI4eHhfYW91dCB7CisJRU0yOFhYX0FPVVRfTUFTVEVSID0gMSA8PCAwLAorCUVNMjhYWF9BT1VUX0xJTkUgICA9IDEgPDwgMSwKKwlFTTI4WFhfQU9VVF9NT05PICAgPSAxIDw8IDIsCisJRU0yOFhYX0FPVVRfTEZFICAgID0gMSA8PCAzLAorCUVNMjhYWF9BT1VUX1NVUlIgICA9IDEgPDwgNCwKIH07CiAKIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSB7CkBAIC0yODIsMjcgKzMxMyw1MSBAQAogCWludCBzbGVlcDsKIH07CiAKK3N0cnVjdCBlbTI4eHhfaW5wdXQgeworCWVudW0gZW51bTI4eHhfaXR5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgdm11eDsKKwllbnVtIGVtMjh4eF9hbXV4IGFtdXg7CisJZW51bSBlbTI4eHhfYW91dCBhb3V0OworCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSAqZ3BpbzsKK307CisKKyNkZWZpbmUgSU5QVVQobnIpICgmZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5pbnB1dFtucl0pCisKK2VudW0gZW0yOHh4X2RlY29kZXIgeworCUVNMjhYWF9OT0RFQ09ERVIsCisJRU0yOFhYX1RWUDUxNTAsCisJRU0yOFhYX1NBQTcxMVgsCit9OworCiBzdHJ1Y3QgZW0yOHh4X2JvYXJkIHsKIAljaGFyICpuYW1lOwogCWludCB2Y2hhbm5lbHM7CiAJaW50IHR1bmVyX3R5cGU7CisJaW50IHR1bmVyX2FkZHI7CiAKIAkvKiBpMmMgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgdGRhOTg4N19jb25mOwogCisJLyogR1BJTyBzZXF1ZW5jZXMgKi8KKwlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKmR2Yl9ncGlvOworCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSAqc3VzcGVuZF9ncGlvOworCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSAqdHVuZXJfZ3BpbzsKKwogCXVuc2lnbmVkIGludCBpc19lbTI4MDA6MTsKIAl1bnNpZ25lZCBpbnQgaGFzX21zcDM0eHg6MTsKIAl1bnNpZ25lZCBpbnQgbXRzX2Zpcm13YXJlOjE7Ci0JdW5zaWduZWQgaW50IGhhc18xMm1oel9pMnM6MTsKIAl1bnNpZ25lZCBpbnQgbWF4X3JhbmdlXzY0MF80ODA6MTsKIAl1bnNpZ25lZCBpbnQgaGFzX2R2YjoxOwogCXVuc2lnbmVkIGludCBoYXNfc25hcHNob3RfYnV0dG9uOjE7CiAJdW5zaWduZWQgaW50IHZhbGlkOjE7CiAKKwl1bnNpZ25lZCBjaGFyIHhjbGssIGkyY19zcGVlZDsKKwogCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKIAogCXN0cnVjdCBlbTI4eHhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0VNMjhYWF9JTlBVVF07CiAJc3RydWN0IGVtMjh4eF9pbnB1dAkgIHJhZGlvOworCUlSX0tFWVRBQl9UWVBFICAgICAgICAgICAgKmlyX2NvZGVzOwogfTsKIAogc3RydWN0IGVtMjh4eF9lZXByb20gewpAQCAtMzY5LDMyICs0MjQsMjYgQEAKIAljaGFyIG5hbWVbMzBdOwkJLyogbmFtZSAoaW5jbHVkaW5nIG1pbm9yKSBvZiB0aGUgZGV2aWNlICovCiAJaW50IG1vZGVsOwkJLyogaW5kZXggaW4gdGhlIGRldmljZV9kYXRhIHN0cnVjdCAqLwogCWludCBkZXZubzsJCS8qIG1hcmtzIHRoZSBudW1iZXIgb2YgdGhpcyBkZXZpY2UgKi8KLQl1bnNpZ25lZCBpbnQgaXNfZW0yODAwOjE7Ci0JdW5zaWduZWQgaW50IGhhc19tc3AzNHh4OjE7Ci0JdW5zaWduZWQgaW50IGhhc190ZGE5ODg3OjE7CisJZW51bSBlbTI4eHhfY2hpcF9pZCBjaGlwX2lkOworCisJc3RydWN0IGVtMjh4eF9ib2FyZCBib2FyZDsKKwogCXVuc2lnbmVkIGludCBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLwogCXVuc2lnbmVkIGludCBoYXNfYXVkaW9fY2xhc3M6MTsKLQl1bnNpZ25lZCBpbnQgaGFzXzEybWh6X2kyczoxOwotCXVuc2lnbmVkIGludCBtYXhfcmFuZ2VfNjQwXzQ4MDoxOwotCXVuc2lnbmVkIGludCBoYXNfZHZiOjE7Ci0JdW5zaWduZWQgaW50IGhhc19zbmFwc2hvdF9idXR0b246MTsKLQl1bnNpZ25lZCBpbnQgdmFsaWQ6MTsJCS8qIHJlcG9ydCBmb3IgdmFsaWRhdGVkIGJvYXJkcyAqLworCXVuc2lnbmVkIGludCBoYXNfYWxzYV9hdWRpbzoxOworCisJc3RydWN0IGVtMjh4eF9mbXQgKmZvcm1hdDsKKworCXN0cnVjdCBlbTI4eHhfSVIgKmlyOwogCiAJLyogU29tZSBvbGRlciBlbTI4eHggY2hpcHMgbmVlZHMgYSB3YWl0aW5nIHRpbWUgYWZ0ZXIgd3JpdGluZyAqLwogCXVuc2lnbmVkIGludCB3YWl0X2FmdGVyX3dyaXRlOwogCi0JLyogR1BJTyBzZXF1ZW5jZXMgZm9yIGFuYWxvZyBhbmQgZGlnaXRhbCBtb2RlICovCi0Jc3RydWN0IGVtMjh4eF9yZWdfc2VxICphbmFsb2dfZ3BpbywgKmRpZ2l0YWxfZ3BpbzsKLQotCS8qIEdQSU8gc2VxdWVuY2VzIGZvciB0dW5lciBjYWxsYmFja3MgKi8KLQlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnR1bl9hbmFsb2dfZ3BpbywgKnR1bl9kaWdpdGFsX2dwaW87Ci0KLQlpbnQgdmlkZW9faW5wdXRzOwkvKiBudW1iZXIgb2YgdmlkZW8gaW5wdXRzICovCiAJc3RydWN0IGxpc3RfaGVhZAlkZXZsaXN0OwogCiAJdTMyIGkyc19zcGVlZDsJCS8qIEkyUyBzcGVlZCBmb3IgYXVkaW8gZGlnaXRhbCBzdHJlYW0gKi8KIAotCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKwlzdHJ1Y3QgZW0yOHh4X2F1ZGlvX21vZGUgYXVkaW9fbW9kZTsKIAogCWludCB0dW5lcl90eXBlOwkJLyogdHlwZSBvZiB0aGUgdHVuZXIgKi8KIAlpbnQgdHVuZXJfYWRkcjsJCS8qIHR1bmVyIGFkZHJlc3MgKi8KQEAgLTQwOSw2ICs0NTgsNyBAQAogCWludCBjdGxfZnJlcTsJCS8qIHNlbGVjdGVkIGZyZXF1ZW5jeSAqLwogCXVuc2lnbmVkIGludCBjdGxfaW5wdXQ7CS8qIHNlbGVjdGVkIGlucHV0ICovCiAJdW5zaWduZWQgaW50IGN0bF9haW5wdXQ7Lyogc2VsZWN0ZWQgYXVkaW8gaW5wdXQgKi8KKwl1bnNpZ25lZCBpbnQgY3RsX2FvdXRwdXQ7Lyogc2VsZWN0ZWQgYXVkaW8gb3V0cHV0ICovCiAJaW50IG11dGU7CiAJaW50IHZvbHVtZTsKIAkvKiBmcmFtZSBwcm9wZXJ0aWVzICovCkBAIC00NjksNiArNTE5LDkgQEAKIAogCWVudW0gZW0yOHh4X21vZGUgbW9kZTsKIAorCS8qIHJlZ2lzdGVyIG51bWJlcnMgZm9yIEdQTy9HUElPIHJlZ2lzdGVycyAqLworCXUxNiByZWdfZ3BvX251bSwgcmVnX2dwaW9fbnVtOworCiAJLyogQ2FjaGVzIEdQTyBhbmQgR1BJTyByZWdpc3RlcnMgKi8KIAl1bnNpZ25lZCBjaGFyCXJlZ19ncG8sIHJlZ19ncGlvOwogCkBAIC01MDgsMTEgKzU2MSwxNyBAQAogaW50IGVtMjh4eF93cml0ZV9yZWdzX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZywgY2hhciAqYnVmLAogCQkJICBpbnQgbGVuKTsKIGludCBlbTI4eHhfd3JpdGVfcmVncyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitpbnQgZW0yOHh4X3dyaXRlX3JlZyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIHU4IHZhbCk7CisKK2ludCBlbTI4eHhfcmVhZF9hYzk3KHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVnKTsKK2ludCBlbTI4eHhfd3JpdGVfYWM5NyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlZywgdTE2IHZhbCk7CisKIGludCBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9hdWRpb19zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogCiBpbnQgZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X2NhcHR1cmVfc3RhcnQoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgc3RhcnQpOwotaW50IGVtMjh4eF9vdXRmbXRfc2V0X3l1djQyMihzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9zZXRfb3V0Zm10KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3Jlc29sdXRpb25fc2V0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3NldF9hbHRlcm5hdGUoc3RydWN0IGVtMjh4eCAqZGV2KTsKIGludCBlbTI4eHhfaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldiwgaW50IG1heF9wYWNrZXRzLApAQCAtNTIxLDEwICs1ODAsMjAgQEAKIHZvaWQgZW0yOHh4X3VuaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X3NldF9tb2RlKHN0cnVjdCBlbTI4eHggKmRldiwgZW51bSBlbTI4eHhfbW9kZSBzZXRfbW9kZSk7CiBpbnQgZW0yOHh4X2dwaW9fc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgc3RydWN0IGVtMjh4eF9yZWdfc2VxICpncGlvKTsKLQotLyogUHJvdmlkZWQgYnkgZW0yOHh4LXZpZGVvLmMgKi8KK3ZvaWQgZW0yOHh4X3dha2VfaTJjKHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF9yZW1vdmVfZnJvbV9kZXZsaXN0KHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF9hZGRfaW50b19kZXZsaXN0KHN0cnVjdCBlbTI4eHggKmRldik7CitzdHJ1Y3QgZW0yOHh4ICplbTI4eHhfZ2V0X2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBlbnVtIHY0bDJfYnVmX3R5cGUgKmZoX3R5cGUsCisJCQkJIGludCAqaGFzX3JhZGlvKTsKIGludCBlbTI4eHhfcmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBlbTI4eHhfb3BzICpkZXYpOwogdm9pZCBlbTI4eHhfdW5yZWdpc3Rlcl9leHRlbnNpb24oc3RydWN0IGVtMjh4eF9vcHMgKmRldik7Cit2b2lkIGVtMjh4eF9pbml0X2V4dGVuc2lvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpOwordm9pZCBlbTI4eHhfY2xvc2VfZXh0ZW5zaW9uKHN0cnVjdCBlbTI4eHggKmRldik7CisKKy8qIFByb3ZpZGVkIGJ5IGVtMjh4eC12aWRlby5jICovCitpbnQgZW0yOHh4X3JlZ2lzdGVyX2FuYWxvZ19kZXZpY2VzKHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF9yZWxlYXNlX2FuYWxvZ19yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KTsKIAogLyogUHJvdmlkZWQgYnkgZW0yOHh4LWNhcmRzLmMgKi8KIGV4dGVybiBpbnQgZW0yODAwX3ZhcmlhbnRfZGV0ZWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgbW9kZWwpOwpAQCAtNTM1LDkgKzYwNCw5IEBACiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQ7CiB2b2lkIGVtMjh4eF9zZXRfaXIoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgSVJfaTJjICppcik7CiBpbnQgZW0yOHh4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOwordm9pZCBlbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KTsKIAogLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KLS8qIFRPRE86IENoZWNrIGlmIHRoZSBzdGFuZGFyZCBnZXRfa2V5IGhhbmRsZXJzIG9uIGlyLWNvbW1vbiBjYW4gYmUgdXNlZCAqLwogaW50IGVtMjh4eF9nZXRfa2V5X3RlcnJhdGVjKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpOwogaW50IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXAoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3Jhdyk7CiBpbnQgZW0yOHh4X2dldF9rZXlfcGlubmFjbGVfdXNiX2dyZXkoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LApAQCAtNTQ1LDYgKzYxNCw5IEBACiB2b2lkIGVtMjh4eF9yZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KTsKIHZvaWQgZW0yOHh4X2RlcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiAKK2ludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9pcl9maW5pKHN0cnVjdCBlbTI4eHggKmRldik7CisKIC8qIHByaW50ayBtYWNyb3MgKi8KIAogI2RlZmluZSBlbTI4eHhfZXJyKGZtdCwgYXJnLi4uKSBkbyB7XApAQCAtNTY0LDcgKzYzNiw3IEBACiBzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfY29tcHJlc3Npb25fZGlzYWJsZShzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJLyogc2lkZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIHNjYWxlciBhbmQgbWl4ZXIgKi8KLQlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjI2X0NPTVBSLCAiXHgwMCIsIDEpOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IyNl9DT01QUiwgMHgwMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVtMjh4eF9jb250cmFzdF9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQpAQCAtNjM2LDcgKzcwOCw3IEBACiAvKkZJWE1FOiBtYXh3IHNob3VsZCBiZSBkZXBlbmRlbnQgb2YgYWx0IG1vZGUgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5vcm1fbWF4dyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7Ci0JaWYgKGRldi0+bWF4X3JhbmdlXzY0MF80ODApCisJaWYgKGRldi0+Ym9hcmQubWF4X3JhbmdlXzY0MF80ODApCiAJCXJldHVybiA2NDA7CiAJZWxzZQogCQlyZXR1cm4gNzIwOwpAQCAtNjQ0LDcgKzcxNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5vcm1fbWF4aChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7Ci0JaWYgKGRldi0+bWF4X3JhbmdlXzY0MF80ODApCisJaWYgKGRldi0+Ym9hcmQubWF4X3JhbmdlXzY0MF80ODApCiAJCXJldHVybiA0ODA7CiAJZWxzZQogCQlyZXR1cm4gKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyA1NzYgOiA0ODA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCmluZGV4IDlkMGVmOTYuLjgzYzA3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC0xNTgxLDcgKzE1ODEsNyBAQAogCiAJc3RybGNweShjYXAuY2FyZCwgY2FtLT52NGxkZXYtPm5hbWUsIHNpemVvZihjYXAuY2FyZCkpOwogCWlmICh1c2JfbWFrZV9wYXRoKGNhbS0+dXNiZGV2LCBjYXAuYnVzX2luZm8sIHNpemVvZihjYXAuYnVzX2luZm8pKSA8IDApCi0JCXN0cmxjcHkoY2FwLmJ1c19pbmZvLCBjYW0tPnVzYmRldi0+ZGV2LmJ1c19pZCwKKwkJc3RybGNweShjYXAuYnVzX2luZm8sIGRldl9uYW1lKCZjYW0tPnVzYmRldi0+ZGV2KSwKIAkJCXNpemVvZihjYXAuYnVzX2luZm8pKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FwLCBzaXplb2YoY2FwKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggNmI1NTdjMC4uZWU2YTY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMTIsMTIgKzEyLDEzIEBACiAJICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIGdzcGNhX21haW4uCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfbWFpbi4KIAogCiBpZiBVU0JfR1NQQ0EgJiYgVklERU9fVjRMMgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWciCiAKIGNvbmZpZyBVU0JfR1NQQ0FfQ09ORVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ2FtZXJhIERyaXZlciIKQEAgLTY0LDYgKzY1LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUxOS4KIAorY29uZmlnIFVTQl9HU1BDQV9PVjUzNAorCXRyaXN0YXRlICJPVjUzNCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwLgorCSAgKGUuZy4gU29ueSBQbGF5c3RhdGlvbiBFWUUpCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX292NTM0LgorCiBjb25maWcgVVNCX0dTUENBX1BBQzIwNwogCXRyaXN0YXRlICJQaXhhcnQgUEFDMjA3IFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTgzLDEwICs5NCwxMSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3BhYzczMTEuCiAKIGNvbmZpZyBVU0JfR1NQQ0FfU09OSVhCCi0JdHJpc3RhdGUgIlNOOUMxMDIgVVNCIENhbWVyYSBEcml2ZXIiCisJdHJpc3RhdGUgIlNPTklYIEJheWVyIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNPTklYQiBjaGlwLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTb25peAorCSAgY2hpcHMgd2l0aCBCYXllciBmb3JtYXQgKFNOOUMxMDEsIFNOOUMxMDIgYW5kIFNOOUMxMDMpLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zb25peGIuCkBAIC05NSw3ICsxMDcsOCBAQAogCXRyaXN0YXRlICJTT05JWCBKUEVHIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNPTklYSiBjaGlwLgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTb25peAorCSAgY2hpcHMgd2l0aCBKUEVHIGZvcm1hdCAoU045QzEwMlAsIFNOOUMxMDUgYW5kID49IFNOOUMxMTApLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zb25peGoKQEAgLTE3MSw3ICsxODQsNyBAQAogCSAgU1BDQTUwNChhYmMpIFNQQ0E1MzMgU1BDQTUzNiBjaGlwcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTV4eC4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zdW5wbHVzLgogCiBjb25maWcgVVNCX0dTUENBX1Q2MTMKIAl0cmlzdGF0ZSAiVDYxMyAoSlBFRyBDb21wbGlhbmNlKSBVU0IgQ2FtZXJhIERyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IDIyNzM0ZjUuLmJkOGQ5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkJKz0gZ3NwY2FfZmluZXBpeC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX01BUlMpCSs9IGdzcGNhX21hcnMubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUxOSkJKz0gZ3NwY2Ffb3Y1MTkubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUzNCkJKz0gZ3NwY2Ffb3Y1MzQubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpCSs9IGdzcGNhX3BhYzIwNy5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzczMTEpICs9IGdzcGNhX3BhYzczMTEubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEIpCSs9IGdzcGNhX3Nvbml4Yi5vCkBAIC0yNyw2ICsyOCw3IEBACiBnc3BjYV9maW5lcGl4LW9ianMJCTo9IGZpbmVwaXgubwogZ3NwY2FfbWFycy1vYmpzCQkJOj0gbWFycy5vCiBnc3BjYV9vdjUxOS1vYmpzCQk6PSBvdjUxOS5vCitnc3BjYV9vdjUzNC1vYmpzCQk6PSBvdjUzNC5vCiBnc3BjYV9wYWMyMDctb2JqcwkJOj0gcGFjMjA3Lm8KIGdzcGNhX3BhYzczMTEtb2JqcwkJOj0gcGFjNzMxMS5vCiBnc3BjYV9zb25peGItb2JqcwkJOj0gc29uaXhiLm8KQEAgLTQ1LDQgKzQ3LDQgQEAKIGdzcGNhX3pjM3h4LW9ianMJCTo9IHpjM3h4Lm8KIAogb2JqLSQoQ09ORklHX1VTQl9NNTYwMikJCSs9IG01NjAyLwotCitvYmotJChDT05GSUdfVVNCX1NUVjA2WFgpIAkrPSBzdHYwNnh4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCmluZGV4IGRlMjgzNTQuLjE3NTNmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKQEAgLTkzLDcgKzkzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAogCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDggKyA1OTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggM2JlMzBiNC4uZjNjZDhmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkucHJpdiA9IDB9LCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CiAJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCiAJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCmluZGV4IDYwNzk0MmYuLmFmYzhiMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCkBAIC03Miw3ICs3Miw3IEBACiB9CiAKIC8qIFRoZXNlIGNhbWVyYXMgb25seSBzdXBwb3J0IDMyMHgyMDAuICovCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmcGl4X21vZGVbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmcGl4X21vZGVbMV0gPSB7CiAJeyAzMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLApAQCAtMzE0LDkgKzMxNCw2IEBACiAJaW50IHJldDsKIAlpbnQgc2l6ZV9yZXQ7CiAKLQkvKiBSZXNldCBidWxrIGluIGVuZHBvaW50ICovCi0JdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+Y2FtLmVwYWRkcik7Ci0KIAkvKiBJbml0IHRoZSBkZXZpY2UgKi8KIAltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhjNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCAwMmE2ZTllLi44YjlmM2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KQEAgLTQ1LDcgKzQ0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgVVNCIENhbWVyYSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMywgMCkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDQsIDApCiAKIHN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKIApAQCAtMTUwLDggKzE0OSwxMSBAQAogCiAJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KIAkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwotCQlpZiAobGVuID09IDApCisJCWlmIChsZW4gPT0gMCkgeworCQkJaWYgKGdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID09IDApCisJCQkJZ3NwY2FfZGV2LT5lbXB0eV9wYWNrZXQgPSAxOwogCQkJY29udGludWU7CisJCX0KIAkJc3QgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKIAkJaWYgKHN0KSB7CiAJCQlQREVCVUcoRF9FUlIsCkBAIC0xNzAsNyArMTcyLDYgQEAKIAl9CiAKIAkvKiByZXN1Ym1pdCB0aGUgVVJCICovCi0JdXJiLT5zdGF0dXMgPSAwOwogCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3QgPCAwKQogCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7CkBAIC0yMDAsMTEgKzIwMSwxOCBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBzdDsKIAogCVBERUJVRyhEX1BBQ0ssICJidWxrIGlycSIpOwogCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybjsKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCAmJiB1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkgeworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJCXVyYi0+c3RhdHVzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKICNpZmRlZiBDT05GSUdfUE0KIAkJaWYgKCFnc3BjYV9kZXYtPmZyb3plbikKICNlbmRpZgpAQCAtMjIzLDYgKzIzMSwxMyBAQAogCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CisKKwkvKiByZXN1Ym1pdCB0aGUgVVJCICovCisJaWYgKGdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgIT0gMCkgeworCQlzdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdCA8IDApCisJCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7CisJfQogfQogCiAvKgpAQCAtMjg1LDcgKzMwMCw2IEBACiAJCWZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQgPSBmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YTsKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX1FVRVVFRDsKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKLQkJYXRvbWljX2luYygmZ3NwY2FfZGV2LT5uZXZlbnQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwkvKiBldmVudCA9IG5ldyBmcmFtZSAqLwogCQlpID0gKGdzcGNhX2Rldi0+ZnJfaSArIDEpICUgZ3NwY2FfZGV2LT5uZnJhbWVzOwogCQlnc3BjYV9kZXYtPmZyX2kgPSBpOwpAQCAtMzc5LDcgKzM5Myw2IEBACiAJZ3NwY2FfZGV2LT5mcl9pID0gZ3NwY2FfZGV2LT5mcl9vID0gZ3NwY2FfZGV2LT5mcl9xID0gMDsKIAlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAlnc3BjYV9kZXYtPnNlcXVlbmNlID0gMDsKLQlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPm5ldmVudCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyMCwxMSArNTMzLDE0IEBACiAJCW51cmJzID0gREVGX05VUkJTOwogCX0gZWxzZSB7CQkJCS8qIGJ1bGsgKi8KIAkJbnBrdCA9IDA7Ci0JCWJzaXplID0gZ3NwY2FfZGV2LT5jYW0uCWJ1bGtfc2l6ZTsKKwkJYnNpemUgPSBnc3BjYV9kZXYtPmNhbS5idWxrX3NpemU7CiAJCWlmIChic2l6ZSA9PSAwKQogCQkJYnNpemUgPSBwc2l6ZTsKIAkJUERFQlVHKERfU1RSRUFNLCAiYnVsayBic2l6ZTolZCIsIGJzaXplKTsKLQkJbnVyYnMgPSAxOworCQlpZiAoZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyAhPSAwKQorCQkJbnVyYnMgPSBnc3BjYV9kZXYtPmNhbS5idWxrX251cmJzOworCQllbHNlCisJCQludXJicyA9IDE7CiAJfQogCiAJZ3NwY2FfZGV2LT5udXJicyA9IG51cmJzOwpAQCAtNTk3LDYgKzYxMywxMiBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCisJCS8qIGNsZWFyIHRoZSBidWxrIGVuZHBvaW50ICovCisJCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwKQkvKiBpZiBidWxrIHRyYW5zZmVyICovCisJCQl1c2JfY2xlYXJfaGFsdChnc3BjYV9kZXYtPmRldiwKKwkJCQkJdXNiX3JjdmludHBpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCQkgZ3NwY2FfZGV2LT5jYW0uZXBhZGRyKSk7CisKIAkJLyogc3RhcnQgdGhlIGNhbSAqLwogCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0YXJ0KGdzcGNhX2Rldik7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC02MDQsMTAgKzYyNiw5IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDE7Ci0JCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+bmV2ZW50LCAwKTsKIAotCQkvKiBidWxrIHRyYW5zZmVycyBhcmUgc3RhcnRlZCBieSB0aGUgc3ViZHJpdmVyICovCi0JCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwKQorCQkvKiBzb21lIGJ1bGsgdHJhbnNmZXJzIGFyZSBzdGFydGVkIGJ5IHRoZSBzdWJkcml2ZXIgKi8KKwkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDAgJiYgZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9PSAwKQogCQkJYnJlYWs7CiAKIAkJLyogc3VibWl0IHRoZSBVUkJzICovCkBAIC02MTgsOCArNjM5LDExIEBACiAJCQkJCSJ1c2Jfc3VibWl0X3VyYiBbJWRdIGVyciAlZCIsIG4sIHJldCk7CiAJCQkJZ3NwY2FfZGV2LT5zdHJlYW1pbmcgPSAwOwogCQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwotCQkJCWlmIChyZXQgPT0gLUVOT1NQQykKKwkJCQlpZiAocmV0ID09IC1FTk9TUEMpIHsKKwkJCQkJbXNsZWVwKDIwKTsJLyogd2FpdCBmb3Iga2lsbAorCQkJCQkJCSAqIGNvbXBsZXRlICovCiAJCQkJCWJyZWFrOwkvKiB0cnkgdGhlIHByZXZpb3VzIGFsdCAqLworCQkJCX0KIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQpAQCAtNjM3LDcgKzY2MSw3IEBACiAKIAlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMCk7CiAJaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgInNldCBpbnRlcmZhY2UgMCBlcnIgJWQiLCByZXQpOworCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sICJzZXQgYWx0IDAgZXJyICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NDUsNyArNjY5LDYgQEAKIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKLQlhdG9taWNfc2V0KCZnc3BjYV9kZXYtPm5ldmVudCwgMCk7CiAJaWYgKGdzcGNhX2Rldi0+cHJlc2VudAogCSAgICAmJiBnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CkBAIC03MjcsNyArNzUwLDcgQEAKIAkJCWlmIChmbXRkZXNjLT5pbmRleCA9PSBpbmRleCkKIAkJCQlicmVhazsJCS8qIG5ldyBmb3JtYXQgKi8KIAkJCWluZGV4Kys7Ci0JCQlpZiAoaW5kZXggPj0gc2l6ZW9mIGZtdF90YiAvIHNpemVvZiBmbXRfdGJbMF0pCisJCQlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShmbXRfdGIpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNzUyLDggKzc3NSw2IEBACiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gcHJpdjsKIAlpbnQgbW9kZTsKIAotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAltb2RlID0gZ3NwY2FfZGV2LT5jdXJyX21vZGU7CiAJbWVtY3B5KCZmbXQtPmZtdC5waXgsICZnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVttb2RlXSwKIAkJc2l6ZW9mIGZtdC0+Zm10LnBpeCk7CkBAIC03NjUsOCArNzg2LDYgQEAKIHsKIAlpbnQgdywgaCwgbW9kZSwgbW9kZTI7CiAKLQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAloID0gZm10LT5mbXQucGl4LmhlaWdodDsKIApAQCAtODQ2LDExICs4NjUsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBnc3BjYV9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgdm9pZCBnc3BjYV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKIHsKLQlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGdzcGNhX2Rldiwga3JlZik7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gY29udGFpbmVyX29mKHZmZCwgc3RydWN0IGdzcGNhX2RldiwgdmRldik7CiAKLQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgZGVsZXRlZCIpOworCVBERUJVRyhEX1NUUkVBTSwgImRldmljZSByZWxlYXNlZCIpOwogCiAJa2ZyZWUoZ3NwY2FfZGV2LT51c2JfYnVmKTsKIAlrZnJlZShnc3BjYV9kZXYpOwpAQCAtODYyLDcgKzg4MSw3IEBACiAJaW50IHJldDsKIAogCVBERUJVRyhEX1NUUkVBTSwgIiVzIG9wZW4iLCBjdXJyZW50LT5jb21tKTsKLQlnc3BjYV9kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgewpAQCAtODgzLDE3ICs5MDIsMTQgQEAKIAogCWdzcGNhX2Rldi0+dXNlcnMrKzsKIAotCS8qIG9uZSBtb3JlIHVzZXIgKi8KLQlrcmVmX2dldCgmZ3NwY2FfZGV2LT5rcmVmKTsKLQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGdzcGNhX2RldjsKICNpZmRlZiBHU1BDQV9ERUJVRwogCS8qIGFjdGl2YXRlIHRoZSB2NGwyIGRlYnVnICovCiAJaWYgKGdzcGNhX2RlYnVnICYgRF9WNEwyKQotCQlnc3BjYV9kZXYtPnZkZXYtPmRlYnVnIHw9IFY0TDJfREVCVUdfSU9DVEwKKwkJZ3NwY2FfZGV2LT52ZGV2LmRlYnVnIHw9IFY0TDJfREVCVUdfSU9DVEwKIAkJCQkJfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKIAllbHNlCi0JCWdzcGNhX2Rldi0+dmRldi0+ZGVidWcgJj0gfihWNEwyX0RFQlVHX0lPQ1RMCisJCWdzcGNhX2Rldi0+dmRldi5kZWJ1ZyAmPSB+KFY0TDJfREVCVUdfSU9DVEwKIAkJCQkJfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRyk7CiAjZW5kaWYKIAlyZXQgPSAwOwpAQCAtOTMyLDggKzk0OCw2IEBACiAKIAlQREVCVUcoRF9TVFJFQU0sICJjbG9zZSBkb25lIik7CiAKLQlrcmVmX3B1dCgmZ3NwY2FfZGV2LT5rcmVmLCBnc3BjYV9kZWxldGUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNTMsNiArMTA2NywzNSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisvKmZpeG1lOiBoYXZlIGFuIGF1ZGlvIGZsYWcgaW4gZ3NwY2FfZGV2PyovCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKK3sKKwlpZiAoYXVkaW8tPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKK3sKKwltZW1zZXQoYXVkaW8sIDAsIHNpemVvZiAqYXVkaW8pOworCXN0cmNweShhdWRpby0+bmFtZSwgIk1pY3JvcGhvbmUiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bWF1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKK3sKKwlpZiAoYXVkaW8tPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3RyY3B5KGF1ZGlvLT5uYW1lLCAiTWljcm9waG9uZSIpOworCWF1ZGlvLT5jYXBhYmlsaXR5ID0gMDsKKwlhdWRpby0+bW9kZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQogewpAQCAtMTA5Niw4ICsxMTM5LDYgQEAKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OwogCWludCBpLCByZXQgPSAwOwogCi0JaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJc3dpdGNoIChyYi0+bWVtb3J5KSB7CiAJY2FzZSBHU1BDQV9NRU1PUllfUkVBRDoJCQkvKiAoaW50ZXJuYWwgY2FsbCkgKi8KIAljYXNlIFY0TDJfTUVNT1JZX01NQVA6CkBAIC0xMTYyLDggKzEyMDMsNyBAQAogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKIAotCWlmICh2NGwyX2J1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkgICAgfHwgdjRsMl9idWYtPmluZGV4IDwgMAorCWlmICh2NGwyX2J1Zi0+aW5kZXggPCAwCiAJICAgIHx8IHY0bDJfYnVmLT5pbmRleCA+PSBnc3BjYV9kZXYtPm5mcmFtZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTg2LDcgKzEyMjYsOCBAQAogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyA9PSAwKSB7CisJaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyA9PSAwCisJICAgIHx8ICEoZ3NwY2FfZGV2LT5mcmFtZVswXS52NGwyX2J1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfUVVFVUVEKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMjM2LDcgKzEyNzcsNiBAQAogCWdzcGNhX2Rldi0+ZnJfaSA9IGdzcGNhX2Rldi0+ZnJfbyA9IGdzcGNhX2Rldi0+ZnJfcSA9IDA7CiAJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJZ3NwY2FfZGV2LT5zZXF1ZW5jZSA9IDA7Ci0JYXRvbWljX3NldCgmZ3NwY2FfZGV2LT5uZXZlbnQsIDApOwogCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spOwpAQCAtMTI4MSw2ICsxMzIxLDE3IEBACiAJbWVtc2V0KHBhcm0sIDAsIHNpemVvZiAqcGFybSk7CiAJcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBnc3BjYV9kZXYtPm5idWZyZWFkOworCisJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X3N0cmVhbXBhcm0pIHsKKwkJaW50IHJldDsKKworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X3N0cmVhbXBhcm0oZ3NwY2FfZGV2LCBwYXJtKTsKKwkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI5NSw2ICsxMzQ2LDE3IEBACiAJCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CiAJZWxzZQogCQlnc3BjYV9kZXYtPm5idWZyZWFkID0gbjsKKworCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9zdHJlYW1wYXJtKSB7CisJCWludCByZXQ7CisKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwgcGFybSk7CisJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NDAsMzMgKzE1MDIsMjIgQEAKIAlpID0gZ3NwY2FfZGV2LT5mcl9vOwogCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2ldOwogCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbal07Ci0JaWYgKGZyYW1lLT52NGwyX2J1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRE9ORSkgewotCQlhdG9taWNfZGVjKCZnc3BjYV9kZXYtPm5ldmVudCk7Ci0JCWdvdG8gb2s7Ci0JfQotCWlmIChub25ibG9ja19pbmcpCQkJLyogbm8gZnJhbWUgeWV0ICovCi0JCXJldHVybiAtRUFHQUlOOwogCi0JLyogd2FpdCB0aWxsIGEgZnJhbWUgaXMgcmVhZHkgKi8KLQlmb3IgKDs7KSB7CisJaWYgKCEoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKSkgeworCQlpZiAobm9uYmxvY2tfaW5nKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJLyogd2FpdCB0aWxsIGEgZnJhbWUgaXMgcmVhZHkgKi8KIAkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZ3NwY2FfZGV2LT53cSwKLQkJCQkJYXRvbWljX3JlYWQoJmdzcGNhX2Rldi0+bmV2ZW50KSA+IDAsCi0JCQkJCW1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOwotCQlpZiAocmV0IDw9IDApIHsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CS8qIGludGVycnVwdCAqLwotCQkJcmV0dXJuIC1FSU87CQkvKiB0aW1lb3V0ICovCi0JCX0KLQkJYXRvbWljX2RlYygmZ3NwY2FfZGV2LT5uZXZlbnQpOwotCQlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nIHx8ICFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKSB8fAorCQkJIWdzcGNhX2Rldi0+c3RyZWFtaW5nIHx8ICFnc3BjYV9kZXYtPnByZXNlbnQsCisJCQltc2Vjc190b19qaWZmaWVzKDMwMDApKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID09IDAgfHwgIWdzcGNhX2Rldi0+c3RyZWFtaW5nIHx8ICFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaSA9IGdzcGNhX2Rldi0+ZnJfbzsKLQkJaiA9IGdzcGNhX2Rldi0+ZnJfcXVldWVbaV07Ci0JCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbal07Ci0JCWlmIChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX0RPTkUpCi0JCQlicmVhazsKIAl9Ci1vazoKKwogCWdzcGNhX2Rldi0+ZnJfbyA9IChpICsgMSkgJSBnc3BjYV9kZXYtPm5mcmFtZXM7CiAJUERFQlVHKERfRlJBTSwgImZyYW1lIHdhaXQgcTolZCBpOiVkIG86JWQiLAogCQlnc3BjYV9kZXYtPmZyX3EsCkBAIC0xNDk0LDggKzE1NDUsNiBAQAogCWludCBpLCByZXQ7CiAKIAlQREVCVUcoRF9GUkFNLCAiZHFidWYiKTsKLQlpZiAodjRsMl9idWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodjRsMl9idWYtPm1lbW9yeSAhPSBnc3BjYV9kZXYtPm1lbW9yeSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE1NTAsOCArMTU5OSw2IEBACiAJaW50IGksIGluZGV4LCByZXQ7CiAKIAlQREVCVUcoRF9GUkFNLCAicWJ1ZiAlZCIsIHY0bDJfYnVmLT5pbmRleCk7Ci0JaWYgKHY0bDJfYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtMTc2MSw3ICsxODA4LDcgQEAKIAkucmVsZWFzZSA9IGRldl9jbG9zZSwKIAkucmVhZCA9IGRldl9yZWFkLAogCS5tbWFwID0gZGV2X21tYXAsCi0JLmlvY3RsID0gdmlkZW9faW9jdGwyLAorCS51bmxvY2tlZF9pb2N0bCA9IF9fdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogI2VuZGlmCkBAIC0xNzgxLDYgKzE4MjgsOSBAQAogCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAogCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX2F1ZGlvCQk9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2VudW1hdWRpbwk9IHZpZGlvY19lbnVtYXVkaW8sCiAJLnZpZGlvY19xdWVyeW1lbnUJPSB2aWRpb2NfcXVlcnltZW51LAogCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKQEAgLTE4MDIsNyArMTg1Miw3IEBACiAJLm5hbWUgPSAiZ3NwY2EgbWFpbiBkcml2ZXIiLAogCS5mb3BzID0gJmRldl9mb3BzLAogCS5pb2N0bF9vcHMgPSAmZGV2X2lvY3RsX29wcywKLQkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gZ3NwY2FfcmVsZWFzZSwKIAkubWlub3IgPSAtMSwKIH07CiAKQEAgLTE4NDAsNyArMTg5MCw2IEBACiAJCWVycigiY291bGRuJ3Qga3phbGxvYyBnc3BjYSBzdHJ1Y3QiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWtyZWZfaW5pdCgmZ3NwY2FfZGV2LT5rcmVmKTsKIAlnc3BjYV9kZXYtPnVzYl9idWYgPSBrbWFsbG9jKFVTQl9CVUZfU1osIEdGUF9LRVJORUwpOwogCWlmICghZ3NwY2FfZGV2LT51c2JfYnVmKSB7CiAJCWVycigib3V0IG9mIG1lbW9yeSIpOwpAQCAtMTg1MiwxMiArMTkwMSwxMyBAQAogCWdzcGNhX2Rldi0+bmJhbHQgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MgPSBzZF9kZXNjOwogCWdzcGNhX2Rldi0+bmJ1ZnJlYWQgPSAyOworCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gLTE7CS8qIGRvbid0IGNoZWNrIHRoZSBlbXB0eSBwYWNrZXRzICovCiAKIAkvKiBjb25maWd1cmUgdGhlIHN1YmRyaXZlciBhbmQgaW5pdGlhbGl6ZSB0aGUgVVNCIGRldmljZSAqLwotCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+Y29uZmlnKGdzcGNhX2RldiwgaWQpOworCXJldCA9IHNkX2Rlc2MtPmNvbmZpZyhnc3BjYV9kZXYsIGlkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7Ci0JcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5pbml0KGdzcGNhX2Rldik7CisJcmV0ID0gc2RfZGVzYy0+aW5pdChnc3BjYV9kZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAlyZXQgPSBnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOwpAQCAtMTg3MSwxOCArMTkyMSwxNSBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdzcGNhX2Rldi0+d3EpOwogCiAJLyogaW5pdCB2aWRlbyBzdHVmZiAqLwotCWdzcGNhX2Rldi0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCW1lbWNweShnc3BjYV9kZXYtPnZkZXYsICZnc3BjYV90ZW1wbGF0ZSwgc2l6ZW9mIGdzcGNhX3RlbXBsYXRlKTsKLQlnc3BjYV9kZXYtPnZkZXYtPnBhcmVudCA9ICZkZXYtPmRldjsKKwltZW1jcHkoJmdzcGNhX2Rldi0+dmRldiwgJmdzcGNhX3RlbXBsYXRlLCBzaXplb2YgZ3NwY2FfdGVtcGxhdGUpOworCWdzcGNhX2Rldi0+dmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAJZ3NwY2FfZGV2LT5tb2R1bGUgPSBtb2R1bGU7CiAJZ3NwY2FfZGV2LT5wcmVzZW50ID0gMTsKLQl2aWRlb19zZXRfZHJ2ZGF0YShnc3BjYV9kZXYtPnZkZXYsIGdzcGNhX2Rldik7Ci0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGdzcGNhX2Rldi0+dmRldiwKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldiwKIAkJCQkgIFZGTF9UWVBFX0dSQUJCRVIsCiAJCQkJICB2aWRlb19ucik7CiAJaWYgKHJldCA8IDApIHsKIAkJZXJyKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZXJyICVkIiwgcmV0KTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZ3NwY2FfZGV2LT52ZGV2KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xOTA2LDE1ICsxOTUzLDE0IEBACiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0KLS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHRyeWluZyB0byBvcGVuIHVwIHRoZSBkZXZpY2UgKi8KLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShnc3BjYV9kZXYtPnZkZXYpOwotCiAJZ3NwY2FfZGV2LT5wcmVzZW50ID0gMDsKIAlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7CiAKLQlrcmVmX3B1dCgmZ3NwY2FfZGV2LT5rcmVmLCBnc3BjYV9kZWxldGUpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwkvKiByZWxlYXNlIHRoZSBkZXZpY2UgKi8KKwkvKiAodGhpcyB3aWxsIGNhbGwgZ3NwY2FfcmVsZWFzZSgpIGltbWVkaWF0bHkgb3Igb24gbGFzdCBjbG9zZSkgKi8KKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2KTsKIAogCVBERUJVRyhEX1BST0JFLCAiZGlzY29ubmVjdCBjb21wbGV0ZSIpOwogfQpAQCAtMTk5Miw3ICsyMDM4LDcgQEAKIAkgICBkZXNpcmVkIGx1bWluYXRpb24gZmFzdCAod2l0aCB0aGUgcmlzYyBvZiBhIHNsaWdodCBvdmVyc2hvb3QpICovCiAJc3RlcHMgPSBhYnMoZGVzaXJlZF9hdmdfbHVtIC0gYXZnX2x1bSkgLyBkZWFkem9uZTsKIAotCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogbHVtOiAlZCwgZGVzaXJlZDogJWQsIHN0ZXBzOiAlZFxuIiwKKwlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGx1bTogJWQsIGRlc2lyZWQ6ICVkLCBzdGVwczogJWQiLAogCQlhdmdfbHVtLCBkZXNpcmVkX2F2Z19sdW0sIHN0ZXBzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggZDI1ZThkNjkuLmM5MGFmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKQEAgLTU2LDggKzU2LDEyIEBACiAvKiBkZXZpY2UgaW5mb3JtYXRpb24gLSBzZXQgYXQgcHJvYmUgdGltZSAqLwogc3RydWN0IGNhbSB7CiAJaW50IGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9tb2RlOwkvKiBzaXplIG5tb2RlcyAqLworCWNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9tb2RlOwkvKiBzaXplIG5tb2RlcyAqLwogCWNoYXIgbm1vZGVzOworCV9fdTggYnVsa19udXJiczsJLyogbnVtYmVyIG9mIFVSQnMgaW4gYnVsayBtb2RlCisJCQkJICogLSBjYW5ub3QgYmUgPiBNQVhfTlVSQlMKKwkJCQkgKiAtIHdoZW4gMCBhbmQgYnVsa19zaXplICE9IDAgbWVhbnMKKwkJCQkgKiAgIDEgVVJCIGFuZCBzdWJtaXQgZG9uZSBieSBzdWJkcml2ZXIgKi8KIAlfX3U4IGVwYWRkcjsKIH07CiAKQEAgLTcwLDYgKzc0LDggQEAKIHR5cGVkZWYgaW50ICgqY2FtX2NmX29wKSAoc3RydWN0IGdzcGNhX2RldiAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKIHR5cGVkZWYgaW50ICgqY2FtX2pwZ19vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKiwKIAkJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKik7Cit0eXBlZGVmIGludCAoKmNhbV9zdHJlYW1wYXJtX29wKSAoc3RydWN0IGdzcGNhX2RldiAqLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqKTsKIHR5cGVkZWYgaW50ICgqY2FtX3FtbnVfb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICosCiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKik7CiB0eXBlZGVmIHZvaWQgKCpjYW1fcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTAyLDYgKzEwOCw4IEBACiAJY2FtX2pwZ19vcCBnZXRfamNvbXA7CiAJY2FtX2pwZ19vcCBzZXRfamNvbXA7CiAJY2FtX3FtbnVfb3AgcXVlcnltZW51OworCWNhbV9zdHJlYW1wYXJtX29wIGdldF9zdHJlYW1wYXJtOworCWNhbV9zdHJlYW1wYXJtX29wIHNldF9zdHJlYW1wYXJtOwogfTsKIAogLyogcGFja2V0IHR5cGVzIHdoZW4gbW92aW5nIGZyb20gaXNvIGJ1ZiB0byBmcmFtZSBidWYgKi8KQEAgLTEyMCwxMCArMTI4LDkgQEAKIH07CiAKIHN0cnVjdCBnc3BjYV9kZXYgewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwkJLyogc3ViZHJpdmVyIGhhbmRsaW5nIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwotCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IGZpbGUgKmNhcHRfZmlsZTsJCS8qIGZpbGUgZG9pbmcgdmlkZW8gY2FwdHVyZSAqLwogCiAJc3RydWN0IGNhbSBjYW07CQkJCS8qIGRldmljZSBpbmZvcm1hdGlvbiAqLwpAQCAtMTQyLDIyICsxNDksMjAgQEAKIAljaGFyIGZyX3E7CQkJCS8qIG5leHQgZnJhbWUgdG8gcXVldWUgKi8KIAljaGFyIGZyX287CQkJCS8qIG5leHQgZnJhbWUgdG8gZGVxdWV1ZSAqLwogCXNpZ25lZCBjaGFyIGZyX3F1ZXVlW0dTUENBX01BWF9GUkFNRVNdOwkvKiBmcmFtZSBxdWV1ZSAqLwotCWNoYXIgbGFzdF9wYWNrZXRfdHlwZTsKKwlfX3U4IGxhc3RfcGFja2V0X3R5cGU7CisJX19zOCBlbXB0eV9wYWNrZXQ7CQkvKiBpZiAoLTEpIGRvbid0IGNoZWNrIGVtcHR5IHBhY2tldHMgKi8KKwlfX3U4IHN0cmVhbWluZzsKIAotCV9fdTggaWZhY2U7CQkJLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KLQlfX3U4IGFsdDsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KIAlfX3U4IGN1cnJfbW9kZTsJCQkvKiBjdXJyZW50IGNhbWVyYSBtb2RlICovCiAJX191MzIgcGl4Zm10OwkJCS8qIGN1cnJlbnQgbW9kZSBwYXJhbWV0ZXJzICovCiAJX191MTYgd2lkdGg7CiAJX191MTYgaGVpZ2h0OworCV9fdTMyIHNlcXVlbmNlOwkJCS8qIGZyYW1lIHNlcXVlbmNlIG51bWJlciAqLwogCi0JYXRvbWljX3QgbmV2ZW50OwkJLyogbnVtYmVyIG9mIGZyYW1lcyBkb25lICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CQkvKiB3YWl0IHF1ZXVlICovCiAJc3RydWN0IG11dGV4IHVzYl9sb2NrOwkJLyogdXNiIGV4Y2hhbmdlIHByb3RlY3Rpb24gKi8KIAlzdHJ1Y3QgbXV0ZXggcmVhZF9sb2NrOwkJLyogcmVhZCBwcm90ZWN0aW9uICovCiAJc3RydWN0IG11dGV4IHF1ZXVlX2xvY2s7CS8qIElTT0MgcXVldWUgcHJvdGVjdGlvbiAqLwotCV9fdTMyIHNlcXVlbmNlOwkJCS8qIGZyYW1lIHNlcXVlbmNlIG51bWJlciAqLwotCWNoYXIgc3RyZWFtaW5nOwogI2lmZGVmIENPTkZJR19QTQogCWNoYXIgZnJvemVuOwkJCS8qIHN1c3BlbmQgLSByZXN1bWUgKi8KICNlbmRpZgpAQCAtMTY2LDYgKzE3MSw4IEBACiAJY2hhciBuYnVmcmVhZDsJCQkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3IgcmVhZCgpICovCiAJY2hhciBudXJiczsJCQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIFVSQnMgKi8KIAljaGFyIG1lbW9yeTsJCQkvKiBtZW1vcnkgdHlwZSAoVjRMMl9NRU1PUllfeHh4KSAqLworCV9fdTggaWZhY2U7CQkJLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KKwlfX3U4IGFsdDsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KIAlfX3U4IG5iYWx0OwkJCS8qIG51bWJlciBvZiBVU0IgYWx0ZXJuYXRlIHNldHRpbmdzICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaAppbmRleCAxYTM3YWU0Li5hM2YzYjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2JyaWRnZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKQEAgLTI1LDU5ICsyNSw1OSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX1RZUEUgMHgwMAotI2RlZmluZSBNNTYwMl9YQl9TRU5TT1JfQ1RSTCAweDAxCi0jZGVmaW5lIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCAweDAyCi0jZGVmaW5lIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfTCAweDAzCi0jZGVmaW5lIE01NjAyX1hCX1BJWF9PRl9MSU5FX0ggMHgwNAotI2RlZmluZSBNNTYwMl9YQl9QSVhfT0ZfTElORV9MIDB4MDUKLSNkZWZpbmUgTTU2MDJfWEJfVlNZTkNfUEFSQSAweDA2Ci0jZGVmaW5lIE01NjAyX1hCX0hTWU5DX1BBUkEgMHgwNwotI2RlZmluZSBNNTYwMl9YQl9URVNUX01PREVfMSAweDA4Ci0jZGVmaW5lIE01NjAyX1hCX1RFU1RfTU9ERV8yIDB4MDkKLSNkZWZpbmUgTTU2MDJfWEJfU0lHX0lOSSAweDBhCi0jZGVmaW5lIE01NjAyX1hCX0RTX1BBUkEgMHgwZQotI2RlZmluZSBNNTYwMl9YQl9UUklHX1BBUkEgMHgwZgotI2RlZmluZSBNNTYwMl9YQl9DTEtfUEQgMHgxMAotI2RlZmluZSBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwgMHgxMgotI2RlZmluZSBNNTYwMl9YQl9NQ1VfQ0xLX0RJViAweDEzCi0jZGVmaW5lIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCAweDE0Ci0jZGVmaW5lIE01NjAyX1hCX1NFTl9DTEtfRElWIDB4MTUKLSNkZWZpbmUgTTU2MDJfWEJfQVVEX0NMS19DVFJMIDB4MTYKLSNkZWZpbmUgTTU2MDJfWEJfQVVEX0NMS19ESVYgMHgxNwotI2RlZmluZSBNNTYwMl9YQl9ERVZDVFIxIDB4NDEKLSNkZWZpbmUgTTU2MDJfWEJfRVBTRVRSMCAweDQyCi0jZGVmaW5lIE01NjAyX1hCX0VQQUZDVFIgMHg0NwotI2RlZmluZSBNNTYwMl9YQl9FUEJGQ1RSIDB4NDkKLSNkZWZpbmUgTTU2MDJfWEJfRVBFRkNUUiAweDRmCi0jZGVmaW5lIE01NjAyX1hCX1RFU1RfUkVHIDB4NTMKLSNkZWZpbmUgTTU2MDJfWEJfQUxUMlNJWkUgMHg1NAotI2RlZmluZSBNNTYwMl9YQl9BTFQzU0laRSAweDU1Ci0jZGVmaW5lIE01NjAyX1hCX09CU0ZSQU1FIDB4NTYKLSNkZWZpbmUgTTU2MDJfWEJfUFdSX0NUTCAweDU5Ci0jZGVmaW5lIE01NjAyX1hCX0FEQ19DVFJMIDB4NjAKLSNkZWZpbmUgTTU2MDJfWEJfQURDX0RBVEEgMHg2MQotI2RlZmluZSBNNTYwMl9YQl9NSVNDX0NUUkwgMHg2MgotI2RlZmluZSBNNTYwMl9YQl9TTkFQU0hPVCAweDYzCi0jZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfMSAweDY0Ci0jZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfMiAweDY1Ci0jZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfMyAweDY2Ci0jZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfNCAweDY3Ci0jZGVmaW5lIE01NjAyX1hCX0kyQ19DVFJMIDB4NjgKLSNkZWZpbmUgTTU2MDJfWEJfSTJDX0NMS19ESVYgMHg2OQotI2RlZmluZSBNNTYwMl9YQl9JMkNfREVWX0FERFIgMHg2YQotI2RlZmluZSBNNTYwMl9YQl9JMkNfUkVHX0FERFIgMHg2YgotI2RlZmluZSBNNTYwMl9YQl9JMkNfREFUQSAweDZjCi0jZGVmaW5lIE01NjAyX1hCX0kyQ19TVEFUVVMgMHg2ZAotI2RlZmluZSBNNTYwMl9YQl9HUElPX0RBVF9IIDB4NzAKLSNkZWZpbmUgTTU2MDJfWEJfR1BJT19EQVRfTCAweDcxCi0jZGVmaW5lIE01NjAyX1hCX0dQSU9fRElSX0ggMHg3MgotI2RlZmluZSBNNTYwMl9YQl9HUElPX0RJUl9MIDB4NzMKLSNkZWZpbmUgTTU2MDJfWEJfR1BJT19FTl9IIDB4NzQKLSNkZWZpbmUgTTU2MDJfWEJfR1BJT19FTl9MIDB4NzUKLSNkZWZpbmUgTTU2MDJfWEJfR1BJT19EQVQgMHg3NgotI2RlZmluZSBNNTYwMl9YQl9HUElPX0RJUiAweDc3Ci0jZGVmaW5lIE01NjAyX1hCX01JU0NfQ1RMIDB4NzAKKyNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX1RZUEUJCTB4MDAKKyNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX0NUUkwJCTB4MDEKKyNkZWZpbmUgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ICTB4MDIKKyNkZWZpbmUgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9MCTB4MDMKKyNkZWZpbmUgTTU2MDJfWEJfUElYX09GX0xJTkVfSAkJMHgwNAorI2RlZmluZSBNNTYwMl9YQl9QSVhfT0ZfTElORV9MCQkweDA1CisjZGVmaW5lIE01NjAyX1hCX1ZTWU5DX1BBUkEJCTB4MDYKKyNkZWZpbmUgTTU2MDJfWEJfSFNZTkNfUEFSQQkJMHgwNworI2RlZmluZSBNNTYwMl9YQl9URVNUX01PREVfMQkJMHgwOAorI2RlZmluZSBNNTYwMl9YQl9URVNUX01PREVfMgkJMHgwOQorI2RlZmluZSBNNTYwMl9YQl9TSUdfSU5JCQkweDBhCisjZGVmaW5lIE01NjAyX1hCX0RTX1BBUkEJCTB4MGUKKyNkZWZpbmUgTTU2MDJfWEJfVFJJR19QQVJBCQkweDBmCisjZGVmaW5lIE01NjAyX1hCX0NMS19QRAkJCTB4MTAKKyNkZWZpbmUgTTU2MDJfWEJfTUNVX0NMS19DVFJMCQkweDEyCisjZGVmaW5lIE01NjAyX1hCX01DVV9DTEtfRElWCQkweDEzCisjZGVmaW5lIE01NjAyX1hCX1NFTl9DTEtfQ1RSTAkJMHgxNAorI2RlZmluZSBNNTYwMl9YQl9TRU5fQ0xLX0RJVgkJMHgxNQorI2RlZmluZSBNNTYwMl9YQl9BVURfQ0xLX0NUUkwJCTB4MTYKKyNkZWZpbmUgTTU2MDJfWEJfQVVEX0NMS19ESVYJCTB4MTcKKyNkZWZpbmUgTTU2MDJfWEJfREVWQ1RSMQkJMHg0MQorI2RlZmluZSBNNTYwMl9YQl9FUFNFVFIwCQkweDQyCisjZGVmaW5lIE01NjAyX1hCX0VQQUZDVFIJCTB4NDcKKyNkZWZpbmUgTTU2MDJfWEJfRVBCRkNUUgkJMHg0OQorI2RlZmluZSBNNTYwMl9YQl9FUEVGQ1RSCQkweDRmCisjZGVmaW5lIE01NjAyX1hCX1RFU1RfUkVHCQkweDUzCisjZGVmaW5lIE01NjAyX1hCX0FMVDJTSVpFCQkweDU0CisjZGVmaW5lIE01NjAyX1hCX0FMVDNTSVpFCQkweDU1CisjZGVmaW5lIE01NjAyX1hCX09CU0ZSQU1FCQkweDU2CisjZGVmaW5lIE01NjAyX1hCX1BXUl9DVEwJCTB4NTkKKyNkZWZpbmUgTTU2MDJfWEJfQURDX0NUUkwJCTB4NjAKKyNkZWZpbmUgTTU2MDJfWEJfQURDX0RBVEEJCTB4NjEKKyNkZWZpbmUgTTU2MDJfWEJfTUlTQ19DVFJMCQkweDYyCisjZGVmaW5lIE01NjAyX1hCX1NOQVBTSE9UCQkweDYzCisjZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfMQkJMHg2NAorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzIJCTB4NjUKKyNkZWZpbmUgTTU2MDJfWEJfU0NSQVRDSF8zCQkweDY2CisjZGVmaW5lIE01NjAyX1hCX1NDUkFUQ0hfNAkJMHg2NworI2RlZmluZSBNNTYwMl9YQl9JMkNfQ1RSTAkJMHg2OAorI2RlZmluZSBNNTYwMl9YQl9JMkNfQ0xLX0RJVgkJMHg2OQorI2RlZmluZSBNNTYwMl9YQl9JMkNfREVWX0FERFIJCTB4NmEKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX1JFR19BRERSCQkweDZiCisjZGVmaW5lIE01NjAyX1hCX0kyQ19EQVRBCQkweDZjCisjZGVmaW5lIE01NjAyX1hCX0kyQ19TVEFUVVMJCTB4NmQKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19EQVRfSAkJMHg3MAorI2RlZmluZSBNNTYwMl9YQl9HUElPX0RBVF9MCQkweDcxCisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRElSX0gJCTB4NzIKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19ESVJfTAkJMHg3MworI2RlZmluZSBNNTYwMl9YQl9HUElPX0VOX0gJCTB4NzQKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19FTl9MCQkweDc1CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fREFUCQkweDc2CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRElSCQkweDc3CisjZGVmaW5lIE01NjAyX1hCX01JU0NfQ1RMCQkweDcwCiAKICNkZWZpbmUgSTJDX0JVU1kgMHg4MAogCkBAIC05MCwxMyArOTAsNyBAQAogI2RlZmluZSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFIgMHg4MQogI2RlZmluZSBNNTYwMl9JTlRSX0VORFBPSU5UX0FERFIgMHg4MgogCi0jZGVmaW5lIE01NjAyX01BWF9GUkFNRVMJMzIKLSNkZWZpbmUgTTU2MDJfVVJCUwkJMgotI2RlZmluZSBNNTYwMl9JU09DX1BBQ0tFVFMJMTQKLQotI2RlZmluZSBNNTYwMl9VUkJfVElNRU9VVAltc2Vjc190b19qaWZmaWVzKDIgKiBNNTYwMl9JU09DX1BBQ0tFVFMpCiAjZGVmaW5lIE01NjAyX1VSQl9NU0dfVElNRU9VVCAgIDUwMDAKLSNkZWZpbmUgTTU2MDJfRlJBTUVfVElNRU9VVAkyCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTE1LDcgKzEwOSw2IEBACiAJMHgxMywgTTU2MDJfWEJfSTJDX0NUUkwsIDB4ODEsIDB4MTEKIH07CiAKLS8qIG01NjAyIGRldmljZSBkZXNjcmlwdG9yLCBjdXJyZW50bHkgaXQganVzdCB3cmFwcyB0aGUgbTU2MDJfY2FtZXJhIHN0cnVjdCAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsKIApAQCAtMTQwLDQgKzEzMywxMCBAQAogaW50IG01NjAyX3dyaXRlX2JyaWRnZSgKIAlzdHJ1Y3Qgc2QgKnNkLCB1OCBhZGRyZXNzLCB1OCBpMmNfZGF0YSk7CiAKK2ludCBtNTYwMl93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKworaW50IG01NjAyX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCmluZGV4IGZkNmNlMzguLmVkOTA2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCkBAIC0yNCw3ICsyNCw3IEBACiAKIC8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLwogaW50IGZvcmNlX3NlbnNvcjsKLWludCBkdW1wX2JyaWRnZTsKK3N0YXRpYyBpbnQgZHVtcF9icmlkZ2U7CiBpbnQgZHVtcF9zZW5zb3I7CiAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG01NjAyX3RhYmxlW10gPSB7CkBAIC04MCw2ICs4MCw5NyBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitpbnQgbTU2MDJfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisKKwlpZiAoIWxlbiB8fCBsZW4gPiBzZC0+c2Vuc29yLT5pMmNfcmVnVykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbyB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7CisJfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwKKwkJCQkgc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHNkLT5zZW5zb3ItPmkyY19yZWdXID09IDEpIHsKKwkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgbGVuKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKworCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDA4KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDE4ICsgbGVuKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyAoaSA8IGxlbikgJiYgIWVycjsgaSsrKSB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOworCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCQkgICAgICAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CisJfQorb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBtNTYwMl93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisJdTggKnA7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwkvKiBObyBzZW5zb3Igd2l0aCBhIGRhdGEgd2lkdGggbGFyZ2VyIHRoYW4gMTYgYml0cyBoYXMgeWV0IGJlZW4gc2VlbiAqLworCWlmIChsZW4gPiBzZC0+c2Vuc29yLT5pMmNfcmVnVyB8fCAhbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShidWYsIHNlbnNvcl91cmJfc2tlbGV0b24sCisJICAgICAgIHNpemVvZihzZW5zb3JfdXJiX3NrZWxldG9uKSk7CisKKwlidWZbMTFdID0gc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkOworCWJ1ZlsxNV0gPSBhZGRyZXNzOworCisJLyogU3BlY2lhbCBjYXNlIGxhcmdlciBzZW5zb3Igd3JpdGVzICovCisJcCA9IGJ1ZiArIDE2OworCisJLyogQ29weSBhIGZvdXIgYnl0ZSB3cml0ZSBzZXF1ZW5jZSBmb3IgZWFjaCBieXRlIHRvIGJlIHdyaXR0ZW4gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CisJCXBbM10gPSBpMmNfZGF0YVtpXTsKKwkJcCArPSA0OworCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOworCX0KKworCS8qIENvcHkgdGhlIHRhaWxlciAqLworCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMjAsIDQpOworCisJLyogU2V0IHRoZSB0b3RhbCBsZW5ndGggKi8KKwlwWzNdID0gMHgxMCArIGxlbjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDA0LCAweDQwLCAweDE5LAorCQkJICAgICAgMHgwMDAwLCBidWYsCisJCQkgICAgICAyMCArIGxlbiAqIDQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKwogLyogRHVtcCBhbGwgdGhlIHJlZ2lzdGVycyBvZiB0aGUgbTU2MDIgYnJpZGdlLAogICAgdW5mb3J0dW5hdGVseSB0aGlzIGJyZWFrcyB0aGUgY2FtZXJhIHVudGlsIGl0J3MgcG93ZXIgY3ljbGVkICovCiBzdGF0aWMgdm9pZCBtNTYwMl9kdW1wX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkKQpAQCAtMTUwLDExICsyNDEsMTUgQEAKIAogCS8qIFNlbmQgc3RhcnQgY29tbWFuZCB0byB0aGUgY2FtZXJhICovCiAJY29uc3QgdTggYnVmZmVyWzRdID0gezB4MTMsIDB4ZjksIDB4MGYsIDB4MDF9OworCisJaWYgKHNkLT5zZW5zb3ItPnN0YXJ0KQorCQlzZC0+c2Vuc29yLT5zdGFydChzZCk7CisKIAltZW1jcHkoYnVmLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKIAllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwgMHgwMDAwLCBidWYsCi0JCQkgICAgICA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCQkJICAgICAgc2l6ZW9mKGJ1ZmZlciksIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CiAKIAlQREVCVUcoRF9TVFJFQU0sICJUcmFuc2ZlciBzdGFydGVkIik7CiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0yODQsNiArMzc5LDcgQEAKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIHZvaWQgX19leGl0IG1vZF9tNTYwMl9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCmluZGV4IGZiNzAwYzIuLmMwZTcxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCkBAIC0xOCw2ICsxOCw4IEBACiAKICNpbmNsdWRlICJtNTYwMl9tdDltMTExLmgiCiAKK3N0YXRpYyB2b2lkIG10OW0xMTFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCk7CisKIGludCBtdDltMTExX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKQEAgLTQ0LDEyICs0NiwxMiBAQAogCQl9IGVsc2UgewogCQkJZGF0YVswXSA9IHByZWluaXRfbXQ5bTExMVtpXVsyXTsKIAkJCWRhdGFbMV0gPSBwcmVpbml0X210OW0xMTFbaV1bM107Ci0JCQltdDltMTExX3dyaXRlX3NlbnNvcihzZCwKKwkJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlwcmVpbml0X210OW0xMTFbaV1bMV0sIGRhdGEsIDIpOwogCQl9CiAJfQogCi0JaWYgKG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfQ0hJUFZFUiwgZGF0YSwgMikpCisJaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0NISVBWRVIsIGRhdGEsIDIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoZGF0YVswXSA9PSAweDE0KSAmJiAoZGF0YVsxXSA9PSAweDNhKSkgewpAQCAtNzIsNyArNzQsNyBAQAogCWludCBpLCBlcnIgPSAwOwogCiAJLyogSW5pdCB0aGUgc2Vuc29yICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9tdDltMTExKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9tdDltMTExKSAmJiAhZXJyOyBpKyspIHsKIAkJdTggZGF0YVsyXTsKIAogCQlpZiAoaW5pdF9tdDltMTExW2ldWzBdID09IEJSSURHRSkgewpAQCAtODIsNyArODQsNyBAQAogCQl9IGVsc2UgewogCQkJZGF0YVswXSA9IGluaXRfbXQ5bTExMVtpXVsyXTsKIAkJCWRhdGFbMV0gPSBpbml0X210OW0xMTFbaV1bM107Ci0JCQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlpbml0X210OW0xMTFbaV1bMV0sIGRhdGEsIDIpOwogCQl9CiAJfQpAQCAtMTA0LDEyICsxMDYsMTIgQEAKIAl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLAogCQkJCSAgZGF0YSwgMik7CiAJKnZhbCA9IGRhdGFbMF0gJiBNVDlNMTExX1JNQl9NSVJST1JfUk9XUzsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgbXQ5bTExMV9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0xMjEsMTkgKzEyMywxOSBAQAogCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CiAKIAkvKiBTZXQgdGhlIGNvcnJlY3QgcGFnZSBtYXAgKi8KLQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgZGF0YSwgMik7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIGRhdGEsIDIpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIGRhdGEsIDIpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAogCWRhdGFbMF0gPSAoZGF0YVswXSAmIDB4ZmUpIHwgdmFsOwotCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCiAJCQkJICAgZGF0YSwgMik7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG10OW0xMTFfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTE0MiwxMiArMTQ0LDEyIEBACiAJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKIAkJCQkgIGRhdGEsIDIpOwogCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFM7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgbXQ5bTExMV9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0xNTksMTkgKzE2MSwxOSBAQAogCVBERUJVRyhEX1Y0TDIsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwgdmFsKTsKIAogCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLwotCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfUEFHRV9NQVAsIGRhdGEsIDIpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAotCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwgZGF0YSwgMik7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwgZGF0YSwgMik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJZGF0YVswXSA9IChkYXRhWzBdICYgMHhmZCkgfCAoKHZhbCA8PCAxKSAmIDB4MDIpOwotCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCiAJCQkJCWRhdGEsIDIpOwogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBtdDltMTExX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTE4MCw3ICsxODIsNyBAQAogCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwgZGF0YSwgMik7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sIGRhdGEsIDIpOwogCXRtcCA9ICgoZGF0YVsxXSA8PCA4KSB8IGRhdGFbMF0pOwogCiAJKnZhbCA9ICgodG1wICYgKDEgPDwgMTApKSAqIDIpIHwKQEAgLTE5MCw3ICsxOTIsNyBAQAogCiAJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG10OW0xMTFfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0yMDAsNyArMjAyLDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAkvKiBTZXQgdGhlIGNvcnJlY3QgcGFnZSBtYXAgKi8KLQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgZGF0YSwgMik7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTIyNSw5MCArMjI3LDEzIEBACiAJUERFQlVHKERfVjRMMiwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKIAkgICAgICAgZGF0YVsxXSwgZGF0YVswXSk7CiAKLQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sCiAJCQkJICAgZGF0YSwgMik7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAotaW50IG10OW0xMTFfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKSB7Ci0JaW50IGVyciwgaTsKLQotCWRvIHsKLQkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKLQl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAotCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFlcnI7IGkrKykgewotCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKLQotCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgotCQkgICAgICAgIjB4JXggY29udGFpbnMgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOwotCX0KLW91dDoKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKLX0KLQotaW50IG10OW0xMTFfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCi17Ci0JaW50IGVyciwgaTsKLQl1OCAqcDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwotCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKLQotCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIKLQkgICB0aGFuIDE2IGJpdHMgaGFzIHlldCBiZWVuIHNlZW4sIG5vciB3aXRoIDAgOnAqLwotCWlmIChsZW4gPiAyIHx8ICFsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKLQkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKLQotCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7Ci0JYnVmWzE1XSA9IGFkZHJlc3M7Ci0KLQlwID0gYnVmICsgMTY7Ci0KLQkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKLQkJcFszXSA9IGkyY19kYXRhW2ldOwotCQlwICs9IDQ7Ci0JCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCi0JCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7Ci0JfQotCi0JLyogQ29weSB0aGUgdGFpbGVyICovCi0JbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7Ci0KLQkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLwotCXBbM10gPSAweDEwICsgbGVuOwotCi0JZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCi0JCQkgICAgICAweDAwMDAsIGJ1ZiwKLQkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKLQotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwotfQotCi12b2lkIG10OW0xMTFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG10OW0xMTFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKIHsKIAl1OCBhZGRyZXNzLCB2YWx1ZVsyXSA9IHsweDAwLCAweDAwfTsKIApAQCAtMzE2LDI3ICsyNDEsMjcgQEAKIAogCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgc2Vuc29yIGNvcmUgcmVnaXN0ZXJzIik7CiAJdmFsdWVbMV0gPSBNVDlNMTExX1NFTlNPUl9DT1JFOwotCW10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCB2YWx1ZSwgMik7CisJbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCB2YWx1ZSwgMik7CiAJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8IDB4ZmY7IGFkZHJlc3MrKykgewotCQltdDltMTExX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCB2YWx1ZSwgMik7CisJCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCB2YWx1ZSwgMik7CiAJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCV4IiwKIAkJICAgICBhZGRyZXNzLCB2YWx1ZVswXSwgdmFsdWVbMV0pOwogCX0KIAogCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgY29sb3IgcGlwZWxpbmUgcmVnaXN0ZXJzIik7CiAJdmFsdWVbMV0gPSBNVDlNMTExX0NPTE9SUElQRTsKLQltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOwogCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKLQkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOwogCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCiAJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKIAl9CiAKIAlpbmZvKCJEdW1waW5nIHRoZSBtdDltMTExIGNhbWVyYSBjb250cm9sIHJlZ2lzdGVycyIpOwogCXZhbHVlWzFdID0gTVQ5TTExMV9DQU1FUkFfQ09OVFJPTDsKLQltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOwogCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKLQkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOwogCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCiAJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oCmluZGV4IDMxNTIwOWQ1Li5lNzk1YWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaApAQCAtODcsMTQgKzg3LDYgQEAKIGludCBtdDltMTExX2luaXQoc3RydWN0IHNkICpzZCk7CiBpbnQgbXQ5bTExMV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOwogCi1pbnQgbXQ5bTExMV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOwotCi1pbnQgbXQ5bTExMV93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJCSB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7Ci0KLXZvaWQgbXQ5bTExMV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKLQogaW50IG10OW0xMTFfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIGludCBtdDltMTExX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogaW50IG10OW0xMTFfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CkBAIC0xMDYsMTQgKzk4LDEyIEBACiAJLm5hbWUgPSAiTVQ5TTExMSIsCiAKIAkuaTJjX3NsYXZlX2lkID0gMHhiYSwKKwkuaTJjX3JlZ1cgPSAyLAogCiAJLnByb2JlID0gbXQ5bTExMV9wcm9iZSwKIAkuaW5pdCA9IG10OW0xMTFfaW5pdCwKIAkucG93ZXJfZG93biA9IG10OW0xMTFfcG93ZXJfZG93biwKIAotCS5yZWFkX3NlbnNvciA9IG10OW0xMTFfcmVhZF9zZW5zb3IsCi0JLndyaXRlX3NlbnNvciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yLAotCiAJLm5jdHJscyA9IDMsCiAJLmN0cmxzID0gewogCXsKQEAgLTEwMDMsNyArOTkzLDcgQEAKIAl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKLQl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwgLyogNjM5Ki8KIAl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDdmLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwppbmRleCA4MzdjN2U0Ny4uYzkwOGE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC0xOCw3NyArMTgsNTcgQEAKIAogI2luY2x1ZGUgIm01NjAyX292OTY1MC5oIgogCi1pbnQgb3Y5NjUwX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQotewotCWludCBlcnIsIGk7CisvKiBWZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkgZmxpcHMgdGhlIGltYWdlIGlmIG1hdGNoZWQsIG5lZWRlZCBmb3IgbWFjaGluZXMKKyAgIHdoZXJlIHRoZSBzZW5zb3IgaXMgbW91bnRlZCB1cHNpZGUgZG93biAqLworc3RhdGljCisgICAgY29uc3QKKwlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBvdjk2NTBfZmxpcF9kbWlfdGFibGVbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJBU1VTIEE2VkMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNlZDIikKKwkJfQorCX0sCisJeworCQkuaWRlbnQgPSAiQVNVUyBBNlZNIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTZWTSIpCisJCX0KKwl9LAorCXsKKwkJLmlkZW50ID0gIkFTVVMgQTZKQyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2SkMiKQorCQl9CisJfSwKKwl7CisJCS5pZGVudCA9ICJBU1VTIEE2SmEiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNkoiKQorCQl9CisJfSwKKwl7CisJCS5pZGVudCA9ICJBU1VTIEE2S3QiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNkt0IikKKwkJfQorCX0sCisJeworCQkuaWRlbnQgPSAiQWxpZW53YXJlIEF1cm9yYSBtOTcwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiYWxpZW53YXJlIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkF1cm9yYSBtOTcwMCIpCisJCX0KKwl9LAorCXsgfQorfTsKIAotCS8qIFRoZSBvdjk2NTAgcmVnaXN0ZXJzIGhhdmUgYSBtYXggZGVwdGggb2Ygb25lIGJ5dGUgKi8KLQlpZiAobGVuID4gMSB8fCAhbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRvIHsKLQkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKLQl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOwotCi0JbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsCi0JCQkgICBvdjk2NTAuaTJjX3NsYXZlX2lkKTsKLQltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7Ci0JbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxMCArIGxlbik7Ci0JbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgwOCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7Ci0KLQkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKLQkJCQkiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKLQl9Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci19Ci0KLWludCBvdjk2NTBfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKLXsKLQlpbnQgZXJyLCBpOwotCXU4ICpwOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7Ci0JX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOwotCi0JLyogVGhlIG92OTY1MCBvbmx5IHN1cHBvcnRzIG9uZSBieXRlIHdyaXRlcyAqLwotCWlmIChsZW4gPiAxIHx8ICFsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKLQkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKLQotCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7Ci0JYnVmWzE1XSA9IGFkZHJlc3M7Ci0KLQkvKiBTcGVjaWFsIGNhc2UgbGFyZ2VyIHNlbnNvciB3cml0ZXMgKi8KLQlwID0gYnVmICsgMTY7Ci0KLQkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKLQkJcFszXSA9IGkyY19kYXRhW2ldOwotCQlwICs9IDQ7Ci0JCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCi0JCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7Ci0JfQotCi0JLyogQ29weSB0aGUgdGFpbGVyICovCi0JbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7Ci0KLQkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLwotCXBbM10gPSAweDEwICsgbGVuOwotCi0JZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCi0JCQkgICAgICAweDAwMDAsIGJ1ZiwKLQkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKLQotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwotfQorc3RhdGljIHZvaWQgb3Y5NjUwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOwogCiBpbnQgb3Y5NjUwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CkBAIC0xMTAsMTYgKzkwLDE2IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9vdjk2NTApOyBpKyspIHsKIAkJdTggZGF0YSA9IHByZWluaXRfb3Y5NjUwW2ldWzJdOwogCQlpZiAocHJlaW5pdF9vdjk2NTBbaV1bMF0gPT0gU0VOU09SKQotCQkJb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwKKwkJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQkJICAgIHByZWluaXRfb3Y5NjUwW2ldWzFdLCAmZGF0YSwgMSk7CiAJCWVsc2UKIAkJCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgcHJlaW5pdF9vdjk2NTBbaV1bMV0sIGRhdGEpOwogCX0KIAotCWlmIChvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9QSUQsICZwcm9kX2lkLCAxKSkKKwlpZiAobTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9QSUQsICZwcm9kX2lkLCAxKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAob3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVkVSLCAmdmVyX2lkLCAxKSkKKwlpZiAobTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9WRVIsICZ2ZXJfaWQsIDEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgocHJvZF9pZCA9PSAweDk2KSAmJiAodmVyX2lkID09IDB4NTIpKSB7CkBAIC0xNDgsMzQgKzEyOCw5MCBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfb3Y5NjUwKSAmJiAhZXJyOyBpKyspIHsKIAkJZGF0YSA9IGluaXRfb3Y5NjUwW2ldWzJdOwogCQlpZiAoaW5pdF9vdjk2NTBbaV1bMF0gPT0gU0VOU09SKQotCQkJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgaW5pdF9vdjk2NTBbaV1bMV0sCisJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIGluaXRfb3Y5NjUwW2ldWzFdLAogCQkJCQkJICAmZGF0YSwgMSk7CiAJCWVsc2UKIAkJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgaW5pdF9vdjk2NTBbaV1bMV0sIGRhdGEpOwogCX0KIAotCWlmICghZXJyICYmIGRtaV9jaGVja19zeXN0ZW0ob3Y5NjUwX2ZsaXBfZG1pX3RhYmxlKSkgeworCWlmIChkbWlfY2hlY2tfc3lzdGVtKG92OTY1MF9mbGlwX2RtaV90YWJsZSkgJiYgIWVycikgewogCQlpbmZvKCJ2ZmxpcCBxdWlyayBhY3RpdmUiKTsKIAkJZGF0YSA9IDB4MzA7Ci0JCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmZGF0YSwgMSk7CisJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZkYXRhLCAxKTsKIAl9CisJcmV0dXJuIGVycjsKK30KIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworaW50IG92OTY1MF9zdGFydChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpLCBlcnIgPSAwOworCXN0cnVjdCBjYW0gKmNhbSA9ICZzZC0+Z3NwY2FfZGV2LmNhbTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlc19pbml0X292OTY1MCkgJiYgIWVycjsgaSsrKSB7CisJCXU4IGRhdGEgPSByZXNfaW5pdF9vdjk2NTBbaV1bMV07CisJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgcmVzX2luaXRfb3Y5NjUwW2ldWzBdLCBkYXRhKTsKKwl9CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKGNhbS0+Y2FtX21vZGVbc2QtPmdzcGNhX2Rldi5jdXJyX21vZGVdLndpZHRoKQorCXsKKwljYXNlIDY0MDoKKwkJUERFQlVHKERfVjRMMiwgIkNvbmZpZ3VyaW5nIGNhbWVyYSBmb3IgVkdBIG1vZGUiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShWR0Ffb3Y5NjUwKSAmJiAhZXJyOyBpKyspIHsKKwkJCXU4IGRhdGEgPSBWR0Ffb3Y5NjUwW2ldWzJdOworCQkJaWYgKFZHQV9vdjk2NTBbaV1bMF0gPT0gU0VOU09SKQorCQkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKKwkJCQkJVkdBX292OTY1MFtpXVsxXSwgJmRhdGEsIDEpOworCQkJZWxzZQorCQkJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgVkdBX292OTY1MFtpXVsxXSwgZGF0YSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDM1MjoKKwkJUERFQlVHKERfVjRMMiwgIkNvbmZpZ3VyaW5nIGNhbWVyYSBmb3IgQ0lGIG1vZGUiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShDSUZfb3Y5NjUwKSAmJiAhZXJyOyBpKyspIHsKKwkJCXU4IGRhdGEgPSBDSUZfb3Y5NjUwW2ldWzJdOworCQkJaWYgKENJRl9vdjk2NTBbaV1bMF0gPT0gU0VOU09SKQorCQkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKKwkJCQkJQ0lGX292OTY1MFtpXVsxXSwgJmRhdGEsIDEpOworCQkJZWxzZQorCQkJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgQ0lGX292OTY1MFtpXVsxXSwgZGF0YSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDMyMDoKKwkJUERFQlVHKERfVjRMMiwgIkNvbmZpZ3VyaW5nIGNhbWVyYSBmb3IgUVZHQSBtb2RlIik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoUVZHQV9vdjk2NTApICYmICFlcnI7IGkrKykgeworCQkJdTggZGF0YSA9IFFWR0Ffb3Y5NjUwW2ldWzJdOworCQkJaWYgKFFWR0Ffb3Y5NjUwW2ldWzBdID09IFNFTlNPUikKKwkJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsCisJCQkJCVFWR0Ffb3Y5NjUwW2ldWzFdLCAmZGF0YSwgMSk7CisJCQllbHNlCisJCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBRVkdBX292OTY1MFtpXVsxXSwgZGF0YSk7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvd2VyX2Rvd25fb3Y5NjUwKTsgaSsrKSB7CisJaW50IGksIGVyciA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG93ZXJfZG93bl9vdjk2NTApICYmICFlcnI7IGkrKykgewogCQl1OCBkYXRhID0gcG93ZXJfZG93bl9vdjk2NTBbaV1bMl07CiAJCWlmIChwb3dlcl9kb3duX292OTY1MFtpXVswXSA9PSBTRU5TT1IpCi0JCQlvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLAorCQkJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLAogCQkJCQkgICAgcG93ZXJfZG93bl9vdjk2NTBbaV1bMV0sICZkYXRhLCAxKTsKIAkJZWxzZQotCQkJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBwb3dlcl9kb3duX292OTY1MFtpXVsxXSwgZGF0YSk7CisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHBvd2VyX2Rvd25fb3Y5NjUwW2ldWzFdLAorCQkJCQkJIGRhdGEpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTE4NCwyNCArMjIwLDI0IEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAotCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTEsICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT00xLCAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAkqdmFsID0gaTJjX2RhdGEgJiAweDAzOwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQUVDSCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0FFQ0gsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCSp2YWwgfD0gKGkyY19kYXRhIDw8IDIpOwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQUVDSE0sICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNITSwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAJKnZhbCB8PSAoaTJjX2RhdGEgJiAweDNmKSA8PCAxMDsKIAogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0yMTUsMjQgKzI1MSwyNCBAQAogCiAJLyogVGhlIDYgTVNCcyAqLwogCWkyY19kYXRhID0gKHZhbCA+PiAxMCkgJiAweDNmOwotCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNITSwKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNITSwKIAkJCQkgICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogVGhlIDggbWlkZGxlIGJpdHMgKi8KIAlpMmNfZGF0YSA9ICh2YWwgPj4gMikgJiAweGZmOwotCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNILAorCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0FFQ0gsCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAogCS8qIFRoZSAyIExTQnMgKi8KIAlpMmNfZGF0YSA9IHZhbCAmIDB4MDM7Ci0JZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTEsICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQ09NMSwgJmkyY19kYXRhLCAxKTsKIAogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMjQxLDEzICsyNzcsMTMgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gKGkyY19kYXRhICYgMHgwMykgPDwgODsKIAotCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0yNTksMTYgKzI5NSwxNiBAQAogCS8qIFRoZSAyIE1TQiAqLwogCS8qIFJlYWQgdGhlIE9WOTY1MF9WUkVGIHJlZ2lzdGVyIGZpcnN0IHRvIGF2b2lkCiAJICAgY29ycnVwdGluZyB0aGUgVlJFRiBoaWdoIGFuZCBsb3cgYml0cyAqLwotCW92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOwogCS8qIE1hc2sgYXdheSBhbGwgdW5pbnRlcmVzdGluZyBiaXRzICovCiAJaTJjX2RhdGEgPSAoKHZhbCAmIDB4MDMwMCkgPj4gMikgfAogCQkJKGkyY19kYXRhICYgMHgzRik7Ci0JZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKIAogCS8qIFRoZSA4IExTQnMgKi8KIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7Ci0JZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX2dldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0yNzcsMTIgKzMxMywxMiBAQAogCXU4IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1JFRCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1JFRCwgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7CiAKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9zZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0yOTUsOSArMzMxLDkgQEAKIAkJCSAgICAgdmFsICYgMHhmZik7CiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7Ci0JZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1JFRCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9SRUQsICZpMmNfZGF0YSwgMSk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzA2LDEyICszNDIsMTIgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQkxVRSwgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7CiAKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTMyNCw5ICszNjAsOSBAQAogCSAgICAgICB2YWwgJiAweGZmKTsKIAogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKLQllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQkxVRSwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzM1LDE0ICszNzEsMTQgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShvdjk2NTBfZmxpcF9kbWlfdGFibGUpKQogCQkqdmFsID0gKChpMmNfZGF0YSAmIE9WOTY1MF9IRkxJUCkgPj4gNSkgPyAwIDogMTsKIAllbHNlCiAJCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDU7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTM1MiwyMCArMzg4LDIwIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOwotCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKG92OTY1MF9mbGlwX2RtaV90YWJsZSkpCiAJCWkyY19kYXRhID0gKChpMmNfZGF0YSAmIDB4ZGYpIHwKLQkJCQkoKCh2YWwgPyAwIDogMSkgJiAweDAxKSA8PCA1KSk7CisJCQkgICAoKCh2YWwgPyAwIDogMSkgJiAweDAxKSA8PCA1KSk7CiAJZWxzZQogCQlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGRmKSB8Ci0JCQkJKCh2YWwgJiAweDAxKSA8PCA1KSk7CisJCQkgICAoKHZhbCAmIDB4MDEpIDw8IDUpKTsKIAotCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzc0LDE0ICs0MTAsMTQgQEAKIAl1OCBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShvdjk2NTBfZmxpcF9kbWlfdGFibGUpKQogCQkqdmFsID0gKChpMmNfZGF0YSAmIDB4MTApID4+IDQpID8gMCA6IDE7CiAJZWxzZQogCQkqdmFsID0gKGkyY19kYXRhICYgMHgxMCkgPj4gNDsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTM5MSw3ICs0MjcsNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7Ci0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC00MDIsOSArNDM4LDkgQEAKIAkJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhlZikgfAogCQkJCSgodmFsICYgMHgwMSkgPDwgNCkpOwogCi0JZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKIG91dDoKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX2dldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTQxMywxNiArNDQ5LDE2IEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCSp2YWwgPSAoaTJjX2RhdGEgJiAweDAzKSA8PCA4OwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CiAJKnZhbCB8PSBpMmNfZGF0YTsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTQzNSwyMiArNDcxLDIyIEBACiAKIAkvKiBSZWFkIHRoZSBPVjk2NTBfVlJFRiByZWdpc3RlciBmaXJzdCB0byBhdm9pZAogCQljb3JydXB0aW5nIHRoZSBWUkVGIGhpZ2ggYW5kIGxvdyBiaXRzICovCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogTWFzayBhd2F5IGFsbCB1bmludGVyZXN0aW5nIGJpdHMgKi8KIAlpMmNfZGF0YSA9ICgodmFsICYgMHgwMzAwKSA+PiAyKSB8IChpMmNfZGF0YSAmIDB4M0YpOwotCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogVGhlIDggTFNCcyAqLwogCWkyY19kYXRhID0gdmFsICYgMHhmZjsKLQllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOwogCiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9nZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTQ1OSwxMSArNDk1LDExIEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BV0JfRU4pID4+IDE7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgb3Y5NjUwX3NldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC00NzMsMTQgKzUwOSwxNCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCVBERUJVRyhEX1Y0TDIsICJTZXQgYXV0byB3aGl0ZSBiYWxhbmNlIHRvICVkIiwgdmFsKTsKLQllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGZkKSB8ICgodmFsICYgMHgwMSkgPDwgMSkpOwotCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IG92OTY1MF9nZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTQ4OSwxMSArNTI1LDExIEBACiAJdTggaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BR0NfRU4pID4+IDI7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBvdjk2NTBfc2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTUwMywyMyArNTM5LDIzIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvIGdhaW4gY29udHJvbCB0byAlZCIsIHZhbCk7Ci0JZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmYikgfCAoKHZhbCAmIDB4MDEpIDw8IDIpKTsKLQllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOwogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgb3Y5NjUwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBvdjk2NTBfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKIHsKIAlpbnQgYWRkcmVzczsKIAlpbmZvKCJEdW1waW5nIHRoZSBvdjk2NTAgcmVnaXN0ZXIgc3RhdGUiKTsKIAlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDwgMHhhOTsgYWRkcmVzcysrKSB7CiAJCXU4IHZhbHVlOwotCQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ2YWx1ZSwgMSk7CisJCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOwogCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAogCQkgICAgIGFkZHJlc3MsIHZhbHVlKTsKIAl9CkBAIC01MzEsOSArNTY3LDkgQEAKIAkJdTggb2xkX3ZhbHVlLCBjdHJsX3ZhbHVlOwogCQl1OCB0ZXN0X3ZhbHVlWzJdID0gezB4ZmYsIDB4ZmZ9OwogCi0JCW92OTY1MF9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7Ci0JCW92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsIHRlc3RfdmFsdWUsIDEpOwotCQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKKwkJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsIHRlc3RfdmFsdWUsIDEpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJmN0cmxfdmFsdWUsIDEpOwogCiAJCWlmIChjdHJsX3ZhbHVlID09IHRlc3RfdmFsdWVbMF0pCiAJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHdyaXRlYWJsZSIsIGFkZHJlc3MpOwpAQCAtNTQxLDYgKzU3Nyw2IEBACiAJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHJlYWQgb25seSIsIGFkZHJlc3MpOwogCiAJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWUgKi8KLQkJb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CisJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmgKaW5kZXggMDY1NjMyZi4uZjRiMzNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIE01NjAyX09WOTY1MF9IXwogCiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0KICNpbmNsdWRlICJtNTYwMl9zZW5zb3IuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzYsNiArMzUsNyBAQAogI2RlZmluZSBPVjk2NTBfUElECQkJMHgwYQogI2RlZmluZSBPVjk2NTBfVkVSCQkJMHgwYgogI2RlZmluZSBPVjk2NTBfQ09NMwkJCTB4MGMKKyNkZWZpbmUgT1Y5NjUwX0NPTTQJCQkweDBkCiAjZGVmaW5lIE9WOTY1MF9DT001CQkJMHgwZQogI2RlZmluZSBPVjk2NTBfQ09NNgkJCTB4MGYKICNkZWZpbmUgT1Y5NjUwX0FFQ0gJCQkweDEwCkBAIC05NCw2ICs5NCw4IEBACiAKICNkZWZpbmUgT1Y5NjUwX1JFR0lTVEVSX1JFU0VUCQkoMSA8PCA3KQogI2RlZmluZSBPVjk2NTBfVkdBX1NFTEVDVAkJKDEgPDwgNikKKyNkZWZpbmUgT1Y5NjUwX0NJRl9TRUxFQ1QJCSgxIDw8IDUpCisjZGVmaW5lIE9WOTY1MF9RVkdBX1NFTEVDVAkJKDEgPDwgNCkKICNkZWZpbmUgT1Y5NjUwX1JHQl9TRUxFQ1QJCSgxIDw8IDIpCiAjZGVmaW5lIE9WOTY1MF9SQVdfUkdCX1NFTEVDVAkJKDEgPDwgMCkKIApAQCAtMTA4LDYgKzExMCw4IEBACiAjZGVmaW5lIE9WOTY1MF9TWVNURU1fQ0xLX1NFTAkJKDEgPDwgNykKICNkZWZpbmUgT1Y5NjUwX1NMQU1fTU9ERSAJCSgxIDw8IDQpCiAKKyNkZWZpbmUgT1Y5NjUwX1FWR0FfVkFSSU9QSVhFTAkJKDEgPDwgNykKKwogI2RlZmluZSBPVjk2NTBfVkZMSVAJCQkoMSA8PCA0KQogI2RlZmluZSBPVjk2NTBfSEZMSVAJCQkoMSA8PCA1KQogCkBAIC0xMjQsMTUgKzEyOCw5IEBACiAKIGludCBvdjk2NTBfcHJvYmUoc3RydWN0IHNkICpzZCk7CiBpbnQgb3Y5NjUwX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgb3Y5NjUwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpOwogaW50IG92OTY1MF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOwogCi1pbnQgb3Y5NjUwX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7Ci1pbnQgb3Y5NjUwX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOwotCi12b2lkIG92OTY1MF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKLQogaW50IG92OTY1MF9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogaW50IG92OTY1MF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIGludCBvdjk2NTBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKQEAgLTE1NSwxMSArMTUzLDExIEBACiBzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBvdjk2NTAgPSB7CiAJLm5hbWUgPSAiT1Y5NjUwIiwKIAkuaTJjX3NsYXZlX2lkID0gMHg2MCwKKwkuaTJjX3JlZ1cgPSAxLAogCS5wcm9iZSA9IG92OTY1MF9wcm9iZSwKIAkuaW5pdCA9IG92OTY1MF9pbml0LAorCS5zdGFydCA9IG92OTY1MF9zdGFydCwKIAkucG93ZXJfZG93biA9IG92OTY1MF9wb3dlcl9kb3duLAotCS5yZWFkX3NlbnNvciA9IG92OTY1MF9yZWFkX3NlbnNvciwKLQkud3JpdGVfc2Vuc29yID0gb3Y5NjUwX3dyaXRlX3NlbnNvciwKIAogCS5uY3RybHMgPSA4LAogCS5jdHJscyA9IHsKQEAgLTI2NCwxOCArMjYyLDM4IEBACiAJfQogCX0sCiAKLQkubm1vZGVzID0gMSwKKwkubm1vZGVzID0gMywKIAkubW9kZXMgPSB7CiAJewotCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAotCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJMzIwLAorCQkyNDAsCiAJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCiAJCVY0TDJfRklFTERfTk9ORSwKIAkJLnNpemVpbWFnZSA9Ci0JCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICogTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQkJMzIwICogMjQwLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKKwkJLnByaXYgPSAwCisJfSwgeworCQkzNTIsCisJCTI4OCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCTM1MiAqIDI4OCwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwCisJfSwgeworCQk2NDAsCisJCTQ4MCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCTY0MCAqIDQ4MCwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwCiAJfQogCX0KIH07CkBAIC0zMjQsNiArMzQyLDcgQEAKIAl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwfSwKIAl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMH0sCiAJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGF9LAorCiAJLyogUmVzZXQgY2hpcCAqLwogCXtTRU5TT1IsIE9WOTY1MF9DT003LCBPVjk2NTBfUkVHSVNURVJfUkVTRVR9LAogCS8qIEVuYWJsZSBkb3VibGUgY2xvY2sgKi8KQEAgLTMzMSw4ICszNTAsNiBAQAogCS8qIERvIHNvbWV0aGluZyBvdXQgb2Ygc3BlYyB3aXRoIHRoZSBwb3dlciAqLwogCXtTRU5TT1IsIE9WOTY1MF9PRk9OLCAweDQwfSwKIAotCS8qIFNldCBRUVZHQSAqLwotCXtTRU5TT1IsIE9WOTY1MF9DT00xLCAweDIwfSwKIAkvKiBTZXQgZmFzdCBBR0MvQUVDIGFsZ29yaXRobSB3aXRoIHVubGltaXRlZCBzdGVwIHNpemUgKi8KIAl7U0VOU09SLCBPVjk2NTBfQ09NOCwgT1Y5NjUwX0ZBU1RfQUdDX0FFQyB8CiAJCQkgICAgICBPVjk2NTBfQUVDX1VOTElNX1NURVBfU0laRSB8CkBAIC0zNDMsNyArMzYwLDcgQEAKIAl7U0VOU09SLCBPVjk2NTBfQUNPTTM4LCAweDgxfSwKIAkvKiBUdXJuIG9mZiBjb2xvciBtYXRyaXggY29lZmZpY2llbnQgZG91YmxlIG9wdGlvbiAqLwogCXtTRU5TT1IsIE9WOTY1MF9DT00xNiwgMHgwMH0sCi0JCS8qIEVuYWJsZSBjb2xvciBtYXRyaXggZm9yIFJHQi9ZVVYsIERlbGF5IFkgY2hhbm5lbCwKKwkvKiBFbmFibGUgY29sb3IgbWF0cml4IGZvciBSR0IvWVVWLCBEZWxheSBZIGNoYW5uZWwsCiAJc2V0IG91dHB1dCBZL1VWIGRlbGF5IHRvIDEgKi8KIAl7U0VOU09SLCBPVjk2NTBfQ09NMTMsIDB4MTl9LAogCS8qIEVuYWJsZSBkaWdpdGFsIEJMQywgU2V0IG91dHB1dCBtb2RlIHRvIFUgWSBWIFkgKi8KQEAgLTM1Miw3ICszNjksNyBAQAogCXtTRU5TT1IsIE9WOTY1MF9DT00yNCwgMHgwMH0sCiAJLyogRW5hYmxlIEhSRUYgYW5kIHNvbWUgb3V0IG9mIHNwZWMgdGhpbmdzICovCiAJe1NFTlNPUiwgT1Y5NjUwX0NPTTEyLCAweDczfSwKLQkJLyogU2V0IGFsbCBEQkxDIG9mZnNldCBzaWducyB0byBwb3NpdGl2ZSBhbmQKKwkvKiBTZXQgYWxsIERCTEMgb2Zmc2V0IHNpZ25zIHRvIHBvc2l0aXZlIGFuZAogCWRvIHNvbWUgb3V0IG9mIHNwZWMgc3R1ZmYgKi8KIAl7U0VOU09SLCBPVjk2NTBfREJMQzEsIDB4ZGZ9LAogCXtTRU5TT1IsIE9WOTY1MF9DT00yMSwgMHgwNn0sCkBAIC0zNjQsNyArMzgxLDcgQEAKIAl7U0VOU09SLCBPVjk2NTBfUlNWRDk2LCAweDA0fSwKIAkvKiBFbmFibGUgZnVsbCByYW5nZSBvdXRwdXQgKi8KIAl7U0VOU09SLCBPVjk2NTBfQ09NMTUsIDB4MH0sCi0JCS8qIEVuYWJsZSBIUkVGIGF0IG9wdGljYWwgYmxhY2ssIGVuYWJsZSBBREJMQyBiaWFzLAorCS8qIEVuYWJsZSBIUkVGIGF0IG9wdGljYWwgYmxhY2ssIGVuYWJsZSBBREJMQyBiaWFzLAogCWVuYWJsZSBBREJMQywgcmVzZXQgdGltaW5ncyBhdCBmb3JtYXQgY2hhbmdlICovCiAJe1NFTlNPUiwgT1Y5NjUwX0NPTTYsIDB4NGJ9LAogCS8qIFN1YnRyYWN0IDMyIGZyb20gdGhlIEIgY2hhbm5lbCBiaWFzICovCkBAIC0zODUsNyArNDAyLDcgQEAKIAl7U0VOU09SLCBPVjk2NTBfQUVCLCAweDVjfSwKIAkvKiBTZXQgdGhlIGhpZ2ggYW5kIGxvdyBsaW1pdCBuaWJibGVzIHRvIDMgKi8KIAl7U0VOU09SLCBPVjk2NTBfVlBULCAweGMzfSwKLQkJLyogU2V0IHRoZSBBdXRvbWF0aWMgR2FpbiBDZWlsaW5nIChBR0MpIHRvIDEyOHgsCisJLyogU2V0IHRoZSBBdXRvbWF0aWMgR2FpbiBDZWlsaW5nIChBR0MpIHRvIDEyOHgsCiAJZHJvcCBWU1lOQyBhdCBmcmFtZSBkcm9wLAogCWxpbWl0IGV4cG9zdXJlIHRpbWluZywKIAlkcm9wIGZyYW1lIHdoZW4gdGhlIEFFQyBzdGVwIGlzIGxhcmdlciB0aGFuIHRoZSBleHBvc3VyZSBnYXAgKi8KQEAgLTM5NCw5ICs0MTEsOSBAQAogCWFuZCBzZXQgUFdETiB0byBTTFZTIChzbGF2ZSBtb2RlIHZlcnRpY2FsIHN5bmMpICovCiAJe1NFTlNPUiwgT1Y5NjUwX0NPTTEwLCAweDQyfSwKIAkvKiBTZXQgaG9yaXpvbnRhbCBjb2x1bW4gc3RhcnQgaGlnaCB0byBkZWZhdWx0IHZhbHVlICovCi0Je1NFTlNPUiwgT1Y5NjUwX0hTVEFSVCwgMHgxYX0sCisJe1NFTlNPUiwgT1Y5NjUwX0hTVEFSVCwgMHgxYX0sIC8qIDIxMCAqLwogCS8qIFNldCBob3Jpem9udGFsIGNvbHVtbiBlbmQgKi8KLQl7U0VOU09SLCBPVjk2NTBfSFNUT1AsIDB4YmZ9LAorCXtTRU5TT1IsIE9WOTY1MF9IU1RPUCwgMHhiZn0sIC8qIDE1MzQgKi8KIAkvKiBDb21wbGVtZW50aW5nIHJlZ2lzdGVyIHRvIHRoZSB0d28gd3JpdGVzIGFib3ZlICovCiAJe1NFTlNPUiwgT1Y5NjUwX0hSRUYsIDB4YjJ9LAogCS8qIFNldCB2ZXJ0aWNhbCByb3cgc3RhcnQgaGlnaCBiaXRzICovCkBAIC00MDUsMTAgKzQyMiw2IEBACiAJe1NFTlNPUiwgT1Y5NjUwX1ZTVE9QLCAweDdlfSwKIAkvKiBTZXQgY29tcGxlbWVudGluZyB2ZXJ0aWNhbCBmcmFtZSBjb250cm9sICovCiAJe1NFTlNPUiwgT1Y5NjUwX1ZSRUYsIDB4MTB9LAotCS8qIFNldCByYXcgUkdCIG91dHB1dCBmb3JtYXQgd2l0aCBWR0EgcmVzb2x1dGlvbiAqLwotCXtTRU5TT1IsIE9WOTY1MF9DT003LCBPVjk2NTBfVkdBX1NFTEVDVCB8Ci0JCQkgICAgICBPVjk2NTBfUkdCX1NFTEVDVCB8Ci0JCQkgICAgICBPVjk2NTBfUkFXX1JHQl9TRUxFQ1R9LAogCXtTRU5TT1IsIE9WOTY1MF9BREMsIDB4MDR9LAogCXtTRU5TT1IsIE9WOTY1MF9IViwgMHg0MH0sCiAJLyogRW5hYmxlIGRlbm9pc2UsIGFuZCB3aGl0ZS1waXhlbCBlcmFzZSAqLwpAQCAtNDE3LDMwICs0MzAsMTUgQEAKIAkvKiBTZXQgdGhlIGhpZ2ggYml0cyBvZiB0aGUgZXhwb3N1cmUgdmFsdWUgKi8KIAl7U0VOU09SLCBPVjk2NTBfQUVDSCwgKChFWFBPU1VSRV9ERUZBVUxUICYgMHhmZjAwKSA+PiA4KX0sCiAKKwkvKiBFbmFibGUgVkFSSU9QSVhFTCAqLworCXtTRU5TT1IsIE9WOTY1MF9DT00zLCBPVjk2NTBfVkFSSU9QSVhFTH0sCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTQsIE9WOTY1MF9RVkdBX1ZBUklPUElYRUx9LAorCiAJLyogU2V0IHRoZSBsb3cgYml0cyBvZiB0aGUgZXhwb3N1cmUgdmFsdWUgKi8KIAl7U0VOU09SLCBPVjk2NTBfQ09NMSwgKEVYUE9TVVJFX0RFRkFVTFQgJiAweGZmKX0sCiAJe1NFTlNPUiwgT1Y5NjUwX0dBSU4sIEdBSU5fREVGQVVMVH0sCiAJe1NFTlNPUiwgT1Y5NjUwX0JMVUUsIEJMVUVfR0FJTl9ERUZBVUxUfSwKIAl7U0VOU09SLCBPVjk2NTBfUkVELCBSRURfR0FJTl9ERUZBVUxUfSwKLQotCXtTRU5TT1IsIE9WOTY1MF9DT00zLCBPVjk2NTBfVkFSSU9QSVhFTH0sCi0Je1NFTlNPUiwgT1Y5NjUwX0NPTTUsIE9WOTY1MF9TWVNURU1fQ0xLX1NFTH0sCi0KLQl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODJ9LAotCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfTCwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfTCwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwOX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCi0Je0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg1ZX0sCi0Je0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMn0sCi0Je0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHhkZX0KIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBvd2VyX2Rvd25fb3Y5NjUwW11bM10gPQpAQCAtNDYwLDQzICs0NTgsNzYgQEAKIAl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDZ9LAogCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDJ9LAogCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0fSwKLQl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9CisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKIH07CiAKLS8qIFZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSBmbGlwcyB0aGUgaW1hZ2UgaWYgbWF0Y2hlZCwgbmVlZGVkIGZvciBtYWNoaW5lcwotICAgd2hlcmUgdGhlIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duICovCi1zdGF0aWMKLSAgICBjb25zdAotCXN0cnVjdCBkbWlfc3lzdGVtX2lkIG92OTY1MF9mbGlwX2RtaV90YWJsZVtdID0gewotCXsKLQkJLmlkZW50ID0gIkFTVVMgQTZWQyIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2VkMiKQotCQl9Ci0JfSwKLQl7Ci0JCS5pZGVudCA9ICJBU1VTIEE2Vk0iLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNlZNIikKLQkJfQotCX0sCi0JewotCQkuaWRlbnQgPSAiQVNVUyBBNkpDIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTZKQyIpCi0JCX0KLQl9LAotCXsKLQkJLmlkZW50ID0gIkFTVVMgQTZLdCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2S3QiKQotCQl9Ci0JfSwKLQl7IH0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlc19pbml0X292OTY1MFtdWzJdID0KK3sKKwl7TTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgyfSwKKwl7TTU2MDJfWEJfTElORV9PRl9GUkFNRV9MLCAweDAwfSwKKwl7TTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCisJe001NjAyX1hCX1BJWF9PRl9MSU5FX0wsIDB4MDB9LAorCXtNNTYwMl9YQl9TSUdfSU5JLCAweDAxfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgVkdBX292OTY1MFtdWzNdID0KK3sKKwkvKiBNb3ZlcyB0aGUgdmlldyB3aW5kb3cgaW4gYSB2ZXJ0aWNhbCBvcmllbnRhdGlvbiAqLworCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDl9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTB9LCAvKiA0ODAgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDYyfSwgLyogOTggKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyfSwgLyogNjQwICsgOTggKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweGUyfSwKKworCXtTRU5TT1IsIE9WOTY1MF9DT003LCBPVjk2NTBfVkdBX1NFTEVDVCB8CisJCQkgICAgICBPVjk2NTBfUkdCX1NFTEVDVCB8CisJCQkgICAgICBPVjk2NTBfUkFXX1JHQl9TRUxFQ1R9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ0lGX292OTY1MFtdWzNdID0KK3sKKwkvKiBNb3ZlcyB0aGUgdmlldyB3aW5kb3cgaW4gYSB2ZXJ0aWNhbCBvcmllbnRhdGlvbiAqLworCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDl9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MjB9LCAvKiAyODggKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDYyfSwgLyogOTggKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAxfSwgLyogMzUyICsgOTggKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweGMyfSwKKworCXtTRU5TT1IsIE9WOTY1MF9DT003LCBPVjk2NTBfQ0lGX1NFTEVDVCB8CisJCQkgICAgICBPVjk2NTBfUkdCX1NFTEVDVCB8CisJCQkgICAgICBPVjk2NTBfUkFXX1JHQl9TRUxFQ1R9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUVZHQV9vdjk2NTBbXVszXSA9Cit7CisJLyogTW92ZXMgdGhlIHZpZXcgd2luZG93IGluIGEgdmVydGljYWwgb3JpZW50YXRpb24gKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDA4fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGYwfSwgLyogMjQwICovCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgzMX0sIC8qIDUwICovCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMX0sIC8qIDMyMCArIDUwICovCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg3MX0sCisKKwl7U0VOU09SLCBPVjk2NTBfQ09NNywgT1Y5NjUwX1FWR0FfU0VMRUNUIHwKKwkJCSAgICAgIE9WOTY1MF9SR0JfU0VMRUNUIHwKKwkJCSAgICAgIE9WOTY1MF9SQVdfUkdCX1NFTEVDVH0sCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCmluZGV4IGQxN2FjNTIuLjJlN2ZiOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTE4LDYgKzE4LDggQEAKIAogI2luY2x1ZGUgIm01NjAyX3BvMTAzMC5oIgogCitzdGF0aWMgdm9pZCBwbzEwMzBfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCk7CisKIGludCBwbzEwMzBfcHJvYmUoc3RydWN0IHNkICpzZCkKIHsKIAl1OCBwcm9kX2lkID0gMCwgdmVyX2lkID0gMCwgaTsKQEAgLTM4LDE2ICs0MCwxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfcG8xMDMwKTsgaSsrKSB7CiAJCXU4IGRhdGEgPSBwcmVpbml0X3BvMTAzMFtpXVsyXTsKIAkJaWYgKHByZWluaXRfcG8xMDMwW2ldWzBdID09IFNFTlNPUikKLQkJCXBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsCisJCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsCiAJCQkJcHJlaW5pdF9wbzEwMzBbaV1bMV0sICZkYXRhLCAxKTsKIAkJZWxzZQogCQkJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBwcmVpbml0X3BvMTAzMFtpXVsxXSwgZGF0YSk7CiAJfQogCi0JaWYgKHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgMHgzLCAmcHJvZF9pZCwgMSkpCisJaWYgKG01NjAyX3JlYWRfc2Vuc29yKHNkLCAweDMsICZwcm9kX2lkLCAxKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocG8xMDMwX3JlYWRfc2Vuc29yKHNkLCAweDQsICZ2ZXJfaWQsIDEpKQorCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHg0LCAmdmVyX2lkLCAxKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKHByb2RfaWQgPT0gMHgwMikgJiYgKHZlcl9pZCA9PSAweGVmKSkgewpAQCAtNjQsNzggKzY2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwbzEwMzBfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQotewotCWludCBlcnIsIGk7Ci0KLQlkbyB7Ci0JCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7Ci0JfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKLQotCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAotCQkJICAgc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkKTsKLQltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7Ci0JbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxMCArIGxlbik7Ci0JbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgwOCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7Ci0KLQkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKLQkJCQkiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKLQl9Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci19Ci0KLWludCBwbzEwMzBfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKLXsKLQlpbnQgZXJyLCBpOwotCXU4ICpwOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7Ci0JX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOwotCi0JLyogVGhlIHBvMTAzMCBvbmx5IHN1cHBvcnRzIG9uZSBieXRlIHdyaXRlcyAqLwotCWlmIChsZW4gPiAxIHx8ICFsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKLQotCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7Ci0JYnVmWzE1XSA9IGFkZHJlc3M7Ci0KLQlwID0gYnVmICsgMTY7Ci0KLQkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKLQkJcFszXSA9IGkyY19kYXRhW2ldOwotCQlwICs9IDQ7Ci0JCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCi0JCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7Ci0JfQotCi0JLyogQ29weSB0aGUgZm9vdGVyICovCi0JbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7Ci0KLQkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLwotCXBbM10gPSAweDEwICsgbGVuOwotCi0JZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCi0JCQkgICAgICAweDAwMDAsIGJ1ZiwKLQkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKLQotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwotfQotCiBpbnQgcG8xMDMwX2luaXQoc3RydWN0IHNkICpzZCkKIHsKIAlpbnQgaSwgZXJyID0gMDsKIAogCS8qIEluaXQgdGhlIHNlbnNvciAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfcG8xMDMwKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9wbzEwMzApICYmICFlcnI7IGkrKykgewogCQl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OwogCiAJCXN3aXRjaCAoaW5pdF9wbzEwMzBbaV1bMF0pIHsKQEAgLTE0NywxNiArODMsMTAgQEAKIAogCQljYXNlIFNFTlNPUjoKIAkJCWRhdGFbMF0gPSBpbml0X3BvMTAzMFtpXVsyXTsKLQkJCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsCisJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsCiAJCQkJaW5pdF9wbzEwMzBbaV1bMV0sIGRhdGEsIDEpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTRU5TT1JfTE9ORzoKLQkJCWRhdGFbMF0gPSBpbml0X3BvMTAzMFtpXVsyXTsKLQkJCWRhdGFbMV0gPSBpbml0X3BvMTAzMFtpXVszXTsKLQkJCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsCi0JCQkJaW5pdF9wbzEwMzBbaV1bMV0sIGRhdGEsIDIpOwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpbmZvKCJJbnZhbGlkIHN0cmVhbSBjb21tYW5kLCBleGl0aW5nIGluaXQiKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY2LDcgKzk2LDcgQEAKIAlpZiAoZHVtcF9zZW5zb3IpCiAJCXBvMTAzMF9kdW1wX3JlZ2lzdGVycyhzZCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgcG8xMDMwX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xNzUsMTkgKzEwNSwxOSBAQAogCXU4IGkyY19kYXRhOwogCWludCBlcnI7CiAKLQllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19ILAorCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfSCwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAJKnZhbCA9IChpMmNfZGF0YSA8PCA4KTsKIAotCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX00sCisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19NLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgfD0gaTJjX2RhdGE7CiAKIAlQREVCVUcoRF9WNEwyLCAiRXhwb3N1cmUgcmVhZCBhcyAlZCIsICp2YWwpOwogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBwbzEwMzBfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMjAyLDcgKzEzMiw3IEBACiAJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byBoaWdoIGJ5dGUgdG8gMHgleCIsCiAJICAgICAgIGkyY19kYXRhKTsKIAotCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19ILAorCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0gsCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTIxMCwxMSArMTQwLDExIEBACiAJaTJjX2RhdGEgPSAodmFsICYgMHhmZik7CiAJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byBsb3cgYnl0ZSB0byAweCV4IiwKIAkgICAgICAgaTJjX2RhdGEpOwotCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19NLAorCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX00sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHBvMTAzMF9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0yMjMsMTIgKzE1MywxMiBAQAogCXU4IGkyY19kYXRhOwogCWludCBlcnI7CiAKLQllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCSp2YWwgPSBpMmNfZGF0YTsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBnbG9iYWwgZ2FpbiAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHBvMTAzMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMjM3LDE0ICsxNjcsMTQgQEAKIAl1OCBpMmNfZGF0YTsKIAlpbnQgZXJyOwogCi0JZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAogCQkJCSAmaTJjX2RhdGEsIDEpOwogCiAJKnZhbCA9IChpMmNfZGF0YSA+PiA3KSAmIDB4MDEgOwogCiAJUERFQlVHKERfVjRMMiwgIlJlYWQgaGZsaXAgJWQiLCAqdmFsKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBwbzEwMzBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMjU0LDEzICsxODQsMTcgQEAKIAlpbnQgZXJyOwogCiAJUERFQlVHKERfVjRMMiwgIlNldCBoZmxpcCAlZCIsIHZhbCk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OwogCi0JaTJjX2RhdGEgPSAodmFsICYgMHgwMSkgPDwgNzsKKwlpMmNfZGF0YSA9ICgweDdmICYgaTJjX2RhdGEpIHwgKCh2YWwgJiAweDAxKSA8PCA3KTsKIAotCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCi0JCQkJICAmaTJjX2RhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGludCBwbzEwMzBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTI2OSwxNCArMjAzLDE0IEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAotCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAorCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCiAJCQkJICZpMmNfZGF0YSwgMSk7CiAKIAkqdmFsID0gKGkyY19kYXRhID4+IDYpICYgMHgwMTsKIAogCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZmbGlwICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgcG8xMDMwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTI4NiwxMyArMjIwLDE3IEBACiAJaW50IGVycjsKIAogCVBERUJVRyhEX1Y0TDIsICJTZXQgdmZsaXAgJWQiLCB2YWwpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKIAotCWkyY19kYXRhID0gKHZhbCAmIDB4MDEpIDw8IDY7CisJaTJjX2RhdGEgPSAoaTJjX2RhdGEgJiAweGJmKSB8ICgodmFsICYgMHgwMSkgPDwgNik7CiAKLQllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAotCQkJCSAgJmkyY19kYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICZpMmNfZGF0YSwgMSk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgcG8xMDMwX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMzAzLDkgKzI0MSw5IEBACiAKIAlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CiAJUERFQlVHKERfVjRMMiwgIlNldCBnbG9iYWwgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKLQllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBwbzEwMzBfZ2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTMxNCwxMSArMjUyLDExIEBACiAJdTggaTJjX2RhdGE7CiAJaW50IGVycjsKIAotCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgcG8xMDMwX3NldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTMyOSw5ICsyNjcsOSBAQAogCiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwogCVBERUJVRyhEX1Y0TDIsICJTZXQgcmVkIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7Ci0JZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfUkVEX0dBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0zNDAsMTIgKzI3OCwxMiBAQAogCXU4IGkyY19kYXRhOwogCWludCBlcnI7CiAKLQllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAorCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwKIAkJCQkgJmkyY19kYXRhLCAxKTsKIAkqdmFsID0gaTJjX2RhdGE7CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgYmx1ZSBnYWluICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgcG8xMDMwX3NldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0zNTUsMTAgKzI5MywxMCBAQAogCWludCBlcnI7CiAJaTJjX2RhdGEgPSB2YWwgJiAweGZmOwogCVBERUJVRyhEX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwgaTJjX2RhdGEpOwotCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAorCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19CTFVFX0dBSU4sCiAJCQkJICAmaTJjX2RhdGEsIDEpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHBvMTAzMF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpCkBAIC0zNjYsMTQgKzMwNCwxNCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHBvMTAzMF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgcG8xMDMwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGFkZHJlc3M7CiAJdTggdmFsdWUgPSAwOwogCiAJaW5mbygiRHVtcGluZyB0aGUgcG8xMDMwIHNlbnNvciBjb3JlIHJlZ2lzdGVycyIpOwogCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweDdmOyBhZGRyZXNzKyspIHsKLQkJcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJnZhbHVlLCAxKTsKIAkJaW5mbygicmVnaXN0ZXIgMHgleCBjb250YWlucyAweCV4IiwKIAkJICAgICBhZGRyZXNzLCB2YWx1ZSk7CiAJfQpAQCAtMzg1LDkgKzMyMyw5IEBACiAJCXU4IG9sZF92YWx1ZSwgY3RybF92YWx1ZTsKIAkJdTggdGVzdF92YWx1ZVsyXSA9IHsweGZmLCAweGZmfTsKIAotCQlwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOwotCQlwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCB0ZXN0X3ZhbHVlLCAxKTsKLQkJcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWx1ZSwgMSk7CisJCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbHVlLCAxKTsKKwkJbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCB0ZXN0X3ZhbHVlLCAxKTsKKwkJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKIAogCQlpZiAoY3RybF92YWx1ZSA9PSB0ZXN0X3ZhbHVlWzBdKQogCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKQEAgLTM5NSw2ICszMzMsNiBAQAogCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyByZWFkIG9ubHkiLCBhZGRyZXNzKTsKIAogCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlICovCi0JCXBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCmluZGV4IGEwYjc1ZmYuLmRlZjM5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaApAQCAtMTAsNyArMTAsNyBAQAogICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKICAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycwogICoKLSAqIFJlZ2lzdGVyIGRlZmluZXMgdGFrZW4gZnJvbSBQYXNjYWwgU3RhbmdzIFByb3h5Y29uIEFybWxpYgorICogUmVnaXN0ZXIgZGVmaW5lcyB0YWtlbiBmcm9tIFBhc2NhbCBTdGFuZ3MgUHJvY3lvbiBBcm1saWIKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTI4LDEzICsxMjgsNiBAQAogaW50IHBvMTAzMF9pbml0KHN0cnVjdCBzZCAqc2QpOwogaW50IHBvMTAzMF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOwogCi12b2lkIHBvMTAzMF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKLQotaW50IHBvMTAzMF9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOwotaW50IHBvMTAzMF93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7Ci0KIGludCBwbzEwMzBfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBpbnQgcG8xMDMwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBpbnQgcG8xMDMwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CkBAIC0xNTIsNiArMTQ1LDcgQEAKIAkubmFtZSA9ICJQTzEwMzAiLAogCiAJLmkyY19zbGF2ZV9pZCA9IDB4ZGMsCisJLmkyY19yZWdXID0gMSwKIAogCS5wcm9iZSA9IHBvMTAzMF9wcm9iZSwKIAkuaW5pdCA9IHBvMTAzMF9pbml0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggMTRiMWVhYy4uZTU2NGE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0xOCw2ICsxOCw0MCBAQAogCiAjaW5jbHVkZSAibTU2MDJfczVrNGFhLmgiCiAKK3N0YXRpYworICAgIGNvbnN0CisJc3RydWN0IGRtaV9zeXN0ZW1faWQgczVrNGFhX3ZmbGlwX2RtaV90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYYSAyNTI4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGEgMjUyOCIpCisJCX0KKwl9LCB7CisJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGkgMjU1MCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFhpIDI1NTAiKQorCQl9CisJfSwgeworCQkuaWRlbnQgPSAiTVNJIEdYNzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKKwkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMDcvMjYvMjAwNyIpCisJCX0KKwl9LCB7CisJCS5pZGVudCA9ICJNU0kgR1g3MDAvR1g3MDUvRVg3MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMC9HWDcwNS9FWDcwMCIpCisJCX0KKwl9LAorCXsgfQorfTsKKworc3RhdGljIHZvaWQgczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCiBpbnQgczVrNGFhX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggcHJvZF9pZFs2XSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKQEAgLTQ5LDcgKzgzLDcgQEAKIAogCQljYXNlIFNFTlNPUjoKIAkJCWRhdGFbMF0gPSBwcmVpbml0X3M1azRhYVtpXVsyXTsKLQkJCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsCisJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsCiAJCQkJCQkgIHByZWluaXRfczVrNGFhW2ldWzFdLAogCQkJCQkJICBkYXRhLCAxKTsKIAkJCWJyZWFrOwpAQCAtNTcsNyArOTEsNyBAQAogCQljYXNlIFNFTlNPUl9MT05HOgogCQkJZGF0YVswXSA9IHByZWluaXRfczVrNGFhW2ldWzJdOwogCQkJZGF0YVsxXSA9IHByZWluaXRfczVrNGFhW2ldWzNdOwotCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQkJCSAgcHJlaW5pdF9zNWs0YWFbaV1bMV0sCiAJCQkJCQkgIGRhdGEsIDIpOwogCQkJYnJlYWs7CkBAIC02OCwxMyArMTAyLDE0IEBACiAJfQogCiAJLyogVGVzdCBzb21lIHJlZ2lzdGVycywgYnV0IHdlIGRvbid0IGtub3cgdGhlaXIgZXhhY3QgbWVhbmluZyB5ZXQgKi8KLQlpZiAoczVrNGFhX3JlYWRfc2Vuc29yKHNkLCAweDAwLCBwcm9kX2lkLCBzaXplb2YocHJvZF9pZCkpKQorCWlmIChtNTYwMl9yZWFkX3NlbnNvcihzZCwgMHgwMCwgcHJvZF9pZCwgc2l6ZW9mKHByb2RfaWQpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAobWVtY21wKHByb2RfaWQsIGV4cGVjdGVkX3Byb2RfaWQsIHNpemVvZihwcm9kX2lkKSkpCiAJCXJldHVybiAtRU5PREVWOwogCWVsc2UKIAkJaW5mbygiRGV0ZWN0ZWQgYSBzNWs0YWEgc2Vuc29yIik7CisKIHNlbnNvcl9mb3VuZDoKIAlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHM1azRhYS5tb2RlczsKIAlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzNWs0YWEubm1vZGVzOwpAQCAtODQsOTAgKzExOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzNWs0YWFfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQotewotCWludCBlcnIsIGk7Ci0KLQlkbyB7Ci0JCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7Ci0JfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwKLQkJCQkgc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxOCArIGxlbik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCi0JZG8gewotCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1NUQVRVUywgaTJjX2RhdGEpOwotCX0gd2hpbGUgKCgqaTJjX2RhdGEgJiBJMkNfQlVTWSkgJiYgIWVycik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OwotCi0JZm9yIChpID0gMDsgKGkgPCBsZW4pICYgIWVycjsgaSsrKSB7Ci0JCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOwotCi0JCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCi0JCQkJICAiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci19Ci0KLWludCBzNWs0YWFfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKLXsKLQlpbnQgZXJyLCBpOwotCXU4ICpwOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7Ci0JX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOwotCi0JLyogTm8gc2Vuc29yIHdpdGggYSBkYXRhIHdpZHRoIGxhcmdlciB0aGFuIDE2IGJpdHMgaGFzIHlldCBiZWVuIHNlZW4gKi8KLQlpZiAobGVuID4gMiB8fCAhbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweShidWYsIHNlbnNvcl91cmJfc2tlbGV0b24sCi0JICAgICAgIHNpemVvZihzZW5zb3JfdXJiX3NrZWxldG9uKSk7Ci0KLQlidWZbMTFdID0gc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkOwotCWJ1ZlsxNV0gPSBhZGRyZXNzOwotCi0JLyogU3BlY2lhbCBjYXNlIGxhcmdlciBzZW5zb3Igd3JpdGVzICovCi0JcCA9IGJ1ZiArIDE2OwotCi0JLyogQ29weSBhIGZvdXIgYnl0ZSB3cml0ZSBzZXF1ZW5jZSBmb3IgZWFjaCBieXRlIHRvIGJlIHdyaXR0ZW4gdG8gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7Ci0JCXBbM10gPSBpMmNfZGF0YVtpXTsKLQkJcCArPSA0OwotCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAotCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOwotCX0KLQotCS8qIENvcHkgdGhlIHRhaWxlciAqLwotCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMjAsIDQpOwotCi0JLyogU2V0IHRoZSB0b3RhbCBsZW5ndGggKi8KLQlwWzNdID0gMHgxMCArIGxlbjsKLQotCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCi0JCQkgICAgICAweDA0LCAweDQwLCAweDE5LAotCQkJICAgICAgMHgwMDAwLCBidWYsCi0JCQkgICAgICAyMCArIGxlbiAqIDQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7Ci0KLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKLX0KLQogaW50IHM1azRhYV9pbml0KHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGksIGVyciA9IDA7CkBAIC0xODQsMTQgKzEzNSwxNCBAQAogCiAJCWNhc2UgU0VOU09SOgogCQkJZGF0YVswXSA9IGluaXRfczVrNGFhW2ldWzJdOwotCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlpbml0X3M1azRhYVtpXVsxXSwgZGF0YSwgMSk7CiAJCQlicmVhazsKIAogCQljYXNlIFNFTlNPUl9MT05HOgogCQkJZGF0YVswXSA9IGluaXRfczVrNGFhW2ldWzJdOwogCQkJZGF0YVsxXSA9IGluaXRfczVrNGFhW2ldWzNdOwotCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlpbml0X3M1azRhYVtpXVsxXSwgZGF0YSwgMik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTIwNiwyMSArMTU3LDIxIEBACiAJaWYgKCFlcnIgJiYgZG1pX2NoZWNrX3N5c3RlbShzNWs0YWFfdmZsaXBfZG1pX3RhYmxlKSkgewogCQl1OCBkYXRhID0gMHgwMjsKIAkJaW5mbygidmVydGljYWwgZmxpcCBxdWlyayBhY3RpdmUiKTsKLQkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7Ci0JCXM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOwogCQlkYXRhIHw9IFM1SzRBQV9STV9WX0ZMSVA7CiAJCWRhdGEgJj0gflM1SzRBQV9STV9IX0ZMSVA7Ci0JCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwkJbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CiAKIAkJLyogRGVjcmVtZW50IENPTFNUQVJUIHRvIHByZXNlcnZlIGNvbG9yIG9yZGVyIChCR0dSKSAqLwotCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CiAJCWRhdGEtLTsKLQkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CiAKIAkJLyogSW5jcmVtZW50IFJPV1NUQVJUIHRvIHByZXNlcnZlIGNvbG9yIG9yZGVyIChCR0dSKSAqLwotCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CiAJCWRhdGErKzsKLQkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CiAJfQogCiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CkBAIC0yMzcsMjAgKzE4OCwyMCBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9ISSwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfRVhQT1NVUkVfSEksICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAkqdmFsID0gZGF0YSA8PCA4OwotCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0xPLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9MTywgJmRhdGEsIDEpOwogCSp2YWwgfD0gZGF0YTsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOwogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs0YWFfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMjYwLDE3ICsyMTEsMTcgQEAKIAlpbnQgZXJyOwogCiAJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCk7Ci0JZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAJZGF0YSA9ICh2YWwgPj4gOCkgJiAweGZmOwotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9ISSwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0hJLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCWRhdGEgPSB2YWwgJiAweGZmOwotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9MTywgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0xPLCAmZGF0YSwgMSk7CiBvdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHM1azRhYV9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMjc5LDE2ICsyMzAsMTYgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJKnZhbCA9IChkYXRhICYgUzVLNEFBX1JNX1ZfRkxJUCkgPj4gNzsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CiAKIG91dDoKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgczVrNGFhX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTI5OCwzNSArMjQ5LDM1IEBACiAJaW50IGVycjsKIAogCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7Ci0JZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7Ci0JZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAlkYXRhID0gKChkYXRhICYgflM1SzRBQV9STV9WX0ZMSVApCiAJCQl8ICgodmFsICYgMHgwMSkgPDwgNykpOwotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpZiAodmFsKSB7Ci0JCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAogCQlkYXRhKys7Ci0JCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOwogCX0gZWxzZSB7Ci0JCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAogCQlkYXRhLS07Ci0JCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOwogCX0KIG91dDoKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgczVrNGFhX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0zMzUsMTUgKzI4NiwxNSBAQAogCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKIAlpbnQgZXJyOwogCi0JZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKIAkqdmFsID0gKGRhdGEgJiBTNUs0QUFfUk1fSF9GTElQKSA+PiA2OwogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs0YWFfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMzU0LDM1ICszMDUsMzUgQEAKIAogCVBERUJVRyhEX1Y0TDIsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwKIAkgICAgICAgdmFsKTsKLQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKLQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCiAJZGF0YSA9ICgoZGF0YSAmIH5TNUs0QUFfUk1fSF9GTElQKSB8ICgodmFsICYgMHgwMSkgPDwgNikpOwotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpZiAodmFsKSB7Ci0JCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAkJZGF0YSsrOwotCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgewotCQllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCQllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXQ7CiAJCWRhdGEtLTsKLQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CiAJfQogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs0YWFfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzkxLDE2ICszNDIsMTYgQEAKIAl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CiAJaW50IGVycjsKIAotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfR0FJTl8yLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKIAkqdmFsID0gZGF0YTsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CiAKIG91dDoKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgczVrNGFhX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtNDEwLDI4ICszNjEsMjggQEAKIAlpbnQgZXJyOwogCiAJUERFQlVHKERfVjRMMiwgIlNldCBnYWluIHRvICVkIiwgdmFsKTsKLQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKIAogCWRhdGEgPSB2YWwgJiAweGZmOwotCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKIAogb3V0OgotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBzNWs0YWFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKIHsKIAlpbnQgYWRkcmVzczsKIAl1OCBwYWdlLCBvbGRfcGFnZTsKLQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKKwltNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmb2xkX3BhZ2UsIDEpOwogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7Ci0JCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOwogCQlpbmZvKCJEdW1waW5nIHRoZSBzNWs0YWEgcmVnaXN0ZXIgc3RhdGUgZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOwogCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgewogCQkJdTggdmFsdWUgPSAwOwotCQkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOworCQkJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ2YWx1ZSwgMSk7CiAJCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAogCQkJICAgICBhZGRyZXNzLCB2YWx1ZSk7CiAJCX0KQEAgLTQzOSwxNSArMzkwLDE1IEBACiAJaW5mbygiczVrNGFhIHJlZ2lzdGVyIHN0YXRlIGR1bXAgY29tcGxldGUiKTsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7Ci0JCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOwogCQlpbmZvKCJQcm9iaW5nIGZvciB3aGljaCByZWdpc3RlcnMgdGhhdCBhcmUgIgogCQkgICAgICJyZWFkL3dyaXRlIGZvciBwYWdlIDB4JXgiLCBwYWdlKTsKIAkJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8PSAweGZmOyBhZGRyZXNzKyspIHsKIAkJCXU4IG9sZF92YWx1ZSwgY3RybF92YWx1ZSwgdGVzdF92YWx1ZSA9IDB4ZmY7CiAKLQkJCXM1azRhYV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7Ci0JCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdGVzdF92YWx1ZSwgMSk7Ci0JCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKKwkJCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbHVlLCAxKTsKKwkJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJnRlc3RfdmFsdWUsIDEpOworCQkJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKIAogCQkJaWYgKGN0cmxfdmFsdWUgPT0gdGVzdF92YWx1ZSkKIAkJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHdyaXRlYWJsZSIsIGFkZHJlc3MpOwpAQCAtNDU1LDkgKzQwNiw5IEBACiAJCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyByZWFkIG9ubHkiLCBhZGRyZXNzKTsKIAogCQkJLyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLwotCQkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CisJCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOwogCQl9CiAJfQogCWluZm8oIlJlYWQvd3JpdGUgcmVnaXN0ZXIgcHJvYmluZyBjb21wbGV0ZSIpOwotCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKKwltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCmluZGV4IGVhZWY2NzYuLjFmODhiMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaApAQCAtNDEsMTEgKzQxLDEwIEBACiAjZGVmaW5lIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0xPCQkweDA5CiAjZGVmaW5lIFM1SzRBQV9XSU5ET1dfV0lEVEhfSEkJCTB4MGEKICNkZWZpbmUgUzVLNEFBX1dJTkRPV19XSURUSF9MTwkJMHgwYgotI2RlZmluZSBTNUs0QUFfR0xPQkFMX0dBSU5fXwkJMHgwZiAvKiBPbmx5IGEgZ3Vlc3MgQVRNICEhISAqLwotI2RlZmluZSBTNUs0QUFfSF9CTEFOS19ISV9fCQkweDFkIC8qIE9ubHkgYSBndWVzcyBBVE0gISEhIHN5bmMgbG9zdAotCQkJCQkJaWYgdG9vIGxvdywgcmVkdWNlcyBmcmFtZSByYXRlCi0JCQkJCQlpZiB0b28gaGlnaCAqLwotI2RlZmluZSBTNUs0QUFfSF9CTEFOS19MT19fCQkweDFlIC8qIE9ubHkgYSBndWVzcyBBVE0gISEhICovCisjZGVmaW5lIFM1SzRBQV9HTE9CQUxfR0FJTl9fCQkweDBmCisvKiBzeW5jIGxvc3QsIGlmIHRvbyBsb3csIHJlZHVjZXMgZnJhbWUgcmF0ZSBpZiB0b28gaGlnaCAqLworI2RlZmluZSBTNUs0QUFfSF9CTEFOS19ISV9fCQkweDFkCisjZGVmaW5lIFM1SzRBQV9IX0JMQU5LX0xPX18JCTB4MWUKICNkZWZpbmUgUzVLNEFBX0VYUE9TVVJFX0hJCQkweDE3CiAjZGVmaW5lIFM1SzRBQV9FWFBPU1VSRV9MTwkJMHgxOAogI2RlZmluZSBTNUs0QUFfR0FJTl8xCQkJMHgxZiAvKiAoZGlnaXRhbD8pIGdhaW4gOiA1IGJpdHMgKi8KQEAgLTY4LDEzICs2Nyw2IEBACiBpbnQgczVrNGFhX2luaXQoc3RydWN0IHNkICpzZCk7CiBpbnQgczVrNGFhX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CiAKLXZvaWQgczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOwotCi1pbnQgczVrNGFhX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7Ci1pbnQgczVrNGFhX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOwotCiBpbnQgczVrNGFhX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogaW50IHM1azRhYV9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogaW50IHM1azRhYV9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKQEAgLTg5LDkgKzgxLDggQEAKIAkucHJvYmUgPSBzNWs0YWFfcHJvYmUsCiAJLmluaXQgPSBzNWs0YWFfaW5pdCwKIAkucG93ZXJfZG93biA9IHM1azRhYV9wb3dlcl9kb3duLAotCS5yZWFkX3NlbnNvciA9IHM1azRhYV9yZWFkX3NlbnNvciwKLQkud3JpdGVfc2Vuc29yID0gczVrNGFhX3dyaXRlX3NlbnNvciwKIAkuaTJjX3NsYXZlX2lkID0gMHg1YSwKKwkuaTJjX3JlZ1cgPSAyLAogCS5uY3RybHMgPSA0LAogCS5jdHJscyA9IHsKIAl7CkBAIC0zMzgsMzIgKzMyOSw0IEBACiAJe1NFTlNPUiwgUzVLNEFBX0dBSU5fMiwgMHhhMCwgMHgwMH0KIH07CiAKLXN0YXRpYwotICAgIGNvbnN0Ci0Jc3RydWN0IGRtaV9zeXN0ZW1faWQgczVrNGFhX3ZmbGlwX2RtaV90YWJsZVtdID0gewotCXsKLQkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYYSAyNTI4IiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGEgMjUyOCIpCi0JCX0KLQl9LAotCXsKLQkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTUwIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGkgMjU1MCIpCi0JCX0KLQl9LAotCQl7Ci0JCS5pZGVudCA9ICJNU0kgR1g3MDAiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAotCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIwNy8yNi8yMDA3IikKLQkJfQotCX0sCi0JeyB9Ci19OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDg5ODhhNzIuLmFmM2YyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTgsNiArMTgsOCBAQAogCiAjaW5jbHVkZSAibTU2MDJfczVrODNhLmgiCiAKK3N0YXRpYyB2b2lkIHM1azgzYV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKKwogaW50IHM1azgzYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQogewogCXU4IHByb2RfaWQgPSAwLCB2ZXJfaWQgPSAwOwpAQCAtMzksNyArNDEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfczVrODNhKSAmJiAhZXJyOyBpKyspIHsKIAkJdTggZGF0YVsyXSA9IHtwcmVpbml0X3M1azgzYVtpXVsyXSwgcHJlaW5pdF9zNWs4M2FbaV1bM119OwogCQlpZiAocHJlaW5pdF9zNWs4M2FbaV1bMF0gPT0gU0VOU09SKQotCQkJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgcHJlaW5pdF9zNWs4M2FbaV1bMV0sCisJCQllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIHByZWluaXRfczVrODNhW2ldWzFdLAogCQkJCWRhdGEsIDIpOwogCQllbHNlCiAJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHByZWluaXRfczVrODNhW2ldWzFdLApAQCAtNDksMTAgKzUxLDEwIEBACiAJLyogV2UgZG9uJ3Qga25vdyB3aGF0IHJlZ2lzdGVyIChpZiBhbnkpIHRoYXQgY29udGFpbiB0aGUgcHJvZHVjdCBpZAogCSAqIEp1c3QgcGljayB0aGUgZmlyc3QgYWRkcmVzc2VzIHRoYXQgc2VlbSB0byBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdHMKIAkgKiBvbiBtdWx0aXBsZSBtYWNoaW5lcyAqLwotCWlmIChzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIDB4MDAsICZwcm9kX2lkLCAxKSkKKwlpZiAobTU2MDJfcmVhZF9zZW5zb3Ioc2QsIDB4MDAsICZwcm9kX2lkLCAxKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoczVrODNhX3JlYWRfc2Vuc29yKHNkLCAweDAxLCAmdmVyX2lkLCAxKSkKKwlpZiAobTU2MDJfcmVhZF9zZW5zb3Ioc2QsIDB4MDEsICZ2ZXJfaWQsIDEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgocHJvZF9pZCA9PSAweGZmKSB8fCAodmVyX2lkID09IDB4ZmYpKQpAQCAtNjgsOTEgKzcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHM1azgzYV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCi17Ci0JaW50IGVyciwgaTsKLQotCWRvIHsKLQkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKLQl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAotCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDE4ICsgbGVuKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlkbyB7Ci0JCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7Ci0JfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKLQotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFsZW47IGkrKykgewotCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKLQotCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgotCQkJCSAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci19Ci0KLWludCBzNWs4M2Ffd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCi0JCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCi17Ci0JaW50IGVyciwgaTsKLQl1OCAqcDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OwotCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKLQotCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIgdGhhbiAxNiBiaXRzIGhhcyB5ZXQgYmVlbiBzZWVuICovCi0JaWYgKGxlbiA+IDIgfHwgIWxlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1jcHkoYnVmLCBzZW5zb3JfdXJiX3NrZWxldG9uLAotCSAgICAgICBzaXplb2Yoc2Vuc29yX3VyYl9za2VsZXRvbikpOwotCi0JYnVmWzExXSA9IHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKLQlidWZbMTVdID0gYWRkcmVzczsKLQotCS8qIFNwZWNpYWwgY2FzZSBsYXJnZXIgc2Vuc29yIHdyaXRlcyAqLwotCXAgPSBidWYgKyAxNjsKLQotCS8qIENvcHkgYSBmb3VyIGJ5dGUgd3JpdGUgc2VxdWVuY2UgZm9yIGVhY2ggYnl0ZSB0byBiZSB3cml0dGVuIHRvICovCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOwotCQlwWzNdID0gaTJjX2RhdGFbaV07Ci0JCXAgKz0gNDsKLQkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKLQkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKLQl9Ci0KLQkvKiBDb3B5IHRoZSB0YWlsZXIgKi8KLQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDIwLCA0KTsKLQotCS8qIFNldCB0aGUgdG90YWwgbGVuZ3RoICovCi0JcFszXSA9IDB4MTAgKyBsZW47Ci0KLQllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwKLQkJCSAgICAgIDB4MDAwMCwgYnVmLAotCQkJICAgICAgMjAgKyBsZW4gKiA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOwotCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci19Ci0KIGludCBzNWs4M2FfaW5pdChzdHJ1Y3Qgc2QgKnNkKQogewogCWludCBpLCBlcnIgPSAwOwpAQCAtMTY5LDE0ICs4NiwxNCBAQAogCiAJCWNhc2UgU0VOU09SOgogCQkJZGF0YVswXSA9IGluaXRfczVrODNhW2ldWzJdOwotCQkJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlpbml0X3M1azgzYVtpXVsxXSwgZGF0YSwgMSk7CiAJCQlicmVhazsKIAogCQljYXNlIFNFTlNPUl9MT05HOgogCQkJZGF0YVswXSA9IGluaXRfczVrODNhW2ldWzJdOwogCQkJZGF0YVsxXSA9IGluaXRfczVrODNhW2ldWzNdOwotCQkJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwKKwkJCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwKIAkJCQlpbml0X3M1azgzYVtpXVsxXSwgZGF0YSwgMik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTIwMCwxNCArMTE3LDE0IEBACiB7CiAJaW50IGFkZHJlc3M7CiAJdTggcGFnZSwgb2xkX3BhZ2U7Ci0JczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsICZvbGRfcGFnZSwgMSk7CisJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7Ci0JCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJnBhZ2UsIDEpOwogCQlpbmZvKCJEdW1waW5nIHRoZSBzNWs4M2EgcmVnaXN0ZXIgc3RhdGUgZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOwogCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgewogCQkJdTggdmFsID0gMDsKLQkJCXM1azgzYV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJnZhbCwgMSk7CisJCQltNTYwMl9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJnZhbCwgMSk7CiAJCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAogCQkJICAgICBhZGRyZXNzLCB2YWwpOwogCQl9CkBAIC0yMTUsMTUgKzEzMiwxNSBAQAogCWluZm8oInM1azgzYSByZWdpc3RlciBzdGF0ZSBkdW1wIGNvbXBsZXRlIik7CiAKIAlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgMTY7IHBhZ2UrKykgewotCQlzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsICZwYWdlLCAxKTsKKwkJbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsICZwYWdlLCAxKTsKIAkJaW5mbygiUHJvYmluZyBmb3Igd2hpY2ggcmVnaXN0ZXJzIHRoYXQgYXJlIHJlYWQvd3JpdGUgIgogCQkgICAgICAiZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOwogCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgewogCQkJdTggb2xkX3ZhbCwgY3RybF92YWwsIHRlc3RfdmFsID0gMHhmZjsKIAotCQkJczVrODNhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbCwgMSk7Ci0JCQlzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdGVzdF92YWwsIDEpOwotCQkJczVrODNhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWwsIDEpOworCQkJbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsLCAxKTsKKwkJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJnRlc3RfdmFsLCAxKTsKKwkJCW01NjAyX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWwsIDEpOwogCiAJCQlpZiAoY3RybF92YWwgPT0gdGVzdF92YWwpCiAJCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKQEAgLTIzMSwxMSArMTQ4LDExIEBACiAJCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyByZWFkIG9ubHkiLCBhZGRyZXNzKTsKIAogCQkJLyogUmVzdG9yZSBvcmlnaW5hbCB2YWwgKi8KLQkJCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsLCAxKTsKKwkJCW01NjAyX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWwsIDEpOwogCQl9CiAJfQogCWluZm8oIlJlYWQvd3JpdGUgcmVnaXN0ZXIgcHJvYmluZyBjb21wbGV0ZSIpOwotCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKKwltNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKIH0KIAogaW50IHM1azgzYV9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0yNDQsMTEgKzE2MSwxNSBAQAogCXU4IGRhdGFbMl07CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfQlJJR0hUTkVTUywgZGF0YSwgMik7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9CUklHSFRORVNTLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKIAlkYXRhWzFdID0gZGF0YVsxXSA8PCAxOwogCSp2YWwgPSBkYXRhWzFdOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHM1azgzYV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTI1OSwyMyArMTgwLDI0IEBACiAKIAlkYXRhWzBdID0gMHgwMDsKIAlkYXRhWzFdID0gMHgyMDsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCAweDE0LCBkYXRhLCAyKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIDB4MTQsIGRhdGEsIDIpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAogCWRhdGFbMF0gPSAweDAxOwogCWRhdGFbMV0gPSAweDAwOwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIDB4MGQsIGRhdGEsIDIpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgMHgwZCwgZGF0YSwgMik7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IFRoaXMgaXMgbm90IHNhbmUsIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29tcG9zaXRpb24KIAkJICBvZiB0aGVzZSByZWdpc3RlcnMgKi8KIAlkYXRhWzBdID0gdmFsID4+IDM7IC8qIGJyaWdodG5lc3MsIGhpZ2ggNSBiaXRzICovCiAJZGF0YVsxXSA9IHZhbCA+PiAxOyAvKiBicmlnaHRuZXNzLCBoaWdoIDcgYml0cyAqLwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9CUklHSFRORVNTLCBkYXRhLCAyKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9CUklHSFRORVNTLCBkYXRhLCAyKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs4M2FfZ2V0X3doaXRlbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0yODQsMTAgKzIwNiwxNCBAQAogCXU4IGRhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfV0hJVEVORVNTLCAmZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9XSElURU5FU1MsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CiAKIAkqdmFsID0gZGF0YTsKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs4M2Ffc2V0X3doaXRlbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTI5Nyw5ICsyMjMsOSBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWRhdGFbMF0gPSB2YWw7Ci0JZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1dISVRFTkVTUywgZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfV0hJVEVORVNTLCBkYXRhLCAxKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs4M2FfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMzA4LDcgKzIzNCw5IEBACiAJdTggZGF0YVsyXTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9HQUlOLCBkYXRhLCAyKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0dBSU4sIGRhdGEsIDIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKIAogCWRhdGFbMV0gPSBkYXRhWzFdICYgMHgzZjsKIAlpZiAoZGF0YVsxXSA+IFM1SzgzQV9NQVhJTVVNX0dBSU4pCkBAIC0zMTYsNyArMjQ0LDggQEAKIAogCSp2YWwgPSBkYXRhWzFdOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHM1azgzYV9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTMyNyw5ICsyNTYsOCBAQAogCiAJZGF0YVswXSA9IDA7CiAJZGF0YVsxXSA9IHZhbDsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfR0FJTiwgZGF0YSwgMik7Ci0KLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9HQUlOLCBkYXRhLCAyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgczVrODNhX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0zMzksMTQgKzI2NywxNSBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWRhdGFbMF0gPSAweDA1OwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAotCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CiAJKnZhbCA9IChkYXRhWzBdIHwgMHg0MCkgPyAxIDogMDsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs4M2Ffc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMzU2LDI1ICsyODUsMjYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlkYXRhWzBdID0gMHgwNTsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCBkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKLQllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAogCS8qIHNldCBvciB6ZXJvIHNpeCBiaXQsIHNldmVuIGlzIGhmbGlwICovCiAJZGF0YVswXSA9ICh2YWwpID8gKGRhdGFbMF0gJiAweDgwKSB8IDB4NDAgfCBTNUs4M0FfRkxJUF9NQVNLCiAJCQk6IChkYXRhWzBdICYgMHg4MCkgfCBTNUs4M0FfRkxJUF9NQVNLOwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAlkYXRhWzBdID0gKHZhbCkgPyAweDBiIDogMHgwYTsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfVkZMSVBfVFVORSwgZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfVkZMSVBfVFVORSwgZGF0YSwgMSk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgczVrODNhX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0zODQsMTQgKzMxNCwxNSBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWRhdGFbMF0gPSAweDA1OwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgZGF0YSwgMSk7CisJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAotCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWVyciA9IG01NjAyX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CiAJKnZhbCA9IChkYXRhWzBdIHwgMHg4MCkgPyAxIDogMDsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGludCBzNWs4M2Ffc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtNDAxLDIzICszMzIsMjMgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlkYXRhWzBdID0gMHgwNTsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOworCWVyciA9IG01NjAyX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCBkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKLQllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAogCS8qIHNldCBvciB6ZXJvIHNldmVuIGJpdCwgc2l4IGlzIHZmbGlwICovCiAJZGF0YVswXSA9ICh2YWwpID8gKGRhdGFbMF0gJiAweDQwKSB8IDB4ODAgfCBTNUs4M0FfRkxJUF9NQVNLCiAJCQk6IChkYXRhWzBdICYgMHg0MCkgfCBTNUs4M0FfRkxJUF9NQVNLOwotCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAlkYXRhWzBdID0gKHZhbCkgPyAweDBhIDogMHgwYjsKLQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfSEZMSVBfVFVORSwgZGF0YSwgMSk7Ci0KLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwllcnIgPSBtNTYwMl93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9IRkxJUF9UVU5FLCBkYXRhLCAxKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKaW5kZXggZWUzZWU5Yy4uMDVjY2I1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oCkBAIC0yMiwxNSArMjIsMTUgQEAKICNpbmNsdWRlICJtNTYwMl9zZW5zb3IuaCIKIAogI2RlZmluZSBTNUs4M0FfRkxJUAkJCQkweDAxCi0jZGVmaW5lIFM1SzgzQV9IRkxJUF9UVU5FCQkweDAzCi0jZGVmaW5lIFM1SzgzQV9WRkxJUF9UVU5FCQkweDA1Ci0jZGVmaW5lIFM1SzgzQV9XSElURU5FU1MJCTB4MGEKKyNkZWZpbmUgUzVLODNBX0hGTElQX1RVTkUJCQkweDAzCisjZGVmaW5lIFM1SzgzQV9WRkxJUF9UVU5FCQkJMHgwNQorI2RlZmluZSBTNUs4M0FfV0hJVEVORVNTCQkJMHgwYQogI2RlZmluZSBTNUs4M0FfR0FJTgkJCQkweDE4Ci0jZGVmaW5lIFM1SzgzQV9CUklHSFRORVNTCQkweDFiCi0jZGVmaW5lIFM1SzgzQV9QQUdFX01BUAkJCTB4ZWMKKyNkZWZpbmUgUzVLODNBX0JSSUdIVE5FU1MJCQkweDFiCisjZGVmaW5lIFM1SzgzQV9QQUdFX01BUAkJCQkweGVjCiAKLSNkZWZpbmUgUzVLODNBX0RFRkFVTFRfQlJJR0hUTkVTUwkweDcxCi0jZGVmaW5lIFM1SzgzQV9ERUZBVUxUX1dISVRFTkVTUwkweDdlCisjZGVmaW5lIFM1SzgzQV9ERUZBVUxUX0JSSUdIVE5FU1MJCTB4NzEKKyNkZWZpbmUgUzVLODNBX0RFRkFVTFRfV0hJVEVORVNTCQkweDdlCiAjZGVmaW5lIFM1SzgzQV9ERUZBVUxUX0dBSU4JCQkweDAwCiAjZGVmaW5lIFM1SzgzQV9NQVhJTVVNX0dBSU4JCQkweDNjCiAjZGVmaW5lIFM1SzgzQV9GTElQX01BU0sJCQkweDEwCkBAIC00NiwxMyArNDYsNiBAQAogaW50IHM1azgzYV9pbml0KHN0cnVjdCBzZCAqc2QpOwogaW50IHM1azgzYV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOwogCi12b2lkIHM1azgzYV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKLQotaW50IHM1azgzYV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOwotaW50IHM1azgzYV93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKLQogaW50IHM1azgzYV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBpbnQgczVrODNhX2dldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBpbnQgczVrODNhX3NldF93aGl0ZW5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtNjQsMTUgKzU3LDEzIEBACiBpbnQgczVrODNhX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogaW50IHM1azgzYV9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogCi0KIHN0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIHM1azgzYSA9IHsKIAkubmFtZSA9ICJTNUs4M0EiLAogCS5wcm9iZSA9IHM1azgzYV9wcm9iZSwKIAkuaW5pdCA9IHM1azgzYV9pbml0LAogCS5wb3dlcl9kb3duID0gczVrODNhX3Bvd2VyX2Rvd24sCi0JLnJlYWRfc2Vuc29yID0gczVrODNhX3JlYWRfc2Vuc29yLAotCS53cml0ZV9zZW5zb3IgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yLAogCS5pMmNfc2xhdmVfaWQgPSAweDVhLAorCS5pMmNfcmVnVyA9IDIsCiAJLm5jdHJscyA9IDUsCiAJLmN0cmxzID0gewogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oCmluZGV4IDYwYzlhNDguLjI2MTYyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaApAQCAtNDksMjMgKzQ5LDIxIEBACiAJLyogV2hhdCBpMmMgYWRkcmVzcyB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCB0byAqLwogCXU4IGkyY19zbGF2ZV9pZDsKIAorCS8qIFdpZHRoIG9mIGVhY2ggaTJjIHJlZ2lzdGVyIChpbiBieXRlcykgKi8KKwl1OCBpMmNfcmVnVzsKKwogCS8qIFByb2JlcyBpZiB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCAqLwogCWludCAoKnByb2JlKShzdHJ1Y3Qgc2QgKnNkKTsKIAogCS8qIFBlcmZvcm1zIGEgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgKi8KIAlpbnQgKCppbml0KShzdHJ1Y3Qgc2QgKnNkKTsKIAorCS8qIEV4ZWN1dGVkIHdoZW4gdGhlIGNhbWVyYSBzdGFydHMgdG8gc2VuZCBkYXRhICovCisJaW50ICgqc3RhcnQpKHN0cnVjdCBzZCAqc2QpOworCiAJLyogUGVyZm9ybXMgYSBwb3dlciBkb3duIHNlcXVlbmNlICovCiAJaW50ICgqcG93ZXJfZG93bikoc3RydWN0IHNkICpzZCk7CiAKLQkvKiBSZWFkcyBhIHNlbnNvciByZWdpc3RlciAqLwotCWludCAoKnJlYWRfc2Vuc29yKShzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAotCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKLQotCS8qIFdyaXRlcyB0byBhIHNlbnNvciByZWdpc3RlciAqLwotCWludCAoKndyaXRlX3NlbnNvcikoc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKLQkgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7Ci0KIAlpbnQgbmN0cmxzOwogCXN0cnVjdCBjdHJsIGN0cmxzW001NjAyX01BWF9DVFJMU107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKaW5kZXggMjc3Y2EzNC4uM2QyMDkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1ODksCkBAIC0xMjMsNyArMTIzLDcgQEAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCXNkLT5xaW5kZXggPSAxOwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggY2E2NzExOS4uZWUyMzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMyw3ICszLDE4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEplYW4tRnJhbmNvaXMgTW9pbmUgKGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIpCiAgKgotICogKFRoaXMgbW9kdWxlIGlzIGFkYXB0ZWQgZnJvbSB0aGUgb3Y1MXgtanBlZyBwYWNrYWdlKQorICogVGhpcyBtb2R1bGUgaXMgYWRhcHRlZCBmcm9tIHRoZSBvdjUxeC1qcGVnIHBhY2thZ2UsIHdoaWNoIGl0c2VsZgorICogd2FzIGFkYXB0ZWQgZnJvbSB0aGUgb3Y1MTEgZHJpdmVyLgorICoKKyAqIE9yaWdpbmFsIGNvcHlyaWdodCBmb3IgdGhlIG92NTExIGRyaXZlciBpczoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBNYXJrIFcuIE1jQ2xlbGxhbmQKKyAqIFN1cHBvcnQgZm9yIE9WNTE5LCBPVjg2MTAgQ29weXJpZ2h0IChjKSAyMDAzIEpvZXJnIEhlY2tlbmJhY2gKKyAqCisgKiBvdjUxeC1qcGVnIG9yaWdpbmFsIGNvcHlyaWdodCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBSb21haW4gQmVhdXhpcyA8dG9vdHNAcmFzdGFnZWVrcy5vcmc+CisgKiBTdXBwb3J0IGZvciBPVjc2NzAgc2Vuc29ycyB3YXMgY29udHJpYnV0ZWQgYnkgU2FtIFNraXBzZXkgPGFvYW5sYUB5YWhvby5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MCwyMiArNTEsMTggQEAKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAogCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KLQljaGFyIHNpZjsKKwlfX3U4IHNpZjsKIAotCXVuc2lnbmVkIGNoYXIgcHJpbWFyeV9pMmNfc2xhdmU7CS8qIEkyQyB3cml0ZSBpZCBvZiBzZW5zb3IgKi8KLQotCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKLQl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwotCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCV9fdTggYnJpZ2h0bmVzczsKKwlfX3U4IGNvbnRyYXN0OworCV9fdTggY29sb3JzOwogCV9fdTggaGZsaXA7CiAJX191OCB2ZmxpcDsKIAotCWNoYXIgY29tcHJlc3M7CQkvKiBTaG91bGQgdGhlIG5leHQgZnJhbWUgYmUgY29tcHJlc3NlZD8gKi8KLQljaGFyIGNvbXByZXNzX2luaXRlZDsJLyogQXJlIGNvbXByZXNzaW9uIHBhcmFtcyB1cGxvYWRlZD8gKi8KLQljaGFyIHN0b3BwZWQ7CQkvKiBTdHJlYW1pbmcgaXMgdGVtcG9yYXJpbHkgcGF1c2VkICovCisJX191OCBzdG9wcGVkOwkJLyogU3RyZWFtaW5nIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCAqLwogCi0JY2hhciBmcmFtZV9yYXRlOwkvKiBjdXJyZW50IEZyYW1lcmF0ZSAoT1Y1MTkgb25seSkgKi8KLQljaGFyIGNsb2NrZGl2OwkJLyogY2xvY2tkaXYgb3ZlcnJpZGUgZm9yIE9WNTE5IG9ubHkgKi8KKwlfX3U4IGZyYW1lX3JhdGU7CS8qIGN1cnJlbnQgRnJhbWVyYXRlIChPVjUxOSBvbmx5KSAqLworCV9fdTggY2xvY2tkaXY7CQkvKiBjbG9ja2RpdiBvdmVycmlkZSBmb3IgT1Y1MTkgb25seSAqLwogCiAJY2hhciBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwIChTRU5fKikgKi8KICNkZWZpbmUgU0VOX1VOS05PV04gMApAQCAtNjcsNyArNzQsNiBAQAogI2RlZmluZSBTRU5fT1Y3NjcwIDYKICNkZWZpbmUgU0VOX09WNzZCRSA3CiAjZGVmaW5lIFNFTl9PVjg2MTAgOAotCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xNTgsNyArMTY0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCkBAIC0xNzAsNyArMTc2LDcgQEAKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLnByaXYgPSAwfSwKIH07Ci1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCiAJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiAzIC8gOCArIDU5MCwKQEAgLTE4NCwxNSArMTkwLDE1IEBACiB9OwogCiAvKiBPVjUxOSBDYW1lcmEgaW50ZXJmYWNlIHJlZ2lzdGVyIG51bWJlcnMgKi8KLSNkZWZpbmUgT1Y1MTlfQ0FNX0hfU0laRQkJMHgxMAotI2RlZmluZSBPVjUxOV9DQU1fVl9TSVpFCQkweDExCi0jZGVmaW5lIE9WNTE5X0NBTV9YX09GRlNFVEwJCTB4MTIKLSNkZWZpbmUgT1Y1MTlfQ0FNX1hfT0ZGU0VUSAkJMHgxMwotI2RlZmluZSBPVjUxOV9DQU1fWV9PRkZTRVRMCQkweDE0Ci0jZGVmaW5lIE9WNTE5X0NBTV9ZX09GRlNFVEgJCTB4MTUKLSNkZWZpbmUgT1Y1MTlfQ0FNX0RJVklERVIJCTB4MTYKLSNkZWZpbmUgT1Y1MTlfQ0FNX0RGUgkJCTB4MjAKLSNkZWZpbmUgT1Y1MTlfQ0FNX0ZPUk1BVAkJMHgyNQorI2RlZmluZSBPVjUxOV9SMTBfSF9TSVpFCQkweDEwCisjZGVmaW5lIE9WNTE5X1IxMV9WX1NJWkUJCTB4MTEKKyNkZWZpbmUgT1Y1MTlfUjEyX1hfT0ZGU0VUTAkJMHgxMgorI2RlZmluZSBPVjUxOV9SMTNfWF9PRkZTRVRICQkweDEzCisjZGVmaW5lIE9WNTE5X1IxNF9ZX09GRlNFVEwJCTB4MTQKKyNkZWZpbmUgT1Y1MTlfUjE1X1lfT0ZGU0VUSAkJMHgxNQorI2RlZmluZSBPVjUxOV9SMTZfRElWSURFUgkJMHgxNgorI2RlZmluZSBPVjUxOV9SMjBfREZSCQkJMHgyMAorI2RlZmluZSBPVjUxOV9SMjVfRk9STUFUCQkweDI1CiAKIC8qIE9WNTE5IFN5c3RlbSBDb250cm9sbGVyIHJlZ2lzdGVyIG51bWJlcnMgKi8KICNkZWZpbmUgT1Y1MTlfU1lTX1JFU0VUMSAweDUxCkBAIC01NjIsOCArNTY4LDggQEAKIAl7IE9WNzY3MF9SRUdfVlNUT1AsIDB4N2EgfSwKIAl7IE9WNzY3MF9SRUdfVlJFRiwgMHgwYSB9LAogCi0JeyBPVjc2NzBfUkVHX0NPTTMsIDAgfSwKLQl7IE9WNzY3MF9SRUdfQ09NMTQsIDAgfSwKKwl7IE9WNzY3MF9SRUdfQ09NMywgMHgwMCB9LAorCXsgT1Y3NjcwX1JFR19DT00xNCwgMHgwMCB9LAogLyogTXlzdGVyeSBzY2FsaW5nIG51bWJlcnMgKi8KIAl7IDB4NzAsIDB4M2EgfSwKIAl7IDB4NzEsIDB4MzUgfSwKQEAgLTU5NSw4ICs2MDEsOCBAQAogCXsgT1Y3NjcwX1JFR19DT004LCBPVjc2NzBfQ09NOF9GQVNUQUVDCiAJCQkgfCBPVjc2NzBfQ09NOF9BRUNTVEVQCiAJCQkgfCBPVjc2NzBfQ09NOF9CRklMVCB9LAotCXsgT1Y3NjcwX1JFR19HQUlOLCAwIH0sCi0JeyBPVjc2NzBfUkVHX0FFQ0gsIDAgfSwKKwl7IE9WNzY3MF9SRUdfR0FJTiwgMHgwMCB9LAorCXsgT1Y3NjcwX1JFR19BRUNILCAweDAwIH0sCiAJeyBPVjc2NzBfUkVHX0NPTTQsIDB4NDAgfSwgLyogbWFnaWMgcmVzZXJ2ZWQgYml0ICovCiAJeyBPVjc2NzBfUkVHX0NPTTksIDB4MTggfSwgLyogNHggZ2FpbiArIG1hZ2ljIHJzdmQgYml0ICovCiAJeyBPVjc2NzBfUkVHX0JENTBNQVgsIDB4MDUgfSwKQEAgLTYzNCwxNiArNjQwLDE2IEBACiAJeyBPVjc2NzBfUkVHX0NPTTEyLCAweDc4IH0sCiAJeyAweDRkLCAweDQwIH0sCiAJeyAweDRlLCAweDIwIH0sCi0JeyBPVjc2NzBfUkVHX0dGSVgsIDAgfSwKKwl7IE9WNzY3MF9SRUdfR0ZJWCwgMHgwMCB9LAogCXsgMHg2YiwgMHg0YSB9LAogCXsgMHg3NCwgMHgxMCB9LAogCXsgMHg4ZCwgMHg0ZiB9LAotCXsgMHg4ZSwgMCB9LAotCXsgMHg4ZiwgMCB9LAotCXsgMHg5MCwgMCB9LAotCXsgMHg5MSwgMCB9LAotCXsgMHg5NiwgMCB9LAotCXsgMHg5YSwgMCB9LAorCXsgMHg4ZSwgMHgwMCB9LAorCXsgMHg4ZiwgMHgwMCB9LAorCXsgMHg5MCwgMHgwMCB9LAorCXsgMHg5MSwgMHgwMCB9LAorCXsgMHg5NiwgMHgwMCB9LAorCXsgMHg5YSwgMHgwMCB9LAogCXsgMHhiMCwgMHg4NCB9LAogCXsgMHhiMSwgMHgwYyB9LAogCXsgMHhiMiwgMHgwZSB9LApAQCAtNjgxLDE3ICs2ODcsMTcgQEAKIC8qIE1hdHJpeCBjb2VmZmljaWVudHMgKi8KIAl7IDB4NGYsIDB4ODAgfSwKIAl7IDB4NTAsIDB4ODAgfSwKLQl7IDB4NTEsIDAgfSwKKwl7IDB4NTEsIDB4MDAgfSwKIAl7IDB4NTIsIDB4MjIgfSwKIAl7IDB4NTMsIDB4NWUgfSwKIAl7IDB4NTQsIDB4ODAgfSwKIAl7IDB4NTgsIDB4OWUgfSwKIAogCXsgT1Y3NjcwX1JFR19DT00xNiwgT1Y3NjcwX0NPTTE2X0FXQkdBSU4gfSwKLQl7IE9WNzY3MF9SRUdfRURHRSwgMCB9LAorCXsgT1Y3NjcwX1JFR19FREdFLCAweDAwIH0sCiAJeyAweDc1LCAweDA1IH0sCiAJeyAweDc2LCAweGUxIH0sCi0JeyAweDRjLCAwIH0sCisJeyAweDRjLCAweDAwIH0sCiAJeyAweDc3LCAweDAxIH0sCiAJeyBPVjc2NzBfUkVHX0NPTTEzLCBPVjc2NzBfQ09NMTNfR0FNTUEKIAkJCSAgfCBPVjc2NzBfQ09NMTNfVVZTQVQKQEAgLTcwNCw3ICs3MTAsNyBAQAogCXsgMHgzNCwgMHgxMSB9LAogCXsgT1Y3NjcwX1JFR19DT00xMSwgT1Y3NjcwX0NPTTExX0VYUHxPVjc2NzBfQ09NMTFfSFpBVVRPIH0sCiAJeyAweGE0LCAweDg4IH0sCi0JeyAweDk2LCAwIH0sCisJeyAweDk2LCAweDAwIH0sCiAJeyAweDk3LCAweDMwIH0sCiAJeyAweDk4LCAweDIwIH0sCiAJeyAweDk5LCAweDMwIH0sCkBAIC05NDIsMTEgKzk0OCwxMSBAQAogCiAJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCiAJcmMgPSByZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDAxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CiAKIAkvKiB3YWl0IGZvciB3cml0ZSBjb21wbGV0ZSAqLwogCW1zbGVlcCg0KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIHJlZ19yOChzZCwgUjUxOF9JMkNfQ1RMKTsKIH0KIApAQCAtMTAyOSw3ICsxMDM1LDcgQEAKICAqLwogc3RhdGljIGludCBpbml0X292X3NlbnNvcihzdHJ1Y3Qgc2QgKnNkKQogewotCWludCBpLCBzdWNjZXNzOworCWludCBpOwogCiAJLyogUmVzZXQgdGhlIHNlbnNvciAqLwogCWlmIChpMmNfdyhzZCwgMHgxMiwgMHg4MCkgPCAwKQpAQCAtMTAzOCwxMSArMTA0NCwxMSBAQAogCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KIAltc2xlZXAoMTUwKTsKIAotCWZvciAoaSA9IDAsIHN1Y2Nlc3MgPSAwOyBpIDwgaTJjX2RldGVjdF90cmllcyAmJiAhc3VjY2VzczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGkyY19kZXRlY3RfdHJpZXM7IGkrKykgewogCQlpZiAoaTJjX3Ioc2QsIE9WNzYxMF9SRUdfSURfSElHSCkgPT0gMHg3ZiAmJgogCQkgICAgaTJjX3Ioc2QsIE9WNzYxMF9SRUdfSURfTE9XKSA9PSAweGEyKSB7Ci0JCQlzdWNjZXNzID0gMTsKLQkJCWNvbnRpbnVlOworCQkJUERFQlVHKERfUFJPQkUsICJJMkMgc3luY2VkIGluICVkIGF0dGVtcHQocykiLCBpKTsKKwkJCXJldHVybiAwOwogCQl9CiAKIAkJLyogUmVzZXQgdGhlIHNlbnNvciAqLwpAQCAtMTA1NCwxMCArMTA2MCw3IEBACiAJCWlmIChpMmNfcihzZCwgMHgwMCkgPCAwKQogCQkJcmV0dXJuIC1FSU87CiAJfQotCWlmICghc3VjY2VzcykKLQkJcmV0dXJuIC1FSU87Ci0JUERFQlVHKERfUFJPQkUsICJJMkMgc3luY2VkIGluICVkIGF0dGVtcHQocykiLCBpKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogLyogU2V0IHRoZSByZWFkIGFuZCB3cml0ZSBzbGF2ZSBJRHMuIFRoZSAic2xhdmUiIGFyZ3VtZW50IGlzIHRoZSB3cml0ZSBzbGF2ZSwKQEAgLTEwNzMsNyArMTA3Niw2IEBACiAJcmMgPSByZWdfdyhzZCwgUjUxeF9JMkNfV19TSUQsIHNsYXZlKTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7Ci0Jc2QtPnByaW1hcnlfaTJjX3NsYXZlID0gc2xhdmU7CiAJcmV0dXJuIHJlZ193KHNkLCBSNTF4X0kyQ19SX1NJRCwgc2xhdmUgKyAxKTsKIH0KIApAQCAtMTI4NSw3ICsxMjg3LDYgQEAKIC8qIFR1cm5zIG9uIG9yIG9mZiB0aGUgTEVELiBPbmx5IGhhcyBhbiBlZmZlY3Qgd2l0aCBPVjUxMSsvT1Y1MTgoKykvT1Y1MTkgKi8KIHN0YXRpYyB2b2lkIG92NTF4X2xlZF9jb250cm9sKHN0cnVjdCBzZCAqc2QsIGludCBvbikKIHsKLS8qCVBERUJVRyhEX1NUUkVBTSwgIkxFRCAoJXMpIiwgb24gPyAib24iIDogIm9mZiIpOyAqLwogCXJlZ193X21hc2soc2QsIE9WNTE5X0dQSU9fREFUQV9PVVQwLCAhb24sIDEpOwkvKiAwIC8gMSAqLwogfQogCkBAIC0xMzUyLDcgKzEzNTMsNyBAQAogCQkJfQogCQkJaWYgKG92OHh4MF9jb25maWd1cmUoc2QpIDwgMCkgewogCQkJCVBERUJVRyhEX0VSUiwKLQkJCQkgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjh4eDAgc2Vuc29yIik7CisJCQkJCSJGYWlsZWQgdG8gY29uZmlndXJlIE9WOHh4MCBzZW5zb3IiKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQl9CkBAIC0xNDgyLDcgKzE0ODMsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDApIHsKIAkJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCi0JCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9DQU1fREZSLCAweDEwLCAweDEwKTsKKwkJCXJlZ193X21hc2soc2QsIE9WNTE5X1IyMF9ERlIsIDB4MTAsIDB4MTApOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHdyaXRlX3JlZ3ZhbHMoc2QsIG1vZGVfaW5pdF81MTlfb3Y3NjcwLApAQCAtMTQ5MCwxNCArMTQ5MSwxNCBAQAogCQkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmVnX3coc2QsIE9WNTE5X0NBTV9IX1NJWkUsCXNkLT5nc3BjYV9kZXYud2lkdGggPj4gNCk7Ci0JcmVnX3coc2QsIE9WNTE5X0NBTV9WX1NJWkUsCXNkLT5nc3BjYV9kZXYuaGVpZ2h0ID4+IDMpOwotCXJlZ193KHNkLCBPVjUxOV9DQU1fWF9PRkZTRVRMLAkweDAwKTsKLQlyZWdfdyhzZCwgT1Y1MTlfQ0FNX1hfT0ZGU0VUSCwJMHgwMCk7Ci0JcmVnX3coc2QsIE9WNTE5X0NBTV9ZX09GRlNFVEwsCTB4MDApOwotCXJlZ193KHNkLCBPVjUxOV9DQU1fWV9PRkZTRVRILAkweDAwKTsKLQlyZWdfdyhzZCwgT1Y1MTlfQ0FNX0RJVklERVIsCTB4MDApOwotCXJlZ193KHNkLCBPVjUxOV9DQU1fRk9STUFULAkweDAzKTsgLyogWVVWNDIyICovCisJcmVnX3coc2QsIE9WNTE5X1IxMF9IX1NJWkUsCXNkLT5nc3BjYV9kZXYud2lkdGggPj4gNCk7CisJcmVnX3coc2QsIE9WNTE5X1IxMV9WX1NJWkUsCXNkLT5nc3BjYV9kZXYuaGVpZ2h0ID4+IDMpOworCXJlZ193KHNkLCBPVjUxOV9SMTJfWF9PRkZTRVRMLAkweDAwKTsKKwlyZWdfdyhzZCwgT1Y1MTlfUjEzX1hfT0ZGU0VUSCwJMHgwMCk7CisJcmVnX3coc2QsIE9WNTE5X1IxNF9ZX09GRlNFVEwsCTB4MDApOworCXJlZ193KHNkLCBPVjUxOV9SMTVfWV9PRkZTRVRILAkweDAwKTsKKwlyZWdfdyhzZCwgT1Y1MTlfUjE2X0RJVklERVIsCTB4MDApOworCXJlZ193KHNkLCBPVjUxOV9SMjVfRk9STUFULAkweDAzKTsgLyogWVVWNDIyICovCiAJcmVnX3coc2QsIDB4MjYsCQkJMHgwMCk7IC8qIFVuZG9jdW1lbnRlZCAqLwogCiAJLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICoqKioqKioqLwpAQCAtMTUwOSw4ICsxNTEwLDggQEAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTl9PVjc2NDA6CiAJCXN3aXRjaCAoc2QtPmZyYW1lX3JhdGUpIHsKLS8qZml4bWU6IGRlZmF1bHQgd2FzIDMwIGZwcyAqLwotCQljYXNlIDMwOgorCQlkZWZhdWx0OgorLyoJCWNhc2UgMzA6ICovCiAJCQlyZWdfdyhzZCwgMHhhNCwgMHgwYyk7CiAJCQlyZWdfdyhzZCwgMHgyMywgMHhmZik7CiAJCQlicmVhazsKQEAgLTE1MjIsOCArMTUyMyw3IEBACiAJCQlyZWdfdyhzZCwgMHhhNCwgMHgwYyk7CiAJCQlyZWdfdyhzZCwgMHgyMywgMHgxYik7CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLS8qCQljYXNlIDE1OiAqLworCQljYXNlIDE1OgogCQkJcmVnX3coc2QsIDB4YTQsIDB4MDQpOwogCQkJcmVnX3coc2QsIDB4MjMsIDB4ZmYpOwogCQkJc2QtPmNsb2NrZGl2ID0gMTsKQEAgLTE1NzYsNyArMTU3Niw2IEBACiAJCX0KIAkJYnJlYWs7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NjcsNyArMTY2Niw3IEBACiAJCSAqIHRoZSBnYWluIG9yIHRoZSBjb250cmFzdC4gVGhlICJyZXNlcnZlZCIgYml0cyBzZWVtCiAJCSAqIHRvIGhhdmUgc29tZSBlZmZlY3QgaW4gdGhpcyBjYXNlLiAqLwogCQlpMmNfdyhzZCwgMHgyZCwgMHg4NSk7Ci0JfSBlbHNlIGlmIChzZC0+Y2xvY2tkaXYgPj0gMCkgeworCX0gZWxzZSB7CiAJCWkyY193KHNkLCAweDExLCBzZC0+Y2xvY2tkaXYpOwogCX0KIApAQCAtMTg2OSw3ICsxODY4LDYgQEAKIAlyZXQgPSBvdjUxeF9yZXN0YXJ0KHNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7Ci0JUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0ZWQgYWx0OiAweCUwMngiLCBnc3BjYV9kZXYtPmFsdCk7CiAJb3Y1MXhfbGVkX2NvbnRyb2woc2QsIDEpOwogCXJldHVybiAwOwogb3V0OgpAQCAtMTg3OSw4ICsxODc3LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlvdjUxeF9zdG9wKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KTsKLQlvdjUxeF9sZWRfY29udHJvbCgoc3RydWN0IHNkICopIGdzcGNhX2RldiwgMCk7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJb3Y1MXhfc3RvcChzZCk7CisJb3Y1MXhfbGVkX2NvbnRyb2woc2QsIDApOwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC0xOTM1LDkgKzE5MzUsNiBAQAogCWludCB2YWw7CiAKIAl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKLQlQREVCVUcoRF9DT05GLCAiYnJpZ2h0bmVzczolZCIsIHZhbCk7Ci0vKglpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0gKgkJb3Y1MXhfc3RvcChzZCk7ICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5fT1Y4NjEwOgogCWNhc2UgU0VOX09WNzYxMDoKQEAgLTE5NTksOCArMTk1Niw2IEBACiAJCWkyY193KHNkLCBPVjc2NzBfUkVHX0JSSUdIVCwgb3Y3NjcwX2Fic190b19zbSh2YWwpKTsKIAkJYnJlYWs7CiAJfQotLyoJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotICoJCW92NTF4X3Jlc3RhcnQoc2QpOyAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xOTY5LDkgKzE5NjQsNiBAQAogCWludCB2YWw7CiAKIAl2YWwgPSBzZC0+Y29udHJhc3Q7Ci0JUERFQlVHKERfQ09ORiwgImNvbnRyYXN0OiVkIiwgdmFsKTsKLS8qCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJb3Y1MXhfc3RvcChzZCk7ICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5fT1Y3NjEwOgogCWNhc2UgU0VOX09WNjYyMDoKQEAgLTIwMDcsOCArMTk5OSw2IEBACiAJCWkyY193KHNkLCBPVjc2NzBfUkVHX0NPTlRSQVMsIHZhbCA+PiAxKTsKIAkJYnJlYWs7CiAJfQotLyoJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlvdjUxeF9yZXN0YXJ0KHNkKTsgKi8KIH0KIAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTIwMTcsOSArMjAwNyw2IEBACiAJaW50IHZhbDsKIAogCXZhbCA9IHNkLT5jb2xvcnM7Ci0JUERFQlVHKERfQ09ORiwgInNhdHVyYXRpb246JWQiLCB2YWwpOwotLyoJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlvdjUxeF9zdG9wKHNkKTsgKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTl9PVjg2MTA6CiAJY2FzZSBTRU5fT1Y3NjEwOgpAQCAtMjA0NCw4ICsyMDMxLDYgQEAKIAkJLyogc2V0IFJFR19DT00xMyB2YWx1ZXMgZm9yIFVWIHNhdCBhdXRvIG1vZGUgKi8KIAkJYnJlYWs7CiAJfQotLyoJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlvdjUxeF9yZXN0YXJ0KHNkKTsgKi8KIH0KIAogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtMjA1Myw3ICsyMDM4LDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKLQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNzAsNyArMjA1Niw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmNvbnRyYXN0ID0gdmFsOwotCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDg3LDcgKzIwNzQsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5jb2xvcnMgPSB2YWw7Ci0Jc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEwNCw3ICsyMDkyLDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+aGZsaXAgPSB2YWw7Ci0Jc2V0aHZmbGlwKHNkKTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGh2ZmxpcChzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMjEsNyArMjExMCw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPnZmbGlwID0gdmFsOwotCXNldGh2ZmxpcChzZCk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRodmZsaXAoc2QpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTYyLDcgKzIxNTIsNyBAQAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHg4NTE5KX0sCiAJe30KIH07Ci0jdW5kZWYgRFZOQU1FCisKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjE1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qCisgKiBvdjUzNC9vdjc3MnggZ3NwY2EgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhIHByb3RvdHlwZSB3cml0dGVuIGJ5IE1hcmsgRmVycmVsbCA8bWFqb3J0cmlwc0BnbWFpbC5jb20+CisgKiBVU0IgcHJvdG9jb2wgcmV2ZXJzZSBlbmdpbmVlcmVkIGJ5IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICogaHR0cHM6Ly9qaW0uc2gvc3ZuL2ppbS9kZXZsL3BsYXlzdGF0aW9uL3BzMy9leWUvdGVzdC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIm92NTM0IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworI2RlZmluZSBPVjUzNF9SRUdfQUREUkVTUwkweGYxCS8qID8gKi8KKyNkZWZpbmUgT1Y1MzRfUkVHX1NVQkFERFIJMHhmMgorI2RlZmluZSBPVjUzNF9SRUdfV1JJVEUJCTB4ZjMKKyNkZWZpbmUgT1Y1MzRfUkVHX1JFQUQJCTB4ZjQKKyNkZWZpbmUgT1Y1MzRfUkVHX09QRVJBVElPTgkweGY1CisjZGVmaW5lIE9WNTM0X1JFR19TVEFUVVMJMHhmNgorCisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzMJMHgzNworI2RlZmluZSBPVjUzNF9PUF9XUklURV8yCTB4MzMKKyNkZWZpbmUgT1Y1MzRfT1BfUkVBRF8yCQkweGY5CisKKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDUwMAorCitNT0RVTEVfQVVUSE9SKCJBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9PVjUzNCBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCV9fdTMyIGxhc3RfZmlkOworCV9fdTMyIGxhc3RfcHRzOworCWludCBmcmFtZV9yYXRlOworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfRklFTERfTk9ORSwKKwkgLmJ5dGVzcGVybGluZSA9IDY0MCAqIDIsCisJIC5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAyLAorCSAuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCSAucHJpdiA9IDB9LAorfTsKKworc3RhdGljIHZvaWQgb3Y1MzRfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCVBERUJVRyhEX1VTQk8sICJyZWc9MHglMDR4LCB2YWw9MCUwMngiLCByZWcsIHZhbCk7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAid3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBvdjUzNF9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDEsCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDB4MCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJUERFQlVHKERfVVNCSSwgInJlZz0weCUwNHgsIGRhdGE9MHglMDJ4IiwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWFkIGZhaWxlZCIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIG92NTM0X3NldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCisJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgMHgyMyk7CisJaWYgKHN0YXR1cykKKwkJZGF0YSB8PSAweDgwOworCWVsc2UKKwkJZGF0YSAmPSB+KDB4ODApOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgc2NjYl9jaGVja19zdGF0dXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXU4IGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIE9WNTM0X1JFR19TVEFUVVMpOworCisJCXN3aXRjaCAoZGF0YSkgeworCQljYXNlIDB4MDA6CisJCQlyZXR1cm4gMTsKKwkJY2FzZSAweDA0OgorCQkJcmV0dXJuIDA7CisJCWNhc2UgMHgwMzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUERFQlVHKERfRVJSLCAic2NjYiBzdGF0dXMgMHglMDJ4LCBhdHRlbXB0ICVkLzUiLAorCQkJICAgICAgIGRhdGEsIGkgKyAxKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NjYl9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZzogMHglMDR4LCB2YWw6IDB4JTAyeCIsIHJlZywgdmFsKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3dyaXRlIGZhaWxlZCIpOworfQorCisjaWZkZWYgR1NQQ0FfREVCVUcKK3N0YXRpYyB1OCBzY2NiX3JlZ19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3JlYWQgZmFpbGVkIDEiKTsKKworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1JFQURfMik7CisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAyIik7CisKKwlyZXR1cm4gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfUkVBRCk7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IF9fdTggb3Y1MzRfcmVnX2luaXRkYXRhW11bMl0gPSB7CisJeyAweGU3LCAweDNhIH0sCisKKwl7IE9WNTM0X1JFR19BRERSRVNTLCAweDQyIH0sIC8qIHNlbGVjdCBPVjc3Mnggc2Vuc29yICovCisKKwl7IDB4YzIsIDB4MGMgfSwKKwl7IDB4ODgsIDB4ZjggfSwKKwl7IDB4YzMsIDB4NjkgfSwKKwl7IDB4ODksIDB4ZmYgfSwKKwl7IDB4NzYsIDB4MDMgfSwKKwl7IDB4OTIsIDB4MDEgfSwKKwl7IDB4OTMsIDB4MTggfSwKKwl7IDB4OTQsIDB4MTAgfSwKKwl7IDB4OTUsIDB4MTAgfSwKKwl7IDB4ZTIsIDB4MDAgfSwKKwl7IDB4ZTcsIDB4M2UgfSwKKworCXsgMHg5NiwgMHgwMCB9LAorCisJeyAweDk3LCAweDIwIH0sCisJeyAweDk3LCAweDIwIH0sCisJeyAweDk3LCAweDIwIH0sCisJeyAweDk3LCAweDBhIH0sCisJeyAweDk3LCAweDNmIH0sCisJeyAweDk3LCAweDRhIH0sCisJeyAweDk3LCAweDIwIH0sCisJeyAweDk3LCAweDE1IH0sCisJeyAweDk3LCAweDBiIH0sCisKKwl7IDB4OGUsIDB4NDAgfSwKKwl7IDB4MWYsIDB4ODEgfSwKKwl7IDB4MzQsIDB4MDUgfSwKKwl7IDB4ZTMsIDB4MDQgfSwKKwl7IDB4ODgsIDB4MDAgfSwKKwl7IDB4ODksIDB4MDAgfSwKKwl7IDB4NzYsIDB4MDAgfSwKKwl7IDB4ZTcsIDB4MmUgfSwKKwl7IDB4MzEsIDB4ZjkgfSwKKwl7IDB4MjUsIDB4NDIgfSwKKwl7IDB4MjEsIDB4ZjAgfSwKKworCXsgMHgxYywgMHgwMCB9LAorCXsgMHgxZCwgMHg0MCB9LAorCXsgMHgxZCwgMHgwMiB9LCAvKiBwYXlsb2FkIHNpemUgMHgwMjAwICogNCA9IDIwNDggYnl0ZXMgKi8KKwl7IDB4MWQsIDB4MDAgfSwgLyogcGF5bG9hZCBzaXplICovCisJeyAweDFkLCAweDAyIH0sIC8qIGZyYW1lIHNpemUgMHgwMjU4MDAgKiA0ID0gNjE0NDAwICovCisJeyAweDFkLCAweDU4IH0sIC8qIGZyYW1lIHNpemUgKi8KKwl7IDB4MWQsIDB4MDAgfSwgLyogZnJhbWUgc2l6ZSAqLworCisJeyAweDFjLCAweDBhIH0sCisJeyAweDFkLCAweDA4IH0sIC8qIHR1cm4gb24gVVZDIGhlYWRlciAqLworCXsgMHgxZCwgMHgwZSB9LCAvKiAuLiAqLworCisJeyAweDhkLCAweDFjIH0sCisJeyAweDhlLCAweDgwIH0sCisJeyAweGU1LCAweDA0IH0sCisKKwl7IDB4YzAsIDB4NTAgfSwKKwl7IDB4YzEsIDB4M2MgfSwKKwl7IDB4YzIsIDB4MGMgfSwKK307CisKK3N0YXRpYyBjb25zdCBfX3U4IG92NzcyeF9yZWdfaW5pdGRhdGFbXVsyXSA9IHsKKwl7IDB4MTIsIDB4ODAgfSwKKwl7IDB4MTEsIDB4MDEgfSwKKworCXsgMHgzZCwgMHgwMyB9LAorCXsgMHgxNywgMHgyNiB9LAorCXsgMHgxOCwgMHhhMCB9LAorCXsgMHgxOSwgMHgwNyB9LAorCXsgMHgxYSwgMHhmMCB9LAorCXsgMHgzMiwgMHgwMCB9LAorCXsgMHgyOSwgMHhhMCB9LAorCXsgMHgyYywgMHhmMCB9LAorCXsgMHg2NSwgMHgyMCB9LAorCXsgMHgxMSwgMHgwMSB9LAorCXsgMHg0MiwgMHg3ZiB9LAorCXsgMHg2MywgMHhlMCB9LAorCXsgMHg2NCwgMHhmZiB9LAorCXsgMHg2NiwgMHgwMCB9LAorCXsgMHgxMywgMHhmMCB9LAorCXsgMHgwZCwgMHg0MSB9LAorCXsgMHgwZiwgMHhjNSB9LAorCXsgMHgxNCwgMHgxMSB9LAorCisJeyAweDIyLCAweDdmIH0sCisJeyAweDIzLCAweDAzIH0sCisJeyAweDI0LCAweDQwIH0sCisJeyAweDI1LCAweDMwIH0sCisJeyAweDI2LCAweGExIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDAwIH0sCisJeyAweDZiLCAweGFhIH0sCisJeyAweDEzLCAweGZmIH0sCisKKwl7IDB4OTAsIDB4MDUgfSwKKwl7IDB4OTEsIDB4MDEgfSwKKwl7IDB4OTIsIDB4MDMgfSwKKwl7IDB4OTMsIDB4MDAgfSwKKwl7IDB4OTQsIDB4NjAgfSwKKwl7IDB4OTUsIDB4M2MgfSwKKwl7IDB4OTYsIDB4MjQgfSwKKwl7IDB4OTcsIDB4MWUgfSwKKwl7IDB4OTgsIDB4NjIgfSwKKwl7IDB4OTksIDB4ODAgfSwKKwl7IDB4OWEsIDB4MWUgfSwKKwl7IDB4OWIsIDB4MDggfSwKKwl7IDB4OWMsIDB4MjAgfSwKKwl7IDB4OWUsIDB4ODEgfSwKKworCXsgMHhhNiwgMHgwNCB9LAorCXsgMHg3ZSwgMHgwYyB9LAorCXsgMHg3ZiwgMHgxNiB9LAorCXsgMHg4MCwgMHgyYSB9LAorCXsgMHg4MSwgMHg0ZSB9LAorCXsgMHg4MiwgMHg2MSB9LAorCXsgMHg4MywgMHg2ZiB9LAorCXsgMHg4NCwgMHg3YiB9LAorCXsgMHg4NSwgMHg4NiB9LAorCXsgMHg4NiwgMHg4ZSB9LAorCXsgMHg4NywgMHg5NyB9LAorCXsgMHg4OCwgMHhhNCB9LAorCXsgMHg4OSwgMHhhZiB9LAorCXsgMHg4YSwgMHhjNSB9LAorCXsgMHg4YiwgMHhkNyB9LAorCXsgMHg4YywgMHhlOCB9LAorCXsgMHg4ZCwgMHgyMCB9LAorCisJeyAweDBjLCAweDkwIH0sCisKKwl7IDB4MmIsIDB4MDAgfSwKKwl7IDB4MjIsIDB4N2YgfSwKKwl7IDB4MjMsIDB4MDMgfSwKKwl7IDB4MTEsIDB4MDEgfSwKKwl7IDB4MGMsIDB4ZDAgfSwKKwl7IDB4NjQsIDB4ZmYgfSwKKwl7IDB4MGQsIDB4NDEgfSwKKworCXsgMHgxNCwgMHg0MSB9LAorCXsgMHgwZSwgMHhjZCB9LAorCXsgMHhhYywgMHhiZiB9LAorCXsgMHg4ZSwgMHgwMCB9LAorCXsgMHgwYywgMHhkMCB9Cit9OworCisvKiBzZXQgZnJhbWVyYXRlICovCitzdGF0aWMgdm9pZCBvdjUzNF9zZXRfZnJhbWVfcmF0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBmciA9IHNkLT5mcmFtZV9yYXRlOworCisJc3dpdGNoIChmcikgeworCWNhc2UgNTA6CisJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CisJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgwZCwgMHg0MSk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTUsIDB4MDIpOworCQlicmVhazsKKwljYXNlIDQwOgorCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTEsIDB4MDIpOworCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MGQsIDB4YzEpOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU1LCAweDA0KTsKKwkJYnJlYWs7CisvKgljYXNlIDMwOiAqLworCWRlZmF1bHQ6CisJCWZyID0gMzA7CisJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMSwgMHgwNCk7CisJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgwZCwgMHg4MSk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTUsIDB4MDIpOworCQlicmVhazsKKwljYXNlIDE1OgorCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTEsIDB4MDMpOworCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MGQsIDB4NDEpOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU1LCAweDA0KTsKKwkJYnJlYWs7CisJfQorCisJc2QtPmZyYW1lX3JhdGUgPSBmcjsKKwlQREVCVUcoRF9QUk9CRSwgImZyYW1lX3JhdGU6ICVkIiwgZnIpOworfQorCisvKiBzZXR1cCBtZXRob2QgKi8KK3N0YXRpYyB2b2lkIG92NTM0X3NldHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKworCS8qIEluaXRpYWxpemUgYnJpZGdlIGNoaXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjUzNF9yZWdfaW5pdGRhdGEpOyBpKyspCisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIG92NTM0X3JlZ19pbml0ZGF0YVtpXVswXSwKKwkJCQlvdjUzNF9yZWdfaW5pdGRhdGFbaV1bMV0pOworCisJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgaXMgb3YlMDJ4JTAyeCIsCisJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKSwKKwkJc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGIpKTsKKworCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKworCS8qIEluaXRpYWxpemUgc2Vuc29yICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X3JlZ19pbml0ZGF0YSk7IGkrKykKKwkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBvdjc3MnhfcmVnX2luaXRkYXRhW2ldWzBdLAorCQkJICAgICAgIG92NzcyeF9yZWdfaW5pdGRhdGFbaV1bMV0pOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbTsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKworCWNhbS0+ZXBhZGRyID0gMHgwMTsKKwljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKworCWNhbS0+YnVsa19zaXplID0gMTYzODQ7CisJY2FtLT5idWxrX251cmJzID0gMjsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJb3Y1MzRfc2V0dXAoZ3NwY2FfZGV2KTsKKwlvdjUzNF9zZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCS8qIHN0YXJ0IHN0cmVhbWluZyBkYXRhICovCisJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBzdG9wIHN0cmVhbWluZyBkYXRhICovCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworfQorCisvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKKyNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJKDEgPDwgNSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJKDEgPDwgMykKKyNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAorCQkJX191OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MzIgdGhpc19wdHM7CisJaW50IHRoaXNfZmlkOworCWludCByZW1haW5pbmdfbGVuID0gbGVuOworCV9fdTggKm5leHRfZGF0YSA9IGRhdGE7CisKK3NjYW5fbmV4dDoKKwlpZiAocmVtYWluaW5nX2xlbiA8PSAwKQorCQlyZXR1cm47CisKKwlkYXRhID0gbmV4dF9kYXRhOworCWxlbiA9IG1pbihyZW1haW5pbmdfbGVuLCAyMDQ4KTsKKwlyZW1haW5pbmdfbGVuIC09IGxlbjsKKwluZXh0X2RhdGEgKz0gbGVuOworCisJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCisJICAgY2hhbmdlcy4gIEEgZnJhbWUgZW5kcyB3aGVuIEVPRiBpcyBzZXQsIGFuZCB3ZSd2ZSByZWNlaXZlZAorCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KKworCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KKwlpZiAoZGF0YVswXSAhPSAxMiB8fCBsZW4gPCAxMikgeworCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOworCQlnb3RvIGRpc2NhcmQ7CisJfQorCisJLyogQ2hlY2sgZXJyb3JzICovCisJaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VSUikgeworCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOworCQlnb3RvIGRpc2NhcmQ7CisJfQorCisJLyogRXh0cmFjdCBQVFMgYW5kIEZJRCAqLworCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOworCQlnb3RvIGRpc2NhcmQ7CisJfQorCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpIHwgKGRhdGFbM10gPDwgOCkgfCBkYXRhWzJdOworCXRoaXNfZmlkID0gKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRCkgPyAxIDogMDsKKworCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCWlmICh0aGlzX3B0cyAhPSBzZC0+bGFzdF9wdHMgfHwgdGhpc19maWQgIT0gc2QtPmxhc3RfZmlkKSB7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOworCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKKwkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7CisJfQorCisJLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKKwkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKKworCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KKwlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCXNkLT5sYXN0X3B0cyA9IDA7CisKKwkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgIT0KKwkJICAgIChnc3BjYV9kZXYtPndpZHRoICogZ3NwY2FfZGV2LT5oZWlnaHQgKiAyKSkgeworCQkJUERFQlVHKERfUEFDSywgInNob3J0IGZyYW1lIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOworCX0KKworCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCisJZ290byBzY2FuX25leHQ7CisKK2Rpc2NhcmQ6CisJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBESVNDQVJEX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOworCWdvdG8gc2Nhbl9uZXh0OworfQorCisvKiBnZXQgc3RyZWFtIHBhcmFtZXRlcnMgKGZyYW1lcmF0ZSkgKi8KK3N0YXRpYyBpbnQgc2RfZ2V0X3N0cmVhbXBhcm0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZwYXJtLT5wYXJtLmNhcHR1cmU7CisJc3RydWN0IHY0bDJfZnJhY3QgKnRwZiA9ICZjcC0+dGltZXBlcmZyYW1lOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcC0+Y2FwYWJpbGl0eSB8PSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJdHBmLT5udW1lcmF0b3IgPSAxOworCXRwZi0+ZGVub21pbmF0b3IgPSBzZC0+ZnJhbWVfcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKiBzZXQgc3RyZWFtIHBhcmFtZXRlcnMgKGZyYW1lcmF0ZSkgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0X3N0cmVhbXBhcm0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZwYXJtLT5wYXJtLmNhcHR1cmU7CisJc3RydWN0IHY0bDJfZnJhY3QgKnRwZiA9ICZjcC0+dGltZXBlcmZyYW1lOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgcmVxdWVzdGVkIGZyYW1lcmF0ZSAqLworCXNkLT5mcmFtZV9yYXRlID0gdHBmLT5kZW5vbWluYXRvciAvIHRwZi0+bnVtZXJhdG9yOworCW92NTM0X3NldF9mcmFtZV9yYXRlKGdzcGNhX2Rldik7CisKKwkvKiBSZXR1cm4gdGhlIGFjdHVhbCBmcmFtZXJhdGUgKi8KKwl0cGYtPm51bWVyYXRvciA9IDE7CisJdHBmLT5kZW5vbWluYXRvciA9IHNkLT5mcmFtZV9yYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyAgICA9IHNkX2N0cmxzLAorCS5uY3RybHMgICA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgICA9IHNkX2NvbmZpZywKKwkuaW5pdCAgICAgPSBzZF9pbml0LAorCS5zdGFydCAgICA9IHNkX3N0YXJ0LAorCS5zdG9wTiAgICA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfc3RyZWFtcGFybSA9IHNkX2dldF9zdHJlYW1wYXJtLAorCS5zZXRfc3RyZWFtcGFybSA9IHNkX3NldF9zdHJlYW1wYXJtLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA2ZjgsIDB4MzAwMil9LAkvKiBIZXJjdWxlcyBCbG9nIFdlYmNhbSAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKX0sCS8qIEhlcmN1bGVzIER1YWxwaXggSEQgV2VibG9nICovCisJe1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApfSwJLyogU29ueSBIRCBFeWUgZm9yIFBTMyAoU0xFSCAwMDIwMSkgKi8KKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJICAgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCAwYjBjNTczLi5jOTBhYzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUGl4YXJ0IFBBQzIwN0JDQSBsaWJyYXJ5CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29lZGVAaGhzLm5sPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhhbnMgZGUgR29lZGUgPGhkZ29lZGVAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNSBUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkKICAqIENvcHlsZWZ0IChDKSAyMDA1IE1pY2hlbCBYaGFhcmQgbXhoYWFyZEBtYWdpYy5mcgogICoKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLU1PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29lZGVAaGhzLm5sPiIpOworTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaXhhcnQgUEFDMjA3Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTE0OSw3ICsxNDksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9QQUMyMDcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9ICgxNzYgKyAyKSAqIDE0NCwKQEAgLTUyOSw2ICs1MjksNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMjgpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ2MCl9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDYxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NjMpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ2NCl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDY4KX0sCkBAIC01MzYsNiArNTM3LDcgQEAKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3MSl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzYpfSwKKwl7VVNCX0RFVklDRSgweDE0NWYsIDB4MDEzYSl9LAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHhmMTE1KX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGZiZDQ1ZTIuLmE5Yzk1Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfUEpQRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDggKyA1OTAsCkBAIC0xMDY0LDEwICsxMDY0LDEzIEBACiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDgpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MGUpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MGYpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjIpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjQpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MjYpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MmEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCisJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MmMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCmluZGV4IDZjNjliYzcuLmIzZTRlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwpAQCAtMTMyLDggKzEzMiw2IEBACiAgICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0CiAgICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCiAjZGVmaW5lIEFVVE9HQUlOX0lHTk9SRV9GUkFNRVMgMwotI2RlZmluZSBBVVRPR0FJTl9ERUFEWk9ORSAxMDAwCi0jZGVmaW5lIERFU0lSRURfQVZHX0xVTSA3MDAwCiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CkBAIC0yMjksNyArMjI3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCkBAIC0yNTEsNyArMjQ5LDcgQEAKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAwfSwKIH07Ci1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKIAkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCwKQEAgLTgyNywxOCArODI1LDI5IEBACiAKIHN0YXRpYyB2b2lkIGRvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlpbnQgZGVhZHpvbmUsIGRlc2lyZWRfYXZnX2x1bTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGF2Z19sdW0gPSBhdG9taWNfcmVhZCgmc2QtPmF2Z19sdW0pOwogCiAJaWYgKGF2Z19sdW0gPT0gLTEpCiAJCXJldHVybjsKIAorCS8qIFNJRiAvIFZHQSBzZW5zb3JzIGhhdmUgYSBkaWZmZXJlbnQgYXV0b2V4cG9zdXJlIGFyZWEgYW5kIHRodXMKKwkgICBkaWZmZXJlbnQgYXZnX2x1bSB2YWx1ZXMgZm9yIHRoZSBzYW1lIHBpY3R1cmUgYnJpZ2h0bmVzcyAqLworCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfU0lGKSB7CisJCWRlYWR6b25lID0gMTAwMDsKKwkJZGVzaXJlZF9hdmdfbHVtID0gNzAwMDsKKwl9IGVsc2UgeworCQlkZWFkem9uZSA9IDMwMDA7CisJCWRlc2lyZWRfYXZnX2x1bSA9IDIzMDAwOworCX0KKwogCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApCiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzLS07CiAJZWxzZSBpZiAoZ3NwY2FfYXV0b19nYWluX25fZXhwb3N1cmUoZ3NwY2FfZGV2LCBhdmdfbHVtLAotCQkJc2QtPmJyaWdodG5lc3MgKiBERVNJUkVEX0FWR19MVU0gLyAxMjcsCi0JCQlBVVRPR0FJTl9ERUFEWk9ORSwgR0FJTl9LTkVFLCBFWFBPU1VSRV9LTkVFKSkgewotCQlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGdhaW4gY2hhbmdlZDogZ2FpbjogJWQgZXhwbzogJWRcbiIsCisJCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKKwkJCWRlYWR6b25lLCBHQUlOX0tORUUsIEVYUE9TVVJFX0tORUUpKSB7CisJCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogZ2FpbiBjaGFuZ2VkOiBnYWluOiAlZCBleHBvOiAlZCIsCiAJCQkoaW50KXNkLT5nYWluLCAoaW50KXNkLT5leHBvc3VyZSk7CiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKIAl9CkBAIC0xMjI2LDggKzEyMzUsOCBAQAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjgpLCBTQihQQVMyMDIsIDEwMil9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5KSwgU0IoUEFTMTA2LCAxMDIpfSwKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAjZW5kaWYKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlKSwgU0IoT1Y3NjMwLCAxMDIpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCmluZGV4IDUzY2I4MmQuLjMzNzNiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgImdzcGNhLmgiCiAjaW5jbHVkZSAianBlZy5oIgogCisjZGVmaW5lIFY0TDJfQ0lEX0lORlJBUkVEIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQorCiBNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU09OSVggSlBFRyBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzUsMjMgKzM3LDI2IEBACiAJYXRvbWljX3QgYXZnX2x1bTsKIAl1bnNpZ25lZCBpbnQgZXhwb3N1cmU7CiAKLQl1bnNpZ25lZCBzaG9ydCBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7Ci0JdW5zaWduZWQgY2hhciBjb2xvcnM7Ci0JdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKwlfX3UxNiBicmlnaHRuZXNzOworCV9fdTggY29udHJhc3Q7CisJX191OCBjb2xvcnM7CisJX191OCBhdXRvZ2FpbjsKKwlfX3U4IGJsdWU7CisJX191OCByZWQ7CiAJX191OCB2ZmxpcDsJCQkvKiBvdjc2MzAgb25seSAqLworCV9fdTggaW5mcmFyZWQ7CQkJLyogbWkwMzYwIG9ubHkgKi8KIAotCXNpZ25lZCBjaGFyIGFnX2NudDsKKwlfX3M4IGFnX2NudDsKICNkZWZpbmUgQUdfQ05UX1NUQVJUIDEzCiAKLQljaGFyIHFpbmRleDsKLQl1bnNpZ25lZCBjaGFyIGJyaWRnZTsKKwlfX3U4IHFpbmRleDsKKwlfX3U4IGJyaWRnZTsKICNkZWZpbmUgQlJJREdFX1NOOUMxMDJQIDAKICNkZWZpbmUgQlJJREdFX1NOOUMxMDUgMQogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKICNkZWZpbmUgQlJJREdFX1NOOUMzMjUgNAotCWNoYXIgc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKwlfX3U4IHNlbnNvcjsJCQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCiAjZGVmaW5lIFNFTlNPUl9IVjcxMzFSIDAKICNkZWZpbmUgU0VOU09SX01JMDM2MCAxCiAjZGVmaW5lIFNFTlNPUl9NTzQwMDAgMgpAQCAtNTksNyArNjQsNyBAQAogI2RlZmluZSBTRU5TT1JfT1Y3NjMwIDQKICNkZWZpbmUgU0VOU09SX09WNzY0OCA1CiAjZGVmaW5lIFNFTlNPUl9PVjc2NjAgNgotCXVuc2lnbmVkIGNoYXIgaTJjX2Jhc2U7CisJX191OCBpMmNfYmFzZTsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTY5LDEwICs3NCwxNiBAQAogc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0aW5mcmFyZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewpAQCAtODQsNyArOTUsNyBAQAogI2RlZmluZSBCUklHSFRORVNTX01BWCAweGZmZmYKIAkJLm1heGltdW0gPSBCUklHSFRORVNTX01BWCwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCUklHSFRORVNTX0RFRiAweDdmZmYKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMHg4MDAwCiAJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLApAQCAtMTExLDcgKzEyMiw3IEBACiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiQ29sb3IiLAogCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNjQsCisJCS5tYXhpbXVtID0gNDAsCiAJCS5zdGVwICAgID0gMSwKICNkZWZpbmUgQ09MT1JfREVGIDMyCiAJCS5kZWZhdWx0X3ZhbHVlID0gQ09MT1JfREVGLApAQCAtMTE5LDcgKzEzMCwzNSBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29sb3JzLAogCSAgICAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAogCX0sCi0jZGVmaW5lIEFVVE9HQUlOX0lEWCAzCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJsdWUgQmFsYW5jZSIsCisJCS5taW5pbXVtID0gMjQsCisJCS5tYXhpbXVtID0gNDAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQkxVRV9CQUxBTkNFX0RFRiAzMgorCQkuZGVmYXVsdF92YWx1ZSA9IEJMVUVfQkFMQU5DRV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRibHVlX2JhbGFuY2UsCisJICAgIC5nZXQgPSBzZF9nZXRibHVlX2JhbGFuY2UsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJSZWQgQmFsYW5jZSIsCisJCS5taW5pbXVtID0gMjQsCisJCS5tYXhpbXVtID0gNDAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfREVGIDMyCisJCS5kZWZhdWx0X3ZhbHVlID0gUkVEX0JBTEFOQ0VfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCisJICAgIC5nZXQgPSBzZF9nZXRyZWRfYmFsYW5jZSwKKwl9LAorI2RlZmluZSBBVVRPR0FJTl9JRFggNQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLApAQCAtMTM1LDcgKzE3NCw3IEBACiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAogLyogb3Y3NjMwIG9ubHkgKi8KLSNkZWZpbmUgVkZMSVBfSURYIDQKKyNkZWZpbmUgVkZMSVBfSURYIDYKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9WRkxJUCwKQEAgLTE1MCw5ICsxODksNDMgQEAKIAkgICAgLnNldCA9IHNkX3NldHZmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCiAJfSwKKy8qIG1pMDM2MCBvbmx5ICovCisjZGVmaW5lIElORlJBUkVEX0lEWCA3CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfSU5GUkFSRUQsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiSW5mcmFyZWQiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBJTkZSQVJFRF9ERUYgMAorCQkuZGVmYXVsdF92YWx1ZSA9IElORlJBUkVEX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGluZnJhcmVkLAorCSAgICAuZ2V0ID0gc2RfZ2V0aW5mcmFyZWQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KK3N0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0geworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAorCQkJCQkJLyogU0VOU09SX0hWNzEzMVIgMCAqLworCSgxIDw8IFZGTElQX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfTUkwMzYwIDEgKi8KKwkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMiAqLworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAorCQkJCQkJLyogU0VOU09SX09NNjgwMiAzICovCisJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDQgKi8KKwkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDUgKi8KKwkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjYwIDYgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogNCAvIDggKyA1OTAsCkBAIC0yMzEsMTMgKzMwNCwxMyBAQAogCiBzdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NDhbXSA9IHsKIC8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLwotCTB4MDAsCTB4MjEsCTB4NjIsCTB4MDAsCTB4MWEsCTB4MjAsCTB4MjAsCTB4MjAsCisJMHgwMCwJMHg2MywJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwotCTB4YTEsCTB4NmUsCTB4MTgsCTB4NjUsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCisJMHg4MSwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCi0JMHgwMywJMHgwMCwJMHgwMCwJMHgwNiwJMHgwNiwJMHgyOCwJMHgxZSwJMHg4MiwKKwkweDAzLAkweDAwLAkweDAwLAkweDAxLAkweDAwLAkweDI4LAkweDFlLAkweDAwLAogLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIJcmVnMWMJcmVnMWQJcmVnMWUJcmVnMWYgKi8KLQkweDA3LAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwCisJMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAogc3RhdGljIGNvbnN0IF9fdTggc25fb3Y3NjYwW10JPSB7CkBAIC00NjksNiArNTQyLDUzIEBACiAvKgl7MHhiMSwgMHgyMSwgMHgwMSwgMHg4OCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgxMH0sICovCiAJe30KIH07CisKK3N0YXRpYyBjb25zdCBfX3U4IG92NzY0OF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGExLCAweDIxLCAweDc2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIHJlc2V0ICovCisJezB4YTEsIDB4MjEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDIxLCAweDAzLCAweGE0LCAweDMwLCAweDg4LCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgyMSwgMHgxMSwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YzEsIDB4MjEsIDB4MTMsIDB4YTAsIDB4MDQsIDB4ODQsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDIxLCAweDE3LCAweDFhLCAweDAyLCAweGJhLCAweGY0LCAweDEwfSwKKwl7MHhhMSwgMHgyMSwgMHgxYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MjEsIDB4MWYsIDB4NDEsIDB4YzAsIDB4ODAsIDB4ODAsIDB4MTB9LAorCXsweGQxLCAweDIxLCAweDIzLCAweGRlLCAweGEwLCAweDgwLCAweDMyLCAweDEwfSwKKwl7MHhkMSwgMHgyMSwgMHgyNywgMHhmZSwgMHhhMCwgMHgwMCwgMHg5MSwgMHgxMH0sCisJezB4ZDEsIDB4MjEsIDB4MmIsIDB4MDAsIDB4ODgsIDB4ODUsIDB4ODAsIDB4MTB9LAorCXsweGMxLCAweDIxLCAweDJmLCAweDljLCAweDAwLCAweGM0LCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgyMSwgMHg2MCwgMHhhNiwgMHg2MCwgMHg4OCwgMHgxMiwgMHgxMH0sCisJezB4ZDEsIDB4MjEsIDB4NjQsIDB4ODgsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MTB9LAorCXsweGQxLCAweDIxLCAweDY4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgyMSwgMHg2YywgMHgxMSwgMHgzMywgMHgyMiwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MjEsIDB4NzAsIDB4MTEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MTB9LAorCXsweGQxLCAweDIxLCAweDc0LCAweDIwLCAweDA2LCAweDAwLCAweGI1LCAweDEwfSwKKwl7MHhkMSwgMHgyMSwgMHg3OCwgMHg4YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4MjEsIDB4N2MsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MTB9LAorCisJezB4ZDEsIDB4MjEsIDB4MjEsIDB4ODYsIDB4MDAsIDB4ZGUsIDB4YTAsIDB4MTB9LAorLyoJezB4ZDEsIDB4MjEsIDB4MjUsIDB4ODAsIDB4MzIsIDB4ZmUsIDB4YTAsIDB4MTB9LCBqZm0gZG9uZSAqLworLyoJezB4ZDEsIDB4MjEsIDB4MjksIDB4MDAsIDB4OTEsIDB4MDAsIDB4ODgsIDB4MTB9LCBqZm0gZG9uZSAqLworCXsweGIxLCAweDIxLCAweDJkLCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKy8qLi4uKi8KKy8qCXsweGExLCAweDIxLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KKy8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KKwl7MHhhMSwgMHgyMSwgMHgxOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4MTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorLyoJezB4YTEsIDB4MjEsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCBqZm0gZG9uZSAqLworLyoJezB4YTEsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAgKiBHQUlOIC0gZGVmICovCisvKgl7MHhiMSwgMHgyMSwgMHgwMSwgMHg2YywgMHg2YywgMHgwMCwgMHgwMCwgMHgxMH0sICAqIEIgUiAtIGRlZjogODAgKi8KKy8qLi4uKi8KKwl7MHhhMSwgMHgyMSwgMHgxMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIENMS1JDICovCisvKgl7MHhhMSwgMHgyMSwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCisvKgl7MHhhMSwgMHgyMSwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCisvKgl7MHhhMSwgMHgyMSwgMHgyYSwgMHg5MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCisvKgl7MHhhMSwgMHgyMSwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCisvKgl7MHhiMSwgMHgyMSwgMHgwMSwgMHg2NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgxMH0sICAqIEIgUiAtIGRlZjogODAgKi8KKworCXt9Cit9OworCiBzdGF0aWMgY29uc3QgX191OCBvdjc2NjBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHJlc2V0IFNDQ0IgKi8KIC8qCQkoZGVsYXkgMjBtcykgKi8KQEAgLTU1Nyw2NCArNjc3LDYgQEAKIAl7MHhhMSwgMHgyMSwgMHgyYiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJe30KIH07Ci0vKgkgIHJlZyAweDA0CSAgcmVnIDB4MDcJCSAgIHJlZyAweDEwICovCi0vKiBleHBvID0gKENPTTEgJiAweDAyKSB8ICgoQUVDSEggJiAweDJmKSA8PCAxMCkgfCAoQUVDaCA8PCAyKSAqLwotCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhDMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMH0sCi0JezB4QzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDB9LAotCXsweEMxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwfSwKLQl7MHhBMSwgMHg2RSwgMHgzRiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDZFLCAweDNFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHgwNCwgMHgwMiwgMHhCMSwgMHgwMiwgMHgzOSwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDBDLCAweDAyLCAweDdGLCAweDAxLCAweEUwLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHgxMiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMywgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4MTYsIDB4ODUsIDB4NDAsIDB4NEEsIDB4NDAsIDB4MTB9LAotCXsweEMxLCAweDZFLCAweDFBLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHgxRCwgMHgwOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4MjMsIDB4MDAsIDB4QjAsIDB4MDAsIDB4OTQsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDI3LCAweDU4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHgyRCwgMHgxNCwgMHgzNSwgMHg2MSwgMHg4NCwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4MzEsIDB4QTIsIDB4QkQsIDB4RDgsIDB4RkYsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDM1LCAweDA2LCAweDFFLCAweDEyLCAweDAyLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHgzOSwgMHhBQSwgMHg1MywgMHgzNywgMHhENSwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4M0QsIDB4RjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDNFLCAweDAwLCAweDAwLCAweDgwLCAweDAzLCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHg0MiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QzEsIDB4NkUsIDB4NDYsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDRCLCAweDAyLCAweEVGLCAweDA4LCAweENELCAweDEwfSwKLQl7MHhEMSwgMHg2RSwgMHg0RiwgMHgwMCwgMHhEMCwgMHgwMCwgMHhBMCwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4NTMsIDB4MDEsIDB4QUEsIDB4MDEsIDB4NDAsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDVBLCAweDUwLCAweDA0LCAweDMwLCAweDAzLCAweDEwfSwKLQl7MHhBMSwgMHg2RSwgMHg1RSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4NUYsIDB4MTAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4MTB9LAotICAvKgl7MHhEMSwgMHg2RSwgMHg2MywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NkUsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotICogVGhpcyBpcyBjdXJyZW50bHkgc2V0dGluZyBhCi0gKiBibHVlIHRpbnQsIGFuZCBzb21lIHRoaW5ncyBtb3JlICwgaSBsZWF2ZSBpdCBoZXJlIGZvciBmdXR1cmUgdGVzdCBpZgotICogc29tZW5lIGlzIGhhdmluZyBwcm9ibGVtcyB3aXRoIGNvbG9yIG9uIHRoaXMgc2Vuc29yCi0JezB4RDEsIDB4NkUsIDB4NkIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDZFLCAweDZGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhDMSwgMHg2RSwgMHg3MywgMHgxMCwgMHg4MCwgMHhFQiwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4MUUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDZFLCAweDE1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhDMSwgMHg2RSwgMHgxNiwgMHg0MCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4MUQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDZFLCAweDA2LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHg2RSwgMHgwNywgMHhCNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4MTgsIDB4NkIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDZFLCAweDFELCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHg2RSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4NkUsIDB4MDcsIDB4QjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAgKi8KLQl7MHhDMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMH0sCi0JezB4QTEsIDB4NkUsIDB4MDYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBCcmlnaHQuLi4gKi8KLQl7MHhBMSwgMHg2RSwgMHgwNywgMHg2NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIEIuLiAqLwotCXsweEMxLCAweDZFLCAweDFBLCAweDAzLCAweDY1LCAweDkwLCAweDAwLCAweDEwfSwgLyogQnJpZ2h0L1dpdGVuLi4uLiovCi0vKgl7MHhDMSwgMHg2RSwgMHgxNiwgMHg0NSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgxMH0sICAqIEJyaWdodC9XaXRlbmUgKi8KLQl7fQotfTsKIAogc3RhdGljIGNvbnN0IF9fdTggcXRhYmxlNFtdID0gewogCTB4MDYsIDB4MDQsIDB4MDQsIDB4MDYsIDB4MDQsIDB4MDQsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDgsIDB4MDYsCkBAIC03NTcsOCArODE5LDYgQEAKIAogc3RhdGljIGludCBwcm9iZXNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCiAJaTJjX3cxKGdzcGNhX2RldiwgMHgwMiwgMCk7CQkJLyogc2Vuc29yIHdha2V1cCAqLwogCW1zbGVlcCgxMCk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgMHg2Nik7CQkJLyogR3BpbyBvbiAqLwpAQCAtNzcwLDggKzgzMCw3IEBACiAJICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9PSAweDAwCiAJICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9PSAweDAwKSB7CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3Igc245YzEwMlAgSFY3MTMxUiIpOwotCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7Ci0JCXJldHVybiBTRU5TT1JfSFY3MTMxUjsKKwkJcmV0dXJuIDA7CiAJfQogCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgMHglMDJ4IDB4JTAyeCAweCUwMngiLAogCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSwKQEAgLTgyNywxNyArODg2LDIwIEBACiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NDg6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDMpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweGFlKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4MjApOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKIAkJYnJlYWs7CiAvKmpmbTogZnJvbSB3aW4gdHJhY2UgKi8KIAljYXNlIFNFTlNPUl9PVjc2NjA6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2MCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOwotCQlicmVhazsKKwkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMjApIHsKKwkJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOworCQkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHgyMCk7CisJCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYwKTsKKwkJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJ1ICovCiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjEpOwpAQCAtOTIyLDYgKzk4NCwxMyBAQAogewogCWludCBpID0gMDsKIAorCWkyY193OChnc3BjYV9kZXYsIG92NzY0OF9zZW5zb3JfaW5pdFtpXSk7CisJaSsrOworLyogd2luOiBkYmxlIHJlc2V0ICovCisJaTJjX3c4KGdzcGNhX2Rldiwgb3Y3NjQ4X3NlbnNvcl9pbml0W2ldKTsJLyogcmVzZXQgKi8KKwlpKys7CisJbXNsZWVwKDIwKTsKKy8qIHdpbjogaTJjIHJlZyByZWFkIDAwLi43ZiAqLwogCXdoaWxlIChvdjc2NDhfc2Vuc29yX2luaXRbaV1bMF0pIHsKIAkJaTJjX3c4KGdzcGNhX2Rldiwgb3Y3NjQ4X3NlbnNvcl9pbml0W2ldKTsKIAkJaSsrOwpAQCAtOTYxLDE5ICsxMDMwLDE0IEBACiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlzZC0+Ymx1ZSA9IEJMVUVfQkFMQU5DRV9ERUY7CisJc2QtPnJlZCA9IFJFRF9CQUxBTkNFX0RFRjsKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPmFnX2NudCA9IC0xOworCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+aW5mcmFyZWQgPSBJTkZSQVJFRF9ERUY7CiAKLQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9PVjc2MzA6Ci0JY2FzZSBTRU5TT1JfT1Y3NjQ4OgotCWNhc2UgU0VOU09SX09WNzY2MDoKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFVVE9HQUlOX0lEWCk7Ci0JCWJyZWFrOwotCX0KLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjMwKQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9ICgxIDw8IFZGTElQX0lEWCk7Ci0KKwlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4MSw3ICsxMDQ1LDYgQEAKIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotLyoJY29uc3QgX191OCAqc245YzF4eDsgKi8KIAlfX3U4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OwogCV9fdTggcmVnRjE7CiAKQEAgLTExMDAsMzIgKzExNjMsMTMgQEAKIAlyZXR1cm4gZXhwbzsKIH0KIAotLyogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBzZW5zb3JzIG83Nnh4IG9ubHkgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodGNvbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgdmFsOwotCV9fdTggcmVnODRfZnVsbFsweDE1XTsKLQotCW1lbWNweShyZWc4NF9mdWxsLCByZWc4NCwgc2l6ZW9mIHJlZzg0X2Z1bGwpOwotCXZhbCA9IHNkLT5jb250cmFzdCAqIDB4MzAgLyBDT05UUkFTVF9NQVggKyAweDEwOwkvKiAxMC4uNDAgKi8KLQlyZWc4NF9mdWxsWzBdID0gKHZhbCArIDEpIC8gMjsJCS8qIHJlZCAqLwotCXJlZzg0X2Z1bGxbMl0gPSB2YWw7CQkJLyogZ3JlZW4gKi8KLQlyZWc4NF9mdWxsWzRdID0gKHZhbCArIDEpIC8gNTsJCS8qIGJsdWUgKi8KLQl2YWwgPSAoc2QtPmJyaWdodG5lc3MgLSBCUklHSFRORVNTX0RFRikgKiAweDEwCi0JCQkvIEJSSUdIVE5FU1NfTUFYOwotCXJlZzg0X2Z1bGxbMHgxMl0gPSB2YWwgJiAweDFmOwkJLyogNTowIHNpZ25lZCB2YWx1ZSAqLwotCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODRfZnVsbCwgc2l6ZW9mIHJlZzg0X2Z1bGwpOwotfQotCi0vKiBzZW5zb3IgIT0gb3Y3Nnh4ICovCiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGV4cG87CiAJX191OCBrMjsKIAotCWsyID0gc2QtPmJyaWdodG5lc3MgPj4gMTA7CisJazIgPSAoKGludCkgc2QtPmJyaWdodG5lc3MgLSAweDgwMDApID4+IDEwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA8PCA0OwpAQCAtMTE0NywzOCArMTE5MSw0OSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCBrMik7CisJcmVnX3cxKGdzcGNhX2RldiwgMHg5NiwgazIpOwkJLyogY29sb3IgbWF0cml4IFkgb2Zmc2V0ICovCiB9CiAKLS8qIHNlbnNvciAhPSBvdjc2eHggKi8KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBrMjsKLQlfX3U4IGNvbnRyYXN0W10gPSB7IDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDcsIDB4MDAgfTsKKwlfX3U4IGNvbnRyYXN0WzZdOwogCi0JazIgPSBzZC0+Y29udHJhc3Q7Ci0JY29udHJhc3RbMl0gPSBrMjsKLQljb250cmFzdFswXSA9IChrMiArIDEpID4+IDE7Ci0JY29udHJhc3RbNF0gPSAoazIgKyAxKSAvIDU7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDg0LCBjb250cmFzdCwgNik7CisJazIgPSBzZC0+Y29udHJhc3QgKiAweDMwIC8gKENPTlRSQVNUX01BWCArIDEpICsgMHgxMDsJLyogMTAuLjQwICovCisJY29udHJhc3RbMF0gPSAoazIgKyAxKSAvIDI7CQkvKiByZWQgKi8KKwljb250cmFzdFsxXSA9IDA7CisJY29udHJhc3RbMl0gPSBrMjsJCQkvKiBncmVlbiAqLworCWNvbnRyYXN0WzNdID0gMDsKKwljb250cmFzdFs0XSA9IChrMiArIDEpIC8gNTsJCS8qIGJsdWUgKi8KKwljb250cmFzdFs1XSA9IDA7CisJcmVnX3coZ3NwY2FfZGV2LCAweDg0LCBjb250cmFzdCwgc2l6ZW9mIGNvbnRyYXN0KTsKIH0KIAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBibHVlLCByZWQ7Ci0KLQlpZiAoc2QtPmNvbG9ycyA+PSAzMikgewotCQlyZWQgPSAzMiArIChzZC0+Y29sb3JzIC0gMzIpIC8gMjsKLQkJYmx1ZSA9IDY0IC0gc2QtPmNvbG9yczsKLQl9IGVsc2UgewotCQlyZWQgPSBzZC0+Y29sb3JzOwotCQlibHVlID0gMzIgKyAoMzIgLSBzZC0+Y29sb3JzKSAvIDI7CisJaW50IGksIHY7CisJX191OCByZWc4YVsxMl07CQkJLyogVSAmIFYgZ2FpbnMgKi8KKwlzdGF0aWMgX19zMTYgdXZbNl0gPSB7CQkvKiBzYW1lIGFzIHJlZzg0IGluIHNpZ25lZCBkZWNpbWFsICovCisJCS0yNCwgLTM4LCA2NCwJCS8qIFVSIFVHIFVCICovCisJCSA2MiwgLTUxLCAtOQkJLyogVlIgVkcgVkIgKi8KKwl9OworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJdiA9IHV2W2ldICogc2QtPmNvbG9ycyAvIENPTE9SX0RFRjsKKwkJcmVnOGFbaSAqIDJdID0gdjsKKwkJcmVnOGFbaSAqIDIgKyAxXSA9ICh2ID4+IDgpICYgMHgwZjsKIAl9Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgcmVkKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4OGEsIHJlZzhhLCBzaXplb2YgcmVnOGEpOworfQorCitzdGF0aWMgdm9pZCBzZXRyZWRibHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCBzZC0+cmVkKTsKIC8qCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIDMyKTsgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBibHVlKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzZC0+Ymx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTExOTUsMTIgKzEyNTAsMTggQEAKIAogc3RhdGljIHZvaWQgc2V0dmZsaXAoc3RydWN0IHNkICpzZCkKIHsKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjMwKQotCQlyZXR1cm47CiAJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LAkJCS8qIENPTU4gKi8KIAkJc2QtPnZmbGlwID8gMHg4MiA6IDB4MDIpOwogfQogCitzdGF0aWMgdm9pZCBzZXRpbmZyYXJlZChzdHJ1Y3Qgc2QgKnNkKQoreworLypmaXhtZTogZGlmZmVyZW50IHNlcXVlbmNlIGZvciBTdGFyQ2FtIENsaXAgYW5kIFN0YXJDYW0gMzcwaSAqLworLyogQ2xpcCAqLworCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHgwMiwJCQkvKiBncGlvICovCisJCXNkLT5pbmZyYXJlZCA/IDB4NjYgOiAweDY0KTsKK30KKwogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CkBAIC0xMjM1LDI4ICsxMjk2LDM5IEBACiAJCXJlZzE3ID0gMHhlMjsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgotCQlyZWcxNyA9IDB4YWU7CisJCXJlZzE3ID0gMHgyMDsKIAkJYnJlYWs7CiAvKmpmbTogZnJvbSB3aW4gdHJhY2UgKi8KIAljYXNlIFNFTlNPUl9PVjc2NjA6Ci0JCXJlZzE3ID0gMHhhMDsKLQkJYnJlYWs7CisJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKSB7CisJCQlyZWcxNyA9IDB4YTA7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocnUgKi8KIAlkZWZhdWx0OgogCQlyZWcxNyA9IDB4NjA7CiAJCWJyZWFrOwogCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCByZWcxNyk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgc245YzF4eFs3XSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc245YzF4eFs2XSk7CisvKiBzZXQgcmVnMSB3YXMgaGVyZSAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIHNuOWMxeHhbNV0pOwkvKiByZWQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCBzbjljMXh4WzddKTsJLyogZ3JlZW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzbjljMXh4WzZdKTsJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwogCXJlZ193KGdzcGNhX2RldiwgMHgyMCwgZ2FtbWFfZGVmLCBzaXplb2YgZ2FtbWFfZGVmKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX09WNzY2MDoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHg2MCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY2MDoKKwkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMjApIHsKKwkJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDUpOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJ1ICovCiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOwpAQCAtMTI2NSwxMCArMTMzNywxMCBAQAogCiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCWlmIChtb2RlKQotCQlyZWcxID0gMHg0NjsJLyogMzIwIGNsayA0OE1oeiAqLworCQlyZWcxID0gMHg0NjsJLyogMzIweDI0MDogY2xrIDQ4TWh6LCB2aWRlbyB0cmYgZW5hYmxlICovCiAJZWxzZQotCQlyZWcxID0gMHgwNjsJLyogNjQwIGNsayAyNE16ICovCi0JcmVnMTcgPSAweDYxOworCQlyZWcxID0gMHgwNjsJLyogNjQweDQ4MDogY2xrIDI0TWh6LCB2aWRlbyB0cmYgZW5hYmxlICovCisJcmVnMTcgPSAweDYxOwkJLyogMHg6MjA6IGVuYWJsZSBzZW5zb3IgY2xvY2sgKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFSOgogCQlodjcxMzFSX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKQEAgLTEyOTgsMjMgKzEzNzAsMjEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgogCQlvdjc2NDhfSW5pdFNlbnNvcihnc3BjYV9kZXYpOwotCQlyZWcxNyA9IDB4YTI7Ci0JCXJlZzEgPSAweDQ0OwotLyoJCWlmIChtb2RlKQotCQkJOwkJICogMzIweDIuLi4KLQkJZWxzZQotCQkJOwkJICogNjQweC4uLiAqLworCQlyZWcxNyA9IDB4MjE7CisvKgkJcmVnMSA9IDB4NDI7CQkgKiA0MiAtIDQ2PyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogLyoJY2FzZSBTRU5TT1JfT1Y3NjYwOiAqLwogCQlvdjc2NjBfSW5pdFNlbnNvcihnc3BjYV9kZXYpOwotCQlpZiAobW9kZSkgewotLyoJCQlyZWcxNyA9IDB4MjE7CSAqIDMyMCAqLwotLyoJCQlyZWcxID0gMHg0NDsgKi8KLS8qCQkJcmVnMSA9IDB4NDY7CShkb25lKSAqLworCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU045QzEyMCkgeworCQkJaWYgKG1vZGUpIHsJCS8qIDMyMHgyNDAgLSAxNjB4MTIwICovCisJCQkJcmVnMTcgPSAweGEyOworCQkJCXJlZzEgPSAweDQ0OwkvKiA0OCBNaHosIHZpZGVvIHRyZiBlbmVibGUgKi8KKwkJCX0KIAkJfSBlbHNlIHsKLQkJCXJlZzE3ID0gMHhhMjsJLyogNjQwICovCi0JCQlyZWcxID0gMHg0NDsKKwkJCXJlZzE3ID0gMHgyMjsKKwkJCXJlZzEgPSAweDA2OwkvKiAyNCBNaHosIHZpZGVvIHRyZiBlbmVibGUKKwkJCQkJICogaW52ZXJzZSBwb3dlciBkb3duICovCiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTM0MiwyMyArMTQxMiwxOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHJlZzE4KTsKIAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIHJlZzE3KTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCByZWcxKTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX01JMDM2MDoKLQljYXNlIFNFTlNPUl9NTzQwMDA6Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJCXNldGluZnJhcmVkKHNkKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlzZXR2ZmxpcChzZCk7Ci0JCS8qIGZhbGwgdGhydSAqLwotCWRlZmF1bHQ6CQkJLyogT1Y3Nnh4ICovCi0JCXNldGJyaWdodGNvbnQoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CiAJfQorCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNjksNiArMTQzNCw4IEBACiAJCXsgMHhhMSwgMHgxMSwgMHgwMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCXN0YXRpYyBjb25zdCBfX3U4IHN0b3BtaTAzNjBbXSA9CiAJCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCXN0YXRpYyBjb25zdCBfX3U4IHN0b3Bvdjc2NDhbXSA9CisJCXsgMHhhMSwgMHgyMSwgMHg3NiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCV9fdTggZGF0YTsKIAljb25zdCBfX3U4ICpzbjljMXh4OwogCkBAIC0xMzgyLDggKzE0NDksMTAgQEAKIAkJaTJjX3c4KGdzcGNhX2Rldiwgc3RvcG1pMDM2MCk7CiAJCWRhdGEgPSAweDI5OwogCQlicmVhazsKLQljYXNlIFNFTlNPUl9PVjc2MzA6CiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlpMmNfdzgoZ3NwY2FfZGV2LCBzdG9wb3Y3NjQ4KTsKKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlkYXRhID0gMHgyOTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE0MzcsNyArMTUwNiw3IEBACiAJCQkJZXhwb3RpbWVzID0gMDsKIAkJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwKIAkJCQkJCSAgICh1bnNpZ25lZCBpbnQpIGV4cG90aW1lcyk7Ci0JCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwkJCXNldHJlZGJsdWUoZ3NwY2FfZGV2KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTQ5MSwxOSArMTU2MCw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCQljYXNlIFNFTlNPUl9IVjcxMzFSOgotCQljYXNlIFNFTlNPUl9NSTAzNjA6Ci0JCWNhc2UgU0VOU09SX01PNDAwMDoKLQkJY2FzZSBTRU5TT1JfT002ODAyOgotCQkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CQkJLyogT1Y3Nnh4ICovCi0JCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUyMCwxOSArMTU3OCw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmNvbnRyYXN0ID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewotCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5TT1JfSFY3MTMxUjoKLQkJY2FzZSBTRU5TT1JfTUkwMzYwOgotCQljYXNlIFNFTlNPUl9NTzQwMDA6Ci0JCWNhc2UgU0VOU09SX09NNjgwMjoKLQkJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJCQkvKiBPVjc2eHggKi8KLQkJCXNldGJyaWdodGNvbnQoZ3NwY2FfZGV2KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2Miw2ICsxNjA5LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5ibHVlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0cmVkYmx1ZShnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5ibHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5yZWQgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRyZWRibHVlKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cmVkOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE1OTgsNiArMTY4MSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5pbmZyYXJlZCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGluZnJhcmVkKHNkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRpbmZyYXJlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5pbmZyYXJlZDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTE2MjAsMTIgKzE3MjEsMTUgQEAKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDI1KSwgQlNJKFNOOUMxMjAsIE1JMDM2MCwgMHg1ZCl9LAogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDJlKSwgQlNJKFNOOUMxMjAsIE9WNzY2MCwgMHgyMSl9LAorI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjUpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNyksIEJTSShTTjlDMTA1LCBNSTAzNjAsIDB4NWQpfSwKLQl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyOCksIEJTSShTTjlDMTA1LCBNSTAzNjAsIDB4NWQpfSwKICNlbmRpZgorCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzMwKSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAorCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDA0KSwgQlNJKFNOOUMxMDUsIE9WNzY2MCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDQwKSwgQlNJKFNOOUMxMDJQLCBIVjcxMzFSLCAweDExKX0sCiAvKiBidzYwMC5pbmY6CiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwNDApLCBCU0koU045QzEwMlAsIE1JMDM2MCwgMHg1ZCl9LCAqLwpAQCAtMTY0OSw3ICsxNzUzLDcgQEAKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTIzKSwgQlNJKFNOOUMxMTAsIFNhbnlvQ0NELCAweD8/KX0sICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMjgpLCBCU0koU045QzExMCwgT002ODAyLCAweDIxKX0sIC8qc245YzMyNT8qLwogLypidzYwMC5pbmY6Ki8KLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEyYSksIEJTSShTTjlDMTEwLCBPVjc2NDgsIDB4MjEpfSwgLypzbjljMzI1PyovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMmEpLCBCU0koU045QzEyMCwgT1Y3NjQ4LCAweDIxKX0sIC8qc245YzExMD8qLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTJjKSwgQlNJKFNOOUMxMTAsIE1PNDAwMCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTJlKSwgQlNJKFNOOUMxMTAsIE9WNzYzMCwgMHgyMSl9LAogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMmYpLCBCU0koU045QzExMCwgSUNNMTA1QywgMHg/Pyl9LCAqLwpAQCAtMTY1Nyw4ICsxNzYxLDggQEAKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzMCksIEJTSShTTjlDMTIwLCBNSTAzNjAsIDB4NWQpfSwKICNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTM4KSwgQlNJKFNOOUMxMjAsIE1PNDAwMCwgMHgyMSl9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhKSwgQlNJKFNOOUMxMjAsIE9WNzY0OCwgMHgyMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCi0vKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYSksIEJTSShTTjlDMTIwLCBPVjc2NDgsIDB4Pz8pfSwgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiksIEJTSShTTjlDMTIwLCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYyksIEJTSShTTjlDMTIwLCBIVjcxMzFSLCAweDExKX0sCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzZSksIEJTSShTTjlDMTIwLCBPVjc2MzAsIDB4Pz8pfSwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggYmNhMTA2Yy4uOTQyZjA0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKQEAgLTEyNCw3ICsxMjQsNyBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CiAJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAogCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDggKyA1OTAsCkBAIC02MzMsMTAgKzYzMywxMCBAQAogCXNkLT5zdWJ0eXBlID0gaWQtPmRyaXZlcl9pbmZvOwogCWlmIChzZC0+c3VidHlwZSAhPSBMb2dpdGVjaENsaWNrU21hcnQzMTApIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwotCQljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAl9IGVsc2UgewogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHNpZl9tb2RlIC8gc2l6ZW9mIHNpZl9tb2RlWzBdOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0KIAlzZC0+cWluZGV4ID0gNTsKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwppbmRleCBlMjk5NTRjLi44MmUzZTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwpAQCAtMzQsNiArMzQsOCBAQAogCXVuc2lnbmVkIHNob3J0IGNvbnRyYXN0OwogCV9fdTggYnJpZ2h0bmVzczsKIAlfX3U4IGNvbG9yczsKKwlfX3U4IGJsdWVfYmFsYW5jZTsKKwlfX3U4IHJlZF9iYWxhbmNlOwogCiAJY2hhciBzdWJ0eXBlOwogI2RlZmluZSBBcm93YW5hMzAwS0NNT1NDYW1lcmEgMApAQCAtNTIsNiArNTQsMTAgQEAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBNWV9CUklHSFRORVNTIDAKQEAgLTYzLDcgKzY5LDcgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEyNywKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDYzLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKQEAgLTc1LDkgKzgxLDkgQEAKIAkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSAgICA9ICJDb250cmFzdCIsCiAJCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAweGZmZmYsCisJCS5tYXhpbXVtID0gNjQ3MjUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGFhMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gNjQ3MjUsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LApAQCAtOTEsMTQgKzk3LDQyIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSA2MywKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDMxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDIwLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Y29sb3JzLAogCSAgICAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAogCX0sCisjZGVmaW5lIE1ZX0JMVUVfQkFMQU5DRSAzCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJsdWUgQmFsYW5jZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Ymx1ZV9iYWxhbmNlLAorCSAgICAuZ2V0ID0gc2RfZ2V0Ymx1ZV9iYWxhbmNlLAorCX0sCisjZGVmaW5lIE1ZX1JFRF9CQUxBTkNFIDQKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJSZWQgQmFsYW5jZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCisJICAgIC5nZXQgPSBzZF9nZXRyZWRfYmFsYW5jZSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU1BDQTUwMSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIsCkBAIC0xODIyLDI5ICsxODU2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLwotc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3UxNiByZXEsCS8qIGJSZXF1ZXN0ICovCi0JCQlfX3UxNiBpbmRleCwJLyogd0luZGV4ICovCi0JCQlfX3UxNiBsZW5ndGgpCS8qIHdMZW5ndGggKDEgb3IgMiBvbmx5KSAqLwotewotCWludCByZXQ7Ci0KLQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAwOwotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlyZXEsCi0JCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCTAsCQkvKiB2YWx1ZSAqLwotCQkJaW5kZXgsCi0JCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbmd0aCwKLQkJCTUwMCk7CQkJLyogdGltZW91dCAqLwotCWlmIChyZXQgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgInJlZ19yZWFkIGVyciAlZCIsIHJldCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCkgKyBnc3BjYV9kZXYtPnVzYl9idWZbMF07Ci19CiAKIHN0YXRpYyBpbnQgd3JpdGVfdmVjdG9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCWNvbnN0IF9fdTE2IGRhdGFbXVszXSkKQEAgLTE4NjksMTggKzE4ODAsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDExLCBzZC0+YnJpZ2h0bmVzcyk7CiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgxMiwgc2QtPmJyaWdodG5lc3MpOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTMsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IGJyaWdodG5lc3M7Ci0KLQlicmlnaHRuZXNzID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgxMSwgMik7Ci0Jc2QtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzIDw8IDE7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTE4OTUsNyArMTg5OSw2IEBACiAKIHN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLS8qCXNwY2E1MHgtPmNvbnRyYXN0ID0gMHhhYTAxOyAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMTkwNywxMSArMTkxMCwyMCBAQAogCiBzdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworfQorCitzdGF0aWMgdm9pZCBzZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCXNkLT5jb2xvcnMgPSByZWdfcmVhZChnc3BjYV9kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDBjLCAyKTsKLS8qCXNkLT5odWUgPSAocmVnX3JlYWQoZ3NwY2FfZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgxMywgKi8KLS8qCQkJMikgJiAweEZGKSA8PCA4OyAqLworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTEsIHNkLT5ibHVlX2JhbGFuY2UpOworfQorCitzdGF0aWMgdm9pZCBzZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgxMywgc2QtPnJlZF9iYWxhbmNlKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpAQCAtMTkzMCw2ICsxOTQyLDE0IEBACiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbTVlfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbG9ycyA9IHNkX2N0cmxzW01ZX0NPTE9SXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKIAlzd2l0Y2ggKHNkLT5zdWJ0eXBlKSB7CiAJY2FzZSBBcm93YW5hMzAwS0NNT1NDYW1lcmE6CiAJY2FzZSBTbWlsZUludGxDYW1lcmE6CkBAIC0xOTQ4LDE1ICsxOTY4LDE3IEBACiAJCQlnb3RvIGVycm9yOwogCQlicmVhazsKIAl9CisJUERFQlVHKERfU1RSRUFNLCAiSW5pdGlhbGl6aW5nIFNQQ0E1MDEgZmluaXNoZWQiKTsKIAlyZXR1cm4gMDsKIGVycm9yOgogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KLXN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCBtb2RlOwogCiAJc3dpdGNoIChzZC0+c3VidHlwZSkgewogCWNhc2UgVGhyZWVDb21Ib21lQ29ubmVjdExpdGU6CkBAIC0xOTc2LDE0ICsxOTk4LDYgQEAKIAkJLyogR2VuZXJpYyA1MDEgb3BlbiBkYXRhICovCiAJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDFfb3Blbl9kYXRhKTsKIAl9Ci0JUERFQlVHKERfU1RSRUFNLCAiSW5pdGlhbGl6aW5nIFNQQ0E1MDEgZmluaXNoZWQiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCBtb2RlOwogCiAJLyogbWVtb3JpemUgdGhlIHdhbnRlZCBwaXhlbCBmb3JtYXQgKi8KIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0yMTEzLDYgKzIxMjcsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJsdWVfYmFsYW5jZSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJsdWVfYmFsYW5jZShnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5ibHVlX2JhbGFuY2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnJlZF9iYWxhbmNlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0cmVkX2JhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5yZWRfYmFsYW5jZTsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKaW5kZXggODk1YjlmZS4uMmEzM2EyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKQEAgLTU5LDcgKzU5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU1BDQTUwNSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDY0NWVlOWQuLjk2ZTI1MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU1BDQTUwNSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDYzZWM5MDIuLmJlNWQ3NDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtNjIsNyArNjIsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9TUENBNTA4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiAzIC8gMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggYzNkZTRlNC4uM2M5Mjg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTMyLDIyICszMiwyMiBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JX191MTYgY29udHJhc3Q7CQkJLyogcmV2NzJhIG9ubHkgKi8KLSNkZWZpbmUgQ09OVFJBU1RfTUlOIDB4MDAwMAotI2RlZmluZSBDT05UUkFTVF9ERUYgMHgyMDAwCi0jZGVmaW5lIENPTlRSQVNUX01BWCAweDNmZmYKLQogCV9fdTE2IGV4cG9zdXJlOwkJCS8qIHJldjEyYSBvbmx5ICovCiAjZGVmaW5lIEVYUE9TVVJFX01JTiAxCiAjZGVmaW5lIEVYUE9TVVJFX0RFRiAyMDAKICNkZWZpbmUgRVhQT1NVUkVfTUFYICg0MDk1IC0gOTAwKSAvKiBzZWUgc2V0X2V4cG9zdXJlICovCiAKKwlfX3U4IGNvbnRyYXN0OwkJCS8qIHJldjcyYSBvbmx5ICovCisjZGVmaW5lIENPTlRSQVNUX01JTiAweDAwCisjZGVmaW5lIENPTlRSQVNUX0RFRiAweDIwCisjZGVmaW5lIENPTlRSQVNUX01BWCAweDNmCisKIAlfX3U4IGJyaWdodG5lc3M7CQkvKiByZXY3MmEgb25seSAqLwogI2RlZmluZSBCUklHSFRORVNTX01JTiAwCi0jZGVmaW5lIEJSSUdIVE5FU1NfREVGIDMyCi0jZGVmaW5lIEJSSUdIVE5FU1NfTUFYIDYzCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDB4MjAKKyNkZWZpbmUgQlJJR0hUTkVTU19NQVggMHgzZgogCi0JX191OCB3aGl0ZTsJCQkvKiByZXYxMmEgb25seSAqLworCV9fdTggd2hpdGU7CiAjZGVmaW5lIFdISVRFX01JTiAxCiAjZGVmaW5lIFdISVRFX0RFRiAweDQwCiAjZGVmaW5lIFdISVRFX01BWCAweDdmCkBAIC03Myw3ICs3Myw3IEBACiAjZGVmaW5lIEFHX0NOVF9TVEFSVCAxMwogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmXzAxMmFfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmXzAxMmFfbW9kZVtdID0gewogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwLApAQCAtOTYsNyArOTYsNyBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmXzA3MmFfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmXzA3MmFfbW9kZVtdID0gewogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1NHQlJHOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwLApAQCAtMTQ2LDk4ICsxNDYsNyBAQAogI2RlZmluZSBTUENBNTYxX1NOQVBCSVQgMHgyMAogI2RlZmluZSBTUENBNTYxX1NOQVBDVFJMIDB4NDAKIAotc3RhdGljIHZvaWQgcmVnX3dfdmFsKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJCSAgICAgIDAsCQkvKiByZXF1ZXN0ICovCi0JCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7Ci0JUERFQlVHKERfVVNCTywgInJlZyB3cml0ZTogMHglMDJ4OjB4JTAyeCIsIGluZGV4LCB2YWx1ZSk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZTogZXJyb3IgJWQiLCByZXQpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJY29uc3QgX191MTYgZGF0YVtdWzJdKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgaTsKLQotCWkgPSAwOwotCXdoaWxlIChkYXRhW2ldWzFdICE9IDApIHsKLQkJcmVnX3dfdmFsKGRldiwgZGF0YVtpXVsxXSwgZGF0YVtpXVswXSk7Ci0JCWkrKzsKLQl9Ci19Ci0KLS8qIHJlYWQgJ2xlbicgYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCi1zdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgX191MTYgaW5kZXgsIF9fdTE2IGxlbmd0aCkKLXsKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJMCwJCQkvKiByZXF1ZXN0ICovCi0JCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCTAsCQkJLyogdmFsdWUgKi8KLQkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbmd0aCwgNTAwKTsKLX0KLQotc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgICAgX191MTYgaW5kZXgsIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQotewotCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKLQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJMCwJCQkvKiByZXF1ZXN0ICovCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkwLAkJCS8qIHZhbHVlICovCi0JCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHZhbGV1ciwgX191MTYgcmVnKQotewotCWludCByZXRyeSA9IDYwOwotCV9fdTggRGF0YUxvdzsKLQlfX3U4IERhdGFIaWdodDsKLQotCURhdGFMb3cgPSB2YWxldXI7Ci0JRGF0YUhpZ2h0ID0gdmFsZXVyID4+IDg7Ci0JcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDEsIHJlZyk7Ci0JcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDUsIERhdGFMb3cpOwotCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4ODAwLCBEYXRhSGlnaHQpOwotCXdoaWxlIChyZXRyeS0tKSB7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAzLCAxKTsKLQkJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWZbMF0pCi0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3UxNiByZWcsIF9fdTggbW9kZSkKLXsKLQlpbnQgcmV0cnkgPSA2MDsKLQlfX3U4IHZhbHVlOwotCV9fdTggdmFsbHNiOwotCi0JcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDQsIDB4OTIpOwotCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4ODAxLCByZWcpOwotCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4ODAyLCAobW9kZSB8IDB4MDEpKTsKLQlkbyB7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAzLCAxKTsKLQkJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWZbMF0pCi0JCQlicmVhazsKLQl9IHdoaWxlICgtLXJldHJ5KTsKLQlpZiAocmV0cnkgPT0gMCkKLQkJcmV0dXJuIC0xOwotCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAwLCAxKTsKLQl2YWx1ZSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4ODgwNSwgMSk7Ci0JdmFsbHNiID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCXJldHVybiAoKGludCkgdmFsdWUgPDwgOCkgfCB2YWxsc2I7Ci19Ci0KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTYxX2luaXRfZGF0YVtdWzJdID0geworc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGExW11bMl0gPSB7CiAJezB4MDAwMCwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwogCXsweDAwMDEsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KIAl7MHgwMDAwLCAweDgxMTJ9LAkvKiBTb21lIGtpbmQgb2YgcmVzZXQgKi8KQEAgLTI0Nyw0NCArMTU2LDI2IEBACiAJezB4MDAwMSwgMHg4MTE4fSwJLyogQ29uZiBzZW5zb3IgKi8KIAl7MHgwMDkyLCAweDg4MDR9LAkvKiBJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZSAqLwogCXsweDAwMTAsIDB4ODgwMn0sCS8qIDB4ODh4eCByZWdpc3RlcnMsIHNvIEkgd29uJ3QgKi8KLQkvKioqKioqKioqKioqKioqLwogCXsweDAwMGQsIDB4ODgwNX0sCS8qIHNlbnNvciBkZWZhdWx0IHNldHRpbmcgKi8KLQl7MHgwMDAxLCAweDg4MDF9LAkvKiAxIDwtIDB4MGQgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMTgsIDB4ODgwNX0sCi0JezB4MDAwMiwgMHg4ODAxfSwJLyogMiA8LSAweDE4ICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDY1LCAweDg4MDV9LAotCXsweDAwMDQsIDB4ODgwMX0sCS8qIDQgPC0gMHgwMSAweDY1ICovCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDIxLCAweDg4MDV9LAotCXsweDAwMDUsIDB4ODgwMX0sCS8qIDUgPC0gMHgyMSAqLwotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDBhYSwgMHg4ODA1fSwKLQl7MHgwMDA3LCAweDg4MDF9LAkvKiA3IDwtIDB4YWEgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMDQsIDB4ODgwNX0sCi0JezB4MDAyMCwgMHg4ODAxfSwJLyogMHgyMCA8LSAweDE1IDB4MDQgKi8KLQl7MHgwMDE1LCAweDg4MDB9LAotCXsweDAwMDIsIDB4ODgwNX0sCi0JezB4MDAzOSwgMHg4ODAxfSwJLyogMHgzOSA8LSAweDAyICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDEwLCAweDg4MDV9LAotCXsweDAwMzUsIDB4ODgwMX0sCS8qIDB4MzUgPC0gMHgxMCAqLwotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDA0OSwgMHg4ODA1fSwKLQl7MHgwMDA5LCAweDg4MDF9LAkvKiAweDA5IDwtIDB4MTAgMHg0OSAqLwotCXsweDAwMTAsIDB4ODgwMH0sCi0JezB4MDAwYiwgMHg4ODA1fSwKLQl7MHgwMDI4LCAweDg4MDF9LAkvKiAweDI4IDwtIDB4MGIgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGYsIDB4ODgwNX0sCi0JezB4MDAzYiwgMHg4ODAxfSwJLyogMHgzYiA8LSAweDBmICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwM2MsIDB4ODgwMX0sCS8qIDB4M2MgPC0gMHgwMCAqLwotCXsweDAwMDAsIDB4ODgwMH0sCi0JLyoqKioqKioqKioqKioqKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3UxNiByZXY3MmFfaW5pdF9zZW5zb3IxW11bMl0gPSB7CisJCQkJLyogbXMtd2luIHZhbHVlcyAqLworCXsweDAwMDEsIDB4MDAxOH0sCS8qIDB4MDEgPC0gMHgwZCAqLworCXsweDAwMDIsIDB4MDA2NX0sCS8qIDB4MDIgPC0gMHgxOCAqLworCXsweDAwMDQsIDB4MDEyMX0sCS8qIDB4MDQgPC0gMHgwMTY1ICovCisJezB4MDAwNSwgMHgwMGFhfSwJLyogMHgwNSA8LSAweDIxICovCisJezB4MDAwNywgMHgwMDA0fSwJLyogMHgwNyA8LSAweGFhICovCisJezB4MDAyMCwgMHgxNTAyfSwJLyogMHgyMCA8LSAweDE1MDQgKi8KKwl7MHgwMDM5LCAweDAwMTB9LAkvKiAweDM5IDwtIDB4MDIgKi8KKwl7MHgwMDM1LCAweDAwNDl9LAkvKiAweDM1IDwtIDB4MTAgKi8KKwl7MHgwMDA5LCAweDEwMGJ9LAkvKiAweDA5IDwtIDB4MTA0OSAqLworCXsweDAwMjgsIDB4MDAwZn0sCS8qIDB4MjggPC0gMHgwYiAqLworCXsweDAwM2IsIDB4MDAzY30sCS8qIDB4M2IgPC0gMHgwZiAqLworCXsweDAwM2MsIDB4MDAwMH0sCS8qIDB4M2MgPC0gMHgwMCAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEyW11bMl0gPSB7CiAJezB4MDAxOCwgMHg4NjAxfSwJLyogUGl4ZWwvbGluZSBzZWxlY3Rpb24gZm9yIGNvbG9yIHNlcGFyYXRpb24gKi8KIAl7MHgwMDAwLCAweDg2MDJ9LAkvKiBPcHRpY2FsIGJsYWNrIGxldmVsIGZvciB1c2VyIHNldHRpbmcgKi8KIAl7MHgwMDYwLCAweDg2MDR9LAkvKiBPcHRpY2FsIGJsYWNrIGhvcml6b250YWwgb2Zmc2V0ICovCkBAIC0zMDksMTAgKzIwMCwxMSBAQAogCXsweDAwMDQsIDB4ODYxMn0sCS8qIEdyIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwMDcsIDB4ODYxM30sCS8qIEIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCiAJezB4MDAwMCwgMHg4NjE0fSwJLyogR2Igb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDA4YywgMHg4NjUxfSwJLyogUiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDA4YywgMHg4NjUyfSwJLyogR3IgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLwotCXsweDAwYjUsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLwotCXsweDAwOGMsIDB4ODY1NH0sCS8qIEdiIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KKy8qIGZyb20gbXMtd2luICovCisJezB4MDAzNSwgMHg4NjUxfSwJLyogUiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCisJezB4MDA0MCwgMHg4NjUyfSwJLyogR3IgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDAwNWYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXsweDAwNDAsIDB4ODY1NH0sCS8qIEdiIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDAyLCAweDg1MDJ9LAkvKiBNYXhpbXVtIGF2ZXJhZ2UgYml0IHJhdGUgc3R1ZmYgKi8KIAogCXsweDAwMTEsIDB4ODgwMn0sCkBAIC0zMjQsMjkgKzIxNiwyMiBAQAogCiAJezB4MDAwMiwgMHg4NjVifSwJLyogSG9yaXpvbnRhbCBvZmZzZXQgZm9yIHZhbGlkIHBpeGVscyAqLwogCXsweDAwMDMsIDB4ODY1Y30sCS8qIFZlcnRpY2FsIG9mZnNldCBmb3IgdmFsaWQgbGluZXMgKi8KLQkvKioqKioqKioqKioqKioqLy8qIHNlbnNvciBhY3RpdmUgKi8KLQl7MHgwMDAzLCAweDg4MDF9LAkvKiAweDAzIDwtIDB4MDEgMHgyMSAvLzI4OSAqLwotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDF9LAkvKiAweDA0IDwtIDB4MDEgMHg2NSAvLzM1NyAqLwotCXsweDAwNjUsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDA1LCAweDg4MDF9LAkvKiAweDA1IDwtIDB4MmYgKi8KLQl7MHgwMDJmLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwNiwgMHg4ODAxfSwJLyogMHgwNiA8LSAwICovCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGEsIDB4ODgwMX0sCS8qIDB4MGEgPC0gMiAqLwotCXsweDAwMDIsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA5LCAweDg4MDF9LAkvKiAweDA5IDwtIDB4MTA2MSAqLwotCXsweDAwNjEsIDB4ODgwNX0sCi0JezB4MDAxMCwgMHg4ODAwfSwKLQl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDM1IDwtMHgxNCAqLwotCXsweDAwMTQsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBfX3UxNiByZXY3MmFfaW5pdF9zZW5zb3IyW11bMl0gPSB7CisJCQkJLyogbXMtd2luIHZhbHVlcyAqLworCXsweDAwMDMsIDB4MDEyMX0sCS8qIDB4MDMgPC0gMHgwMSAweDIxIC8vMjg5ICovCisJezB4MDAwNCwgMHgwMTY1fSwJLyogMHgwNCA8LSAweDAxIDB4NjUgLy8zNTcgKi8KKwl7MHgwMDA1LCAweDAwMmZ9LAkvKiAweDA1IDwtIDB4MmYgKi8KKwl7MHgwMDA2LCAweDAwMDB9LAkvKiAweDA2IDwtIDAgKi8KKwl7MHgwMDBhLCAweDAwMDJ9LAkvKiAweDBhIDwtIDIgKi8KKwl7MHgwMDA5LCAweDEwNjF9LAkvKiAweDA5IDwtIDB4MTA2MSAqLworCXsweDAwMzUsIDB4MDAxNH0sCS8qIDB4MzUgPC0gMHgxNCAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEzW11bMl0gPSB7CiAJezB4MDAzMCwgMHg4MTEyfSwJLyogSVNPIGFuZCBkcm9wIHBhY2tldCBlbmFibGUgKi8KKy8qZml4bWU6IHNob3VsZCBzdG9wIGhlcmUqLwogCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8/ICovCiAJezB4MDAwOSwgMHg4MTE4fSwJLyogRW5hYmxlIHNlbnNvciBhbmQgc2V0IHN0YW5kYnkgKi8KIAl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCkBAIC00MzQsNyArMzE5LDYgQEAKIAl7fQogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKiogUUMgRXhwcmVzcyBldGNoMiBzdHVmZiAqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBjb25zdCBfX3UxNiBQYjEwMF8xbWFwODMwMFtdWzJdID0gewogCS8qIHJlZywgdmFsdWUgKi8KQEAgLTUxNSwyMiArMzk5LDExMiBAQAogCXt9CiB9OwogCi1zdGF0aWMgdm9pZCBzZW5zb3JfbWFwd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICAgIGNvbnN0IF9fdTE2IHNlbnNvcm1hcFtdWzJdKQorc3RhdGljIHZvaWQgcmVnX3dfdmFsKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQogewotCWludCBpID0gMDsKLQlfX3U4IHVzYnZhbFsyXTsKKwlpbnQgcmV0OwogCi0Jd2hpbGUgKHNlbnNvcm1hcFtpXVswXSkgewotCQl1c2J2YWxbMF0gPSBzZW5zb3JtYXBbaV1bMV07Ci0JCXVzYnZhbFsxXSA9IHNlbnNvcm1hcFtpXVsxXSA+PiA4OwotCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JtYXBbaV1bMF0sIHVzYnZhbCwgMik7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAwLAkJLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCA1MDApOworCVBERUJVRyhEX1VTQk8sICJyZWcgd3JpdGU6IDB4JTAyeDoweCUwMngiLCBpbmRleCwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGU6IGVycm9yICVkIiwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdmVjdG9yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IF9fdTE2IGRhdGFbXVsyXSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IGk7CisKKwlpID0gMDsKKwl3aGlsZSAoZGF0YVtpXVsxXSAhPSAwKSB7CisJCXJlZ193X3ZhbChkZXYsIGRhdGFbaV1bMV0sIGRhdGFbaV1bMF0pOwogCQlpKys7CiAJfQogfQorCisvKiByZWFkICdsZW4nIGJ5dGVzIHRvIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworc3RhdGljIHZvaWQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIF9fdTE2IGluZGV4LCBfX3UxNiBsZW5ndGgpCit7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCQkJLyogcmVxdWVzdCAqLworCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLAkJCS8qIHZhbHVlICovCisJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW5ndGgsIDUwMCk7Cit9CisKKy8qIHdyaXRlICdsZW4nIGJ5dGVzIGZyb20gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgICBfX3UxNiBpbmRleCwgX191MTYgbGVuKQoreworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkwLAkJCS8qIHJlcXVlc3QgKi8KKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsCQkJLyogdmFsdWUgKi8KKwkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191MTYgdmFsdWUsIF9fdTE2IHJlZykKK3sKKwlpbnQgcmV0cnkgPSA2MDsKKworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4ODAxLCByZWcpOworCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4ODA1LCB2YWx1ZSk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDAsIHZhbHVlID4+IDgpOworCWRvIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDMsIDEpOworCQlpZiAoIWdzcGNhX2Rldi0+dXNiX2J1ZlswXSkKKwkJCXJldHVybjsKKwl9IHdoaWxlICgtLXJldHJ5KTsKK30KKworc3RhdGljIGludCBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHJlZywgX191OCBtb2RlKQoreworCWludCByZXRyeSA9IDYwOworCV9fdTggdmFsdWU7CisKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODgwNCwgMHg5Mik7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDEsIHJlZyk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg4MDIsIG1vZGUgfCAweDAxKTsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAzLCAxKTsKKwkJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWZbMF0pIHsKKwkJCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAwLCAxKTsKKwkJCXZhbHVlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDUsIDEpOworCQkJcmV0dXJuICgoaW50KSB2YWx1ZSA8PCA4KSB8IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJfQorCX0gd2hpbGUgKC0tcmV0cnkpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2Vuc29yX21hcHdyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICBjb25zdCBfX3UxNiAoKnNlbnNvcm1hcClbMl0pCit7CisJd2hpbGUgKCgqc2Vuc29ybWFwKVswXSkgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAoKnNlbnNvcm1hcClbMV07CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9ICgqc2Vuc29ybWFwKVsxXSA+PiA4OworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCAoKnNlbnNvcm1hcClbMF0sIDIpOworCQlzZW5zb3JtYXArKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NlbnNvcl83MmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgIGNvbnN0IF9fdTE2ICgqc2Vuc29yKVsyXSkKK3sKKwl3aGlsZSAoKCpzZW5zb3IpWzBdKSB7CisJCWkyY193cml0ZShnc3BjYV9kZXYsICgqc2Vuc29yKVsxXSwgKCpzZW5zb3IpWzBdKTsKKwkJc2Vuc29yKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpbml0XzE2MXJldjEyQShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0vKglzZW5zb3JfcmVzZXQoZ3NwY2FfZGV2KTsJKG5vdCBpbiB3aW4pICovCiAJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTU2MV8xNjFyZXYxMkFfZGF0YTEpOwogCXNlbnNvcl9tYXB3cml0ZShnc3BjYV9kZXYsIFBiMTAwXzFtYXA4MzAwKTsKIC8qZml4bWU6IHNob3VsZCBiZSBpbiBzZF9zdGFydCovCkBAIC01OTgsNDkgKzU3Miw2OCBAQAogc3RhdGljIGludCBzZF9pbml0XzcyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJUERFQlVHKERfU1RSRUFNLCAiQ2hpcCByZXZpc2lvbjogMDcyYSIpOwotCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1NjFfaW5pdF9kYXRhKTsKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMSk7CisJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjEpOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGEyKTsKKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMik7CisJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfZGF0YTMpOwogCXJldHVybiAwOwogfQogCisvKiByZXYgNzJhIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJX191OCB2YWx1ZTsKKworCXZhbHVlID0gc2QtPmJyaWdodG5lc3M7CisKKwkvKiBvZmZzZXRzIGZvciB3aGl0ZSBiYWxhbmNlICovCisJcmVnX3dfdmFsKGRldiwgMHg4NjExLCB2YWx1ZSk7CQkvKiBSICovCisJcmVnX3dfdmFsKGRldiwgMHg4NjEyLCB2YWx1ZSk7CQkvKiBHciAqLworCXJlZ193X3ZhbChkZXYsIDB4ODYxMywgdmFsdWUpOwkJLyogQiAqLworCXJlZ193X3ZhbChkZXYsIDB4ODYxNCwgdmFsdWUpOwkJLyogR2IgKi8KK30KKworc3RhdGljIHZvaWQgc2V0d2hpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiB3aGl0ZTsKKwlfX3U4IGJsdWUsIHJlZDsKKwlfX3UxNiByZWc7CisKKwkvKiB0cnkgdG8gZW11bGF0ZSBNUy13aW4gYXMgcG9zc2libGUgKi8KKwl3aGl0ZSA9IHNkLT53aGl0ZTsKKwlyZWQgPSAweDIwICsgd2hpdGUgKiAzIC8gODsKKwlibHVlID0gMHg5MCAtIHdoaXRlICogNSAvIDg7CisJaWYgKHNkLT5jaGlwX3JldmlzaW9uID09IFJldjAxMkEpIHsKKwkJcmVnID0gMHg4NjE0OworCX0gZWxzZSB7CisJCXJlZyA9IDB4ODY1MTsKKwkJcmVkICs9IHNkLT5jb250cmFzdCAtIDB4MjA7CisJCWJsdWUgKz0gc2QtPmNvbnRyYXN0IC0gMHgyMDsKKwl9CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCByZWcsIHJlZCk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCByZWcgKyAyLCBibHVlKTsKK30KKwogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JX191OCBsb3diOworCV9fdTggdmFsdWU7CiAKLQlzd2l0Y2ggKHNkLT5jaGlwX3JldmlzaW9uKSB7Ci0JY2FzZSBSZXYwNzJBOgotCQlsb3diID0gc2QtPmNvbnRyYXN0ID4+IDg7Ci0JCXJlZ193X3ZhbChkZXYsIDB4ODY1MSwgbG93Yik7Ci0JCXJlZ193X3ZhbChkZXYsIDB4ODY1MiwgbG93Yik7Ci0JCXJlZ193X3ZhbChkZXYsIDB4ODY1MywgbG93Yik7Ci0JCXJlZ193X3ZhbChkZXYsIDB4ODY1NCwgbG93Yik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IHsKLS8qCWNhc2UgUmV2MDEyQTogeyAqLwotCQlzdGF0aWMgY29uc3QgX191OCBSZWc4MzkxW10gPQotCQkJeyAweDkyLCAweDMwLCAweDIwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwIH07CisJaWYgKHNkLT5jaGlwX3JldmlzaW9uICE9IFJldjA3MkEpCisJCXJldHVybjsKKwl2YWx1ZSA9IHNkLT5jb250cmFzdCArIDB4MjA7CiAKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzkxLCBSZWc4MzkxLCA4KTsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzkwLCBSZWc4MzkxLCA4KTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci19Ci0KLS8qIHJldjEyYSBvbmx5ICovCi1zdGF0aWMgdm9pZCBzZXR3aGl0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHdoaXRlOwotCV9fdTggcmVnODYxNCwgcmVnODYxNjsKLQotCXdoaXRlID0gc2QtPndoaXRlOwotCS8qIHRyeSB0byBlbXVsYXRlIE1TLXdpbiBhcyBwb3NzaWJsZSAqLwotCXJlZzg2MTYgPSAweDkwIC0gd2hpdGUgKiA1IC8gODsKLQlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODYxNiwgcmVnODYxNik7Ci0JcmVnODYxNCA9IDB4MjAgKyB3aGl0ZSAqIDMgLyA4OwotCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4NjE0LCByZWc4NjE0KTsKKwkvKiBnYWlucyBmb3Igd2hpdGUgYmFsYW5jZSAqLworCXNldHdoaXRlKGdzcGNhX2Rldik7CisvKglyZWdfd192YWwoZGV2LCAweDg2NTEsIHZhbHVlKTsJCSAqIFIgLSBkb25lIGJ5IHNldHdoaXRlICovCisJcmVnX3dfdmFsKGRldiwgMHg4NjUyLCB2YWx1ZSk7CQkvKiBHciAqLworLyoJcmVnX3dfdmFsKGRldiwgMHg4NjUzLCB2YWx1ZSk7CQkgKiBCIC0gZG9uZSBieSBzZXR3aGl0ZSAqLworCXJlZ193X3ZhbChkZXYsIDB4ODY1NCwgdmFsdWUpOwkJLyogR2IgKi8KIH0KIAogLyogcmV2IDEyYSBvbmx5ICovCkBAIC02NDksNyArNjQyLDYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGV4cG87CiAJaW50IGNsb2NrX2RpdmlkZXI7Ci0JX191OCBkYXRhWzJdOwogCiAJLyogUmVnaXN0ZXIgMHg4MzA5IGNvbnRyb2xzIGV4cG9zdXJlIGZvciB0aGUgc3BjYTU2MSwKIAkgICB0aGUgYmFzaWMgZXhwb3N1cmUgc2V0dGluZyBnb2VzIGZyb20gMS0yMDQ3LCB3aGVyZSAxIGlzIGNvbXBsZXRlbHkKQEAgLTY3MywyMCArNjY1LDE5IEBACiAJCWNsb2NrX2RpdmlkZXIgPSAzOwogCX0KIAlleHBvIHw9IGNsb2NrX2RpdmlkZXIgPDwgMTE7Ci0JZGF0YVswXSA9IGV4cG87Ci0JZGF0YVsxXSA9IGV4cG8gPj4gODsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDgzMDksIGRhdGEsIDIpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IGV4cG87CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gZXhwbyA+PiA4OworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMwOSwgMik7CiB9CiAKIC8qIHJldiAxMmEgb25seSAqLwogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggZGF0YVsyXTsKIAotCWRhdGFbMF0gPSBzZC0+Z2FpbjsKLQlkYXRhWzFdID0gMDsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDgzMzUsIGRhdGEsIDIpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHNkLT5nYWluOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzM1LCAyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNzAyLDkgKzY5Myw5IEBACiBzdGF0aWMgaW50IHNkX3N0YXJ0XzEyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCBDbGNrID0gMHg4YTsgLyogbG93ZXIgMHg4WCB2YWx1ZXMgbGVhZCB0byBmcHMgPiAzMCAqLwotCV9fdTggUmVnODMwN1tdID0geyAweGFhLCAweDAwIH07CiAJaW50IG1vZGU7CisJc3RhdGljIGNvbnN0IF9fdTggUmVnODM5MVs4XSA9CisJCXsweDkyLCAweDMwLCAweDIwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAwfTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlpZiAobW9kZSA8PSAxKSB7CkBAIC03MTYsMTQgKzcwNywyMSBAQAogCQkgKiBpcyBzdWZmaWNpZW50IHRvIHB1c2ggcmF3IGZyYW1lcyBhdCB+MjBmcHMgKi8KIAkJcmVnX3dfdmFsKGRldiwgMHg4NTAwLCBtb2RlKTsKIAl9CQkvKiAtLSBxcUBrdWt1LmV1Lm9yZyAqLwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMwNywgUmVnODMwNywgMik7Ci0JcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg3MDAsIENsY2spOworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhhYTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAweDAwOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMwNywgMik7CisJLyogY2xvY2sgLSBsb3dlciAweDhYIHZhbHVlcyBsZWFkIHRvIGZwcyA+IDMwICovCisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg3MDAsIDB4OGEpOwogCQkJCQkvKiAweDhmIDB4ODUgMHgyNyBjbG9jayAqLwogCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4MTEyLCAweDFlIHwgMHgyMCk7CiAJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg1MGIsIDB4MDMpOwotCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgUmVnODM5MSwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgMHg4MzkxLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCAweDgzOTAsIDgpOwogCXNldHdoaXRlKGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKy8qCXNldGdhaW4oZ3NwY2FfZGV2KTsJCSovCiAJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc1MCw2ICs3NDgsOSBAQAogCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KIAlyZWdfd192YWwoZGV2LCAweDg3MDAsIENsY2spOwkvKiAweDI3IGNsb2NrICovCiAJcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKy8qCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsJICogZml4bWU6IGJhZCB2YWx1ZXMgKi8KKwlzZXR3aGl0ZShnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CkBAIC03OTEsNyArNzkyLDYgQEAKIAlfX3U4IGx1bWFfbWVhbiA9IDExMDsKIAlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKIAlfX3U4IHNwcmluZyA9IDQ7Ci0JX191OCByZWc4MzM5WzJdOwogCiAJaWYgKHNkLT5hZ19jbnQgPCAwKQogCQlyZXR1cm47CkBAIC04MzQsMTMgKzgzNCwxMyBAQAogCiAJCQlpZiAoZ2FpbkcgPiAweDNmKQogCQkJCWdhaW5HID0gMHgzZjsKLQkJCWVsc2UgaWYgKGdhaW5HIDwgNCkKKwkJCWVsc2UgaWYgKGdhaW5HIDwgMykKIAkJCQlnYWluRyA9IDM7CiAJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBnYWluRywgMHgzNSk7CiAKLQkJCWlmIChleHBvdGltZXMgPj0gMHgwMjU2KQorCQkJaWYgKGV4cG90aW1lcyA+IDB4MDI1NikKIAkJCQlleHBvdGltZXMgPSAweDAyNTY7Ci0JCQllbHNlIGlmIChleHBvdGltZXMgPCA0KQorCQkJZWxzZSBpZiAoZXhwb3RpbWVzIDwgMykKIAkJCQlleHBvdGltZXMgPSAzOwogCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZXhwb3RpbWVzIHwgcGl4ZWxjbGssIDB4MDkpOwogCQl9CkBAIC04NDgsMTMgKzg0OCwxMyBAQAogCWNhc2UgUmV2MDEyQToKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDgzMzAsIDIpOwogCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdID4gMHgwOCkgewotCQkJcmVnODMzOVswXSA9ICsrc2QtPmV4cG8xMmE7Ci0JCQlyZWc4MzM5WzFdID0gMDsKLQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMzOSwgcmVnODMzOSwgMik7CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSArK3NkLT5leHBvMTJhOworCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMzOSwgMik7CiAJCX0gZWxzZSBpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDwgMHgwMikgewotCQkJcmVnODMzOVswXSA9IC0tc2QtPmV4cG8xMmE7Ci0JCQlyZWc4MzM5WzFdID0gMDsKLQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMzOSwgcmVnODMzOSwgMik7CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAtLXNkLT5leHBvMTJhOworCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKKwkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMzOSwgMik7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtODY3LDggKzg2Nyw4IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Jc3dpdGNoIChkYXRhWzBdKSB7Ci0JY2FzZSAwOgkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwlzd2l0Y2ggKGRhdGFbMF0pIHsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KKwljYXNlIDA6CQkJCQkvKiBzdGFydCBvZiBmcmFtZSAqLwogCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKIAkJCQkJZGF0YSwgMCk7CiAJCWRhdGEgKz0gU1BDQTU2MV9PRkZTRVRfREFUQTsKQEAgLTg5MCw4ICs4OTAsNyBAQAogCQkJCQkJZnJhbWUsIGRhdGEsIGxlbik7CiAJCX0KIAkJcmV0dXJuOwotCWNhc2UgMHhmZjoJCS8qIGRyb3AgKi8KLS8qCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KKwljYXNlIDB4ZmY6CQkJLyogZHJvcCAoZW1wdHkgbXBhY2tldHMpICovCiAJCXJldHVybjsKIAl9CiAJZGF0YSsrOwpAQCAtOTAwLDU1ICs4OTksNiBAQAogfQogCiAvKiByZXYgNzJhIG9ubHkgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IHZhbHVlOwotCi0JdmFsdWUgPSBzZC0+YnJpZ2h0bmVzczsKLQlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODYxMSwgdmFsdWUpOwotCXJlZ193X3ZhbChnc3BjYV9kZXYtPmRldiwgMHg4NjEyLCB2YWx1ZSk7Ci0JcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDg2MTMsIHZhbHVlKTsKLQlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODYxNCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgdG90OwotCi0JdG90ID0gMDsKLQlyZWdfcihnc3BjYV9kZXYsIDB4ODYxMSwgMSk7Ci0JdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4ODYxMiwgMSk7Ci0JdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4ODYxMywgMSk7Ci0JdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4ODYxNCwgMSk7Ci0JdG90ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlzZC0+YnJpZ2h0bmVzcyA9IHRvdCA+PiAyOwotfQotCi0vKiByZXY3MmEgb25seSAqLwotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiB0b3Q7Ci0KLQl0b3QgPSAwOwotCXJlZ19yKGdzcGNhX2RldiwgMHg4NjUxLCAxKTsKLQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCXJlZ19yKGdzcGNhX2RldiwgMHg4NjUyLCAxKTsKLQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCXJlZ19yKGdzcGNhX2RldiwgMHg4NjUzLCAxKTsKLQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCXJlZ19yKGdzcGNhX2RldiwgMHg4NjU0LCAxKTsKLQl0b3QgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCXNkLT5jb250cmFzdCA9IHRvdCA8PCA2OwotCVBERUJVRyhEX0NPTkYsICJnZXQgY29udHJhc3QgJWQiLCBzZC0+Y29udHJhc3QpOwotfQotCi0vKiByZXYgNzJhIG9ubHkgKi8KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05NjMsNyArOTEzLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtOTgzLDcgKzkzMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtMTAwNiw3ICs5NTQsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiByZXYxMmEgb25seSAqLwogc3RhdGljIGludCBzZF9zZXR3aGl0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMTIxLDYgKzEwNjgsMTkgQEAKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0gewogCXsKKwkgICAgeworCQkuaWQgPSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIldoaXRlIEJhbGFuY2UiLAorCQkubWluaW11bSA9IFdISVRFX01JTiwKKwkJLm1heGltdW0gPSBXSElURV9NQVgsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSBXSElURV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXR3aGl0ZSwKKwkgICAgLmdldCA9IHNkX2dldHdoaXRlLAorCX0sCisJewogCSAgIHsKIAkJLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKaW5kZXggZDlkNjQ5MS4uNjBkZTlhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCkBAIC00MjQsMTAgKzQyNCw4IEBACiAKIAkJLyogYmVnaW5uaW5nIG9mIHRoZSBmcmFtZSAqLwogI2RlZmluZSBTVEtIRFJTWiAxMgotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJCWRhdGEgKyBTVEtIRFJTWiwgbGVuIC0gU1RLSERSU1opOwotI3VuZGVmIFNUS0hEUlNaCi0JCXJldHVybjsKKwkJZGF0YSArPSBTVEtIRFJTWjsKKwkJbGVuIC09IFNUS0hEUlNaOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRhZDM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIFVTQl9TVFYwNlhYCisJdHJpc3RhdGUgIlNUVjA2WFggVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24KKwkgIHRoZSBTVCBTVFYwNlhYIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3N0djA2eHguCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai0kKENPTkZJR19VU0JfU1RWMDZYWCkgKz0gZ3NwY2Ffc3R2MDZ4eC5vCisKK2dzcGNhX3N0djA2eHgtb2JqcyA6PSBzdHYwNnh4Lm8gXAorCQkgICAgICBzdHYwNnh4X3Z2NjQxMC5vIFwKKwkJICAgICAgc3R2MDZ4eF9oZGNzLm8gXAorCQkgICAgICBzdHYwNnh4X3BiMDEwMC5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhMDIxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVhbi1GcmVkcmljIENsZXJlLCBOaWtvbGFzIFppbW1lcm1hbm4sIEdlb3JnIEFjaGVyCisgKgkJICAgICAgTWFyayBDYXZlLUF5bGFuZCwgQ2FybG8gRSBQcmVseiwgRGljayBTdHJlZWZsYW5kCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVHV1a2thIFRvaXZvbmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFAvTiA4NjEwMzc6ICAgICAgU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAxMDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAyMDogU2Vuc29yIFBob3RvYml0IFBCMTAwICBBU0lDIFNUVjA2MDAtMSAtIFF1aWNrQ2FtIEV4cHJlc3MKKyAqIFAvTiA4NjEwNTU6ICAgICAgU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIExFR08gY2FtCisgKiBQL04gODYxMDc1LTAwNDA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQworICogUC9OIDk2MTE3OS0wNzAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYwMiAgIC0gRGV4eGEgV2ViQ2FtIFVTQgorICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCisgKi8KKworI2luY2x1ZGUgInN0djA2eHhfc2Vuc29yLmgiCisKK01PRFVMRV9BVVRIT1IoIkVyaWsgQW5kcsOpbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVFYwNlhYIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZHVtcF9icmlkZ2U7CitzdGF0aWMgaW50IGR1bXBfc2Vuc29yOworCitpbnQgc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc3RydWN0IHNkICpzZCwgdTE2IGFkZHJlc3MsIHUxNiBpMmNfZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCXU4IGxlbiA9IChpMmNfZGF0YSA+IDB4ZmYpID8gMiA6IDE7CisKKwlidWZbMF0gPSBpMmNfZGF0YSAmIDB4ZmY7CisJYnVmWzFdID0gKGkyY19kYXRhID4+IDgpICYgMHhmZjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDA0LCAweDQwLCBhZGRyZXNzLCAwLCBidWYsIGxlbiwKKwkJCSAgICAgIFNUVjA2WFhfVVJCX01TR19USU1FT1VUKTsKKworCisJUERFQlVHKERfQ09ORiwgIldyaXR0ZW4gMHgleCB0byBhZGRyZXNzIDB4JXgsIHN0YXR1czogJWQiLAorCSAgICAgICBpMmNfZGF0YSwgYWRkcmVzcywgZXJyKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgc3R2MDZ4eF9yZWFkX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1MTYgYWRkcmVzcywgdTggKmkyY19kYXRhKQoreworCWludCBlcnI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHhjMCwgYWRkcmVzcywgMCwgYnVmLCAxLAorCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOworCisJKmkyY19kYXRhID0gYnVmWzBdOworCisJUERFQlVHKERfQ09ORiwgIlJlYWQgMHgleCBmcm9tIGFkZHJlc3MgMHgleCwgc3RhdHVzICVkIiwKKwkgICAgICAgKmkyY19kYXRhLCBhZGRyZXNzLCBlcnIpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKKy8qIFdyYXBzIHRoZSBub3JtYWwgd3JpdGUgc2Vuc29yIGJ5dGVzIC8gd29yZHMgZnVuY3Rpb25zIGZvciB3cml0aW5nIGEKKyAgIHNpbmdsZSB2YWx1ZSAqLworaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIHU4IGFkZHJlc3MsIHUxNiB2YWx1ZSkKK3sKKwlpZiAoc2QtPnNlbnNvci0+aTJjX2xlbiA9PSAyKSB7CisJCXUxNiBkYXRhWzJdID0geyBhZGRyZXNzLCB2YWx1ZSB9OworCQlyZXR1cm4gc3R2MDZ4eF93cml0ZV9zZW5zb3Jfd29yZHMoc2QsIGRhdGEsIDEpOworCX0gZWxzZSB7CisJCXU4IGRhdGFbMl0gPSB7IGFkZHJlc3MsIHZhbHVlIH07CisJCXJldHVybiBzdHYwNnh4X3dyaXRlX3NlbnNvcl9ieXRlcyhzZCwgZGF0YSwgMSk7CisJfQorfQorCitzdGF0aWMgaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX2ZpbmlzaChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBlcnIgPSAwOworCisJaWYgKElTXzg1MChzZCkpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwkJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCisJCS8qIFF1aWNrYW0gV2ViIG5lZWRzIGFuIGV4dHJhIHBhY2tldCAqLworCQlidWZbMF0gPSAwOworCQllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTcwNCwgMCwgYnVmLCAxLAorCQkJCSAgICAgIFNUVjA2WFhfVVJCX01TR19USU1FT1VUKTsKKwl9CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX2J5dGVzKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1OCBsZW4pCit7CisJaW50IGVyciwgaSwgajsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCVBERUJVRyhEX1VTQk8sICJJMkM6IENvbW1hbmQgYnVmZmVyIGNvbnRhaW5zICVkIGVudHJpZXMiLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisJCS8qIEJ1aWxkIHRoZSBjb21tYW5kIGJ1ZmZlciAqLworCQltZW1zZXQoYnVmLCAwLCBJMkNfQlVGRkVSX0xFTkdUSCk7CisJCWZvciAoaiA9IDA7IGogPCBJMkNfTUFYX0JZVEVTICYmIGkgPCBsZW47IGorKywgaSsrKSB7CisJCQlidWZbal0gPSBkYXRhWzIqaV07CisJCQlidWZbMHgxMCArIGpdID0gZGF0YVsyKmkrMV07CisJCQlQREVCVUcoRF9VU0JPLCAiSTJDOiBXcml0aW5nIDB4JTAyeCB0byByZWcgMHglMDJ4IiwKKwkJCWRhdGFbMippKzFdLCBkYXRhWzIqaV0pOworCQl9CisJCWJ1ZlsweDIwXSA9IHNkLT5zZW5zb3ItPmkyY19hZGRyOworCQlidWZbMHgyMV0gPSBqIC0gMTsgLyogTnVtYmVyIG9mIGNvbW1hbmRzIHRvIHNlbmQgLSAxICovCisJCWJ1ZlsweDIyXSA9IEkyQ19XUklURV9DTUQ7CisJCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJICAgICAgMHgwNCwgMHg0MCwgMHgwNDAwLCAwLCBidWYsCisJCQkJICAgICAgSTJDX0JVRkZFUl9MRU5HVEgsCisJCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOworCQkJCSAgICAgIGlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICByZXR1cm4gc3R2MDZ4eF93cml0ZV9zZW5zb3JfZmluaXNoKHNkKTsKK30KKworaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX3dvcmRzKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHUxNiAqZGF0YSwgdTggbGVuKQoreworCWludCBlcnIsIGksIGo7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwlQREVCVUcoRF9VU0JPLCAiSTJDOiBDb21tYW5kIGJ1ZmZlciBjb250YWlucyAlZCBlbnRyaWVzIiwgbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisJCS8qIEJ1aWxkIHRoZSBjb21tYW5kIGJ1ZmZlciAqLworCQltZW1zZXQoYnVmLCAwLCBJMkNfQlVGRkVSX0xFTkdUSCk7CisJCWZvciAoaiA9IDA7IGogPCBJMkNfTUFYX1dPUkRTICYmIGkgPCBsZW47IGorKywgaSsrKSB7CisJCQlidWZbal0gPSBkYXRhWzIqaV07CisJCQlidWZbMHgxMCArIGogKiAyXSA9IGRhdGFbMippKzFdOworCQkJYnVmWzB4MTAgKyBqICogMiArIDFdID0gZGF0YVsyKmkrMV0gPj4gODsKKwkJCVBERUJVRyhEX1VTQk8sICJJMkM6IFdyaXRpbmcgMHglMDR4IHRvIHJlZyAweCUwMngiLAorCQkJCWRhdGFbMippKzFdLCBkYXRhWzIqaV0pOworCQl9CisJCWJ1ZlsweDIwXSA9IHNkLT5zZW5zb3ItPmkyY19hZGRyOworCQlidWZbMHgyMV0gPSBqIC0gMTsgLyogTnVtYmVyIG9mIGNvbW1hbmRzIHRvIHNlbmQgLSAxICovCisJCWJ1ZlsweDIyXSA9IEkyQ19XUklURV9DTUQ7CisJCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJMHgwNCwgMHg0MCwgMHgwNDAwLCAwLCBidWYsCisJCQkJSTJDX0JVRkZFUl9MRU5HVEgsCisJCQkJU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiBzdHYwNnh4X3dyaXRlX3NlbnNvcl9maW5pc2goc2QpOworfQorCitpbnQgc3R2MDZ4eF9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLCB1MTYgKnZhbHVlKQoreworCWludCBlcnI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX0kyQ19GTFVTSCwgc2QtPnNlbnNvci0+aTJjX2ZsdXNoKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIENsZWFyIG1lbSAqLworCW1lbXNldChidWYsIDAsIEkyQ19CVUZGRVJfTEVOR1RIKTsKKworCWJ1ZlswXSA9IGFkZHJlc3M7CisJYnVmWzB4MjBdID0gc2QtPnNlbnNvci0+aTJjX2FkZHI7CisJYnVmWzB4MjFdID0gMDsKKworCS8qIFJlYWQgSTJDIHJlZ2lzdGVyICovCisJYnVmWzB4MjJdID0gSTJDX1JFQURfQ01EOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTQwMCwgMCwgYnVmLCBJMkNfQlVGRkVSX0xFTkdUSCwKKwkJCSAgICAgIFNUVjA2WFhfVVJCX01TR19USU1FT1VUKTsKKwlpZiAoZXJyIDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJJMkMgUmVhZDogZXJyb3Igd3JpdGluZyBhZGRyZXNzOiAlZCIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4YzAsIDB4MTQxMCwgMCwgYnVmLCBzZC0+c2Vuc29yLT5pMmNfbGVuLAorCQkJICAgICAgU1RWMDZYWF9VUkJfTVNHX1RJTUVPVVQpOworCWlmIChzZC0+c2Vuc29yLT5pMmNfbGVuID09IDIpCisJCSp2YWx1ZSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJZWxzZQorCQkqdmFsdWUgPSBidWZbMF07CisKKwlQREVCVUcoRF9VU0JPLCAiSTJDOiBSZWFkIDB4JXggZnJvbSBhZGRyZXNzIDB4JXgsIHN0YXR1czogJWQiLAorCSAgICAgICAqdmFsdWUsIGFkZHJlc3MsIGVycik7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworLyogRHVtcHMgYWxsIGJyaWRnZSByZWdpc3RlcnMgKi8KK3N0YXRpYyB2b2lkIHN0djA2eHhfZHVtcF9icmlkZ2Uoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaTsKKwl1OCBkYXRhLCBidWY7CisKKwlpbmZvKCJEdW1waW5nIGFsbCBzdHYwNnh4IGJyaWRnZSByZWdpc3RlcnMiKTsKKwlmb3IgKGkgPSAweDE0MDA7IGkgPCAweDE2MGY7IGkrKykgeworCQlzdHYwNnh4X3JlYWRfYnJpZGdlKHNkLCBpLCAmZGF0YSk7CisKKwkJaW5mbygiUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4IiwgZGF0YSwgaSk7CisJfQorCisJZm9yIChpID0gMHgxNDAwOyBpIDwgMHgxNjBmOyBpKyspIHsKKwkJc3R2MDZ4eF9yZWFkX2JyaWRnZShzZCwgaSwgJmRhdGEpOworCQlidWYgPSBkYXRhOworCisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBpLCAweGZmKTsKKwkJc3R2MDZ4eF9yZWFkX2JyaWRnZShzZCwgaSwgJmRhdGEpOworCQlpZiAoZGF0YSA9PSAweGZmKQorCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlIiwgaSk7CisJCWVsc2UgaWYgKGRhdGEgIT0gYnVmKQorCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlLCIKKwkJCSAgICAgImJ1dCBvbmx5IHBhcnRpYWxseSIsIGkpOworCQllbHNlCisJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQtb25seSIsIGkpOworCisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBpLCBidWYpOworCX0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHN0djA2eHhfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBlcnI7CisKKwlQREVCVUcoRF9QUk9CRSwgIkluaXRpYWxpemluZyBjYW1lcmEiKTsKKworCS8qIExldCB0aGUgdXNiIGluaXQgc2V0dGxlIGZvciBhIGJpdAorCSAgIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBpbml0aWFsaXphdGlvbiAqLworCW1zbGVlcCgyNTApOworCisJZXJyID0gc2QtPnNlbnNvci0+aW5pdChzZCk7CisKKwlpZiAoZHVtcF9zZW5zb3IpCisJCXNkLT5zZW5zb3ItPmR1bXAoc2QpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKKy8qIFN0YXJ0IHRoZSBjYW1lcmEgKi8KK3N0YXRpYyBpbnQgc3R2MDZ4eF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBlcnI7CisKKwkvKiBQcmVwYXJlIHRoZSBzZW5zb3IgZm9yIHN0YXJ0ICovCisJZXJyID0gc2QtPnNlbnNvci0+c3RhcnQoc2QpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIFN0YXJ0IGlzb2Nocm9ub3VzIHN0cmVhbWluZyAqLworCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfSVNPX0VOQUJMRSwgMSk7CisKK291dDoKKwlpZiAoZXJyIDwgMCkKKwkJUERFQlVHKERfU1RSRUFNLCAiU3RhcnRpbmcgc3RyZWFtIGZhaWxlZCIpOworCWVsc2UKKwkJUERFQlVHKERfU1RSRUFNLCAiU3RhcnRlZCBzdHJlYW1pbmciKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwNnh4X3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIHN0b3AgSVNPLXN0cmVhbWluZyAqLworCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfSVNPX0VOQUJMRSwgMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gc2QtPnNlbnNvci0+c3RvcChzZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJaWYgKGVyciA8IDApCisJCVBERUJVRyhEX1NUUkVBTSwgIkZhaWxlZCB0byBzdG9wIHN0cmVhbSIpOworCWVsc2UKKwkJUERFQlVHKERfU1RSRUFNLCAiU3RvcHBlZCBzdHJlYW1pbmciKTsKK30KKworLyoKKyAqIEFuYWx5c2UgYW4gVVNCIHBhY2tldCBvZiB0aGUgZGF0YSBzdHJlYW0gYW5kIHN0b3JlIGl0IGFwcHJvcHJpYXRlbHkuCisgKiBFYWNoIHBhY2tldCBjb250YWlucyBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgY2h1bmtzLiBFYWNoIGNodW5rIGhhcworICogMi1ieXRlcyBpZGVudGlmaWNhdGlvbiwgZm9sbG93ZWQgYnkgMi1ieXRlcyB0aGF0IGRlc2NyaWJlIHRoZSBjaHVuaworICogbGVuZ3RoLiBLbm93bi9ndWVzc2VkIGNodW5rIGlkZW50aWZpY2F0aW9ucyBhcmU6CisgKiA4MDAxLzgwMDUvQzAwMS9DMDA1IC0gQmVnaW4gbmV3IGZyYW1lCisgKiA4MDAyLzgwMDYvQzAwMi9DMDA2IC0gRW5kIGZyYW1lCisgKiAwMjAwLzQyMDAgICAgICAgICAgIC0gQ29udGFpbnMgYWN0dWFsIGltYWdlIGRhdGEsIGJheWVyIG9yIGNvbXByZXNzZWQKKyAqIDAwMDUgICAgICAgICAgICAgICAgLSAxMSBieXRlcyBvZiB1bmtub3duIGRhdGEKKyAqIDAxMDAgICAgICAgICAgICAgICAgLSAyIGJ5dGVzIG9mIHVua25vd24gZGF0YQorICogVGhlIDAwMDUgYW5kIDAxMDAgY2h1bmtzIHNlZW0gdG8gYXBwZWFyIG9ubHkgaW4gY29tcHJlc3NlZCBzdHJlYW0uCisgKi8KK3N0YXRpYyB2b2lkIHN0djA2eHhfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJUERFQlVHKERfUEFDSywgIlBhY2tldCBvZiBsZW5ndGggJWQgYXJyaXZlZCIsIGxlbik7CisKKwkvKiBBIHBhY2tldCBtYXkgY29udGFpbiBzZXZlcmFsIGZyYW1lcworCSAgIGxvb3AgdW50aWwgdGhlIHdob2xlIHBhY2tldCBpcyByZWFjaGVkICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgaWQsIGNodW5rX2xlbjsKKworCQlpZiAobGVuIDwgNCkgeworCQkJUERFQlVHKERfUEFDSywgIlBhY2tldCBpcyBzbWFsbGVyIHRoYW4gNCBieXRlcyIpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2FwdHVyZSB0aGUgaWQgKi8KKwkJaWQgPSAoZGF0YVswXSA8PCA4KSB8IGRhdGFbMV07CisKKwkJLyogQ2FwdHVyZSB0aGUgY2h1bmsgbGVuZ3RoICovCisJCWNodW5rX2xlbiA9IChkYXRhWzJdIDw8IDgpIHwgZGF0YVszXTsKKwkJUERFQlVHKERfUEFDSywgIkNodW5rIGlkOiAleCwgbGVuZ3RoOiAlZCIsIGlkLCBjaHVua19sZW4pOworCisJCWRhdGEgKz0gNDsKKwkJbGVuIC09IDQ7CisKKwkJaWYgKGxlbiA8IGNodW5rX2xlbikgeworCQkJUERFQlVHKERfRVJSLCAiVVJCIHBhY2tldCBsZW5ndGggaXMgc21hbGxlciIKKwkJCQkiIHRoYW4gdGhlIHNwZWNpZmllZCBjaHVuayBsZW5ndGgiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSAweDAyMDA6CisJCWNhc2UgMHg0MjAwOgorCQkJUERFQlVHKERfUEFDSywgIkZyYW1lIGRhdGEgcGFja2V0IGRldGVjdGVkIik7CisKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEsIGNodW5rX2xlbik7CisJCQlicmVhazsKKworCQljYXNlIDB4ODAwMToKKwkJY2FzZSAweDgwMDU6CisJCWNhc2UgMHhjMDAxOgorCQljYXNlIDB4YzAwNToKKwkJCVBERUJVRyhEX1BBQ0ssICJTdGFydGluZyBuZXcgZnJhbWUiKTsKKworCQkJLyogQ3JlYXRlIGEgbmV3IGZyYW1lLCBjaHVuayBsZW5ndGggc2hvdWxkIGJlIHplcm8gKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKKwkJCQkJZnJhbWUsIGRhdGEsIDApOworCisJCQlpZiAoY2h1bmtfbGVuKQorCQkJCVBERUJVRyhEX0VSUiwgIkNodW5rIGxlbmd0aCBpcyAiCisJCQkJCSAgICAgICJub24temVybyBvbiBhIFNPRiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDgwMDI6CisJCWNhc2UgMHg4MDA2OgorCQljYXNlIDB4YzAwMjoKKwkJCVBERUJVRyhEX1BBQ0ssICJFbmQgb2YgZnJhbWUgZGV0ZWN0ZWQiKTsKKworCQkJLyogQ29tcGxldGUgdGhlIGxhc3QgZnJhbWUgKGlmIGFueSkgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisKKwkJCWlmIChjaHVua19sZW4pCisJCQkJUERFQlVHKERfRVJSLCAiQ2h1bmsgbGVuZ3RoIGlzICIKKwkJCQkJICAgICAgIm5vbi16ZXJvIG9uIGEgRU9GIik7CisJCQlicmVhazsKKworCQljYXNlIDB4MDAwNToKKwkJCVBERUJVRyhEX1BBQ0ssICJDaHVuayAweDAwNSBkZXRlY3RlZCIpOworCQkJLyogVW5rbm93biBjaHVuayB3aXRoIDExIGJ5dGVzIG9mIGRhdGEsCisJCQkgICBvY2N1cnMganVzdCBiZWZvcmUgZW5kIG9mIGVhY2ggZnJhbWUKKwkJCSAgIGluIGNvbXByZXNzZWQgbW9kZSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAxMDA6CisJCQlQREVCVUcoRF9QQUNLLCAiQ2h1bmsgMHgwMTAwIGRldGVjdGVkIik7CisJCQkvKiBVbmtub3duIGNodW5rIHdpdGggMiBieXRlcyBvZiBkYXRhLAorCQkJICAgb2NjdXJzIDItMyB0aW1lcyBwZXIgVVNCIGludGVycnVwdCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlQREVCVUcoRF9QQUNLLCAiVW5rbm93biBjaHVuayAlZCBkZXRlY3RlZCIsIGlkKTsKKwkJCS8qIFVua25vd24gY2h1bmsgKi8KKwkJfQorCQlkYXRhICAgICs9IGNodW5rX2xlbjsKKwkJbGVuICAgICAtPSBjaHVua19sZW47CisJfQorfQorCitzdGF0aWMgaW50IHN0djA2eHhfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc3R2MDZ4eF9jb25maWcsCisJLmluaXQgPSBzdHYwNnh4X2luaXQsCisJLnN0YXJ0ID0gc3R2MDZ4eF9zdGFydCwKKwkuc3RvcE4gPSBzdHYwNnh4X3N0b3BOLAorCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4KK307CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc3R2MDZ4eF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCBjYW0gKmNhbTsKKworCVBERUJVRyhEX1BST0JFLCAiQ29uZmlndXJpbmcgY2FtZXJhIik7CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5lcGFkZHIgPSBTVFZfSVNPQ19FTkRQT0lOVF9BRERSOworCXNkLT5kZXNjID0gc2RfZGVzYzsKKwlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2QtPmRlc2M7CisKKwlpZiAoZHVtcF9icmlkZ2UpCisJCXN0djA2eHhfZHVtcF9icmlkZ2Uoc2QpOworCisJc2QtPnNlbnNvciA9ICZzdHYwNnh4X3NlbnNvcl92djY0MTA7CisJaWYgKCFzZC0+c2Vuc29yLT5wcm9iZShzZCkpCisJCXJldHVybiAwOworCisJc2QtPnNlbnNvciA9ICZzdHYwNnh4X3NlbnNvcl9oZGNzMXgwMDsKKwlpZiAoIXNkLT5zZW5zb3ItPnByb2JlKHNkKSkKKwkJcmV0dXJuIDA7CisKKwlzZC0+c2Vuc29yID0gJnN0djA2eHhfc2Vuc29yX2hkY3MxMDIwOworCWlmICghc2QtPnNlbnNvci0+cHJvYmUoc2QpKQorCQlyZXR1cm4gMDsKKworCXNkLT5zZW5zb3IgPSAmc3R2MDZ4eF9zZW5zb3JfcGIwMTAwOworCWlmICghc2QtPnNlbnNvci0+cHJvYmUoc2QpKQorCQlyZXR1cm4gMDsKKworCXNkLT5zZW5zb3IgPSBOVUxMOworCXJldHVybiAtRU5PREVWOworfQorCisKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg0MCl9LCAvKiBRdWlja0NhbSBFeHByZXNzICovCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4NTApfSwgLyogTEVHTyBjYW0gLyBRdWlja0NhbSBXZWIgKi8KKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg3MCl9LCAvKiBEZXh4YSBXZWJDYW0gVVNCICovCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHN0djA2eHggZGV2aWNlIik7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJICAgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQgc2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlQREVCVUcoRF9QUk9CRSwgIkRpc2Nvbm5lY3RpbmcgdGhlIHN0djA2eHggZGV2aWNlIik7CisKKwlpZiAoc2QtPnNlbnNvci0+ZGlzY29ubmVjdCkKKwkJc2QtPnNlbnNvci0+ZGlzY29ubmVjdChzZCk7CisJZ3NwY2FfZGlzY29ubmVjdChpbnRmKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNkX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKKworbW9kdWxlX3BhcmFtKGR1bXBfYnJpZGdlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfYnJpZGdlLCAiRHVtcHMgYWxsIHVzYiBicmlkZ2UgcmVnaXN0ZXJzIGF0IHN0YXJ0dXAiKTsKKworbW9kdWxlX3BhcmFtKGR1bXBfc2Vuc29yLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfc2Vuc29yLCAiRHVtcHMgYWxsIHNlbnNvciByZWdpc3RlcnMgYXQgc3RhcnR1cCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwN2U3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVhbi1GcmVkcmljIENsZXJlLCBOaWtvbGFzIFppbW1lcm1hbm4sIEdlb3JnIEFjaGVyCisgKgkJICAgICAgTWFyayBDYXZlLUF5bGFuZCwgQ2FybG8gRSBQcmVseiwgRGljayBTdHJlZWZsYW5kCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVHV1a2thIFRvaXZvbmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFAvTiA4NjEwMzc6ICAgICAgU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAxMDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAyMDogU2Vuc29yIFBob3RvYml0IFBCMTAwICBBU0lDIFNUVjA2MDAtMSAtIFF1aWNrQ2FtIEV4cHJlc3MKKyAqIFAvTiA4NjEwNTU6ICAgICAgU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIExFR08gY2FtCisgKiBQL04gODYxMDc1LTAwNDA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQworICogUC9OIDk2MTE3OS0wNzAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYwMiAgIC0gRGV4eGEgV2ViQ2FtIFVTQgorICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCisgKi8KKworI2lmbmRlZiBTVFYwNlhYX0hfCisjZGVmaW5lIFNUVjA2WFhfSF8KKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIlNUVjA2eHgiCisKKyNkZWZpbmUgU1RWX0lTT0NfRU5EUE9JTlRfQUREUgkJMHg4MQorCisjaWZuZGVmIFY0TDJfUElYX0ZNVF9TR1JCRzgKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHOCB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpCisjZW5kaWYKKworI2RlZmluZSBTVFZfUkVHMjMgCQkJMHgwNDIzCisKKy8qIENvbnRyb2wgcmVnaXN0ZXJzIG9mIHRoZSBTVFYwNjAwIEFTSUMgKi8KKyNkZWZpbmUgU1RWX0kyQ19QQVJUTkVSCQkJMHgxNDIwCisjZGVmaW5lIFNUVl9JMkNfVkFMX1JFR19WQUxfUEFJUlNfTUlOMQkweDE0MjEKKyNkZWZpbmUgU1RWX0kyQ19SRUFEX1dSSVRFX1RPR0dMRQkweDE0MjIKKyNkZWZpbmUgU1RWX0kyQ19GTFVTSAkJCTB4MTQyMworI2RlZmluZSBTVFZfSTJDX1NVQ0NfUkVBRF9SRUdfVkFMUwkweDE0MjQKKworI2RlZmluZSBTVFZfSVNPX0VOQUJMRQkJCTB4MTQ0MAorI2RlZmluZSBTVFZfU0NBTl9SQVRFCQkJMHgxNDQzCisjZGVmaW5lIFNUVl9MRURfQ1RSTAkJCTB4MTQ0NQorI2RlZmluZSBTVFZfU1RWMDYwMF9FTVVMQVRJT04JCTB4MTQ0NgorI2RlZmluZSBTVFZfUkVHMDAJCQkweDE1MDAKKyNkZWZpbmUgU1RWX1JFRzAxCQkJMHgxNTAxCisjZGVmaW5lIFNUVl9SRUcwMgkJCTB4MTUwMgorI2RlZmluZSBTVFZfUkVHMDMJCQkweDE1MDMKKyNkZWZpbmUgU1RWX1JFRzA0CQkJMHgxNTA0CisKKyNkZWZpbmUgU1RWX0lTT19TSVpFX0wJCQkweDE1YzEKKyNkZWZpbmUgU1RWX0lTT19TSVpFX0gJCQkweDE1YzIKKworLyogUmVmZXJzIHRvIHRoZSBDSUYgMzUyeDI4OCBhbmQgUUNJRiAxNzZ4MTQ0ICovCisvKiAxOiAyODggbGluZXMsIDI6IDE0NCBsaW5lcyAqLworI2RlZmluZSBTVFZfWV9DVFJMCQkJMHgxNWMzCisKKy8qIDB4YTogMzUyIGNvbHVtbnMsIDB4NjogMTc2IGNvbHVtbnMgKi8KKyNkZWZpbmUgU1RWX1hfQ1RSTAkJCTB4MTY4MAorCisjZGVmaW5lIFNUVjA2WFhfVVJCX01TR19USU1FT1VUCQk1MDAwCisKKyNkZWZpbmUgSTJDX01BWF9CWVRFUwkJCTE2CisjZGVmaW5lIEkyQ19NQVhfV09SRFMJCQk4CisKKyNkZWZpbmUgSTJDX0JVRkZFUl9MRU5HVEgJCTB4MjMKKyNkZWZpbmUgSTJDX1JFQURfQ01ECQkJMworI2RlZmluZSBJMkNfV1JJVEVfQ01ECQkJMQorCisjZGVmaW5lIExFRF9PTgkJCQkxCisjZGVmaW5lIExFRF9PRkYJCQkJMAorCisvKiBTVFYwNnh4IGRldmljZSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OworCisJLyogQSBwb2ludGVyIHRvIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIHNlbnNvciAqLworCWNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciAqc2Vuc29yOworCisJLyogQSBwb2ludGVyIHRvIHRoZSBzZF9kZXNjIHN0cnVjdCAqLworCXN0cnVjdCBzZF9kZXNjIGRlc2M7CisKKwkvKiBTZW5zb3IgcHJpdmF0ZSBkYXRhICovCisJdm9pZCAqc2Vuc29yX3ByaXY7Cit9OworCitpbnQgc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc3RydWN0IHNkICpzZCwgdTE2IGFkZHJlc3MsIHUxNiBpMmNfZGF0YSk7CitpbnQgc3R2MDZ4eF9yZWFkX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1MTYgYWRkcmVzcywgdTggKmkyY19kYXRhKTsKKworaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX2J5dGVzKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1OCBsZW4pOworaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX3dvcmRzKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHUxNiAqZGF0YSwgdTggbGVuKTsKKworaW50IHN0djA2eHhfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywgdTE2ICp2YWx1ZSk7CitpbnQgc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgdTggYWRkcmVzcywgdTE2IHZhbHVlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzMzVhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYwpAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBKZWFuLUZyZWRyaWMgQ2xlcmUsIE5pa29sYXMgWmltbWVybWFubiwgR2VvcmcgQWNoZXIKKyAqCQkgICAgICBNYXJrIENhdmUtQXlsYW5kLCBDYXJsbyBFIFByZWx6LCBEaWNrIFN0cmVlZmxhbmQKKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBUdXVra2EgVG9pdm9uZW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBDaGlhLUkgV3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogUC9OIDg2MTAzNzogICAgICBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDEwOiBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDIwOiBTZW5zb3IgUGhvdG9iaXQgUEIxMDAgIEFTSUMgU1RWMDYwMC0xIC0gUXVpY2tDYW0gRXhwcmVzcworICogUC9OIDg2MTA1NTogICAgICBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gTEVHTyBjYW0KKyAqIFAvTiA4NjEwNzUtMDA0MDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDCisgKiBQL04gOTYxMTc5LTA3MDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjAyICAgLSBEZXh4YSBXZWJDYW0gVVNCCisgKiBQL04gODYxMDQwLTAwMDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjEwICAgLSBRdWlja0NhbSBXZWIKKyAqLworCisjaW5jbHVkZSAic3R2MDZ4eF9oZGNzLmgiCisKK2VudW0gaGRjc19wb3dlcl9zdGF0ZSB7CisJSERDU19TVEFURV9TTEVFUCwKKwlIRENTX1NUQVRFX0lETEUsCisJSERDU19TVEFURV9SVU4KK307CisKKy8qIG5vIGxvY2s/ICovCitzdHJ1Y3QgaGRjcyB7CisJZW51bSBoZGNzX3Bvd2VyX3N0YXRlIHN0YXRlOworCWludCB3LCBoOworCisJLyogdmlzaWJsZSBhcmVhIG9mIHRoZSBzZW5zb3IgYXJyYXkgKi8KKwlzdHJ1Y3QgeworCQlpbnQgbGVmdCwgdG9wOworCQlpbnQgd2lkdGgsIGhlaWdodDsKKwkJaW50IGJvcmRlcjsKKwl9IGFycmF5OworCisJc3RydWN0IHsKKwkJLyogQ29sdW1uIHRpbWluZyBvdmVyaGVhZCAqLworCQl1OCBjdG87CisJCS8qIENvbHVtbiBwcm9jZXNzaW5nIG92ZXJoZWFkICovCisJCXU4IGNwbzsKKwkJLyogUm93IHNhbXBsZSBwZXJpb2QgY29uc3RhbnQgKi8KKwkJdTE2IHJzOworCQkvKiBFeHBvc3VyZSByZXNldCBkdXJhdGlvbiAqLworCQl1MTYgZXI7CisJfSBleHA7CisKKwlpbnQgcHNtcDsKK307CisKK3N0YXRpYyBpbnQgaGRjc19yZWdfd3JpdGVfc2VxKHN0cnVjdCBzZCAqc2QsIHU4IHJlZywgdTggKnZhbHMsIHU4IGxlbikKK3sKKwl1OCByZWdzW0kyQ19NQVhfQllURVMgKiAyXTsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseSgobGVuIDw9IDApIHx8IChsZW4gPj0gSTJDX01BWF9CWVRFUykgfHwKKwkJICAgICAocmVnICsgbGVuID4gMHhmZikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcmVnKyspIHsKKwkJcmVnc1syKmldID0gcmVnOworCQlyZWdzWzIqaSsxXSA9IHZhbHNbaV07CisJfQorCisJcmV0dXJuIHN0djA2eHhfd3JpdGVfc2Vuc29yX2J5dGVzKHNkLCByZWdzLCBsZW4pOworfQorCitzdGF0aWMgaW50IGhkY3Nfc2V0X3N0YXRlKHN0cnVjdCBzZCAqc2QsIGVudW0gaGRjc19wb3dlcl9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaGRjcyAqaGRjcyA9IHNkLT5zZW5zb3JfcHJpdjsKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWlmIChoZGNzLT5zdGF0ZSA9PSBzdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwkvKiB3ZSBuZWVkIHRvIGdvIGlkbGUgYmVmb3JlIHJ1bm5pbmcgb3Igc2xlZXBpbmcgKi8KKwlpZiAoaGRjcy0+c3RhdGUgIT0gSERDU19TVEFURV9JRExFKSB7CisJCXJldCA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBIRENTX1JFR19DT05UUk9MKHNkKSwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWhkY3MtPnN0YXRlID0gSERDU19TVEFURV9JRExFOworCisJaWYgKHN0YXRlID09IEhEQ1NfU1RBVEVfSURMRSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBIRENTX1NUQVRFX1NMRUVQOgorCQl2YWwgPSBIRENTX1NMRUVQX01PREU7CisJCWJyZWFrOworCisJY2FzZSBIRENTX1NUQVRFX1JVTjoKKwkJdmFsID0gSERDU19SVU5fRU5BQkxFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBIRENTX1JFR19DT05UUk9MKHNkKSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJaGRjcy0+c3RhdGUgPSBzdGF0ZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGRjc19yZXNldChzdHJ1Y3Qgc2QgKnNkKQoreworCXN0cnVjdCBoZGNzICpoZGNzID0gc2QtPnNlbnNvcl9wcml2OworCWludCBlcnI7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgSERDU19SRUdfQ09OVFJPTChzZCksIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIEhEQ1NfUkVHX0NPTlRST0woc2QpLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJaGRjcy0+c3RhdGUgPSBIRENTX1NUQVRFX0lETEU7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGhkY3NfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGhkY3MgKmhkY3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkvKiBDb2x1bW4gdGltZSBwZXJpb2QgKi8KKwlpbnQgY3Q7CisJLyogQ29sdW1uIHByb2Nlc3NpbmcgcGVyaW9kICovCisJaW50IGNwOworCS8qIFJvdyBwcm9jZXNzaW5nIHBlcmlvZCAqLworCWludCBycDsKKwlpbnQgY3ljbGVzOworCWludCBlcnI7CisJaW50IHJvd2V4cDsKKwl1MTYgZGF0YVsyXTsKKworCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIEhEQ1NfUk9XRVhQTCwgJmRhdGFbMF0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19ST1dFWFBILCAmZGF0YVsxXSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyb3dleHAgPSAoZGF0YVsxXSA8PCA4KSB8IGRhdGFbMF07CisKKwljdCA9IGhkY3MtPmV4cC5jdG8gKyBoZGNzLT5wc21wICsgKEhEQ1NfQURDX1NUQVJUX1NJR19EVVIgKyAyKTsKKwljcCA9IGhkY3MtPmV4cC5jdG8gKyAoaGRjcy0+dyAqIGN0IC8gMik7CisJcnAgPSBoZGNzLT5leHAucnMgKyBjcDsKKworCWN5Y2xlcyA9IHJwICogcm93ZXhwOworCSp2YWwgPSBjeWNsZXMgLyBIRENTX0NMS19GUkVRX01IWjsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkY3Nfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgaGRjcyAqaGRjcyA9IHNkLT5zZW5zb3JfcHJpdjsKKwlpbnQgcm93ZXhwLCBzcm93ZXhwOworCWludCBtYXhfc3Jvd2V4cDsKKwkvKiBDb2x1bW4gdGltZSBwZXJpb2QgKi8KKwlpbnQgY3Q7CisJLyogQ29sdW1uIHByb2Nlc3NpbmcgcGVyaW9kICovCisJaW50IGNwOworCS8qIFJvdyBwcm9jZXNzaW5nIHBlcmlvZCAqLworCWludCBycDsKKwkvKiBNaW5pbXVtIG51bWJlciBvZiBjb2x1bW4gdGltaW5nIHBlcmlvZHMKKwkgICB3aXRoaW4gdGhlIGNvbHVtbiBwcm9jZXNzaW5nIHBlcmlvZCAqLworCWludCBtbmN0OworCWludCBjeWNsZXMsIGVycjsKKwl1OCBleHBbNF07CisKKwljeWNsZXMgPSB2YWwgKiBIRENTX0NMS19GUkVRX01IWjsKKworCWN0ID0gaGRjcy0+ZXhwLmN0byArIGhkY3MtPnBzbXAgKyAoSERDU19BRENfU1RBUlRfU0lHX0RVUiArIDIpOworCWNwID0gaGRjcy0+ZXhwLmN0byArIChoZGNzLT53ICogY3QgLyAyKTsKKworCS8qIHRoZSBjeWNsZXMgb25lIHJvdyB0YWtlcyAqLworCXJwID0gaGRjcy0+ZXhwLnJzICsgY3A7CisKKwlyb3dleHAgPSBjeWNsZXMgLyBycDsKKworCS8qIHRoZSByZW1haW5pbmcgY3ljbGVzICovCisJY3ljbGVzIC09IHJvd2V4cCAqIHJwOworCisJLyogY2FsY3VsYXRlIHN1Yi1yb3cgZXhwb3N1cmUgKi8KKwlpZiAoSVNfMTAyMChzZCkpIHsKKwkJLyogc2VlIEhEQ1MtMTAyMCBkYXRhc2hlZXQgMy41LjYuNCwgcC4gNjMgKi8KKwkJc3Jvd2V4cCA9IGhkY3MtPncgLSAoY3ljbGVzICsgaGRjcy0+ZXhwLmVyICsgMTMpIC8gY3Q7CisKKwkJbW5jdCA9IChoZGNzLT5leHAuZXIgKyAxMiArIGN0IC0gMSkgLyBjdDsKKwkJbWF4X3Nyb3dleHAgPSBoZGNzLT53IC0gbW5jdDsKKwl9IGVsc2UgeworCQkvKiBzZWUgSERDUy0xMDAwIGRhdGFzaGVldCAzLjQuNS41LCBwLiA2MSAqLworCQlzcm93ZXhwID0gY3AgLSBoZGNzLT5leHAuZXIgLSA2IC0gY3ljbGVzOworCisJCW1uY3QgPSAoaGRjcy0+ZXhwLmVyICsgNSArIGN0IC0gMSkgLyBjdDsKKwkJbWF4X3Nyb3dleHAgPSBjcCAtIG1uY3QgKiBjdCAtIDE7CisJfQorCisJaWYgKHNyb3dleHAgPCAwKQorCQlzcm93ZXhwID0gMDsKKwllbHNlIGlmIChzcm93ZXhwID4gbWF4X3Nyb3dleHApCisJCXNyb3dleHAgPSBtYXhfc3Jvd2V4cDsKKworCWlmIChJU18xMDIwKHNkKSkgeworCQlleHBbMF0gPSByb3dleHAgJiAweGZmOworCQlleHBbMV0gPSByb3dleHAgPj4gODsKKwkJZXhwWzJdID0gKHNyb3dleHAgPj4gMikgJiAweGZmOworCQkvKiB0aGlzIGNsZWFycyBleHBvc3VyZSBlcnJvciBmbGFnICovCisJCWV4cFszXSA9IDB4MTsKKwkJZXJyID0gaGRjc19yZWdfd3JpdGVfc2VxKHNkLCBIRENTX1JPV0VYUEwsIGV4cCwgNCk7CisJfSBlbHNlIHsKKwkJZXhwWzBdID0gcm93ZXhwICYgMHhmZjsKKwkJZXhwWzFdID0gcm93ZXhwID4+IDg7CisJCWV4cFsyXSA9IHNyb3dleHAgJiAweGZmOworCQlleHBbM10gPSBzcm93ZXhwID4+IDg7CisJCWVyciA9IGhkY3NfcmVnX3dyaXRlX3NlcShzZCwgSERDU19ST1dFWFBMLCBleHAsIDQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJLyogY2xlYXIgZXhwb3N1cmUgZXJyb3IgZmxhZyAqLworCQllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwKKwkJICAgICBIRENTX1NUQVRVUywgQklUKDQpKTsKKwl9CisJUERFQlVHKERfVjRMMiwgIldyaXRpbmcgZXhwb3N1cmUgJWQsIHJvd2V4cCAlZCwgc3Jvd2V4cCAlZCIsCisJICAgICAgIHZhbCwgcm93ZXhwLCBzcm93ZXhwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGhkY3Nfc2V0X2dhaW5zKHN0cnVjdCBzZCAqc2QsIHU4IHIsIHU4IGcsIHU4IGIpCit7CisJdTggZ2FpbnNbNF07CisKKwkvKiB0aGUgdm9sdGFnZSBnYWluIEF2ID0gKDEgKyAxOSAqIHZhbCAvIDEyNykgKiAoMSArIGJpdDcpICovCisJaWYgKHIgPiAxMjcpCisJCXIgPSAweDgwIHwgKHIgLyAyKTsKKwlpZiAoZyA+IDEyNykKKwkJZyA9IDB4ODAgfCAoZyAvIDIpOworCWlmIChiID4gMTI3KQorCQliID0gMHg4MCB8IChiIC8gMik7CisKKwlnYWluc1swXSA9IGc7CisJZ2FpbnNbMV0gPSByOworCWdhaW5zWzJdID0gYjsKKwlnYWluc1szXSA9IGc7CisKKwlyZXR1cm4gaGRjc19yZWdfd3JpdGVfc2VxKHNkLCBIRENTX0VSRUNQR0EsIGdhaW5zLCA0KTsKK30KKworc3RhdGljIGludCBoZGNzX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGVycjsKKwl1MTYgZGF0YTsKKworCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIEhEQ1NfRVJFQ1BHQSwgJmRhdGEpOworCisJLyogQml0IDcgZG91YmxlcyB0aGUgZ2FpbiAqLworCWlmIChkYXRhICYgMHg4MCkKKwkJKnZhbCA9IChkYXRhICYgMHg3ZikgKiAyOworCWVsc2UKKwkJKnZhbCA9IGRhdGE7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBoZGNzX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCVBERUJVRyhEX1Y0TDIsICJXcml0aW5nIGdhaW4gJWQiLCB2YWwpOworCXJldHVybiBoZGNzX3NldF9nYWlucygoc3RydWN0IHNkICopIGdzcGNhX2RldiwKKwkJCSAgICAgICB2YWwgJiAweGZmLCB2YWwgJiAweGZmLCB2YWwgJiAweGZmKTsKK30KKworc3RhdGljIGludCBoZGNzX3NldF9zaXplKHN0cnVjdCBzZCAqc2QsCisJCXVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKK3sKKwlzdHJ1Y3QgaGRjcyAqaGRjcyA9IHNkLT5zZW5zb3JfcHJpdjsKKwl1OCB3aW5bNF07CisJdW5zaWduZWQgaW50IHgsIHk7CisJaW50IGVycjsKKworCS8qIG11c3QgYmUgbXVsdGlwbGUgb2YgNCAqLworCXdpZHRoID0gKHdpZHRoICsgMykgJiB+MHgzOworCWhlaWdodCA9IChoZWlnaHQgKyAzKSAmIH4weDM7CisKKwlpZiAod2lkdGggPiBoZGNzLT5hcnJheS53aWR0aCkKKwkJd2lkdGggPSBoZGNzLT5hcnJheS53aWR0aDsKKworCWlmIChJU18xMDIwKHNkKSkgeworCQkvKiB0aGUgYm9yZGVycyBhcmUgYWxzbyBpbnZhbGlkICovCisJCWlmIChoZWlnaHQgKyAyICogaGRjcy0+YXJyYXkuYm9yZGVyICsgSERDU18xMDIwX0JPVFRPTV9ZX1NLSVAKKwkJCQkgID4gaGRjcy0+YXJyYXkuaGVpZ2h0KQorCQkJaGVpZ2h0ID0gaGRjcy0+YXJyYXkuaGVpZ2h0IC0gMiAqIGhkY3MtPmFycmF5LmJvcmRlciAtCisJCQkJSERDU18xMDIwX0JPVFRPTV9ZX1NLSVA7CisKKwkJeSA9IChoZGNzLT5hcnJheS5oZWlnaHQgLSBIRENTXzEwMjBfQk9UVE9NX1lfU0tJUCAtIGhlaWdodCkgLyAyCisJCQkJKyBoZGNzLT5hcnJheS50b3A7CisJfSBlbHNlIHsKKwkJaWYgKGhlaWdodCA+IGhkY3MtPmFycmF5LmhlaWdodCkKKwkJCWhlaWdodCA9IGhkY3MtPmFycmF5LmhlaWdodDsKKworCQl5ID0gaGRjcy0+YXJyYXkudG9wICsgKGhkY3MtPmFycmF5LmhlaWdodCAtIGhlaWdodCkgLyAyOworCX0KKworCXggPSBoZGNzLT5hcnJheS5sZWZ0ICsgKGhkY3MtPmFycmF5LndpZHRoIC0gd2lkdGgpIC8gMjsKKworCXdpblswXSA9IHkgLyA0OworCXdpblsxXSA9IHggLyA0OworCXdpblsyXSA9ICh5ICsgaGVpZ2h0KSAvIDQgLSAxOworCXdpblszXSA9ICh4ICsgd2lkdGgpIC8gNCAtIDE7CisKKwllcnIgPSBoZGNzX3JlZ193cml0ZV9zZXEoc2QsIEhEQ1NfRldST1csIHdpbiwgNCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgd2lkdGggYW5kIGhlaWdodCAqLworCWhkY3MtPncgPSB3aWR0aDsKKwloZGNzLT5oID0gaGVpZ2h0OworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaGRjc19wcm9iZV8xeDAwKHN0cnVjdCBzZCAqc2QpCit7CisJc3RydWN0IGhkY3MgKmhkY3M7CisJdTE2IHNlbnNvcjsKKwlpbnQgcmV0OworCisJcmV0ID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19JREVOVCwgJnNlbnNvcik7CisJaWYgKHJldCA8IDAgfHwgc2Vuc29yICE9IDB4MDgpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiSERDUy0xMDAwLzExMDAgc2Vuc29yIGRldGVjdGVkIik7CisKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm1vZGVzOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5tb2RlczsKKwlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLmN0cmxzOworCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5jdHJsczsKKworCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOworCWlmICghaGRjcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZGNzLT5hcnJheS5sZWZ0ID0gODsKKwloZGNzLT5hcnJheS50b3AgPSA4OworCWhkY3MtPmFycmF5LndpZHRoID0gSERDU18xWDAwX0RFRl9XSURUSDsKKwloZGNzLT5hcnJheS5oZWlnaHQgPSBIRENTXzFYMDBfREVGX0hFSUdIVDsKKwloZGNzLT5hcnJheS5ib3JkZXIgPSA0OworCisJaGRjcy0+ZXhwLmN0byA9IDQ7CisJaGRjcy0+ZXhwLmNwbyA9IDI7CisJaGRjcy0+ZXhwLnJzID0gMTg2OworCWhkY3MtPmV4cC5lciA9IDEwMDsKKworCS8qCisJICogRnJhbWUgcmF0ZSBvbiBIRENTLTEwMDAgMHg0NkQ6MHg4NDAgZGVwZW5kcyBvbiBQU01QOgorCSAqICA0ID0gZG9lc24ndCB3b3JrIGF0IGFsbAorCSAqICA1ID0gNy44IGZwcywKKwkgKiAgNiA9IDYuOSBmcHMsCisJICogIDggPSA2LjMgZnBzLAorCSAqIDEwID0gNS41IGZwcywKKwkgKiAxNSA9IDQuNCBmcHMsCisJICogMzEgPSAyLjggZnBzCisJICoKKwkgKiBGcmFtZSByYXRlIG9uIEhEQ1MtMTAwMCAweDQ2RDoweDg3MCBkZXBlbmRzIG9uIFBTTVA6CisJICogMTUgPSBkb2Vzbid0IHdvcmsgYXQgYWxsCisJICogMTggPSBkb2Vzbid0IHdvcmsgYXQgYWxsCisJICogMTkgPSA3LjMgZnBzCisJICogMjAgPSA3LjQgZnBzCisJICogMjEgPSA3LjQgZnBzCisJICogMjIgPSA3LjQgZnBzCisJICogMjQgPSA2LjMgZnBzCisJICogMzAgPSA1LjQgZnBzCisJICovCisJaGRjcy0+cHNtcCA9IElTXzg3MChzZCkgPyAyMCA6IDU7CisKKwlzZC0+c2Vuc29yX3ByaXYgPSBoZGNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRjc19wcm9iZV8xMDIwKHN0cnVjdCBzZCAqc2QpCit7CisJc3RydWN0IGhkY3MgKmhkY3M7CisJdTE2IHNlbnNvcjsKKwlpbnQgcmV0OworCisJcmV0ID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgSERDU19JREVOVCwgJnNlbnNvcik7CisJaWYgKHJldCA8IDAgfHwgc2Vuc29yICE9IDB4MTApCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiSERDUy0xMDIwIHNlbnNvciBkZXRlY3RlZCIpOworCisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5tb2RlczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5ubW9kZXM7CisJc2QtPmRlc2MuY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5jdHJsczsKKwlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5uY3RybHM7CisKKwloZGNzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhkY3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkY3MpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBGcm9tIEFuZHJleSdzIHRlc3QgaW1hZ2U6IGxvb2tzIGxpa2UgSERDUy0xMDIwIHVwcGVyLWxlZnQKKwkgKiB2aXNpYmxlIHBpeGVsIGlzIGF0IDI0LDggKHkgbWF5YmUgZXZlbiBzbWFsbGVyPykgYW5kIGxvd2VyLXJpZ2h0CisJICogdmlzaWJsZSBwaXhlbCBhdCAzNzUsMjk5ICh4IG1heWJlIGV2ZW4gbGFyZ2VyPykKKwkgKi8KKwloZGNzLT5hcnJheS5sZWZ0ID0gMjQ7CisJaGRjcy0+YXJyYXkudG9wICA9IDQ7CisJaGRjcy0+YXJyYXkud2lkdGggPSBIRENTXzEwMjBfREVGX1dJRFRIOworCWhkY3MtPmFycmF5LmhlaWdodCA9IDMwNDsKKwloZGNzLT5hcnJheS5ib3JkZXIgPSA0OworCisJaGRjcy0+cHNtcCA9IDY7CisKKwloZGNzLT5leHAuY3RvID0gMzsKKwloZGNzLT5leHAuY3BvID0gMzsKKwloZGNzLT5leHAucnMgPSAxNTU7CisJaGRjcy0+ZXhwLmVyID0gOTY7CisKKwlzZC0+c2Vuc29yX3ByaXYgPSBoZGNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRjc19zdGFydChzdHJ1Y3Qgc2QgKnNkKQoreworCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0aW5nIHN0cmVhbSIpOworCisJcmV0dXJuIGhkY3Nfc2V0X3N0YXRlKHNkLCBIRENTX1NUQVRFX1JVTik7Cit9CisKK3N0YXRpYyBpbnQgaGRjc19zdG9wKHN0cnVjdCBzZCAqc2QpCit7CisJUERFQlVHKERfU1RSRUFNLCAiSGFsdGluZyBzdHJlYW0iKTsKKworCXJldHVybiBoZGNzX3NldF9zdGF0ZShzZCwgSERDU19TVEFURV9TTEVFUCk7Cit9CisKK3N0YXRpYyB2b2lkIGhkY3NfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCVBERUJVRyhEX1BST0JFLCAiRGlzY29ubmVjdGluZyB0aGUgc2Vuc29yIik7CisJa2ZyZWUoc2QtPnNlbnNvcl9wcml2KTsKK30KKworc3RhdGljIGludCBoZGNzX2luaXQoc3RydWN0IHNkICpzZCkKK3sKKwlzdHJ1Y3QgaGRjcyAqaGRjcyA9IHNkLT5zZW5zb3JfcHJpdjsKKwlpbnQgaSwgZXJyID0gMDsKKworCS8qIFNldCB0aGUgU1RWMDYwMkFBIGluIFNUVjA2MDAgZW11bGF0aW9uIG1vZGUgKi8KKwlpZiAoSVNfODcwKHNkKSkKKwkJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9TVFYwNjAwX0VNVUxBVElPTiwgMSk7CisKKwkvKiBFeGVjdXRlIHRoZSBicmlkZ2UgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0dl9icmlkZ2VfaW5pdCkgJiYgIWVycjsgaSsrKSB7CisJCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBzdHZfYnJpZGdlX2luaXRbaV1bMF0sCisJCQkJCSAgIHN0dl9icmlkZ2VfaW5pdFtpXVsxXSk7CisJfQorCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2Vuc29yIHNvZnQgcmVzZXQgKi8KKwloZGNzX3Jlc2V0KHNkKTsKKworCS8qIEV4ZWN1dGUgdGhlIHNlbnNvciBpbml0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3R2X3NlbnNvcl9pbml0KSAmJiAhZXJyOyBpKyspIHsKKwkJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIHN0dl9zZW5zb3JfaW5pdFtpXVswXSwKKwkJCQkJICAgICBzdHZfc2Vuc29yX2luaXRbaV1bMV0pOworCX0KKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEVuYWJsZSBjb250aW5vdXMgZnJhbWUgY2FwdHVyZSwgYml0IDI6IHN0b3Agd2hlbiBmcmFtZSBjb21wbGV0ZSAqLworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBIRENTX1JFR19DT05GSUcoc2QpLCBCSVQoMykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogU2V0IFBHQSBzYW1wbGUgZHVyYXRpb24KKwkod2FzIDB4N0UgZm9yIElTXzg3MCwgYnV0IGNhdXNlZCBzbG93IGZyYW1lcmF0ZSB3aXRoIEhEQ1MtMTAyMCkgKi8KKwlpZiAoSVNfMTAyMChzZCkpCisJCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBIRENTX1RDVFJMLAorCQkJCShIRENTX0FEQ19TVEFSVF9TSUdfRFVSIDw8IDYpIHwgaGRjcy0+cHNtcCk7CisJZWxzZQorCQllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgSERDU19UQ1RSTCwKKwkJCQkoSERDU19BRENfU1RBUlRfU0lHX0RVUiA8PCA1KSB8IGhkY3MtPnBzbXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaGRjc19zZXRfZ2FpbnMoc2QsIEhEQ1NfREVGQVVMVF9HQUlOLCBIRENTX0RFRkFVTFRfR0FJTiwKKwkJCSAgICAgSERDU19ERUZBVUxUX0dBSU4pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaGRjc19zZXRfZXhwb3N1cmUoJnNkLT5nc3BjYV9kZXYsIEhEQ1NfREVGQVVMVF9FWFBPU1VSRSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBoZGNzX3NldF9zaXplKHNkLCBoZGNzLT5hcnJheS53aWR0aCwgaGRjcy0+YXJyYXkuaGVpZ2h0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGhkY3NfZHVtcChzdHJ1Y3Qgc2QgKnNkKQoreworCXUxNiByZWcsIHZhbDsKKworCWluZm8oIkR1bXBpbmcgc2Vuc29yIHJlZ2lzdGVyczoiKTsKKworCWZvciAocmVnID0gSERDU19JREVOVDsgcmVnIDw9IEhEQ1NfUk9XRVhQSDsgcmVnKyspIHsKKwkJc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgcmVnLCAmdmFsKTsKKwkJaW5mbygicmVnIDB4JTAyeCA9IDB4JTAyeCIsIHJlZywgdmFsKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3Mjc5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBKZWFuLUZyZWRyaWMgQ2xlcmUsIE5pa29sYXMgWmltbWVybWFubiwgR2VvcmcgQWNoZXIKKyAqCQkgICAgICBNYXJrIENhdmUtQXlsYW5kLCBDYXJsbyBFIFByZWx6LCBEaWNrIFN0cmVlZmxhbmQKKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBUdXVra2EgVG9pdm9uZW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBDaGlhLUkgV3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogUC9OIDg2MTAzNzogICAgICBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDEwOiBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDIwOiBTZW5zb3IgUGhvdG9iaXQgUEIxMDAgIEFTSUMgU1RWMDYwMC0xIC0gUXVpY2tDYW0gRXhwcmVzcworICogUC9OIDg2MTA1NTogICAgICBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gTEVHTyBjYW0KKyAqIFAvTiA4NjEwNzUtMDA0MDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDCisgKiBQL04gOTYxMTc5LTA3MDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjAyICAgLSBEZXh4YSBXZWJDYW0gVVNCCisgKiBQL04gODYxMDQwLTAwMDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjEwICAgLSBRdWlja0NhbSBXZWIKKyAqLworCisjaWZuZGVmIFNUVjA2WFhfSERDU19IXworI2RlZmluZSBTVFYwNlhYX0hEQ1NfSF8KKworI2luY2x1ZGUgInN0djA2eHhfc2Vuc29yLmgiCisKKyNkZWZpbmUgSERDU19SRUdfQ09ORklHKHNkKQkoSVNfMTAyMChzZCkgPyBIRENTMjBfQ09ORklHIDogSERDUzAwX0NPTkZJRykKKyNkZWZpbmUgSERDU19SRUdfQ09OVFJPTChzZCkJKElTXzEwMjAoc2QpID8gSERDUzIwX0NPTlRST0wgOiBIRENTMDBfQ09OVFJPTCkKKworI2RlZmluZSBIRENTXzFYMDBfREVGX1dJRFRICTM2MAorI2RlZmluZSBIRENTXzFYMDBfREVGX0hFSUdIVCAJMjk2CisKKyNkZWZpbmUgSERDU18xMDIwX0RFRl9XSURUSAkzNTIKKyNkZWZpbmUgSERDU18xMDIwX0RFRl9IRUlHSFQJMjkyCisKKyNkZWZpbmUgSERDU18xMDIwX0JPVFRPTV9ZX1NLSVAJNAorCisjZGVmaW5lIEhEQ1NfQ0xLX0ZSRVFfTUhaCTI1CisKKyNkZWZpbmUgSERDU19BRENfU1RBUlRfU0lHX0RVUgkzCisKKy8qIExTQiBiaXQgb2YgSTJDIG9yIHJlZ2lzdGVyIGFkZHJlc3Mgc2lnbmlmaWVzIHdyaXRlICgwKSBvciByZWFkICgxKSAqLworLyogSTJDIFJlZ2lzdGVycyBjb21tb24gZm9yIGJvdGggSERDUy0xMDAwLzExMDAgYW5kIEhEQ1MtMTAyMCAqLworLyogSWRlbnRpZmljYXRpb25zIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfSURFTlQJCSgweDAwIDw8IDEpCisvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDU19TVEFUVVMJCSgweDAxIDw8IDEpCisvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX0lNQVNLCQkoMHgwMiA8PCAxKQorLyogUGFkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDU19QQ1RSTAkJKDB4MDMgPDwgMSkKKy8qIFBhZCBEcml2ZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfUERSVgkJKDB4MDQgPDwgMSkKKy8qIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfSUNUUkwJCSgweDA1IDw8IDEpCisvKiBJbnRlcmZhY2UgVGltaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfSVRNRwkJKDB4MDYgPDwgMSkKKy8qIEJhdWQgRnJhY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDU19CRlJBQwkJKDB4MDcgPDwgMSkKKy8qIEJhdWQgUmF0ZSBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX0JSQVRFCQkoMHgwOCA8PCAxKQorLyogQURDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDU19BRENDVFJMCQkoMHgwOSA8PCAxKQorLyogRmlyc3QgV2luZG93IFJvdyBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX0ZXUk9XCQkoMHgwYSA8PCAxKQorLyogRmlyc3QgV2luZG93IENvbHVtbiBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX0ZXQ09MCQkoMHgwYiA8PCAxKQorLyogTGFzdCBXaW5kb3cgUm93IFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfTFdST1cJCSgweDBjIDw8IDEpCisvKiBMYXN0IFdpbmRvdyBDb2x1bW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDU19MV0NPTAkJKDB4MGQgPDwgMSkKKy8qIFRpbWluZyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1NfVENUUkwJCSgweDBlIDw8IDEpCisvKiBQR0EgR2FpbiBSZWdpc3RlcjogRXZlbiBSb3csIEV2ZW4gQ29sdW1uICovCisjZGVmaW5lIEhEQ1NfRVJFQ1BHQQkJKDB4MGYgPDwgMSkKKy8qIFBHQSBHYWluIFJlZ2lzdGVyOiBFdmVuIFJvdywgT2RkIENvbHVtbiAqLworI2RlZmluZSBIRENTX0VST0NQR0EJCSgweDEwIDw8IDEpCisvKiBQR0EgR2FpbiBSZWdpc3RlcjogT2RkIFJvdywgRXZlbiBDb2x1bW4gKi8KKyNkZWZpbmUgSERDU19PUkVDUEdBCQkoMHgxMSA8PCAxKQorLyogUEdBIEdhaW4gUmVnaXN0ZXI6IE9kZCBSb3csIE9kZCBDb2x1bW4gKi8KKyNkZWZpbmUgSERDU19PUk9DUEdBCQkoMHgxMiA8PCAxKQorLyogUm93IEV4cG9zdXJlIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX1JPV0VYUEwJCSgweDEzIDw8IDEpCisvKiBSb3cgRXhwb3N1cmUgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBIRENTX1JPV0VYUEgJCSgweDE0IDw8IDEpCisKKy8qIEkyQyBSZWdpc3RlcnMgb25seSBmb3IgSERDUy0xMDAwLzExMDAgKi8KKy8qIFN1Yi1Sb3cgRXhwb3N1cmUgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MwMF9TUk9XRVhQTAkJKDB4MTUgPDwgMSkKKy8qIFN1Yi1Sb3cgRXhwb3N1cmUgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBIRENTMDBfU1JPV0VYUEgJCSgweDE2IDw8IDEpCisvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MwMF9DT05GSUcJCSgweDE3IDw8IDEpCisvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MwMF9DT05UUk9MCQkoMHgxOCA8PCAxKQorCisvKiBJMkMgUmVnaXN0ZXJzIG9ubHkgZm9yIEhEQ1MtMTAyMCAqLworLyogU3ViLVJvdyBFeHBvc3VyZSBSZWdpc3RlciAqLworI2RlZmluZSBIRENTMjBfU1JPV0VYUAkJKDB4MTUgPDwgMSkKKy8qIEVycm9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDUzIwX0VSUk9SCQkoMHgxNiA8PCAxKQorLyogSW50ZXJmYWNlIFRpbWluZyAyIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MyMF9JVE1HMgkJKDB4MTcgPDwgMSkKKy8qIEludGVyZmFjZSBDb250cm9sIDIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgSERDUzIwX0lDVFJMMgkJKDB4MTggPDwgMSkKKy8qIEhvcml6b250YWwgQmxhbmsgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSERDUzIwX0hCTEFOSwkJKDB4MTkgPDwgMSkKKy8qIFZlcnRpY2FsIEJsYW5rIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MyMF9WQkxBTksJCSgweDFhIDw8IDEpCisvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MyMF9DT05GSUcJCSgweDFiIDw8IDEpCisvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEhEQ1MyMF9DT05UUk9MCQkoMHgxYyA8PCAxKQorCisjZGVmaW5lIEhEQ1NfUlVOX0VOQUJMRQkJKDEgPDwgMikKKyNkZWZpbmUgSERDU19TTEVFUF9NT0RFCQkoMSA8PCAxKQorCisjZGVmaW5lIEhEQ1NfREVGQVVMVF9FWFBPU1VSRQk1MDAwCisjZGVmaW5lIEhEQ1NfREVGQVVMVF9HQUlOCTEyOAorCitzdGF0aWMgaW50IGhkY3NfcHJvYmVfMXgwMChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgaGRjc19wcm9iZV8xMDIwKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIGludCBoZGNzX3N0YXJ0KHN0cnVjdCBzZCAqc2QpOworc3RhdGljIGludCBoZGNzX2luaXQoc3RydWN0IHNkICpzZCk7CitzdGF0aWMgaW50IGhkY3Nfc3RvcChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgaGRjc19kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgaGRjc19kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOworCitzdGF0aWMgaW50IGhkY3NfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IGhkY3Nfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgaGRjc19zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IGhkY3NfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwID0geworCS5uYW1lID0gIkhQIEhEQ1MtMTAwMC8xMTAwIiwKKwkuaTJjX2ZsdXNoID0gMCwKKwkuaTJjX2FkZHIgPSAoMHg1NSA8PCAxKSwKKwkuaTJjX2xlbiA9IDEsCisKKwkuaW5pdCA9IGhkY3NfaW5pdCwKKwkucHJvYmUgPSBoZGNzX3Byb2JlXzF4MDAsCisJLnN0YXJ0ID0gaGRjc19zdGFydCwKKwkuc3RvcCA9IGhkY3Nfc3RvcCwKKwkuZGlzY29ubmVjdCA9IGhkY3NfZGlzY29ubmVjdCwKKwkuZHVtcCA9IGhkY3NfZHVtcCwKKworCS5uY3RybHMgPSAyLAorCS5jdHJscyA9IHsKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gaGRjc19nZXRfZXhwb3N1cmUKKwl9LAorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gImdhaW4iLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmLAorCQkJLnN0ZXAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0dBSU4sCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2dhaW4sCisJCS5nZXQgPSBoZGNzX2dldF9nYWluCisJfQorCX0sCisKKwkubm1vZGVzID0gMSwKKwkubW9kZXMgPSB7CisJeworCQlIRENTXzFYMDBfREVGX1dJRFRILAorCQlIRENTXzFYMDBfREVGX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCUhEQ1NfMVgwMF9ERUZfV0lEVEggKiBIRENTXzFYMDBfREVGX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IEhEQ1NfMVgwMF9ERUZfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KKwl9Cit9OworCitjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfaGRjczEwMjAgPSB7CisJLm5hbWUgPSAiSERDUy0xMDIwIiwKKwkuaTJjX2ZsdXNoID0gMCwKKwkuaTJjX2FkZHIgPSAoMHg1NSA8PCAxKSwKKwkuaTJjX2xlbiA9IDEsCisKKwkubmN0cmxzID0gMCwKKwkuY3RybHMgPSB7fSwKKworCS5pbml0ID0gaGRjc19pbml0LAorCS5wcm9iZSA9IGhkY3NfcHJvYmVfMTAyMCwKKwkuc3RhcnQgPSBoZGNzX3N0YXJ0LAorCS5zdG9wID0gaGRjc19zdG9wLAorCS5kdW1wID0gaGRjc19kdW1wLAorCisJLm5tb2RlcyA9IDEsCisJLm1vZGVzID0geworCXsKKwkJSERDU18xMDIwX0RFRl9XSURUSCwKKwkJSERDU18xMDIwX0RFRl9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlIRENTXzEwMjBfREVGX1dJRFRIICogSERDU18xMDIwX0RFRl9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBIRENTXzEwMjBfREVGX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9CisJfQorfTsKKworc3RhdGljIGNvbnN0IHUxNiBzdHZfYnJpZGdlX2luaXRbXVsyXSA9IHsKKwl7U1RWX0lTT19FTkFCTEUsIDB9LAorCXtTVFZfUkVHMjMsIDB9LAorCXtTVFZfUkVHMDAsIDB4MWR9LAorCXtTVFZfUkVHMDEsIDB4YjV9LAorCXtTVFZfUkVHMDIsIDB4YTh9LAorCXtTVFZfUkVHMDMsIDB4OTV9LAorCXtTVFZfUkVHMDQsIDB4MDd9LAorCisJe1NUVl9TQ0FOX1JBVEUsIDB4MjB9LAorCXtTVFZfSVNPX1NJWkVfTCwgODQ3fSwKKwl7U1RWX1lfQ1RSTCwgMHgwMX0sCisJe1NUVl9YX0NUUkwsIDB4MGF9Cit9OworCitzdGF0aWMgY29uc3QgdTggc3R2X3NlbnNvcl9pbml0W11bMl0gPSB7CisJLyogQ2xlYXIgc3RhdHVzICh3cml0aW5nIDEgd2lsbCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBzdGF0dXMgYml0KSAqLworCXtIRENTX1NUQVRVUywgQklUKDYpIHwgQklUKDUpIHwgQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpfSwKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJe0hEQ1NfSU1BU0ssIDB4MDB9LAorCXtIRENTX1BDVFJMLCBCSVQoNikgfCBCSVQoNSkgfCBCSVQoMSkgfCBCSVQoMCl9LAorCXtIRENTX1BEUlYsICAweDAwfSwKKwl7SERDU19JQ1RSTCwgQklUKDUpfSwKKwl7SERDU19JVE1HLCAgQklUKDQpIHwgQklUKDEpfSwKKwkvKiBBREMgb3V0cHV0IHJlc29sdXRpb24gdG8gMTAgYml0cyAqLworCXtIRENTX0FEQ0NUUkwsIDEwfQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTBmODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBKZWFuLUZyZWRyaWMgQ2xlcmUsIE5pa29sYXMgWmltbWVybWFubiwgR2VvcmcgQWNoZXIKKyAqCQkgICAgICBNYXJrIENhdmUtQXlsYW5kLCBDYXJsbyBFIFByZWx6LCBEaWNrIFN0cmVlZmxhbmQKKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBUdXVra2EgVG9pdm9uZW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogUC9OIDg2MTAzNzogICAgICBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDEwOiBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMgU1RWMDYwMAorICogUC9OIDg2MTA1MC0wMDIwOiBTZW5zb3IgUGhvdG9iaXQgUEIxMDAgIEFTSUMgU1RWMDYwMC0xIC0gUXVpY2tDYW0gRXhwcmVzcworICogUC9OIDg2MTA1NTogICAgICBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gTEVHTyBjYW0KKyAqIFAvTiA4NjEwNzUtMDA0MDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDCisgKiBQL04gOTYxMTc5LTA3MDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjAyICAgLSBEZXh4YSBXZWJDYW0gVVNCCisgKiBQL04gODYxMDQwLTAwMDA6IFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjEwICAgLSBRdWlja0NhbSBXZWIKKyAqLworCisvKgorICogVGhlIHNwZWMgZmlsZSBmb3IgdGhlIFBCLTAxMDAgc3VnZ2VzdHMgdGhlIGZvbGxvd2luZyBmb3IgYmVzdCBxdWFsaXR5CisgKiBpbWFnZXMgYWZ0ZXIgdGhlIHNlbnNvciBoYXMgYmVlbiByZXNldCA6CisgKgorICogUEJfQURDR0FJTkwgICAgICA9IFI2MCA9IDB4MDMgKDMgZGVjKSAgICAgIDogc2V0cyBsb3cgcmVmZXJlbmNlIG9mIEFEQworCQkJCQkJdG8gcHJvZHVjZSBnb29kIGJsYWNrIGxldmVsCisgKiBQQl9QUkVBRENUUkwgICAgID0gUjMyID0gMHgxNDAwICg1MTIwIGRlYykgOiBFbmFibGVzIGdsb2JhbCBnYWluIGNoYW5nZXMKKwkJCQkJCXRocm91Z2ggUjUzCisgKiBQQl9BRENNSU5HQUlOICAgID0gUjUyID0gMHgxMCAoMTYgZGVjKSAgICAgOiBTZXRzIHRoZSBtaW5pbXVtIGdhaW4gZm9yCisJCQkJCQlhdXRvLWV4cG9zdXJlCisgKiBQQl9BRENHTE9CQUxHQUlOID0gUjUzID0gMHgxMCAoMTYgZGVjKSAgICAgOiBTZXRzIHRoZSBnbG9iYWwgZ2FpbgorICogUEJfRVhQR0FJTiAgICAgICA9IFIxNCA9IDB4MTEgKDE3IGRlYykgICAgIDogU2V0cyB0aGUgYXV0by1leHBvc3VyZSB2YWx1ZQorICogUEJfVVBEQVRFSU5UICAgICA9IFIyMyA9IDB4MDIgKDIgZGVjKSAgICAgIDogU2V0cyB0aGUgc3BlZWQgb24KKwkJCQkJCWF1dG8tZXhwb3N1cmUgcm91dGluZQorICogUEJfQ0ZJTExJTiAgICAgICA9IFI1ICA9IDB4MEUgKDE0IGRlYykgICAgIDogU2V0cyB0aGUgZnJhbWUgcmF0ZQorICovCisKKyNpbmNsdWRlICJzdHYwNnh4X3BiMDEwMC5oIgorCitzdGF0aWMgaW50IHBiMDEwMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQoreworCXUxNiBzZW5zb3I7CisJaW50IGksIGVycjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5nczsKKworCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFBCX0lERU5ULCAmc2Vuc29yKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoc2Vuc29yID4+IDgpID09IDB4NjQpIHsKKwkJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYygKKwkJCQlzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzICogc2l6ZW9mKHMzMiksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghc2Vuc29yX3NldHRpbmdzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJaW5mbygiUGhvdG9iaXQgcGIwMTAwIHNlbnNvciBkZXRlY3RlZCIpOworCisJCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm1vZGVzOworCQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubm1vZGVzOworCQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5jdHJsczsKKwkJc2QtPmRlc2MubmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJsczsKKwkJZm9yIChpID0gMDsgaSA8IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5uY3RybHM7IGkrKykKKwkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC4KKwkJCQkJICAgICBjdHJsc1tpXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCQlzZC0+c2Vuc29yX3ByaXYgPSBzZW5zb3Jfc2V0dGluZ3M7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmc2QtPmdzcGNhX2Rldi5jYW07CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisJdTMyIG1vZGUgPSBjYW0tPmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2OworCisJLyogU2V0dXAgc2Vuc29yIHdpbmRvdyAqLworCWlmIChtb2RlICYgUEIwMTAwX0NST1BfVE9fVkdBKSB7CisJCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SU1RBUlQsIDMwKTsKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0NTVEFSVCwgMjApOworCQlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUldTSVpFLCAyNDAgLSAxKTsKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0NXU0laRSwgMzIwIC0gMSk7CisJfSBlbHNlIHsKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1JTVEFSVCwgOCk7CisJCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9DU1RBUlQsIDQpOworCQlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUldTSVpFLCAyODggLSAxKTsKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0NXU0laRSwgMzUyIC0gMSk7CisJfQorCisJaWYgKG1vZGUgJiBQQjAxMDBfU1VCU0FNUExFKSB7CisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfWV9DVFJMLCAweDAyKTsgLyogV3JvbmcsIEZJWE1FICovCisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfWF9DVFJMLCAweDA2KTsKKworCQlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1NDQU5fUkFURSwgMHgxMCk7CisJfSBlbHNlIHsKKwkJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9ZX0NUUkwsIDB4MDEpOworCQlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1hfQ1RSTCwgMHgwYSk7CisJCS8qIGxhcmdlciAtPiBzbG93ZXIgKi8KKwkJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9TQ0FOX1JBVEUsIDB4MjApOworCX0KKworCS8qIHNldF9nYWluIGFsc28gc2V0cyByZWQgYW5kIGJsdWUgYmFsYW5jZSAqLworCXBiMDEwMF9zZXRfZ2Fpbigmc2QtPmdzcGNhX2Rldiwgc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXSk7CisJcGIwMTAwX3NldF9leHBvc3VyZSgmc2QtPmdzcGNhX2Rldiwgc2Vuc29yX3NldHRpbmdzW0VYUE9TVVJFX0lEWF0pOworCXBiMDEwMF9zZXRfYXV0b2dhaW5fdGFyZ2V0KCZzZC0+Z3NwY2FfZGV2LAorCQkJCSAgIHNlbnNvcl9zZXR0aW5nc1tBVVRPR0FJTl9UQVJHRVRfSURYXSk7CisJcGIwMTAwX3NldF9hdXRvZ2Fpbigmc2QtPmdzcGNhX2Rldiwgc2Vuc29yX3NldHRpbmdzW0FVVE9HQUlOX0lEWF0pOworCisJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0NPTlRST0wsIEJJVCg1KXxCSVQoMyl8QklUKDEpKTsKKwlQREVCVUcoRF9TVFJFQU0sICJTdGFydGVkIHN0cmVhbSwgc3RhdHVzOiAlZCIsIGVycik7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc3RvcChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBlcnI7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfQUJPUlRGUkFNRSwgMSk7CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBTZXQgYml0IDEgdG8gemVybyAqLworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9DT05UUk9MLCBCSVQoNSl8QklUKDMpKTsKKworCVBERUJVRyhEX1NUUkVBTSwgIkhhbHRpbmcgc3RyZWFtIik7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKKy8qIEZJWE1FOiBTb3J0IHRoZSBpbml0IGNvbW1hbmRzIG91dCBhbmQgcHV0IHRoZW0gaW50byB0YWJsZXMsCisJICB0aGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgdGhlIGNhbWVyYSB0byB3b3JrICovCisvKiBGSVhNRTogTm8gZXJyb3IgaGFuZGxpbmcgZm9yIG5vdywKKwkgIGFkZCB0aGlzIG9uY2UgdGhlIGluaXQgaGFzIGJlZW4gY29udmVydGVkIHRvIHByb3BlciB0YWJsZXMgKi8KK3N0YXRpYyBpbnQgcGIwMTAwX2luaXQoc3RydWN0IHNkICpzZCkKK3sKKwlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1JFRzAwLCAxKTsKKwlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1NDQU5fUkFURSwgMCk7CisKKwkvKiBSZXNldCBzZW5zb3IgKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUkVTRVQsIDEpOworCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SRVNFVCwgMCk7CisKKwkvKiBEaXNhYmxlIGNoaXAgKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfQ09OVFJPTCwgQklUKDUpfEJJVCgzKSk7CisKKwkvKiBHYWluIHN0dWZmLi4uKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUFJFQURDVFJMLCBCSVQoMTIpfEJJVCgxMCl8QklUKDYpKTsKKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfQURDR0xPQkFMR0FJTiwgMTIpOworCisJLyogU2V0IHVwIGF1dG8tZXhwb3N1cmUgKi8KKwkvKiBBREMgVlJFRl9ISSBuZXcgc2V0dGluZyBmb3IgYSB0cmFuc2l0aW9uCisJICBmcm9tIHRoZSBFeHBvc2UxIHRvIHRoZSBFeHBvc2UyIHNldHRpbmcgKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUjI4LCAxMik7CisJLyogZ2FpbiBtYXggZm9yIGF1dG9leHBvc3VyZSAqLworCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9BRENNQVhHQUlOLCAxODApOworCS8qIGdhaW4gbWluIGZvciBhdXRvZXhwb3N1cmUgICovCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0FEQ01JTkdBSU4sIDEyKTsKKwkvKiBNYXhpbXVtIGZyYW1lIGludGVncmF0aW9uIHRpbWUgKHByb2dyYW1tZWQgaW50byBSOCkKKwkgICBhbGxvd2VkIGZvciBhdXRvLWV4cG9zdXJlIHJvdXRpbmUgKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUjU0LCAzKTsKKwkvKiBNaW5pbXVtIGZyYW1lIGludGVncmF0aW9uIHRpbWUgKHByb2dyYW1tZWQgaW50byBSOCkKKwkgICBhbGxvd2VkIGZvciBhdXRvLWV4cG9zdXJlIHJvdXRpbmUgKi8KKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUjU1LCAwKTsKKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfVVBEQVRFSU5ULCAxKTsKKwkvKiBSMTUgIEV4cG9zZTAgKG1heGltdW0gdGhhdCBhdXRvLWV4cG9zdXJlIG1heSB1c2UpICovCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1IxNSwgODAwKTsKKwkvKiBSMTcgIEV4cG9zZTIgKG1pbmltdW0gdGhhdCBhdXRvLWV4cG9zdXJlIG1heSB1c2UpICovCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1IxNywgMTApOworCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0VYUEdBSU4sIDApOworCisJLyogMHgxNCAqLworCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9WT0ZGU0VULCAwKTsKKwkvKiAweDBEICovCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0FEQ0dBSU5ILCAxMSk7CisJLyogU2V0IGJsYWNrIGxldmVsIChpbXBvcnRhbnQhKSAqLworCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9BRENHQUlOTCwgMCk7CisKKwkvKiA/Pz8gKi8KKwlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1JFRzAwLCAweDExKTsKKwlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1JFRzAzLCAweDQ1KTsKKwlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1JFRzA0LCAweDA3KTsKKworCS8qIElTTy1TaXplICgweDI3YjogNjM1Li4uIHdoeT8gLSBIRENTIHVzZXMgODQ3KSAqLworCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfSVNPX1NJWkVfTCwgODQ3KTsKKworCS8qIFNjYW4vdGltaW5nIGZvciB0aGUgc2Vuc29yICovCisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1JPV1NQRUVELCBCSVQoNCl8QklUKDMpfEJJVCgxKSk7CisJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0NGSUxMSU4sIDE0KTsKKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfVkJMLCAwKTsKKwlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfRklOVFRJTUUsIDApOworCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SSU5UVElNRSwgMTIzKTsKKworCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfUkVHMDEsIDB4YzIpOworCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfUkVHMDIsIDB4YjApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBiMDEwMF9kdW1wKHN0cnVjdCBzZCAqc2QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBiMDEwMF9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCWlmIChzZW5zb3Jfc2V0dGluZ3NbQVVUT0dBSU5fSURYXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNlbnNvcl9zZXR0aW5nc1tHQUlOX0lEWF0gPSB2YWw7CisJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0cxR0FJTiwgdmFsKTsKKwlpZiAoIWVycikKKwkJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX0cyR0FJTiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdyZWVuIGdhaW4gdG8gJWQsIHN0YXR1czogJWQiLCB2YWwsIGVycik7CisKKwlpZiAoIWVycikKKwkJZXJyID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZShnc3BjYV9kZXYsCisJCQkJCSAgICAgc2Vuc29yX3NldHRpbmdzW1JFRF9CQUxBTkNFX0lEWF0pOworCWlmICghZXJyKQorCQllcnIgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZShnc3BjYV9kZXYsCisJCQkJCSAgICBzZW5zb3Jfc2V0dGluZ3NbQkxVRV9CQUxBTkNFX0lEWF0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwYjAxMDBfZ2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW1JFRF9CQUxBTkNFX0lEWF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJaWYgKHNlbnNvcl9zZXR0aW5nc1tBVVRPR0FJTl9JRFhdKQorCQlyZXR1cm4gLUVCVVNZOworCisJc2Vuc29yX3NldHRpbmdzW1JFRF9CQUxBTkNFX0lEWF0gPSB2YWw7CisJdmFsICs9IHNlbnNvcl9zZXR0aW5nc1tHQUlOX0lEWF07CisJaWYgKHZhbCA8IDApCisJCXZhbCA9IDA7CisJZWxzZSBpZiAodmFsID4gMjU1KQorCQl2YWwgPSAyNTU7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfUkdBSU4sIHZhbCk7CisJUERFQlVHKERfVjRMMiwgIlNldCByZWQgZ2FpbiB0byAlZCwgc3RhdHVzOiAlZCIsIHZhbCwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbQkxVRV9CQUxBTkNFX0lEWF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCWlmIChzZW5zb3Jfc2V0dGluZ3NbQVVUT0dBSU5fSURYXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNlbnNvcl9zZXR0aW5nc1tCTFVFX0JBTEFOQ0VfSURYXSA9IHZhbDsKKwl2YWwgKz0gc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXTsKKwlpZiAodmFsIDwgMCkKKwkJdmFsID0gMDsKKwllbHNlIGlmICh2YWwgPiAyNTUpCisJCXZhbCA9IDI1NTsKKworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9CR0FJTiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGJsdWUgZ2FpbiB0byAlZCwgc3RhdHVzOiAlZCIsIHZhbCwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tFWFBPU1VSRV9JRFhdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCWlmIChzZW5zb3Jfc2V0dGluZ3NbQVVUT0dBSU5fSURYXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNlbnNvcl9zZXR0aW5nc1tFWFBPU1VSRV9JRFhdID0gdmFsOworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SSU5UVElNRSwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkLCBzdGF0dXM6ICVkIiwgdmFsLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwYjAxMDBfZ2V0X2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0FVVE9HQUlOX0lEWF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc2V0X2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJc2Vuc29yX3NldHRpbmdzW0FVVE9HQUlOX0lEWF0gPSB2YWw7CisJaWYgKHNlbnNvcl9zZXR0aW5nc1tBVVRPR0FJTl9JRFhdKSB7CisJCWlmIChzZW5zb3Jfc2V0dGluZ3NbTkFUVVJBTF9JRFhdKQorCQkJdmFsID0gQklUKDYpfEJJVCg0KXxCSVQoMCk7CisJCWVsc2UKKwkJCXZhbCA9IEJJVCg0KXxCSVQoMCk7CisJfSBlbHNlCisJCXZhbCA9IDA7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgUEJfRVhQR0FJTiwgdmFsKTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG9nYWluIHRvICVkIChuYXR1cmFsOiAlZCksIHN0YXR1czogJWQiLAorCSAgICAgICBzZW5zb3Jfc2V0dGluZ3NbQVVUT0dBSU5fSURYXSwgc2Vuc29yX3NldHRpbmdzW05BVFVSQUxfSURYXSwKKwkgICAgICAgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGIwMTAwX2dldF9hdXRvZ2Fpbl90YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbQVVUT0dBSU5fVEFSR0VUX0lEWF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyLCB0b3RhbHBpeGVscywgYnJpZ2h0cGl4ZWxzLCBkYXJrcGl4ZWxzOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tBVVRPR0FJTl9UQVJHRVRfSURYXSA9IHZhbDsKKworCS8qIE51bWJlciBvZiBwaXhlbHMgY291bnRlZCBieSB0aGUgc2Vuc29yIHdoZW4gc3Vic2FtcGxpbmcgdGhlIHBpeGVscy4KKwkgKiBTbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUgcmVhbCB2YWx1ZSB0byBhdm9pZCBvc2NpbGxhdGlvbiAqLworCXRvdGFscGl4ZWxzID0gZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0OworCXRvdGFscGl4ZWxzID0gdG90YWxwaXhlbHMvKDgqOCkgKyB0b3RhbHBpeGVscy8oNjQqNjQpOworCisJYnJpZ2h0cGl4ZWxzID0gKHRvdGFscGl4ZWxzICogdmFsKSA+PiA4OworCWRhcmtwaXhlbHMgICA9IHRvdGFscGl4ZWxzIC0gYnJpZ2h0cGl4ZWxzOworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SMjEsIGJyaWdodHBpeGVscyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9SMjIsIGRhcmtwaXhlbHMpOworCisJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvZ2FpbiB0YXJnZXQgdG8gJWQsIHN0YXR1czogJWQiLCB2YWwsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBiMDEwMF9nZXRfbmF0dXJhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tOQVRVUkFMX0lEWF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYjAxMDBfc2V0X25hdHVyYWwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OworCisJc2Vuc29yX3NldHRpbmdzW05BVFVSQUxfSURYXSA9IHZhbDsKKworCXJldHVybiBwYjAxMDBfc2V0X2F1dG9nYWluKGdzcGNhX2Rldiwgc2Vuc29yX3NldHRpbmdzW0FVVE9HQUlOX0lEWF0pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWEyMWExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVhbi1GcmVkcmljIENsZXJlLCBOaWtvbGFzIFppbW1lcm1hbm4sIEdlb3JnIEFjaGVyCisgKgkJICAgICAgTWFyayBDYXZlLUF5bGFuZCwgQ2FybG8gRSBQcmVseiwgRGljayBTdHJlZWZsYW5kCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVHV1a2thIFRvaXZvbmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFAvTiA4NjEwMzc6ICAgICAgU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAxMDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAyMDogU2Vuc29yIFBob3RvYml0IFBCMTAwICBBU0lDIFNUVjA2MDAtMSAtIFF1aWNrQ2FtIEV4cHJlc3MKKyAqIFAvTiA4NjEwNTU6ICAgICAgU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIExFR08gY2FtCisgKiBQL04gODYxMDc1LTAwNDA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQworICogUC9OIDk2MTE3OS0wNzAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYwMiAgIC0gRGV4eGEgV2ViQ2FtIFVTQgorICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCisgKi8KKworI2lmbmRlZiBTVFYwNlhYX1BCMDEwMF9IXworI2RlZmluZSBTVFYwNlhYX1BCMDEwMF9IXworCisjaW5jbHVkZSAic3R2MDZ4eF9zZW5zb3IuaCIKKworLyogbW9kZSBwcml2IGZpZWxkIGZsYWdzICovCisjZGVmaW5lIFBCMDEwMF9DUk9QX1RPX1ZHQQkweDAxCisjZGVmaW5lIFBCMDEwMF9TVUJTQU1QTEUJMHgwMgorCisvKiBJMkMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBCX0lERU5UCQkweDAwCS8qIENoaXAgVmVyc2lvbiAqLworI2RlZmluZSBQQl9SU1RBUlQJCTB4MDEJLyogUm93IFdpbmRvdyBTdGFydCAqLworI2RlZmluZSBQQl9DU1RBUlQJCTB4MDIJLyogQ29sdW1uIFdpbmRvdyBTdGFydCAqLworI2RlZmluZSBQQl9SV1NJWkUJCTB4MDMJLyogUm93IFdpbmRvdyBTaXplICovCisjZGVmaW5lIFBCX0NXU0laRQkJMHgwNAkvKiBDb2x1bW4gIFdpbmRvdyBTaXplICovCisjZGVmaW5lIFBCX0NGSUxMSU4JCTB4MDUJLyogQ29sdW1uIEZpbGwtSW4gKi8KKyNkZWZpbmUgUEJfVkJMCQkJMHgwNgkvKiBWZXJ0aWNhbCBCbGFuayBDb3VudCAqLworI2RlZmluZSBQQl9DT05UUk9MCQkweDA3CS8qIENvbnRyb2wgTW9kZSAqLworI2RlZmluZSBQQl9GSU5UVElNRQkJMHgwOAkvKiBJbnRlZ3JhdGlvbiBUaW1lL0ZyYW1lIFVuaXQgQ291bnQgKi8KKyNkZWZpbmUgUEJfUklOVFRJTUUJCTB4MDkJLyogSW50ZWdyYXRpb24gVGltZS9Sb3cgVW5pdCBDb3VudCAqLworI2RlZmluZSBQQl9ST1dTUEVFRAkJMHgwYQkvKiBSb3cgU3BlZWQgQ29udHJvbCAqLworI2RlZmluZSBQQl9BQk9SVEZSQU1FCQkweDBiCS8qIEFib3J0IEZyYW1lICovCisjZGVmaW5lIFBCX1IxMgkJCTB4MGMJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUEJfUkVTRVQJCTB4MGQJLyogUmVzZXQgKi8KKyNkZWZpbmUgUEJfRVhQR0FJTgkJMHgwZQkvKiBFeHBvc3VyZSBHYWluIENvbW1hbmQgKi8KKyNkZWZpbmUgUEJfUjE1CQkJMHgwZgkvKiBFeHBvc2UwICovCisjZGVmaW5lIFBCX1IxNgkJCTB4MTAJLyogRXhwb3NlMSAqLworI2RlZmluZSBQQl9SMTcJCQkweDExCS8qIEV4cG9zZTIgKi8KKyNkZWZpbmUgUEJfUjE4CQkJMHgxMgkvKiBMb3cwX0RBQyAqLworI2RlZmluZSBQQl9SMTkJCQkweDEzCS8qIExvdzFfREFDICovCisjZGVmaW5lIFBCX1IyMAkJCTB4MTQJLyogTG93Ml9EQUMgKi8KKyNkZWZpbmUgUEJfUjIxCQkJMHgxNQkvKiBUaHJlc2hvbGQxMSAqLworI2RlZmluZSBQQl9SMjIJCQkweDE2CS8qIFRocmVzaG9sZDB4ICovCisjZGVmaW5lIFBCX1VQREFURUlOVAkJMHgxNwkvKiBVcGRhdGUgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgUEJfUjI0CQkJMHgxOAkvKiBIaWdoX0RBQyAqLworI2RlZmluZSBQQl9SMjUJCQkweDE5CS8qIFRyYW5zMEggKi8KKyNkZWZpbmUgUEJfUjI2CQkJMHgxYQkvKiBUcmFuczFMICovCisjZGVmaW5lIFBCX1IyNwkJCTB4MWIJLyogVHJhbnMxSCAqLworI2RlZmluZSBQQl9SMjgJCQkweDFjCS8qIFRyYW5zMkwgKi8KKyNkZWZpbmUgUEJfUjI5CQkJMHgxZAkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBQQl9SMzAJCQkweDFlCS8qIFJlc2VydmVkICovCisjZGVmaW5lIFBCX1IzMQkJCTB4MWYJLyogV2FpdCB0byBSZWFkICovCisjZGVmaW5lIFBCX1BSRUFEQ1RSTAkJMHgyMAkvKiBQaXhlbCBSZWFkIENvbnRyb2wgTW9kZSAqLworI2RlZmluZSBQQl9SMzMJCQkweDIxCS8qIElSRUZfVkxOICovCisjZGVmaW5lIFBCX1IzNAkJCTB4MjIJLyogSVJFRl9WTFAgKi8KKyNkZWZpbmUgUEJfUjM1CQkJMHgyMwkvKiBJUkVGX1ZMTl9JTlRFRyAqLworI2RlZmluZSBQQl9SMzYJCQkweDI0CS8qIElSRUZfTUFTVEVSICovCisjZGVmaW5lIFBCX1IzNwkJCTB4MjUJLyogSURBQ1AgKi8KKyNkZWZpbmUgUEJfUjM4CQkJMHgyNgkvKiBJREFDTiAqLworI2RlZmluZSBQQl9SMzkJCQkweDI3CS8qIERBQ19Db250cm9sX1JlZyAqLworI2RlZmluZSBQQl9SNDAJCQkweDI4CS8qIFZDTCAqLworI2RlZmluZSBQQl9SNDEJCQkweDI5CS8qIElSRUZfVkxOX0FEQ0lOICovCisjZGVmaW5lIFBCX1I0MgkJCTB4MmEJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUEJfRzFHQUlOCQkweDJiCS8qIEdyZWVuIDEgR2FpbiAqLworI2RlZmluZSBQQl9CR0FJTgkJMHgyYwkvKiBCbHVlIEdhaW4gKi8KKyNkZWZpbmUgUEJfUkdBSU4JCTB4MmQJLyogUmVkIEdhaW4gKi8KKyNkZWZpbmUgUEJfRzJHQUlOCQkweDJlCS8qIEdyZWVuIDIgR2FpbiAqLworI2RlZmluZSBQQl9SNDcJCQkweDJmCS8qIERhcmsgUm93IEFkZHJlc3MgKi8KKyNkZWZpbmUgUEJfUjQ4CQkJMHgzMAkvKiBEYXJrIFJvdyBPcHRpb25zICovCisjZGVmaW5lIFBCX1I0OQkJCTB4MzEJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUEJfUjUwCQkJMHgzMgkvKiBJbWFnZSBUZXN0IERhdGEgKi8KKyNkZWZpbmUgUEJfQURDTUFYR0FJTgkJMHgzMwkvKiBNYXhpbXVtIEdhaW4gKi8KKyNkZWZpbmUgUEJfQURDTUlOR0FJTgkJMHgzNAkvKiBNaW5pbXVtIEdhaW4gKi8KKyNkZWZpbmUgUEJfQURDR0xPQkFMR0FJTgkweDM1CS8qIEdsb2JhbCBHYWluICovCisjZGVmaW5lIFBCX1I1NAkJCTB4MzYJLyogTWF4aW11bSBGcmFtZSAqLworI2RlZmluZSBQQl9SNTUJCQkweDM3CS8qIE1pbmltdW0gRnJhbWUgKi8KKyNkZWZpbmUgUEJfUjU2CQkJMHgzOAkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBQQl9WT0ZGU0VUCQkweDM5CS8qIFZPRkZTRVQgKi8KKyNkZWZpbmUgUEJfUjU4CQkJMHgzYQkvKiBTbmFwLVNob3QgU2VxdWVuY2UgVHJpZ2dlciAqLworI2RlZmluZSBQQl9BRENHQUlOSAkJMHgzYgkvKiBWUkVGX0hJICovCisjZGVmaW5lIFBCX0FEQ0dBSU5MCQkweDNjCS8qIFZSRUZfTE8gKi8KKyNkZWZpbmUgUEJfUjYxCQkJMHgzZAkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBQQl9SNjIJCQkweDNlCS8qIFJlc2VydmVkICovCisjZGVmaW5lIFBCX1I2MwkJCTB4M2YJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUEJfUjY0CQkJMHg0MAkvKiBSZWQvQmx1ZSBHYWluICovCisjZGVmaW5lIFBCX1I2NQkJCTB4NDEJLyogR3JlZW4gMi9HcmVlbiAxIEdhaW4gKi8KKyNkZWZpbmUgUEJfUjY2CQkJMHg0MgkvKiBWUkVGX0hJL0xPICovCisjZGVmaW5lIFBCX1I2NwkJCTB4NDMJLyogSW50ZWdyYXRpb24gVGltZS9Sb3cgVW5pdCBDb3VudCAqLworI2RlZmluZSBQQl9SMjQwCQkJMHhmMAkvKiBBREMgVGVzdCAqLworI2RlZmluZSBQQl9SMjQxCQkJMHhmMSAgICAvKiBDaGlwIEVuYWJsZSAqLworI2RlZmluZSBQQl9SMjQyCQkJMHhmMgkvKiBSZXNlcnZlZCAqLworCitzdGF0aWMgaW50IHBiMDEwMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgcGIwMTAwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpOworc3RhdGljIGludCBwYjAxMDBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgcGIwMTAwX3N0b3Aoc3RydWN0IHNkICpzZCk7CitzdGF0aWMgaW50IHBiMDEwMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHBiMDEwMF9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBwYjAxMDBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBwYjAxMDBfZ2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9zZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBwYjAxMDBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgcGIwMTAwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9nZXRfYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgcGIwMTAwX3NldF9hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9zZXRfYXV0b2dhaW5fdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgcGIwMTAwX2dldF9uYXR1cmFsKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHBiMDEwMF9zZXRfbmF0dXJhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CisKK2NvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9wYjAxMDAgPSB7CisJLm5hbWUgPSAiUEItMDEwMCIsCisJLmkyY19mbHVzaCA9IDEsCisJLmkyY19hZGRyID0gMHhiYSwKKwkuaTJjX2xlbiA9IDIsCisKKwkubmN0cmxzID0gNywKKwkuY3RybHMgPSB7CisjZGVmaW5lIEdBSU5fSURYIDAKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJHYWluIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9nYWluCisJfSwKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDEKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiUmVkIEJhbGFuY2UiLAorCQkJLm1pbmltdW0JPSAtMjU1LAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfcmVkX2JhbGFuY2UKKwl9LAorI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkJsdWUgQmFsYW5jZSIsCisJCQkubWluaW11bQk9IC0yNTUsCisJCQkubWF4aW11bQk9IDI1NSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwKKyNkZWZpbmUgRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSA1MTEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTIKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2V4cG9zdXJlCisJfSwKKyNkZWZpbmUgQVVUT0dBSU5fSURYIDQKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gYW5kIEV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAxCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2FpbgorCX0sCisjZGVmaW5lIEFVVE9HQUlOX1RBUkdFVF9JRFggNQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAwLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBUYXJnZXQiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4CisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldCwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0CisJfSwKKyNkZWZpbmUgTkFUVVJBTF9JRFggNgorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAxLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJOYXR1cmFsIExpZ2h0IFNvdXJjZSIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMQorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9uYXR1cmFsLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9uYXR1cmFsCisJfSwKKwl9LAorCisJLmluaXQgPSBwYjAxMDBfaW5pdCwKKwkucHJvYmUgPSBwYjAxMDBfcHJvYmUsCisJLnN0YXJ0ID0gcGIwMTAwX3N0YXJ0LAorCS5zdG9wID0gcGIwMTAwX3N0b3AsCisJLmR1bXAgPSBwYjAxMDBfZHVtcCwKKworCS5ubW9kZXMgPSAyLAorCS5tb2RlcyA9IHsKKy8qIGxvdyByZXMgLyBzdWJzYW1wbGUgbW9kZXMgZGlzYWJsZWQgYXMgdGhleSBhcmUgb25seSBoYWxmIHJlcyBob3Jpem9udGFsLAorICAgaGFsdmluZyB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgKi8KKwl7CisJCTMyMCwKKwkJMjQwLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gUEIwMTAwX0NST1BfVE9fVkdBCisJfSwKKwl7CisJCTM1MiwKKwkJMjg4LAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0sCisJfQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3NlbnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjZkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxIEplYW4tRnJlZHJpYyBDbGVyZSwgTmlrb2xhcyBaaW1tZXJtYW5uLCBHZW9yZyBBY2hlcgorICoJCSAgICAgIE1hcmsgQ2F2ZS1BeWxhbmQsIENhcmxvIEUgUHJlbHosIERpY2sgU3RyZWVmbGFuZAorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFR1dWtrYSBUb2l2b25lbgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcsOpbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBQL04gODYxMDM3OiAgICAgIFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQyBTVFYwNjAwCisgKiBQL04gODYxMDUwLTAwMTA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQyBTVFYwNjAwCisgKiBQL04gODYxMDUwLTAwMjA6IFNlbnNvciBQaG90b2JpdCBQQjEwMCAgQVNJQyBTVFYwNjAwLTEgLSBRdWlja0NhbSBFeHByZXNzCisgKiBQL04gODYxMDU1OiAgICAgIFNlbnNvciBTVCBWVjY0MTAgICAgICAgQVNJQyBTVFYwNjEwICAgLSBMRUdPIGNhbQorICogUC9OIDg2MTA3NS0wMDQwOiBTZW5zb3IgSERDUzEwMDAgICAgICAgIEFTSUMKKyAqIFAvTiA5NjExNzktMDcwMDogU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MDIgICAtIERleHhhIFdlYkNhbSBVU0IKKyAqIFAvTiA4NjEwNDAtMDAwMDogU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIFF1aWNrQ2FtIFdlYgorICovCisKKyNpZm5kZWYgU1RWMDZYWF9TRU5TT1JfSF8KKyNkZWZpbmUgU1RWMDZYWF9TRU5TT1JfSF8KKworI2luY2x1ZGUgInN0djA2eHguaCIKKworI2RlZmluZSBJU184NTAoc2QpCSgoc2QpLT5nc3BjYV9kZXYuZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSAweDg1MCkKKyNkZWZpbmUgSVNfODcwKHNkKQkoKHNkKS0+Z3NwY2FfZGV2LmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gMHg4NzApCisjZGVmaW5lIElTXzEwMjAoc2QpCSgoc2QpLT5zZW5zb3IgPT0gJnN0djA2eHhfc2Vuc29yX2hkY3MxMDIwKQorCitleHRlcm4gY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX3Z2NjQxMDsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfaGRjczF4MDA7CitleHRlcm4gY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9wYjAxMDA7CisKKyNkZWZpbmUgU1RWMDZYWF9NQVhfQ1RSTFMJCShWNEwyX0NJRF9MQVNUUDEgLSBWNEwyX0NJRF9CQVNFICsgMTApCisKK3N0cnVjdCBzdHYwNnh4X3NlbnNvciB7CisJLyogRGVmaW5lcyB0aGUgbmFtZSBvZiBhIHNlbnNvciAqLworCWNoYXIgbmFtZVszMl07CisKKwkvKiBTZW5zb3IgaTJjIGFkZHJlc3MgKi8KKwl1OCBpMmNfYWRkcjsKKworCS8qIEZsdXNoIHZhbHVlKi8KKwl1OCBpMmNfZmx1c2g7CisKKwkvKiBsZW5ndGggb2YgYW4gaTJjIHdvcmQgKi8KKwl1OCBpMmNfbGVuOworCisJLyogUHJvYmVzIGlmIHRoZSBzZW5zb3IgaXMgY29ubmVjdGVkICovCisJaW50ICgqcHJvYmUpKHN0cnVjdCBzZCAqc2QpOworCisJLyogUGVyZm9ybXMgYSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworCWludCAoKmluaXQpKHN0cnVjdCBzZCAqc2QpOworCisJLyogRXhlY3V0ZWQgYXQgZGV2aWNlIGRpc2Nvbm5lY3QgKi8KKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHNkICpzZCk7CisKKwkvKiBSZWFkcyBhIHNlbnNvciByZWdpc3RlciAqLworCWludCAoKnJlYWRfc2Vuc29yKShzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKworCS8qIFdyaXRlcyB0byBhIHNlbnNvciByZWdpc3RlciAqLworCWludCAoKndyaXRlX3NlbnNvcikoc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKKwkvKiBJbnN0cnVjdHMgdGhlIHNlbnNvciB0byBzdGFydCBzdHJlYW1pbmcgKi8KKwlpbnQgKCpzdGFydCkoc3RydWN0IHNkICpzZCk7CisKKwkvKiBJbnN0cnVjdHMgdGhlIHNlbnNvciB0byBzdG9wIHN0cmVhbWluZyAqLworCWludCAoKnN0b3ApKHN0cnVjdCBzZCAqc2QpOworCisJLyogSW5zdHJ1Y3RzIHRoZSBzZW5zb3IgdG8gZHVtcCBhbGwgaXRzIGNvbnRlbnRzICovCisJaW50ICgqZHVtcCkoc3RydWN0IHNkICpzZCk7CisKKwlpbnQgbmN0cmxzOworCXN0cnVjdCBjdHJsIGN0cmxzW1NUVjA2WFhfTUFYX0NUUkxTXTsKKworCWNoYXIgbm1vZGVzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9kZXNbXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF92djY0MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E5MWYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVhbi1GcmVkcmljIENsZXJlLCBOaWtvbGFzIFppbW1lcm1hbm4sIEdlb3JnIEFjaGVyCisgKgkJICAgICAgTWFyayBDYXZlLUF5bGFuZCwgQ2FybG8gRSBQcmVseiwgRGljayBTdHJlZWZsYW5kCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVHV1a2thIFRvaXZvbmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFAvTiA4NjEwMzc6ICAgICAgU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAxMDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAyMDogU2Vuc29yIFBob3RvYml0IFBCMTAwICBBU0lDIFNUVjA2MDAtMSAtIFF1aWNrQ2FtIEV4cHJlc3MKKyAqIFAvTiA4NjEwNTU6ICAgICAgU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIExFR08gY2FtCisgKiBQL04gODYxMDc1LTAwNDA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQworICogUC9OIDk2MTE3OS0wNzAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYwMiAgIC0gRGV4eGEgV2ViQ2FtIFVTQgorICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCisgKi8KKworI2luY2x1ZGUgInN0djA2eHhfdnY2NDEwLmgiCisKK3N0YXRpYyBpbnQgdnY2NDEwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCit7CisJdTE2IGRhdGE7CisJaW50IGVycjsKKworCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9ERVZJQ0VILCAmZGF0YSk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZGF0YSA9PSAweDE5KSB7CisJCWluZm8oInZ2NjQxMCBzZW5zb3IgZGV0ZWN0ZWQiKTsKKworCQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5tb2RlczsKKwkJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLm5tb2RlczsKKwkJc2QtPmRlc2MuY3RybHMgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAuY3RybHM7CisJCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5uY3RybHM7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IHZ2NjQxMF9pbml0KHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGVyciA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHZfYnJpZGdlX2luaXQpOyBpKyspIHsKKwkJLyogaWYgTlVMTCB0aGVuIGxlbiBjb250YWlucyBzaW5nbGUgdmFsdWUgKi8KKwkJaWYgKHN0dl9icmlkZ2VfaW5pdFtpXS5kYXRhID09IE5VTEwpIHsKKwkJCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLAorCQkJCXN0dl9icmlkZ2VfaW5pdFtpXS5zdGFydCwKKwkJCQlzdHZfYnJpZGdlX2luaXRbaV0ubGVuKTsKKwkJfSBlbHNlIHsKKwkJCWludCBqOworCQkJZm9yIChqID0gMDsgaiA8IHN0dl9icmlkZ2VfaW5pdFtpXS5sZW47IGorKykKKwkJCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwKKwkJCQkJc3R2X2JyaWRnZV9pbml0W2ldLnN0YXJ0ICsgaiwKKwkJCQkJc3R2X2JyaWRnZV9pbml0W2ldLmRhdGFbal0pOworCQl9CisJfQorCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcl9ieXRlcyhzZCwgKHU4ICopIHZ2NjQxMF9zZW5zb3JfaW5pdCwKKwkJCQkJIEFSUkFZX1NJWkUodnY2NDEwX3NlbnNvcl9pbml0KSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCB2djY0MTBfc3RhcnQoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjYW0gKmNhbSA9ICZzZC0+Z3NwY2FfZGV2LmNhbTsKKwl1MzIgcHJpdiA9IGNhbS0+Y2FtX21vZGVbc2QtPmdzcGNhX2Rldi5jdXJyX21vZGVdLnByaXY7CisKKwlpZiAocHJpdiAmIFZWNjQxMF9DUk9QX1RPX1FWR0EpIHsKKwkJUERFQlVHKERfQ09ORiwgIkNyb3BwaW5nIHRvIFFWR0EiKTsKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFZWNjQxMF9YRU5ESCwgMzIwIC0gMSk7CisJCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBWVjY0MTBfWUVOREgsIDI0MCAtIDEpOworCX0gZWxzZSB7CisJCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBWVjY0MTBfWEVOREgsIDM2MCAtIDEpOworCQlzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgVlY2NDEwX1lFTkRILCAyOTQgLSAxKTsKKwl9CisKKwlpZiAocHJpdiAmIFZWNjQxMF9TVUJTQU1QTEUpIHsKKwkJUERFQlVHKERfQ09ORiwgIkVuYWJsaW5nIHN1YnNhbXBsaW5nIik7CisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfWV9DVFJMLCAweDAyKTsKKwkJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9YX0NUUkwsIDB4MDYpOworCisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfU0NBTl9SQVRFLCAweDEwKTsKKwl9IGVsc2UgeworCQlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1lfQ1RSTCwgMHgwMSk7CisJCXN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfWF9DVFJMLCAweDBhKTsKKworCQlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX1NDQU5fUkFURSwgMHgyMCk7CisJfQorCisJLyogVHVybiBvbiBMRUQgKi8KKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX0xFRF9DVFJMLCBMRURfT04pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFZWNjQxMF9TRVRVUDAsIDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJUERFQlVHKERfU1RSRUFNLCAiU3RhcnRpbmcgc3RyZWFtIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2djY0MTBfc3RvcChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBlcnI7CisKKwkvKiBUdXJuIG9mZiBMRUQgKi8KKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX0xFRF9DVFJMLCBMRURfT0ZGKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBWVjY0MTBfU0VUVVAwLCBWVjY0MTBfTE9XX1BPV0VSX01PREUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJUERFQlVHKERfU1RSRUFNLCAiSGFsdGluZyBzdHJlYW0iKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitzdGF0aWMgaW50IHZ2NjQxMF9kdW1wKHN0cnVjdCBzZCAqc2QpCit7CisJdTggaTsKKwlpbnQgZXJyID0gMDsKKworCWluZm8oIkR1bXBpbmcgYWxsIHZ2NjQxMCBzZW5zb3IgcmVnaXN0ZXJzIik7CisJZm9yIChpID0gMDsgaSA8IDB4ZmYgJiYgIWVycjsgaSsrKSB7CisJCXUxNiBkYXRhOworCQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBpLCAmZGF0YSk7CisJCWluZm8oIlJlZ2lzdGVyIDB4JXggY29udGFpbmVkIDB4JXgiLCBpLCBkYXRhKTsKKwl9CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1MTYgaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RBVEFGT1JNQVQsICZpMmNfZGF0YSk7CisKKwkqdmFsID0gKGkyY19kYXRhICYgVlY2NDEwX0hGTElQKSA/IDEgOiAwOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCB2djY0MTBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTE2IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh2YWwpCisJCWkyY19kYXRhIHw9IFZWNjQxMF9IRkxJUDsKKwllbHNlCisJCWkyY19kYXRhICY9IH5WVjY0MTBfSEZMSVA7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCBpMmNfZGF0YSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCB2djY0MTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXUxNiBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKKworCSp2YWwgPSAoaTJjX2RhdGEgJiBWVjY0MTBfVkZMSVApID8gMSA6IDA7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCB2ZXJ0aWNhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCB2djY0MTBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTE2IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh2YWwpCisJCWkyY19kYXRhIHw9IFZWNjQxMF9WRkxJUDsKKwllbHNlCisJCWkyY19kYXRhICY9IH5WVjY0MTBfVkZMSVA7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgaTJjX2RhdGEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdnY2NDEwX2dldF9hbmFsb2dfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1MTYgaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0FOQUxPR0dBSU4sICZpMmNfZGF0YSk7CisKKwkqdmFsID0gaTJjX2RhdGEgJiAweGY7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBhbmFsb2cgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdnY2NDEwX3NldF9hbmFsb2dfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYW5hbG9nIGdhaW4gdG8gJWQiLCB2YWwpOworCWVyciA9IHN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBWVjY0MTBfQU5BTE9HR0FJTiwgMHhmMCB8ICh2YWwgJiAweGYpKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF92djY0MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY4YzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgSmVhbi1GcmVkcmljIENsZXJlLCBOaWtvbGFzIFppbW1lcm1hbm4sIEdlb3JnIEFjaGVyCisgKgkJICAgICAgTWFyayBDYXZlLUF5bGFuZCwgQ2FybG8gRSBQcmVseiwgRGljayBTdHJlZWZsYW5kCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVHV1a2thIFRvaXZvbmVuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIFAvTiA4NjEwMzc6ICAgICAgU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAxMDogU2Vuc29yIEhEQ1MxMDAwICAgICAgICBBU0lDIFNUVjA2MDAKKyAqIFAvTiA4NjEwNTAtMDAyMDogU2Vuc29yIFBob3RvYml0IFBCMTAwICBBU0lDIFNUVjA2MDAtMSAtIFF1aWNrQ2FtIEV4cHJlc3MKKyAqIFAvTiA4NjEwNTU6ICAgICAgU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIExFR08gY2FtCisgKiBQL04gODYxMDc1LTAwNDA6IFNlbnNvciBIRENTMTAwMCAgICAgICAgQVNJQworICogUC9OIDk2MTE3OS0wNzAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYwMiAgIC0gRGV4eGEgV2ViQ2FtIFVTQgorICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCisgKi8KKworI2lmbmRlZiBTVFYwNlhYX1ZWNjQxMF9IXworI2RlZmluZSBTVFYwNlhYX1ZWNjQxMF9IXworCisjaW5jbHVkZSAic3R2MDZ4eF9zZW5zb3IuaCIKKworI2RlZmluZSBWVjY0MTBfQ09MUwkJCTQxNgorI2RlZmluZSBWVjY0MTBfUk9XUwkJCTMyMAorCisvKiBTdGF0dXMgcmVnaXN0ZXJzICovCisvKiBDaGlwIGlkZW50aWZpY2F0aW9uIG51bWJlciBpbmNsdWRpbmcgcmV2aXNpb24gaW5kaWNhdG9yICovCisjZGVmaW5lIFZWNjQxMF9ERVZJQ0VICQkJMHgwMAorI2RlZmluZSBWVjY0MTBfREVWSUNFTAkJCTB4MDEKKworLyogVXNlciBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGltZWQgSTJDIGRhdGEKKyAgIGhhcyBiZWVuIGNvbnN1bWVkIGJ5IGludGVycm9nYXRpbmcgZmxhZyBzdGF0ZXMgKi8KKyNkZWZpbmUgVlY2NDEwX1NUQVRVUzAJCQkweDAyCisKKy8qIEN1cnJlbnQgbGluZSBjb3VudGVyIHZhbHVlICovCisjZGVmaW5lIFZWNjQxMF9MSU5FQ09VTlRICQkweDAzCisjZGVmaW5lIFZWNjQxMF9MSU5FQ09VTlRMCQkweDA0CisKKy8qIEVuZCB4IGNvb3JkaW5hdGUgb2YgaW1hZ2Ugc2l6ZSAqLworI2RlZmluZSBWVjY0MTBfWEVOREgJCQkweDA1CisjZGVmaW5lIFZWNjQxMF9YRU5ETAkJCTB4MDYKKworLyogRW5kIHkgY29vcmRpbmF0ZSBvZiBpbWFnZSBzaXplICovCisjZGVmaW5lIFZWNjQxMF9ZRU5ESAkJCTB4MDcKKyNkZWZpbmUgVlY2NDEwX1lFTkRMCQkJMHgwOAorCisvKiBUaGlzIGlzIHRoZSBhdmVyYWdlIHBpeGVsIHZhbHVlIHJldHVybmVkIGZyb20gdGhlCisgICBkYXJrIGxpbmUgb2Zmc2V0IGNhbmNlbGxhdGlvbiBhbGdvcml0aG0gKi8KKyNkZWZpbmUgVlY2NDEwX0RBUktBVkdICQkJMHgwOQorI2RlZmluZSBWVjY0MTBfREFSS0FWR0wJCQkweDBhCisKKy8qIFRoaXMgaXMgdGhlIGF2ZXJhZ2UgcGl4ZWwgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUKKyAgIGJsYWNrIGxpbmUgb2Zmc2V0IGNhbmNlbGxhdGlvbiBhbGdvcml0aG0gICovCisjZGVmaW5lIFZWNjQxMF9CTEFDS0FWR0gJCTB4MGIKKyNkZWZpbmUgVlY2NDEwX0JMQUNLQVZHTAkJMHgwYworCisvKiBGbGFncyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB4IG9yIHkgaW1hZ2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIGNsaXBwZWQgKi8KKyNkZWZpbmUgVlY2NDEwX1NUQVRVUzEJCQkweDBkCisKKy8qIFNldHVwIHJlZ2lzdGVycyAqLworCisvKiBMb3ctcG93ZXIvc2xlZXAgbW9kZXMgJiB2aWRlbyB0aW1pbmcgKi8KKyNkZWZpbmUgVlY2NDEwX1NFVFVQMAkJCTB4MTAKKworLyogVmFyaW91cyBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFZWNjQxMF9TRVRVUDEJCQkweDExCisKKy8qIENvbnRhaW5zIHBpeGVsIGNvdW50ZXIgcmVzZXQgdmFsdWUgdXNlZCBieSBleHRlcm5hbCBzeW5jICovCisjZGVmaW5lIFZWNjQxMF9TWU5DVkFMVUUJCTB4MTIKKworLyogRnJhbWUgZ3JhYmJpbmcgbW9kZXMgKEZTVCwgTFNUIGFuZCBRQ0spICovCisjZGVmaW5lIFZWNjQxMF9GR01PREVTCQkJMHgxNAorCisvKiBGU1QgYW5kIFFDSyBtYXBwaW5nIG1vZGVzLiAqLworI2RlZmluZSBWVjY0MTBfUElOTUFQUElORwkJMHgxNQorCisvKiBEYXRhIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgVlY2NDEwX0RBVEFGT1JNQVQJCTB4MTYKKworLyogT3V0cHV0IGNvZGluZyBmb3JtYXRzICovCisjZGVmaW5lIFZWNjQxMF9PUEZPUk1BVAkJCTB4MTcKKworLyogVmFyaW91cyBtb2RlIHNlbGVjdCBiaXRzICovCisjZGVmaW5lIFZWNjQxMF9NT0RFU0VMRUNUCQkweDE4CisKKy8qIEV4cG9zdXJlIHJlZ2lzdGVycyAqLworLyogRmluZSBleHBvc3VyZS4gKi8KKyNkZWZpbmUgVlY2NDEwX0ZJTkVICQkJMHgyMAorI2RlZmluZSBWVjY0MTBfRklORUwJCQkweDIxCisKKy8qIENvYXJzZSBleHBvc3VyZSAqLworI2RlZmluZSBWVjY0MTBfQ09BUlNFSAkJCTB4MjIKKyNkZWZpbmUgVlY2NDEwX0NPQVJTRUwJCQkweDIzCisKKy8qIEFuYWxvZyBnYWluIHNldHRpbmcgKi8KKyNkZWZpbmUgVlY2NDEwX0FOQUxPR0dBSU4JCTB4MjQKKworLyogQ2xvY2sgZGl2aXNpb24gKi8KKyNkZWZpbmUgVlY2NDEwX0NMS0RJVgkJCTB4MjUKKworLyogRGFyayBsaW5lIG9mZnNldCBjYW5jZWxsYXRpb24gdmFsdWUgKi8KKyNkZWZpbmUgVlY2NDEwX0RBUktPRkZTRVRICQkweDJjCisjZGVmaW5lIFZWNjQxMF9EQVJLT0ZGU0VUTAkJMHgyZAorCisvKiBEYXJrIGxpbmUgb2Zmc2V0IGNhbmNlbGxhdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgVlY2NDEwX0RBUktPRkZTRVRTRVRVUAkJMHgyZQorCisvKiBWaWRlbyB0aW1pbmcgcmVnaXN0ZXJzICovCisvKiBMaW5lIExlbmd0aCAoUGl4ZWwgQ2xvY2tzKSAqLworI2RlZmluZSBWVjY0MTBfTElORUxFTkdUSEgJCTB4NTIKKyNkZWZpbmUgVlY2NDEwX0xJTkVMRU5HVEhMCQkweDUzCisKKy8qIFgtY28tb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIHJlZ2lvbiBvZiBpbnRlcmVzdCAoeC1vZmZzZXQpICovCisjZGVmaW5lIFZWNjQxMF9YT0ZGU0VUSAkJCTB4NTcKKyNkZWZpbmUgVlY2NDEwX1hPRkZTRVRMCQkJMHg1OAorCisvKiBZLWNvb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIHJlZ2lvbiBvZiBpbnRlcmVzdCAoeS1vZmZzZXQpICovCisjZGVmaW5lIFZWNjQxMF9ZT0ZGU0VUSAkJCTB4NTkKKyNkZWZpbmUgVlY2NDEwX1lPRkZTRVRMCQkJMHg1YQorCisvKiBGaWVsZCBsZW5ndGggKExpbmVzKSAqLworI2RlZmluZSBWVjY0MTBfRklFTERMRU5HVEhICQkweDYxCisjZGVmaW5lIFZWNjQxMF9GSUVMRExFTkdUSEwJCTB4NjIKKworLyogU3lzdGVtIHJlZ2lzdGVycyAqLworLyogQmxhY2sgb2Zmc2V0IGNhbmNlbGxhdGlvbiBkZWZhdWx0IHZhbHVlICovCisjZGVmaW5lIFZWNjQxMF9CTEFDS09GRlNFVEgJCTB4NzAKKyNkZWZpbmUgVlY2NDEwX0JMQUNLT0ZGU0VUTAkJMHg3MQorCisvKiBCbGFjayBvZmZzZXQgY2FuY2VsbGF0aW9uIHNldHVwICovCisjZGVmaW5lIFZWNjQxMF9CTEFDS09GRlNFVFNFVFVQCQkweDcyCisKKy8qIEFuYWxvZyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVlY2NDEwX0NSMAkJCTB4NzUKKworLyogQW5hbG9nIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBWVjY0MTBfQ1IxCQkJMHg3NgorCisvKiBBREMgU2V0dXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlY2NDEwX0FTMAkJCTB4NzcKKworLyogQW5hbG9nIFRlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlY2NDEwX0FUMAkJCTB4NzgKKworLyogQXVkaW8gQW1wbGlmaWVyIFNldHVwIFJlZ2lzdGVyICovCisjZGVmaW5lIFZWNjQxMF9BVDEJCQkweDc5CisKKyNkZWZpbmUgVlY2NDEwX0hGTElQIAkJCSgxIDw8IDMpCisjZGVmaW5lIFZWNjQxMF9WRkxJUCAJCQkoMSA8PCA0KQorCisjZGVmaW5lIFZWNjQxMF9MT1dfUE9XRVJfTU9ERQkJKDEgPDwgMCkKKyNkZWZpbmUgVlY2NDEwX1NPRlRfUkVTRVQJCSgxIDw8IDIpCisjZGVmaW5lIFZWNjQxMF9QQUxfMjVfRlBTCQkoMCA8PCAzKQorCisjZGVmaW5lIFZWNjQxMF9DTEtfRElWXzIJCSgxIDw8IDEpCisKKyNkZWZpbmUgVlY2NDEwX0ZJTkVfRVhQT1NVUkUJCTMyMAorI2RlZmluZSBWVjY0MTBfQ09BUlNFX0VYUE9TVVJFCQkxOTIKKyNkZWZpbmUgVlY2NDEwX0RFRkFVTFRfR0FJTgkJNQorCisjZGVmaW5lIFZWNjQxMF9TVUJTQU1QTEUJCTB4MDEKKyNkZWZpbmUgVlY2NDEwX0NST1BfVE9fUVZHQQkJMHgwMgorCitzdGF0aWMgaW50IHZ2NjQxMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgdnY2NDEwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpOworc3RhdGljIGludCB2djY0MTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyBpbnQgdnY2NDEwX3N0b3Aoc3RydWN0IHNkICpzZCk7CitzdGF0aWMgaW50IHZ2NjQxMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHZ2NjQxMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgdnY2NDEwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHZ2NjQxMF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgdnY2NDEwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHZ2NjQxMF9nZXRfYW5hbG9nX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgdnY2NDEwX3NldF9hbmFsb2dfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CisKK2NvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl92djY0MTAgPSB7CisJLm5hbWUgPSAiU1QgVlY2NDEwIiwKKwkuaTJjX2ZsdXNoID0gNSwKKwkuaTJjX2FkZHIgPSAweDIwLAorCS5pMmNfbGVuID0gMSwKKwkuaW5pdCA9IHZ2NjQxMF9pbml0LAorCS5wcm9iZSA9IHZ2NjQxMF9wcm9iZSwKKwkuc3RhcnQgPSB2djY0MTBfc3RhcnQsCisJLnN0b3AgPSB2djY0MTBfc3RvcCwKKwkuZHVtcCA9IHZ2NjQxMF9kdW1wLAorCisJLm5jdHJscyA9IDMsCisJLmN0cmxzID0geworCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF9oZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfaGZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAidmVydGljYWwgZmxpcCIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF92ZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfdmZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJhbmFsb2cgZ2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDE1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IHZ2NjQxMF9zZXRfYW5hbG9nX2dhaW4sCisJCS5nZXQgPSB2djY0MTBfZ2V0X2FuYWxvZ19nYWluCisJfQorCX0sCisKKwkubm1vZGVzID0gMSwKKwkubW9kZXMgPSB7CisJeworCQkzNTYsCisJCTI5MiwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCTM1NiAqIDI5MiwKKwkJLmJ5dGVzcGVybGluZSA9IDM1NiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwCisJfQorCX0KK307CisKKy8qIElmIE5VTEwsIG9ubHkgc2luZ2xlIHZhbHVlIHRvIHdyaXRlLCBzdG9yZWQgaW4gbGVuICovCitzdHJ1Y3Qgc3R2X2luaXQgeworCWNvbnN0IHU4ICpkYXRhOworCXUxNiBzdGFydDsKKwl1OCBsZW47Cit9OworCitzdGF0aWMgY29uc3QgdTggeDE1MDBbXSA9IHsJLyogMHgxNTAwIC0gMHgxNTBmICovCisJMHgwYiwgMHhhNywgMHhiNywgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHgxNTM2W10gPSB7CS8qIDB4MTUzNiAtIDB4MTUzYiAqLworCTB4MDIsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MDEKK307CisKK3N0YXRpYyBjb25zdCB1OCB4MTVjMVtdID0gewkvKiAweDE1YzEgLSAweDE1YzIgKi8KKwkweGZmLCAweDAzIC8qIE91dHB1dCB3b3JkIDB4MDNmZiA9IDEwMjMgKElTTyBzaXplKSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHZfaW5pdCBzdHZfYnJpZGdlX2luaXRbXSA9IHsKKwkvKiBUaGlzIHJlZyBpcyB3cml0dGVuIHR3aWNlLiBTb21lIGtpbmQgb2YgcmVzZXQ/ICovCisJe05VTEwsICAweDE2MjAsIDB4ODB9LAorCXtOVUxMLCAgMHgxNjIwLCAweDAwfSwKKwl7TlVMTCwgIDB4MTQyMywgMHgwNH0sCisJe3gxNTAwLCAweDE1MDAsIEFSUkFZX1NJWkUoeDE1MDApfSwKKwl7eDE1MzYsIDB4MTUzNiwgQVJSQVlfU0laRSh4MTUzNil9LAorCXt4MTVjMSwgMHgxNWMxLCBBUlJBWV9TSVpFKHgxNWMxKX0KK307CisKK3N0YXRpYyBjb25zdCB1OCB2djY0MTBfc2Vuc29yX2luaXRbXVsyXSA9IHsKKwkvKiBTZXR1cCByZWdpc3RlcnMgKi8KKwl7VlY2NDEwX1NFVFVQMCwJCVZWNjQxMF9TT0ZUX1JFU0VUfSwKKwl7VlY2NDEwX1NFVFVQMCwJCVZWNjQxMF9MT1dfUE9XRVJfTU9ERX0sCisJLyogVXNlIHNodWZmbGVkIHJlYWQtb3V0IG1vZGUgKi8KKwl7VlY2NDEwX1NFVFVQMSwJCUJJVCg2KX0sCisJLyogQWxsIG1vZGVzIHRvIDEgKi8KKwl7VlY2NDEwX0ZHTU9ERVMsCUJJVCg2KSB8IEJJVCg0KSB8IEJJVCgyKSB8IEJJVCgwKX0sCisJe1ZWNjQxMF9QSU5NQVBQSU5HLAkweDAwfSwKKwkvKiBQcmUtY2xvY2sgZ2VuZXJhdG9yIGRpdmlkZSBvZmYgKi8KKwl7VlY2NDEwX0RBVEFGT1JNQVQsCUJJVCg3KSB8IEJJVCgwKX0sCisKKwkvKiBFeHBvc3VyZSByZWdpc3RlcnMgKi8KKwl7VlY2NDEwX0ZJTkVILAkJVlY2NDEwX0ZJTkVfRVhQT1NVUkUgPj4gOH0sCisJe1ZWNjQxMF9GSU5FTCwJCVZWNjQxMF9GSU5FX0VYUE9TVVJFICYgMHhmZn0sCisJe1ZWNjQxMF9DT0FSU0VILAlWVjY0MTBfQ09BUlNFX0VYUE9TVVJFID4+IDh9LAorCXtWVjY0MTBfQ09BUlNFTCwJVlY2NDEwX0NPQVJTRV9FWFBPU1VSRSAmIDB4ZmZ9LAorCXtWVjY0MTBfQU5BTE9HR0FJTiwJMHhmMCB8IFZWNjQxMF9ERUZBVUxUX0dBSU59LAorCXtWVjY0MTBfQ0xLRElWLAkJVlY2NDEwX0NMS19ESVZfMn0sCisKKwkvKiBTeXN0ZW0gcmVnaXN0ZXJzICovCisJLyogRW5hYmxlIHZvbHRhZ2UgZG91YmxlciAqLworCXtWVjY0MTBfQVMwLAkJQklUKDYpIHwgQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpfSwKKwl7VlY2NDEwX0FUMCwJCTB4MDB9LAorCS8qIFBvd2VyIHVwIGF1ZGlvLCBkaWZmZXJlbnRpYWwgKi8KKwl7VlY2NDEwX0FUMSwJCUJJVCg0KXxCSVQoMCl9LAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCmluZGV4IGJkOTI4ODYuLjZkOTA0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJLnByaXYgPSAxfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGN1c3RvbV9tb2RlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBjdXN0b21fbW9kZVtdID0gewogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLApAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCS5wcml2ID0gMX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZTJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlMltdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyA4ICsgNTkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCBlYWMyNDVkLi42ZWUxMTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJIk5lZ2F0aXZlIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlX3QxNltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVfdDE2W10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogNCAvIDggKyA1OTAsCkBAIC00OTksNyArNDk5LDcgQEAKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfcmVzZXQsIHNpemVvZiBzZW5zb3JfcmVzZXQpOwogCW1zbGVlcCg1KTsKIAlpID0gNDsKLQl3aGlsZSAoLS1pIDwgMCkgeworCXdoaWxlICgtLWkgPiAwKSB7CiAJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CiAJCWlmICghKGJ5dGUgJiAweDAxKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggOTY4YTU5MS4uOTQxNjNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zMCwxNSArMzAsMTAgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCWludCBidWZsZW47CQkJLyogY3VycmVudCBsZW5ndGggb2YgdG1wYnVmICovCi0JX191OCB0bXBidWZbMzUyICogMjg4ICsgMTAgKiAyODhdOwkvKiBubyBwcm90ZWN0aW9uLi4uICovCi0JX191OCB0bXBidWYyWzM1MiAqIDI4OF07CQkvKiBubyBwcm90ZWN0aW9uLi4uICovCisJX191MTYgYnJpZ2h0bmVzczsKKwlfX3UxNiBjb250cmFzdDsKIAotCXVuc2lnbmVkIHNob3J0IGJyaWdodG5lc3M7Ci0JdW5zaWduZWQgc2hvcnQgY29udHJhc3Q7Ci0KLQljaGFyIHBhY2tldDsKLQljaGFyIHN5bmNocm87CisJX191OCBwYWNrZXQ7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03OCw3ICs3Myw3IEBACiAJIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCwKQEAgLTM5Miw2ICszODcsOCBAQAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgzMik7CiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAwKTsKIAl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwpAQCAtNDQzLDYgKzQ0MCwxMCBAQAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9Qb2xsUmVnKGdzcGNhX2Rldik7CiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCisJZ3NwY2FfZGV2LT5lbXB0eV9wYWNrZXQgPSAwOwkJLyogY2hlY2sgdGhlIGVtcHR5IHBhY2tldHMgKi8KKwlzZC0+cGFja2V0ID0gMDsJCQkJLyogaWdub3JlIHRoZSBmaXJzdCBwYWNrZXRzICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUxLDExMSArNDUyLDM2IEBACiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBiKTsKIH0KIAotc3RhdGljIHZvaWQgdHY4NTMyX3ByZXByb2Nlc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLS8qIHdlIHNob3VsZCByZWNlaXZlZCBhIHdob2xlIGZyYW1lIHdpdGggaGVhZGVyIGFuZCBFT0wgbWFya2VyCi0gKiBpbiBnc3BjYV9kZXYtPnRtcGJ1ZiBhbmQgcmV0dXJuIGEgR0JSRyBwYXR0ZXJuIGluIGdzcGNhX2Rldi0+dG1wYnVmMgotICogc2VxdWVuY2UgMmJ5dGVzIGhlYWRlciB0aGUgQWx0ZXJuYXRlIHBpeGVscyBiYXllciBHQiA0IGJ5dGVzCi0gKiBBbHRlcm5hdGUgcGl4ZWxzIGJheWVyIFJHIDQgYnl0ZXMgRU9MICovCi0JaW50IHdpZHRoID0gZ3NwY2FfZGV2LT53aWR0aDsKLQlpbnQgaGVpZ2h0ID0gZ3NwY2FfZGV2LT5oZWlnaHQ7Ci0JdW5zaWduZWQgY2hhciAqZHN0ID0gc2QtPnRtcGJ1ZjI7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHNkLT50bXBidWY7Ci0JaW50IGk7Ci0KLQkvKiBwcmVjb21wdXRlIHdoZXJlIGlzIHRoZSBnb29kIGJheWVyIGxpbmUgKi8KLQlpZiAoKChkYXRhWzNdICsgZGF0YVt3aWR0aCArIDddKSA+PiAxKQotCSAgICArIChkYXRhWzRdID4+IDIpCi0JICAgICsgKGRhdGFbd2lkdGggKyA2XSA+PiAxKSA+PSAoKGRhdGFbMl0gKyBkYXRhW3dpZHRoICsgNl0pID4+IDEpCi0JICAgICsgKGRhdGFbM10gPj4gMikKLQkgICAgKyAoZGF0YVt3aWR0aCArIDVdID4+IDEpKQotCQlkYXRhICs9IDM7Ci0JZWxzZQotCQlkYXRhICs9IDI7Ci0JZm9yIChpID0gMDsgaSA8IGhlaWdodCAvIDI7IGkrKykgewotCQltZW1jcHkoZHN0LCBkYXRhLCB3aWR0aCk7Ci0JCWRhdGEgKz0gd2lkdGggKyAzOwotCQlkc3QgKz0gd2lkdGg7Ci0JCW1lbWNweShkc3QsIGRhdGEsIHdpZHRoKTsKLQkJZGF0YSArPSB3aWR0aCArIDc7Ci0JCWRzdCArPSB3aWR0aDsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcGFja2V0X3R5cGUwLCBwYWNrZXRfdHlwZTE7CiAKLQlpZiAoZGF0YVswXSAhPSAweDgwKSB7Ci0JCXNkLT5wYWNrZXQrKzsKLQkJaWYgKHNkLT5idWZsZW4gKyBsZW4gPiBzaXplb2Ygc2QtPnRtcGJ1ZikgewotCQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSAhPSBESVNDQVJEX1BBQ0tFVCkgewotCQkJCVBERUJVRyhEX1BBQ0ssICJidWZmZXIgb3ZlcmZsb3ciKTsKLQkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQltZW1jcHkoJnNkLT50bXBidWZbc2QtPmJ1Zmxlbl0sIGRhdGEsIGxlbik7Ci0JCXNkLT5idWZsZW4gKz0gbGVuOwotCQlyZXR1cm47Ci0JfQorCXBhY2tldF90eXBlMCA9IHBhY2tldF90eXBlMSA9IElOVEVSX1BBQ0tFVDsKKwlpZiAoZ3NwY2FfZGV2LT5lbXB0eV9wYWNrZXQpIHsKKwkJZ3NwY2FfZGV2LT5lbXB0eV9wYWNrZXQgPSAwOworCQlzZC0+cGFja2V0ID0gZ3NwY2FfZGV2LT5oZWlnaHQgLyAyOworCQlwYWNrZXRfdHlwZTAgPSBGSVJTVF9QQUNLRVQ7CisJfSBlbHNlIGlmIChzZC0+cGFja2V0ID09IDApCisJCXJldHVybjsJCQkvKiAyIG1vcmUgbGluZXMgaW4gMzUyeDI4OCAhICovCisJc2QtPnBhY2tldC0tOworCWlmIChzZC0+cGFja2V0ID09IDApCisJCXBhY2tldF90eXBlMSA9IExBU1RfUEFDS0VUOwogCi0JLyogaGVyZSB3ZSBkZXRlY3QgMHg4MCAqLwotCS8qIGNvdW50ZXIgaXMgbGltaXRlZCBzbyB3ZSBuZWVkIGZldyBoZWFkZXIgZm9yIGEgZnJhbWUgOikgKi8KLQotCS8qIGhlYWRlciAweDgwIDB4ODAgMHg4MCAweDgwIDB4ODAgKi8KLQkvKiBwYWNrZXQgIDAwICAgNjMgIDEyNyAgMTQ1ICAwMCAgICovCi0JLyogc29mICAgICAwICAgICAxICAgMSAgICAwICAgIDAgICAqLwotCi0JLyogdXBkYXRlIHNlcXVlbmNlICovCi0JaWYgKHNkLT5wYWNrZXQgPT0gNjMgfHwgc2QtPnBhY2tldCA9PSAxMjcpCi0JCXNkLT5zeW5jaHJvID0gMTsKLQotCS8qIGlzIHRoZXJlIGEgZnJhbWUgc3RhcnQgPyAqLwotCWlmIChzZC0+cGFja2V0ID49IChnc3BjYV9kZXYtPmhlaWdodCA+PiAxKSAtIDEpIHsKLQkJUERFQlVHKERfUEFDSywgIlNPRiA+ICVkIHBhY2tldCAlZCIsIHNkLT5zeW5jaHJvLAotCQkgICAgICAgc2QtPnBhY2tldCk7Ci0JCWlmICghc2QtPnN5bmNocm8pIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KLQkJCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gRklSU1RfUEFDS0VUKSB7Ci0JCQkJdHY4NTMyX3ByZXByb2Nlc3MoZ3NwY2FfZGV2KTsKLQkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCi0JCQkJCQkJTEFTVF9QQUNLRVQsCi0JCQkJCQkJZnJhbWUsIHNkLT50bXBidWYyLAotCQkJCQkJCWdzcGNhX2Rldi0+d2lkdGggKgotCQkJCQkJCSAgICBnc3BjYV9kZXYtPndpZHRoKTsKLQkJCX0KLQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKLQkJCQkJZnJhbWUsIGRhdGEsIDApOwotCQkJbWVtY3B5KHNkLT50bXBidWYsIGRhdGEsIGxlbik7Ci0JCQlzZC0+YnVmbGVuID0gbGVuOwotCQkJc2QtPnBhY2tldCA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSAhPSBESVNDQVJEX1BBQ0tFVCkgewotCQkJUERFQlVHKERfUEFDSywKLQkJCSAgICAgICAiV2FybmluZyB3cm9uZyBUVjg1MzIgZnJhbWUgZGV0ZWN0aW9uICVkIiwKLQkJCSAgICAgICBzZC0+cGFja2V0KTsKLQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXNkLT5zeW5jaHJvKSB7Ci0JCS8qIERyb3AgcGFja2V0IGZyYW1lIGNvcnJ1cHQgKi8KLQkJUERFQlVHKERfUEFDSywgIkRST1AgU09GICVkIHBhY2tldCAlZCIsCi0JCSAgICAgICBzZC0+c3luY2hybywgc2QtPnBhY2tldCk7Ci0JCXNkLT5wYWNrZXQgPSAwOwotCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJcmV0dXJuOwotCX0KLQlzZC0+c3luY2hybyA9IDE7Ci0Jc2QtPnBhY2tldCsrOwotCW1lbWNweSgmc2QtPnRtcGJ1ZltzZC0+YnVmbGVuXSwgZGF0YSwgbGVuKTsKLQlzZC0+YnVmbGVuICs9IGxlbjsKKwkvKiBlYWNoIHBhY2tldCBjb250YWluczoKKwkgKiAtIGhlYWRlciAyIGJ5dGVzCisJICogLSBSRyBsaW5lCisJICogLSA0IGJ5dGVzCisJICogLSBHQiBsaW5lCisJICogLSA0IGJ5dGVzCisJICovCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUwLAorCQkJZnJhbWUsIGRhdGEgKyAyLCBnc3BjYV9kZXYtPndpZHRoKTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZTEsCisJCQlmcmFtZSwgZGF0YSArIGdzcGNhX2Rldi0+d2lkdGggKyA2LCBnc3BjYV9kZXYtPndpZHRoKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggMTdhZjM1My4uMDUyNWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0zMiw0NCArMzIsNjggQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47Ci0JdW5zaWduZWQgY2hhciBsaWdodGZyZXE7CisJX191OCBoZmxpcDsKKwlfX3U4IHZmbGlwOworCV9fdTggbGlnaHRmcmVxOworCV9fdTggc2hhcnBuZXNzOwogCi0JY2hhciBxaW5kZXg7CiAJY2hhciBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9WQzAzMjEgMAogI2RlZmluZSBCUklER0VfVkMwMzIzIDEKIAljaGFyIHNlbnNvcjsKICNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAotI2RlZmluZSBTRU5TT1JfTUkxMzIwIDEKLSNkZWZpbmUgU0VOU09SX01JMTMxMF9TT0MgMgotI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDMKLSNkZWZpbmUgU0VOU09SX09WNzY3MCA0Ci0jZGVmaW5lIFNFTlNPUl9QTzMxMzBOQyA1CisjZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQorI2RlZmluZSBTRU5TT1JfTUkxMzIwIDIKKyNkZWZpbmUgU0VOU09SX01JMTMxMF9TT0MgMworI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDQKKyNkZWZpbmUgU0VOU09SX09WNzY3MCA1CisjZGVmaW5lIFNFTlNPUl9QTzEyMDAgNgorI2RlZmluZSBTRU5TT1JfUE8zMTMwTkMgNwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisvKiBuZXh0IDIgY29udHJvbHMgd29yayB3aXRoIG92NzY2MCBhbmQgb3Y3NjcwIG9ubHkgKi8KKyNkZWZpbmUgSEZMSVBfSURYIDAKIAl7CiAJICAgIHsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKIAkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkubmFtZSAgICA9ICJBdXRvIEdhaW4iLAorCQkubmFtZSAgICA9ICJNaXJyb3IiLAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBBVVRPR0FJTl9ERUYgMQotCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKyNkZWZpbmUgSEZMSVBfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBIRkxJUF9ERUYsCiAJICAgIH0sCi0JICAgIC5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKLQkgICAgLmdldCA9IHNkX2dldGF1dG9nYWluLAorCSAgICAuc2V0ID0gc2Rfc2V0aGZsaXAsCisJICAgIC5nZXQgPSBzZF9nZXRoZmxpcCwKIAl9LAotI2RlZmluZSBMSUdIVEZSRVFfSURYIDEKKyNkZWZpbmUgVkZMSVBfSURYIDEKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9WRkxJUCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICA9ICJWZmxpcCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFZGTElQX0RFRiAwCisJCS5kZWZhdWx0X3ZhbHVlID0gVkZMSVBfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCisJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKKwl9LAorI2RlZmluZSBMSUdIVEZSRVFfSURYIDIKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLApAQCAtODQsOSArMTA4LDI1IEBACiAJICAgIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAgICAuZ2V0ID0gc2RfZ2V0ZnJlcSwKIAl9LAorLyogcG8xMjAwIG9ubHkgKi8KKyNkZWZpbmUgU0hBUlBORVNTX0lEWCAzCisJeworCSB7CisJICAuaWQgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAubmFtZSA9ICJTaGFycG5lc3MiLAorCSAgLm1pbmltdW0gPSAwLAorCSAgLm1heGltdW0gPSAyLAorCSAgLnN0ZXAgPSAxLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDEKKwkgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwkgIH0sCisJIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCisJIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCisJIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2YzAzMjFfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmMwMzIxX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAyLApAQCAtOTgsNyArMTM4LDcgQEAKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAwfSwKIH07Ci1zdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2YzAzMjNfbW9kZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmMwMzIzX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKQEAgLTExMSw2ICsxNTEsMjUyIEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzdmdhX21vZGVbXSA9IHsKKwl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAxIC8gNCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIE9WNzY2MC83NjcwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVjc2NjBfUkVHX01WRlAgMHgxZQorI2RlZmluZSBPVjc2NjBfTVZGUF9NSVJST1IJMHgyMAorI2RlZmluZSBPVjc2NjBfTVZGUF9WRkxJUAkweDEwCisKK3N0YXRpYyBjb25zdCBfX3U4IG1pMDM2MF9tYXRyaXhbOV0gPSB7CisJMHg1MCwgMHhmOCwgMHhmOCwgMHhmNSwgMHg1MCwgMHhmYiwgMHhmZiwgMHhmMSwgMHg1MAorfTsKKworc3RhdGljIGNvbnN0IF9fdTggbWkwMzYwX2luaXRWR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDEzLCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MmMsIDB4NTAsIDB4Y2N9LAorCXsweGI4LCAweDJkLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgyZSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzIsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMzLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzNCwgMHg1MCwgMHhjY30sCisJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4NzksIDB4Y2N9LAorCXsweGI4LCAweDA4LCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4NzksIDB4Y2N9LAorCXsweGI4LCAweDE0LCAweDE4LCAweGNjfSwKKwl7MHhiOCwgMHhiMiwgMHgwYSwgMHhjY30sCisJezB4YjgsIDB4YjQsIDB4MGEsIDB4Y2N9LAorCXsweGI4LCAweGI1LCAweDBhLCAweGNjfSwKKwl7MHhiOCwgMHhmZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4ZmYsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAwLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMSwgMHgyOCwgMHhjY30sCisJezB4YjksIDB4MDIsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MDUsIDB4M2MsIDB4Y2N9LAorCXsweGI5LCAweDA2LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwNywgMHgzYywgMHhjY30sCisJezB4YjksIDB4MDgsIDB4M2MsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCisJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweDMxLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwOSwgMHgwMSwgMHhjNywgMHhiYn0sCisJezB4MzQsIDB4MDEsIDB4MDAsIDB4YmJ9LAorCXsweDJiLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHgyYywgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmQsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJlLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHg2MiwgMHgwNCwgMHgxMSwgMHhiYn0sCisJezB4MDMsIDB4MDEsIDB4ZTAsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDJjLCAweGJifSwKKwl7MHgyMCwgMHhkMCwgMHgwMCwgMHhiYn0sCisJezB4MDEsIDB4MDAsIDB4MDgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDEwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHgyMCwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMiwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4ODAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHhlMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAorCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxMywgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTQsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE1LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNiwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDE5LCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWIsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFjLCAweDBmLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgzNSwgMHgwMCwgMHg2MCwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTggbWkwMzYwX2luaXRRVkdBX0pQR1tdWzRdID0geworCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDJjLCAweDUwLCAweGNjfSwKKwl7MHhiOCwgMHgyZCwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MmUsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJmLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMCwgMHg1MCwgMHhjY30sCisJezB4YjgsIDB4MzEsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMywgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzQsIDB4NTAsIDB4Y2N9LAorCXsweGI4LCAweDM1LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgzNiwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzcsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwKKwl7MHhiOCwgMHgwOCwgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwKKwl7MHhiOCwgMHgxNCwgMHgxOCwgMHhjY30sCisJezB4YjgsIDB4YjIsIDB4MGEsIDB4Y2N9LAorCXsweGI4LCAweGI0LCAweDBhLCAweGNjfSwKKwl7MHhiOCwgMHhiNSwgMHgwYSwgMHhjY30sCisJezB4YjgsIDB4ZmUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMCwgMHgyOCwgMHhjY30sCisJezB4YjksIDB4MDEsIDB4MjgsIDB4Y2N9LAorCXsweGI5LCAweDAyLCAweDI4LCAweGNjfSwKKwl7MHhiOSwgMHgwMywgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MDQsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwKKwl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCisJezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAorCXsweGI5LCAweDA4LCAweDNjLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHgzMSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDksIDB4MDEsIDB4YzcsIDB4YmJ9LAorCXsweDM0LCAweDAxLCAweDAwLCAweGJifSwKKwl7MHgyYiwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4MmMsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJkLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZSwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4NjIsIDB4MDQsIDB4MTEsIDB4YmJ9LAorCXsweDAzLCAweDAxLCAweGUwLCAweGJifSwKKwl7MHgyYywgMHgwMCwgMHgyYywgMHhiYn0sCisJezB4MjAsIDB4ZDAsIDB4MDAsIDB4YmJ9LAorCXsweDAxLCAweDAwLCAweDA4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMCwgMHhiYn0sCisJezB4MDUsIDB4MDAsIDB4MjAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZjAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweDc4LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTcsIDB4OTYsIDB4Y2N9LAorCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCisJezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAyLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDEwLCAweGNjfSwKKwl7MHhiOSwgMHgxMiwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTMsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE0LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNSwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTYsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MTMsIDB4Y2N9LAorCXsweGJjLCAweDAyLCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCisJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDgsIDB4MzAsIDB4Y2N9LAorCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwKKwl7MHhiYywgMHgwYSwgMHgxMCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorCXsweDM1LCAweDAwLCAweGVmLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJe30KK307CisKIHN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0VkdBX0pQR1tdWzRdID0gewogCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKIAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCkBAIC04MjMsNyArMTEwOSw3IEBACiAJezB4MDAsIDB4MDEsIDB4ODAsIDB4YWF9LAl7MHgwMCwgMHgwMiwgMHg4MCwgMHhhYX0sCiAJezB4MDAsIDB4MTIsIDB4ODAsIDB4YWF9LAogCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKLQl7MHgwMCwgMHgxZSwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDEsIDB4YWF9LAkvKiBNVkZQICovCiAJezB4MDAsIDB4M2QsIDB4NDAsIDB4YWF9LCAvKiAweDNkIDwtNDAgZ2FtbWEgMDEgKi8KIAl7MHgwMCwgMHg0MSwgMHgwMCwgMHhhYX0sIC8qIGVkZ2UgMDAgKi8KIAl7MHgwMCwgMHgwZCwgMHg0OCwgMHhhYX0sCXsweDAwLCAweDBlLCAweDA0LCAweGFhfSwKQEAgLTg3Nyw3ICsxMTYzLDcgQEAKIAl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCXsweGI4LCAweDhmLCAweDUwLCAweGNjfSwKIAl7MHgwMCwgMHgwMSwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDAyLCAweDgwLCAweGFhfSwKIAl7MHgwMCwgMHgxMiwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKLQl7MHgwMCwgMHgxZSwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDEsIDB4YWF9LAkvKiBNVkZQICovCiAJezB4MDAsIDB4M2QsIDB4NDAsIDB4YWF9LCAvKiAweDNkIDwtNDAgZ2FtbWEgMDEgKi8KIAl7MHgwMCwgMHg0MSwgMHgwMCwgMHhhYX0sIC8qIGVkZ2UgMDAgKi8KIAl7MHgwMCwgMHgwZCwgMHg0OCwgMHhhYX0sCXsweDAwLCAweDBlLCAweDA0LCAweGFhfSwKQEAgLTk4Myw3ICsxMjY5LDggQEAKIAl7MHgwMCwgMHhhOSwgMHg5MCwgMHhhYX0sCXsweDAwLCAweGFhLCAweDE0LCAweGFhfSwKIAl7MHgwMCwgMHgxMywgMHhlNSwgMHhhYX0sCXsweDAwLCAweDBlLCAweDYxLCAweGFhfSwKIAl7MHgwMCwgMHgwZiwgMHg0YiwgMHhhYX0sCXsweDAwLCAweDE2LCAweDAyLCAweGFhfSwKLQl7MHgwMCwgMHgxZSwgMHgwNywgMHhhYX0sCXsweDAwLCAweDIxLCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgwNywgMHhhYX0sCS8qIE1WRlAgKi8KKwl7MHgwMCwgMHgyMSwgMHgwMiwgMHhhYX0sCiAJezB4MDAsIDB4MjIsIDB4OTEsIDB4YWF9LAl7MHgwMCwgMHgyOSwgMHgwNywgMHhhYX0sCiAJezB4MDAsIDB4MzMsIDB4MGIsIDB4YWF9LAl7MHgwMCwgMHgzNSwgMHgwYiwgMHhhYX0sCiAJezB4MDAsIDB4MzcsIDB4MWQsIDB4YWF9LAl7MHgwMCwgMHgzOCwgMHg3MSwgMHhhYX0sCkBAIC0xMDQ4LDcgKzEzMzUsOCBAQAogCXsweDAwLCAweDcxLCAweDM1LCAweGFhfSwJezB4MDAsIDB4NzIsIDB4MTEsIDB4YWF9LAogCXsweDAwLCAweDczLCAweGYwLCAweGFhfSwJezB4MDAsIDB4YTIsIDB4MDIsIDB4YWF9LAogCXsweDAwLCAweGIxLCAweDAwLCAweGFhfSwJezB4MDAsIDB4YjEsIDB4MGMsIDB4YWF9LAotCXsweDAwLCAweDFlLCAweDM3LCAweGFhfSwJezB4MDAsIDB4YWEsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDM3LCAweGFhfSwJLyogTVZGUCAqLworCXsweDAwLCAweGFhLCAweDE0LCAweGFhfSwKIAl7MHgwMCwgMHgyNCwgMHg4MCwgMHhhYX0sCXsweDAwLCAweDI1LCAweDc0LCAweGFhfSwKIAl7MHgwMCwgMHgyNiwgMHhkMywgMHhhYX0sCXsweDAwLCAweDBkLCAweDAwLCAweGFhfSwKIAl7MHgwMCwgMHgxNCwgMHgxOCwgMHhhYX0sCXsweDAwLCAweDlkLCAweDk5LCAweGFhfSwKQEAgLTExMTAsNyArMTM5OCw4IEBACiAJezB4MDAsIDB4YTksIDB4OTAsIDB4YWF9LAl7MHgwMCwgMHhhYSwgMHgxNCwgMHhhYX0sCiAJezB4MDAsIDB4MTMsIDB4ZTUsIDB4YWF9LAl7MHgwMCwgMHgwZSwgMHg2MSwgMHhhYX0sCiAJezB4MDAsIDB4MGYsIDB4NGIsIDB4YWF9LAl7MHgwMCwgMHgxNiwgMHgwMiwgMHhhYX0sCi0JezB4MDAsIDB4MWUsIDB4MDcsIDB4YWF9LAl7MHgwMCwgMHgyMSwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDcsIDB4YWF9LAkvKiBNVkZQICovCisJezB4MDAsIDB4MjEsIDB4MDIsIDB4YWF9LAogCXsweDAwLCAweDIyLCAweDkxLCAweGFhfSwJezB4MDAsIDB4MjksIDB4MDcsIDB4YWF9LAogCXsweDAwLCAweDMzLCAweDBiLCAweGFhfSwJezB4MDAsIDB4MzUsIDB4MGIsIDB4YWF9LAogCXsweDAwLCAweDM3LCAweDFkLCAweGFhfSwJezB4MDAsIDB4MzgsIDB4NzEsIDB4YWF9LApAQCAtMTE3NSw3ICsxNDY0LDggQEAKIAl7MHgwMCwgMHg3MSwgMHgzNSwgMHhhYX0sCXsweDAwLCAweDcyLCAweDExLCAweGFhfSwKIAl7MHgwMCwgMHg3MywgMHhmMCwgMHhhYX0sCXsweDAwLCAweGEyLCAweDAyLCAweGFhfSwKIAl7MHgwMCwgMHhiMSwgMHgwMCwgMHhhYX0sCXsweDAwLCAweGIxLCAweDBjLCAweGFhfSwKLQl7MHgwMCwgMHgxZSwgMHgzNywgMHhhYX0sCXsweDAwLCAweGFhLCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgzNywgMHhhYX0sCS8qIE1WRlAgKi8KKwl7MHgwMCwgMHhhYSwgMHgxNCwgMHhhYX0sCiAJezB4MDAsIDB4MjQsIDB4ODAsIDB4YWF9LAl7MHgwMCwgMHgyNSwgMHg3NCwgMHhhYX0sCiAJezB4MDAsIDB4MjYsIDB4ZDMsIDB4YWF9LAl7MHgwMCwgMHgwZCwgMHgwMCwgMHhhYX0sCiAJezB4MDAsIDB4MTQsIDB4MTgsIDB4YWF9LAl7MHgwMCwgMHg5ZCwgMHg5OSwgMHhhYX0sCkBAIC0xMjA0LDYgKzE0OTQsMjc1IEBACiAJe30sCiB9OwogCisvKiBQTzEyMDAgLSB2YWx1ZXMgZnJvbSB1c2J2bTMyNi5pbmYgYW5kIG1zLXdpbiB0cmFjZSAqLworc3RhdGljIGNvbnN0IF9fdTggcG8xMjAwX2dhbW1hWzE3XSA9IHsKKwkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAorCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKK307CitzdGF0aWMgY29uc3QgX191OCBwbzEyMDBfbWF0cml4WzldID0geworCTB4NjAsIDB4ZjksIDB4ZTUsIDB4ZTcsIDB4NTAsIDB4MDUsIDB4ZjMsIDB4ZTYsIDB4NWUKK307CitzdGF0aWMgY29uc3QgX191OCBwbzEyMDBfaW5pdFZHQV9kYXRhW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAkvKiByZXNldD8gKi8KKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisvKgl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sICovCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweGIwLCAweDAyLCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHg1ZCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4YjIsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDE4LCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgxNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4NTgsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDFmLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDU0LCAweDEzLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRjLCAweGNjfSwKKwl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MTIsIDB4MDUsIDB4YWF9LAorCXsweDAwLCAweDEzLCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHhjNiwgMHhhYX0sCS8qIGgvdiBmbGlwICovCisJezB4MDAsIDB4MjEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDI1LCAweDAyLCAweGFhfSwKKwl7MHgwMCwgMHgzYywgMHg0ZiwgMHhhYX0sCisJezB4MDAsIDB4M2YsIDB4ZTAsIDB4YWF9LAorCXsweDAwLCAweDQyLCAweGZmLCAweGFhfSwKKwl7MHgwMCwgMHg0NSwgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NTUsIDB4ZmUsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweGQzLCAweGFhfSwKKwl7MHgwMCwgMHg1ZSwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4NjEsIDB4YjgsIDB4YWF9LAkvKiBzaGFycG5lc3MgKi8KKwl7MHgwMCwgMHg2MiwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4YTcsIDB4MzEsIDB4YWF9LAorCXsweDAwLCAweGE5LCAweDY2LCAweGFhfSwKKwl7MHgwMCwgMHhiMCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4YjEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGIzLCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHhiNiwgMHgyNiwgMHhhYX0sCisJezB4MDAsIDB4YjcsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweGJhLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHg4OCwgMHg0MiwgMHhhYX0sCisJezB4MDAsIDB4ODksIDB4OWEsIDB4YWF9LAorCXsweDAwLCAweDhhLCAweDg4LCAweGFhfSwKKwl7MHgwMCwgMHg4YiwgMHg4ZSwgMHhhYX0sCisJezB4MDAsIDB4OGMsIDB4M2UsIDB4YWF9LAorCXsweDAwLCAweDhkLCAweDkwLCAweGFhfSwKKwl7MHgwMCwgMHg4ZSwgMHg4NywgMHhhYX0sCisJezB4MDAsIDB4OGYsIDB4OTYsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDNkLCAweGFhfSwKKwl7MHgwMCwgMHg2NCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjUsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDY2LCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg2NywgMHgyYiwgMHhhYX0sCisJezB4MDAsIDB4NjgsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDY5LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg2YSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4NmIsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDZjLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg2ZCwgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4NmUsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDZmLCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHg3MCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzEsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDcyLCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg3MywgMHgyYiwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg3ZiwgMHgyYiwgMHhhYX0sCisJezB4MDAsIDB4ODAsIDB4MzYsIDB4YWF9LAorCXsweDAwLCAweDgxLCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg4MiwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4ODMsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDg0LCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg4NSwgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4ODYsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDg3LCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHg1NywgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4MDMsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweDA0LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHgwNSwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4MDYsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDA3LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHgwOCwgMHgxMywgMHhhYX0sCisJezB4MDAsIDB4MGEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDBiLCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHgwYywgMHgyMCwgMHhhYX0sCisJezB4MDAsIDB4MGQsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDIyLCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHgyMywgMHg2MCwgMHhhYX0sCisJezB4MDAsIDB4MjUsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDI2LCAweDgyLCAweGFhfSwKKwl7MHgwMCwgMHgyZSwgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4MmYsIDB4MWUsIDB4YWF9LAorCXsweDAwLCAweDMwLCAweDJkLCAweGFhfSwKKwl7MHgwMCwgMHgzMSwgMHgzYywgMHhhYX0sCisJezB4MDAsIDB4MzIsIDB4NGIsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHgzNCwgMHg2OSwgMHhhYX0sCisJezB4MDAsIDB4MzUsIDB4NzgsIDB4YWF9LAorCXsweDAwLCAweDM2LCAweDg3LCAweGFhfSwKKwl7MHgwMCwgMHgzNywgMHg5NiwgMHhhYX0sCisJezB4MDAsIDB4MzgsIDB4YTUsIDB4YWF9LAorCXsweDAwLCAweDM5LCAweGI0LCAweGFhfSwKKwl7MHgwMCwgMHgzYSwgMHhjMywgMHhhYX0sCisJezB4MDAsIDB4M2IsIDB4ZDIsIDB4YWF9LAorCXsweDAwLCAweDNjLCAweGUxLCAweGFhfSwKKwl7MHgwMCwgMHgzZSwgMHhmZiwgMHhhYX0sCisJezB4MDAsIDB4M2YsIDB4ZmYsIDB4YWF9LAorCXsweDAwLCAweDQwLCAweGZmLCAweGFhfSwKKwl7MHgwMCwgMHg0MSwgMHhmZiwgMHhhYX0sCisJezB4MDAsIDB4NDIsIDB4ZmYsIDB4YWF9LAorCXsweDAwLCAweDQzLCAweGZmLCAweGFhfSwKKwl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDIwLCAweGM0LCAweGFhfSwKKwl7MHgwMCwgMHgxMywgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4M2MsIDB4NTAsIDB4YWF9LAorCXsweDAwLCAweDYxLCAweDZhLCAweGFhfSwJLyogc2hhcnBuZXNzPyAqLworCXsweDAwLCAweDUxLCAweDViLCAweGFhfSwKKwl7MHgwMCwgMHg1MiwgMHg5MSwgMHhhYX0sCisJezB4MDAsIDB4NTMsIDB4NGMsIDB4YWF9LAorCXsweDAwLCAweDU0LCAweDUwLCAweGFhfSwKKwl7MHgwMCwgMHg1NiwgMHgwMiwgMHhhYX0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAzLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHgyMCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweDU4LCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MjEsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAzLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHhhOSwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4ODAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDYsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDA3LCAweDAzLCAweGNjfSwKKwl7MHhiOCwgMHgwOCwgMHg1OCwgMHhjY30sCisJezB4YjgsIDB4MDksIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4ZDksIDB4MGYsIDB4YWF9LAorCXsweDAwLCAweGRhLCAweGFhLCAweGFhfSwKKwl7MHgwMCwgMHhkOSwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4ZGEsIDB4YWEsIDB4YWF9LAorCXsweDAwLCAweGQ5LCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHhkYSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4ZDksIDB4MTIsIDB4YWF9LAorCXsweDAwLCAweGRhLCAweGZmLCAweGFhfSwKKwl7MHgwMCwgMHhkOSwgMHgxMywgMHhhYX0sCisJezB4MDAsIDB4ZGEsIDB4ZmYsIDB4YWF9LAorCXsweDAwLCAweGU4LCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHhlOSwgMHgxMiwgMHhhYX0sCisJezB4MDAsIDB4ZWEsIDB4NWMsIDB4YWF9LAorCXsweDAwLCAweGViLCAweGZmLCAweGFhfSwKKwl7MHgwMCwgMHhkOCwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4ZTYsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweGQ2LCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHhlMywgMHgwNSwgMHhhYX0sCisJezB4MDAsIDB4ZTAsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweGRlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhkZiwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4ZGIsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweGRjLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHhkZCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4ZTEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweGUyLCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHhkNiwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4ZTQsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweGE4LCAweDhmLCAweGFhfSwKKwl7MHgwMCwgMHhiNCwgMHgxNiwgMHhhYX0sCisJezB4YjAsIDB4MDIsIDB4MDYsIDB4Y2N9LAorCXsweGIwLCAweDE4LCAweDA2LCAweGNjfSwKKwl7MHhiMCwgMHgxOSwgMHgwNiwgMHhjY30sCisJezB4YjMsIDB4NWQsIDB4MTgsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4MDAsIDB4YjQsIDB4MGUsIDB4YWF9LAorCXsweDAwLCAweGI1LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHhiNiwgMHgxYywgMHhhYX0sCisJezB4MDAsIDB4YjcsIDB4OTYsIDB4YWF9LAorLyogZW5kIG9mIHVzYnZtMzI2LmluZiAtIHN0YXJ0IG9mIG1zLXdpbiB0cmFjZSAqLworCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgzZCwgMHhjY30sCisvKnJlYWQgYjMwNiovCisJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDFhLCAweDA5LCAweGFhfSwKKwl7MHgwMCwgMHgxYiwgMHg4YSwgMHhhYX0sCisvKnJlYWQgYjgyNyovCisJezB4YjgsIDB4MjcsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDI2LCAweDYwLCAweGNjfSwKKwl7MHhiOCwgMHgyNiwgMHg2MCwgMHhjY30sCisvKmdhbW1hIC0gdG8gZG8/Ki8KKwl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4YWUsIDB4ODQsIDB4YWF9LAorLypnYW1tYSBhZ2FpbiovCisJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDk2LCAweGEwLCAweGFhfSwKKy8qbWF0cml4Ki8KKwl7MHgwMCwgMHgwMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4OTEsIDB4MzUsIDB4YWF9LAorCXsweDAwLCAweDkyLCAweDIyLCAweGFhfSwKKy8qZ2FtbWEqLworCXsweDAwLCAweDAzLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg5NSwgMHg4NSwgMHhhYX0sCisvKm1hdHJpeCovCisJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDRkLCAweDIwLCAweGFhfSwKKwl7MHhiOCwgMHgyMiwgMHg0MCwgMHhjY30sCisJezB4YjgsIDB4MjMsIDB4NDAsIDB4Y2N9LAorCXsweGI4LCAweDI0LCAweDQwLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4NjQsIDB4ZGR9LAorCXsweDAwLCAweDAzLCAweDAxLCAweGFhfSwKKy8qcmVhZCA0NiovCisJezB4MDAsIDB4NDYsIDB4M2MsIDB4YWF9LAorCXsweDAwLCAweDAzLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgxNiwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4MTcsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDE4LCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHgxOSwgMHg0MSwgMHhhYX0sCisJezB4MDAsIDB4MDMsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweDQ2LCAweDNjLCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHgxOCwgMHhkZH0sCisvKnJlYWQgYmZmZiovCisJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGI0LCAweDFjLCAweGFhfSwKKwl7MHgwMCwgMHhiNSwgMHg5MiwgMHhhYX0sCisJezB4MDAsIDB4YjYsIDB4MzksIDB4YWF9LAorCXsweDAwLCAweGI3LCAweDI0LCAweGFhfSwKKy8qd3JpdGUgODkgMDQwMCAxNDE1Ki8KK307CisKIHN0cnVjdCBzZW5zb3JfaW5mbyB7CiAJaW50IHNlbnNvcklkOwogCV9fdTggSTJjQWRkOwpAQCAtMTIyMiw2ICsxNzgxLDkgQEAKIAl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweGM4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAogCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiAJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKKy8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisJe1NFTlNPUl9QTzEyMDAsICAgICAweDgwIHwgMHg1YywgMHgwMCwgMHgxMjAwLCAweDY3LCAweDY3LCAweDAxfSwKIH07CiAKIC8qIHJlYWQgJ2xlbicgYnl0ZXMgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xMjc4LDE4ICsxODQwLDE4IEBACiAJCW1zbGVlcCgxKTsKIAl9CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2UsIDEpOwotCWhkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCWxkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNkLCAxKTsKIAltZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYywgMSk7Ci0JbGRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07Ci0JUERFQlVHKERfUFJPQkUsICJSZWFkIFNlbnNvciBoICgweCUwMlgpIG0gKDB4JTAyWCkgbCAoMHglMDJYKSIsCisJaGRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJUERFQlVHKERfUFJPQkUsICJSZWFkIFNlbnNvciAlMDJ4JTAyeCAlMDJ4IiwKIAkJaGRhdGEsIG1kYXRhLCBsZGF0YSk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzMzQsIDEpOwogCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMHgwMikKLQkJKnZhbHVlID0gKGxkYXRhIDw8IDgpICsgbWRhdGE7CisJCSp2YWx1ZSA9IChoZGF0YSA8PCA4KSArIG1kYXRhOwogCWVsc2UKLQkJKnZhbHVlID0gbGRhdGE7CisJCSp2YWx1ZSA9IGhkYXRhOwogfQogCiBzdGF0aWMgaW50IHZjMDMyeF9wcm9iZV9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMTMwMCw3ICsxODYyLDcgQEAKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7Ci0JUERFQlVHKERfUFJPQkUsICJjaGVjayBzZW5zb3IgaGVhZGVyICVkIiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlQREVCVUcoRF9QUk9CRSwgImNoZWNrIHNlbnNvciBoZWFkZXIgJTAyeCIsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2Vuc29yX2luZm9fZGF0YSk7IGkrKykgewogCQlwdHNlbnNvcl9pbmZvID0gJnNlbnNvcl9pbmZvX2RhdGFbaV07CiAJCXJlZ193KGRldiwgMHhhMCwgMHgwMiwgMHhiMzM0KTsKQEAgLTEzMDksMTYgKzE4NzEsMTUgQEAKIAkJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDgpOwogCQlyZWdfdyhkZXYsIDB4YTAsIDB4MGMsIDB4YjMwOSk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+STJjQWRkLCAweGIzMzUpOwotLyoJCVBERUJVRyhEX1BST0JFLAotCQkJImNoZWNrIHNlbnNvciBWQzAzMlggLT4gJWQgQWRkIC0+IG94JTAyWCEiLAotCQkJaSwgcHRzZW5zb3JfaW5mby0+STJjQWRkKTsgKi8KIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5vcCwgMHhiMzAxKTsKIAkJcmVhZF9zZW5zb3JfcmVnaXN0ZXIoZ3NwY2FfZGV2LCBwdHNlbnNvcl9pbmZvLT5JZEFkZCwgJnZhbHVlKTsKLQkJaWYgKHZhbHVlID09IHB0c2Vuc29yX2luZm8tPlZwSWQpIHsKLS8qCQkJUERFQlVHKERfUFJPQkUsICJmaW5kIHNlbnNvciBWQzAzMlggLT4gb3glMDRYISIsCi0JCQkJcHRzZW5zb3JfaW5mby0+VnBJZCk7ICovCisJCWlmICh2YWx1ZSA9PSBwdHNlbnNvcl9pbmZvLT5WcElkKQogCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOwotCQl9CisKKwkJLyogc3BlY2lhbCBjYXNlIGZvciBNSTAzNjAgKi8KKwkJaWYgKHB0c2Vuc29yX2luZm8tPnNlbnNvcklkID09IFNFTlNPUl9NSTEzMTBfU09DCisJCSAgICAmJiB2YWx1ZSA9PSAweDgyNDMpCisJCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMTQyMCwxMyArMTk4MSw2IEBACiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCWNhbS0+ZXBhZGRyID0gMHgwMjsKIAlzZC0+YnJpZGdlID0gaWQtPmRyaXZlcl9pbmZvOwotCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IHZjMDMyMV9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmMwMzIxX21vZGUpOwotCX0gZWxzZSB7Ci0JCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyM19tb2RlKTsKLQl9CiAKIAl2YzAzMjFfcmVzZXQoZ3NwY2FfZGV2KTsKIAlzZW5zb3IgPSB2YzAzMnhfcHJvYmVfc2Vuc29yKGdzcGNhX2Rldik7CkBAIC0xNDM2LDM1ICsxOTkwLDY2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxUiIpOwotCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMDM2MDoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTAzNjAiKTsKKwkJc2QtPmJyaWRnZSA9IEJSSURHRV9WQzAzMjM7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgTUkxMzEwX1NPQyIpOwotCQlzZC0+c2Vuc29yID0gU0VOU09SX01JMTMxMF9TT0M7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjAiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTEzMjA7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NjAiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NjA7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzY3MDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NzAiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2NzA7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMTIwMDoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQTzEyMDAiKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8zMTMwTkM6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgUE8zMTMwTkMiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QTzMxMzBOQzsKIAkJYnJlYWs7CiAJfQorCXNkLT5zZW5zb3IgPSBzZW5zb3I7CiAKLQlzZC0+cWluZGV4ID0gNzsKLQlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworCQljYW0tPmNhbV9tb2RlID0gdmMwMzIxX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjFfbW9kZSk7CisJfSBlbHNlIHsKKwkJaWYgKHNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7CisJCQljYW0tPmNhbV9tb2RlID0gdmMwMzIzX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmMwMzIzX21vZGUpOworCQl9IGVsc2UgeworCQkJY2FtLT5jYW1fbW9kZSA9IHN2Z2FfbW9kZTsKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzdmdhX21vZGUpOworCQl9CisJfQorCisJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjcwKSB7CisJCXNkLT5oZmxpcCA9IDE7CisJCXNkLT52ZmxpcCA9IDE7CisJfQogCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKIAlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjcwKQogCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTElHSFRGUkVRX0lEWCk7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT1Y3NjYwOgorCWNhc2UgU0VOU09SX09WNzY3MDoKKwljYXNlIFNFTlNPUl9QTzEyMDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBIRkxJUF9JRFgpCisJCQkJCXwgKDEgPDwgVkZMSVBfSURYKTsKKwkJYnJlYWs7CisJfQorCisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHg4YSwgMCwgMyk7CkBAIC0xNDgyLDEyICsyMDY3LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHF1YWxpdHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorLyogZm9yIE9WNzY2MCBhbmQgT1Y3NjcwIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci19CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggZGF0YTsKIAotc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoteworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzY2MDoKKwkJZGF0YSA9IDE7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY3MDoKKwkJZGF0YSA9IDc7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMTIwMDoKKwkJZGF0YSA9IDA7CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsICZkYXRhLCAxKTsKKwkJZGF0YSA9IDB4ODAgKiBzZC0+aGZsaXAKKwkJCXwgMHg0MCAqIHNkLT52ZmxpcAorCQkJfCAweDA2OworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDFlLCAmZGF0YSwgMSk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCWRhdGEgfD0gT1Y3NjYwX01WRlBfTUlSUk9SICogc2QtPmhmbGlwCisJCXwgT1Y3NjYwX01WRlBfVkZMSVAgKiBzZC0+dmZsaXA7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgT1Y3NjYwX1JFR19NVkZQLCAmZGF0YSwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xNTAxLDYgKzIxMDcsMjAgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7CiB9CiAKKy8qIHBvMTIwMCBvbmx5ICovCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4IGRhdGE7CisKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKQorCQlyZXR1cm47CisJZGF0YSA9IDA7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgJmRhdGEsIDEpOworCWRhdGEgPSAweGI1ICsgc2QtPnNoYXJwbmVzcyAqIDM7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg2MSwgJmRhdGEsIDEpOworfQorCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xNTUxLDYgKzIxNzEsMTcgQEAKIAkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG92NzY3MF9pbml0VkdBX0pQRyk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkwMzYwOgorCQlHYW1tYVQgPSBtaTEzMjBfZ2FtbWE7CisJCU1hdHJpeFQgPSBtaTAzNjBfbWF0cml4OworCQlpZiAobW9kZSkgeworCQkJLyogMzIweDI0MCAqLworCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgbWkwMzYwX2luaXRRVkdBX0pQRyk7CisJCX0gZWxzZSB7CisJCQkvKiA2NDB4NDgwICovCisJCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTAzNjBfaW5pdFZHQV9KUEcpOworCQl9CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CiAJCWlmIChtb2RlKSB7CiAJCQkvKiAzMjB4MjQwICovCkBAIC0xNTgzLDYgKzIyMTQsMTEgQEAKIAkJfQogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwbzMxMzBfcnVuZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPMTIwMDoKKwkJR2FtbWFUID0gcG8xMjAwX2dhbW1hOworCQlNYXRyaXhUID0gcG8xMjAwX21hdHJpeDsKKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8xMjAwX2luaXRWR0FfZGF0YSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVBERUJVRyhEX1BST0JFLCAiRGFtbmVkICEhIG5vIHNlbnNvciBmb3VuZCBCeWUiKTsKIAkJcmV0dXJuIC1FTUVESVVNVFlQRTsKQEAgLTE2MTUsMTEgKzIyNTEsMTYgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MjMsIDB4YjgwMCk7ICogSVNQIENUUkxfQkFTCiAJCSovCiAJCS8qIHNldCB0aGUgbGVkIG9uIDB4MDg5MiAweDA4OTYgKi8KLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKLQkJbXNsZWVwKDEwMCk7Ci0JCXNldHF1YWxpdHkoZ3NwY2FfZGV2KTsKLQkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKLQkJc2V0bGlnaHRmcmVxKGdzcGNhX2Rldik7CisJCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9QTzEyMDApIHsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCQltc2xlZXAoMTAwKTsKKwkJCXNldGh2ZmxpcChnc3BjYV9kZXYpOworCQkJc2V0bGlnaHRmcmVxKGdzcGNhX2Rldik7CisJCX0gZWxzZSB7CisJCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKKwkJCXNldGh2ZmxpcChnc3BjYV9kZXYpOworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4MDQwMCwgMHgxNDE1KTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE2NjUsMjQgKzIzMDYsNDggQEAKIAkJCQlkYXRhLCBsZW4pOwogCQlyZXR1cm47CiAJfQorCisJLyogVGhlIHZjMDMyMSBzZW5kcyBzb21lIGFkZGl0aW9uYWwgZGF0YSBhZnRlciBzZW5kaW5nIHRoZSBjb21wbGV0ZQorCSAqIGZyYW1lLCB3ZSBpZ25vcmUgdGhpcy4gKi8KKwlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxCisJICAgICYmIGxlbiA+IGZyYW1lLT52NGwyX2J1Zi5sZW5ndGggLSAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEpKQorCQlsZW4gPSBmcmFtZS0+djRsMl9idWYubGVuZ3RoIC0gKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhKTsKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQorc3RhdGljIGludCBzZF9zZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlzZC0+YXV0b2dhaW4gPSB2YWw7CisJc2QtPmhmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwkJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQorc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JKnZhbCA9IHNkLT5hdXRvZ2FpbjsKKwkqdmFsID0gc2QtPmhmbGlwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52ZmxpcCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGh2ZmxpcChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnZmbGlwOwogCXJldHVybiAwOwogfQogCkBAIC0xNzA0LDYgKzIzNjksMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKIHsKQEAgLTE3NDMsMTEgKzI0MjYsMTMgQEAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODkyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTYpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzIxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMjMpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyOCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHhjMDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKKwl7VVNCX0RFVklDRSgweDE1YjgsIDB4NjAwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXtVU0JfREVWSUNFKDB4MTdlZiwgMHg0ODAyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC1yZWcuaAppbmRleCBmNTJlMDljLi5iZmI1NTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHgtcmVnLmgKQEAgLTI0NCwxNCArMjQ0LDYgQEAKICNkZWZpbmUgWkMzWFhfUjFDQV9TSEFSUE5FU1MwNCAgICAgICAgIDB4MDFjYQogI2RlZmluZSBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1ICAgICAgICAgMHgwMWNiCiAKLS8qIFN5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBaQzNYWF9SMTkwX1NZTkMwMExPVyAgICAgICAgICAgMHgwMTkwCi0jZGVmaW5lIFpDM1hYX1IxOTFfU1lOQzAwTUlEICAgICAgICAgICAweDAxOTEKLSNkZWZpbmUgWkMzWFhfUjE5Ml9TWU5DMDBISUdIICAgICAgICAgIDB4MDE5MgotI2RlZmluZSBaQzNYWF9SMTk1X1NZTkMwMUxPVyAgICAgICAgICAgMHgwMTk1Ci0jZGVmaW5lIFpDM1hYX1IxOTZfU1lOQzAxTUlEICAgICAgICAgICAweDAxOTYKLSNkZWZpbmUgWkMzWFhfUjE5N19TWU5DMDFISUdIICAgICAgICAgIDB4MDE5NwotCiAvKiBEZWFkIHBpeGVscyAqLwogI2RlZmluZSBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFICAgICAgMHgwMjUwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCAwYmVmYWNmLi5lYzJhNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC01MSwxNiArNTEsMTYgQEAKICNkZWZpbmUgU0VOU09SX0NTMjEwMiAwCiAjZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDEKICNkZWZpbmUgU0VOU09SX0dDMDMwNSAyCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMCAzCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAotI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1Ci0jZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKLSNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNwotI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4Ci0jZGVmaW5lIFNFTlNPUl9PVjc2MjAgOQotLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOSAtIHNhbWUgdmFsdWVzICovCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDEwCi0jZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTEKKyNkZWZpbmUgU0VOU09SX0hEQ1MyMDIwYiAzCisjZGVmaW5lIFNFTlNPUl9IVjcxMzFCIDQKKyNkZWZpbmUgU0VOU09SX0hWNzEzMUMgNQorI2RlZmluZSBTRU5TT1JfSUNNMTA1QSA2CisjZGVmaW5lIFNFTlNPUl9NQzUwMUNCIDcKKyNkZWZpbmUgU0VOU09SX09WNzYyMCA4CisvKiNkZWZpbmUgU0VOU09SX09WNzY0OCA4IC0gc2FtZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU0VOU09SX09WNzYzMEMgOQorI2RlZmluZSBTRU5TT1JfUEFTMTA2IDEwCisjZGVmaW5lIFNFTlNPUl9QQVMyMDJCIDExCiAjZGVmaW5lIFNFTlNPUl9QQjAzMzAgMTIKICNkZWZpbmUgU0VOU09SX1BPMjAzMCAxMwogI2RlZmluZSBTRU5TT1JfVEFTNTEzMENLIDE0CkBAIC0xNzMsNyArMTczLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyA4ICsgNTkwLApAQCAtMTY1MywyOTUgKzE2NTMsNiBAQAogCXt9CiB9OwogCi0vKiBwbGF5IHBva2VyIHdpdGggcmVnaXN0ZXJzIGF0IHlvdXIgb3duIHJpc2sgISEgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHh4X0luaXRpYWxbXSA9IHsKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCXsweGEwLCAweDBlLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCi0JezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhkMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCi0JCQkJCQkvKiBEMCA/PyBFMCBkaWQgbm90IHN0YXJ0ICovCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOUJfV0lOSEVJR0hUSElHSH0sCi0JezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LAotCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKLQl7MHhhYSwgMHgwMiwgMHgwMDAyfSwKLQl7MHhhYSwgMHgwNywgMHgwMDA2fSwKLQl7MHhhYSwgMHgwOCwgMHgwMDAyfSwKLQl7MHhhYSwgMHgwOSwgMHgwMDA2fSwKLQl7MHhhYSwgMHgwYSwgMHgwMDAxfSwKLQl7MHhhYSwgMHgwYiwgMHgwMDAxfSwKLQl7MHhhYSwgMHgwYywgMHgwMDA4fSwKLQl7MHhhYSwgMHgwZCwgMHgwMDAwfSwKLQl7MHhhYSwgMHgxMCwgMHgwMDAwfSwKLQl7MHhhYSwgMHgxMiwgMHgwMDA1fSwKLQl7MHhhYSwgMHgxMywgMHgwMDYzfSwKLQl7MHhhYSwgMHgxNSwgMHgwMDcwfSwKLQl7MHhhMCwgMHgzNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKLQl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKLQl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAotCXsweGEwLCAweDAwLCAweDAxYWR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKLQl7MHhhMCwgMHg3MCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCi0JezB4YTEsIDB4MDEsIDB4MDFjOH0sCi0JezB4YTEsIDB4MDEsIDB4MDFjOX0sCi0JezB4YTEsIDB4MDEsIDB4MDFjYX0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCi0JezB4YTAsIDB4MTEsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hIH40ICovCi0JezB4YTAsIDB4MzcsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMjJfR0FNTUEwMn0sCi0JezB4YTAsIDB4NzksIFpDM1hYX1IxMjNfR0FNTUEwM30sCi0JezB4YTAsIDB4OTEsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCi0JezB4YTAsIDB4YTYsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCi0JezB4YTAsIDB4YjgsIFpDM1hYX1IxMjZfR0FNTUEwNn0sCi0JezB4YTAsIDB4YzcsIFpDM1hYX1IxMjdfR0FNTUEwN30sCi0JezB4YTAsIDB4ZDMsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCi0JezB4YTAsIDB4ZGUsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCi0JezB4YTAsIDB4ZTYsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCi0JezB4YTAsIDB4ZWQsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCi0JezB4YTAsIDB4ZjMsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCi0JezB4YTAsIDB4ZjgsIFpDM1hYX1IxMkRfR0FNTUEwRH0sCi0JezB4YTAsIDB4ZmIsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCi0JezB4YTAsIDB4MjYsIFpDM1hYX1IxMzBfR0FNTUExMH0sCi0JezB4YTAsIDB4MjMsIFpDM1hYX1IxMzFfR0FNTUExMX0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxMzJfR0FNTUExMn0sCi0JezB4YTAsIDB4MWMsIFpDM1hYX1IxMzNfR0FNTUExM30sCi0JezB4YTAsIDB4MTYsIFpDM1hYX1IxMzRfR0FNTUExNH0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxMzVfR0FNTUExNX0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxMzZfR0FNTUExNn0sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCi0JezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxM0JfR0FNTUExQn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IxM0NfR0FNTUExQ30sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxM0RfR0FNTUExRH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxM0VfR0FNTUExRX0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCi0KLQl7MHhhMCwgMHg0YywgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLwotCXsweGEwLCAweGY1LCBaQzNYWF9SMTBCX1JHQjAxfSwKLQl7MHhhMCwgMHhmZiwgWkMzWFhfUjEwQ19SR0IwMn0sCi0JezB4YTAsIDB4ZjksIFpDM1hYX1IxMERfUkdCMTB9LAotCXsweGEwLCAweDUxLCBaQzNYWF9SMTBFX1JHQjExfSwKLQl7MHhhMCwgMHhmNSwgWkMzWFhfUjEwRl9SR0IxMn0sCi0JezB4YTAsIDB4ZmIsIFpDM1hYX1IxMTBfUkdCMjB9LAotCXsweGEwLCAweGVkLCBaQzNYWF9SMTExX1JHQjIxfSwKLQl7MHhhMCwgMHg1ZiwgWkMzWFhfUjExMl9SR0IyMn0sCi0KLQl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCi0JezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCi0JezB4YWEsIDB4MjAsIDB4MDAwNH0sCi0JezB4YWEsIDB4MjEsIDB4MDAzZH0sCi0JezB4YWEsIDB4MDMsIDB4MDA0MX0sCi0JezB4YWEsIDB4MDQsIDB4MDAxMH0sCi0JezB4YWEsIDB4MDUsIDB4MDAzZH0sCi0JezB4YWEsIDB4MGUsIDB4MDAwMX0sCi0JezB4YWEsIDB4MGYsIDB4MDAwMH0sCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCi0JezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCi0JezB4YTAsIDB4M2QsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4OWIsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHg0MSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKLQl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKLQl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKLQl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHgwZSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTEsIDB4MDEsIDB4MDE5NX0sCi0JezB4YTEsIDB4MDEsIDB4MDE5Nn0sCi0JezB4YTEsIDB4MDEsIDB4MDE5N30sCi0JezB4YTAsIDB4M2QsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAotCXsweGEwLCAweDFkLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCi0JezB4YTAsIDB4ODUsIFpDM1hYX1IxMThfQkdBSU59LAotCXsweGExLCAweDAxLCAweDAxMTZ9LAotCXsweGExLCAweDAxLCAweDAxMTh9LAotCXsweGExLCAweDAxLCAweDAxODB9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgxZCwgWkMzWFhfUjExNl9SR0FJTn0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAotCXsweGEwLCAweDg1LCBaQzNYWF9SMTE4X0JHQUlOfSwKLQl7MHhhMSwgMHgwMSwgMHgwMTE2fSwKLQl7MHhhMSwgMHgwMSwgMHgwMTE4fSwKLS8qCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sICovCi0JezB4YTAsIDB4MDAsIDB4MDAwN30sCi0Je30KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHh4X0luaXRpYWxTY2FsZVtdID0gewotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MGUsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKLQl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAotCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMDhEX0NPTVBBQklMSVRZTU9ERX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhlNiwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCi0JezB4YTAsIDB4ODYsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAotCXsweGFhLCAweDAyLCAweDAwMDJ9LAotCXsweGFhLCAweDA3LCAweDAwMDZ9LAotCXsweGFhLCAweDA4LCAweDAwMDJ9LAotCXsweGFhLCAweDA5LCAweDAwMDZ9LAotCXsweGFhLCAweDBhLCAweDAwMDF9LAotCXsweGFhLCAweDBiLCAweDAwMDF9LAotCXsweGFhLCAweDBjLCAweDAwMDh9LAotCXsweGFhLCAweDBkLCAweDAwMDB9LAotCXsweGFhLCAweDEwLCAweDAwMDB9LAotCXsweGFhLCAweDEyLCAweDAwMDV9LAotCXsweGFhLCAweDEzLCAweDAwNjN9LAotCXsweGFhLCAweDE1LCAweDAwNzB9LAotCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAotCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCi0JezB4YTAsIDB4MDAsIDB4MDFhZH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAotCXsweGEwLCAweDcwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAotCXsweGExLCAweDAxLCAweDAwMDJ9LAotCXsweGExLCAweDAxLCAweDAwMDh9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KLQl7MHhhMCwgMHgwNCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KLQl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgfjQqLwotCXsweGEwLCAweDM3LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAotCXsweGEwLCAweDU4LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAotCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAotCXsweGEwLCAweDkxLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAotCXsweGEwLCAweGE2LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAotCXsweGEwLCAweGI4LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAotCXsweGEwLCAweGM3LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAotCXsweGEwLCAweGQzLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAotCXsweGEwLCAweGRlLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAotCXsweGEwLCAweGU2LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAotCXsweGEwLCAweGVkLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAotCXsweGEwLCAweGYzLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAotCXsweGEwLCAweGY4LCBaQzNYWF9SMTJEX0dBTU1BMER9LAotCXsweGEwLCAweGZiLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAotCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAotCXsweGEwLCAweDIzLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAotCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAotCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAotCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAotCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAotCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmZiwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhmZiwgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTEyX1JHQjIyfSwKLQotCXsweGExLCAweDAxLCAweDAxODB9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwKLQl7MHhhYSwgMHgyMSwgMHgwMDFifSwKLQl7MHhhYSwgMHgwMywgMHgwMDQ0fSwKLQl7MHhhYSwgMHgwNCwgMHgwMDA4fSwKLQl7MHhhYSwgMHgwNSwgMHgwMDFifSwKLQl7MHhhYSwgMHgwZSwgMHgwMDAxfSwKLQl7MHhhYSwgMHgwZiwgMHgwMDAwfSwKLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKLQl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKLQl7MHhhMCwgMHgxYiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKLQl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAotCXsweGEwLCAweDQ0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAotCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAotCXsweGEwLCAweGFkLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAotCXsweGEwLCAweGViLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAotCXsweGEwLCAweDBlLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMSwgMHgwMSwgMHgwMTk1fSwKLQl7MHhhMSwgMHgwMSwgMHgwMTk2fSwKLQl7MHhhMSwgMHgwMSwgMHgwMTk3fSwKLQl7MHhhMCwgMHgxYiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCi0JezB4YTAsIDB4MWQsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg5OSwgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTEsIDB4MDEsIDB4MDExNn0sCi0JezB4YTEsIDB4MDEsIDB4MDExOH0sCi0JezB4YTEsIDB4MDEsIDB4MDE4MH0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDFkLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCi0JezB4YTAsIDB4OTksIFpDM1hYX1IxMThfQkdBSU59LAotLyoJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwgKi8KLQl7MHhhMCwgMHgwMCwgMHgwMDA3fSwKLS8qCXsweGEwLCAweDE4LCAweDAwZmV9LCAqLwotCXt9Ci19Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIweGJfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDExLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKQEAgLTIzMTAsNjcgKzIwMjEsNiBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAogCXsweGFhLCAweDAyLCAweDAwOTB9LAkJCS8qIDAwLDAyLDgwLGFhICovCi0JezB4YTEsIDB4MDEsIDB4MDAwMn0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTEsIDB4MDEsIDB4MDA5MX0sCi0JezB4YTEsIDB4MDEsIDB4MDA5NX0sCi0JezB4YTEsIDB4MDEsIDB4MDA5Nn0sCi0KLQl7MHhhMSwgMHgwMSwgMHgwMDA4fSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBjbG9jayA/ICovCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCi0JezB4YTEsIDB4MDEsIDB4MDFjOH0sCi0JezB4YTEsIDB4MDEsIDB4MDFjOX0sCi0JezB4YTEsIDB4MDEsIDB4MDFjYX0sCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCi0KLQl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwQV9SR0IwMH0sCS8qIG1hdHJpeCAqLwotCXsweGEwLCAweGY4LCBaQzNYWF9SMTBCX1JHQjAxfSwKLQl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQ19SR0IwMn0sCi0JezB4YTAsIDB4ZjgsIFpDM1hYX1IxMERfUkdCMTB9LAotCXsweGEwLCAweDUwLCBaQzNYWF9SMTBFX1JHQjExfSwKLQl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwRl9SR0IxMn0sCi0JezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAotCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKLQl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCi0JezB4YTEsIDB4MDEsIDB4MDE4MH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAotCXsweGFhLCAweDI1LCAweDAwMDd9LAotCXsweGFhLCAweDI2LCAweDAwYTF9LAotCXsweGFhLCAweDI3LCAweDAwMjB9LAotCXsweGFhLCAweDIwLCAweDAwMDB9LAotCXsweGFhLCAweDIxLCAweDAwYTB9LAotCXsweGFhLCAweDIyLCAweDAwMTZ9LAotCXsweGFhLCAweDIzLCAweDAwNDB9LAotCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAyRiAqLwotCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiA0ZCAqLwotCXsweGEwLCAweDYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCi0JezB4YTAsIDB4ODYsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAotCXsweGEwLCAweGEwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCi0JezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKLQl7MHhhMCwgMHhhMCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKLQl7MHhhMCwgMHgxNiwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKLQl7MHhhMCwgMHg2MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFkfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFlfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFmfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDIwfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTEsIDB4MDEsIDB4MDE4MH0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMThfQkdBSU59LAotLyoJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwgKi8KIAl7fQogfTsKIApAQCAtMjQxOCw2NSArMjA2OCwxNTYgQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKIAl7MHhhYSwgMHgwMiwgMHgwMDkwfSwJLyogezB4YWEsIDB4MDIsIDB4MDA4MH0sICovCi0JezB4YTEsIDB4MDEsIDB4MDAwMn0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTEsIDB4MDEsIDB4MDA5MX0sCi0JezB4YTEsIDB4MDEsIDB4MDA5NX0sCi0JezB4YTEsIDB4MDEsIDB4MDA5Nn0sCi0JezB4YTEsIDB4MDEsIDB4MDAwOH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLwotCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLwotCXsweGExLCAweDAxLCAweDAxYzh9LAotCXsweGExLCAweDAxLCAweDAxYzl9LAotCXsweGExLCAweDAxLCAweDAxY2F9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLwotCi0JezB4YTAsIDB4NTAsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmOCwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4ZjgsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGY4LCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1MCwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjgsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGY4LCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHhmOCwgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTAsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGExLCAweDAxLCAweDAxODB9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKLQl7MHhhYSwgMHgyNSwgMHgwMDA3fSwKLQl7MHhhYSwgMHgyNiwgMHgwMGExfSwKLQl7MHhhYSwgMHgyNywgMHgwMDIwfSwKLQl7MHhhYSwgMHgyMCwgMHgwMDAwfSwKLQl7MHhhYSwgMHgyMSwgMHgwMDQwfSwKLQl7MHhhYSwgMHgyMiwgMHgwMDEzfSwKLQl7MHhhYSwgMHgyMywgMHgwMDRjfSwKLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDJmICovCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDRkICovCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDYwICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHhjMywgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4NTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDBjLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKLQl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAotCXsweGExLCAweDAxLCAweDAwMWR9LAotCXsweGExLCAweDAxLCAweDAwMWV9LAotCXsweGExLCAweDAxLCAweDAwMWZ9LAotCXsweGExLCAweDAxLCAweDAwMjB9LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKLQl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCi0vKgl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LCAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJfNTBIWltdID0gewkvKiA2NDB4NDgwKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgyNSwgMHgwMDA3fSwJCQkvKiAwMCwyNSwwNyxhYSAqLworCXsweGFhLCAweDI2LCAweDAwNTN9LAkJCS8qIDAwLDI2LDUzLGFhICovCisJezB4YWEsIDB4MjcsIDB4MDAwMH0sCQkJLyogMDAsMjcsMDAsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAwfSwJCQkvKiAwMCwyMCwwMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwNTB9LAkJCS8qIDAwLDIxLDUwLGFhICovCisJezB4YWEsIDB4MjIsIDB4MDAxYn0sCQkJLyogMDAsMjIsMWIsYWEgKi8KKwl7MHhhYSwgMHgyMywgMHgwMGZjfSwJCQkvKiAwMCwyMyxmYyxhYSAqLworCXsweGEwLCAweDJmLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMmYsY2MgKi8KKwl7MHhhMCwgMHg5YiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsOWIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsODAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweGVhLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsZWEsY2MgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDYwLGNjICovCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywwYyxjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwxOCxjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxOCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCS8qIDAwLDFkLDAwLGNjICovCisJezB4YTAsIDB4NTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCS8qIDAwLDFlLDUwLGNjICovCisJezB4YTAsIDB4MWIsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCS8qIDAwLDFmLDFiLGNjICovCisJezB4YTAsIDB4ZmMsIFpDM1hYX1IwMjBfSFNZTkNfM30sCS8qIDAwLDIwLGZjLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl81MEhaU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkvKiAwMCwxOSwwMCxjYyAqLworCXsweGFhLCAweDI1LCAweDAwMDd9LAkJCS8qIDAwLDI1LDA3LGFhICovCisJezB4YWEsIDB4MjYsIDB4MDA1M30sCQkJLyogMDAsMjYsNTMsYWEgKi8KKwl7MHhhYSwgMHgyNywgMHgwMDAwfSwJCQkvKiAwMCwyNywwMCxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDB9LAkJCS8qIDAwLDIwLDAwLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDA1MH0sCQkJLyogMDAsMjEsNTAsYWEgKi8KKwl7MHhhYSwgMHgyMiwgMHgwMDEyfSwJCQkvKiAwMCwyMiwxMixhYSAqLworCXsweGFhLCAweDIzLCAweDAwODB9LAkJCS8qIDAwLDIzLDgwLGFhICovCisJezB4YTAsIDB4MmYsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwyZixjYyAqLworCXsweGEwLCAweDliLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSw5YixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5Miw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAxLGNjICovCisJezB4YTAsIDB4ZDQsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NixkNCxjYyAqLworCXsweGEwLCAweGMwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsYzAsY2MgKi8KKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCS8qIDAxLDhjLDA3LGNjICovCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCS8qIDAxLDhmLDBmLGNjICovCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE4LGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJLyogMDAsMWQsMDAsY2MgKi8KKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJLyogMDAsMWUsNTAsY2MgKi8KKwl7MHhhMCwgMHgxMiwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJLyogMDAsMWYsMTIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAyMF9IU1lOQ18zfSwJLyogMDAsMjAsODAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFiXzYwSFpbXSA9IHsJLyogNjQweDQ4MCovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCS8qIDAwLDE5LDAwLGNjICovCisJezB4YWEsIDB4MjUsIDB4MDAwN30sCQkJLyogMDAsMjUsMDcsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMGExfSwJCQkvKiAwMCwyNixhMSxhYSAqLworCXsweGFhLCAweDI3LCAweDAwMjB9LAkJCS8qIDAwLDI3LDIwLGFhICovCisJezB4YWEsIDB4MjAsIDB4MDAwMH0sCQkJLyogMDAsMjAsMDAsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDQwfSwJCQkvKiAwMCwyMSw0MCxhYSAqLworCXsweGFhLCAweDIyLCAweDAwMTN9LAkJCS8qIDAwLDIyLDEzLGFhICovCisJezB4YWEsIDB4MjMsIDB4MDA0Y30sCQkJLyogMDAsMjMsNGMsYWEgKi8KKwl7MHhhMCwgMHgyZiwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDJmLGNjICovCisJezB4YTAsIDB4NGQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDRkLGNjICovCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDYwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHhjMywgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LGMzLGNjICovCisJezB4YTAsIDB4NTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw1MCxjYyAqLworCXsweGEwLCAweDBjLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJLyogMDEsOGMsMGMsY2MgKi8KKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJLyogMDEsOGYsMTgsY2MgKi8KKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTgsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkvKiAwMCwxZCwwMCxjYyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkvKiAwMCwxZSw0MCxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkvKiAwMCwxZiwxMyxjYyAqLworCXsweGEwLCAweDRjLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkvKiAwMCwyMCw0YyxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJfNjBIWlNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgyNSwgMHgwMDA3fSwJCQkvKiAwMCwyNSwwNyxhYSAqLworCXsweGFhLCAweDI2LCAweDAwYTF9LAkJCS8qIDAwLDI2LGExLGFhICovCisJezB4YWEsIDB4MjcsIDB4MDAyMH0sCQkJLyogMDAsMjcsMjAsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAwfSwJCQkvKiAwMCwyMCwwMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwYTB9LAkJCS8qIDAwLDIxLGEwLGFhICovCisJezB4YWEsIDB4MjIsIDB4MDAxNn0sCQkJLyogMDAsMjIsMTYsYWEgKi8KKwl7MHhhYSwgMHgyMywgMHgwMDQwfSwJCQkvKiAwMCwyMyw0MCxhYSAqLworCXsweGEwLCAweDJmLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMmYsY2MgKi8KKwl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsNGQsY2MgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsNjAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMSxjYyAqLworCXsweGEwLCAweDg2LCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsODYsY2MgKi8KKwl7MHhhMCwgMHhhMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LGEwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywwNyxjYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwwZixjYyAqLworCXsweGEwLCAweDE4LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxOCxjYyAqLworCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCS8qIDAwLDFkLDAwLGNjICovCisJezB4YTAsIDB4YTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCS8qIDAwLDFlLGEwLGNjICovCisJezB4YTAsIDB4MTYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCS8qIDAwLDFmLDE2LGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMjBfSFNZTkNfM30sCS8qIDAwLDIwLDQwLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Ob0ZsaWtlcltdID0gewkvKiA2NDB4NDgwKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgyNSwgMHgwMDAzfSwJCQkvKiAwMCwyNSwwMyxhYSAqLworCXsweGFhLCAweDI2LCAweDAwMDB9LAkJCS8qIDAwLDI2LDAwLGFhICovCisJezB4YWEsIDB4MjcsIDB4MDAwMH0sCQkJLyogMDAsMjcsMDAsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAwfSwJCQkvKiAwMCwyMCwwMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwMTB9LAkJCS8qIDAwLDIxLDEwLGFhICovCisJezB4YWEsIDB4MjIsIDB4MDAwMH0sCQkJLyogMDAsMjIsMDAsYWEgKi8KKwl7MHhhYSwgMHgyMywgMHgwMDAzfSwJCQkvKiAwMCwyMywwMyxhYSAqLworCXsweGEwLCAweDJmLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMmYsY2MgKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsZjgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCS8qIDAwLDFkLDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCS8qIDAwLDFlLDEwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCS8qIDAwLDFmLDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMjBfSFNZTkNfM30sCS8qIDAwLDIwLDAzLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Ob0ZsaWtlclNjYWxlW10gPSB7IC8qIDMyMHgyNDAgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJLyogMDAsMTksMDAsY2MgKi8KKwl7MHhhYSwgMHgyNSwgMHgwMDAzfSwJCQkvKiAwMCwyNSwwMyxhYSAqLworCXsweGFhLCAweDI2LCAweDAwMDB9LAkJCS8qIDAwLDI2LDAwLGFhICovCisJezB4YWEsIDB4MjcsIDB4MDAwMH0sCQkJLyogMDAsMjcsMDAsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAwfSwJCQkvKiAwMCwyMCwwMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwYTB9LAkJCS8qIDAwLDIxLGEwLGFhICovCisJezB4YWEsIDB4MjIsIDB4MDAxNn0sCQkJLyogMDAsMjIsMTYsYWEgKi8KKwl7MHhhYSwgMHgyMywgMHgwMDQwfSwJCQkvKiAwMCwyMyw0MCxhYSAqLworCXsweGEwLCAweDJmLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMmYsY2MgKi8KKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsZjgsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAwLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCS8qIDAwLDFkLDAwLGNjICovCisJezB4YTAsIDB4YTAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCS8qIDAwLDFlLGEwLGNjICovCisJezB4YTAsIDB4MTYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCS8qIDAwLDFmLDE2LGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMjBfSFNZTkNfM30sCS8qIDAwLDIwLDQwLGNjICovCiAJe30KIH07CiAKQEAgLTQzODksNiArNDEzMCwyNzAgQEAKIAl7fQogfTsKIAorLyogZnJvbSB1c2J2bTMxYi5pbmYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMyMDJiX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwwMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MgKi8KKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDAwLDA2LGUwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwJLyogMDAsMDEsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDMsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDEsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA4RF9DT01QQUJJTElUWU1PREV9LAkvKiAwMCw4ZCwwOCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMyxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAkJLyogMDAsOWIsMDEsY2MgKi8KKwl7MHhhMCwgMHhlNiwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZTYsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LAkJLyogMDAsOWQsMDIsY2MgKi8KKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCQkvKiAwMCw5ZSw4NixjYyAqLworCXsweGFhLCAweDAyLCAweDAwMDJ9LAkJCS8qIDAwLDAyLDA0LGFhIC0tPiAwMiAqLworCXsweGFhLCAweDA3LCAweDAwMDZ9LAkJCQkvKiAwMCwwNywwNixhYSAqLworCXsweGFhLCAweDA4LCAweDAwMDJ9LAkJCQkvKiAwMCwwOCwwMixhYSAqLworCXsweGFhLCAweDA5LCAweDAwMDZ9LAkJCQkvKiAwMCwwOSwwNixhYSAqLworCXsweGFhLCAweDBhLCAweDAwMDF9LAkJCQkvKiAwMCwwYSwwMSxhYSAqLworCXsweGFhLCAweDBiLCAweDAwMDF9LAkJCQkvKiAwMCwwYiwwMSxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDh9LAkJCQkvKiAwMCwwYywwOCxhYSAqLworCXsweGFhLCAweDBkLCAweDAwMDB9LAkJCQkvKiAwMCwwZCwwMCxhYSAqLworCXsweGFhLCAweDEwLCAweDAwMDB9LAkJCQkvKiAwMCwxMCwwMCxhYSAqLworCXsweGFhLCAweDEyLCAweDAwMDV9LAkJCQkvKiAwMCwxMiwwNSxhYSAqLworCXsweGFhLCAweDEzLCAweDAwNjN9LAkJCQkvKiAwMCwxMyw2MyxhYSAqLworCXsweGFhLCAweDE1LCAweDAwNzB9LAkJCQkvKiAwMCwxNSw3MCxhYSAqLworCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAkvKiAwMSwwMSxiNyxjYyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGQsY2MgKi8KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAkJLyogMDEsODksMDYsY2MgKi8KKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwJCQkJLyogMDEsYWQsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJCS8qIDAxLGM1LDAzLGNjICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkJLyogMDEsY2IsMTMsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCS8qIDAyLDUwLDA4LGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjICovCisJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSw4ZCw3MCxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBlLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMTAsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCQkvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwOERfQ09NUEFCSUxJVFlNT0RFfSwJLyogMDAsOGQsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAkJLyogMDAsOTgsMDgsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkJLyogMDAsOWEsMDIsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkJLyogMDEsMWEsMDgsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkJLyogMDEsMWMsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwJCS8qIDAwLDliLDAxLGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJCS8qIDAwLDljLGQ4LGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwJCS8qIDAwLDlkLDAyLGNjICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAkJLyogMDAsOWUsODgsY2MgKi8KKwl7MHhhYSwgMHgwMiwgMHgwMDAyfSwJCQkJLyogMDAsMDIsMDIsYWEgKi8KKwl7MHhhYSwgMHgwNywgMHgwMDA2fSwJCQkJLyogMDAsMDcsMDYsYWEgKi8KKwl7MHhhYSwgMHgwOCwgMHgwMDAyfSwJCQkJLyogMDAsMDgsMDIsYWEgKi8KKwl7MHhhYSwgMHgwOSwgMHgwMDA2fSwJCQkJLyogMDAsMDksMDYsYWEgKi8KKwl7MHhhYSwgMHgwYSwgMHgwMDAxfSwJCQkJLyogMDAsMGEsMDEsYWEgKi8KKwl7MHhhYSwgMHgwYiwgMHgwMDAxfSwJCQkJLyogMDAsMGIsMDEsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDA4fSwJCQkJLyogMDAsMGMsMDgsYWEgKi8KKwl7MHhhYSwgMHgwZCwgMHgwMDAwfSwJCQkJLyogMDAsMGQsMDAsYWEgKi8KKwl7MHhhYSwgMHgxMCwgMHgwMDAwfSwJCQkJLyogMDAsMTAsMDAsYWEgKi8KKwl7MHhhYSwgMHgxMiwgMHgwMDA1fSwJCQkJLyogMDAsMTIsMDUsYWEgKi8KKwl7MHhhYSwgMHgxMywgMHgwMDYzfSwJCQkJLyogMDAsMTMsNjMsYWEgKi8KKwl7MHhhYSwgMHgxNSwgMHgwMDcwfSwJCQkJLyogMDAsMTUsNzAsYWEgKi8KKwl7MHhhMCwgMHgzNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLyogMDEsMDEsMzcsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJCS8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDAsIDB4MDFhZH0sCQkJCS8qIDAxLGFkLDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCQkvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJCS8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCQkvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDcwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAkJLyogMDEsOGQsNzAsY2MgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMyMDJiXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLworCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDY4fSwJCQkJLyogMDAsMjEsNjgsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDQ0fSwJCQkJLyogMDAsMDMsNDQsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDI4fSwJCQkJLyogMDAsMDUsMjgsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KKwl7MHhhMCwgMHhkMiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZDIsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDRkLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4NDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0NCxjYyAqLworCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KKwl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCisJezB4YTAsIDB4ZWIsIFpDM1hYX1IwMjBfSFNZTkNfM30sCQkvKiAwMCwyMCxlYixjYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMGYsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDBlLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl81MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLworCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDZjfSwJCQkJLyogMDAsMjEsNmMsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDQxfSwJCQkJLyogMDAsMDMsNDEsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDJjfSwJCQkJLyogMDAsMDUsMmMsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KKwl7MHhhMCwgMHhiZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsYmUsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KKwl7MHhhMCwgMHg5YiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDliLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4NDEsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MSxjYyAqLworCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KKwl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCQkvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMGYsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDBlLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl82MEhaW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCisJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwMH0sCQkJCS8qIDAwLDIxLDAwLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDA0NX0sCQkJCS8qIDAwLDAzLDQ1LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwMH0sCQkJCS8qIDAwLDA1LDAwLGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCisJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCisJezB4YTAsIDB4YzAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGMwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw0MCxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDQ1LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDUsY2MgKi8KKwl7MHhhMCwgMHg4ZSwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDhlLGNjICovCisJezB4YTAsIDB4YzEsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixjMSxjYyAqLworCXsweGEwLCAweGY1LCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZjUsY2MgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDBmLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwwZSxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfNjBIWlNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCisJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwNH0sCQkJCS8qIDAwLDIxLDA0LGFhICovCisJezB4YWEsIDB4MDMsIDB4MDA0Mn0sCQkJCS8qIDAwLDAzLDQyLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwNH0sCQkJCS8qIDAwLDA1LDA0LGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCisJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MGYsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBmLGNjICovCisJezB4YTAsIDB4OWYsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDlmLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4ODEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw4MSxjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDQyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDIsY2MgKi8KKwl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCisJezB4YTAsIDB4YWYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZixjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDBmLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwwZSxjYyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLworCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDIwfSwJCQkJLyogMDAsMjEsMjAsYWEgKi8KKwl7MHhhYSwgMHgwMywgMHgwMDQwfSwJCQkJLyogMDAsMDMsNDAsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KKwl7MHhhYSwgMHgwNSwgMHgwMDIwfSwJCQkJLyogMDAsMDUsMjAsYWEgKi8KKwl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KKwl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGYwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NywwMixjYyAqLworCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCisJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4NDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MCxjYyAqLworCXsweGEwLCAweDYwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNjAsY2MgKi8KKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLDkwLGNjICovCisJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCQkvKiAwMCwyMCxmZixjYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMGYsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDBlLGNjICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl9Ob0ZsaWtlclNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KKwl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCisJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAxMH0sCQkJCS8qIDAwLDIxLDEwLGFhICovCisJezB4YWEsIDB4MDMsIDB4MDA0MH0sCQkJCS8qIDAwLDAzLDQwLGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAxMH0sCQkJCS8qIDAwLDA1LDEwLGFhICovCisJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCisJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLworCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLworCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsMDIsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLworCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwwMCxjYyAqLworCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCisJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAkJLyogMDAsMjAsZmYsY2MgKi8KKwl7MHhhMCwgMHgwZiwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDBmLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwwZSxjYyAqLworCXt9Cit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGIwMzMwM3hfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC01NzI1LDcgKzU3MzAsNyBAQAogCXt9CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlW10gPSB7Ci0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCisvKj8/CXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIApAQCAtNjA0OSw3ICs2MDU0LDcgQEAKIAl7MHhhYSwgMHgxYiwgMHgwMDAwfSwJCS8qIDAwLDFiLDAwLGFhLCAqLwogCXsweGFhLCAweDEzLCAweDAwMDJ9LAkJLyogMDAsMTMsMDIsYWEsICovCiAJezB4YWEsIDB4MTUsIDB4MDAwNH0sCQkvKiAwMCwxNSwwNCxhYSAqLwotCXsweGFhLCAweDAxLCAweDAwMDB9LAorLyo/Pwl7MHhhYSwgMHgwMSwgMHgwMDAwfSwgKi8KIAl7MHhhYSwgMHgwMSwgMHgwMDAwfSwKIAl7MHhhYSwgMHgxYSwgMHgwMDAwfSwJCS8qIDAwLDFhLDAwLGFhLCAqLwogCXsweGFhLCAweDFjLCAweDAwMTd9LAkJLyogMDAsMWMsMTcsYWEsICovCkBAIC02MDY1LDggKzYwNzAsOCBAQAogCXsweGFhLCAweDBmLCAweDAwYTB9LAkJLyogMDAsMGYsYTAsYWEsICovCiAJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkvKiAwMCwxMCwwMCxhYSwgKi8KIAl7MHhhYSwgMHgxMSwgMHgwMGEwfSwJCS8qIDAwLDExLGEwLGFhLCAqLwotCXsweGEwLCAweDAwLCAweDAwMzl9LAotCXsweGExLCAweDAxLCAweDAwMzd9LAorLyo/Pwl7MHhhMCwgMHgwMCwgMHgwMDM5fSwKKwl7MHhhMSwgMHgwMSwgMHgwMDM3fSwgKi8KIAl7MHhhYSwgMHgxNiwgMHgwMDAxfSwJCS8qIDAwLDE2LDAxLGFhLCAqLwogCXsweGFhLCAweDE3LCAweDAwZTh9LAkJLyogMDAsMTcsZTYsYWEgKGU2IC0+IGU4KSAqLwogCXsweGFhLCAweDE4LCAweDAwMDJ9LAkJLyogMDAsMTgsMDIsYWEsICovCkBAIC02MzAzLDcgKzYzMDgsNyBAQAogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHZhbEwsIDB4OTMpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHZhbEgsIDB4OTQpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4OTApOwkJLyogPC0gd3JpdGUgY29tbWFuZCAqLwotCW1zbGVlcCg1KTsKKwltc2xlZXAoMTUpOwogCXJldGJ5dGUgPSByZWdfcl9pKGdzcGNhX2RldiwgMHgwMDkxKTsJCS8qIHJlYWQgc3RhdHVzICovCiAJUERFQlVHKERfVVNCTywgImkyYyB3IFslMDJ4XSA9ICUwMnglMDJ4ICglMDJ4KSIsCiAJCQlyZWcsIHZhbEgsIHZhbEwsIHJldGJ5dGUpOwpAQCAtNjM0NiwzMCArNjM1MSwzNSBAQAogCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07CiAJc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CiAJCXsweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4LCAweGY0LCAweGY0LCAweGY0LCAweDU4fTsKKwlzdGF0aWMgY29uc3QgX191OCBwYXMyMDJiX21hdHJpeFs5XSA9CisJCXsweDRjLCAweGY1LCAweGZmLCAweGY5LCAweDUxLCAweGY1LCAweGZiLCAweGVkLCAweDVmfTsKIAlzdGF0aWMgY29uc3QgX191OCBwbzIwMzBfbWF0cml4WzldID0KIAkJezB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NjB9OwogCXN0YXRpYyBjb25zdCBfX3U4IHZmMDI1MF9tYXRyaXhbOV0gPQogCQl7MHg3YiwgMHhlYSwgMHhlYSwgMHhlYSwgMHg3YiwgMHhlYSwgMHhlYSwgMHhlYSwgMHg3Yn07CisJc3RhdGljIGNvbnN0IF9fdTggKm1hdHJpeF90YltTRU5TT1JfTUFYXSA9IHsKKwkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDIgMCAqLworCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMksgMSAqLworCQlnYzAzMDVfbWF0cml4LAkvKiBTRU5TT1JfR0MwMzA1IDIgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IRENTMjAyMGIgMyAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUIgNCAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUMgNSAqLworCQlOVUxMLAkJLyogU0VOU09SX0lDTTEwNUEgNiAqLworCQlOVUxMLAkJLyogU0VOU09SX01DNTAxQ0IgNyAqLworCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfT1Y3NjIwIDggKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9QQVMxMDYgMTAgKi8KKwkJcGFzMjAyYl9tYXRyaXgsCS8qIFNFTlNPUl9QQVMyMDJCIDExICovCisJCU5VTEwsCQkvKiBTRU5TT1JfUEIwMzMwIDEyICovCisJCXBvMjAzMF9tYXRyaXgsCS8qIFNFTlNPUl9QTzIwMzAgMTMgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTQgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE1ICovCisJCXZmMDI1MF9tYXRyaXgsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKwl9OwogCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfR0MwMzA1OgotCQltYXRyaXggPSBnYzAzMDVfbWF0cml4OwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9NQzUwMUNCOgotCQlyZXR1cm47CQkvKiBubyBtYXRyaXg/ICovCi0JY2FzZSBTRU5TT1JfT1Y3NjIwOgotLyoJY2FzZSBTRU5TT1JfT1Y3NjQ4OiAqLwotCQltYXRyaXggPSBvdjc2MjBfbWF0cml4OwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9QTzIwMzA6Ci0JCW1hdHJpeCA9IHBvMjAzMF9tYXRyaXg7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKLQkJbWF0cml4ID0gdmYwMjUwX21hdHJpeDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoJCS8qIG1hdHJpeCBhbHJlYWR5IGxvYWRlZCAqLwotCQlyZXR1cm47Ci0JfQorCW1hdHJpeCA9IG1hdHJpeF90YltzZC0+c2Vuc29yXTsKKwlpZiAobWF0cml4ID09IE5VTEwpCisJCXJldHVybjsJCS8qIG1hdHJpeCBhbHJlYWR5IGxvYWRlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NzYyMF9tYXRyaXgpOyBpKyspCiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBtYXRyaXhbaV0sIDB4MDEwYSArIGkpOwogfQpAQCAtNjU4NSw0MiArNjU5NSw0MiBAQAogCQl7Z2MwMzA1X05vRmxpa2VyLCBnYzAzMDVfTm9GbGlrZXIsCiAJCSBnYzAzMDVfNTBIWiwgZ2MwMzA1XzUwSFosCiAJCSBnYzAzMDVfNjBIWiwgZ2MwMzA1XzYwSFp9LAotLyogU0VOU09SX0hEQ1MyMDIwIDMgKi8KLQkJe05VTEwsIE5VTEwsCi0JCSBOVUxMLCBOVUxMLAotCQkgTlVMTCwgTlVMTH0sCi0vKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKy8qIFNFTlNPUl9IRENTMjAyMGIgMyAqLwogCQl7aGRjczIwMjBiX05vRmxpa2VyLCBoZGNzMjAyMGJfTm9GbGlrZXIsCiAJCSBoZGNzMjAyMGJfNTBIWiwgaGRjczIwMjBiXzUwSFosCiAJCSBoZGNzMjAyMGJfNjBIWiwgaGRjczIwMjBiXzYwSFp9LAotLyogU0VOU09SX0hWNzEzMUIgNSAqLworLyogU0VOU09SX0hWNzEzMUIgNCAqLworCQl7aHY3MTMxYl9Ob0ZsaWtlclNjYWxlLCBodjcxMzFiX05vRmxpa2VyLAorCQkgaHY3MTMxYl81MEhaU2NhbGUsIGh2NzEzMWJfNTBIWiwKKwkJIGh2NzEzMWJfNjBIWlNjYWxlLCBodjcxMzFiXzYwSFp9LAorLyogU0VOU09SX0hWNzEzMUMgNSAqLwogCQl7TlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMfSwKLS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KLQkJe05VTEwsIE5VTEwsCi0JCSBOVUxMLCBOVUxMLAotCQkgTlVMTCwgTlVMTH0sCi0vKiBTRU5TT1JfSUNNMTA1QSA3ICovCisvKiBTRU5TT1JfSUNNMTA1QSA2ICovCiAJCXtpY20xMDVhX05vRmxpa2VyLCBpY20xMDVhX05vRmxpa2VyU2NhbGUsCiAJCSBpY20xMDVhXzUwSFosIGljbTEwNWFfNTBIWlNjYWxlLAogCQkgaWNtMTA1YV82MEhaLCBpY20xMDVhXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfTUM1MDFDQiA4ICovCisvKiBTRU5TT1JfTUM1MDFDQiA3ICovCiAJCXtNQzUwMUNCX05vRmxpa2VyLCBNQzUwMUNCX05vRmxpa2VyU2NhbGUsCiAJCSBNQzUwMUNCXzUwSFosIE1DNTAxQ0JfNTBIWlNjYWxlLAogCQkgTUM1MDFDQl82MEhaLCBNQzUwMUNCXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKy8qIFNFTlNPUl9PVjc2MjAgOCAqLwogCQl7T1Y3NjIwX05vRmxpa2VyLCBPVjc2MjBfTm9GbGlrZXIsCiAJCSBPVjc2MjBfNTBIWiwgT1Y3NjIwXzUwSFosCiAJCSBPVjc2MjBfNjBIWiwgT1Y3NjIwXzYwSFp9LAotLyogU0VOU09SX09WNzYzMEMgMTAgKi8KKy8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KIAkJe05VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTH0sCi0vKiBTRU5TT1JfUEFTMTA2IDExICovCisvKiBTRU5TT1JfUEFTMTA2IDEwICovCiAJCXtwYXMxMDZiX05vRmxpa2VyLCBwYXMxMDZiX05vRmxpa2VyLAogCQkgcGFzMTA2Yl81MEhaLCBwYXMxMDZiXzUwSFosCiAJCSBwYXMxMDZiXzYwSFosIHBhczEwNmJfNjBIWn0sCisvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLworCQl7cGFzMjAyYl9Ob0ZsaWtlclNjYWxlLCBwYXMyMDJiX05vRmxpa2VyLAorCQkgcGFzMjAyYl81MEhaU2NhbGUsIHBhczIwMmJfNTBIWiwKKwkJIHBhczIwMmJfNjBIWlNjYWxlLCBwYXMyMDJiXzYwSFp9LAogLyogU0VOU09SX1BCMDMzMCAxMiAqLwogCQl7cGIwMzMwX05vRmxpa2VyLCBwYjAzMzBfTm9GbGlrZXJTY2FsZSwKIAkJIHBiMDMzMF81MEhaLCBwYjAzMzBfNTBIWlNjYWxlLApAQCAtNzAwMiwxNSArNzAxMiwxNSBAQAogCQk1LAkvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KIAkJNSwJLyogU0VOU09SX0NTMjEwMksgMSAqLwogCQk0LAkvKiBTRU5TT1JfR0MwMzA1IDIgKi8KLQkJNCwJLyogU0VOU09SX0hEQ1MyMDIwIDMgKi8KLQkJNCwJLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCi0JCTQsCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUMgNiAqLwotCQk0LAkvKiBTRU5TT1JfSUNNMTA1QSA3ICovCi0JCTQsCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJMywJLyogU0VOU09SX09WNzYyMCA5ICovCi0JCTQsCS8qIFNFTlNPUl9PVjc2MzBDIDEwICovCi0JCTQsCS8qIFNFTlNPUl9QQVMxMDYgMTEgKi8KKwkJNCwJLyogU0VOU09SX0hEQ1MyMDIwYiAzICovCisJCTQsCS8qIFNFTlNPUl9IVjcxMzFCIDQgKi8KKwkJNCwJLyogU0VOU09SX0hWNzEzMUMgNSAqLworCQk0LAkvKiBTRU5TT1JfSUNNMTA1QSA2ICovCisJCTQsCS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KKwkJMywJLyogU0VOU09SX09WNzYyMCA4ICovCisJCTQsCS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KKwkJNCwJLyogU0VOU09SX1BBUzEwNiAxMCAqLworCQk0LAkvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLwogCQk0LAkvKiBTRU5TT1JfUEIwMzMwIDEyICovCiAJCTQsCS8qIFNFTlNPUl9QTzIwMzAgMTMgKi8KIAkJNCwJLyogU0VOU09SX1RBUzUxMzBDSyAxNCAqLwpAQCAtNzA2Niw4ICs3MDc2LDggQEAKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNNMTA1QTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MGU6Ci0JCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhEQ1MyMDIwIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOU09SX0hEQ1MyMDIwOworCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMyMDJCIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzIwMkI7CiAJCQlzZC0+c2hhcnBuZXNzID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MGY6CkBAIC03MTUzLDcgKzcxNjMsNiBAQAogCXNkLT5nYW1tYSA9IGdhbW1hWyhpbnQpIHNkLT5zZW5zb3JdOwogCXNkLT5hdXRvZ2FpbiA9IHNkX2N0cmxzW1NEX0FVVE9HQUlOXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5saWdodGZyZXEgPSBzZF9jdHJsc1tTRF9GUkVRXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5zaGFycG5lc3MgPSBzZF9jdHJsc1tTRF9TSEFSUE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CkBAIC03MTYxLDcgKzcxNzAsNiBAQAogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEJSSUdIVE5FU1NfSURYKTsKIAkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfSERDUzIwMjA6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAljYXNlIFNFTlNPUl9IVjcxMzFDOgogCWNhc2UgU0VOU09SX09WNzYzMEM6CkBAIC03MTkxLDE1ICs3MTk5LDE1IEBACiAJCXtjczIxMDJfSW5pdGlhbFNjYWxlLCBjczIxMDJfSW5pdGlhbH0sCQkvKiAwICovCiAJCXtjczIxMDJLX0luaXRpYWxTY2FsZSwgY3MyMTAyS19Jbml0aWFsfSwJLyogMSAqLwogCQl7Z2MwMzA1X0luaXRpYWwsIGdjMDMwNV9Jbml0aWFsU2NhbGV9LAkJLyogMiAqLwotCQl7aGRjczIwMjB4eF9Jbml0aWFsU2NhbGUsIGhkY3MyMDIweHhfSW5pdGlhbH0sCS8qIDMgKi8KLQkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiA0ICovCi0JCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDUgKi8KLQkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNiAqLwotCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA3ICovCi0JCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogOSAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDkgKi8KLQkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiAxMCAqLwotCQl7cGFzMTA2Yl9Jbml0aWFsU2NhbGUsIHBhczEwNmJfSW5pdGlhbH0sCS8qIDExICovCisJCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogMyAqLworCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA0ICovCisJCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDUgKi8KKwkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNiAqLworCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDcgKi8KKwkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiA4ICovCisJCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogOSAqLworCQl7cGFzMTA2Yl9Jbml0aWFsU2NhbGUsIHBhczEwNmJfSW5pdGlhbH0sCS8qIDEwICovCisJCXtwYXMyMDJiX0luaXRpYWwsIHBhczIwMmJfSW5pdGlhbFNjYWxlfSwJLyogMTEgKi8KIAkJe3BiMDMzMHh4X0luaXRpYWxTY2FsZSwgcGIwMzMweHhfSW5pdGlhbH0sCS8qIDEyICovCiAvKiBvcgkJe3BiMDMzMDN4X0luaXRpYWxTY2FsZSwgcGIwMzMwM3hfSW5pdGlhbH0sICovCiAJCXtQTzIwMzBfbW9kZTAsIFBPMjAzMF9tb2RlMX0sCQkJLyogMTMgKi8KQEAgLTcyNTYsNiArNzI2NCw3IEBACiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMDgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwogCQkvKiBmYWxsIHRocnUgKi8KQEAgLTcyNjksNyArNzI3OCw2IEBACiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQ1MyMTAyOgkJLyogZ2FtbWEgc2V0IGluIHh4eF9Jbml0aWFsICovCiAJY2FzZSBTRU5TT1JfQ1MyMTAySzoKLQljYXNlIFNFTlNPUl9IRENTMjAyMDoKIAljYXNlIFNFTlNPUl9IRENTMjAyMGI6CiAJY2FzZSBTRU5TT1JfUEIwMzMwOgkJLyogcGIgd2l0aCBjaGlwX3JldmlzaW9uIC0gc2VlIGFib3ZlICovCiAJY2FzZSBTRU5TT1JfT1Y3NjMwQzoKQEAgLTcyODIsNiArNzI5MCw3IEBACiAJc2V0bWF0cml4KGdzcGNhX2Rldik7CQkJLyogb25lIG1vcmUgdGltZT8gKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9PVjc2MjA6CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAxODApOwkvKiBmcm9tIHdpbiAqLwogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDE4MCk7CiAJCWJyZWFrOwpAQCAtNzI5MywzNyArNzMwMiwyOSBAQAogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgotCWNhc2UgU0VOU09SX09WNzYyMDoKIAkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7Ci0JCXNkLT5hdXRvZ2FpbiA9IDA7Ci0JCWJyZWFrOworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKLQkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworLyoJCXJlZ193KGRldiwgMHg0MCwgWkMzWFhfUjExN19HR0FJTik7ICAqIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ19yKGdzcGNhX2RldiwgMHgwMTgwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCQlyZWdfdyhkZXYsIDB4MDksIDB4MDFhZCk7CisJCXJlZ193KGRldiwgMHgxNSwgMHgwMWFlKTsKKwkJaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJLypmaXhtZTogcmV0dXJucyAweGEzICovCisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTMsIDB4YTMsIDB4MDApOworCQkJCQkgLypmaXhtZTogcmV0dXJuZWQgdmFsdWUgdG8gc2VuZD8gKi8KKwkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7CiAJCWJyZWFrOwogCX0KIAogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfR0MwMzA1OgotLyoJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwk/PyAoZW5kOiA4MCAtPiBbMThkXSkgKi8KLQkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwotCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7Ci0JCXJlZ193KGRldiwgMHg0MCwgMHgwMTgwKTsKLQkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwotCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7Ci0JCXNkLT5hdXRvZ2FpbiA9IDE7Ci0JCXNldGF1dG9nYWluKGdzcGNhX2Rldik7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09WNzYyMDoKLQkJaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJLypmaXhtZTogcmV0dXJucyAweGEzICovCi0JCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTMsIDB4YTMsIDB4MDApOwotCQkJCQkgLypmaXhtZTogcmV0dXJuZWQgdmFsdWUgdG8gc2VuZD8gKi8KLQkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwotCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7Ci0JCXNldGF1dG9nYWluKGdzcGNhX2Rldik7Ci0JCW1zbGVlcCg1MDApOworCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTAwKTsKQEAgLTczMzMsNiArNzMzNCw4IEBACiAJCXJlZ193KGRldiwgMHgwMiwgMHgwMDA4KTsKIAkJYnJlYWs7CiAJfQorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMyMDJCKQorCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUzMCw2ICs3NTMzLDcgQEAKIAl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwYyl9LAogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDBmKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDYxLCAweDBhMDApfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5ZCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9NQzUwMUNCfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhhMCl9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGExKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YTIpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggZWZlODQ5OS4uZDQ2NThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTM4NSwxMCArMzg1LDEwIEBACiAJCWdvdG8gZXJyX291dF9kZXRhY2g7CiAJfQogCi0JLyogUGh5cyBhZGRyIGNhbiBvbmx5IGJlIHNldCBhZnRlciBhdHRhY2hpbmcgKGZvciBpci0+Yy5kZXYuYnVzX2lkKSAqLworCS8qIFBoeXMgYWRkciBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgYXR0YWNoaW5nIChmb3IgaXItPmMuZGV2KSAqLwogCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAiJXMvJXMvaXIwIiwKLQkJIGlyLT5jLmFkYXB0ZXItPmRldi5idXNfaWQsCi0JCSBpci0+Yy5kZXYuYnVzX2lkKTsKKwkJIGRldl9uYW1lKCZpci0+Yy5hZGFwdGVyLT5kZXYpLAorCQkgZGV2X25hbWUoJmlyLT5jLmRldikpOwogCiAJLyogaW5pdCArIHJlZ2lzdGVyIGlucHV0IGRldmljZSAqLwogCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlLCBpci0+aXJfY29kZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggNGUwNWY5MS4uMjg4M2M4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC04NzcsMjAgKzg3NywyOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgaXZ0dl9jYXJkX3BnNjAwdjIgPSB7CiAJLnR5cGUgPSBJVlRWX0NBUkRfUEc2MDBWMiwKIAkubmFtZSA9ICJZdWFuIFBHNjAwLTIsIEdvdFZpZXcgUENJIERWRCBMaXRlIiwKLQkuY29tbWVudCA9ICJvbmx5IENvbXBvc2l0ZSBhbmQgUy1WaWRlbyBpbnB1dHMgYXJlIHN1cHBvcnRlZCwgbm90IHRoZSB0dW5lclxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAogCS5od192aWRlbyA9IElWVFZfSFdfQ1gyNTg0MCwKIAkuaHdfYXVkaW8gPSBJVlRWX0hXX0NYMjU4NDAsCiAJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0NYMjU4NDAsCi0JLmh3X2FsbCA9IElWVFZfSFdfQ1gyNTg0MCwKKwkuaHdfYWxsID0gSVZUVl9IV19DWDI1ODQwIHwgSVZUVl9IV19UVU5FUiwKKwkvKiBYQzIwMjggc3VwcG9ydCBhcHBhcmVudGx5IHdvcmtzIGZvciB0aGUgWXVhbiwgaXQncyBzdGlsbAorCSAgIHVuY2VydGFpbiB3aGV0aGVyIGl0IGFsc28gd29ya3Mgd2l0aCB0aGUgR290Vmlldy4gKi8KIAkudmlkZW9faW5wdXRzID0gewotCQl7IElWVFZfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAwLAorCQl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDI1ODQwX0NPTVBPU0lURTIgfSwKKwkJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKIAkJICBDWDI1ODQwX1NWSURFT19MVU1BMyB8IENYMjU4NDBfU1ZJREVPX0NIUk9NQTQgfSwKLQkJeyBJVlRWX0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMCwgQ1gyNTg0MF9DT01QT1NJVEUxIH0sCisJCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIENYMjU4NDBfQ09NUE9TSVRFMSB9LAogCX0sCiAJLmF1ZGlvX2lucHV0cyA9IHsKKwkJeyBJVlRWX0NBUkRfSU5QVVRfQVVEX1RVTkVSLCAgQ1gyNTg0MF9BVURJTzUgICAgICAgfSwKIAkJeyBJVlRWX0NBUkRfSU5QVVRfTElORV9JTjEsICAgQ1gyNTg0MF9BVURJT19TRVJJQUwgfSwKIAl9LAorCS5yYWRpb19pbnB1dCA9IHsgSVZUVl9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gyNTg0MF9BVURJTzUgfSwKKwkueGNlaXZlX3BpbiA9IDEyLAorCS50dW5lcnMgPSB7CisJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfWEMyMDI4IH0sCisJfSwKIAkucGNpX2xpc3QgPSBpdnR2X3BjaV9wZzYwMHYyLAogCS5pMmMgPSAmaXZ0dl9pMmNfc3RkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCmluZGV4IDQ4ZTEwM2IuLjYyYWEwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYwpAQCAtNjMsNyArNjMsNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlpZiAoaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19RVUVSWUNUUkwsIHFjdHJsKSkKKwkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgcXVlcnljdHJsLCBxY3RybCkpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CiAJCXJldHVybiAwOwogCkBAIC03Myw3ICs3Myw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCWlmIChpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX1FVRVJZQ1RSTCwgcWN0cmwpKQorCQlpZiAodjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKIAkJcmV0dXJuIDA7CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgc19jdHJsLCB2Y3RybCk7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0xMzAsNyArMTMwLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoKLQkJcmV0dXJuIGl2dHZfaTJjX2h3KGl0diwgaXR2LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfU19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfYXVkaW8sIGNvcmUsIHNfY3RybCwgdmN0cmwpOwogCiAJZGVmYXVsdDoKIAkJSVZUVl9ERUJVR19JT0NUTCgiaW52YWxpZCBjb250cm9sIDB4JXhcbiIsIHZjdHJsLT5pZCk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIGl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfR19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIGNvcmUsIGdfY3RybCwgdmN0cmwpOwogCiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMTU1LDcgKzE1NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCXJldHVybiBpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX0dfQ1RSTCwgdmN0cmwpOworCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBjb3JlLCBnX2N0cmwsIHZjdHJsKTsKIAlkZWZhdWx0OgogCQlJVlRWX0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQkJZm10LmZtdC5waXgud2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aCAvIChpc19tcGVnMSA/IDIgOiAxKTsKIAkJCWZtdC5mbXQucGl4LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKLQkJCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsICZmbXQpOworCQkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19mbXQsICZmbXQpOwogCQl9CiAJCWVyciA9IGN4MjM0MXhfdXBkYXRlKGl0diwgaXZ0dl9hcGlfZnVuYywgJml0di0+cGFyYW1zLCAmcCk7CiAJCWlmICghZXJyICYmIGl0di0+cGFyYW1zLnN0cmVhbV92YmlfZm10ICE9IHAuc3RyZWFtX3ZiaV9mbXQpCkBAIC0yNzksNyArMjc5LDcgQEAKIAkJLyogVGhlIGF1ZGlvIGNsb2NrIG9mIHRoZSBkaWdpdGl6ZXIgbXVzdCBtYXRjaCB0aGUgY29kZWMgc2FtcGxlCiAJCSAgIHJhdGUgb3RoZXJ3aXNlIHlvdSBnZXQgc29tZSB2ZXJ5IHN0cmFuZ2UgZWZmZWN0cy4gKi8KIAkJaWYgKGlkeCA8IHNpemVvZihmcmVxcykpCi0JCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsICZmcmVxc1tpZHhdKTsKKwkJCWl2dHZfY2FsbF9hbGwoaXR2LCBhdWRpbywgc19jbG9ja19mcmVxLCBmcmVxc1tpZHhdKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGI2OWNjMWQuLjA4Yjc2MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC02MCw5ICs2MCw2IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKLS8qIHZhciB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgaW4gdXNlICovCi1pbnQgaXZ0dl9jYXJkc19hY3RpdmU7Ci0KIC8qIElmIHlvdSBoYXZlIGFscmVhZHkgWCB2NGwgY2FyZHMsIHRoZW4gc2V0IHRoaXMgdG8gWC4gVGhpcyB3YXkKICAgIHRoZSBkZXZpY2UgbnVtYmVycyBzdGF5IG1hdGNoZWQuIEV4YW1wbGU6IHlvdSBoYXZlIGEgV2luVFYgY2FyZAogICAgd2l0aG91dCByYWRpbyBhbmQgYSBQVlItMzUwIHdpdGguIE5vcm1hbGx5IHRoaXMgd291bGQgZ2l2ZSBhCkBAIC03MCwxMiArNjcsNiBAQAogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCiBpbnQgaXZ0dl9maXJzdF9taW5vcjsKIAotLyogTWFzdGVyIHZhcmlhYmxlIGZvciBhbGwgaXZ0diBpbmZvICovCi1zdHJ1Y3QgaXZ0diAqaXZ0dl9jYXJkc1tJVlRWX01BWF9DQVJEU107Ci0KLS8qIFByb3RlY3RzIGl2dHZfY2FyZHNfYWN0aXZlICovCi1ERUZJTkVfU1BJTkxPQ0soaXZ0dl9jYXJkc19sb2NrKTsKLQogLyogYWRkIHlvdXIgcmV2aXNpb24gYW5kIHdoYXRub3QgaGVyZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl2dHZfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfSUNPTVAsIFBDSV9ERVZJQ0VfSURfSVZUVjE1LApAQCAtODcsNiArNzgsOSBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSxpdnR2X3BjaV90YmwpOwogCisvKiBpdnR2IGluc3RhbmNlIGNvdW50ZXIgKi8KK3N0YXRpYyBhdG9taWNfdCBpdnR2X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKIC8qIFBhcmFtZXRlciBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgY2FyZHR5cGVbSVZUVl9NQVhfQ0FSRFNdOwogc3RhdGljIGludCB0dW5lcltJVlRWX01BWF9DQVJEU10gPSB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKQEAgLTU5OSw5ICs1OTMsOSBAQAogCWl0di0+b3B0aW9ucy5raWxvYnl0ZXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHXSA9IGRlY19tcGdfYnVmZmVycyAqIDEwMjQ7CiAJaXR2LT5vcHRpb25zLmtpbG9ieXRlc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdID0gZGVjX3l1dl9idWZmZXJzICogMTAyNDsKIAlpdHYtPm9wdGlvbnMua2lsb2J5dGVzW0lWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSV0gPSBkZWNfdmJpX2J1ZmZlcnM7Ci0JaXR2LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbaXR2LT5udW1dOwotCWl0di0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2l0di0+bnVtXTsKLQlpdHYtPm9wdGlvbnMucmFkaW8gPSByYWRpb1tpdHYtPm51bV07CisJaXR2LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbaXR2LT5pbnN0YW5jZV07CisJaXR2LT5vcHRpb25zLnR1bmVyID0gdHVuZXJbaXR2LT5pbnN0YW5jZV07CisJaXR2LT5vcHRpb25zLnJhZGlvID0gcmFkaW9baXR2LT5pbnN0YW5jZV07CiAJaXR2LT5vcHRpb25zLm5ld2kyYyA9IG5ld2kyYzsKIAlpZiAodHVuZXJ0eXBlIDwgLTEgfHwgdHVuZXJ0eXBlID4gMSkgewogCQlJVlRWX1dBUk4oIkludmFsaWQgdHVuZXJ0eXBlIGFyZ3VtZW50LCB3aWxsIGF1dG9kZXRlY3QgaW5zdGVhZFxuIik7CkBAIC02ODgsNyArNjgyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmaXR2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaXR2LT5kbWFfcmVnX2xvY2spOwogCi0JaXR2LT5pcnFfd29ya19xdWV1ZXMgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShpdHYtPm5hbWUpOworCWl0di0+aXJxX3dvcmtfcXVldWVzID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaXR2LT5kZXZpY2UubmFtZSk7CiAJaWYgKGl0di0+aXJxX3dvcmtfcXVldWVzID09IE5VTEwpIHsKIAkJSVZUVl9FUlIoIkNvdWxkIG5vdCBjcmVhdGUgaXZ0diB3b3JrcXVldWVcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC03NzAsMTIgKzc2NCw2IEBACiAJCWkgPSAwOwogCWl0di0+YWN0aXZlX2lucHV0ID0gaTsKIAlpdHYtPmF1ZGlvX2lucHV0ID0gaXR2LT5jYXJkLT52aWRlb19pbnB1dHNbaV0uYXVkaW9faW5kZXg7Ci0JaWYgKGl0di0+Y2FyZC0+aHdfYWxsICYgSVZUVl9IV19DWDI1ODQwKQotCQlpdHYtPnZpZGVvX2RlY19mdW5jID0gaXZ0dl9jeDI1ODQwOwotCWVsc2UgaWYgKGl0di0+Y2FyZC0+aHdfYWxsICYgSVZUVl9IV19TQUE3MTdYKQotCQlpdHYtPnZpZGVvX2RlY19mdW5jID0gaXZ0dl9zYWE3MTd4OwotCWVsc2UKLQkJaXR2LT52aWRlb19kZWNfZnVuYyA9IGl2dHZfc2FhNzExNTsKIH0KIAogc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtNzg4LDIxICs3NzYsMjEgQEAKIAlJVlRWX0RFQlVHX0lORk8oIkVuYWJsaW5nIHBjaSBkZXZpY2VcbiIpOwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpIHsKLQkJSVZUVl9FUlIoIkNhbid0IGVuYWJsZSBkZXZpY2UgJWQhXG4iLCBpdHYtPm51bSk7CisJCUlWVFZfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYsIDB4ZmZmZmZmZmYpKSB7Ci0JCUlWVFZfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlIG9uIGNhcmQgJWQuXG4iLCBpdHYtPm51bSk7CisJCUlWVFZfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpdHYtPmJhc2VfYWRkciwgSVZUVl9FTkNPREVSX1NJWkUsICJpdnR2IGVuY29kZXIiKSkgewotCQlJVlRWX0VSUigiQ2Fubm90IHJlcXVlc3QgZW5jb2RlciBtZW1vcnkgcmVnaW9uIG9uIGNhcmQgJWQuXG4iLCBpdHYtPm51bSk7CisJCUlWVFZfRVJSKCJDYW5ub3QgcmVxdWVzdCBlbmNvZGVyIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX1JFR19PRkZTRVQsCiAJCQkJSVZUVl9SRUdfU0laRSwgIml2dHYgcmVnaXN0ZXJzIikpIHsKLQkJSVZUVl9FUlIoIkNhbm5vdCByZXF1ZXN0IHJlZ2lzdGVyIG1lbW9yeSByZWdpb24gb24gY2FyZCAlZC5cbiIsIGl0di0+bnVtKTsKKwkJSVZUVl9FUlIoIkNhbm5vdCByZXF1ZXN0IHJlZ2lzdGVyIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGl0di0+YmFzZV9hZGRyLCBJVlRWX0VOQ09ERVJfU0laRSk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTgxMCw3ICs3OTgsNyBAQAogCWlmIChpdHYtPmhhc19jeDIzNDE1ICYmCiAJICAgICFyZXF1ZXN0X21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX0RFQ09ERVJfT0ZGU0VULAogCQkJCUlWVFZfREVDT0RFUl9TSVpFLCAiaXZ0diBkZWNvZGVyIikpIHsKLQkJSVZUVl9FUlIoIkNhbm5vdCByZXF1ZXN0IGRlY29kZXIgbWVtb3J5IHJlZ2lvbiBvbiBjYXJkICVkLlxuIiwgaXR2LT5udW0pOworCQlJVlRWX0VSUigiQ2Fubm90IHJlcXVlc3QgZGVjb2RlciBtZW1vcnkgcmVnaW9uLlxuIik7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihpdHYtPmJhc2VfYWRkciwgSVZUVl9FTkNPREVSX1NJWkUpOwogCQlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX1JFR19PRkZTRVQsIElWVFZfUkVHX1NJWkUpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTg1Myw2OSArODQxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB1MzIgaXZ0dl9yZXF1ZXN0X21vZHVsZShzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgaHcsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiBpZCkKLXsKLQlpZiAoKGh3ICYgaWQpID09IDApCi0JCXJldHVybiBodzsKLQlpZiAocmVxdWVzdF9tb2R1bGUobmFtZSkgIT0gMCkgewotCQlJVlRWX0VSUigiRmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIGh3ICYgfmlkOwotCX0KLQlJVlRWX0RFQlVHX0lORk8oIkxvYWRlZCBtb2R1bGUgJXNcbiIsIG5hbWUpOwotCXJldHVybiBodzsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBpdnR2X2xvYWRfYW5kX2luaXRfbW9kdWxlcyhzdHJ1Y3QgaXZ0diAqaXR2KQogewogCXUzMiBodyA9IGl0di0+Y2FyZC0+aHdfYWxsOwogCXVuc2lnbmVkIGk7CiAKLSNpZmRlZiBNT0RVTEUKLQkvKiBsb2FkIG1vZHVsZXMgKi8KLSNpZmRlZiBDT05GSUdfTUVESUFfVFVORVJfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJ0dW5lciIsIElWVFZfSFdfVFVORVIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0NYMjU4NDBfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJjeDI1ODQwIiwgSVZUVl9IV19DWDI1ODQwKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19TQUE3MTFYX01PRFVMRQotCWh3ID0gaXZ0dl9yZXF1ZXN0X21vZHVsZShpdHYsIGh3LCAic2FhNzExNSIsIElWVFZfSFdfU0FBNzExWCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fU0FBNzEyN19NT0RVTEUKLQlodyA9IGl2dHZfcmVxdWVzdF9tb2R1bGUoaXR2LCBodywgInNhYTcxMjciLCBJVlRWX0hXX1NBQTcxMjcpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX1NBQTcxN1hfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJzYWE3MTd4IiwgSVZUVl9IV19TQUE3MTdYKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19VUEQ2NDAzMUFfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJ1cGQ2NDAzMWEiLCBJVlRWX0hXX1VQRDY0MDMxQSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fVVBENjQwODNfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJ1cGQ2NDA4MyIsIElWVFZfSFdfVVBENjQwOFgpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX01TUDM0MDBfTU9EVUxFCi0JaHcgPSBpdnR2X3JlcXVlc3RfbW9kdWxlKGl0diwgaHcsICJtc3AzNDAwIiwgSVZUVl9IV19NU1AzNFhYKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19WUDI3U01QWF9NT0RVTEUKLQlodyA9IGl2dHZfcmVxdWVzdF9tb2R1bGUoaXR2LCBodywgInZwMjdzbXB4IiwgSVZUVl9IV19WUDI3U01QWCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fV004Nzc1X01PRFVMRQotCWh3ID0gaXZ0dl9yZXF1ZXN0X21vZHVsZShpdHYsIGh3LCAid204Nzc1IiwgSVZUVl9IV19XTTg3NzUpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX1dNODczOV9NT0RVTEUKLQlodyA9IGl2dHZfcmVxdWVzdF9tb2R1bGUoaXR2LCBodywgIndtODczOSIsIElWVFZfSFdfV004NzM5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19DUzUzTDMyQV9NT0RVTEUKLQlodyA9IGl2dHZfcmVxdWVzdF9tb2R1bGUoaXR2LCBodywgImNzNTNsMzJhIiwgSVZUVl9IV19DUzUzTDMyQSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fTTUyNzkwX01PRFVMRQotCWh3ID0gaXZ0dl9yZXF1ZXN0X21vZHVsZShpdHYsIGh3LCAibTUyNzkwIiwgSVZUVl9IV19NNTI3OTApOwotI2VuZGlmCi0jZW5kaWYKLQogCS8qIGNoZWNrIHdoaWNoIGkyYyBkZXZpY2VzIGFyZSBhY3R1YWxseSBmb3VuZCAqLwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCXUzMiBkZXZpY2UgPSAxIDw8IGk7CkBAIC05MjcsMTEgKzg1NywyMSBAQAogCQkJaXR2LT5od19mbGFncyB8PSBkZXZpY2U7CiAJCQljb250aW51ZTsKIAkJfQotCQlpdnR2X2kyY19yZWdpc3RlcihpdHYsIGkpOwotCQlpZiAoaXZ0dl9pMmNfaHdfYWRkcihpdHYsIGRldmljZSkgPiAwKQorCQlpZiAoaXZ0dl9pMmNfcmVnaXN0ZXIoaXR2LCBpKSA9PSAwKQogCQkJaXR2LT5od19mbGFncyB8PSBkZXZpY2U7CiAJfQogCisJaWYgKGl0di0+Y2FyZC0+aHdfYWxsICYgSVZUVl9IV19DWDI1ODQwKQorCQlpdHYtPnNkX3ZpZGVvID0gaXZ0dl9maW5kX2h3KGl0diwgSVZUVl9IV19DWDI1ODQwKTsKKwllbHNlIGlmIChpdHYtPmNhcmQtPmh3X2FsbCAmIElWVFZfSFdfU0FBNzE3WCkKKwkJaXR2LT5zZF92aWRlbyA9IGl2dHZfZmluZF9odyhpdHYsIElWVFZfSFdfU0FBNzE3WCk7CisJZWxzZSBpZiAoaXR2LT5jYXJkLT5od19hbGwgJiBJVlRWX0hXX1NBQTcxMTQpCisJCWl0di0+c2RfdmlkZW8gPSBpdnR2X2ZpbmRfaHcoaXR2LCBJVlRWX0hXX1NBQTcxMTQpOworCWVsc2UKKwkJaXR2LT5zZF92aWRlbyA9IGl2dHZfZmluZF9odyhpdHYsIElWVFZfSFdfU0FBNzExNSk7CisJaXR2LT5zZF9hdWRpbyA9IGl2dHZfZmluZF9odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW9fY3RybCk7CisJaXR2LT5zZF9tdXhlciA9IGl2dHZfZmluZF9odyhpdHYsIGl0di0+Y2FyZC0+aHdfbXV4ZXIpOworCiAJaHcgPSBpdHYtPmh3X2ZsYWdzOwogCiAJaWYgKGl0di0+Y2FyZC0+dHlwZSA9PSBJVlRWX0NBUkRfQ1gyMzQxNkdZQykgewpAQCAtOTQ5LDcgKzg4OSw3IEBACiAJCS8qIFRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBvZiBHVk1WUFJYIGlzIDI0LjU3Nk1IeiAqLwogCQljcnlzdGFsX2ZyZXEuZnJlcSA9IFNBQTcxMTVfRlJFUV8yNF81NzZfTUhaOwogCQljcnlzdGFsX2ZyZXEuZmxhZ3MgPSBTQUE3MTE1X0ZSRVFfRkxfVUNHQzsKLQkJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVEsICZjcnlzdGFsX2ZyZXEpOworCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX2NyeXN0YWxfZnJlcSwgJmNyeXN0YWxfZnJlcSk7CiAJfQogCiAJaWYgKGh3ICYgSVZUVl9IV19DWDI1ODQwKSB7CkBAIC05NjcsNyArOTA3LDcgQEAKIAkJLyogZGV0ZXJtaW5lIHRoZSBleGFjdCBzYWE3MTF4IG1vZGVsICovCiAJCWl0di0+aHdfZmxhZ3MgJj0gfklWVFZfSFdfU0FBNzExWDsKIAotCQlpdnR2X3NhYTcxMTUoaXR2LCBWSURJT0NfR19DSElQX0lERU5ULCAmdik7CisJCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzExWCwgY29yZSwgZ19jaGlwX2lkZW50LCAmdik7CiAJCWlmICh2LmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCkgewogCQkJaXR2LT5od19mbGFncyB8PSBJVlRWX0hXX1NBQTcxMTQ7CiAJCQkvKiBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIHNhYTcxMTQgZHJpdmVyLiAqLwpAQCAtMTAwMSwyOCArOTQxLDIwIEBACiAJaW50IHZiaV9idWZfc2l6ZTsKIAlzdHJ1Y3QgaXZ0diAqaXR2OwogCi0Jc3Bpbl9sb2NrKCZpdnR2X2NhcmRzX2xvY2spOwotCi0JLyogTWFrZSBzdXJlIHdlJ3ZlIGdvdCBhIHBsYWNlIGZvciB0aGlzIGNhcmQgKi8KLQlpZiAoaXZ0dl9jYXJkc19hY3RpdmUgPT0gSVZUVl9NQVhfQ0FSRFMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpdnR2OiAgTWF4aW11bSBudW1iZXIgb2YgY2FyZHMgZGV0ZWN0ZWQgKCVkKVxuIiwKLQkJCSAgICAgIGl2dHZfY2FyZHNfYWN0aXZlKTsKLQkJc3Bpbl91bmxvY2soJml2dHZfY2FyZHNfbG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQogCWl0diA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdnR2KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGl0diA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrKCZpdnR2X2NhcmRzX2xvY2spOworCWlmIChpdHYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWl2dHZfY2FyZHNbaXZ0dl9jYXJkc19hY3RpdmVdID0gaXR2OwogCWl0di0+ZGV2ID0gZGV2OwotCWl0di0+bnVtID0gaXZ0dl9jYXJkc19hY3RpdmUrKzsKLQlzbnByaW50ZihpdHYtPm5hbWUsIHNpemVvZihpdHYtPm5hbWUpLCAiaXZ0diVkIiwgaXR2LT5udW0pOwotCUlWVFZfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgIyVkXG4iLCBpdHYtPm51bSk7CisJaXR2LT5pbnN0YW5jZSA9IGF0b21pY19pbmNfcmV0dXJuKCZpdnR2X2luc3RhbmNlKSAtIDE7CiAKLQlzcGluX3VubG9jaygmaXZ0dl9jYXJkc19sb2NrKTsKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZpdHYtPmRldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiAiaXZ0diArIFBDSSBJRCIgaXMgYSBiaXQgb2YgYSBtb3V0aGZ1bCwgc28gdXNlCisJICAgIml2dHYgKyBpbnN0YW5jZSIgaW5zdGVhZC4gKi8KKwlzbnByaW50ZihpdHYtPmRldmljZS5uYW1lLCBzaXplb2YoaXR2LT5kZXZpY2UubmFtZSksCisJCQkiaXZ0diVkIiwgaXR2LT5pbnN0YW5jZSk7CisJSVZUVl9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgaXR2LT5pbnN0YW5jZSk7CiAKIAlpdnR2X3Byb2Nlc3Nfb3B0aW9ucyhpdHYpOwogCWlmIChpdHYtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTEwNDMsOCArOTc1LDYgQEAKIAkJZWxzZSBpZiAocmV0dmFsID09IC1FTlhJTykKIAkJCWdvdG8gZnJlZV9tZW07CiAJfQotCS8qIHNhdmUgaXR2IGluIHRoZSBwY2kgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBpdHYpOwogCiAJLyogbWFwIGlvIG1lbW9yeSAqLwogCUlWVFZfREVCVUdfSU5GTygiYXR0ZW1wdGluZyBpb3JlbWFwIGF0IDB4JTA4eCBsZW4gMHglMDh4XG4iLApAQCAtMTA4Niw3ICsxMDE2LDkgQEAKIAkJZ290byBmcmVlX2lvOwogCX0KIAotCWl2dHZfZ3Bpb19pbml0KGl0dik7CisJcmV0dmFsID0gaXZ0dl9ncGlvX2luaXQoaXR2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZyZWVfaW87CiAKIAkvKiBhY3RpdmUgaTJjICAqLwogCUlWVFZfREVCVUdfSU5GTygiYWN0aXZhdGluZyBpMmMuLi5cbiIpOwpAQCAtMTA5NSw4ICsxMDI3LDYgQEAKIAkJZ290byBmcmVlX2lvOwogCX0KIAotCUlWVFZfREVCVUdfSU5GTygiQWN0aXZlIGNhcmQgY291bnQ6ICVkLlxuIiwgaXZ0dl9jYXJkc19hY3RpdmUpOwotCiAJaWYgKGl0di0+Y2FyZC0+aHdfYWxsICYgSVZUVl9IV19UVkVFUFJPTSkgewogCQkvKiBCYXNlZCBvbiB0aGUgbW9kZWwgbnVtYmVyIHRoZSBjYXJkdHlwZSBtYXkgYmUgY2hhbmdlZC4KIAkJICAgVGhlIFBDSSBJRHMgYXJlIG5vdCBhbHdheXMgcmVsaWFibGUuICovCkBAIC0xMTkxLDcgKzExMjEsNyBAQAogCQlzZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsgIC8qIG1hdGNoZXMgVFYgdHVuZXJzICovCiAJCXNldHVwLnR1bmVyX2NhbGxiYWNrID0gKHNldHVwLnR5cGUgPT0gVFVORVJfWEMyMDI4KSA/CiAJCQlpdnR2X3Jlc2V0X3R1bmVyX2dwaW8gOiBOVUxMOwotCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmc2V0dXApOworCQlpdnR2X2NhbGxfYWxsKGl0diwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmc2V0dXApOwogCQlpZiAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKIAkJCQkuZm5hbWUgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKQEAgLTEyMDEsNyArMTEzMSw3IEBACiAJCQkJLnR1bmVyID0gaXR2LT5vcHRpb25zLnR1bmVyLAogCQkJCS5wcml2ID0gJmN0cmwsCiAJCQl9OwotCQkJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVFVORVJfU0VUX0NPTkZJRywgJmNmZyk7CisJCQlpdnR2X2NhbGxfYWxsKGl0diwgdHVuZXIsIHNfY29uZmlnLCAmY2ZnKTsKIAkJfQogCX0KIApAQCAtMTIxMCwxMSArMTE0MCwxMSBAQAogCWl0di0+dHVuZXJfc3RkID0gaXR2LT5zdGQ7CiAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewotCQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBWSURJT0NfSU5UX1NfU1REX09VVFBVVCwgJml0di0+c3RkKTsKKwkJaXZ0dl9jYWxsX2FsbChpdHYsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIGl0di0+c3RkKTsKIAkJLyogVHVybiBvZmYgdGhlIG91dHB1dCBzaWduYWwuIFRoZSBtcGVnIGRlY29kZXIgaXMgbm90IHlldAogCQkgICBhY3RpdmUgc28gd2l0aG91dCB0aGlzIHlvdSB3b3VsZCBnZXQgYSBncmVlbiBpbWFnZSB1bnRpbCB0aGUKIAkJICAgbXBlZyBkZWNvZGVyIGJlY29tZXMgYWN0aXZlLiAqLwotCQlpdnR2X3NhYTcxMjcoaXR2LCBWSURJT0NfU1RSRUFNT0ZGLCBOVUxMKTsKKwkJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTI3LCB2aWRlbywgc19zdHJlYW0sIDApOwogCX0KIAogCS8qIGNsZWFyIGludGVycnVwdCBtYXNrLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLwpAQCAtMTIyMiw3ICsxMTUyLDcgQEAKIAogCS8qIFJlZ2lzdGVyIElSUSAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGl0di0+ZGV2LT5pcnEsIGl2dHZfaXJxX2hhbmRsZXIsCi0JCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgaXR2LT5uYW1lLCAodm9pZCAqKWl0dik7CisJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGl0di0+ZGV2aWNlLm5hbWUsICh2b2lkICopaXR2KTsKIAlpZiAocmV0dmFsKSB7CiAJCUlWVFZfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGZyZWVfaTJjOwpAQCAtMTIzOCw3ICsxMTY4LDcgQEAKIAkJSVZUVl9FUlIoIkVycm9yICVkIHJlZ2lzdGVyaW5nIGRldmljZXNcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9zdHJlYW1zOwogCX0KLQlJVlRWX0lORk8oIkluaXRpYWxpemVkIGNhcmQgIyVkOiAlc1xuIiwgaXR2LT5udW0sIGl0di0+Y2FyZF9uYW1lKTsKKwlJVlRWX0lORk8oIkluaXRpYWxpemVkIGNhcmQ6ICVzXG4iLCBpdHYtPmNhcmRfbmFtZSk7CiAJcmV0dXJuIDA7CiAKIGZyZWVfc3RyZWFtczoKQEAgLTEyNjEsMTAgKzExOTEsOCBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUlWVFZfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCXNwaW5fbG9jaygmaXZ0dl9jYXJkc19sb2NrKTsKLQlrZnJlZShpdnR2X2NhcmRzW2l2dHZfY2FyZHNfYWN0aXZlXSk7Ci0JaXZ0dl9jYXJkc1tpdnR2X2NhcmRzX2FjdGl2ZV0gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZpdnR2X2NhcmRzX2xvY2spOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJml0di0+ZGV2aWNlKTsKKwlrZnJlZShpdHYpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEzMDQsMTAgKzEyMzIsMTEgQEAKIAlpZiAoaXR2LT5jYXJkLT5od19hbGwgJiBJVlRWX0hXX0NYMjU4NDApIHsKIAkJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwogCisJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgaW5pdCwgMCk7CiAJCS8qIENYMjU4NDBfQ0lEX0VOQUJMRV9QVlIxNTBfV09SS0FST1VORCAqLwogCQljdHJsLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFOwogCQljdHJsLnZhbHVlID0gaXR2LT5wdnIxNTBfd29ya2Fyb3VuZDsKLQkJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKIAl9CiAKIAl2Zi50dW5lciA9IDA7CkBAIC0xMzM3LDcgKzEyNjYsNyBAQAogCQkvKiBUdXJuIG9uIHRoZSBUVi1vdXQ6IGl2dHZfaW5pdF9tcGVnX2RlY29kZXIoKSBpbml0aWFsaXplcwogCQkgICB0aGUgbXBlZyBkZWNvZGVyIHNvIG5vdyB0aGUgc2FhNzEyNyByZWNlaXZlcyBhIHByb3BlcgogCQkgICBzaWduYWwuICovCi0JCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PTiwgTlVMTCk7CisJCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzEyNywgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAkJaXZ0dl9pbml0X21wZWdfZGVjb2RlcihpdHYpOwogCX0KIAlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJml0di0+dHVuZXJfc3RkKTsKQEAgLTEzNjIsOSArMTI5MSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpdnR2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwY2lfZGV2LT5kZXYpOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KGRldik7CisJaW50IGk7CiAKLQlJVlRWX0RFQlVHX0lORk8oIlJlbW92aW5nIENhcmQgIyVkXG4iLCBpdHYtPm51bSk7CisJSVZUVl9ERUJVR19JTkZPKCJSZW1vdmluZyBjYXJkXG4iKTsKIAogCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9JTklURUQsICZpdHYtPmlfZmxhZ3MpKSB7CiAJCS8qIFN0b3AgYWxsIGNhcHR1cmVzICovCkBAIC0xMzc3LDcgKzEzMDgsNyBAQAogCiAJCS8qIFR1cm4gb2ZmIHRoZSBUVi1vdXQgKi8KIAkJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpCi0JCQlpdnR2X3NhYTcxMjcoaXR2LCBWSURJT0NfU1RSRUFNT0ZGLCBOVUxMKTsKKwkJCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzEyNywgdmlkZW8sIHNfc3RyZWFtLCAwKTsKIAkJaWYgKGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA+IDApIHsKIAkJCWludCB0eXBlOwogCkBAIC0xNDAyLDYgKzEzMzMsOCBAQAogCWl2dHZfc3RyZWFtc19jbGVhbnVwKGl0diwgMSk7CiAJaXZ0dl91ZG1hX2ZyZWUoaXR2KTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJml0di0+ZGV2aWNlKTsKKwogCWV4aXRfaXZ0dl9pMmMoaXR2KTsKIAogCWZyZWVfaXJxKGl0di0+ZGV2LT5pcnEsICh2b2lkICopaXR2KTsKQEAgLTE0MTMsOCArMTM0NiwxMSBAQAogCQlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX0RFQ09ERVJfT0ZGU0VULCBJVlRWX0RFQ09ERVJfU0laRSk7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoaXR2LT5kZXYpOworCWZvciAoaSA9IDA7IGkgPCBJVlRWX1ZCSV9GUkFNRVM7IGkrKykKKwkJa2ZyZWUoaXR2LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAKLQlJVlRWX0lORk8oIlJlbW92ZWQgJXMsIGNhcmQgIyVkXG4iLCBpdHYtPmNhcmRfbmFtZSwgaXR2LT5udW0pOworCXByaW50ayhLRVJOX0lORk8gIml2dHY6IFJlbW92ZWQgJXNcbiIsIGl0di0+Y2FyZF9uYW1lKTsKKwlrZnJlZShpdHYpOwogfQogCiAvKiBkZWZpbmUgYSBwY2lfZHJpdmVyIGZvciBjYXJkIGRldGVjdGlvbiAqLwpAQCAtMTQyNyw1NCArMTM2MywzNiBAQAogCiBzdGF0aWMgaW50IG1vZHVsZV9zdGFydCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gIml2dHY6ICBTdGFydCBpbml0aWFsaXphdGlvbiwgdmVyc2lvbiAlc1xuIiwgSVZUVl9WRVJTSU9OKTsKLQotCW1lbXNldChpdnR2X2NhcmRzLCAwLCBzaXplb2YoaXZ0dl9jYXJkcykpOworCXByaW50ayhLRVJOX0lORk8gIml2dHY6IFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLCBJVlRWX1ZFUlNJT04pOwogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCWlmIChpdnR2X2ZpcnN0X21pbm9yIDwgMCB8fCBpdnR2X2ZpcnN0X21pbm9yID49IElWVFZfTUFYX0NBUkRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXZ0djogIEV4aXRpbmcsIGl2dHZfZmlyc3RfbWlub3IgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIml2dHY6IEV4aXRpbmcsIGl2dHZfZmlyc3RfbWlub3IgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLAogCQkgICAgIElWVFZfTUFYX0NBUkRTIC0gMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoaXZ0dl9kZWJ1ZyA8IDAgfHwgaXZ0dl9kZWJ1ZyA+IDIwNDcpIHsKIAkJaXZ0dl9kZWJ1ZyA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIml2dHY6ICBEZWJ1ZyB2YWx1ZSBtdXN0IGJlID49IDAgYW5kIDw9IDIwNDdcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJpdnR2OiBEZWJ1ZyB2YWx1ZSBtdXN0IGJlID49IDAgYW5kIDw9IDIwNDdcbiIpOwogCX0KIAogCWlmIChwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpdnR2X3BjaV9kcml2ZXIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXZ0djogIEVycm9yIGRldGVjdGluZyBQQ0kgY2FyZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiaXZ0djogRXJyb3IgZGV0ZWN0aW5nIFBDSSBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIml2dHY6ICBFbmQgaW5pdGlhbGl6YXRpb25cbiIpOworCXByaW50ayhLRVJOX0lORk8gIml2dHY6IEVuZCBpbml0aWFsaXphdGlvblxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG1vZHVsZV9jbGVhbnVwKHZvaWQpCiB7Ci0JaW50IGksIGo7Ci0KIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml2dHZfcGNpX2RyaXZlcik7Ci0KLQlzcGluX2xvY2soJml2dHZfY2FyZHNfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IGl2dHZfY2FyZHNfYWN0aXZlOyBpKyspIHsKLQkJaWYgKGl2dHZfY2FyZHNbaV0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGogPSAwOyBqIDwgSVZUVl9WQklfRlJBTUVTOyBqKyspIHsKLQkJCWtmcmVlKGl2dHZfY2FyZHNbaV0tPnZiaS5zbGljZWRfbXBlZ19kYXRhW2pdKTsKLQkJfQotCQlrZnJlZShpdnR2X2NhcmRzW2ldKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJml2dHZfY2FyZHNfbG9jayk7CiB9CiAKIC8qIE5vdGU6IFRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBieSB0aGUgaXZ0dmZiCiAgICBmcmFtZWJ1ZmZlciBtb2R1bGUgYW5kIGFuIGluZnJhcmVkIG1vZHVsZSBmb3IgdGhlIElSLWJsYXN0ZXIuICovCiBFWFBPUlRfU1lNQk9MKGl2dHZfc2V0X2lycV9tYXNrKTsKLUVYUE9SVF9TWU1CT0woaXZ0dl9jYXJkc19hY3RpdmUpOwotRVhQT1JUX1NZTUJPTChpdnR2X2NhcmRzKTsKLUVYUE9SVF9TWU1CT0woaXZ0dl9jYXJkc19sb2NrKTsKIEVYUE9SVF9TWU1CT0woaXZ0dl9hcGkpOwogRVhQT1JUX1NZTUJPTChpdnR2X3ZhcGkpOwogRVhQT1JUX1NZTUJPTChpdnR2X3ZhcGlfcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKaW5kZXggMzczM2IyYS4uY2U4ZDliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogCkBAIC0xMTMsOSArMTE0LDYgQEAKICNkZWZpbmUgSVZUVl9SRUdfVlBVIAkJCSgweDkwNTgpCiAjZGVmaW5lIElWVFZfUkVHX0FQVSAJCQkoMHhBMDY0KQogCi0vKiBpMmMgc3R1ZmYgKi8KLSNkZWZpbmUgSTJDX0NMSUVOVFNfTUFYIDE2Ci0KIC8qIGRlYnVnZ2luZyAqLwogZXh0ZXJuIGludCBpdnR2X2RlYnVnOwogCkBAIC0xMzIsMTIgKzEzMCwxMCBAQAogLyogRmxhZyB0byB0dXJuIG9uIGhpZ2ggdm9sdW1lIGRlYnVnZ2luZyAqLwogI2RlZmluZSBJVlRWX0RCR0ZMR19ISUdIVk9MICgxIDw8IDEwKQogCi0vKiBOT1RFOiBleHRyYSBzcGFjZSBiZWZvcmUgY29tbWEgaW4gJ2l0di0+bnVtICwgIyMgYXJncycgaXMgcmVxdWlyZWQgZm9yCi0gICBnY2MtMi45NSwgb3RoZXJ3aXNlIGl0IHdvbid0IGNvbXBpbGUuICovCiAjZGVmaW5lIElWVFZfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoeCkgJiBpdnR2X2RlYnVnKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICJpdnR2JWQgIiB0eXBlICI6ICIgZm10LCBpdHYtPm51bSAsICMjIGFyZ3MpOyBcCisJCQl2NGwyX2luZm8oJml0di0+ZGV2aWNlLCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWX0RFQlVHX1dBUk4oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVRyhJVlRWX0RCR0ZMR19XQVJOLCAgIndhcm4iLCAgZm10ICwgIyMgYXJncykKICNkZWZpbmUgSVZUVl9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUcoSVZUVl9EQkdGTEdfSU5GTywgICJpbmZvIiwgIGZtdCAsICMjIGFyZ3MpCkBAIC0xNTIsOCArMTQ4LDggQEAKIAogI2RlZmluZSBJVlRWX0RFQlVHX0hJR0hfVk9MKHgsIHR5cGUsIGZtdCwgYXJncy4uLikgXAogCWRvIHsgXAotCQlpZiAoKCh4KSAmIGl2dHZfZGVidWcpICYmIChpdnR2X2RlYnVnICYgSVZUVl9EQkdGTEdfSElHSFZPTCkpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gIml2dHYlZCAiIHR5cGUgIjogIiBmbXQsIGl0di0+bnVtICwgIyMgYXJncyk7IFwKKwkJaWYgKCgoeCkgJiBpdnR2X2RlYnVnKSAmJiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0hJR0hWT0wpKSAJXAorCQkJdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgIiAiIHR5cGUgIjogIiBmbXQgLCAjI2FyZ3MpOwlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgSVZUVl9ERUJVR19ISV9XQVJOKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUdfSElHSF9WT0woSVZUVl9EQkdGTEdfV0FSTiwgICJ3YXJuIiwgIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIElWVFZfREVCVUdfSElfSU5GTyhmbXQsIGFyZ3MuLi4pICBJVlRWX0RFQlVHX0hJR0hfVk9MKElWVFZfREJHRkxHX0lORk8sICAiaW5mbyIsICBmbXQgLCAjIyBhcmdzKQpAQCAtMTY3LDkgKzE2Myw5IEBACiAjZGVmaW5lIElWVFZfREVCVUdfSElfWVVWKGZtdCwgYXJncy4uLikgICBJVlRWX0RFQlVHX0hJR0hfVk9MKElWVFZfREJHRkxHX1lVViwgICAieXV2IiwgICBmbXQgLCAjIyBhcmdzKQogCiAvKiBTdGFuZGFyZCBrZXJuZWwgbWVzc2FnZXMgKi8KLSNkZWZpbmUgSVZUVl9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHByaW50ayhLRVJOX0VSUiAgIml2dHYlZDogIiBmbXQsIGl0di0+bnVtICwgIyMgYXJncykKLSNkZWZpbmUgSVZUVl9XQVJOKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIml2dHYlZDogIiBmbXQsIGl0di0+bnVtICwgIyMgYXJncykKLSNkZWZpbmUgSVZUVl9JTkZPKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX0lORk8gIml2dHYlZDogIiBmbXQsIGl0di0+bnVtICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKCZpdHYtPmRldmljZSwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9XQVJOKGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybigmaXR2LT5kZXZpY2UsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElWVFZfSU5GTyhmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oJml0di0+ZGV2aWNlLCBmbXQgLCAjIyBhcmdzKQogCiAvKiBvdXRwdXQgbW9kZXMgKGN4MjM0MTUgb25seSkgKi8KICNkZWZpbmUgT1VUX05PTkUgICAgICAgIDAKQEAgLTU5Niw4ICs1OTIsNiBAQAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBpdnR2IGNhcmRzICovCiBzdHJ1Y3QgaXZ0diB7CiAJLyogR2VuZXJhbCBmaXhlZCBjYXJkIGRhdGEgKi8KLQlpbnQgbnVtOwkJCS8qIGJvYXJkIG51bWJlciwgLTEgZHVyaW5nIGluaXQhICovCi0JY2hhciBuYW1lWzhdOwkJCS8qIGJvYXJkIG5hbWUgZm9yIHByaW50ayBhbmQgaW50ZXJydXB0cyAoZS5nLiAnaXZ0djAnKSAqLwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CQkvKiBQQ0kgZGV2aWNlICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZCAqY2FyZDsJLyogY2FyZCBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IGNoYXIgKmNhcmRfbmFtZTsgICAgICAgICAgLyogZnVsbCBuYW1lIG9mIHRoZSBjYXJkICovCkBAIC02MDksMTQgKzYwMywxOCBAQAogCXUzMiB2NGwyX2NhcDsJCQkvKiBWNEwyIGNhcGFiaWxpdGllcyBvZiBjYXJkICovCiAJdTMyIGh3X2ZsYWdzOyAJCQkvKiBoYXJkd2FyZSBkZXNjcmlwdGlvbiBvZiB0aGUgYm9hcmQgKi8KIAl2NGwyX3N0ZF9pZCB0dW5lcl9zdGQ7CQkvKiB0aGUgbm9ybSBvZiB0aGUgY2FyZCdzIHR1bmVyIChmaXhlZCkgKi8KLQkJCQkJLyogY29udHJvbGxpbmcgdmlkZW8gZGVjb2RlciBmdW5jdGlvbiAqLwotCWludCAoKnZpZGVvX2RlY19mdW5jKShzdHJ1Y3QgaXZ0diAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF92aWRlbzsJLyogY29udHJvbGxpbmcgdmlkZW8gZGVjb2RlciBzdWJkZXYgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkX2F1ZGlvOwkvKiBjb250cm9sbGluZyBhdWRpbyBzdWJkZXYgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkX211eGVyOwkvKiBjb250cm9sbGluZyBhdWRpbyBtdXhlciBzdWJkZXYgKi8KIAl1MzIgYmFzZV9hZGRyOyAgICAgICAgICAgICAgICAgIC8qIFBDSSByZXNvdXJjZSBiYXNlIGFkZHJlc3MgKi8KIAl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmVuY19tZW07IC8qIHBvaW50ZXIgdG8gbWFwcGVkIGVuY29kZXIgbWVtb3J5ICovCiAJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkZWNfbWVtOyAvKiBwb2ludGVyIHRvIG1hcHBlZCBkZWNvZGVyIG1lbW9yeSAqLwogCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqcmVnX21lbTsgLyogcG9pbnRlciB0byBtYXBwZWQgcmVnaXN0ZXJzICovCiAJc3RydWN0IGl2dHZfb3B0aW9ucyBvcHRpb25zOyAJLyogdXNlciBvcHRpb25zICovCiAKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgZGV2aWNlOworCXN0cnVjdCB2NGwyX3N1YmRldiBzZF9ncGlvOwkvKiBHUElPIHN1Yi1kZXZpY2UgKi8KKwl1MTYgaW5zdGFuY2U7CiAKIAkvKiBIaWdoLWxldmVsIHN0YXRlIGluZm8gKi8KIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAgICAgICAgIC8qIGdsb2JhbCBpdnR2IGZsYWdzICovCkBAIC02NzYsNyArNjc0LDYgQEAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19hbGdvOwogCXN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnRzW0kyQ19DTElFTlRTX01BWF07LyogcG9pbnRlcnMgdG8gYWxsIEkyQyBjbGllbnRzICovCiAJaW50IGkyY19zdGF0ZTsgICAgICAgICAgICAgICAgICAvKiBpMmMgYml0IHN0YXRlICovCiAJc3RydWN0IG11dGV4IGkyY19idXNfbG9jazsgICAgICAvKiBsb2NrIGkyYyBidXMgKi8KIApAQCAtNzIyLDExICs3MTksMTMgQEAKIAlzdHJ1Y3Qgb3NkX2luZm8gKm9zZF9pbmZvOyAgICAgIC8qIGl2dHZmYiBwcml2YXRlIE9TRCBpbmZvICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpdnR2ICp0b19pdnR2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXZ0diwgZGV2aWNlKTsKK30KKwogLyogR2xvYmFscyAqLwotZXh0ZXJuIHN0cnVjdCBpdnR2ICppdnR2X2NhcmRzW107Ci1leHRlcm4gaW50IGl2dHZfY2FyZHNfYWN0aXZlOwogZXh0ZXJuIGludCBpdnR2X2ZpcnN0X21pbm9yOwotZXh0ZXJuIHNwaW5sb2NrX3QgaXZ0dl9jYXJkc19sb2NrOwogCiAvKj09PT09PT09PT09PT09UHJvdG90eXBlcz09PT09PT09PT09PT09PT09PSovCiAKQEAgLTc4Niw0ICs3ODUsMTkgQEAKICNkZWZpbmUgd3JpdGVfZGVjX3N5bmModmFsLCBhZGRyKSBcCiAJZG8geyB3cml0ZV9kZWModmFsLCBhZGRyKTsgcmVhZF9kZWMoYWRkcik7IH0gd2hpbGUgKDApCiAKKy8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgaHcgKGlmIDAsIHRoZW4KKyAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuICovCisjZGVmaW5lIGl2dHZfY2FsbF9odyhpdHYsIGh3LCBvLCBmLCBhcmdzLi4uKSAJCQkJXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+ZGV2aWNlLCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCisjZGVmaW5lIGl2dHZfY2FsbF9hbGwoaXR2LCBvLCBmLCBhcmdzLi4uKSBpdnR2X2NhbGxfaHcoaXR2LCAwLCBvLCBmICwgIyNhcmdzKQorCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIGh3IChpZiAwLCB0aGVuCisgICBtYXRjaCB0aGVtIGFsbCkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIG90aGVyIHRoYW4gMCBvcgorICAgLUVOT0lPQ1RMQ01ELCB0aGVuIHJldHVybiB3aXRoIHRoYXQgZXJyb3IgY29kZS4gKi8KKyNkZWZpbmUgaXZ0dl9jYWxsX2h3X2VycihpdHYsIGh3LCBvLCBmLCBhcmdzLi4uKSAgCQlcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKCYoaXR2KS0+ZGV2aWNlLCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCisjZGVmaW5lIGl2dHZfY2FsbF9hbGxfZXJyKGl0diwgbywgZiwgYXJncy4uLikgaXZ0dl9jYWxsX2h3X2VycihpdHYsIDAsIG8sIGYgLCAjI2FyZ3MpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCmluZGV4IDFjNDA0ZTQuLjVlYjU4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAJbmV3X3N0ZXJlb19tb2RlID0gaXR2LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIHN0ZXJlb19tYXNrOwogCW1lbXNldCgmdnQsIDAsIHNpemVvZih2dCkpOwotCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19HX1RVTkVSLCAmdnQpOworCWl2dHZfY2FsbF9hbGwoaXR2LCB0dW5lciwgZ190dW5lciwgJnZ0KTsKIAlpZiAodnQuYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgJiYgKHZ0LnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMikpCiAJCW5ld19zdGVyZW9fbW9kZSA9IGR1YWw7CiAKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCQkvKiBNYXJrIHRoYXQgdGhlIHJhZGlvIGlzIG5vIGxvbmdlciBpbiB1c2UgKi8KIAkJY2xlYXJfYml0KElWVFZfRl9JX1JBRElPX1VTRVIsICZpdHYtPmlfZmxhZ3MpOwogCQkvKiBTd2l0Y2ggdHVuZXIgdG8gVFYgKi8KLQkJaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfU1RELCAmaXR2LT5zdGQpOworCQlpdnR2X2NhbGxfYWxsKGl0diwgdHVuZXIsIHNfc3RkLCBpdHYtPnN0ZCk7CiAJCS8qIFNlbGVjdCBjb3JyZWN0IGF1ZGlvIGlucHV0IChpLmUuIFRWIHR1bmVyIG9yIExpbmUgaW4pICovCiAJCWl2dHZfYXVkaW9fc2V0X2lvKGl0dik7CiAJCWlmIChpdHYtPmh3X2ZsYWdzICYgSVZUVl9IV19TQUE3MTFYKQpAQCAtODY1LDcgKzg2NSw3IEBACiAJCQlzdHJ1Y3QgdjRsMl9jcnlzdGFsX2ZyZXEgY3J5c3RhbF9mcmVxOwogCQkJY3J5c3RhbF9mcmVxLmZyZXEgPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaOwogCQkJY3J5c3RhbF9mcmVxLmZsYWdzID0gMDsKLQkJCWl2dHZfc2FhNzExNShpdHYsIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVEsICZjcnlzdGFsX2ZyZXEpOworCQkJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTFYLCB2aWRlbywgc19jcnlzdGFsX2ZyZXEsICZjcnlzdGFsX2ZyZXEpOwogCQl9CiAJCWlmIChhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCkgewogCQkJLyogVW5kbyB2aWRlbyBtdXRlICovCkBAIC05NTIsMTUgKzk1MiwxNCBAQAogCQkvKiBXZSBoYXZlIHRoZSByYWRpbyAqLwogCQlpdnR2X211dGUoaXR2KTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIHJhZGlvICovCi0JCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIEFVRENfU0VUX1JBRElPLCBOVUxMKTsKKwkJaXZ0dl9jYWxsX2FsbChpdHYsIHR1bmVyLCBzX3JhZGlvKTsKIAkJLyogU2VsZWN0IHRoZSBjb3JyZWN0IGF1ZGlvIGlucHV0IChpLmUuIHJhZGlvIHR1bmVyKSAqLwogCQlpdnR2X2F1ZGlvX3NldF9pbyhpdHYpOwotCQlpZiAoaXR2LT5od19mbGFncyAmIElWVFZfSFdfU0FBNzExWCkKLQkJeworCQlpZiAoaXR2LT5od19mbGFncyAmIElWVFZfSFdfU0FBNzExWCkgewogCQkJc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxIGNyeXN0YWxfZnJlcTsKIAkJCWNyeXN0YWxfZnJlcS5mcmVxID0gU0FBNzExNV9GUkVRXzMyXzExX01IWjsKIAkJCWNyeXN0YWxfZnJlcS5mbGFncyA9IFNBQTcxMTVfRlJFUV9GTF9BUExMOwotCQkJaXZ0dl9zYWE3MTE1KGl0diwgVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUSwgJmNyeXN0YWxfZnJlcSk7CisJCQlpdnR2X2NhbGxfaHcoaXR2LCBJVlRWX0hXX1NBQTcxMVgsIHZpZGVvLCBzX2NyeXN0YWxfZnJlcSwgJmNyeXN0YWxfZnJlcSk7CiAJCX0KIAkJLyogRG9uZSEgVW5tdXRlIGFuZCBjb250aW51ZS4gKi8KIAkJaXZ0dl91bm11dGUoaXR2KTsKQEAgLTk4MSwzNyArOTgwLDE4IEBACiAKIGludCBpdnR2X3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgcmVzLCB4LCB5ID0gMDsKKwlpbnQgcmVzOwogCXN0cnVjdCBpdnR2ICppdHYgPSBOVUxMOwogCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9IE5VTEw7Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAotCS8qIEZpbmQgd2hpY2ggY2FyZCB0aGlzIG9wZW4gd2FzIG9uICovCi0Jc3Bpbl9sb2NrKCZpdnR2X2NhcmRzX2xvY2spOwotCWZvciAoeCA9IDA7IGl0diA9PSBOVUxMICYmIHggPCBpdnR2X2NhcmRzX2FjdGl2ZTsgeCsrKSB7Ci0JCWlmIChpdnR2X2NhcmRzW3hdID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJLyogZmluZCBvdXQgd2hpY2ggc3RyZWFtIHRoaXMgb3BlbiB3YXMgb24gKi8KLQkJZm9yICh5ID0gMDsgeSA8IElWVFZfTUFYX1NUUkVBTVM7IHkrKykgewotCQkJcyA9ICZpdnR2X2NhcmRzW3hdLT5zdHJlYW1zW3ldOwotCQkJaWYgKHMtPnY0bDJkZXYgJiYgcy0+djRsMmRldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCQlpdHYgPSBpdnR2X2NhcmRzW3hdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZpdnR2X2NhcmRzX2xvY2spOwotCi0JaWYgKGl0diA9PSBOVUxMKSB7Ci0JCS8qIENvdWxkbid0IGZpbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZAotCQkgICBvbiB0aGF0IG1pbm9yLCBzaG91bGRuJ3QgaGFwcGVuISAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBpdnR2IGRldmljZSBmb3VuZCBvbiBtaW5vciAlZFxuIiwgbWlub3IpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KKwlzID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJaXR2ID0gcy0+aXR2OwogCiAJbXV0ZXhfbG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7CiAJaWYgKGl2dHZfaW5pdF9vbl9maXJzdF9vcGVuKGl0dikpIHsKLQkJSVZUVl9FUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIG9uIG1pbm9yICVkXG4iLCBtaW5vcik7CisJCUlWVFZfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwKKwkJCQlzLT52NGwyZGV2LT5taW5vcik7CiAJCW11dGV4X3VubG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCmluZGV4IDc0YTQ0ODQuLmRjMjg1MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKQEAgLTE0NCwyMiArMTQ0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpdnR2X2dwaW9faW5pdChzdHJ1Y3QgaXZ0diAqaXR2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXZ0diAqc2RfdG9faXZ0dihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXUxNiBwaW4gPSAwOwotCi0JaWYgKGl0di0+Y2FyZC0+eGNlaXZlX3BpbikKLQkJcGluID0gMSA8PCBpdHYtPmNhcmQtPnhjZWl2ZV9waW47Ci0KLQlpZiAoKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiB8IHBpbikgPT0gMCkKLQkJcmV0dXJuOwotCi0JSVZUVl9ERUJVR19JTkZPKCJHUElPIGluaXRpYWwgZGlyOiAlMDh4IG91dDogJTA4eFxuIiwKLQkJICAgcmVhZF9yZWcoSVZUVl9SRUdfR1BJT19ESVIpLCByZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkpOwotCi0JLyogaW5pdCBvdXRwdXQgZGF0YSB0aGVuIGRpcmVjdGlvbiAqLwotCXdyaXRlX3JlZyhpdHYtPmNhcmQtPmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlIHwgcGluLCBJVlRWX1JFR19HUElPX09VVCk7Ci0Jd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiB8IHBpbiwgSVZUVl9SRUdfR1BJT19ESVIpOworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBpdnR2LCBzZF9ncGlvKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBncGlvX2N0cmxfbXV0ZSA9IHsKQEAgLTE3MywxMzQgKzE2MCwyMzEgQEAKIAkuZmxhZ3MgICAgICAgICA9IDAsCiB9OwogCi1pbnQgaXZ0dl9ncGlvKHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHN1YmRldl9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpCiB7Ci0Jc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyID0gYXJnOwotCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJc3RydWN0IGl2dHYgKml0diA9IHNkX3RvX2l2dHYoc2QpOwogCXUxNiBtYXNrLCBkYXRhOwogCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fZnJlcS5tYXNrOwotCQlzd2l0Y2ggKCoodTMyICopYXJnKSB7Ci0JCWNhc2UgMzIwMDA6Ci0JCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2ZyZXEuZjMyMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDQxMDA6Ci0JCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2ZyZXEuZjQ0MTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDgwMDA6Ci0JCWRlZmF1bHQ6Ci0JCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2ZyZXEuZjQ4MDAwOwotCQkJYnJlYWs7Ci0JCX0KKwltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2ZyZXEubWFzazsKKwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlIDMyMDAwOgorCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2ZyZXEuZjMyMDAwOwogCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fZGV0ZWN0Lm1hc2s7Ci0JCWlmIChtYXNrID09IDAgfHwgKHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fSU4pICYgbWFzaykpCi0JCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gfAotCQkJICAgICAgIFY0TDJfVFVORVJfTU9ERV9MQU5HMSB8IFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKLQkJZWxzZQotCQkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fbW9kZS5tYXNrOwotCQlzd2l0Y2ggKHR1bmVyLT5hdWRtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tb2RlLmxhbmcxOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tb2RlLmxhbmcyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX21vZGUubW9ubzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCQlkZWZhdWx0OgotCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tb2RlLnN0ZXJlbzsKLQkJCWJyZWFrOwotCQl9CisJY2FzZSA0NDEwMDoKKwkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19mcmVxLmY0NDEwMDsKIAkJYnJlYWs7Ci0KLQljYXNlIEFVRENfU0VUX1JBRElPOgotCQltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW87Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubWFzazsKLQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgotCQlpZiAocm91dGUtPmlucHV0ID4gMikKLQkJCXJldHVybiAtRUlOVkFMOwotCQltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JCXN3aXRjaCAocm91dGUtPmlucHV0KSB7Ci0JCQljYXNlIDA6Ci0JCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LmxpbmVpbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCWRlZmF1bHQ6Ci0JCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5yYWRpbzsKLQkJCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm1hc2s7Ci0JCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fbXV0ZS5tdXRlOwotCQljdHJsLT52YWx1ZSA9IChyZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkgJiBtYXNrKSA9PSBkYXRhOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm1hc2s7Ci0JCWRhdGEgPSBjdHJsLT52YWx1ZSA/IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm11dGUgOiAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0KLQkJaWYgKHFjLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSpxYyA9IGdwaW9fY3RybF9tdXRlOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQlJVlRWX0lORk8oIkdQSU8gc3RhdHVzOiBESVI9MHglMDR4IE9VVD0weCUwNHggSU49MHglMDR4XG4iLAotCQkJcmVhZF9yZWcoSVZUVl9SRUdfR1BJT19ESVIpLCByZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCksCi0JCQlyZWFkX3JlZyhJVlRWX1JFR19HUElPX0lOKSk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDIpIC8qIDA6VHVuZXIgMTpDb21wb3NpdGUgMjpTLVZpZGVvICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb192aWRlb19pbnB1dC5tYXNrOwotCQlpZiAgKHJvdXRlLT5pbnB1dCA9PSAwKQotCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb192aWRlb19pbnB1dC50dW5lcjsKLQkJZWxzZSBpZiAgKHJvdXRlLT5pbnB1dCA9PSAxKQotCQkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb192aWRlb19pbnB1dC5jb21wb3NpdGU7Ci0JCWVsc2UKLQkJCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fdmlkZW9faW5wdXQuc3ZpZGVvOwotCQlicmVhazsKLQorCWNhc2UgNDgwMDA6CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fZnJlcS5mNDgwMDA7CisJCWJyZWFrOwogCX0KIAlpZiAobWFzaykKIAkJd3JpdGVfcmVnKChyZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBJVlRWX1JFR19HUElPX09VVCk7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgc3ViZGV2X2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKwl1MTYgbWFzazsKKworCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fZGV0ZWN0Lm1hc2s7CisJaWYgKG1hc2sgPT0gMCB8fCAocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19JTikgJiBtYXNrKSkKKwkJdnQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHwKKwkJCVY0TDJfVFVORVJfTU9ERV9MQU5HMSB8IFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKKwllbHNlCisJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGl2dHYgKml0diA9IHNkX3RvX2l2dHYoc2QpOworCXUxNiBtYXNrLCBkYXRhOworCisJbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tb2RlLm1hc2s7CisJc3dpdGNoICh2dC0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX21vZGUubGFuZzE7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX21vZGUubGFuZzI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fbW9kZS5tb25vOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJZGVmYXVsdDoKKwkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tb2RlLnN0ZXJlbzsKKwkJYnJlYWs7CisJfQorCWlmIChtYXNrKQorCQl3cml0ZV9yZWcoKHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIElWVFZfUkVHX0dQSU9fT1VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKwl1MTYgbWFzaywgZGF0YTsKKworCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubWFzazsKKwlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvOworCWlmIChtYXNrKQorCQl3cml0ZV9yZWcoKHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIElWVFZfUkVHX0dQSU9fT1VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKwl1MTYgbWFzaywgZGF0YTsKKworCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubWFzazsKKwlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCWlmIChtYXNrKQorCQl3cml0ZV9yZWcoKHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIElWVFZfUkVHX0dQSU9fT1VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKwl1MTYgbWFzaywgZGF0YTsKKworCWlmIChyb3V0ZS0+aW5wdXQgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQudHVuZXI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5saW5laW47CisJCWJyZWFrOworCWNhc2UgMjoKKwlkZWZhdWx0OgorCQlkYXRhID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvOworCQlicmVhazsKKwl9CisJaWYgKG1hc2spCisJCXdyaXRlX3JlZygocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgSVZUVl9SRUdfR1BJT19PVVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gc2RfdG9faXZ0dihzZCk7CisJdTE2IG1hc2ssIGRhdGE7CisKKwlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fTVVURSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm1hc2s7CisJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm11dGU7CisJY3RybC0+dmFsdWUgPSAocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpICYgbWFzaykgPT0gZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGl2dHYgKml0diA9IHNkX3RvX2l2dHYoc2QpOworCXUxNiBtYXNrLCBkYXRhOworCisJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCisJCXJldHVybiAtRUlOVkFMOworCW1hc2sgPSBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fbXV0ZS5tYXNrOworCWRhdGEgPSBjdHJsLT52YWx1ZSA/IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm11dGUgOiAwOworCWlmIChtYXNrKQorCQl3cml0ZV9yZWcoKHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIElWVFZfUkVHX0dQSU9fT1VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJaWYgKHFjLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqcWMgPSBncGlvX2N0cmxfbXV0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKworCUlWVFZfSU5GTygiR1BJTyBzdGF0dXM6IERJUj0weCUwNHggT1VUPTB4JTA0eCBJTj0weCUwNHhcbiIsCisJCQlyZWFkX3JlZyhJVlRWX1JFR19HUElPX0RJUiksIHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSwKKwkJCXJlYWRfcmVnKElWVFZfUkVHX0dQSU9fSU4pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJkZXZfc192aWRlb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKKwl1MTYgbWFzaywgZGF0YTsKKworCWlmIChyb3V0ZS0+aW5wdXQgPiAyKSAvKiAwOlR1bmVyIDE6Q29tcG9zaXRlIDI6Uy1WaWRlbyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwltYXNrID0gaXR2LT5jYXJkLT5ncGlvX3ZpZGVvX2lucHV0Lm1hc2s7CisJaWYgIChyb3V0ZS0+aW5wdXQgPT0gMCkKKwkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb192aWRlb19pbnB1dC50dW5lcjsKKwllbHNlIGlmICAocm91dGUtPmlucHV0ID09IDEpCisJCWRhdGEgPSBpdHYtPmNhcmQtPmdwaW9fdmlkZW9faW5wdXQuY29tcG9zaXRlOworCWVsc2UKKwkJZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb192aWRlb19pbnB1dC5zdmlkZW87CisJaWYgKG1hc2spCisJCXdyaXRlX3JlZygocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwgSVZUVl9SRUdfR1BJT19PVVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHN1YmRldl9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IHN1YmRldl9sb2dfc3RhdHVzLAorCS5nX2N0cmwgPSBzdWJkZXZfZ19jdHJsLAorCS5zX2N0cmwgPSBzdWJkZXZfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBzdWJkZXZfcXVlcnljdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc3ViZGV2X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzdWJkZXZfc19zdGQsCisJLnNfcmFkaW8gPSBzdWJkZXZfc19yYWRpbywKKwkuZ190dW5lciA9IHN1YmRldl9nX3R1bmVyLAorCS5zX3R1bmVyID0gc3ViZGV2X3NfdHVuZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBzdWJkZXZfYXVkaW9fb3BzID0geworCS5zX2Nsb2NrX2ZyZXEgPSBzdWJkZXZfc19jbG9ja19mcmVxLAorCS5zX3JvdXRpbmcgPSBzdWJkZXZfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc3ViZGV2X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gc3ViZGV2X3NfdmlkZW9fcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHN1YmRldl9vcHMgPSB7CisJLmNvcmUgPSAmc3ViZGV2X2NvcmVfb3BzLAorCS50dW5lciA9ICZzdWJkZXZfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZzdWJkZXZfYXVkaW9fb3BzLAorCS52aWRlbyA9ICZzdWJkZXZfdmlkZW9fb3BzLAorfTsKKworaW50IGl2dHZfZ3Bpb19pbml0KHN0cnVjdCBpdnR2ICppdHYpCit7CisJdTE2IHBpbiA9IDA7CisKKwlpZiAoaXR2LT5jYXJkLT54Y2VpdmVfcGluKQorCQlwaW4gPSAxIDw8IGl0di0+Y2FyZC0+eGNlaXZlX3BpbjsKKworCWlmICgoaXR2LT5jYXJkLT5ncGlvX2luaXQuZGlyZWN0aW9uIHwgcGluKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCUlWVFZfREVCVUdfSU5GTygiR1BJTyBpbml0aWFsIGRpcjogJTA4eCBvdXQ6ICUwOHhcbiIsCisJCSAgIHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fRElSKSwgcmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpKTsKKworCS8qIGluaXQgb3V0cHV0IGRhdGEgdGhlbiBkaXJlY3Rpb24gKi8KKwl3cml0ZV9yZWcoaXR2LT5jYXJkLT5ncGlvX2luaXQuaW5pdGlhbF92YWx1ZSB8IHBpbiwgSVZUVl9SRUdfR1BJT19PVVQpOworCXdyaXRlX3JlZyhpdHYtPmNhcmQtPmdwaW9faW5pdC5kaXJlY3Rpb24gfCBwaW4sIElWVFZfUkVHX0dQSU9fRElSKTsKKwl2NGwyX3N1YmRldl9pbml0KCZpdHYtPnNkX2dwaW8sICZzdWJkZXZfb3BzKTsKKwlzbnByaW50ZihpdHYtPnNkX2dwaW8ubmFtZSwgc2l6ZW9mKGl0di0+c2RfZ3Bpby5uYW1lKSwgIiVzLWdwaW8iLCBpdHYtPmRldmljZS5uYW1lKTsKKwlpdHYtPnNkX2dwaW8uZ3JwX2lkID0gSVZUVl9IV19HUElPOworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJml0di0+ZGV2aWNlLCAmaXR2LT5zZF9ncGlvKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uaAppbmRleCA0OGI2MjkxLi4wYjVkMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5oCkBAIC0yMiw5ICsyMiw4IEBACiAjZGVmaW5lIElWVFZfR1BJT19ICiAKIC8qIEdQSU8gc3R1ZmYgKi8KLXZvaWQgaXZ0dl9ncGlvX2luaXQoc3RydWN0IGl2dHYgKml0dik7CitpbnQgaXZ0dl9ncGlvX2luaXQoc3RydWN0IGl2dHYgKml0dik7CiB2b2lkIGl2dHZfcmVzZXRfaXJfZ3BpbyhzdHJ1Y3QgaXZ0diAqaXR2KTsKIGludCBpdnR2X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpOwotaW50IGl2dHZfZ3BpbyhzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCmluZGV4IDQxZGJiZTkuLmNhMWQ5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCkBAIC05MCwyNiArOTAsNiBAQAogI2RlZmluZSBJVlRWX001Mjc5MF9JMkNfQUREUiAgICAgIAkweDQ4CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBJVlRWX0hXXyBkZWZpbmVzICovCi1zdGF0aWMgY29uc3QgdTggaHdfZHJpdmVyaWRzW10gPSB7Ci0JSTJDX0RSSVZFUklEX0NYMjU4NDAsCi0JSTJDX0RSSVZFUklEX1NBQTcxMVgsCi0JSTJDX0RSSVZFUklEX1NBQTcxMjcsCi0JSTJDX0RSSVZFUklEX01TUDM0MDAsCi0JSTJDX0RSSVZFUklEX1RVTkVSLAotCUkyQ19EUklWRVJJRF9XTTg3NzUsCi0JSTJDX0RSSVZFUklEX0NTNTNMMzJBLAotCUkyQ19EUklWRVJJRF9UVkVFUFJPTSwKLQlJMkNfRFJJVkVSSURfU0FBNzExWCwKLQlJMkNfRFJJVkVSSURfVVBENjQwMzFBLAotCUkyQ19EUklWRVJJRF9VUEQ2NDA4MywKLQlJMkNfRFJJVkVSSURfU0FBNzE3WCwKLQlJMkNfRFJJVkVSSURfV004NzM5LAotCUkyQ19EUklWRVJJRF9WUDI3U01QWCwKLQlJMkNfRFJJVkVSSURfTTUyNzkwLAotCTAgCQkvKiBJVlRWX0hXX0dQSU8gZHVtbXkgZHJpdmVyIElEICovCi19OwotCi0vKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgSVZUVl9IV18gZGVmaW5lcyAqLwogc3RhdGljIGNvbnN0IHU4IGh3X2FkZHJzW10gPSB7CiAJSVZUVl9DWDI1ODQwX0kyQ19BRERSLAogCUlWVFZfU0FBNzExNV9JMkNfQUREUiwKQEAgLTEzMCw2ICsxMTAsMjYgQEAKIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBJVlRWX0hXXyBkZWZpbmVzICovCitzdGF0aWMgY29uc3QgY2hhciAqaHdfbW9kdWxlc1tdID0geworCSJjeDI1ODQwIiwKKwkic2FhNzExNSIsCisJInNhYTcxMjciLAorCSJtc3AzNDAwIiwKKwkidHVuZXIiLAorCSJ3bTg3NzUiLAorCSJjczUzbDMyYSIsCisJTlVMTCwKKwkic2FhNzExNSIsCisJInVwZDY0MDMxYSIsCisJInVwZDY0MDgzIiwKKwkic2FhNzE3eCIsCisJIndtODczOSIsCisJInZwMjdzbXB4IiwKKwkibTUyNzkwIiwKKwlOVUxMCit9OworCisvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgSVZUVl9IV18gZGVmaW5lcyAqLwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBod19kZXZpY2VuYW1lc1tdID0gewogCSJjeDI1ODQwIiwKIAkic2FhNzExNSIsCkBAIC0xNTEsODAgKzE1MSw1OCBAQAogCiBpbnQgaXZ0dl9pMmNfcmVnaXN0ZXIoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaWR4KQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwotCXU4IGlkOwotCWludCBpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJml0di0+aTJjX2FkYXA7CisJY29uc3QgY2hhciAqbW9kID0gaHdfbW9kdWxlc1tpZHhdOworCWNvbnN0IGNoYXIgKnR5cGUgPSBod19kZXZpY2VuYW1lc1tpZHhdOworCXUzMiBodyA9IDEgPDwgaWR4OwogCi0JSVZUVl9ERUJVR19JMkMoImkyYyBjbGllbnQgcmVnaXN0ZXJcbiIpOwotCWlmIChpZHggPj0gQVJSQVlfU0laRShod19kcml2ZXJpZHMpIHx8IGh3X2RyaXZlcmlkc1tpZHhdID09IDApCisJaWYgKGlkeCA+PSBBUlJBWV9TSVpFKGh3X2FkZHJzKSkKIAkJcmV0dXJuIC0xOwotCWlkID0gaHdfZHJpdmVyaWRzW2lkeF07Ci0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwotCXN0cmxjcHkoaW5mby50eXBlLCBod19kZXZpY2VuYW1lc1tpZHhdLCBzaXplb2YoaW5mby50eXBlKSk7Ci0JaW5mby5hZGRyID0gaHdfYWRkcnNbaWR4XTsKLQlmb3IgKGkgPSAwOyBpdHYtPmkyY19jbGllbnRzW2ldICYmIGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykge30KLQotCWlmIChpID09IEkyQ19DTElFTlRTX01BWCkgewotCQlJVlRWX0VSUigiaW5zdWZmaWNpZW50IHJvb20gZm9yIG5ldyBJMkMgY2xpZW50IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChodyA9PSBJVlRWX0hXX1RVTkVSKSB7CisJCS8qIHNwZWNpYWwgdHVuZXIgaGFuZGxpbmcgKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsCisJCQkJaXR2LT5jYXJkX2kyYy0+cmFkaW8pOworCQlpZiAoc2QpCisJCQlzZC0+Z3JwX2lkID0gMSA8PCBpZHg7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLAorCQkJCWl0di0+Y2FyZF9pMmMtPmRlbW9kKTsKKwkJaWYgKHNkKQorCQkJc2QtPmdycF9pZCA9IDEgPDwgaWR4OworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwKKwkJCQlpdHYtPmNhcmRfaTJjLT50dik7CisJCWlmIChzZCkKKwkJCXNkLT5ncnBfaWQgPSAxIDw8IGlkeDsKKwkJcmV0dXJuIHNkID8gMCA6IC0xOwogCX0KKwlpZiAoIWh3X2FkZHJzW2lkeF0pCisJCXJldHVybiAtMTsKKwlpZiAoaHcgPT0gSVZUVl9IV19VUEQ2NDAzMUEgfHwgaHcgPT0gSVZUVl9IV19VUEQ2NDA4WCkgeworCQl1bnNpZ25lZCBzaG9ydCBhZGRyc1syXSA9IHsgaHdfYWRkcnNbaWR4XSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotCWlmIChpZCAhPSBJMkNfRFJJVkVSSURfVFVORVIpIHsKLQkJaWYgKGlkID09IEkyQ19EUklWRVJJRF9VUEQ2NDAzMUEgfHwKLQkJICAgIGlkID09IEkyQ19EUklWRVJJRF9VUEQ2NDA4MykgewotCQkJdW5zaWduZWQgc2hvcnQgYWRkcnNbMl0gPSB7IGluZm8uYWRkciwgSTJDX0NMSUVOVF9FTkQgfTsKLQotCQkJYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmaXR2LT5pMmNfYWRhcCwgJmluZm8sIGFkZHJzKTsKLQkJfSBlbHNlCi0JCQljID0gaTJjX25ld19kZXZpY2UoJml0di0+aTJjX2FkYXAsICZpbmZvKTsKLQkJaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYyk7Ci0JCWVsc2UgaWYgKGMpCi0JCQlpdHYtPmkyY19jbGllbnRzW2ldID0gYzsKLQkJcmV0dXJuIGl0di0+aTJjX2NsaWVudHNbaV0gPyAwIDogLUVOT0RFVjsKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsIGFkZHJzKTsKKwl9IGVsc2UgeworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLCBod19hZGRyc1tpZHhdKTsKIAl9Ci0KLQkvKiBzcGVjaWFsIHR1bmVyIGhhbmRsaW5nICovCi0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmaXR2LT5pMmNfYWRhcCwgJmluZm8sIGl0di0+Y2FyZF9pMmMtPnJhZGlvKTsKLQlpZiAoYyAmJiBjLT5kcml2ZXIgPT0gTlVMTCkKLQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGMpOwotCWVsc2UgaWYgKGMpCi0JCWl0di0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmaXR2LT5pMmNfYWRhcCwgJmluZm8sIGl0di0+Y2FyZF9pMmMtPmRlbW9kKTsKLQlpZiAoYyAmJiBjLT5kcml2ZXIgPT0gTlVMTCkKLQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGMpOwotCWVsc2UgaWYgKGMpCi0JCWl0di0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmaXR2LT5pMmNfYWRhcCwgJmluZm8sIGl0di0+Y2FyZF9pMmMtPnR2KTsKLQlpZiAoYyAmJiBjLT5kcml2ZXIgPT0gTlVMTCkKLQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGMpOwotCWVsc2UgaWYgKGMpCi0JCWl0di0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JcmV0dXJuIDA7CisJaWYgKHNkKQorCQlzZC0+Z3JwX2lkID0gMSA8PCBpZHg7CisJcmV0dXJuIHNkID8gMCA6IC0xOwogfQogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0cnVjdCB2NGwyX3N1YmRldiAqaXZ0dl9maW5kX2h3KHN0cnVjdCBpdnR2ICppdHYsIHUzMiBodykKIHsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotc3RhdGljIGludCBkZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IChzdHJ1Y3QgaXZ0diAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCUlWVFZfREVCVUdfSTJDKCJpMmMgY2xpZW50IGRldGFjaFxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWlmIChpdHYtPmkyY19jbGllbnRzW2ldID09IGNsaWVudCkgewotCQkJaXR2LT5pMmNfY2xpZW50c1tpXSA9IE5VTEw7CisJc3Bpbl9sb2NrKCZpdHYtPmRldmljZS5sb2NrKTsKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZpdHYtPmRldmljZSkgeworCQlpZiAoc2QtPmdycF9pZCA9PSBodykgeworCQkJcmVzdWx0ID0gc2Q7CiAJCQlicmVhazsKIAkJfQogCX0KLQlJVlRWX0RFQlVHX0kyQygiaTJjIGRldGFjaCBbY2xpZW50PSVzLCVzXVxuIiwKLQkJICAgY2xpZW50LT5uYW1lLCAoaSA8IEkyQ19DTElFTlRTX01BWCkgPyAib2siIDogImZhaWxlZCIpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJml0di0+ZGV2aWNlLmxvY2spOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qIFNldCB0aGUgc2VyaWFsIGNsb2NrIGxpbmUgdG8gdGhlIGRlc2lyZWQgc3RhdGUgKi8KQEAgLTQ5NCw3ICs0NzIsOCBAQAogICAgaW50ZXJ2ZW5pbmcgc3RvcCBjb25kaXRpb24gKi8KIHN0YXRpYyBpbnQgaXZ0dl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewotCXN0cnVjdCBpdnR2ICppdHYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRydiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KGRydik7CiAJaW50IHJldHZhbDsKIAlpbnQgaTsKIApAQCAtNTMwLDggKzUwOSw2IEBACiAJLmlkID0gSTJDX0hXX0JfQ1gyMzQxWCwKIAkuYWxnbyA9ICZpdnR2X2FsZ28sCiAJLmFsZ29fZGF0YSA9IE5VTEwsCQkJLyogZmlsbGVkIGZyb20gdGVtcGxhdGUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtNTgzLDggKzU2MCw2IEBACiAJLmlkID0gSTJDX0hXX0JfQ1gyMzQxWCwKIAkuYWxnbyA9IE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHNldCBieSBpMmMtYWxnby1iaXQgKi8KIAkuYWxnb19kYXRhID0gTlVMTCwgICAgICAgICAgICAgIC8qIGZpbGxlZCBmcm9tIHRlbXBsYXRlICovCi0JLmNsaWVudF9yZWdpc3RlciA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTYwMSwxNjAgKzU3Niw2IEBACiAJLm5hbWUgPSAiaXZ0diBpbnRlcm5hbCIsCiB9OwogCi1pbnQgaXZ0dl9jYWxsX2kyY19jbGllbnQoc3RydWN0IGl2dHYgKml0diwgaW50IGFkZHIsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0KLQlJVlRWX0RFQlVHX0kyQygiY2FsbF9pMmNfY2xpZW50IGFkZHI9JTAyeFxuIiwgYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWNsaWVudCA9IGl0di0+aTJjX2NsaWVudHNbaV07Ci0JCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMIHx8Ci0JCSAgICBjbGllbnQtPmRyaXZlci0+Y29tbWFuZCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChhZGRyID09IGNsaWVudC0+YWRkcikgewotCQkJcmV0dmFsID0gY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LCBjbWQsIGFyZyk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCWlmIChjbWQgIT0gVklESU9DX0dfQ0hJUF9JREVOVCkKLQkJSVZUVl9FUlIoImkyYyBhZGRyIDB4JTAyeCBub3QgZm91bmQgZm9yIGNvbW1hbmQgMHgleFxuIiwgYWRkciwgY21kKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBiYXNlZCBvbiB0aGUgZHJpdmVyIElEIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1zdGF0aWMgaW50IGl2dHZfaTJjX2lkX2FkZHIoc3RydWN0IGl2dHYgKml0diwgdTMyIGlkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldHZhbCA9IC1FTk9ERVY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSTJDX0NMSUVOVFNfTUFYOyBpKyspIHsKLQkJY2xpZW50ID0gaXR2LT5pMmNfY2xpZW50c1tpXTsKLQkJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKGlkID09IGNsaWVudC0+ZHJpdmVyLT5pZCkgewotCQkJcmV0dmFsID0gY2xpZW50LT5hZGRyOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBuYW1lIG1hdGNoaW5nIHRoZSBEUklWRVJJRCAqLwotc3RhdGljIGNvbnN0IGNoYXIgKml2dHZfaTJjX2lkX25hbWUodTMyIGlkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKTsgaSsrKQotCQlpZiAoaHdfZHJpdmVyaWRzW2ldID09IGlkKQotCQkJcmV0dXJuIGh3X2RldmljZW5hbWVzW2ldOwotCXJldHVybiAidW5rbm93biBkZXZpY2UiOwotfQotCi0vKiBGaW5kIHRoZSBpMmMgZGV2aWNlIG5hbWUgbWF0Y2hpbmcgdGhlIElWVFZfSFdfIGZsYWcgKi8KLXN0YXRpYyBjb25zdCBjaGFyICppdnR2X2kyY19od19uYW1lKHUzMiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcyk7IGkrKykKLQkJaWYgKDEgPDwgaSA9PSBodykKLQkJCXJldHVybiBod19kZXZpY2VuYW1lc1tpXTsKLQlyZXR1cm4gInVua25vd24gZGV2aWNlIjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBtYXRjaGluZyB0aGUgSVZUVl9IV18gZmxhZyBhbmQgcmV0dXJuCi0gICBpdHMgaTJjIGFkZHJlc3Mgb3IgLUVOT0RFViBpZiBubyBtYXRjaGluZyBkZXZpY2Ugd2FzIGZvdW5kLiAqLwotaW50IGl2dHZfaTJjX2h3X2FkZHIoc3RydWN0IGl2dHYgKml0diwgdTMyIGh3KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKTsgaSsrKQotCQlpZiAoMSA8PCBpID09IGh3KQotCQkJcmV0dXJuIGl2dHZfaTJjX2lkX2FkZHIoaXR2LCBod19kcml2ZXJpZHNbaV0pOwotCXJldHVybiAtRU5PREVWOwotfQotCi0vKiBDYWxscyBpMmMgZGV2aWNlIGJhc2VkIG9uIElWVFZfSFdfIGZsYWcuIElmIGh3ID09IDAsIHRoZW4gZG8gbm90aGluZy4KLSAgIElmIGh3ID09IElWVFZfSFdfR1BJTyB0aGVuIGNhbGwgdGhlIGdwaW8gaGFuZGxlci4gKi8KLWludCBpdnR2X2kyY19odyhzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpbnQgYWRkcjsKLQotCWlmIChodyA9PSBJVlRWX0hXX0dQSU8pCi0JCXJldHVybiBpdnR2X2dwaW8oaXR2LCBjbWQsIGFyZyk7Ci0JaWYgKGh3ID09IDApCi0JCXJldHVybiAwOwotCi0JYWRkciA9IGl2dHZfaTJjX2h3X2FkZHIoaXR2LCBodyk7Ci0JaWYgKGFkZHIgPCAwKSB7Ci0JCUlWVFZfRVJSKCJpMmMgaGFyZHdhcmUgMHglMDh4ICglcykgbm90IGZvdW5kIGZvciBjb21tYW5kIDB4JXhcbiIsCi0JCQkgICAgICAgaHcsIGl2dHZfaTJjX2h3X25hbWUoaHcpLCBjbWQpOwotCQlyZXR1cm4gYWRkcjsKLQl9Ci0JcmV0dXJuIGl2dHZfY2FsbF9pMmNfY2xpZW50KGl0diwgYWRkciwgY21kLCBhcmcpOwotfQotCi0vKiBDYWxscyBpMmMgZGV2aWNlIGJhc2VkIG9uIEkyQyBkcml2ZXIgSUQuICovCi1pbnQgaXZ0dl9pMmNfaWQoc3RydWN0IGl2dHYgKml0diwgdTMyIGlkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaW50IGFkZHI7Ci0KLQlhZGRyID0gaXZ0dl9pMmNfaWRfYWRkcihpdHYsIGlkKTsKLQlpZiAoYWRkciA8IDApIHsKLQkJaWYgKGNtZCAhPSBWSURJT0NfR19DSElQX0lERU5UKQotCQkJSVZUVl9FUlIoImkyYyBJRCAweCUwOHggKCVzKSBub3QgZm91bmQgZm9yIGNvbW1hbmQgMHgleFxuIiwKLQkJCQlpZCwgaXZ0dl9pMmNfaWRfbmFtZShpZCksIGNtZCk7Ci0JCXJldHVybiBhZGRyOwotCX0KLQlyZXR1cm4gaXZ0dl9jYWxsX2kyY19jbGllbnQoaXR2LCBhZGRyLCBjbWQsIGFyZyk7Ci19Ci0KLWludCBpdnR2X2N4MjU4NDAoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIElWVFZfQ1gyNTg0MF9JMkNfQUREUiwgY21kLCBhcmcpOwotfQotCi1pbnQgaXZ0dl9zYWE3MTE1KHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gaXZ0dl9jYWxsX2kyY19jbGllbnQoaXR2LCBJVlRWX1NBQTcxMTVfSTJDX0FERFIsIGNtZCwgYXJnKTsKLX0KLQotaW50IGl2dHZfc2FhNzEyNyhzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIGl2dHZfY2FsbF9pMmNfY2xpZW50KGl0diwgSVZUVl9TQUE3MTI3X0kyQ19BRERSLCBjbWQsIGFyZyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGl2dHZfc2FhNzEyNyk7Ci0KLWludCBpdnR2X3NhYTcxN3goc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIElWVFZfU0FBNzE3eF9JMkNfQUREUiwgY21kLCBhcmcpOwotfQotCi1pbnQgaXZ0dl91cGQ2NDAzMWEoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIElWVFZfVVBENjQwMzFBX0kyQ19BRERSLCBjbWQsIGFyZyk7Ci19Ci0KLWludCBpdnR2X3VwZDY0MDgzKHN0cnVjdCBpdnR2ICppdHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gaXZ0dl9jYWxsX2kyY19jbGllbnQoaXR2LCBJVlRWX1VQRDY0MDgzX0kyQ19BRERSLCBjbWQsIGFyZyk7Ci19Ci0KLS8qIGJyb2FkY2FzdCBjbWQgZm9yIGFsbCBJMkMgY2xpZW50cyBhbmQgZm9yIHRoZSBncGlvIHN1YnN5c3RlbSAqLwotdm9pZCBpdnR2X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChpdHYtPmkyY19hZGFwLmFsZ28gPT0gTlVMTCkgewotCQlJVlRWX0VSUigiQWRhcHRlciBpcyBub3Qgc2V0Iik7Ci0JCXJldHVybjsKLQl9Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmaXR2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwotCWlmIChpdHYtPmh3X2ZsYWdzICYgSVZUVl9IV19HUElPKQotCQlpdnR2X2dwaW8oaXR2LCBjbWQsIGFyZyk7Ci19Ci0KIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwogaW50IGluaXRfaXZ0dl9pMmMoc3RydWN0IGl2dHYgKml0dikKIHsKQEAgLTc2MywxMCArNTg0LDkgQEAKIAkvKiBTYW5pdHkgY2hlY2tzIGZvciB0aGUgSTJDIGhhcmR3YXJlIGFycmF5cy4gVGhleSBtdXN0IGJlIHRoZQogCSAqIHNhbWUgc2l6ZSBhbmQgR1BJTyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LgogCSAqLwotCWlmIChBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQVJSQVlfU0laRShod19kZXZpY2VuYW1lcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgSVZUVl9IV19HUElPICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDEpKSB8fAotCSAgICBod19kcml2ZXJpZHNbQVJSQVlfU0laRShod19hZGRycykgLSAxXSkgeworCWlmIChBUlJBWV9TSVpFKGh3X2RldmljZW5hbWVzKSAhPSBBUlJBWV9TSVpFKGh3X2FkZHJzKSB8fAorCSAgICBBUlJBWV9TSVpFKGh3X2RldmljZW5hbWVzKSAhPSBBUlJBWV9TSVpFKGh3X21vZHVsZXMpIHx8CisJICAgIElWVFZfSFdfR1BJTyAhPSAoMSA8PCAoQVJSQVlfU0laRShod19hZGRycykgLSAxKSkpIHsKIAkJSVZUVl9FUlIoIk1pc21hdGNoZWQgSTJDIGhhcmR3YXJlIGFycmF5c1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTc4Myw4ICs2MDMsOCBAQAogCWl0di0+aTJjX2FkYXAuYWxnb19kYXRhID0gJml0di0+aTJjX2FsZ287CiAKIAlzcHJpbnRmKGl0di0+aTJjX2FkYXAubmFtZSArIHN0cmxlbihpdHYtPmkyY19hZGFwLm5hbWUpLCAiICMlZCIsCi0JCWl0di0+bnVtKTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZpdHYtPmkyY19hZGFwLCBpdHYpOworCQlpdHYtPmluc3RhbmNlKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpdHYtPmkyY19hZGFwLCAmaXR2LT5kZXZpY2UpOwogCiAJbWVtY3B5KCZpdHYtPmkyY19jbGllbnQsICZpdnR2X2kyY19jbGllbnRfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuaAppbmRleCAwMjI5NzhjLi4zOTY5MjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuaApAQCAtMjEsMTkgKzIxLDggQEAKICNpZm5kZWYgSVZUVl9JMkNfSAogI2RlZmluZSBJVlRWX0kyQ19ICiAKLWludCBpdnR2X2N4MjU4NDAoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBpdnR2X3NhYTcxMTUoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBpdnR2X3NhYTcxMjcoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBpdnR2X3NhYTcxN3goc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBpdnR2X3VwZDY0MDMxYShzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotaW50IGl2dHZfdXBkNjQwODMoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotaW50IGl2dHZfaTJjX2h3X2FkZHIoc3RydWN0IGl2dHYgKml0diwgdTMyIGh3KTsKLWludCBpdnR2X2kyY19odyhzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgaXZ0dl9pMmNfaWQoc3RydWN0IGl2dHYgKml0diwgdTMyIGlkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotaW50IGl2dHZfY2FsbF9pMmNfY2xpZW50KHN0cnVjdCBpdnR2ICppdHYsIGludCBhZGRyLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotdm9pZCBpdnR2X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIGludCBpdnR2X2kyY19yZWdpc3RlcihzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpZHgpOworc3RydWN0IHY0bDJfc3ViZGV2ICppdnR2X2ZpbmRfaHcoc3RydWN0IGl2dHYgKml0diwgdTMyIGh3KTsKIAogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9pdnR2X2kyYyhzdHJ1Y3QgaXZ0diAqaXR2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDRiYWUzOGQuLmNkOTkwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfR19GTVQsIGZtdCk7CisJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19mbXQsIGZtdCk7CiAJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGl2dHZfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01ODEsNyArNTgxLDcgQEAKIAlwLT5oZWlnaHQgPSBoOwogCWlmIChwLT52aWRlb19lbmNvZGluZyA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xKQogCQlmbXQtPmZtdC5waXgud2lkdGggLz0gMjsKLQlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCBmbXQpOworCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfZm10LCBmbXQpOwogCXJldHVybiBpdnR2X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOwogCWl0di0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsIGZtdCk7CisJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19mbXQsIGZtdCk7CiAJcmV0dXJuIGl2dHZfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKIH0KIApAQCAtNjExLDcgKzYxMSw3IEBACiAJaWYgKGl2dHZfcmF3X3ZiaShpdHYpICYmIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCWl0di0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKLQlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCBmbXQpOworCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfZm10LCBmbXQpOwogCW1lbWNweShpdHYtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCppdHYtPnZiaS5zbGljZWRfaW4pKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4NSwxOCArNjg1LDE3IEBACiAJCQljaGlwLT5pZGVudCA9IGl0di0+aGFzX2N4MjM0MTUgPyBWNEwyX0lERU5UX0NYMjM0MTUgOiBWNEwyX0lERU5UX0NYMjM0MTY7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoY2hpcC0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKLQkJcmV0dXJuIGl2dHZfaTJjX2lkKGl0diwgY2hpcC0+bWF0Y2hfY2hpcCwgVklESU9DX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQotCQlyZXR1cm4gaXZ0dl9jYWxsX2kyY19jbGllbnQoaXR2LCBjaGlwLT5tYXRjaF9jaGlwLCBWSURJT0NfR19DSElQX0lERU5ULCBjaGlwKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hpcC0+bWF0Y2hfdHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAmJgorCSAgICBjaGlwLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogVE9ETzogaXMgdGhpcyBjb3JyZWN0PyAqLworCXJldHVybiBpdnR2X2NhbGxfYWxsX2VycihpdHYsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiBzdGF0aWMgaW50IGl2dHZfaXR2YyhzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZ3MgPSBhcmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2xhdGlsZSB1OCBfX2lvbWVtICpyZWdfc3RhcnQ7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCkBAIC03MTEsMTIgKzcxMCwxMCBAQAogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXZ0dl9jYXJkc19sb2NrLCBmbGFncyk7CiAJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCiAJCXJlZ3MtPnZhbCA9IHJlYWRsKHJlZ3MtPnJlZyArIHJlZ19zdGFydCk7CiAJZWxzZQogCQl3cml0ZWwocmVncy0+dmFsLCByZWdzLT5yZWcgKyByZWdfc3RhcnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml2dHZfY2FyZHNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC03MjYsOSArNzIzLDEwIEBACiAKIAlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQogCQlyZXR1cm4gaXZ0dl9pdHZjKGl0diwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOwotCWlmIChyZWctPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIpCi0JCXJldHVybiBpdnR2X2kyY19pZChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOwotCXJldHVybiBpdnR2X2NhbGxfaTJjX2NsaWVudChpdHYsIHJlZy0+bWF0Y2hfY2hpcCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCS8qIFRPRE86IHN1YmRldiBlcnJvcnMgc2hvdWxkIG5vdCBiZSBpZ25vcmVkLCB0aGlzIHNob3VsZCBiZWNvbWUgYQorCSAgIHN1YmRldiBoZWxwZXIgZnVuY3Rpb24uICovCisJaXZ0dl9jYWxsX2FsbChpdHYsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXZ0dl9zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKQEAgLTczNyw5ICs3MzUsMTAgQEAKIAogCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCiAJCXJldHVybiBpdnR2X2l0dmMoaXR2LCBWSURJT0NfREJHX1NfUkVHSVNURVIsIHJlZyk7Ci0JaWYgKHJlZy0+bWF0Y2hfdHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUikKLQkJcmV0dXJuIGl2dHZfaTJjX2lkKGl0diwgcmVnLT5tYXRjaF9jaGlwLCBWSURJT0NfREJHX1NfUkVHSVNURVIsIHJlZyk7Ci0JcmV0dXJuIGl2dHZfY2FsbF9pMmNfY2xpZW50KGl0diwgcmVnLT5tYXRjaF9jaGlwLCBWSURJT0NfREJHX1NfUkVHSVNURVIsIHJlZyk7CisJLyogVE9ETzogc3ViZGV2IGVycm9ycyBzaG91bGQgbm90IGJlIGlnbm9yZWQsIHRoaXMgc2hvdWxkIGJlY29tZSBhCisJICAgc3ViZGV2IGhlbHBlciBmdW5jdGlvbi4gKi8KKwlpdnR2X2NhbGxfYWxsKGl0diwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCkBAIC04ODQsMTIgKzg4Myw2IEBACiAKIAlzdHJlYW10eXBlID0gaWQtPnR5cGU7CiAKLQlpZiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0lPQ1RMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIml2dHYlZCBpb2N0bDogIiwgaXR2LT5udW0pOwotCQkvKiBTaG91bGQgYmUgcmVwbGFjZWQgKi8KLQkJLyogdjRsX3ByaW50a19pb2N0bChWSURJT0NfU19DUk9QKTsgKi8KLQl9Ci0KIAlpZiAoY3JvcC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgogCSAgICAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpIHsKIAkJaWYgKHN0cmVhbXR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7CkBAIC0xMDUwLDcgKzEwNDMsNyBAQAogCWl0di0+YWN0aXZlX291dHB1dCA9IG91dHA7CiAJcm91dGUuaW5wdXQgPSBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMOwogCXJvdXRlLm91dHB1dCA9IGl0di0+Y2FyZC0+dmlkZW9fb3V0cHV0c1tvdXRwXS52aWRlb19vdXRwdXQ7Ci0JaXZ0dl9zYWE3MTI3KGl0diwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTI3LCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDYyLDcgKzEwNTUsNyBAQAogCWlmICh2Zi0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpdnR2X2NhbGxfaTJjX2NsaWVudHMoaXR2LCBWSURJT0NfR19GUkVRVUVOQ1ksIHZmKTsKKwlpdnR2X2NhbGxfYWxsKGl0diwgdHVuZXIsIGdfZnJlcXVlbmN5LCB2Zik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzUsNyArMTA2OCw3IEBACiAKIAlpdnR2X211dGUoaXR2KTsKIAlJVlRWX0RFQlVHX0lORk8oInY0bDIgaW9jdGw6IHNldCBmcmVxdWVuY3kgJWRcbiIsIHZmLT5mcmVxdWVuY3kpOwotCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19TX0ZSRVFVRU5DWSwgdmYpOworCWl2dHZfY2FsbF9hbGwoaXR2LCB0dW5lciwgc19mcmVxdWVuY3ksIHZmKTsKIAlpdnR2X3VubXV0ZShpdHYpOwogCXJldHVybiAwOwogfQpAQCAtMTEyMywxNCArMTExNiwxNCBAQAogCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKIAogCS8qIFR1bmVyICovCi0JaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX1NfU1RELCAmaXR2LT5zdGQpOworCWl2dHZfY2FsbF9hbGwoaXR2LCB0dW5lciwgc19zdGQsIGl0di0+c3RkKTsKIAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCS8qIHNldCBkaXNwbGF5IHN0YW5kYXJkICovCiAJCWl0di0+c3RkX291dCA9ICpzdGQ7CiAJCWl0di0+aXNfb3V0XzYwaHogPSBpdHYtPmlzXzYwaHo7CiAJCWl0di0+aXNfb3V0XzUwaHogPSBpdHYtPmlzXzUwaHo7Ci0JCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19JTlRfU19TVERfT1VUUFVULCAmaXR2LT5zdGRfb3V0KTsKKwkJaXZ0dl9jYWxsX2FsbChpdHYsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIGl0di0+c3RkX291dCk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1NFVF9TVEFOREFSRCwgMSwgaXR2LT5pc19vdXRfNTBoeik7CiAJCWl0di0+bWFpbl9yZWN0LmxlZnQgPSBpdHYtPm1haW5fcmVjdC50b3AgPSAwOwogCQlpdHYtPm1haW5fcmVjdC53aWR0aCA9IDcyMDsKQEAgLTExNTQsNyArMTE0Nyw3IEBACiAJaWYgKHZ0LT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19TX1RVTkVSLCB2dCk7CisJaXZ0dl9jYWxsX2FsbChpdHYsIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNjYsNyArMTE1OSw3IEBACiAJaWYgKHZ0LT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWl2dHZfY2FsbF9pMmNfY2xpZW50cyhpdHYsIFZJRElPQ19HX1RVTkVSLCB2dCk7CisJaXZ0dl9jYWxsX2FsbChpdHYsIHR1bmVyLCBnX3R1bmVyLCB2dCk7CiAKIAlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykpIHsKIAkJc3RybGNweSh2dC0+bmFtZSwgIml2dHYgUmFkaW8gVHVuZXIiLCBzaXplb2YodnQtPm5hbWUpKTsKQEAgLTE0NDQsMTQgKzE0MzcsMTUgQEAKIAlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbjsKIAlpbnQgaTsKIAotCUlWVFZfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGl0di0+bnVtKTsKKwlJVlRWX0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLAorCQkgICAgICAgaXR2LT5pbnN0YW5jZSk7CiAJSVZUVl9JTkZPKCJWZXJzaW9uOiAlcyBDYXJkOiAlc1xuIiwgSVZUVl9WRVJTSU9OLCBpdHYtPmNhcmRfbmFtZSk7CiAJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX1RWRUVQUk9NKSB7CiAJCXN0cnVjdCB0dmVlcHJvbSB0djsKIAogCQlpdnR2X3JlYWRfZWVwcm9tKGl0diwgJnR2KTsKIAl9Ci0JaXZ0dl9jYWxsX2kyY19jbGllbnRzKGl0diwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWl2dHZfY2FsbF9hbGwoaXR2LCBjb3JlLCBsb2dfc3RhdHVzKTsKIAlpdnR2X2dldF9pbnB1dChpdHYsIGl0di0+YWN0aXZlX2lucHV0LCAmdmlkaW4pOwogCWl2dHZfZ2V0X2F1ZGlvX2lucHV0KGl0diwgaXR2LT5hdWRpb19pbnB1dCwgJmF1ZGluKTsKIAlJVlRWX0lORk8oIlZpZGVvIElucHV0OiAgJXNcbiIsIHZpZGluLm5hbWUpOwpAQCAtMTUxOCw3ICsxNTEyLDcgQEAKIAl9CiAJSVZUVl9JTkZPKCJUdW5lcjogICVzXG4iLAogCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKLQljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPm5hbWUpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmaXR2LT5wYXJhbXMsIGl0di0+ZGV2aWNlLm5hbWUpOwogCUlWVFZfSU5GTygiU3RhdHVzIGZsYWdzOiAgICAweCUwOGx4XG4iLCBpdHYtPmlfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKQEAgLTE1MzAsOCArMTUyNCwxMSBAQAogCQkJCShzLT5idWZmZXJzICogcy0+YnVmX3NpemUpIC8gMTAyNCwgcy0+YnVmZmVycyk7CiAJfQogCi0JSVZUVl9JTkZPKCJSZWFkIE1QRy9WQkk6ICVsbGQvJWxsZCBieXRlc1xuIiwgKGxvbmcgbG9uZylpdHYtPm1wZ19kYXRhX3JlY2VpdmVkLCAobG9uZyBsb25nKWl0di0+dmJpX2RhdGFfaW5zZXJ0ZWQpOwotCUlWVFZfSU5GTygiPT09PT09PT09PT09PT09PT09ICBFTkQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PT1cbiIsIGl0di0+bnVtKTsKKwlJVlRWX0lORk8oIlJlYWQgTVBHL1ZCSTogJWxsZC8lbGxkIGJ5dGVzXG4iLAorCQkJKGxvbmcgbG9uZylpdHYtPm1wZ19kYXRhX3JlY2VpdmVkLAorCQkJKGxvbmcgbG9uZylpdHYtPnZiaV9kYXRhX2luc2VydGVkKTsKKwlJVlRWX0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLAorCQkJaXR2LT5pbnN0YW5jZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MzYsNyArMTczMyw3IEBACiAJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzogewogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAotCQlpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW8sIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCByb3V0ZSk7CisJCWl2dHZfY2FsbF9odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW8sIGF1ZGlvLCBzX3JvdXRpbmcsIHJvdXRlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzQ2LDcgKzE3NDMsNyBAQAogCQlpZiAoKHZhbCA9PSAwICYmIGl0di0+b3B0aW9ucy5uZXdpMmMpIHx8ICh2YWwgJiAweDAxKSkKIAkJCWl2dHZfcmVzZXRfaXJfZ3BpbyhpdHYpOwogCQlpZiAodmFsICYgMHgwMikKLQkJCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBjbWQsIE5VTEwpOworCQkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCBjb3JlLCByZXNldCwgMCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcm91dGluZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcm91dGluZy5jCmluZGV4IDA1NTY0OTEuLjNmZDMwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXJvdXRpbmcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1yb3V0aW5nLmMKQEAgLTQ3LDEzICs0NywxMyBAQAogCXJvdXRlLm91dHB1dCA9IDA7CiAJaWYgKGl0di0+Y2FyZC0+aHdfbXV4ZXIgJiBJVlRWX0hXX001Mjc5MCkKIAkJcm91dGUub3V0cHV0ID0gTTUyNzkwX09VVF9TVEVSRU87Ci0JaXZ0dl9pMmNfaHcoaXR2LCBpdHYtPmNhcmQtPmh3X211eGVyLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfbXV4ZXIsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAlyb3V0ZS5pbnB1dCA9IGluLT5hdWRpb19pbnB1dDsKIAlyb3V0ZS5vdXRwdXQgPSAwOwogCWlmIChpdHYtPmNhcmQtPmh3X2F1ZGlvICYgSVZUVl9IV19NU1AzNFhYKQogCQlyb3V0ZS5vdXRwdXQgPSBNU1BfT1VUUFVUKE1TUF9TQ19JTl9EU1BfU0NBUlQxKTsKLQlpdnR2X2kyY19odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW8sIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCWl2dHZfY2FsbF9odyhpdHYsIGl0di0+Y2FyZC0+aHdfYXVkaW8sIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiB9CiAKIC8qIFNlbGVjdHMgdGhlIHZpZGVvIGlucHV0IGFuZCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50CkBAIC02Niw3ICs2Niw3IEBACiAKIAlyb3V0ZS5pbnB1dCA9IGl0di0+Y2FyZC0+dmlkZW9faW5wdXRzW2lucF0udmlkZW9faW5wdXQ7CiAJcm91dGUub3V0cHV0ID0gMDsKLQlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJdHlwZSA9IGl0di0+Y2FyZC0+dmlkZW9faW5wdXRzW2lucF0udmlkZW9fdHlwZTsKIApAQCAtNzksNyArNzksNyBAQAogCX0KIAogCWlmIChpdHYtPmNhcmQtPmh3X3ZpZGVvICYgSVZUVl9IV19HUElPKQotCQlpdnR2X2dwaW8oaXR2LCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwkJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19HUElPLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJaWYgKGl0di0+Y2FyZC0+aHdfdmlkZW8gJiBJVlRWX0hXX1VQRDY0MDMxQSkgewogCQlpZiAodHlwZSA9PSBJVlRWX0NBUkRfSU5QVVRfVklEX1RVTkVSIHx8CkBAIC05Miw3ICs5Miw3IEBACiAJCX0KIAkJcm91dGUuaW5wdXQgfD0gaXR2LT5jYXJkLT5ncl9jb25maWc7CiAKLQkJaXZ0dl91cGQ2NDAzMWEoaXR2LCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwkJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19VUEQ2NDAzMUEsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJfQogCiAJaWYgKGl0di0+Y2FyZC0+aHdfdmlkZW8gJiBJVlRWX0hXX1VQRDY0MDhYKSB7CkBAIC0xMTAsNiArMTEwLDYgQEAKIAkJICAgIHJvdXRlLmlucHV0IHw9IFVQRDY0MDgzX0VYVF9ZX0FEQzsKIAkJICB9CiAJCX0KLQkJaXZ0dl91cGQ2NDA4MyhpdHYsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCQlpdnR2X2NhbGxfaHcoaXR2LCBJVlRWX0hXX1VQRDY0MDhYLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA5YjdhYTc5Li5mNzdkNzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIHsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwogCWludCBudW1fb2Zmc2V0ID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwotCWludCBudW0gPSBpdHYtPm51bSArIGl2dHZfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OworCWludCBudW0gPSBpdHYtPmluc3RhbmNlICsgaXZ0dl9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKIAkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQpAQCAtMjA1LDExICsyMDUsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc25wcmludGYocy0+djRsMmRldi0+bmFtZSwgc2l6ZW9mKHMtPnY0bDJkZXYtPm5hbWUpLCAiaXZ0diVkICVzIiwKLQkJCWl0di0+bnVtLCBzLT5uYW1lKTsKKwlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICIlcyAlcyIsCisJCQlpdHYtPmRldmljZS5uYW1lLCBzLT5uYW1lKTsKIAogCXMtPnY0bDJkZXYtPm51bSA9IG51bTsKLQlzLT52NGwyZGV2LT5wYXJlbnQgPSAmaXR2LT5kZXYtPmRldjsKKwlzLT52NGwyZGV2LT52NGwyX2RldiA9ICZpdHYtPmRldmljZTsKIAlzLT52NGwyZGV2LT5mb3BzID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5mb3BzOwogCXMtPnY0bDJkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzLT52NGwyZGV2LT50dm5vcm1zID0gVjRMMl9TVERfQUxMOwpAQCAtMjYwLDYgKzI2MCw3IEBACiAJCWlmIChzX21wZy0+djRsMmRldikKIAkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQorCXZpZGVvX3NldF9kcnZkYXRhKHMtPnY0bDJkZXYsIHMpOwogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG51bSkpIHsKQEAgLTM0Myw3ICszNDQsNyBAQAogCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX1NFVF9WQklfTElORSwgNSwgMHhmZmZmICwgMCwgMCwgMCwgMCk7CiAKIAkvKiBzZXR1cCBWQkkgcmVnaXN0ZXJzICovCi0JaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgJml0di0+dmJpLmluKTsKKwl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX2ZtdCwgJml0di0+dmJpLmluKTsKIAogCS8qIGRldGVybWluZSBudW1iZXIgb2YgbGluZXMgYW5kIHRvdGFsIG51bWJlciBvZiBWQkkgYnl0ZXMuCiAJICAgQSByYXcgbGluZSB0YWtlcyAxNDQzIGJ5dGVzOiAyICogNzIwICsgNCBieXRlIGZyYW1lIGhlYWRlciAtIDEKQEAgLTU3NywxMCArNTc4LDEwIEBACiAJCWNsZWFyX2JpdChJVlRWX0ZfSV9FT1MsICZpdHYtPmlfZmxhZ3MpOwogCiAJCS8qIEluaXRpYWxpemUgRGlnaXRpemVyIGZvciBDYXB0dXJlICovCi0JCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU1RSRUFNT0ZGLCBOVUxMKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDApOwogCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMSk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX0lOSVRJQUxJWkVfSU5QVVQsIDApOwotCQlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NUUkVBTU9OLCBOVUxMKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDEpOwogCX0KIAogCS8qIGJlZ2luX2NhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKaW5kZXggNGEzN2E3ZC4uNWM1ZDFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJpdnR2LWkyYy5oIgogI2luY2x1ZGUgIml2dHYtaW9jdGwuaCIKICNpbmNsdWRlICJpdnR2LXF1ZXVlLmgiCisjaW5jbHVkZSAiaXZ0di1jYXJkcy5oIgogI2luY2x1ZGUgIml2dHYtdmJpLmgiCiAKIHN0YXRpYyB2b2lkIGl2dHZfc2V0X3ZwcyhzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgZW5hYmxlZCkKQEAgLTM3LDcgKzM4LDcgQEAKIAlkYXRhLmRhdGFbOV0gPSBpdHYtPnZiaS52cHNfcGF5bG9hZC5kYXRhWzJdOwogCWRhdGEuZGF0YVsxMF0gPSBpdHYtPnZiaS52cHNfcGF5bG9hZC5kYXRhWzNdOwogCWRhdGEuZGF0YVsxMV0gPSBpdHYtPnZiaS52cHNfcGF5bG9hZC5kYXRhWzRdOwotCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19JTlRfU19WQklfREFUQSwgJmRhdGEpOworCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzEyNywgdmlkZW8sIHNfdmJpX2RhdGEsICZkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgaXZ0dl9zZXRfY2Moc3RydWN0IGl2dHYgKml0diwgaW50IG1vZGUsIGNvbnN0IHN0cnVjdCB2YmlfY2MgKmNjKQpAQCAtNTEsMTIgKzUyLDEyIEBACiAJZGF0YS5saW5lID0gKG1vZGUgJiAxKSA/IDIxIDogMDsKIAlkYXRhLmRhdGFbMF0gPSBjYy0+b2RkWzBdOwogCWRhdGEuZGF0YVsxXSA9IGNjLT5vZGRbMV07Ci0JaXZ0dl9zYWE3MTI3KGl0diwgVklESU9DX0lOVF9TX1ZCSV9EQVRBLCAmZGF0YSk7CisJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTI3LCB2aWRlbywgc192YmlfZGF0YSwgJmRhdGEpOwogCWRhdGEuZmllbGQgPSAxOwogCWRhdGEubGluZSA9IChtb2RlICYgMikgPyAyMSA6IDA7CiAJZGF0YS5kYXRhWzBdID0gY2MtPmV2ZW5bMF07CiAJZGF0YS5kYXRhWzFdID0gY2MtPmV2ZW5bMV07Ci0JaXZ0dl9zYWE3MTI3KGl0diwgVklESU9DX0lOVF9TX1ZCSV9EQVRBLCAmZGF0YSk7CisJaXZ0dl9jYWxsX2h3KGl0diwgSVZUVl9IV19TQUE3MTI3LCB2aWRlbywgc192YmlfZGF0YSwgJmRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBpdnR2X3NldF93c3Moc3RydWN0IGl2dHYgKml0diwgaW50IGVuYWJsZWQsIGludCBtb2RlKQpAQCAtNzksNyArODAsNyBAQAogCWRhdGEubGluZSA9IGVuYWJsZWQgPyAyMyA6IDA7CiAJZGF0YS5kYXRhWzBdID0gbW9kZSAmIDB4ZmY7CiAJZGF0YS5kYXRhWzFdID0gKG1vZGUgPj4gOCkgJiAweGZmOwotCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19JTlRfU19WQklfREFUQSwgJmRhdGEpOworCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzEyNywgdmlkZW8sIHNfdmJpX2RhdGEsICZkYXRhKTsKIH0KIAogc3RhdGljIGludCBvZGRfcGFyaXR5KHU4IGMpCkBAIC0zMTMsNyArMzE0LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXZiaS5wID0gcCArIDQ7Ci0JCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSwgJnZiaSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIGRlY29kZV92YmlfbGluZSwgJnZiaSk7CiAJCWlmICh2YmkudHlwZSAmJiAhKGxpbmVzICYgKDEgPDwgdmJpLmxpbmUpKSkgewogCQkJbGluZXMgfD0gMSA8PCB2YmkubGluZTsKIAkJCWl0di0+dmJpLnNsaWNlZF9kYXRhW2xpbmVdLmlkID0gdmJpLnR5cGU7CkBAIC00MzcsNyArNDM4LDcgQEAKIAkJCWRhdGEuaWQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCQkJZGF0YS5maWVsZCA9IDA7CiAKLQkJCWlmIChpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX0lOVF9HX1ZCSV9EQVRBLCAmZGF0YSkgPT0gMCkgeworCQkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIGdfdmJpX2RhdGEsICZkYXRhKSA9PSAwKSB7CiAJCQkJaXZ0dl9zZXRfd3NzKGl0diwgMSwgZGF0YS5kYXRhWzBdICYgMHhmKTsKIAkJCQl2aS0+d3NzX21pc3NpbmdfY250ID0gMDsKIAkJCX0gZWxzZSBpZiAodmktPndzc19taXNzaW5nX2NudCA9PSA0KSB7CkBAIC00NTEsMTMgKzQ1MiwxMyBAQAogCiAJCQlkYXRhLmlkID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CiAJCQlkYXRhLmZpZWxkID0gMDsKLQkJCWlmIChpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX0lOVF9HX1ZCSV9EQVRBLCAmZGF0YSkgPT0gMCkgeworCQkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIGdfdmJpX2RhdGEsICZkYXRhKSA9PSAwKSB7CiAJCQkJbW9kZSB8PSAxOwogCQkJCWNjLm9kZFswXSA9IGRhdGEuZGF0YVswXTsKIAkJCQljYy5vZGRbMV0gPSBkYXRhLmRhdGFbMV07CiAJCQl9CiAJCQlkYXRhLmZpZWxkID0gMTsKLQkJCWlmIChpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX0lOVF9HX1ZCSV9EQVRBLCAmZGF0YSkgPT0gMCkgeworCQkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIGdfdmJpX2RhdGEsICZkYXRhKSA9PSAwKSB7CiAJCQkJbW9kZSB8PSAyOwogCQkJCWNjLmV2ZW5bMF0gPSBkYXRhLmRhdGFbMF07CiAJCQkJY2MuZXZlblsxXSA9IGRhdGEuZGF0YVsxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCA5MjFlMjgxLi4zNmFiZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC00OCw2ICs0OCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIml2dHYtZHJpdmVyLmgiCisjaW5jbHVkZSAiaXZ0di1jYXJkcy5oIgogI2luY2x1ZGUgIml2dHYtaTJjLmgiCiAjaW5jbHVkZSAiaXZ0di11ZG1hLmgiCiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCkBAIC0xMjEsMTUgKzEyMiwxNSBAQAogI2RlZmluZSBJVlRWRkJfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoeCkgJiBpdnR2ZmJfZGVidWcpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gIml2dHZmYiVkICIgdHlwZSAiOiAiIGZtdCwgaXR2LT5udW0gLCAjIyBhcmdzKTsgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXZ0dmZiJWQgIiB0eXBlICI6ICIgZm10LCBpdHYtPmluc3RhbmNlICwgIyMgYXJncyk7IFwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWRkJfREVCVUdfV0FSTihmbXQsIGFyZ3MuLi4pICBJVlRWRkJfREVCVUcoSVZUVkZCX0RCR0ZMR19XQVJOLCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIElWVFZGQl9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIElWVFZGQl9ERUJVRyhJVlRWRkJfREJHRkxHX0lORk8sICJpbmZvIiwgZm10ICwgIyMgYXJncykKIAogLyogU3RhbmRhcmQga2VybmVsIG1lc3NhZ2VzICovCi0jZGVmaW5lIElWVFZGQl9FUlIoZm10LCBhcmdzLi4uKSAgIHByaW50ayhLRVJOX0VSUiAgIml2dHZmYiVkOiAiIGZtdCwgaXR2LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBJVlRWRkJfV0FSTihmbXQsIGFyZ3MuLi4pICBwcmludGsoS0VSTl9XQVJOSU5HICAiaXZ0dmZiJWQ6ICIgZm10LCBpdHYtPm51bSAsICMjIGFyZ3MpCi0jZGVmaW5lIElWVFZGQl9JTkZPKGZtdCwgYXJncy4uLikgIHByaW50ayhLRVJOX0lORk8gIml2dHZmYiVkOiAiIGZtdCwgaXR2LT5udW0gLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWRkJfRVJSKGZtdCwgYXJncy4uLikgICBwcmludGsoS0VSTl9FUlIgICJpdnR2ZmIlZDogIiBmbXQsIGl0di0+aW5zdGFuY2UgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWRkJfV0FSTihmbXQsIGFyZ3MuLi4pICBwcmludGsoS0VSTl9XQVJOSU5HICAiaXZ0dmZiJWQ6ICIgZm10LCBpdHYtPmluc3RhbmNlICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVkZCX0lORk8oZm10LCBhcmdzLi4uKSAgcHJpbnRrKEtFUk5fSU5GTyAiaXZ0dmZiJWQ6ICIgZm10LCBpdHYtPmluc3RhbmNlICwgIyMgYXJncykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTg5NSwxNiArODk2LDE2IEBACiAJc3dpdGNoIChibGFua19tb2RlKSB7CiAJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX09TRF9TRVRfU1RBVEUsIDEsIDEpOwotCQlpdnR2X3NhYTcxMjcoaXR2LCBWSURJT0NfU1RSRUFNT04sIE5VTEwpOworCQlpdnR2X2NhbGxfaHcoaXR2LCBJVlRWX0hXX1NBQTcxMjcsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfTk9STUFMOgogCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKIAljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9TVEFURSwgMSwgMCk7Ci0JCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PTiwgTlVMTCk7CisJCWl2dHZfY2FsbF9odyhpdHYsIElWVFZfSFdfU0FBNzEyNywgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0JCWl2dHZfc2FhNzEyNyhpdHYsIFZJRElPQ19TVFJFQU1PRkYsIE5VTEwpOworCQlpdnR2X2NhbGxfaHcoaXR2LCBJVlRWX0hXX1NBQTcxMjcsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9TVEFURSwgMSwgMCk7CiAJCWJyZWFrOwogCX0KQEAgLTExODgsMTAgKzExODksNDUgQEAKIAogfQogCitzdGF0aWMgaW50IF9faW5pdCBpdnR2ZmJfY2FsbGJhY2tfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCBkZXZpY2UpOworCisJaWYgKGl0diAmJiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpIHsKKwkJaWYgKGl2dHZmYl9pbml0X2NhcmQoaXR2KSA9PSAwKSB7CisJCQlJVlRWRkJfSU5GTygiRnJhbWVidWZmZXIgcmVnaXN0ZXJlZCBvbiAlc1xuIiwKKwkJCQkJaXR2LT5kZXZpY2UubmFtZSk7CisJCQkoKihpbnQgKilwKSsrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl2dHZmYl9jYWxsYmFja19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisKKwlpZiAoaXR2ICYmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkgeworCQlpZiAodW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmaXR2LT5vc2RfaW5mby0+aXZ0dmZiX2luZm8pKSB7CisJCQlJVlRWRkJfV0FSTigiRnJhbWVidWZmZXIgJWQgaXMgaW4gdXNlLCBjYW5ub3QgdW5sb2FkXG4iLAorCQkJCSAgICAgICBpdHYtPmluc3RhbmNlKTsKKwkJCXJldHVybiAwOworCQl9CisJCUlWVFZGQl9JTkZPKCJVbnJlZ2lzdGVyIGZyYW1lYnVmZmVyICVkXG4iLCBpdHYtPmluc3RhbmNlKTsKKwkJaXZ0dmZiX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTiwgJml0di0+b3NkX2luZm8tPml2dHZmYl9pbmZvKTsKKwkJaXZ0dmZiX3JlbGVhc2VfYnVmZmVycyhpdHYpOworCQlpdHYtPm9zZF92aWRlb19wYmFzZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpdnR2ZmJfaW5pdCh2b2lkKQogewotCXN0cnVjdCBpdnR2ICppdHY7Ci0JaW50IGksIHJlZ2lzdGVyZWQgPSAwOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CisJaW50IHJlZ2lzdGVyZWQgPSAwOworCWludCBlcnI7CiAKIAlpZiAoaXZ0dmZiX2NhcmRfaWQgPCAtMSB8fCBpdnR2ZmJfY2FyZF9pZCA+PSBJVlRWX01BWF9DQVJEUykgewogCQlwcmludGsoS0VSTl9FUlIgIml2dHZmYjogIGl2dHZmYl9jYXJkX2lkIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UgKHZhbGlkIHJhbmdlOiAtMSAtICVkKVxuIiwKQEAgLTExOTksMjAgKzEyMzUsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogTG9jYXRlICYgaW5pdGlhbGlzZSBhbGwgY2FyZHMgc3VwcG9ydGluZyBhbiBPU0QuICovCi0JZm9yIChpID0gMDsgaSA8IGl2dHZfY2FyZHNfYWN0aXZlOyBpKyspIHsKLQkJaWYgKGl2dHZmYl9jYXJkX2lkICE9IC0xICYmIGkgIT0gaXZ0dmZiX2NhcmRfaWQpCi0JCQljb250aW51ZTsKLQkJaXR2ID0gaXZ0dl9jYXJkc1tpXTsKLQkJaWYgKGl0diAmJiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpIHsKLQkJCWlmIChpdnR2ZmJfaW5pdF9jYXJkKGl0dikgPT0gMCkgewotCQkJCUlWVFZGQl9JTkZPKCJGcmFtZWJ1ZmZlciByZWdpc3RlcmVkIG9uIGl2dHYgY2FyZCBpZCAlZFxuIiwgaSk7Ci0JCQkJcmVnaXN0ZXJlZCsrOwotCQkJfQotCQl9Ci0JfQorCWRydiA9IGRyaXZlcl9maW5kKCJpdnR2IiwgJnBjaV9idXNfdHlwZSk7CisJZXJyID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZShkcnYsIE5VTEwsICZyZWdpc3RlcmVkLCBpdnR2ZmJfY2FsbGJhY2tfaW5pdCk7CisJcHV0X2RyaXZlcihkcnYpOwogCWlmICghcmVnaXN0ZXJlZCkgewotCQlwcmludGsoS0VSTl9FUlIgIml2dHZmYjogIG5vIGNhcmRzIGZvdW5kIik7CisJCXByaW50ayhLRVJOX0VSUiAiaXZ0dmZiOiAgbm8gY2FyZHMgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMjIwLDI0ICsxMjQ3LDE0IEBACiAKIHN0YXRpYyB2b2lkIGl2dHZmYl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IGl2dHYgKml0djsKLQlpbnQgaTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCWludCBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpdnR2ZmI6ICBVbmxvYWRpbmcgZnJhbWVidWZmZXIgbW9kdWxlXG4iKTsKIAotCWZvciAoaSA9IDA7IGkgPCBpdnR2X2NhcmRzX2FjdGl2ZTsgaSsrKSB7Ci0JCWl0diA9IGl2dHZfY2FyZHNbaV07Ci0JCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpICYmIGl0di0+b3NkX2luZm8pIHsKLQkJCWlmICh1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZpdHYtPm9zZF9pbmZvLT5pdnR2ZmJfaW5mbykpIHsKLQkJCQlJVlRWRkJfV0FSTigiRnJhbWVidWZmZXIgJWQgaXMgaW4gdXNlLCBjYW5ub3QgdW5sb2FkXG4iLCBpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlJVlRWRkJfREVCVUdfSU5GTygiVW5yZWdpc3RlciBmcmFtZWJ1ZmZlciAlZFxuIiwgaSk7Ci0JCQlpdnR2ZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCAmaXR2LT5vc2RfaW5mby0+aXZ0dmZiX2luZm8pOwotCQkJaXZ0dmZiX3JlbGVhc2VfYnVmZmVycyhpdHYpOwotCQkJaXR2LT5vc2RfdmlkZW9fcGJhc2UgPSAwOwotCQl9Ci0JfQorCWRydiA9IGRyaXZlcl9maW5kKCJpdnR2IiwgJnBjaV9idXNfdHlwZSk7CisJZXJyID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZShkcnYsIE5VTEwsIE5VTEwsIGl2dHZmYl9jYWxsYmFja19jbGVhbnVwKTsKKwlwdXRfZHJpdmVyKGRydik7CiB9CiAKIG1vZHVsZV9pbml0KGl2dHZmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IDg5YTc4MWMuLjA3YmUxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL201Mjc5MC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIApAQCAtMzgsOTAgKzM4LDEzMSBAQAogCiAKIHN0cnVjdCBtNTI3OTBfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1MTYgaW5wdXQ7CiAJdTE2IG91dHB1dDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG01Mjc5MF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgbTUyNzkwX3N0YXRlLCBzZCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgbTUyNzkwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG01Mjc5MF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBtNTI3OTBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG01Mjc5MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJdTggc3cxID0gKHN0YXRlLT5pbnB1dCB8IHN0YXRlLT5vdXRwdXQpICYgMHhmZjsKIAl1OCBzdzIgPSAoc3RhdGUtPmlucHV0IHwgc3RhdGUtPm91dHB1dCkgPj4gODsKIAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgc3cxLCBzdzIpOwogfQogCi1zdGF0aWMgaW50IG01Mjc5MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgdm9pZCAqYXJnKQorLyogTm90ZTogYXVkaW8gYW5kIHZpZGVvIGFyZSBsaW5rZWQgYW5kIGNhbm5vdCBiZSBzd2l0Y2hlZCBzZXBhcmF0ZWx5LgorICAgU28gYXVkaW8gYW5kIHZpZGVvIHJvdXRpbmcgY29tbWFuZHMgYXJlIGlkZW50aWNhbCBmb3IgdGhpcyBjaGlwLgorICAgSW4gdGhlb3J5IHRoZSB2aWRlbyBhbXBsaWZpZXIgYW5kIGF1ZGlvIG1vZGVzIGNvdWxkIGJlIGhhbmRsZWQKKyAgIHNlcGFyYXRlbHkgZm9yIHRoZSBvdXRwdXQsIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG92ZXJraWxsIHJpZ2h0IG5vdy4KKyAgIFRoZSBzYW1lIGhvbGRzIGZvciBpbXBsZW1lbnRpbmcgYW4gYXVkaW8gbXV0ZSBjb250cm9sLCB0aGlzIGlzIG5vdworICAgcGFydCBvZiB0aGUgYXVkaW8gb3V0cHV0IHJvdXRpbmcuIFRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IGFub3RoZXIKKyAgIGNoaXAgdGFrZXMgY2FyZSBvZiB0aGUgYWN0dWFsIG11dGluZyBzbyBtYWtpbmcgaXQgcGFydCBvZiB0aGUKKyAgIG91dHB1dCByb3V0aW5nIHNlZW1zIHRvIGJlIHRoZSByaWdodCB0aGluZyB0byBkbyBmb3Igbm93LiAqLworc3RhdGljIGludCBtNTI3OTBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCBtNTI3OTBfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJc3RydWN0IG01Mjc5MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQkvKiBOb3RlOiBhdWRpbyBhbmQgdmlkZW8gYXJlIGxpbmtlZCBhbmQgY2Fubm90IGJlIHN3aXRjaGVkIHNlcGFyYXRlbHkuCi0JICAgU28gYXVkaW8gYW5kIHZpZGVvIHJvdXRpbmcgY29tbWFuZHMgYXJlIGlkZW50aWNhbCBmb3IgdGhpcyBjaGlwLgotCSAgIEluIHRoZW9yeSB0aGUgdmlkZW8gYW1wbGlmaWVyIGFuZCBhdWRpbyBtb2RlcyBjb3VsZCBiZSBoYW5kbGVkCi0JICAgc2VwYXJhdGVseSBmb3IgdGhlIG91dHB1dCwgYnV0IHRoYXQgc2VlbXMgdG8gYmUgb3ZlcmtpbGwgcmlnaHQgbm93LgotCSAgIFRoZSBzYW1lIGhvbGRzIGZvciBpbXBsZW1lbnRpbmcgYW4gYXVkaW8gbXV0ZSBjb250cm9sLCB0aGlzIGlzIG5vdwotCSAgIHBhcnQgb2YgdGhlIGF1ZGlvIG91dHB1dCByb3V0aW5nLiBUaGUgbm9ybWFsIGNhc2UgaXMgdGhhdCBhbm90aGVyCi0JICAgY2hpcCB0YWtlcyBjYXJlIG9mIHRoZSBhY3R1YWwgbXV0aW5nIHNvIG1ha2luZyBpdCBwYXJ0IG9mIHRoZQotCSAgIG91dHB1dCByb3V0aW5nIHNlZW1zIHRvIGJlIHRoZSByaWdodCB0aGluZyB0byBkbyBmb3Igbm93LiAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKLQljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+aW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSBzdGF0ZS0+b3V0cHV0OwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKLQkJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OwotCQlzdGF0ZS0+b3V0cHV0ID0gcm91dGUtPm91dHB1dDsKLQkJbTUyNzkwX3dyaXRlKGNsaWVudCk7Ci0JCWJyZWFrOwotCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKLQotCQlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKLQkJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWlmIChyZWctPnJlZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjbWQgPT0gVklESU9DX0RCR19HX1JFR0lTVEVSKQotCQkJcmVnLT52YWwgPSBzdGF0ZS0+aW5wdXQgfCBzdGF0ZS0+b3V0cHV0OwotCQllbHNlIHsKLQkJCXN0YXRlLT5pbnB1dCA9IHJlZy0+dmFsICYgMHgwMzAzOwotCQkJc3RhdGUtPm91dHB1dCA9IHJlZy0+dmFsICYgfjB4MDMwMzsKLQkJCW01Mjc5MF93cml0ZShjbGllbnQpOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBhcmcsCi0JCQkJVjRMMl9JREVOVF9NNTI3OTAsIDApOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJdjRsX2luZm8oY2xpZW50LCAiU3dpdGNoIDE6ICUwMnhcbiIsCi0JCQkJKHN0YXRlLT5pbnB1dCB8IHN0YXRlLT5vdXRwdXQpICYgMHhmZik7Ci0JCXY0bF9pbmZvKGNsaWVudCwgIlN3aXRjaCAyOiAlMDJ4XG4iLAotCQkJCShzdGF0ZS0+aW5wdXQgfCBzdGF0ZS0+b3V0cHV0KSA+PiA4KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OworCXN0YXRlLT5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OworCW01Mjc5MF93cml0ZShzZCk7CiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG01Mjc5MF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IG01Mjc5MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCisJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJaWYgKHJlZy0+cmVnICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJlZy0+dmFsID0gc3RhdGUtPmlucHV0IHwgc3RhdGUtPm91dHB1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtNTI3OTBfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBtNTI3OTBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAorCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChyZWctPnJlZyAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0ZS0+aW5wdXQgPSByZWctPnZhbCAmIDB4MDMwMzsKKwlzdGF0ZS0+b3V0cHV0ID0gcmVnLT52YWwgJiB+MHgwMzAzOworCW01Mjc5MF93cml0ZShzZCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBtNTI3OTBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9NNTI3OTAsIDApOworfQorCitzdGF0aWMgaW50IG01Mjc5MF9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IG01Mjc5MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2luZm8oc2QsICJTd2l0Y2ggMTogJTAyeFxuIiwKKwkJCShzdGF0ZS0+aW5wdXQgfCBzdGF0ZS0+b3V0cHV0KSAmIDB4ZmYpOworCXY0bDJfaW5mbyhzZCwgIlN3aXRjaCAyOiAlMDJ4XG4iLAorCQkJKHN0YXRlLT5pbnB1dCB8IHN0YXRlLT5vdXRwdXQpID4+IDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG01Mjc5MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbTUyNzkwX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gbTUyNzkwX2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IG01Mjc5MF9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gbTUyNzkwX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBtNTI3OTBfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgbTUyNzkwX2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gbTUyNzkwX3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG01Mjc5MF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IG01Mjc5MF9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBtNTI3OTBfb3BzID0geworCS5jb3JlID0gJm01Mjc5MF9jb3JlX29wcywKKwkuYXVkaW8gPSAmbTUyNzkwX2F1ZGlvX29wcywKKwkudmlkZW8gPSAmbTUyNzkwX3ZpZGVvX29wcywKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLwpAQCAtMTMwLDYgKzE3MSw3IEBACiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IG01Mjc5MF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTE0MiwxNiArMTg0LDIwIEBACiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZtNTI3OTBfb3BzKTsKIAlzdGF0ZS0+aW5wdXQgPSBNNTI3OTBfSU5fVFVORVI7CiAJc3RhdGUtPm91dHB1dCA9IE01Mjc5MF9PVVRfU1RFUkVPOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKLQltNTI3OTBfd3JpdGUoY2xpZW50KTsKKwltNTI3OTBfd3JpdGUoc2QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG01Mjc5MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCAzZGE3NGRjLi5hNjIyZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC01MSwxNCArNTEsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KLSNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvbXNwMzQwMC5oPgorI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KICNpbmNsdWRlICJtc3AzNDAwLWRyaXZlci5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNjUsNyArMjY1LDcgQEAKIAogdm9pZCBtc3Bfc2V0X3NjYXJ0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpbiwgaW50IG91dCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCiAJc3RhdGUtPmluX3NjYXJ0ID0gaW47CiAKQEAgLTI4OSw3ICsyODksNyBAQAogCiB2b2lkIG1zcF9zZXRfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWludCBiYWwgPSAwLCBiYXNzLCB0cmVibGUsIGxvdWRuZXNzOwogCWludCB2YWwgPSAwOwogCWludCByZWFsbHltdXRlZCA9IHN0YXRlLT5tdXRlZCB8IHN0YXRlLT5zY2FuX2luX3Byb2dyZXNzOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1zcF93YWtlX3RocmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAKIAlpZiAoTlVMTCA9PSBzdGF0ZS0+a3RocmVhZCkKIAkJcmV0dXJuOwpAQCAtMzkwLDkgKzM5MCw5IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBtc3BfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgbXNwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CkBAIC00MzMsOSArNDMzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXNwX3NldF9jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG1zcF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKQEAgLTQ4MSw0MCArNDgyLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXNwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCitzdGF0aWMgaW50IG1zcF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWlmIChtc3BfZGVidWcgPj0gMikKLQkJdjRsX2kyY19wcmludF9pb2N0bChjbGllbnQsIGNtZCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIEFVRENfU0VUX1JBRElPOgotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJcmV0dXJuIDA7Ci0JCXN0YXRlLT5yYWRpbyA9IDE7Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzd2l0Y2hpbmcgdG8gcmFkaW8gbW9kZVxuIik7Ci0JCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOwotCQlzd2l0Y2ggKHN0YXRlLT5vcG1vZGUpIHsKLQkJY2FzZSBPUE1PREVfTUFOVUFMOgotCQkJLyogc2V0IG1zcDM0MDAgdG8gRk0gcmFkaW8gbW9kZSAqLwotCQkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9SQURJTyk7Ci0JCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDEwLjcpLAotCQkJCQkgICAgTVNQX0NBUlJJRVIoMTAuNykpOwotCQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BNT0RFX0FVVE9ERVRFQ1Q6Ci0JCWNhc2UgT1BNT0RFX0FVVE9TRUxFQ1Q6Ci0JCQkvKiB0aGUgdGhyZWFkIHdpbGwgZG8gZm9yIHVzICovCi0JCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCiAJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCiAJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCiAJICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLwotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCiAJY2FzZSBWSURJT0NHQVVESU86CiAJewogCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwpAQCAtNTg4LDEwNSArNTY1LDEzNyBAQAogCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKIAkJYnJlYWs7CiAJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworfQogI2VuZGlmCi0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JewotCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQogCi0JLyogLS0tIHY0bDIgaW9jdGxzIC0tLSAqLwotCWNhc2UgVklESU9DX1NfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwotCQlpbnQgdXBkYXRlID0gc3RhdGUtPnJhZGlvIHx8IHN0YXRlLT52NGwyX3N0ZCAhPSAqaWQ7CisvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCitzdGF0aWMgaW50IG1zcF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCXN0YXRlLT52NGwyX3N0ZCA9ICppZDsKLQkJc3RhdGUtPnJhZGlvID0gMDsKLQkJaWYgKHVwZGF0ZSkKLQkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOworCWlmIChzdGF0ZS0+cmFkaW8pCiAJCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkc6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpydCA9IGFyZzsKLQotCQkqcnQgPSBzdGF0ZS0+cm91dGluZzsKKwlzdGF0ZS0+cmFkaW8gPSAxOworCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzd2l0Y2hpbmcgdG8gcmFkaW8gbW9kZVxuIik7CisJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDA7CisJc3dpdGNoIChzdGF0ZS0+b3Btb2RlKSB7CisJY2FzZSBPUE1PREVfTUFOVUFMOgorCQkvKiBzZXQgbXNwMzQwMCB0byBGTSByYWRpbyBtb2RlICovCisJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fUkFESU8pOworCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDEwLjcpLAorCQkJCU1TUF9DQVJSSUVSKDEwLjcpKTsKKwkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwogCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgotCXsKLQkJc3RydWN0IHY0bDJfcm91dGluZyAqcnQgPSBhcmc7Ci0JCWludCB0dW5lciA9IChydC0+aW5wdXQgPj4gMykgJiAxOwotCQlpbnQgc2NfaW4gPSBydC0+aW5wdXQgJiAweDc7Ci0JCWludCBzYzFfb3V0ID0gcnQtPm91dHB1dCAmIDB4ZjsKLQkJaW50IHNjMl9vdXQgPSAocnQtPm91dHB1dCA+PiA0KSAmIDB4ZjsKLQkJdTE2IHZhbCwgcmVnOwotCQlpbnQgaTsKLQkJaW50IGV4dGVybl9pbnB1dCA9IDE7Ci0KLQkJaWYgKHN0YXRlLT5yb3V0aW5nLmlucHV0ID09IHJ0LT5pbnB1dCAmJgotCQkgICAgc3RhdGUtPnJvdXRpbmcub3V0cHV0ID09IHJ0LT5vdXRwdXQpCi0JCQlicmVhazsKLQkJc3RhdGUtPnJvdXRpbmcgPSAqcnQ7Ci0JCS8qIGNoZWNrIGlmIHRoZSB0dW5lciBpbnB1dCBpcyB1c2VkICovCi0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCWlmICgoKHJ0LT5pbnB1dCA+PiAoNCArIGkgKiA0KSkgJiAweGYpID09IDApCi0JCQkJZXh0ZXJuX2lucHV0ID0gMDsKLQkJfQotCQlzdGF0ZS0+bW9kZSA9IGV4dGVybl9pbnB1dCA/IE1TUF9NT0RFX0VYVEVSTiA6IE1TUF9NT0RFX0FNX0RFVEVDVDsKLQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzY19pbiwgMCk7Ci0JCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzYzFfb3V0LCAxKTsKLQkJbXNwX3NldF9zY2FydChjbGllbnQsIHNjMl9vdXQsIDIpOwotCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKLQkJcmVnID0gKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpID8gMHgzMCA6IDB4YmI7Ci0JCXZhbCA9IG1zcF9yZWFkX2RlbShjbGllbnQsIHJlZyk7Ci0JCW1zcF93cml0ZV9kZW0oY2xpZW50LCByZWcsICh2YWwgJiB+MHgxMDApIHwgKHR1bmVyIDw8IDgpKTsKLQkJLyogd2FrZSB0aHJlYWQgd2hlbiBhIG5ldyBpbnB1dCBpcyBjaG9zZW4gKi8KKwljYXNlIE9QTU9ERV9BVVRPREVURUNUOgorCWNhc2UgT1BNT0RFX0FVVE9TRUxFQ1Q6CisJCS8qIHRoZSB0aHJlYWQgd2lsbCBkbyBmb3IgdXMgKi8KIAkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7CitzdGF0aWMgaW50IG1zcF9zX2ZyZXF1ZW5jeShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCWlmIChzdGF0ZS0+cmFkaW8pCi0JCQlicmVhazsKLQkJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpCi0JCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwotCQl2dC0+YXVkbW9kZSAgICA9IHN0YXRlLT5hdWRtb2RlOwotCQl2dC0+cnhzdWJjaGFucyA9IHN0YXRlLT5yeHN1YmNoYW5zOwotCQl2dC0+Y2FwYWJpbGl0eSB8PSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAotCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKLQkJYnJlYWs7CisJLyogbmV3IGNoYW5uZWwgLS0ga2ljayBhdWRpbyBjYXJyaWVyIHNjYW4gKi8KKwltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc3Bfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgaWQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCB1cGRhdGUgPSBzdGF0ZS0+cmFkaW8gfHwgc3RhdGUtPnY0bDJfc3RkICE9IGlkOworCisJc3RhdGUtPnY0bDJfc3RkID0gaWQ7CisJc3RhdGUtPnJhZGlvID0gMDsKKwlpZiAodXBkYXRlKQorCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc3Bfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJ0KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgdHVuZXIgPSAocnQtPmlucHV0ID4+IDMpICYgMTsKKwlpbnQgc2NfaW4gPSBydC0+aW5wdXQgJiAweDc7CisJaW50IHNjMV9vdXQgPSBydC0+b3V0cHV0ICYgMHhmOworCWludCBzYzJfb3V0ID0gKHJ0LT5vdXRwdXQgPj4gNCkgJiAweGY7CisJdTE2IHZhbCwgcmVnOworCWludCBpOworCWludCBleHRlcm5faW5wdXQgPSAxOworCisJaWYgKHN0YXRlLT5yb3V0aW5nLmlucHV0ID09IHJ0LT5pbnB1dCAmJgorCQkJc3RhdGUtPnJvdXRpbmcub3V0cHV0ID09IHJ0LT5vdXRwdXQpCisJCXJldHVybiAwOworCXN0YXRlLT5yb3V0aW5nID0gKnJ0OworCS8qIGNoZWNrIGlmIHRoZSB0dW5lciBpbnB1dCBpcyB1c2VkICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoKChydC0+aW5wdXQgPj4gKDQgKyBpICogNCkpICYgMHhmKSA9PSAwKQorCQkJZXh0ZXJuX2lucHV0ID0gMDsKIAl9CisJc3RhdGUtPm1vZGUgPSBleHRlcm5faW5wdXQgPyBNU1BfTU9ERV9FWFRFUk4gOiBNU1BfTU9ERV9BTV9ERVRFQ1Q7CisJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJbXNwX3NldF9zY2FydChjbGllbnQsIHNjX2luLCAwKTsKKwltc3Bfc2V0X3NjYXJ0KGNsaWVudCwgc2MxX291dCwgMSk7CisJbXNwX3NldF9zY2FydChjbGllbnQsIHNjMl9vdXQsIDIpOworCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOworCXJlZyA9IChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKSA/IDB4MzAgOiAweGJiOworCXZhbCA9IG1zcF9yZWFkX2RlbShjbGllbnQsIHJlZyk7CisJbXNwX3dyaXRlX2RlbShjbGllbnQsIHJlZywgKHZhbCAmIH4weDEwMCkgfCAodHVuZXIgPDwgOCkpOworCS8qIHdha2UgdGhyZWFkIHdoZW4gYSBuZXcgaW5wdXQgaXMgY2hvc2VuICovCisJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gKHN0cnVjdCB2NGwyX3R1bmVyICopYXJnOworc3RhdGljIGludCBtc3BfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCWlmIChzdGF0ZS0+cmFkaW8pICAvKiBUT0RPOiBhZGQgbW9uby9zdGVyZW8gc3VwcG9ydCBmb3IgcmFkaW8gKi8KLQkJCWJyZWFrOwotCQlpZiAoc3RhdGUtPmF1ZG1vZGUgPT0gdnQtPmF1ZG1vZGUpCi0JCQlicmVhazsKLQkJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKLQkJLyogb25seSBzZXQgYXVkbW9kZSAqLwotCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQorCWlmIChzdGF0ZS0+cmFkaW8pCisJCXJldHVybiAwOworCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQorCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCXZ0LT5hdWRtb2RlICAgID0gc3RhdGUtPmF1ZG1vZGU7CisJdnQtPnJ4c3ViY2hhbnMgPSBzdGF0ZS0+cnhzdWJjaGFuczsKKwl2dC0+Y2FwYWJpbGl0eSB8PSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOworCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgotCXsKLQkJdTMyICphID0gKHUzMiAqKWFyZzsKK3N0YXRpYyBpbnQgbXNwX3NfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiU2V0dGluZyBJMlMgc3BlZWQgdG8gJWRcbiIsICphKTsKKwlpZiAoc3RhdGUtPnJhZGlvKSAgLyogVE9ETzogYWRkIG1vbm8vc3RlcmVvIHN1cHBvcnQgZm9yIHJhZGlvICovCisJCXJldHVybiAwOworCWlmIChzdGF0ZS0+YXVkbW9kZSA9PSB2dC0+YXVkbW9kZSkKKwkJcmV0dXJuIDA7CisJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKKwkvKiBvbmx5IHNldCBhdWRtb2RlICovCisJbXNwX3NldF9hdWRtb2RlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CiAKLQkJc3dpdGNoICgqYSkgeworc3RhdGljIGludCBtc3Bfc19pMnNfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiU2V0dGluZyBJMlMgc3BlZWQgdG8gJWRcbiIsIGZyZXEpOworCisJc3dpdGNoIChmcmVxKSB7CiAJCWNhc2UgMTAyNDAwMDoKIAkJCXN0YXRlLT5pMnNfbW9kZSA9IDA7CiAJCQlicmVhazsKQEAgLTY5NSwyNCArNzA0LDI0IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CitzdGF0aWMgaW50IG1zcF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAotCQlzd2l0Y2ggKHFjLT5pZCkgeworCXN3aXRjaCAocWMtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQl9Ci0JCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN3aXRjaCAocWMtPmlkKSB7CisJfQorCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHFjLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgogCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKQEAgLTcyMCwzMiArNzI5LDM4IEBACiAJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gbXNwX2dldF9jdHJsKGNsaWVudCwgYXJnKTsKK3N0YXRpYyBpbnQgbXNwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIG1zcF9zZXRfY3RybChjbGllbnQsIGFyZyk7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgc3RhdGUtPmlkZW50LAorCQkJKHN0YXRlLT5yZXYxIDw8IDE2KSB8IHN0YXRlLT5yZXYyKTsKK30KIAotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JewotCQljb25zdCBjaGFyICpwOworc3RhdGljIGludCBtc3BfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwljb25zdCBjaGFyICpwOwogCi0JCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQotCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKLQkJdjRsX2luZm8oY2xpZW50LCAiJXMgcmV2MSA9IDB4JTA0eCByZXYyID0gMHglMDR4XG4iLAotCQkJCWNsaWVudC0+bmFtZSwgc3RhdGUtPnJldjEsIHN0YXRlLT5yZXYyKTsKLQkJdjRsX2luZm8oY2xpZW50LCAiQXVkaW86ICAgIHZvbHVtZSAlZCVzXG4iLAotCQkJCXN0YXRlLT52b2x1bWUsIHN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7Ci0JCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpIHsKLQkJCXY0bF9pbmZvKGNsaWVudCwgIkF1ZGlvOiAgICBiYWxhbmNlICVkIGJhc3MgJWQgdHJlYmxlICVkIGxvdWRuZXNzICVzXG4iLAotCQkJCQlzdGF0ZS0+YmFsYW5jZSwgc3RhdGUtPmJhc3MsCi0JCQkJCXN0YXRlLT50cmVibGUsCi0JCQkJCXN0YXRlLT5sb3VkbmVzcyA/ICJvbiIgOiAib2ZmIik7Ci0JCX0KLQkJc3dpdGNoIChzdGF0ZS0+bW9kZSkgeworCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQorCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCXY0bF9pbmZvKGNsaWVudCwgIiVzIHJldjEgPSAweCUwNHggcmV2MiA9IDB4JTA0eFxuIiwKKwkJCWNsaWVudC0+bmFtZSwgc3RhdGUtPnJldjEsIHN0YXRlLT5yZXYyKTsKKwl2NGxfaW5mbyhjbGllbnQsICJBdWRpbzogICAgdm9sdW1lICVkJXNcbiIsCisJCQlzdGF0ZS0+dm9sdW1lLCBzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiQXVkaW86ICAgIGJhbGFuY2UgJWQgYmFzcyAlZCB0cmVibGUgJWQgbG91ZG5lc3MgJXNcbiIsCisJCQkJc3RhdGUtPmJhbGFuY2UsIHN0YXRlLT5iYXNzLAorCQkJCXN0YXRlLT50cmVibGUsCisJCQkJc3RhdGUtPmxvdWRuZXNzID8gIm9uIiA6ICJvZmYiKTsKKwl9CisJc3dpdGNoIChzdGF0ZS0+bW9kZSkgewogCQljYXNlIE1TUF9NT0RFX0FNX0RFVEVDVDogcCA9ICJBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0KSI7IGJyZWFrOwogCQljYXNlIE1TUF9NT0RFX0ZNX1JBRElPOiBwID0gIkZNIFJhZGlvIjsgYnJlYWs7CiAJCWNhc2UgTVNQX01PREVfRk1fVEVSUkE6IHAgPSAiVGVycmVzdGlhbCBGTS1tb25vL3N0ZXJlbyI7IGJyZWFrOwpAQCAtNzU2LDM2ICs3NzEsMjUgQEAKIAkJY2FzZSBNU1BfTU9ERV9CVFNDOiBwID0gIkJUU0MiOyBicmVhazsKIAkJY2FzZSBNU1BfTU9ERV9FWFRFUk46IHAgPSAiRXh0ZXJuYWwgaW5wdXQiOyBicmVhazsKIAkJZGVmYXVsdDogcCA9ICJ1bmtub3duIjsgYnJlYWs7Ci0JCX0KLQkJaWYgKHN0YXRlLT5tb2RlID09IE1TUF9NT0RFX0VYVEVSTikgewotCQkJdjRsX2luZm8oY2xpZW50LCAiTW9kZTogICAgICVzXG4iLCBwKTsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9NQU5VQUwpIHsKLQkJCXY0bF9pbmZvKGNsaWVudCwgIk1vZGU6ICAgICAlcyAoJXMlcylcbiIsIHAsCisJfQorCWlmIChzdGF0ZS0+bW9kZSA9PSBNU1BfTU9ERV9FWFRFUk4pIHsKKwkJdjRsX2luZm8oY2xpZW50LCAiTW9kZTogICAgICVzXG4iLCBwKTsKKwl9IGVsc2UgaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX01BTlVBTCkgeworCQl2NGxfaW5mbyhjbGllbnQsICJNb2RlOiAgICAgJXMgKCVzJXMpXG4iLCBwLAogCQkJCShzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykgPyAic3RlcmVvIiA6ICJtb25vIiwKIAkJCQkoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMikgPyAiLCBkdWFsIiA6ICIiKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPREVURUNUKQotCQkJCXY0bF9pbmZvKGNsaWVudCwgIk1vZGU6ICAgICAlc1xuIiwgcCk7Ci0JCQl2NGxfaW5mbyhjbGllbnQsICJTdGFuZGFyZDogJXMgKCVzJXMpXG4iLAorCX0gZWxzZSB7CisJCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPREVURUNUKQorCQkJdjRsX2luZm8oY2xpZW50LCAiTW9kZTogICAgICVzXG4iLCBwKTsKKwkJdjRsX2luZm8oY2xpZW50LCAiU3RhbmRhcmQ6ICVzICglcyVzKVxuIiwKIAkJCQltc3Bfc3RhbmRhcmRfc3RkX25hbWUoc3RhdGUtPnN0ZCksCiAJCQkJKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKSA/ICJzdGVyZW8iIDogIm1vbm8iLAogCQkJCShzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKSA/ICIsIGR1YWwiIDogIiIpOwotCQl9Ci0JCXY0bF9pbmZvKGNsaWVudCwgIkF1ZG1vZGU6ICAweCUwNHhcbiIsIHN0YXRlLT5hdWRtb2RlKTsKLQkJdjRsX2luZm8oY2xpZW50LCAiUm91dGluZzogIDB4JTA4eCAoaW5wdXQpIDB4JTA4eCAob3V0cHV0KVxuIiwKLQkJCQlzdGF0ZS0+cm91dGluZy5pbnB1dCwgc3RhdGUtPnJvdXRpbmcub3V0cHV0KTsKLQkJdjRsX2luZm8oY2xpZW50LCAiQUNCOiAgICAgIDB4JTA0eFxuIiwgc3RhdGUtPmFjYik7Ci0JCWJyZWFrOwogCX0KLQotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVDoKLQkJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgYXJnLCBzdGF0ZS0+aWRlbnQsCi0JCQkJKHN0YXRlLT5yZXYxIDw8IDE2KSB8IHN0YXRlLT5yZXYyKTsKLQotCWRlZmF1bHQ6Ci0JCS8qIHVua25vd24gKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXY0bF9pbmZvKGNsaWVudCwgIkF1ZG1vZGU6ICAweCUwNHhcbiIsIHN0YXRlLT5hdWRtb2RlKTsKKwl2NGxfaW5mbyhjbGllbnQsICJSb3V0aW5nOiAgMHglMDh4IChpbnB1dCkgMHglMDh4IChvdXRwdXQpXG4iLAorCQkJc3RhdGUtPnJvdXRpbmcuaW5wdXQsIHN0YXRlLT5yb3V0aW5nLm91dHB1dCk7CisJdjRsX2luZm8oY2xpZW50LCAiQUNCOiAgICAgIDB4JTA0eFxuIiwgc3RhdGUtPmFjYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwMywxMSArODA3LDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbXNwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtc3BfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBtc3BfbG9nX3N0YXR1cywKKwkuZ19jaGlwX2lkZW50ID0gbXNwX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gbXNwX2dfY3RybCwKKwkuc19jdHJsID0gbXNwX3NfY3RybCwKKwkucXVlcnljdHJsID0gbXNwX3F1ZXJ5Y3RybCwKKyNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQorCS5pb2N0bCA9IG1zcF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgbXNwX3R1bmVyX29wcyA9IHsKKwkuc19mcmVxdWVuY3kgPSBtc3Bfc19mcmVxdWVuY3ksCisJLmdfdHVuZXIgPSBtc3BfZ190dW5lciwKKwkuc190dW5lciA9IG1zcF9zX3R1bmVyLAorCS5zX3JhZGlvID0gbXNwX3NfcmFkaW8sCisJLnNfc3RkID0gbXNwX3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgbXNwX2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gbXNwX3Nfcm91dGluZywKKwkuc19pMnNfY2xvY2tfZnJlcSA9IG1zcF9zX2kyc19jbG9ja19mcmVxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXNwX29wcyA9IHsKKwkuY29yZSA9ICZtc3BfY29yZV9vcHMsCisJLnR1bmVyID0gJm1zcF90dW5lcl9vcHMsCisJLmF1ZGlvID0gJm1zcF9hdWRpb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IG1zcF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlpbnQgKCp0aHJlYWRfZnVuYykodm9pZCAqZGF0YSkgPSBOVUxMOwogCWludCBtc3BfaGFyZDsKIAlpbnQgbXNwX2ZhbWlseTsKQEAgLTgyNyw3ICs4NjksOCBAQAogCWlmICghc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmbXNwX29wcyk7CiAKIAlzdGF0ZS0+djRsMl9zdGQgPSBWNEwyX1NURF9OVFNDOwogCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKQEAgLTk3Miw4ICsxMDE1LDkgQEAKIAogc3RhdGljIGludCBtc3BfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZzdGF0ZS0+c2QpOwogCS8qIHNodXRkb3duIGNvbnRyb2wgdGhyZWFkICovCiAJaWYgKHN0YXRlLT5rdGhyZWFkKSB7CiAJCXN0YXRlLT5yZXN0YXJ0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaAppbmRleCBhYjY5YTI5Li4zZmUxYzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCkBAIC01LDYgKzUsNyBAQAogI2RlZmluZSBNU1AzNDAwX0RSSVZFUl9ICiAKICNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC00OSw2ICs1MCw3IEBACiBleHRlcm4gaW50IG1zcF9zdGVyZW9fdGhyZXNoOwogCiBzdHJ1Y3QgbXNwX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJaW50IHJldjEsIHJldjI7CiAJaW50IGlkZW50OwogCXU4IGhhc19uaWNhbTsKQEAgLTk2LDYgKzk4LDExIEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgd2F0Y2hfc3RlcmVvOjE7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtc3Bfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG1zcF9zdGF0ZSwgc2QpOworfQorCiAvKiBtc3AzNDAwLWRyaXZlci5jICovCiBpbnQgbXNwX3dyaXRlX2RlbShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkciwgaW50IHZhbCk7CiBpbnQgbXNwX3dyaXRlX2RzcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkciwgaW50IHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCmluZGV4IDg0NmExNGEuLmE2NTVlOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogc3RhdGljIHZvaWQgbXNwX3NldF9zb3VyY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHNyYykKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCiAJaWYgKG1zcF9kb2xieSkgewogCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCAweDA1MjApOyAvKiBJMlMxICovCkBAIC0xODYsNyArMTg2LDcgQEAKIAogdm9pZCBtc3AzNDAwY19zZXRfbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXN0cnVjdCBtc3AzNDAwY19pbml0X2RhdGFfZGVtICpkYXRhID0gJm1zcDM0MDBjX2luaXRfZGF0YVttb2RlXTsKIAlpbnQgdHVuZXIgPSAoc3RhdGUtPnJvdXRpbmcuaW5wdXQgPj4gMykgJiAxOwogCWludCBpOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJc3RhdGljIGNoYXIgKnN0cm1vZGVbXSA9IHsKIAkJIm1vbm8iLCAic3RlcmVvIiwgImxhbmcyIiwgImxhbmcxIiwgImxhbmcxK2xhbmcyIgogCX07Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAljaGFyICptb2Rlc3RyID0gKHN0YXRlLT5hdWRtb2RlID49IDAgJiYgc3RhdGUtPmF1ZG1vZGUgPCA1KSA/CiAJCXN0cm1vZGVbc3RhdGUtPmF1ZG1vZGVdIDogInVua25vd24iOwogCWludCBzcmMgPSAwOwkvKiBjaGFubmVsIHNvdXJjZTogRk0vQU0sIG5pY2FtIG9yIFNDQVJUICovCkBAIC0zNTYsNyArMzU2LDcgQEAKIAogc3RhdGljIHZvaWQgbXNwMzQwMGNfcHJpbnRfbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAKIAlpZiAoc3RhdGUtPm1haW4gPT0gc3RhdGUtPnNlY29uZCkKIAkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwKQEAgLTM4NSw3ICszODUsNyBAQAogCiBzdGF0aWMgaW50IG1zcDM0MDBjX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWludCB2YWw7CiAJaW50IHJ4c3ViY2hhbnMgPSBzdGF0ZS0+cnhzdWJjaGFuczsKIAlpbnQgbmV3bmljYW0gPSBzdGF0ZS0+bmljYW1fb247CkBAIC00NjMsNyArNDYzLDcgQEAKIC8qIHN0ZXJlby9tdWx0aWxhbmcgbW9uaXRvcmluZyAqLwogc3RhdGljIHZvaWQgd2F0Y2hfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAogCWlmIChtc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpKQogCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKQEAgLTQ3NSw3ICs0NzUsNyBAQAogaW50IG1zcDM0MDBjX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhOwotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJc3RydWN0IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0ICpjZDsKIAlpbnQgY291bnQsIG1heDEsIG1heDIsIHZhbDEsIHZhbDIsIHZhbCwgaTsKIApAQCAtNjU5LDcgKzY1OSw3IEBACiBpbnQgbXNwMzQxMGRfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGE7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlpbnQgdmFsLCBpLCBzdGQsIGNvdW50OwogCiAJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIm1zcDM0MTAgZGFlbW9uIHN0YXJ0ZWRcbiIpOwpAQCAtODI1LDcgKzgyNSw3IEBACiAKIHN0YXRpYyBpbnQgbXNwMzR4eGdfbW9kdXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCiAJaWYgKHN0YXRlLT5yYWRpbykgewogCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2VsZWN0ZWQgcmFkaW8gbW9kdXNcbiIpOwpAQCAtODUyLDcgKzg1Miw3IEBACiAKIHN0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9zb3VyY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgaW50IGluKQogIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWludCBzb3VyY2UsIG1hdHJpeDsKIAogCXN3aXRjaCAoc3RhdGUtPmF1ZG1vZGUpIHsKQEAgLTg5NSw3ICs4OTUsNyBAQAogCiBzdGF0aWMgdm9pZCBtc3AzNHh4Z19zZXRfc291cmNlcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJdTMyIGluID0gc3RhdGUtPnJvdXRpbmcuaW5wdXQ7CiAKIAltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgMHgwMDA4LCAoaW4gPj4gNCkgJiAweGYpOwpAQCAtOTExLDcgKzkxMSw3IEBACiAvKiAocmUtKWluaXRpYWxpemUgdGhlIG1zcDM0eHhnICovCiBzdGF0aWMgdm9pZCBtc3AzNHh4Z19yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJaW50IHR1bmVyID0gKHN0YXRlLT5yb3V0aW5nLmlucHV0ID4+IDMpICYgMTsKIAlpbnQgbW9kdXM7CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogaW50IG1zcDM0eHhnX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhOwotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJaW50IHZhbCwgaTsKIAogCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtc3AzNHh4ZyBkYWVtb24gc3RhcnRlZFxuIik7CkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogCiBzdGF0aWMgaW50IG1zcDM0eHhnX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWludCBzdGF0dXMgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweDAyMDApOwogCWludCBpc19iaWxpbmd1YWwgPSBzdGF0dXMgJiAweDEwMDsKIAlpbnQgaXNfc3RlcmVvID0gc3RhdHVzICYgMHg0MDsKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAKIHN0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAogCWlmIChzdGF0ZS0+c3RkID09IDB4MjApIHsKIAkgICAgICAgaWYgKChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NBUCkgJiYKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAKIHZvaWQgbXNwX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAogCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgewogCWNhc2UgT1BNT0RFX01BTlVBTDoKQEAgLTExMTAsNyArMTExMCw3IEBACiAKIGludCBtc3BfZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlICA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlICA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAogCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgewogCWNhc2UgT1BNT0RFX01BTlVBTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKaW5kZXggMGM1MjQzNy4uMWExYTEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKQEAgLTI3MiwyMSArMjcyLDIwIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMDAxX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOwotCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnID0gU09DQU1fREFUQVdJRFRIXzEwOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJLyogTVQ5TTAwMSBoYXMgYWxsIGNhcHR1cmVfZm9ybWF0IHBhcmFtZXRlcnMgZml4ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwIHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX01BU1RFUjsKIAogCWlmIChidXNfc3dpdGNoX3Bvc3NpYmxlKG10OW0wMDEpKQotCQl3aWR0aF9mbGFnIHw9IFNPQ0FNX0RBVEFXSURUSF84OworCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfODsKIAotCS8qIE1UOU0wMDEgaGFzIGFsbCBjYXB0dXJlX2Zvcm1hdCBwYXJhbWV0ZXJzIGZpeGVkICovCi0JcmV0dXJuIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8Ci0JCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9NQVNURVIgfAotCQl3aWR0aF9mbGFnOworCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBtdDltMDAxX3NldF9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQlfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG10OW0wMDFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOwogCWludCByZXQ7CkBAIC0yOTgsNyArMjk3LDcgQEAKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9WRVJUSUNBTF9CTEFOS0lORywgdmJsYW5rKTsKIAogCS8qIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBzdXBwb3J0ZWQgZm9ybWF0LCBhcyB2ZXJpZmllZCBwZXIKLQkgKiBjYWxsIHRvIGljZC0+dHJ5X2ZtdF9jYXAoKSAqLworCSAqIGNhbGwgdG8gaWNkLT50cnlfZm10KCkgKi8KIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9DT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwogCWlmICghcmV0KQpAQCAtMzI1LDE4ICszMjQsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdF9jYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JaWYgKGYtPmZtdC5waXguaGVpZ2h0IDwgMzIgKyBpY2QtPnlfc2tpcF90b3ApCi0JCWYtPmZtdC5waXguaGVpZ2h0ID0gMzIgKyBpY2QtPnlfc2tpcF90b3A7Ci0JaWYgKGYtPmZtdC5waXguaGVpZ2h0ID4gMTAyNCArIGljZC0+eV9za2lwX3RvcCkKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAxMDI0ICsgaWNkLT55X3NraXBfdG9wOwotCWlmIChmLT5mbXQucGl4LndpZHRoIDwgNDgpCi0JCWYtPmZtdC5waXgud2lkdGggPSA0ODsKLQlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IDEyODApCi0JCWYtPmZtdC5waXgud2lkdGggPSAxMjgwOwotCWYtPmZtdC5waXgud2lkdGggJj0gfjB4MDE7IC8qIGhhcyB0byBiZSBldmVuLCB1bnN1cmUgd2h5IHdhcyB+MyAqLworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJaWYgKHBpeC0+aGVpZ2h0IDwgMzIgKyBpY2QtPnlfc2tpcF90b3ApCisJCXBpeC0+aGVpZ2h0ID0gMzIgKyBpY2QtPnlfc2tpcF90b3A7CisJaWYgKHBpeC0+aGVpZ2h0ID4gMTAyNCArIGljZC0+eV9za2lwX3RvcCkKKwkJcGl4LT5oZWlnaHQgPSAxMDI0ICsgaWNkLT55X3NraXBfdG9wOworCWlmIChwaXgtPndpZHRoIDwgNDgpCisJCXBpeC0+d2lkdGggPSA0ODsKKwlpZiAocGl4LT53aWR0aCA+IDEyODApCisJCXBpeC0+d2lkdGggPSAxMjgwOworCXBpeC0+d2lkdGggJj0gfjB4MDE7IC8qIGhhcyB0byBiZSBldmVuLCB1bnN1cmUgd2h5IHdhcyB+MyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDcsOCArNDQ4LDggQEAKIAkucmVsZWFzZQkJPSBtdDltMDAxX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTAwMV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTAwMV9zdG9wX2NhcHR1cmUsCi0JLnNldF9mbXRfY2FwCQk9IG10OW0wMDFfc2V0X2ZtdF9jYXAsCi0JLnRyeV9mbXRfY2FwCQk9IG10OW0wMDFfdHJ5X2ZtdF9jYXAsCisJLnNldF9mbXQJCT0gbXQ5bTAwMV9zZXRfZm10LAorCS50cnlfZm10CQk9IG10OW0wMDFfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBtdDltMDAxX3NldF9idXNfcGFyYW0sCiAJLnF1ZXJ5X2J1c19wYXJhbQk9IG10OW0wMDFfcXVlcnlfYnVzX3BhcmFtLAogCS5jb250cm9scwkJPSBtdDltMDAxX2NvbnRyb2xzLApAQCAtNTc4LDYgKzU3OSw3IEBACiBzdGF0aWMgaW50IG10OW0wMDFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXMzMiBkYXRhOwogCWludCByZXQ7CiAKQEAgLTU4OCw3ICs1OTAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEVuYWJsZSB0aGUgY2hpcCAqLwotCWRhdGEgPSByZWdfd3JpdGUoJm10OW0wMDEtPmljZCwgTVQ5TTAwMV9DSElQX0VOQUJMRSwgMSk7CisJZGF0YSA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfQ0hJUF9FTkFCTEUsIDEpOwogCWRldl9kYmcoJmljZC0+ZGV2LCAid3JpdGU6ICVkXG4iLCBkYXRhKTsKIAogCS8qIFJlYWQgb3V0IHRoZSBjaGlwIHZlcnNpb24gcmVnaXN0ZXIgKi8KQEAgLTYwMCw3ICs2MDIsNyBAQAogCWNhc2UgMHg4NDIxOgogCQltdDltMDAxLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUOwogCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX2NvbG91cl9mb3JtYXRzOwotCQlpZiAobXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKIAkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfY29sb3VyX2Zvcm1hdHMpOwogCQllbHNlCiAJCQlpY2QtPm51bV9mb3JtYXRzID0gMTsKQEAgLTYwOCw3ICs2MTAsNyBAQAogCWNhc2UgMHg4NDMxOgogCQltdDltMDAxLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUTTsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5bTAwMV9tb25vY2hyb21lX2Zvcm1hdHM7Ci0JCWlmIChtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlpZiAoZ3Bpb19pc192YWxpZChpY2wtPmdwaW8pKQogCQkJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUobXQ5bTAwMV9tb25vY2hyb21lX2Zvcm1hdHMpOwogCQllbHNlCiAJCQlpY2QtPm51bV9mb3JtYXRzID0gMTsKQEAgLTY0MCw4ICs2NDIsOCBAQAogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CiAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIlZpZGVvICV4IHJlbW92ZWQ6ICVwLCAlcFxuIiwgbXQ5bTAwMS0+Y2xpZW50LT5hZGRyLAotCQltdDltMDAxLT5pY2QuZGV2LnBhcmVudCwgbXQ5bTAwMS0+aWNkLnZkZXYpOwotCXNvY19jYW1lcmFfdmlkZW9fc3RvcCgmbXQ5bTAwMS0+aWNkKTsKKwkJaWNkLT5kZXYucGFyZW50LCBpY2QtPnZkZXYpOworCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOwogfQogCiBzdGF0aWMgaW50IG10OW0wMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKaW5kZXggZGEwYjJkNS4uYzg5ZWE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRHJpdmVyIGZvciBNVDlNMTExIENNT1MgSW1hZ2UgU2Vuc29yIGZyb20gTWljcm9uCisgKiBEcml2ZXIgZm9yIE1UOU0xMTEvTVQ5TTExMiBDTU9TIEltYWdlIFNlbnNvciBmcm9tIE1pY3JvbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgUm9iZXJ0IEphcnptaWsgPHJvYmVydC5qYXJ6bWlrQGZyZWUuZnI+CiAgKgpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogLyoKLSAqIG10OW0xMTEgaTJjIGFkZHJlc3MgaXMgMHg1ZCBvciAweDQ4IChkZXBlbmRpbmcgb24gU0FkZHIgcGluKQorICogbXQ5bTExMSBhbmQgbXQ5bTExMiBpMmMgYWRkcmVzcyBpcyAweDVkIG9yIDB4NDggKGRlcGVuZGluZyBvbiBTQWRkciBwaW4pCiAgKiBUaGUgcGxhdGZvcm0gaGFzIHRvIGRlZmluZSBpMmNfYm9hcmRfaW5mbyBhbmQgY2FsbCBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygpCiAgKi8KIApAQCAtOTAsNyArOTAsNyBAQAogI2RlZmluZSBNVDlNMTExX09VVFBVVF9GT1JNQVRfQ1RSTDJfQgkweDE5YgogCiAjZGVmaW5lIE1UOU0xMTFfT1BNT0RFX0FVVE9FWFBPX0VOCSgxIDw8IDE0KQotCisjZGVmaW5lIE1UOU0xMTFfT1BNT0RFX0FVVE9XSElURUJBTF9FTgkoMSA8PCAxKQogCiAjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUgkoMSA8PCAxNCkKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfQllQQVNTX0lGUAkoMSA8PCAxMCkKQEAgLTEyOCw5ICsxMjgsMTQgQEAKIAkuY29sb3JzcGFjZSA9IF9jb2xvcnNwYWNlIH0KICNkZWZpbmUgUkdCX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjKSBcCiAJQ09MX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQikKKyNkZWZpbmUgSlBHX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjKSBcCisJQ09MX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjLCBWNEwyX0NPTE9SU1BBQ0VfSlBFRykKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG10OW0xMTFfY29sb3VyX2Zvcm1hdHNbXSA9IHsKLQlDT0xfRk1UKCJZQ3JZQ2IgOCBiaXQiLCA4LCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9DT0xPUlNQQUNFX0pQRUcpLAorCUpQR19GTVQoIkNiWUNyWSAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1VZVlkpLAorCUpQR19GTVQoIkNyWUNiWSAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1ZZVVkpLAorCUpQR19GTVQoIllDYllDciAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1lVWVYpLAorCUpQR19GTVQoIllDcllDYiAxNiBiaXQiLCAxNiwgVjRMMl9QSVhfRk1UX1lWWVUpLAogCVJHQl9GTVQoIlJHQiA1NjUiLCAxNiwgVjRMMl9QSVhfRk1UX1JHQjU2NSksCiAJUkdCX0ZNVCgiUkdCIDU1NSIsIDE2LCBWNEwyX1BJWF9GTVRfUkdCNTU1KSwKIAlSR0JfRk1UKCJCYXllciAoc1JHQikgMTAgYml0IiwgMTAsIFY0TDJfUElYX0ZNVF9TQkdHUjE2KSwKQEAgLTE0NSw3ICsxNTAsNyBAQAogc3RydWN0IG10OW0xMTEgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKLQlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExMSogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLworCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMTF4KiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCiAJZW51bSBtdDltMTExX2NvbnRleHQgY29udGV4dDsKIAl1bnNpZ25lZCBpbnQgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0OwogCXUzMiBwaXhmbXQ7CkBAIC0xNTgsNiArMTYzLDcgQEAKIAl1bnNpZ25lZCBpbnQgc3dhcF9yZ2JfcmVkX2JsdWU6MTsKIAl1bnNpZ25lZCBpbnQgc3dhcF95dXZfeV9jaHJvbWFzOjE7CiAJdW5zaWduZWQgaW50IHN3YXBfeXV2X2NiX2NyOjE7CisJdW5zaWduZWQgaW50IGF1dG93aGl0ZWJhbGFuY2U6MTsKIH07CiAKIHN0YXRpYyBpbnQgcmVnX3BhZ2VfbWFwX3NldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1MTYgcmVnKQpAQCAtNDEwLDkgKzQxNiwxMyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMTExX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlyZXR1cm4gU09DQU1fTUFTVEVSIHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0xMTEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAogCQlTT0NBTV9EQVRBV0lEVEhfODsKKworCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtdDltMTExX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGxvbmcgZikKQEAgLTQzOCw3ICs0NDgsMjQgQEAKIAljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU2NShpY2QpOwogCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAwOworCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAwOworCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDE7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlicmVhazsKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOworCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgorCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOworCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDE7CiAJCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihpY2QpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNDUyLDggKzQ3OSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CiAJaW50IHJldDsKQEAgLTQ3MywxMyArNTAwLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5bTExMV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IE1UOU0xMTFfTUFYX0hFSUdIVCkKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSBNVDlNMTExX01BWF9IRUlHSFQ7Ci0JaWYgKGYtPmZtdC5waXgud2lkdGggPiBNVDlNMTExX01BWF9XSURUSCkKLQkJZi0+Zm10LnBpeC53aWR0aCA9IE1UOU0xMTFfTUFYX1dJRFRIOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJaWYgKHBpeC0+aGVpZ2h0ID4gTVQ5TTExMV9NQVhfSEVJR0hUKQorCQlwaXgtPmhlaWdodCA9IE1UOU0xMTFfTUFYX0hFSUdIVDsKKwlpZiAocGl4LT53aWR0aCA+IE1UOU0xMTFfTUFYX1dJRFRIKQorCQlwaXgtPndpZHRoID0gTVQ5TTExMV9NQVhfV0lEVEg7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU5Nyw4ICs2MjYsOCBAQAogCS5yZWxlYXNlCQk9IG10OW0xMTFfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMTExX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDltMTExX3N0b3BfY2FwdHVyZSwKLQkuc2V0X2ZtdF9jYXAJCT0gbXQ5bTExMV9zZXRfZm10X2NhcCwKLQkudHJ5X2ZtdF9jYXAJCT0gbXQ5bTExMV90cnlfZm10X2NhcCwKKwkuc2V0X2ZtdAkJPSBtdDltMTExX3NldF9mbXQsCisJLnRyeV9mbXQJCT0gbXQ5bTExMV90cnlfZm10LAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDltMTExX3F1ZXJ5X2J1c19wYXJhbSwKIAkuc2V0X2J1c19wYXJhbQkJPSBtdDltMTExX3NldF9idXNfcGFyYW0sCiAJLmNvbnRyb2xzCQk9IG10OW0xMTFfY29udHJvbHMsCkBAIC02MzQsMTggKzY2MywxNSBAQAogCiBzdGF0aWMgaW50IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXVuc2lnbmVkIGludCBkYXRhLCBnYWluOworCWludCBkYXRhOwogCiAJZGF0YSA9IHJlZ19yZWFkKEdMT0JBTF9HQUlOKTsKIAlpZiAoZGF0YSA+PSAwKQotCQlnYWluID0gKChkYXRhICYgKDEgPDwgMTApKSAqIDIpCi0JCQl8ICgoZGF0YSAmICgxIDw8IDkpKSAqIDIpCi0JCQl8IChkYXRhICYgMHgyZik7Ci0JZWxzZQotCQlnYWluID0gZGF0YTsKLQotCXJldHVybiBnYWluOworCQlyZXR1cm4gKGRhdGEgJiAweDJmKSAqICgxIDw8ICgoZGF0YSA+PiAxMCkgJiAxKSkgKgorCQkJKDEgPDwgKChkYXRhID4+IDkpICYgMSkpOworCXJldHVybiBkYXRhOwogfQorCiBzdGF0aWMgaW50IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgZ2FpbikKIHsKIAl1MTYgdmFsOwpAQCAtNjc5LDYgKzcwNSwyMyBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgb24pCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJaWYgKG9uKQorCQlyZXQgPSByZWdfc2V0KE9QRVJfTU9ERV9DVFJMLCBNVDlNMTExX09QTU9ERV9BVVRPV0hJVEVCQUxfRU4pOworCWVsc2UKKwkJcmV0ID0gcmVnX2NsZWFyKE9QRVJfTU9ERV9DVFJMLCBNVDlNMTExX09QTU9ERV9BVVRPV0hJVEVCQUxfRU4pOworCisJaWYgKCFyZXQpCisJCW10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UgPSBvbjsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewpAQCAtNzE1LDYgKzc1OCw5IEBACiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCQljdHJsLT52YWx1ZSA9IG10OW0xMTEtPmF1dG9leHBvc3VyZTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gbXQ5bTExMS0+YXV0b3doaXRlYmFsYW5jZTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzQ4LDYgKzc5NCw5IEBACiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCQlyZXQgPSAgbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGljZCwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2UoaWNkLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtNzY2LDYgKzgxNSw3IEBACiAJbXQ5bTExMV9zZXRfZmxpcChpY2QsIG10OW0xMTEtPnZmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CiAJbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oaWNkLCBpY2QtPmdhaW4pOwogCW10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShpY2QsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CisJbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShpY2QsIG10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UpOwogCXJldHVybiAwOwogfQogCkBAIC03OTgsNyArODQ4LDcgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGljZCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKCZpY2QtPmRldiwgIm10OW0xMTEgaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZpY2QtPmRldiwgIm10OW0xMXggaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgwOCw3ICs4NTgsNyBAQAogCiAJcmV0ID0gbXQ5bTExMV9kaXNhYmxlKGljZCk7CiAJaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJmljZC0+ZGV2LCAibXQ5bTExMSByZWxlYXNlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAibXQ5bTExeCByZWxlYXNlIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODQxLDI1ICs4OTEsMzAgQEAKIAlkYXRhID0gcmVnX3JlYWQoQ0hJUF9WRVJTSU9OKTsKIAogCXN3aXRjaCAoZGF0YSkgewotCWNhc2UgMHgxNDNhOgorCWNhc2UgMHgxNDNhOiAvKiBNVDlNMTExICovCiAJCW10OW0xMTEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMTExOwotCQlpY2QtPmZvcm1hdHMgPSBtdDltMTExX2NvbG91cl9mb3JtYXRzOwotCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDltMTExX2NvbG91cl9mb3JtYXRzKTsKKwkJYnJlYWs7CisJY2FzZSAweDE0OGM6IC8qIE1UOU0xMTIgKi8KKwkJbXQ5bTExMS0+bW9kZWwgPSBWNEwyX0lERU5UX01UOU0xMTI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7CiAJCWRldl9lcnIoJmljZC0+ZGV2LAotCQkJIk5vIE1UOU0xMTEgY2hpcCBkZXRlY3RlZCwgcmVnaXN0ZXIgcmVhZCAleFxuIiwgZGF0YSk7CisJCQkiTm8gTVQ5TTExeCBjaGlwIGRldGVjdGVkLCByZWdpc3RlciByZWFkICV4XG4iLCBkYXRhKTsKIAkJZ290byBlaTJjOwogCX0KIAotCWRldl9pbmZvKCZpY2QtPmRldiwgIkRldGVjdGVkIGEgTVQ5TTExMSBjaGlwIElEIDB4MTQzYVxuIik7CisJaWNkLT5mb3JtYXRzID0gbXQ5bTExMV9jb2xvdXJfZm9ybWF0czsKKwlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDltMTExX2NvbG91cl9mb3JtYXRzKTsKKworCWRldl9pbmZvKCZpY2QtPmRldiwgIkRldGVjdGVkIGEgTVQ5TTExeCBjaGlwIElEICV4XG4iLCBkYXRhKTsKIAogCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVpc2lzOwogCiAJbXQ5bTExMS0+YXV0b2V4cG9zdXJlID0gMTsKKwltdDltMTExLT5hdXRvd2hpdGViYWxhbmNlID0gMTsKIAogCW10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkID0gMTsKIAltdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSA9IDE7CkBAIC04ODksNyArOTQ0LDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKCFpY2wpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMTExIGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMTF4IGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05NjgsNiArMTAyMyw2IEBACiBtb2R1bGVfaW5pdChtdDltMTExX21vZF9pbml0KTsKIG1vZHVsZV9leGl0KG10OW0xMTFfbW9kX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvbiBNVDlNMTExIENhbWVyYSBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWljcm9uIE1UOU0xMTEvTVQ5TTExMiBDYW1lcmEgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSmFyem1payIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTlkNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMKQEAgLTAsMCArMSw3MzYgQEAKKy8qCisgKiBEcml2ZXIgZm9yIE1UOVQwMzEgQ01PUyBJbWFnZSBTZW5zb3IgZnJvbSBNaWNyb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEd1ZW5uYWRpIExpYWtob3ZldHNraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyA8bGdAZGVueC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisKKy8qIG10OXQwMzEgaTJjIGFkZHJlc3MgMHg1ZAorICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8KKyAqIGFuZCBjYWxsIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkgKi8KKworLyogbXQ5dDAzMSBzZWxlY3RlZCByZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTVQ5VDAzMV9DSElQX1ZFUlNJT04JCTB4MDAKKyNkZWZpbmUgTVQ5VDAzMV9ST1dfU1RBUlQJCTB4MDEKKyNkZWZpbmUgTVQ5VDAzMV9DT0xVTU5fU1RBUlQJCTB4MDIKKyNkZWZpbmUgTVQ5VDAzMV9XSU5ET1dfSEVJR0hUCQkweDAzCisjZGVmaW5lIE1UOVQwMzFfV0lORE9XX1dJRFRICQkweDA0CisjZGVmaW5lIE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOS0lORwkweDA1CisjZGVmaW5lIE1UOVQwMzFfVkVSVElDQUxfQkxBTktJTkcJMHgwNgorI2RlZmluZSBNVDlUMDMxX09VVFBVVF9DT05UUk9MCQkweDA3CisjZGVmaW5lIE1UOVQwMzFfU0hVVFRFUl9XSURUSF9VUFBFUgkweDA4CisjZGVmaW5lIE1UOVQwMzFfU0hVVFRFUl9XSURUSAkJMHgwOQorI2RlZmluZSBNVDlUMDMxX1BJWEVMX0NMT0NLX0NPTlRST0wJMHgwYQorI2RlZmluZSBNVDlUMDMxX0ZSQU1FX1JFU1RBUlQJCTB4MGIKKyNkZWZpbmUgTVQ5VDAzMV9TSFVUVEVSX0RFTEFZCQkweDBjCisjZGVmaW5lIE1UOVQwMzFfUkVTRVQJCQkweDBkCisjZGVmaW5lIE1UOVQwMzFfUkVBRF9NT0RFXzEJCTB4MWUKKyNkZWZpbmUgTVQ5VDAzMV9SRUFEX01PREVfMgkJMHgyMAorI2RlZmluZSBNVDlUMDMxX1JFQURfTU9ERV8zCQkweDIxCisjZGVmaW5lIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERQkweDIyCisjZGVmaW5lIE1UOVQwMzFfQ09MVU1OX0FERFJFU1NfTU9ERQkweDIzCisjZGVmaW5lIE1UOVQwMzFfR0xPQkFMX0dBSU4JCTB4MzUKKyNkZWZpbmUgTVQ5VDAzMV9DSElQX0VOQUJMRQkJMHhGOAorCisjZGVmaW5lIE1UOVQwMzFfTUFYX0hFSUdIVAkJMTUzNgorI2RlZmluZSBNVDlUMDMxX01BWF9XSURUSAkJMjA0OAorI2RlZmluZSBNVDlUMDMxX01JTl9IRUlHSFQJCTIKKyNkZWZpbmUgTVQ5VDAzMV9NSU5fV0lEVEgJCTIKKyNkZWZpbmUgTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LCTE0MgorI2RlZmluZSBNVDlUMDMxX1ZFUlRJQ0FMX0JMQU5LCQkyNQorI2RlZmluZSBNVDlUMDMxX0NPTFVNTl9TS0lQCQkzMgorI2RlZmluZSBNVDlUMDMxX1JPV19TS0lQCQkyMAorCisjZGVmaW5lIE1UOVQwMzFfQlVTX1BBUkFNCShTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAlcCisJU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwJXAorCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CVwKKwlTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfMTApCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDl0MDMxX2NvbG91cl9mb3JtYXRzW10gPSB7CisJeworCQkubmFtZQkJPSAiQmF5ZXIgKHNSR0IpIDEwIGJpdCIsCisJCS5kZXB0aAkJPSAxMCwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwl9Cit9OworCitzdHJ1Y3QgbXQ5dDAzMSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlUMDMxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCisJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CisJdTE2IHhza2lwOworCXUxNiB5c2tpcDsKK307CisKK3N0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHU4IHJlZykKK3sKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBtdDl0MDMxLT5jbGllbnQ7CisJczMyIGRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOworCXJldHVybiBkYXRhIDwgMCA/IGRhdGEgOiBzd2FiMTYoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1OCByZWcsCisJCSAgICAgY29uc3QgdTE2IGRhdGEpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShtdDl0MDMxLT5jbGllbnQsIHJlZywgc3dhYjE2KGRhdGEpKTsKK30KKworc3RhdGljIGludCByZWdfc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1OCByZWcsCisJCSAgIGNvbnN0IHUxNiBkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdfcmVhZChpY2QsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHJlZ193cml0ZShpY2QsIHJlZywgcmV0IHwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcmVnX2NsZWFyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1OCByZWcsCisJCSAgICAgY29uc3QgdTE2IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ19yZWFkKGljZCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gcmVnX3dyaXRlKGljZCwgcmVnLCByZXQgJiB+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NodXR0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHUzMiBkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1NIVVRURVJfV0lEVEhfVVBQRVIsIGRhdGEgPj4gMTYpOworCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1NIVVRURVJfV0lEVEgsIGRhdGEgJiAweGZmZmYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZXRfc2h1dHRlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTMyICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdfcmVhZChpY2QsIE1UOVQwMzFfU0hVVFRFUl9XSURUSF9VUFBFUik7CisJKmRhdGEgPSByZXQgPDwgMTY7CisKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHJlZ19yZWFkKGljZCwgTVQ5VDAzMV9TSFVUVEVSX1dJRFRIKTsKKwkqZGF0YSB8PSByZXQgJiAweGZmZmY7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCWludCByZXQ7CisKKwkvKiBEaXNhYmxlIGNoaXAgb3V0cHV0LCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCisJZGV2X2RiZyhpY2QtPnZkZXYtPnBhcmVudCwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JFU0VULCAxKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUkVTRVQsIDApOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMyk7CisKKwlyZXR1cm4gcmV0ID49IDAgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJLyogRGlzYWJsZSB0aGUgY2hpcCAqLworCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KKwlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLworCWlmIChyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKSA8IDApCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwkvKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIHF1ZXJpZWQgb3VyIHBhcmFtZXRlcnMsIGNoZWNrIGFueXdheSAqLworCWlmIChmbGFncyAmIH5NVDlUMDMxX0JVU19QQVJBTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQorCQlyZWdfc2V0KGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOworCWVsc2UKKwkJcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10OXQwMzFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5dDAzMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIE1UOVQwMzFfQlVTX1BBUkFNKTsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlpbnQgcmV0OworCWNvbnN0IHUxNiBoYmxhbmsgPSBNVDlUMDMxX0hPUklaT05UQUxfQkxBTkssCisJCXZibGFuayA9IE1UOVQwMzFfVkVSVElDQUxfQkxBTks7CisJdTE2IHhiaW4sIHhza2lwID0gbXQ5dDAzMS0+eHNraXAsIHliaW4sIHlza2lwID0gbXQ5dDAzMS0+eXNraXAsCisJCXdpZHRoID0gcmVjdC0+d2lkdGggKiB4c2tpcCwgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0ICogeXNraXA7CisKKwlpZiAocGl4Zm10KSB7CisJCS8qIFNfRk1UIC0gdXNlIGJpbm5pbmcgYW5kIHNraXBwaW5nIGZvciBzY2FsaW5nLCByZWNhbGN1bGF0ZSAqLworCQkvKiBJcyB0aGlzIG1vcmUgb3B0aW1hbCB0aGFuIGp1c3QgYSBkaXZpc2lvbj8gKi8KKwkJZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKKwkJCWlmIChyZWN0LT53aWR0aCAqIHhza2lwIDw9IGljZC0+d2lkdGhfbWF4KQorCQkJCWJyZWFrOworCisJCWZvciAoeXNraXAgPSA4OyB5c2tpcCA+IDE7IHlza2lwLS0pCisJCQlpZiAocmVjdC0+aGVpZ2h0ICogeXNraXAgPD0gaWNkLT5oZWlnaHRfbWF4KQorCQkJCWJyZWFrOworCisJCXdpZHRoID0gcmVjdC0+d2lkdGggKiB4c2tpcDsKKwkJaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0ICogeXNraXA7CisKKwkJZGV2X2RiZygmaWNkLT5kZXYsICJ4c2tpcCAldSwgd2lkdGggJXUsIHlza2lwICV1LCBoZWlnaHQgJXVcbiIsCisJCQl4c2tpcCwgd2lkdGgsIHlza2lwLCBoZWlnaHQpOworCX0KKworCXhiaW4gPSBtaW4oeHNraXAsICh1MTYpMyk7CisJeWJpbiA9IG1pbih5c2tpcCwgKHUxNikzKTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgZnJhbWUgbGltaXRzICovCisJaWYgKHJlY3QtPmxlZnQgKyB3aWR0aCA+IGljZC0+d2lkdGhfbWF4KQorCQlyZWN0LT5sZWZ0ID0gKGljZC0+d2lkdGhfbWF4IC0gd2lkdGgpIC8gMjsKKworCWlmIChyZWN0LT50b3AgKyBoZWlnaHQgPiBpY2QtPmhlaWdodF9tYXgpCisJCXJlY3QtPnRvcCA9IChpY2QtPmhlaWdodF9tYXggLSBoZWlnaHQpIC8gMjsKKworCS8qIENvdWxkIGp1c3QgZG8gcm91bmR1cChyZWN0LT5sZWZ0LCBbeHldYmluKTsgYnV0IHRoaXMgaXMgY2hlYXBlciAqLworCXN3aXRjaCAoeGJpbikgeworCWNhc2UgMjoKKwkJcmVjdC0+bGVmdCA9IChyZWN0LT5sZWZ0ICsgMSkgJiB+MTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWN0LT5sZWZ0ID0gcm91bmR1cChyZWN0LT5sZWZ0LCAzKTsKKwl9CisKKwlzd2l0Y2ggKHliaW4pIHsKKwljYXNlIDI6CisJCXJlY3QtPnRvcCA9IChyZWN0LT50b3AgKyAxKSAmIH4xOworCQlicmVhazsKKwljYXNlIDM6CisJCXJlY3QtPnRvcCA9IHJvdW5kdXAocmVjdC0+dG9wLCAzKTsKKwl9CisKKwkvKiBCbGFua2luZyBhbmQgc3RhcnQgdmFsdWVzIC0gZGVmYXVsdC4uLiAqLworCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOS0lORywgaGJsYW5rKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfVkVSVElDQUxfQkxBTktJTkcsIHZibGFuayk7CisKKwlpZiAocGl4Zm10KSB7CisJCS8qIEJpbm5pbmcsIHNraXBwaW5nICovCisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX0FERFJFU1NfTU9ERSwKKwkJCQkJKCh4YmluIC0gMSkgPDwgNCkgfCAoeHNraXAgLSAxKSk7CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERSwKKwkJCQkJKCh5YmluIC0gMSkgPDwgNCkgfCAoeXNraXAgLSAxKSk7CisJfQorCWRldl9kYmcoJmljZC0+ZGV2LCAibmV3IGxlZnQgJXUsIHRvcCAldVxuIiwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKworCS8qIFRoZSBjYWxsZXIgcHJvdmlkZXMgYSBzdXBwb3J0ZWQgZm9ybWF0LCBhcyBndWFyYW50ZWVkIGJ5CisJICogaWNkLT50cnlfZm10X2NhcCgpLCBzb2NfY2FtZXJhX3NfY3JvcCgpIGFuZCBzb2NfY2FtZXJhX2Nyb3BjYXAoKSAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1dJTkRPV19XSURUSCwgd2lkdGggLSAxKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfV0lORE9XX0hFSUdIVCwKKwkJCQloZWlnaHQgKyBpY2QtPnlfc2tpcF90b3AgLSAxKTsKKwlpZiAocmV0ID49IDAgJiYgbXQ5dDAzMS0+YXV0b2V4cG9zdXJlKSB7CisJCXJldCA9IHNldF9zaHV0dGVyKGljZCwgaGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQljb25zdCB1MzIgc2h1dHRlcl9tYXggPSBNVDlUMDMxX01BWF9IRUlHSFQgKyB2Ymxhbms7CisJCQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsID0KKwkJCQlzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsCisJCQkJCQkgICAgICBWNEwyX0NJRF9FWFBPU1VSRSk7CisJCQlpY2QtPmV4cG9zdXJlID0gKHNodXR0ZXJfbWF4IC8gMiArIChoZWlnaHQgKworCQkJCQkgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rIC0gMSkgKgorCQkJCQkgKHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW0pKSAvCisJCQkJc2h1dHRlcl9tYXggKyBxY3RybC0+bWluaW11bTsKKwkJfQorCX0KKworCWlmICghcmV0ICYmIHBpeGZtdCkgeworCQltdDl0MDMxLT54c2tpcCA9IHhza2lwOworCQltdDl0MDMxLT55c2tpcCA9IHlza2lwOworCX0KKworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlpZiAocGl4LT5oZWlnaHQgPCBpY2QtPmhlaWdodF9taW4pCisJCXBpeC0+aGVpZ2h0ID0gaWNkLT5oZWlnaHRfbWluOworCWlmIChwaXgtPmhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKKwkJcGl4LT5oZWlnaHQgPSBpY2QtPmhlaWdodF9tYXg7CisJaWYgKHBpeC0+d2lkdGggPCBpY2QtPndpZHRoX21pbikKKwkJcGl4LT53aWR0aCA9IGljZC0+d2lkdGhfbWluOworCWlmIChwaXgtPndpZHRoID4gaWNkLT53aWR0aF9tYXgpCisJCXBpeC0+d2lkdGggPSBpY2QtPndpZHRoX21heDsKKworCXBpeC0+d2lkdGggJj0gfjB4MDE7IC8qIGhhcyB0byBiZSBldmVuICovCisJcGl4LT5oZWlnaHQgJj0gfjB4MDE7IC8qIGhhcyB0byBiZSBldmVuICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX2dldF9jaGlwX2lkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmlkKQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwlpZiAoaWQtPm1hdGNoX3R5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpZC0+bWF0Y2hfY2hpcCAhPSBtdDl0MDMxLT5jbGllbnQtPmFkZHIpCisJCXJldHVybiAtRU5PREVWOworCisJaWQtPmlkZW50CT0gbXQ5dDAzMS0+bW9kZWw7CisJaWQtPnJldmlzaW9uCT0gMDsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBtdDl0MDMxX2dldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwlpZiAocmVnLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlZy0+bWF0Y2hfY2hpcCAhPSBtdDl0MDMxLT5jbGllbnQtPmFkZHIpCisJCXJldHVybiAtRU5PREVWOworCisJcmVnLT52YWwgPSByZWdfcmVhZChpY2QsIHJlZy0+cmVnKTsKKworCWlmIChyZWctPnZhbCA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwlpZiAocmVnLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlZy0+bWF0Y2hfY2hpcCAhPSBtdDl0MDMxLT5jbGllbnQtPmFkZHIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHJlZ193cml0ZShpY2QsIHJlZy0+cmVnLCByZWctPnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbXQ5dDAzMV9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBWZXJ0aWNhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiR2FpbiIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxMjcsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gNjQsCisJCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCisJfSwgeworCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lCQk9ICJFeHBvc3VyZSIsCisJCS5taW5pbXVtCT0gMSwKKwkJLm1heGltdW0JPSAyNTUsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMjU1LAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAorCX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8sCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJBdXRvbWF0aWMgRXhwb3N1cmUiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAxLAorCX0KK307CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBtdDl0MDMxX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CitzdGF0aWMgaW50IG10OXQwMzFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgbXQ5dDAzMV9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCQk9IG10OXQwMzFfdmlkZW9fcHJvYmUsCisJLnJlbW92ZQkJCT0gbXQ5dDAzMV92aWRlb19yZW1vdmUsCisJLmluaXQJCQk9IG10OXQwMzFfaW5pdCwKKwkucmVsZWFzZQkJPSBtdDl0MDMxX3JlbGVhc2UsCisJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5dDAzMV9zdGFydF9jYXB0dXJlLAorCS5zdG9wX2NhcHR1cmUJCT0gbXQ5dDAzMV9zdG9wX2NhcHR1cmUsCisJLnNldF9mbXQJCT0gbXQ5dDAzMV9zZXRfZm10LAorCS50cnlfZm10CQk9IG10OXQwMzFfdHJ5X2ZtdCwKKwkuc2V0X2J1c19wYXJhbQkJPSBtdDl0MDMxX3NldF9idXNfcGFyYW0sCisJLnF1ZXJ5X2J1c19wYXJhbQk9IG10OXQwMzFfcXVlcnlfYnVzX3BhcmFtLAorCS5jb250cm9scwkJPSBtdDl0MDMxX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShtdDl0MDMxX2NvbnRyb2xzKSwKKwkuZ2V0X2NvbnRyb2wJCT0gbXQ5dDAzMV9nZXRfY29udHJvbCwKKwkuc2V0X2NvbnRyb2wJCT0gbXQ5dDAzMV9zZXRfY29udHJvbCwKKwkuZ2V0X2NoaXBfaWQJCT0gbXQ5dDAzMV9nZXRfY2hpcF9pZCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdldF9yZWdpc3RlcgkJPSBtdDl0MDMxX2dldF9yZWdpc3RlciwKKwkuc2V0X3JlZ2lzdGVyCQk9IG10OXQwMzFfc2V0X3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IG10OXQwMzFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlpbnQgZGF0YTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlkYXRhID0gcmVnX3JlYWQoaWNkLCBNVDlUMDMxX1JFQURfTU9ERV8yKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gISEoZGF0YSAmIDB4ODAwMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWRhdGEgPSByZWdfcmVhZChpY2QsIE1UOVQwMzFfUkVBRF9NT0RFXzIpOworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAhIShkYXRhICYgMHg0MDAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgorCQljdHJsLT52YWx1ZSA9IG10OXQwMzEtPmF1dG9leHBvc3VyZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOworCWludCBkYXRhOworCisJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoJm10OXQwMzFfb3BzLCBjdHJsLT5pZCk7CisKKwlpZiAoIXFjdHJsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlkYXRhID0gcmVnX3NldChpY2QsIE1UOVQwMzFfUkVBRF9NT0RFXzIsIDB4ODAwMCk7CisJCWVsc2UKKwkJCWRhdGEgPSByZWdfY2xlYXIoaWNkLCBNVDlUMDMxX1JFQURfTU9ERV8yLCAweDgwMDApOworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJaWYgKGN0cmwtPnZhbHVlKQorCQkJZGF0YSA9IHJlZ19zZXQoaWNkLCBNVDlUMDMxX1JFQURfTU9ERV8yLCAweDQwMDApOworCQllbHNlCisJCQlkYXRhID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9SRUFEX01PREVfMiwgMHg0MDAwKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKGN0cmwtPnZhbHVlID4gcWN0cmwtPm1heGltdW0gfHwgY3RybC0+dmFsdWUgPCBxY3RybC0+bWluaW11bSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBTZWUgRGF0YXNoZWV0IFRhYmxlIDcsIEdhaW4gc2V0dGluZ3MuICovCisJCWlmIChjdHJsLT52YWx1ZSA8PSBxY3RybC0+ZGVmYXVsdF92YWx1ZSkgeworCQkJLyogUGFjayBpdCBpbnRvIDAuLjEgc3RlcCAwLjEyNSwgcmVnaXN0ZXIgdmFsdWVzIDAuLjggKi8KKwkJCXVuc2lnbmVkIGxvbmcgcmFuZ2UgPSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIHFjdHJsLT5taW5pbXVtOworCQkJZGF0YSA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKiA4ICsgcmFuZ2UgLyAyKSAvIHJhbmdlOworCisJCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiAlZFxuIiwgZGF0YSk7CisJCQlkYXRhID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CisJCQlpZiAoZGF0YSA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCX0gZWxzZSB7CisJCQkvKiBQYWNrIGl0IGludG8gMS4xMjUuLjE1IHZhcmlhYmxlIHN0ZXAsIHJlZ2lzdGVyIHZhbHVlcyA5Li42NyAqLworCQkJLyogV2UgYXNzdW1lIHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPmRlZmF1bHRfdmFsdWUgLSAxID4gMCAqLworCQkJdW5zaWduZWQgbG9uZyByYW5nZSA9IHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPmRlZmF1bHRfdmFsdWUgLSAxOworCQkJdW5zaWduZWQgbG9uZyBnYWluID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5kZWZhdWx0X3ZhbHVlIC0gMSkgKgorCQkJCQkgICAgICAgMTExICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgOTsKKworCQkJaWYgKGdhaW4gPD0gMzIpCisJCQkJZGF0YSA9IGdhaW47CisJCQllbHNlIGlmIChnYWluIDw9IDY0KQorCQkJCWRhdGEgPSAoKGdhaW4gLSAzMikgKiAxNiArIDE2KSAvIDMyICsgODA7CisJCQllbHNlCisJCQkJZGF0YSA9ICgoZ2FpbiAtIDY0KSAqIDcgKyAyOCkgLyA1NiArIDk2OworCisJCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVkXG4iLAorCQkJCSByZWdfcmVhZChpY2QsIE1UOVQwMzFfR0xPQkFMX0dBSU4pLCBkYXRhKTsKKwkJCWRhdGEgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX0dMT0JBTF9HQUlOLCBkYXRhKTsKKwkJCWlmIChkYXRhIDwgMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCS8qIFN1Y2Nlc3MgKi8KKwkJaWNkLT5nYWluID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCS8qIG10OXQwMzEgaGFzIG1heGltdW0gPT0gZGVmYXVsdCAqLworCQlpZiAoY3RybC0+dmFsdWUgPiBxY3RybC0+bWF4aW11bSB8fCBjdHJsLT52YWx1ZSA8IHFjdHJsLT5taW5pbXVtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgeworCQkJY29uc3QgdW5zaWduZWQgbG9uZyByYW5nZSA9IHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPm1pbmltdW07CisJCQljb25zdCB1MzIgc2h1dHRlciA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+bWluaW11bSkgKiAxMDQ4ICsKKwkJCQkJICAgICByYW5nZSAvIDIpIC8gcmFuZ2UgKyAxOworCQkJdTMyIG9sZDsKKworCQkJZ2V0X3NodXR0ZXIoaWNkLCAmb2xkKTsKKwkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBzaHV0dGVyIHdpZHRoIGZyb20gJXUgdG8gJXVcbiIsCisJCQkJb2xkLCBzaHV0dGVyKTsKKwkJCWlmIChzZXRfc2h1dHRlcihpY2QsIHNodXR0ZXIpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWljZC0+ZXhwb3N1cmUgPSBjdHJsLT52YWx1ZTsKKwkJCW10OXQwMzEtPmF1dG9leHBvc3VyZSA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgorCQlpZiAoY3RybC0+dmFsdWUpIHsKKwkJCWNvbnN0IHUxNiB2YmxhbmsgPSBNVDlUMDMxX1ZFUlRJQ0FMX0JMQU5LOworCQkJY29uc3QgdTMyIHNodXR0ZXJfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUICsgdmJsYW5rOworCQkJaWYgKHNldF9zaHV0dGVyKGljZCwgaWNkLT5oZWlnaHQgKworCQkJCQlpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmspIDwgMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7CisJCQlpY2QtPmV4cG9zdXJlID0gKHNodXR0ZXJfbWF4IC8gMiArIChpY2QtPmhlaWdodCArCisJCQkJCSBpY2QtPnlfc2tpcF90b3AgKyB2YmxhbmsgLSAxKSAqCisJCQkJCSAocWN0cmwtPm1heGltdW0gLSBxY3RybC0+bWluaW11bSkpIC8KKwkJCQlzaHV0dGVyX21heCArIHFjdHJsLT5taW5pbXVtOworCQkJbXQ5dDAzMS0+YXV0b2V4cG9zdXJlID0gMTsKKwkJfSBlbHNlCisJCQltdDl0MDMxLT5hdXRvZXhwb3N1cmUgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CisgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lICovCitzdGF0aWMgaW50IG10OXQwMzFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlzMzIgZGF0YTsKKwlpbnQgcmV0OworCisJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KKwkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLworCWlmICghaWNkLT5kZXYucGFyZW50IHx8CisJICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEVuYWJsZSB0aGUgY2hpcCAqLworCWRhdGEgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX0NISVBfRU5BQkxFLCAxKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIndyaXRlOiAlZFxuIiwgZGF0YSk7CisKKwkvKiBSZWFkIG91dCB0aGUgY2hpcCB2ZXJzaW9uIHJlZ2lzdGVyICovCisJZGF0YSA9IHJlZ19yZWFkKGljZCwgTVQ5VDAzMV9DSElQX1ZFUlNJT04pOworCisJc3dpdGNoIChkYXRhKSB7CisJY2FzZSAweDE2MjE6CisJCW10OXQwMzEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlUMDMxOworCQlpY2QtPmZvcm1hdHMgPSBtdDl0MDMxX2NvbG91cl9mb3JtYXRzOworCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl0MDMxX2NvbG91cl9mb3JtYXRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmaWNkLT5kZXYsCisJCQkiTm8gTVQ5VDAzMSBjaGlwIGRldGVjdGVkLCByZWdpc3RlciByZWFkICV4XG4iLCBkYXRhKTsKKwkJZ290byBlaTJjOworCX0KKworCWRldl9pbmZvKCZpY2QtPmRldiwgIkRldGVjdGVkIGEgTVQ5VDAzMSBjaGlwIElEICV4XG4iLCBkYXRhKTsKKworCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIG1vZGVsLCB3ZSBjYW4gc3RhcnQgdmlkZW8gKi8KKwlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CisJaWYgKHJldCkKKwkJZ290byBldnN0YXJ0OworCisJcmV0dXJuIDA7CisKK2V2c3RhcnQ6CitlaTJjOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10OXQwMzFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlZpZGVvICV4IHJlbW92ZWQ6ICVwLCAlcFxuIiwgbXQ5dDAzMS0+Y2xpZW50LT5hZGRyLAorCQlpY2QtPmRldi5wYXJlbnQsIGljZC0+dmRldik7CisJc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzE7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAoIWljbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOVQwMzEgZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwKKwkJCSAiSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IEkyQ19GVU5DX1NNQlVTX1dPUkRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltdDl0MDMxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG10OXQwMzEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10OXQwMzEpCisJCXJldHVybiAtRU5PTUVNOworCisJbXQ5dDAzMS0+Y2xpZW50ID0gY2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIG10OXQwMzEpOworCisJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLworCWljZCA9ICZtdDl0MDMxLT5pY2Q7CisJaWNkLT5vcHMJPSAmbXQ5dDAzMV9vcHM7CisJaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OworCWljZC0+eF9taW4JPSBNVDlUMDMxX0NPTFVNTl9TS0lQOworCWljZC0+eV9taW4JPSBNVDlUMDMxX1JPV19TS0lQOworCWljZC0+eF9jdXJyZW50CT0gaWNkLT54X21pbjsKKwlpY2QtPnlfY3VycmVudAk9IGljZC0+eV9taW47CisJaWNkLT53aWR0aF9taW4JPSBNVDlUMDMxX01JTl9XSURUSDsKKwlpY2QtPndpZHRoX21heAk9IE1UOVQwMzFfTUFYX1dJRFRIOworCWljZC0+aGVpZ2h0X21pbgk9IE1UOVQwMzFfTUlOX0hFSUdIVDsKKwlpY2QtPmhlaWdodF9tYXgJPSBNVDlUMDMxX01BWF9IRUlHSFQ7CisJaWNkLT55X3NraXBfdG9wCT0gMDsKKwlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7CisJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKKwkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KKwltdDl0MDMxLT5hdXRvZXhwb3N1cmUgPSAxOworCisJbXQ5dDAzMS0+eHNraXAgPSAxOworCW10OXQwMzEtPnlza2lwID0gMTsKKworCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CisJaWYgKHJldCkKKwkJZ290byBlaXNkcjsKKworCXJldHVybiAwOworCitlaXNkcjoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShtdDl0MDMxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OXQwMzFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm10OXQwMzEtPmljZCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUobXQ5dDAzMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG10OXQwMzFfaWRbXSA9IHsKKwl7ICJtdDl0MDMxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtdDl0MDMxX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG10OXQwMzFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdDl0MDMxIiwKKwl9LAorCS5wcm9iZQkJPSBtdDl0MDMxX3Byb2JlLAorCS5yZW1vdmUJCT0gbXQ5dDAzMV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gbXQ5dDAzMV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10OXQwMzFfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm10OXQwMzFfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdDl0MDMxX21vZF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm10OXQwMzFfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG10OXQwMzFfbW9kX2luaXQpOworbW9kdWxlX2V4aXQobXQ5dDAzMV9tb2RfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTWljcm9uIE1UOVQwMzEgQ2FtZXJhIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxsZ0BkZW54LmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwppbmRleCAyNTg0MjAxLi4xNGE1ZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwpAQCAtMjczLDYgKzI3Myw3IEBACiAJCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKIAlpbnQgcmV0OwogCXUxNiBwaXhjbGsgPSAwOwpAQCAtMjk2LDYgKzI5Nyw4IEBACiAJCW10OXYwMjItPmRhdGF3aWR0aCA9IHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzggPyA4IDogMTA7CiAJfQogCisJZmxhZ3MgPSBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKKwogCWlmIChmbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORykKIAkJcGl4Y2xrIHw9IDB4MTA7CiAKQEAgLTMzNywxNCArMzQwLDE0IEBACiAJCXdpZHRoX2ZsYWc7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKIAlpbnQgcmV0OwogCiAJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlciBjYWxsIHRvCi0JICogaWNkLT50cnlfZm10X2NhcCgpLCBkYXRhd2lkdGggaXMgZnJvbSBvdXIgc3VwcG9ydGVkIGZvcm1hdCBsaXN0ICovCisJICogaWNkLT50cnlfZm10KCksIGRhdGF3aWR0aCBpcyBmcm9tIG91ciBzdXBwb3J0ZWQgZm9ybWF0IGxpc3QgKi8KIAlzd2l0Y2ggKHBpeGZtdCkgewogCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgpAQCAtNDAwLDE4ICs0MDMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgbXQ5djAyMl90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT5mbXQucGl4LmhlaWdodCA8IDMyICsgaWNkLT55X3NraXBfdG9wKQotCQlmLT5mbXQucGl4LmhlaWdodCA9IDMyICsgaWNkLT55X3NraXBfdG9wOwotCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IDQ4MCArIGljZC0+eV9za2lwX3RvcCkKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA0ODAgKyBpY2QtPnlfc2tpcF90b3A7Ci0JaWYgKGYtPmZtdC5waXgud2lkdGggPCA0OCkKLQkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4OwotCWlmIChmLT5mbXQucGl4LndpZHRoID4gNzUyKQotCQlmLT5mbXQucGl4LndpZHRoID0gNzUyOwotCWYtPmZtdC5waXgud2lkdGggJj0gfjB4MDM7IC8qID8gKi8KKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCWlmIChwaXgtPmhlaWdodCA8IDMyICsgaWNkLT55X3NraXBfdG9wKQorCQlwaXgtPmhlaWdodCA9IDMyICsgaWNkLT55X3NraXBfdG9wOworCWlmIChwaXgtPmhlaWdodCA+IDQ4MCArIGljZC0+eV9za2lwX3RvcCkKKwkJcGl4LT5oZWlnaHQgPSA0ODAgKyBpY2QtPnlfc2tpcF90b3A7CisJaWYgKHBpeC0+d2lkdGggPCA0OCkKKwkJcGl4LT53aWR0aCA9IDQ4OworCWlmIChwaXgtPndpZHRoID4gNzUyKQorCQlwaXgtPndpZHRoID0gNzUyOworCXBpeC0+d2lkdGggJj0gfjB4MDM7IC8qID8gKi8KIAogCXJldHVybiAwOwogfQpAQCAtNTM4LDggKzU0Myw4IEBACiAJLnJlbGVhc2UJCT0gbXQ5djAyMl9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXYwMjJfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXYwMjJfc3RvcF9jYXB0dXJlLAotCS5zZXRfZm10X2NhcAkJPSBtdDl2MDIyX3NldF9mbXRfY2FwLAotCS50cnlfZm10X2NhcAkJPSBtdDl2MDIyX3RyeV9mbXRfY2FwLAorCS5zZXRfZm10CQk9IG10OXYwMjJfc2V0X2ZtdCwKKwkudHJ5X2ZtdAkJPSBtdDl2MDIyX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5djAyMl9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDl2MDIyX3F1ZXJ5X2J1c19wYXJhbSwKIAkuY29udHJvbHMJCT0gbXQ5djAyMl9jb250cm9scywKQEAgLTY5MCw2ICs2OTUsNyBAQAogc3RhdGljIGludCBtdDl2MDIyX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OwogCkBAIC03MjUsNyArNzMxLDcgQEAKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERSwgNCB8IDB4MTEpOwogCQltdDl2MDIyLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5VjAyMklYN0FUQzsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5djAyMl9jb2xvdXJfZm9ybWF0czsKLQkJaWYgKG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCiAJCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX2NvbG91cl9mb3JtYXRzKTsKIAkJZWxzZQogCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CkBAIC03MzMsNyArNzM5LDcgQEAKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERSwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCiAJCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0cyk7CiAJCWVsc2UKIAkJCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwpAQCAtNzYwLDggKzc2Niw4IEBACiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKIAogCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gJXggcmVtb3ZlZDogJXAsICVwXG4iLCBtdDl2MDIyLT5jbGllbnQtPmFkZHIsCi0JCW10OXYwMjItPmljZC5kZXYucGFyZW50LCBtdDl2MDIyLT5pY2QudmRldik7Ci0Jc29jX2NhbWVyYV92aWRlb19zdG9wKCZtdDl2MDIyLT5pY2QpOworCQlpY2QtPmRldi5wYXJlbnQsIGljZC0+dmRldik7CisJc29jX2NhbWVyYV92aWRlb19zdG9wKGljZCk7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5djAyMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS1kbWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0tZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ1NGI4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0tZG1hLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qCisgKiBkcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLWRtYS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBDb250YWN0OiBTYWthcmkgQWlsdXMgPHNha2FyaS5haWx1c0Bub2tpYS5jb20+CisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIEFuZHkgTG93ZSA8c291cmNlQG12aXN0YS5jb20+IGFuZAorICogICAgICAgICAgICAgICAgICAgIERhdmlkIENvaGVuIDxkYXZpZC5jb2hlbkBpbmR0Lm9yZy5icj4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlICJvbWFwMjR4eGNhbS5oIgorCisvKgorICoKKyAqIERNQSBoYXJkd2FyZS4KKyAqCisgKi8KKworLyogQWNrIGFsbCBpbnRlcnJ1cHQgb24gQ1NSIGFuZCBJUlFTVEFUVVNfTDAgKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2RtYWh3X2Fja19hbGwodW5zaWduZWQgbG9uZyBiYXNlKQoreworCXUzMiBjc3I7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NBTURNQV9DSEFOTkVMUzsgKytpKSB7CisJCWNzciA9IG9tYXAyNHh4Y2FtX3JlZ19pbihiYXNlLCBDQU1ETUFfQ1NSKGkpKTsKKwkJLyogYWNrIGludGVycnVwdCBpbiBDU1IgKi8KKwkJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ1NSKGkpLCBjc3IpOworCX0KKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9JUlFTVEFUVVNfTDAsIDB4Zik7Cit9CisKKy8qIEFjayBkbWFjaCBvbiBDU1IgYW5kIElSUVNUQVRVU19MMCAqLworc3RhdGljIHUzMiBvbWFwMjR4eGNhbV9kbWFod19hY2tfY2godW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgZG1hY2gpCit7CisJdTMyIGNzcjsKKworCWNzciA9IG9tYXAyNHh4Y2FtX3JlZ19pbihiYXNlLCBDQU1ETUFfQ1NSKGRtYWNoKSk7CisJLyogYWNrIGludGVycnVwdCBpbiBDU1IgKi8KKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DU1IoZG1hY2gpLCBjc3IpOworCS8qIGFjayBpbnRlcnJ1cHQgaW4gSVJRU1RBVFVTICovCisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfSVJRU1RBVFVTX0wwLCAoMSA8PCBkbWFjaCkpOworCisJcmV0dXJuIGNzcjsKK30KKworc3RhdGljIGludCBvbWFwMjR4eGNhbV9kbWFod19ydW5uaW5nKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGRtYWNoKQoreworCXJldHVybiBvbWFwMjR4eGNhbV9yZWdfaW4oYmFzZSwgQ0FNRE1BX0NDUihkbWFjaCkpICYgQ0FNRE1BX0NDUl9FTkFCTEU7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2RtYWh3X3RyYW5zZmVyX3NldHVwKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGRtYWNoLAorCQkJCQkgICAgIGRtYV9hZGRyX3Qgc3RhcnQsIHUzMiBsZW4pCit7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ0NSKGRtYWNoKSwKKwkJCSAgICBDQU1ETUFfQ0NSX1NFTF9TUkNfRFNUX1NZTkMKKwkJCSAgICB8IENBTURNQV9DQ1JfQlMKKwkJCSAgICB8IENBTURNQV9DQ1JfRFNUX0FNT0RFX1BPU1RfSU5DCisJCQkgICAgfCBDQU1ETUFfQ0NSX1NSQ19BTU9ERV9QT1NUX0lOQworCQkJICAgIHwgQ0FNRE1BX0NDUl9GUworCQkJICAgIHwgQ0FNRE1BX0NDUl9XUl9BQ1RJVkUKKwkJCSAgICB8IENBTURNQV9DQ1JfUkRfQUNUSVZFCisJCQkgICAgfCBDQU1ETUFfQ0NSX1NZTkNIUk9fQ0FNRVJBKTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DTE5LX0NUUkwoZG1hY2gpLCAwKTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DRU4oZG1hY2gpLCBsZW4pOworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoYmFzZSwgQ0FNRE1BX0NGTihkbWFjaCksIDEpOworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoYmFzZSwgQ0FNRE1BX0NTRFAoZG1hY2gpLAorCQkJICAgIENBTURNQV9DU0RQX1dSSVRFX01PREVfUE9TVEVECisJCQkgICAgfCBDQU1ETUFfQ1NEUF9EU1RfQlVSU1RfRU5fMzIKKwkJCSAgICB8IENBTURNQV9DU0RQX0RTVF9QQUNLRUQKKwkJCSAgICB8IENBTURNQV9DU0RQX1NSQ19CVVJTVF9FTl8zMgorCQkJICAgIHwgQ0FNRE1BX0NTRFBfU1JDX1BBQ0tFRAorCQkJICAgIHwgQ0FNRE1BX0NTRFBfREFUQV9UWVBFXzhCSVRTKTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DU1NBKGRtYWNoKSwgMCk7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ0RTQShkbWFjaCksIHN0YXJ0KTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DU0VJKGRtYWNoKSwgMCk7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ1NGSShkbWFjaCksIERNQV9USFJFU0hPTEQpOworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoYmFzZSwgQ0FNRE1BX0NERUkoZG1hY2gpLCAwKTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DREZJKGRtYWNoKSwgMCk7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ1NSKGRtYWNoKSwKKwkJCSAgICBDQU1ETUFfQ1NSX01JU0FMSUdORURfRVJSCisJCQkgICAgfCBDQU1ETUFfQ1NSX1NFQ1VSRV9FUlIKKwkJCSAgICB8IENBTURNQV9DU1JfVFJBTlNfRVJSCisJCQkgICAgfCBDQU1ETUFfQ1NSX0JMT0NLCisJCQkgICAgfCBDQU1ETUFfQ1NSX0RST1ApOworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoYmFzZSwgQ0FNRE1BX0NJQ1IoZG1hY2gpLAorCQkJICAgIENBTURNQV9DSUNSX01JU0FMSUdORURfRVJSX0lFCisJCQkgICAgfCBDQU1ETUFfQ0lDUl9TRUNVUkVfRVJSX0lFCisJCQkgICAgfCBDQU1ETUFfQ0lDUl9UUkFOU19FUlJfSUUKKwkJCSAgICB8IENBTURNQV9DSUNSX0JMT0NLX0lFCisJCQkgICAgfCBDQU1ETUFfQ0lDUl9EUk9QX0lFKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fZG1haHdfdHJhbnNmZXJfc3RhcnQodW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgZG1hY2gpCit7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfQ0NSKGRtYWNoKSwKKwkJCSAgICBDQU1ETUFfQ0NSX1NFTF9TUkNfRFNUX1NZTkMKKwkJCSAgICB8IENBTURNQV9DQ1JfQlMKKwkJCSAgICB8IENBTURNQV9DQ1JfRFNUX0FNT0RFX1BPU1RfSU5DCisJCQkgICAgfCBDQU1ETUFfQ0NSX1NSQ19BTU9ERV9QT1NUX0lOQworCQkJICAgIHwgQ0FNRE1BX0NDUl9FTkFCTEUKKwkJCSAgICB8IENBTURNQV9DQ1JfRlMKKwkJCSAgICB8IENBTURNQV9DQ1JfU1lOQ0hST19DQU1FUkEpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9kbWFod190cmFuc2Zlcl9jaGFpbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBkbWFjaCwKKwkJCQkJICAgICBpbnQgZnJlZV9kbWFjaCkKK3sKKwlpbnQgcHJldl9kbWFjaCwgY2g7CisKKwlpZiAoZG1hY2ggPT0gMCkKKwkJcHJldl9kbWFjaCA9IE5VTV9DQU1ETUFfQ0hBTk5FTFMgLSAxOworCWVsc2UKKwkJcHJldl9kbWFjaCA9IGRtYWNoIC0gMTsKKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DTE5LX0NUUkwocHJldl9kbWFjaCksCisJCQkgICAgQ0FNRE1BX0NMTktfQ1RSTF9FTkFCTEVfTE5LIHwgZG1hY2gpOworCS8qIERpZCB3ZSBjaGFpbiB0aGUgRE1BIHRyYW5zZmVyIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lCisJICogZmluaXNoZWQ/CisJICovCisJY2ggPSAoZG1hY2ggKyBmcmVlX2RtYWNoKSAlIE5VTV9DQU1ETUFfQ0hBTk5FTFM7CisJd2hpbGUgKCEob21hcDI0eHhjYW1fcmVnX2luKGJhc2UsIENBTURNQV9DQ1IoY2gpKQorCQkgJiBDQU1ETUFfQ0NSX0VOQUJMRSkpIHsKKwkJaWYgKGNoID09IGRtYWNoKSB7CisJCQkvKiBUaGUgcHJldmlvdXMgdHJhbnNmZXIgaGFzIGVuZGVkIGFuZCB0aGlzIG9uZQorCQkJICogaGFzbid0IHN0YXJ0ZWQsIHNvIHdlIG11c3Qgbm90IGhhdmUgY2hhaW5lZAorCQkJICogdG8gdGhlIHByZXZpb3VzIG9uZSBpbiB0aW1lLiAgV2UnbGwgaGF2ZSB0bworCQkJICogc3RhcnQgaXQgbm93LgorCQkJICovCisJCQlvbWFwMjR4eGNhbV9kbWFod190cmFuc2Zlcl9zdGFydChiYXNlLCBkbWFjaCk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQljaCA9IChjaCArIDEpICUgTlVNX0NBTURNQV9DSEFOTkVMUzsKKwl9Cit9CisKKy8qIEFib3J0IGFsbCBjaGFpbmVkIERNQSB0cmFuc2ZlcnMuIEFmdGVyIGFsbCB0cmFuc2ZlcnMgaGF2ZSBiZWVuCisgKiBhYm9ydGVkIGFuZCB0aGUgRE1BIGNvbnRyb2xsZXIgaXMgaWRsZSwgdGhlIGNvbXBsZXRpb24gcm91dGluZXMgZm9yCisgKiBhbnkgYWJvcnRlZCB0cmFuc2ZlcnMgd2lsbCBiZSBjYWxsZWQgaW4gc2VxdWVuY2UuIFRoZSBETUEKKyAqIGNvbnRyb2xsZXIgbWF5IG5vdCBiZSBpZGxlIGFmdGVyIHRoaXMgcm91dGluZSBjb21wbGV0ZXMsIGJlY2F1c2UKKyAqIHRoZSBjb21wbGV0aW9uIHJvdXRpbmVzIG1pZ2h0IHN0YXJ0IG5ldyB0cmFuc2ZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2RtYWh3X2Fib3J0X2NoKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGRtYWNoKQoreworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgZnJvbSB0aGlzIGNoYW5uZWwgKi8KKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGJhc2UsIENBTURNQV9DSUNSKGRtYWNoKSwgMCk7CisJLyogdW5saW5rIHRoaXMgY2hhbm5lbCAqLworCW9tYXAyNHh4Y2FtX3JlZ19tZXJnZShiYXNlLCBDQU1ETUFfQ0xOS19DVFJMKGRtYWNoKSwgMCwKKwkJCSAgICAgIENBTURNQV9DTE5LX0NUUkxfRU5BQkxFX0xOSyk7CisJLyogZGlzYWJsZSB0aGlzIGNoYW5uZWwgKi8KKwlvbWFwMjR4eGNhbV9yZWdfbWVyZ2UoYmFzZSwgQ0FNRE1BX0NDUihkbWFjaCksIDAsIENBTURNQV9DQ1JfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fZG1haHdfaW5pdCh1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfT0NQX1NZU0NPTkZJRywKKwkJCSAgICBDQU1ETUFfT0NQX1NZU0NPTkZJR19NSURMRU1PREVfRlNUQU5EQlkKKwkJCSAgICB8IENBTURNQV9PQ1BfU1lTQ09ORklHX1NJRExFTU9ERV9GSURMRQorCQkJICAgIHwgQ0FNRE1BX09DUF9TWVNDT05GSUdfQVVUT0lETEUpOworCisJb21hcDI0eHhjYW1fcmVnX21lcmdlKGJhc2UsIENBTURNQV9HQ1IsIDB4MTAsCisJCQkgICAgICBDQU1ETUFfR0NSX01BWF9DSEFOTkVMX0ZJRk9fREVQVEgpOworCisJb21hcDI0eHhjYW1fcmVnX291dChiYXNlLCBDQU1ETUFfSVJRRU5BQkxFX0wwLCAweGYpOworfQorCisvKgorICoKKyAqIEluZGl2aWR1YWwgRE1BIGNoYW5uZWwgaGFuZGxpbmcuCisgKgorICovCisKKy8qIFN0YXJ0IGEgRE1BIHRyYW5zZmVyIGZyb20gdGhlIGNhbWVyYSB0byBtZW1vcnkuCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCwgb3Igbm9uLXplcm8gaWYgYWxsCisgKiBETUEgY2hhbm5lbHMgYXJlIGFscmVhZHkgaW4gdXNlIG9yIHN0YXJ0aW5nIGlzIGN1cnJlbnRseSBpbmhpYml0ZWQuCisgKi8KK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fZG1hX3N0YXJ0KHN0cnVjdCBvbWFwMjR4eGNhbV9kbWEgKmRtYSwgZG1hX2FkZHJfdCBzdGFydCwKKwkJCQkgdTMyIGxlbiwgZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBkbWFjaDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWEtPmxvY2ssIGZsYWdzKTsKKworCWlmICghZG1hLT5mcmVlX2RtYWNoIHx8IGF0b21pY19yZWFkKCZkbWEtPmRtYV9zdG9wKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWEtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlkbWFjaCA9IGRtYS0+bmV4dF9kbWFjaDsKKworCWRtYS0+Y2hfc3RhdGVbZG1hY2hdLmNhbGxiYWNrID0gY2FsbGJhY2s7CisJZG1hLT5jaF9zdGF0ZVtkbWFjaF0uYXJnID0gYXJnOworCisJb21hcDI0eHhjYW1fZG1haHdfdHJhbnNmZXJfc2V0dXAoZG1hLT5iYXNlLCBkbWFjaCwgc3RhcnQsIGxlbik7CisKKwkvKiBXZSdyZSByZWFkeSB0byBzdGFydCB0aGUgRE1BIHRyYW5zZmVyLiAqLworCisJaWYgKGRtYS0+ZnJlZV9kbWFjaCA8IE5VTV9DQU1ETUFfQ0hBTk5FTFMpIHsKKwkJLyogQSB0cmFuc2ZlciBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBzbyB0cnkgdG8gY2hhaW4gdG8gaXQuICovCisJCW9tYXAyNHh4Y2FtX2RtYWh3X3RyYW5zZmVyX2NoYWluKGRtYS0+YmFzZSwgZG1hY2gsCisJCQkJCQkgZG1hLT5mcmVlX2RtYWNoKTsKKwl9IGVsc2UgeworCQkvKiBObyB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcywgc28gd2UnbGwganVzdCBzdGFydCB0aGlzIG9uZQorCQkgKiBub3cuCisJCSAqLworCQlvbWFwMjR4eGNhbV9kbWFod190cmFuc2Zlcl9zdGFydChkbWEtPmJhc2UsIGRtYWNoKTsKKwl9CisKKwlkbWEtPm5leHRfZG1hY2ggPSAoZG1hLT5uZXh0X2RtYWNoICsgMSkgJSBOVU1fQ0FNRE1BX0NIQU5ORUxTOworCWRtYS0+ZnJlZV9kbWFjaC0tOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQWJvcnQgYWxsIGNoYWluZWQgRE1BIHRyYW5zZmVycy4gQWZ0ZXIgYWxsIHRyYW5zZmVycyBoYXZlIGJlZW4KKyAqIGFib3J0ZWQgYW5kIHRoZSBETUEgY29udHJvbGxlciBpcyBpZGxlLCB0aGUgY29tcGxldGlvbiByb3V0aW5lcyBmb3IKKyAqIGFueSBhYm9ydGVkIHRyYW5zZmVycyB3aWxsIGJlIGNhbGxlZCBpbiBzZXF1ZW5jZS4gVGhlIERNQQorICogY29udHJvbGxlciBtYXkgbm90IGJlIGlkbGUgYWZ0ZXIgdGhpcyByb3V0aW5lIGNvbXBsZXRlcywgYmVjYXVzZQorICogdGhlIGNvbXBsZXRpb24gcm91dGluZXMgbWlnaHQgc3RhcnQgbmV3IHRyYW5zZmVycy4KKyAqLworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fZG1hX2Fib3J0KHN0cnVjdCBvbWFwMjR4eGNhbV9kbWEgKmRtYSwgdTMyIGNzcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBkbWFjaCwgaSwgZnJlZV9kbWFjaDsKKwlkbWFfY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl2b2lkICphcmc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzdG9wIGFueSBETUEgdHJhbnNmZXJzIGluIHByb2dyZXNzICovCisJZG1hY2ggPSAoZG1hLT5uZXh0X2RtYWNoICsgZG1hLT5mcmVlX2RtYWNoKSAlIE5VTV9DQU1ETUFfQ0hBTk5FTFM7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DQU1ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlvbWFwMjR4eGNhbV9kbWFod19hYm9ydF9jaChkbWEtPmJhc2UsIGRtYWNoKTsKKwkJZG1hY2ggPSAoZG1hY2ggKyAxKSAlIE5VTV9DQU1ETUFfQ0hBTk5FTFM7CisJfQorCisJLyogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmUgYmVjYXVzZSB0aGUgY2FsbGJhY2sgcm91dGluZQorCSAqIG1pZ2h0IHN0YXJ0IGEgbmV3IERNQSB0cmFuc2ZlciwgYW5kIHdlIG9ubHkgd2FudCB0byBhYm9ydAorCSAqIHRyYW5zZmVycyB0aGF0IHdlcmUgc3RhcnRlZCBiZWZvcmUgdGhpcyByb3V0aW5lIHdhcyBjYWxsZWQuCisJICovCisJZnJlZV9kbWFjaCA9IGRtYS0+ZnJlZV9kbWFjaDsKKwl3aGlsZSAoKGRtYS0+ZnJlZV9kbWFjaCA8IE5VTV9DQU1ETUFfQ0hBTk5FTFMpICYmCisJICAgICAgIChmcmVlX2RtYWNoIDwgTlVNX0NBTURNQV9DSEFOTkVMUykpIHsKKwkJZG1hY2ggPSAoZG1hLT5uZXh0X2RtYWNoICsgZG1hLT5mcmVlX2RtYWNoKQorCQkJJSBOVU1fQ0FNRE1BX0NIQU5ORUxTOworCQljYWxsYmFjayA9IGRtYS0+Y2hfc3RhdGVbZG1hY2hdLmNhbGxiYWNrOworCQlhcmcgPSBkbWEtPmNoX3N0YXRlW2RtYWNoXS5hcmc7CisJCWRtYS0+ZnJlZV9kbWFjaCsrOworCQlmcmVlX2RtYWNoKys7CisJCWlmIChjYWxsYmFjaykgeworCQkJLyogbGVhdmUgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgY2FsbGJhY2sgKi8KKwkJCXNwaW5fdW5sb2NrKCZkbWEtPmxvY2spOworCQkJKCpjYWxsYmFjaykgKGRtYSwgY3NyLCBhcmcpOworCQkJc3Bpbl9sb2NrKCZkbWEtPmxvY2spOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIEFib3J0IGFsbCBjaGFpbmVkIERNQSB0cmFuc2ZlcnMuIEFmdGVyIGFsbCB0cmFuc2ZlcnMgaGF2ZSBiZWVuCisgKiBhYm9ydGVkIGFuZCB0aGUgRE1BIGNvbnRyb2xsZXIgaXMgaWRsZSwgdGhlIGNvbXBsZXRpb24gcm91dGluZXMgZm9yCisgKiBhbnkgYWJvcnRlZCB0cmFuc2ZlcnMgd2lsbCBiZSBjYWxsZWQgaW4gc2VxdWVuY2UuIElmIHRoZSBjb21wbGV0aW9uCisgKiByb3V0aW5lcyBhdHRlbXB0IHRvIHN0YXJ0IGEgbmV3IERNQSB0cmFuc2ZlciBpdCB3aWxsIGZhaWwsIHNvIHRoZQorICogRE1BIGNvbnRyb2xsZXIgd2lsbCBiZSBpZGxlIGFmdGVyIHRoaXMgcm91dGluZSBjb21wbGV0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2RtYV9zdG9wKHN0cnVjdCBvbWFwMjR4eGNhbV9kbWEgKmRtYSwgdTMyIGNzcikKK3sKKwlhdG9taWNfaW5jKCZkbWEtPmRtYV9zdG9wKTsKKwlvbWFwMjR4eGNhbV9kbWFfYWJvcnQoZG1hLCBjc3IpOworCWF0b21pY19kZWMoJmRtYS0+ZG1hX3N0b3ApOworfQorCisvKiBDYW1lcmEgRE1BIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuICovCit2b2lkIG9tYXAyNHh4Y2FtX2RtYV9pc3Ioc3RydWN0IG9tYXAyNHh4Y2FtX2RtYSAqZG1hKQoreworCWludCBkbWFjaDsKKwlkbWFfY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl2b2lkICphcmc7CisJdTMyIGNzcjsKKwljb25zdCB1MzIgY3NyX2Vycm9yID0gQ0FNRE1BX0NTUl9NSVNBTElHTkVEX0VSUgorCQl8IENBTURNQV9DU1JfU1VQRVJWSVNPUl9FUlIgfCBDQU1ETUFfQ1NSX1NFQ1VSRV9FUlIKKwkJfCBDQU1ETUFfQ1NSX1RSQU5TX0VSUiB8IENBTURNQV9DU1JfRFJPUDsKKworCXNwaW5fbG9jaygmZG1hLT5sb2NrKTsKKworCWlmIChkbWEtPmZyZWVfZG1hY2ggPT0gTlVNX0NBTURNQV9DSEFOTkVMUykgeworCQkvKiBBIGNhbWVyYSBETUEgaW50ZXJydXB0IG9jY3VycmVkIHdoaWxlIGFsbCBjaGFubmVscworCQkgKiBhcmUgaWRsZSwgc28gd2UnbGwgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpbiB0aGUKKwkJICogSVJRU1RBVFVTIHJlZ2lzdGVyIGFuZCBleGl0LgorCQkgKi8KKwkJb21hcDI0eHhjYW1fZG1haHdfYWNrX2FsbChkbWEtPmJhc2UpOworCQlzcGluX3VubG9jaygmZG1hLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChkbWEtPmZyZWVfZG1hY2ggPCBOVU1fQ0FNRE1BX0NIQU5ORUxTKSB7CisJCWRtYWNoID0gKGRtYS0+bmV4dF9kbWFjaCArIGRtYS0+ZnJlZV9kbWFjaCkKKwkJCSUgTlVNX0NBTURNQV9DSEFOTkVMUzsKKwkJaWYgKG9tYXAyNHh4Y2FtX2RtYWh3X3J1bm5pbmcoZG1hLT5iYXNlLCBkbWFjaCkpIHsKKwkJCS8qIFRoaXMgYnVmZmVyIGhhc24ndCBmaW5pc2hlZCB5ZXQsIHNvIHdlJ3JlIGRvbmUuICovCisJCQlicmVhazsKKwkJfQorCQljc3IgPSBvbWFwMjR4eGNhbV9kbWFod19hY2tfY2goZG1hLT5iYXNlLCBkbWFjaCk7CisJCWlmIChjc3IgJiBjc3JfZXJyb3IpIHsKKwkJCS8qIEEgRE1BIGVycm9yIG9jY3VycmVkLCBzbyBzdG9wIGFsbCBETUEKKwkJCSAqIHRyYW5zZmVycyBpbiBwcm9ncmVzcy4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2soJmRtYS0+bG9jayk7CisJCQlvbWFwMjR4eGNhbV9kbWFfc3RvcChkbWEsIGNzcik7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQljYWxsYmFjayA9IGRtYS0+Y2hfc3RhdGVbZG1hY2hdLmNhbGxiYWNrOworCQkJYXJnID0gZG1hLT5jaF9zdGF0ZVtkbWFjaF0uYXJnOworCQkJZG1hLT5mcmVlX2RtYWNoKys7CisJCQlpZiAoY2FsbGJhY2spIHsKKwkJCQlzcGluX3VubG9jaygmZG1hLT5sb2NrKTsKKwkJCQkoKmNhbGxiYWNrKSAoZG1hLCBjc3IsIGFyZyk7CisJCQkJc3Bpbl9sb2NrKCZkbWEtPmxvY2spOworCQkJfQorCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmRtYS0+bG9jayk7CisKKwlvbWFwMjR4eGNhbV9zZ2RtYV9wcm9jZXNzKAorCQljb250YWluZXJfb2YoZG1hLCBzdHJ1Y3Qgb21hcDI0eHhjYW1fc2dkbWEsIGRtYSkpOworfQorCit2b2lkIG9tYXAyNHh4Y2FtX2RtYV9od2luaXQoc3RydWN0IG9tYXAyNHh4Y2FtX2RtYSAqZG1hKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hLT5sb2NrLCBmbGFncyk7CisKKwlvbWFwMjR4eGNhbV9kbWFod19pbml0KGRtYS0+YmFzZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fZG1hX2luaXQoc3RydWN0IG9tYXAyNHh4Y2FtX2RtYSAqZG1hLAorCQkJCSB1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJaW50IGNoOworCisJLyogZ3JvdXAgYWxsIGNoYW5uZWxzIG9uIERNQSBJUlEwIGFuZCB1bm1hc2sgaXJxICovCisJc3Bpbl9sb2NrX2luaXQoJmRtYS0+bG9jayk7CisJZG1hLT5iYXNlID0gYmFzZTsKKwlkbWEtPmZyZWVfZG1hY2ggPSBOVU1fQ0FNRE1BX0NIQU5ORUxTOworCWRtYS0+bmV4dF9kbWFjaCA9IDA7CisJZm9yIChjaCA9IDA7IGNoIDwgTlVNX0NBTURNQV9DSEFOTkVMUzsgY2grKykgeworCQlkbWEtPmNoX3N0YXRlW2NoXS5jYWxsYmFjayA9IE5VTEw7CisJCWRtYS0+Y2hfc3RhdGVbY2hdLmFyZyA9IE5VTEw7CisJfQorfQorCisvKgorICoKKyAqIFNjYXR0ZXItZ2F0aGVyIERNQS4KKyAqCisgKiBIaWdoLWxldmVsIERNQSBjb25zdHJ1Y3QgZm9yIHRyYW5zZmVycmluZyB3aG9sZSBwaWN0dXJlIGZyYW1lcyB0bworICogbWVtb3J5IHRoYXQgaXMgZGlzY29udGludW91cy4KKyAqCisgKi8KKworLyogRE1BIGNvbXBsZXRpb24gcm91dGluZSBmb3IgdGhlIHNjYXR0ZXItZ2F0aGVyIERNQSBmcmFnbWVudHMuICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9zZ2RtYV9jYWxsYmFjayhzdHJ1Y3Qgb21hcDI0eHhjYW1fZG1hICpkbWEsIHUzMiBjc3IsCisJCQkJICAgICAgIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fc2dkbWEgKnNnZG1hID0KKwkJY29udGFpbmVyX29mKGRtYSwgc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hLCBkbWEpOworCWludCBzZ3Nsb3QgPSAoaW50KWFyZzsKKwlzdHJ1Y3Qgc2dkbWFfc3RhdGUgKnNnX3N0YXRlOworCWNvbnN0IHUzMiBjc3JfZXJyb3IgPSBDQU1ETUFfQ1NSX01JU0FMSUdORURfRVJSCisJCXwgQ0FNRE1BX0NTUl9TVVBFUlZJU09SX0VSUiB8IENBTURNQV9DU1JfU0VDVVJFX0VSUgorCQl8IENBTURNQV9DU1JfVFJBTlNfRVJSIHwgQ0FNRE1BX0NTUl9EUk9QOworCisJc3Bpbl9sb2NrKCZzZ2RtYS0+bG9jayk7CisKKwkvKiBXZSBnb3QgYW4gaW50ZXJydXB0LCB3ZSBjYW4gcmVtb3ZlIHRoZSB0aW1lciAqLworCWRlbF90aW1lcigmc2dkbWEtPnJlc2V0X3RpbWVyKTsKKworCXNnX3N0YXRlID0gc2dkbWEtPnNnX3N0YXRlICsgc2dzbG90OworCWlmICghc2dfc3RhdGUtPnF1ZXVlZF9zZ2xpc3QpIHsKKwkJc3Bpbl91bmxvY2soJnNnZG1hLT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2dkbWEgY29tcGxldGVkIHdoZW4gbm9uZSBxdWV1ZWQhXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJc2dfc3RhdGUtPmNzciB8PSBjc3I7CisJaWYgKCEtLXNnX3N0YXRlLT5xdWV1ZWRfc2dsaXN0KSB7CisJCS8qIFF1ZXVlIGZvciB0aGlzIHNnbGlzdCBpcyBlbXB0eSwgc28gY2hlY2sgdG8gc2VlIGlmIHdlJ3JlCisJCSAqIGRvbmUuCisJCSAqLworCQlpZiAoKHNnX3N0YXRlLT5uZXh0X3NnbGlzdCA9PSBzZ19zdGF0ZS0+c2dsZW4pCisJCSAgICB8fCAoc2dfc3RhdGUtPmNzciAmIGNzcl9lcnJvcikpIHsKKwkJCXNnZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2sgPSBzZ19zdGF0ZS0+Y2FsbGJhY2s7CisJCQl2b2lkICphcmcgPSBzZ19zdGF0ZS0+YXJnOworCQkJdTMyIHNnX2NzciA9IHNnX3N0YXRlLT5jc3I7CisJCQkvKiBBbGwgZG9uZSB3aXRoIHRoaXMgc2dsaXN0ICovCisJCQlzZ2RtYS0+ZnJlZV9zZ2RtYSsrOworCQkJaWYgKGNhbGxiYWNrKSB7CisJCQkJc3Bpbl91bmxvY2soJnNnZG1hLT5sb2NrKTsKKwkJCQkoKmNhbGxiYWNrKSAoc2dkbWEsIHNnX2NzciwgYXJnKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmc2dkbWEtPmxvY2spOworfQorCisvKiBTdGFydCBxdWV1ZWQgc2NhdHRlci1nYXRoZXIgRE1BIHRyYW5zZmVycy4gKi8KK3ZvaWQgb21hcDI0eHhjYW1fc2dkbWFfcHJvY2VzcyhzdHJ1Y3Qgb21hcDI0eHhjYW1fc2dkbWEgKnNnZG1hKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHF1ZXVlZF9zZ2RtYSwgc2dzbG90OworCXN0cnVjdCBzZ2RtYV9zdGF0ZSAqc2dfc3RhdGU7CisJY29uc3QgdTMyIGNzcl9lcnJvciA9IENBTURNQV9DU1JfTUlTQUxJR05FRF9FUlIKKwkJfCBDQU1ETUFfQ1NSX1NVUEVSVklTT1JfRVJSIHwgQ0FNRE1BX0NTUl9TRUNVUkVfRVJSCisJCXwgQ0FNRE1BX0NTUl9UUkFOU19FUlIgfCBDQU1ETUFfQ1NSX0RST1A7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2dkbWEtPmxvY2ssIGZsYWdzKTsKKworCXF1ZXVlZF9zZ2RtYSA9IE5VTV9TR19ETUEgLSBzZ2RtYS0+ZnJlZV9zZ2RtYTsKKwlzZ3Nsb3QgPSAoc2dkbWEtPm5leHRfc2dkbWEgKyBzZ2RtYS0+ZnJlZV9zZ2RtYSkgJSBOVU1fU0dfRE1BOworCXdoaWxlIChxdWV1ZWRfc2dkbWEgPiAwKSB7CisJCXNnX3N0YXRlID0gc2dkbWEtPnNnX3N0YXRlICsgc2dzbG90OworCQl3aGlsZSAoKHNnX3N0YXRlLT5uZXh0X3NnbGlzdCA8IHNnX3N0YXRlLT5zZ2xlbikgJiYKKwkJICAgICAgICEoc2dfc3RhdGUtPmNzciAmIGNzcl9lcnJvcikpIHsKKwkJCWNvbnN0IHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OworCQkJdW5zaWduZWQgaW50IGxlbjsKKworCQkJc2dsaXN0ID0gc2dfc3RhdGUtPnNnbGlzdCArIHNnX3N0YXRlLT5uZXh0X3NnbGlzdDsKKwkJCS8qIHRyeSB0byBzdGFydCB0aGUgbmV4dCBETUEgdHJhbnNmZXIgKi8KKwkJCWlmIChzZ19zdGF0ZS0+bmV4dF9zZ2xpc3QgKyAxID09IHNnX3N0YXRlLT5zZ2xlbikgeworCQkJCS8qCisJCQkJICogIE9uIHRoZSBsYXN0IHNnLCB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUKKwkJCQkgKiAgY2FtLT5pbWcucGl4LnNpemVpbWFnZSAlIFBBR0VfQUxJR04gIT0gMAorCQkJCSAqLworCQkJCWxlbiA9IHNnX3N0YXRlLT5sZW4gLSBzZ19zdGF0ZS0+Ynl0ZXNfcmVhZDsKKwkJCX0gZWxzZSB7CisJCQkJbGVuID0gc2dfZG1hX2xlbihzZ2xpc3QpOworCQkJfQorCisJCQlpZiAob21hcDI0eHhjYW1fZG1hX3N0YXJ0KCZzZ2RtYS0+ZG1hLAorCQkJCQkJICBzZ19kbWFfYWRkcmVzcyhzZ2xpc3QpLAorCQkJCQkJICBsZW4sCisJCQkJCQkgIG9tYXAyNHh4Y2FtX3NnZG1hX2NhbGxiYWNrLAorCQkJCQkJICAodm9pZCAqKXNnc2xvdCkpIHsKKwkJCQkvKiBETUEgc3RhcnQgZmFpbGVkICovCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2dkbWEtPmxvY2ssIGZsYWdzKTsKKwkJCQlyZXR1cm47CisJCQl9IGVsc2UgeworCQkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKwkJCQkvKiBETUEgc3RhcnQgd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJCQlzZ19zdGF0ZS0+bmV4dF9zZ2xpc3QrKzsKKwkJCQlzZ19zdGF0ZS0+Ynl0ZXNfcmVhZCArPSBsZW47CisJCQkJc2dfc3RhdGUtPnF1ZXVlZF9zZ2xpc3QrKzsKKworCQkJCS8qIFdlIHN0YXJ0IHRoZSByZXNldCB0aW1lciAqLworCQkJCWV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCQkJbW9kX3RpbWVyKCZzZ2RtYS0+cmVzZXRfdGltZXIsIGV4cGlyZXMpOworCQkJfQorCQl9CisJCXF1ZXVlZF9zZ2RtYS0tOworCQlzZ3Nsb3QgPSAoc2dzbG90ICsgMSkgJSBOVU1fU0dfRE1BOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNnZG1hLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBRdWV1ZSBhIHNjYXR0ZXItZ2F0aGVyIERNQSB0cmFuc2ZlciBmcm9tIHRoZSBjYW1lcmEgdG8gbWVtb3J5LgorICogUmV0dXJucyB6ZXJvIGlmIHRoZSB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bGx5IHF1ZXVlZCwgb3Igbm9uLXplcm8KKyAqIGlmIGFsbCBvZiB0aGUgc2NhdHRlci1nYXRoZXIgc2xvdHMgYXJlIGFscmVhZHkgaW4gdXNlLgorICovCitpbnQgb21hcDI0eHhjYW1fc2dkbWFfcXVldWUoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IHNnbGVuLAorCQkJICAgIGludCBsZW4sIHNnZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzZ2RtYV9zdGF0ZSAqc2dfc3RhdGU7CisKKwlpZiAoKHNnbGVuIDwgMCkgfHwgKChzZ2xlbiA+IDApICYgIXNnbGlzdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNnZG1hLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXNnZG1hLT5mcmVlX3NnZG1hKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNnZG1hLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc2dfc3RhdGUgPSBzZ2RtYS0+c2dfc3RhdGUgKyBzZ2RtYS0+bmV4dF9zZ2RtYTsKKworCXNnX3N0YXRlLT5zZ2xpc3QgPSBzZ2xpc3Q7CisJc2dfc3RhdGUtPnNnbGVuID0gc2dsZW47CisJc2dfc3RhdGUtPm5leHRfc2dsaXN0ID0gMDsKKwlzZ19zdGF0ZS0+Ynl0ZXNfcmVhZCA9IDA7CisJc2dfc3RhdGUtPmxlbiA9IGxlbjsKKwlzZ19zdGF0ZS0+cXVldWVkX3NnbGlzdCA9IDA7CisJc2dfc3RhdGUtPmNzciA9IDA7CisJc2dfc3RhdGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJc2dfc3RhdGUtPmFyZyA9IGFyZzsKKworCXNnZG1hLT5uZXh0X3NnZG1hID0gKHNnZG1hLT5uZXh0X3NnZG1hICsgMSkgJSBOVU1fU0dfRE1BOworCXNnZG1hLT5mcmVlX3NnZG1hLS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZ2RtYS0+bG9jaywgZmxhZ3MpOworCisJb21hcDI0eHhjYW1fc2dkbWFfcHJvY2VzcyhzZ2RtYSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3luYyBzY2F0dGVyLWdhdGhlciBETUEgYnkgYWJvcnRpbmcgYW55IERNQSB0cmFuc2ZlcnMgY3VycmVudGx5IGluIHByb2dyZXNzLgorICogQW55IHF1ZXVlZCBzY2F0dGVyLWdhdGhlciBETUEgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gc3RhcnRlZAorICogd2lsbCByZW1haW4gcXVldWVkLiAgVGhlIERNQSBjb250cm9sbGVyIHdpbGwgYmUgaWRsZSBhZnRlciB0aGlzIHJvdXRpbmUKKyAqIGNvbXBsZXRlcy4gIFdoZW4gdGhlIHNjYXR0ZXItZ2F0aGVyIHF1ZXVlIGlzIHJlc3RhcnRlZCwgdGhlIG5leHQKKyAqIHNjYXR0ZXItZ2F0aGVyIERNQSB0cmFuc2ZlciB3aWxsIGJlZ2luIGF0IHRoZSBzdGFydCBvZiBhIG5ldyB0cmFuc2FjdGlvbi4KKyAqLwordm9pZCBvbWFwMjR4eGNhbV9zZ2RtYV9zeW5jKHN0cnVjdCBvbWFwMjR4eGNhbV9zZ2RtYSAqc2dkbWEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2dzbG90OworCXN0cnVjdCBzZ2RtYV9zdGF0ZSAqc2dfc3RhdGU7CisJdTMyIGNzciA9IENBTURNQV9DU1JfVFJBTlNfRVJSOworCisJLyogc3RvcCBhbnkgRE1BIHRyYW5zZmVycyBpbiBwcm9ncmVzcyAqLworCW9tYXAyNHh4Y2FtX2RtYV9zdG9wKCZzZ2RtYS0+ZG1hLCBjc3IpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNnZG1hLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc2dkbWEtPmZyZWVfc2dkbWEgPCBOVU1fU0dfRE1BKSB7CisJCXNnc2xvdCA9IChzZ2RtYS0+bmV4dF9zZ2RtYSArIHNnZG1hLT5mcmVlX3NnZG1hKSAlIE5VTV9TR19ETUE7CisJCXNnX3N0YXRlID0gc2dkbWEtPnNnX3N0YXRlICsgc2dzbG90OworCQlpZiAoc2dfc3RhdGUtPm5leHRfc2dsaXN0ICE9IDApIHsKKwkJCS8qIFRoaXMgRE1BIHRyYW5zZmVyIHdhcyBpbiBwcm9ncmVzcywgc28gYWJvcnQgaXQuICovCisJCQlzZ2RtYV9jYWxsYmFja190IGNhbGxiYWNrID0gc2dfc3RhdGUtPmNhbGxiYWNrOworCQkJdm9pZCAqYXJnID0gc2dfc3RhdGUtPmFyZzsKKwkJCXNnZG1hLT5mcmVlX3NnZG1hKys7CisJCQlpZiAoY2FsbGJhY2spIHsKKwkJCQkvKiBsZWF2ZSBpbnRlcnJ1cHRzIG1hc2tlZCAqLworCQkJCXNwaW5fdW5sb2NrKCZzZ2RtYS0+bG9jayk7CisJCQkJKCpjYWxsYmFjaykgKHNnZG1hLCBjc3IsIGFyZyk7CisJCQkJc3Bpbl9sb2NrKCZzZ2RtYS0+bG9jayk7CisJCQl9CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZ2RtYS0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG9tYXAyNHh4Y2FtX3NnZG1hX2luaXQoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkgICAgdm9pZCAoKnJlc2V0X2NhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGRhdGEpLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcmVzZXRfY2FsbGJhY2tfZGF0YSkKK3sKKwlpbnQgc2c7CisKKwlzcGluX2xvY2tfaW5pdCgmc2dkbWEtPmxvY2spOworCXNnZG1hLT5mcmVlX3NnZG1hID0gTlVNX1NHX0RNQTsKKwlzZ2RtYS0+bmV4dF9zZ2RtYSA9IDA7CisJZm9yIChzZyA9IDA7IHNnIDwgTlVNX1NHX0RNQTsgc2crKykgeworCQlzZ2RtYS0+c2dfc3RhdGVbc2ddLnNnbGVuID0gMDsKKwkJc2dkbWEtPnNnX3N0YXRlW3NnXS5uZXh0X3NnbGlzdCA9IDA7CisJCXNnZG1hLT5zZ19zdGF0ZVtzZ10uYnl0ZXNfcmVhZCA9IDA7CisJCXNnZG1hLT5zZ19zdGF0ZVtzZ10ucXVldWVkX3NnbGlzdCA9IDA7CisJCXNnZG1hLT5zZ19zdGF0ZVtzZ10uY3NyID0gMDsKKwkJc2dkbWEtPnNnX3N0YXRlW3NnXS5jYWxsYmFjayA9IE5VTEw7CisJCXNnZG1hLT5zZ19zdGF0ZVtzZ10uYXJnID0gTlVMTDsKKwl9CisKKwlvbWFwMjR4eGNhbV9kbWFfaW5pdCgmc2dkbWEtPmRtYSwgYmFzZSk7CisJc2V0dXBfdGltZXIoJnNnZG1hLT5yZXNldF90aW1lciwgcmVzZXRfY2FsbGJhY2ssIHJlc2V0X2NhbGxiYWNrX2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzNjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTAsMCArMSwxOTA4IEBACisvKgorICogZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCisgKgorICogT01BUCAyIGNhbWVyYSBibG9jayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uLgorICoKKyAqIENvbnRhY3Q6IFNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVzQG5va2lhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gQW5keSBMb3dlIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBuZWVkZWQgZm9yIHZpZGVvYnVmcyAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKKyNpbmNsdWRlICJvbWFwMjR4eGNhbS5oIgorCisjZGVmaW5lIE9NQVAyNFhYQ0FNX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMCkKKworI2RlZmluZSBSRVNFVF9USU1FT1VUX05TIDEwMDAwCisKK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX3Jlc2V0KHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSk7CitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX3NlbnNvcl9pZl9lbmFibGUoc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKTsKK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMpOworc3RhdGljIGludCBvbWFwMjR4eGNhbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CS8qIHZpZGVvIGRldmljZSBtaW5vciAoLTEgPT0+IGF1dG8gYXNzaWduKSAqLworLyoKKyAqIE1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgZm9yIGNhcHR1cmUgYnVmZmVycy4KKyAqIERlZmF1bHQgaXMgNDgwMEtCLCBlbm91Z2ggdG8gZG91YmxlLWJ1ZmZlciBTWEdBLgorICovCitzdGF0aWMgaW50IGNhcHR1cmVfbWVtID0gMTI4MCAqIDk2MCAqIDIgKiAyOworCitzdGF0aWMgc3RydWN0IHY0bDJfaW50X2RldmljZSBvbWFwMjR4eGNhbTsKKworLyoKKyAqCisgKiBDbG9ja3MuCisgKgorICovCisKK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJaWYgKGNhbS0+aWNrICE9IE5VTEwgJiYgIUlTX0VSUihjYW0tPmljaykpCisJCWNsa19wdXQoY2FtLT5pY2spOworCWlmIChjYW0tPmZjayAhPSBOVUxMICYmICFJU19FUlIoY2FtLT5mY2spKQorCQljbGtfcHV0KGNhbS0+ZmNrKTsKKworCWNhbS0+aWNrID0gY2FtLT5mY2sgPSBOVUxMOworfQorCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX2Nsb2NrX2dldChzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJaW50IHJ2YWwgPSAwOworCisJY2FtLT5mY2sgPSBjbGtfZ2V0KGNhbS0+ZGV2LCAiY2FtX2ZjayIpOworCWlmIChJU19FUlIoY2FtLT5mY2spKSB7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW4ndCBnZXQgY2FtX2ZjayIpOworCQlydmFsID0gUFRSX0VSUihjYW0tPmZjayk7CisJCW9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChjYW0pOworCQlyZXR1cm4gcnZhbDsKKwl9CisKKwljYW0tPmljayA9IGNsa19nZXQoY2FtLT5kZXYsICJjYW1faWNrIik7CisJaWYgKElTX0VSUihjYW0tPmljaykpIHsKKwkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1faWNrIik7CisJCXJ2YWwgPSBQVFJfRVJSKGNhbS0+aWNrKTsKKwkJb21hcDI0eHhjYW1fY2xvY2tfcHV0KGNhbSk7CisJfQorCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2Nsb2NrX29uKHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwljbGtfZW5hYmxlKGNhbS0+ZmNrKTsKKwljbGtfZW5hYmxlKGNhbS0+aWNrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fY2xvY2tfb2ZmKHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwljbGtfZGlzYWJsZShjYW0tPmZjayk7CisJY2xrX2Rpc2FibGUoY2FtLT5pY2spOworfQorCisvKgorICoKKyAqIENhbWVyYSBjb3JlCisgKgorICovCisKKy8qCisgKiBTZXQgeGNsay4KKyAqCisgKiBUbyBkaXNhYmxlIHhjbGssIHVzZSB2YWx1ZSB6ZXJvLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9jb3JlX3hjbGtfc2V0KGNvbnN0IHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSwKKwkJCQkgICAgICB1MzIgeGNsaykKK3sKKwlpZiAoeGNsaykgeworCQl1MzIgZGl2aXNvciA9IENBTV9NQ0xLIC8geGNsazsKKworCQlpZiAoZGl2aXNvciA9PSAxKQorCQkJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSArIENDX1JFR19PRkZTRVQsCisJCQkJCSAgICBDQ19DVFJMX1hDTEssCisJCQkJCSAgICBDQ19DVFJMX1hDTEtfRElWX0JZUEFTUyk7CisJCWVsc2UKKwkJCW9tYXAyNHh4Y2FtX3JlZ19vdXQoY2FtLT5tbWlvX2Jhc2UgKyBDQ19SRUdfT0ZGU0VULAorCQkJCQkgICAgQ0NfQ1RSTF9YQ0xLLCBkaXZpc29yKTsKKwl9IGVsc2UKKwkJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSArIENDX1JFR19PRkZTRVQsCisJCQkJICAgIENDX0NUUkxfWENMSywgQ0NfQ1RSTF9YQ0xLX0RJVl9TVEFCTEVfTE9XKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fY29yZV9od2luaXQoY29uc3Qgc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCS8qCisJICogU2V0dGluZyB0aGUgY2FtZXJhIGNvcmUgQVVUT0lETEUgYml0IGNhdXNlcyBwcm9ibGVtcyB3aXRoIGZyYW1lCisJICogc3luY2hyb25pemF0aW9uLCBzbyB3ZSB3aWxsIGNsZWFyIHRoZSBBVVRPSURMRSBiaXQgaW5zdGVhZC4KKwkgKi8KKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGNhbS0+bW1pb19iYXNlICsgQ0NfUkVHX09GRlNFVCwgQ0NfU1lTQ09ORklHLAorCQkJICAgIENDX1NZU0NPTkZJR19BVVRPSURMRSk7CisKKwkvKiBwcm9ncmFtIHRoZSBjYW1lcmEgaW50ZXJmYWNlIERNQSBwYWNrZXQgc2l6ZSAqLworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoY2FtLT5tbWlvX2Jhc2UgKyBDQ19SRUdfT0ZGU0VULCBDQ19DVFJMX0RNQSwKKwkJCSAgICBDQ19DVFJMX0RNQV9FTiB8IChETUFfVEhSRVNIT0xEIC8gNCAtIDEpKTsKKworCS8qIGVuYWJsZSBjYW1lcmEgY29yZSBlcnJvciBpbnRlcnJ1cHRzICovCisJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSArIENDX1JFR19PRkZTRVQsIENDX0lSUUVOQUJMRSwKKwkJCSAgICBDQ19JUlFFTkFCTEVfRldfRVJSX0lSUQorCQkJICAgIHwgQ0NfSVJRRU5BQkxFX0ZTQ19FUlJfSVJRCisJCQkgICAgfCBDQ19JUlFFTkFCTEVfU1NDX0VSUl9JUlEKKwkJCSAgICB8IENDX0lSUUVOQUJMRV9GSUZPX09GX0lSUSk7Cit9CisKKy8qCisgKiBFbmFibGUgdGhlIGNhbWVyYSBjb3JlLgorICoKKyAqIERhdGEgdHJhbnNmZXIgdG8gdGhlIGNhbWVyYSBETUEgc3RhcnRzIGZyb20gbmV4dCBzdGFydGluZyBmcmFtZS4KKyAqLworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fY29yZV9lbmFibGUoY29uc3Qgc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCisJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSArIENDX1JFR19PRkZTRVQsIENDX0NUUkwsCisJCQkgICAgY2FtLT5jY19jdHJsKTsKK30KKworLyoKKyAqIERpc2FibGUgY2FtZXJhIGNvcmUuCisgKgorICogVGhlIGRhdGEgdHJhbnNmZXIgd2lsbCBiZSBzdG9wcGVkIGltbWVkaWF0ZWx5IChDQ19DVFJMX0NDX1JTVCkuIFRoZQorICogY29yZSBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcyB3aWxsIGJlIHJlc2V0LiBVc2UKKyAqIENDX0NUUkxfQ0NfRlJBTUVfVFJJRyBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIHRyYW5zZmVyIHRoZSBjdXJyZW50CisgKiBmcmFtZSBjb21wbGV0ZWx5LgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9jb3JlX2Rpc2FibGUoY29uc3Qgc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoY2FtLT5tbWlvX2Jhc2UgKyBDQ19SRUdfT0ZGU0VULCBDQ19DVFJMLAorCQkJICAgIENDX0NUUkxfQ0NfUlNUKTsKK30KKworLyogSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgY2FtZXJhIGNvcmUgaW50ZXJydXB0cy4gKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2NvcmVfaXNyKHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwl1MzIgY2NfaXJxc3RhdHVzOworCWNvbnN0IHUzMiBjY19pcnFzdGF0dXNfZXJyID0KKwkJQ0NfSVJRU1RBVFVTX0ZXX0VSUl9JUlEKKwkJfCBDQ19JUlFTVEFUVVNfRlNDX0VSUl9JUlEKKwkJfCBDQ19JUlFTVEFUVVNfU1NDX0VSUl9JUlEKKwkJfCBDQ19JUlFTVEFUVVNfRklGT19VRl9JUlEKKwkJfCBDQ19JUlFTVEFUVVNfRklGT19PRl9JUlE7CisKKwljY19pcnFzdGF0dXMgPSBvbWFwMjR4eGNhbV9yZWdfaW4oY2FtLT5tbWlvX2Jhc2UgKyBDQ19SRUdfT0ZGU0VULAorCQkJCQkgIENDX0lSUVNUQVRVUyk7CisJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSArIENDX1JFR19PRkZTRVQsIENDX0lSUVNUQVRVUywKKwkJCSAgICBjY19pcnFzdGF0dXMpOworCisJaWYgKGNjX2lycXN0YXR1cyAmIGNjX2lycXN0YXR1c19lcnIKKwkgICAgJiYgIWF0b21pY19yZWFkKCZjYW0tPmluX3Jlc2V0KSkgeworCQlkZXZfZGJnKGNhbS0+ZGV2LCAicmVzZXR0aW5nIGNhbWVyYSwgY2NfaXJxc3RhdHVzIDB4JXhcbiIsCisJCQljY19pcnFzdGF0dXMpOworCQlvbWFwMjR4eGNhbV9yZXNldChjYW0pOworCX0KK30KKworLyoKKyAqCisgKiB2aWRlb2J1Zl9idWZmZXIgaGFuZGxpbmcuCisgKgorICogTWVtb3J5IGZvciBtbWFwcGVkIHZpZGVvYnVmX2J1ZmZlcnMgaXMgbm90IGFsbG9jYXRlZAorICogY29udmVudGlvbmFsbHksIGJ1dCBieSBzZXZlcmFsIGttYWxsb2MgYWxsb2NhdGlvbnMgYW5kIHRoZW4KKyAqIGNyZWF0aW5nIHRoZSBzY2F0dGVybGlzdCBvbiBvdXIgb3duLiBVc2VyLXNwYWNlIGJ1ZmZlcnMgYXJlIGhhbmRsZWQKKyAqIG5vcm1hbGx5LgorICoKKyAqLworCisvKgorICogRnJlZSB0aGUgbWVtb3J5LW1hcHBlZCBidWZmZXIgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYQorICogdmlkZW9idWZfYnVmZmVyIGFuZCB0aGUgYXNzb2NpYXRlZCBzY2F0dGVybGlzdC4KKyAqLworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fdmJxX2ZyZWVfbW1hcF9idWZmZXIoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKHZiKTsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgaTsKKworCWlmIChkbWEtPnNnbGlzdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpID0gZG1hLT5zZ2xlbjsKKwl3aGlsZSAoaSkgeworCQlpLS07CisJCWFsbG9jX3NpemUgPSBzZ19kbWFfbGVuKCZkbWEtPnNnbGlzdFtpXSk7CisJCXBhZ2UgPSBzZ19wYWdlKCZkbWEtPnNnbGlzdFtpXSk7CisJCWRvIHsKKwkJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UrKyk7CisJCX0gd2hpbGUgKGFsbG9jX3NpemUgLT0gUEFHRV9TSVpFKTsKKwkJX19mcmVlX3BhZ2VzKHNnX3BhZ2UoJmRtYS0+c2dsaXN0W2ldKSwKKwkJCSAgICAgZ2V0X29yZGVyKHNnX2RtYV9sZW4oJmRtYS0+c2dsaXN0W2ldKSkpOworCX0KKworCWtmcmVlKGRtYS0+c2dsaXN0KTsKKwlkbWEtPnNnbGlzdCA9IE5VTEw7Cit9CisKKy8qIFJlbGVhc2UgYWxsIG1lbW9yeSByZWxhdGVkIHRvIHRoZSB2aWRlb2J1Zl9xdWV1ZS4gKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX3ZicV9mcmVlX21tYXBfYnVmZmVycyhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSkKK3sKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnZicS0+dmJfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKKwkJaWYgKE5VTEwgPT0gdmJxLT5idWZzW2ldKQorCQkJY29udGludWU7CisJCWlmIChWNEwyX01FTU9SWV9NTUFQICE9IHZicS0+YnVmc1tpXS0+bWVtb3J5KQorCQkJY29udGludWU7CisJCXZicS0+b3BzLT5idWZfcmVsZWFzZSh2YnEsIHZicS0+YnVmc1tpXSk7CisJCW9tYXAyNHh4Y2FtX3ZicV9mcmVlX21tYXBfYnVmZmVyKHZicS0+YnVmc1tpXSk7CisJCWtmcmVlKHZicS0+YnVmc1tpXSk7CisJCXZicS0+YnVmc1tpXSA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ2YnEtPnZiX2xvY2spOworCisJdmlkZW9idWZfbW1hcF9mcmVlKHZicSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBwaHlzaWNhbGx5IGFzIGNvbnRpZ3VvdXMgYXMgcG9zc2libGUgYnVmZmVyIGZvciB2aWRlbworICogZnJhbWUgYW5kIGFsbG9jYXRlIGFuZCBidWlsZCBETUEgc2NhdHRlci1nYXRoZXIgbGlzdCBmb3IgaXQuCisgKi8KK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fdmJxX2FsbG9jX21tYXBfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXVuc2lnbmVkIGludCBvcmRlcjsKKwlzaXplX3QgYWxsb2Nfc2l6ZSwgc2l6ZSA9IHZiLT5ic2l6ZTsgLyogdmItPmJzaXplIGlzIHBhZ2UgYWxpZ25lZCAqLworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBtYXhfcGFnZXMsIGVyciA9IDAsIGkgPSAwOworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSA9IHZpZGVvYnVmX3RvX2RtYSh2Yik7CisKKwkvKgorCSAqIGFsbG9jYXRlIG1heGltdW0gc2l6ZSBzY2F0dGVyLWdhdGhlciBsaXN0LiBOb3RlIHRoaXMgaXMKKwkgKiBvdmVyaGVhZC4gV2UgbWF5IG5vdCB1c2UgYXMgbWFueSBlbnRyaWVzIGFzIHdlIGFsbG9jYXRlCisJICovCisJbWF4X3BhZ2VzID0gdmItPmJzaXplID4+IFBBR0VfU0hJRlQ7CisJZG1hLT5zZ2xpc3QgPSBrY2FsbG9jKG1heF9wYWdlcywgc2l6ZW9mKCpkbWEtPnNnbGlzdCksIEdGUF9LRVJORUwpOworCWlmIChkbWEtPnNnbGlzdCA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChzaXplKSB7CisJCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCQkvKgorCQkgKiBkbyBub3Qgb3Zlci1hbGxvY2F0ZSBldmVuIGlmIHdlIHdvdWxkIGdldCBsYXJnZXIKKwkJICogY29udGlndW91cyBjaHVuayB0aGF0IHdheQorCQkgKi8KKwkJaWYgKChQQUdFX1NJWkUgPDwgb3JkZXIpID4gc2l6ZSkKKwkJCW9yZGVyLS07CisKKwkJLyogdHJ5IHRvIGFsbG9jYXRlIGFzIG1hbnkgY29udGlndW91cyBwYWdlcyBhcyBwb3NzaWJsZSAqLworCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIG9yZGVyKTsKKwkJLyogaWYgYWxsb2NhdGlvbiBmYWlscywgdHJ5IHRvIGFsbG9jYXRlIHNtYWxsZXIgYW1vdW50ICovCisJCXdoaWxlIChwYWdlID09IE5VTEwpIHsKKwkJCW9yZGVyLS07CisJCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIG9yZGVyKTsKKwkJCWlmIChwYWdlID09IE5VTEwgJiYgIW9yZGVyKSB7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlzaXplIC09IChQQUdFX1NJWkUgPDwgb3JkZXIpOworCisJCS8qIGFwcGVuZCBhbGxvY2F0ZWQgY2h1bmsgb2YgcGFnZXMgaW50byBzY2F0dGVyLWdhdGhlciBsaXN0ICovCisJCXNnX3NldF9wYWdlKCZkbWEtPnNnbGlzdFtpXSwgcGFnZSwgUEFHRV9TSVpFIDw8IG9yZGVyLCAwKTsKKwkJZG1hLT5zZ2xlbisrOworCQlpKys7CisKKwkJYWxsb2Nfc2l6ZSA9IChQQUdFX1NJWkUgPDwgb3JkZXIpOworCisJCS8qIGNsZWFyIHBhZ2VzIGJlZm9yZSBnaXZpbmcgdGhlbSB0byB1c2VyIHNwYWNlICovCisJCW1lbXNldChwYWdlX2FkZHJlc3MocGFnZSksIDAsIGFsbG9jX3NpemUpOworCisJCS8qIG1hcmsgYWxsb2NhdGVkIHBhZ2VzIHJlc2VydmVkICovCisJCWRvIHsKKwkJCVNldFBhZ2VSZXNlcnZlZChwYWdlKyspOworCQl9IHdoaWxlIChhbGxvY19zaXplIC09IFBBR0VfU0laRSk7CisJfQorCS8qCisJICogUkVWSVNJVDogbm90IGZ1bGx5IGNvcnJlY3QgdG8gYXNzaWduIG5yX3BhZ2VzID09IHNnbGVuIGJ1dAorCSAqIHZpZGVvLWJ1ZiBpcyBwYXNzaW5nIG5yX3BhZ2VzIGZvciBlLmcuIHVubWFwX3NnIGNhbGxzCisJICovCisJZG1hLT5ucl9wYWdlcyA9IGRtYS0+c2dsZW47CisJZG1hLT5kaXJlY3Rpb24gPSBQQ0lfRE1BX0ZST01ERVZJQ0U7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCW9tYXAyNHh4Y2FtX3ZicV9mcmVlX21tYXBfYnVmZmVyKHZiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX3ZicV9hbGxvY19tbWFwX2J1ZmZlcnMoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2YnEsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKmZoID0KKwkJY29udGFpbmVyX29mKHZicSwgc3RydWN0IG9tYXAyNHh4Y2FtX2ZoLCB2YnEpOworCisJbXV0ZXhfbG9jaygmdmJxLT52Yl9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWVyciA9IG9tYXAyNHh4Y2FtX3ZicV9hbGxvY19tbWFwX2J1ZmZlcih2YnEtPmJ1ZnNbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWRldl9kYmcoZmgtPmNhbS0+ZGV2LCAic2dsZW4gaXMgJWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCXZpZGVvYnVmX3RvX2RtYSh2YnEtPmJ1ZnNbaV0pLT5zZ2xlbiwgaSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ2YnEtPnZiX2xvY2spOworCisJcmV0dXJuIDA7CitvdXQ6CisJd2hpbGUgKGkpIHsKKwkJaS0tOworCQlvbWFwMjR4eGNhbV92YnFfZnJlZV9tbWFwX2J1ZmZlcih2YnEtPmJ1ZnNbaV0pOworCX0KKworCW11dGV4X3VubG9jaygmdmJxLT52Yl9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgd2hlbiBhIHNjYXR0ZXItZ2F0aGVyIERNQQorICogdHJhbnNmZXIgb2YgYSB2aWRlb2J1Zl9idWZmZXIgY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV92YnFfY29tcGxldGUoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSwKKwkJCQkgICAgIHUzMiBjc3IsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPQorCQljb250YWluZXJfb2Yoc2dkbWEsIHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UsIHNnZG1hKTsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKmZoID0gY2FtLT5zdHJlYW1pbmctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9IChzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICopYXJnOworCWNvbnN0IHUzMiBjc3JfZXJyb3IgPSBDQU1ETUFfQ1NSX01JU0FMSUdORURfRVJSCisJCXwgQ0FNRE1BX0NTUl9TVVBFUlZJU09SX0VSUiB8IENBTURNQV9DU1JfU0VDVVJFX0VSUgorCQl8IENBTURNQV9DU1JfVFJBTlNfRVJSIHwgQ0FNRE1BX0NTUl9EUk9QOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5jb3JlX2VuYWJsZV9kaXNhYmxlX2xvY2ssIGZsYWdzKTsKKwlpZiAoLS1jYW0tPnNnZG1hX2luX3F1ZXVlID09IDApCisJCW9tYXAyNHh4Y2FtX2NvcmVfZGlzYWJsZShjYW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+Y29yZV9lbmFibGVfZGlzYWJsZV9sb2NrLCBmbGFncyk7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisJdmItPmZpZWxkX2NvdW50ID0gYXRvbWljX2FkZF9yZXR1cm4oMiwgJmZoLT5maWVsZF9jb3VudCk7CisJaWYgKGNzciAmIGNzcl9lcnJvcikgeworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJaWYgKCFhdG9taWNfcmVhZCgmZmgtPmNhbS0+aW5fcmVzZXQpKSB7CisJCQlkZXZfZGJnKGNhbS0+ZGV2LCAicmVzZXR0aW5nIGNhbWVyYSwgY3NyIDB4JXhcbiIsIGNzcik7CisJCQlvbWFwMjR4eGNhbV9yZXNldChjYW0pOworCQl9CisJfSBlbHNlCisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJd2FrZV91cCgmdmItPmRvbmUpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV92YnFfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSwKKwkJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKHZiKTsKKworCS8qIHdhaXQgZm9yIGJ1ZmZlciwgZXNwZWNpYWxseSB0byBnZXQgb3V0IG9mIHRoZSBzZ2RtYSBxdWV1ZSAqLworCXZpZGVvYnVmX3dhaXRvbih2YiwgMCwgMCk7CisJaWYgKHZiLT5tZW1vcnkgPT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQlkbWFfdW5tYXBfc2codmJxLT5kZXYsIGRtYS0+c2dsaXN0LCBkbWEtPnNnbGVuLAorCQkJICAgICBkbWEtPmRpcmVjdGlvbik7CisJCWRtYS0+ZGlyZWN0aW9uID0gRE1BX05PTkU7CisJfSBlbHNlIHsKKwkJdmlkZW9idWZfZG1hX3VubWFwKHZicSwgdmlkZW9idWZfdG9fZG1hKHZiKSk7CisJCXZpZGVvYnVmX2RtYV9mcmVlKHZpZGVvYnVmX3RvX2RtYSh2YikpOworCX0KKworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKKy8qCisgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBrZXJuZWwgaW1hZ2UgY2FwdHVyZSBidWZmZXJzIGJhc2VkIG9uIHRoZQorICogbnVtYmVyIHJlcXVlc3RlZCwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZSBzaXplLCBhbmQgdGhlIG1heGltdW0KKyAqIGFtb3VudCBvZiBtZW1vcnkgcGVybWl0dGVkIGZvciBrZXJuZWwgY2FwdHVyZSBidWZmZXJzLgorICovCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX3ZicV9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSwgdW5zaWduZWQgaW50ICpjbnQsCisJCQkJIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKmZoID0gdmJxLT5wcml2X2RhdGE7CisKKwlpZiAoKmNudCA8PSAwKQorCQkqY250ID0gVklERU9fTUFYX0ZSQU1FOwkvKiBzdXBwbHkgYSBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCisKKwlpZiAoKmNudCA+IFZJREVPX01BWF9GUkFNRSkKKwkJKmNudCA9IFZJREVPX01BWF9GUkFNRTsKKworCSpzaXplID0gZmgtPnBpeC5zaXplaW1hZ2U7CisKKwkvKiBhY2Nlc3NpbmcgZmgtPmNhbS0+Y2FwdHVyZV9tZW0gaXMgb2ssIGl0J3MgY29uc3RhbnQgKi8KKwl3aGlsZSAoKnNpemUgKiAqY250ID4gZmgtPmNhbS0+Y2FwdHVyZV9tZW0pCisJCSgqY250KS0tOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fZG1hX2lvbG9jayhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSwKKwkJCQkgIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWRtYS0+ZGlyZWN0aW9uID0gUENJX0RNQV9GUk9NREVWSUNFOworCWlmICghZG1hX21hcF9zZyh2YnEtPmRldiwgZG1hLT5zZ2xpc3QsIGRtYS0+c2dsZW4sIGRtYS0+ZGlyZWN0aW9uKSkgeworCQlrZnJlZShkbWEtPnNnbGlzdCk7CisJCWRtYS0+c2dsaXN0ID0gTlVMTDsKKwkJZG1hLT5zZ2xlbiA9IDA7CisJCWVyciA9IC1FSU87CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwMjR4eGNhbV92YnFfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSwKKwkJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpmaCA9IHZicS0+cHJpdl9kYXRhOworCWludCBlcnIgPSAwOworCisJLyoKKwkgKiBBY2Nlc3NpbmcgcGl4IGhlcmUgaXMgb2theSBzaW5jZSBpdCdzIGNvbnN0YW50IHdoaWxlCisJICogc3RyZWFtaW5nIGlzIG9uIChhbmQgd2Ugb25seSBnZXQgY2FsbGVkIHRoZW4pLgorCSAqLworCWlmICh2Yi0+YmFkZHIpIHsKKwkJLyogVGhpcyBpcyBhIHVzZXJzcGFjZSBidWZmZXIuICovCisJCWlmIChmaC0+cGl4LnNpemVpbWFnZSA+IHZiLT5ic2l6ZSkgeworCQkJLyogVGhlIGJ1ZmZlciBpc24ndCBiaWcgZW5vdWdoLiAqLworCQkJZXJyID0gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQl2Yi0+c2l6ZSA9IGZoLT5waXguc2l6ZWltYWdlOworCX0gZWxzZSB7CisJCWlmICh2Yi0+c3RhdGUgIT0gVklERU9CVUZfTkVFRFNfSU5JVCkgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgYSBrZXJuZWwgYm91bmNlIGJ1ZmZlciB0aGF0IGhhcworCQkJICogYWxyZWFkeSBiZWVuIGFsbG9jYXRlZC4KKwkJCSAqLworCQkJaWYgKGZoLT5waXguc2l6ZWltYWdlID4gdmItPnNpemUpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBpbWFnZSBzaXplIGhhcyBiZWVuIGNoYW5nZWQgdG8KKwkJCQkgKiBhIGxhcmdlciBzaXplIHNpbmNlIHRoaXMgYnVmZmVyIHdhcworCQkJCSAqIGFsbG9jYXRlZCwgc28gd2UgbmVlZCB0byBmcmVlIGFuZAorCQkJCSAqIHJlYWxsb2NhdGUgaXQuCisJCQkJICovCisJCQkJb21hcDI0eHhjYW1fdmJxX3JlbGVhc2UodmJxLCB2Yik7CisJCQkJdmItPnNpemUgPSBmaC0+cGl4LnNpemVpbWFnZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcga2VybmVsIGJvdW5jZSBidWZmZXIuICovCisJCQl2Yi0+c2l6ZSA9IGZoLT5waXguc2l6ZWltYWdlOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZiLT53aWR0aCA9IGZoLT5waXgud2lkdGg7CisJdmItPmhlaWdodCA9IGZoLT5waXguaGVpZ2h0OworCXZiLT5maWVsZCA9IGZpZWxkOworCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCWlmICh2Yi0+bWVtb3J5ID09IFY0TDJfTUVNT1JZX01NQVApCisJCQkvKgorCQkJICogd2UgaGF2ZSBidWlsdCB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBieSBvdXJzZWxmIHNvCisJCQkgKiBkbyB0aGUgc2NhdHRlci1nYXRoZXIgbWFwcGluZyBhcyB3ZWxsCisJCQkgKi8KKwkJCWVyciA9IG9tYXAyNHh4Y2FtX2RtYV9pb2xvY2sodmJxLCB2aWRlb2J1Zl90b19kbWEodmIpKTsKKwkJZWxzZQorCQkJZXJyID0gdmlkZW9idWZfaW9sb2NrKHZicSwgdmIsIE5VTEwpOworCX0KKworCWlmICghZXJyKQorCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwllbHNlCisJCW9tYXAyNHh4Y2FtX3ZicV9yZWxlYXNlKHZicSwgdmIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fdmJxX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdmJxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpmaCA9IHZicS0+cHJpdl9kYXRhOworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IGZoLT5jYW07CisJZW51bSB2aWRlb2J1Zl9zdGF0ZSBzdGF0ZSA9IHZiLT5zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwkvKgorCSAqIEZJWE1FOiBXZSdyZSBtYXJraW5nIHRoZSBidWZmZXIgYWN0aXZlIHNpbmNlIHdlIGhhdmUgbm8KKwkgKiBwcmV0dHkgd2F5IG9mIG1hcmtpbmcgaXQgYWN0aXZlIGV4YWN0bHkgd2hlbiB0aGUKKwkgKiBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlciBzdGFydHMuCisJICovCisJdmItPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCisJZXJyID0gb21hcDI0eHhjYW1fc2dkbWFfcXVldWUoJmZoLT5jYW0tPnNnZG1hLAorCQkJCSAgICAgIHZpZGVvYnVmX3RvX2RtYSh2YiktPnNnbGlzdCwKKwkJCQkgICAgICB2aWRlb2J1Zl90b19kbWEodmIpLT5zZ2xlbiwgdmItPnNpemUsCisJCQkJICAgICAgb21hcDI0eHhjYW1fdmJxX2NvbXBsZXRlLCB2Yik7CisKKwlpZiAoIWVycikgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5jb3JlX2VuYWJsZV9kaXNhYmxlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCsrY2FtLT5zZ2RtYV9pbl9xdWV1ZSA9PSAxCisJCSAgICAmJiAhYXRvbWljX3JlYWQoJmNhbS0+aW5fcmVzZXQpKQorCQkJb21hcDI0eHhjYW1fY29yZV9lbmFibGUoY2FtKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5jb3JlX2VuYWJsZV9kaXNhYmxlX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPb3BzLiBXZSdyZSBub3Qgc3VwcG9zZWQgdG8gZ2V0IGFueSBlcnJvcnMgaGVyZS4KKwkJICogVGhlIG9ubHkgd2F5IHdlIGNvdWxkIGdldCBhbiBlcnJvciBpcyBpZiB3ZSByYW4gb3V0CisJCSAqIG9mIHNjYXR0ZXItZ2F0aGVyIERNQSBzbG90cywgYnV0IHdlIGFyZSBzdXBwb3NlZCB0bworCQkgKiBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgc2NhdHRlci1nYXRoZXIgRE1BIHNsb3RzIGFzCisJCSAqIHZpZGVvIGJ1ZmZlcnMgc28gdGhhdCBjYW4ndCBoYXBwZW4uCisJCSAqLworCQlkZXZfZXJyKGNhbS0+ZGV2LCAiZmFpbGVkIHRvIHF1ZXVlIGEgdmlkZW8gYnVmZmVyIGZvciBkbWEhXG4iKTsKKwkJZGV2X2VycihjYW0tPmRldiwgImxpa2VseSBhIGJ1ZyBpbiB0aGUgZHJpdmVyIVxuIik7CisJCXZiLT5zdGF0ZSA9IHN0YXRlOworCX0KK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgb21hcDI0eHhjYW1fdmJxX29wcyA9IHsKKwkuYnVmX3NldHVwICAgPSBvbWFwMjR4eGNhbV92YnFfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gb21hcDI0eHhjYW1fdmJxX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgID0gb21hcDI0eHhjYW1fdmJxX3F1ZXVlLAorCS5idWZfcmVsZWFzZSA9IG9tYXAyNHh4Y2FtX3ZicV9yZWxlYXNlLAorfTsKKworLyoKKyAqCisgKiBPTUFQIG1haW4gY2FtZXJhIHN5c3RlbQorICoKKyAqLworCisvKgorICogUmVzZXQgY2FtZXJhIGJsb2NrIHRvIHBvd2VyLW9uIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9wb3dlcm9uX3Jlc2V0KHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwlpbnQgbWF4X2xvb3AgPSBSRVNFVF9USU1FT1VUX05TOworCisJLyogUmVzZXQgd2hvbGUgY2FtZXJhIHN1YnN5c3RlbSAqLworCW9tYXAyNHh4Y2FtX3JlZ19vdXQoY2FtLT5tbWlvX2Jhc2UsCisJCQkgICAgQ0FNX1NZU0NPTkZJRywKKwkJCSAgICBDQU1fU1lTQ09ORklHX1NPRlRSRVNFVCk7CisKKwkvKiBXYWl0IHRpbGwgaXQncyBmaW5pc2hlZCAqLworCXdoaWxlICghKG9tYXAyNHh4Y2FtX3JlZ19pbihjYW0tPm1taW9fYmFzZSwgQ0FNX1NZU1NUQVRVUykKKwkJICYgQ0FNX1NZU1NUQVRVU19SRVNFVERPTkUpCisJICAgICAgICYmIC0tbWF4X2xvb3ApIHsKKwkJbmRlbGF5KDEpOworCX0KKworCWlmICghKG9tYXAyNHh4Y2FtX3JlZ19pbihjYW0tPm1taW9fYmFzZSwgQ0FNX1NZU1NUQVRVUykKKwkgICAgICAmIENBTV9TWVNTVEFUVVNfUkVTRVRET05FKSkKKwkJZGV2X2VycihjYW0tPmRldiwgImNhbWVyYSBzb2Z0IHJlc2V0IHRpbWVvdXRcbiIpOworfQorCisvKgorICogKFJlKWluaXRpYWxpc2UgdGhlIGNhbWVyYSBibG9jay4KKyAqLworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1faHdpbml0KHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwlvbWFwMjR4eGNhbV9wb3dlcm9uX3Jlc2V0KGNhbSk7CisKKwkvKiBzZXQgdGhlIGNhbWVyYSBzdWJzeXN0ZW0gYXV0b2lkbGUgYml0ICovCisJb21hcDI0eHhjYW1fcmVnX291dChjYW0tPm1taW9fYmFzZSwgQ0FNX1NZU0NPTkZJRywKKwkJCSAgICBDQU1fU1lTQ09ORklHX0FVVE9JRExFKTsKKworCS8qIHNldCB0aGUgY2FtZXJhIE1NVSBhdXRvaWRsZSBiaXQgKi8KKwlvbWFwMjR4eGNhbV9yZWdfb3V0KGNhbS0+bW1pb19iYXNlLAorCQkJICAgIENBTU1NVV9SRUdfT0ZGU0VUICsgQ0FNTU1VX1NZU0NPTkZJRywKKwkJCSAgICBDQU1NTVVfU1lTQ09ORklHX0FVVE9JRExFKTsKKworCW9tYXAyNHh4Y2FtX2NvcmVfaHdpbml0KGNhbSk7CisKKwlvbWFwMjR4eGNhbV9kbWFfaHdpbml0KCZjYW0tPnNnZG1hLmRtYSk7Cit9CisKKy8qCisgKiBDYWxsYmFjayBmb3IgZG1hIHRyYW5zZmVyIHN0YWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9zdGFsbGVkX2RtYV9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gKHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKilkYXRhOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2FtLT5pbl9yZXNldCkpIHsKKwkJZGV2X2RiZyhjYW0tPmRldiwgImRtYSBzdGFsbGVkLCByZXNldHRpbmcgY2FtZXJhXG4iKTsKKwkJb21hcDI0eHhjYW1fcmVzZXQoY2FtKTsKKwl9Cit9CisKKy8qCisgKiBTdG9wIGNhcHR1cmUuIE1hcmsgd2UncmUgZG9pbmcgYSByZXNldCwgc3RvcCBETUEgdHJhbnNmZXJzIGFuZAorICogY29yZS4gKE5vIG5ldyBzY2F0dGVyLWdhdGhlciB0cmFuc2ZlcnMgd2lsbCBiZSBxdWV1ZWQgd2hpbHN0CisgKiBpbl9yZXNldCBpcyBub24temVyby4pCisgKgorICogSWYgb21hcDI0eHhjYW1fY2FwdHVyZV9zdG9wIGlzIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzIGF0CisgKiBvbmNlLCBvbmx5IHRoZSBmaXJzdCBjYWxsIHdpbGwgaGF2ZSBhbiBlZmZlY3QuIFNpbWlsYXJseSwgdGhlIGxhc3QKKyAqIGNhbGwgb21hcDI0eHhjYW1fc3RyZWFtaW5nX2NvbnQgd2lsbCBoYXZlIGVmZmVjdC4KKyAqCisgKiBTZXJpYWxpc2F0aW9uIGlzIGVuc3VyZWQgYnkgdXNpbmcgY2FtLT5jb3JlX2VuYWJsZV9kaXNhYmxlX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIG9tYXAyNHh4Y2FtX2NhcHR1cmVfc3RvcChzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmNvcmVfZW5hYmxlX2Rpc2FibGVfbG9jaywgZmxhZ3MpOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjYW0tPmluX3Jlc2V0KSAhPSAxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+Y29yZV9lbmFibGVfZGlzYWJsZV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlvbWFwMjR4eGNhbV9jb3JlX2Rpc2FibGUoY2FtKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+Y29yZV9lbmFibGVfZGlzYWJsZV9sb2NrLCBmbGFncyk7CisKKwlvbWFwMjR4eGNhbV9zZ2RtYV9zeW5jKCZjYW0tPnNnZG1hKTsKK30KKworLyoKKyAqIFJlc2V0IGFuZCBjb250aW51ZSBzdHJlYW1pbmcuCisgKgorICogTm90ZTogUmVzZXR0aW5nIHRoZSBjYW1lcmEgRklGTyB2aWEgdGhlIENDX1JTVCBiaXQgaW4gdGhlIENDX0NUUkwKKyAqIHJlZ2lzdGVyIGlzIHN1cHBvc2VkIHRvIGJlIHN1ZmZpY2llbnQgdG8gcmVjb3ZlciBmcm9tIGEgY2FtZXJhCisgKiBpbnRlcmZhY2UgZXJyb3IsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgZW5vdWdoLiBJZiB3ZSBvbmx5IGRvCisgKiB0aGF0IHRoZW4gc3Vic2VxdWVudCBpbWFnZSBjYXB0dXJlcyBhcmUgb3V0IG9mIHN5bmMgYnkgZWl0aGVyIG9uZQorICogb3IgdHdvIHRpbWVzIERNQV9USFJFU0hPTEQgYnl0ZXMuIFJlc2V0dGluZyBhbmQgcmUtaW5pdGlhbGl6aW5nIHRoZQorICogZW50aXJlIGNhbWVyYSBzdWJzeXN0ZW0gcHJldmVudHMgdGhlIHByb2JsZW0gd2l0aCBmcmFtZQorICogc3luY2hyb25pemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9jYXB0dXJlX2NvbnQoc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5jb3JlX2VuYWJsZV9kaXNhYmxlX2xvY2ssIGZsYWdzKTsKKworCWlmIChhdG9taWNfcmVhZCgmY2FtLT5pbl9yZXNldCkgIT0gMSkKKwkJZ290byBvdXQ7CisKKwlvbWFwMjR4eGNhbV9od2luaXQoY2FtKTsKKworCW9tYXAyNHh4Y2FtX3NlbnNvcl9pZl9lbmFibGUoY2FtKTsKKworCW9tYXAyNHh4Y2FtX3NnZG1hX3Byb2Nlc3MoJmNhbS0+c2dkbWEpOworCisJaWYgKGNhbS0+c2dkbWFfaW5fcXVldWUpCisJCW9tYXAyNHh4Y2FtX2NvcmVfZW5hYmxlKGNhbSk7CisKK291dDoKKwlhdG9taWNfZGVjKCZjYW0tPmluX3Jlc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmNvcmVfZW5hYmxlX2Rpc2FibGVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3NpemVfdAorb21hcDI0eHhjYW1fc3RyZWFtaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNhbS0+c3RyZWFtaW5nID8gICJhY3RpdmUiIDogImluYWN0aXZlIik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3RyZWFtaW5nLCBTX0lSVUdPLCBvbWFwMjR4eGNhbV9zdHJlYW1pbmdfc2hvdywgTlVMTCk7CisKKy8qCisgKiBTdG9wIGNhcHR1cmUgYW5kIHJlc3RhcnQgaXQuIEkuZS4gcmVzZXQgdGhlIGNhbWVyYSBkdXJpbmcgdXNlLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9yZXNldChzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJb21hcDI0eHhjYW1fY2FwdHVyZV9zdG9wKGNhbSk7CisJb21hcDI0eHhjYW1fY2FwdHVyZV9jb250KGNhbSk7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9tYXAyNHh4Y2FtX2lzcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gKHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKilhcmc7CisJdTMyIGlycXN0YXR1czsKKwl1bnNpZ25lZCBpbnQgaXJxaGFuZGxlZCA9IDA7CisKKwlpcnFzdGF0dXMgPSBvbWFwMjR4eGNhbV9yZWdfaW4oY2FtLT5tbWlvX2Jhc2UsIENBTV9JUlFTVEFUVVMpOworCisJaWYgKGlycXN0YXR1cyAmCisJICAgIChDQU1fSVJRU1RBVFVTX0RNQV9JUlEyIHwgQ0FNX0lSUVNUQVRVU19ETUFfSVJRMQorCSAgICAgfCBDQU1fSVJRU1RBVFVTX0RNQV9JUlEwKSkgeworCQlvbWFwMjR4eGNhbV9kbWFfaXNyKCZjYW0tPnNnZG1hLmRtYSk7CisJCWlycWhhbmRsZWQgPSAxOworCX0KKwlpZiAoaXJxc3RhdHVzICYgQ0FNX0lSUVNUQVRVU19DQ19JUlEpIHsKKwkJb21hcDI0eHhjYW1fY29yZV9pc3IoY2FtKTsKKwkJaXJxaGFuZGxlZCA9IDE7CisJfQorCWlmIChpcnFzdGF0dXMgJiBDQU1fSVJRU1RBVFVTX01NVV9JUlEpCisJCWRldl9lcnIoY2FtLT5kZXYsICJ1bmhhbmRsZWQgY2FtZXJhIE1NVSBpbnRlcnJ1cHQhXG4iKTsKKworCXJldHVybiBJUlFfUkVUVkFMKGlycWhhbmRsZWQpOworfQorCisvKgorICoKKyAqIFNlbnNvciBoYW5kbGluZy4KKyAqCisgKi8KKworLyoKKyAqIEVuYWJsZSB0aGUgZXh0ZXJuYWwgc2Vuc29yIGludGVyZmFjZS4gVHJ5IHRvIG5lZ290aWF0ZSBpbnRlcmZhY2UKKyAqIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2Vuc29yIGFuZCBzdGFydCB1c2luZyB0aGUgbmV3IG9uZXMuIFRoZSBjYWxscworICogdG8gc2Vuc29yX2lmX2VuYWJsZSBhbmQgc2Vuc29yX2lmX2Rpc2FibGUgbmVlZCBub3QgdG8gYmUgYmFsYW5jZWQuCisgKi8KK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fc2Vuc29yX2lmX2VuYWJsZShzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJaW50IHJ2YWw7CisJc3RydWN0IHY0bDJfaWZwYXJtIHA7CisKKwlydmFsID0gdmlkaW9jX2ludF9nX2lmcGFybShjYW0tPnNkZXYsICZwKTsKKwlpZiAocnZhbCkgeworCQlkZXZfZXJyKGNhbS0+ZGV2LCAidmlkaW9jX2ludF9nX2lmcGFybSBmYWlsZWQgd2l0aCAlZFxuIiwgcnZhbCk7CisJCXJldHVybiBydmFsOworCX0KKworCWNhbS0+aWZfdHlwZSA9IHAuaWZfdHlwZTsKKworCWNhbS0+Y2NfY3RybCA9IENDX0NUUkxfQ0NfRU47CisKKwlzd2l0Y2ggKHAuaWZfdHlwZSkgeworCWNhc2UgVjRMMl9JRl9UWVBFX0JUNjU2OgorCQlpZiAocC51LmJ0NjU2LmZyYW1lX3N0YXJ0X29uX3Jpc2luZ192cykKKwkJCWNhbS0+Y2NfY3RybCB8PSBDQ19DVFJMX05PQlRfU1lOQ0hSTzsKKwkJaWYgKHAudS5idDY1Ni5idF9zeW5jX2NvcnJlY3QpCisJCQljYW0tPmNjX2N0cmwgfD0gQ0NfQ1RSTF9CVF9DT1JSRUNUOworCQlpZiAocC51LmJ0NjU2LnN3YXApCisJCQljYW0tPmNjX2N0cmwgfD0gQ0NfQ1RSTF9QQVJfT1JERVJDQU07CisJCWlmIChwLnUuYnQ2NTYubGF0Y2hfY2xrX2ludikKKwkJCWNhbS0+Y2NfY3RybCB8PSBDQ19DVFJMX1BBUl9DTEtfUE9MOworCQlpZiAocC51LmJ0NjU2Lm5vYnRfaHNfaW52KQorCQkJY2FtLT5jY19jdHJsIHw9IENDX0NUUkxfTk9CVF9IU19QT0w7CisJCWlmIChwLnUuYnQ2NTYubm9idF92c19pbnYpCisJCQljYW0tPmNjX2N0cmwgfD0gQ0NfQ1RSTF9OT0JUX1ZTX1BPTDsKKworCQlzd2l0Y2ggKHAudS5idDY1Ni5tb2RlKSB7CisJCWNhc2UgVjRMMl9JRl9UWVBFX0JUNjU2X01PREVfTk9CVF84QklUOgorCQkJY2FtLT5jY19jdHJsIHw9IENDX0NUUkxfUEFSX01PREVfTk9CVDg7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0lGX1RZUEVfQlQ2NTZfTU9ERV9OT0JUXzEwQklUOgorCQkJY2FtLT5jY19jdHJsIHw9IENDX0NUUkxfUEFSX01PREVfTk9CVDEwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9JRl9UWVBFX0JUNjU2X01PREVfTk9CVF8xMkJJVDoKKwkJCWNhbS0+Y2NfY3RybCB8PSBDQ19DVFJMX1BBUl9NT0RFX05PQlQxMjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfSUZfVFlQRV9CVDY1Nl9NT0RFX0JUXzhCSVQ6CisJCQljYW0tPmNjX2N0cmwgfD0gQ0NfQ1RSTF9QQVJfTU9ERV9CVDg7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0lGX1RZUEVfQlQ2NTZfTU9ERV9CVF8xMEJJVDoKKwkJCWNhbS0+Y2NfY3RybCB8PSBDQ19DVFJMX1BBUl9NT0RFX0JUMTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoY2FtLT5kZXYsCisJCQkJImJ0NjU2IGludGVyZmFjZSBtb2RlICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJcC51LmJ0NjU2Lm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyoKKwkJICogVGhlIGNsb2NrIHJhdGUgdGhhdCB0aGUgc2Vuc29yIHdhbnRzIGhhcyBjaGFuZ2VkLgorCQkgKiBXZSBoYXZlIHRvIGFkanVzdCB0aGUgeGNsayBmcm9tIE9NQVAgMiBzaWRlIHRvCisJCSAqIG1hdGNoIHRoZSBzZW5zb3IncyB3aXNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisJCSAqLworCQlpZiAocC51LmJ0NjU2LmNsb2NrX2N1cnIgIT0gY2FtLT5pZl91LmJ0NjU2LnhjbGspIHsKKwkJCXUzMiB4Y2xrID0gcC51LmJ0NjU2LmNsb2NrX2N1cnI7CisJCQl1MzIgZGl2aXNvcjsKKworCQkJaWYgKHhjbGsgPT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKHhjbGsgPiBDQU1fTUNMSykKKwkJCQl4Y2xrID0gQ0FNX01DTEs7CisKKwkJCWRpdmlzb3IgPSBDQU1fTUNMSyAvIHhjbGs7CisJCQlpZiAoZGl2aXNvciAqIHhjbGsgPCBDQU1fTUNMSykKKwkJCQlkaXZpc29yKys7CisJCQlpZiAoQ0FNX01DTEsgLyBkaXZpc29yIDwgcC51LmJ0NjU2LmNsb2NrX21pbgorCQkJICAgICYmIGRpdmlzb3IgPiAxKQorCQkJCWRpdmlzb3ItLTsKKwkJCWlmIChkaXZpc29yID4gMzApCisJCQkJZGl2aXNvciA9IDMwOworCisJCQl4Y2xrID0gQ0FNX01DTEsgLyBkaXZpc29yOworCisJCQlpZiAoeGNsayA8IHAudS5idDY1Ni5jbG9ja19taW4KKwkJCSAgICB8fCB4Y2xrID4gcC51LmJ0NjU2LmNsb2NrX21heCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJY2FtLT5pZl91LmJ0NjU2LnhjbGsgPSB4Y2xrOworCQl9CisJCW9tYXAyNHh4Y2FtX2NvcmVfeGNsa19zZXQoY2FtLCBjYW0tPmlmX3UuYnQ2NTYueGNsayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIEZJWE1FOiBob3cgYWJvdXQgb3RoZXIgaW50ZXJmYWNlcz8gKi8KKwkJZGV2X2VycihjYW0tPmRldiwgImludGVyZmFjZSB0eXBlICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlwLmlmX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fc2Vuc29yX2lmX2Rpc2FibGUoY29uc3Qgc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCXN3aXRjaCAoY2FtLT5pZl90eXBlKSB7CisJY2FzZSBWNEwyX0lGX1RZUEVfQlQ2NTY6CisJCW9tYXAyNHh4Y2FtX2NvcmVfeGNsa19zZXQoY2FtLCAwKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgc2Vuc29yIGhhcmR3YXJlLgorICovCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX3NlbnNvcl9pbml0KHN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzZGV2ID0gY2FtLT5zZGV2OworCisJb21hcDI0eHhjYW1fY2xvY2tfb24oY2FtKTsKKwllcnIgPSBvbWFwMjR4eGNhbV9zZW5zb3JfaWZfZW5hYmxlKGNhbSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGNhbS0+ZGV2LCAic2Vuc29yIGludGVyZmFjZSBjb3VsZCBub3QgYmUgZW5hYmxlZCBhdCAiCisJCQkiaW5pdGlhbGlzYXRpb24sICVkXG4iLCBlcnIpOworCQljYW0tPnNkZXYgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBwb3dlciB1cCBzZW5zb3IgZHVyaW5nIHNlbnNvciBpbml0aWFsaXphdGlvbiAqLworCXZpZGlvY19pbnRfc19wb3dlcihzZGV2LCAxKTsKKworCWVyciA9IHZpZGlvY19pbnRfZGV2X2luaXQoc2Rldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGNhbS0+ZGV2LCAiY2Fubm90IGluaXRpYWxpemUgc2Vuc29yLCBlcnJvciAlZFxuIiwgZXJyKTsKKwkJLyogU2Vuc29yIGluaXQgZmFpbGVkIC0tLSBpdCdzIG5vbmV4aXN0ZW50IHRvIHVzISAqLworCQljYW0tPnNkZXYgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfaW5mbyhjYW0tPmRldiwgInNlbnNvciBpcyAlc1xuIiwgc2Rldi0+bmFtZSk7CisKK291dDoKKwlvbWFwMjR4eGNhbV9zZW5zb3JfaWZfZGlzYWJsZShjYW0pOworCW9tYXAyNHh4Y2FtX2Nsb2NrX29mZihjYW0pOworCisJdmlkaW9jX2ludF9zX3Bvd2VyKHNkZXYsIDApOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fc2Vuc29yX2V4aXQoc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCWlmIChjYW0tPnNkZXYpCisJCXZpZGlvY19pbnRfZGV2X2V4aXQoY2FtLT5zZGV2KTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fc2Vuc29yX2Rpc2FibGUoc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtKQoreworCW9tYXAyNHh4Y2FtX3NlbnNvcl9pZl9kaXNhYmxlKGNhbSk7CisJb21hcDI0eHhjYW1fY2xvY2tfb2ZmKGNhbSk7CisJdmlkaW9jX2ludF9zX3Bvd2VyKGNhbS0+c2RldiwgMCk7Cit9CisKKy8qCisgKiBQb3dlci11cCBhbmQgY29uZmlndXJlIGNhbWVyYSBzZW5zb3IuIEl0J3MgcmVhZHkgZm9yIGNhcHR1cmluZyBub3cuCisgKi8KK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fc2Vuc29yX2VuYWJsZShzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0pCit7CisJaW50IHJ2YWw7CisKKwlvbWFwMjR4eGNhbV9jbG9ja19vbihjYW0pOworCisJb21hcDI0eHhjYW1fc2Vuc29yX2lmX2VuYWJsZShjYW0pOworCisJcnZhbCA9IHZpZGlvY19pbnRfc19wb3dlcihjYW0tPnNkZXYsIDEpOworCWlmIChydmFsKQorCQlnb3RvIG91dDsKKworCXJ2YWwgPSB2aWRpb2NfaW50X2luaXQoY2FtLT5zZGV2KTsKKwlpZiAocnZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCW9tYXAyNHh4Y2FtX3NlbnNvcl9kaXNhYmxlKGNhbSk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIHZvaWQgb21hcDI0eHhjYW1fc2Vuc29yX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlLAorCQkJICAgICBzZW5zb3JfcmVzZXRfd29yayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNhbS0+cmVzZXRfZGlzYWJsZSkpCisJCXJldHVybjsKKworCW9tYXAyNHh4Y2FtX2NhcHR1cmVfc3RvcChjYW0pOworCisJaWYgKHZpZGlvY19pbnRfcmVzZXQoY2FtLT5zZGV2KSA9PSAwKSB7CisJCXZpZGlvY19pbnRfaW5pdChjYW0tPnNkZXYpOworCX0gZWxzZSB7CisJCS8qIENhbid0IHJlc2V0IGl0IGJ5IHZpZGlvY19pbnRfcmVzZXQuICovCisJCW9tYXAyNHh4Y2FtX3NlbnNvcl9kaXNhYmxlKGNhbSk7CisJCW9tYXAyNHh4Y2FtX3NlbnNvcl9lbmFibGUoY2FtKTsKKwl9CisKKwlvbWFwMjR4eGNhbV9jYXB0dXJlX2NvbnQoY2FtKTsKK30KKworLyoKKyAqCisgKiBJT0NUTCBpbnRlcmZhY2UuCisgKgorICovCisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKm9maCA9IGZoOworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9maC0+Y2FtOworCisJc3RybGNweShjYXAtPmRyaXZlciwgQ0FNX05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5jYXJkLCBjYW0tPnZmZC0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCWNhcC0+dmVyc2lvbiA9IE9NQVAyNFhYQ0FNX1ZFUlNJT047CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlpbnQgcnZhbDsKKworCXJ2YWwgPSB2aWRpb2NfaW50X2VudW1fZm10X2NhcChjYW0tPnNkZXYsIGYpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKm9maCA9IGZoOworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9maC0+Y2FtOworCWludCBydmFsOworCisJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CisJcnZhbCA9IHZpZGlvY19pbnRfZ19mbXRfY2FwKGNhbS0+c2RldiwgZik7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlpbnQgcnZhbDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZykgeworCQlydmFsID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlydmFsID0gdmlkaW9jX2ludF9zX2ZtdF9jYXAoY2FtLT5zZGV2LCBmKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisKKwlpZiAoIXJ2YWwpIHsKKwkJbXV0ZXhfbG9jaygmb2ZoLT52YnEudmJfbG9jayk7CisJCW9maC0+cGl4ID0gZi0+Zm10LnBpeDsKKwkJbXV0ZXhfdW5sb2NrKCZvZmgtPnZicS52Yl9sb2NrKTsKKwl9CisKKwltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJdmlkaW9jX2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlpbnQgcnZhbDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCXJ2YWwgPSB2aWRpb2NfaW50X3RyeV9mbXRfY2FwKGNhbS0+c2RldiwgZik7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKmIpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlpbnQgcnZhbDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZykgeworCQltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCW9tYXAyNHh4Y2FtX3ZicV9mcmVlX21tYXBfYnVmZmVycygmb2ZoLT52YnEpOworCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisKKwlydmFsID0gdmlkZW9idWZfcmVxYnVmcygmb2ZoLT52YnEsIGIpOworCisJLyoKKwkgKiBFaXRoZXIgdmlkZW9idWZfcmVxYnVmcyBmYWlsZWQgb3IgdGhlIGJ1ZmZlcnMgYXJlIG5vdAorCSAqIG1lbW9yeS1tYXBwZWQgKHdoaWNoIHdvdWxkIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24pLgorCSAqLworCWlmIChydmFsIDwgMCB8fCBiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJZ290byBvdXQ7CisKKwlydmFsID0gb21hcDI0eHhjYW1fdmJxX2FsbG9jX21tYXBfYnVmZmVycygmb2ZoLT52YnEsIHJ2YWwpOworCWlmIChydmFsKQorCQlvbWFwMjR4eGNhbV92YnFfZnJlZV9tbWFwX2J1ZmZlcnMoJm9maC0+dmJxKTsKKworb3V0OgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1Zigmb2ZoLT52YnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqb2ZoID0gZmg7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1Zigmb2ZoLT52YnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKm9maCA9IGZoOworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9maC0+Y2FtOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOworCWludCBydmFsOworCit2aWRlb2J1Zl9kcWJ1Zl9hZ2FpbjoKKwlydmFsID0gdmlkZW9idWZfZHFidWYoJm9maC0+dmJxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJaWYgKHJ2YWwpCisJCWdvdG8gb3V0OworCisJdmIgPSBvZmgtPnZicS5idWZzW2ItPmluZGV4XTsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCS8qIF9uZWVkc19yZXNldCByZXR1cm5zIC1FSU8gaWYgcmVzZXQgaXMgcmVxdWlyZWQuICovCisJcnZhbCA9IHZpZGlvY19pbnRfZ19uZWVkc19yZXNldChjYW0tPnNkZXYsICh2b2lkICopdmItPmJhZGRyKTsKKwltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCWlmIChydmFsID09IC1FSU8pCisJCXNjaGVkdWxlX3dvcmsoJmNhbS0+c2Vuc29yX3Jlc2V0X3dvcmspOworCWVsc2UKKwkJcnZhbCA9IDA7CisKK291dDoKKwkvKgorCSAqIFRoaXMgaXMgYSBoYWNrLiBXZSBkb24ndCB3YW50IHRvIHNob3cgLUVJTyB0byB0aGUgdXNlcgorCSAqIHNwYWNlLiBSZXF1ZXVlIHRoZSBidWZmZXIgYW5kIHRyeSBhZ2FpbiBpZiB3ZSdyZSBub3QgZG9pbmcKKwkgKiB0aGlzIGluIG5vbi1ibG9ja2luZyBtb2RlLgorCSAqLworCWlmIChydmFsID09IC1FSU8pIHsKKwkJdmlkZW9idWZfcWJ1Zigmb2ZoLT52YnEsIGIpOworCQlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCisJCQlnb3RvIHZpZGVvYnVmX2RxYnVmX2FnYWluOworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIGEgdmlkZW9idWZfYnVmZmVyIG5vdyAtLS0gbWF5YmUgbmV4dAorCQkgKiB0aW1lLi4uCisJCSAqLworCQlydmFsID0gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggKm9maCA9IGZoOworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9maC0+Y2FtOworCWludCBydmFsOworCisJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CisJaWYgKGNhbS0+c3RyZWFtaW5nKSB7CisJCXJ2YWwgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXJ2YWwgPSBvbWFwMjR4eGNhbV9zZW5zb3JfaWZfZW5hYmxlKGNhbSk7CisJaWYgKHJ2YWwpIHsKKwkJZGV2X2RiZyhjYW0tPmRldiwgInZpZGlvY19pbnRfZ19pZnBhcm0gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcnZhbCA9IHZpZGVvYnVmX3N0cmVhbW9uKCZvZmgtPnZicSk7CisJaWYgKCFydmFsKSB7CisJCWNhbS0+c3RyZWFtaW5nID0gZmlsZTsKKwkJc3lzZnNfbm90aWZ5KCZjYW0tPmRldi0+a29iaiwgTlVMTCwgInN0cmVhbWluZyIpOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmb2ZoLT52YnE7CisJaW50IHJ2YWw7CisKKwlhdG9taWNfaW5jKCZjYW0tPnJlc2V0X2Rpc2FibGUpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXJ2YWwgPSB2aWRlb2J1Zl9zdHJlYW1vZmYocSk7CisJaWYgKCFydmFsKSB7CisJCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCQljYW0tPnN0cmVhbWluZyA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisJCXN5c2ZzX25vdGlmeSgmY2FtLT5kZXYtPmtvYmosIE5VTEwsICJzdHJlYW1pbmciKTsKKwl9CisKKwlhdG9taWNfZGVjKCZjYW0tPnJlc2V0X2Rpc2FibGUpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQoreworCWlmIChpbnAtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJsY3B5KGlucC0+bmFtZSwgImNhbWVyYSIsIHNpemVvZihpbnAtPm5hbWUpKTsKKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICphKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqb2ZoID0gZmg7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gb2ZoLT5jYW07CisJaW50IHJ2YWw7CisKKwlydmFsID0gdmlkaW9jX2ludF9xdWVyeWN0cmwoY2FtLT5zZGV2LCBhKTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmEpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlpbnQgcnZhbDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCXJ2YWwgPSB2aWRpb2NfaW50X2dfY3RybChjYW0tPnNkZXYsIGEpOworCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICphKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqb2ZoID0gZmg7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gb2ZoLT5jYW07CisJaW50IHJ2YWw7CisKKwltdXRleF9sb2NrKCZjYW0tPm11dGV4KTsKKwlydmFsID0gdmlkaW9jX2ludF9zX2N0cmwoY2FtLT5zZGV2LCBhKTsKKwltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkgeworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqb2ZoID0gZmg7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gb2ZoLT5jYW07CisJaW50IHJ2YWw7CisKKwlpZiAoYS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CisJcnZhbCA9IHZpZGlvY19pbnRfZ19wYXJtKGNhbS0+c2RldiwgYSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpvZmggPSBmaDsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvZmgtPmNhbTsKKwlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIG9sZF9zdHJlYW1wYXJtOworCWludCBydmFsOworCisJaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZykgeworCQlydmFsID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlvbGRfc3RyZWFtcGFybS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCXJ2YWwgPSB2aWRpb2NfaW50X2dfcGFybShjYW0tPnNkZXYsICZvbGRfc3RyZWFtcGFybSk7CisJaWYgKHJ2YWwpCisJCWdvdG8gb3V0OworCisJcnZhbCA9IHZpZGlvY19pbnRfc19wYXJtKGNhbS0+c2RldiwgYSk7CisJaWYgKHJ2YWwpCisJCWdvdG8gb3V0OworCisJcnZhbCA9IG9tYXAyNHh4Y2FtX3NlbnNvcl9pZl9lbmFibGUoY2FtKTsKKwkvKgorCSAqIFJldmVydCB0byBvbGQgc3RyZWFtaW5nIHBhcmFtZXRlcnMgaWYgZW5hYmxpbmcgc2Vuc29yCisJICogaW50ZXJmYWNlIHdpdGggdGhlIG5ldyBvbmVzIGZhaWxlZC4KKwkgKi8KKwlpZiAocnZhbCkKKwkJdmlkaW9jX2ludF9zX3Bhcm0oY2FtLT5zZGV2LCAmb2xkX3N0cmVhbXBhcm0pOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCXJldHVybiBydmFsOworfQorCisvKgorICoKKyAqIEZpbGUgb3BlcmF0aW9ucy4KKyAqCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBvbWFwMjR4eGNhbV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gZmgtPmNhbTsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZyAhPSBmaWxlKSB7CisJCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisJCXJldHVybiBQT0xMRVJSOworCX0KKwltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCisJbXV0ZXhfbG9jaygmZmgtPnZicS52Yl9sb2NrKTsKKwlpZiAobGlzdF9lbXB0eSgmZmgtPnZicS5zdHJlYW0pKSB7CisJCW11dGV4X3VubG9jaygmZmgtPnZicS52Yl9sb2NrKTsKKwkJcmV0dXJuIFBPTExFUlI7CisJfQorCXZiID0gbGlzdF9lbnRyeShmaC0+dmJxLnN0cmVhbS5uZXh0LCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBzdHJlYW0pOworCW11dGV4X3VubG9jaygmZmgtPnZicS52Yl9sb2NrKTsKKworCXBvbGxfd2FpdChmaWxlLCAmdmItPmRvbmUsIHdhaXQpOworCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ET05FIHx8IHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9FUlJPUikKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMjR4eGNhbV9tbWFwX2J1ZmZlcnMoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gZmgtPmNhbTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZicSA9ICZmaC0+dmJxOworCXVuc2lnbmVkIGludCBmaXJzdCwgbGFzdCwgc2l6ZSwgaSwgajsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZykgeworCQltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCW11dGV4X2xvY2soJnZicS0+dmJfbG9jayk7CisKKwkvKiBsb29rIGZvciBmaXJzdCBidWZmZXIgdG8gbWFwICovCisJZm9yIChmaXJzdCA9IDA7IGZpcnN0IDwgVklERU9fTUFYX0ZSQU1FOyBmaXJzdCsrKSB7CisJCWlmIChOVUxMID09IHZicS0+YnVmc1tmaXJzdF0pCisJCQljb250aW51ZTsKKwkJaWYgKFY0TDJfTUVNT1JZX01NQVAgIT0gdmJxLT5idWZzW2ZpcnN0XS0+bWVtb3J5KQorCQkJY29udGludWU7CisJCWlmICh2YnEtPmJ1ZnNbZmlyc3RdLT5ib2ZmID09ICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKQorCQkJYnJlYWs7CisJfQorCisJLyogbG9vayBmb3IgbGFzdCBidWZmZXIgdG8gbWFwICovCisJZm9yIChzaXplID0gMCwgbGFzdCA9IGZpcnN0OyBsYXN0IDwgVklERU9fTUFYX0ZSQU1FOyBsYXN0KyspIHsKKwkJaWYgKE5VTEwgPT0gdmJxLT5idWZzW2xhc3RdKQorCQkJY29udGludWU7CisJCWlmIChWNEwyX01FTU9SWV9NTUFQICE9IHZicS0+YnVmc1tsYXN0XS0+bWVtb3J5KQorCQkJY29udGludWU7CisJCXNpemUgKz0gdmJxLT5idWZzW2xhc3RdLT5ic2l6ZTsKKwkJaWYgKHNpemUgPT0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkpCisJCQlicmVhazsKKwl9CisKKwlzaXplID0gMDsKKwlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKHZicS0+YnVmc1tpXSk7CisKKwkJZm9yIChqID0gMDsgaiA8IGRtYS0+c2dsZW47IGorKykgeworCQkJZXJyID0gcmVtYXBfcGZuX3JhbmdlKAorCQkJCXZtYSwgdm1hLT52bV9zdGFydCArIHNpemUsCisJCQkJcGFnZV90b19wZm4oc2dfcGFnZSgmZG1hLT5zZ2xpc3Rbal0pKSwKKwkJCQlzZ19kbWFfbGVuKCZkbWEtPnNnbGlzdFtqXSksIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisJCQlzaXplICs9IHNnX2RtYV9sZW4oJmRtYS0+c2dsaXN0W2pdKTsKKwkJfQorCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmdmJxLT52Yl9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcnZhbDsKKworCS8qIGxldCB0aGUgdmlkZW8tYnVmIG1hcHBlciBjaGVjayBhcmd1bWVudHMgYW5kIHNldC11cCBzdHJ1Y3R1cmVzICovCisJcnZhbCA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJxLCB2bWEpOworCWlmIChydmFsKQorCQlyZXR1cm4gcnZhbDsKKworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwkvKiBkbyBtYXBwaW5nIHRvIG91ciBhbGxvY2F0ZWQgYnVmZmVycyAqLworCXJ2YWwgPSBvbWFwMjR4eGNhbV9tbWFwX2J1ZmZlcnMoZmlsZSwgdm1hKTsKKwkvKgorCSAqIEluIGNhc2Ugb2YgZXJyb3IsIGZyZWUgdm1hLT52bV9wcml2YXRlX2RhdGEgYWxsb2NhdGVkIGJ5CisJICogdmlkZW9idWZfbW1hcF9tYXBwZXIuCisJICovCisJaWYgKHJ2YWwpCisJCWtmcmVlKHZtYS0+dm1fcHJpdmF0ZV9kYXRhKTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBvbWFwMjR4eGNhbS5wcml2OworCXN0cnVjdCBvbWFwMjR4eGNhbV9maCAqZmg7CisJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKKworCWlmICghY2FtIHx8ICFjYW0tPnZmZCB8fCAoY2FtLT52ZmQtPm1pbm9yICE9IG1pbm9yKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOworCWlmIChmaCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnNkZXYgPT0gTlVMTCB8fCAhdHJ5X21vZHVsZV9nZXQoY2FtLT5zZGV2LT5tb2R1bGUpKSB7CisJCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisJCWdvdG8gb3V0X3RyeV9tb2R1bGVfZ2V0OworCX0KKworCWlmIChhdG9taWNfaW5jX3JldHVybigmY2FtLT51c2VycykgPT0gMSkgeworCQlvbWFwMjR4eGNhbV9od2luaXQoY2FtKTsKKwkJaWYgKG9tYXAyNHh4Y2FtX3NlbnNvcl9lbmFibGUoY2FtKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKwkJCWdvdG8gb3V0X29tYXAyNHh4Y2FtX3NlbnNvcl9lbmFibGU7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCWZoLT5jYW0gPSBjYW07CisJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CisJdmlkaW9jX2ludF9nX2ZtdF9jYXAoY2FtLT5zZGV2LCAmZm9ybWF0KTsKKwltdXRleF91bmxvY2soJmNhbS0+bXV0ZXgpOworCS8qIEZJWE1FOiBob3cgYWJvdXQgZmgtPnBpeCB3aGVuIHRoZXJlIGFyZSBtb3JlIHVzZXJzPyAqLworCWZoLT5waXggPSBmb3JtYXQuZm10LnBpeDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCisJc3Bpbl9sb2NrX2luaXQoJmZoLT52YnFfbG9jayk7CisKKwl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmaC0+dmJxLCAmb21hcDI0eHhjYW1fdmJxX29wcywgTlVMTCwKKwkJCQkmZmgtPnZicV9sb2NrLCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJVjRMMl9GSUVMRF9OT05FLAorCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwgZmgpOworCisJcmV0dXJuIDA7CisKK291dF9vbWFwMjR4eGNhbV9zZW5zb3JfZW5hYmxlOgorCW9tYXAyNHh4Y2FtX3Bvd2Vyb25fcmVzZXQoY2FtKTsKKwltb2R1bGVfcHV0KGNhbS0+c2Rldi0+bW9kdWxlKTsKKworb3V0X3RyeV9tb2R1bGVfZ2V0OgorCWtmcmVlKGZoKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBmaC0+Y2FtOworCisJYXRvbWljX2luYygmY2FtLT5yZXNldF9kaXNhYmxlKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBzdG9wIHN0cmVhbWluZyBjYXB0dXJlICovCisJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJxKTsKKworCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOworCWlmIChjYW0tPnN0cmVhbWluZyA9PSBmaWxlKSB7CisJCWNhbS0+c3RyZWFtaW5nID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKwkJc3lzZnNfbm90aWZ5KCZjYW0tPmRldi0+a29iaiwgTlVMTCwgInN0cmVhbWluZyIpOworCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CisJfQorCisJYXRvbWljX2RlYygmY2FtLT5yZXNldF9kaXNhYmxlKTsKKworCW9tYXAyNHh4Y2FtX3ZicV9mcmVlX21tYXBfYnVmZmVycygmZmgtPnZicSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgcmVzZXQgd29yayB3ZSBtaWdodCBoYXZlIHNjaGVkdWxlZCBpcyBub3QKKwkgKiBwZW5kaW5nISBJdCBtYXkgYmUgcnVuICpvbmx5KiBpZiB3ZSBoYXZlIHVzZXJzLiAoQW5kIGl0IG1heQorCSAqIG5vdCBiZSBzY2hlZHVsZWQgYW55bW9yZSBzaW5jZSBzdHJlYW1pbmcgaXMgYWxyZWFkeQorCSAqIGRpc2FibGVkLikKKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjYW0tPnVzZXJzKSA9PSAwKSB7CisJCW9tYXAyNHh4Y2FtX3NlbnNvcl9kaXNhYmxlKGNhbSk7CisJCW9tYXAyNHh4Y2FtX3Bvd2Vyb25fcmVzZXQoY2FtKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwltb2R1bGVfcHV0KGNhbS0+c2Rldi0+bW9kdWxlKTsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21hcDI0eHhjYW1fZm9wcyA9IHsKKwkubGxzZWVrCSA9IG5vX2xsc2VlaywKKwkuaW9jdGwJID0gdmlkZW9faW9jdGwyLAorCS5wb2xsCSA9IG9tYXAyNHh4Y2FtX3BvbGwsCisJLm1tYXAJID0gb21hcDI0eHhjYW1fbW1hcCwKKwkub3BlbgkgPSBvbWFwMjR4eGNhbV9vcGVuLAorCS5yZWxlYXNlID0gb21hcDI0eHhjYW1fcmVsZWFzZSwKK307CisKKy8qCisgKgorICogUG93ZXIgbWFuYWdlbWVudC4KKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBvbWFwMjR4eGNhbV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChhdG9taWNfcmVhZCgmY2FtLT51c2VycykgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWF0b21pY19yZWFkKCZjYW0tPnJlc2V0X2Rpc2FibGUpKQorCQlvbWFwMjR4eGNhbV9jYXB0dXJlX3N0b3AoY2FtKTsKKworCW9tYXAyNHh4Y2FtX3NlbnNvcl9kaXNhYmxlKGNhbSk7CisJb21hcDI0eHhjYW1fcG93ZXJvbl9yZXNldChjYW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNhbS0+dXNlcnMpID09IDApCisJCXJldHVybiAwOworCisJb21hcDI0eHhjYW1faHdpbml0KGNhbSk7CisJb21hcDI0eHhjYW1fc2Vuc29yX2VuYWJsZShjYW0pOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2FtLT5yZXNldF9kaXNhYmxlKSkKKwkJb21hcDI0eHhjYW1fY2FwdHVyZV9jb250KGNhbSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBvbWFwMjR4eGNhbV9pb2N0bF9mb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcmVxYnVmcwkJPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCT0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQk9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uCT0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCT0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2VudW1faW5wdXQJPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCT0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX3Bhcm0JCT0gdmlkaW9jX2dfcGFybSwKKwkudmlkaW9jX3NfcGFybQkJPSB2aWRpb2Nfc19wYXJtLAorfTsKKworLyoKKyAqCisgKiBDYW1lcmEgZGV2aWNlIChpLmUuIC9kZXYvdmlkZW8pLgorICoKKyAqLworCitzdGF0aWMgaW50IG9tYXAyNHh4Y2FtX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IHMtPnUuc2xhdmUtPm1hc3Rlci0+cHJpdjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJ2YWw7CisKKwkvKiBXZSBhbHJlYWR5IGhhdmUgYSBzbGF2ZS4gKi8KKwlpZiAoY2FtLT5zZGV2KQorCQlyZXR1cm4gLUVCVVNZOworCisJY2FtLT5zZGV2ID0gczsKKworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoY2FtLT5kZXYsICZkZXZfYXR0cl9zdHJlYW1pbmcpICE9IDApIHsKKwkJZGV2X2VycihjYW0tPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBzeXNmcyBlbnRyeVxuIik7CisJCXJ2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgKi8KKwl2ZmQgPSBjYW0tPnZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghdmZkKSB7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgdmlkZW8gZGV2aWNlIHN0cnVjdFxuIik7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisKKwl2ZmQtPnBhcmVudCA9IGNhbS0+ZGV2OworCisJc3RybGNweSh2ZmQtPm5hbWUsIENBTV9OQU1FLCBzaXplb2YodmZkLT5uYW1lKSk7CisJdmZkLT52ZmxfdHlwZQkJID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX0NIUk9NQUtFWTsKKwl2ZmQtPmZvcHMJCSA9ICZvbWFwMjR4eGNhbV9mb3BzOworCXZmZC0+bWlub3IJCSA9IC0xOworCXZmZC0+aW9jdGxfb3BzCQkgPSAmb21hcDI0eHhjYW1faW9jdGxfZm9wczsKKworCW9tYXAyNHh4Y2FtX2h3aW5pdChjYW0pOworCisJcnZhbCA9IG9tYXAyNHh4Y2FtX3NlbnNvcl9pbml0KGNhbSk7CisJaWYgKHJ2YWwpCisJCWdvdG8gZXJyOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA8IDApIHsKKwkJZGV2X2VycihjYW0tPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBWNEwgZGV2aWNlXG4iKTsKKwkJdmZkLT5taW5vciA9IC0xOworCQlydmFsID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CisKKwlvbWFwMjR4eGNhbV9wb3dlcm9uX3Jlc2V0KGNhbSk7CisKKwlkZXZfaW5mbyhjYW0tPmRldiwgInJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWRcbiIsIHZmZC0+bWlub3IpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlvbWFwMjR4eGNhbV9kZXZpY2VfdW5yZWdpc3RlcihzKTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgdm9pZCBvbWFwMjR4eGNhbV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzKQoreworCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IHMtPnUuc2xhdmUtPm1hc3Rlci0+cHJpdjsKKworCW9tYXAyNHh4Y2FtX3NlbnNvcl9leGl0KGNhbSk7CisKKwlpZiAoY2FtLT52ZmQpIHsKKwkJaWYgKGNhbS0+dmZkLT5taW5vciA9PSAtMSkgeworCQkJLyoKKwkJCSAqIFRoZSBkZXZpY2Ugd2FzIG5ldmVyIHJlZ2lzdGVyZWQsIHNvIHJlbGVhc2UgdGhlCisJCQkgKiB2aWRlb19kZXZpY2Ugc3RydWN0IGRpcmVjdGx5LgorCQkJICovCisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnZmZCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIHVucmVnaXN0ZXIgZnVuY3Rpb24gd2lsbCByZWxlYXNlIHRoZQorCQkJICogdmlkZW9fZGV2aWNlIHN0cnVjdCBhcyB3ZWxsIGFzCisJCQkgKiB1bnJlZ2lzdGVyaW5nIGl0LgorCQkJICovCisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnZmZCk7CisJCX0KKwkJY2FtLT52ZmQgPSBOVUxMOworCX0KKworCWRldmljZV9yZW1vdmVfZmlsZShjYW0tPmRldiwgJmRldl9hdHRyX3N0cmVhbWluZyk7CisKKwljYW0tPnNkZXYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfaW50X21hc3RlciBvbWFwMjR4eGNhbV9tYXN0ZXIgPSB7CisJLmF0dGFjaCA9IG9tYXAyNHh4Y2FtX2RldmljZV9yZWdpc3RlciwKKwkuZGV0YWNoID0gb21hcDI0eHhjYW1fZGV2aWNlX3VucmVnaXN0ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfaW50X2RldmljZSBvbWFwMjR4eGNhbSA9IHsKKwkubW9kdWxlCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJPSBDQU1fTkFNRSwKKwkudHlwZQk9IHY0bDJfaW50X3R5cGVfbWFzdGVyLAorCS51CT0geworCQkubWFzdGVyID0gJm9tYXAyNHh4Y2FtX21hc3RlcgorCX0sCit9OworCisvKgorICoKKyAqIERyaXZlciBpbml0aWFsaXNhdGlvbiBhbmQgZGVpbml0aWFsaXNhdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGludCBfX2luaXQgb21hcDI0eHhjYW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW07CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IGlycTsKKworCWNhbSA9IGt6YWxsb2Moc2l6ZW9mKCpjYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FtKTsKKworCWNhbS0+ZGV2ID0gJnBkZXYtPmRldjsKKworCS8qCisJICogSW1wb3NlIGEgbG93ZXIgbGltaXQgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZvcgorCSAqIGNhcHR1cmUuIFdlIHJlcXVpcmUgYXQgbGVhc3QgZW5vdWdoIG1lbW9yeSB0byBkb3VibGUtYnVmZmVyCisJICogUVZHQSAoMzAwS0IpLgorCSAqLworCWlmIChjYXB0dXJlX21lbSA8IDMyMCAqIDI0MCAqIDIgKiAyKQorCQljYXB0dXJlX21lbSA9IDMyMCAqIDI0MCAqIDIgKiAyOworCWNhbS0+Y2FwdHVyZV9tZW0gPSBjYXB0dXJlX21lbTsKKworCS8qIHJlcXVlc3QgdGhlIG1lbSByZWdpb24gZm9yIHRoZSBjYW1lcmEgcmVnaXN0ZXJzICovCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKGNhbS0+ZGV2LCAibm8gbWVtIHJlc291cmNlP1xuIik7CisJCWdvdG8gZXJyOworCX0KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEsCisJCQkJcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycihjYW0tPmRldiwKKwkJCSJjYW5ub3QgcmVzZXJ2ZSBjYW1lcmEgcmVnaXN0ZXIgSS9PIHJlZ2lvblxuIik7CisJCWdvdG8gZXJyOworCX0KKwljYW0tPm1taW9fYmFzZV9waHlzID0gbWVtLT5zdGFydDsKKwljYW0tPm1taW9fc2l6ZSA9IChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMTsKKworCS8qIG1hcCB0aGUgcmVnaW9uICovCisJY2FtLT5tbWlvX2Jhc2UgPSAodW5zaWduZWQgbG9uZykKKwkJaW9yZW1hcF9ub2NhY2hlKGNhbS0+bW1pb19iYXNlX3BoeXMsIGNhbS0+bW1pb19zaXplKTsKKwlpZiAoIWNhbS0+bW1pb19iYXNlKSB7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW5ub3QgbWFwIGNhbWVyYSByZWdpc3RlciBJL08gcmVnaW9uXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDw9IDApIHsKKwkJZGV2X2VycihjYW0tPmRldiwgIm5vIGlycSBmb3IgY2FtZXJhP1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIGluc3RhbGwgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBvbWFwMjR4eGNhbV9pc3IsIDAsIENBTV9OQU1FLCBjYW0pKSB7CisJCWRldl9lcnIoY2FtLT5kZXYsCisJCQkiY291bGQgbm90IGluc3RhbGwgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZVxuIik7CisJCWdvdG8gZXJyOworCX0KKwljYW0tPmlycSA9IGlycTsKKworCWlmIChvbWFwMjR4eGNhbV9jbG9ja19nZXQoY2FtKSkKKwkJZ290byBlcnI7CisKKwlJTklUX1dPUksoJmNhbS0+c2Vuc29yX3Jlc2V0X3dvcmssIG9tYXAyNHh4Y2FtX3NlbnNvcl9yZXNldF93b3JrKTsKKworCW11dGV4X2luaXQoJmNhbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZjYW0tPmNvcmVfZW5hYmxlX2Rpc2FibGVfbG9jayk7CisKKwlvbWFwMjR4eGNhbV9zZ2RtYV9pbml0KCZjYW0tPnNnZG1hLAorCQkJICAgICAgIGNhbS0+bW1pb19iYXNlICsgQ0FNRE1BX1JFR19PRkZTRVQsCisJCQkgICAgICAgb21hcDI0eHhjYW1fc3RhbGxlZF9kbWFfcmVzZXQsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpY2FtKTsKKworCW9tYXAyNHh4Y2FtLnByaXYgPSBjYW07CisKKwlpZiAodjRsMl9pbnRfZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMjR4eGNhbSkpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlvbWFwMjR4eGNhbV9yZW1vdmUocGRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgb21hcDI0eHhjYW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob21hcDI0eHhjYW0ucHJpdiAhPSBOVUxMKQorCQl2NGwyX2ludF9kZXZpY2VfdW5yZWdpc3Rlcigmb21hcDI0eHhjYW0pOworCW9tYXAyNHh4Y2FtLnByaXYgPSBOVUxMOworCisJb21hcDI0eHhjYW1fY2xvY2tfcHV0KGNhbSk7CisKKwlpZiAoY2FtLT5pcnEpIHsKKwkJZnJlZV9pcnEoY2FtLT5pcnEsIGNhbSk7CisJCWNhbS0+aXJxID0gMDsKKwl9CisKKwlpZiAoY2FtLT5tbWlvX2Jhc2UpIHsKKwkJaW91bm1hcCgodm9pZCAqKWNhbS0+bW1pb19iYXNlKTsKKwkJY2FtLT5tbWlvX2Jhc2UgPSAwOworCX0KKworCWlmIChjYW0tPm1taW9fYmFzZV9waHlzKSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihjYW0tPm1taW9fYmFzZV9waHlzLCBjYW0tPm1taW9fc2l6ZSk7CisJCWNhbS0+bW1pb19iYXNlX3BoeXMgPSAwOworCX0KKworCWtmcmVlKGNhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDI0eHhjYW1fZHJpdmVyID0geworCS5wcm9iZQkgPSBvbWFwMjR4eGNhbV9wcm9iZSwKKwkucmVtb3ZlCSA9IG9tYXAyNHh4Y2FtX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IG9tYXAyNHh4Y2FtX3N1c3BlbmQsCisJLnJlc3VtZQkgPSBvbWFwMjR4eGNhbV9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyCSA9IHsKKwkJLm5hbWUgPSBDQU1fTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qCisgKgorICogTW9kdWxlIGluaXRpYWxpc2F0aW9uIGFuZCBkZWluaXRpYWxpc2F0aW9uCisgKgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyNHh4Y2FtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwMjR4eGNhbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDI0eHhjYW1fY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMjR4eGNhbV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJTYWthcmkgQWlsdXMgPHNha2FyaS5haWx1c0Bub2tpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAyNHh4IFZpZGVvIGZvciBMaW51eCBjYW1lcmEgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAorCQkgIk1pbm9yIG51bWJlciBmb3IgdmlkZW8gZGV2aWNlICgtMSA9PT4gYXV0byBhc3NpZ24pIik7Cittb2R1bGVfcGFyYW0oY2FwdHVyZV9tZW0sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcHR1cmVfbWVtLCAiTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IGZvciBjYXB0dXJlICIKKwkJICJidWZmZXJzIChkZWZhdWx0IDQ4MDBraUIpIik7CisKK21vZHVsZV9pbml0KG9tYXAyNHh4Y2FtX2luaXQpOworbW9kdWxlX2V4aXQob21hcDI0eHhjYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlNjdmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uaApAQCAtMCwwICsxLDU5MyBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24uCisgKgorICogQ29udGFjdDogU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBBbmR5IExvd2UgPHNvdXJjZUBtdmlzdGEuY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBPTUFQMjRYWENBTV9ICisjZGVmaW5lIE9NQVAyNFhYQ0FNX0gKKworI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW50LWRldmljZS5oPgorCisvKgorICoKKyAqIEdlbmVyYWwgZHJpdmVyIHJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgKgorICovCisKKyNkZWZpbmUgQ0FNX05BTUUJCQkJIm9tYXAyNHh4Y2FtIgorCisjZGVmaW5lIENBTV9NQ0xLCQkJCTk2MDAwMDAwCisKKy8qIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBwZXIgRE1BIHJlcXVlc3QgKi8KKyNkZWZpbmUgRE1BX1RIUkVTSE9MRAkJCQkzMgorCisvKgorICogTlVNX0NBTURNQV9DSEFOTkVMUyBpcyB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgY2hhbm5lbHMgcHJvdmlkZWQgYnkKKyAqIHRoZSBjYW1lcmEgRE1BIGNvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUgTlVNX0NBTURNQV9DSEFOTkVMUwkJCTQKKworLyoKKyAqIE5VTV9TR19ETUEgaXMgdGhlIG51bWJlciBvZiBzY2F0dGVyLWdhdGhlciBETUEgdHJhbnNmZXJzIHRoYXQgY2FuCisgKiBiZSBxdWV1ZWQuIChXZSBkb24ndCBoYXZlIGFueSBvdmVybGF5IHNnbGlzdHMgbm93LikKKyAqLworI2RlZmluZSBOVU1fU0dfRE1BCQkJCShWSURFT19NQVhfRlJBTUUpCisKKy8qCisgKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMuCisgKgorICovCisKKy8qIHN1YnN5c3RlbSByZWdpc3RlciBibG9jayBvZmZzZXRzICovCisjZGVmaW5lIENDX1JFR19PRkZTRVQJCQkJMHgwMDAwMDQwMAorI2RlZmluZSBDQU1ETUFfUkVHX09GRlNFVAkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgQ0FNTU1VX1JFR19PRkZTRVQJCQkweDAwMDAwQzAwCisKKy8qIGRlZmluZSBjYW1lcmEgc3Vic3lzdGVtIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ0FNX1JFVklTSU9OCQkJCTB4MDAwCisjZGVmaW5lIENBTV9TWVNDT05GSUcJCQkJMHgwMTAKKyNkZWZpbmUgQ0FNX1NZU1NUQVRVUwkJCQkweDAxNAorI2RlZmluZSBDQU1fSVJRU1RBVFVTCQkJCTB4MDE4CisjZGVmaW5lIENBTV9HUE8JCQkJCTB4MDQwCisjZGVmaW5lIENBTV9HUEkJCQkJCTB4MDUwCisKKy8qIGRlZmluZSBjYW1lcmEgY29yZSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENDX1JFVklTSU9OCQkJCTB4MDAwCisjZGVmaW5lIENDX1NZU0NPTkZJRwkJCQkweDAxMAorI2RlZmluZSBDQ19TWVNTVEFUVVMJCQkJMHgwMTQKKyNkZWZpbmUgQ0NfSVJRU1RBVFVTCQkJCTB4MDE4CisjZGVmaW5lIENDX0lSUUVOQUJMRQkJCQkweDAxQworI2RlZmluZSBDQ19DVFJMCQkJCQkweDA0MAorI2RlZmluZSBDQ19DVFJMX0RNQQkJCQkweDA0NAorI2RlZmluZSBDQ19DVFJMX1hDTEsJCQkJMHgwNDgKKyNkZWZpbmUgQ0NfRklGT0RBVEEJCQkJMHgwNEMKKyNkZWZpbmUgQ0NfVEVTVAkJCQkJMHgwNTAKKyNkZWZpbmUgQ0NfR0VOUEFSCQkJCTB4MDU0CisjZGVmaW5lIENDX0NDUEZTQ1IJCQkJMHgwNTgKKyNkZWZpbmUgQ0NfQ0NQRkVDUgkJCQkweDA1QworI2RlZmluZSBDQ19DQ1BMU0NSCQkJCTB4MDYwCisjZGVmaW5lIENDX0NDUExFQ1IJCQkJMHgwNjQKKyNkZWZpbmUgQ0NfQ0NQREZSCQkJCTB4MDY4CisKKy8qIGRlZmluZSBjYW1lcmEgZG1hIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ0FNRE1BX1JFVklTSU9OCQkJCTB4MDAwCisjZGVmaW5lIENBTURNQV9JUlFTVEFUVVNfTDAJCQkweDAwOAorI2RlZmluZSBDQU1ETUFfSVJRU1RBVFVTX0wxCQkJMHgwMEMKKyNkZWZpbmUgQ0FNRE1BX0lSUVNUQVRVU19MMgkJCTB4MDEwCisjZGVmaW5lIENBTURNQV9JUlFTVEFUVVNfTDMJCQkweDAxNAorI2RlZmluZSBDQU1ETUFfSVJRRU5BQkxFX0wwCQkJMHgwMTgKKyNkZWZpbmUgQ0FNRE1BX0lSUUVOQUJMRV9MMQkJCTB4MDFDCisjZGVmaW5lIENBTURNQV9JUlFFTkFCTEVfTDIJCQkweDAyMAorI2RlZmluZSBDQU1ETUFfSVJRRU5BQkxFX0wzCQkJMHgwMjQKKyNkZWZpbmUgQ0FNRE1BX1NZU1NUQVRVUwkJCTB4MDI4CisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHCQkJMHgwMkMKKyNkZWZpbmUgQ0FNRE1BX0NBUFNfMAkJCQkweDA2NAorI2RlZmluZSBDQU1ETUFfQ0FQU18yCQkJCTB4MDZDCisjZGVmaW5lIENBTURNQV9DQVBTXzMJCQkJMHgwNzAKKyNkZWZpbmUgQ0FNRE1BX0NBUFNfNAkJCQkweDA3NAorI2RlZmluZSBDQU1ETUFfR0NSCQkJCTB4MDc4CisjZGVmaW5lIENBTURNQV9DQ1IobikJCQkJKDB4MDgwICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DTE5LX0NUUkwobikJCQkoMHgwODQgKyAobikqMHg2MCkKKyNkZWZpbmUgQ0FNRE1BX0NJQ1IobikJCQkJKDB4MDg4ICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DU1IobikJCQkJKDB4MDhDICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DU0RQKG4pCQkJCSgweDA5MCArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ0VOKG4pCQkJCSgweDA5NCArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ0ZOKG4pCQkJCSgweDA5OCArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ1NTQShuKQkJCQkoMHgwOUMgKyAobikqMHg2MCkKKyNkZWZpbmUgQ0FNRE1BX0NEU0EobikJCQkJKDB4MEEwICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DU0VJKG4pCQkJCSgweDBBNCArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ1NGSShuKQkJCQkoMHgwQTggKyAobikqMHg2MCkKKyNkZWZpbmUgQ0FNRE1BX0NERUkobikJCQkJKDB4MEFDICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DREZJKG4pCQkJCSgweDBCMCArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ1NBQyhuKQkJCQkoMHgwQjQgKyAobikqMHg2MCkKKyNkZWZpbmUgQ0FNRE1BX0NEQUMobikJCQkJKDB4MEI4ICsgKG4pKjB4NjApCisjZGVmaW5lIENBTURNQV9DQ0VOKG4pCQkJCSgweDBCQyArIChuKSoweDYwKQorI2RlZmluZSBDQU1ETUFfQ0NGTihuKQkJCQkoMHgwQzAgKyAobikqMHg2MCkKKyNkZWZpbmUgQ0FNRE1BX0NPTE9SKG4pCQkJCSgweDBDNCArIChuKSoweDYwKQorCisvKiBkZWZpbmUgY2FtZXJhIG1tdSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENBTU1NVV9SRVZJU0lPTgkJCQkweDAwMAorI2RlZmluZSBDQU1NTVVfU1lTQ09ORklHCQkJMHgwMTAKKyNkZWZpbmUgQ0FNTU1VX1NZU1NUQVRVUwkJCTB4MDE0CisjZGVmaW5lIENBTU1NVV9JUlFTVEFUVVMJCQkweDAxOAorI2RlZmluZSBDQU1NTVVfSVJRRU5BQkxFCQkJMHgwMUMKKyNkZWZpbmUgQ0FNTU1VX1dBTEtJTkdfU1QJCQkweDA0MAorI2RlZmluZSBDQU1NTVVfQ05UTAkJCQkweDA0NAorI2RlZmluZSBDQU1NTVVfRkFVTFRfQUQJCQkJMHgwNDgKKyNkZWZpbmUgQ0FNTU1VX1RUQgkJCQkweDA0QworI2RlZmluZSBDQU1NTVVfTE9DSwkJCQkweDA1MAorI2RlZmluZSBDQU1NTVVfTERfVExCCQkJCTB4MDU0CisjZGVmaW5lIENBTU1NVV9DQU0JCQkJMHgwNTgKKyNkZWZpbmUgQ0FNTU1VX1JBTQkJCQkweDA1QworI2RlZmluZSBDQU1NTVVfR0ZMVVNICQkJCTB4MDYwCisjZGVmaW5lIENBTU1NVV9GTFVTSF9FTlRSWQkJCTB4MDY0CisjZGVmaW5lIENBTU1NVV9SRUFEX0NBTQkJCQkweDA2OAorI2RlZmluZSBDQU1NTVVfUkVBRF9SQU0JCQkJMHgwNkMKKyNkZWZpbmUgQ0FNTU1VX0VNVV9GQVVMVF9BRAkJCTB4MDcwCisKKy8qIERlZmluZSBiaXQgZmllbGRzIHdpdGhpbiBzZWxlY3RlZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ0FNX1JFVklTSU9OX01BSk9SCQkJKDE1IDw8IDQpCisjZGVmaW5lIENBTV9SRVZJU0lPTl9NQUpPUl9TSElGVAkJNAorI2RlZmluZSBDQU1fUkVWSVNJT05fTUlOT1IJCQkoMTUgPDwgMCkKKyNkZWZpbmUgQ0FNX1JFVklTSU9OX01JTk9SX1NISUZUCQkwCisKKyNkZWZpbmUgQ0FNX1NZU0NPTkZJR19TT0ZUUkVTRVQJCQkoMSA8PCAgMSkKKyNkZWZpbmUgQ0FNX1NZU0NPTkZJR19BVVRPSURMRQkJCSgxIDw8ICAwKQorCisjZGVmaW5lIENBTV9TWVNTVEFUVVNfUkVTRVRET05FCQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0FNX0lSUVNUQVRVU19DQ19JUlEJCQkoMSA8PCAgNCkKKyNkZWZpbmUgQ0FNX0lSUVNUQVRVU19NTVVfSVJRCQkJKDEgPDwgIDMpCisjZGVmaW5lIENBTV9JUlFTVEFUVVNfRE1BX0lSUTIJCQkoMSA8PCAgMikKKyNkZWZpbmUgQ0FNX0lSUVNUQVRVU19ETUFfSVJRMQkJCSgxIDw8ICAxKQorI2RlZmluZSBDQU1fSVJRU1RBVFVTX0RNQV9JUlEwCQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0FNX0dQT19DQU1fU19QX0VOCQkJKDEgPDwgIDEpCisjZGVmaW5lIENBTV9HUE9fQ0FNX0NDUF9NT0RFCQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0FNX0dQSV9DQ19ETUFfUkVRMQkJCSgxIDw8IDI0KQorI2RlZmluZSBDQVBfR1BJX0NDX0RNQV9SRVEwCQkJKDEgPDwgMjMpCisjZGVmaW5lIENBUF9HUElfQ0FNX01TVEFOREJZCQkJKDEgPDwgMjEpCisjZGVmaW5lIENBUF9HUElfQ0FNX1dBSVQJCQkoMSA8PCAyMCkKKyNkZWZpbmUgQ0FQX0dQSV9DQU1fU19EQVRBCQkJKDEgPDwgMTcpCisjZGVmaW5lIENBUF9HUElfQ0FNX1NfQ0xLCQkJKDEgPDwgMTYpCisjZGVmaW5lIENBUF9HUElfQ0FNX1BfREFUQQkJCSgweEZGRiA8PCAzKQorI2RlZmluZSBDQVBfR1BJX0NBTV9QX0RBVEFfU0hJRlQJCTMKKyNkZWZpbmUgQ0FQX0dQSV9DQU1fUF9WUwkJCSgxIDw8ICAyKQorI2RlZmluZSBDQVBfR1BJX0NBTV9QX0hTCQkJKDEgPDwgIDEpCisjZGVmaW5lIENBUF9HUElfQ0FNX1BfQ0xLCQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0NfUkVWSVNJT05fTUFKT1IJCQkoMTUgPDwgNCkKKyNkZWZpbmUgQ0NfUkVWSVNJT05fTUFKT1JfU0hJRlQJCQk0CisjZGVmaW5lIENDX1JFVklTSU9OX01JTk9SCQkJKDE1IDw8IDApCisjZGVmaW5lIENDX1JFVklTSU9OX01JTk9SX1NISUZUCQkJMAorCisjZGVmaW5lIENDX1NZU0NPTkZJR19TSURMRU1PREUJCQkoMyA8PCAgMykKKyNkZWZpbmUgQ0NfU1lTQ09ORklHX1NJRExFTU9ERV9GSURMRQkJKDAgPDwgIDMpCisjZGVmaW5lIENDX1NZU0NPTkZJR19TSURMRU1PREVfTklETEUJCSgxIDw8ICAzKQorI2RlZmluZSBDQ19TWVNDT05GSUdfU09GVFJFU0VUCQkJKDEgPDwgIDEpCisjZGVmaW5lIENDX1NZU0NPTkZJR19BVVRPSURMRQkJCSgxIDw8ICAwKQorCisjZGVmaW5lIENDX1NZU1NUQVRVU19SRVNFVERPTkUJCQkoMSA8PCAgMCkKKworI2RlZmluZSBDQ19JUlFTVEFUVVNfRlNfSVJRCQkJKDEgPDwgMTkpCisjZGVmaW5lIENDX0lSUVNUQVRVU19MRV9JUlEJCQkoMSA8PCAxOCkKKyNkZWZpbmUgQ0NfSVJRU1RBVFVTX0xTX0lSUQkJCSgxIDw8IDE3KQorI2RlZmluZSBDQ19JUlFTVEFUVVNfRkVfSVJRCQkJKDEgPDwgMTYpCisjZGVmaW5lIENDX0lSUVNUQVRVU19GV19FUlJfSVJRCQkJKDEgPDwgMTApCisjZGVmaW5lIENDX0lSUVNUQVRVU19GU0NfRVJSX0lSUQkJKDEgPDwgIDkpCisjZGVmaW5lIENDX0lSUVNUQVRVU19TU0NfRVJSX0lSUQkJKDEgPDwgIDgpCisjZGVmaW5lIENDX0lSUVNUQVRVU19GSUZPX05PRU1QVFlfSVJRCQkoMSA8PCAgNCkKKyNkZWZpbmUgQ0NfSVJRU1RBVFVTX0ZJRk9fRlVMTF9JUlEJCSgxIDw8ICAzKQorI2RlZmluZSBDQ19JUlFTVEFUVVNfRklGT19USFJfSVJRCQkoMSA8PCAgMikKKyNkZWZpbmUgQ0NfSVJRU1RBVFVTX0ZJRk9fT0ZfSVJRCQkoMSA8PCAgMSkKKyNkZWZpbmUgQ0NfSVJRU1RBVFVTX0ZJRk9fVUZfSVJRCQkoMSA8PCAgMCkKKworI2RlZmluZSBDQ19JUlFFTkFCTEVfRlNfSVJRCQkJKDEgPDwgMTkpCisjZGVmaW5lIENDX0lSUUVOQUJMRV9MRV9JUlEJCQkoMSA8PCAxOCkKKyNkZWZpbmUgQ0NfSVJRRU5BQkxFX0xTX0lSUQkJCSgxIDw8IDE3KQorI2RlZmluZSBDQ19JUlFFTkFCTEVfRkVfSVJRCQkJKDEgPDwgMTYpCisjZGVmaW5lIENDX0lSUUVOQUJMRV9GV19FUlJfSVJRCQkJKDEgPDwgMTApCisjZGVmaW5lIENDX0lSUUVOQUJMRV9GU0NfRVJSX0lSUQkJKDEgPDwgIDkpCisjZGVmaW5lIENDX0lSUUVOQUJMRV9TU0NfRVJSX0lSUQkJKDEgPDwgIDgpCisjZGVmaW5lIENDX0lSUUVOQUJMRV9GSUZPX05PRU1QVFlfSVJRCQkoMSA8PCAgNCkKKyNkZWZpbmUgQ0NfSVJRRU5BQkxFX0ZJRk9fRlVMTF9JUlEJCSgxIDw8ICAzKQorI2RlZmluZSBDQ19JUlFFTkFCTEVfRklGT19USFJfSVJRCQkoMSA8PCAgMikKKyNkZWZpbmUgQ0NfSVJRRU5BQkxFX0ZJRk9fT0ZfSVJRCQkoMSA8PCAgMSkKKyNkZWZpbmUgQ0NfSVJRRU5BQkxFX0ZJRk9fVUZfSVJRCQkoMSA8PCAgMCkKKworI2RlZmluZSBDQ19DVFJMX0NDX09ORV9TSE9UCQkJKDEgPDwgMjApCisjZGVmaW5lIENDX0NUUkxfQ0NfSUZfU1lOQ0hSTwkJCSgxIDw8IDE5KQorI2RlZmluZSBDQ19DVFJMX0NDX1JTVAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgQ0NfQ1RSTF9DQ19GUkFNRV9UUklHCQkJKDEgPDwgMTcpCisjZGVmaW5lIENDX0NUUkxfQ0NfRU4JCQkJKDEgPDwgMTYpCisjZGVmaW5lIENDX0NUUkxfTk9CVF9TWU5DSFJPCQkJKDEgPDwgMTMpCisjZGVmaW5lIENDX0NUUkxfQlRfQ09SUkVDVAkJCSgxIDw8IDEyKQorI2RlZmluZSBDQ19DVFJMX1BBUl9PUkRFUkNBTQkJCSgxIDw8IDExKQorI2RlZmluZSBDQ19DVFJMX1BBUl9DTEtfUE9MCQkJKDEgPDwgMTApCisjZGVmaW5lIENDX0NUUkxfTk9CVF9IU19QT0wJCQkoMSA8PCAgOSkKKyNkZWZpbmUgQ0NfQ1RSTF9OT0JUX1ZTX1BPTAkJCSgxIDw8ICA4KQorI2RlZmluZSBDQ19DVFJMX1BBUl9NT0RFCQkJKDcgPDwgIDEpCisjZGVmaW5lIENDX0NUUkxfUEFSX01PREVfU0hJRlQJCQkxCisjZGVmaW5lIENDX0NUUkxfUEFSX01PREVfTk9CVDgJCQkoMCA8PCAgMSkKKyNkZWZpbmUgQ0NfQ1RSTF9QQVJfTU9ERV9OT0JUMTAJCQkoMSA8PCAgMSkKKyNkZWZpbmUgQ0NfQ1RSTF9QQVJfTU9ERV9OT0JUMTIJCQkoMiA8PCAgMSkKKyNkZWZpbmUgQ0NfQ1RSTF9QQVJfTU9ERV9CVDgJCQkoNCA8PCAgMSkKKyNkZWZpbmUgQ0NfQ1RSTF9QQVJfTU9ERV9CVDEwCQkJKDUgPDwgIDEpCisjZGVmaW5lIENDX0NUUkxfUEFSX01PREVfRklGT1RFU1QJCSg3IDw8ICAxKQorI2RlZmluZSBDQ19DVFJMX0NDUF9NT0RFCQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0NfQ1RSTF9ETUFfRU4JCQkJKDEgPDwgIDgpCisjZGVmaW5lIENDX0NUUkxfRE1BX0ZJRk9fVEhSRVNIT0xECQkoMHg3RiA8PCAwKQorI2RlZmluZSBDQ19DVFJMX0RNQV9GSUZPX1RIUkVTSE9MRF9TSElGVAkwCisKKyNkZWZpbmUgQ0NfQ1RSTF9YQ0xLX0RJVgkJCSgweDFGIDw8IDApCisjZGVmaW5lIENDX0NUUkxfWENMS19ESVZfU0hJRlQJCQkwCisjZGVmaW5lIENDX0NUUkxfWENMS19ESVZfU1RBQkxFX0xPVwkJKDAgPDwgIDApCisjZGVmaW5lIENDX0NUUkxfWENMS19ESVZfU1RBQkxFX0hJR0gJCSgxIDw8ICAwKQorI2RlZmluZSBDQ19DVFJMX1hDTEtfRElWX0JZUEFTUwkJCSgzMSA8PCAwKQorCisjZGVmaW5lIENDX1RFU1RfRklGT19SRF9QT0lOVEVSCQkJKDB4RkYgPDwgMjQpCisjZGVmaW5lIENDX1RFU1RfRklGT19SRF9QT0lOVEVSX1NISUZUCQkyNAorI2RlZmluZSBDQ19URVNUX0ZJRk9fV1JfUE9JTlRFUgkJCSgweEZGIDw8IDE2KQorI2RlZmluZSBDQ19URVNUX0ZJRk9fV1JfUE9JTlRFUl9TSElGVAkJMTYKKyNkZWZpbmUgQ0NfVEVTVF9GSUZPX0xFVkVMCQkJKDB4RkYgPDwgIDgpCisjZGVmaW5lIENDX1RFU1RfRklGT19MRVZFTF9TSElGVAkJOAorI2RlZmluZSBDQ19URVNUX0ZJRk9fTEVWRUxfUEVBSwkJCSgweEZGIDw8ICAwKQorI2RlZmluZSBDQ19URVNUX0ZJRk9fTEVWRUxfUEVBS19TSElGVAkJMAorCisjZGVmaW5lIENDX0dFTlBBUl9GSUZPX0RFUFRICQkJKDcgPDwgIDApCisjZGVmaW5lIENDX0dFTlBBUl9GSUZPX0RFUFRIX1NISUZUCQkwCisKKyNkZWZpbmUgQ0NfQ0NQREZSX0FMUEhBCQkJCSgweEZGIDw8ICA4KQorI2RlZmluZSBDQ19DQ1BERlJfQUxQSEFfU0hJRlQJCQk4CisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUCQkJKDE1IDw8ICAwKQorI2RlZmluZSBDQ19DQ1BERlJfREFUQUZPUk1BVF9TSElGVAkJMAorI2RlZmluZSBDQ19DQ1BERlJfREFUQUZPUk1BVF9ZVVY0MjJCRQkJKDAgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1lVVjQyMgkJKDEgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1lVVjQyMAkJKDIgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1JHQjQ0NAkJKDQgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1JHQjU2NQkJKDUgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1JHQjg4OE5ERQkJKDYgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1JHQjg4OAkJKDcgPDwgIDApCisjZGVmaW5lIENDX0NDUERGUl9EQVRBRk9STUFUX1JBVzhOREUJCSg4IDw8ICAwKQorI2RlZmluZSBDQ19DQ1BERlJfREFUQUZPUk1BVF9SQVc4CQkoOSA8PCAgMCkKKyNkZWZpbmUgQ0NfQ0NQREZSX0RBVEFGT1JNQVRfUkFXMTBOREUJCSgxMCA8PCAgMCkKKyNkZWZpbmUgQ0NfQ0NQREZSX0RBVEFGT1JNQVRfUkFXMTAJCSgxMSA8PCAgMCkKKyNkZWZpbmUgQ0NfQ0NQREZSX0RBVEFGT1JNQVRfUkFXMTJOREUJCSgxMiA8PCAgMCkKKyNkZWZpbmUgQ0NfQ0NQREZSX0RBVEFGT1JNQVRfUkFXMTIJCSgxMyA8PCAgMCkKKyNkZWZpbmUgQ0NfQ0NQREZSX0RBVEFGT1JNQVRfSlBFRzgJCSgxNSA8PCAgMCkKKworI2RlZmluZSBDQU1ETUFfUkVWSVNJT05fTUFKT1IJCQkoMTUgPDwgNCkKKyNkZWZpbmUgQ0FNRE1BX1JFVklTSU9OX01BSk9SX1NISUZUCQk0CisjZGVmaW5lIENBTURNQV9SRVZJU0lPTl9NSU5PUgkJCSgxNSA8PCAwKQorI2RlZmluZSBDQU1ETUFfUkVWSVNJT05fTUlOT1JfU0hJRlQJCTAKKworI2RlZmluZSBDQU1ETUFfT0NQX1NZU0NPTkZJR19NSURMRU1PREUJCSgzIDw8IDEyKQorI2RlZmluZSBDQU1ETUFfT0NQX1NZU0NPTkZJR19NSURMRU1PREVfRlNUQU5EQlkJKDAgPDwgMTIpCisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHX01JRExFTU9ERV9OU1RBTkRCWQkoMSA8PCAxMikKKyNkZWZpbmUgQ0FNRE1BX09DUF9TWVNDT05GSUdfTUlETEVNT0RFX1NTVEFOREJZCSgyIDw8IDEyKQorI2RlZmluZSBDQU1ETUFfT0NQX1NZU0NPTkZJR19GVU5DX0NMT0NLCQkoMSA8PCAgOSkKKyNkZWZpbmUgQ0FNRE1BX09DUF9TWVNDT05GSUdfT0NQX0NMT0NLCQkoMSA8PCAgOCkKKyNkZWZpbmUgQ0FNRE1BX09DUF9TWVNDT05GSUdfRU1VRlJFRQkJKDEgPDwgIDUpCisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHX1NJRExFTU9ERQkJKDMgPDwgIDMpCisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHX1NJRExFTU9ERV9GSURMRQkoMCA8PCAgMykKKyNkZWZpbmUgQ0FNRE1BX09DUF9TWVNDT05GSUdfU0lETEVNT0RFX05JRExFCSgxIDw8ICAzKQorI2RlZmluZSBDQU1ETUFfT0NQX1NZU0NPTkZJR19TSURMRU1PREVfU0lETEUJKDIgPDwgIDMpCisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHX1NPRlRSRVNFVAkJKDEgPDwgIDEpCisjZGVmaW5lIENBTURNQV9PQ1BfU1lTQ09ORklHX0FVVE9JRExFCQkoMSA8PCAgMCkKKworI2RlZmluZSBDQU1ETUFfU1lTU1RBVFVTX1JFU0VURE9ORQkJKDEgPDwgIDApCisKKyNkZWZpbmUgQ0FNRE1BX0dDUl9BUkJJVFJBVElPTl9SQVRFCQkoMHhGRiA8PCAxNikKKyNkZWZpbmUgQ0FNRE1BX0dDUl9BUkJJVFJBVElPTl9SQVRFX1NISUZUCTE2CisjZGVmaW5lIENBTURNQV9HQ1JfTUFYX0NIQU5ORUxfRklGT19ERVBUSAkoMHhGRiA8PCAwKQorI2RlZmluZSBDQU1ETUFfR0NSX01BWF9DSEFOTkVMX0ZJRk9fREVQVEhfU0hJRlQJMAorCisjZGVmaW5lIENBTURNQV9DQ1JfU0VMX1NSQ19EU1RfU1lOQwkJKDEgPDwgMjQpCisjZGVmaW5lIENBTURNQV9DQ1JfUFJFRkVUQ0gJCQkoMSA8PCAyMykKKyNkZWZpbmUgQ0FNRE1BX0NDUl9TVVBFUlZJU09SCQkJKDEgPDwgMjIpCisjZGVmaW5lIENBTURNQV9DQ1JfU0VDVVJFCQkJKDEgPDwgMjEpCisjZGVmaW5lIENBTURNQV9DQ1JfQlMJCQkJKDEgPDwgMTgpCisjZGVmaW5lIENBTURNQV9DQ1JfVFJBTlNQQVJFTlRfQ09QWV9FTkFCTEUJKDEgPDwgMTcpCisjZGVmaW5lIENBTURNQV9DQ1JfQ09OU1RBTlRfRklMTF9FTkFCTEUJCSgxIDw8IDE2KQorI2RlZmluZSBDQU1ETUFfQ0NSX0RTVF9BTU9ERQkJCSgzIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ0NSX0RTVF9BTU9ERV9DT05TVF9BRERSCQkoMCA8PCAxNCkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9EU1RfQU1PREVfUE9TVF9JTkMJCSgxIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ0NSX0RTVF9BTU9ERV9TR0xfSURYCQkoMiA8PCAxNCkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9EU1RfQU1PREVfREJMX0lEWAkJKDMgPDwgMTQpCisjZGVmaW5lIENBTURNQV9DQ1JfU1JDX0FNT0RFCQkJKDMgPDwgMTIpCisjZGVmaW5lIENBTURNQV9DQ1JfU1JDX0FNT0RFX0NPTlNUX0FERFIJCSgwIDw8IDEyKQorI2RlZmluZSBDQU1ETUFfQ0NSX1NSQ19BTU9ERV9QT1NUX0lOQwkJKDEgPDwgMTIpCisjZGVmaW5lIENBTURNQV9DQ1JfU1JDX0FNT0RFX1NHTF9JRFgJCSgyIDw8IDEyKQorI2RlZmluZSBDQU1ETUFfQ0NSX1NSQ19BTU9ERV9EQkxfSURYCQkoMyA8PCAxMikKKyNkZWZpbmUgQ0FNRE1BX0NDUl9XUl9BQ1RJVkUJCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9SRF9BQ1RJVkUJCQkoMSA8PCAgOSkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9TVVNQRU5EX1NFTlNJVElWRQkJKDEgPDwgIDgpCisjZGVmaW5lIENBTURNQV9DQ1JfRU5BQkxFCQkJKDEgPDwgIDcpCisjZGVmaW5lIENBTURNQV9DQ1JfUFJJTwkJCQkoMSA8PCAgNikKKyNkZWZpbmUgQ0FNRE1BX0NDUl9GUwkJCQkoMSA8PCAgNSkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9TWU5DSFJPCQkJKCgzIDw8IDE5KSB8ICgzMSA8PCAwKSkKKyNkZWZpbmUgQ0FNRE1BX0NDUl9TWU5DSFJPX0NBTUVSQQkJMHgwMQorCisjZGVmaW5lIENBTURNQV9DTE5LX0NUUkxfRU5BQkxFX0xOSwkJKDEgPDwgMTUpCisjZGVmaW5lIENBTURNQV9DTE5LX0NUUkxfTkVYVExDSF9JRAkJKDB4MUYgPDwgMCkKKyNkZWZpbmUgQ0FNRE1BX0NMTktfQ1RSTF9ORVhUTENIX0lEX1NISUZUCTAKKworI2RlZmluZSBDQU1ETUFfQ0lDUl9NSVNBTElHTkVEX0VSUl9JRQkJKDEgPDwgMTEpCisjZGVmaW5lIENBTURNQV9DSUNSX1NVUEVSVklTT1JfRVJSX0lFCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ0FNRE1BX0NJQ1JfU0VDVVJFX0VSUl9JRQkJKDEgPDwgIDkpCisjZGVmaW5lIENBTURNQV9DSUNSX1RSQU5TX0VSUl9JRQkJKDEgPDwgIDgpCisjZGVmaW5lIENBTURNQV9DSUNSX1BBQ0tFVF9JRQkJCSgxIDw8ICA3KQorI2RlZmluZSBDQU1ETUFfQ0lDUl9CTE9DS19JRQkJCSgxIDw8ICA1KQorI2RlZmluZSBDQU1ETUFfQ0lDUl9MQVNUX0lFCQkJKDEgPDwgIDQpCisjZGVmaW5lIENBTURNQV9DSUNSX0ZSQU1FX0lFCQkJKDEgPDwgIDMpCisjZGVmaW5lIENBTURNQV9DSUNSX0hBTEZfSUUJCQkoMSA8PCAgMikKKyNkZWZpbmUgQ0FNRE1BX0NJQ1JfRFJPUF9JRQkJCSgxIDw8ICAxKQorCisjZGVmaW5lIENBTURNQV9DU1JfTUlTQUxJR05FRF9FUlIJCSgxIDw8IDExKQorI2RlZmluZSBDQU1ETUFfQ1NSX1NVUEVSVklTT1JfRVJSCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ0FNRE1BX0NTUl9TRUNVUkVfRVJSCQkJKDEgPDwgIDkpCisjZGVmaW5lIENBTURNQV9DU1JfVFJBTlNfRVJSCQkJKDEgPDwgIDgpCisjZGVmaW5lIENBTURNQV9DU1JfUEFDS0VUCQkJKDEgPDwgIDcpCisjZGVmaW5lIENBTURNQV9DU1JfU1lOQwkJCQkoMSA8PCAgNikKKyNkZWZpbmUgQ0FNRE1BX0NTUl9CTE9DSwkJCSgxIDw8ICA1KQorI2RlZmluZSBDQU1ETUFfQ1NSX0xBU1QJCQkJKDEgPDwgIDQpCisjZGVmaW5lIENBTURNQV9DU1JfRlJBTUUJCQkoMSA8PCAgMykKKyNkZWZpbmUgQ0FNRE1BX0NTUl9IQUxGCQkJCSgxIDw8ICAyKQorI2RlZmluZSBDQU1ETUFfQ1NSX0RST1AJCQkJKDEgPDwgIDEpCisKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfU1JDX0VORElBTk5FU1MJCSgxIDw8IDIxKQorI2RlZmluZSBDQU1ETUFfQ1NEUF9TUkNfRU5ESUFOTkVTU19MT0NLCQkoMSA8PCAyMCkKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfRFNUX0VORElBTk5FU1MJCSgxIDw8IDE5KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EU1RfRU5ESUFOTkVTU19MT0NLCQkoMSA8PCAxOCkKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfV1JJVEVfTU9ERQkJCSgzIDw8IDE2KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9XUklURV9NT0RFX1dSTlAJCSgwIDw8IDE2KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9XUklURV9NT0RFX1BPU1RFRAkJKDEgPDwgMTYpCisjZGVmaW5lIENBTURNQV9DU0RQX1dSSVRFX01PREVfUE9TVEVEX0xBU1RfV1JOUAkoMiA8PCAxNikKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfRFNUX0JVUlNUX0VOCQkoMyA8PCAxNCkKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfRFNUX0JVUlNUX0VOXzEJCSgwIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EU1RfQlVSU1RfRU5fMTYJCSgxIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EU1RfQlVSU1RfRU5fMzIJCSgyIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EU1RfQlVSU1RfRU5fNjQJCSgzIDw8IDE0KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EU1RfUEFDS0VECQkJKDEgPDwgMTMpCisjZGVmaW5lIENBTURNQV9DU0RQX1dSX0FERF9UUlNMVAkJKDE1IDw8IDkpCisjZGVmaW5lIENBTURNQV9DU0RQX1dSX0FERF9UUlNMVF9FTkFCTEVfTVJFUUFERAkoMyA8PCAgOSkKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfU1JDX0JVUlNUX0VOCQkoMyA8PCAgNykKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfU1JDX0JVUlNUX0VOXzEJCSgwIDw8ICA3KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9TUkNfQlVSU1RfRU5fMTYJCSgxIDw8ICA3KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9TUkNfQlVSU1RfRU5fMzIJCSgyIDw8ICA3KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9TUkNfQlVSU1RfRU5fNjQJCSgzIDw8ICA3KQorI2RlZmluZSBDQU1ETUFfQ1NEUF9TUkNfUEFDS0VECQkJKDEgPDwgIDYpCisjZGVmaW5lIENBTURNQV9DU0RQX1JEX0FERF9UUlNMVAkJKDE1IDw8IDIpCisjZGVmaW5lIENBTURNQV9DU0RQX1JEX0FERF9UUlNMVF9FTkFCTEVfTVJFUUFERAkoMyA8PCAgMikKKyNkZWZpbmUgQ0FNRE1BX0NTRFBfREFUQV9UWVBFCQkJKDMgPDwgIDApCisjZGVmaW5lIENBTURNQV9DU0RQX0RBVEFfVFlQRV84QklUUwkJKDAgPDwgIDApCisjZGVmaW5lIENBTURNQV9DU0RQX0RBVEFfVFlQRV8xNkJJVFMJCSgxIDw8ICAwKQorI2RlZmluZSBDQU1ETUFfQ1NEUF9EQVRBX1RZUEVfMzJCSVRTCQkoMiA8PCAgMCkKKworI2RlZmluZSBDQU1NTVVfU1lTQ09ORklHX0FVVE9JRExFCQkoMSA8PCAgMCkKKworLyoKKyAqCisgKiBEZWNsYXJhdGlvbnMuCisgKgorICovCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3Qgb21hcDI0eHhjYW1fc2dkbWE7CitzdHJ1Y3Qgb21hcDI0eHhjYW1fZG1hOworCit0eXBlZGVmIHZvaWQgKCpzZ2RtYV9jYWxsYmFja190KShzdHJ1Y3Qgb21hcDI0eHhjYW1fc2dkbWEgKmNhbSwKKwkJCQkgdTMyIHN0YXR1cywgdm9pZCAqYXJnKTsKK3R5cGVkZWYgdm9pZCAoKmRtYV9jYWxsYmFja190KShzdHJ1Y3Qgb21hcDI0eHhjYW1fZG1hICpjYW0sCisJCQkgICAgICAgdTMyIHN0YXR1cywgdm9pZCAqYXJnKTsKKworc3RydWN0IGNoYW5uZWxfc3RhdGUgeworCWRtYV9jYWxsYmFja190IGNhbGxiYWNrOworCXZvaWQgKmFyZzsKK307CisKKy8qIHNnZG1hIHN0YXRlIGZvciBlYWNoIG9mIHRoZSBwb3NzaWJsZSB2aWRlb2J1Zl9idWZmZXJzICsgMiBvdmVybGF5cyAqLworc3RydWN0IHNnZG1hX3N0YXRlIHsKKwljb25zdCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdDsKKwlpbnQgc2dsZW47CQkgLyogbnVtYmVyIG9mIHNnbGlzdCBlbnRyaWVzICovCisJaW50IG5leHRfc2dsaXN0OwkgLyogaW5kZXggb2YgbmV4dCBzZ2xpc3QgZW50cnkgdG8gcHJvY2VzcyAqLworCXVuc2lnbmVkIGludCBieXRlc19yZWFkOyAvKiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqLworCXVuc2lnbmVkIGludCBsZW47ICAgICAgICAvKiB0b3RhbCBsZW5ndGggb2Ygc2dsaXN0IChleGNsdWRpbmcKKwkJCQkgICogYnl0ZXMgZHVlIHRvIHBhZ2UgYWxpZ25tZW50KSAqLworCWludCBxdWV1ZWRfc2dsaXN0OwkgLyogbnVtYmVyIG9mIHNnbGlzdCBlbnRyaWVzIHF1ZXVlZCBmb3IgRE1BICovCisJdTMyIGNzcjsJCSAvKiBETUEgcmV0dXJuIGNvZGUgKi8KKwlzZ2RtYV9jYWxsYmFja190IGNhbGxiYWNrOworCXZvaWQgKmFyZzsKK307CisKKy8qIHBoeXNpY2FsIERNQSBjaGFubmVsIG1hbmFnZW1lbnQgKi8KK3N0cnVjdCBvbWFwMjR4eGNhbV9kbWEgeworCXNwaW5sb2NrX3QgbG9jazsJLyogTG9jayBmb3IgdGhlIHdob2xlIHN0cnVjdHVyZS4gKi8KKworCXVuc2lnbmVkIGxvbmcgYmFzZTsJLyogYmFzZSBhZGRyZXNzIGZvciBkbWEgY29udHJvbGxlciAqLworCisJLyogV2hpbGUgZG1hX3N0b3AhPTAsIGFuIGF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgRE1BIHRyYW5zZmVyIHdpbGwKKwkgKiBmYWlsLgorCSAqLworCWF0b21pY190IGRtYV9zdG9wOworCWludCBmcmVlX2RtYWNoOwkJLyogbnVtYmVyIG9mIGRtYSBjaGFubmVscyBmcmVlICovCisJaW50IG5leHRfZG1hY2g7CQkvKiBpbmRleCBvZiBuZXh0IGRtYSBjaGFubmVsIHRvIHVzZSAqLworCXN0cnVjdCBjaGFubmVsX3N0YXRlIGNoX3N0YXRlW05VTV9DQU1ETUFfQ0hBTk5FTFNdOworfTsKKworLyogc2NhdHRlci1nYXRoZXIgRE1BIChzY2F0dGVybGlzdCBzdHVmZikgbWFuYWdlbWVudCAqLworc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hIHsKKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZG1hIGRtYTsKKworCXNwaW5sb2NrX3QgbG9jazsJLyogTG9jayBmb3IgdGhlIGZpZWxkcyBiZWxvdy4gKi8KKwlpbnQgZnJlZV9zZ2RtYTsJCS8qIG51bWJlciBvZiBmcmVlIHNnIGRtYSBzbG90cyAqLworCWludCBuZXh0X3NnZG1hOwkJLyogaW5kZXggb2YgbmV4dCBzZyBkbWEgc2xvdCB0byB1c2UgKi8KKwlzdHJ1Y3Qgc2dkbWFfc3RhdGUgc2dfc3RhdGVbTlVNX1NHX0RNQV07CisKKwkvKiBSZXNldCB0aW1lciBkYXRhICovCisJc3RydWN0IHRpbWVyX2xpc3QgcmVzZXRfdGltZXI7Cit9OworCisvKiBwZXItZGV2aWNlIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlIHsKKwkvKioqIG11dGV4ICAqKiovCisJLyoKKwkgKiBtdXRleCBzZXJpYWxpc2VzIGFjY2VzcyB0byB0aGlzIHN0cnVjdHVyZS4gQWxzbyBjYW1lcmEKKwkgKiBvcGVuaW5nIGFuZCByZWxlYXNpbmcgaXMgc3luY2hyb25pc2VkIGJ5IHRoaXMuCisJICovCisJc3RydWN0IG11dGV4IG11dGV4OworCisJLyoqKiBnZW5lcmFsIGRyaXZlciBzdGF0ZSBpbmZvcm1hdGlvbiAqKiovCisJYXRvbWljX3QgdXNlcnM7CisJLyoKKwkgKiBMb2NrIHRvIHNlcmlhbGlzZSBjb3JlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYW5kIGFjY2VzcyB0bworCSAqIHNnZG1hX2luX3F1ZXVlLgorCSAqLworCXNwaW5sb2NrX3QgY29yZV9lbmFibGVfZGlzYWJsZV9sb2NrOworCS8qCisJICogTnVtYmVyIG9yIHNnZG1hIHJlcXVlc3RzIGluIHNjYXR0ZXItZ2F0aGVyIHF1ZXVlLCBwcm90ZWN0ZWQKKwkgKiBieSB0aGUgbG9jayBhYm92ZS4KKwkgKi8KKwlpbnQgc2dkbWFfaW5fcXVldWU7CisJLyoKKwkgKiBTZW5zb3IgaW50ZXJmYWNlIHBhcmFtZXRlcnM6IGludGVyZmFjZSB0eXBlLCBDQ19DVFJMCisJICogcmVnaXN0ZXIgdmFsdWUgYW5kIGludGVyZmFjZSBzcGVjaWZpYyBkYXRhLgorCSAqLworCWludCBpZl90eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHBhcmFsbGVsIHsKKwkJCXUzMiB4Y2xrOworCQl9IGJ0NjU2OworCX0gaWZfdTsKKwl1MzIgY2NfY3RybDsKKworCS8qKiogc3Vic3lzdGVtIHN0cnVjdHVyZXMgKioqLworCXN0cnVjdCBvbWFwMjR4eGNhbV9zZ2RtYSBzZ2RtYTsKKworCS8qKiogaGFyZHdhcmUgcmVzb3VyY2VzICoqKi8KKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgbW1pb19iYXNlOworCXVuc2lnbmVkIGxvbmcgbW1pb19iYXNlX3BoeXM7CisJdW5zaWduZWQgbG9uZyBtbWlvX3NpemU7CisKKwkvKioqIGludGVyZmFjZXMgYW5kIGRldmljZSAqKiovCisJc3RydWN0IHY0bDJfaW50X2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCisJLyoqKiBjYW1lcmEgYW5kIHNlbnNvciByZXNldCByZWxhdGVkIHN0dWZmICoqKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Vuc29yX3Jlc2V0X3dvcms7CisJLyoKKwkgKiBXZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVzZXQuIERvbid0IGVuYWJsZSBjb3JlIGlmIHRoaXMKKwkgKiBpcyBub24temVybyEgVGhpcyBleGlzdHMgdG8gaGVscCBkZWNpc2lvbm1ha2luZyBpbiBhIGNhc2UKKwkgKiB3aGVyZSB2aWRlb2J1Zl9xYnVmIGlzIGNhbGxlZCB3aGlsZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgorCSAqIGEgcmVzZXQuCisJICovCisJYXRvbWljX3QgaW5fcmVzZXQ7CisJLyoKKwkgKiBOb24temVybyBpZiB3ZSBkb24ndCB3YW50IGFueSByZXNldHMgZm9yIG5vdy4gVXNlZCB0bworCSAqIHByZXZlbnQgcmVzZXQgd29yayB0byBydW4gd2hlbiB3ZSdyZSBhYm91dCB0byBzdG9wCisJICogc3RyZWFtaW5nLgorCSAqLworCWF0b21pY190IHJlc2V0X2Rpc2FibGU7CisKKwkvKioqIHZpZGVvIGRldmljZSBwYXJhbWV0ZXJzICoqKi8KKwlpbnQgY2FwdHVyZV9tZW07CisKKwkvKioqIGNhbWVyYSBtb2R1bGUgY2xvY2tzICoqKi8KKwlzdHJ1Y3QgY2xrICpmY2s7CisJc3RydWN0IGNsayAqaWNrOworCisJLyoqKiBjYXB0dXJlIGRhdGEgKioqLworCS8qIGZpbGUgaGFuZGxlLCBpZiBzdHJlYW1pbmcgaXMgb24gKi8KKwlzdHJ1Y3QgZmlsZSAqc3RyZWFtaW5nOworfTsKKworLyogUGVyLWZpbGUgaGFuZGxlIGRhdGEuICovCitzdHJ1Y3Qgb21hcDI0eHhjYW1fZmggeworCXNwaW5sb2NrX3QgdmJxX2xvY2s7IC8qIHNwaW5sb2NrIGZvciB0aGUgdmlkZW9idWYgcXVldWUgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgdmJxOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4OyAvKiBzZXJpYWxpc2UgcGl4IGJ5IHZicS0+bG9jayAqLworCWF0b21pY190IGZpZWxkX2NvdW50OyAvKiBmaWVsZCBjb3VudGVyIGZvciB2aWRlb2J1Zl9idWZmZXIgKi8KKwkvKiBhY2Nlc3NpbmcgY2FtIGhlcmUgZG9lc24ndCBuZWVkIHNlcmlhbGlzYXRpb246IGl0J3MgY29uc3RhbnQgKi8KKwlzdHJ1Y3Qgb21hcDI0eHhjYW1fZGV2aWNlICpjYW07Cit9OworCisvKgorICoKKyAqIFJlZ2lzdGVyIEkvTyBmdW5jdGlvbnMuCisgKgorICovCisKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAyNHh4Y2FtX3JlZ19pbih1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKGJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwMjR4eGNhbV9yZWdfb3V0KHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIG9mZnNldCwKKwkJCQkJICB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGJhc2UgKyBvZmZzZXQpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAyNHh4Y2FtX3JlZ19tZXJnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBvZmZzZXQsCisJCQkJCSAgICB1MzIgdmFsLCB1MzIgbWFzaykKK3sKKwl1MzIgYWRkciA9IGJhc2UgKyBvZmZzZXQ7CisJdTMyIG5ld192YWwgPSAocmVhZGwoYWRkcikgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisKKwl3cml0ZWwobmV3X3ZhbCwgYWRkcik7CisJcmV0dXJuIG5ld192YWw7Cit9CisKKy8qCisgKgorICogRnVuY3Rpb24gcHJvdG90eXBlcy4KKyAqCisgKi8KKworLyogZG1hIHByb3RvdHlwZXMgKi8KKwordm9pZCBvbWFwMjR4eGNhbV9kbWFfaHdpbml0KHN0cnVjdCBvbWFwMjR4eGNhbV9kbWEgKmRtYSk7Cit2b2lkIG9tYXAyNHh4Y2FtX2RtYV9pc3Ioc3RydWN0IG9tYXAyNHh4Y2FtX2RtYSAqZG1hKTsKKworLyogc2dkbWEgcHJvdG90eXBlcyAqLworCit2b2lkIG9tYXAyNHh4Y2FtX3NnZG1hX3Byb2Nlc3Moc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSk7CitpbnQgb21hcDI0eHhjYW1fc2dkbWFfcXVldWUoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IHNnbGVuLAorCQkJICAgIGludCBsZW4sIHNnZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmFyZyk7Cit2b2lkIG9tYXAyNHh4Y2FtX3NnZG1hX3N5bmMoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSk7Cit2b2lkIG9tYXAyNHh4Y2FtX3NnZG1hX2luaXQoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkgICAgdm9pZCAoKnJlc2V0X2NhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGRhdGEpLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcmVzZXRfY2FsbGJhY2tfZGF0YSk7Cit2b2lkIG9tYXAyNHh4Y2FtX3NnZG1hX2V4aXQoc3RydWN0IG9tYXAyNHh4Y2FtX3NnZG1hICpzZ2RtYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IDIxMGYxMjQuLjZlZTliNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTQwMTEsOCArNDAxMSw3IEBACiAKIC8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCiBzdGF0aWMgaW50Ci1vdjUxeF92NGwxX2lvY3RsX2ludGVybmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitvdjUxeF92NGwxX2lvY3RsX2ludGVybmFsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwpAQCAtNDQ2MSw3ICs0NDYwLDcgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCiAJCXJldHVybiAtRUlOVFI7CiAKLQlyYyA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbCk7CisJcmMgPSB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbCk7CiAKIAltdXRleF91bmxvY2soJm92LT5sb2NrKTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGI3MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtMCwwICsxLDEwMTIgQEAKKy8qCisgKiBvdjc3MnggQ2FtZXJhIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIG92NzY3MCBhbmQgc29jX2NhbWVyYV9wbGF0Zm9ybSBkcml2ZXIsCisgKgorICogQ29weXJpZ2h0IDIwMDYtNyBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKyNpbmNsdWRlIDxtZWRpYS9vdjc3MnguaD4KKworLyoKKyAqIHJlZ2lzdGVyIG9mZnNldAorICovCisjZGVmaW5lIEdBSU4gICAgICAgIDB4MDAgLyogQUdDIC0gR2FpbiBjb250cm9sIGdhaW4gc2V0dGluZyAqLworI2RlZmluZSBCTFVFICAgICAgICAweDAxIC8qIEFXQiAtIEJsdWUgY2hhbm5lbCBnYWluIHNldHRpbmcgKi8KKyNkZWZpbmUgUkVEICAgICAgICAgMHgwMiAvKiBBV0IgLSBSZWQgICBjaGFubmVsIGdhaW4gc2V0dGluZyAqLworI2RlZmluZSBHUkVFTiAgICAgICAweDAzIC8qIEFXQiAtIEdyZWVuIGNoYW5uZWwgZ2FpbiBzZXR0aW5nICovCisjZGVmaW5lIENPTTEgICAgICAgIDB4MDQgLyogQ29tbW9uIGNvbnRyb2wgMSAqLworI2RlZmluZSBCQVZHICAgICAgICAweDA1IC8qIFUvQiBBdmVyYWdlIExldmVsICovCisjZGVmaW5lIEdBVkcgICAgICAgIDB4MDYgLyogWS9HYiBBdmVyYWdlIExldmVsICovCisjZGVmaW5lIFJBVkcgICAgICAgIDB4MDcgLyogVi9SIEF2ZXJhZ2UgTGV2ZWwgKi8KKyNkZWZpbmUgQUVDSCAgICAgICAgMHgwOCAvKiBFeHBvc3VyZSBWYWx1ZSAtIEFFQyBNU0JzICovCisjZGVmaW5lIENPTTIgICAgICAgIDB4MDkgLyogQ29tbW9uIGNvbnRyb2wgMiAqLworI2RlZmluZSBQSUQgICAgICAgICAweDBBIC8qIFByb2R1Y3QgSUQgTnVtYmVyIE1TQiAqLworI2RlZmluZSBWRVIgICAgICAgICAweDBCIC8qIFByb2R1Y3QgSUQgTnVtYmVyIExTQiAqLworI2RlZmluZSBDT00zICAgICAgICAweDBDIC8qIENvbW1vbiBjb250cm9sIDMgKi8KKyNkZWZpbmUgQ09NNCAgICAgICAgMHgwRCAvKiBDb21tb24gY29udHJvbCA0ICovCisjZGVmaW5lIENPTTUgICAgICAgIDB4MEUgLyogQ29tbW9uIGNvbnRyb2wgNSAqLworI2RlZmluZSBDT002ICAgICAgICAweDBGIC8qIENvbW1vbiBjb250cm9sIDYgKi8KKyNkZWZpbmUgQUVDICAgICAgICAgMHgxMCAvKiBFeHBvc3VyZSBWYWx1ZSAqLworI2RlZmluZSBDTEtSQyAgICAgICAweDExIC8qIEludGVybmFsIGNsb2NrICovCisjZGVmaW5lIENPTTcgICAgICAgIDB4MTIgLyogQ29tbW9uIGNvbnRyb2wgNyAqLworI2RlZmluZSBDT004ICAgICAgICAweDEzIC8qIENvbW1vbiBjb250cm9sIDggKi8KKyNkZWZpbmUgQ09NOSAgICAgICAgMHgxNCAvKiBDb21tb24gY29udHJvbCA5ICovCisjZGVmaW5lIENPTTEwICAgICAgIDB4MTUgLyogQ29tbW9uIGNvbnRyb2wgMTAgKi8KKyNkZWZpbmUgUkVHMTYgICAgICAgMHgxNiAvKiBSZWdpc3RlciAxNiAqLworI2RlZmluZSBIU1RBUlQgICAgICAweDE3IC8qIEhvcml6b250YWwgc2Vuc29yIHNpemUgKi8KKyNkZWZpbmUgSFNJWkUgICAgICAgMHgxOCAvKiBIb3Jpem9udGFsIGZyYW1lIChIUkVGIGNvbHVtbikgZW5kIGhpZ2ggOC1iaXQgKi8KKyNkZWZpbmUgVlNUQVJUICAgICAgMHgxOSAvKiBWZXJ0aWNhbCBmcmFtZSAocm93KSBzdGFydCBoaWdoIDgtYml0ICovCisjZGVmaW5lIFZTSVpFICAgICAgIDB4MUEgLyogVmVydGljYWwgc2Vuc29yIHNpemUgKi8KKyNkZWZpbmUgUFNIRlQgICAgICAgMHgxQiAvKiBEYXRhIGZvcm1hdCAtIHBpeGVsIGRlbGF5IHNlbGVjdCAqLworI2RlZmluZSBNSURIICAgICAgICAweDFDIC8qIE1hbnVmYWN0dXJlciBJRCBieXRlIC0gaGlnaCAqLworI2RlZmluZSBNSURMICAgICAgICAweDFEIC8qIE1hbnVmYWN0dXJlciBJRCBieXRlIC0gbG93ICAqLworI2RlZmluZSBMQUVDICAgICAgICAweDFGIC8qIEZpbmUgQUVDIHZhbHVlICovCisjZGVmaW5lIENPTTExICAgICAgIDB4MjAgLyogQ29tbW9uIGNvbnRyb2wgMTEgKi8KKyNkZWZpbmUgQkRCQVNFICAgICAgMHgyMiAvKiBCYW5kaW5nIGZpbHRlciBNaW5pbXVtIEFFQyB2YWx1ZSAqLworI2RlZmluZSBEQlNURVAgICAgICAweDIzIC8qIEJhbmRpbmcgZmlsdGVyIE1heGltdW0gU2V0cCAqLworI2RlZmluZSBBRVcgICAgICAgICAweDI0IC8qIEFHQy9BRUMgLSBTdGFibGUgb3BlcmF0aW5nIHJlZ2lvbiAodXBwZXIgbGltaXQpICovCisjZGVmaW5lIEFFQiAgICAgICAgIDB4MjUgLyogQUdDL0FFQyAtIFN0YWJsZSBvcGVyYXRpbmcgcmVnaW9uIChsb3dlciBsaW1pdCkgKi8KKyNkZWZpbmUgVlBUICAgICAgICAgMHgyNiAvKiBBR0MvQUVDIEZhc3QgbW9kZSBvcGVyYXRpbmcgcmVnaW9uICovCisjZGVmaW5lIFJFRzI4ICAgICAgIDB4MjggLyogUmVnaXN0ZXIgMjggKi8KKyNkZWZpbmUgSE9VVFNJWkUgICAgMHgyOSAvKiBIb3Jpem9udGFsIGRhdGEgb3V0cHV0IHNpemUgTVNCcyAqLworI2RlZmluZSBFWEhDSCAgICAgICAweDJBIC8qIER1bW15IHBpeGVsIGluc2VydCBNU0IgKi8KKyNkZWZpbmUgRVhIQ0wgICAgICAgMHgyQiAvKiBEdW1teSBwaXhlbCBpbnNlcnQgTFNCICovCisjZGVmaW5lIFZPVVRTSVpFICAgIDB4MkMgLyogVmVydGljYWwgZGF0YSBvdXRwdXQgc2l6ZSBNU0JzICovCisjZGVmaW5lIEFEVkZMICAgICAgIDB4MkQgLyogTFNCIG9mIGluc2VydCBkdW1teSBsaW5lcyBpbiBWZXJ0aWNhbCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgQURWRkggICAgICAgMHgyRSAvKiBNU0cgb2YgaW5zZXJ0IGR1bW15IGxpbmVzIGluIFZlcnRpY2FsIGRpcmVjdGlvbiAqLworI2RlZmluZSBZQVZFICAgICAgICAweDJGIC8qIFkvRyBDaGFubmVsIEF2ZXJhZ2UgdmFsdWUgKi8KKyNkZWZpbmUgTFVNSFRIICAgICAgMHgzMCAvKiBIaXN0b2dyYW0gQUVDL0FHQyBMdW1pbmFuY2UgaGlnaCBsZXZlbCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgTFVNTFRIICAgICAgMHgzMSAvKiBIaXN0b2dyYW0gQUVDL0FHQyBMdW1pbmFuY2UgbG93ICBsZXZlbCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgSFJFRiAgICAgICAgMHgzMiAvKiBJbWFnZSBzdGFydCBhbmQgc2l6ZSBjb250cm9sICovCisjZGVmaW5lIERNX0xOTCAgICAgIDB4MzMgLyogRHVtbXkgbGluZSBsb3cgIDggYml0cyAqLworI2RlZmluZSBETV9MTkggICAgICAweDM0IC8qIER1bW15IGxpbmUgaGlnaCA4IGJpdHMgKi8KKyNkZWZpbmUgQURPRkZfQiAgICAgMHgzNSAvKiBBRCBvZmZzZXQgY29tcGVuc2F0aW9uIHZhbHVlIGZvciBCICBjaGFubmVsICovCisjZGVmaW5lIEFET0ZGX1IgICAgIDB4MzYgLyogQUQgb2Zmc2V0IGNvbXBlbnNhdGlvbiB2YWx1ZSBmb3IgUiAgY2hhbm5lbCAqLworI2RlZmluZSBBRE9GRl9HQiAgICAweDM3IC8qIEFEIG9mZnNldCBjb21wZW5zYXRpb24gdmFsdWUgZm9yIEdiIGNoYW5uZWwgKi8KKyNkZWZpbmUgQURPRkZfR1IgICAgMHgzOCAvKiBBRCBvZmZzZXQgY29tcGVuc2F0aW9uIHZhbHVlIGZvciBHciBjaGFubmVsICovCisjZGVmaW5lIE9GRl9CICAgICAgIDB4MzkgLyogQW5hbG9nIHByb2Nlc3MgQiAgY2hhbm5lbCBvZmZzZXQgdmFsdWUgKi8KKyNkZWZpbmUgT0ZGX1IgICAgICAgMHgzQSAvKiBBbmFsb2cgcHJvY2VzcyBSICBjaGFubmVsIG9mZnNldCB2YWx1ZSAqLworI2RlZmluZSBPRkZfR0IgICAgICAweDNCIC8qIEFuYWxvZyBwcm9jZXNzIEdiIGNoYW5uZWwgb2Zmc2V0IHZhbHVlICovCisjZGVmaW5lIE9GRl9HUiAgICAgIDB4M0MgLyogQW5hbG9nIHByb2Nlc3MgR3IgY2hhbm5lbCBvZmZzZXQgdmFsdWUgKi8KKyNkZWZpbmUgQ09NMTIgICAgICAgMHgzRCAvKiBDb21tb24gY29udHJvbCAxMiAqLworI2RlZmluZSBDT00xMyAgICAgICAweDNFIC8qIENvbW1vbiBjb250cm9sIDEzICovCisjZGVmaW5lIENPTTE0ICAgICAgIDB4M0YgLyogQ29tbW9uIGNvbnRyb2wgMTQgKi8KKyNkZWZpbmUgQ09NMTUgICAgICAgMHg0MCAvKiBDb21tb24gY29udHJvbCAxNSovCisjZGVmaW5lIENPTTE2ICAgICAgIDB4NDEgLyogQ29tbW9uIGNvbnRyb2wgMTYgKi8KKyNkZWZpbmUgVEdUX0IgICAgICAgMHg0MiAvKiBCTEMgYmx1ZSBjaGFubmVsIHRhcmdldCB2YWx1ZSAqLworI2RlZmluZSBUR1RfUiAgICAgICAweDQzIC8qIEJMQyByZWQgIGNoYW5uZWwgdGFyZ2V0IHZhbHVlICovCisjZGVmaW5lIFRHVF9HQiAgICAgIDB4NDQgLyogQkxDIEdiICAgY2hhbm5lbCB0YXJnZXQgdmFsdWUgKi8KKyNkZWZpbmUgVEdUX0dSICAgICAgMHg0NSAvKiBCTEMgR3IgICBjaGFubmVsIHRhcmdldCB2YWx1ZSAqLworLyogZm9yIG92NzcyMCAqLworI2RlZmluZSBMQ0MwICAgICAgICAweDQ2IC8qIExlbnMgY29ycmVjdGlvbiBjb250cm9sIDAgKi8KKyNkZWZpbmUgTENDMSAgICAgICAgMHg0NyAvKiBMZW5zIGNvcnJlY3Rpb24gb3B0aW9uIDEgLSBYIGNvb3JkaW5hdGUgKi8KKyNkZWZpbmUgTENDMiAgICAgICAgMHg0OCAvKiBMZW5zIGNvcnJlY3Rpb24gb3B0aW9uIDIgLSBZIGNvb3JkaW5hdGUgKi8KKyNkZWZpbmUgTENDMyAgICAgICAgMHg0OSAvKiBMZW5zIGNvcnJlY3Rpb24gb3B0aW9uIDMgKi8KKyNkZWZpbmUgTENDNCAgICAgICAgMHg0QSAvKiBMZW5zIGNvcnJlY3Rpb24gb3B0aW9uIDQgLSByYWRpdXMgb2YgdGhlIGNpcmN1bGFyICovCisjZGVmaW5lIExDQzUgICAgICAgIDB4NEIgLyogTGVucyBjb3JyZWN0aW9uIG9wdGlvbiA1ICovCisjZGVmaW5lIExDQzYgICAgICAgIDB4NEMgLyogTGVucyBjb3JyZWN0aW9uIG9wdGlvbiA2ICovCisvKiBmb3Igb3Y3NzI1ICovCisjZGVmaW5lIExDX0NUUiAgICAgIDB4NDYgLyogTGVucyBjb3JyZWN0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgTENfWEMgICAgICAgMHg0NyAvKiBYIGNvb3JkaW5hdGUgb2YgbGVucyBjb3JyZWN0aW9uIGNlbnRlciByZWxhdGl2ZSAqLworI2RlZmluZSBMQ19ZQyAgICAgICAweDQ4IC8qIFkgY29vcmRpbmF0ZSBvZiBsZW5zIGNvcnJlY3Rpb24gY2VudGVyIHJlbGF0aXZlICovCisjZGVmaW5lIExDX0NPRUYgICAgIDB4NDkgLyogTGVucyBjb3JyZWN0aW9uIGNvZWZmaWNpZW50ICovCisjZGVmaW5lIExDX1JBREkgICAgIDB4NEEgLyogTGVucyBjb3JyZWN0aW9uIHJhZGl1cyAqLworI2RlZmluZSBMQ19DT0VGQiAgICAweDRCIC8qIExlbnMgQiBjaGFubmVsIGNvbXBlbnNhdGlvbiBjb2VmZmljaWVudCAqLworI2RlZmluZSBMQ19DT0VGUiAgICAweDRDIC8qIExlbnMgUiBjaGFubmVsIGNvbXBlbnNhdGlvbiBjb2VmZmljaWVudCAqLworCisjZGVmaW5lIEZJWEdBSU4gICAgIDB4NEQgLyogQW5hbG9nIGZpeCBnYWluIGFtcGxpZmVyICovCisjZGVmaW5lIEFSRUYwICAgICAgIDB4NEUgLyogU2Vuc29yIHJlZmVyZW5jZSBjb250cm9sICovCisjZGVmaW5lIEFSRUYxICAgICAgIDB4NEYgLyogU2Vuc29yIHJlZmVyZW5jZSBjdXJyZW50IGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjIgICAgICAgMHg1MCAvKiBBbmFsb2cgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjMgICAgICAgMHg1MSAvKiBBREMgICAgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjQgICAgICAgMHg1MiAvKiBBREMgICAgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjUgICAgICAgMHg1MyAvKiBBREMgICAgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjYgICAgICAgMHg1NCAvKiBBbmFsb2cgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJFRjcgICAgICAgMHg1NSAvKiBBbmFsb2cgcmVmZXJlbmNlIGNvbnRyb2wgKi8KKyNkZWZpbmUgVUZJWCAgICAgICAgMHg2MCAvKiBVIGNoYW5uZWwgZml4ZWQgdmFsdWUgb3V0cHV0ICovCisjZGVmaW5lIFZGSVggICAgICAgIDB4NjEgLyogViBjaGFubmVsIGZpeGVkIHZhbHVlIG91dHB1dCAqLworI2RlZmluZSBBV0JCX0JMSyAgICAweDYyIC8qIEFXQiBvcHRpb24gZm9yIGFkdmFuY2VkIEFXQiAqLworI2RlZmluZSBBV0JfQ1RSTDAgICAweDYzIC8qIEFXQiBjb250cm9sIGJ5dGUgMCAqLworI2RlZmluZSBEU1BfQ1RSTDEgICAweDY0IC8qIERTUCBjb250cm9sIGJ5dGUgMSAqLworI2RlZmluZSBEU1BfQ1RSTDIgICAweDY1IC8qIERTUCBjb250cm9sIGJ5dGUgMiAqLworI2RlZmluZSBEU1BfQ1RSTDMgICAweDY2IC8qIERTUCBjb250cm9sIGJ5dGUgMyAqLworI2RlZmluZSBEU1BfQ1RSTDQgICAweDY3IC8qIERTUCBjb250cm9sIGJ5dGUgNCAqLworI2RlZmluZSBBV0JfQklBUyAgICAweDY4IC8qIEFXQiBCTEMgbGV2ZWwgY2xpcCAqLworI2RlZmluZSBBV0JfQ1RSTDEgICAweDY5IC8qIEFXQiBjb250cm9sICAxICovCisjZGVmaW5lIEFXQl9DVFJMMiAgIDB4NkEgLyogQVdCIGNvbnRyb2wgIDIgKi8KKyNkZWZpbmUgQVdCX0NUUkwzICAgMHg2QiAvKiBBV0IgY29udHJvbCAgMyAqLworI2RlZmluZSBBV0JfQ1RSTDQgICAweDZDIC8qIEFXQiBjb250cm9sICA0ICovCisjZGVmaW5lIEFXQl9DVFJMNSAgIDB4NkQgLyogQVdCIGNvbnRyb2wgIDUgKi8KKyNkZWZpbmUgQVdCX0NUUkw2ICAgMHg2RSAvKiBBV0IgY29udHJvbCAgNiAqLworI2RlZmluZSBBV0JfQ1RSTDcgICAweDZGIC8qIEFXQiBjb250cm9sICA3ICovCisjZGVmaW5lIEFXQl9DVFJMOCAgIDB4NzAgLyogQVdCIGNvbnRyb2wgIDggKi8KKyNkZWZpbmUgQVdCX0NUUkw5ICAgMHg3MSAvKiBBV0IgY29udHJvbCAgOSAqLworI2RlZmluZSBBV0JfQ1RSTDEwICAweDcyIC8qIEFXQiBjb250cm9sIDEwICovCisjZGVmaW5lIEFXQl9DVFJMMTEgIDB4NzMgLyogQVdCIGNvbnRyb2wgMTEgKi8KKyNkZWZpbmUgQVdCX0NUUkwxMiAgMHg3NCAvKiBBV0IgY29udHJvbCAxMiAqLworI2RlZmluZSBBV0JfQ1RSTDEzICAweDc1IC8qIEFXQiBjb250cm9sIDEzICovCisjZGVmaW5lIEFXQl9DVFJMMTQgIDB4NzYgLyogQVdCIGNvbnRyb2wgMTQgKi8KKyNkZWZpbmUgQVdCX0NUUkwxNSAgMHg3NyAvKiBBV0IgY29udHJvbCAxNSAqLworI2RlZmluZSBBV0JfQ1RSTDE2ICAweDc4IC8qIEFXQiBjb250cm9sIDE2ICovCisjZGVmaW5lIEFXQl9DVFJMMTcgIDB4NzkgLyogQVdCIGNvbnRyb2wgMTcgKi8KKyNkZWZpbmUgQVdCX0NUUkwxOCAgMHg3QSAvKiBBV0IgY29udHJvbCAxOCAqLworI2RlZmluZSBBV0JfQ1RSTDE5ICAweDdCIC8qIEFXQiBjb250cm9sIDE5ICovCisjZGVmaW5lIEFXQl9DVFJMMjAgIDB4N0MgLyogQVdCIGNvbnRyb2wgMjAgKi8KKyNkZWZpbmUgQVdCX0NUUkwyMSAgMHg3RCAvKiBBV0IgY29udHJvbCAyMSAqLworI2RlZmluZSBHQU0xICAgICAgICAweDdFIC8qIEdhbW1hIEN1cnZlICAxc3Qgc2VnbWVudCBpbnB1dCBlbmQgcG9pbnQgKi8KKyNkZWZpbmUgR0FNMiAgICAgICAgMHg3RiAvKiBHYW1tYSBDdXJ2ZSAgMm5kIHNlZ21lbnQgaW5wdXQgZW5kIHBvaW50ICovCisjZGVmaW5lIEdBTTMgICAgICAgIDB4ODAgLyogR2FtbWEgQ3VydmUgIDNyZCBzZWdtZW50IGlucHV0IGVuZCBwb2ludCAqLworI2RlZmluZSBHQU00ICAgICAgICAweDgxIC8qIEdhbW1hIEN1cnZlICA0dGggc2VnbWVudCBpbnB1dCBlbmQgcG9pbnQgKi8KKyNkZWZpbmUgR0FNNSAgICAgICAgMHg4MiAvKiBHYW1tYSBDdXJ2ZSAgNXRoIHNlZ21lbnQgaW5wdXQgZW5kIHBvaW50ICovCisjZGVmaW5lIEdBTTYgICAgICAgIDB4ODMgLyogR2FtbWEgQ3VydmUgIDZ0aCBzZWdtZW50IGlucHV0IGVuZCBwb2ludCAqLworI2RlZmluZSBHQU03ICAgICAgICAweDg0IC8qIEdhbW1hIEN1cnZlICA3dGggc2VnbWVudCBpbnB1dCBlbmQgcG9pbnQgKi8KKyNkZWZpbmUgR0FNOCAgICAgICAgMHg4NSAvKiBHYW1tYSBDdXJ2ZSAgOHRoIHNlZ21lbnQgaW5wdXQgZW5kIHBvaW50ICovCisjZGVmaW5lIEdBTTkgICAgICAgIDB4ODYgLyogR2FtbWEgQ3VydmUgIDl0aCBzZWdtZW50IGlucHV0IGVuZCBwb2ludCAqLworI2RlZmluZSBHQU0xMCAgICAgICAweDg3IC8qIEdhbW1hIEN1cnZlIDEwdGggc2VnbWVudCBpbnB1dCBlbmQgcG9pbnQgKi8KKyNkZWZpbmUgR0FNMTEgICAgICAgMHg4OCAvKiBHYW1tYSBDdXJ2ZSAxMXRoIHNlZ21lbnQgaW5wdXQgZW5kIHBvaW50ICovCisjZGVmaW5lIEdBTTEyICAgICAgIDB4ODkgLyogR2FtbWEgQ3VydmUgMTJ0aCBzZWdtZW50IGlucHV0IGVuZCBwb2ludCAqLworI2RlZmluZSBHQU0xMyAgICAgICAweDhBIC8qIEdhbW1hIEN1cnZlIDEzdGggc2VnbWVudCBpbnB1dCBlbmQgcG9pbnQgKi8KKyNkZWZpbmUgR0FNMTQgICAgICAgMHg4QiAvKiBHYW1tYSBDdXJ2ZSAxNHRoIHNlZ21lbnQgaW5wdXQgZW5kIHBvaW50ICovCisjZGVmaW5lIEdBTTE1ICAgICAgIDB4OEMgLyogR2FtbWEgQ3VydmUgMTV0aCBzZWdtZW50IGlucHV0IGVuZCBwb2ludCAqLworI2RlZmluZSBTTE9QICAgICAgICAweDhEIC8qIEdhbW1hIGN1cnZlIGhpZ2hlc3Qgc2VnbWVudCBzbG9wZSAqLworI2RlZmluZSBETlNUSCAgICAgICAweDhFIC8qIERlLW5vaXNlIHRocmVzaG9sZCAqLworI2RlZmluZSBFREdFMCAgICAgICAweDhGIC8qIEVkZ2UgZW5oYW5jZW1lbnQgY29udHJvbCAwICovCisjZGVmaW5lIEVER0UxICAgICAgIDB4OTAgLyogRWRnZSBlbmhhbmNlbWVudCBjb250cm9sIDEgKi8KKyNkZWZpbmUgRE5TT0ZGICAgICAgMHg5MSAvKiBBdXRvIERlLW5vaXNlIHRocmVzaG9sZCBjb250cm9sICovCisjZGVmaW5lIEVER0UyICAgICAgIDB4OTIgLyogRWRnZSBlbmhhbmNlbWVudCBzdHJlbmd0aCBsb3cgIHBvaW50IGNvbnRyb2wgKi8KKyNkZWZpbmUgRURHRTMgICAgICAgMHg5MyAvKiBFZGdlIGVuaGFuY2VtZW50IHN0cmVuZ3RoIGhpZ2ggcG9pbnQgY29udHJvbCAqLworI2RlZmluZSBNVFgxICAgICAgICAweDk0IC8qIE1hdHJpeCBjb2VmZmljaWVudCAxICovCisjZGVmaW5lIE1UWDIgICAgICAgIDB4OTUgLyogTWF0cml4IGNvZWZmaWNpZW50IDIgKi8KKyNkZWZpbmUgTVRYMyAgICAgICAgMHg5NiAvKiBNYXRyaXggY29lZmZpY2llbnQgMyAqLworI2RlZmluZSBNVFg0ICAgICAgICAweDk3IC8qIE1hdHJpeCBjb2VmZmljaWVudCA0ICovCisjZGVmaW5lIE1UWDUgICAgICAgIDB4OTggLyogTWF0cml4IGNvZWZmaWNpZW50IDUgKi8KKyNkZWZpbmUgTVRYNiAgICAgICAgMHg5OSAvKiBNYXRyaXggY29lZmZpY2llbnQgNiAqLworI2RlZmluZSBNVFhfQ1RSTCAgICAweDlBIC8qIE1hdHJpeCBjb250cm9sICovCisjZGVmaW5lIEJSSUdIVCAgICAgIDB4OUIgLyogQnJpZ2h0bmVzcyBjb250cm9sICovCisjZGVmaW5lIENOVFJTVCAgICAgIDB4OUMgLyogQ29udHJhc3QgY29udHJhc3QgKi8KKyNkZWZpbmUgQ05UUlNUX0NUUkwgMHg5RCAvKiBDb250cmFzdCBjb250cmFzdCBjZW50ZXIgKi8KKyNkZWZpbmUgVVZBRF9KMCAgICAgMHg5RSAvKiBBdXRvIFVWIGFkanVzdCBjb250cmFzdCAwICovCisjZGVmaW5lIFVWQURfSjEgICAgIDB4OUYgLyogQXV0byBVViBhZGp1c3QgY29udHJhc3QgMSAqLworI2RlZmluZSBTQ0FMMCAgICAgICAweEEwIC8qIFNjYWxpbmcgY29udHJvbCAwICovCisjZGVmaW5lIFNDQUwxICAgICAgIDB4QTEgLyogU2NhbGluZyBjb250cm9sIDEgKi8KKyNkZWZpbmUgU0NBTDIgICAgICAgMHhBMiAvKiBTY2FsaW5nIGNvbnRyb2wgMiAqLworI2RlZmluZSBGSUZPRExZTSAgICAweEEzIC8qIEZJRk8gbWFudWFsIG1vZGUgZGVsYXkgY29udHJvbCAqLworI2RlZmluZSBGSUZPRExZQSAgICAweEE0IC8qIEZJRk8gYXV0byAgIG1vZGUgZGVsYXkgY29udHJvbCAqLworI2RlZmluZSBTREUgICAgICAgICAweEE2IC8qIFNwZWNpYWwgZGlnaXRhbCBlZmZlY3QgY29udHJvbCAqLworI2RlZmluZSBVU0FUICAgICAgICAweEE3IC8qIFUgY29tcG9uZW50IHNhdHVyYXRpb24gY29udHJvbCAqLworI2RlZmluZSBWU0FUICAgICAgICAweEE4IC8qIFYgY29tcG9uZW50IHNhdHVyYXRpb24gY29udHJvbCAqLworLyogZm9yIG92NzcyMCAqLworI2RlZmluZSBIVUUwICAgICAgICAweEE5IC8qIEh1ZSBjb250cm9sIDAgKi8KKyNkZWZpbmUgSFVFMSAgICAgICAgMHhBQSAvKiBIdWUgY29udHJvbCAxICovCisvKiBmb3Igb3Y3NzI1ICovCisjZGVmaW5lIEhVRUNPUyAgICAgIDB4QTkgLyogQ29zaW5lIHZhbHVlICovCisjZGVmaW5lIEhVRVNJTiAgICAgIDB4QUEgLyogU2luZSB2YWx1ZSAqLworCisjZGVmaW5lIFNJR04gICAgICAgIDB4QUIgLyogU2lnbiBiaXQgZm9yIEh1ZSBhbmQgY29udHJhc3QgKi8KKyNkZWZpbmUgRFNQQVVUTyAgICAgMHhBQyAvKiBEU1AgYXV0byBmdW5jdGlvbiBPTi9PRkYgY29udHJvbCAqLworCisvKgorICogcmVnaXN0ZXIgZGV0YWlsCisgKi8KKworLyogQ09NMiAqLworI2RlZmluZSBTT0ZUX1NMRUVQX01PREUgMHgxMAkvKiBTb2Z0IHNsZWVwIG1vZGUgKi8KKwkJCQkvKiBPdXRwdXQgZHJpdmUgY2FwYWJpbGl0eSAqLworI2RlZmluZSBPQ0FQXzF4ICAgICAgICAgMHgwMAkvKiAxeCAqLworI2RlZmluZSBPQ0FQXzJ4ICAgICAgICAgMHgwMQkvKiAyeCAqLworI2RlZmluZSBPQ0FQXzN4ICAgICAgICAgMHgwMgkvKiAzeCAqLworI2RlZmluZSBPQ0FQXzR4ICAgICAgICAgMHgwMwkvKiA0eCAqLworCisvKiBDT00zICovCisjZGVmaW5lIFNXQVBfTUFTSyAgICAgICAweDM4CisKKyNkZWZpbmUgVkZJTUdfT05fT0ZGICAgIDB4ODAJLyogVmVydGljYWwgZmxpcCBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIEhNSU1HX09OX09GRiAgICAweDQwCS8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgU1dBUF9SR0IgICAgICAgIDB4MjAJLyogU3dhcCBCL1IgIG91dHB1dCBzZXF1ZW5jZSBpbiBSR0IgbW9kZSAqLworI2RlZmluZSBTV0FQX1lVViAgICAgICAgMHgxMAkvKiBTd2FwIFkvVVYgb3V0cHV0IHNlcXVlbmNlIGluIFlVViBtb2RlICovCisjZGVmaW5lIFNXQVBfTUwgICAgICAgICAweDA4CS8qIFN3YXAgb3V0cHV0IE1TQi9MU0IgKi8KKwkJCQkvKiBUcmktc3RhdGUgb3B0aW9uIGZvciBvdXRwdXQgY2xvY2sgKi8KKyNkZWZpbmUgTk9UUklfQ0xPQ0sgICAgIDB4MDQJLyogICAwOiBUcmktc3RhdGUgICAgYXQgdGhpcyBwZXJpb2QgKi8KKwkJCQkvKiAgIDE6IE5vIHRyaS1zdGF0ZSBhdCB0aGlzIHBlcmlvZCAqLworCQkJCS8qIFRyaS1zdGF0ZSBvcHRpb24gZm9yIG91dHB1dCBkYXRhICovCisjZGVmaW5lIE5PVFJJX0RBVEEgICAgICAweDAyCS8qICAgMDogVHJpLXN0YXRlICAgIGF0IHRoaXMgcGVyaW9kICovCisJCQkJLyogICAxOiBObyB0cmktc3RhdGUgYXQgdGhpcyBwZXJpb2QgKi8KKyNkZWZpbmUgU0NPTE9SX1RFU1QgICAgIDB4MDEJLyogU2Vuc29yIGNvbG9yIGJhciB0ZXN0IHBhdHRlcm4gKi8KKworLyogQ09NNCAqLworCQkJCS8qIFBMTCBmcmVxdWVuY3kgY29udHJvbCAqLworI2RlZmluZSBQTExfQllQQVNTICAgICAgMHgwMAkvKiAgMDA6IEJ5cGFzcyBQTEwgKi8KKyNkZWZpbmUgUExMXzR4ICAgICAgICAgIDB4NDAJLyogIDAxOiBQTEwgNHggKi8KKyNkZWZpbmUgUExMXzZ4ICAgICAgICAgIDB4ODAJLyogIDEwOiBQTEwgNnggKi8KKyNkZWZpbmUgUExMXzh4ICAgICAgICAgIDB4YzAJLyogIDExOiBQTEwgOHggKi8KKwkJCQkvKiBBRUMgZXZhbHVhdGUgd2luZG93ICovCisjZGVmaW5lIEFFQ19GVUxMICAgICAgICAweDAwCS8qICAwMDogRnVsbCB3aW5kb3cgKi8KKyNkZWZpbmUgQUVDXzFwMiAgICAgICAgIDB4MTAJLyogIDAxOiAxLzIgIHdpbmRvdyAqLworI2RlZmluZSBBRUNfMXA0ICAgICAgICAgMHgyMAkvKiAgMTA6IDEvNCAgd2luZG93ICovCisjZGVmaW5lIEFFQ18ycDMgICAgICAgICAweDMwCS8qICAxMTogTG93IDIvMyB3aW5kb3cgKi8KKworLyogQ09NNSAqLworI2RlZmluZSBBRlJfT05fT0ZGICAgICAgMHg4MAkvKiBBdXRvIGZyYW1lIHJhdGUgY29udHJvbCBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIEFGUl9TUFBFRCAgICAgICAweDQwCS8qIEF1dG8gZnJhbWUgcmF0ZSBjb250cm9sIHNwZWVkIHNsZWN0aW9uICovCisJCQkJLyogQXV0byBmcmFtZSByYXRlIG1heCByYXRlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUZSX05PX1JBVEUgICAgIDB4MDAJLyogICAgIE5vICByZWR1Y3Rpb24gb2YgZnJhbWUgcmF0ZSAqLworI2RlZmluZSBBRlJfMXAyICAgICAgICAgMHgxMAkvKiAgICAgTWF4IHJlZHVjdGlvbiB0byAxLzIgZnJhbWUgcmF0ZSAqLworI2RlZmluZSBBRlJfMXA0ICAgICAgICAgMHgyMAkvKiAgICAgTWF4IHJlZHVjdGlvbiB0byAxLzQgZnJhbWUgcmF0ZSAqLworI2RlZmluZSBBRlJfMXA4ICAgICAgICAgMHgzMAkvKiBNYXggcmVkdWN0aW9uIHRvIDEvOCBmcmFtZSByYXRlICovCisJCQkJLyogQXV0byBmcmFtZSByYXRlIGFjdGl2ZSBwb2ludCBjb250cm9sICovCisjZGVmaW5lIEFGXzJ4ICAgICAgICAgICAweDAwCS8qICAgICBBZGQgZnJhbWUgd2hlbiBBR0MgcmVhY2hlcyAgMnggZ2FpbiAqLworI2RlZmluZSBBRl80eCAgICAgICAgICAgMHgwNAkvKiAgICAgQWRkIGZyYW1lIHdoZW4gQUdDIHJlYWNoZXMgIDR4IGdhaW4gKi8KKyNkZWZpbmUgQUZfOHggICAgICAgICAgIDB4MDgJLyogICAgIEFkZCBmcmFtZSB3aGVuIEFHQyByZWFjaGVzICA4eCBnYWluICovCisjZGVmaW5lIEFGXzE2eCAgICAgICAgICAweDBjCS8qIEFkZCBmcmFtZSB3aGVuIEFHQyByZWFjaGVzIDE2eCBnYWluICovCisJCQkJLyogQUVDIG1heCBzdGVwIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUVDX05PX0xJTUlUICAgIDB4MDEJLyogICAwIDogQUVDIGluY2Vhc2Ugc3RlcCBoYXMgbGltaXQgKi8KKwkJCQkvKiAgIDEgOiBObyBsaW1pdCB0byBBRUMgaW5jcmVhc2Ugc3RlcCAqLworCisvKiBDT003ICovCisJCQkJLyogU0NDQiBSZWdpc3RlciBSZXNldCAqLworI2RlZmluZSBTQ0NCX1JFU0VUICAgICAgMHg4MAkvKiAgIDAgOiBObyBjaGFuZ2UgKi8KKwkJCQkvKiAgIDEgOiBSZXNldHMgYWxsIHJlZ2lzdGVycyB0byBkZWZhdWx0ICovCisJCQkJLyogUmVzb2x1dGlvbiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgU0xDVF9NQVNLICAgICAgIDB4NDAJLyogICBNYXNrIG9mIFZHQSBvciBRVkdBICovCisjZGVmaW5lIFNMQ1RfVkdBICAgICAgICAweDAwCS8qICAgMCA6IFZHQSAqLworI2RlZmluZSBTTENUX1FWR0EgICAgICAgMHg0MAkvKiAgIDEgOiBRVkdBICovCisjZGVmaW5lIElUVTY1Nl9PTl9PRkYgICAweDIwCS8qIElUVTY1NiBwcm90b2NvbCBPTi9PRkYgc2VsZWN0aW9uICovCisJCQkJLyogUkdCIG91dHB1dCBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSBGTVRfR0JSNDIyICAgICAgMHgwMAkvKiAgICAgIDAwIDogR0JSIDQ6MjoyICovCisjZGVmaW5lIEZNVF9SR0I1NjUgICAgICAweDA0CS8qICAgICAgMDEgOiBSR0IgNTY1ICovCisjZGVmaW5lIEZNVF9SR0I1NTUgICAgICAweDA4CS8qICAgICAgMTAgOiBSR0IgNTU1ICovCisjZGVmaW5lIEZNVF9SR0I0NDQgICAgICAweDBjCS8qIDExIDogUkdCIDQ0NCAqLworCQkJCS8qIE91dHB1dCBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSBPRk1UX1lVViAgICAgICAgMHgwMAkvKiAgICAgIDAwIDogWVVWICovCisjZGVmaW5lIE9GTVRfUF9CUkFXICAgICAweDAxCS8qICAgICAgMDEgOiBQcm9jZXNzZWQgQmF5ZXIgUkFXICovCisjZGVmaW5lIE9GTVRfUkdCICAgICAgICAweDAyCS8qICAgICAgMTAgOiBSR0IgKi8KKyNkZWZpbmUgT0ZNVF9CUkFXICAgICAgIDB4MDMJLyogMTEgOiBCYXllciBSQVcgKi8KKworLyogQ09NOCAqLworI2RlZmluZSBGQVNUX0FMR08gICAgICAgMHg4MAkvKiBFbmFibGUgZmFzdCBBR0MvQUVDIGFsZ29yaXRobSAqLworCQkJCS8qIEFFQyBTZXRwIHNpemUgbGltaXQgKi8KKyNkZWZpbmUgVU5MTVRfU1RFUCAgICAgIDB4NDAJLyogICAwIDogU3RlcCBzaXplIGlzIGxpbWl0ZWQgKi8KKwkJCQkvKiAgIDEgOiBVbmxpbWl0ZWQgc3RlcCBzaXplICovCisjZGVmaW5lIEJOREZfT05fT0ZGICAgICAweDIwCS8qIEJhbmRpbmcgZmlsdGVyIE9OL09GRiAqLworI2RlZmluZSBBRUNfQk5EICAgICAgICAgMHgxMAkvKiBFbmFibGUgQUVDIGJlbG93IGJhbmRpbmcgdmFsdWUgKi8KKyNkZWZpbmUgQUVDX09OX09GRiAgICAgIDB4MDgJLyogRmluZSBBRUMgT04vT0ZGIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUdDX09OICAgICAgICAgIDB4MDQJLyogQUdDIEVuYWJsZSAqLworI2RlZmluZSBBV0JfT04gICAgICAgICAgMHgwMgkvKiBBV0IgRW5hYmxlICovCisjZGVmaW5lIEFFQ19PTiAgICAgICAgICAweDAxCS8qIEFFQyBFbmFibGUgKi8KKworLyogQ09NOSAqLworI2RlZmluZSBCQVNFX0FFQ0FHQyAgICAgMHg4MAkvKiBIaXN0b2dyYW0gb3IgYXZlcmFnZSBiYXNlZCBBRUMvQUdDICovCisJCQkJLyogQXV0b21hdGljIGdhaW4gY2VpbGluZyAtIG1heGltdW0gQUdDIHZhbHVlICovCisjZGVmaW5lIEdBSU5fMnggICAgICAgICAweDAwCS8qICAgIDAwMCA6ICAgMnggKi8KKyNkZWZpbmUgR0FJTl80eCAgICAgICAgIDB4MTAJLyogICAgMDAxIDogICA0eCAqLworI2RlZmluZSBHQUlOXzh4ICAgICAgICAgMHgyMAkvKiAgICAwMTAgOiAgIDh4ICovCisjZGVmaW5lIEdBSU5fMTZ4ICAgICAgICAweDMwCS8qIDAxMSA6ICAxNnggKi8KKyNkZWZpbmUgR0FJTl8zMnggICAgICAgIDB4NDAJLyogICAgMTAwIDogIDMyeCAqLworI2RlZmluZSBHQUlOXzY0eCAgICAgICAgMHg1MAkvKiAxMDEgOiAgNjR4ICovCisjZGVmaW5lIEdBSU5fMTI4eCAgICAgICAweDYwCS8qIDExMCA6IDEyOHggKi8KKyNkZWZpbmUgRFJPUF9WU1lOQyAgICAgIDB4MDQJLyogRHJvcCBWU1lOQyBvdXRwdXQgb2YgY29ycnVwdCBmcmFtZSAqLworI2RlZmluZSBEUk9QX0hSRUYgICAgICAgMHgwMgkvKiBEcm9wIEhSRUYgIG91dHB1dCBvZiBjb3JydXB0IGZyYW1lICovCisKKy8qIENPTTExICovCisjZGVmaW5lIFNHTEZfT05fT0ZGICAgICAweDAyCS8qIFNpbmdsZSBmcmFtZSBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIFNHTEZfVFJJRyAgICAgICAweDAxCS8qIFNpbmdsZSBmcmFtZSB0cmFuc2ZlciB0cmlnZ2VyICovCisKKy8qIEVYSENIICovCisjZGVmaW5lIFZTSVpFX0xTQiAgICAgICAweDA0CS8qIFZlcnRpY2FsIGRhdGEgb3V0cHV0IHNpemUgTFNCICovCisKKy8qIERTUF9DVFJMMSAqLworI2RlZmluZSBGSUZPX09OICAgICAgICAgMHg4MAkvKiBGSUZPIGVuYWJsZS9kaXNhYmxlIHNlbGVjdGlvbiAqLworI2RlZmluZSBVVl9PTl9PRkYgICAgICAgMHg0MAkvKiBVViBhZGp1c3QgZnVuY3Rpb24gT04vT0ZGIHNlbGVjdGlvbiAqLworI2RlZmluZSBZVVY0NDRfMl80MjIgICAgMHgyMAkvKiBZVVY0NDQgdG8gNDIyIFVWIGNoYW5uZWwgb3B0aW9uIHNlbGVjdGlvbiAqLworI2RlZmluZSBDTFJfTVRSWF9PTl9PRkYgMHgxMAkvKiBDb2xvciBtYXRyaXggT04vT0ZGIHNlbGVjdGlvbiAqLworI2RlZmluZSBJTlRQTFRfT05fT0ZGICAgMHgwOAkvKiBJbnRlcnBvbGF0aW9uIE9OL09GRiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgR01NX09OX09GRiAgICAgIDB4MDQJLyogR2FtbWEgZnVuY3Rpb24gT04vT0ZGIHNlbGVjdGlvbiAqLworI2RlZmluZSBBVVRPX0JMS19PTl9PRkYgMHgwMgkvKiBCbGFjayBkZWZlY3QgYXV0byBjb3JyZWN0aW9uIE9OL09GRiAqLworI2RlZmluZSBBVVRPX1dIVF9PTl9PRkYgMHgwMQkvKiBXaGl0ZSBkZWZpbmUgYXV0byBjb3JyZWN0aW9uIE9OL09GRiAqLworCisvKiBEU1BfQ1RSTDMgKi8KKyNkZWZpbmUgVVZfTUFTSyAgICAgICAgIDB4ODAJLyogVVYgb3V0cHV0IHNlcXVlbmNlIG9wdGlvbiAqLworI2RlZmluZSBVVl9PTiAgICAgICAgICAgMHg4MAkvKiAgIE9OICovCisjZGVmaW5lIFVWX09GRiAgICAgICAgICAweDAwCS8qICAgT0ZGICovCisjZGVmaW5lIENCQVJfTUFTSyAgICAgICAweDIwCS8qIERTUCBDb2xvciBiYXIgbWFzayAqLworI2RlZmluZSBDQkFSX09OICAgICAgICAgMHgyMAkvKiAgIE9OICovCisjZGVmaW5lIENCQVJfT0ZGICAgICAgICAweDAwCS8qICAgT0ZGICovCisKKy8qIEhTVEFSVCAqLworI2RlZmluZSBIU1RfVkdBICAgICAgICAgMHgyMworI2RlZmluZSBIU1RfUVZHQSAgICAgICAgMHgzRgorCisvKiBIU0laRSAqLworI2RlZmluZSBIU1pfVkdBICAgICAgICAgMHhBMAorI2RlZmluZSBIU1pfUVZHQSAgICAgICAgMHg1MAorCisvKiBWU1RBUlQgKi8KKyNkZWZpbmUgVlNUX1ZHQSAgICAgICAgIDB4MDcKKyNkZWZpbmUgVlNUX1FWR0EgICAgICAgIDB4MDMKKworLyogVlNJWkUgKi8KKyNkZWZpbmUgVlNaX1ZHQSAgICAgICAgIDB4RjAKKyNkZWZpbmUgVlNaX1FWR0EgICAgICAgIDB4NzgKKworLyogSE9VVFNJWkUgKi8KKyNkZWZpbmUgSE9TWl9WR0EgICAgICAgIDB4QTAKKyNkZWZpbmUgSE9TWl9RVkdBICAgICAgIDB4NTAKKworLyogVk9VVFNJWkUgKi8KKyNkZWZpbmUgVk9TWl9WR0EgICAgICAgIDB4RjAKKyNkZWZpbmUgVk9TWl9RVkdBICAgICAgIDB4NzgKKworLyoKKyAqIGJpdCBjb25maWd1cmUgKDMyIGJpdCkKKyAqIHRoaXMgaXMgdXNlZCBpbiBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCA6OiBvcHRpb24KKyAqLworI2RlZmluZSBPUF9VViAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9QX1NXQVBfUkdCIDB4MDAwMDAwMDIKKworLyoKKyAqIElECisgKi8KKyNkZWZpbmUgT1Y3NzIwICAweDc3MjAKKyNkZWZpbmUgT1Y3NzI1ICAweDc3MjEKKyNkZWZpbmUgVkVSU0lPTihwaWQsIHZlcikgKChwaWQ8PDgpfCh2ZXImMHhGRikpCisKKy8qCisgKiBzdHJ1Y3QKKyAqLworc3RydWN0IHJlZ3ZhbF9saXN0IHsKKwl1bnNpZ25lZCBjaGFyIHJlZ19udW07CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKK307CisKK3N0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IHsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CisJX191MzIgICAgICAgICAgICAgICAgICAgICBmb3VyY2M7CisJY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICpyZWdzOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgb3B0aW9uOworfTsKKworc3RydWN0IG92NzcyeF93aW5fc2l6ZSB7CisJY2hhciAgICAgICAgICAgICAgICAgICAgICpuYW1lOworCV9fdTMyICAgICAgICAgICAgICAgICAgICAgd2lkdGg7CisJX191MzIgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICBjb203X2JpdDsKKwljb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnJlZ3M7Cit9OworCitzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgeworCXN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gICAgICAgICppbmZvOworCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgICAgICAgICpjbGllbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICAgIGljZDsKKwljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCAqZm10OworCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgICAgICp3aW47CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOworfTsKKworI2RlZmluZSBFTkRNQVJLRVIgeyAweGZmLCAweGZmIH0KKworLyoKKyAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIGNvbG9yIGZvcm1hdAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9SR0I1NTVfcmVnc1tdID0geworCXsgQ09NMywgMHgwMCB9LAorCXsgQ09NNywgRk1UX1JHQjU1NSB8IE9GTVRfUkdCIH0sCisJRU5ETUFSS0VSLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfUkdCNTY1X3JlZ3NbXSA9IHsKKwl7IENPTTMsIDB4MDAgfSwKKwl7IENPTTcsIEZNVF9SR0I1NjUgfCBPRk1UX1JHQiB9LAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1lZVVZfcmVnc1tdID0geworCXsgQ09NMywgU1dBUF9ZVVYgfSwKKwl7IENPTTcsIE9GTVRfWVVWIH0sCisJRU5ETUFSS0VSLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfVVZZWV9yZWdzW10gPSB7CisJeyBDT00zLCAweDAwIH0sCisJeyBDT003LCBPRk1UX1lVViB9LAorCUVORE1BUktFUiwKK307CisKKworLyoKKyAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHdpbmRvdyBzaXplCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X3F2Z2FfcmVnc1tdID0geworCXsgSFNUQVJULCAgIEhTVF9RVkdBIH0sCisJeyBIU0laRSwgICAgSFNaX1FWR0EgfSwKKwl7IFZTVEFSVCwgICBWU1RfUVZHQSB9LAorCXsgVlNJWkUsICAgIFZTWl9RVkdBICB9LAorCXsgSE9VVFNJWkUsIEhPU1pfUVZHQSB9LAorCXsgVk9VVFNJWkUsIFZPU1pfUVZHQSB9LAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X3ZnYV9yZWdzW10gPSB7CisJeyBIU1RBUlQsICAgSFNUX1ZHQSB9LAorCXsgSFNJWkUsICAgIEhTWl9WR0EgfSwKKwl7IFZTVEFSVCwgICBWU1RfVkdBIH0sCisJeyBWU0laRSwgICAgVlNaX1ZHQSB9LAorCXsgSE9VVFNJWkUsIEhPU1pfVkdBIH0sCisJeyBWT1VUU0laRSwgVk9TWl9WR0EgfSwKKwlFTkRNQVJLRVIsCit9OworCisvKgorICogc3VwcG9ydGVkIGZvcm1hdCBsaXN0CisgKi8KKworI2RlZmluZSBTRVRGT1VSQ0ModHlwZSkgLm5hbWUgPSAoI3R5cGUpLCAuZm91cmNjID0gKFY0TDJfUElYX0ZNVF8gIyMgdHlwZSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBvdjc3MnhfZm10X2xpc3RzW10gPSB7CisJeworCQlTRVRGT1VSQ0MoWVVZViksCisJCS5kZXB0aCAgICAgID0gMTYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJfSwKKwl7CisJCVNFVEZPVVJDQyhZVllVKSwKKwkJLmRlcHRoICAgICAgPSAxNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwl9LAorCXsKKwkJU0VURk9VUkNDKFVZVlkpLAorCQkuZGVwdGggICAgICA9IDE2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCX0sCisJeworCQlTRVRGT1VSQ0MoUkdCNTU1KSwKKwkJLmRlcHRoICAgICAgPSAxNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwl9LAorCXsKKwkJU0VURk9VUkNDKFJHQjU1NVgpLAorCQkuZGVwdGggICAgICA9IDE2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCX0sCisJeworCQlTRVRGT1VSQ0MoUkdCNTY1KSwKKwkJLmRlcHRoICAgICAgPSAxNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwl9LAorCXsKKwkJU0VURk9VUkNDKFJHQjU2NVgpLAorCQkuZGVwdGggICAgICA9IDE2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCX0sCit9OworCisvKgorICogY29sb3IgZm9ybWF0IGxpc3QKKyAqLworI2RlZmluZSBUX1lVWVYgMAorc3RhdGljIGNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IG92NzcyeF9jZm10c1tdID0geworCVtUX1lVWVZdID0geworCQlTRVRGT1VSQ0MoWVVZViksCisJCS5yZWdzICAgPSBvdjc3MnhfWVlVVl9yZWdzLAorCX0sCisJeworCQlTRVRGT1VSQ0MoWVZZVSksCisJCS5yZWdzICAgPSBvdjc3MnhfWVlVVl9yZWdzLAorCQkub3B0aW9uID0gT1BfVVYsCisJfSwKKwl7CisJCVNFVEZPVVJDQyhVWVZZKSwKKwkJLnJlZ3MgICA9IG92NzcyeF9VVllZX3JlZ3MsCisJfSwKKwl7CisJCVNFVEZPVVJDQyhSR0I1NTUpLAorCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU1NV9yZWdzLAorCQkub3B0aW9uID0gT1BfU1dBUF9SR0IsCisJfSwKKwl7CisJCVNFVEZPVVJDQyhSR0I1NTVYKSwKKwkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NTVfcmVncywKKwl9LAorCXsKKwkJU0VURk9VUkNDKFJHQjU2NSksCisJCS5yZWdzICAgPSBvdjc3MnhfUkdCNTY1X3JlZ3MsCisJCS5vcHRpb24gPSBPUF9TV0FQX1JHQiwKKwl9LAorCXsKKwkJU0VURk9VUkNDKFJHQjU2NVgpLAorCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU2NV9yZWdzLAorCX0sCit9OworCisKKy8qCisgKiB3aW5kb3cgc2l6ZSBsaXN0CisgKi8KKyNkZWZpbmUgVkdBX1dJRFRIICAgNjQwCisjZGVmaW5lIFZHQV9IRUlHSFQgIDQ4MAorI2RlZmluZSBRVkdBX1dJRFRIICAzMjAKKyNkZWZpbmUgUVZHQV9IRUlHSFQgMjQwCisjZGVmaW5lIE1BWF9XSURUSCAgIFZHQV9XSURUSAorI2RlZmluZSBNQVhfSEVJR0hUICBWR0FfSEVJR0hUCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplIG92NzcyeF93aW5fdmdhID0geworCS5uYW1lICAgICA9ICJWR0EiLAorCS53aWR0aCAgICA9IFZHQV9XSURUSCwKKwkuaGVpZ2h0ICAgPSBWR0FfSEVJR0hULAorCS5jb203X2JpdCA9IFNMQ1RfVkdBLAorCS5yZWdzICAgICA9IG92NzcyeF92Z2FfcmVncywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplIG92NzcyeF93aW5fcXZnYSA9IHsKKwkubmFtZSAgICAgPSAiUVZHQSIsCisJLndpZHRoICAgID0gUVZHQV9XSURUSCwKKwkuaGVpZ2h0ICAgPSBRVkdBX0hFSUdIVCwKKwkuY29tN19iaXQgPSBTTENUX1FWR0EsCisJLnJlZ3MgICAgID0gb3Y3NzJ4X3F2Z2FfcmVncywKK307CisKKworLyoKKyAqIGdlbmVyYWwgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW50IG92NzcyeF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAgKmNsaWVudCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCAqdmFscykKK3sKKwl3aGlsZSAodmFscy0+cmVnX251bSAhPSAweGZmKSB7CisJCWludCByZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgICB2YWxzLT5yZWdfbnVtLAorCQkJCQkJICAgIHZhbHMtPnZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQl2YWxzKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzcyeF9tYXNrX3NldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQkgIHU4ICBjb21tYW5kLAorCQkJCQkgIHU4ICBtYXNrLAorCQkJCQkgIHU4ICBzZXQpCit7CisJczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gIHNldDsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCwgdmFsKTsKK30KKworc3RhdGljIGludCBvdjc3MnhfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIENPTTcsIFNDQ0JfUkVTRVQpOworCW1zbGVlcCgxKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc29jX2NhbWVyYV9vcHMgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW50IG92NzcyeF9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKSB7CisJCXJldCA9IHByaXYtPmluZm8tPmxpbmsucG93ZXIoJnByaXYtPmNsaWVudC0+ZGV2LCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChwcml2LT5pbmZvLT5saW5rLnJlc2V0KQorCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnJlc2V0KCZwcml2LT5jbGllbnQtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5pbmZvLT5saW5rLnBvd2VyKQorCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnBvd2VyKCZwcml2LT5jbGllbnQtPmRldiwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlpbnQgICAgICAgICAgICAgICAgIHJldDsKKworCWlmICghcHJpdi0+d2luKQorCQlwcml2LT53aW4gPSAmb3Y3NzJ4X3dpbl92Z2E7CisJaWYgKCFwcml2LT5mbXQpCisJCXByaXYtPmZtdCA9ICZvdjc3MnhfY2ZtdHNbVF9ZVVlWXTsKKworCS8qCisJICogcmVzZXQgaGFyZHdhcmUKKwkgKi8KKwlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKworCS8qCisJICogc2V0IGNvbG9yIGZvcm1hdAorCSAqLworCXJldCA9IG92NzcyeF93cml0ZV9hcnJheShwcml2LT5jbGllbnQsIHByaXYtPmZtdC0+cmVncyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gc3RhcnRfZW5kOworCisJLyoKKwkgKiBzZXQgc2l6ZSBmb3JtYXQKKwkgKi8KKwlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHN0YXJ0X2VuZDsKKworCS8qCisJICogc2V0IENPTTcgYml0ICggUVZHQSBvciBWR0EgKQorCSAqLworCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCQkgICAgICBDT003LCBTTENUX01BU0ssIHByaXYtPndpbi0+Y29tN19iaXQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHN0YXJ0X2VuZDsKKworCS8qCisJICogc2V0IFVWIHNldHRpbmcKKwkgKi8KKwlpZiAocHJpdi0+Zm10LT5vcHRpb24gJiBPUF9VVikgeworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAorCQkJCSAgICAgIERTUF9DVFJMMywgVVZfTUFTSywgVVZfT04pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gc3RhcnRfZW5kOworCX0KKworCS8qCisJICogc2V0IFNXQVAgc2V0dGluZworCSAqLworCWlmIChwcml2LT5mbXQtPm9wdGlvbiAmIE9QX1NXQVBfUkdCKSB7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCQkJICAgICAgQ09NMywgU1dBUF9NQVNLLCBTV0FQX1JHQik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBzdGFydF9lbmQ7CisJfQorCisJZGV2X2RiZygmaWNkLT5kZXYsCisJCSAiZm9ybWF0ICVzLCB3aW4gJXNcbiIsIHByaXYtPmZtdC0+bmFtZSwgcHJpdi0+d2luLT5uYW1lKTsKKworc3RhcnRfZW5kOgorCXByaXYtPmZtdCA9IE5VTEw7CisJcHJpdi0+d2luID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJdW5zaWduZWQgbG9uZwkJICBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Y3NzJ4X3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gcHJpdi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fTUFTVEVSIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CisJCXByaXYtPmluZm8tPmJ1c3dpZHRoOworCisJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG92NzcyeF9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgICAqaWQpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJaWQtPmlkZW50ICAgID0gcHJpdi0+bW9kZWw7CisJaWQtPnJldmlzaW9uID0gMDsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBvdjc3MnhfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCWludCAgICAgICAgICAgICAgICAgcmV0OworCisJaWYgKHJlZy0+cmVnID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCByZWctPnJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZWctPnZhbCA9IChfX3U2NClyZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJaWYgKHJlZy0+cmVnID4gMHhmZiB8fAorCSAgICByZWctPnZhbCA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCByZWctPnJlZywgcmVnLT52YWwpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y3NzJ4X3dpbl9zaXplKgorb3Y3NzJ4X3NlbGVjdF93aW4odTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCV9fdTMyIGRpZmY7CisJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAqd2luOworCisJLyogZGVmYXVsdCBpcyBRVkdBICovCisJZGlmZiA9IGFicyh3aWR0aCAtIG92NzcyeF93aW5fcXZnYS53aWR0aCkgKworCQlhYnMoaGVpZ2h0IC0gb3Y3NzJ4X3dpbl9xdmdhLmhlaWdodCk7CisJd2luID0gJm92NzcyeF93aW5fcXZnYTsKKworCS8qIFZHQSAqLworCWlmIChkaWZmID4KKwkgICAgYWJzKHdpZHRoICAtIG92NzcyeF93aW5fdmdhLndpZHRoKSArCisJICAgIGFicyhoZWlnaHQgLSBvdjc3Mnhfd2luX3ZnYS5oZWlnaHQpKQorCQl3aW4gPSAmb3Y3NzJ4X3dpbl92Z2E7CisKKwlyZXR1cm4gd2luOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgcGl4Zm10LAorCQkJICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICAgKnJlY3QpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCWludCByZXQgPSAtRUlOVkFMOworCWludCBpOworCisJLyoKKwkgKiBzZWxlY3QgZm9ybWF0CisJICovCisJcHJpdi0+Zm10ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjc3MnhfY2ZtdHMpOyBpKyspIHsKKwkJaWYgKHBpeGZtdCA9PSBvdjc3MnhfY2ZtdHNbaV0uZm91cmNjKSB7CisJCQlwcml2LT5mbXQgPSBvdjc3MnhfY2ZtdHMgKyBpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBzZWxlY3Qgd2luCisJICovCisJcHJpdi0+d2luID0gb3Y3NzJ4X3NlbGVjdF93aW4ocmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgICAgICAgKmYpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAqd2luOworCisJLyoKKwkgKiBzZWxlY3Qgc3VpdGFibGUgd2luCisJICovCisJd2luID0gb3Y3NzJ4X3NlbGVjdF93aW4ocGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCisJcGl4LT53aWR0aCAgPSB3aW4tPndpZHRoOworCXBpeC0+aGVpZ2h0ID0gd2luLT5oZWlnaHQ7CisJcGl4LT5maWVsZCAgPSBWNEwyX0ZJRUxEX05PTkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc3MnhfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCXU4ICAgICAgICAgICAgICAgICAgcGlkLCB2ZXI7CisJY29uc3QgY2hhciAgICAgICAgICpkZXZuYW1lOworCisJLyoKKwkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgorCSAqIFNvIHRoaXMgZW50aXJlIHRlc3QgaXMgY29tcGxldGVseSByZWR1bmRhbnQuCisJICovCisJaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKKwkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBvdjc3Mnggb25seSB1c2UgOCBvciAxMCBiaXQgYnVzIHdpZHRoCisJICovCisJaWYgKFNPQ0FNX0RBVEFXSURUSF8xMCAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCAmJgorCSAgICBTT0NBTV9EQVRBV0lEVEhfOCAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGgpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJidXMgd2lkdGggZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpY2QtPmZvcm1hdHMgICAgID0gb3Y3NzJ4X2ZtdF9saXN0czsKKwlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShvdjc3MnhfZm10X2xpc3RzKTsKKworCS8qCisJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECisJICovCisJcGlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgUElEKTsKKwl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBWRVIpOworCisJc3dpdGNoIChWRVJTSU9OKHBpZCwgdmVyKSkgeworCWNhc2UgT1Y3NzIwOgorCQlkZXZuYW1lICAgICA9ICJvdjc3MjAiOworCQlwcml2LT5tb2RlbCA9IFY0TDJfSURFTlRfT1Y3NzIwOworCQlicmVhazsKKwljYXNlIE9WNzcyNToKKwkJZGV2bmFtZSAgICAgPSAib3Y3NzI1IjsKKwkJcHJpdi0+bW9kZWwgPSBWNEwyX0lERU5UX09WNzcyNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmaWNkLT5kZXYsCisJCQkiUHJvZHVjdCBJRCBlcnJvciAleDoleFxuIiwgcGlkLCB2ZXIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfaW5mbygmaWNkLT5kZXYsCisJCSAiJXMgUHJvZHVjdCBJRCAlMHg6JTB4IE1hbnVmYWN0dXJlciBJRCAleDoleFxuIiwKKwkJIGRldm5hbWUsCisJCSBwaWQsCisJCSB2ZXIsCisJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBNSURIKSwKKwkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIE1JREwpKTsKKworCisJcmV0dXJuIHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKK30KKworc3RhdGljIHZvaWQgb3Y3NzJ4X3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzb2NfY2FtZXJhX3ZpZGVvX3N0b3AoaWNkKTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBvdjc3Mnhfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQkJPSBvdjc3MnhfdmlkZW9fcHJvYmUsCisJLnJlbW92ZQkJCT0gb3Y3NzJ4X3ZpZGVvX3JlbW92ZSwKKwkuaW5pdAkJCT0gb3Y3NzJ4X2luaXQsCisJLnJlbGVhc2UJCT0gb3Y3NzJ4X3JlbGVhc2UsCisJLnN0YXJ0X2NhcHR1cmUJCT0gb3Y3NzJ4X3N0YXJ0X2NhcHR1cmUsCisJLnN0b3BfY2FwdHVyZQkJPSBvdjc3Mnhfc3RvcF9jYXB0dXJlLAorCS5zZXRfZm10CQk9IG92NzcyeF9zZXRfZm10LAorCS50cnlfZm10CQk9IG92NzcyeF90cnlfZm10LAorCS5zZXRfYnVzX3BhcmFtCQk9IG92NzcyeF9zZXRfYnVzX3BhcmFtLAorCS5xdWVyeV9idXNfcGFyYW0JPSBvdjc3MnhfcXVlcnlfYnVzX3BhcmFtLAorCS5nZXRfY2hpcF9pZAkJPSBvdjc3MnhfZ2V0X2NoaXBfaWQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nZXRfcmVnaXN0ZXIJCT0gb3Y3NzJ4X2dldF9yZWdpc3RlciwKKwkuc2V0X3JlZ2lzdGVyCQk9IG92NzcyeF9zZXRfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKKy8qCisgKiBpMmNfZHJpdmVyIGZ1bmN0aW9uCisgKi8KKworc3RhdGljIGludCBvdjc3MnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAgICAgICAgKnByaXY7CisJc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICppY2Q7CisJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcmV0OworCisJaW5mbyA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCisJCQkiSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0ICIKKwkJCSJJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+aW5mbyAgID0gaW5mbzsKKwlwcml2LT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7CisKKwlpY2QgICAgICAgICAgICAgPSAmcHJpdi0+aWNkOworCWljZC0+b3BzICAgICAgICA9ICZvdjc3Mnhfb3BzOworCWljZC0+Y29udHJvbCAgICA9ICZjbGllbnQtPmRldjsKKwlpY2QtPndpZHRoX21heCAgPSBNQVhfV0lEVEg7CisJaWNkLT5oZWlnaHRfbWF4ID0gTUFYX0hFSUdIVDsKKwlpY2QtPmlmYWNlICAgICAgPSBwcml2LT5pbmZvLT5saW5rLmJ1c19pZDsKKworCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CisKKwlpZiAocmV0KSB7CisJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCQlrZnJlZShwcml2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJnByaXYtPmljZCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBvdjc3MnhfaWRbXSA9IHsKKwl7ICJvdjc3MngiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG92NzcyeF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBvdjc3MnhfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJvdjc3MngiLAorCX0sCisJLnByb2JlICAgID0gb3Y3NzJ4X3Byb2JlLAorCS5yZW1vdmUgICA9IG92NzcyeF9yZW1vdmUsCisJLmlkX3RhYmxlID0gb3Y3NzJ4X2lkLAorfTsKKworLyoKKyAqIG1vZHVsZSBmdW5jdGlvbgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IG92NzcyeF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmb3Y3NzJ4X2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb3Y3NzJ4X21vZHVsZV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm92NzcyeF9pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob3Y3NzJ4X21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KG92NzcyeF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29DIENhbWVyYSBkcml2ZXIgZm9yIG92NzcyeCIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCmluZGV4IDk5NDgwNzguLjQ1NzMwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYwpAQCAtMTAsOCArMTAsOCBAQAogICoJMTQ0NzggUG90c2RhbSwgR2VybWFueQogICoKICAqCU1vc3Qgb2YgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGRlcml2ZWQgZnJvbSBoaXMgdXNlcnNwYWNlIGRyaXZlci4KLSAqCUhpcyBkcml2ZXIgd29ya3Mgc28gc2VuZCBhbnkgcmVwb3J0cyB0byBhbGFuQHJlZGhhdC5jb20gdW5sZXNzIHRoZQotICoJdXNlcnNwYWNlIGRyaXZlciBhbHNvIGRvZXNuJ3Qgd29yayBmb3IgeW91Li4uCisgKglIaXMgZHJpdmVyIHdvcmtzIHNvIHNlbmQgYW55IHJlcG9ydHMgdG8gYWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrCisgKgl1bmxlc3MgdGhlIHVzZXJzcGFjZSBkcml2ZXIgYWxzbyBkb2Vzbid0IHdvcmsgZm9yIHlvdS4uLgogICoKICAqICAgICAgQ2hhbmdlczoKICAqICAgICAgMDgvMDcvMjAwMyAgICAgICAgRGFuaWVsZSBCZWxsdWNjaSA8YmVsbHVjZGFAdGlzY2FsaS5pdD4KQEAgLTY4MCw4ICs2ODAsNyBAQAogICoJVmlkZW80bGludXggaW50ZXJmYWNpbmcKICAqLwogCi1zdGF0aWMgaW50IHBtc19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgcG1zX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgcG1zX2RldmljZSAqcGQ9KHN0cnVjdCBwbXNfZGV2aWNlICopZGV2OwpAQCAtODY2LDcgKzg2NSw3IEBACiBzdGF0aWMgaW50IHBtc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBwbXNfZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgcG1zX2RvX2lvY3RsKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcG1zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDViODFiYTQuLjQzNTgwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0yMzk1LDcgKzIzOTUsNyBAQAogCiAJc2NucHJpbnRmKGhkdy0+YnVzX2luZm8sc2l6ZW9mKGhkdy0+YnVzX2luZm8pLAogCQkgICJ1c2IgJXMgYWRkcmVzcyAlZCIsCi0JCSAgaGR3LT51c2JfZGV2LT5kZXYuYnVzX2lkLAorCQkgIGRldl9uYW1lKCZoZHctPnVzYl9kZXYtPmRldiksCiAJCSAgaGR3LT51c2JfZGV2LT5kZXZudW0pOwogCiAJaWZudW0gPSBoZHctPnVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggNzMzNjgwZi4uZTY0MWNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02MjgsMTAgKzYyOCwxMCBAQAogCiAJY2xhc3NfZGV2LT5jbGFzcyA9ICZjbGFzc19wdHItPmNsYXNzOwogCWlmIChwdnIyX2hkd19nZXRfc24oc2ZwLT5jaGFubmVsLmhkdykpIHsKLQkJc25wcmludGYoY2xhc3NfZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCAic24tJWx1IiwKKwkJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgInNuLSVsdSIsCiAJCQkgcHZyMl9oZHdfZ2V0X3NuKHNmcC0+Y2hhbm5lbC5oZHcpKTsKIAl9IGVsc2UgaWYgKHB2cjJfaGR3X2dldF91bml0X251bWJlcihzZnAtPmNoYW5uZWwuaGR3KSA+PSAwKSB7Ci0JCXNucHJpbnRmKGNsYXNzX2Rldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgInVuaXQtJWMiLAorCQlkZXZfc2V0X25hbWUoY2xhc3NfZGV2LCAidW5pdC0lYyIsCiAJCQkgcHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKHNmcC0+Y2hhbm5lbC5oZHcpICsgJ2EnKTsKIAl9IGVsc2UgewogCQlrZnJlZShjbGFzc19kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCmluZGV4IDk3ZWQ5NTkuLjUyYWYxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKQEAgLTE2OCw4ICsxNjgsNyBAQAogICogVGhpcyBpcyBwYXJ0IG9mIFZpZGVvIDQgTGludXggQVBJLiBUaGUgcHJvY2VkdXJlIGhhbmRsZXMgaW9jdGwoKSBjYWxscy4KICAqCiAgKi8KLXN0YXRpYyBpbnQgX19wdnIyX3Y0bDJfZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHB2cjJfdjRsMl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBwdnIyX3Y0bDJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwdnIyX3Y0bDIgKnZwID0gZmgtPnZoZWFkOwpAQCAtODY0LDcgKzg2Myw3IEBACiAKIAlkZWZhdWx0IDoKIAkJcmV0ID0gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLAotCQkJCQkJIGFyZywgX19wdnIyX3Y0bDJfZG9faW9jdGwpOworCQkJCQkJIGFyZywgcHZyMl92NGwyX2RvX2lvY3RsKTsKIAl9CiAKIAlwdnIyX2hkd19jb21taXRfY3RsKGhkdyk7CkBAIC04OTAsMTIgKzg4OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwdnIyX3Y0bDJfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIF9fcHZyMl92NGwyX2RvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLX0KLQogc3RhdGljIHZvaWQgcHZyMl92NGwyX2Rldl9kZXN0cm95KHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXApCiB7CiAJaW50IG51bSA9IGRpcC0+ZGV2YmFzZS5udW07CkBAIC05NjMsNyArOTU2LDcgQEAKICNkZWZpbmUgSVZUVl9JT0NfR19DT0RFQyAgICAgICAgMHhGRkVFNzcwMwogI2RlZmluZSBJVlRWX0lPQ19TX0NPREVDICAgICAgICAweEZGRUU3NzA0CiAJaWYgKGNtZCA9PSBJVlRWX0lPQ19HX0NPREVDIHx8IGNtZCA9PSBJVlRWX0lPQ19TX0NPREVDKSByZXR1cm4gMDsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBwdnIyX3Y0bDJfZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgcHZyMl92NGwyX2RvX2lvY3RsKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCmluZGV4IGYzODk3YTMuLjFjZTlkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCkBAIC0xNDEyLDcgKzE0MTIsNyBAQAogCiAJbXV0ZXhfbG9jaygmcGRldi0+bW9kbG9jayk7CiAJaWYgKCFwZGV2LT51bnBsdWdnZWQpCi0JCXIgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHB3Y192aWRlb19kb19pb2N0bCk7CisJCXIgPSB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgcHdjX3ZpZGVvX2RvX2lvY3RsKTsKIAltdXRleF91bmxvY2soJnBkZXYtPm1vZGxvY2spOwogb3V0OgogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCmluZGV4IDc2YTEzNzYuLmQ3YzE0NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKQEAgLTMzNyw4ICszMzcsNyBAQAogCiB9CiAKLWludCBwd2NfdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitpbnQgcHdjX3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCmluZGV4IDc0MTc4NzUuLmMwNDZhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0zNDAsOCArMzQwLDcgQEAKIGV4dGVybiBpbnQgcHdjX2lvY3RsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAvKiogRnVuY3Rpb25zIGluIHB3Yy12NGwuYyAqLwotZXh0ZXJuIGludCBwd2NfdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworZXh0ZXJuIGludCBwd2NfdmlkZW9fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIC8qKiBwd2MtdW5jb21wcmVzcy5jICovCiAvKiBFeHBhbmQgZnJhbWUgdG8gaW1hZ2UsIHBvc3NpYmx5IGluY2x1ZGluZyBkZWNvbXByZXNzaW9uLiBVc2VzIHJlYWRfZnJhbWUgYW5kIGZpbGxfaW1hZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggZWI2YmU1OC4uOWQzM2RlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC0zOSw5ICszOCwxMDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KIAorI2luY2x1ZGUgInB4YV9jYW1lcmEuaCIKKwogI2RlZmluZSBQWEFfQ0FNX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCA1KQogI2RlZmluZSBQWEFfQ0FNX0RSVl9OQU1FICJweGEyN3gtY2FtZXJhIgogCisvKiBDYW1lcmEgSW50ZXJmYWNlICovCisjZGVmaW5lIENJQ1IwCQkweDAwMDAKKyNkZWZpbmUgQ0lDUjEJCTB4MDAwNAorI2RlZmluZSBDSUNSMgkJMHgwMDA4CisjZGVmaW5lIENJQ1IzCQkweDAwMEMKKyNkZWZpbmUgQ0lDUjQJCTB4MDAxMAorI2RlZmluZSBDSVNSCQkweDAwMTQKKyNkZWZpbmUgQ0lGUgkJMHgwMDE4CisjZGVmaW5lIENJVE9SCQkweDAwMUMKKyNkZWZpbmUgQ0lCUjAJCTB4MDAyOAorI2RlZmluZSBDSUJSMQkJMHgwMDMwCisjZGVmaW5lIENJQlIyCQkweDAwMzgKKworI2RlZmluZSBDSUNSMF9ETUFFTgkoMSA8PCAzMSkJLyogRE1BIHJlcXVlc3QgZW5hYmxlICovCisjZGVmaW5lIENJQ1IwX1BBUl9FTgkoMSA8PCAzMCkJLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBDSUNSMF9TTF9DQVBfRU4JKDEgPDwgMjkpCS8qIENhcHR1cmUgZW5hYmxlIGZvciBzbGF2ZSBtb2RlICovCisjZGVmaW5lIENJQ1IwX0VOQgkoMSA8PCAyOCkJLyogQ2FtZXJhIGludGVyZmFjZSBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUjBfRElTCSgxIDw8IDI3KQkvKiBDYW1lcmEgaW50ZXJmYWNlIGRpc2FibGUgKi8KKyNkZWZpbmUgQ0lDUjBfU0lNCSgweDcgPDwgMjQpCS8qIFNlbnNvciBpbnRlcmZhY2UgbW9kZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX1RPTQkoMSA8PCA5KQkvKiBUaW1lLW91dCBtYXNrICovCisjZGVmaW5lIENJQ1IwX1JEQVZNCSgxIDw8IDgpCS8qIFJlY2VpdmUtZGF0YS1hdmFpbGFibGUgbWFzayAqLworI2RlZmluZSBDSUNSMF9GRU0JKDEgPDwgNykJLyogRklGTy1lbXB0eSBtYXNrICovCisjZGVmaW5lIENJQ1IwX0VPTE0JKDEgPDwgNikJLyogRW5kLW9mLWxpbmUgbWFzayAqLworI2RlZmluZSBDSUNSMF9QRVJSTQkoMSA8PCA1KQkvKiBQYXJpdHktZXJyb3IgbWFzayAqLworI2RlZmluZSBDSUNSMF9RRE0JKDEgPDwgNCkJLyogUXVpY2stZGlzYWJsZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX0NETQkoMSA8PCAzKQkvKiBEaXNhYmxlLWRvbmUgbWFzayAqLworI2RlZmluZSBDSUNSMF9TT0ZNCSgxIDw8IDIpCS8qIFN0YXJ0LW9mLWZyYW1lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfRU9GTQkoMSA8PCAxKQkvKiBFbmQtb2YtZnJhbWUgbWFzayAqLworI2RlZmluZSBDSUNSMF9GT00JKDEgPDwgMCkJLyogRklGTy1vdmVycnVuIG1hc2sgKi8KKworI2RlZmluZSBDSUNSMV9UQklUCSgxIDw8IDMxKQkvKiBUcmFuc3BhcmVuY3kgYml0ICovCisjZGVmaW5lIENJQ1IxX1JHQlRfQ09OVgkoMHgzIDw8IDI5KQkvKiBSR0JUIGNvbnZlcnNpb24gbWFzayAqLworI2RlZmluZSBDSUNSMV9QUEwJKDB4N2ZmIDw8IDE1KQkvKiBQaXhlbHMgcGVyIGxpbmUgbWFzayAqLworI2RlZmluZSBDSUNSMV9SR0JfQ09OVgkoMHg3IDw8IDEyKQkvKiBSR0IgY29udmVyc2lvbiBtYXNrICovCisjZGVmaW5lIENJQ1IxX1JHQl9GCSgxIDw8IDExKQkvKiBSR0IgZm9ybWF0ICovCisjZGVmaW5lIENJQ1IxX1lDQkNSX0YJKDEgPDwgMTApCS8qIFlDYkNyIGZvcm1hdCAqLworI2RlZmluZSBDSUNSMV9SR0JfQlBQCSgweDcgPDwgNykJLyogUkdCIGJpcyBwZXIgcGl4ZWwgbWFzayAqLworI2RlZmluZSBDSUNSMV9SQVdfQlBQCSgweDMgPDwgNSkJLyogUmF3IGJpcyBwZXIgcGl4ZWwgbWFzayAqLworI2RlZmluZSBDSUNSMV9DT0xPUl9TUAkoMHgzIDw8IDMpCS8qIENvbG9yIHNwYWNlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfRFcJKDB4NyA8PCAwKQkvKiBEYXRhIHdpZHRoIG1hc2sgKi8KKworI2RlZmluZSBDSUNSMl9CTFcJKDB4ZmYgPDwgMjQpCS8qIEJlZ2lubmluZy1vZi1saW5lIHBpeGVsIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSMl9FTFcJKDB4ZmYgPDwgMTYpCS8qIEVuZC1vZi1saW5lIHBpeGVsIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSMl9IU1cJKDB4M2YgPDwgMTApCS8qIEhvcml6b250YWwgc3luYyBwdWxzZSB3aWR0aCBtYXNrICovCisjZGVmaW5lIENJQ1IyX0JGUFcJKDB4M2YgPDwgMykJLyogQmVnaW5uaW5nLW9mLWZyYW1lIHBpeGVsIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSMl9GU1cJKDB4NyA8PCAwKQkvKiBGcmFtZSBzdGFiaWxpemF0aW9uCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworCisjZGVmaW5lIENJQ1IzX0JGVwkoMHhmZiA8PCAyNCkJLyogQmVnaW5uaW5nLW9mLWZyYW1lIGxpbmUgY2xvY2sKKwkJCQkJICAgd2FpdCBjb3VudCBtYXNrICovCisjZGVmaW5lIENJQ1IzX0VGVwkoMHhmZiA8PCAxNikJLyogRW5kLW9mLWZyYW1lIGxpbmUgY2xvY2sKKwkJCQkJICAgd2FpdCBjb3VudCBtYXNrICovCisjZGVmaW5lIENJQ1IzX1ZTVwkoMHgzZiA8PCAxMCkJLyogVmVydGljYWwgc3luYyBwdWxzZSB3aWR0aCBtYXNrICovCisjZGVmaW5lIENJQ1IzX0JGUFcJKDB4M2YgPDwgMykJLyogQmVnaW5uaW5nLW9mLWZyYW1lIHBpeGVsIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSM19MUEYJKDB4N2ZmIDw8IDApCS8qIExpbmVzIHBlciBmcmFtZSBtYXNrICovCisKKyNkZWZpbmUgQ0lDUjRfTUNMS19ETFkJKDB4MyA8PCAyNCkJLyogTUNMSyBEYXRhIENhcHR1cmUgRGVsYXkgbWFzayAqLworI2RlZmluZSBDSUNSNF9QQ0xLX0VOCSgxIDw8IDIzKQkvKiBQaXhlbCBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUjRfUENQCSgxIDw8IDIyKQkvKiBQaXhlbCBjbG9jayBwb2xhcml0eSAqLworI2RlZmluZSBDSUNSNF9IU1AJKDEgPDwgMjEpCS8qIEhvcml6b250YWwgc3luYyBwb2xhcml0eSAqLworI2RlZmluZSBDSUNSNF9WU1AJKDEgPDwgMjApCS8qIFZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KKyNkZWZpbmUgQ0lDUjRfTUNMS19FTgkoMSA8PCAxOSkJLyogTUNMSyBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUjRfRlJfUkFURQkoMHg3IDw8IDgpCS8qIEZyYW1lIHJhdGUgbWFzayAqLworI2RlZmluZSBDSUNSNF9ESVYJKDB4ZmYgPDwgMCkJLyogQ2xvY2sgZGl2aXNvciBtYXNrICovCisKKyNkZWZpbmUgQ0lTUl9GVE8JKDEgPDwgMTUpCS8qIEZJRk8gdGltZS1vdXQgKi8KKyNkZWZpbmUgQ0lTUl9SREFWXzIJKDEgPDwgMTQpCS8qIENoYW5uZWwgMiByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIENJU1JfUkRBVl8xCSgxIDw8IDEzKQkvKiBDaGFubmVsIDEgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZSBDSVNSX1JEQVZfMAkoMSA8PCAxMikJLyogQ2hhbm5lbCAwIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0lTUl9GRU1QVFlfMgkoMSA8PCAxMSkJLyogQ2hhbm5lbCAyIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgQ0lTUl9GRU1QVFlfMQkoMSA8PCAxMCkJLyogQ2hhbm5lbCAxIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgQ0lTUl9GRU1QVFlfMAkoMSA8PCA5KQkvKiBDaGFubmVsIDAgRklGTyBlbXB0eSAqLworI2RlZmluZSBDSVNSX0VPTAkoMSA8PCA4KQkvKiBFbmQgb2YgbGluZSAqLworI2RlZmluZSBDSVNSX1BBUl9FUlIJKDEgPDwgNykJLyogUGFyaXR5IGVycm9yICovCisjZGVmaW5lIENJU1JfQ1FECSgxIDw8IDYpCS8qIENhbWVyYSBpbnRlcmZhY2UgcXVpY2sgZGlzYWJsZSAqLworI2RlZmluZSBDSVNSX0NERAkoMSA8PCA1KQkvKiBDYW1lcmEgaW50ZXJmYWNlIGRpc2FibGUgZG9uZSAqLworI2RlZmluZSBDSVNSX1NPRgkoMSA8PCA0KQkvKiBTdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSBDSVNSX0VPRgkoMSA8PCAzKQkvKiBFbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgQ0lTUl9JRk9fMgkoMSA8PCAyKQkvKiBGSUZPIG92ZXJydW4gZm9yIENoYW5uZWwgMiAqLworI2RlZmluZSBDSVNSX0lGT18xCSgxIDw8IDEpCS8qIEZJRk8gb3ZlcnJ1biBmb3IgQ2hhbm5lbCAxICovCisjZGVmaW5lIENJU1JfSUZPXzAJKDEgPDwgMCkJLyogRklGTyBvdmVycnVuIGZvciBDaGFubmVsIDAgKi8KKworI2RlZmluZSBDSUZSX0ZMVkwyCSgweDdmIDw8IDIzKQkvKiBGSUZPIDIgbGV2ZWwgbWFzayAqLworI2RlZmluZSBDSUZSX0ZMVkwxCSgweDdmIDw8IDE2KQkvKiBGSUZPIDEgbGV2ZWwgbWFzayAqLworI2RlZmluZSBDSUZSX0ZMVkwwCSgweGZmIDw8IDgpCS8qIEZJRk8gMCBsZXZlbCBtYXNrICovCisjZGVmaW5lIENJRlJfVEhMXzAJKDB4MyA8PCA0KQkvKiBUaHJlc2hvbGQgTGV2ZWwgZm9yIENoYW5uZWwgMCBGSUZPICovCisjZGVmaW5lIENJRlJfUkVTRVRfRgkoMSA8PCAzKQkvKiBSZXNldCBpbnB1dCBGSUZPcyAqLworI2RlZmluZSBDSUZSX0ZFTjIJKDEgPDwgMikJLyogRklGTyBlbmFibGUgZm9yIGNoYW5uZWwgMiAqLworI2RlZmluZSBDSUZSX0ZFTjEJKDEgPDwgMSkJLyogRklGTyBlbmFibGUgZm9yIGNoYW5uZWwgMSAqLworI2RlZmluZSBDSUZSX0ZFTjAJKDEgPDwgMCkJLyogRklGTyBlbmFibGUgZm9yIGNoYW5uZWwgMCAqLworCiAjZGVmaW5lIENJQ1IwX1NJTV9NUAkoMCA8PCAyNCkKICNkZWZpbmUgQ0lDUjBfU0lNX1NQCSgxIDw8IDI0KQogI2RlZmluZSBDSUNSMF9TSU1fTVMJKDIgPDwgMjQpCkBAIC02OSw4ICsxNjUsNiBAQAogCQkJQ0lDUjBfUEVSUk0gfCBDSUNSMF9RRE0gfCBDSUNSMF9DRE0gfCBDSUNSMF9TT0ZNIHwgXAogCQkJQ0lDUjBfRU9GTSB8IENJQ1IwX0ZPTSkKIAotc3RhdGljIERFRklORV9NVVRFWChjYW1lcmFfbG9jayk7Ci0KIC8qCiAgKiBTdHJ1Y3R1cmVzCiAgKi8KQEAgLTEyMCw3ICsyMTQsOSBAQAogCXN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlCQkqcmVzOwogCXVuc2lnbmVkIGxvbmcJCXBsYXRmb3JtX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcJCXBsYXRmb3JtX21jbGtfMTBraHo7CisJdW5zaWduZWQgbG9uZwkJY2ljbGs7CisJdW5zaWduZWQgbG9uZwkJbWNsazsKKwl1MzIJCQltY2xrX2Rpdmlzb3I7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWNhcHR1cmU7CiAKQEAgLTE0Myw4ICsyMzksNyBAQAogCQkJICAgICAgdW5zaWduZWQgaW50ICpzaXplKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPQotCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCiAJZGV2X2RiZygmaWNkLT5kZXYsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CkBAIC0xNzAsOCArMjY1LDcgQEAKIHN0YXRpYyB2b2lkIGZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBweGFfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9Ci0JCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKTsKIAlpbnQgaTsKQEAgLTI0Nyw4ICszNDEsNyBAQAogCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPQotCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCBweGFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAJaW50IHJldDsKQEAgLTM2Nyw4ICs0NjAsNyBAQAogCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPQotCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCBweGFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAJc3RydWN0IHB4YV9idWZmZXIgKmFjdGl2ZTsKQEAgLTM4NSw3ICs0NzcsMTAgQEAKIAlhY3RpdmUgPSBwY2Rldi0+YWN0aXZlOwogCiAJaWYgKCFhY3RpdmUpIHsKLQkJQ0lGUiB8PSBDSUZSX1JFU0VUX0Y7CisJCXVuc2lnbmVkIGxvbmcgY2lmciwgY2ljcjA7CisKKwkJY2lmciA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lGUikgfCBDSUZSX1JFU0VUX0Y7CisJCV9fcmF3X3dyaXRlbChjaWZyLCBwY2Rldi0+YmFzZSArIENJRlIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBwY2Rldi0+Y2hhbm5lbHM7IGkrKykgewogCQkJRERBRFIocGNkZXYtPmRtYV9jaGFuc1tpXSkgPSBidWYtPmRtYXNbaV0uc2dfZG1hOwpAQCAtMzk0LDcgKzQ4OSw5IEBACiAJCX0KIAogCQlwY2Rldi0+YWN0aXZlID0gYnVmOwotCQlDSUNSMCB8PSBDSUNSMF9FTkI7CisKKwkJY2ljcjAgPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IwKSB8IENJQ1IwX0VOQjsKKwkJX19yYXdfd3JpdGVsKGNpY3IwLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcHhhX2NhbV9kbWEgKmJ1Zl9kbWE7CiAJCXN0cnVjdCBweGFfY2FtX2RtYSAqYWN0X2RtYTsKQEAgLTQ3OCw2ICs1NzUsOCBAQAogCQkJICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCiAJCQkgICAgICBzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmKQogeworCXVuc2lnbmVkIGxvbmcgY2ljcjA7CisKIAkvKiBfaW5pdCBpcyB1c2VkIHRvIGRlYnVnIHJhY2VzLCBzZWUgY29tbWVudCBpbiBweGFfY2FtZXJhX3JlcWJ1ZnMoKSAqLwogCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CiAJdmItPnN0YXRlID0gVklERU9CVUZfRE9ORTsKQEAgLTQ5MCw3ICs1ODksOSBAQAogCQlEQ1NSKHBjZGV2LT5kbWFfY2hhbnNbMF0pID0gMDsKIAkJRENTUihwY2Rldi0+ZG1hX2NoYW5zWzFdKSA9IDA7CiAJCURDU1IocGNkZXYtPmRtYV9jaGFuc1syXSkgPSAwOwotCQlDSUNSMCAmPSB+Q0lDUjBfRU5COworCisJCWNpY3IwID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUNSMCkgJiB+Q0lDUjBfRU5COworCQlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDUsNiArNjA2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBzdGF0dXMsIGNhbWVyYV9zdGF0dXMsIG92ZXJydW47CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CisJdW5zaWduZWQgbG9uZyBjaWZyLCBjaWNyMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCkBAIC01MjcsMjIgKzYyOSwyNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYW1lcmFfc3RhdHVzID0gQ0lTUjsKKwljYW1lcmFfc3RhdHVzID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSVNSKTsKIAlvdmVycnVuID0gQ0lTUl9JRk9fMDsKIAlpZiAocGNkZXYtPmNoYW5uZWxzID09IDMpCiAJCW92ZXJydW4gfD0gQ0lTUl9JRk9fMSB8IENJU1JfSUZPXzI7CiAJaWYgKGNhbWVyYV9zdGF0dXMgJiBvdmVycnVuKSB7CiAJCWRldl9kYmcocGNkZXYtPmRldiwgIkZJRk8gb3ZlcnJ1biEgQ0lTUjogJXhcbiIsIGNhbWVyYV9zdGF0dXMpOwogCQkvKiBTdG9wIHRoZSBDYXB0dXJlIEludGVyZmFjZSAqLwotCQlDSUNSMCAmPSB+Q0lDUjBfRU5COworCQljaWNyMCA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lDUjApICYgfkNJQ1IwX0VOQjsKKwkJX19yYXdfd3JpdGVsKGNpY3IwLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKKwogCQkvKiBTdG9wIERNQSAqLwogCQlEQ1NSKGNoYW5uZWwpID0gMDsKIAkJLyogUmVzZXQgdGhlIEZJRk9zICovCi0JCUNJRlIgfD0gQ0lGUl9SRVNFVF9GOworCQljaWZyID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUZSKSB8IENJRlJfUkVTRVRfRjsKKwkJX19yYXdfd3JpdGVsKGNpZnIsIHBjZGV2LT5iYXNlICsgQ0lGUik7CiAJCS8qIEVuYWJsZSBFbmQtT2YtRnJhbWUgSW50ZXJydXB0ICovCi0JCUNJQ1IwICY9IH5DSUNSMF9FT0ZNOworCQljaWNyMCAmPSB+Q0lDUjBfRU9GTTsKKwkJX19yYXdfd3JpdGVsKGNpY3IwLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKIAkJLyogUmVzdGFydCB0aGUgQ2FwdHVyZSBJbnRlcmZhY2UgKi8KLQkJQ0lDUjAgfD0gQ0lDUjBfRU5COworCQlfX3Jhd193cml0ZWwoY2ljcjAgfCBDSUNSMF9FTkIsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU5OCwyNCArNzA0LDQzIEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBweGFfYnVmZmVyKSwgaWNkKTsKIH0KIAotc3RhdGljIGludCBtY2xrX2dldF9kaXZpc29yKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCitzdGF0aWMgdTMyIG1jbGtfZ2V0X2Rpdmlzb3Ioc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldikKIHsKLQl1bnNpZ25lZCBpbnQgbWNsa18xMGtoeiA9IHBjZGV2LT5wbGF0Zm9ybV9tY2xrXzEwa2h6OwotCXVuc2lnbmVkIGxvbmcgZGl2OworCXVuc2lnbmVkIGxvbmcgbWNsayA9IHBjZGV2LT5tY2xrOworCXUzMiBkaXY7CiAJdW5zaWduZWQgbG9uZyBsY2RjbGs7CiAKLQlsY2RjbGsgPSBjbGtfZ2V0X3JhdGUocGNkZXYtPmNsaykgLyAxMDAwMDsKKwlsY2RjbGsgPSBjbGtfZ2V0X3JhdGUocGNkZXYtPmNsayk7CisJcGNkZXYtPmNpY2xrID0gbGNkY2xrOwogCi0JLyogV2UgdmVyaWZ5IHBsYXRmb3JtX21jbGtfMTBraHogIT0gMCwgc28gaWYgYW55b25lIGJyZWFrcyBpdCwgaGVyZQotCSAqIHRoZXkgZ2V0IGEgbmljZSBPb3BzICovCi0JZGl2ID0gKGxjZGNsayArIDIgKiBtY2xrXzEwa2h6IC0gMSkgLyAoMiAqIG1jbGtfMTBraHopIC0gMTsKKwkvKiBtY2xrIDw9IGNpY2xrIC8gNCAoMjcuNC4yKSAqLworCWlmIChtY2xrID4gbGNkY2xrIC8gNCkgeworCQltY2xrID0gbGNkY2xrIC8gNDsKKwkJZGV2X3dhcm4ocGNkZXYtPmRldiwgIkxpbWl0aW5nIG1hc3RlciBjbG9jayB0byAlbHVcbiIsIG1jbGspOworCX0KIAotCWRldl9kYmcocGNkZXYtPmRldiwgIkxDRCBjbG9jayAlbHVrSHosIHRhcmdldCBmcmVxICVka0h6LCAiCi0JCSJkaXZpc29yICVsdVxuIiwgbGNkY2xrICogMTAsIG1jbGtfMTBraHogKiAxMCwgZGl2KTsKKwkvKiBXZSB2ZXJpZnkgbWNsayAhPSAwLCBzbyBpZiBhbnlvbmUgYnJlYWtzIGl0LCBoZXJlIGNvbWVzIHRoZWlyIE9vcHMgKi8KKwlkaXYgPSAobGNkY2xrICsgMiAqIG1jbGsgLSAxKSAvICgyICogbWNsaykgLSAxOworCisJLyogSWYgd2UncmUgbm90IHN1cHBseWluZyBNQ0xLLCBsZWF2ZSBpdCBhdCAwICovCisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUNMS19FTikKKwkJcGNkZXYtPm1jbGsgPSBsY2RjbGsgLyAoMiAqIChkaXYgKyAxKSk7CisKKwlkZXZfZGJnKHBjZGV2LT5kZXYsICJMQ0QgY2xvY2sgJWx1SHosIHRhcmdldCBmcmVxICVsdUh6LCAiCisJCSJkaXZpc29yICV1XG4iLCBsY2RjbGssIG1jbGssIGRpdik7CiAKIAlyZXR1cm4gZGl2OwogfQogCitzdGF0aWMgdm9pZCByZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQoc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGNsaykKK3sKKwkvKiBXZSB3YW50IGEgdGltZW91dCA+IDEgcGl4ZWwgdGltZSwgbm90ICI+PSIgKi8KKwl1MzIgY2ljbGtfcGVyX3BpeGVsID0gcGNkZXYtPmNpY2xrIC8gcGNsayArIDE7CisKKwlfX3Jhd193cml0ZWwoY2ljbGtfcGVyX3BpeGVsLCBwY2Rldi0+YmFzZSArIENJVE9SKTsKK30KKwogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9hY3RpdmF0ZShzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2KQogewogCXN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwY2Rldi0+cGRhdGE7CkBAIC02MjksNyArNzU0LDggQEAKIAkJcGRhdGEtPmluaXQocGNkZXYtPmRldik7CiAJfQogCi0JQ0lDUjAgPSAweDNGRjsgICAvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCV9fcmF3X3dyaXRlbCgweDNmZiwgcGNkZXYtPmJhc2UgKyBDSUNSMCk7CiAKIAlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9QQ0xLX0VOKQogCQljaWNyNCB8PSBDSUNSNF9QQ0xLX0VOOwpAQCAtNjQyLDcgKzc2OCwxNCBAQAogCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1ZTUCkKIAkJY2ljcjQgfD0gQ0lDUjRfVlNQOwogCi0JQ0lDUjQgPSBtY2xrX2dldF9kaXZpc29yKHBjZGV2KSB8IGNpY3I0OworCV9fcmF3X3dyaXRlbChwY2Rldi0+bWNsa19kaXZpc29yIHwgY2ljcjQsIHBjZGV2LT5iYXNlICsgQ0lDUjQpOworCisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUNMS19FTikKKwkJLyogSW5pdGlhbGlzZSB0aGUgdGltZW91dCB1bmRlciB0aGUgYXNzdW1wdGlvbiBwY2xrID0gbWNsayAqLworCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHBjZGV2LT5tY2xrKTsKKwllbHNlCisJCS8qICJTYWZlIGRlZmF1bHQiIC0gMTNNSHogKi8KKwkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCAxMzAwMDAwMCk7CiAKIAljbGtfZW5hYmxlKHBjZGV2LT5jbGspOwogfQpAQCAtNjU1LDE0ICs3ODgsMTUgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBweGFfY2FtZXJhX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBkYXRhOwotCXVuc2lnbmVkIGludCBzdGF0dXMgPSBDSVNSOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzLCBjaWNyMDsKIAotCWRldl9kYmcocGNkZXYtPmRldiwgIkNhbWVyYSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CisJc3RhdHVzID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSVNSKTsKKwlkZXZfZGJnKHBjZGV2LT5kZXYsICJDYW1lcmEgaW50ZXJydXB0IHN0YXR1cyAweCVseFxuIiwgc3RhdHVzKTsKIAogCWlmICghc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlDSVNSID0gc3RhdHVzOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIHBjZGV2LT5iYXNlICsgQ0lTUik7CiAKIAlpZiAoc3RhdHVzICYgQ0lTUl9FT0YpIHsKIAkJaW50IGk7CkBAIC02NzEsMjIgKzgwNSwyNCBAQAogCQkJCXBjZGV2LT5hY3RpdmUtPmRtYXNbaV0uc2dfZG1hOwogCQkJRENTUihwY2Rldi0+ZG1hX2NoYW5zW2ldKSA9IERDU1JfUlVOOwogCQl9Ci0JCUNJQ1IwIHw9IENJQ1IwX0VPRk07CisJCWNpY3IwID0gX19yYXdfcmVhZGwocGNkZXYtPmJhc2UgKyBDSUNSMCkgfCBDSUNSMF9FT0ZNOworCQlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFic29sdXRlbHkgZGVwZW5kIG9uIHRoZSBmYWN0LCB0aGF0Ci0gKiB0aGVyZSBjYW4gYmUgb25seSBvbmUgY2FtZXJhIG9uIFBYQSBxdWljayBjYXB0dXJlIGludGVyZmFjZSAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhYnNvbHV0ZWx5IGRlcGVuZCBvbiB0aGUgZmFjdCwgdGhhdAorICogdGhlcmUgY2FuIGJlIG9ubHkgb25lIGNhbWVyYSBvbiBQWEEgcXVpY2sgY2FwdHVyZSBpbnRlcmZhY2UKKyAqIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQKKyAqLwogc3RhdGljIGludCBweGFfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmY2FtZXJhX2xvY2spOwotCiAJaWYgKHBjZGV2LT5pY2QpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVidXN5OwpAQCAtNzAyLDExICs4MzgsMTAgQEAKIAkJcGNkZXYtPmljZCA9IGljZDsKIAogZWJ1c3k6Ci0JbXV0ZXhfdW5sb2NrKCZjYW1lcmFfbG9jayk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCisvKiBDYWxsZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZCBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CkBAIC03MTgsNyArODUzLDcgQEAKIAkJIGljZC0+ZGV2bnVtKTsKIAogCS8qIGRpc2FibGUgY2FwdHVyZSwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JQ0lDUjAgPSAweDNmZjsKKwlfX3Jhd193cml0ZWwoMHgzZmYsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCiAJLyogU3RvcCBETUEgZW5naW5lICovCiAJRENTUihwY2Rldi0+ZG1hX2NoYW5zWzBdKSA9IDA7CkBAIC03NjUsNiArOTAwLDkgQEAKIAkJaWYgKCEocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9EQVRBV0lEVEhfOCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc3MiwxMSArOTEwLDEwIEBACiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGR3LCBicHAsIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7Ci0JdTMyIGNpY3IwLCBjaWNyMSwgY2ljcjQgPSAwOworCXUzMiBjaWNyMCwgY2ljcjEsIGNpY3IyLCBjaWNyMywgY2ljcjQgPSAwOwogCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKHBjZGV2LCBpY2QtPmJ1c3dpZHRoLCAmYnVzX2ZsYWdzKTsKIAogCWlmIChyZXQgPCAwKQpAQCAtODIzLDEyICs5NjAsMTAgQEAKIAkgKiBXZSBmaXggYml0LXBlci1waXhlbCBlcXVhbCB0byBkYXRhLXdpZHRoLi4uICovCiAJc3dpdGNoIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSykgewogCWNhc2UgU09DQU1fREFUQVdJRFRIXzEwOgotCQlpY2QtPmJ1c3dpZHRoID0gMTA7CiAJCWR3ID0gNDsKIAkJYnBwID0gMHg0MDsKIAkJYnJlYWs7CiAJY2FzZSBTT0NBTV9EQVRBV0lEVEhfOToKLQkJaWNkLT5idXN3aWR0aCA9IDk7CiAJCWR3ID0gMzsKIAkJYnBwID0gMHgyMDsKIAkJYnJlYWs7CkBAIC04MzYsNyArOTcxLDYgQEAKIAkJLyogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgOCBub3csCiAJCSAqIGRlZmF1bHQgaXMganVzdCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCiAJY2FzZSBTT0NBTV9EQVRBV0lEVEhfODoKLQkJaWNkLT5idXN3aWR0aCA9IDg7CiAJCWR3ID0gMjsKIAkJYnBwID0gMDsKIAl9CkBAIC04NTIsOSArOTg2LDkgQEAKIAlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVykKIAkJY2ljcjQgfD0gQ0lDUjRfVlNQOwogCi0JY2ljcjAgPSBDSUNSMDsKKwljaWNyMCA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCWlmIChjaWNyMCAmIENJQ1IwX0VOQikKLQkJQ0lDUjAgPSBjaWNyMCAmIH5DSUNSMF9FTkI7CisJCV9fcmF3X3dyaXRlbChjaWNyMCAmIH5DSUNSMF9FTkIsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCiAJY2ljcjEgPSBDSUNSMV9QUExfVkFMKGljZC0+d2lkdGggLSAxKSB8IGJwcCB8IGR3OwogCkBAIC04NjIsNyArOTk2LDE3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKIAkJcGNkZXYtPmNoYW5uZWxzID0gMzsKIAkJY2ljcjEgfD0gQ0lDUjFfWUNCQ1JfRjsKKwkJLyoKKwkJICogTm9ybWFsbHksIHB4YSBidXMgd2FudHMgYXMgaW5wdXQgVVlWWSBmb3JtYXQuIFdlIGFsbG93IGFsbAorCQkgKiByZW9yZGVyaW5ncyBvZiB0aGUgWVVWNDIyIGZvcm1hdCwgYXMgbm8gcHJvY2Vzc2luZyBpcyBkb25lLAorCQkgKiBhbmQgdGhlIFlVViBzdHJlYW0gaXMganVzdCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0IGFueQorCQkgKiB0cmFuc2Zvcm1hdGlvbi4gTm90ZSB0aGF0IFVZVlkgaXMgdGhlIG9ubHkgZm9ybWF0IHRoYXQKKwkJICogc2hvdWxkIGJlIHVzZWQgaWYgcHhhIGZyYW1lYnVmZmVyIE92ZXJsYXkyIGlzIHVzZWQuCisJCSAqLworCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CiAJCWNpY3IxIHw9IENJQ1IxX0NPTE9SX1NQX1ZBTCgyKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgpAQCAtODc0LDI3ICsxMDE4LDMyIEBACiAJCWJyZWFrOwogCX0KIAotCUNJQ1IxID0gY2ljcjE7Ci0JQ0lDUjIgPSAwOwotCUNJQ1IzID0gQ0lDUjNfTFBGX1ZBTChpY2QtPmhlaWdodCAtIDEpIHwKKwljaWNyMiA9IDA7CisJY2ljcjMgPSBDSUNSM19MUEZfVkFMKGljZC0+aGVpZ2h0IC0gMSkgfAogCQlDSUNSM19CRldfVkFMKG1pbigodW5zaWduZWQgc2hvcnQpMjU1LCBpY2QtPnlfc2tpcF90b3ApKTsKLQlDSUNSNCA9IG1jbGtfZ2V0X2Rpdmlzb3IocGNkZXYpIHwgY2ljcjQ7CisJY2ljcjQgfD0gcGNkZXYtPm1jbGtfZGl2aXNvcjsKKworCV9fcmF3X3dyaXRlbChjaWNyMSwgcGNkZXYtPmJhc2UgKyBDSUNSMSk7CisJX19yYXdfd3JpdGVsKGNpY3IyLCBwY2Rldi0+YmFzZSArIENJQ1IyKTsKKwlfX3Jhd193cml0ZWwoY2ljcjMsIHBjZGV2LT5iYXNlICsgQ0lDUjMpOworCV9fcmF3X3dyaXRlbChjaWNyNCwgcGNkZXYtPmJhc2UgKyBDSUNSNCk7CiAKIAkvKiBDSUYgaW50ZXJydXB0cyBhcmUgbm90IHVzZWQsIG9ubHkgRE1BICovCi0JQ0lDUjAgPSAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9NQVNURVIgPwotCQkgQ0lDUjBfU0lNX01QIDogKENJQ1IwX1NMX0NBUF9FTiB8IENJQ1IwX1NJTV9TUCkpIHwKLQkJQ0lDUjBfRE1BRU4gfCBDSUNSMF9JUlFfTUFTSyB8IChjaWNyMCAmIENJQ1IwX0VOQik7CisJY2ljcjAgPSAoY2ljcjAgJiBDSUNSMF9FTkIpIHwgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfTUFTVEVSID8KKwkJQ0lDUjBfU0lNX01QIDogKENJQ1IwX1NMX0NBUF9FTiB8IENJQ1IwX1NJTV9TUCkpOworCWNpY3IwIHw9IENJQ1IwX0RNQUVOIHwgQ0lDUjBfSVJRX01BU0s7CisJX19yYXdfd3JpdGVsKGNpY3IwLCBwY2Rldi0+YmFzZSArIENJQ1IwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9jYW1lcmFfdHJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgX191MzIgcGl4Zm10KQorc3RhdGljIGludCBweGFfY2FtZXJhX3RyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgYnVzd2lkdGgpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOwotCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKHBjZGV2LCBpY2QtPmJ1c3dpZHRoLCAmYnVzX2ZsYWdzKTsKKwlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShwY2RldiwgYnVzd2lkdGgsICZidXNfZmxhZ3MpOwogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC05MDQsMjggKzEwNTMsMjEwIEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpID8gMCA6IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBweGFfY2FtZXJhX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJQbGFuYXIgWVVWNDIyIDE2IGJpdCIsCisJCS5kZXB0aAkJPSAxNiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwl9LAorfTsKKworc3RhdGljIGJvb2wgYnVzd2lkdGhfc3VwcG9ydGVkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgZGVwdGgpCiB7Ci0JcmV0dXJuIGljZC0+b3BzLT5zZXRfZm10X2NhcChpY2QsIHBpeGZtdCwgcmVjdCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNlIDg6CisJCXJldHVybiAhIShwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX0RBVEFXSURUSF84KTsKKwljYXNlIDk6CisJCXJldHVybiAhIShwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX0RBVEFXSURUSF85KTsKKwljYXNlIDEwOgorCQlyZXR1cm4gISEocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9EQVRBV0lEVEhfMTApOworCX0KKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV90cnlfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgcmVxdWlyZWRfYnVzd2lkdGgoY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmZtdCkKIHsKLQkvKiBsaW1pdCB0byBweGEgaGFyZHdhcmUgY2FwYWJpbGl0aWVzICovCi0JaWYgKGYtPmZtdC5waXguaGVpZ2h0IDwgMzIpCi0JCWYtPmZtdC5waXguaGVpZ2h0ID0gMzI7Ci0JaWYgKGYtPmZtdC5waXguaGVpZ2h0ID4gMjA0OCkKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyMDQ4OwotCWlmIChmLT5mbXQucGl4LndpZHRoIDwgNDgpCi0JCWYtPmZtdC5waXgud2lkdGggPSA0ODsKLQlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IDIwNDgpCi0JCWYtPmZtdC5waXgud2lkdGggPSAyMDQ4OwotCWYtPmZtdC5waXgud2lkdGggJj0gfjB4MDE7CisJc3dpdGNoIChmbXQtPmZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZtdC0+ZGVwdGg7CisJfQorfQogCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCisJCQkJICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCWludCBmb3JtYXRzID0gMCwgYnVzd2lkdGgsIHJldDsKKworCWJ1c3dpZHRoID0gcmVxdWlyZWRfYnVzd2lkdGgoaWNkLT5mb3JtYXRzICsgaWR4KTsKKworCWlmICghYnVzd2lkdGhfc3VwcG9ydGVkKGljZCwgYnVzd2lkdGgpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHB4YV9jYW1lcmFfdHJ5X2J1c19wYXJhbShpY2QsIGJ1c3dpZHRoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmcHhhX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJcHhhX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgcGFja2VkXG4iLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKKwkJCXhsYXRlLT5idXN3aWR0aCA9IGljZC0+Zm9ybWF0c1tpZHhdLmRlcHRoOworCQkJeGxhdGUrKzsKKwkJCWRldl9kYmcoJmljaS0+ZGV2LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGZvcm1hdHM7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmhvc3RfZm10LCAqY2FtX2ZtdCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKKwkJLm1hc3Rlcl9jbG9jayA9IHBjZGV2LT5tY2xrLAorCQkucGl4ZWxfY2xvY2tfbWF4ID0gcGNkZXYtPmNpY2xrIC8gNCwKKwl9OworCWludCByZXQsIGJ1c3dpZHRoOworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKCF4bGF0ZSkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKKwlob3N0X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKKwljYW1fZm10ID0geGxhdGUtPmNhbV9mbXQ7CisKKwkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKKwkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKKworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSAwOgkJCQkvKiBPbmx5IGdlb21ldHJ5IGNoYW5nZSAqLworCQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHBpeGZtdCwgcmVjdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgY2FtX2ZtdC0+Zm91cmNjLCByZWN0KTsKKwl9CisKKwlpY2QtPnNlbnNlID0gTlVMTDsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKKwkJCSBwaXhmbXQpOworCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKKwkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CisJCQlkZXZfZXJyKCZpY2ktPmRldiwKKwkJCQkicGl4ZWwgY2xvY2sgJWx1IHNldCBieSB0aGUgY2FtZXJhIHRvbyBoaWdoISIsCisJCQkJc2Vuc2UucGl4ZWxfY2xvY2spOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCBzZW5zZS5waXhlbF9jbG9jayk7CisJfQorCisJaWYgKHBpeGZtdCAmJiAhcmV0KSB7CisJCWljZC0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJaWNkLT5jdXJyZW50X2ZtdCA9IGhvc3RfZm10OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbGltaXQgdG8gcHhhIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworCWlmIChwaXgtPmhlaWdodCA8IDMyKQorCQlwaXgtPmhlaWdodCA9IDMyOworCWlmIChwaXgtPmhlaWdodCA+IDIwNDgpCisJCXBpeC0+aGVpZ2h0ID0gMjA0ODsKKwlpZiAocGl4LT53aWR0aCA8IDQ4KQorCQlwaXgtPndpZHRoID0gNDg7CisJaWYgKHBpeC0+d2lkdGggPiAyMDQ4KQorCQlwaXgtPndpZHRoID0gMjA0ODsKKwlwaXgtPndpZHRoICY9IH4weDAxOworCisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKKwkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKworCS8qIGNhbWVyYSBoYXMgdG8gc2VlIGl0cyBmb3JtYXQsIGJ1dCB0aGUgdXNlciB0aGUgb3JpZ2luYWwgb25lICovCisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CiAJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLwotCXJldHVybiBpY2QtPm9wcy0+dHJ5X2ZtdF9jYXAoaWNkLCBmKTsKKwlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+aG9zdF9mbXQtPmZvdXJjYzsKKworCWZpZWxkID0gcGl4LT5maWVsZDsKKworCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCX0gZWxzZSBpZiAoZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsIGZpZWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBweGFfY2FtZXJhX3JlcWJ1ZnMoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLApAQCAtOTc3LDE2ICsxMzA4LDE1IEBACiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zdXNwZW5kKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgaSA9IDAsIHJldCA9IDA7CiAKLQlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBDSUNSMDsKLQlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBDSUNSMTsKLQlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBDSUNSMjsKLQlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBDSUNSMzsKLQlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBDSUNSNDsKKwlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IwKTsKKwlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IxKTsKKwlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IyKTsKKwlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IzKTsKKwlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1I0KTsKIAogCWlmICgocGNkZXYtPmljZCkgJiYgKHBjZGV2LT5pY2QtPm9wcy0+c3VzcGVuZCkpCiAJCXJldCA9IHBjZGV2LT5pY2QtPm9wcy0+c3VzcGVuZChwY2Rldi0+aWNkLCBzdGF0ZSk7CkBAIC05OTYsOCArMTMyNiw3IEBACiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgaSA9IDAsIHJldCA9IDA7CiAKQEAgLTEwMDUsMjMgKzEzMzQsMjcgQEAKIAlEUkNNUig2OSkgPSBwY2Rldi0+ZG1hX2NoYW5zWzFdIHwgRFJDTVJfTUFQVkxEOwogCURSQ01SKDcwKSA9IHBjZGV2LT5kbWFfY2hhbnNbMl0gfCBEUkNNUl9NQVBWTEQ7CiAKLQlDSUNSMCA9IHBjZGV2LT5zYXZlX2NpY3JbaSsrXSAmIH5DSUNSMF9FTkI7Ci0JQ0lDUjEgPSBwY2Rldi0+c2F2ZV9jaWNyW2krK107Ci0JQ0lDUjIgPSBwY2Rldi0+c2F2ZV9jaWNyW2krK107Ci0JQ0lDUjMgPSBwY2Rldi0+c2F2ZV9jaWNyW2krK107Ci0JQ0lDUjQgPSBwY2Rldi0+c2F2ZV9jaWNyW2krK107CisJX19yYXdfd3JpdGVsKHBjZGV2LT5zYXZlX2NpY3JbaSsrXSAmIH5DSUNSMF9FTkIsIHBjZGV2LT5iYXNlICsgQ0lDUjApOworCV9fcmF3X3dyaXRlbChwY2Rldi0+c2F2ZV9jaWNyW2krK10sIHBjZGV2LT5iYXNlICsgQ0lDUjEpOworCV9fcmF3X3dyaXRlbChwY2Rldi0+c2F2ZV9jaWNyW2krK10sIHBjZGV2LT5iYXNlICsgQ0lDUjIpOworCV9fcmF3X3dyaXRlbChwY2Rldi0+c2F2ZV9jaWNyW2krK10sIHBjZGV2LT5iYXNlICsgQ0lDUjMpOworCV9fcmF3X3dyaXRlbChwY2Rldi0+c2F2ZV9jaWNyW2krK10sIHBjZGV2LT5iYXNlICsgQ0lDUjQpOwogCiAJaWYgKChwY2Rldi0+aWNkKSAmJiAocGNkZXYtPmljZC0+b3BzLT5yZXN1bWUpKQogCQlyZXQgPSBwY2Rldi0+aWNkLT5vcHMtPnJlc3VtZShwY2Rldi0+aWNkKTsKIAogCS8qIFJlc3RhcnQgZnJhbWUgY2FwdHVyZSBpZiBhY3RpdmUgYnVmZmVyIGV4aXN0cyAqLwogCWlmICghcmV0ICYmIHBjZGV2LT5hY3RpdmUpIHsKKwkJdW5zaWduZWQgbG9uZyBjaWZyLCBjaWNyMDsKKwogCQkvKiBSZXNldCB0aGUgRklGT3MgKi8KLQkJQ0lGUiB8PSBDSUZSX1JFU0VUX0Y7Ci0JCS8qIEVuYWJsZSBFbmQtT2YtRnJhbWUgSW50ZXJydXB0ICovCi0JCUNJQ1IwICY9IH5DSUNSMF9FT0ZNOwotCQkvKiBSZXN0YXJ0IHRoZSBDYXB0dXJlIEludGVyZmFjZSAqLwotCQlDSUNSMCB8PSBDSUNSMF9FTkI7CisJCWNpZnIgPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJRlIpIHwgQ0lGUl9SRVNFVF9GOworCQlfX3Jhd193cml0ZWwoY2lmciwgcGNkZXYtPmJhc2UgKyBDSUZSKTsKKworCQljaWNyMCA9IF9fcmF3X3JlYWRsKHBjZGV2LT5iYXNlICsgQ0lDUjApOworCQljaWNyMCAmPSB+Q0lDUjBfRU9GTTsJLyogRW5hYmxlIEVuZC1PZi1GcmFtZSBJbnRlcnJ1cHQgKi8KKwkJY2ljcjAgfD0gQ0lDUjBfRU5COwkvKiBSZXN0YXJ0IHRoZSBDYXB0dXJlIEludGVyZmFjZSAqLworCQlfX3Jhd193cml0ZWwoY2ljcjAsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDMzLDEzICsxMzY2LDEzIEBACiAJLnJlbW92ZQkJPSBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCiAJLnN1c3BlbmQJPSBweGFfY2FtZXJhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKLQkuc2V0X2ZtdF9jYXAJPSBweGFfY2FtZXJhX3NldF9mbXRfY2FwLAotCS50cnlfZm10X2NhcAk9IHB4YV9jYW1lcmFfdHJ5X2ZtdF9jYXAsCisJLmdldF9mb3JtYXRzCT0gcHhhX2NhbWVyYV9nZXRfZm9ybWF0cywKKwkuc2V0X2ZtdAk9IHB4YV9jYW1lcmFfc2V0X2ZtdCwKKwkudHJ5X2ZtdAk9IHB4YV9jYW1lcmFfdHJ5X2ZtdCwKIAkuaW5pdF92aWRlb2J1Zgk9IHB4YV9jYW1lcmFfaW5pdF92aWRlb2J1ZiwKIAkucmVxYnVmcwk9IHB4YV9jYW1lcmFfcmVxYnVmcywKIAkucG9sbAkJPSBweGFfY2FtZXJhX3BvbGwsCiAJLnF1ZXJ5Y2FwCT0gcHhhX2NhbWVyYV9xdWVyeWNhcCwKLQkudHJ5X2J1c19wYXJhbQk9IHB4YV9jYW1lcmFfdHJ5X2J1c19wYXJhbSwKIAkuc2V0X2J1c19wYXJhbQk9IHB4YV9jYW1lcmFfc2V0X2J1c19wYXJhbSwKIH07CiAKQEAgLTEwNzEsNyArMTQwNCw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlwY2Rldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiQ0FNQ0xLIik7CisJcGNkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihwY2Rldi0+Y2xrKSkgewogCQllcnIgPSBQVFJfRVJSKHBjZGV2LT5jbGspOwogCQlnb3RvIGV4aXRfa2ZyZWU7CkBAIC0xMDkwLDE0ICsxNDIzLDE3IEBACiAJCQkgImRhdGEgd2lkdGhzLCB1c2luZyBkZWZhdWx0IDEwIGJpdFxuIik7CiAJCXBjZGV2LT5wbGF0Zm9ybV9mbGFncyB8PSBQWEFfQ0FNRVJBX0RBVEFXSURUSF8xMDsKIAl9Ci0JcGNkZXYtPnBsYXRmb3JtX21jbGtfMTBraHogPSBwY2Rldi0+cGRhdGEtPm1jbGtfMTBraHo7Ci0JaWYgKCFwY2Rldi0+cGxhdGZvcm1fbWNsa18xMGtoeikgeworCXBjZGV2LT5tY2xrID0gcGNkZXYtPnBkYXRhLT5tY2xrXzEwa2h6ICogMTAwMDA7CisJaWYgKCFwY2Rldi0+bWNsaykgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJICJtY2xrXzEwa2h6ID09IDAhIFBsZWFzZSwgZml4IHlvdXIgcGxhdGZvcm0gZGF0YS4gIgorCQkJICJtY2xrID09IDAhIFBsZWFzZSwgZml4IHlvdXIgcGxhdGZvcm0gZGF0YS4gIgogCQkJICJVc2luZyBkZWZhdWx0IDIwTUh6XG4iKTsKLQkJcGNkZXYtPnBsYXRmb3JtX21jbGtfMTBraHogPSAyMDAwOworCQlwY2Rldi0+bWNsayA9IDIwMDAwMDAwOwogCX0KIAorCXBjZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCXBjZGV2LT5tY2xrX2Rpdmlzb3IgPSBtY2xrX2dldF9kaXZpc29yKHBjZGV2KTsKKwogCUlOSVRfTElTVF9IRUFEKCZwY2Rldi0+Y2FwdHVyZSk7CiAJc3Bpbl9sb2NrX2luaXQoJnBjZGV2LT5sb2NrKTsKIApAQCAtMTExNyw3ICsxNDUzLDYgQEAKIAl9CiAJcGNkZXYtPmlycSA9IGlycTsKIAlwY2Rldi0+YmFzZSA9IGJhc2U7Ci0JcGNkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAkvKiByZXF1ZXN0IGRtYSAqLwogCWVyciA9IHB4YV9yZXF1ZXN0X2RtYSgiQ0lfWSIsIERNQV9QUklPX0hJR0gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Y2JmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuaApAQCAtMCwwICsxLDk1IEBACisvKiBDYW1lcmEgSW50ZXJmYWNlICovCisjZGVmaW5lIENJQ1IwCQlfX1JFRygweDUwMDAwMDAwKQorI2RlZmluZSBDSUNSMQkJX19SRUcoMHg1MDAwMDAwNCkKKyNkZWZpbmUgQ0lDUjIJCV9fUkVHKDB4NTAwMDAwMDgpCisjZGVmaW5lIENJQ1IzCQlfX1JFRygweDUwMDAwMDBDKQorI2RlZmluZSBDSUNSNAkJX19SRUcoMHg1MDAwMDAxMCkKKyNkZWZpbmUgQ0lTUgkJX19SRUcoMHg1MDAwMDAxNCkKKyNkZWZpbmUgQ0lGUgkJX19SRUcoMHg1MDAwMDAxOCkKKyNkZWZpbmUgQ0lUT1IJCV9fUkVHKDB4NTAwMDAwMUMpCisjZGVmaW5lIENJQlIwCQlfX1JFRygweDUwMDAwMDI4KQorI2RlZmluZSBDSUJSMQkJX19SRUcoMHg1MDAwMDAzMCkKKyNkZWZpbmUgQ0lCUjIJCV9fUkVHKDB4NTAwMDAwMzgpCisKKyNkZWZpbmUgQ0lDUjBfRE1BRU4JKDEgPDwgMzEpCS8qIERNQSByZXF1ZXN0IGVuYWJsZSAqLworI2RlZmluZSBDSUNSMF9QQVJfRU4JKDEgPDwgMzApCS8qIFBhcml0eSBlbmFibGUgKi8KKyNkZWZpbmUgQ0lDUjBfU0xfQ0FQX0VOCSgxIDw8IDI5KQkvKiBDYXB0dXJlIGVuYWJsZSBmb3Igc2xhdmUgbW9kZSAqLworI2RlZmluZSBDSUNSMF9FTkIJKDEgPDwgMjgpCS8qIENhbWVyYSBpbnRlcmZhY2UgZW5hYmxlICovCisjZGVmaW5lIENJQ1IwX0RJUwkoMSA8PCAyNykJLyogQ2FtZXJhIGludGVyZmFjZSBkaXNhYmxlICovCisjZGVmaW5lIENJQ1IwX1NJTQkoMHg3IDw8IDI0KQkvKiBTZW5zb3IgaW50ZXJmYWNlIG1vZGUgbWFzayAqLworI2RlZmluZSBDSUNSMF9UT00JKDEgPDwgOSkJLyogVGltZS1vdXQgbWFzayAqLworI2RlZmluZSBDSUNSMF9SREFWTQkoMSA8PCA4KQkvKiBSZWNlaXZlLWRhdGEtYXZhaWxhYmxlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfRkVNCSgxIDw8IDcpCS8qIEZJRk8tZW1wdHkgbWFzayAqLworI2RlZmluZSBDSUNSMF9FT0xNCSgxIDw8IDYpCS8qIEVuZC1vZi1saW5lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfUEVSUk0JKDEgPDwgNSkJLyogUGFyaXR5LWVycm9yIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfUURNCSgxIDw8IDQpCS8qIFF1aWNrLWRpc2FibGUgbWFzayAqLworI2RlZmluZSBDSUNSMF9DRE0JKDEgPDwgMykJLyogRGlzYWJsZS1kb25lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfU09GTQkoMSA8PCAyKQkvKiBTdGFydC1vZi1mcmFtZSBtYXNrICovCisjZGVmaW5lIENJQ1IwX0VPRk0JKDEgPDwgMSkJLyogRW5kLW9mLWZyYW1lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjBfRk9NCSgxIDw8IDApCS8qIEZJRk8tb3ZlcnJ1biBtYXNrICovCisKKyNkZWZpbmUgQ0lDUjFfVEJJVAkoMSA8PCAzMSkJLyogVHJhbnNwYXJlbmN5IGJpdCAqLworI2RlZmluZSBDSUNSMV9SR0JUX0NPTlYJKDB4MyA8PCAyOSkJLyogUkdCVCBjb252ZXJzaW9uIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfUFBMCSgweDdmZiA8PCAxNSkJLyogUGl4ZWxzIHBlciBsaW5lIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfUkdCX0NPTlYJKDB4NyA8PCAxMikJLyogUkdCIGNvbnZlcnNpb24gbWFzayAqLworI2RlZmluZSBDSUNSMV9SR0JfRgkoMSA8PCAxMSkJLyogUkdCIGZvcm1hdCAqLworI2RlZmluZSBDSUNSMV9ZQ0JDUl9GCSgxIDw8IDEwKQkvKiBZQ2JDciBmb3JtYXQgKi8KKyNkZWZpbmUgQ0lDUjFfUkdCX0JQUAkoMHg3IDw8IDcpCS8qIFJHQiBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfUkFXX0JQUAkoMHgzIDw8IDUpCS8qIFJhdyBiaXMgcGVyIHBpeGVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjFfQ09MT1JfU1AJKDB4MyA8PCAzKQkvKiBDb2xvciBzcGFjZSBtYXNrICovCisjZGVmaW5lIENJQ1IxX0RXCSgweDcgPDwgMCkJLyogRGF0YSB3aWR0aCBtYXNrICovCisKKyNkZWZpbmUgQ0lDUjJfQkxXCSgweGZmIDw8IDI0KQkvKiBCZWdpbm5pbmctb2YtbGluZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfRUxXCSgweGZmIDw8IDE2KQkvKiBFbmQtb2YtbGluZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfSFNXCSgweDNmIDw8IDEwKQkvKiBIb3Jpem9udGFsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLworI2RlZmluZSBDSUNSMl9CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjJfRlNXCSgweDcgPDwgMCkJLyogRnJhbWUgc3RhYmlsaXphdGlvbgorCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKworI2RlZmluZSBDSUNSM19CRlcJKDB4ZmYgPDwgMjQpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBsaW5lIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSM19FRlcJKDB4ZmYgPDwgMTYpCS8qIEVuZC1vZi1mcmFtZSBsaW5lIGNsb2NrCisJCQkJCSAgIHdhaXQgY291bnQgbWFzayAqLworI2RlZmluZSBDSUNSM19WU1cJKDB4M2YgPDwgMTApCS8qIFZlcnRpY2FsIHN5bmMgcHVsc2Ugd2lkdGggbWFzayAqLworI2RlZmluZSBDSUNSM19CRlBXCSgweDNmIDw8IDMpCS8qIEJlZ2lubmluZy1vZi1mcmFtZSBwaXhlbCBjbG9jaworCQkJCQkgICB3YWl0IGNvdW50IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjNfTFBGCSgweDdmZiA8PCAwKQkvKiBMaW5lcyBwZXIgZnJhbWUgbWFzayAqLworCisjZGVmaW5lIENJQ1I0X01DTEtfRExZCSgweDMgPDwgMjQpCS8qIE1DTEsgRGF0YSBDYXB0dXJlIERlbGF5IG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjRfUENMS19FTgkoMSA8PCAyMykJLyogUGl4ZWwgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIENJQ1I0X1BDUAkoMSA8PCAyMikJLyogUGl4ZWwgY2xvY2sgcG9sYXJpdHkgKi8KKyNkZWZpbmUgQ0lDUjRfSFNQCSgxIDw8IDIxKQkvKiBIb3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKyNkZWZpbmUgQ0lDUjRfVlNQCSgxIDw8IDIwKQkvKiBWZXJ0aWNhbCBzeW5jIHBvbGFyaXR5ICovCisjZGVmaW5lIENJQ1I0X01DTEtfRU4JKDEgPDwgMTkpCS8qIE1DTEsgZW5hYmxlICovCisjZGVmaW5lIENJQ1I0X0ZSX1JBVEUJKDB4NyA8PCA4KQkvKiBGcmFtZSByYXRlIG1hc2sgKi8KKyNkZWZpbmUgQ0lDUjRfRElWCSgweGZmIDw8IDApCS8qIENsb2NrIGRpdmlzb3IgbWFzayAqLworCisjZGVmaW5lIENJU1JfRlRPCSgxIDw8IDE1KQkvKiBGSUZPIHRpbWUtb3V0ICovCisjZGVmaW5lIENJU1JfUkRBVl8yCSgxIDw8IDE0KQkvKiBDaGFubmVsIDIgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZSBDSVNSX1JEQVZfMQkoMSA8PCAxMykJLyogQ2hhbm5lbCAxIHJlY2VpdmUgZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0lTUl9SREFWXzAJKDEgPDwgMTIpCS8qIENoYW5uZWwgMCByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzIJKDEgPDwgMTEpCS8qIENoYW5uZWwgMiBGSUZPIGVtcHR5ICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzEJKDEgPDwgMTApCS8qIENoYW5uZWwgMSBGSUZPIGVtcHR5ICovCisjZGVmaW5lIENJU1JfRkVNUFRZXzAJKDEgPDwgOSkJLyogQ2hhbm5lbCAwIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgQ0lTUl9FT0wJKDEgPDwgOCkJLyogRW5kIG9mIGxpbmUgKi8KKyNkZWZpbmUgQ0lTUl9QQVJfRVJSCSgxIDw8IDcpCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBDSVNSX0NRRAkoMSA8PCA2KQkvKiBDYW1lcmEgaW50ZXJmYWNlIHF1aWNrIGRpc2FibGUgKi8KKyNkZWZpbmUgQ0lTUl9DREQJKDEgPDwgNSkJLyogQ2FtZXJhIGludGVyZmFjZSBkaXNhYmxlIGRvbmUgKi8KKyNkZWZpbmUgQ0lTUl9TT0YJKDEgPDwgNCkJLyogU3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgQ0lTUl9FT0YJKDEgPDwgMykJLyogRW5kIG9mIGZyYW1lICovCisjZGVmaW5lIENJU1JfSUZPXzIJKDEgPDwgMikJLyogRklGTyBvdmVycnVuIGZvciBDaGFubmVsIDIgKi8KKyNkZWZpbmUgQ0lTUl9JRk9fMQkoMSA8PCAxKQkvKiBGSUZPIG92ZXJydW4gZm9yIENoYW5uZWwgMSAqLworI2RlZmluZSBDSVNSX0lGT18wCSgxIDw8IDApCS8qIEZJRk8gb3ZlcnJ1biBmb3IgQ2hhbm5lbCAwICovCisKKyNkZWZpbmUgQ0lGUl9GTFZMMgkoMHg3ZiA8PCAyMykJLyogRklGTyAyIGxldmVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lGUl9GTFZMMQkoMHg3ZiA8PCAxNikJLyogRklGTyAxIGxldmVsIG1hc2sgKi8KKyNkZWZpbmUgQ0lGUl9GTFZMMAkoMHhmZiA8PCA4KQkvKiBGSUZPIDAgbGV2ZWwgbWFzayAqLworI2RlZmluZSBDSUZSX1RITF8wCSgweDMgPDwgNCkJLyogVGhyZXNob2xkIExldmVsIGZvciBDaGFubmVsIDAgRklGTyAqLworI2RlZmluZSBDSUZSX1JFU0VUX0YJKDEgPDwgMykJLyogUmVzZXQgaW5wdXQgRklGT3MgKi8KKyNkZWZpbmUgQ0lGUl9GRU4yCSgxIDw8IDIpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgQ0lGUl9GRU4xCSgxIDw8IDEpCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgQ0lGUl9GRU4wCSgxIDw8IDApCS8qIEZJRk8gZW5hYmxlIGZvciBjaGFubmVsIDAgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IDRhMjFiOGEuLmYxNTk0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIDxyaWNoYXJkLmd1ZW50aGVyQHN0dWRlbnQudW5pLXR1ZWJpbmdlbi5kZT4KICAqCiAgKiB3aXRoIGNoYW5nZXMgYnkKLSAqIEFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIGFuZAogICoKQEAgLTgwNCw4ICs4MDQsNyBAQAogICoKICAqICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bAogICovCi1zdGF0aWMgaW50IGRvX3NhYTUyNDZhX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgZG9fc2FhNTI0NmFfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIApAQCAtOTUzLDcgKzk1Miw3IEBACiAKIAljbWQgPSB2dHhfZml4X2NvbW1hbmQoY21kKTsKIAltdXRleF9sb2NrKCZ0LT5sb2NrKTsKLQllcnIgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIGRvX3NhYTUyNDZhX2lvY3RsKTsKKwllcnIgPSB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgZG9fc2FhNTI0NmFfaW9jdGwpOwogCW11dGV4X3VubG9jaygmdC0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKaW5kZXggM2JiOTU5Yy4uNmVmM2FmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKQEAgLTgsNyArOCw3IEBACiAgKgl5b3UgY2FuIGFkZCBhcmJpdGFyeSBtdWx0aXBsZSB0ZWxldGV4dCBkZXZpY2VzIHRvIExpbnV4IHZpZGVvNGxpbnV4CiAgKglub3cgKHdlbGwgMzIgYW55d2F5KS4KICAqCi0gKglBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglUaGUgb3JpZ2luYWwgZHJpdmVyIHdhcyBoZWF2aWx5IG1vZGlmaWVkIHRvIG1hdGNoIHRoZSBpMmMgaW50ZXJmYWNlCiAgKglJdCB3YXMgdHJ1bmNhdGVkIHRvIHVzZSB0aGUgV2luVFYgYm9hcmRzLCB0b28uCkBAIC0xOTAsOCArMTkwLDcgQEAKICAqCVN0YW5kYXJkIGNoYXJhY3Rlci1kZXZpY2UtZHJpdmVyIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgZG9fc2FhNTI0OV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGRvX3NhYTUyNDlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdGF0aWMgaW50IHZpcnR1YWxfbW9kZSA9IGZhbHNlOwogCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CkBAIC00ODgsNyArNDg3LDcgQEAKIAogCWNtZCA9IHZ0eF9maXhfY29tbWFuZChjbWQpOwogCW11dGV4X2xvY2soJnQtPmxvY2spOwotCWVyciA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLGZpbGUsY21kLGFyZyxkb19zYWE1MjQ5X2lvY3RsKTsKKwllcnIgPSB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgZG9fc2FhNTI0OV9pb2N0bCk7CiAJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBjOGU5Y2IzLi4yMjcwOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTcwLDYgKzcwLDcgQEAKIEkyQ19DTElFTlRfSU5TTU9EOwogCiBzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXY0bDJfc3RkX2lkIHN0ZDsKIAlpbnQgaW5wdXQ7CiAJaW50IG91dHB1dDsKQEAgLTg5LDEwICs5MCwxNyBAQAogCXU4IGFwbGw7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTF4X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE3MTF4X3N0YXRlLCBzZCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMXhfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMXhfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCkBAIC0xMjgsOSArMTM2LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X3dyaXRlcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZWdzKQorc3RhdGljIGludCBzYWE3MTF4X3dyaXRlcmVncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpyZWdzKQogewotCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAl1bnNpZ25lZCBjaGFyIHJlZywgZGF0YTsKIAogCXdoaWxlICgqcmVncyAhPSAweDAwKSB7CkBAIC0xMzksMTggKzE0NywyMCBAQAogCiAJCS8qIEFjY29yZGluZyB3aXRoIGRhdGFzaGVldHMsIHJlc2VydmVkIHJlZ3Mgc2hvdWxkIGJlCiAJCSAgIGZpbGxlZCB3aXRoIDAgLSBzZWVtcyBiZXR0ZXIgbm90IHRvIHRvdWNoIG9uIHRoZXkgKi8KLQkJaWYgKHNhYTcxMXhfaGFzX3JlZyhzdGF0ZS0+aWRlbnQscmVnKSkgewotCQkJaWYgKHNhYTcxMXhfd3JpdGUoY2xpZW50LCByZWcsIGRhdGEpIDwgMCkKKwkJaWYgKHNhYTcxMXhfaGFzX3JlZyhzdGF0ZS0+aWRlbnQsIHJlZykpIHsKKwkJCWlmIChzYWE3MTF4X3dyaXRlKHNkLCByZWcsIGRhdGEpIDwgMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ0cmllZCB0byBhY2Nlc3MgcmVzZXJ2ZWQgcmVnIDB4JTAyeFxuIiwgcmVnKTsKKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRyaWVkIHRvIGFjY2VzcyByZXNlcnZlZCByZWcgMHglMDJ4XG4iLCByZWcpOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTF4X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExeF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIApAQCAtNjAxLDcgKzYxMSw3IEBACiAJcmV0dXJuIGMgJiAxOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMXhfZGVjb2RlX3Zwcyh1OCAqIGRzdCwgdTggKiBwKQorc3RhdGljIGludCBzYWE3MTF4X2RlY29kZV92cHModTggKmRzdCwgdTggKnApCiB7CiAJc3RhdGljIGNvbnN0IHU4IGJpcGhhc2VfdGJsW10gPSB7CiAJCTB4ZjAsIDB4NzgsIDB4NzAsIDB4ZjAsIDB4YjQsIDB4M2MsIDB4MzQsIDB4YjQsCkBAIC02NDgsNyArNjU4LDcgQEAKIAlyZXR1cm4gZXJyICYgMHhmMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X2RlY29kZV93c3ModTggKiBwKQorc3RhdGljIGludCBzYWE3MTF4X2RlY29kZV93c3ModTggKnApCiB7CiAJc3RhdGljIGNvbnN0IGludCB3c3NfYml0c1s4XSA9IHsKIAkJMCwgMCwgMCwgMSwgMCwgMSwgMSwgMQpAQCAtNjc1LDkgKzY4NSw5IEBACiAJcmV0dXJuIHdzczsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X3NldF9hdWRpb19jbG9ja19mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiBmcmVxKQorc3RhdGljIGludCBzYWE3MTF4X3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKIHsKLQlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdTMyIGFjcGY7CiAJdTMyIGFjbmk7CiAJdTMyIGh6OwpAQCAtNjg1LDEwICs2OTUsMTAgQEAKIAl1OCBhY2MgPSAwOyAJLyogcmVnIDB4M2EsIGF1ZGlvIGNsb2NrIGNvbnRyb2wgKi8KIAogCS8qIENoZWNrcyBmb3IgY2hpcHMgdGhhdCBkb24ndCBoYXZlIGF1ZGlvIGNsb2NrIChzYWE3MTExLCBzYWE3MTEzKSAqLwotCWlmICghc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCxSXzMwX0FVRF9NQVNUX0NMS19DWUNMRVNfUEVSX0ZJRUxEKSkKKwlpZiAoIXNhYTcxMXhfaGFzX3JlZyhzdGF0ZS0+aWRlbnQsIFJfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQpKQogCQlyZXR1cm4gMDsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBhdWRpbyBjbG9jayBmcmVxOiAlZFxuIiwgZnJlcSk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGF1ZGlvIGNsb2NrIGZyZXE6ICVkXG4iLCBmcmVxKTsKIAogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChmcmVxIDwgMzIwMDAgfHwgZnJlcSA+IDQ4MDAwKQpAQCAtNzE1LDY2ICs3MjUsNjYgQEAKIAlpZiAoc3RhdGUtPmFwbGwpCiAJCWFjYyB8PSAweDA4OwogCi0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzhfQ0xLX1JBVElPX0FNWENMS19UT19BU0NMSywgMHgwMyk7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzlfQ0xLX1JBVElPX0FTQ0xLX1RPX0FMUkNMSywgMHgxMCk7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfM0FfQVVEX0NMS19HRU5fQkFTSUNfU0VUVVAsIGFjYyk7CisJc2FhNzExeF93cml0ZShzZCwgUl8zOF9DTEtfUkFUSU9fQU1YQ0xLX1RPX0FTQ0xLLCAweDAzKTsKKwlzYWE3MTF4X3dyaXRlKHNkLCBSXzM5X0NMS19SQVRJT19BU0NMS19UT19BTFJDTEssIDB4MTApOworCXNhYTcxMXhfd3JpdGUoc2QsIFJfM0FfQVVEX0NMS19HRU5fQkFTSUNfU0VUVVAsIGFjYyk7CiAKLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zMF9BVURfTUFTVF9DTEtfQ1lDTEVTX1BFUl9GSUVMRCwgYWNwZiAmIDB4ZmYpOwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzMwX0FVRF9NQVNUX0NMS19DWUNMRVNfUEVSX0ZJRUxEKzEsCisJc2FhNzExeF93cml0ZShzZCwgUl8zMF9BVURfTUFTVF9DTEtfQ1lDTEVTX1BFUl9GSUVMRCwgYWNwZiAmIDB4ZmYpOworCXNhYTcxMXhfd3JpdGUoc2QsIFJfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQrMSwKIAkJCQkJCQkoYWNwZiA+PiA4KSAmIDB4ZmYpOwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzMwX0FVRF9NQVNUX0NMS19DWUNMRVNfUEVSX0ZJRUxEKzIsCisJc2FhNzExeF93cml0ZShzZCwgUl8zMF9BVURfTUFTVF9DTEtfQ1lDTEVTX1BFUl9GSUVMRCsyLAogCQkJCQkJCShhY3BmID4+IDE2KSAmIDB4MDMpOwogCi0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DLCBhY25pICYgMHhmZik7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DKzEsIChhY25pID4+IDgpICYgMHhmZik7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DKzIsIChhY25pID4+IDE2KSAmIDB4M2YpOworCXNhYTcxMXhfd3JpdGUoc2QsIFJfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DLCBhY25pICYgMHhmZik7CisJc2FhNzExeF93cml0ZShzZCwgUl8zNF9BVURfTUFTVF9DTEtfTk9NSU5BTF9JTkMrMSwgKGFjbmkgPj4gOCkgJiAweGZmKTsKKwlzYWE3MTF4X3dyaXRlKHNkLCBSXzM0X0FVRF9NQVNUX0NMS19OT01JTkFMX0lOQysyLCAoYWNuaSA+PiAxNikgJiAweDNmKTsKIAlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSBmcmVxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMXhfc2V0X3Y0bGN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc2FhNzExeF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CisJCQl2NGwyX2VycihzZCwgImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCiAJCXN0YXRlLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMEFfTFVNQV9CUklHSFRfQ05UTCwgc3RhdGUtPmJyaWdodCk7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMEFfTFVNQV9CUklHSFRfQ05UTCwgc3RhdGUtPmJyaWdodCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCiAJCXN0YXRlLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wQl9MVU1BX0NPTlRSQVNUX0NOVEwsIHN0YXRlLT5jb250cmFzdCk7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMEJfTFVNQV9DT05UUkFTVF9DTlRMLCBzdGF0ZS0+Y29udHJhc3QpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOworCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIAogCQlzdGF0ZS0+c2F0ID0gY3RybC0+dmFsdWU7Ci0JCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzBDX0NIUk9NQV9TQVRfQ05UTCwgc3RhdGUtPnNhdCk7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMENfQ0hST01BX1NBVF9DTlRMLCBzdGF0ZS0+c2F0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CisJCQl2NGwyX2VycihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKIAkJc3RhdGUtPmh1ZSA9IGN0cmwtPnZhbHVlOwotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wRF9DSFJPTUFfSFVFX0NOVEwsIHN0YXRlLT5odWUpOworCQlzYWE3MTF4X3dyaXRlKHNkLCBSXzBEX0NIUk9NQV9IVUVfQ05UTCwgc3RhdGUtPmh1ZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTc4NCw5ICs3OTQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMXhfZ2V0X3Y0bGN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc2FhNzExeF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtODA4LDE2ICs4MTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X3NldF9zaXplKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBpbnQgc2FhNzExeF9zZXRfc2l6ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0Jc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCBIUFNDLCBIRlNDOwogCWludCBWU0NZOwogCWludCByZXM7CiAJaW50IGlzXzUwaHogPSBzdGF0ZS0+c3RkICYgVjRMMl9TVERfNjI1XzUwOwogCWludCBWc3JjID0gaXNfNTBoeiA/IDU3NiA6IDQ4MDsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHNpemUgdG8gJWl4JWlcbiIsd2lkdGgsaGVpZ2h0KTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyIHNldCBzaXplIHRvICVpeCVpXG4iLCB3aWR0aCwgaGVpZ2h0KTsKIAogCS8qIEZJWE1FIG5lZWQgYmV0dGVyIGJvdW5kcyBjaGVja2luZyBoZXJlICovCiAJaWYgKCh3aWR0aCA8IDEpIHx8ICh3aWR0aCA+IDE0NDApKQpAQCAtODI1LDcgKzgzNSw3IEBACiAJaWYgKChoZWlnaHQgPCAxKSB8fCAoaGVpZ2h0ID4gVnNyYykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LFJfRDBfQl9IT1JJWl9QUkVTQ0FMSU5HKSkgeworCWlmICghc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCwgUl9EMF9CX0hPUklaX1BSRVNDQUxJTkcpKSB7CiAJCS8qIERlY29kZXIgb25seSBzdXBwb3J0cyA3MjAgY29sdW1ucyBhbmQgNDgwIG9yIDU3NiBsaW5lcyAqLwogCQlpZiAod2lkdGggIT0gNzIwKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NDMsMjIgKzg1MywyMiBAQAogCS8qIFNldCBvdXRwdXQgd2lkdGgvaGVpZ2h0ICovCiAJLyogd2lkdGggKi8KIAotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0NDX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEgsCisJc2FhNzExeF93cml0ZShzZCwgUl9DQ19CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RILAogCQkJCQkodTgpICh3aWR0aCAmIDB4ZmYpKTsKLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9DRF9CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0NEX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEhfTVNCLAogCQkJCQkodTgpICgod2lkdGggPj4gOCkgJiAweGZmKSk7CiAKIAkvKiBWZXJ0aWNhbCBTY2FsaW5nIHVzZXMgaGVpZ2h0LzIgKi8KLQlyZXM9aGVpZ2h0LzI7CisJcmVzID0gaGVpZ2h0IC8gMjsKIAogCS8qIE9uIDYwSHosIGl0IGlzIHVzaW5nIGEgaGlnaGVyIFZlcnRpY2FsIE91dHB1dCBTaXplICovCiAJaWYgKCFpc181MGh6KQogCQlyZXMgKz0gKFZSRVNfNjBIWiAtIDQ4MCkgPj4gMTsKIAogCQkvKiBoZWlnaHQgKi8KLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9DRV9CX1ZFUlRfT1VUUFVUX1dJTkRPV19MRU5HVEgsCisJc2FhNzExeF93cml0ZShzZCwgUl9DRV9CX1ZFUlRfT1VUUFVUX1dJTkRPV19MRU5HVEgsCiAJCQkJCSh1OCkgKHJlcyAmIDB4ZmYpKTsKLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9DRl9CX1ZFUlRfT1VUUFVUX1dJTkRPV19MRU5HVEhfTVNCLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfQ0ZfQl9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwKIAkJCQkJKHU4KSAoKHJlcyA+PiA4KSAmIDB4ZmYpKTsKIAogCS8qIFNjYWxpbmcgc2V0dGluZ3MgKi8KQEAgLTg2OSw1NCArODc5LDU0IEBACiAJSEZTQyA9IChpbnQpKCgxMDI0ICogNzIwKSAvIChIUFNDICogd2lkdGgpKTsKIAkvKiBGSVhNRSBoYXJkY29kZXMgdG8gIlRhc2sgQiIKIAkgKiB3cml0ZSBIIHByZXNjYWxlciBpbnRlZ2VyICovCi0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfRDBfQl9IT1JJWl9QUkVTQ0FMSU5HLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfRDBfQl9IT1JJWl9QUkVTQ0FMSU5HLAogCQkJCSh1OCkgKEhQU0MgJiAweDNmKSk7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJIcHNjOiAweCUwNXgsIEhmc2M6IDB4JTA1eFxuIiwgSFBTQywgSEZTQyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiSHBzYzogMHglMDV4LCBIZnNjOiAweCUwNXhcbiIsIEhQU0MsIEhGU0MpOwogCS8qIHdyaXRlIEggZmluZS1zY2FsaW5nIChsdW1pbmFuY2UpICovCi0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfRDhfQl9IT1JJWl9MVU1BX1NDQUxJTkdfSU5DLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfRDhfQl9IT1JJWl9MVU1BX1NDQUxJTkdfSU5DLAogCQkJCSh1OCkgKEhGU0MgJiAweGZmKSk7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfRDlfQl9IT1JJWl9MVU1BX1NDQUxJTkdfSU5DX01TQiwKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0Q5X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQ19NU0IsCiAJCQkJKHU4KSAoKEhGU0MgPj4gOCkgJiAweGZmKSk7CiAJLyogd3JpdGUgSCBmaW5lLXNjYWxpbmcgKGNocm9taW5hbmNlKQogCSAqIG11c3QgYmUgbHVtLzIsIHNvIGknbGwganVzdCBiaXRzaGlmdCA6KSAqLwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0RDX0JfSE9SSVpfQ0hST01BX1NDQUxJTkcsCisJc2FhNzExeF93cml0ZShzZCwgUl9EQ19CX0hPUklaX0NIUk9NQV9TQ0FMSU5HLAogCQkJCSh1OCkgKChIRlNDID4+IDEpICYgMHhmZikpOwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0REX0JfSE9SSVpfQ0hST01BX1NDQUxJTkdfTVNCLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfRERfQl9IT1JJWl9DSFJPTUFfU0NBTElOR19NU0IsCiAJCQkJKHU4KSAoKEhGU0MgPj4gOSkgJiAweGZmKSk7CiAKIAlWU0NZID0gKGludCkoKDEwMjQgKiBWc3JjKSAvIGhlaWdodCk7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVnNyYzogJWQsIFZzY3k6IDB4JTA1eFxuIiwgVnNyYywgVlNDWSk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVnNyYzogJWQsIFZzY3k6IDB4JTA1eFxuIiwgVnNyYywgVlNDWSk7CiAKIAkvKiBDb3JyZWN0IENvbnRyYXN0IGFuZCBMdW1pbmFuY2UgKi8KLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9ENV9CX0xVTUFfQ09OVFJBU1RfQ05UTCwKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0Q1X0JfTFVNQV9DT05UUkFTVF9DTlRMLAogCQkJCQkodTgpICg2NCAqIDEwMjQgLyBWU0NZKSk7Ci0Jc2FhNzExeF93cml0ZShjbGllbnQsIFJfRDZfQl9DSFJPTUFfU0FUVVJBVElPTl9DTlRMLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfRDZfQl9DSFJPTUFfU0FUVVJBVElPTl9DTlRMLAogCQkJCQkodTgpICg2NCAqIDEwMjQgLyBWU0NZKSk7CiAKIAkJLyogd3JpdGUgViBmaW5lLXNjYWxpbmcgKGx1bWluYW5jZSkgKi8KLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9FMF9CX1ZFUlRfTFVNQV9TQ0FMSU5HX0lOQywKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0UwX0JfVkVSVF9MVU1BX1NDQUxJTkdfSU5DLAogCQkJCQkodTgpIChWU0NZICYgMHhmZikpOwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0UxX0JfVkVSVF9MVU1BX1NDQUxJTkdfSU5DX01TQiwKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0UxX0JfVkVSVF9MVU1BX1NDQUxJTkdfSU5DX01TQiwKIAkJCQkJKHU4KSAoKFZTQ1kgPj4gOCkgJiAweGZmKSk7CiAJCS8qIHdyaXRlIFYgZmluZS1zY2FsaW5nIChjaHJvbWluYW5jZSkgKi8KLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9FMl9CX1ZFUlRfQ0hST01BX1NDQUxJTkdfSU5DLAorCXNhYTcxMXhfd3JpdGUoc2QsIFJfRTJfQl9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQywKIAkJCQkJKHU4KSAoVlNDWSAmIDB4ZmYpKTsKLQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9FM19CX1ZFUlRfQ0hST01BX1NDQUxJTkdfSU5DX01TQiwKKwlzYWE3MTF4X3dyaXRlKHNkLCBSX0UzX0JfVkVSVF9DSFJPTUFfU0NBTElOR19JTkNfTVNCLAogCQkJCQkodTgpICgoVlNDWSA+PiA4KSAmIDB4ZmYpKTsKIAotCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKKwlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKIAogCS8qIEFjdGl2YXRlcyB0YXNrICJCIiAqLwotCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzgwX0dMT0JBTF9DTlRMXzEsCi0JCQkJc2FhNzExeF9yZWFkKGNsaWVudCxSXzgwX0dMT0JBTF9DTlRMXzEpIHwgMHgyMCk7CisJc2FhNzExeF93cml0ZShzZCwgUl84MF9HTE9CQUxfQ05UTF8xLAorCQkJCXNhYTcxMXhfcmVhZChzZCwgUl84MF9HTE9CQUxfQ05UTF8xKSB8IDB4MjApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTcxMXhfc2V0X3Y0bHN0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB2NGwyX3N0ZF9pZCBzdGQpCitzdGF0aWMgdm9pZCBzYWE3MTF4X3NldF92NGxzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQogewotCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAogCS8qIFByZXZlbnQgdW5uZWNlc3Nhcnkgc3RhbmRhcmQgY2hhbmdlcy4gRHVyaW5nIGEgc3RhbmRhcmQKIAkgICBjaGFuZ2UgdGhlIEktUG9ydCBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZC4gQW55IGRldmljZXMKQEAgLTkzMiwxMyArOTQyLDEzIEBACiAKIAkvLyBUaGlzIHdvcmtzIGZvciBOVFNDLU0sIFNFQ0FNLUwgYW5kIHRoZSA1MEh6IFBBTCB2YXJpYW50cy4KIAlpZiAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHN0YW5kYXJkIDYwIEh6XG4iKTsKLQkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ182MGh6X3ZpZGVvKTsKLQkJc2FhNzExeF9zZXRfc2l6ZShjbGllbnQsIDcyMCwgNDgwKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGVjb2RlciBzZXQgc3RhbmRhcmQgNjAgSHpcbiIpOworCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9jZmdfNjBoel92aWRlbyk7CisJCXNhYTcxMXhfc2V0X3NpemUoc2QsIDcyMCwgNDgwKTsKIAl9IGVsc2UgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJkZWNvZGVyIHNldCBzdGFuZGFyZCA1MCBIelxuIik7Ci0JCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel92aWRlbyk7Ci0JCXNhYTcxMXhfc2V0X3NpemUoY2xpZW50LCA3MjAsIDU3Nik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImRlY29kZXIgc2V0IHN0YW5kYXJkIDUwIEh6XG4iKTsKKwkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfY2ZnXzUwaHpfdmlkZW8pOworCQlzYWE3MTF4X3NldF9zaXplKHNkLCA3MjAsIDU3Nik7CiAJfQogCiAJLyogUmVnaXN0ZXIgMEUgLSBCaXRzIEQ2LUQ0IG9uIE5PLUFVVE8gbW9kZQpAQCAtOTUyLDcgKzk2Miw3IEBACiAJKi8KIAlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSB8fAogCSAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzKSB7Ci0JCXU4IHJlZyA9IHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMEVfQ0hST01BX0NOVExfMSkgJiAweDhmOworCQl1OCByZWcgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMEVfQ0hST01BX0NOVExfMSkgJiAweDhmOwogCiAJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKIAkJCXJlZyB8PSAweDMwOwpAQCAtOTY1LDg3ICs5NzUsMzEgQEAKIAkJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgewogCQkJcmVnIHw9IDB4NTA7CiAJCX0KLQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMEVfQ0hST01BX0NOVExfMSwgcmVnKTsKKwkJc2FhNzExeF93cml0ZShzZCwgUl8wRV9DSFJPTUFfQ05UTF8xLCByZWcpOwogCX0gZWxzZSB7CiAJCS8qIHJlc3RhcnQgdGFzayBCIGlmIG5lZWRlZCAqLwotCQlpbnQgdGFza2IgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzgwX0dMT0JBTF9DTlRMXzEpICYgMHgxMDsKKwkJaW50IHRhc2tiID0gc2FhNzExeF9yZWFkKHNkLCBSXzgwX0dMT0JBTF9DTlRMXzEpICYgMHgxMDsKIAogCQlpZiAodGFza2IgJiYgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCkgewotCQkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ192Ymlfb24pOworCQkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfY2ZnX3ZiaV9vbik7CiAJCX0KIAogCQkvKiBzd2l0Y2ggYXVkaW8gbW9kZSB0b28hICovCi0JCXNhYTcxMXhfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOworCQlzYWE3MTF4X3NfY2xvY2tfZnJlcShzZCwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKIAl9CiB9CiAKLXN0YXRpYyB2NGwyX3N0ZF9pZCBzYWE3MTF4X2dldF92NGxzdGQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXJldHVybiBzdGF0ZS0+c3RkOwotfQotCi1zdGF0aWMgdm9pZCBzYWE3MTF4X2xvZ19zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgcmVnMWUsIHJlZzFmOwotCWludCBzaWduYWxPazsKLQlpbnQgdmNyOwotCi0JdjRsX2luZm8oY2xpZW50LCAiQXVkaW8gZnJlcXVlbmN5OiAlZCBIelxuIiwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkgewotCQkvKiBzdGF0dXMgZm9yIHRoZSBzYWE3MTE0ICovCi0JCXJlZzFmID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRl9TVEFUVVNfQllURV8yX1ZEX0RFQyk7Ci0JCXNpZ25hbE9rID0gKHJlZzFmICYgMHhjMSkgPT0gMHg4MTsKLQkJdjRsX2luZm8oY2xpZW50LCAiVmlkZW8gc2lnbmFsOiAgICAlc1xuIiwgc2lnbmFsT2sgPyAib2siIDogImJhZCIpOwotCQl2NGxfaW5mbyhjbGllbnQsICJGcmVxdWVuY3k6ICAgICAgICVzXG4iLCAocmVnMWYgJiAweDIwKSA/ICI2MCBIeiIgOiAiNTAgSHoiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHN0YXR1cyBmb3IgdGhlIHNhYTcxMTUgKi8KLQlyZWcxZSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMUVfU1RBVFVTX0JZVEVfMV9WRF9ERUMpOwotCXJlZzFmID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRl9TVEFUVVNfQllURV8yX1ZEX0RFQyk7Ci0KLQlzaWduYWxPayA9IChyZWcxZiAmIDB4YzEpID09IDB4ODEgJiYgKHJlZzFlICYgMHhjMCkgPT0gMHg4MDsKLQl2Y3IgPSAhKHJlZzFmICYgMHgxMCk7Ci0KLQlpZiAoc3RhdGUtPmlucHV0ID49IDYpIHsKLQkJdjRsX2luZm8oY2xpZW50LCAiSW5wdXQ6ICAgICAgICAgICBTLVZpZGVvICVkXG4iLCBzdGF0ZS0+aW5wdXQgLSA2KTsKLQl9IGVsc2UgewotCQl2NGxfaW5mbyhjbGllbnQsICJJbnB1dDogICAgICAgICAgIENvbXBvc2l0ZSAlZFxuIiwgc3RhdGUtPmlucHV0KTsKLQl9Ci0JdjRsX2luZm8oY2xpZW50LCAiVmlkZW8gc2lnbmFsOiAgICAlc1xuIiwgc2lnbmFsT2sgPyAodmNyID8gIlZDUiIgOiAiYnJvYWRjYXN0L0RWRCIpIDogImJhZCIpOwotCXY0bF9pbmZvKGNsaWVudCwgIkZyZXF1ZW5jeTogICAgICAgJXNcbiIsIChyZWcxZiAmIDB4MjApID8gIjYwIEh6IiA6ICI1MCBIeiIpOwotCi0Jc3dpdGNoIChyZWcxZSAmIDB4MDMpIHsKLQkJY2FzZSAxOgotCQkJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgZm9ybWF0OiBOVFNDXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQl2NGxfaW5mbyhjbGllbnQsICJEZXRlY3RlZCBmb3JtYXQ6IFBBTFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgZm9ybWF0OiBTRUNBTVxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXY0bF9pbmZvKGNsaWVudCwgIkRldGVjdGVkIGZvcm1hdDogQlcvTm8gY29sb3JcbiIpOwotCQkJYnJlYWs7Ci0JfQotCXY0bF9pbmZvKGNsaWVudCwgIldpZHRoLCBIZWlnaHQ6ICAgJWQsICVkXG4iLCBzdGF0ZS0+d2lkdGgsIHN0YXRlLT5oZWlnaHQpOwotfQotCiAvKiBzZXR1cCB0aGUgc2xpY2VkIFZCSSBsY3IgcmVnaXN0ZXJzIGFjY29yZGluZyB0byB0aGUgc2xpY2VkIFZCSSBmb3JtYXQgKi8KLXN0YXRpYyB2b2lkIHNhYTcxMXhfc2V0X2xjcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10KQorc3RhdGljIHZvaWQgc2FhNzExeF9zZXRfbGNyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCBpc181MGh6ID0gKHN0YXRlLT5zdGQgJiBWNEwyX1NURF82MjVfNTApOwogCXU4IGxjclsyNF07CiAJaW50IGksIHg7CiAKICNpZiAxCiAJLyogc2FhNzExMy83MTE0LzcxMTggVkJJIHN1cHBvcnQgYXJlIGV4cGVyaW1lbnRhbCAqLwotCWlmICghc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCxSXzQxX0xDUl9CQVNFKSkKKwlpZiAoIXNhYTcxMXhfaGFzX3JlZyhzdGF0ZS0+aWRlbnQsIFJfNDFfTENSX0JBU0UpKQogCQlyZXR1cm47CiAKICNlbHNlCkBAIC0xMTA5LDE2ICsxMDYzLDE2IEBACiAKIAkvKiB3cml0ZSB0aGUgbGNyIHJlZ2lzdGVycyAqLwogCWZvciAoaSA9IDI7IGkgPD0gMjM7IGkrKykgewotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgaSAtIDIgKyBSXzQxX0xDUl9CQVNFLCBsY3JbaV0pOworCQlzYWE3MTF4X3dyaXRlKHNkLCBpIC0gMiArIFJfNDFfTENSX0JBU0UsIGxjcltpXSk7CiAJfQogCiAJLyogZW5hYmxlL2Rpc2FibGUgcmF3IFZCSSBjYXB0dXJpbmcgKi8KLQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIGZtdCA9PSBOVUxMID8KKwlzYWE3MTF4X3dyaXRlcmVncyhzZCwgZm10ID09IE5VTEwgPwogCQkJCXNhYTcxMTVfY2ZnX3ZiaV9vbiA6CiAJCQkJc2FhNzExNV9jZmdfdmJpX29mZik7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzExeF9nZXRfdjRsZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBzYWE3MTF4X2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewogCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCkBAIC0xMTM0LDEwICsxMDg4LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCW1lbXNldChzbGljZWQsIDAsIHNpemVvZigqc2xpY2VkKSk7CiAJLyogZG9uZSBpZiB1c2luZyByYXcgVkJJICovCi0JaWYgKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfODBfR0xPQkFMX0NOVExfMSkgJiAweDEwKQorCWlmIChzYWE3MTF4X3JlYWQoc2QsIFJfODBfR0xPQkFMX0NOVExfMSkgJiAweDEwKQogCQlyZXR1cm4gMDsKIAlmb3IgKGkgPSAyOyBpIDw9IDIzOyBpKyspIHsKLQkJdTggdiA9IHNhYTcxMXhfcmVhZChjbGllbnQsIGkgLSAyICsgUl80MV9MQ1JfQkFTRSk7CisJCXU4IHYgPSBzYWE3MTF4X3JlYWQoc2QsIGkgLSAyICsgUl80MV9MQ1JfQkFTRSk7CiAKIAkJc2xpY2VkLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOwogCQlzbGljZWQtPnNlcnZpY2VfbGluZXNbMV1baV0gPSBsY3IydmJpW3YgJiAweGZdOwpAQCAtMTE0NywyMCArMTEwMSwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMXhfc2V0X3Y0bGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgc2FhNzExeF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7Ci0JCXNhYTcxMXhfc2V0X2xjcihjbGllbnQsICZmbXQtPmZtdC5zbGljZWQpOworCQlzYWE3MTF4X3NldF9sY3Ioc2QsICZmbXQtPmZtdC5zbGljZWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCXNhYTcxMXhfc2V0X2xjcihjbGllbnQsIE5VTEwpOworCQlzYWE3MTF4X3NldF9sY3Ioc2QsIE5VTEwpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHNhYTcxMXhfc2V0X3NpemUoY2xpZW50LGZtdC0+Zm10LnBpeC53aWR0aCxmbXQtPmZtdC5waXguaGVpZ2h0KTsKKwlyZXR1cm4gc2FhNzExeF9zZXRfc2l6ZShzZCwgZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0KTsKIH0KIAogLyogRGVjb2RlIHRoZSBzbGljZWQgVkJJIGRhdGEgc3RyZWFtIGFzIGNyZWF0ZWQgYnkgdGhlIHNhYTcxMTUuCkBAIC0xMTY5LDEzICsxMTIzLDEyIEBACiAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIFNBVi9FQVYgY29kZXMgYW5kIG5vdCB0aGUgYW5jaWxsYXJ5IGRhdGEKICAgIGhlYWRlcnMuIFRoZSB2YmktPnAgcG9pbnRlciBwb2ludHMgdG8gdGhlIFJfNUVfU0RJRCBieXRlIHJpZ2h0IGFmdGVyIHRoZSBTQVYKICAgIGNvZGUuICovCi1zdGF0aWMgdm9pZCBzYWE3MTF4X2RlY29kZV92YmlfbGluZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKK3N0YXRpYyBpbnQgc2FhNzExeF9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpCiB7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0YXRpYyBjb25zdCBjaGFyIHZiaV9ub19kYXRhX3BhdHRlcm5bXSA9IHsKIAkJMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMAogCX07Ci0Jc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTggKnAgPSB2YmktPnA7CiAJdTMyIHdzczsKIAlpbnQgaWQxLCBpZDI7ICAgLyogdGhlIElEMSBhbmQgSUQyIGJ5dGVzIGZyb20gdGhlIGludGVybmFsIGhlYWRlciAqLwpAQCAtMTIwMiw3ICsxMTU1LDcgQEAKIAkvKiBJZiB0aGUgVkJJIHNsaWNlciBkb2VzIG5vdCBkZXRlY3QgYW55IHNpZ25hbCBpdCB3aWxsIGZpbGwgdXAKIAkgICB0aGUgcGF5bG9hZCBidWZmZXIgd2l0aCAweGEwIGJ5dGVzLiAqLwogCWlmICghbWVtY21wKHAsIHZiaV9ub19kYXRhX3BhdHRlcm4sIHNpemVvZih2Ymlfbm9fZGF0YV9wYXR0ZXJuKSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAkvKiBkZWNvZGUgcGF5bG9hZHMgKi8KIAlzd2l0Y2ggKGlkMikgewpAQCAtMTIxMSwyNzUgKzExNjQsMzUyIEBACiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJaWYgKCFzYWE3MTF4X29kZF9wYXJpdHkocFswXSkgfHwgIXNhYTcxMXhfb2RkX3Bhcml0eShwWzFdKSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKIAkJYnJlYWs7CiAJY2FzZSA1OgogCQl3c3MgPSBzYWE3MTF4X2RlY29kZV93c3MocCk7CiAJCWlmICh3c3MgPT0gLTEpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJcFswXSA9IHdzcyAmIDB4ZmY7CiAJCXBbMV0gPSB3c3MgPj4gODsKIAkJdmJpLT50eXBlID0gVjRMMl9TTElDRURfV1NTXzYyNTsKIAkJYnJlYWs7CiAJY2FzZSA3OgogCQlpZiAoc2FhNzExeF9kZWNvZGVfdnBzKHAsIHApICE9IDApCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJdmJpLT50eXBlID0gVjRMMl9TTElDRURfVlBTOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm47CisJCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogPT09PT09PT09PT09IFNBQTcxMTUgQVVESU8gc2V0dGluZ3MgKGVuZCkgPT09PT09PT09PT09PSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMTVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHNhYTcxMXhfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCiB7Ci0Jc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCBzdGF0dXM7CiAKLQkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzcyB0byB0aGUgc2FhNzExNSByZWdpc3RlcnMgZm9yIHRlc3RpbmcgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1NfRk1UOgotCQlyZXR1cm4gc2FhNzExeF9zZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CisJaWYgKHN0YXRlLT5yYWRpbykKKwkJcmV0dXJuIDA7CisJc3RhdHVzID0gc2FhNzExeF9yZWFkKHNkLCBSXzFGX1NUQVRVU19CWVRFXzJfVkRfREVDKTsKIAotCWNhc2UgVklESU9DX0dfRk1UOgotCQlyZXR1cm4gc2FhNzExeF9nZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7CisJdnQtPnNpZ25hbCA9ICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApID8gMHhmZmZmIDogMHgwOworCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JCXJldHVybiBzYWE3MTF4X3NldF9hdWRpb19jbG9ja19mcmVxKGNsaWVudCwgKih1MzIgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0JCXN0YXR1cyA9IHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwotCQl2dC0+c2lnbmFsID0gKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgPyAweGZmZmYgOiAweDA7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXNhYTcxMXhfbG9nX3N0YXR1cyhjbGllbnQpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIHNhYTcxMXhfZ2V0X3Y0bGN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBzYWE3MTF4X3NldF92NGxjdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQotCQlzd2l0Y2ggKHFjLT5pZCkgewotCQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWNhc2UgVklESU9DX0dfU1REOgotCQkqKHY0bDJfc3RkX2lkICopYXJnID0gc2FhNzExeF9nZXRfdjRsc3RkKGNsaWVudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCXN0YXRlLT5yYWRpbyA9IDA7Ci0JCXNhYTcxMXhfc2V0X3Y0bHN0ZChjbGllbnQsICoodjRsMl9zdGRfaWQgKilhcmcpOwotCQlicmVhazsKLQotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCXN0YXRlLT5yYWRpbyA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCi0JCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5pbnB1dDsKLQkJcm91dGUtPm91dHB1dCA9IHN0YXRlLT5vdXRwdXQ7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKLQkJdTMyIGlucHV0ID0gcm91dGUtPmlucHV0OwotCQl1OCBtYXNrID0gKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpID8gMHhmOCA6IDB4ZjA7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGVjb2RlciBzZXQgaW5wdXQgJWQgb3V0cHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQsIHJvdXRlLT5vdXRwdXQpOwotCQkvKiBzYWE3MTExLzMgZG9lcyBub3QgaGF2ZSB0aGVzZSBpbnB1dHMgKi8KLQkJaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8Ci0JCSAgICAgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgJiYKLQkJICAgIChyb3V0ZS0+aW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU0IHx8Ci0JCSAgICAgcm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyb3V0ZS0+aW5wdXQgPiBTQUE3MTE1X1NWSURFTzMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHJvdXRlLT5vdXRwdXQgPiBTQUE3MTE1X0lQT1JUX09OKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChzdGF0ZS0+aW5wdXQgPT0gcm91dGUtPmlucHV0ICYmIHN0YXRlLT5vdXRwdXQgPT0gcm91dGUtPm91dHB1dCkKLQkJCWJyZWFrOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dCAlcyBvdXRwdXRcbiIsCi0JCQkocm91dGUtPmlucHV0ID49IFNBQTcxMTVfU1ZJREVPMCkgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIiwgKHJvdXRlLT5vdXRwdXQgPT0gU0FBNzExNV9JUE9SVF9PTikgPyAiaXBvcnQgb24iIDogImlwb3J0IG9mZiIpOwotCQlzdGF0ZS0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7Ci0KLQkJLyogc2FhNzExMSBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IGlucHV0IG51bWJlcmluZyAqLwotCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgewotCQkJaWYgKGlucHV0ID49IFNBQTcxMTVfQ09NUE9TSVRFNCkKLQkJCQlpbnB1dCAtPSAyOwotCQkJLyogc2FhNzExMSBzcGVjaWZpYyAqLwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMTBfQ0hST01BX0NOVExfMiwKLQkJCQkJKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMTBfQ0hST01BX0NOVExfMikgJiAweDNmKSB8Ci0JCQkJCSgocm91dGUtPm91dHB1dCAmIDB4YzApIF4gMHg0MCkpOwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMTNfUlRfWF9QT1JUX09VVF9DTlRMLAotCQkJCQkoc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xM19SVF9YX1BPUlRfT1VUX0NOVEwpICYgMHhmMCkgfAotCQkJCQkoKHJvdXRlLT5vdXRwdXQgJiAyKSA/IDB4MGEgOiAwKSk7Ci0JCX0KLQotCQkvKiBzZWxlY3QgbW9kZSAqLwotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wMl9JTlBVVF9DTlRMXzEsCi0JCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl8wMl9JTlBVVF9DTlRMXzEpICYgbWFzaykgfAotCQkJICAgICAgIGlucHV0KTsKLQotCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgUy1WaWRlbyBtb2RlcyAqLwotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wOV9MVU1BX0NOVEwsCi0JCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl8wOV9MVU1BX0NOVEwpICYgMHg3ZikgfAotCQkJICAgICAgIChzdGF0ZS0+aW5wdXQgPj0gU0FBNzExNV9TVklERU8wID8gMHg4MCA6IDB4MCkpOwotCi0JCXN0YXRlLT5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OwotCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCB8fAotCQkJc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNSkgewotCQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfODNfWF9QT1JUX0lfT19FTkFfQU5EX09VVF9DTEssCi0JCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl84M19YX1BPUlRfSV9PX0VOQV9BTkRfT1VUX0NMSykgJiAweGZlKSB8Ci0JCQkgICAgICAgKHN0YXRlLT5vdXRwdXQgJiAweDAxKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCi0JCQkoY21kID09IFZJRElPQ19TVFJFQU1PTikgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7Ci0KLQkJaWYgKHN0YXRlLT5lbmFibGUgIT0gKGNtZCA9PSBWSURJT0NfU1RSRUFNT04pKSB7Ci0JCQlzdGF0ZS0+ZW5hYmxlID0gKGNtZCA9PSBWSURJT0NfU1RSRUFNT04pOwotCQkJc2FhNzExeF93cml0ZShjbGllbnQsCi0JCQkJUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwKLQkJCQlzdGF0ZS0+ZW5hYmxlKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9TX0NSWVNUQUxfRlJFUToKLQl7Ci0JCXN0cnVjdCB2NGwyX2NyeXN0YWxfZnJlcSAqZnJlcSA9IGFyZzsKLQotCQlpZiAoZnJlcS0+ZnJlcSAhPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaICYmCi0JCSAgICBmcmVxLT5mcmVxICE9IFNBQTcxMTVfRlJFUV8yNF81NzZfTUhaKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBmcmVxLT5mcmVxOwotCQlzdGF0ZS0+Y2djZGl2ID0gKGZyZXEtPmZsYWdzICYgU0FBNzExNV9GUkVRX0ZMX0NHQ0RJVikgPyAzIDogNDsKLQkJc3RhdGUtPnVjZ2MgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfVUNHQykgPyAxIDogMDsKLQkJc3RhdGUtPmFwbGwgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfQVBMTCkgPyAxIDogMDsKLQkJc2FhNzExeF9zZXRfYXVkaW9fY2xvY2tfZnJlcShjbGllbnQsIHN0YXRlLT5hdWRjbGtfZnJlcSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkU6Ci0JCXNhYTcxMXhfZGVjb2RlX3ZiaV9saW5lKGNsaWVudCwgYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfUkVTRVQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgUkVTRVRcbiIpOwotCQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnX3Jlc2V0X3NjYWxlcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfR1BJTzoKLQkJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsIChzYWE3MTF4X3JlYWQoY2xpZW50LCAweDExKSAmIDB4N2YpIHwKLQkJCSgqKHUzMiAqKWFyZyA/IDB4ODAgOiAwKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX0dfVkJJX0RBVEE6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKmRhdGEgPSBhcmc7Ci0KLQkJLyogTm90ZTogdGhlIGludGVybmFsIGZpZWxkIElEIGlzIGludmVydGVkIGZvciBOVFNDLAotCQkgICBzbyBkYXRhLT5maWVsZCAwIG1hcHMgdG8gdGhlIHNhYTcxMTUgZXZlbiBmaWVsZCwKLQkJICAgd2hlcmVhcyBmb3IgUEFMIGl0IG1hcHMgdG8gdGhlIHNhYTcxMTUgb2RkIGZpZWxkLiAqLwotCQlzd2l0Y2ggKGRhdGEtPmlkKSB7Ci0JCWNhc2UgVjRMMl9TTElDRURfV1NTXzYyNToKLQkJCWlmIChzYWE3MTF4X3JlYWQoY2xpZW50LCAweDZiKSAmIDB4YzApCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlkYXRhLT5kYXRhWzBdID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2Yyk7Ci0JCQlkYXRhLT5kYXRhWzFdID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2ZCk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNToKLQkJCWlmIChkYXRhLT5maWVsZCA9PSAwKSB7Ci0JCQkJLyogQ0MgKi8KLQkJCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2NikgJiAweDMwKQotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQlkYXRhLT5kYXRhWzBdID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2OSk7Ci0JCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NmEpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJLyogWERTICovCi0JCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2NikgJiAweGMwKQotCQkJCXJldHVybiAtRUlPOwotCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjcpOwotCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjgpOwotCQkJcmV0dXJuIDA7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCByZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCi0JCQlyZWctPnZhbCA9IHNhYTcxMXhfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWVsc2UKLQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBhcmcsIHN0YXRlLT5pZGVudCwgMCk7Ci0KK3N0YXRpYyBpbnQgc2FhNzExeF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorfQogCitzdGF0aWMgaW50IHNhYTcxMXhfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN0YXRlLT5yYWRpbyA9IDA7CisJc2FhNzExeF9zZXRfdjRsc3RkKHNkLCBzdGQpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxMXhfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN0YXRlLT5yYWRpbyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExeF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXUzMiBpbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwl1OCBtYXNrID0gKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpID8gMHhmOCA6IDB4ZjA7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyIHNldCBpbnB1dCAlZCBvdXRwdXQgJWRcbiIsIHJvdXRlLT5pbnB1dCwgcm91dGUtPm91dHB1dCk7CisJLyogc2FhNzExMS8zIGRvZXMgbm90IGhhdmUgdGhlc2UgaW5wdXRzICovCisJaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8CisJICAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSAmJgorCSAgICAocm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNCB8fAorCSAgICAgcm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyb3V0ZS0+aW5wdXQgPiBTQUE3MTE1X1NWSURFTzMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChyb3V0ZS0+b3V0cHV0ID4gU0FBNzExNV9JUE9SVF9PTikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0YXRlLT5pbnB1dCA9PSByb3V0ZS0+aW5wdXQgJiYgc3RhdGUtPm91dHB1dCA9PSByb3V0ZS0+b3V0cHV0KQorCQlyZXR1cm4gMDsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJub3cgc2V0dGluZyAlcyBpbnB1dCAlcyBvdXRwdXRcbiIsCisJCShyb3V0ZS0+aW5wdXQgPj0gU0FBNzExNV9TVklERU8wKSA/ICJTLVZpZGVvIiA6ICJDb21wb3NpdGUiLAorCQkocm91dGUtPm91dHB1dCA9PSBTQUE3MTE1X0lQT1JUX09OKSA/ICJpcG9ydCBvbiIgOiAiaXBvcnQgb2ZmIik7CisJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OworCisJLyogc2FhNzExMSBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IGlucHV0IG51bWJlcmluZyAqLworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSB7CisJCWlmIChpbnB1dCA+PSBTQUE3MTE1X0NPTVBPU0lURTQpCisJCQlpbnB1dCAtPSAyOworCQkvKiBzYWE3MTExIHNwZWNpZmljICovCisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMTBfQ0hST01BX0NOVExfMiwKKwkJCQkoc2FhNzExeF9yZWFkKHNkLCBSXzEwX0NIUk9NQV9DTlRMXzIpICYgMHgzZikgfAorCQkJCSgocm91dGUtPm91dHB1dCAmIDB4YzApIF4gMHg0MCkpOworCQlzYWE3MTF4X3dyaXRlKHNkLCBSXzEzX1JUX1hfUE9SVF9PVVRfQ05UTCwKKwkJCQkoc2FhNzExeF9yZWFkKHNkLCBSXzEzX1JUX1hfUE9SVF9PVVRfQ05UTCkgJiAweGYwKSB8CisJCQkJKChyb3V0ZS0+b3V0cHV0ICYgMikgPyAweDBhIDogMCkpOworCX0KKworCS8qIHNlbGVjdCBtb2RlICovCisJc2FhNzExeF93cml0ZShzZCwgUl8wMl9JTlBVVF9DTlRMXzEsCisJCSAgICAgIChzYWE3MTF4X3JlYWQoc2QsIFJfMDJfSU5QVVRfQ05UTF8xKSAmIG1hc2spIHwKKwkJICAgICAgIGlucHV0KTsKKworCS8qIGJ5cGFzcyBjaHJvbWluYW5jZSB0cmFwIGZvciBTLVZpZGVvIG1vZGVzICovCisJc2FhNzExeF93cml0ZShzZCwgUl8wOV9MVU1BX0NOVEwsCisJCQkoc2FhNzExeF9yZWFkKHNkLCBSXzA5X0xVTUFfQ05UTCkgJiAweDdmKSB8CisJCQkoc3RhdGUtPmlucHV0ID49IFNBQTcxMTVfU1ZJREVPMCA/IDB4ODAgOiAweDApKTsKKworCXN0YXRlLT5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTE0IHx8CisJCQlzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTE1KSB7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfODNfWF9QT1JUX0lfT19FTkFfQU5EX09VVF9DTEssCisJCQkJKHNhYTcxMXhfcmVhZChzZCwgUl84M19YX1BPUlRfSV9PX0VOQV9BTkRfT1VUX0NMSykgJiAweGZlKSB8CisJCQkJKHN0YXRlLT5vdXRwdXQgJiAweDAxKSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfc19ncGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJCXJldHVybiAtRUlOVkFMOworCXNhYTcxMXhfd3JpdGUoc2QsIDB4MTEsIChzYWE3MTF4X3JlYWQoc2QsIDB4MTEpICYgMHg3ZikgfAorCQkodmFsID8gMHg4MCA6IDApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTF4X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXMgb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCisJaWYgKHN0YXRlLT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCXN0YXRlLT5lbmFibGUgPSBlbmFibGU7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfODdfSV9QT1JUX0lfT19FTkFfT1VUX0NMS19BTkRfR0FURUQsCisJCQkJc3RhdGUtPmVuYWJsZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfc19jcnlzdGFsX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxICpmcmVxKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmIChmcmVxLT5mcmVxICE9IFNBQTcxMTVfRlJFUV8zMl8xMV9NSFogJiYKKwkJCWZyZXEtPmZyZXEgIT0gU0FBNzExNV9GUkVRXzI0XzU3Nl9NSFopCisJCXJldHVybiAtRUlOVkFMOworCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBmcmVxLT5mcmVxOworCXN0YXRlLT5jZ2NkaXYgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfQ0dDRElWKSA/IDMgOiA0OworCXN0YXRlLT51Y2djID0gKGZyZXEtPmZsYWdzICYgU0FBNzExNV9GUkVRX0ZMX1VDR0MpID8gMSA6IDA7CisJc3RhdGUtPmFwbGwgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfQVBMTCkgPyAxIDogMDsKKwlzYWE3MTF4X3NfY2xvY2tfZnJlcShzZCwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTF4X3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGVjb2RlciBSRVNFVFxuIik7CisJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfY2ZnX3Jlc2V0X3NjYWxlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExeF9nX3ZiaV9kYXRhKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKK3sKKwkvKiBOb3RlOiB0aGUgaW50ZXJuYWwgZmllbGQgSUQgaXMgaW52ZXJ0ZWQgZm9yIE5UU0MsCisJICAgc28gZGF0YS0+ZmllbGQgMCBtYXBzIHRvIHRoZSBzYWE3MTE1IGV2ZW4gZmllbGQsCisJICAgd2hlcmVhcyBmb3IgUEFMIGl0IG1hcHMgdG8gdGhlIHNhYTcxMTUgb2RkIGZpZWxkLiAqLworCXN3aXRjaCAoZGF0YS0+aWQpIHsKKwljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CisJCWlmIChzYWE3MTF4X3JlYWQoc2QsIDB4NmIpICYgMHhjMCkKKwkJCXJldHVybiAtRUlPOworCQlkYXRhLT5kYXRhWzBdID0gc2FhNzExeF9yZWFkKHNkLCAweDZjKTsKKwkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChzZCwgMHg2ZCk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CisJCWlmIChkYXRhLT5maWVsZCA9PSAwKSB7CisJCQkvKiBDQyAqLworCQkJaWYgKHNhYTcxMXhfcmVhZChzZCwgMHg2NikgJiAweDMwKQorCQkJCXJldHVybiAtRUlPOworCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChzZCwgMHg2OSk7CisJCQlkYXRhLT5kYXRhWzFdID0gc2FhNzExeF9yZWFkKHNkLCAweDZhKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIFhEUyAqLworCQlpZiAoc2FhNzExeF9yZWFkKHNkLCAweDY2KSAmIDB4YzApCisJCQlyZXR1cm4gLUVJTzsKKwkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChzZCwgMHg2Nyk7CisJCWRhdGEtPmRhdGFbMV0gPSBzYWE3MTF4X3JlYWQoc2QsIDB4NjgpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHNhYTcxMXhfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAorCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+dmFsID0gc2FhNzExeF9yZWFkKHNkLCByZWctPnJlZyAmIDB4ZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAorCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXNhYTcxMXhfd3JpdGUoc2QsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNhYTcxMXhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIHN0YXRlLT5pZGVudCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExeF9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByZWcxZSwgcmVnMWY7CisJaW50IHNpZ25hbE9rOworCWludCB2Y3I7CisKKwl2NGwyX2luZm8oc2QsICJBdWRpbyBmcmVxdWVuY3k6ICVkIEh6XG4iLCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOworCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTE1KSB7CisJCS8qIHN0YXR1cyBmb3IgdGhlIHNhYTcxMTQgKi8KKwkJcmVnMWYgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOworCQlzaWduYWxPayA9IChyZWcxZiAmIDB4YzEpID09IDB4ODE7CisJCXY0bDJfaW5mbyhzZCwgIlZpZGVvIHNpZ25hbDogICAgJXNcbiIsIHNpZ25hbE9rID8gIm9rIiA6ICJiYWQiKTsKKwkJdjRsMl9pbmZvKHNkLCAiRnJlcXVlbmN5OiAgICAgICAlc1xuIiwgKHJlZzFmICYgMHgyMCkgPyAiNjAgSHoiIDogIjUwIEh6Iik7CisJCXJldHVybiAwOworCX0KKworCS8qIHN0YXR1cyBmb3IgdGhlIHNhYTcxMTUgKi8KKwlyZWcxZSA9IHNhYTcxMXhfcmVhZChzZCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisJcmVnMWYgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOworCisJc2lnbmFsT2sgPSAocmVnMWYgJiAweGMxKSA9PSAweDgxICYmIChyZWcxZSAmIDB4YzApID09IDB4ODA7CisJdmNyID0gIShyZWcxZiAmIDB4MTApOworCisJaWYgKHN0YXRlLT5pbnB1dCA+PSA2KQorCQl2NGwyX2luZm8oc2QsICJJbnB1dDogICAgICAgICAgIFMtVmlkZW8gJWRcbiIsIHN0YXRlLT5pbnB1dCAtIDYpOworCWVsc2UKKwkJdjRsMl9pbmZvKHNkLCAiSW5wdXQ6ICAgICAgICAgICBDb21wb3NpdGUgJWRcbiIsIHN0YXRlLT5pbnB1dCk7CisJdjRsMl9pbmZvKHNkLCAiVmlkZW8gc2lnbmFsOiAgICAlc1xuIiwgc2lnbmFsT2sgPyAodmNyID8gIlZDUiIgOiAiYnJvYWRjYXN0L0RWRCIpIDogImJhZCIpOworCXY0bDJfaW5mbyhzZCwgIkZyZXF1ZW5jeTogICAgICAgJXNcbiIsIChyZWcxZiAmIDB4MjApID8gIjYwIEh6IiA6ICI1MCBIeiIpOworCisJc3dpdGNoIChyZWcxZSAmIDB4MDMpIHsKKwljYXNlIDE6CisJCXY0bDJfaW5mbyhzZCwgIkRldGVjdGVkIGZvcm1hdDogTlRTQ1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdjRsMl9pbmZvKHNkLCAiRGV0ZWN0ZWQgZm9ybWF0OiBQQUxcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXY0bDJfaW5mbyhzZCwgIkRldGVjdGVkIGZvcm1hdDogU0VDQU1cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGwyX2luZm8oc2QsICJEZXRlY3RlZCBmb3JtYXQ6IEJXL05vIGNvbG9yXG4iKTsKKwkJYnJlYWs7CisJfQorCXY0bDJfaW5mbyhzZCwgIldpZHRoLCBIZWlnaHQ6ICAgJWQsICVkXG4iLCBzdGF0ZS0+d2lkdGgsIHN0YXRlLT5oZWlnaHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMTVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzExeF9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IHNhYTcxMXhfbG9nX3N0YXR1cywKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzExeF9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IHNhYTcxMXhfZ19jdHJsLAorCS5zX2N0cmwgPSBzYWE3MTF4X3NfY3RybCwKKwkucXVlcnljdHJsID0gc2FhNzExeF9xdWVyeWN0cmwsCisJLnJlc2V0ID0gc2FhNzExeF9yZXNldCwKKwkuc19ncGlvID0gc2FhNzExeF9zX2dwaW8sCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gc2FhNzExeF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gc2FhNzExeF9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTF4X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzYWE3MTF4X3Nfc3RkLAorCS5zX3JhZGlvID0gc2FhNzExeF9zX3JhZGlvLAorCS5nX3R1bmVyID0gc2FhNzExeF9nX3R1bmVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgc2FhNzExeF9hdWRpb19vcHMgPSB7CisJLnNfY2xvY2tfZnJlcSA9IHNhYTcxMXhfc19jbG9ja19mcmVxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNzExeF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHNhYTcxMXhfc19yb3V0aW5nLAorCS5zX2NyeXN0YWxfZnJlcSA9IHNhYTcxMXhfc19jcnlzdGFsX2ZyZXEsCisJLmdfZm10ID0gc2FhNzExeF9nX2ZtdCwKKwkuc19mbXQgPSBzYWE3MTF4X3NfZm10LAorCS5nX3ZiaV9kYXRhID0gc2FhNzExeF9nX3ZiaV9kYXRhLAorCS5kZWNvZGVfdmJpX2xpbmUgPSBzYWE3MTF4X2RlY29kZV92YmlfbGluZSwKKwkuc19zdHJlYW0gPSBzYWE3MTF4X3Nfc3RyZWFtLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzExeF9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzExeF9jb3JlX29wcywKKwkudHVuZXIgPSAmc2FhNzExeF90dW5lcl9vcHMsCisJLmF1ZGlvID0gJnNhYTcxMXhfYXVkaW9fb3BzLAorCS52aWRlbyA9ICZzYWE3MTF4X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgc2FhNzExeF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlpbnQJaTsKIAljaGFyCW5hbWVbMTddOwogCWNoYXIgY2hpcF9pZDsKQEAgLTE0OTAsOCArMTUyMCw4IEBACiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDB4MGY7IGkrKykgewotCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMCwgaSk7Ci0JCW5hbWVbaV0gPSAoc2FhNzExeF9yZWFkKGNsaWVudCwgMCkgJiAweDBmKSArICcwJzsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDAsIGkpOworCQluYW1lW2ldID0gKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDApICYgMHgwZikgKyAnMCc7CiAJCWlmIChuYW1lW2ldID4gJzknKQogCQkJbmFtZVtpXSArPSAnYScgLSAnOScgLSAxOwogCX0KQEAgLTE1MTgsNyArMTU0OCw4IEBACiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzdGF0ZSk7CisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTF4X29wcyk7CiAJc3RhdGUtPmlucHV0ID0gLTE7CiAJc3RhdGUtPm91dHB1dCA9IFNBQTcxMTVfSVBPUlRfT047CiAJc3RhdGUtPmVuYWJsZSA9IDE7CkBAIC0xNTQ1LDQxICsxNTc2LDQ1IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKLQkJdjRsX2luZm8oY2xpZW50LCAiV0FSTklORzogQ2hpcCBpcyBub3Qga25vd24gLSBGYWxsaW5nIGJhY2sgdG8gc2FhNzExMVxuIik7CisJCXY0bDJfaW5mbyhzZCwgIldBUk5JTkc6IENoaXAgaXMgbm90IGtub3duIC0gRmFsbGluZyBiYWNrIHRvIHNhYTcxMTFcbiIpOwogCiAJfQogCiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIGluaXQgdmFsdWVzXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ3cml0aW5nIGluaXQgdmFsdWVzXG4iKTsKIAogCS8qIGluaXQgdG8gNjBoei80OGtoeiAqLwogCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMjRfNTc2X01IWjsKIAlzd2l0Y2ggKHN0YXRlLT5pZGVudCkgewogCWNhc2UgVjRMMl9JREVOVF9TQUE3MTExOgotCQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTFfaW5pdCk7CisJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTExX2luaXQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfSURFTlRfU0FBNzExMzoKLQkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTEzX2luaXQpOworCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExM19pbml0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3RhdGUtPmNyeXN0YWxfZnJlcSA9IFNBQTcxMTVfRlJFUV8zMl8xMV9NSFo7Ci0JCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOworCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwogCX0KIAlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKLQkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2luaXRfbWlzYyk7Ci0Jc2FhNzExeF9zZXRfdjRsc3RkKGNsaWVudCwgVjRMMl9TVERfTlRTQyk7CisJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTE1X2luaXRfbWlzYyk7CisJc2FhNzExeF9zZXRfdjRsc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogKDFFKSAweCUwMngsICgxRikgMHglMDJ4XG4iLAotCQlzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzFFX1NUQVRVU19CWVRFXzFfVkRfREVDKSwgc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRl9TVEFUVVNfQllURV8yX1ZEX0RFQykpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1czogKDFFKSAweCUwMngsICgxRikgMHglMDJ4XG4iLAorCQlzYWE3MTF4X3JlYWQoc2QsIFJfMUVfU1RBVFVTX0JZVEVfMV9WRF9ERUMpLAorCQlzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE3MTE1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTF4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU5Nyw5ICsxNjMyLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE3MTE1IiwKIAkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExWCwKLQkuY29tbWFuZCA9IHNhYTcxMTVfY29tbWFuZCwKLQkucHJvYmUgPSBzYWE3MTE1X3Byb2JlLAotCS5yZW1vdmUgPSBzYWE3MTE1X3JlbW92ZSwKKwkuY29tbWFuZCA9IHNhYTcxMXhfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTF4X3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTF4X3JlbW92ZSwKIAkubGVnYWN5X2NsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRyB8IEkyQ19DTEFTU19UVl9ESUdJVEFMLAogCS5pZF90YWJsZSA9IHNhYTcxMTVfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCBjYzAyZmIxLi5iZmM4NTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc2FhNzEyNy5oPgpAQCAtMjMxLDYgKzIzMSw3IEBACiAgKi8KIAogc3RydWN0IHNhYTcxMjdfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJdTMyIGlkZW50OwogCWVudW0gc2FhNzEyN19pbnB1dF90eXBlIGlucHV0X3R5cGU7CkBAIC0yNTAsNiArMjUxLDExIEBACiAJdTggcmVnXzYxOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSwgc2QpOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG91dHB1dF9zdHJzW10gPQogewogCSJTLVZpZGVvICsgQ29tcG9zaXRlIiwKQEAgLTI4MSwzMiArMjg3LDM1IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbnQgc2FhNzEyN19yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE3MTI3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIGludCBzYWE3MTI3X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCkgPT0gMCkKIAkJCXJldHVybiAwOwogCX0KLQl2NGxfZXJyKGNsaWVudCwgIkkyQyBXcml0ZSBQcm9ibGVtXG4iKTsKKwl2NGwyX2VycihzZCwgIkkyQyBXcml0ZSBQcm9ibGVtXG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN193cml0ZV9pbml0dGFiKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHNhYTcxMjdfd3JpdGVfaW5pdHRhYihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCSBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcmVncykKIHsKIAl3aGlsZSAocmVncy0+cmVnICE9IDApIHsKLQkJc2FhNzEyN193cml0ZShjbGllbnQsIHJlZ3MtPnJlZywgcmVncy0+dmFsdWUpOworCQlzYWE3MTI3X3dyaXRlKHNkLCByZWdzLT5yZWcsIHJlZ3MtPnZhbHVlKTsKIAkJcmVncysrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMxNCwxNiArMzIzLDE2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN19zZXRfdnBzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgc2FhNzEyN19zZXRfdnBzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJaW50IGVuYWJsZSA9IChkYXRhLT5saW5lICE9IDApOwogCiAJaWYgKGVuYWJsZSAmJiAoZGF0YS0+ZmllbGQgIT0gMCB8fCBkYXRhLT5saW5lICE9IDE2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXRlLT52cHNfZW5hYmxlICE9IGVuYWJsZSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUdXJuIFZQUyBTaWduYWwgJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7Ci0JCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDU0LCBlbmFibGUgPDwgNyk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlR1cm4gVlBTIFNpZ25hbCAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJc2FhNzEyN193cml0ZShzZCwgMHg1NCwgZW5hYmxlIDw8IDcpOwogCQlzdGF0ZS0+dnBzX2VuYWJsZSA9IGVuYWJsZTsKIAl9CiAJaWYgKCFlbmFibGUpCkBAIC0zMzQsOTEgKzM0Myw5MSBAQAogCXN0YXRlLT52cHNfZGF0YVsyXSA9IGRhdGEtPmRhdGFbOV07CiAJc3RhdGUtPnZwc19kYXRhWzNdID0gZGF0YS0+ZGF0YVsxMF07CiAJc3RhdGUtPnZwc19kYXRhWzRdID0gZGF0YS0+ZGF0YVsxMV07Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiU2V0IFZQUyBkYXRhICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZXQgVlBTIGRhdGEgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQlzdGF0ZS0+dnBzX2RhdGFbMF0sIHN0YXRlLT52cHNfZGF0YVsxXSwKIAkJc3RhdGUtPnZwc19kYXRhWzJdLCBzdGF0ZS0+dnBzX2RhdGFbM10sCiAJCXN0YXRlLT52cHNfZGF0YVs0XSk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4NTUsIHN0YXRlLT52cHNfZGF0YVswXSk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4NTYsIHN0YXRlLT52cHNfZGF0YVsxXSk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4NTcsIHN0YXRlLT52cHNfZGF0YVsyXSk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4NTgsIHN0YXRlLT52cHNfZGF0YVszXSk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4NTksIHN0YXRlLT52cHNfZGF0YVs0XSk7CisJc2FhNzEyN193cml0ZShzZCwgMHg1NSwgc3RhdGUtPnZwc19kYXRhWzBdKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCAweDU2LCBzdGF0ZS0+dnBzX2RhdGFbMV0pOworCXNhYTcxMjdfd3JpdGUoc2QsIDB4NTcsIHN0YXRlLT52cHNfZGF0YVsyXSk7CisJc2FhNzEyN193cml0ZShzZCwgMHg1OCwgc3RhdGUtPnZwc19kYXRhWzNdKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCAweDU5LCBzdGF0ZS0+dnBzX2RhdGFbNF0pOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMjdfc2V0X2NjKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgc2FhNzEyN19zZXRfY2Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICpkYXRhKQogewotCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAl1MTYgY2MgPSBkYXRhLT5kYXRhWzFdIDw8IDggfCBkYXRhLT5kYXRhWzBdOwogCWludCBlbmFibGUgPSAoZGF0YS0+bGluZSAhPSAwKTsKIAogCWlmIChlbmFibGUgJiYgKGRhdGEtPmZpZWxkICE9IDAgfHwgZGF0YS0+bGluZSAhPSAyMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChzdGF0ZS0+Y2NfZW5hYmxlICE9IGVuYWJsZSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJUdXJuIENDICVzXG4iLCBlbmFibGUgPyAib24iIDogIm9mZiIpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyN19SRUdfQ0xPU0VEX0NBUFRJT04sCisJCXNhYTcxMjdfd3JpdGUoc2QsIFNBQTcxMjdfUkVHX0NMT1NFRF9DQVBUSU9OLAogCQkJKHN0YXRlLT54ZHNfZW5hYmxlIDw8IDcpIHwgKGVuYWJsZSA8PCA2KSB8IDB4MTEpOwogCQlzdGF0ZS0+Y2NfZW5hYmxlID0gZW5hYmxlOwogCX0KIAlpZiAoIWVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKLQl2NGxfZGJnKDIsIGRlYnVnLCBjbGllbnQsICJDQyBkYXRhOiAlMDR4XG4iLCBjYyk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0xJTkVfMjFfT0REXzAsIGNjICYgMHhmZik7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0xJTkVfMjFfT0REXzEsIGNjID4+IDgpOworCXY0bDJfZGJnKDIsIGRlYnVnLCBzZCwgIkNDIGRhdGE6ICUwNHhcbiIsIGNjKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCBTQUE3MTI3X1JFR19MSU5FXzIxX09ERF8wLCBjYyAmIDB4ZmYpOworCXNhYTcxMjdfd3JpdGUoc2QsIFNBQTcxMjdfUkVHX0xJTkVfMjFfT0REXzEsIGNjID4+IDgpOwogCXN0YXRlLT5jY19kYXRhID0gY2M7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN19zZXRfeGRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgc2FhNzEyN19zZXRfeGRzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdTE2IHhkcyA9IGRhdGEtPmRhdGFbMV0gPDwgOCB8IGRhdGEtPmRhdGFbMF07CiAJaW50IGVuYWJsZSA9IChkYXRhLT5saW5lICE9IDApOwogCiAJaWYgKGVuYWJsZSAmJiAoZGF0YS0+ZmllbGQgIT0gMSB8fCBkYXRhLT5saW5lICE9IDIxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXRlLT54ZHNfZW5hYmxlICE9IGVuYWJsZSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUdXJuIFhEUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKLQkJc2FhNzEyN193cml0ZShjbGllbnQsIFNBQTcxMjdfUkVHX0NMT1NFRF9DQVBUSU9OLAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUdXJuIFhEUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJc2FhNzEyN193cml0ZShzZCwgU0FBNzEyN19SRUdfQ0xPU0VEX0NBUFRJT04sCiAJCQkJKGVuYWJsZSA8PCA3KSB8IChzdGF0ZS0+Y2NfZW5hYmxlIDw8IDYpIHwgMHgxMSk7CiAJCXN0YXRlLT54ZHNfZW5hYmxlID0gZW5hYmxlOwogCX0KIAlpZiAoIWVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKLQl2NGxfZGJnKDIsIGRlYnVnLCBjbGllbnQsICJYRFMgZGF0YTogJTA0eFxuIiwgeGRzKTsKLQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyN19SRUdfTElORV8yMV9FVkVOXzAsIHhkcyAmIDB4ZmYpOwotCXNhYTcxMjdfd3JpdGUoY2xpZW50LCBTQUE3MTI3X1JFR19MSU5FXzIxX0VWRU5fMSwgeGRzID4+IDgpOworCXY0bDJfZGJnKDIsIGRlYnVnLCBzZCwgIlhEUyBkYXRhOiAlMDR4XG4iLCB4ZHMpOworCXNhYTcxMjdfd3JpdGUoc2QsIFNBQTcxMjdfUkVHX0xJTkVfMjFfRVZFTl8wLCB4ZHMgJiAweGZmKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCBTQUE3MTI3X1JFR19MSU5FXzIxX0VWRU5fMSwgeGRzID4+IDgpOwogCXN0YXRlLT54ZHNfZGF0YSA9IHhkczsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE3MTI3X3NldF93c3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICpkYXRhKQorc3RhdGljIGludCBzYWE3MTI3X3NldF93c3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICpkYXRhKQogewotCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgZW5hYmxlID0gKGRhdGEtPmxpbmUgIT0gMCk7CiAKIAlpZiAoZW5hYmxlICYmIChkYXRhLT5maWVsZCAhPSAwIHx8IGRhdGEtPmxpbmUgIT0gMjMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3RhdGUtPndzc19lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlR1cm4gV1NTICVzXG4iLCBlbmFibGUgPyAib24iIDogIm9mZiIpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHgyNywgZW5hYmxlIDw8IDcpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUdXJuIFdTUyAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwkJc2FhNzEyN193cml0ZShzZCwgMHgyNywgZW5hYmxlIDw8IDcpOwogCQlzdGF0ZS0+d3NzX2VuYWJsZSA9IGVuYWJsZTsKIAl9CiAJaWYgKCFlbmFibGUpCiAJCXJldHVybiAwOwogCi0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4MjYsIGRhdGEtPmRhdGFbMF0pOwotCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDI3LCAweDgwIHwgKGRhdGEtPmRhdGFbMV0gJiAweDNmKSk7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCXNhYTcxMjdfd3JpdGUoc2QsIDB4MjYsIGRhdGEtPmRhdGFbMF0pOworCXNhYTcxMjdfd3JpdGUoc2QsIDB4MjcsIDB4ODAgfCAoZGF0YS0+ZGF0YVsxXSAmIDB4M2YpKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCSJXU1MgbW9kZTogJXNcbiIsIHdzc19zdHJzW2RhdGEtPmRhdGFbMF0gJiAweGZdKTsKIAlzdGF0ZS0+d3NzX21vZGUgPSAoZGF0YS0+ZGF0YVsxXSAmIDB4M2YpIDw8IDggfCBkYXRhLT5kYXRhWzBdOwogCXJldHVybiAwOwpAQCAtNDI2LDE4ICs0MzUsMTggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE3MTI3X3NldF92aWRlb19lbmFibGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgc2FhNzEyN19zZXRfdmlkZW9fZW5hYmxlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCiAJaWYgKGVuYWJsZSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJFbmFibGUgVmlkZW8gT3V0cHV0XG4iKTsKLQkJc2FhNzEyN193cml0ZShjbGllbnQsIDB4MmQsIHN0YXRlLT5yZWdfMmQpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHg2MSwgc3RhdGUtPnJlZ182MSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkVuYWJsZSBWaWRlbyBPdXRwdXRcbiIpOworCQlzYWE3MTI3X3dyaXRlKHNkLCAweDJkLCBzdGF0ZS0+cmVnXzJkKTsKKwkJc2FhNzEyN193cml0ZShzZCwgMHg2MSwgc3RhdGUtPnJlZ182MSk7CiAJfSBlbHNlIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiRGlzYWJsZSBWaWRlbyBPdXRwdXRcbiIpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHgyZCwgKHN0YXRlLT5yZWdfMmQgJiAweGYwKSk7Ci0JCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDYxLCAoc3RhdGUtPnJlZ182MSB8IDB4YzApKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiRGlzYWJsZSBWaWRlbyBPdXRwdXRcbiIpOworCQlzYWE3MTI3X3dyaXRlKHNkLCAweDJkLCAoc3RhdGUtPnJlZ18yZCAmIDB4ZjApKTsKKwkJc2FhNzEyN193cml0ZShzZCwgMHg2MSwgKHN0YXRlLT5yZWdfNjEgfCAweGMwKSk7CiAJfQogCXN0YXRlLT52aWRlb19lbmFibGUgPSBlbmFibGU7CiAJcmV0dXJuIDA7CkBAIC00NDUsMzIgKzQ1NCwzMiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMjdfc2V0X3N0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB2NGwyX3N0ZF9pZCBzdGQpCitzdGF0aWMgaW50IHNhYTcxMjdfc2V0X3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCiB7Ci0Jc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlICppbml0dGFiOwogCiAJaWYgKHN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJTZWxlY3RpbmcgNjAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgNjAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOwogCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ182MGh6OwogCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN182MEhaX0RBQ19DT05UUk9MOwogCX0gZWxzZSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNlbGVjdGluZyA1MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA1MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7CiAJCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHo7CiAJCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzUwSFpfREFDX0NPTlRST0w7CiAJfQogCiAJLyogV3JpdGUgVGFibGUgKi8KLQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoY2xpZW50LCBpbml0dGFiKTsKKwlzYWE3MTI3X3dyaXRlX2luaXR0YWIoc2QsIGluaXR0YWIpOwogCXN0YXRlLT5zdGQgPSBzdGQ7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN19zZXRfb3V0cHV0X3R5cGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG91dHB1dCkKK3N0YXRpYyBpbnQgc2FhNzEyN19zZXRfb3V0cHV0X3R5cGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG91dHB1dCkKIHsKLQlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKG91dHB1dCkgewogCWNhc2UgU0FBNzEyN19PVVRQVVRfVFlQRV9SR0I6CkBAIC01MDYsMTY1ICs1MTUsMTk1IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCSJTZWxlY3RpbmcgJXMgb3V0cHV0IHR5cGVcbiIsIG91dHB1dF9zdHJzW291dHB1dF0pOwogCiAJLyogQ29uZmlndXJlIEVuY29kZXIgKi8KLQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgMHgyZCwgc3RhdGUtPnJlZ18yZCk7Ci0Jc2FhNzEyN193cml0ZShjbGllbnQsIDB4M2EsIHN0YXRlLT5yZWdfM2EgfCBzdGF0ZS0+cmVnXzNhX2NiKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCAweDJkLCBzdGF0ZS0+cmVnXzJkKTsKKwlzYWE3MTI3X3dyaXRlKHNkLCAweDNhLCBzdGF0ZS0+cmVnXzNhIHwgc3RhdGUtPnJlZ18zYV9jYik7CiAJc3RhdGUtPm91dHB1dF90eXBlID0gb3V0cHV0OwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMjdfc2V0X2lucHV0X3R5cGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGlucHV0KQorc3RhdGljIGludCBzYWE3MTI3X3NldF9pbnB1dF90eXBlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBpbnB1dCkKIHsKLQlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGlucHV0KSB7CiAJY2FzZSBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMOgkvKiBhdmlhICovCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNlbGVjdGluZyBOb3JtYWwgRW5jb2RlciBJbnB1dFxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyBOb3JtYWwgRW5jb2RlciBJbnB1dFxuIik7CiAJCXN0YXRlLT5yZWdfM2FfY2IgPSAwOwogCQlicmVhazsKIAogCWNhc2UgU0FBNzEyN19JTlBVVF9UWVBFX1RFU1RfSU1BR0U6CS8qIGNvbG9yIGJhciAqLwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJTZWxlY3RpbmcgQ29sb3IgQmFyIGdlbmVyYXRvclxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyBDb2xvciBCYXIgZ2VuZXJhdG9yXG4iKTsKIAkJc3RhdGUtPnJlZ18zYV9jYiA9IDB4ODA7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXNhYTcxMjdfd3JpdGUoY2xpZW50LCAweDNhLCBzdGF0ZS0+cmVnXzNhIHwgc3RhdGUtPnJlZ18zYV9jYik7CisJc2FhNzEyN193cml0ZShzZCwgMHgzYSwgc3RhdGUtPnJlZ18zYSB8IHN0YXRlLT5yZWdfM2FfY2IpOwogCXN0YXRlLT5pbnB1dF90eXBlID0gaW5wdXQ7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHNhYTcxMjdfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKLQlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9TX1NURF9PVVRQVVQ6Ci0JCWlmIChzdGF0ZS0+c3RkID09ICoodjRsMl9zdGRfaWQgKilhcmcpCi0JCQlicmVhazsKLQkJcmV0dXJuIHNhYTcxMjdfc2V0X3N0ZChjbGllbnQsICoodjRsMl9zdGRfaWQgKilhcmcpOworCWlmIChzdGF0ZS0+c3RkID09IHN0ZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNhYTcxMjdfc2V0X3N0ZChzZCwgc3RkKTsKK30KIAotCWNhc2UgVklESU9DX0lOVF9HX1NURF9PVVRQVVQ6Ci0JCSoodjRsMl9zdGRfaWQgKilhcmcgPSBzdGF0ZS0+c3RkOwotCQlicmVhazsKK3N0YXRpYyBpbnQgc2FhNzEyN19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByYyA9IDA7CiAKLQljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+aW5wdXRfdHlwZTsKLQkJcm91dGUtPm91dHB1dCA9IHN0YXRlLT5vdXRwdXRfdHlwZTsKLQkJYnJlYWs7CisJaWYgKHN0YXRlLT5pbnB1dF90eXBlICE9IHJvdXRlLT5pbnB1dCkKKwkJcmMgPSBzYWE3MTI3X3NldF9pbnB1dF90eXBlKHNkLCByb3V0ZS0+aW5wdXQpOworCWlmIChyYyA9PSAwICYmIHN0YXRlLT5vdXRwdXRfdHlwZSAhPSByb3V0ZS0+b3V0cHV0KQorCQlyYyA9IHNhYTcxMjdfc2V0X291dHB1dF90eXBlKHNkLCByb3V0ZS0+b3V0cHV0KTsKKwlyZXR1cm4gcmM7Cit9CiAKLQljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgotCXsKLQkJaW50IHJjID0gMDsKK3N0YXRpYyBpbnQgc2FhNzEyN19zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzYWE3MTI3X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAotCQlpZiAoc3RhdGUtPmlucHV0X3R5cGUgIT0gcm91dGUtPmlucHV0KQotCQkJcmMgPSBzYWE3MTI3X3NldF9pbnB1dF90eXBlKGNsaWVudCwgcm91dGUtPmlucHV0KTsKLQkJaWYgKHJjID09IDAgJiYgc3RhdGUtPm91dHB1dF90eXBlICE9IHJvdXRlLT5vdXRwdXQpCi0JCQlyYyA9IHNhYTcxMjdfc2V0X291dHB1dF90eXBlKGNsaWVudCwgcm91dGUtPm91dHB1dCk7Ci0JCXJldHVybiByYzsKKwlpZiAoc3RhdGUtPnZpZGVvX2VuYWJsZSA9PSBlbmFibGUpCisJCXJldHVybiAwOworCXJldHVybiBzYWE3MTI3X3NldF92aWRlb19lbmFibGUoc2QsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEyN19nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmZm10LT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZm10LT5mbXQuc2xpY2VkKSk7CisJaWYgKHN0YXRlLT52cHNfZW5hYmxlKQorCQlmbXQtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsxNl0gPSBWNEwyX1NMSUNFRF9WUFM7CisJaWYgKHN0YXRlLT53c3NfZW5hYmxlKQorCQlmbXQtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCWlmIChzdGF0ZS0+Y2NfZW5hYmxlKSB7CisJCWZtdC0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIxXSA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OworCQlmbXQtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1sxXVsyMV0gPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKIAl9CisJZm10LT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0KKwkJKHN0YXRlLT52cHNfZW5hYmxlID8gVjRMMl9TTElDRURfVlBTIDogMCkgfAorCQkoc3RhdGUtPndzc19lbmFibGUgPyBWNEwyX1NMSUNFRF9XU1NfNjI1IDogMCkgfAorCQkoc3RhdGUtPmNjX2VuYWJsZSA/IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1IDogMCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCWlmIChzdGF0ZS0+dmlkZW9fZW5hYmxlID09IChjbWQgPT0gVklESU9DX1NUUkVBTU9OKSkKLQkJCWJyZWFrOwotCQlyZXR1cm4gc2FhNzEyN19zZXRfdmlkZW9fZW5hYmxlKGNsaWVudCwgY21kID09IFZJRElPQ19TVFJFQU1PTik7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldCgmZm10LT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZm10LT5mbXQuc2xpY2VkKSk7Ci0JCWlmIChzdGF0ZS0+dnBzX2VuYWJsZSkKLQkJCWZtdC0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzE2XSA9IFY0TDJfU0xJQ0VEX1ZQUzsKLQkJaWYgKHN0YXRlLT53c3NfZW5hYmxlKQotCQkJZm10LT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJaWYgKHN0YXRlLT5jY19lbmFibGUpIHsKLQkJCWZtdC0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIxXSA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJZm10LT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMV1bMjFdID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7Ci0JCX0KLQkJZm10LT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0KLQkJCShzdGF0ZS0+dnBzX2VuYWJsZSA/IFY0TDJfU0xJQ0VEX1ZQUyA6IDApIHwKLQkJCShzdGF0ZS0+d3NzX2VuYWJsZSA/IFY0TDJfU0xJQ0VEX1dTU182MjUgOiAwKSB8Ci0JCQkoc3RhdGUtPmNjX2VuYWJsZSA/IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1IDogMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJdjRsX2luZm8oY2xpZW50LCAiU3RhbmRhcmQ6ICVzXG4iLCAoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAiNjAgSHoiIDogIjUwIEh6Iik7Ci0JCXY0bF9pbmZvKGNsaWVudCwgIklucHV0OiAgICAlc1xuIiwgc3RhdGUtPmlucHV0X3R5cGUgPyAgImNvbG9yIGJhcnMiIDogIm5vcm1hbCIpOwotCQl2NGxfaW5mbyhjbGllbnQsICJPdXRwdXQ6ICAgJXNcbiIsIHN0YXRlLT52aWRlb19lbmFibGUgPwotCQkJb3V0cHV0X3N0cnNbc3RhdGUtPm91dHB1dF90eXBlXSA6ICJkaXNhYmxlZCIpOwotCQl2NGxfaW5mbyhjbGllbnQsICJXU1M6ICAgICAgJXNcbiIsIHN0YXRlLT53c3NfZW5hYmxlID8KLQkJCXdzc19zdHJzW3N0YXRlLT53c3NfbW9kZV0gOiAiZGlzYWJsZWQiKTsKLQkJdjRsX2luZm8oY2xpZW50LCAiVlBTOiAgICAgICVzXG4iLCBzdGF0ZS0+dnBzX2VuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCQl2NGxfaW5mbyhjbGllbnQsICJDQzogICAgICAgJXNcbiIsIHN0YXRlLT5jY19lbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAotCQkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCi0JCQlyZWctPnZhbCA9IHNhYTcxMjdfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWVsc2UKLQkJCXNhYTcxMjdfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCi0JY2FzZSBWSURJT0NfSU5UX1NfVkJJX0RBVEE6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKmRhdGEgPSBhcmc7Ci0KLQkJc3dpdGNoIChkYXRhLT5pZCkgewotCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6Ci0JCQlyZXR1cm4gc2FhNzEyN19zZXRfd3NzKGNsaWVudCwgZGF0YSk7Ci0JCWNhc2UgVjRMMl9TTElDRURfVlBTOgotCQkJcmV0dXJuIHNhYTcxMjdfc2V0X3ZwcyhjbGllbnQsIGRhdGEpOwotCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgotCQkJaWYgKGRhdGEtPmZpZWxkID09IDApCi0JCQkJcmV0dXJuIHNhYTcxMjdfc2V0X2NjKGNsaWVudCwgZGF0YSk7Ci0JCQlyZXR1cm4gc2FhNzEyN19zZXRfeGRzKGNsaWVudCwgZGF0YSk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGFyZywgc3RhdGUtPmlkZW50LCAwKTsKLQorc3RhdGljIGludCBzYWE3MTI3X3NfdmJpX2RhdGEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICpkYXRhKQoreworCXN3aXRjaCAoZGF0YS0+aWQpIHsKKwljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CisJCXJldHVybiBzYWE3MTI3X3NldF93c3Moc2QsIGRhdGEpOworCWNhc2UgVjRMMl9TTElDRURfVlBTOgorCQlyZXR1cm4gc2FhNzEyN19zZXRfdnBzKHNkLCBkYXRhKTsKKwljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgorCQlpZiAoZGF0YS0+ZmllbGQgPT0gMCkKKwkJCXJldHVybiBzYWE3MTI3X3NldF9jYyhzZCwgZGF0YSk7CisJCXJldHVybiBzYWE3MTI3X3NldF94ZHMoc2QsIGRhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgc2FhNzEyN19nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCisJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmVnLT52YWwgPSBzYWE3MTI3X3JlYWQoc2QsIHJlZy0+cmVnICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEyN19zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsCisJCQkJcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJc2FhNzEyN193cml0ZShzZCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2FhNzEyN19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgc3RhdGUtPmlkZW50LCAwKTsKK30KKworc3RhdGljIGludCBzYWE3MTI3X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3Qgc2FhNzEyN19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2luZm8oc2QsICJTdGFuZGFyZDogJXNcbiIsIChzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKSA/ICI2MCBIeiIgOiAiNTAgSHoiKTsKKwl2NGwyX2luZm8oc2QsICJJbnB1dDogICAgJXNcbiIsIHN0YXRlLT5pbnB1dF90eXBlID8gICJjb2xvciBiYXJzIiA6ICJub3JtYWwiKTsKKwl2NGwyX2luZm8oc2QsICJPdXRwdXQ6ICAgJXNcbiIsIHN0YXRlLT52aWRlb19lbmFibGUgPworCQkJb3V0cHV0X3N0cnNbc3RhdGUtPm91dHB1dF90eXBlXSA6ICJkaXNhYmxlZCIpOworCXY0bDJfaW5mbyhzZCwgIldTUzogICAgICAlc1xuIiwgc3RhdGUtPndzc19lbmFibGUgPworCQkJd3NzX3N0cnNbc3RhdGUtPndzc19tb2RlXSA6ICJkaXNhYmxlZCIpOworCXY0bDJfaW5mbyhzZCwgIlZQUzogICAgICAlc1xuIiwgc3RhdGUtPnZwc19lbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwl2NGwyX2luZm8oc2QsICJDQzogICAgICAgJXNcbiIsIHN0YXRlLT5jY19lbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTI3X2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gc2FhNzEyN19sb2dfc3RhdHVzLAorCS5nX2NoaXBfaWRlbnQgPSBzYWE3MTI3X2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIgPSBzYWE3MTI3X2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBzYWE3MTI3X3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxMjdfdmlkZW9fb3BzID0geworCS5zX3ZiaV9kYXRhID0gc2FhNzEyN19zX3ZiaV9kYXRhLAorCS5nX2ZtdCA9IHNhYTcxMjdfZ19mbXQsCisJLnNfc3RkX291dHB1dCA9IHNhYTcxMjdfc19zdGRfb3V0cHV0LAorCS5zX3JvdXRpbmcgPSBzYWE3MTI3X3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSBzYWE3MTI3X3Nfc3RyZWFtLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzEyN19vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzEyN19jb3JlX29wcywKKwkudmlkZW8gPSAmc2FhNzEyN192aWRlb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHNhYTcxMjdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNhYTcxMjdfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIHZiaSA9IHsgMCwgMCwgMCwgMCB9OyAgLyogc2V0IHRvIGRpc2FibGVkICovCiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCkBAIC02NzQsNDAgKzcxMyw0MiBAQAogCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRldGVjdGluZyBzYWE3MTI3IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSk7CiAKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTI3X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTI3X29wcyk7CisKIAkvKiBGaXJzdCB0ZXN0IHJlZ2lzdGVyIDA6IEJpdHMgNS03IGFyZSBhIHZlcnNpb24gSUQgKHNob3VsZCBiZSAwKSwKIAkgICBhbmQgYml0IDIgc2hvdWxkIGFsc28gYmUgMC4KIAkgICBUaGlzIGlzIHJhdGhlciBnZW5lcmFsLCBzbyB0aGUgc2Vjb25kIHRlc3QgaXMgbW9yZSBzcGVjaWZpYyBhbmQKIAkgICBsb29rcyBhdCB0aGUgJ2VuZGluZyBwb2ludCBvZiBidXJzdCBpbiBjbG9jayBjeWNsZXMnIHdoaWNoIGlzCiAJICAgMHgxZCBhZnRlciBhIHJlc2V0IGFuZCBub3QgZXhwZWN0ZWQgdG8gZXZlciBjaGFuZ2UuICovCi0JaWYgKChzYWE3MTI3X3JlYWQoY2xpZW50LCAwKSAmIDB4ZTQpICE9IDAgfHwKLQkJCShzYWE3MTI3X3JlYWQoY2xpZW50LCAweDI5KSAmIDB4M2YpICE9IDB4MWQpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2FhNzEyNyBub3QgZm91bmRcbiIpOworCWlmICgoc2FhNzEyN19yZWFkKHNkLCAwKSAmIDB4ZTQpICE9IDAgfHwKKwkJCShzYWE3MTI3X3JlYWQoc2QsIDB4MjkpICYgMHgzZikgIT0gMHgxZCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzYWE3MTI3IG5vdCBmb3VuZFxuIik7CisJCWtmcmVlKHN0YXRlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMjdfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChzdGF0ZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKIAogCS8qIENvbmZpZ3VyZSBFbmNvZGVyICovCiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJDb25maWd1cmluZyBlbmNvZGVyXG4iKTsKLQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoY2xpZW50LCBzYWE3MTI3X2luaXRfY29uZmlnX2NvbW1vbik7Ci0Jc2FhNzEyN19zZXRfc3RkKGNsaWVudCwgVjRMMl9TVERfTlRTQyk7Ci0Jc2FhNzEyN19zZXRfb3V0cHV0X3R5cGUoY2xpZW50LCBTQUE3MTI3X09VVFBVVF9UWVBFX0JPVEgpOwotCXNhYTcxMjdfc2V0X3ZwcyhjbGllbnQsICZ2YmkpOwotCXNhYTcxMjdfc2V0X3dzcyhjbGllbnQsICZ2YmkpOwotCXNhYTcxMjdfc2V0X2NjKGNsaWVudCwgJnZiaSk7Ci0Jc2FhNzEyN19zZXRfeGRzKGNsaWVudCwgJnZiaSk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ29uZmlndXJpbmcgZW5jb2RlclxuIik7CisJc2FhNzEyN193cml0ZV9pbml0dGFiKHNkLCBzYWE3MTI3X2luaXRfY29uZmlnX2NvbW1vbik7CisJc2FhNzEyN19zZXRfc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKKwlzYWE3MTI3X3NldF9vdXRwdXRfdHlwZShzZCwgU0FBNzEyN19PVVRQVVRfVFlQRV9CT1RIKTsKKwlzYWE3MTI3X3NldF92cHMoc2QsICZ2YmkpOworCXNhYTcxMjdfc2V0X3dzcyhzZCwgJnZiaSk7CisJc2FhNzEyN19zZXRfY2Moc2QsICZ2YmkpOworCXNhYTcxMjdfc2V0X3hkcyhzZCwgJnZiaSk7CiAJaWYgKHRlc3RfaW1hZ2UgPT0gMSkKIAkJLyogVGhlIEVuY29kZXIgaGFzIGFuIGludGVybmFsIENvbG9yYmFyIGdlbmVyYXRvciAqLwogCQkvKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgKi8KLQkJc2FhNzEyN19zZXRfaW5wdXRfdHlwZShjbGllbnQsIFNBQTcxMjdfSU5QVVRfVFlQRV9URVNUX0lNQUdFKTsKKwkJc2FhNzEyN19zZXRfaW5wdXRfdHlwZShzZCwgU0FBNzEyN19JTlBVVF9UWVBFX1RFU1RfSU1BR0UpOwogCWVsc2UKLQkJc2FhNzEyN19zZXRfaW5wdXRfdHlwZShjbGllbnQsIFNBQTcxMjdfSU5QVVRfVFlQRV9OT1JNQUwpOwotCXNhYTcxMjdfc2V0X3ZpZGVvX2VuYWJsZShjbGllbnQsIDEpOworCQlzYWE3MTI3X3NldF9pbnB1dF90eXBlKHNkLCBTQUE3MTI3X0lOUFVUX1RZUEVfTk9STUFMKTsKKwlzYWE3MTI3X3NldF92aWRlb19lbmFibGUoc2QsIDEpOwogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSkgewkvKiBDaGlwIHR5cGUgaXMgYWxyZWFkeSBrbm93biAqLwogCQlzdGF0ZS0+aWRlbnQgPSBpZC0+ZHJpdmVyX2RhdGE7CkBAIC03MTUsMTAgKzc1NiwxMCBAQAogCQlpbnQgcmVhZF9yZXN1bHQ7CiAKIAkJLyogRGV0ZWN0IGlmIGl0J3MgYW4gc2FhNzEyOSAqLwotCQlyZWFkX3Jlc3VsdCA9IHNhYTcxMjdfcmVhZChjbGllbnQsIFNBQTcxMjlfUkVHX0ZBREVfS0VZX0NPTDIpOwotCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwgMHhhYSk7Ci0JCWlmIChzYWE3MTI3X3JlYWQoY2xpZW50LCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyKSA9PSAweGFhKSB7Ci0JCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwKKwkJcmVhZF9yZXN1bHQgPSBzYWE3MTI3X3JlYWQoc2QsIFNBQTcxMjlfUkVHX0ZBREVfS0VZX0NPTDIpOworCQlzYWE3MTI3X3dyaXRlKHNkLCBTQUE3MTI5X1JFR19GQURFX0tFWV9DT0wyLCAweGFhKTsKKwkJaWYgKHNhYTcxMjdfcmVhZChzZCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMikgPT0gMHhhYSkgeworCQkJc2FhNzEyN193cml0ZShzZCwgU0FBNzEyOV9SRUdfRkFERV9LRVlfQ09MMiwKIAkJCQkJcmVhZF9yZXN1bHQpOwogCQkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTI5OwogCQkJc3RybGNweShjbGllbnQtPm5hbWUsICJzYWE3MTI5IiwgSTJDX05BTUVfU0laRSk7CkBAIC03MjgsMTAgKzc2OSwxMCBAQAogCQl9CiAJfQogCi0JdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGNsaWVudC0+bmFtZSwKKwl2NGwyX2luZm8oc2QsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgY2xpZW50LT5uYW1lLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAJaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMjkpCi0JCXNhYTcxMjdfd3JpdGVfaW5pdHRhYihjbGllbnQsIHNhYTcxMjlfaW5pdF9jb25maWdfZXh0cmEpOworCQlzYWE3MTI3X3dyaXRlX2luaXR0YWIoc2QsIHNhYTcxMjlfaW5pdF9jb25maWdfZXh0cmEpOwogCXJldHVybiAwOwogfQogCkBAIC03MzksOSArNzgwLDEyIEBACiAKIHN0YXRpYyBpbnQgc2FhNzEyN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CiAJLyogVHVybiBvZmYgVFYgb3V0cHV0ICovCi0Jc2FhNzEyN19zZXRfdmlkZW9fZW5hYmxlKGNsaWVudCwgMCk7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXNhYTcxMjdfc2V0X3ZpZGVvX2VuYWJsZShzZCwgMCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzYwLDcgKzgwNCw2IEBACiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzEyNyIsCiAJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMjcsCi0JLmNvbW1hbmQgPSBzYWE3MTI3X2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzEyN19wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzEyN19yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzEyN19pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IGRkYzU0MDIuLmEyZTNmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtNDYwNiw2ICs0NjA2LDQzIEBACiAJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAogCQl9LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfS1dPUkxEX1BMVVNfVFZfQU5BTE9HXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkt3b3JsZCBQbHVzIFRWIEFuYWxvZyBMaXRlIFBDSSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVFVORVJfVEVBNTc2NywKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg4MDAwMDcwMCwKKwkJLmlucHV0cyA9IHsgeworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMSwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJCS50diAgICAgPSAxLAorCQkJLmdwaW8gICA9IDB4MTAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4MjAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gOCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5ncGlvICAgPSAweDIwMCwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4MTAwLAorCQl9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSAyLAorCQl9LAorCX0sCiB9OwogCiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzEzNF9iY291bnQgPSBBUlJBWV9TSVpFKHNhYTcxMzRfYm9hcmRzKTsKQEAgLTQ3MzYsNiArNDc3MywxMiBAQAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9NRDcxMzQsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTZiZSwgLyogQ1RYOTQ2IGFuYWxvZyBUViwgSFcgbXBlZywgRFZCLVQgKi8KKwkJLnN1YmRldmljZSAgICA9IDB4NTAwMCwgLyogb25seSBhbmFsb2cgVFYgYW5kIERWQi1UIGZvciBub3cgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfTUQ3MTM0LAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAogCQkuc3VidmVuZG9yICAgID0gMHgxMDQ4LAogCQkuc3ViZGV2aWNlICAgID0gMHgyMjZiLApAQCAtNTY1Myw2ICs1Njk2LDEyIEBACiAJCS5zdWJkZXZpY2UgICAgPSAweDQ4NzgsIC8qIFJFVjoxLjAyRyAqLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjEsCiAJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE3ZGUsCisJCS5zdWJkZXZpY2UgICAgPSAweDcxMjgsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRywKKwl9LCB7CiAJCS8qIC0tLSBib2FyZHMgd2l0aG91dCBlZXByb20gKyBzdWJzeXN0ZW0gSUQgLS0tICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKQEAgLTU4ODAsNiArNTkyOSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9HRU5JVVNfVFZHT19BMTFNQ0U6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1JFQUxfQU5HRUxfMjIwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfUExVU19UVl9BTkFMT0c6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgpAQCAtNjA0OCw3ICs2MDk4LDcgQEAKIAkJc3RydWN0IHY0bDJfcHJpdl90dW5fY29uZmlnICB4YzIwMjhfY2ZnOwogCQlzdHJ1Y3QgeGMyMDI4X2N0cmwgICAgICAgICAgIGN0bDsKIAotCQltZW1zZXQoJnhjMjAyOF9jZmcsIDAsIHNpemVvZihjdGwpKTsKKwkJbWVtc2V0KCZ4YzIwMjhfY2ZnLCAwLCBzaXplb2YoeGMyMDI4X2NmZykpOwogCQltZW1zZXQoJmN0bCwgMCwgc2l6ZW9mKGN0bCkpOwogCiAJCWN0bC5mbmFtZSAgID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDhjNDYxMTUuLmQ5YTU2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC05NTQsMjAgKzk1NCwxNCBAQAogCS8qIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGktZnJvbnRlbmQgKi8KIAltdXRleF9pbml0KCZkZXYtPmZyb250ZW5kcy5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcm9udGVuZHMuZmVsaXN0KTsKLQlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nIDEgZnJvbnRlbmRcbiIsIF9fZnVuY19fKTsKLQotCWlmICh2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKSA9PSBOVUxMKSB7CisJZmUwID0gdmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCi0JZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOwotCWlmICghZmUwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwogCWRldi0+dHMubnJfYnVmcyAgICA9IDMyOwogCWRldi0+dHMubnJfcGFja2V0cyA9IDMyKjQ7CkBAIC0xMzc2LDcgKzEzNzAsNyBAQAogCQl9OwogCiAJCWlmICghZmUwLT5kdmIuZnJvbnRlbmQpCi0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAKIAkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJaWYgKCFmZSkgewpAQCAtMTM4OCw3ICsxMzgyLDcgQEAKIAogCWlmIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvZHZiOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCX0KIAkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KIAlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrOwpAQCAtMTQxMSwxMSArMTQwNSw4IEBACiAJcmV0dXJuIHJldDsKIAogZGV0dGFjaF9mcm9udGVuZDoKLQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCi0JCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOwotCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKLQotCXJldHVybiAtMTsKKwl2aWRlb2J1Zl9kdmJfZGVhbGxvY19mcm9udGVuZHMoJmRldi0+ZnJvbnRlbmRzKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBkdmJfZmluaShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTE0NTQsOCArMTQ0NSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKKwl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggYzUzZmQ1Zi4uZDIxMjRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC05Nyw2ICs5NywxNSBAQAogCWRwcmludGsoImJ1aWxkX2tleSBncGlvPTB4JXggbWFzaz0weCV4IGRhdGE9JWRcbiIsCiAJCWdwaW8sIGlyLT5tYXNrX2tleWNvZGUsIGRhdGEpOwogCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRzoKKwkJaWYgKGRhdGEgPT0gaXItPm1hc2tfa2V5Y29kZSkKKwkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworCQllbHNlCisJCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGRhdGEsIGRhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoaXItPnBvbGxpbmcpIHsKIAkJaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8CiAJCSAgICAoaXItPm1hc2tfa2V5dXAgICAgJiYgICgwID09IChncGlvICYgaXItPm1hc2tfa2V5dXApKSkpIHsKQEAgLTU4Niw2ICs1OTUsMTEgQEAKIAkJbWFza19rZXl1cCAgID0gMHg0MDAwOwogCQlwb2xsaW5nID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfUExVU19UVl9BTkFMT0c6CisJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZzsKKwkJbWFza19rZXljb2RlID0gMHg3ZjsKKwkJcG9sbGluZyA9IDQwOyAvKiBtcyAqLworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJcHJpbnRrKCIlczogT29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwppbmRleCBjNWQwYjQ0Li43NmIxNjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAkJLm1vZGUgICAgICAgICAgPSBUVkFVRElPX0ZNX01PTk8sCiAJfQogfTsKLSNkZWZpbmUgVFZBVURJTyAoc2l6ZW9mKHR2YXVkaW8pL3NpemVvZihzdHJ1Y3Qgc2FhNzEzNF90dmF1ZGlvKSkKKyNkZWZpbmUgVFZBVURJTyBBUlJBWV9TSVpFKHR2YXVkaW8pCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCAyNDA5NmQ2Li5mNmMxZmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI3NSw4ICsyNzUsOSBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JFQUxfQU5HRUxfMjIwICAgICAxNTAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSSAgMTUxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiAgICAgICAgIDE1MgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRyAxNTMKIAotI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyA4CisjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDMyCiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKaW5kZXggYWY2MGVkZS4uOWJlZmNhNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jCkBAIC0zNyw3ICszNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTd4IGF1ZGlvL3ZpZGVvIGRlY29kZXIgZHJpdmVyIik7CkBAIC01NCw2ICs1NCw3IEBACiAgKi8KIAogc3RydWN0IHNhYTcxN3hfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJaW50IGlucHV0OwogCWludCBlbmFibGU7CkBAIC03NSw2ICs3NiwxMSBAQAogCWludCBhdWRpb19pbnB1dDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxN3hfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxN3hfc3RhdGUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogZm9yIGF1ZGlvIG1vZGUgKi8KQEAgLTg4LDggKzk0LDkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE3MTd4X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE3eF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgcmVnLCB1MzIgdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+YWRhcHRlcjsKIAlpbnQgZndfYWRkciA9IHJlZyA9PSAweDQ1NCB8fCAocmVnID49IDB4NDY0ICYmIHJlZyA8PSAweDQ3OCkgfHwgcmVnID09IDB4NDgwIHx8IHJlZyA9PSAweDQ4ODsKIAl1bnNpZ25lZCBjaGFyIG1tMVs2XTsKQEAgLTEwOSwyMCArMTE2LDIxIEBACiAJfQogCW1zZy5sZW4gPSBmd19hZGRyID8gNSA6IDM7IC8qIExvbmcgUmVnaXN0ZXJzIGhhdmUgKm9ubHkqIHRocmVlIGJ5dGVzISAqLwogCW1zZy5idWYgPSBtbTE7Ci0JdjRsX2RiZygyLCBkZWJ1ZywgY2xpZW50LCAid3JvdGU6ICByZWcgMHglMDN4PSUwOHhcbiIsIHJlZywgdmFsdWUpOworCXY0bDJfZGJnKDIsIGRlYnVnLCBzZCwgIndyb3RlOiAgcmVnIDB4JTAzeD0lMDh4XG4iLCByZWcsIHZhbHVlKTsKIAlyZXR1cm4gaTJjX3RyYW5zZmVyKGFkYXAsICZtc2csIDEpID09IDE7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTcxN3hfd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgKmRhdGEpCitzdGF0aWMgdm9pZCBzYWE3MTd4X3dyaXRlX3JlZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpkYXRhKQogewogCXdoaWxlIChkYXRhWzBdIHx8IGRhdGFbMV0pIHsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIGRhdGFbMF0sIGRhdGFbMV0pOworCQlzYWE3MTd4X3dyaXRlKHNkLCBkYXRhWzBdLCBkYXRhWzFdKTsKIAkJZGF0YSArPSAyOwogCX0KIH0KIAotc3RhdGljIHUzMiBzYWE3MTd4X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIHJlZykKK3N0YXRpYyB1MzIgc2FhNzE3eF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+YWRhcHRlcjsKIAlpbnQgZndfYWRkciA9IChyZWcgPj0gMHg0MDQgJiYgcmVnIDw9IDB4NGI4KSB8fCByZWcgPT0gMHg1Mjg7CiAJdW5zaWduZWQgY2hhciBtbTFbMl07CkBAIC0xNDYsNyArMTU0LDcgQEAKIAllbHNlCiAJCXZhbHVlID0gbW0yWzBdICYgMHhmZjsKIAotCXY0bF9kYmcoMiwgZGVidWcsIGNsaWVudCwgInJlYWQ6ICByZWcgMHglMDN4PTB4JTA4eFxuIiwgcmVnLCB2YWx1ZSk7CisJdjRsMl9kYmcoMiwgZGVidWcsIHNkLCAicmVhZDogIHJlZyAweCUwM3g9MHglMDh4XG4iLCByZWcsIHZhbHVlKTsKIAlyZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTY4MCw3ICs2ODgsNyBAQAogCiAKIC8qIEdldCBkZXRlY3RlZCBhdWRpbyBmbGFncyAoZnJvbSBzYWE3MTM0IGRyaXZlcikgKi8KLXN0YXRpYyB2b2lkIGdldF9pbmZfZGV2X3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIHZvaWQgZ2V0X2luZl9kZXZfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWludCAqZHVhbF9mbGFnLCBpbnQgKnN0ZXJlb19mbGFnKQogewogCXUzMiByZWdfZGF0YTM7CkBAIC03MTksMTMgKzcyNywxMyBAQAogCS8qIChkZW1kZWMgc3RhdHVzOiAweDUyOCkgKi8KIAogCS8qIHJlYWQgY3VycmVudCBzdGF0dXMgKi8KLQlyZWdfZGF0YTMgPSBzYWE3MTd4X3JlYWQoY2xpZW50LCAweDA1MjgpOworCXJlZ19kYXRhMyA9IHNhYTcxN3hfcmVhZChzZCwgMHgwNTI4KTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInR2YXVkaW8gdGhyZWFkIHN0YXR1czogMHgleCBbJXMlcyVzXVxuIiwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ0dmF1ZGlvIHRocmVhZCBzdGF0dXM6IDB4JXggWyVzJXMlc11cbiIsCiAJCXJlZ19kYXRhMywgc3RkcmVzW3JlZ19kYXRhMyAmIDB4MWZdLAogCQkocmVnX2RhdGEzICYgMHgwMDAwMjApID8gIixzdGVyZW8iIDogIiIsCiAJCShyZWdfZGF0YTMgJiAweDAwMDA0MCkgPyAiLGR1YWwiICAgOiAiIik7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGV0YWlsZWQgc3RhdHVzOiAiCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGV0YWlsZWQgc3RhdHVzOiAiCiAJCSIlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlcyMlc1xuIiwKIAkJKHJlZ19kYXRhMyAmIDB4MDAwMDgwKSA/ICIgQTIvRUlBSiBwaWxvdCB0b25lICIgICAgIDogIiIsCiAJCShyZWdfZGF0YTMgJiAweDAwMDEwMCkgPyAiIEEyL0VJQUogZHVhbCAiICAgICAgICAgICA6ICIiLApAQCAtNzQ2LDUxICs3NTQsNTEgQEAKIAkJKHJlZ19kYXRhMyAmIDB4MTAwMDAwKSA/ICIgaW5pdCBkb25lICIgICAgICAgICAgICAgIDogIiIpOwogCiAJaWYgKHJlZ19kYXRhMyAmIDB4MDAwMjIwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNUISEhXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU1QhISFcbiIpOwogCQkqc3RlcmVvX2ZsYWcgPSAxOwogCX0KIAogCWlmIChyZWdfZGF0YTMgJiAweDAwMDE0MCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJEVUFMISEhXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiRFVBTCEhIVxuIik7CiAJCSpkdWFsX2ZsYWcgPSAxOwogCX0KIH0KIAogLyogcmVncyB3cml0ZSB0byBzZXQgYXVkaW8gbW9kZSAqLwotc3RhdGljIHZvaWQgc2V0X2F1ZGlvX21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGF1ZGlvX21vZGUpCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9fbW9kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgYXVkaW9fbW9kZSkKIHsKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIHJlZ2lzdGVycyB0byBzZXQgYXVkaW8gbW9kZSBieSBzZXQgJWRcbiIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAid3JpdGluZyByZWdpc3RlcnMgdG8gc2V0IGF1ZGlvIG1vZGUgYnkgc2V0ICVkXG4iLAogCQkJYXVkaW9fbW9kZSk7CiAKLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg0NmMsIHJlZ19zZXRfYXVkaW9fdGVtcGxhdGVbYXVkaW9fbW9kZV1bMF0pOwotCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDQ3MCwgcmVnX3NldF9hdWRpb190ZW1wbGF0ZVthdWRpb19tb2RlXVsxXSk7CisJc2FhNzE3eF93cml0ZShzZCwgMHg0NmMsIHJlZ19zZXRfYXVkaW9fdGVtcGxhdGVbYXVkaW9fbW9kZV1bMF0pOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NDcwLCByZWdfc2V0X2F1ZGlvX3RlbXBsYXRlW2F1ZGlvX21vZGVdWzFdKTsKIH0KIAogLyogd3JpdGUgcmVncyB0byB2aWRlbyBvdXRwdXQgbGV2ZWwgKGJyaWdodCxjb250cmFzdCxodWUsc2F0KSAqLwotc3RhdGljIHZvaWQgc2V0X3ZpZGVvX291dHB1dF9sZXZlbF9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgdm9pZCBzZXRfdmlkZW9fb3V0cHV0X2xldmVsX3JlZ3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXIpCiB7CiAJLyogYnJpZ2h0bmVzcyBmZmggKGJyaWdodCkgLSA4MGggKElUVSBsZXZlbCkgLSAwMGggKGRhcmspICovCi0Jc2FhNzE3eF93cml0ZShjbGllbnQsIDB4MTBhLCBkZWNvZGVyLT5icmlnaHQpOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBhLCBkZWNvZGVyLT5icmlnaHQpOwogCiAJLyogY29udHJhc3QgN2ZoIChtYXg6IDEuOTg0KSAtIDQ0aCAoSVRVKSAtIDQwaCAoMS4wKSAtCiAJICAgMGggKGx1bWluYW5jZSBvZmYpIDQwOiBpMmMgZHVtcAogCSAgIGMwaCAoLTEuMCBpbnZlcnNlIGNocm9taW5hbmNlKQogCSAgIDgwaCAoLTIuMCBpbnZlcnNlIGNocm9taW5hbmNlKSAqLwotCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDEwYiwgZGVjb2Rlci0+Y29udHJhc3QpOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBiLCBkZWNvZGVyLT5jb250cmFzdCk7CiAKIAkvKiBzYXR1cmF0aW9uPyA3ZmgobWF4KS00MGgoSVRVKS0waChjb2xvciBvZmYpCiAJICAgYzBoICgtMS4wIGludmVyc2UgY2hyb21pbmFuY2UpCiAJICAgODBoICgtMi4wIGludmVyc2UgY2hyb21pbmFuY2UpICovCi0Jc2FhNzE3eF93cml0ZShjbGllbnQsIDB4MTBjLCBkZWNvZGVyLT5zYXQpOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBjLCBkZWNvZGVyLT5zYXQpOwogCiAJLyogY29sb3IgaHVlIChwaGFzZSkgY29udHJvbAogCSAgIDdmaCAoKzE3OC42KSAtIDBoICgwIG5vcm1hbCkgLSA4MGggKC0xODAuMCkgKi8KLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHgxMGQsIGRlY29kZXItPmh1ZSk7CisJc2FhNzE3eF93cml0ZShzZCwgMHgxMGQsIGRlY29kZXItPmh1ZSk7CiB9CiAKIC8qIHdyaXRlIHJlZ3MgdG8gc2V0IGF1ZGlvIHZvbHVtZSwgYmFzcyBhbmQgdHJlYmxlICovCi1zdGF0aWMgaW50IHNldF9hdWRpb19yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHNldF9hdWRpb19yZWdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpkZWNvZGVyKQogewogCXU4IG11dGUgPSAweGFjOyAvKiAtODQgZEIgKi8KQEAgLTc5OCw4ICs4MDYsOCBAQAogCXVuc2lnbmVkIGludCB3b3JrX2wsIHdvcmtfcjsKIAogCS8qIHNldCBTSUYgYW5hbG9nIEkvTyBzZWxlY3QgKi8KLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHgwNTk0LCBkZWNvZGVyLT5hdWRpb19pbnB1dCk7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGF1ZGlvIGlucHV0ICVkXG4iLAorCXNhYTcxN3hfd3JpdGUoc2QsIDB4MDU5NCwgZGVjb2Rlci0+YXVkaW9faW5wdXQpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBhdWRpbyBpbnB1dCAlZFxuIiwKIAkJCWRlY29kZXItPmF1ZGlvX2lucHV0KTsKIAogCS8qIG5vcm1hbGl6ZSAoIDY1NTM1IHRvIDAgLT4gMjQgdG8gLTQwIChub3QgLTg0KSkgKi8KQEAgLTgxOSwxNyArODI3LDE3IEBACiAJCQkoKHU4KWRlY29kZXItPmF1ZGlvX21haW5fdm9sX3IgPDwgOCk7CiAJfQogCi0Jc2FhNzE3eF93cml0ZShjbGllbnQsIDB4NDgwLCB2YWwpOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NDgwLCB2YWwpOwogCiAJLyogYmFzcyBhbmQgdHJlYmxlOyBnbyB0byBhbm90aGVyIGZ1bmN0aW9uICovCiAJLyogc2V0IGJhc3MgYW5kIHRyZWJsZSAqLwogCXZhbCA9IGRlY29kZXItPmF1ZGlvX21haW5fYmFzcyB8IChkZWNvZGVyLT5hdWRpb19tYWluX3RyZWJsZSA8PCA4KTsKLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg0ODgsIHZhbCk7CisJc2FhNzE3eF93cml0ZShzZCwgMHg0ODgsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqIHNjYWxpbmcgc3RhZmYgKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBzZXRfaF9wcmVzY2FsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIHZvaWQgc2V0X2hfcHJlc2NhbGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJaW50IHRhc2ssIGludCBwcmVzY2FsZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHsKQEAgLTg2MiwxMDcgKzg3MCwxMDEgQEAKIAkJcmV0dXJuOwogCiAJLyogaG9yaXpvbmFsIHByZXNjYWxpbmcgKi8KLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg2MCArIHRhc2tfc2hpZnQsIHZhbHNbaV0ueHBzYyk7CisJc2FhNzE3eF93cml0ZShzZCwgMHg2MCArIHRhc2tfc2hpZnQsIHZhbHNbaV0ueHBzYyk7CiAJLyogYWNjdW11bGF0aW9uIGxlbmd0aCAqLwotCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDYxICsgdGFza19zaGlmdCwgdmFsc1tpXS54YWNsKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDYxICsgdGFza19zaGlmdCwgdmFsc1tpXS54YWNsKTsKIAkvKiBsZXZlbCBjb250cm9sICovCi0Jc2FhNzE3eF93cml0ZShjbGllbnQsIDB4NjIgKyB0YXNrX3NoaWZ0LAorCXNhYTcxN3hfd3JpdGUoc2QsIDB4NjIgKyB0YXNrX3NoaWZ0LAogCQkJKHZhbHNbaV0ueGMyXzEgPDwgMykgfCB2YWxzW2ldLnhkY2cpOwogCS8qRklSIHByZWZpbHRlciBjb250cm9sICovCi0Jc2FhNzE3eF93cml0ZShjbGllbnQsIDB4NjMgKyB0YXNrX3NoaWZ0LAorCXNhYTcxN3hfd3JpdGUoc2QsIDB4NjMgKyB0YXNrX3NoaWZ0LAogCQkJKHZhbHNbaV0udnBmeSA8PCAyKSB8IHZhbHNbaV0udnBmeSk7CiB9CiAKIC8qKioqKioqKioqIHNjYWxpbmcgc3RhZmYgKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBzZXRfdl9zY2FsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdGFzaywgaW50IHlzY2FsZSkKK3N0YXRpYyB2b2lkIHNldF92X3NjYWxlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB0YXNrLCBpbnQgeXNjYWxlKQogewogCWludCB0YXNrX3NoaWZ0OwogCiAJdGFza19zaGlmdCA9IHRhc2sgKiAweDQwOwogCS8qIFZlcnRpY2FsIHNjYWxpbmcgcmF0aW8gKExPVykgKi8KLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg3MCArIHRhc2tfc2hpZnQsIHlzY2FsZSAmIDB4ZmYpOworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NzAgKyB0YXNrX3NoaWZ0LCB5c2NhbGUgJiAweGZmKTsKIAkvKiBWZXJ0aWNhbCBzY2FsaW5nIHJhdGlvIChISSkgKi8KLQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg3MSArIHRhc2tfc2hpZnQsIHlzY2FsZSA+PiA4KTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDcxICsgdGFza19zaGlmdCwgeXNjYWxlID4+IDgpOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCitzdGF0aWMgaW50IHNhYTcxN3hfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0JLyogbm90IHlldCBpbXBsYW1lbnQsIHNvIHNhYTcxN3hfY2ZnXz8/aHpfPz9fYXVkaW8gaXMgbm90IGRlZmluZWQuICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE3eF9zZXRfdjRsY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKIAkJc3RhdGUtPmJyaWdodCA9IGN0cmwtPnZhbHVlOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJicmlnaHQ6JWRcbiIsIHN0YXRlLT5icmlnaHQpOwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHgxMGEsIHN0YXRlLT5icmlnaHQpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJicmlnaHQ6JWRcbiIsIHN0YXRlLT5icmlnaHQpOworCQlzYWE3MTd4X3dyaXRlKHNkLCAweDEwYSwgc3RhdGUtPmJyaWdodCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCiAJCXN0YXRlLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjb250cmFzdDolZFxuIiwgc3RhdGUtPmNvbnRyYXN0KTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4MTBiLCBzdGF0ZS0+Y29udHJhc3QpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjb250cmFzdDolZFxuIiwgc3RhdGUtPmNvbnRyYXN0KTsKKwkJc2FhNzE3eF93cml0ZShzZCwgMHgxMGIsIHN0YXRlLT5jb250cmFzdCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CisJCQl2NGwyX2VycihzZCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCiAJCXN0YXRlLT5zYXQgPSBjdHJsLT52YWx1ZTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2F0OiVkXG4iLCBzdGF0ZS0+c2F0KTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4MTBjLCBzdGF0ZS0+c2F0KTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2F0OiVkXG4iLCBzdGF0ZS0+c2F0KTsKKwkJc2FhNzE3eF93cml0ZShzZCwgMHgxMGMsIHN0YXRlLT5zYXQpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgogCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI3IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIAogCQlzdGF0ZS0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImh1ZTolZFxuIiwgc3RhdGUtPmh1ZSk7Ci0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDEwZCwgc3RhdGUtPmh1ZSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImh1ZTolZFxuIiwgc3RhdGUtPmh1ZSk7CisJCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBkLCBzdGF0ZS0+aHVlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCXN0YXRlLT5hdWRpb19tYWluX211dGUgPSBjdHJsLT52YWx1ZTsKLQkJc2V0X2F1ZGlvX3JlZ3MoY2xpZW50LCBzdGF0ZSk7CisJCXNldF9hdWRpb19yZWdzKHNkLCBzdGF0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CiAJCXN0YXRlLT5hdWRpb19tYWluX3ZvbHVtZSA9IGN0cmwtPnZhbHVlOwotCQlzZXRfYXVkaW9fcmVncyhjbGllbnQsIHN0YXRlKTsKKwkJc2V0X2F1ZGlvX3JlZ3Moc2QsIHN0YXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJCXN0YXRlLT5hdWRpb19tYWluX2JhbGFuY2UgPSBjdHJsLT52YWx1ZTsKLQkJc2V0X2F1ZGlvX3JlZ3MoY2xpZW50LCBzdGF0ZSk7CisJCXNldF9hdWRpb19yZWdzKHNkLCBzdGF0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJCXN0YXRlLT5hdWRpb19tYWluX3RyZWJsZSA9IGN0cmwtPnZhbHVlOwotCQlzZXRfYXVkaW9fcmVncyhjbGllbnQsIHN0YXRlKTsKKwkJc2V0X2F1ZGlvX3JlZ3Moc2QsIHN0YXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJCXN0YXRlLT5hdWRpb19tYWluX2Jhc3MgPSBjdHJsLT52YWx1ZTsKLQkJc2V0X2F1ZGlvX3JlZ3MoY2xpZW50LCBzdGF0ZSk7CisJCXNldF9hdWRpb19yZWdzKHNkLCBzdGF0ZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTk3Miw5ICs5NzQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfZ2V0X3Y0bGN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc2FhNzE3eF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtMTEwMywxMyArMTEwNSwxNSBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IHNhYTcxN3hfc2V0X3ZpZGVvX2lucHV0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzYWE3MTd4X3N0YXRlICpkZWNvZGVyLCBpbnQgaW5wKQorc3RhdGljIGludCBzYWE3MTd4X3NfdmlkZW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKKwlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqZGVjb2RlciA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgaW5wID0gcm91dGUtPmlucHV0OwogCWludCBpc190dW5lciA9IGlucCAmIDB4ODA7ICAvKiB0dW5lciBpbnB1dCBmbGFnICovCiAKIAlpbnAgJj0gMHg3ZjsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IGlucHV0ICglZClcbiIsIGlucCk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGVjb2RlciBzZXQgaW5wdXQgKCVkKVxuIiwgaW5wKTsKIAkvKiBpbnB1dHMgZnJvbSAwLTkgYXJlIGF2YWlsYWJsZSovCiAJLyogc2FhNzE3eCBoYXZlIG1vZGUwLW1vZGU5IGJ1dCBtb2RlNSBpcyByZXNlcnZlZC4gKi8KIAlpZiAoaW5wIDwgMCB8fCBpbnAgPiA5IHx8IGlucCA9PSA1KQpAQCAtMTExOSwyMjIgKzExMjMsMTk3IEBACiAJCWludCBpbnB1dF9saW5lID0gaW5wOwogCiAJCWRlY29kZXItPmlucHV0ID0gaW5wdXRfbGluZTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAgIm5vdyBzZXR0aW5nICVzIGlucHV0ICVkXG4iLAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICAibm93IHNldHRpbmcgJXMgaW5wdXQgJWRcbiIsCiAJCQkJaW5wdXRfbGluZSA+PSA2ID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIsCiAJCQkJaW5wdXRfbGluZSk7CiAKIAkJLyogc2VsZWN0IG1vZGUgKi8KLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4MTAyLAotCQkJCShzYWE3MTd4X3JlYWQoY2xpZW50LCAweDEwMikgJiAweGYwKSB8CisJCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTAyLAorCQkJCShzYWE3MTd4X3JlYWQoc2QsIDB4MTAyKSAmIDB4ZjApIHwKIAkJCQlpbnB1dF9saW5lKTsKIAogCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNi4uOSAqLwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHgxMDksCi0JCQkJKHNhYTcxN3hfcmVhZChjbGllbnQsIDB4MTA5KSAmIDB4N2YpIHwKKwkJc2FhNzE3eF93cml0ZShzZCwgMHgxMDksCisJCQkJKHNhYTcxN3hfcmVhZChzZCwgMHgxMDkpICYgMHg3ZikgfAogCQkJCShpbnB1dF9saW5lIDwgNiA/IDB4MCA6IDB4ODApKTsKIAogCQkvKiBjaGFuZ2UgYXVkaW9fbW9kZSAqLwogCQlpZiAoaXNfdHVuZXIpIHsKIAkJCS8qIHR1bmVyICovCi0JCQlzZXRfYXVkaW9fbW9kZShjbGllbnQsIGRlY29kZXItPnR1bmVyX2F1ZGlvX21vZGUpOworCQkJc2V0X2F1ZGlvX21vZGUoc2QsIGRlY29kZXItPnR1bmVyX2F1ZGlvX21vZGUpOwogCQl9IGVsc2UgewogCQkJLyogRm9yY2UgdG8gU1RFUkVPIG1vZGUgaWYgQ29tcG9zaXRlIG9yCiAJCQkgKiBTLVZpZGVvIHdlcmUgY2hvc2VuICovCi0JCQlzZXRfYXVkaW9fbW9kZShjbGllbnQsIFRVTkVSX0FVRElPX1NURVJFTyk7CisJCQlzZXRfYXVkaW9fbW9kZShzZCwgVFVORVJfQVVESU9fU1RFUkVPKTsKIAkJfQogCQkvKiBjaGFuZ2UgaW5pdGlhbGl6ZSBwcm9jZWR1cmUgKENvbXBvc2l0ZS9TLVZpZGVvKSAqLwogCQlpZiAoaXNfdHVuZXIpCi0JCQlzYWE3MTd4X3dyaXRlX3JlZ3MoY2xpZW50LCByZWdfaW5pdF90dW5lcl9pbnB1dCk7CisJCQlzYWE3MTd4X3dyaXRlX3JlZ3Moc2QsIHJlZ19pbml0X3R1bmVyX2lucHV0KTsKIAkJZWxzZSBpZiAoaW5wdXRfbGluZSA+PSA2KQotCQkJc2FhNzE3eF93cml0ZV9yZWdzKGNsaWVudCwgcmVnX2luaXRfc3ZpZGVvX2lucHV0KTsKKwkJCXNhYTcxN3hfd3JpdGVfcmVncyhzZCwgcmVnX2luaXRfc3ZpZGVvX2lucHV0KTsKIAkJZWxzZQotCQkJc2FhNzE3eF93cml0ZV9yZWdzKGNsaWVudCwgcmVnX2luaXRfY29tcG9zaXRlX2lucHV0KTsKKwkJCXNhYTcxN3hfd3JpdGVfcmVncyhzZCwgcmVnX2luaXRfY29tcG9zaXRlX2lucHV0KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTd4X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHNhYTcxN3hfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIklPQ1RMOiAlMDh4XG4iLCBjbWQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUToKLQkJcmV0dXJuIHNhYTcxN3hfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCAqKHUzMiAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBzYWE3MTd4X2dldF92NGxjdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gc2FhNzE3eF9zZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDogewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYWE3MTd4X3FjdHJsKTsgaSsrKQotCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gc2FhNzE3eF9xY3RybFtpXS5pZCkgewotCQkJCW1lbWNweShxYywgJnNhYTcxN3hfcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhYTcxN3hfcWN0cmwpOyBpKyspCisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHNhYTcxN3hfcWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJnNhYTcxN3hfcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6IHsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKK3N0YXRpYyBpbnQgc2FhNzE3eF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCByZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJcmVnLT52YWwgPSBzYWE3MTd4X3JlYWQoY2xpZW50LCByZWctPnJlZyk7Ci0JCWJyZWFrOwotCX0KKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmVnLT52YWwgPSBzYWE3MTd4X3JlYWQoc2QsIHJlZy0+cmVnKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOiB7Ci0JCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7Ci0JCXUxNiBhZGRyID0gcmVnLT5yZWcgJiAweGZmZmY7Ci0JCXU4IHZhbCA9IHJlZy0+dmFsICYgMHhmZjsKK3N0YXRpYyBpbnQgc2FhNzE3eF9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXUxNiBhZGRyID0gcmVnLT5yZWcgJiAweGZmZmY7CisJdTggdmFsID0gcmVnLT52YWwgJiAweGZmOwogCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCByZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIGFkZHIsIHZhbCk7Ci0JCWJyZWFrOwotCX0KKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgcmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJc2FhNzE3eF93cml0ZShzZCwgYWRkciwgdmFsKTsKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCi0JY2FzZSBWSURJT0NfU19GTVQ6IHsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnOwotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7Ci0JCWludCBwcmVzY2FsZSwgaF9zY2FsZSwgdl9zY2FsZTsKK3N0YXRpYyBpbnQgc2FhNzE3eF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CisJaW50IHByZXNjYWxlLCBoX3NjYWxlLCB2X3NjYWxlOwogCi0JCXBpeCA9ICZmbXQtPmZtdC5waXg7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHNpemVcbiIpOworCXBpeCA9ICZmbXQtPmZtdC5waXg7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZGVjb2RlciBzZXQgc2l6ZVxuIik7CiAKLQkJLyogRklYTUUgbmVlZCBiZXR0ZXIgYm91bmRzIGNoZWNraW5nIGhlcmUgKi8KLQkJaWYgKHBpeC0+d2lkdGggPCAxIHx8IHBpeC0+d2lkdGggPiAxNDQwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChwaXgtPmhlaWdodCA8IDEgfHwgcGl4LT5oZWlnaHQgPiA5NjApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBGSVhNRSBuZWVkIGJldHRlciBib3VuZHMgY2hlY2tpbmcgaGVyZSAqLworCWlmIChwaXgtPndpZHRoIDwgMSB8fCBwaXgtPndpZHRoID4gMTQ0MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBpeC0+aGVpZ2h0IDwgMSB8fCBwaXgtPmhlaWdodCA+IDk2MCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogc2NhbGluZyBzZXR0aW5nICovCi0JCS8qIE5UU0MgYW5kIGludGVybGFjZSBvbmx5ICovCi0JCXByZXNjYWxlID0gU0FBNzE3WF9OVFNDX1dJRFRIIC8gcGl4LT53aWR0aDsKLQkJaWYgKHByZXNjYWxlID09IDApCi0JCQlwcmVzY2FsZSA9IDE7Ci0JCWhfc2NhbGUgPSAxMDI0ICogU0FBNzE3WF9OVFNDX1dJRFRIIC8gcHJlc2NhbGUgLyBwaXgtPndpZHRoOwotCQkvKiBpbnRlcmxhY2UgKi8KLQkJdl9zY2FsZSA9IDUxMiAqIDIgKiBTQUE3MTdYX05UU0NfSEVJR0hUIC8gcGl4LT5oZWlnaHQ7CisJLyogc2NhbGluZyBzZXR0aW5nICovCisJLyogTlRTQyBhbmQgaW50ZXJsYWNlIG9ubHkgKi8KKwlwcmVzY2FsZSA9IFNBQTcxN1hfTlRTQ19XSURUSCAvIHBpeC0+d2lkdGg7CisJaWYgKHByZXNjYWxlID09IDApCisJCXByZXNjYWxlID0gMTsKKwloX3NjYWxlID0gMTAyNCAqIFNBQTcxN1hfTlRTQ19XSURUSCAvIHByZXNjYWxlIC8gcGl4LT53aWR0aDsKKwkvKiBpbnRlcmxhY2UgKi8KKwl2X3NjYWxlID0gNTEyICogMiAqIFNBQTcxN1hfTlRTQ19IRUlHSFQgLyBwaXgtPmhlaWdodDsKIAotCQkvKiBIb3Jpem9udGFsIHByZXNjYWxpbmcgZXRjICovCi0JCXNldF9oX3ByZXNjYWxlKGNsaWVudCwgMCwgcHJlc2NhbGUpOwotCQlzZXRfaF9wcmVzY2FsZShjbGllbnQsIDEsIHByZXNjYWxlKTsKKwkvKiBIb3Jpem9udGFsIHByZXNjYWxpbmcgZXRjICovCisJc2V0X2hfcHJlc2NhbGUoc2QsIDAsIHByZXNjYWxlKTsKKwlzZXRfaF9wcmVzY2FsZShzZCwgMSwgcHJlc2NhbGUpOwogCi0JCS8qIEhvcml6b250YWwgc2NhbGluZyBpbmNyZW1lbnQgKi8KLQkJLyogVEFTSyBBICovCi0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDZDLCAodTgpKGhfc2NhbGUgJiAweEZGKSk7Ci0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDZELCAodTgpKChoX3NjYWxlID4+IDgpICYgMHhGRikpOwotCQkvKiBUQVNLIEIgKi8KLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4QUMsICh1OCkoaF9zY2FsZSAmIDB4RkYpKTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4QUQsICh1OCkoKGhfc2NhbGUgPj4gOCkgJiAweEZGKSk7CisJLyogSG9yaXpvbnRhbCBzY2FsaW5nIGluY3JlbWVudCAqLworCS8qIFRBU0sgQSAqLworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NkMsICh1OCkoaF9zY2FsZSAmIDB4RkYpKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDZELCAodTgpKChoX3NjYWxlID4+IDgpICYgMHhGRikpOworCS8qIFRBU0sgQiAqLworCXNhYTcxN3hfd3JpdGUoc2QsIDB4QUMsICh1OCkoaF9zY2FsZSAmIDB4RkYpKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweEFELCAodTgpKChoX3NjYWxlID4+IDgpICYgMHhGRikpOwogCi0JCS8qIFZlcnRpY2FsIHByZXNjYWxpbmcgZXRjICovCi0JCXNldF92X3NjYWxlKGNsaWVudCwgMCwgdl9zY2FsZSk7Ci0JCXNldF92X3NjYWxlKGNsaWVudCwgMSwgdl9zY2FsZSk7CisJLyogVmVydGljYWwgcHJlc2NhbGluZyBldGMgKi8KKwlzZXRfdl9zY2FsZShzZCwgMCwgdl9zY2FsZSk7CisJc2V0X3Zfc2NhbGUoc2QsIDEsIHZfc2NhbGUpOwogCi0JCS8qIHNldCB2aWRlbyBvdXRwdXQgc2l6ZSAqLwotCQkvKiB2aWRlbyBudW1iZXIgb2YgcGl4ZWxzIGF0IG91dHB1dCAqLwotCQkvKiBUQVNLIEEgKi8KLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4NUMsICh1OCkocGl4LT53aWR0aCAmIDB4RkYpKTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4NUQsICh1OCkoKHBpeC0+d2lkdGggPj4gOCkgJiAweEZGKSk7Ci0JCS8qIFRBU0sgQiAqLwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg5QywgKHU4KShwaXgtPndpZHRoICYgMHhGRikpOwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg5RCwgKHU4KSgocGl4LT53aWR0aCA+PiA4KSAmIDB4RkYpKTsKKwkvKiBzZXQgdmlkZW8gb3V0cHV0IHNpemUgKi8KKwkvKiB2aWRlbyBudW1iZXIgb2YgcGl4ZWxzIGF0IG91dHB1dCAqLworCS8qIFRBU0sgQSAqLworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NUMsICh1OCkocGl4LT53aWR0aCAmIDB4RkYpKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDVELCAodTgpKChwaXgtPndpZHRoID4+IDgpICYgMHhGRikpOworCS8qIFRBU0sgQiAqLworCXNhYTcxN3hfd3JpdGUoc2QsIDB4OUMsICh1OCkocGl4LT53aWR0aCAmIDB4RkYpKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDlELCAodTgpKChwaXgtPndpZHRoID4+IDgpICYgMHhGRikpOwogCi0JCS8qIHZpZGVvIG51bWJlciBvZiBsaW5lcyBhdCBvdXRwdXQgKi8KLQkJLyogVEFTSyBBICovCi0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDVFLCAodTgpKHBpeC0+aGVpZ2h0ICYgMHhGRikpOwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg1RiwgKHU4KSgocGl4LT5oZWlnaHQgPj4gOCkgJiAweEZGKSk7Ci0JCS8qIFRBU0sgQiAqLwotCQlzYWE3MTd4X3dyaXRlKGNsaWVudCwgMHg5RSwgKHU4KShwaXgtPmhlaWdodCAmIDB4RkYpKTsKLQkJc2FhNzE3eF93cml0ZShjbGllbnQsIDB4OUYsICh1OCkoKHBpeC0+aGVpZ2h0ID4+IDgpICYgMHhGRikpOwotCQlicmVhazsKLQl9CisJLyogdmlkZW8gbnVtYmVyIG9mIGxpbmVzIGF0IG91dHB1dCAqLworCS8qIFRBU0sgQSAqLworCXNhYTcxN3hfd3JpdGUoc2QsIDB4NUUsICh1OCkocGl4LT5oZWlnaHQgJiAweEZGKSk7CisJc2FhNzE3eF93cml0ZShzZCwgMHg1RiwgKHU4KSgocGl4LT5oZWlnaHQgPj4gOCkgJiAweEZGKSk7CisJLyogVEFTSyBCICovCisJc2FhNzE3eF93cml0ZShzZCwgMHg5RSwgKHU4KShwaXgtPmhlaWdodCAmIDB4RkYpKTsKKwlzYWE3MTd4X3dyaXRlKHNkLCAweDlGLCAodTgpKChwaXgtPmhlaWdodCA+PiA4KSAmIDB4RkYpKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCWRlY29kZXItPnJhZGlvID0gMTsKLQkJYnJlYWs7CitzdGF0aWMgaW50IHNhYTcxN3hfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpkZWNvZGVyID0gdG9fc3RhdGUoc2QpOwogCi0JY2FzZSBWSURJT0NfU19TVEQ6IHsKLQkJdjRsMl9zdGRfaWQgc3RkID0gKih2NGwyX3N0ZF9pZCAqKSBhcmc7CisJZGVjb2Rlci0+cmFkaW8gPSAxOworCXJldHVybiAwOworfQogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IG5vcm0gIik7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIihub3QgeWV0IGltcGxlbWVudGQpXG4iKTsKK3N0YXRpYyBpbnQgc2FhNzE3eF9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXIgPSB0b19zdGF0ZShzZCk7CiAKLQkJZGVjb2Rlci0+cmFkaW8gPSAwOwotCQlkZWNvZGVyLT5zdGQgPSBzdGQ7Ci0JCWJyZWFrOwotCX0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyIHNldCBub3JtICIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIihub3QgeWV0IGltcGxlbWVudGQpXG4iKTsKIAotCWNhc2UgVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkc6IHsKLQkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJZGVjb2Rlci0+cmFkaW8gPSAwOworCWRlY29kZXItPnN0ZCA9IHN0ZDsKKwlyZXR1cm4gMDsKK30KIAotCQlyb3V0ZS0+aW5wdXQgPSBkZWNvZGVyLT5hdWRpb19pbnB1dDsKLQkJcm91dGUtPm91dHB1dCA9IDA7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbnQgc2FhNzE3eF9zX2F1ZGlvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXIgPSB0b19zdGF0ZShzZCk7CiAKLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOiB7Ci0JCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCi0JCWlmIChyb3V0ZS0+aW5wdXQgPCAzKSB7IC8qIEZJWE1FISAtLXRhZGFjaGkgKi8KLQkJCWRlY29kZXItPmF1ZGlvX2lucHV0ID0gcm91dGUtPmlucHV0OwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCWlmIChyb3V0ZS0+aW5wdXQgPCAzKSB7IC8qIEZJWE1FISAtLXRhZGFjaGkgKi8KKwkJZGVjb2Rlci0+YXVkaW9faW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCQkic2V0IGRlY29kZXIgYXVkaW8gaW5wdXQgdG8gJWRcbiIsCiAJCQkJZGVjb2Rlci0+YXVkaW9faW5wdXQpOwotCQkJc2V0X2F1ZGlvX3JlZ3MoY2xpZW50LCBkZWNvZGVyKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiAtRVJBTkdFOworCQlzZXRfYXVkaW9fcmVncyhzZCwgZGVjb2Rlcik7CisJCXJldHVybiAwOwogCX0KKwlyZXR1cm4gLUVSQU5HRTsKK30KIAotCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6IHsKLQkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7Ci0JCWludCBpbnAgPSByb3V0ZS0+aW5wdXQ7CitzdGF0aWMgaW50IHNhYTcxN3hfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqZGVjb2RlciA9IHRvX3N0YXRlKHNkKTsKIAotCQlyZXR1cm4gc2FhNzE3eF9zZXRfdmlkZW9faW5wdXQoY2xpZW50LCBkZWNvZGVyLCBpbnApOwotCX0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyICVzIG91dHB1dFxuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7CisJc2FhNzE3eF93cml0ZShzZCwgMHgxOTMsIGVuYWJsZSA/IDB4YTYgOiAweDI2KTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX1NUUkVBTU9OOiB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgZW5hYmxlIG91dHB1dFxuIik7Ci0JCWRlY29kZXItPmVuYWJsZSA9IDE7Ci0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDE5MywgMHhhNik7Ci0JCWJyZWFrOwotCX0KKy8qIGNoYW5nZSBhdWRpbyBtb2RlICovCitzdGF0aWMgaW50IHNhYTcxN3hfc190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXIgPSB0b19zdGF0ZShzZCk7CisJaW50IGF1ZGlvX21vZGU7CisJY2hhciAqbWVzWzRdID0geworCQkiTU9OTyIsICJTVEVSRU8iLCAiTEFORzEiLCAiTEFORzIvU0FQIgorCX07CiAKLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6IHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGVjb2RlciBkaXNhYmxlIG91dHB1dFxuIik7Ci0JCWRlY29kZXItPmVuYWJsZSA9IDA7Ci0JCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDE5MywgMHgyNik7IC8qIHJpZ2h0PyBGSVhNRSEtLXRhZGFjaGkgKi8KLQkJYnJlYWs7Ci0JfQorCWF1ZGlvX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCi0JCS8qIGNoYW5nZSBhdWRpbyBtb2RlICovCi0JY2FzZSBWSURJT0NfU19UVU5FUjogewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSAoc3RydWN0IHY0bDJfdHVuZXIgKilhcmc7Ci0JCWludCBhdWRpb19tb2RlOwotCQljaGFyICptZXNbNF0gPSB7Ci0JCQkiTU9OTyIsICJTVEVSRU8iLCAiTEFORzEiLCAiTEFORzIvU0FQIgotCQl9OwotCi0JCWF1ZGlvX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCi0JCXN3aXRjaCAodnQtPmF1ZG1vZGUpIHsKKwlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJCQlhdWRpb19tb2RlID0gVFVORVJfQVVESU9fTU9OTzsKIAkJCWJyZWFrOwpAQCAtMTM0Nyw3MCArMTMyNiwxMDEgQEAKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CiAJCQlhdWRpb19tb2RlID0gVFVORVJfQVVESU9fTEFORzE7CiAJCQlicmVhazsKLQkJfQotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNoYW5nZSBhdWRpbyBtb2RlIHRvICVzXG4iLAotCQkJCW1lc1thdWRpb19tb2RlXSk7Ci0JCWRlY29kZXItPnR1bmVyX2F1ZGlvX21vZGUgPSBhdWRpb19tb2RlOwotCQkvKiBUaGUgcmVnaXN0ZXJzIGFyZSBub3QgY2hhbmdlZCBoZXJlLiAqLwotCQkvKiBTZWUgREVDT0RFUl9FTkFCTEVfT1VUUFVUIHNlY3Rpb24uICovCi0JCXNldF9hdWRpb19tb2RlKGNsaWVudCwgZGVjb2Rlci0+dHVuZXJfYXVkaW9fbW9kZSk7Ci0JCWJyZWFrOwogCX0KIAotCWNhc2UgVklESU9DX0dfVFVORVI6IHsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gKHN0cnVjdCB2NGwyX3R1bmVyICopYXJnOwotCQlpbnQgZHVhbF9mLCBzdGVyZW9fZjsKLQotCQlpZiAoZGVjb2Rlci0+cmFkaW8pCi0JCQlicmVhazsKLQkJZ2V0X2luZl9kZXZfc3RhdHVzKGNsaWVudCwgJmR1YWxfZiwgJnN0ZXJlb19mKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERVRFQ1Q9PXN0OiVkIGR1YWw6JWRcbiIsCi0JCQkJc3RlcmVvX2YsIGR1YWxfZik7Ci0KLQkJLyogbW9ubyAqLwotCQlpZiAoKGR1YWxfZiA9PSAwKSAmJiAoc3RlcmVvX2YgPT0gMCkpIHsKLQkJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFVEVDVD09TU9OT1xuIik7Ci0JCX0KLQotCQkvKiBzdGVyZW8gKi8KLQkJaWYgKHN0ZXJlb19mID09IDEpIHsKLQkJCWlmICh2dC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8Ci0JCQkgICAgdnQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxKSB7Ci0JCQkJdnQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVURUNUPT1TVChTVClcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVURUNUPT1TVChNT05PKVxuIik7Ci0JCQl9Ci0JCX0KLQotCQkvKiBkdWFsICovCi0JCWlmIChkdWFsX2YgPT0gMSkgewotCQkJaWYgKHZ0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikgewotCQkJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzIgfCBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFVEVDVD09RFVBTDFcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERVRFQ1Q9PURVQUwyXG4iKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQkvKiBub3QgeWV0IGltcGxlbWVudGVkICovCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiY2hhbmdlIGF1ZGlvIG1vZGUgdG8gJXNcbiIsCisJCQltZXNbYXVkaW9fbW9kZV0pOworCWRlY29kZXItPnR1bmVyX2F1ZGlvX21vZGUgPSBhdWRpb19tb2RlOworCS8qIFRoZSByZWdpc3RlcnMgYXJlIG5vdCBjaGFuZ2VkIGhlcmUuICovCisJLyogU2VlIERFQ09ERVJfRU5BQkxFX09VVFBVVCBzZWN0aW9uLiAqLworCXNldF9hdWRpb19tb2RlKHNkLCBkZWNvZGVyLT50dW5lcl9hdWRpb19tb2RlKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE3MTd4X2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpkZWNvZGVyID0gdG9fc3RhdGUoc2QpOworCWludCBkdWFsX2YsIHN0ZXJlb19mOworCisJaWYgKGRlY29kZXItPnJhZGlvKQorCQlyZXR1cm4gMDsKKwlnZXRfaW5mX2Rldl9zdGF0dXMoc2QsICZkdWFsX2YsICZzdGVyZW9fZik7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJERVRFQ1Q9PXN0OiVkIGR1YWw6JWRcbiIsCisJCQlzdGVyZW9fZiwgZHVhbF9mKTsKKworCS8qIG1vbm8gKi8KKwlpZiAoKGR1YWxfZiA9PSAwKSAmJiAoc3RlcmVvX2YgPT0gMCkpIHsKKwkJdnQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJERVRFQ1Q9PU1PTk9cbiIpOworCX0KKworCS8qIHN0ZXJlbyAqLworCWlmIChzdGVyZW9fZiA9PSAxKSB7CisJCWlmICh2dC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8CisJCQkJdnQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxKSB7CisJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkRFVEVDVD09U1QoU1QpXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkRFVEVDVD09U1QoTU9OTylcbiIpOworCQl9CisJfQorCisJLyogZHVhbCAqLworCWlmIChkdWFsX2YgPT0gMSkgeworCQlpZiAodnQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyKSB7CisJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcyIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkRFVEVDVD09RFVBTDFcbiIpOworCQl9IGVsc2UgeworCQkJdnQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX01PTk87CisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJERVRFQ1Q9PURVQUwyXG4iKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTd4X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTd4X2NvcmVfb3BzID0geworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IHNhYTcxN3hfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IHNhYTcxN3hfc19yZWdpc3RlciwKKyNlbmRpZgorCS5xdWVyeWN0cmwgPSBzYWE3MTd4X3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gc2FhNzE3eF9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTcxN3hfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNzE3eF90dW5lcl9vcHMgPSB7CisJLmdfdHVuZXIgPSBzYWE3MTd4X2dfdHVuZXIsCisJLnNfdHVuZXIgPSBzYWE3MTd4X3NfdHVuZXIsCisJLnNfc3RkID0gc2FhNzE3eF9zX3N0ZCwKKwkuc19yYWRpbyA9IHNhYTcxN3hfc19yYWRpbywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxN3hfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBzYWE3MTd4X3NfdmlkZW9fcm91dGluZywKKwkuc19mbXQgPSBzYWE3MTd4X3NfZm10LAorCS5zX3N0cmVhbSA9IHNhYTcxN3hfc19zdHJlYW0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBzYWE3MTd4X2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gc2FhNzE3eF9zX2F1ZGlvX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTd4X29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTd4X2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE3MTd4X3R1bmVyX29wcywKKwkuYXVkaW8gPSAmc2FhNzE3eF9hdWRpb19vcHMsCisJLnZpZGVvID0gJnNhYTcxN3hfdmlkZW9fb3BzLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCkBAIC0xNDIxLDYgKzE0MzEsNyBAQAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCiB7CiAJc3RydWN0IHNhYTcxN3hfc3RhdGUgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAl1OCBpZCA9IDA7CiAJY2hhciAqcCA9ICIiOwogCkBAIC0xNDI4LDEzICsxNDM5LDIxIEBACiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKHNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDVhNCwgMHhmZSkgJiYKLQkJCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDVhNSwgMHgwZikgJiYKLQkJCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDVhNiwgMHgwMCkgJiYKLQkJCXNhYTcxN3hfd3JpdGUoY2xpZW50LCAweDVhNywgMHgwMSkpCi0JCWlkID0gc2FhNzE3eF9yZWFkKGNsaWVudCwgMHg1YTApOworCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChkZWNvZGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTcxN3hfb3BzKTsKKworCWlmIChzYWE3MTd4X3dyaXRlKHNkLCAweDVhNCwgMHhmZSkgJiYKKwkJCXNhYTcxN3hfd3JpdGUoc2QsIDB4NWE1LCAweDBmKSAmJgorCQkJc2FhNzE3eF93cml0ZShzZCwgMHg1YTYsIDB4MDApICYmCisJCQlzYWE3MTd4X3dyaXRlKHNkLCAweDVhNywgMHgwMSkpCisJCWlkID0gc2FhNzE3eF9yZWFkKHNkLCAweDVhMCk7CiAJaWYgKGlkICE9IDB4YzIgJiYgaWQgIT0gMHgzMiAmJiBpZCAhPSAweGYyICYmIGlkICE9IDB4NmMpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2FhNzE3eCBub3QgZm91bmQgKGlkPSUwMngpXG4iLCBpZCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNhYTcxN3ggbm90IGZvdW5kIChpZD0lMDJ4KVxuIiwgaWQpOworCQlrZnJlZShkZWNvZGVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmIChpZCA9PSAweGMyKQpAQCAtMTQ0NSwxNCArMTQ2NCw4IEBACiAJCXAgPSAic2FhNzE3NEhMIjsKIAllbHNlCiAJCXAgPSAic2FhNzE3MSI7Ci0JdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIHAsCisJdjRsMl9pbmZvKHNkLCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIHAsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwotCi0JaWYgKGRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJZGVjb2Rlci0+c3RkID0gVjRMMl9TVERfTlRTQzsKIAlkZWNvZGVyLT5pbnB1dCA9IC0xOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CkBAIC0xNDgxLDE1ICsxNDk0LDE1IEBACiAJZGVjb2Rlci0+YXVkaW9fbWFpbl92b2x1bWUgPQogCQkoZGVjb2Rlci0+YXVkaW9fbWFpbl92b2xfciArIDQxKSAqIDY1NTM1IC8gKDI0IC0gKC00MCkpOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAid3JpdGluZyBpbml0IHZhbHVlc1xuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAid3JpdGluZyBpbml0IHZhbHVlc1xuIik7CiAKIAkvKiBGSVhNRSEhICovCi0Jc2FhNzE3eF93cml0ZV9yZWdzKGNsaWVudCwgcmVnX2luaXRfaW5pdGlhbGl6ZSk7Ci0Jc2V0X3ZpZGVvX291dHB1dF9sZXZlbF9yZWdzKGNsaWVudCwgZGVjb2Rlcik7CisJc2FhNzE3eF93cml0ZV9yZWdzKHNkLCByZWdfaW5pdF9pbml0aWFsaXplKTsKKwlzZXRfdmlkZW9fb3V0cHV0X2xldmVsX3JlZ3Moc2QsIGRlY29kZXIpOwogCS8qIHNldCBiYXNzLHRyZWJsZSB0byAwZGIgMjAwNDExMDEgSy5PaHRhICovCiAJZGVjb2Rlci0+YXVkaW9fbWFpbl9iYXNzID0gMDsKIAlkZWNvZGVyLT5hdWRpb19tYWluX3RyZWJsZSA9IDA7Ci0Jc2V0X2F1ZGlvX3JlZ3MoY2xpZW50LCBkZWNvZGVyKTsKKwlzZXRfYXVkaW9fcmVncyhzZCwgZGVjb2Rlcik7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCXNjaGVkdWxlX3RpbWVvdXQoMipIWik7CkBAIC0xNDk4LDcgKzE1MTEsMTAgQEAKIAogc3RhdGljIGludCBzYWE3MTd4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCmluZGV4IDA0NGEyZTkuLmQ2NTJmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKQEAgLTk3NSw4ICs5NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlNDAxX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHNlNDAxX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IChzdHJ1Y3QgdXNiX3NlNDAxICopdmRldjsKQEAgLTExNDIsNyArMTE0MSw3IEBACiBzdGF0aWMgaW50IHNlNDAxX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgc2U0MDFfZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgc2U0MDFfZG9faW9jdGwpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZTQwMV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDUzNmIxYTkuLjlhMjU4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIApAQCAtNzUsOCArNzQsNiBAQAogI2RlZmluZSBDREJZUjIgMHg5OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAyICovCiAjZGVmaW5lIENEQkNSMiAweDljIC8qIENhcHR1cmUgZGF0YSBib3R0b20tZmllbGQgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KIAotc3RhdGljIERFRklORV9NVVRFWChjYW1lcmFfbG9jayk7Ci0KIC8qIHBlciB2aWRlbyBmcmFtZSBidWZmZXIgKi8KIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciB7CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciB2YjsgLyogdjRsIGJ1ZmZlciBtdXN0IGJlIGZpcnN0ICovCkBAIC05NywxOCArOTQsMjAgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBjYXB0dXJlOwogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmFjdGl2ZTsKKwlpbnQgaXNfaW50ZXJsYWNlOwogCiAJc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyAqcGRhdGE7CisKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtZXJhX2ZtdDsKIH07CiAKIHN0YXRpYyB2b2lkIGNldV93cml0ZShzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnByaXYsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVnX29mZnMsIHVuc2lnbmVkIGxvbmcgZGF0YSkKKwkJICAgICAgdW5zaWduZWQgbG9uZyByZWdfb2ZmcywgdTMyIGRhdGEpCiB7CiAJaW93cml0ZTMyKGRhdGEsIHByaXYtPmJhc2UgKyByZWdfb2Zmcyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNldV9yZWFkKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcHJpdiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVnX29mZnMpCitzdGF0aWMgdTMyIGNldV9yZWFkKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcHJpdiwgdW5zaWduZWQgbG9uZyByZWdfb2ZmcykKIHsKIAlyZXR1cm4gaW9yZWFkMzIocHJpdi0+YmFzZSArIHJlZ19vZmZzKTsKIH0KQEAgLTE1NiwyMSArMTU1LDUyIEBACiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CiB9CiAKKyNkZWZpbmUgQ0VVX0NFVENSX01BR0lDIDB4MDMxN2YzMTMgLyogYWNrbm93bGVkZ2UgbWFnaWNhbCBpbnRlcnJ1cHQgc291cmNlcyAqLworI2RlZmluZSBDRVVfQ0VUQ1JfSUdSVyAoMSA8PCA0KSAvKiBwcm9oaWJpdGVkIHJlZ2lzdGVyIGFjY2VzcyBpbnRlcnJ1cHQgYml0ICovCisjZGVmaW5lIENFVV9DRUlFUl9DUEVJRSAoMSA8PCAwKSAvKiBvbmUtZnJhbWUgY2FwdHVyZSBlbmQgaW50ZXJydXB0ICovCisjZGVmaW5lIENFVV9DQVBDUl9DVE5DUCAoMSA8PCAxNikgLyogY29udGludW91cyBjYXB0dXJlIG1vZGUgKGlmIHNldCkgKi8KKworCiBzdGF0aWMgdm9pZCBzaF9tb2JpbGVfY2V1X2NhcHR1cmUoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldikKIHsKLQljZXVfd3JpdGUocGNkZXYsIENFSUVSLCBjZXVfcmVhZChwY2RldiwgQ0VJRVIpICYgfjEpOwotCWNldV93cml0ZShwY2RldiwgQ0VUQ1IsIH5jZXVfcmVhZChwY2RldiwgQ0VUQ1IpICYgMHgwMzE3ZjMxMyk7Ci0JY2V1X3dyaXRlKHBjZGV2LCBDRUlFUiwgY2V1X3JlYWQocGNkZXYsIENFSUVSKSB8IDEpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gcGNkZXYtPmljZDsKKwlkbWFfYWRkcl90IHBoeXNfYWRkcl90b3AsIHBoeXNfYWRkcl9ib3R0b207CiAKLQljZXVfd3JpdGUocGNkZXYsIENBUENSLCBjZXVfcmVhZChwY2RldiwgQ0FQQ1IpICYgfjB4MTAwMDApOworCS8qIFRoZSBoYXJkd2FyZSBpcyBfdmVyeV8gcGlja3kgYWJvdXQgdGhpcyBzZXF1ZW5jZS4gRXNwZWNpYWxseQorCSAqIHRoZSBDRVVfQ0VUQ1JfTUFHSUMgdmFsdWUuIEl0IHNlZW1zIGxpa2Ugd2UgbmVlZCB0byBhY2tub3dsZWRnZQorCSAqIHNldmVyYWwgbm90LXNvLXdlbGwgZG9jdW1lbnRlZCBpbnRlcnJ1cHQgc291cmNlcyBpbiBDRVRDUi4KKwkgKi8KKwljZXVfd3JpdGUocGNkZXYsIENFSUVSLCBjZXVfcmVhZChwY2RldiwgQ0VJRVIpICYgfkNFVV9DRUlFUl9DUEVJRSk7CisJY2V1X3dyaXRlKHBjZGV2LCBDRVRDUiwgfmNldV9yZWFkKHBjZGV2LCBDRVRDUikgJiBDRVVfQ0VUQ1JfTUFHSUMpOworCWNldV93cml0ZShwY2RldiwgQ0VJRVIsIGNldV9yZWFkKHBjZGV2LCBDRUlFUikgfCBDRVVfQ0VJRVJfQ1BFSUUpOworCWNldV93cml0ZShwY2RldiwgQ0FQQ1IsIGNldV9yZWFkKHBjZGV2LCBDQVBDUikgJiB+Q0VVX0NBUENSX0NUTkNQKTsKKwljZXVfd3JpdGUocGNkZXYsIENFVENSLCBDRVVfQ0VUQ1JfTUFHSUMgXiBDRVVfQ0VUQ1JfSUdSVyk7CiAKLQljZXVfd3JpdGUocGNkZXYsIENFVENSLCAweDAzMTdmMzEzIF4gMHgxMCk7CisJaWYgKCFwY2Rldi0+YWN0aXZlKQorCQlyZXR1cm47CiAKLQlpZiAocGNkZXYtPmFjdGl2ZSkgewotCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7Ci0JCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KKwlwaHlzX2FkZHJfdG9wID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKTsKKwljZXVfd3JpdGUocGNkZXYsIENEQVlSLCBwaHlzX2FkZHJfdG9wKTsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZSkgeworCQlwaHlzX2FkZHJfYm90dG9tID0gcGh5c19hZGRyX3RvcCArIGljZC0+d2lkdGg7CisJCWNldV93cml0ZShwY2RldiwgQ0RCWVIsIHBoeXNfYWRkcl9ib3R0b20pOwogCX0KKworCXN3aXRjaCAoaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfTlYxMjoKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjIxOgorCWNhc2UgVjRMMl9QSVhfRk1UX05WMTY6CisJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKKwkJcGh5c19hZGRyX3RvcCArPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQ7CisJCWNldV93cml0ZShwY2RldiwgQ0RBQ1IsIHBoeXNfYWRkcl90b3ApOworCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZSkgeworCQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOworCQkJY2V1X3dyaXRlKHBjZGV2LCBDREJDUiwgcGh5c19hZGRyX2JvdHRvbSk7CisJCX0KKwl9CisKKwlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAweDEpOyAvKiBzdGFydCBjYXB0dXJlICovCiB9CiAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCkBAIC0yOTIsMTQgKzMyMiwxMyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgcmV0ID0gLUVCVVNZOwogCi0JbXV0ZXhfbG9jaygmY2FtZXJhX2xvY2spOwotCiAJaWYgKHBjZGV2LT5pY2QpCiAJCWdvdG8gZXJyOwogCkBAIC0zMTksMTEgKzM0OCwxMCBAQAogCiAJcGNkZXYtPmljZCA9IGljZDsKIGVycjoKLQltdXRleF91bmxvY2soJmNhbWVyYV9sb2NrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKKy8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKQEAgLTM2Miw4ICszOTAsOSBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JaW50IHJldCwgYnVzd2lkdGgsIHdpZHRoLCBjZnN6cl93aWR0aCwgY2R3ZHJfd2lkdGg7CisJaW50IHJldCwgYnVzd2lkdGgsIHdpZHRoLCBoZWlnaHQsIGNmc3pyX3dpZHRoLCBjZHdkcl93aWR0aDsKIAl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzLCB2YWx1ZTsKKwlpbnQgeXV2X21vZGUsIHl1dl9saW5lc2tpcDsKIAogCWNhbWVyYV9mbGFncyA9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0oaWNkKTsKIAljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywKQEAgLTM4OSwyNyArNDE4LDcxIEBACiAJY2V1X3dyaXRlKHBjZGV2LCBDUkNOVFIsIDApOwogCWNldV93cml0ZShwY2RldiwgQ1JDTVBSLCAwKTsKIAotCXZhbHVlID0gMHgwMDAwMDAxMDsKLQl2YWx1ZSB8PSAoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0xPVykgPyAoMSA8PCAxKSA6IDA7Ci0JdmFsdWUgfD0gKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpID8gKDEgPDwgMCkgOiAwOwotCXZhbHVlIHw9IChidXN3aWR0aCA9PSAxNikgPyAoMSA8PCAxMikgOiAwOworCXZhbHVlID0gMHgwMDAwMDAxMDsgLyogZGF0YSBmZXRjaCBieSBkZWZhdWx0ICovCisJeXV2X21vZGUgPSB5dXZfbGluZXNraXAgPSAwOworCisJc3dpdGNoIChpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgorCWNhc2UgVjRMMl9QSVhfRk1UX05WMjE6CisJCXl1dl9saW5lc2tpcCA9IDE7IC8qIHNraXAgZm9yIE5WMTIvMjEsIG5vIHNraXAgZm9yIE5WMTYvNjEgKi8KKwkJLyogZmFsbC10aHJvdWdoICovCisJY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjoKKwljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgorCQl5dXZfbW9kZSA9IDE7CisJCXN3aXRjaCAocGNkZXYtPmNhbWVyYV9mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQkJdmFsdWUgPSAweDAwMDAwMDAwOyAvKiBDYjAsIFkwLCBDcjAsIFkxICovCisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKKwkJCXZhbHVlID0gMHgwMDAwMDEwMDsgLyogQ3IwLCBZMCwgQ2IwLCBZMSAqLworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJCQl2YWx1ZSA9IDB4MDAwMDAyMDA7IC8qIFkwLCBDYjAsIFkxLCBDcjAgKi8KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgorCQkJdmFsdWUgPSAweDAwMDAwMzAwOyAvKiBZMCwgQ3IwLCBZMSwgQ2IwICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfQorCisJaWYgKGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYyMSB8fAorCSAgICBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX05WNjEpCisJCXZhbHVlIF49IDB4MDAwMDAxMDA7IC8qIHN3YXAgVSwgViB0byBjaGFuZ2UgZnJvbSBOVjF4LT5OVngxICovCisKKwl2YWx1ZSB8PSBjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XID8gMSA8PCAxIDogMDsKKwl2YWx1ZSB8PSBjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XID8gMSA8PCAwIDogMDsKKwl2YWx1ZSB8PSBidXN3aWR0aCA9PSAxNiA/IDEgPDwgMTIgOiAwOwogCWNldV93cml0ZShwY2RldiwgQ0FNQ1IsIHZhbHVlKTsKIAogCWNldV93cml0ZShwY2RldiwgQ0FQQ1IsIDB4MDAzMDAwMDApOwotCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIDApOworCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIChwY2Rldi0+aXNfaW50ZXJsYWNlKSA/IDB4MTAxIDogMCk7CiAKIAltZGVsYXkoMSk7CiAKLQl3aWR0aCA9IGljZC0+d2lkdGggKiAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggLyA4KTsKLQl3aWR0aCA9IChidXN3aWR0aCA9PSAxNikgPyB3aWR0aCAvIDIgOiB3aWR0aDsKLQljZnN6cl93aWR0aCA9IChidXN3aWR0aCA9PSA4KSA/IHdpZHRoIC8gMiA6IHdpZHRoOwotCWNkd2RyX3dpZHRoID0gKGJ1c3dpZHRoID09IDE2KSA/IHdpZHRoICogMiA6IHdpZHRoOworCWlmICh5dXZfbW9kZSkgeworCQl3aWR0aCA9IGljZC0+d2lkdGggKiAyOworCQl3aWR0aCA9IGJ1c3dpZHRoID09IDE2ID8gd2lkdGggLyAyIDogd2lkdGg7CisJCWNmc3pyX3dpZHRoID0gY2R3ZHJfd2lkdGggPSBpY2QtPndpZHRoOworCX0gZWxzZSB7CisJCXdpZHRoID0gaWNkLT53aWR0aCAqICgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKKwkJd2lkdGggPSBidXN3aWR0aCA9PSAxNiA/IHdpZHRoIC8gMiA6IHdpZHRoOworCQljZnN6cl93aWR0aCA9IGJ1c3dpZHRoID09IDggPyB3aWR0aCAvIDIgOiB3aWR0aDsKKwkJY2R3ZHJfd2lkdGggPSBidXN3aWR0aCA9PSAxNiA/IHdpZHRoICogMiA6IHdpZHRoOworCX0KKworCWhlaWdodCA9IGljZC0+aGVpZ2h0OworCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJCWhlaWdodCAvPSAyOworCQljZHdkcl93aWR0aCAqPSAyOworCX0KIAogCWNldV93cml0ZShwY2RldiwgQ0FNT1IsIDApOwotCWNldV93cml0ZShwY2RldiwgQ0FQV1IsIChpY2QtPmhlaWdodCA8PCAxNikgfCB3aWR0aCk7Ci0JY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgMCk7IC8qIGRhdGEgZmV0Y2ggbW9kZSAtIG5vIHNjYWxpbmcgKi8KLQljZXVfd3JpdGUocGNkZXYsIENGU1pSLCAoaWNkLT5oZWlnaHQgPDwgMTYpIHwgY2ZzenJfd2lkdGgpOwotCWNldV93cml0ZShwY2RldiwgQ0xGQ1IsIDApOyAvKiBkYXRhIGZldGNoIG1vZGUgLSBubyBsb3dwYXNzIGZpbHRlciAqLworCWNldV93cml0ZShwY2RldiwgQ0FQV1IsIChoZWlnaHQgPDwgMTYpIHwgd2lkdGgpOworCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIDApOyAvKiBubyBzY2FsaW5nICovCisJY2V1X3dyaXRlKHBjZGV2LCBDRlNaUiwgKGhlaWdodCA8PCAxNikgfCBjZnN6cl93aWR0aCk7CisJY2V1X3dyaXRlKHBjZGV2LCBDTEZDUiwgMCk7IC8qIG5vIGxvd3Bhc3MgZmlsdGVyICovCiAKIAkvKiBBIGZldyB3b3JkcyBhYm91dCBieXRlIG9yZGVyIChvYnNlcnZlZCBpbiBCaWcgRW5kaWFuIG1vZGUpCiAJICoKQEAgLTQyMywxOSArNDk2LDIwIEBACiAJICogdXNpbmcgNyB3ZSBzd2FwIHRoZSBkYXRhIGJ5dGVzIHRvIG1hdGNoIHRoZSBpbmNvbWluZyBvcmRlcjoKIAkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcKIAkgKi8KLQljZXVfd3JpdGUocGNkZXYsIENET0NSLCAweDAwMDAwMDE3KTsKKwl2YWx1ZSA9IDB4MDAwMDAwMTc7CisJaWYgKHl1dl9saW5lc2tpcCkKKwkJdmFsdWUgJj0gfjB4MDAwMDAwMTA7IC8qIGNvbnZlcnQgNDoyOjIgLT4gNDoyOjAgKi8KKworCWNldV93cml0ZShwY2RldiwgQ0RPQ1IsIHZhbHVlKTsKIAogCWNldV93cml0ZShwY2RldiwgQ0RXRFIsIGNkd2RyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENGV0NSLCAwKTsgLyoga2VlcCAiZGF0YWZldGNoIGZpcmV3YWxsIiBkaXNhYmxlZCAqLwogCiAJLyogbm90IGluIGJ1bmRsZSBtb2RlOiBza2lwIENCRFNSLCBDREFZUjIsIENEQUNSMiwgQ0RCWVIyLCBDREJDUjIgKi8KLQkvKiBpbiBkYXRhIGZldGNoIG1vZGU6IG5vIG5lZWQgZm9yIENEQUNSLCBDREJZUiwgQ0RCQ1IgKi8KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgICAgICAgX191MzIgcGl4Zm10KQorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKQEAgLTQ1MCwxNSArNTI0LDEyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2ZtdF9jYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJICAgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgc2hfbW9iaWxlX2NldV9mb3JtYXRzW10gPSB7CisJeworCQkubmFtZQkJPSAiTlYxMiIsCisJCS5kZXB0aAkJPSAxMiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfTlYxMiwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwl9LAorCXsKKwkJLm5hbWUJCT0gIk5WMjEiLAorCQkuZGVwdGgJCT0gMTIsCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX05WMjEsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJOVjE2IiwKKwkJLmRlcHRoCQk9IDE2LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9OVjE2LAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCX0sCisJeworCQkubmFtZQkJPSAiTlY2MSIsCisJCS5kZXB0aAkJPSAxNiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfTlY2MSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwl9LAorfTsKKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9mb3JtYXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgaWR4LAorCQkJCSAgICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSkKIHsKLQlyZXR1cm4gaWNkLT5vcHMtPnNldF9mbXRfY2FwKGljZCwgcGl4Zm10LCByZWN0KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlpbnQgcmV0LCBrLCBuOworCWludCBmb3JtYXRzID0gMDsKKworCXJldCA9IHNoX21vYmlsZV9jZXVfdHJ5X2J1c19wYXJhbShpY2QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoaWNkLT5mb3JtYXRzW2lkeF0uZm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwljYXNlIFY0TDJfUElYX0ZNVF9WWVVZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKKwkJbiA9IEFSUkFZX1NJWkUoc2hfbW9iaWxlX2NldV9mb3JtYXRzKTsKKwkJZm9ybWF0cyArPSBuOworCQlmb3IgKGsgPSAwOyB4bGF0ZSAmJiBrIDwgbjsgaysrKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmc2hfbW9iaWxlX2NldV9mb3JtYXRzW2tdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJc2hfbW9iaWxlX2NldV9mb3JtYXRzW2tdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwlkZWZhdWx0OgorCQkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLworCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwKKwkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKKwkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBmb3JtYXRzOwogfQogCi1zdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdF9jYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKCF4bGF0ZSkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBpeGZtdCkgeworCWNhc2UgMDoJCQkJLyogT25seSBnZW9tZXRyeSBjaGFuZ2UgKi8KKwkJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBwaXhmbXQsIHJlY3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHhsYXRlLT5jYW1fZm10LT5mb3VyY2MsIHJlY3QpOworCX0KKworCWlmIChwaXhmbXQgJiYgIXJldCkgeworCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOworCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OworCQlwY2Rldi0+Y2FtZXJhX2ZtdCA9IHhsYXRlLT5jYW1fZm10OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCV9fdTMyIHBpeGZtdCA9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJLyogRklYTUU6IGNhbGN1bGF0ZSB1c2luZyBkZXB0aCBhbmQgYnVzIHdpZHRoICovCiAKIAlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPCA0KQpAQCAtNDcyLDggKzY1NCwzMSBAQAogCWYtPmZtdC5waXgud2lkdGggJj0gfjB4MDE7CiAJZi0+Zm10LnBpeC5oZWlnaHQgJj0gfjB4MDM7CiAKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGYtPmZtdC5waXgud2lkdGggKgorCQlESVZfUk9VTkRfVVAoeGxhdGUtPmhvc3RfZm10LT5kZXB0aCwgOCk7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCiAJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLwotCXJldHVybiBpY2QtPm9wcy0+dHJ5X2ZtdF9jYXAoaWNkLCBmKTsKKwlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChmLT5mbXQucGl4LmZpZWxkKSB7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCXBjZGV2LT5pc19pbnRlcmxhY2UgPSAxOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfQU5ZOgorCQlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJcGNkZXYtPmlzX2ludGVybGFjZSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9yZXFidWZzKHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKQEAgLTUzMiw3ICs3MzcsNyBAQAogCQkJCSAgICAgICAmc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9vcHMsCiAJCQkJICAgICAgICZpY2ktPmRldiwgJnBjZGV2LT5sb2NrLAogCQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkJICAgICAgIFY0TDJfRklFTERfTk9ORSwKKwkJCQkgICAgICAgVjRMMl9GSUVMRF9BTlksCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIpLAogCQkJCSAgICAgICBpY2QpOwogfQpAQCAtNTQxLDEyICs3NDYsMTIgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmFkZAkJPSBzaF9tb2JpbGVfY2V1X2FkZF9kZXZpY2UsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfY2V1X3JlbW92ZV9kZXZpY2UsCi0JLnNldF9mbXRfY2FwCT0gc2hfbW9iaWxlX2NldV9zZXRfZm10X2NhcCwKLQkudHJ5X2ZtdF9jYXAJPSBzaF9tb2JpbGVfY2V1X3RyeV9mbXRfY2FwLAorCS5nZXRfZm9ybWF0cwk9IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMsCisJLnNldF9mbXQJPSBzaF9tb2JpbGVfY2V1X3NldF9mbXQsCisJLnRyeV9mbXQJPSBzaF9tb2JpbGVfY2V1X3RyeV9mbXQsCiAJLnJlcWJ1ZnMJPSBzaF9tb2JpbGVfY2V1X3JlcWJ1ZnMsCiAJLnBvbGwJCT0gc2hfbW9iaWxlX2NldV9wb2xsLAogCS5xdWVyeWNhcAk9IHNoX21vYmlsZV9jZXVfcXVlcnljYXAsCi0JLnRyeV9idXNfcGFyYW0JPSBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0sCiAJLnNldF9idXNfcGFyYW0JPSBzaF9tb2JpbGVfY2V1X3NldF9idXNfcGFyYW0sCiAJLmluaXRfdmlkZW9idWYJPSBzaF9tb2JpbGVfY2V1X2luaXRfdmlkZW9idWYsCiB9OwpAQCAtNjE2LDcgKzgyMSw3IEBACiAKIAkvKiByZXF1ZXN0IGlycSAqLwogCWVyciA9IHJlcXVlc3RfaXJxKHBjZGV2LT5pcnEsIHNoX21vYmlsZV9jZXVfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJICBwZGV2LT5kZXYuYnVzX2lkLCBwY2Rldik7CisJCQkgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwY2Rldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgQ0VVIGludGVycnVwdC5cbiIpOwogCQlnb3RvIGV4aXRfcmVsZWFzZV9tZW07CkBAIC02MzMsOCArODM4LDggQEAKIAlwY2Rldi0+aWNpLnByaXYgPSBwY2RldjsKIAlwY2Rldi0+aWNpLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXBjZGV2LT5pY2kubnIgPSBwZGV2LT5pZDsKLQlwY2Rldi0+aWNpLmRydl9uYW1lID0gcGRldi0+ZGV2LmJ1c19pZCwKLQlwY2Rldi0+aWNpLm9wcyA9ICZzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzLAorCXBjZGV2LT5pY2kuZHJ2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKKwlwY2Rldi0+aWNpLm9wcyA9ICZzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzOwogCiAJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKCZwY2Rldi0+aWNpKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IGZjZDJiNjIuLjAxYThlZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCiAJc3RybGNweShjYXAuY2FyZCwgY2FtLT52NGxkZXYtPm5hbWUsIHNpemVvZihjYXAuY2FyZCkpOwogCWlmICh1c2JfbWFrZV9wYXRoKGNhbS0+dXNiZGV2LCBjYXAuYnVzX2luZm8sIHNpemVvZihjYXAuYnVzX2luZm8pKSA8IDApCi0JCXN0cmxjcHkoY2FwLmJ1c19pbmZvLCBjYW0tPnVzYmRldi0+ZGV2LmJ1c19pZCwKKwkJc3RybGNweShjYXAuYnVzX2luZm8sIGRldl9uYW1lKCZjYW0tPnVzYmRldi0+ZGV2KSwKIAkJCXNpemVvZihjYXAuYnVzX2luZm8pKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FwLCBzaXplb2YoY2FwKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCBlMjM3MzRmLi44Y2IzNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTU1LDcgKzU1LDkgQEAKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJhLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNlbmRpZgogLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQsIEJSSURHRV9TTjlDMTAyKSwgfSwgSFY3MTMxUiAqLwogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzAsIEJSSURHRV9TTjlDMTAyKSwgfSwKQEAgLTkxLDEwICs5MywxNCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJjLCBCUklER0VfU045QzEwMyksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmUsIEJSSURHRV9TTjlDMTAzKSwgfSwKIAkvKiBTTjlDMTA1ICovCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY1LCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcsIEJSSURHRV9TTjlDMTA1KSwgfSwKKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3LCBCUklER0VfU045QzEwNSksIH0sCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4LCBCUklER0VfU045QzEwNSksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjMCwgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMyLCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzgsIEJSSURHRV9TTjlDMTA1KSwgfSwKQEAgLTExMyw3ICsxMTksOSBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTBmLCBCUklER0VfU045QzEyMCksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMzAsIEJSSURHRV9TTjlDMTIwKSwgfSwKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTM4LCBCUklER0VfU045QzEyMCksIH0sIE1PODAwMCAqLworI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYSwgQlJJREdFX1NOOUMxMjApLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2IsIEJSSURHRV9TTjlDMTIwKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYywgQlJJREdFX1NOOUMxMjApLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNlLCBCUklER0VfU045QzEyMCksIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDY2ZWJlNTkuLjkwMDc3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0zMywxMCArMzMsOSBAQAogc3RhdGljIExJU1RfSEVBRChob3N0cyk7CiBzdGF0aWMgTElTVF9IRUFEKGRldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChsaXN0X2xvY2spOwotc3RhdGljIERFRklORV9NVVRFWCh2aWRlb19sb2NrKTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0KgotZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYykKK2NvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpzb2NfY2FtZXJhX2Zvcm1hdF9ieV9mb3VyY2MoCisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTQ1LDY3ICs0NCw4NyBAQAogCQkJcmV0dXJuIGljZC0+Zm9ybWF0cyArIGk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfZm9ybWF0X2J5X2ZvdXJjYyk7CisKK2NvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoCisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWNkLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspCisJCWlmIChpY2QtPnVzZXJfZm9ybWF0c1tpXS5ob3N0X2ZtdC0+Zm91cmNjID09IGZvdXJjYykKKwkJCXJldHVybiBpY2QtPnVzZXJfZm9ybWF0cyArIGk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKTsKKworLyoqCisgKiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncygpIC0gYXBwbHkgcGxhdGZvcm0gU09DQU1fU0VOU09SX0lOVkVSVF8qIGZsYWdzCisgKiBAaWNsOgljYW1lcmEgcGxhdGZvcm0gcGFyYW1ldGVycworICogQGZsYWdzOglmbGFncyB0byBiZSBpbnZlcnRlZCBhY2NvcmRpbmcgdG8gcGxhdGZvcm0gY29uZmlndXJhdGlvbgorICogQHJldHVybjoJcmVzdWx0aW5nIGZsYWdzCisgKi8KK3Vuc2lnbmVkIGxvbmcgc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3Moc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGY7CisKKwkvKiBJZiBvbmx5IG9uZSBvZiB0aGUgdHdvIHBvbGFyaXRpZXMgaXMgc3VwcG9ydGVkLCBzd2l0Y2ggdG8gdGhlIG9wcG9zaXRlICovCisJaWYgKGljbC0+ZmxhZ3MgJiBTT0NBTV9TRU5TT1JfSU5WRVJUX0hTWU5DKSB7CisJCWYgPSBmbGFncyAmIChTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpOworCQlpZiAoZiA9PSBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8fCBmID09IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpCisJCQlmbGFncyBePSBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKGljbC0+ZmxhZ3MgJiBTT0NBTV9TRU5TT1JfSU5WRVJUX1ZTWU5DKSB7CisJCWYgPSBmbGFncyAmIChTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpOworCQlpZiAoZiA9PSBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8fCBmID09IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCQlmbGFncyBePSBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKGljbC0+ZmxhZ3MgJiBTT0NBTV9TRU5TT1JfSU5WRVJUX1BDTEspIHsKKwkJZiA9IGZsYWdzICYgKFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpOworCQlpZiAoZiA9PSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfHwgZiA9PSBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQorCQkJZmxhZ3MgXj0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKKwl9CisKKwlyZXR1cm4gZmxhZ3M7Cit9CitFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKTsKIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0JZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpmbXQ7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0JZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhpY2QsIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCWlmICghZm10KSB7Ci0JCWRldl9kYmcoJmljZC0+ZGV2LCAiaW52YWxpZCBmb3JtYXQgMHglMDh4XG4iLAotCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRldl9kYmcoJmljZC0+ZGV2LCAiZm10OiAweCUwOHhcbiIsIGZtdC0+Zm91cmNjKTsKLQotCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQotCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgewotCQlmaWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQl9IGVsc2UgaWYgKFY0TDJfRklFTERfTk9ORSAhPSBmaWVsZCkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkZpZWxkIHR5cGUgaW52YWxpZC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiB0ZXN0IHBoeXNpY2FsIGJ1cyBwYXJhbWV0ZXJzICovCi0JcmV0ID0gaWNpLT5vcHMtPnRyeV9idXNfcGFyYW0oaWNkLCBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyogbGltaXQgZm9ybWF0IHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLwotCXJldCA9IGljaS0+b3BzLT50cnlfZm10X2NhcChpY2QsIGYpOwotCi0JLyogY2FsY3VsYXRlIG1pc3NpbmcgZmllbGRzICovCi0JZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwotCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KLQkJKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKSA+PiAzOwotCWYtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGljaS0+b3BzLT50cnlfZm10KGljZCwgZik7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCSBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCWludCByZXQgPSAwOworCiAJaWYgKGlucC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCWlucC0+c3RkID0gVjRMMl9TVERfVU5LTk9XTjsKLQlzdHJjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIik7CisJaWYgKGljZC0+b3BzLT5lbnVtX2lucHV0KQorCQlyZXQgPSBpY2QtPm9wcy0+ZW51bV9pbnB1dChpY2QsIGlucCk7CisJZWxzZSB7CisJCS8qIGRlZmF1bHQgaXMgY2FtZXJhICovCisJCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCWlucC0+c3RkICA9IFY0TDJfU1REX1VOS05PV047CisJCXN0cmNweShpbnAtPm5hbWUsICJDYW1lcmEiKTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQpAQCAtMTI1LDcgKzE0NCwxNCBAQAogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICphKQogewotCXJldHVybiAwOworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCWludCByZXQgPSAwOworCisJaWYgKGljZC0+b3BzLT5zZXRfc3RkKQorCQlyZXQgPSBpY2QtPm9wcy0+c2V0X3N0ZChpY2QsIGEpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0xMzQsOCArMTYwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9Ci0JCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTE3OCw2ICsyMDMsNTkgQEAKIAlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmljZi0+dmJfdmlkcSwgcCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCitzdGF0aWMgaW50IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaW50IGksIGZtdHMgPSAwOworCisJaWYgKCFpY2ktPm9wcy0+Z2V0X2Zvcm1hdHMpCisJCS8qCisJCSAqIEZhbGxiYWNrIG1vZGUgLSB0aGUgaG9zdCB3aWxsIGhhdmUgdG8gc2VydmUgYWxsCisJCSAqIHNlbnNvci1wcm92aWRlZCBmb3JtYXRzIG9uZS10by1vbmUgdG8gdGhlIHVzZXIKKwkJICovCisJCWZtdHMgPSBpY2QtPm51bV9mb3JtYXRzOworCWVsc2UKKwkJLyoKKwkJICogRmlyc3QgcGFzcyAtIG9ubHkgY291bnQgZm9ybWF0cyB0aGlzIGhvc3Qtc2Vuc29yCisJCSAqIGNvbmZpZ3VyYXRpb24gY2FuIHByb3ZpZGUKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBpY2QtPm51bV9mb3JtYXRzOyBpKyspCisJCQlmbXRzICs9IGljaS0+b3BzLT5nZXRfZm9ybWF0cyhpY2QsIGksIE5VTEwpOworCisJaWYgKCFmbXRzKQorCQlyZXR1cm4gLUVOWElPOworCisJaWNkLT51c2VyX2Zvcm1hdHMgPQorCQl2bWFsbG9jKGZtdHMgKiBzaXplb2Yoc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlKSk7CisJaWYgKCFpY2QtPnVzZXJfZm9ybWF0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpY2QtPm51bV91c2VyX2Zvcm1hdHMgPSBmbXRzOworCWZtdHMgPSAwOworCisJZGV2X2RiZygmaWNkLT5kZXYsICJGb3VuZCAlZCBzdXBwb3J0ZWQgZm9ybWF0cy5cbiIsIGZtdHMpOworCisJLyogU2Vjb25kIHBhc3MgLSBhY3R1YWxseSBmaWxsIGRhdGEgZm9ybWF0cyAqLworCWZvciAoaSA9IDA7IGkgPCBpY2QtPm51bV9mb3JtYXRzOyBpKyspCisJCWlmICghaWNpLT5vcHMtPmdldF9mb3JtYXRzKSB7CisJCQlpY2QtPnVzZXJfZm9ybWF0c1tpXS5ob3N0X2ZtdCA9IGljZC0+Zm9ybWF0cyArIGk7CisJCQlpY2QtPnVzZXJfZm9ybWF0c1tpXS5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaTsKKwkJCWljZC0+dXNlcl9mb3JtYXRzW2ldLmJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2ldLmRlcHRoOworCQl9IGVsc2UgeworCQkJZm10cyArPSBpY2ktPm9wcy0+Z2V0X2Zvcm1hdHMoaWNkLCBpLAorCQkJCQkJICAgICAgJmljZC0+dXNlcl9mb3JtYXRzW2ZtdHNdKTsKKwkJfQorCisJaWNkLT5jdXJyZW50X2ZtdCA9IGljZC0+dXNlcl9mb3JtYXRzWzBdLmhvc3RfZm10OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJdmZyZWUoaWNkLT51c2VyX2Zvcm1hdHMpOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwpAQCAtMTkwLDggKzI2OCwxMCBAQAogCWlmICghaWNmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFByb3RlY3QgYWdhaW5zdCBpY2QtPnJlbW92ZSgpIHVudGlsIHdlIG1vZHVsZV9nZXQoKSBib3RoIGRyaXZlcnMuICovCi0JbXV0ZXhfbG9jaygmdmlkZW9fbG9jayk7CisJLyoKKwkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZXNlIHBvaW50ZXJzIG5vdyBhcyBsb25nIGFzIGEgdXNlciBoYXMKKwkgKiB0aGUgdmlkZW8gZGV2aWNlIG9wZW4gLSB3ZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBoZWxkIGNkZXYgcmVmZXJlbmNlLgorCSAqLwogCiAJdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJaWNkID0gY29udGFpbmVyX29mKHZkZXYtPnBhcmVudCwgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLCBkZXYpOwpAQCAtMjA5LDIwICsyODksMjUgQEAKIAkJZ290byBlbWdpOwogCX0KIAorCS8qIFByb3RlY3QgYWdhaW5zdCBpY2QtPnJlbW92ZSgpIHVudGlsIHdlIG1vZHVsZV9nZXQoKSBib3RoIGRyaXZlcnMuICovCisJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwogCWljZi0+aWNkID0gaWNkOwogCWljZC0+dXNlX2NvdW50Kys7CiAKIAkvKiBOb3cgd2UgcmVhbGx5IGhhdmUgdG8gYWN0aXZhdGUgdGhlIGNhbWVyYSAqLwogCWlmIChpY2QtPnVzZV9jb3VudCA9PSAxKSB7CisJCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVpdWZtdDsKIAkJcmV0ID0gaWNpLT5vcHMtPmFkZChpY2QpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBhY3RpdmF0ZSB0aGUgY2FtZXJhOiAlZFxuIiwgcmV0KTsKLQkJCWljZC0+dXNlX2NvdW50LS07CiAJCQlnb3RvIGVpY2lhZGQ7CiAJCX0KIAl9CiAKLQltdXRleF91bmxvY2soJnZpZGVvX2xvY2spOworCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGljZjsKIAlkZXZfZGJnKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2Ugb3BlblxuIik7CkBAIC0yMzEsMTMgKzMxNiwxNiBAQAogCiAJcmV0dXJuIDA7CiAKLQkvKiBBbGwgZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIHZpZGVvX2xvY2sgaGVsZCAqLworCS8qIEZpcnN0IHR3byBlcnJvcnMgYXJlIGVudGVyZWQgd2l0aCB0aGUgLnZpZGVvX2xvY2sgaGVsZCAqLwogZWljaWFkZDoKKwlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7CitlaXVmbXQ6CisJaWNkLT51c2VfY291bnQtLTsKKwltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CiAJbW9kdWxlX3B1dChpY2ktPm9wcy0+b3duZXIpOwogZW1naToKIAltb2R1bGVfcHV0KGljZC0+b3BzLT5vd25lcik7CiBlbWdkOgotCW11dGV4X3VubG9jaygmdmlkZW9fbG9jayk7CiAJdmZyZWUoaWNmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjQ5LDEzICszMzcsMTYgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OwogCi0JbXV0ZXhfbG9jaygmdmlkZW9fbG9jayk7CisJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAlpY2QtPnVzZV9jb3VudC0tOwotCWlmICghaWNkLT51c2VfY291bnQpCisJaWYgKCFpY2QtPnVzZV9jb3VudCkgewogCQlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CisJCXNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoaWNkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCiAJbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKLQltdXRleF91bmxvY2soJnZpZGVvX2xvY2spOwogCiAJdmZyZWUoaWNmKTsKIApAQCAtMjY1LDcgKzM1Niw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNvY19jYW1lcmFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwpAQCAtMjk5LDggKzM5MCw3IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAKIAlpZiAobGlzdF9lbXB0eSgmaWNmLT52Yl92aWRxLnN0cmVhbSkpIHsKIAkJZGV2X2VycigmaWNkLT5kZXYsICJUcnlpbmcgdG8gcG9sbCB3aXRoIG5vIHF1ZXVlZCBidWZmZXJzIVxuIik7CkBAIC0zMTAsNyArNDAwLDYgQEAKIAlyZXR1cm4gaWNpLT5vcHMtPnBvbGwoZmlsZSwgcHQpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNvY19jYW1lcmFfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gc29jX2NhbWVyYV9vcGVuLApAQCAtMzIyLDQ0ICs0MTEsNTAgQEAKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIH07CiAKLQogc3RhdGljIGludCBzb2NfY2FtZXJhX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorCQkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKIAlpbnQgcmV0OwogCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKLQljb25zdCBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmRhdGFfZm10OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlkYXRhX2ZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoaWNkLCBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQlpZiAoIWRhdGFfZm10KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIGJ1c3dpZHRoIG1heSBiZSBmdXJ0aGVyIGFkanVzdGVkIGJ5IHRoZSBpY2kgKi8KLQlpY2QtPmJ1c3dpZHRoID0gZGF0YV9mbXQtPmRlcHRoOwotCi0JcmV0ID0gc29jX2NhbWVyYV90cnlfZm10X3ZpZF9jYXAoZmlsZSwgaWNmLCBmKTsKKwlyZXQgPSBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZpY2YtPnZiX3ZpZHEpKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiU19GTVQgZGVuaWVkOiBxdWV1ZSBidXN5XG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHVubG9jazsKKwl9CisKIAlyZWN0LmxlZnQJPSBpY2QtPnhfY3VycmVudDsKIAlyZWN0LnRvcAk9IGljZC0+eV9jdXJyZW50OwotCXJlY3Qud2lkdGgJPSBmLT5mbXQucGl4LndpZHRoOwotCXJlY3QuaGVpZ2h0CT0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JcmV0ID0gaWNpLT5vcHMtPnNldF9mbXRfY2FwKGljZCwgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCwgJnJlY3QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCXJlY3Qud2lkdGgJPSBwaXgtPndpZHRoOworCXJlY3QuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCBwaXgtPnBpeGVsZm9ybWF0LCAmcmVjdCk7CisJaWYgKHJldCA8IDApIHsKKwkJZ290byB1bmxvY2s7CisJfSBlbHNlIGlmICghaWNkLT5jdXJyZW50X2ZtdCB8fAorCQkgICBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MgIT0gcGl4Zm10KSB7CisJCWRldl9lcnIoJmljaS0+ZGV2LAorCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KIAotCWljZC0+Y3VycmVudF9mbXQJPSBkYXRhX2ZtdDsKIAlpY2QtPndpZHRoCQk9IHJlY3Qud2lkdGg7CiAJaWNkLT5oZWlnaHQJCT0gcmVjdC5oZWlnaHQ7Ci0JaWNmLT52Yl92aWRxLmZpZWxkCT0gZi0+Zm10LnBpeC5maWVsZDsKLQlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGYtPnR5cGUpCisJaWNmLT52Yl92aWRxLmZpZWxkCT0gcGl4LT5maWVsZDsKKwlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCWRldl93YXJuKCZpY2QtPmRldiwgIkF0dGVudGlvbiEgV3JvbmcgYnVmLXR5cGUgJWRcbiIsCiAJCQkgZi0+dHlwZSk7CiAKQEAgLTM2NywxMSArNDYyLDE2IEBACiAJCWljZC0+d2lkdGgsIGljZC0+aGVpZ2h0KTsKIAogCS8qIHNldCBwaHlzaWNhbCBidXMgcGFyYW1ldGVycyAqLwotCXJldHVybiBpY2ktPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCXJldCA9IGljaS0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgcGl4Zm10KTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCisJCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CkBAIC0zNzksMTAgKzQ3OSwxMCBAQAogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlpZiAoZi0+aW5kZXggPj0gaWNkLT5udW1fZm9ybWF0cykKKwlpZiAoZi0+aW5kZXggPj0gaWNkLT5udW1fdXNlcl9mb3JtYXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvcm1hdCA9ICZpY2QtPmZvcm1hdHNbZi0+aW5kZXhdOworCWZvcm1hdCA9IGljZC0+dXNlcl9mb3JtYXRzW2YtPmluZGV4XS5ob3N0X2ZtdDsKIAogCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdC0+bmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CiAJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXQtPmZvdXJjYzsKQEAgLTM5MCwyMSArNDkwLDIxIEBACiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKwkJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlmLT5mbXQucGl4LndpZHRoCT0gaWNkLT53aWR0aDsKLQlmLT5mbXQucGl4LmhlaWdodAk9IGljZC0+aGVpZ2h0OwotCWYtPmZtdC5waXguZmllbGQJPSBpY2YtPnZiX3ZpZHEuZmllbGQ7Ci0JZi0+Zm10LnBpeC5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYzsKLQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZQk9Ci0JCShmLT5mbXQucGl4LndpZHRoICogaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGgpID4+IDM7Ci0JZi0+Zm10LnBpeC5zaXplaW1hZ2UJPQotCQlmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOworCXBpeC0+d2lkdGgJCT0gaWNkLT53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBpY2QtPmhlaWdodDsKKwlwaXgtPmZpZWxkCQk9IGljZi0+dmJfdmlkcS5maWVsZDsKKwlwaXgtPnBpeGVsZm9ybWF0CT0gaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjOworCXBpeC0+Ynl0ZXNwZXJsaW5lCT0gcGl4LT53aWR0aCAqCisJCURJVl9ST1VORF9VUChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCwgOCk7CisJcGl4LT5zaXplaW1hZ2UJCT0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKIAlkZXZfZGJnKCZpY2QtPmRldiwgImN1cnJlbnRfZm10LT5mb3VyY2M6IDB4JTA4eFxuIiwKIAkJaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjKTsKIAlyZXR1cm4gMDsKQEAgLTQxNSw4ICs1MTUsNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9Ci0JCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTQyOSw2ICs1MjgsNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCWludCByZXQ7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtNDM3LDEwICs1MzcsMTYgQEAKIAlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwogCWljZC0+b3BzLT5zdGFydF9jYXB0dXJlKGljZCk7CiAKIAkvKiBUaGlzIGNhbGxzIGJ1Zl9xdWV1ZSBmcm9tIGhvc3QgZHJpdmVyJ3MgdmlkZW9idWZfcXVldWVfb3BzICovCi0JcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZpY2YtPnZiX3ZpZHEpOworCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9uKCZpY2YtPnZiX3ZpZHEpOworCisJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTQ1NiwxMiArNTYyLDE2IEBACiAJaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7CisKIAkvKiBUaGlzIGNhbGxzIGJ1Zl9yZWxlYXNlIGZyb20gaG9zdCBkcml2ZXIncyB2aWRlb2J1Zl9xdWV1ZV9vcHMgZm9yIGFsbAogCSAqIHJlbWFpbmluZyBidWZmZXJzLiBXaGVuIHRoZSBsYXN0IGJ1ZmZlciBpcyBmcmVlZCwgc3RvcCBjYXB0dXJlICovCiAJdmlkZW9idWZfc3RyZWFtb2ZmKCZpY2YtPnZiX3ZpZHEpOwogCiAJaWNkLT5vcHMtPnN0b3BfY2FwdHVyZShpY2QpOwogCisJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NywxNCArNjc3LDE2IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJaW50IHJldDsKIAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2ZtdF9jYXAoaWNkLCAwLCAmYS0+Yyk7CisJLyogQ3JvcHBpbmcgaXMgYWxsb3dlZCBkdXJpbmcgYSBydW5uaW5nIGNhcHR1cmUsIGd1YXJkIGNvbnNpc3RlbmN5ICovCisJbXV0ZXhfbG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOworCisJcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCAwLCAmYS0+Yyk7CiAJaWYgKCFyZXQpIHsKIAkJaWNkLT53aWR0aAk9IGEtPmMud2lkdGg7CiAJCWljZC0+aGVpZ2h0CT0gYS0+Yy5oZWlnaHQ7CkBAIC01ODIsNiArNjk0LDggQEAKIAkJaWNkLT55X2N1cnJlbnQJPSBhLT5jLnRvcDsKIAl9CiAKKwltdXRleF91bmxvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5MiwxOCArODA2LDM1IEBACiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPQotCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlpbnQgcmV0OwogCi0JaWYgKCFpY2QtPm9wcy0+cHJvYmUpCi0JCXJldHVybiAtRU5PREVWOworCS8qCisJICogUG9zc2libGUgcmFjZSBzY2VuYXJpbzoKKwkgKiBtb2Rwcm9iZSA8Y2FtZXJhLWhvc3QtZHJpdmVyPiB0cmlnZ2VycyBfX2Z1bmNfXworCSAqIGF0IHRoaXMgbW9tZW50IHJlc3BlY3RpdmUgPGNhbWVyYS1zZW5zb3ItZHJpdmVyPiBnZXRzIHJtbW9kJ2VkCisJICogdG8gcHJvdGVjdCB0YWtlIG1vZHVsZSByZWZlcmVuY2VzLgorCSAqLworCisJaWYgKCF0cnlfbW9kdWxlX2dldChpY2QtPm9wcy0+b3duZXIpKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ291bGRuJ3QgbG9jayBzZW5zb3IgZHJpdmVyLlxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZW1nZDsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGljaS0+b3BzLT5vd25lcikpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJDb3VsZG4ndCBsb2NrIGNhcHR1cmUgYnVzIGRyaXZlci5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVtZ2k7CisJfQorCisJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAogCS8qIFdlIG9ubHkgY2FsbCAtPmFkZCgpIGhlcmUgdG8gYWN0aXZhdGUgYW5kIHByb2JlIHRoZSBjYW1lcmEuCiAJICogV2Ugc2hhbGwgLT5yZW1vdmUoKSBhbmQgZGVhY3RpdmF0ZSBpdCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAqLwogCXJldCA9IGljaS0+b3BzLT5hZGQoaWNkKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlaWFkZDsKIAogCXJldCA9IGljZC0+b3BzLT5wcm9iZShpY2QpOwogCWlmIChyZXQgPj0gMCkgewpAQCAtNzE3LDYgKzg0OCwxMiBAQAogCX0KIAlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CiAKK2VpYWRkOgorCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKKwltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CitlbWdpOgorCW1vZHVsZV9wdXQoaWNkLT5vcHMtPm93bmVyKTsKK2VtZ2Q6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzc5LDExICs5MTYsMjAgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKml4OwogCi0JaWYgKCFpY2ktPm9wcy0+aW5pdF92aWRlb2J1ZiB8fCAhaWNpLT5vcHMtPmFkZCB8fCAhaWNpLT5vcHMtPnJlbW92ZSkKKwlpZiAoIWljaSB8fCAhaWNpLT5vcHMgfHwKKwkgICAgIWljaS0+b3BzLT50cnlfZm10IHx8CisJICAgICFpY2ktPm9wcy0+c2V0X2ZtdCB8fAorCSAgICAhaWNpLT5vcHMtPnNldF9idXNfcGFyYW0gfHwKKwkgICAgIWljaS0+b3BzLT5xdWVyeWNhcCB8fAorCSAgICAhaWNpLT5vcHMtPmluaXRfdmlkZW9idWYgfHwKKwkgICAgIWljaS0+b3BzLT5yZXFidWZzIHx8CisJICAgICFpY2ktPm9wcy0+YWRkIHx8CisJICAgICFpY2ktPm9wcy0+cmVtb3ZlIHx8CisJICAgICFpY2ktPm9wcy0+cG9sbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBOdW1iZXIgbWlnaHQgYmUgZXF1YWwgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBJRCAqLwotCXNwcmludGYoaWNpLT5kZXYuYnVzX2lkLCAiY2FtZXJhX2hvc3QlZCIsIGljaS0+bnIpOworCWRldl9zZXRfbmFtZSgmaWNpLT5kZXYsICJjYW1lcmFfaG9zdCVkIiwgaWNpLT5ucik7CiAKIAltdXRleF9sb2NrKCZsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaXgsICZob3N0cywgbGlzdCkgewpAQCAtODQ3LDcgKzk5MywxNiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaXg7CiAJaW50IG51bSA9IC0xLCBpOwogCi0JaWYgKCFpY2QpCisJaWYgKCFpY2QgfHwgIWljZC0+b3BzIHx8CisJICAgICFpY2QtPm9wcy0+cHJvYmUgfHwKKwkgICAgIWljZC0+b3BzLT5pbml0IHx8CisJICAgICFpY2QtPm9wcy0+cmVsZWFzZSB8fAorCSAgICAhaWNkLT5vcHMtPnN0YXJ0X2NhcHR1cmUgfHwKKwkgICAgIWljZC0+b3BzLT5zdG9wX2NhcHR1cmUgfHwKKwkgICAgIWljZC0+b3BzLT5zZXRfZm10IHx8CisJICAgICFpY2QtPm9wcy0+dHJ5X2ZtdCB8fAorCSAgICAhaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbSB8fAorCSAgICAhaWNkLT5vcHMtPnNldF9idXNfcGFyYW0pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSA8IDI1NiAmJiBudW0gPCAwOyBpKyspIHsKQEAgLTg2NywxMCArMTAyMiwxMiBAQAogCiAJaWNkLT5kZXZudW0gPSBudW07CiAJaWNkLT5kZXYuYnVzID0gJnNvY19jYW1lcmFfYnVzX3R5cGU7Ci0Jc25wcmludGYoaWNkLT5kZXYuYnVzX2lkLCBzaXplb2YoaWNkLT5kZXYuYnVzX2lkKSwKLQkJICIldS0ldSIsIGljZC0+aWZhY2UsIGljZC0+ZGV2bnVtKTsKKwlkZXZfc2V0X25hbWUoJmljZC0+ZGV2LCAiJXUtJXUiLCBpY2QtPmlmYWNlLCBpY2QtPmRldm51bSk7CiAKLQlpY2QtPmRldi5yZWxlYXNlID0gZHVtbXlfcmVsZWFzZTsKKwlpY2QtPmRldi5yZWxlYXNlCT0gZHVtbXlfcmVsZWFzZTsKKwlpY2QtPnVzZV9jb3VudAkJPSAwOworCWljZC0+aG9zdF9wcml2CQk9IE5VTEw7CisJbXV0ZXhfaW5pdCgmaWNkLT52aWRlb19sb2NrKTsKIAogCXJldHVybiBzY2FuX2FkZF9kZXZpY2UoaWNkKTsKIH0KQEAgLTkxNyw2ICsxMDc0LDEwIEBACiAjZW5kaWYKIH07CiAKKy8qCisgKiBVc3VhbGx5IGNhbGxlZCBmcm9tIHRoZSBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgLnByb2JlKCkgbWV0aG9kLCBpLmUuLCBmcm9tCisgKiBzb2NfY2FtZXJhX3Byb2JlKCkgYWJvdmUgd2l0aCAudmlkZW9fbG9jayBoZWxkCisgKi8KIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwpAQCAtOTMyLDcgKzEwOTMsNyBAQAogCWRldl9kYmcoJmljaS0+ZGV2LCAiQWxsb2NhdGVkIHZpZGVvX2RldmljZSAlcFxuIiwgdmRldik7CiAKIAlzdHJsY3B5KHZkZXYtPm5hbWUsIGljaS0+ZHJ2X25hbWUsIHNpemVvZih2ZGV2LT5uYW1lKSk7Ci0JLyogTWF5YmUgYmV0dGVyICZpY2ktPmRldiAqLworCiAJdmRldi0+cGFyZW50CQk9ICZpY2QtPmRldjsKIAl2ZGV2LT5jdXJyZW50X25vcm0JPSBWNEwyX1NURF9VTktOT1dOOwogCXZkZXYtPmZvcHMJCT0gJnNvY19jYW1lcmFfZm9wczsKQEAgLTk0MSw4ICsxMTAyLDYgQEAKIAl2ZGV2LT5taW5vcgkJPSAtMTsKIAl2ZGV2LT50dm5vcm1zCQk9IFY0TDJfU1REX1VOS05PV04sCiAKLQlpY2QtPmN1cnJlbnRfZm10ID0gJmljZC0+Zm9ybWF0c1swXTsKLQogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2ZGV2LT5taW5vcik7CiAJaWYgKGVyciA8IDApIHsKIAkJZGV2X2Vycih2ZGV2LT5wYXJlbnQsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKQEAgLTk2OCwxMCArMTEyNywxMCBAQAogCWlmICghaWNkLT5kZXYucGFyZW50IHx8ICF2ZGV2KQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZ2aWRlb19sb2NrKTsKKwltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYpOwogCWljZC0+dmRldiA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZ2aWRlb19sb2NrKTsKKwltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfdmlkZW9fc3RvcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggYmI3YTlkNC4uMDEzYWIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTc5LDE5ICs3OSwyMCBAQAogCXJldHVybiBwLT5idXNfcGFyYW07CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKnAgPSBzb2NfY2FtZXJhX3BsYXRmb3JtX2dldF9pbmZvKGljZCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAKLQlmLT5mbXQucGl4LndpZHRoID0gcC0+Zm9ybWF0LndpZHRoOwotCWYtPmZtdC5waXguaGVpZ2h0ID0gcC0+Zm9ybWF0LmhlaWdodDsKKwlwaXgtPndpZHRoID0gcC0+Zm9ybWF0LndpZHRoOworCXBpeC0+aGVpZ2h0ID0gcC0+Zm9ybWF0LmhlaWdodDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI0LDggKzEyNSw4IEBACiAJLnJlbGVhc2UJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RvcF9jYXB0dXJlLAotCS5zZXRfZm10X2NhcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXRfY2FwLAotCS50cnlfZm10X2NhcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXRfY2FwLAorCS5zZXRfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdCwKKwkudHJ5X2ZtdAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3F1ZXJ5X2J1c19wYXJhbSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IGU5ZWI2ZDcuLmY5NTE2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC0xMjYyLDYgKzEyNjIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdGtfdmlkaW9jX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZybXMpCit7CisJaWYgKGZybXMtPmluZGV4ID49IEFSUkFZX1NJWkUoc3RrX3NpemVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChmcm1zLT5waXhlbF9mb3JtYXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1WDoKKwljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgorCQlmcm1zLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7CisJCWZybXMtPmRpc2NyZXRlLndpZHRoID0gc3RrX3NpemVzW2ZybXMtPmluZGV4XS53OworCQlmcm1zLT5kaXNjcmV0ZS5oZWlnaHQgPSBzdGtfc2l6ZXNbZnJtcy0+aW5kZXhdLmg7CisJCXJldHVybiAwOworCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjRsX3N0a19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gdjRsX3N0a19vcGVuLApAQCAtMTI5Niw2ICsxMzE1LDcgQEAKIAkudmlkaW9jX2dfY3RybCA9IHN0a192aWRpb2NfZ19jdHJsLAogCS52aWRpb2Nfc19jdHJsID0gc3RrX3ZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19nX3Bhcm0gPSBzdGtfdmlkaW9jX2dfcGFybSwKKwkudmlkaW9jX2VudW1fZnJhbWVzaXplcyA9IHN0a192aWRpb2NfZW51bV9mcmFtZXNpemVzLAogfTsKIAogc3RhdGljIHZvaWQgc3RrX3Y0bF9kZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCkKQEAgLTEzNzYsMTIgKzEzOTYsOSBAQAogCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOwogCiAJCWlmICghZGV2LT5pc29jX2VwCi0JCQkmJiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzCi0JCQkJJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pCi0JCQkmJiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMKLQkJCQkmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSkgeworCQkJJiYgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBhbiBpc29jIGluIGVuZHBvaW50ICovCi0JCQlkZXYtPmlzb2NfZXAgPSAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweEYpOworCQkJZGV2LT5pc29jX2VwID0gdXNiX2VuZHBvaW50X251bShlbmRwb2ludCk7CiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCmluZGV4IDMyOGM0MWIuLjQyYWNjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwpAQCAtMTEzMiw4ICsxMTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdHY2ODBfZG9faW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgc3R2NjgwX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CkBAIC0xMzAzLDcgKzEzMDIsNyBAQAogc3RhdGljIGludCBzdHY2ODBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBzdHY2ODBfZG9faW9jdGwpOworCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgc3R2NjgwX2RvX2lvY3RsKTsKIH0KIAogc3RhdGljIGludCBzdHY2ODBfbW1hcCAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwppbmRleCA0OTYzZDQyLi4wYzAyMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwpAQCAtNDcsOSArNDcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKICNpZm5kZWYgVklERU9fQVVESU9fQkFMQU5DRQogIyBkZWZpbmUgVklERU9fQVVESU9fQkFMQU5DRSAzMgpAQCAtNzksNiArODAsNyBAQAogLyogU3RydWN0dXJlIG9mIGFkZHJlc3MgYW5kIHN1YmFkZHJlc3NlcyBmb3IgdGhlIHRkYTc0MzIgKi8KIAogc3RydWN0IHRkYTc0MzIgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlpbnQgYWRkcjsKIAlpbnQgaW5wdXQ7CiAJaW50IHZvbHVtZTsKQEAgLTg2LDEwICs4OCwxMiBAQAogCWludCBiYXNzLCB0cmVibGU7CiAJaW50IGxmLCBsciwgcmYsIHJyOwogCWludCBsb3VkOwotCXN0cnVjdCBpMmNfY2xpZW50IGM7CiB9Owotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRkYTc0MzIgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHRkYTc0MzIsIHNkKTsKK30KIAogLyogVGhlIFREQTc0MzIgaXMgbWFkZSBieSBTVFMtVGhvbXBzb24KICAqIGh0dHA6Ly93d3cuc3QuY29tCkBAIC0yMjQsMzIgKzIyOCwzMyBAQAogCiAvKiBCZWdpbiBjb2RlICovCiAKLXN0YXRpYyBpbnQgdGRhNzQzMl93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgc3ViYWRkciwgaW50IHZhbCkKK3N0YXRpYyBpbnQgdGRhNzQzMl93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgc3ViYWRkciwgaW50IHZhbCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0JdjRsX2RiZygyLCBkZWJ1ZyxjbGllbnQsIkluIHRkYTc0MzJfd3JpdGVcbiIpOwotCXY0bF9kYmcoMSwgZGVidWcsY2xpZW50LCJXcml0aW5nICVkIDB4JXhcbiIsIHN1YmFkZHIsIHZhbCk7CisKKwl2NGwyX2RiZygyLCBkZWJ1Zywgc2QsICJJbiB0ZGE3NDMyX3dyaXRlXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJXcml0aW5nICVkIDB4JXhcbiIsIHN1YmFkZHIsIHZhbCk7CiAJYnVmZmVyWzBdID0gc3ViYWRkcjsKIAlidWZmZXJbMV0gPSB2YWw7Ci0JaWYgKDIgIT0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWZmZXIsMikpIHsKLQkJdjRsX2VycihjbGllbnQsIkkvTyBlcnJvciwgdHJ5aW5nICh3cml0ZSAlZCAweCV4KVxuIiwKKwlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDIpKSB7CisJCXY0bDJfZXJyKHNkLCAiSS9PIGVycm9yLCB0cnlpbmcgKHdyaXRlICVkIDB4JXgpXG4iLAogCQkgICAgICAgc3ViYWRkciwgdmFsKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogSSBkb24ndCB0aGluayB3ZSBldmVyIGFjdHVhbGx5IF9yZWFkXyB0aGUgY2hpcC4uLiAqLwotCi1zdGF0aWMgaW50IHRkYTc0MzJfc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHRkYTc0MzJfc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHRkYTc0MzIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHRkYTc0MzIgKnQgPSB0b19zdGF0ZShzZCk7CiAJdW5zaWduZWQgY2hhciBidWZbMTZdOwotCXY0bF9kYmcoMiwgZGVidWcsY2xpZW50LCJJbiB0ZGE3NDMyX3NldFxuIik7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLGNsaWVudCwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCSJ0ZGE3NDMyOiA3NDMyX3NldCgweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeClcbiIsCi0JCXQtPmlucHV0LHQtPnZvbHVtZSx0LT5iYXNzLHQtPnRyZWJsZSx0LT5sZix0LT5scix0LT5yZix0LT5ycix0LT5sb3VkKTsKKwkJdC0+aW5wdXQsIHQtPnZvbHVtZSwgdC0+YmFzcywgdC0+dHJlYmxlLCB0LT5sZiwgdC0+bHIsCisJCXQtPnJmLCB0LT5yciwgdC0+bG91ZCk7CiAJYnVmWzBdICA9IFREQTc0MzJfSU47CiAJYnVmWzFdICA9IHQtPmlucHV0OwogCWJ1ZlsyXSAgPSB0LT52b2x1bWU7CkBAIC0yNjAsMTggKzI2NSwxOSBAQAogCWJ1Zls3XSAgPSB0LT5yZjsKIAlidWZbOF0gID0gdC0+cnI7CiAJYnVmWzldICA9IHQtPmxvdWQ7Ci0JaWYgKDEwICE9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDEwKSkgewotCQl2NGxfZXJyKGNsaWVudCwiSS9PIGVycm9yLCB0cnlpbmcgdGRhNzQzMl9zZXRcbiIpOworCWlmICgxMCAhPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDEwKSkgeworCQl2NGwyX2VycihzZCwgIkkvTyBlcnJvciwgdHJ5aW5nIHRkYTc0MzJfc2V0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkb190ZGE3NDMyX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGRvX3RkYTc0MzJfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCB0ZGE3NDMyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdjRsX2RiZygyLCBkZWJ1ZyxjbGllbnQsIkluIHRkYTc0MzJfaW5pdFxuIik7CisJc3RydWN0IHRkYTc0MzIgKnQgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2RiZygyLCBkZWJ1Zywgc2QsICJJbiB0ZGE3NDMyX2luaXRcbiIpOwogCiAJdC0+aW5wdXQgID0gVERBNzQzMl9TVEVSRU9fSU4gfCAgLyogTWFpbiAoc3RlcmVvKSBpbnB1dCAgICovCiAJCSAgICBUREE3NDMyX0JBU1NfU1lNICB8ICAvKiBTeW1tZXRyaWMgYmFzcyBjdXQgICAgKi8KQEAgLTI4OCw1NyArMjk0LDEyIEBACiAJdC0+cnIgICAgID0gVERBNzQzMl9BVFRFTl8wREI7CSAvKiAwZEIgYXR0ZW51YXRpb24gICAgICAgKi8KIAl0LT5sb3VkICAgPSBsb3VkbmVzczsJCSAvKiBpbnNtb2QgcGFyYW1ldGVyICAgICAgKi8KIAotCXRkYTc0MzJfc2V0KGNsaWVudCk7CisJdGRhNzQzMl9zZXQoc2QpOwogfQogCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKiAqCi0gKiBpMmMgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi1zdGF0aWMgaW50IHRkYTc0MzJfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCB0ZGE3NDMyX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0ZGE3NDMyICp0OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQl0ID0ga3phbGxvYyhzaXplb2YgKnQsR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNsaWVudCA9ICZ0LT5jOwotCW1lbWNweShjbGllbnQsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdCk7Ci0KLQlkb190ZGE3NDMyX2luaXQoY2xpZW50KTsKLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkciA8PCAxLCBhZGFwLT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE3NDMyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHRkYTc0MzJfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE3NDMyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB0ZGE3NDMyICp0ICA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZG9fdGRhNzQzMl9pbml0KGNsaWVudCk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQotCWtmcmVlKHQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRkYTc0MzJfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCB0ZGE3NDMyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHRkYTc0MzIgKnQgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzgyLDEwICszNDMsOSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHRkYTc0MzJfc2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCB0ZGE3NDMyX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0ZGE3NDMyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHRkYTc0MzIgKnQgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtNDAwLDcgKzM2MCw3IEBACiAJCWlmIChsb3VkbmVzcykJCS8qIFR1cm4gb24gdGhlIGxvdWRuZXNzIGJpdCAqLwogCQkJdC0+dm9sdW1lIHw9IFREQTc0MzJfTERfT047CiAKLQkJdGRhNzQzMl93cml0ZShjbGllbnQsVERBNzQzMl9WTCwgdC0+dm9sdW1lKTsKKwkJdGRhNzQzMl93cml0ZShzZCwgVERBNzQzMl9WTCwgdC0+dm9sdW1lKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCQlpZiAoY3RybC0+dmFsdWUgPCAzMjc2OCkgewpAQCAtNDI4LDE0ICszODgsMTQgQEAKIAkJaWYodC0+YmFzcz49IDB4OCkKIAkJCQl0LT5iYXNzID0gKH50LT5iYXNzICYgMHhmKSArIDB4OCA7CiAKLQkJdGRhNzQzMl93cml0ZShjbGllbnQsVERBNzQzMl9UTiwgMHgxMCB8ICh0LT5iYXNzIDw8IDQpIHwgdC0+dHJlYmxlICk7CisJCXRkYTc0MzJfd3JpdGUoc2QsIFREQTc0MzJfVE4sIDB4MTAgfCAodC0+YmFzcyA8PCA0KSB8IHQtPnRyZWJsZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCQl0LT50cmVibGU9IGN0cmwtPnZhbHVlID4+IDEyOwogCQlpZih0LT50cmVibGU+PSAweDgpCiAJCQkJdC0+dHJlYmxlID0gKH50LT50cmVibGUgJiAweGYpICsgMHg4IDsKIAotCQl0ZGE3NDMyX3dyaXRlKGNsaWVudCxUREE3NDMyX1ROLCAweDEwIHwgKHQtPmJhc3MgPDwgNCkgfCB0LT50cmVibGUgKTsKKwkJdGRhNzQzMl93cml0ZShzZCwgVERBNzQzMl9UTiwgMHgxMCB8ICh0LT5iYXNzIDw8IDQpIHwgdC0+dHJlYmxlKTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NDUsOTIgKzQwNSwxMDIgQEAKIAlpZiAodC0+bXV0ZWQpCiAJewogCQkvKiBNdXRlICYgdXBkYXRlIGJhbGFuY2UqLwotCQl0ZGE3NDMyX3dyaXRlKGNsaWVudCxUREE3NDMyX0xGLCB0LT5sZiB8IFREQTc0MzJfTVVURSk7Ci0JCXRkYTc0MzJfd3JpdGUoY2xpZW50LFREQTc0MzJfTFIsIHQtPmxyIHwgVERBNzQzMl9NVVRFKTsKLQkJdGRhNzQzMl93cml0ZShjbGllbnQsVERBNzQzMl9SRiwgdC0+cmYgfCBUREE3NDMyX01VVEUpOwotCQl0ZGE3NDMyX3dyaXRlKGNsaWVudCxUREE3NDMyX1JSLCB0LT5yciB8IFREQTc0MzJfTVVURSk7CisJCXRkYTc0MzJfd3JpdGUoc2QsIFREQTc0MzJfTEYsIHQtPmxmIHwgVERBNzQzMl9NVVRFKTsKKwkJdGRhNzQzMl93cml0ZShzZCwgVERBNzQzMl9MUiwgdC0+bHIgfCBUREE3NDMyX01VVEUpOworCQl0ZGE3NDMyX3dyaXRlKHNkLCBUREE3NDMyX1JGLCB0LT5yZiB8IFREQTc0MzJfTVVURSk7CisJCXRkYTc0MzJfd3JpdGUoc2QsIFREQTc0MzJfUlIsIHQtPnJyIHwgVERBNzQzMl9NVVRFKTsKIAl9IGVsc2UgewotCQl0ZGE3NDMyX3dyaXRlKGNsaWVudCxUREE3NDMyX0xGLCB0LT5sZik7Ci0JCXRkYTc0MzJfd3JpdGUoY2xpZW50LFREQTc0MzJfTFIsIHQtPmxyKTsKLQkJdGRhNzQzMl93cml0ZShjbGllbnQsVERBNzQzMl9SRiwgdC0+cmYpOwotCQl0ZGE3NDMyX3dyaXRlKGNsaWVudCxUREE3NDMyX1JSLCB0LT5ycik7CisJCXRkYTc0MzJfd3JpdGUoc2QsIFREQTc0MzJfTEYsIHQtPmxmKTsKKwkJdGRhNzQzMl93cml0ZShzZCwgVERBNzQzMl9MUiwgdC0+bHIpOworCQl0ZGE3NDMyX3dyaXRlKHNkLCBUREE3NDMyX1JGLCB0LT5yZik7CisJCXRkYTc0MzJfd3JpdGUoc2QsIFREQTc0MzJfUlIsIHQtPnJyKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGRhNzQzMl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRkYTc0MzJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JdjRsX2RiZygyLCBkZWJ1ZyxjbGllbnQsIkluIHRkYTc0MzJfY29tbWFuZFxuIik7Ci0JaWYgKGRlYnVnPjEpCi0JCXY0bF9pMmNfcHJpbnRfaW9jdGwoY2xpZW50LGNtZCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCi0JCXN3aXRjaCAocWMtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwogCX0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiB0ZGE3NDMyX3NldF9jdHJsKGNsaWVudCwgYXJnKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIHRkYTc0MzJfZ2V0X2N0cmwoY2xpZW50LCBhcmcpOworc3RhdGljIGludCB0ZGE3NDMyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KIAotCX0gLyogZW5kIG9mIChjbWQpIHN3aXRjaCAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE3NDMyX2NvcmVfb3BzID0geworCS5xdWVyeWN0cmwgPSB0ZGE3NDMyX3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gdGRhNzQzMl9nX2N0cmwsCisJLnNfY3RybCA9IHRkYTc0MzJfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdGRhNzQzMl9vcHMgPSB7CisJLmNvcmUgPSAmdGRhNzQzMl9jb3JlX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqICoKKyAqIGkyYyBpbnRlcmZhY2UgZnVuY3Rpb25zICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqICovCisKK3N0YXRpYyBpbnQgdGRhNzQzMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0ZGE3NDMyICp0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOworCWlmICghdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmdC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTc0MzJfb3BzKTsKKwlpZiAobG91ZG5lc3MgPCAwIHx8IGxvdWRuZXNzID4gMTUpIHsKKwkJdjRsMl93YXJuKHNkLCAibG91ZG5lc3MgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNVxuIik7CisJCWlmIChsb3VkbmVzcyA8IDApCisJCQlsb3VkbmVzcyA9IDA7CisJCWlmIChsb3VkbmVzcyA+IDE1KQorCQkJbG91ZG5lc3MgPSAxNTsKKwl9CisKKwlkb190ZGE3NDMyX2luaXQoc2QpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgID0gInRkYTc0MzIiLAotCX0sCi0JLmlkICAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE3NDMyLAotCS5hdHRhY2hfYWRhcHRlciAgPSB0ZGE3NDMyX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICAgPSB0ZGE3NDMyX2RldGFjaCwKLQkuY29tbWFuZCAgICAgICAgID0gdGRhNzQzMl9jb21tYW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CitzdGF0aWMgaW50IHRkYTc0MzJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JLm5hbWUgICAgICAgPSAidGRhNzQzMiIsCi0JLmRyaXZlciAgICAgPSAmZHJpdmVyLAotfTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHRkYTc0MzJfaW5pdCh2b2lkKQotewotCWlmICggKGxvdWRuZXNzIDwgMCkgfHwgKGxvdWRuZXNzID4gMTUpICkgewotCQlwcmludGsoS0VSTl9FUlIgImxvdWRuZXNzIHBhcmFtZXRlciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7CisJZG9fdGRhNzQzMl9pbml0KHNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHRkYTc0MzJfZmluaSh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRkYTc0MzJfaWRbXSA9IHsKKwl7ICJ0ZGE3NDMyIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0ZGE3NDMyX2lkKTsKIAotbW9kdWxlX2luaXQodGRhNzQzMl9pbml0KTsKLW1vZHVsZV9leGl0KHRkYTc0MzJfZmluaSk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAidGRhNzQzMiIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTc0MzIsCisJLmNvbW1hbmQgPSB0ZGE3NDMyX2NvbW1hbmQsCisJLnByb2JlID0gdGRhNzQzMl9wcm9iZSwKKwkucmVtb3ZlID0gdGRhNzQzMl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdGRhNzQzMl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCmluZGV4IDFjMzkxZjAuLjI2NDRlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogI2luY2x1ZGUgInRkYTk4NDAuaCIKIApAQCAtNjIsODUgKzYyLDg5IEBACiAvKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyB2b2lkIHRkYTk4NDBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgdm9pZCB0ZGE5ODQwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlcnJvciB3cml0aW5nICUwMnggdG8gJTAyeFxuIiwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZXJyb3Igd3JpdGluZyAlMDJ4IHRvICUwMnhcbiIsCiAJCQkJdmFsLCByZWcpOwogfQogCi1zdGF0aWMgaW50IHRkYTk4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdGRhOTg0MF9zX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQogewotCWludCBieXRlID0gKihpbnQgKilhcmc7CisJaW50IGJ5dGU7CisKKwlpZiAodC0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICh0LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlieXRlID0gVERBOTg0MF9TRVRfU1RFUkVPOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKKwkJYnl0ZSA9IFREQTk4NDBfU0VUX0JPVEg7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzE7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJ5dGUgPSBUREE5ODQwX1NFVF9NT05POworCQlicmVhazsKKwl9CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVERBOTg0MF9TV0lUQ0g6IDB4JTAyeFxuIiwgYnl0ZSk7CisJdGRhOTg0MF93cml0ZShzZCwgU1dJVENILCBieXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGE5ODQwX2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ5dGU7CisKKwl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmYnl0ZSwgMSkpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJImkyY19tYXN0ZXJfcmVjdigpIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChieXRlICYgMHg4MCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkiVERBOTg0MF9ERVRFQ1Q6IHJlZ2lzdGVyIGNvbnRlbnRzIGludmFsaWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX0RFVEVDVDogYnl0ZTogMHglMDJ4XG4iLCBieXRlKTsKKworCXN3aXRjaCAoYnl0ZSAmIDB4NjApIHsKKwljYXNlIDB4MDA6CisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQlicmVhazsKKwljYXNlIDB4MjA6CisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQlicmVhazsKKwljYXNlIDB4NDA6CisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBJbmNvcnJlY3QgZGV0ZWN0ICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTk4NDBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJaW50IGJ5dGU7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1NfVFVORVI6IHsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCWludCBieXRlOwotCi0JCWlmICh0LT5pbmRleCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXN3aXRjaCAodC0+YXVkbW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQlieXRlID0gVERBOTg0MF9TRVRfU1RFUkVPOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCQkJYnl0ZSA9IFREQTk4NDBfU0VUX0JPVEg7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzE7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJ5dGUgPSBUREE5ODQwX1NFVF9NT05POwotCQkJYnJlYWs7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVERBOTg0MF9TV0lUQ0g6IDB4JTAyeFxuIiwgYnl0ZSk7Ci0JCXRkYTk4NDBfd3JpdGUoY2xpZW50LCBTV0lUQ0gsIGJ5dGUpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX1RVTkVSOiB7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQl1OCBieXRlOwotCi0JCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmYnl0ZSwgMSkpIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaTJjX21hc3Rlcl9yZWN2KCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKGJ5dGUgJiAweDgwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkJIlREQTk4NDBfREVURUNUOiByZWdpc3RlciBjb250ZW50cyBpbnZhbGlkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVERBOTg0MF9ERVRFQ1Q6IGJ5dGU6IDB4JTAyeFxuIiwgYnl0ZSk7Ci0KLQkJc3dpdGNoIChieXRlICYgMHg2MCkgewotCQljYXNlIDB4MDA6Ci0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCWJyZWFrOwotCQljYXNlIDB4MjA6Ci0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDA6Ci0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiBJbmNvcnJlY3QgZGV0ZWN0ICovCi0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KIAljYXNlIFREQTk4NDBfTEVWRUxfQURKVVNUOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUREE5ODQwX0xFVkVMX0FESlVTVDogJWRcbiIsIGJ5dGUpOworCQlieXRlID0gKihpbnQgKilhcmc7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlREQTk4NDBfTEVWRUxfQURKVVNUOiAlZFxuIiwgYnl0ZSk7CiAKIAkJLyogY2hlY2sgZm9yIGNvcnJlY3QgcmFuZ2UgKi8KIAkJaWYgKGJ5dGUgPiAyNSB8fCBieXRlIDwgLTIwKQpAQCAtMTUyLDExICsxNTYsMTIgQEAKIAkJCWJ5dGUgKz0gMHg4OwogCQllbHNlCiAJCQlieXRlID0gLWJ5dGU7Ci0JCXRkYTk4NDBfd3JpdGUoY2xpZW50LCBMRVZFTF9BREpVU1QsIGJ5dGUpOworCQl0ZGE5ODQwX3dyaXRlKHNkLCBMRVZFTF9BREpVU1QsIGJ5dGUpOwogCQlicmVhazsKIAogCWNhc2UgVERBOTg0MF9TVEVSRU9fQURKVVNUOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUREE5ODQwX1NURVJFT19BREpVU1Q6ICVkXG4iLCBieXRlKTsKKwkJYnl0ZSA9ICooaW50ICopYXJnOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX1NURVJFT19BREpVU1Q6ICVkXG4iLCBieXRlKTsKIAogCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwogCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjQpCkBAIC0xNjksMTggKzE3NCw0MSBAQAogCQllbHNlCiAJCQlieXRlID0gLWJ5dGU7CiAKLQkJdGRhOTg0MF93cml0ZShjbGllbnQsIFNURVJFT19BREpVU1QsIGJ5dGUpOworCQl0ZGE5ODQwX3dyaXRlKHNkLCBTVEVSRU9fQURKVVNULCBieXRlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0ZGE5ODQwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE5ODQwX2NvcmVfb3BzID0geworCS5pb2N0bCA9IHRkYTk4NDBfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyB0ZGE5ODQwX3R1bmVyX29wcyA9IHsKKwkuc190dW5lciA9IHRkYTk4NDBfc190dW5lciwKKwkuZ190dW5lciA9IHRkYTk4NDBfZ190dW5lciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRkYTk4NDBfb3BzID0geworCS5jb3JlID0gJnRkYTk4NDBfY29yZV9vcHMsCisJLnR1bmVyID0gJnRkYTk4NDBfdHVuZXJfb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIGludCB0ZGE5ODQwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCByZXN1bHQ7CiAJaW50IGJ5dGU7CiAKQEAgLTE4OCwyMyArMjE2LDM4IEBACiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCiAJCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8CiAJCQlJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU87CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCWlmIChzZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGRhOTg0MF9vcHMpOworCiAJLyogc2V0IGluaXRpYWwgdmFsdWVzIGZvciBsZXZlbCAmIHN0ZXJlbyAtIGFkanVzdG1lbnQsIG1vZGUgKi8KIAlieXRlID0gMDsKLQlyZXN1bHQgPSB0ZGE5ODQwX2NvbW1hbmQoY2xpZW50LCBUREE5ODQwX0xFVkVMX0FESlVTVCwgJmJ5dGUpOwotCXJlc3VsdCArPSB0ZGE5ODQwX2NvbW1hbmQoY2xpZW50LCBUREE5ODQwX1NURVJFT19BREpVU1QsICZieXRlKTsKLQl0ZGE5ODQwX3dyaXRlKGNsaWVudCwgU1dJVENILCBUREE5ODQwX1NFVF9TVEVSRU8pOworCXJlc3VsdCA9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfTEVWRUxfQURKVVNULCAmYnl0ZSk7CisJcmVzdWx0IHw9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfU1RFUkVPX0FESlVTVCwgJmJ5dGUpOworCXRkYTk4NDBfd3JpdGUoc2QsIFNXSVRDSCwgVERBOTg0MF9TRVRfU1RFUkVPKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNvdWxkIG5vdCBpbml0aWFsaXplIHRkYTk4NDBcbiIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZGE5ODQwXG4iKTsKKwkJa2ZyZWUoc2QpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGRhOTg0MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUoc2QpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHRkYTk4NDBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgpAQCAtMjIyLDYgKzI2NSw3IEBACiAJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTk4NDAsCiAJLmNvbW1hbmQgPSB0ZGE5ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gdGRhOTg0MF9wcm9iZSwKKwkucmVtb3ZlID0gdGRhOTg0MF9yZW1vdmUsCiAJLmxlZ2FjeV9wcm9iZSA9IHRkYTk4NDBfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRkYTk4NDBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwppbmRleCA3OTJmMGIwLi41NmYwYzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwpAQCAtMjUsMTEgKzI1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KQEAgLTQ2LDEzICs0NSwxNSBAQAogCiAvKiBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFREQTk4NzUgKi8KIHN0cnVjdCB0ZGE5ODc1IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJaW50IHJ2b2wsIGx2b2w7CiAJaW50IGJhc3MsIHRyZWJsZTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0ZGE5ODc1ICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB0ZGE5ODc1LCBzZCk7Cit9CiAKICNkZWZpbmUgZHByaW50ayAgaWYgKGRlYnVnKSBwcmludGsKIApAQCAtMTA1LDE1ICsxMDYsMTYgQEAKIAogLyogQmVnaW4gY29kZSAqLwogCi1zdGF0aWMgaW50IHRkYTk4NzVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHN1YmFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsKQorc3RhdGljIGludCB0ZGE5ODc1X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBzdWJhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0JZHByaW50aygiSW4gdGRhOTg3NV93cml0ZVxuIik7Ci0JZHByaW50aygiV3JpdGluZyAlZCAweCV4XG4iLCBzdWJhZGRyLCB2YWwpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiV3JpdGluZyAlZCAweCV4XG4iLCBzdWJhZGRyLCB2YWwpOwogCWJ1ZmZlclswXSA9IHN1YmFkZHI7CiAJYnVmZmVyWzFdID0gdmFsOwotCWlmICgyICE9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmZmVyLDIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInRkYTk4NzU6IEkvTyBlcnJvciwgdHJ5aW5nICh3cml0ZSAlZCAweCV4KVxuIiwKKwlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDIpKSB7CisJCXY0bDJfd2FybihzZCwgIkkvTyBlcnJvciwgdHJ5aW5nICh3cml0ZSAlZCAweCV4KVxuIiwKIAkJICAgICAgIHN1YmFkZHIsIHZhbCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMjEsNyArMTIzLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGkyY19yZWFkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCByZWcpCitzdGF0aWMgaW50IGkyY19yZWFkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyLCBpbnQgcmVnKQogewogCXVuc2lnbmVkIGNoYXIgd3JpdGVbMV07CiAJdW5zaWduZWQgY2hhciByZWFkWzFdOwpAQCAtMTI5LDE1MCArMTMxLDgzIEBACiAJCXsgYWRkciwgMCwgICAgICAgIDEsIHdyaXRlIH0sCiAJCXsgYWRkciwgSTJDX01fUkQsIDEsIHJlYWQgIH0KIAl9OworCiAJd3JpdGVbMF0gPSByZWc7CiAKLQlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoYWRhcCxtc2dzLDIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInRkYTk4NzU6IEkvTyBlcnJvciAocmVhZDIpXG4iKTsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKSkgeworCQl2NGxfd2FybihjbGllbnQsICJJL08gZXJyb3IgKHJlYWQyKVxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JZHByaW50aygidGRhOTg3NTogY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIixyZWcscmVhZFswXSk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIiwgcmVnLCByZWFkWzBdKTsKIAlyZXR1cm4gcmVhZFswXTsKIH0KIAotc3RhdGljIHZvaWQgdGRhOTg3NV9zZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIHRkYTk4NzVfc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHRkYTk4NzUgKnRkYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0ZGE5ODc1ICp0ZGEgPSB0b19zdGF0ZShzZCk7CiAJdW5zaWduZWQgY2hhciBhOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICJ0ZGE5ODc1X3NldCglMDR4LCUwNHgsJTA0eCwlMDR4KVxuIiwKLQkJdGRhLT5sdm9sLHRkYS0+cnZvbCx0ZGEtPmJhc3MsdGRhLT50cmVibGUpOwotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3NV9zZXQoJTA0eCwlMDR4LCUwNHgsJTA0eClcbiIsCisJCXRkYS0+bHZvbCwgdGRhLT5ydm9sLCB0ZGEtPmJhc3MsIHRkYS0+dHJlYmxlKTsKIAogCWEgPSB0ZGEtPmx2b2wgJiAweGZmOwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X01WTCwgYSk7CisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9NVkwsIGEpOwogCWEgPXRkYS0+cnZvbCAmIDB4ZmY7Ci0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTVZSLCBhKTsKKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01WUiwgYSk7CiAJYSA9dGRhLT5iYXNzICYgMHhmZjsKLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NQkEsIGEpOworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTUJBLCBhKTsKIAlhID10ZGEtPnRyZWJsZSAgJiAweGZmOwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X01UUiwgYSk7CisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9NVFIsIGEpOwogfQogCi1zdGF0aWMgdm9pZCBkb190ZGE5ODc1X2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGRvX3RkYTk4NzVfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCB0ZGE5ODc1ICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JZHByaW50aygiSW4gdGRhOTg3NV9pbml0XG4iKTsKLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9DRkcsIDB4ZDAgKTsgLypyZWcgZGUgY29uZmlnIDAgKHJlc2V0KSovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTVNSLCAweDAzICk7ICAgIC8qIE1vbml0b3IgMGIwMDAwMFhYWCovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQzFNU0IsIDB4MDAgKTsgIC8qQ2FyMShGTSkgTVNCIFhNSHoqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0MxTUlCLCAweDAwICk7ICAvKkNhcjEoRk0pIE1JQiBYTUh6Ki8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9DMUxTQiwgMHgwMCApOyAgLypDYXIxKEZNKSBMU0IgWE1IeiovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQzJNU0IsIDB4MDAgKTsgIC8qQ2FyMihOSUNBTSkgTVNCIFhNSHoqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0MyTUlCLCAweDAwICk7ICAvKkNhcjIoTklDQU0pIE1JQiBYTUh6Ki8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9DMkxTQiwgMHgwMCApOyAgLypDYXIyKE5JQ0FNKSBMU0IgWE1IeiovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfRENSLCAweDAwICk7ICAgIC8qRGVtb2QgY29uZmlnIDB4MDAqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0RFRU0sIDB4NDQgKTsgICAvKkRFLUVtcGggMGIwMTAwIDAxMDAqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0ZNQVQsIDB4MDAgKTsgICAvKkZNIE1hdHJpeCByZWcgMHgwMCovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfU0MxLCAweDAwICk7ICAgIC8qIFNDQVJUIDEgKFNDMSkqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X1NDMiwgMHgwMSApOyAgICAvKiBTQ0FSVCAyIChzYzIpKi8KKwlzdHJ1Y3QgdGRhOTg3NSAqdCA9IHRvX3N0YXRlKHNkKTsKIAotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0NIMVYsIDB4MTAgKTsgIC8qIENoYW5uZWwgdm9sdW1lIDEgbXV0ZSovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQ0gyViwgMHgxMCApOyAgLyogQ2hhbm5lbCB2b2x1bWUgMiBtdXRlICovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfREFDT1MsIDB4MDIgKTsgLyogc2lnIERBQyBpL28oaW46bmljYW0pKi8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BRENJUywgMHg2ZiApOyAvKiBzaWcgQURDIGlucHV0KGluOm1vbm8pKi8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9MT1NSLCAweDAwICk7ICAvKiBsaW5lIG91dCAoaW46bW9ubykqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0FFUiwgMHgwMCApOyAgIC8qMDYgRWZmZWN0IChBVkwrUFNFVURPKSAqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X01DUywgMHg0NCApOyAgIC8qIE1haW4gY2ggc2VsZWN0IChEQUMpICovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTVZMLCAweDAzICk7ICAgLyogVm9sIE1haW4gbGVmdCAxMGRCICovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTVZSLCAweDAzICk7ICAgLyogVm9sIE1haW4gcmlnaHQgMTBkQiovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTUJBLCAweDAwICk7ICAgLyogTWFpbiBCYXNzIE1haW4gMGRCKi8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NVFIsIDB4MDAgKTsgICAvKiBNYWluIFRyZWJsZSBNYWluIDBkQiovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQUNTLCAweDQ0ICk7ICAgLyogQXV4IGNoYW4gc2VsZWN0IChkYWMpKi8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BVkwsIDB4MDAgKTsgICAvKiBWb2wgQXV4IGxlZnQgMGRCKi8KLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9BVlIsIDB4MDAgKTsgICAvKiBWb2wgQXV4IHJpZ2h0IDBkQiovCi0JdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQUJBLCAweDAwICk7ICAgLyogQXV4IEJhc3MgTWFpbiAwZEIqLwotCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0FUUiwgMHgwMCApOyAgIC8qIEF1eCBBaWd1cyBNYWluIDBkQiovCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiSW4gdGRhOTg3NV9pbml0XG4iKTsKKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0NGRywgMHhkMCk7IC8qcmVnIGRlIGNvbmZpZyAwIChyZXNldCkqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTVNSLCAweDAzKTsgICAgLyogTW9uaXRvciAwYjAwMDAwWFhYKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0MxTVNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTVNCIFhNSHoqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQzFNSUIsIDB4MDApOyAgLypDYXIxKEZNKSBNSUIgWE1IeiovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DMUxTQiwgMHgwMCk7ICAvKkNhcjEoRk0pIExTQiBYTUh6Ki8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0MyTVNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTVNCIFhNSHoqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQzJNSUIsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBNSUIgWE1IeiovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DMkxTQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIExTQiBYTUh6Ki8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0RDUiwgMHgwMCk7ICAgIC8qRGVtb2QgY29uZmlnIDB4MDAqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfREVFTSwgMHg0NCk7ICAgLypERS1FbXBoIDBiMDEwMCAwMTAwKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0ZNQVQsIDB4MDApOyAgIC8qRk0gTWF0cml4IHJlZyAweDAwKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X1NDMSwgMHgwMCk7ICAgIC8qIFNDQVJUIDEgKFNDMSkqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfU0MyLCAweDAxKTsgICAgLyogU0NBUlQgMiAoc2MyKSovCiAKLQl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NVVQsIDB4Y2MgKTsgICAvKiBHZW5lcmFsIG11dGUgICovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DSDFWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDEgbXV0ZSovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9DSDJWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDIgbXV0ZSAqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfREFDT1MsIDB4MDIpOyAvKiBzaWcgREFDIGkvbyhpbjpuaWNhbSkqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQURDSVMsIDB4NmYpOyAvKiBzaWcgQURDIGlucHV0KGluOm1vbm8pKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0xPU1IsIDB4MDApOyAgLyogbGluZSBvdXQgKGluOm1vbm8pKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0FFUiwgMHgwMCk7ICAgLyowNiBFZmZlY3QgKEFWTCtQU0VVRE8pICovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9NQ1MsIDB4NDQpOyAgIC8qIE1haW4gY2ggc2VsZWN0IChEQUMpICovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9NVkwsIDB4MDMpOyAgIC8qIFZvbCBNYWluIGxlZnQgMTBkQiAqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfTVZSLCAweDAzKTsgICAvKiBWb2wgTWFpbiByaWdodCAxMGRCKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01CQSwgMHgwMCk7ICAgLyogTWFpbiBCYXNzIE1haW4gMGRCKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01UUiwgMHgwMCk7ICAgLyogTWFpbiBUcmVibGUgTWFpbiAwZEIqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQUNTLCAweDQ0KTsgICAvKiBBdXggY2hhbiBzZWxlY3QgKGRhYykqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQVZMLCAweDAwKTsgICAvKiBWb2wgQXV4IGxlZnQgMGRCKi8KKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X0FWUiwgMHgwMCk7ICAgLyogVm9sIEF1eCByaWdodCAwZEIqLworCXRkYTk4NzVfd3JpdGUoc2QsIFREQTk4NzVfQUJBLCAweDAwKTsgICAvKiBBdXggQmFzcyBNYWluIDBkQiovCisJdGRhOTg3NV93cml0ZShzZCwgVERBOTg3NV9BVFIsIDB4MDApOyAgIC8qIEF1eCBBaWd1cyBNYWluIDBkQiovCiAKLQl0LT5sdm9sPXQtPnJ2b2wgPTA7ICAJLyogMGRCICovCi0JdC0+YmFzcz0wOyAJCQkvKiAwZEIgKi8KLQl0LT50cmVibGU9MDsgIAkJLyogMGRCICovCi0JdGRhOTg3NV9zZXQoY2xpZW50KTsKKwl0ZGE5ODc1X3dyaXRlKHNkLCBUREE5ODc1X01VVCwgMHhjYyk7ICAgLyogR2VuZXJhbCBtdXRlICAqLwogCisJdC0+bHZvbCA9IHQtPnJ2b2wgPSAwOyAgCS8qIDBkQiAqLworCXQtPmJhc3MgPSAwOyAJCQkvKiAwZEIgKi8KKwl0LT50cmVibGUgPSAwOyAgCQkvKiAwZEIgKi8KKwl0ZGE5ODc1X3NldChzZCk7CiB9CiAKIAotLyogKioqKioqKioqKioqKioqKioqKioqKiogKgotICogaTJjIGludGVyZmFjZSBmdW5jdGlvbnMgKgotICogKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotc3RhdGljIGludCB0ZGE5ODc1X2NoZWNraXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgdGRhOTg3NV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlpbnQgZGljLHJldjsKLQotCWRpYz1pMmNfcmVhZF9yZWdpc3RlcihhZGFwLGFkZHIsMjU0KTsKLQlyZXY9aTJjX3JlYWRfcmVnaXN0ZXIoYWRhcCxhZGRyLDI1NSk7Ci0KLQlpZihkaWM9PTAgfHwgZGljPT0yKSB7IC8vIHRkYTk4NzUgYW5kIHRkYTk4NzVBCi0JCXByaW50aygidGRhOTg3NTogVERBOTg3NSVzIFJldi4lZCBkZXRlY3RlZCBhdCAweCV4XG4iLAotCQlkaWM9PTA/IiI6IkEiLCByZXYsYWRkcjw8MSk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoInRkYTk4NzU6IG5vIHN1Y2ggY2hpcCBhdCAweCV4IChkaWM9MHgleCByZXY9MHgleClcbiIsYWRkcjw8MSxkaWMscmV2KTsKLQlyZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQgdGRhOTg3NV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0Jc3RydWN0IHRkYTk4NzUgKnQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlkcHJpbnRrKCJJbiB0ZGE5ODc1X2F0dGFjaFxuIik7Ci0KLQl0ID0ga3phbGxvYyhzaXplb2YgKnQsR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNsaWVudCA9ICZ0LT5jOwotCW1lbWNweShjbGllbnQsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdCk7Ci0KLQlpZighdGRhOTg3NV9jaGVja2l0KGFkYXAsYWRkcikpIHsKLQkJa2ZyZWUodCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWRvX3RkYTk4NzVfaW5pdChjbGllbnQpOwotCXByaW50ayhLRVJOX0lORk8gInRkYTk4NzU6IGluaXRcbiIpOwotCi0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODc1X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHRkYTk4NzVfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODc1X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB0ZGE5ODc1ICp0ICA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZG9fdGRhOTg3NV9pbml0KGNsaWVudCk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQotCWtmcmVlKHQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRkYTk4NzVfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCB0ZGE5ODc1ICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHRkYTk4NzUgKnQgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CkBAIC0zMDQsMTAgKzIzOSw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdGRhOTg3NV9zZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHRkYTk4NzVfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHRkYTk4NzUgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdGRhOTg3NSAqdCA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgY2h2b2w9MCwgdm9sdW1lLCBiYWxhbmNlLCBsZWZ0LCByaWdodDsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTM3MSw4NSArMzA1LDEwNSBAQAogCQkJdC0+cnZvbCA9IC04NCAmIDB4ZmY7CiAJfQogCi0vL3ByaW50aygidGRhOTg3NSBiYWw6JTA0eCB2b2w6JTA0eCBiYXNzOiUwNHggdHJlYmxlOiUwNHhcbiIsdmEtPmJhbGFuY2UsdmEtPnZvbHVtZSx2YS0+YmFzcyx2YS0+dHJlYmxlKTsKLQotCXRkYTk4NzVfc2V0KGNsaWVudCk7Ci0KKwl0ZGE5ODc1X3NldChzZCk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCB0ZGE5ODc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRkYTk4NzVfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JZHByaW50aygiSW4gdGRhOTg3NV9jb21tYW5kLi4uXG4iKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCi0JLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCi0JICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0KLQkJc3dpdGNoIChxYy0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwogCX0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiB0ZGE5ODc1X3NldF9jdHJsKGNsaWVudCwgYXJnKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIHRkYTk4NzVfZ2V0X2N0cmwoY2xpZW50LCBhcmcpOworc3RhdGljIGludCB0ZGE5ODc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KIAotCWRlZmF1bHQ6IC8qIE5vdCBWSURFT0NHQVVESU8gb3IgVklERU9DU0FVRElPICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JCS8qIG5vdGhpbmcgKi8KLQkJZHByaW50aygiRGVmYXVsdFxuIik7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRkYTk4NzVfY29yZV9vcHMgPSB7CisJLnF1ZXJ5Y3RybCA9IHRkYTk4NzVfcXVlcnljdHJsLAorCS5nX2N0cmwgPSB0ZGE5ODc1X2dfY3RybCwKKwkuc19jdHJsID0gdGRhOTg3NV9zX2N0cmwsCit9OwogCi0JfSAvKiBlbmQgb2YgKGNtZCkgc3dpdGNoICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0ZGE5ODc1X29wcyA9IHsKKwkuY29yZSA9ICZ0ZGE5ODc1X2NvcmVfb3BzLAorfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKiAqCisgKiBpMmMgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdGF0aWMgaW50IHRkYTk4NzVfY2hlY2tpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYWRkcikKK3sKKwlpbnQgZGljLCByZXY7CisKKwlkaWMgPSBpMmNfcmVhZF9yZWdpc3RlcihjbGllbnQsIGFkZHIsIDI1NCk7CisJcmV2ID0gaTJjX3JlYWRfcmVnaXN0ZXIoY2xpZW50LCBhZGRyLCAyNTUpOworCisJaWYgKGRpYyA9PSAwIHx8IGRpYyA9PSAyKSB7IC8qIHRkYTk4NzUgYW5kIHRkYTk4NzVBICovCisJCXY0bF9pbmZvKGNsaWVudCwgInRkYTk4NzUlcyByZXYuICVkIGRldGVjdGVkIGF0IDB4JTAyeFxuIiwKKwkJCWRpYyA9PSAwID8gIiIgOiAiQSIsIHJldiwgYWRkciA8PCAxKTsKKwkJcmV0dXJuIDE7CisJfQorCXY0bF9pbmZvKGNsaWVudCwgIm5vIHN1Y2ggY2hpcCBhdCAweCUwMnggKGRpYz0weCV4IHJldj0weCV4KVxuIiwKKwkJCWFkZHIgPDwgMSwgZGljLCByZXYpOwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgICA9ICJ0ZGE5ODc1IiwKLQl9LAotCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAotCS5hdHRhY2hfYWRhcHRlciA9IHRkYTk4NzVfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgID0gdGRhOTg3NV9kZXRhY2gsCi0JLmNvbW1hbmQgICAgICAgID0gdGRhOTg3NV9jb21tYW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CitzdGF0aWMgaW50IHRkYTk4NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQkubmFtZSAgICAgID0gInRkYTk4NzUiLAotCS5kcml2ZXIgICAgPSAmZHJpdmVyLAotfTsKKwlzdHJ1Y3QgdGRhOTg3NSAqdDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi1zdGF0aWMgaW50IF9faW5pdCB0ZGE5ODc1X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlpZiAoIXRkYTk4NzVfY2hlY2tpdChjbGllbnQsIGNsaWVudC0+YWRkcikpCisJCXJldHVybiAtRU5PREVWOworCisJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZ0LT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGRhOTg3NV9vcHMpOworCisJZG9fdGRhOTg3NV9pbml0KHNkKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHRkYTk4NzVfZmluaSh2b2lkKQorc3RhdGljIGludCB0ZGE5ODc1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRvX3RkYTk4NzVfaW5pdChzZCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KHRkYTk4NzVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0ZGE5ODc1X2ZpbmkpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRkYTk4NzVfaWRbXSA9IHsKKwl7ICJ0ZGE5ODc1IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0ZGE5ODc1X2lkKTsKIAotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KLQorc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInRkYTk4NzUiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAorCS5jb21tYW5kID0gdGRhOTg3NV9jb21tYW5kLAorCS5wcm9iZSA9IHRkYTk4NzVfcHJvYmUsCisJLnJlbW92ZSA9IHRkYTk4NzVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHRkYTk4NzVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IGNkZTA5MmEuLjMxZGRlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKIApAQCAtMTIyLDMxICsxMjIsNTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHRlYTY0MTVjX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCWlmIChjbWQgPT0gVEVBNjQxNUNfU1dJVENIKSB7CisJCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwkJc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCAqdiA9IChzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4ICopYXJnOworCisJCXJldHVybiBzd2l0Y2hfbWF0cml4KGNsaWVudCwgdi0+aW4sIHYtPm91dCk7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBpbnQgdGVhNjQxNWNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4ICp2ID0gKHN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKilhcmc7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVEVBNjQxNUNfU1dJVENIOgotCQlyZXN1bHQgPSBzd2l0Y2hfbWF0cml4KGNsaWVudCwgdi0+aW4sIHYtPm91dCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZWE2NDE1Y19jb3JlX29wcyA9IHsKKwkuaW9jdGwgPSB0ZWE2NDE1Y19pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRlYTY0MTVjX29wcyA9IHsKKwkuY29yZSA9ICZ0ZWE2NDE1Y19jb3JlX29wcywKK307CisKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwogc3RhdGljIGludCB0ZWE2NDE1Y19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwogCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCiAJCXJldHVybiAwOwogCiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZWE2NDE1Y19vcHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlYTY0MTVjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZShzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2OCw2ICsxOTQsNyBAQAogCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKIAkuY29tbWFuZCA9IHRlYTY0MTVjX2NvbW1hbmQsCiAJLnByb2JlID0gdGVhNjQxNWNfcHJvYmUsCisJLnJlbW92ZSA9IHRlYTY0MTVjX3JlbW92ZSwKIAkubGVnYWN5X3Byb2JlID0gdGVhNjQxNWNfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRlYTY0MTVjX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKaW5kZXggZTUwODIwOS4uMzhlNTE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAjaW5jbHVkZSAidGVhNjQyMC5oIgogCkBAIC05MCwyNiArOTAsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0ZWE2NDIwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCWlmIChjbWQgPT0gVEVBNjQyMF9TV0lUQ0gpIHsKKwkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCQlzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKmEgPSAoc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4ICopYXJnOworCisJCXJldHVybiB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIGEtPmluLCBhLT5vdXQsIGEtPmdhaW4pOworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IHRlYTY0MjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKmEgPSAoc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4ICopYXJnOwotCWludCByZXN1bHQgPSAwOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRFQTY0MjBfU1dJVENIOgotCQlyZXN1bHQgPSB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIGEtPmluLCBhLT5vdXQsIGEtPmdhaW4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZWE2NDIwX2NvcmVfb3BzID0geworCS5pb2N0bCA9IHRlYTY0MjBfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0ZWE2NDIwX29wcyA9IHsKKwkuY29yZSA9ICZ0ZWE2NDIwX2NvcmVfb3BzLAorfTsKKwogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCiBzdGF0aWMgaW50IHRlYTY0MjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJaW50IGVyciwgaTsKIAogCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KQEAgLTEyNiw5ICsxMzcsMjIgQEAKIAl9CiAJaWYgKGVycikgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZWE2NDIwXG4iKTsKLQkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRlYTY0MjBfb3BzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWE2NDIwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZShzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MCw2ICsxNzQsNyBAQAogCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDIwLAogCS5jb21tYW5kID0gdGVhNjQyMF9jb21tYW5kLAogCS5wcm9iZSA9IHRlYTY0MjBfcHJvYmUsCisJLnJlbW92ZSA9IHRlYTY0MjBfcmVtb3ZlLAogCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDIwX2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSB0ZWE2NDIwX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCmluZGV4IDI4MTA2NWIuLjVjOTVlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigidGx2MzIwYWljMjNiIGRyaXZlciIpOwpAQCAtNDQsMTUgKzQ0LDIyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdGx2MzIwYWljMjNiX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdTggbXV0ZWQ7CiB9OwogCi1zdGF0aWMgaW50IHRsdjMyMGFpYzIzYl93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCB1MTYgdmFsKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGx2MzIwYWljMjNiX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB0bHYzMjBhaWMyM2Jfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM2Jfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IGk7CiAKIAlpZiAoKHJlZyA8IDAgfHwgcmVnID4gOSkgJiYgKHJlZyAhPSAxNSkpIHsKLQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKKwkJdjRsMl9lcnIoc2QsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNjAsNjEgKzY3LDgyIEBACiAJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkocmVnIDw8IDEpIHwgKHZhbCA+PiA4KSwgdmFsICYgMHhmZikgPT0gMCkKIAkJCXJldHVybiAwOwotCXY0bF9lcnIoY2xpZW50LCAiSTJDOiBjYW5ub3Qgd3JpdGUgJTAzeCB0byByZWdpc3RlciBSJWRcbiIsIHZhbCwgcmVnKTsKKwl2NGwyX2VycihzZCwgIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHRsdjMyMGFpYzIzYl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0bHYzMjBhaWMyM2Jfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQogewotCXN0cnVjdCB0bHYzMjBhaWMyM2Jfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQl1MzIgKmZyZXEgPSBhcmc7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlzd2l0Y2ggKCpmcmVxKSB7Ci0JCWNhc2UgMzIwMDA6IC8qIHNldCBzYW1wbGUgcmF0ZSB0byAzMiBrSHogKi8KLQkJCXRsdjMyMGFpYzIzYl93cml0ZShjbGllbnQsIDgsIDB4MDE4KTsKLQkJCWJyZWFrOwotCQljYXNlIDQ0MTAwOiAvKiBzZXQgc2FtcGxlIHJhdGUgdG8gNDQuMSBrSHogKi8KLQkJCXRsdjMyMGFpYzIzYl93cml0ZShjbGllbnQsIDgsIDB4MDIyKTsKLQkJCWJyZWFrOwotCQljYXNlIDQ4MDAwOiAvKiBzZXQgc2FtcGxlIHJhdGUgdG8gNDgga0h6ICovCi0JCQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCA4LCAweDAwMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAzMjAwMDogLyogc2V0IHNhbXBsZSByYXRlIHRvIDMyIGtIeiAqLworCQl0bHYzMjBhaWMyM2Jfd3JpdGUoc2QsIDgsIDB4MDE4KTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPm11dGVkOworCWNhc2UgNDQxMDA6IC8qIHNldCBzYW1wbGUgcmF0ZSB0byA0NC4xIGtIeiAqLworCQl0bHYzMjBhaWMyM2Jfd3JpdGUoc2QsIDgsIDB4MDIyKTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN0YXRlLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCAwLCAweDE4MCk7IC8qIG11dGUgYm90aCBjaGFubmVscyAqLwotCQkvKiBzZXQgZ2FpbiBvbiBib3RoIGNoYW5uZWxzIHRvICszLjAgZEIgKi8KLQkJaWYgKCFzdGF0ZS0+bXV0ZWQpCi0JCQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCAwLCAweDExOSk7CisJY2FzZSA0ODAwMDogLyogc2V0IHNhbXBsZSByYXRlIHRvIDQ4IGtIeiAqLworCQl0bHYzMjBhaWMyM2Jfd3JpdGUoc2QsIDgsIDB4MDAwKTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQl2NGxfaW5mbyhjbGllbnQsICJJbnB1dDogJXNcbiIsCi0JCQkgICAgc3RhdGUtPm11dGVkID8gIm11dGVkIiA6ICJhY3RpdmUiKTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNiX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0bHYzMjBhaWMyM2Jfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCisJCXJldHVybiAtRUlOVkFMOworCWN0cmwtPnZhbHVlID0gc3RhdGUtPm11dGVkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzYl9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGx2MzIwYWljMjNiX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0ZS0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwl0bHYzMjBhaWMyM2Jfd3JpdGUoc2QsIDAsIDB4MTgwKTsgLyogbXV0ZSBib3RoIGNoYW5uZWxzICovCisJLyogc2V0IGdhaW4gb24gYm90aCBjaGFubmVscyB0byArMy4wIGRCICovCisJaWYgKCFzdGF0ZS0+bXV0ZWQpCisJCXRsdjMyMGFpYzIzYl93cml0ZShzZCwgMCwgMHgxMTkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzYl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHRsdjMyMGFpYzIzYl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2luZm8oc2QsICJJbnB1dDogJXNcbiIsIHN0YXRlLT5tdXRlZCA/ICJtdXRlZCIgOiAiYWN0aXZlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNiX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0bHYzMjBhaWMyM2JfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSB0bHYzMjBhaWMyM2JfbG9nX3N0YXR1cywKKwkuZ19jdHJsID0gdGx2MzIwYWljMjNiX2dfY3RybCwKKwkuc19jdHJsID0gdGx2MzIwYWljMjNiX3NfY3RybCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIHRsdjMyMGFpYzIzYl9hdWRpb19vcHMgPSB7CisJLnNfY2xvY2tfZnJlcSA9IHRsdjMyMGFpYzIzYl9zX2Nsb2NrX2ZyZXEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0bHYzMjBhaWMyM2Jfb3BzID0geworCS5jb3JlID0gJnRsdjMyMGFpYzIzYl9jb3JlX29wcywKKwkuYXVkaW8gPSAmdGx2MzIwYWljMjNiX2F1ZGlvX29wcywKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLwpAQCAtMTI4LDYgKzE1Niw3IEBACiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHRsdjMyMGFpYzIzYl9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTEzNiwzMiArMTY1LDM2IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGx2MzIwYWljMjNiX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGx2MzIwYWljMjNiX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGx2MzIwYWljMjNiX29wcyk7CiAJc3RhdGUtPm11dGVkID0gMDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzdGF0ZSk7CiAKIAkvKiBJbml0aWFsaXplIHRsdjMyMGFpYzIzYiAqLwogCiAJLyogUkVTRVQgKi8KLQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCAxNSwgMHgwMDApOworCXRsdjMyMGFpYzIzYl93cml0ZShzZCwgMTUsIDB4MDAwKTsKIAkvKiB0dXJuIG9mZiBEQUMgJiBtaWMgaW5wdXQgKi8KLQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCA2LCAweDAwQSk7CisJdGx2MzIwYWljMjNiX3dyaXRlKHNkLCA2LCAweDAwQSk7CiAJLyogbGVmdC1qdXN0aWZpZWQsIDI0LWJpdCwgbWFzdGVyIG1vZGUgKi8KLQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCA3LCAweDA0OSk7CisJdGx2MzIwYWljMjNiX3dyaXRlKHNkLCA3LCAweDA0OSk7CiAJLyogc2V0IGdhaW4gb24gYm90aCBjaGFubmVscyB0byArMy4wIGRCICovCi0JdGx2MzIwYWljMjNiX3dyaXRlKGNsaWVudCwgMCwgMHgxMTkpOworCXRsdjMyMGFpYzIzYl93cml0ZShzZCwgMCwgMHgxMTkpOwogCS8qIHNldCBzYW1wbGUgcmF0ZSB0byA0OCBrSHogKi8KLQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCA4LCAweDAwMCk7CisJdGx2MzIwYWljMjNiX3dyaXRlKHNkLCA4LCAweDAwMCk7CiAJLyogYWN0aXZhdGUgZGlnaXRhbCBpbnRlcmZhY2UgKi8KLQl0bHYzMjBhaWMyM2Jfd3JpdGUoY2xpZW50LCA5LCAweDAwMSk7CisJdGx2MzIwYWljMjNiX3dyaXRlKHNkLCA5LCAweDAwMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGx2MzIwYWljMjNiX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCA0YTc3MzVjLi45N2Q3NTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci10eXBlcy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogI2luY2x1ZGUgIm10MjB4eC5oIgpAQCAtNzgsNiArNzgsNyBAQAogCS8qIGRldmljZSAqLwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZmU7CiAJc3RydWN0IGkyY19jbGllbnQgICAqaTJjOworCXN0cnVjdCB2NGwyX3N1YmRldiAgc2Q7CiAJc3RydWN0IGxpc3RfaGVhZCAgICBsaXN0OwogCXVuc2lnbmVkIGludCAgICAgICAgdXNpbmdfdjRsMjoxOwogCkBAIC05NSw2ICs5NiwxMSBAQAogCWNvbnN0IGNoYXIgICAgICAgICAgKm5hbWU7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dW5lciAqdG9fdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdHVuZXIsIHNkKTsKK30KKwogLyogc3RhbmRhcmQgaTJjIGluc21vZCBvcHRpb25zICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEpIHx8IChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpAQCAtMjEzLDcgKzIxOSw3IEBACiAKIHN0YXRpYyB2b2lkIHR1bmVyX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyB0dW5lcl9jb3JlX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyB0dW5lcl9hbmFsb2dfb3BzID0gewogCS5zZXRfcGFyYW1zICAgICA9IGZlX3NldF9wYXJhbXMsCiAJLnN0YW5kYnkgICAgICAgID0gZmVfc3RhbmRieSwKIAkuaGFzX3NpZ25hbCAgICAgPSBmZV9oYXNfc2lnbmFsLApAQCAtMjI0LDcgKzIzMCw3IEBACiAvKiBTZXQgdHVuZXIgZnJlcXVlbmN5LCAgZnJlcSBpbiBVbml0cyBvZiA2Mi41a0h6ID0gMS8xNk1IeiAqLwogc3RhdGljIHZvaWQgc2V0X3R2X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihpMmNfZ2V0X2NsaWVudGRhdGEoYykpOwogCXN0cnVjdCBhbmFsb2dfZGVtb2Rfb3BzICphbmFsb2dfb3BzID0gJnQtPmZlLm9wcy5hbmFsb2dfb3BzOwogCiAJc3RydWN0IGFuYWxvZ19wYXJhbWV0ZXJzIHBhcmFtcyA9IHsKQEAgLTI1OSw3ICsyNjUsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfcmFkaW9fZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGZyZXEpCiB7Ci0Jc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKGkyY19nZXRfY2xpZW50ZGF0YShjKSk7CiAJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CiAKIAlzdHJ1Y3QgYW5hbG9nX3BhcmFtZXRlcnMgcGFyYW1zID0gewpAQCAtMjk0LDcgKzMwMCw3IEBACiAKIHN0YXRpYyB2b2lkIHNldF9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7Ci0Jc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKGkyY19nZXRfY2xpZW50ZGF0YShjKSk7CiAKIAlzd2l0Y2ggKHQtPm1vZGUpIHsKIAljYXNlIFY0TDJfVFVORVJfUkFESU86CkBAIC0zNDcsNyArMzUzLDcgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgbmV3X21vZGVfbWFzaywgdW5zaWduZWQgaW50IG5ld19jb25maWcsCiAJCSAgICAgaW50ICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCBhcmcpKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihpMmNfZ2V0X2NsaWVudGRhdGEoYykpOwogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKIAlzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyAqYW5hbG9nX29wcyA9ICZ0LT5mZS5vcHMuYW5hbG9nX29wczsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKQEAgLTQ3MCw3ICs0NzYsNyBAQAogCQl0LT5uYW1lID0gZmVfdHVuZXJfb3BzLT5pbmZvLm5hbWU7CiAKIAkJdC0+ZmUuYW5hbG9nX2RlbW9kX3ByaXYgPSB0OwotCQltZW1jcHkoYW5hbG9nX29wcywgJnR1bmVyX2NvcmVfb3BzLAorCQltZW1jcHkoYW5hbG9nX29wcywgJnR1bmVyX2FuYWxvZ19vcHMsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMpKTsKIAogCX0gZWxzZSB7CkBAIC01MTUsNyArNTIxLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X2FkZHIoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB0dW5lcl9zZXR1cCAqdHVuX3NldHVwKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihpMmNfZ2V0X2NsaWVudGRhdGEoYykpOwogCiAJaWYgKCAodC0+dHlwZSA9PSBVTlNFVCAmJiAoKHR1bl9zZXR1cC0+YWRkciA9PSBBRERSX1VOU0VUKSAmJgogCQkodC0+bW9kZV9tYXNrICYgdHVuX3NldHVwLT5tb2RlX21hc2spKSkgfHwKQEAgLTcyNyw2ICs3MzMsOCBAQAogCXQtPm1vZGUgPSBtb2RlOwogCiAJaWYgKGNoZWNrX21vZGUodCwgY21kKSA9PSAtRUlOVkFMKSB7CisJCXR1bmVyX2RiZygiVHVuZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgbW9kZS4gIgorCQkJICAiUHV0dGluZyB0dW5lciB0byBzbGVlcFxuIik7CiAJCXQtPm1vZGUgPSBUX1NUQU5EQlk7CiAJCWlmIChhbmFsb2dfb3BzLT5zdGFuZGJ5KQogCQkJYW5hbG9nX29wcy0+c3RhbmRieSgmdC0+ZmUpOwpAQCAtNzQ4LDQzICs3NTYsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0dW5lcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdHVuZXJfc190eXBlX2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHR1bmVyX3NldHVwICp0eXBlKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJdHVuZXJfZGJnKCJDYWxsaW5nIHNldF90eXBlX2FkZHIgZm9yIHR5cGU9JWQsIGFkZHI9MHglMDJ4LCBtb2RlPTB4JTAyeCwgY29uZmlnPTB4JTAyeFxuIiwKKwkJCXR5cGUtPnR5cGUsCisJCQl0eXBlLT5hZGRyLAorCQkJdHlwZS0+bW9kZV9tYXNrLAorCQkJdHlwZS0+Y29uZmlnKTsKKworCXNldF9hZGRyKGNsaWVudCwgdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHVuZXJfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX1JBRElPLCAiQVVEQ19TRVRfUkFESU8iKQorCQkJPT0gLUVJTlZBTCkKKwkJcmV0dXJuIDA7CisJaWYgKHQtPnJhZGlvX2ZyZXEpCisJCXNldF9mcmVxKGNsaWVudCwgdC0+cmFkaW9fZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHVuZXJfc19zdGFuZGJ5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBzdGFuZGJ5KQoreworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyAqYW5hbG9nX29wcyA9ICZ0LT5mZS5vcHMuYW5hbG9nX29wczsKIAotCWlmICh0dW5lcl9kZWJ1ZyA+IDEpIHsKLQkJdjRsX2kyY19wcmludF9pb2N0bChjbGllbnQsY21kKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KKwl0dW5lcl9kYmcoIlB1dHRpbmcgdHVuZXIgdG8gc2xlZXBcbiIpOworCisJaWYgKGNoZWNrX21vZGUodCwgIlRVTkVSX1NFVF9TVEFOREJZIikgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIDA7CisJdC0+bW9kZSA9IFRfU1RBTkRCWTsKKwlpZiAoYW5hbG9nX29wcy0+c3RhbmRieSkKKwkJYW5hbG9nX29wcy0+c3RhbmRieSgmdC0+ZmUpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEKK3N0YXRpYyBpbnQgdHVuZXJfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwogCiAJc3dpdGNoIChjbWQpIHsKLQkvKiAtLS0gY29uZmlndXJhdGlvbiAtLS0gKi8KLQljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6Ci0JCXR1bmVyX2RiZyAoIkNhbGxpbmcgc2V0X3R5cGVfYWRkciBmb3IgdHlwZT0lZCwgYWRkcj0weCUwMngsIG1vZGU9MHglMDJ4LCBjb25maWc9MHglMDJ4XG4iLAotCQkJCSgoc3RydWN0IHR1bmVyX3NldHVwICopYXJnKS0+dHlwZSwKLQkJCQkoKHN0cnVjdCB0dW5lcl9zZXR1cCAqKWFyZyktPmFkZHIsCi0JCQkJKChzdHJ1Y3QgdHVuZXJfc2V0dXAgKilhcmcpLT5tb2RlX21hc2ssCi0JCQkJKChzdHJ1Y3QgdHVuZXJfc2V0dXAgKilhcmcpLT5jb25maWcpOwotCi0JCXNldF9hZGRyKGNsaWVudCwgKHN0cnVjdCB0dW5lcl9zZXR1cCAqKWFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJBVURDX1NFVF9SQURJTyIpCi0JCQkJPT0gLUVJTlZBTCkKLQkJCXJldHVybiAwOwotCQlpZiAodC0+cmFkaW9fZnJlcSkKLQkJCXNldF9mcmVxKGNsaWVudCwgdC0+cmFkaW9fZnJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgVFVORVJfU0VUX1NUQU5EQlk6Ci0JCWlmIChjaGVja19tb2RlKHQsICJUVU5FUl9TRVRfU1RBTkRCWSIpID09IC1FSU5WQUwpCi0JCQlyZXR1cm4gMDsKLQkJdC0+bW9kZSA9IFRfU1RBTkRCWTsKLQkJaWYgKGFuYWxvZ19vcHMtPnN0YW5kYnkpCi0JCQlhbmFsb2dfb3BzLT5zdGFuZGJ5KCZ0LT5mZSk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCiAJY2FzZSBWSURJT0NTQVVESU86CiAJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NTQVVESU8iKSA9PSAtRUlOVkFMKQogCQkJcmV0dXJuIDA7CkBAIC04OTcsMTQ5ICs5MjAsMTcyIEBACiAJCQl9CiAJCQlyZXR1cm4gMDsKIAkJfQorCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQogI2VuZGlmCi0JY2FzZSBUVU5FUl9TRVRfQ09ORklHOgotCXsKLQkJc3RydWN0IHY0bDJfcHJpdl90dW5fY29uZmlnICpjZmcgPSBhcmc7CiAKLQkJaWYgKHQtPnR5cGUgIT0gY2ZnLT50dW5lcikKLQkJCWJyZWFrOworc3RhdGljIGludCB0dW5lcl9zX2NvbmZpZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CiAKLQkJaWYgKGFuYWxvZ19vcHMtPnNldF9jb25maWcpIHsKLQkJCWFuYWxvZ19vcHMtPnNldF9jb25maWcoJnQtPmZlLCBjZmctPnByaXYpOwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAodC0+dHlwZSAhPSBjZmctPnR1bmVyKQorCQlyZXR1cm4gMDsKIAotCQl0dW5lcl9kYmcoIlR1bmVyIGZyb250ZW5kIG1vZHVsZSBoYXMgbm8gd2F5IHRvIHNldCBjb25maWdcbiIpOwotCQlicmVhazsKKwlpZiAoYW5hbG9nX29wcy0+c2V0X2NvbmZpZykgeworCQlhbmFsb2dfb3BzLT5zZXRfY29uZmlnKCZ0LT5mZSwgY2ZnLT5wcml2KTsKKwkJcmV0dXJuIDA7CiAJfQotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJewotCQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwogCi0JCQlpZiAoc2V0X21vZGUgKGNsaWVudCwgdCwgVjRMMl9UVU5FUl9BTkFMT0dfVFYsICJWSURJT0NfU19TVEQiKQotCQkJCQk9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOworCXR1bmVyX2RiZygiVHVuZXIgZnJvbnRlbmQgbW9kdWxlIGhhcyBubyB3YXkgdG8gc2V0IGNvbmZpZ1xuIik7CisJcmV0dXJuIDA7Cit9CiAKLQkJCXN3aXRjaF92NGwyKCk7CisvKiAtLS0gdjRsIGlvY3RscyAtLS0gKi8KKy8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQorICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLworc3RhdGljIGludCB0dW5lcl9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCQkJdC0+c3RkID0gKmlkOwotCQkJdHVuZXJfZml4dXBfc3RkKHQpOwotCQkJaWYgKHQtPnR2X2ZyZXEpCi0JCQkJc2V0X2ZyZXEoY2xpZW50LCB0LT50dl9mcmVxKTsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX0FOQUxPR19UViwgIlZJRElPQ19TX1NURCIpCisJCQk9PSAtRUlOVkFMKQorCQlyZXR1cm4gMDsKIAotCQkJaWYgKHNldF9tb2RlIChjbGllbnQsIHQsIGYtPnR5cGUsICJWSURJT0NfU19GUkVRVUVOQ1kiKQotCQkJCQk9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJc3dpdGNoX3Y0bDIoKTsKLQkJCXNldF9mcmVxKGNsaWVudCxmLT5mcmVxdWVuY3kpOworCXN3aXRjaF92NGwyKCk7CiAKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwl0LT5zdGQgPSBzdGQ7CisJdHVuZXJfZml4dXBfc3RkKHQpOworCWlmICh0LT50dl9mcmVxKQorCQlzZXRfZnJlcShjbGllbnQsIHQtPnR2X2ZyZXEpOworCXJldHVybiAwOworfQogCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DX0dfRlJFUVVFTkNZIikgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQkJCXN3aXRjaF92NGwyKCk7Ci0JCQlmLT50eXBlID0gdC0+bW9kZTsKLQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9mcmVxdWVuY3kpIHsKLQkJCQl1MzIgYWJzX2ZyZXE7CitzdGF0aWMgaW50IHR1bmVyX3NfZnJlcXVlbmN5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCQkJZmVfdHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5KCZ0LT5mZSwgJmFic19mcmVxKTsKLQkJCQlmLT5mcmVxdWVuY3kgPSAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSA/Ci0JCQkJCShhYnNfZnJlcSAqIDIgKyAxMjUvMikgLyAxMjUgOgotCQkJCQkoYWJzX2ZyZXEgKyA2MjUwMC8yKSAvIDYyNTAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZi0+ZnJlcXVlbmN5ID0gKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgPwotCQkJCXQtPnJhZGlvX2ZyZXEgOiB0LT50dl9mcmVxOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfR19UVU5FUiIpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0JCQlzd2l0Y2hfdjRsMigpOwotCi0JCQl0dW5lci0+dHlwZSA9IHQtPm1vZGU7Ci0JCQlpZiAoYW5hbG9nX29wcy0+Z2V0X2FmYykKLQkJCQl0dW5lci0+YWZjID0gYW5hbG9nX29wcy0+Z2V0X2FmYygmdC0+ZmUpOwotCQkJaWYgKHQtPm1vZGUgPT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCi0JCQkJdHVuZXItPmNhcGFiaWxpdHkgfD0gVjRMMl9UVU5FUl9DQVBfTk9STTsKLQkJCWlmICh0LT5tb2RlICE9IFY0TDJfVFVORVJfUkFESU8pIHsKLQkJCQl0dW5lci0+cmFuZ2Vsb3cgPSB0dl9yYW5nZVswXSAqIDE2OwotCQkJCXR1bmVyLT5yYW5nZWhpZ2ggPSB0dl9yYW5nZVsxXSAqIDE2OwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiByYWRpbyBtb2RlICovCi0JCQl0dW5lci0+cnhzdWJjaGFucyA9Ci0JCQkJVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKLQkJCQl1MzIgdHVuZXJfc3RhdHVzOwotCi0JCQkJZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKCZ0LT5mZSwgJnR1bmVyX3N0YXR1cyk7Ci0JCQkJdHVuZXItPnJ4c3ViY2hhbnMgPQotCQkJCQkodHVuZXJfc3RhdHVzICYgVFVORVJfU1RBVFVTX1NURVJFTykgPwotCQkJCQlWNEwyX1RVTkVSX1NVQl9TVEVSRU8gOgotCQkJCQlWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoYW5hbG9nX29wcy0+aXNfc3RlcmVvKSB7Ci0JCQkJCXR1bmVyLT5yeHN1YmNoYW5zID0KLQkJCQkJCWFuYWxvZ19vcHMtPmlzX3N0ZXJlbygmdC0+ZmUpID8KLQkJCQkJCVY0TDJfVFVORVJfU1VCX1NURVJFTyA6Ci0JCQkJCQlWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJCX0KLQkJCX0KLQkJCWlmIChhbmFsb2dfb3BzLT5oYXNfc2lnbmFsKQotCQkJCXR1bmVyLT5zaWduYWwgPSBhbmFsb2dfb3BzLT5oYXNfc2lnbmFsKCZ0LT5mZSk7Ci0JCQl0dW5lci0+Y2FwYWJpbGl0eSB8PQotCQkJICAgIFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKLQkJCXR1bmVyLT5hdWRtb2RlID0gdC0+YXVkbW9kZTsKLQkJCXR1bmVyLT5yYW5nZWxvdyA9IHJhZGlvX3JhbmdlWzBdICogMTYwMDA7Ci0JCQl0dW5lci0+cmFuZ2VoaWdoID0gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMDsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQkJewotCQkJc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DX1NfVFVORVIiKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlzd2l0Y2hfdjRsMigpOwotCi0JCQkvKiBkbyBub3RoaW5nIHVubGVzcyB3ZSdyZSBhIHJhZGlvIHR1bmVyICovCi0JCQlpZiAodC0+bW9kZSAhPSBWNEwyX1RVTkVSX1JBRElPKQotCQkJCWJyZWFrOwotCQkJdC0+YXVkbW9kZSA9IHR1bmVyLT5hdWRtb2RlOwotCQkJc2V0X3JhZGlvX2ZyZXEoY2xpZW50LCB0LT5yYWRpb19mcmVxKTsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJaWYgKGFuYWxvZ19vcHMtPnR1bmVyX3N0YXR1cykKLQkJCWFuYWxvZ19vcHMtPnR1bmVyX3N0YXR1cygmdC0+ZmUpOwotCQlicmVhazsKLQl9CisJaWYgKHNldF9tb2RlKGNsaWVudCwgdCwgZi0+dHlwZSwgIlZJRElPQ19TX0ZSRVFVRU5DWSIpCisJCQk9PSAtRUlOVkFMKQorCQlyZXR1cm4gMDsKKwlzd2l0Y2hfdjRsMigpOworCXNldF9mcmVxKGNsaWVudCwgZi0+ZnJlcXVlbmN5KTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHR1bmVyX2dfZnJlcXVlbmN5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOworCisJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19HX0ZSRVFVRU5DWSIpID09IC1FSU5WQUwpCisJCXJldHVybiAwOworCXN3aXRjaF92NGwyKCk7CisJZi0+dHlwZSA9IHQtPm1vZGU7CisJaWYgKGZlX3R1bmVyX29wcy0+Z2V0X2ZyZXF1ZW5jeSkgeworCQl1MzIgYWJzX2ZyZXE7CisKKwkJZmVfdHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5KCZ0LT5mZSwgJmFic19mcmVxKTsKKwkJZi0+ZnJlcXVlbmN5ID0gKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgPworCQkJKGFic19mcmVxICogMiArIDEyNS8yKSAvIDEyNSA6CisJCQkoYWJzX2ZyZXEgKyA2MjUwMC8yKSAvIDYyNTAwOworCQlyZXR1cm4gMDsKKwl9CisJZi0+ZnJlcXVlbmN5ID0gKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgPworCQl0LT5yYWRpb19mcmVxIDogdC0+dHZfZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dW5lcl9nX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOworCisJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19HX1RVTkVSIikgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIDA7CisJc3dpdGNoX3Y0bDIoKTsKKworCXZ0LT50eXBlID0gdC0+bW9kZTsKKwlpZiAoYW5hbG9nX29wcy0+Z2V0X2FmYykKKwkJdnQtPmFmYyA9IGFuYWxvZ19vcHMtPmdldF9hZmMoJnQtPmZlKTsKKwlpZiAodC0+bW9kZSA9PSBWNEwyX1RVTkVSX0FOQUxPR19UVikKKwkJdnQtPmNhcGFiaWxpdHkgfD0gVjRMMl9UVU5FUl9DQVBfTk9STTsKKwlpZiAodC0+bW9kZSAhPSBWNEwyX1RVTkVSX1JBRElPKSB7CisJCXZ0LT5yYW5nZWxvdyA9IHR2X3JhbmdlWzBdICogMTY7CisJCXZ0LT5yYW5nZWhpZ2ggPSB0dl9yYW5nZVsxXSAqIDE2OworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiByYWRpbyBtb2RlICovCisJdnQtPnJ4c3ViY2hhbnMgPQorCQlWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKKwkJdTMyIHR1bmVyX3N0YXR1czsKKworCQlmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMoJnQtPmZlLCAmdHVuZXJfc3RhdHVzKTsKKwkJdnQtPnJ4c3ViY2hhbnMgPQorCQkJKHR1bmVyX3N0YXR1cyAmIFRVTkVSX1NUQVRVU19TVEVSRU8pID8KKwkJCVY0TDJfVFVORVJfU1VCX1NURVJFTyA6CisJCQlWNEwyX1RVTkVSX1NVQl9NT05POworCX0gZWxzZSB7CisJCWlmIChhbmFsb2dfb3BzLT5pc19zdGVyZW8pIHsKKwkJCXZ0LT5yeHN1YmNoYW5zID0KKwkJCQlhbmFsb2dfb3BzLT5pc19zdGVyZW8oJnQtPmZlKSA/CisJCQkJVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDoKKwkJCQlWNEwyX1RVTkVSX1NVQl9NT05POworCQl9CisJfQorCWlmIChhbmFsb2dfb3BzLT5oYXNfc2lnbmFsKQorCQl2dC0+c2lnbmFsID0gYW5hbG9nX29wcy0+aGFzX3NpZ25hbCgmdC0+ZmUpOworCXZ0LT5jYXBhYmlsaXR5IHw9CisJCVY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKKwl2dC0+YXVkbW9kZSA9IHQtPmF1ZG1vZGU7CisJdnQtPnJhbmdlbG93ID0gcmFkaW9fcmFuZ2VbMF0gKiAxNjAwMDsKKwl2dC0+cmFuZ2VoaWdoID0gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dW5lcl9zX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19TX1RVTkVSIikgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2hfdjRsMigpOworCisJLyogZG8gbm90aGluZyB1bmxlc3Mgd2UncmUgYSByYWRpbyB0dW5lciAqLworCWlmICh0LT5tb2RlICE9IFY0TDJfVFVORVJfUkFESU8pCisJCXJldHVybiAwOworCXQtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKKwlzZXRfcmFkaW9fZnJlcShjbGllbnQsIHQtPnJhZGlvX2ZyZXEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR1bmVyX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CisJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CisKKwlpZiAoYW5hbG9nX29wcy0+dHVuZXJfc3RhdHVzKQorCQlhbmFsb2dfb3BzLT50dW5lcl9zdGF0dXMoJnQtPmZlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dW5lcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgdHVuZXJfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihpMmNfZ2V0X2NsaWVudGRhdGEoYykpOwogCiAJdHVuZXJfZGJnKCJzdXNwZW5kXG4iKTsKIAkvKiBGSVhNRTogcG93ZXIgZG93biA/Pz8gKi8KQEAgLTEwNDgsNyArMTA5NCw3IEBACiAKIHN0YXRpYyBpbnQgdHVuZXJfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihpMmNfZ2V0X2NsaWVudGRhdGEoYykpOwogCiAJdHVuZXJfZGJnKCJyZXN1bWVcbiIpOwogCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKQEAgLTEwNjEsNiArMTEwNywzMiBAQAogCXJldHVybiAwOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR1bmVyX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gdHVuZXJfbG9nX3N0YXR1cywKKwkuc19zdGFuZGJ5ID0gdHVuZXJfc19zdGFuZGJ5LAorI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCisJLmlvY3RsID0gdHVuZXJfaW9jdGwsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHR1bmVyX3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSB0dW5lcl9zX3N0ZCwKKwkuc19yYWRpbyA9IHR1bmVyX3NfcmFkaW8sCisJLmdfdHVuZXIgPSB0dW5lcl9nX3R1bmVyLAorCS5zX3R1bmVyID0gdHVuZXJfc190dW5lciwKKwkuc19mcmVxdWVuY3kgPSB0dW5lcl9zX2ZyZXF1ZW5jeSwKKwkuZ19mcmVxdWVuY3kgPSB0dW5lcl9nX2ZyZXF1ZW5jeSwKKwkuc190eXBlX2FkZHIgPSB0dW5lcl9zX3R5cGVfYWRkciwKKwkuc19jb25maWcgPSB0dW5lcl9zX2NvbmZpZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHR1bmVyX29wcyA9IHsKKwkuY29yZSA9ICZ0dW5lcl9jb3JlX29wcywKKwkudHVuZXIgPSAmdHVuZXJfdHVuZXJfb3BzLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgTElTVF9IRUFEKHR1bmVyX2xpc3QpOwpAQCAtMTEwOSw5ICsxMTgxLDkgQEAKIAl0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR1bmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gdCkKIAkJcmV0dXJuIC1FTk9NRU07CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnQtPnNkLCBjbGllbnQsICZ0dW5lcl9vcHMpOwogCXQtPmkyYyA9IGNsaWVudDsKIAl0LT5uYW1lID0gIih0dW5lciB1bnNldCkiOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHQpOwogCXQtPnR5cGUgPSBVTlNFVDsKIAl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAl0LT5tb2RlX21hc2sgPSBUX1VOSU5JVElBTElaRUQ7CkBAIC0xMjYxLDggKzEzMzMsOSBAQAogCiBzdGF0aWMgaW50IHR1bmVyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZ0LT5zZCk7CiAJdHVuZXJfZGV0YWNoKCZ0LT5mZSk7CiAJdC0+ZmUuYW5hbG9nX2RlbW9kX3ByaXYgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IDM3MjBmMGUuLmQwYzc5NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCkBAIC0xMTAsNyArMTA5LDcgQEAKIAogLyogY3VycmVudCBzdGF0ZSBvZiB0aGUgY2hpcCAqLwogc3RydWN0IENISVBTVEFURSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmM7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCiAJLyogY2hpcC1zcGVjaWZpYyBkZXNjcmlwdGlvbiAtIHNob3VsZCBwb2ludCB0bwogCSAgIGFuIGVudHJ5IGF0IENISVBERVNDIHRhYmxlICovCkBAIC0xMzIsNiArMTMxLDExIEBACiAJaW50IAkJICAgICBhdWRtb2RlOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgQ0hJUFNUQVRFICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBDSElQU1RBVEUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogaTJjIGFkZHJlc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xNTIsMzQgKzE1NiwzNCBAQAogCiBzdGF0aWMgaW50IGNoaXBfd3JpdGUoc3RydWN0IENISVBTVEFURSAqY2hpcCwgaW50IHN1YmFkZHIsIGludCB2YWwpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOwogCiAJaWYgKHN1YmFkZHIgPCAwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogY2hpcF93cml0ZTogMHgleFxuIiwKLQkJCWNoaXAtPmMtPm5hbWUsIHZhbCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImNoaXBfd3JpdGU6IDB4JXhcbiIsIHZhbCk7CiAJCWNoaXAtPnNoYWRvdy5ieXRlc1sxXSA9IHZhbDsKIAkJYnVmZmVyWzBdID0gdmFsOwotCQlpZiAoMSAhPSBpMmNfbWFzdGVyX3NlbmQoY2hpcC0+YyxidWZmZXIsMSkpIHsKLQkJCXY0bF93YXJuKGNoaXAtPmMsICIlczogSS9PIGVycm9yICh3cml0ZSAweCV4KVxuIiwKLQkJCQljaGlwLT5jLT5uYW1lLCB2YWwpOworCQlpZiAoMSAhPSBpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAxKSkgeworCQkJdjRsMl93YXJuKHNkLCAiSS9PIGVycm9yICh3cml0ZSAweCV4KVxuIiwgdmFsKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChzdWJhZGRyICsgMSA+PSBBUlJBWV9TSVpFKGNoaXAtPnNoYWRvdy5ieXRlcykpIHsKLQkJCXY0bF9pbmZvKGNoaXAtPmMsCisJCQl2NGwyX2luZm8oc2QsCiAJCQkJIlRyaWVkIHRvIGFjY2VzcyBhIG5vbi1leGlzdGVudCByZWdpc3RlcjogJWRcbiIsCiAJCQkJc3ViYWRkcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogY2hpcF93cml0ZTogcmVnJWQ9MHgleFxuIiwKLQkJCWNoaXAtPmMtPm5hbWUsIHN1YmFkZHIsIHZhbCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImNoaXBfd3JpdGU6IHJlZyVkPTB4JXhcbiIsCisJCQlzdWJhZGRyLCB2YWwpOwogCQljaGlwLT5zaGFkb3cuYnl0ZXNbc3ViYWRkcisxXSA9IHZhbDsKIAkJYnVmZmVyWzBdID0gc3ViYWRkcjsKIAkJYnVmZmVyWzFdID0gdmFsOwotCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoY2hpcC0+YyxidWZmZXIsMikpIHsKLQkJCXY0bF93YXJuKGNoaXAtPmMsICIlczogSS9PIGVycm9yICh3cml0ZSByZWclZD0weCV4KVxuIiwKLQkJCWNoaXAtPmMtPm5hbWUsIHN1YmFkZHIsIHZhbCk7CisJCWlmICgyICE9IGkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDIpKSB7CisJCQl2NGwyX3dhcm4oc2QsICJJL08gZXJyb3IgKHdyaXRlIHJlZyVkPTB4JXgpXG4iLAorCQkJCXN1YmFkZHIsIHZhbCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0xODksMTIgKzE5MywxNCBAQAogc3RhdGljIGludCBjaGlwX3dyaXRlX21hc2tlZChzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwLAogCQkJICAgICBpbnQgc3ViYWRkciwgaW50IHZhbCwgaW50IG1hc2spCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKKwogCWlmIChtYXNrICE9IDApIHsKIAkJaWYgKHN1YmFkZHIgPCAwKSB7CiAJCQl2YWwgPSAoY2hpcC0+c2hhZG93LmJ5dGVzWzFdICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOwogCQl9IGVsc2UgewogCQkJaWYgKHN1YmFkZHIgKyAxID49IEFSUkFZX1NJWkUoY2hpcC0+c2hhZG93LmJ5dGVzKSkgewotCQkJCXY0bF9pbmZvKGNoaXAtPmMsCisJCQkJdjRsMl9pbmZvKHNkLAogCQkJCQkiVHJpZWQgdG8gYWNjZXNzIGEgbm9uLWV4aXN0ZW50IHJlZ2lzdGVyOiAlZFxuIiwKIAkJCQkJc3ViYWRkcik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMDgsNDUgKzIxNCw1MSBAQAogCiBzdGF0aWMgaW50IGNoaXBfcmVhZChzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlcjsKIAotCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdihjaGlwLT5jLCZidWZmZXIsMSkpIHsKLQkJdjRsX3dhcm4oY2hpcC0+YywgIiVzOiBJL08gZXJyb3IgKHJlYWQpXG4iLAotCQljaGlwLT5jLT5uYW1lKTsKKwlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoYywgJmJ1ZmZlciwgMSkpIHsKKwkJdjRsMl93YXJuKHNkLCAiSS9PIGVycm9yIChyZWFkKVxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2hpcC0+YywgIiVzOiBjaGlwX3JlYWQ6IDB4JXhcbiIsY2hpcC0+Yy0+bmFtZSwgYnVmZmVyKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjaGlwX3JlYWQ6IDB4JXhcbiIsIGJ1ZmZlcik7CiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogc3RhdGljIGludCBjaGlwX3JlYWQyKHN0cnVjdCBDSElQU1RBVEUgKmNoaXAsIGludCBzdWJhZGRyKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAl1bnNpZ25lZCBjaGFyIHdyaXRlWzFdOwogCXVuc2lnbmVkIGNoYXIgcmVhZFsxXTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0gewotCQl7IGNoaXAtPmMtPmFkZHIsIDAsICAgICAgICAxLCB3cml0ZSB9LAotCQl7IGNoaXAtPmMtPmFkZHIsIEkyQ19NX1JELCAxLCByZWFkICB9CisJCXsgYy0+YWRkciwgMCwgICAgICAgIDEsIHdyaXRlIH0sCisJCXsgYy0+YWRkciwgSTJDX01fUkQsIDEsIHJlYWQgIH0KIAl9OworCiAJd3JpdGVbMF0gPSBzdWJhZGRyOwogCi0JaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGNoaXAtPmMtPmFkYXB0ZXIsbXNncywyKSkgewotCQl2NGxfd2FybihjaGlwLT5jLCAiJXM6IEkvTyBlcnJvciAocmVhZDIpXG4iLCBjaGlwLT5jLT5uYW1lKTsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgbXNncywgMikpIHsKKwkJdjRsMl93YXJuKHNkLCAiSS9PIGVycm9yIChyZWFkMilcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogY2hpcF9yZWFkMjogcmVnJWQ9MHgleFxuIiwKLQkJY2hpcC0+Yy0+bmFtZSwgc3ViYWRkcixyZWFkWzBdKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjaGlwX3JlYWQyOiByZWclZD0weCV4XG4iLAorCQlzdWJhZGRyLCByZWFkWzBdKTsKIAlyZXR1cm4gcmVhZFswXTsKIH0KIAogc3RhdGljIGludCBjaGlwX2NtZChzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwLCBjaGFyICpuYW1lLCBhdWRpb2NtZCAqY21kKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgaTsKIAogCWlmICgwID09IGNtZC0+Y291bnQpCiAJCXJldHVybiAwOwogCiAJaWYgKGNtZC0+Y291bnQgKyBjbWQtPmJ5dGVzWzBdIC0gMSA+PSBBUlJBWV9TSVpFKGNoaXAtPnNoYWRvdy5ieXRlcykpIHsKLQkJdjRsX2luZm8oY2hpcC0+YywKKwkJdjRsMl9pbmZvKHNkLAogCQkJICJUcmllZCB0byBhY2Nlc3MgYSBub24tZXhpc3RlbnQgcmVnaXN0ZXIgcmFuZ2U6ICVkIHRvICVkXG4iLAogCQkJIGNtZC0+Ynl0ZXNbMF0gKyAxLCBjbWQtPmJ5dGVzWzBdICsgY21kLT5jb3VudCAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI1NSwxOSArMjY3LDE5IEBACiAJLyogRklYTUU6IGl0IHNlZW1zIHRoYXQgdGhlIHNoYWRvdyBieXRlcyBhcmUgd3JvbmcgYmVsbG93ICEqLwogCiAJLyogdXBkYXRlIG91ciBzaGFkb3cgcmVnaXN0ZXIgc2V0OyBwcmludCBieXRlcyBpZiAoZGVidWcgPiAwKSAqLwotCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogY2hpcF9jbWQoJXMpOiByZWc9JWQsIGRhdGE6IiwKLQkJY2hpcC0+Yy0+bmFtZSwgbmFtZSxjbWQtPmJ5dGVzWzBdKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjaGlwX2NtZCglcyk6IHJlZz0lZCwgZGF0YToiLAorCQluYW1lLCBjbWQtPmJ5dGVzWzBdKTsKIAlmb3IgKGkgPSAxOyBpIDwgY21kLT5jb3VudDsgaSsrKSB7CiAJCWlmIChkZWJ1ZykKLQkJCXByaW50aygiIDB4JXgiLGNtZC0+Ynl0ZXNbaV0pOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiIDB4JXgiLCBjbWQtPmJ5dGVzW2ldKTsKIAkJY2hpcC0+c2hhZG93LmJ5dGVzW2krY21kLT5ieXRlc1swXV0gPSBjbWQtPmJ5dGVzW2ldOwogCX0KIAlpZiAoZGVidWcpCi0JCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAogCS8qIHNlbmQgZGF0YSB0byB0aGUgY2hpcCAqLwotCWlmIChjbWQtPmNvdW50ICE9IGkyY19tYXN0ZXJfc2VuZChjaGlwLT5jLGNtZC0+Ynl0ZXMsY21kLT5jb3VudCkpIHsKLQkJdjRsX3dhcm4oY2hpcC0+YywgIiVzOiBJL08gZXJyb3IgKCVzKVxuIiwgY2hpcC0+Yy0+bmFtZSwgbmFtZSk7CisJaWYgKGNtZC0+Y291bnQgIT0gaTJjX21hc3Rlcl9zZW5kKGMsIGNtZC0+Ynl0ZXMsIGNtZC0+Y291bnQpKSB7CisJCXY0bDJfd2FybihzZCwgIkkvTyBlcnJvciAoJXMpXG4iLCBuYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI5MCw5ICszMDIsMTAgQEAKIHsKIAlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gZGF0YTsKIAlzdHJ1Y3QgQ0hJUERFU0MgICpkZXNjID0gY2hpcC0+ZGVzYzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmNoaXAtPnNkOwogCWludCBtb2RlOwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2hpcC0+YywgIiVzOiB0aHJlYWQgc3RhcnRlZFxuIiwgY2hpcC0+Yy0+bmFtZSk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGhyZWFkIHN0YXJ0ZWRcbiIpOwogCXNldF9mcmVlemFibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0zMDIsNyArMzE1LDcgQEAKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogdGhyZWFkIHdha2V1cFxuIiwgY2hpcC0+Yy0+bmFtZSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRocmVhZCB3YWtldXBcbiIpOwogCiAJCS8qIGRvbid0IGRvIGFueXRoaW5nIGZvciByYWRpbyBvciBpZiBtb2RlICE9IGF1dG8gKi8KIAkJaWYgKGNoaXAtPnJhZGlvIHx8IGNoaXAtPm1vZGUgIT0gMCkKQEAgLTMxNCw4ICszMjcsNyBAQAogCQkJY29udGludWU7CiAKIAkJLyogY2hpcCBkZXRlY3RlZCBhIG5ldyBhdWRpbyBtb2RlIC0gc2V0IGl0ICovCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogdGhyZWFkIGNoZWNrbW9kZVxuIiwKLQkJCWNoaXAtPmMtPm5hbWUpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ0aHJlYWQgY2hlY2ttb2RlXG4iKTsKIAogCQljaGlwLT5wcmV2bW9kZSA9IG1vZGU7CiAKQEAgLTMzNCw3ICszNDYsNyBAQAogCQltb2RfdGltZXIoJmNoaXAtPnd0LCBqaWZmaWVzK21zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOwogCX0KIAotCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICIlczogdGhyZWFkIGV4aXRpbmdcbiIsIGNoaXAtPmMtPm5hbWUpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRocmVhZCBleGl0aW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYzLDYgKzM3NSw3IEBACiAKIHN0YXRpYyBpbnQgdGRhOTg0MF9nZXRtb2RlKHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKIAlpbnQgdmFsLCBtb2RlOwogCiAJdmFsID0gY2hpcF9yZWFkKGNoaXApOwpAQCAtMzcyLDcgKzM4NSw3IEBACiAJaWYgKHZhbCAmIFREQTk4NDBfU1RfU1RFUkVPKQogCQltb2RlIHw9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg0MF9nZXRtb2RlKCk6IHJhdyBjaGlwIHJlYWQ6ICVkLCByZXR1cm46ICVkXG4iLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRkYTk4NDBfZ2V0bW9kZSgpOiByYXcgY2hpcCByZWFkOiAlZCwgcmV0dXJuOiAlZFxuIiwKIAkJdmFsLCBtb2RlKTsKIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTY2OCw2ICs2ODEsNyBAQAogCiBzdGF0aWMgaW50IHRkYTk4NzNfZ2V0bW9kZShzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CiAJaW50IHZhbCxtb2RlOwogCiAJdmFsID0gY2hpcF9yZWFkKGNoaXApOwpAQCAtNjc2LDIzICs2OTAsMjQgQEAKIAkJbW9kZSB8PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWlmICh2YWwgJiBUREE5ODczX0RVQUwpCiAJCW1vZGUgfD0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxIHwgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOwotCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICJ0ZGE5ODczX2dldG1vZGUoKTogcmF3IGNoaXAgcmVhZDogJWQsIHJldHVybjogJWRcbiIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3M19nZXRtb2RlKCk6IHJhdyBjaGlwIHJlYWQ6ICVkLCByZXR1cm46ICVkXG4iLAogCQl2YWwsIG1vZGUpOwogCXJldHVybiBtb2RlOwogfQogCiBzdGF0aWMgdm9pZCB0ZGE5ODczX3NldG1vZGUoc3RydWN0IENISVBTVEFURSAqY2hpcCwgaW50IG1vZGUpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKIAlpbnQgc3dfZGF0YSAgPSBjaGlwLT5zaGFkb3cuYnl0ZXNbVERBOTg3M19TVysxXSAmIH4gVERBOTg3M19UUl9NQVNLOwogCS8qCWludCBhZGpfZGF0YSA9IGNoaXAtPnNoYWRvdy5ieXRlc1tUREE5ODczX0FEKzFdIDsgKi8KIAogCWlmICgoc3dfZGF0YSAmIFREQTk4NzNfSU5QX01BU0spICE9IFREQTk4NzNfSU5URVJOQUwpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2hpcC0+YywgInRkYTk4NzNfc2V0bW9kZSgpOiBleHRlcm5hbCBpbnB1dFxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRkYTk4NzNfc2V0bW9kZSgpOiBleHRlcm5hbCBpbnB1dFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3M19zZXRtb2RlKCk6IGNoaXAtPnNoYWRvdy5ieXRlc1slZF0gPSAlZFxuIiwgVERBOTg3M19TVysxLCBjaGlwLT5zaGFkb3cuYnl0ZXNbVERBOTg3M19TVysxXSk7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2hpcC0+YywgInRkYTk4NzNfc2V0bW9kZSgpOiBzd19kYXRhICA9ICVkXG4iLCBzd19kYXRhKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ0ZGE5ODczX3NldG1vZGUoKTogY2hpcC0+c2hhZG93LmJ5dGVzWyVkXSA9ICVkXG4iLCBUREE5ODczX1NXKzEsIGNoaXAtPnNoYWRvdy5ieXRlc1tUREE5ODczX1NXKzFdKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ0ZGE5ODczX3NldG1vZGUoKTogc3dfZGF0YSAgPSAlZFxuIiwgc3dfZGF0YSk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgpAQCAtNzEzLDcgKzcyOCw3IEBACiAJfQogCiAJY2hpcF93cml0ZShjaGlwLCBUREE5ODczX1NXLCBzd19kYXRhKTsKLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3M19zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgY2hpcF93cml0ZTogJWRcbiIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3M19zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgY2hpcF93cml0ZTogJWRcbiIsCiAJCW1vZGUsIHN3X2RhdGEpOwogfQogCkBAIC04MjIsNiArODM3LDggQEAKIAogc3RhdGljIGludCB0ZGE5ODc0YV9zZXR1cChzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CisKIAljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzRBX0FHQ0dSLCAweDAwKTsgLyogMCBkQiAqLwogCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfR0NPTlIsIHRkYTk4NzRhX0dDT05SKTsKIAljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzRBX01TUiwgKHRkYTk4NzRhX21vZGUpID8gMHgwMzoweDAyKTsKQEAgLTg1MiwxMyArODY5LDE0IEBACiAJCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NEFfU0RBQ09TUiwgKHRkYTk4NzRhX21vZGUpID8gMHg4MToweDgwKTsKIAkJY2hpcF93cml0ZShjaGlwLCBUREE5ODc0QV9BT1NSLCAweDAwKTsgLyogb3IgMHgxMCAqLwogCX0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3NGFfc2V0dXAoKTogJXMgWzB4JTAyWF0uXG4iLAorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInRkYTk4NzRhX3NldHVwKCk6ICVzIFsweCUwMlhdLlxuIiwKIAkJdGRhOTg3NGFfbW9kZWxpc3RbdGRhOTg3NGFfU1REXS5uYW1lLHRkYTk4NzRhX1NURCk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgdGRhOTg3NGFfZ2V0bW9kZShzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmY2hpcC0+c2Q7CiAJaW50IGRzcixuc3IsbW9kZTsKIAlpbnQgbmVjcjsgLyoganVzdCBmb3IgZGVidWdnaW5nICovCiAKQEAgLTg5NSwxNiArOTEzLDE4IEBACiAJCQltb2RlIHw9IFY0TDJfVFVORVJfTU9ERV9MQU5HMSB8IFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKIAl9CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3NGFfZ2V0bW9kZSgpOiBEU1I9MHglWCwgTlNSPTB4JVgsIE5FQ1I9MHglWCwgcmV0dXJuOiAlZC5cbiIsCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3NGFfZ2V0bW9kZSgpOiBEU1I9MHglWCwgTlNSPTB4JVgsIE5FQ1I9MHglWCwgcmV0dXJuOiAlZC5cbiIsCiAJCSBkc3IsIG5zciwgbmVjciwgbW9kZSk7CiAJcmV0dXJuIG1vZGU7CiB9CiAKIHN0YXRpYyB2b2lkIHRkYTk4NzRhX3NldG1vZGUoc3RydWN0IENISVBTVEFURSAqY2hpcCwgaW50IG1vZGUpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKKwogCS8qIERpc2FibGUvZW5hYmxlIE5JQ0FNIGF1dG8tbXV0aW5nIChiYXNlZCBvbiBEU1IuUlNTRiBzdGF0dXMgYml0KS4gKi8KIAkvKiBJZiBhdXRvLW11dGluZyBpcyBkaXNhYmxlZCwgd2UgY2FuIGhlYXIgYSBzaWduYWwgb2YgZGVncmFkaW5nIHF1YWxpdHkuICovCi0JaWYodGRhOTg3NGFfbW9kZSkgeworCWlmICh0ZGE5ODc0YV9tb2RlKSB7CiAJCWlmKGNoaXAtPnNoYWRvdy5ieXRlc1tNQVhSRUdTLTJdICYgMHgyMCkgLyogRFNSLlJTU0Y9MSAqLwogCQkJdGRhOTg3NGFfTkNPTlIgJj0gMHhmZTsgLyogZW5hYmxlICovCiAJCWVsc2UKQEAgLTk0MSw3ICs5NjEsNyBAQAogCQljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzRBX0FPU1IsIGFvc3IpOwogCQljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzRBX01EQUNPU1IsIG1kYWNvc3IpOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNoaXAtPmMsICJ0ZGE5ODc0YV9zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgQU9TUj0weCVYLCBNREFDT1NSPTB4JVguXG4iLAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ0ZGE5ODc0YV9zZXRtb2RlKCk6IHJlcS4gbW9kZSAlZDsgQU9TUj0weCVYLCBNREFDT1NSPTB4JVguXG4iLAogCQkJbW9kZSwgYW9zciwgbWRhY29zcik7CiAKIAl9IGVsc2UgeyAvKiBkaWMgPT0gMHgwNyAqLwpAQCAtOTc2LDEzICs5OTYsMTQgQEAKIAkJY2hpcF93cml0ZShjaGlwLCBUREE5ODc0QV9GTU1SLCBmbW1yKTsKIAkJY2hpcF93cml0ZShjaGlwLCBUREE5ODc0QV9BT1NSLCBhb3NyKTsKIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3NGFfc2V0bW9kZSgpOiByZXEuIG1vZGUgJWQ7IEZNTVI9MHglWCwgQU9TUj0weCVYLlxuIiwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3NGFfc2V0bW9kZSgpOiByZXEuIG1vZGUgJWQ7IEZNTVI9MHglWCwgQU9TUj0weCVYLlxuIiwKIAkJCW1vZGUsIGZtbXIsIGFvc3IpOwogCX0KIH0KIAogc3RhdGljIGludCB0ZGE5ODc0YV9jaGVja2l0KHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKIAlpbnQgZGljLHNpYzsJLyogZGV2aWNlIGlkLiBhbmQgc29mdHdhcmUgaWQuIGNvZGVzICovCiAKIAlpZigtMSA9PSAoZGljID0gY2hpcF9yZWFkMihjaGlwLFREQTk4NzRBX0RJQykpKQpAQCAtOTkwLDEwICsxMDExLDEwIEBACiAJaWYoLTEgPT0gKHNpYyA9IGNoaXBfcmVhZDIoY2hpcCxUREE5ODc0QV9TSUMpKSkKIAkJcmV0dXJuIDA7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjaGlwLT5jLCAidGRhOTg3NGFfY2hlY2tpdCgpOiBESUM9MHglWCwgU0lDPTB4JVguXG4iLCBkaWMsIHNpYyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGRhOTg3NGFfY2hlY2tpdCgpOiBESUM9MHglWCwgU0lDPTB4JVguXG4iLCBkaWMsIHNpYyk7CiAKIAlpZigoZGljID09IDB4MTEpfHwoZGljID09IDB4MDcpKSB7Ci0JCXY0bF9pbmZvKGNoaXAtPmMsICJmb3VuZCB0ZGE5ODc0JXMuXG4iLCAoZGljID09IDB4MTEpID8gImEiOiJoIik7CisJCXY0bDJfaW5mbyhzZCwgImZvdW5kIHRkYTk4NzQlcy5cbiIsIChkaWMgPT0gMHgxMSkgPyAiYSIgOiAiaCIpOwogCQl0ZGE5ODc0YV9kaWMgPSBkaWM7CS8qIHJlbWVtYmVyIGRldmljZSBpZC4gKi8KIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTExMywxMiArMTEzNCwxMiBAQAogc3RhdGljIGludCB0ZGE4NDI1X2luaXRpYWxpemUoc3RydWN0IENISVBTVEFURSAqY2hpcCkKIHsKIAlzdHJ1Y3QgQ0hJUERFU0MgKmRlc2MgPSBjaGlwLT5kZXNjOworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmY2hpcC0+c2QpOwogCWludCBpbnB1dG1hcFs0XSA9IHsgLyogdHVuZXIJKi8gVERBODQyNV9TMV9DSDIsIC8qIHJhZGlvICAqLyBUREE4NDI1X1MxX0NIMSwKIAkJCSAgICAvKiBleHRlcm4JKi8gVERBODQyNV9TMV9DSDEsIC8qIGludGVybiAqLyBUREE4NDI1X1MxX09GRn07CiAKLQlpZiAoY2hpcC0+Yy0+YWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfUklWQSkgewotCQltZW1jcHkgKGRlc2MtPmlucHV0bWFwLCBpbnB1dG1hcCwgc2l6ZW9mIChpbnB1dG1hcCkpOwotCX0KKwlpZiAoYy0+YWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfUklWQSkKKwkJbWVtY3B5KGRlc2MtPmlucHV0bWFwLCBpbnB1dG1hcCwgc2l6ZW9mKGlucHV0bWFwKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMTUsOSArMTIzNiwxMSBAQAogCiBzdGF0aWMgdm9pZCB0YTg4NzR6X3NldG1vZGUoc3RydWN0IENISVBTVEFURSAqY2hpcCwgaW50IG1vZGUpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKIAlpbnQgdXBkYXRlID0gMTsKIAlhdWRpb2NtZCAqdCA9IE5VTEw7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2hpcC0+YywgInRhODg3NHpfc2V0bW9kZSgpOiBtb2RlOiAweCUwMnhcbiIsIG1vZGUpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidGE4ODc0el9zZXRtb2RlKCk6IG1vZGU6IDB4JTAyeFxuIiwgbW9kZSk7CiAKIAlzd2l0Y2gobW9kZSl7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKQEAgLTE0NzksMTQyICsxNTAyLDExIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogaTJjIHJlZ2lzdHJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IGNoaXBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBDSElQU1RBVEUgKmNoaXA7Ci0Jc3RydWN0IENISVBERVNDICAqZGVzYzsKLQotCWlmIChkZWJ1ZykgewotCQlwcmludGsoS0VSTl9JTkZPICJ0dmF1ZGlvOiBUViBhdWRpbyBkZWNvZGVyICsgYXVkaW8vdmlkZW8gbXV4IGRyaXZlclxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gInR2YXVkaW86IGtub3duIGNoaXBzOiAiKTsKLQkJZm9yIChkZXNjID0gY2hpcGxpc3Q7IGRlc2MtPm5hbWUgIT0gTlVMTDsgZGVzYysrKQotCQkJcHJpbnRrKCIlcyVzIiwgKGRlc2MgPT0gY2hpcGxpc3QpID8gIiIgOiAiLCAiLCBkZXNjLT5uYW1lKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwKQotCQlyZXR1cm4gLUVOT01FTTsKLQljaGlwLT5jID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwotCi0JLyogZmluZCBkZXNjcmlwdGlvbiBmb3IgdGhlIGNoaXAgKi8KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleFxuIiwgY2xpZW50LT5hZGRyPDwxKTsKLQlmb3IgKGRlc2MgPSBjaGlwbGlzdDsgZGVzYy0+bmFtZSAhPSBOVUxMOyBkZXNjKyspIHsKLQkJaWYgKDAgPT0gKihkZXNjLT5pbnNtb2RvcHQpKQotCQkJY29udGludWU7Ci0JCWlmIChjbGllbnQtPmFkZHIgPCBkZXNjLT5hZGRyX2xvIHx8Ci0JCSAgICBjbGllbnQtPmFkZHIgPiBkZXNjLT5hZGRyX2hpKQotCQkJY29udGludWU7Ci0JCWlmIChkZXNjLT5jaGVja2l0ICYmICFkZXNjLT5jaGVja2l0KGNoaXApKQotCQkJY29udGludWU7Ci0JCWJyZWFrOwotCX0KLQlpZiAoZGVzYy0+bmFtZSA9PSBOVUxMKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vIG1hdGNoaW5nIGNoaXAgZGVzY3JpcHRpb24gZm91bmRcbiIpOwotCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBkZXNjLT5uYW1lLCBjbGllbnQtPmFkZHI8PDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0JaWYgKGRlc2MtPmZsYWdzKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm1hdGNoZXM6JXMlcyVzLlxuIiwKLQkJCShkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkgICAgID8gIiB2b2x1bWUiICAgICAgOiAiIiwKLQkJCShkZXNjLT5mbGFncyAmIENISVBfSEFTX0JBU1NUUkVCTEUpID8gIiBiYXNzL3RyZWJsZSIgOiAiIiwKLQkJCShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSAgID8gIiBhdWRpb211eCIgICAgOiAiIik7Ci0JfQotCi0JLyogZmlsbCByZXF1aXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KLQlpZiAoIWlkKQotCQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgZGVzYy0+bmFtZSwgSTJDX05BTUVfU0laRSk7Ci0JY2hpcC0+ZGVzYyA9IGRlc2M7Ci0JY2hpcC0+c2hhZG93LmNvdW50ID0gZGVzYy0+cmVnaXN0ZXJzKzE7Ci0JY2hpcC0+cHJldm1vZGUgPSAtMTsKLQljaGlwLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCi0JLyogaW5pdGlhbGl6YXRpb24gICovCi0JaWYgKGRlc2MtPmluaXRpYWxpemUgIT0gTlVMTCkKLQkJZGVzYy0+aW5pdGlhbGl6ZShjaGlwKTsKLQllbHNlCi0JCWNoaXBfY21kKGNoaXAsImluaXQiLCZkZXNjLT5pbml0KTsKLQotCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkgewotCQlpZiAoIWRlc2MtPnZvbGZ1bmMpIHsKLQkJCS8qIFRoaXMgc2hvdWxkbid0IGJlIGhhcHBlbi4gV2FybiB1c2VyLCBidXQga2VlcCB3b3JraW5nCi0JCQkgICB3aXRob3V0IHZvbHVtZSBjb250cm9scwotCQkJICovCi0JCQl2NGxfaW5mbyhjaGlwLT5jLCAidm9sdW1lIGNhbGxiYWNrIHVuZGVmaW5lZCFcbiIpOwotCQkJZGVzYy0+ZmxhZ3MgJj0gfkNISVBfSEFTX1ZPTFVNRTsKLQkJfSBlbHNlIHsKLQkJCWNoaXAtPmxlZnQgID0gZGVzYy0+bGVmdGluaXQgID8gZGVzYy0+bGVmdGluaXQgIDogNjU1MzU7Ci0JCQljaGlwLT5yaWdodCA9IGRlc2MtPnJpZ2h0aW5pdCA/IGRlc2MtPnJpZ2h0aW5pdCA6IDY1NTM1OwotCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT5sZWZ0cmVnLAotCQkJCSAgIGRlc2MtPnZvbGZ1bmMoY2hpcC0+bGVmdCkpOwotCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT5yaWdodHJlZywKLQkJCQkgICBkZXNjLT52b2xmdW5jKGNoaXAtPnJpZ2h0KSk7Ci0JCX0KLQl9Ci0JaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkgewotCQlpZiAoIWRlc2MtPmJhc3NmdW5jIHx8ICFkZXNjLT50cmVibGVmdW5jKSB7Ci0JCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZwotCQkJICAgd2l0aG91dCBiYXNzL3RyZWJsZSBjb250cm9scwotCQkJICovCi0JCQl2NGxfaW5mbyhjaGlwLT5jLCAiYmFzcy90cmVibGUgY2FsbGJhY2tzIHVuZGVmaW5lZCFcbiIpOwotCQkJZGVzYy0+ZmxhZ3MgJj0gfkNISVBfSEFTX0JBU1NUUkVCTEU7Ci0JCX0gZWxzZSB7Ci0JCQljaGlwLT50cmVibGUgPSBkZXNjLT50cmVibGVpbml0ID8KLQkJCQkJCWRlc2MtPnRyZWJsZWluaXQgOiAzMjc2ODsKLQkJCWNoaXAtPmJhc3MgICA9IGRlc2MtPmJhc3Npbml0ICAgPwotCQkJCQkJZGVzYy0+YmFzc2luaXQgICA6IDMyNzY4OwotCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT5iYXNzcmVnLAotCQkJCSAgIGRlc2MtPmJhc3NmdW5jKGNoaXAtPmJhc3MpKTsKLQkJCWNoaXBfd3JpdGUoY2hpcCwgZGVzYy0+dHJlYmxlcmVnLAotCQkJCSAgIGRlc2MtPnRyZWJsZWZ1bmMoY2hpcC0+dHJlYmxlKSk7Ci0JCX0KLQl9Ci0KLQljaGlwLT50aHJlYWQgPSBOVUxMOwotCWlmIChkZXNjLT5mbGFncyAmIENISVBfTkVFRF9DSEVDS01PREUpIHsKLQkJaWYgKCFkZXNjLT5nZXRtb2RlIHx8ICFkZXNjLT5zZXRtb2RlKSB7Ci0JCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZwotCQkJICAgd2l0aG91dCBrdGhyZWFkCi0JCQkgKi8KLQkJCXY0bF9pbmZvKGNoaXAtPmMsICJzZXQvZ2V0IG1vZGUgY2FsbGJhY2tzIHVuZGVmaW5lZCFcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJLyogc3RhcnQgYXN5bmMgdGhyZWFkICovCi0JCWluaXRfdGltZXIoJmNoaXAtPnd0KTsKLQkJY2hpcC0+d3QuZnVuY3Rpb24gPSBjaGlwX3RocmVhZF93YWtlOwotCQljaGlwLT53dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWNoaXA7Ci0JCWNoaXAtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGNoaXBfdGhyZWFkLCBjaGlwLCBjaGlwLT5jLT5uYW1lKTsKLQkJaWYgKElTX0VSUihjaGlwLT50aHJlYWQpKSB7Ci0JCQl2NGxfd2FybihjaGlwLT5jLCAiJXM6IGZhaWxlZCB0byBjcmVhdGUga3RocmVhZFxuIiwKLQkJCSAgICAgICBjaGlwLT5jLT5uYW1lKTsKLQkJCWNoaXAtPnRocmVhZCA9IE5VTEw7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hpcF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWxfdGltZXJfc3luYygmY2hpcC0+d3QpOwotCWlmIChjaGlwLT50aHJlYWQpIHsKLQkJLyogc2h1dGRvd24gYXN5bmMgdGhyZWFkICovCi0JCWt0aHJlYWRfc3RvcChjaGlwLT50aHJlYWQpOwotCQljaGlwLT50aHJlYWQgPSBOVUxMOwotCX0KLQotCWtmcmVlKGNoaXApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR2YXVkaW9fZ2V0X2N0cmwoc3RydWN0IENISVBTVEFURSAqY2hpcCwKK3N0YXRpYyBpbnQgdHZhdWRpb19nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTE2NTIsOSArMTU0NCwxMCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHR2YXVkaW9fc2V0X2N0cmwoc3RydWN0IENISVBTVEFURSAqY2hpcCwKK3N0YXRpYyBpbnQgdHZhdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTE3MjYsMTYxICsxNjE5LDMyNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdmlkZW80bGludXggaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IGNoaXBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0dmF1ZGlvX3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IENISVBERVNDICAqZGVzYyA9IGNoaXAtPmRlc2M7CisJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IHRvX3N0YXRlKHNkKTsKIAotCWlmIChkZWJ1ZyA+IDApIHsKLQkJdjRsX2kyY19wcmludF9pb2N0bChjaGlwLT5jLCBjbWQpOwotCQlwcmludGsoIlxuIik7CisJY2hpcC0+cmFkaW8gPSAxOworCWNoaXAtPndhdGNoX3N0ZXJlbyA9IDA7CisJLyogZGVsX3RpbWVyKCZjaGlwLT53dCk7ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZhdWRpb19xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CisKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0JBU1NUUkVCTEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKK30KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBBVURDX1NFVF9SQURJTzoKLQkJY2hpcC0+cmFkaW8gPSAxOworc3RhdGljIGludCB0dmF1ZGlvX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpydCkKK3sKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CisKKwlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSB8fCBydC0+aW5wdXQgPj0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogVGhlcmUgYXJlIGZvdXIgaW5wdXRzOiB0dW5lciwgcmFkaW8sIGV4dGVybiBhbmQgaW50ZXJuLiAqLworCWNoaXAtPmlucHV0ID0gcnQtPmlucHV0OworCWlmIChjaGlwLT5tdXRlZCkKKwkJcmV0dXJuIDA7CisJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCwgZGVzYy0+aW5wdXRyZWcsCisJCQlkZXNjLT5pbnB1dG1hcFtjaGlwLT5pbnB1dF0sIGRlc2MtPmlucHV0bWFzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZhdWRpb19zX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CisJaW50IG1vZGUgPSAwOworCisJaWYgKGNoaXAtPnJhZGlvKQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCW1vZGUgPSB2dC0+YXVkbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCW1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2hpcC0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOworCisJaWYgKGRlc2MtPnNldG1vZGUgJiYgbW9kZSkgewogCQljaGlwLT53YXRjaF9zdGVyZW8gPSAwOwogCQkvKiBkZWxfdGltZXIoJmNoaXAtPnd0KTsgKi8KLQkJYnJlYWs7Ci0JLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCi0JLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCi0Ja2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0KLQkJc3dpdGNoIChxYy0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCQlicmVhazsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0JBU1NUUkVCTEUpKQotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JfQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHR2YXVkaW9fc2V0X2N0cmwoY2hpcCwgYXJnKTsKLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIHR2YXVkaW9fZ2V0X2N0cmwoY2hpcCwgYXJnKTsKLQljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgotCXsKLQkJc3RydWN0IHY0bDJfcm91dGluZyAqcnQgPSBhcmc7Ci0KLQkJcnQtPmlucHV0ID0gY2hpcC0+aW5wdXQ7Ci0JCXJ0LT5vdXRwdXQgPSAwOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJ0ID0gYXJnOwotCi0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpIHx8IHJ0LT5pbnB1dCA+PSA0KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBUaGVyZSBhcmUgZm91ciBpbnB1dHM6IHR1bmVyLCByYWRpbywgZXh0ZXJuIGFuZCBpbnRlcm4uICovCi0JCWNoaXAtPmlucHV0ID0gcnQtPmlucHV0OwotCQlpZiAoY2hpcC0+bXV0ZWQpCi0JCQlicmVhazsKLQkJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCwgZGVzYy0+aW5wdXRyZWcsCi0JCQkJZGVzYy0+aW5wdXRtYXBbY2hpcC0+aW5wdXRdLCBkZXNjLT5pbnB1dG1hc2spOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQkJaW50IG1vZGUgPSAwOwotCi0JCWlmIChjaGlwLT5yYWRpbykKLQkJCWJyZWFrOwotCQlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJbW9kZSA9IHZ0LT5hdWRtb2RlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCQkJbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWNoaXAtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKLQotCQlpZiAoZGVzYy0+c2V0bW9kZSAmJiBtb2RlKSB7Ci0JCQljaGlwLT53YXRjaF9zdGVyZW8gPSAwOwotCQkJLyogZGVsX3RpbWVyKCZjaGlwLT53dCk7ICovCi0JCQljaGlwLT5tb2RlID0gbW9kZTsKLQkJCWRlc2MtPnNldG1vZGUoY2hpcCwgbW9kZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0JCWludCBtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0KLQkJaWYgKGNoaXAtPnJhZGlvKQotCQkJYnJlYWs7Ci0JCXZ0LT5hdWRtb2RlID0gY2hpcC0+YXVkbW9kZTsKLQkJdnQtPnJ4c3ViY2hhbnMgPSAwOwotCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8Ci0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwotCi0JCWlmIChkZXNjLT5nZXRtb2RlKQotCQkJbW9kZSA9IGRlc2MtPmdldG1vZGUoY2hpcCk7Ci0KLQkJaWYgKG1vZGUgJiBWNEwyX1RVTkVSX01PREVfTU9OTykKLQkJCXZ0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCWlmIChtb2RlICYgVjRMMl9UVU5FUl9NT0RFX1NURVJFTykKLQkJCXZ0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJLyogTm90ZTogZm9yIFNBUCBpdCBzaG91bGQgYmUgbW9uby9sYW5nMiBvciBzdGVyZW8vbGFuZzIuCi0JCSAgIFdoZW4gdGhpcyBtb2R1bGUgaXMgY29udmVydGVkIGZ1bGx5IHRvIHY0bDIsIHRoZW4gdGhpcwotCQkgICBzaG91bGQgY2hhbmdlIGZvciB0aG9zZSBjaGlwcyB0aGF0IGNhbiBkZXRlY3QgU0FQLiAqLwotCQlpZiAobW9kZSAmIFY0TDJfVFVORVJfTU9ERV9MQU5HMSkKLQkJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfAotCQkJCQkgVjRMMl9UVU5FUl9TVUJfTEFORzI7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJY2hpcC0+cmFkaW8gPSAwOwotCQlicmVhazsKLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQkJY2hpcC0+bW9kZSA9IDA7IC8qIGF1dG9tYXRpYyAqLwotCi0JCS8qIEZvciBjaGlwcyB0aGF0IHByb3ZpZGUgZ2V0bW9kZSBhbmQgc2V0bW9kZSwgYW5kIGRvZXNuJ3QKLQkJICAgYXV0b21hdGljYWxseSBmb2xsb3dzIHRoZSBzdGVyZW8gY2FycmllciwgYSBrdGhyZWFkIGlzCi0JCSAgIGNyZWF0ZWQgdG8gc2V0IHRoZSBhdWRpbyBzdGFuZGFyZC4gSW4gdGhpcyBjYXNlLCB3aGVuIHRoZW4KLQkJICAgdGhlIHZpZGVvIGNoYW5uZWwgaXMgY2hhbmdlZCwgdHZhdWRpbyBzdGFydHMgb24gTU9OTyBtb2RlLgotCQkgICBBZnRlciB3YWl0aW5nIGZvciAyIHNlY29uZHMsIHRoZSBrZXJuZWwgdGhyZWFkIGlzIGNhbGxlZCwKLQkJICAgdG8gZm9sbG93IHdoYXRldmVyIGF1ZGlvIHN0YW5kYXJkIGlzIHBvaW50ZWQgYnkgdGhlCi0JCSAgIGF1ZGlvIGNhcnJpZXIuCi0JCSAqLwotCQlpZiAoY2hpcC0+dGhyZWFkKSB7Ci0JCQlkZXNjLT5zZXRtb2RlKGNoaXAsVjRMMl9UVU5FUl9NT0RFX01PTk8pOwotCQkJaWYgKGNoaXAtPnByZXZtb2RlICE9IFY0TDJfVFVORVJfTU9ERV9NT05PKQotCQkJCWNoaXAtPnByZXZtb2RlID0gLTE7IC8qIHJlc2V0IHByZXZpb3VzIG1vZGUgKi8KLQkJCW1vZF90aW1lcigmY2hpcC0+d3QsIGppZmZpZXMrbXNlY3NfdG9famlmZmllcygyMDAwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGFyZywgVjRMMl9JREVOVF9UVkFVRElPLCAwKTsKKwkJY2hpcC0+bW9kZSA9IG1vZGU7CisJCWRlc2MtPnNldG1vZGUoY2hpcCwgbW9kZSk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNoaXBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgdHZhdWRpb19nX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CisJaW50IG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKworCWlmIChjaGlwLT5yYWRpbykKKwkJcmV0dXJuIDA7CisJdnQtPmF1ZG1vZGUgPSBjaGlwLT5hdWRtb2RlOworCXZ0LT5yeHN1YmNoYW5zID0gMDsKKwl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzI7CisKKwlpZiAoZGVzYy0+Z2V0bW9kZSkKKwkJbW9kZSA9IGRlc2MtPmdldG1vZGUoY2hpcCk7CisKKwlpZiAobW9kZSAmIFY0TDJfVFVORVJfTU9ERV9NT05PKQorCQl2dC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9NT05POworCWlmIChtb2RlICYgVjRMMl9UVU5FUl9NT0RFX1NURVJFTykKKwkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCS8qIE5vdGU6IGZvciBTQVAgaXQgc2hvdWxkIGJlIG1vbm8vbGFuZzIgb3Igc3RlcmVvL2xhbmcyLgorCSAgIFdoZW4gdGhpcyBtb2R1bGUgaXMgY29udmVydGVkIGZ1bGx5IHRvIHY0bDIsIHRoZW4gdGhpcworCSAgIHNob3VsZCBjaGFuZ2UgZm9yIHRob3NlIGNoaXBzIHRoYXQgY2FuIGRldGVjdCBTQVAuICovCisJaWYgKG1vZGUgJiBWNEwyX1RVTkVSX01PREVfTEFORzEpCisJCXZ0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfAorCQkJVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZhdWRpb19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IHRvX3N0YXRlKHNkKTsKKworCWNoaXAtPnJhZGlvID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dmF1ZGlvX3NfZnJlcXVlbmN5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CisKKwljaGlwLT5tb2RlID0gMDsgLyogYXV0b21hdGljICovCisKKwkvKiBGb3IgY2hpcHMgdGhhdCBwcm92aWRlIGdldG1vZGUgYW5kIHNldG1vZGUsIGFuZCBkb2Vzbid0CisJICAgYXV0b21hdGljYWxseSBmb2xsb3dzIHRoZSBzdGVyZW8gY2FycmllciwgYSBrdGhyZWFkIGlzCisJICAgY3JlYXRlZCB0byBzZXQgdGhlIGF1ZGlvIHN0YW5kYXJkLiBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlbgorCSAgIHRoZSB2aWRlbyBjaGFubmVsIGlzIGNoYW5nZWQsIHR2YXVkaW8gc3RhcnRzIG9uIE1PTk8gbW9kZS4KKwkgICBBZnRlciB3YWl0aW5nIGZvciAyIHNlY29uZHMsIHRoZSBrZXJuZWwgdGhyZWFkIGlzIGNhbGxlZCwKKwkgICB0byBmb2xsb3cgd2hhdGV2ZXIgYXVkaW8gc3RhbmRhcmQgaXMgcG9pbnRlZCBieSB0aGUKKwkgICBhdWRpbyBjYXJyaWVyLgorCSAqLworCWlmIChjaGlwLT50aHJlYWQpIHsKKwkJZGVzYy0+c2V0bW9kZShjaGlwLCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCWlmIChjaGlwLT5wcmV2bW9kZSAhPSBWNEwyX1RVTkVSX01PREVfTU9OTykKKwkJCWNoaXAtPnByZXZtb2RlID0gLTE7IC8qIHJlc2V0IHByZXZpb3VzIG1vZGUgKi8KKwkJbW9kX3RpbWVyKCZjaGlwLT53dCwgamlmZmllcyttc2Vjc190b19qaWZmaWVzKDIwMDApKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZhdWRpb19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RWQVVESU8sIDApOworfQorCitzdGF0aWMgaW50IHR2YXVkaW9fY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR2YXVkaW9fY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHR2YXVkaW9fZ19jaGlwX2lkZW50LAorCS5xdWVyeWN0cmwgPSB0dmF1ZGlvX3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gdHZhdWRpb19nX2N0cmwsCisJLnNfY3RybCA9IHR2YXVkaW9fc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdHZhdWRpb190dW5lcl9vcHMgPSB7CisJLnNfcmFkaW8gPSB0dmF1ZGlvX3NfcmFkaW8sCisJLnNfZnJlcXVlbmN5ID0gdHZhdWRpb19zX2ZyZXF1ZW5jeSwKKwkuc19zdGQgPSB0dmF1ZGlvX3Nfc3RkLAorCS5zX3R1bmVyID0gdHZhdWRpb19zX3R1bmVyLAorCS5zX3R1bmVyID0gdHZhdWRpb19nX3R1bmVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgdHZhdWRpb19hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHR2YXVkaW9fc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdHZhdWRpb19vcHMgPSB7CisJLmNvcmUgPSAmdHZhdWRpb19jb3JlX29wcywKKwkudHVuZXIgPSAmdHZhdWRpb190dW5lcl9vcHMsCisJLmF1ZGlvID0gJnR2YXVkaW9fYXVkaW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBpMmMgcmVnaXN0cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3N0YXRpYyBpbnQgdHZhdWRpb19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IENISVBTVEFURSAqY2hpcDsKKwlzdHJ1Y3QgQ0hJUERFU0MgICpkZXNjOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwlpZiAoZGVidWcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidHZhdWRpbzogVFYgYXVkaW8gZGVjb2RlciArIGF1ZGlvL3ZpZGVvIG11eCBkcml2ZXJcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJ0dmF1ZGlvOiBrbm93biBjaGlwczogIik7CisJCWZvciAoZGVzYyA9IGNoaXBsaXN0OyBkZXNjLT5uYW1lICE9IE5VTEw7IGRlc2MrKykKKwkJCXByaW50aygiJXMlcyIsIChkZXNjID09IGNoaXBsaXN0KSA/ICIiIDogIiwgIiwgZGVzYy0+bmFtZSk7CisJCXByaW50aygiXG4iKTsKKwl9CisKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJmNoaXAtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0dmF1ZGlvX29wcyk7CisKKwkvKiBmaW5kIGRlc2NyaXB0aW9uIGZvciB0aGUgY2hpcCAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImNoaXAgZm91bmQgQCAweCV4XG4iLCBjbGllbnQtPmFkZHI8PDEpOworCWZvciAoZGVzYyA9IGNoaXBsaXN0OyBkZXNjLT5uYW1lICE9IE5VTEw7IGRlc2MrKykgeworCQlpZiAoMCA9PSAqKGRlc2MtPmluc21vZG9wdCkpCisJCQljb250aW51ZTsKKwkJaWYgKGNsaWVudC0+YWRkciA8IGRlc2MtPmFkZHJfbG8gfHwKKwkJICAgIGNsaWVudC0+YWRkciA+IGRlc2MtPmFkZHJfaGkpCisJCQljb250aW51ZTsKKwkJaWYgKGRlc2MtPmNoZWNraXQgJiYgIWRlc2MtPmNoZWNraXQoY2hpcCkpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCWlmIChkZXNjLT5uYW1lID09IE5VTEwpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm8gbWF0Y2hpbmcgY2hpcCBkZXNjcmlwdGlvbiBmb3VuZFxuIik7CisJCWtmcmVlKGNoaXApOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdjRsMl9pbmZvKHNkLCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIGRlc2MtPm5hbWUsIGNsaWVudC0+YWRkcjw8MSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwlpZiAoZGVzYy0+ZmxhZ3MpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibWF0Y2hlczolcyVzJXMuXG4iLAorCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSAgICAgPyAiIHZvbHVtZSIgICAgICA6ICIiLAorCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkgPyAiIGJhc3MvdHJlYmxlIiA6ICIiLAorCQkJKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpICAgPyAiIGF1ZGlvbXV4IiAgICA6ICIiKTsKKwl9CisKKwkvKiBmaWxsIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyAqLworCWlmICghaWQpCisJCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBkZXNjLT5uYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwljaGlwLT5kZXNjID0gZGVzYzsKKwljaGlwLT5zaGFkb3cuY291bnQgPSBkZXNjLT5yZWdpc3RlcnMrMTsKKwljaGlwLT5wcmV2bW9kZSA9IC0xOworCWNoaXAtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CisKKwkvKiBpbml0aWFsaXphdGlvbiAgKi8KKwlpZiAoZGVzYy0+aW5pdGlhbGl6ZSAhPSBOVUxMKQorCQlkZXNjLT5pbml0aWFsaXplKGNoaXApOworCWVsc2UKKwkJY2hpcF9jbWQoY2hpcCwgImluaXQiLCAmZGVzYy0+aW5pdCk7CisKKwlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpIHsKKwkJaWYgKCFkZXNjLT52b2xmdW5jKSB7CisJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZworCQkJICAgd2l0aG91dCB2b2x1bWUgY29udHJvbHMKKwkJCSAqLworCQkJdjRsMl9pbmZvKHNkLCAidm9sdW1lIGNhbGxiYWNrIHVuZGVmaW5lZCFcbiIpOworCQkJZGVzYy0+ZmxhZ3MgJj0gfkNISVBfSEFTX1ZPTFVNRTsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPmxlZnQgID0gZGVzYy0+bGVmdGluaXQgID8gZGVzYy0+bGVmdGluaXQgIDogNjU1MzU7CisJCQljaGlwLT5yaWdodCA9IGRlc2MtPnJpZ2h0aW5pdCA/IGRlc2MtPnJpZ2h0aW5pdCA6IDY1NTM1OworCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT5sZWZ0cmVnLAorCQkJCSAgIGRlc2MtPnZvbGZ1bmMoY2hpcC0+bGVmdCkpOworCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT5yaWdodHJlZywKKwkJCQkgICBkZXNjLT52b2xmdW5jKGNoaXAtPnJpZ2h0KSk7CisJCX0KKwl9CisJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkgeworCQlpZiAoIWRlc2MtPmJhc3NmdW5jIHx8ICFkZXNjLT50cmVibGVmdW5jKSB7CisJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZworCQkJICAgd2l0aG91dCBiYXNzL3RyZWJsZSBjb250cm9scworCQkJICovCisJCQl2NGwyX2luZm8oc2QsICJiYXNzL3RyZWJsZSBjYWxsYmFja3MgdW5kZWZpbmVkIVxuIik7CisJCQlkZXNjLT5mbGFncyAmPSB+Q0hJUF9IQVNfQkFTU1RSRUJMRTsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPnRyZWJsZSA9IGRlc2MtPnRyZWJsZWluaXQgPworCQkJCQkJZGVzYy0+dHJlYmxlaW5pdCA6IDMyNzY4OworCQkJY2hpcC0+YmFzcyAgID0gZGVzYy0+YmFzc2luaXQgICA/CisJCQkJCQlkZXNjLT5iYXNzaW5pdCAgIDogMzI3Njg7CisJCQljaGlwX3dyaXRlKGNoaXAsIGRlc2MtPmJhc3NyZWcsCisJCQkJICAgZGVzYy0+YmFzc2Z1bmMoY2hpcC0+YmFzcykpOworCQkJY2hpcF93cml0ZShjaGlwLCBkZXNjLT50cmVibGVyZWcsCisJCQkJICAgZGVzYy0+dHJlYmxlZnVuYyhjaGlwLT50cmVibGUpKTsKKwkJfQorCX0KKworCWNoaXAtPnRocmVhZCA9IE5VTEw7CisJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9ORUVEX0NIRUNLTU9ERSkgeworCQlpZiAoIWRlc2MtPmdldG1vZGUgfHwgIWRlc2MtPnNldG1vZGUpIHsKKwkJCS8qIFRoaXMgc2hvdWxkbid0IGJlIGhhcHBlbi4gV2FybiB1c2VyLCBidXQga2VlcCB3b3JraW5nCisJCQkgICB3aXRob3V0IGt0aHJlYWQKKwkJCSAqLworCQkJdjRsMl9pbmZvKHNkLCAic2V0L2dldCBtb2RlIGNhbGxiYWNrcyB1bmRlZmluZWQhXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIHN0YXJ0IGFzeW5jIHRocmVhZCAqLworCQlpbml0X3RpbWVyKCZjaGlwLT53dCk7CisJCWNoaXAtPnd0LmZ1bmN0aW9uID0gY2hpcF90aHJlYWRfd2FrZTsKKwkJY2hpcC0+d3QuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyljaGlwOworCQljaGlwLT50aHJlYWQgPSBrdGhyZWFkX3J1bihjaGlwX3RocmVhZCwgY2hpcCwgY2xpZW50LT5uYW1lKTsKKwkJaWYgKElTX0VSUihjaGlwLT50aHJlYWQpKSB7CisJCQl2NGwyX3dhcm4oc2QsICJmYWlsZWQgdG8gY3JlYXRlIGt0aHJlYWRcbiIpOworCQkJY2hpcC0+dGhyZWFkID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dmF1ZGlvX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gdG9fc3RhdGUoc2QpOworCisJZGVsX3RpbWVyX3N5bmMoJmNoaXAtPnd0KTsKKwlpZiAoY2hpcC0+dGhyZWFkKSB7CisJCS8qIHNodXRkb3duIGFzeW5jIHRocmVhZCAqLworCQlrdGhyZWFkX3N0b3AoY2hpcC0+dGhyZWFkKTsKKwkJY2hpcC0+dGhyZWFkID0gTlVMTDsKKwl9CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHZhdWRpb19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCS8qIGRvbid0IGF0dGFjaCBvbiBzYWE3MTQ2IGJhc2VkIGNhcmRzLAogCSAgIGJlY2F1c2UgZGVkaWNhdGVkIGRyaXZlcnMgYXJlIHVzZWQgKi8KQEAgLTE4OTQsMTggKzE5NTMsMTggQEAKIC8qIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG1hbnkgZGV2aWNlcyBhbmQgdGhlIGlkZWEgaXMgdG8gbGV0IHRoZSBkcml2ZXIKICAgIGRldGVjdCB3aGljaCBkZXZpY2UgaXMgcHJlc2VudC4gU28gcmF0aGVyIHRoYW4gbGlzdGluZyBhbGwgc3VwcG9ydGVkCiAgICBkZXZpY2VzIGhlcmUsIHdlIHByZXRlbmQgdG8gc3VwcG9ydCBhIHNpbmdsZSwgZmFrZSBkZXZpY2UgdHlwZS4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBjaGlwX2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZhdWRpb19pZFtdID0gewogCXsgInR2YXVkaW8iLCAwIH0sCiAJeyB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNoaXBfaWQpOworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2YXVkaW9faWQpOwogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidHZhdWRpbyIsCiAJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RWQVVESU8sCi0JLmNvbW1hbmQgPSBjaGlwX2NvbW1hbmQsCi0JLnByb2JlID0gY2hpcF9wcm9iZSwKLQkucmVtb3ZlID0gY2hpcF9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IGNoaXBfbGVnYWN5X3Byb2JlLAotCS5pZF90YWJsZSA9IGNoaXBfaWQsCisJLmNvbW1hbmQgPSB0dmF1ZGlvX2NvbW1hbmQsCisJLnByb2JlID0gdHZhdWRpb19wcm9iZSwKKwkucmVtb3ZlID0gdHZhdWRpb19yZW1vdmUsCisJLmxlZ2FjeV9wcm9iZSA9IHR2YXVkaW9fbGVnYWN5X3Byb2JlLAorCS5pZF90YWJsZSA9IHR2YXVkaW9faWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlhYTQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKQEAgLTAsMCArMSwxNTY5IEBACisvKgorICogZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKKyAqCisgKiBUSSBUVlA1MTQ2LzQ3IGRlY29kZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIFNpdmFyYWogUiA8c2l2YXJhakB0aS5jb20+CisgKiAgICAgQnJpamVzaCBSIEphZGF2IDxicmlqZXNoLmpAdGkuY29tPgorICogICAgIEhhcmRpayBTaGFoIDxoYXJkaWsuc2hhaEB0aS5jb20+CisgKiAgICAgTWFuanVuYXRoIEhhZGxpIDxtcmhAdGkuY29tPgorICogICAgIEthcmljaGVyaSBNdXJhbGlkaGFyYW4gPG0ta2FyaWNoZXJpMkB0aS5jb20+CisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW50LWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3R2cDUxNHguaD4KKworI2luY2x1ZGUgInR2cDUxNHhfcmVncy5oIgorCisvKiBNb2R1bGUgTmFtZSAqLworI2RlZmluZSBUVlA1MTRYX01PRFVMRV9OQU1FCQkidHZwNTE0eCIKKworLyogUHJpdmF0ZSBtYWNyb3MgZm9yIFRWUCAqLworI2RlZmluZSBJMkNfUkVUUllfQ09VTlQgICAgICAgICAgICAgICAgICg1KQorI2RlZmluZSBMT0NLX1JFVFJZX0NPVU5UICAgICAgICAgICAgICAgICg1KQorI2RlZmluZSBMT0NLX1JFVFJZX0RFTEFZICAgICAgICAgICAgICAgICgyMDApCisKKy8qIERlYnVnIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKKworI2RlZmluZSBkdW1wX3JlZyhjbGllbnQsIHJlZywgdmFsKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXZhbCA9IHR2cDUxNHhfcmVhZF9yZWcoY2xpZW50LCByZWcpOwkJXAorCQl2NGxfaW5mbyhjbGllbnQsICJSZWcoMHglLjJYKTogMHglLjJYXG4iLCByZWcsIHZhbCk7IFwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIGVudW0gdHZwNTE0eF9zdGQgLSBlbnVtIGZvciBzdXBwb3J0ZWQgc3RhbmRhcmRzCisgKi8KK2VudW0gdHZwNTE0eF9zdGQgeworCVNURF9OVFNDX01KID0gMCwKKwlTVERfUEFMX0JER0hJTiwKKwlTVERfSU5WQUxJRAorfTsKKworLyoqCisgKiBlbnVtIHR2cDUxNHhfc3RhdGUgLSBlbnVtIGZvciBkaWZmZXJlbnQgZGVjb2RlciBzdGF0ZXMKKyAqLworZW51bSB0dnA1MTR4X3N0YXRlIHsKKwlTVEFURV9OT1RfREVURUNURUQsCisJU1RBVEVfREVURUNURUQKK307CisKKy8qKgorICogc3RydWN0IHR2cDUxNHhfc3RkX2luZm8gLSBTdHJ1Y3R1cmUgdG8gc3RvcmUgc3RhbmRhcmQgaW5mb3JtYXRpb25zCisgKiBAd2lkdGg6IExpbmUgd2lkdGggaW4gcGl4ZWxzCisgKiBAaGVpZ2h0Ok51bWJlciBvZiBhY3RpdmUgbGluZXMKKyAqIEB2aWRlb19zdGQ6IFZhbHVlIHRvIHdyaXRlIGluIFJFR19WSURFT19TVEQgcmVnaXN0ZXIKKyAqIEBzdGFuZGFyZDogdjRsMiBzdGFuZGFyZCBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IHR2cDUxNHhfc3RkX2luZm8geworCXVuc2lnbmVkIGxvbmcgd2lkdGg7CisJdW5zaWduZWQgbG9uZyBoZWlnaHQ7CisJdTggdmlkZW9fc3RkOworCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHN0YW5kYXJkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVkIC0gVFZQNTE0Ni80NyBkZWNvZGVyIG9iamVjdAorICogQHY0bDJfaW50X2RldmljZTogU2xhdmUgaGFuZGxlCisgKiBAcGRhdGE6IEJvYXJkIHNwZWNpZmljCisgKiBAY2xpZW50OiBJMkMgY2xpZW50IGRhdGEKKyAqIEBpZDogRW50cnkgZnJvbSBJMkMgdGFibGUKKyAqIEB2ZXI6IENoaXAgdmVyc2lvbgorICogQHN0YXRlOiBUVlA1MTQ2LzQ3IGRlY29kZXIgc3RhdGUgLSBkZXRlY3RlZCBvciBub3QtZGV0ZWN0ZWQKKyAqIEBwaXg6IEN1cnJlbnQgcGl4ZWwgZm9ybWF0CisgKiBAbnVtX2ZtdHM6IE51bWJlciBvZiBmb3JtYXRzCisgKiBAZm10X2xpc3Q6IEZvcm1hdCBsaXN0CisgKiBAY3VycmVudF9zdGQ6IEN1cnJlbnQgc3RhbmRhcmQKKyAqIEBudW1fc3RkczogTnVtYmVyIG9mIHN0YW5kYXJkcworICogQHN0ZF9saXN0OiBTdGFuZGFyZHMgbGlzdAorICogQHJvdXRlOiBpbnB1dCBhbmQgb3V0cHV0IHJvdXRpbmcgYXQgY2hpcCBsZXZlbAorICovCitzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHsKKwlzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICp2NGwyX2ludF9kZXZpY2U7CisJY29uc3Qgc3RydWN0IHR2cDUxNHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCXN0cnVjdCBpMmNfZGV2aWNlX2lkICppZDsKKworCWludCB2ZXI7CisJZW51bSB0dnA1MTR4X3N0YXRlIHN0YXRlOworCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CisJaW50IG51bV9mbXRzOworCWNvbnN0IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdF9saXN0OworCisJZW51bSB0dnA1MTR4X3N0ZCBjdXJyZW50X3N0ZDsKKwlpbnQgbnVtX3N0ZHM7CisJc3RydWN0IHR2cDUxNHhfc3RkX2luZm8gKnN0ZF9saXN0OworCisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKK307CisKKy8qIFRWUDUxNHggZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdFtdID0geworCXtUT0tfV1JJVEUsIFJFR19JTlBVVF9TRUwsIDB4MDV9LAkvKiBDb21wb3NpdGUgc2VsZWN0ZWQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfQUZFX0dBSU5fQ1RSTCwgMHgwRn0sCisJe1RPS19XUklURSwgUkVHX1ZJREVPX1NURCwgMHgwMH0sCS8qIEF1dG8gbW9kZSAqLworCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMH0sCisJe1RPS19TS0lQLCBSRUdfQVVUT1NXSVRDSF9NQVNLLCAweDNGfSwKKwl7VE9LX1dSSVRFLCBSRUdfQ09MT1JfS0lMTEVSLCAweDEwfSwKKwl7VE9LX1dSSVRFLCBSRUdfTFVNQV9DT05UUk9MMSwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX0xVTUFfQ09OVFJPTDIsIDB4MDB9LAorCXtUT0tfV1JJVEUsIFJFR19MVU1BX0NPTlRST0wzLCAweDAyfSwKKwl7VE9LX1dSSVRFLCBSRUdfQlJJR0hUTkVTUywgMHg4MH0sCisJe1RPS19XUklURSwgUkVHX0NPTlRSQVNULCAweDgwfSwKKwl7VE9LX1dSSVRFLCBSRUdfU0FUVVJBVElPTiwgMHg4MH0sCisJe1RPS19XUklURSwgUkVHX0hVRSwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX0NIUk9NQV9DT05UUk9MMSwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX0NIUk9NQV9DT05UUk9MMiwgMHgwRX0sCisJe1RPS19TS0lQLCAweDBGLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfQ09NUF9QUl9TQVRVUkFUSU9OLCAweDgwfSwKKwl7VE9LX1dSSVRFLCBSRUdfQ09NUF9ZX0NPTlRSQVNULCAweDgwfSwKKwl7VE9LX1dSSVRFLCBSRUdfQ09NUF9QQl9TQVRVUkFUSU9OLCAweDgwfSwKKwl7VE9LX1NLSVAsIDB4MTMsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCXtUT0tfV1JJVEUsIFJFR19DT01QX1lfQlJJR0hUTkVTUywgMHg4MH0sCisJe1RPS19TS0lQLCAweDE1LCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIFJFR19BVklEX1NUQVJUX1BJWEVMX0xTQiwgMHg1NX0sCS8qIE5UU0MgdGltaW5nICovCisJe1RPS19TS0lQLCBSRUdfQVZJRF9TVEFSVF9QSVhFTF9NU0IsIDB4MDB9LAorCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RPUF9QSVhFTF9MU0IsIDB4MjV9LAorCXtUT0tfU0tJUCwgUkVHX0FWSURfU1RPUF9QSVhFTF9NU0IsIDB4MDN9LAorCXtUT0tfU0tJUCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX0xTQiwgMHgwMH0sCS8qIE5UU0MgdGltaW5nICovCisJe1RPS19TS0lQLCBSRUdfSFNZTkNfU1RBUlRfUElYRUxfTVNCLCAweDAwfSwKKwl7VE9LX1NLSVAsIFJFR19IU1lOQ19TVE9QX1BJWEVMX0xTQiwgMHg0MH0sCisJe1RPS19TS0lQLCBSRUdfSFNZTkNfU1RPUF9QSVhFTF9NU0IsIDB4MDB9LAorCXtUT0tfU0tJUCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTFNCLCAweDA0fSwJLyogTlRTQyB0aW1pbmcgKi8KKwl7VE9LX1NLSVAsIFJFR19WU1lOQ19TVEFSVF9MSU5FX01TQiwgMHgwMH0sCisJe1RPS19TS0lQLCBSRUdfVlNZTkNfU1RPUF9MSU5FX0xTQiwgMHgwN30sCisJe1RPS19TS0lQLCBSRUdfVlNZTkNfU1RPUF9MSU5FX01TQiwgMHgwMH0sCisJe1RPS19TS0lQLCBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQiwgMHgwMX0sCS8qIE5UU0MgdGltaW5nICovCisJe1RPS19TS0lQLCBSRUdfVkJMS19TVEFSVF9MSU5FX01TQiwgMHgwMH0sCisJe1RPS19TS0lQLCBSRUdfVkJMS19TVE9QX0xJTkVfTFNCLCAweDE1fSwKKwl7VE9LX1NLSVAsIFJFR19WQkxLX1NUT1BfTElORV9NU0IsIDB4MDB9LAorCXtUT0tfU0tJUCwgMHgyNiwgMHgwMH0sCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDI3LCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1NLSVAsIFJFR19GQVNUX1NXVElDSF9DT05UUk9MLCAweENDfSwKKwl7VE9LX1NLSVAsIDB4MjksIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgUkVHX0ZBU1RfU1dUSUNIX1NDQVJUX0RFTEFZLCAweDAwfSwKKwl7VE9LX1NLSVAsIDB4MkIsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgUkVHX1NDQVJUX0RFTEFZLCAweDAwfSwKKwl7VE9LX1NLSVAsIFJFR19DVElfREVMQVksIDB4MDB9LAorCXtUT0tfU0tJUCwgUkVHX0NUSV9DT05UUk9MLCAweDAwfSwKKwl7VE9LX1NLSVAsIDB4MkYsIDB4MDB9LAkvKiBSZXNlcnZlZCAqLworCXtUT0tfU0tJUCwgMHgzMCwgMHgwMH0sCS8qIFJlc2VydmVkICovCisJe1RPS19TS0lQLCAweDMxLCAweDAwfSwJLyogUmVzZXJ2ZWQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfU1lOQ19DT05UUk9MLCAweDAwfSwJLyogSFMsIFZTIGFjdGl2ZSBoaWdoICovCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIxLCAweDAwfSwJLyogMTAtYml0IEJULjY1NiAqLworCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSMiwgMHgxMX0sCS8qIEVuYWJsZSBjbGsgJiBkYXRhICovCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVIzLCAweEVFfSwJLyogRW5hYmxlIEFWSUQgJiBGTEQgKi8KKwl7VE9LX1dSSVRFLCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQsIDB4QUZ9LAkvKiBFbmFibGUgVlMgJiBIUyAqLworCXtUT0tfV1JJVEUsIFJFR19PVVRQVVRfRk9STUFUVEVSNSwgMHhGRn0sCisJe1RPS19XUklURSwgUkVHX09VVFBVVF9GT1JNQVRURVI2LCAweEZGfSwKKwl7VE9LX1dSSVRFLCBSRUdfQ0xFQVJfTE9TVF9MT0NLLCAweDAxfSwJLyogQ2xlYXIgc3RhdHVzICovCisJe1RPS19URVJNLCAwLCAwfSwKK307CisKKy8qIExpc3Qgb2YgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgVFZQNTE0Ni80NyBkZWNvZGVyCisgKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIDggYml0IG1vZGUgb25seSwgYnV0IGNhbiBiZQorICogZXh0ZW5kZWQgdG8gMTAvMjAgYml0IG1vZGUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHR2cDUxNHhfZm10X2xpc3RbXSA9IHsKKwl7CisJIC5pbmRleCA9IDAsCisJIC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCSAuZmxhZ3MgPSAwLAorCSAuZGVzY3JpcHRpb24gPSAiOC1iaXQgVVlWWSA0OjI6MiBGb3JtYXQiLAorCSAucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwl9LAorfTsKKworLyoKKyAqIFN1cHBvcnRlZCBzdGFuZGFyZHMgLQorICoKKyAqIEN1cnJlbnRseSBzdXBwb3J0cyB0d28gc3RhbmRhcmRzIG9ubHksIG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHJlc3Qgb2YgdGhlCisgKiBtb2RlcywgbGlrZSBTRUNBTSwgZXRjLi4uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9zdGRfaW5mbyB0dnA1MTR4X3N0ZF9saXN0W10gPSB7CisJLyogU3RhbmRhcmQ6IFNURF9OVFNDX01KICovCisJW1NURF9OVFNDX01KXSA9IHsKKwkgLndpZHRoID0gTlRTQ19OVU1fQUNUSVZFX1BJWEVMUywKKwkgLmhlaWdodCA9IE5UU0NfTlVNX0FDVElWRV9MSU5FUywKKwkgLnZpZGVvX3N0ZCA9IFZJREVPX1NURF9OVFNDX01KX0JJVCwKKwkgLnN0YW5kYXJkID0geworCQkgICAgICAuaW5kZXggPSAwLAorCQkgICAgICAuaWQgPSBWNEwyX1NURF9OVFNDLAorCQkgICAgICAubmFtZSA9ICJOVFNDIiwKKwkJICAgICAgLmZyYW1lcGVyaW9kID0gezEwMDEsIDMwMDAwfSwKKwkJICAgICAgLmZyYW1lbGluZXMgPSA1MjUKKwkJICAgICB9LAorCS8qIFN0YW5kYXJkOiBTVERfUEFMX0JER0hJTiAqLworCX0sCisJW1NURF9QQUxfQkRHSElOXSA9IHsKKwkgLndpZHRoID0gUEFMX05VTV9BQ1RJVkVfUElYRUxTLAorCSAuaGVpZ2h0ID0gUEFMX05VTV9BQ1RJVkVfTElORVMsCisJIC52aWRlb19zdGQgPSBWSURFT19TVERfUEFMX0JER0hJTl9CSVQsCisJIC5zdGFuZGFyZCA9IHsKKwkJICAgICAgLmluZGV4ID0gMSwKKwkJICAgICAgLmlkID0gVjRMMl9TVERfUEFMLAorCQkgICAgICAubmFtZSA9ICJQQUwiLAorCQkgICAgICAuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCQkgICAgICAuZnJhbWVsaW5lcyA9IDYyNQorCQkgICAgIH0sCisJfSwKKwkvKiBTdGFuZGFyZDogbmVlZCB0byBhZGQgZm9yIGFkZGl0aW9uYWwgc3RhbmRhcmQgKi8KK307CisvKgorICogQ29udHJvbCBzdHJ1Y3R1cmUgZm9yIEF1dG8gR2FpbgorICogICAgIFRoaXMgaXMgdGVtcG9yYXJ5IGRhdGEsIHdpbGwgZ2V0IHJlcGxhY2VkIG9uY2UKKyAqICAgICB2NGwyX2N0cmxfcXVlcnlfZmlsbCBzdXBwb3J0cyBpdC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB0dnA1MTR4X2F1dG9nYWluX2N0cmwgPSB7CisJLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCisJLm5hbWUgPSAiR2FpbiwgQXV0b21hdGljIiwKKwkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJLm1pbmltdW0gPSAwLAorCS5tYXhpbXVtID0gMSwKKwkuc3RlcCA9IDEsCisJLmRlZmF1bHRfdmFsdWUgPSAxLAorfTsKKworLyoKKyAqIFJlYWQgYSB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXIgaW4gYW4gVFZQNTE0Ni80NyBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgdmFsdWUgcmVhZCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyAoLTEpIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0dnA1MTR4X3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwlpbnQgZXJyOworCWludCByZXRyeSA9IDA7CityZWFkX2FnYWluOgorCisJZXJyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAoZXJyID09IC0xKSB7CisJCWlmIChyZXRyeSA8PSBJMkNfUkVUUllfQ09VTlQpIHsKKwkJCXY0bF93YXJuKGNsaWVudCwgIlJlYWQ6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQkJcmV0cnkrKzsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJCWdvdG8gcmVhZF9hZ2FpbjsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBXcml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gYW4gVFZQNTE0Ni80NyBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdHZwNTE0eF93cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCit7CisJaW50IGVycjsKKwlpbnQgcmV0cnkgPSAwOword3JpdGVfYWdhaW46CisKKwllcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCWlmIChlcnIpIHsKKwkJaWYgKHJldHJ5IDw9IEkyQ19SRVRSWV9DT1VOVCkgeworCQkJdjRsX3dhcm4oY2xpZW50LCAiV3JpdGU6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQkJcmV0cnkrKzsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJCWdvdG8gd3JpdGVfYWdhaW47CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdHZwNTE0eF93cml0ZV9yZWdzIDogSW5pdGlhbGl6ZXMgYSBsaXN0IG9mIFRWUDUxNDYvNDcgcmVnaXN0ZXJzCisgKgkJaWYgdG9rZW4gaXMgVE9LX1RFUk0sIHRoZW4gZW50aXJlIHdyaXRlIG9wZXJhdGlvbiB0ZXJtaW5hdGVzCisgKgkJaWYgdG9rZW4gaXMgVE9LX0RFTEFZLCB0aGVuIGEgZGVsYXkgb2YgJ3ZhbCcgbXNlYyBpcyBpbnRyb2R1Y2VkCisgKgkJaWYgdG9rZW4gaXMgVE9LX1NLSVAsIHRoZW4gdGhlIHJlZ2lzdGVyIHdyaXRlIGlzIHNraXBwZWQKKyAqCQlpZiB0b2tlbiBpcyBUT0tfV1JJVEUsIHRoZW4gdGhlIHJlZ2lzdGVyIHdyaXRlIGlzIHBlcmZvcm1lZAorICoKKyAqIHJlZ2xpc3QgLSBsaXN0IG9mIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHR2cDUxNHhfd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnIHJlZ2xpc3RbXSkKK3sKKwlpbnQgZXJyOworCWNvbnN0IHN0cnVjdCB0dnA1MTR4X3JlZyAqbmV4dCA9IHJlZ2xpc3Q7CisKKwlmb3IgKDsgbmV4dC0+dG9rZW4gIT0gVE9LX1RFUk07IG5leHQrKykgeworCQlpZiAobmV4dC0+dG9rZW4gPT0gVE9LX0RFTEFZKSB7CisJCQltc2xlZXAobmV4dC0+dmFsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG5leHQtPnRva2VuID09IFRPS19TS0lQKQorCQkJY29udGludWU7CisKKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoY2xpZW50LCBuZXh0LT5yZWcsICh1OCkgbmV4dC0+dmFsKTsKKwkJaWYgKGVycikgeworCQkJdjRsX2VycihjbGllbnQsICJXcml0ZSBmYWlsZWQuIEVyclslZF1cbiIsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogdHZwNTE0eF9nZXRfY3VycmVudF9zdGQ6CisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YW5kYXJkIGRldGVjdGVkIGJ5IFRWUDUxNDYvNDcKKyAqLworc3RhdGljIGVudW0gdHZwNTE0eF9zdGQgdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoc3RydWN0IHR2cDUxNHhfZGVjb2RlcgorCQkJCQkJKmRlY29kZXIpCit7CisJdTggc3RkLCBzdGRfc3RhdHVzOworCisJc3RkID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WSURFT19TVEQpOworCWlmICgoc3RkICYgVklERU9fU1REX01BU0spID09IFZJREVPX1NURF9BVVRPX1NXSVRDSF9CSVQpIHsKKwkJLyogdXNlIHRoZSBzdGFuZGFyZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJc3RkX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LAorCQkJCVJFR19WSURFT19TVERfU1RBVFVTKTsKKwl9IGVsc2UKKwkJc3RkX3N0YXR1cyA9IHN0ZDsJLyogdXNlIHRoZSBzdGFuZGFyZCByZWdpc3RlciBpdHNlbGYgKi8KKworCXN3aXRjaCAoc3RkX3N0YXR1cyAmIFZJREVPX1NURF9NQVNLKSB7CisJY2FzZSBWSURFT19TVERfTlRTQ19NSl9CSVQ6CisJCXJldHVybiBTVERfTlRTQ19NSjsKKworCWNhc2UgVklERU9fU1REX1BBTF9CREdISU5fQklUOgorCQlyZXR1cm4gU1REX1BBTF9CREdISU47CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gU1REX0lOVkFMSUQ7CisJfQorCisJcmV0dXJuIFNURF9JTlZBTElEOworfQorCisvKgorICogVFZQNTE0Ni80NyByZWdpc3RlciBkdW1wIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHR2cDUxNHhfcmVnX2R1bXAoc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKK3sKKwl1OCB2YWx1ZTsKKworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0lOUFVUX1NFTCwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FGRV9HQUlOX0NUUkwsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WSURFT19TVEQsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PUEVSQVRJT05fTU9ERSwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NPTE9SX0tJTExFUiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0xVTUFfQ09OVFJPTDEsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19MVU1BX0NPTlRST0wyLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfTFVNQV9DT05UUk9MMywgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0JSSUdIVE5FU1MsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT05UUkFTVCwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1NBVFVSQVRJT04sIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IVUUsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DSFJPTUFfQ09OVFJPTDEsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DSFJPTUFfQ09OVFJPTDIsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT01QX1BSX1NBVFVSQVRJT04sIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT01QX1lfQ09OVFJBU1QsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT01QX1BCX1NBVFVSQVRJT04sIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT01QX1lfQlJJR0hUTkVTUywgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0FWSURfU1RBUlRfUElYRUxfTFNCLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQVZJRF9TVEFSVF9QSVhFTF9NU0IsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BVklEX1NUT1BfUElYRUxfTFNCLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfQVZJRF9TVE9QX1BJWEVMX01TQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX0xTQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hTWU5DX1NUQVJUX1BJWEVMX01TQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0hTWU5DX1NUT1BfUElYRUxfTFNCLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfSFNZTkNfU1RPUF9QSVhFTF9NU0IsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WU1lOQ19TVEFSVF9MSU5FX0xTQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTVNCLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVlNZTkNfU1RPUF9MSU5FX0xTQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZTWU5DX1NUT1BfTElORV9NU0IsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WQkxLX1NUQVJUX0xJTkVfTFNCLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfVkJMS19TVEFSVF9MSU5FX01TQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZCTEtfU1RPUF9MSU5FX0xTQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1ZCTEtfU1RPUF9MSU5FX01TQiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX1NZTkNfQ09OVFJPTCwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVIxLCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjIsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSMywgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVI0LCB2YWx1ZSk7CisJZHVtcF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfT1VUUFVUX0ZPUk1BVFRFUjUsIHZhbHVlKTsKKwlkdW1wX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PVVRQVVRfRk9STUFUVEVSNiwgdmFsdWUpOworCWR1bXBfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NMRUFSX0xPU1RfTE9DSywgdmFsdWUpOworfQorCisvKgorICogQ29uZmlndXJlIHRoZSBUVlA1MTQ2LzQ3IHdpdGggdGhlIGN1cnJlbnQgcmVnaXN0ZXIgc2V0dGluZ3MKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdHZwNTE0eF9jb25maWd1cmUoc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlcikKK3sKKwlpbnQgZXJyOworCisJLyogY29tbW9uIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisJZXJyID0KKwkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgdHZwNTE0eF9yZWdfbGlzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChkZWJ1ZykKKwkJdHZwNTE0eF9yZWdfZHVtcChkZWNvZGVyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogRGV0ZWN0IGlmIGFuIHR2cDUxNHggaXMgcHJlc2VudCwgYW5kIGlmIHNvIHdoaWNoIHJldmlzaW9uLgorICogQSBkZXZpY2UgaXMgY29uc2lkZXJlZCB0byBiZSBkZXRlY3RlZCBpZiB0aGUgY2hpcCBJRCAoTFNCIGFuZCBNU0IpCisgKiByZWdpc3RlcnMgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlcy4KKyAqIEFueSB2YWx1ZSBvZiB0aGUgcm9tIHZlcnNpb24gcmVnaXN0ZXIgaXMgYWNjZXB0ZWQuCisgKiBSZXR1cm5zIEVOT0RFViBlcnJvciBudW1iZXIgaWYgbm8gZGV2aWNlIGlzIGRldGVjdGVkLCBvciB6ZXJvCisgKiBpZiBhIGRldmljZSBpcyBkZXRlY3RlZC4KKyAqLworc3RhdGljIGludCB0dnA1MTR4X2RldGVjdChzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyKQoreworCXU4IGNoaXBfaWRfbXNiLCBjaGlwX2lkX2xzYiwgcm9tX3ZlcjsKKworCWNoaXBfaWRfbXNiID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DSElQX0lEX01TQik7CisJY2hpcF9pZF9sc2IgPSB0dnA1MTR4X3JlYWRfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NISVBfSURfTFNCKTsKKwlyb21fdmVyID0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19ST01fVkVSU0lPTik7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCisJCSAiY2hpcCBpZCBkZXRlY3RlZCBtc2I6MHgleCBsc2I6MHgleCByb20gdmVyc2lvbjoweCV4XG4iLAorCQkgY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiLCByb21fdmVyKTsKKwlpZiAoKGNoaXBfaWRfbXNiICE9IFRWUDUxNFhfQ0hJUF9JRF9NU0IpCisJCXx8ICgoY2hpcF9pZF9sc2IgIT0gVFZQNTE0Nl9DSElQX0lEX0xTQikKKwkJJiYgKGNoaXBfaWRfbHNiICE9IFRWUDUxNDdfQ0hJUF9JRF9MU0IpKSkgeworCQkvKiBXZSBkaWRuJ3QgcmVhZCB0aGUgdmFsdWVzIHdlIGV4cGVjdGVkLCBzbyB0aGlzIG11c3Qgbm90IGJlCisJCSAqIGFuIFRWUDUxNDYvNDcuCisJCSAqLworCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKKwkJCSJjaGlwIGlkIG1pc21hdGNoIG1zYjoweCV4IGxzYjoweCV4XG4iLAorCQkJY2hpcF9pZF9tc2IsIGNoaXBfaWRfbHNiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGVjb2Rlci0+dmVyID0gcm9tX3ZlcjsKKwlkZWNvZGVyLT5zdGF0ZSA9IFNUQVRFX0RFVEVDVEVEOworCisJdjRsX2luZm8oZGVjb2Rlci0+Y2xpZW50LAorCQkJIiVzIGZvdW5kIGF0IDB4JXggKCVzKVxuIiwgZGVjb2Rlci0+Y2xpZW50LT5uYW1lLAorCQkJZGVjb2Rlci0+Y2xpZW50LT5hZGRyIDw8IDEsCisJCQlkZWNvZGVyLT5jbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogRm9sbG93aW5nIGFyZSBkZWNvZGVyIGludGVyZmFjZSBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgYnkKKyAqIFRWUDUxNDYvNDcgZGVjb2RlciBkcml2ZXIuCisgKi8KKworLyoqCisgKiBpb2N0bF9xdWVyeXN0ZCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1FVRVJZU1REIGlvY3RsCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGRfaWQ6IHN0YW5kYXJkIFY0TDIgc3RkX2lkIGlvY3RsIGVudW0KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YW5kYXJkIGRldGVjdGVkIGJ5IFRWUDUxNDYvNDcuIElmIG5vIGFjdGl2ZSBpbnB1dCBpcworICogZGV0ZWN0ZWQsIHJldHVybnMgLUVJTlZBTAorICovCitzdGF0aWMgaW50IGlvY3RsX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJZW51bSB0dnA1MTR4X3N0ZCBjdXJyZW50X3N0ZDsKKwllbnVtIHR2cDUxNHhfaW5wdXQgaW5wdXRfc2VsOworCXU4IHN5bmNfbG9ja19zdGF0dXMsIGxvY2tfbWFzazsKKworCWlmIChzdGRfaWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgKi8KKwljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKGRlY29kZXIpOworCWlmIChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnB1dF9zZWwgPSBkZWNvZGVyLT5yb3V0ZS5pbnB1dDsKKworCXN3aXRjaCAoaW5wdXRfc2VsKSB7CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUE6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUI6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUM6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkE6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkI6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkM6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0E6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0I6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0M6CisJY2FzZSBJTlBVVF9DVkJTX1ZJNEE6CisJCWxvY2tfbWFzayA9IFNUQVRVU19DTFJfU1VCQ0FSX0xPQ0tfQklUIHwKKwkJCVNUQVRVU19IT1JaX1NZTkNfTE9DS19CSVQgfAorCQkJU1RBVFVTX1ZJUlRfU1lOQ19MT0NLX0JJVDsKKwkJYnJlYWs7CisKKwljYXNlIElOUFVUX1NWSURFT19WSTJBX1ZJMUE6CisJY2FzZSBJTlBVVF9TVklERU9fVkkyQl9WSTFCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJMkNfVkkxQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTJBX1ZJM0E6CisJY2FzZSBJTlBVVF9TVklERU9fVkkyQl9WSTNCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJMkNfVkkzQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTRBX1ZJMUE6CisJY2FzZSBJTlBVVF9TVklERU9fVkk0QV9WSTFCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJNEFfVkkxQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTRBX1ZJM0E6CisJY2FzZSBJTlBVVF9TVklERU9fVkk0QV9WSTNCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJNEFfVkkzQzoKKwkJbG9ja19tYXNrID0gU1RBVFVTX0hPUlpfU1lOQ19MT0NLX0JJVCB8CisJCQlTVEFUVVNfVklSVF9TWU5DX0xPQ0tfQklUOworCQlicmVhazsKKwkJLypOZWVkIHRvIGFkZCBvdGhlciBpbnRlcmZhY2VzKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogY2hlY2sgd2hldGhlciBzaWduYWwgaXMgbG9ja2VkICovCisJc3luY19sb2NrX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU1RBVFVTMSk7CisJaWYgKGxvY2tfbWFzayAhPSAoc3luY19sb2NrX3N0YXR1cyAmIGxvY2tfbWFzaykpCisJCXJldHVybiAtRUlOVkFMOwkvKiBObyBpbnB1dCBkZXRlY3RlZCAqLworCisJZGVjb2Rlci0+Y3VycmVudF9zdGQgPSBjdXJyZW50X3N0ZDsKKwkqc3RkX2lkID0gZGVjb2Rlci0+c3RkX2xpc3RbY3VycmVudF9zdGRdLnN0YW5kYXJkLmlkOworCisJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LCAiQ3VycmVudCBTVEQ6ICVzIiwKKwkJCWRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS5zdGFuZGFyZC5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpb2N0bF9zX3N0ZCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX1NfU1REIGlvY3RsCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGRfaWQ6IHN0YW5kYXJkIFY0TDIgdjRsMl9zdGRfaWQgaW9jdGwgZW51bQorICoKKyAqIElmIHN0ZF9pZCBpcyBzdXBwb3J0ZWQsIHNldHMgdGhlIHJlcXVlc3RlZCBzdGFuZGFyZC4gT3RoZXJ3aXNlLCByZXR1cm5zCisgKiAtRUlOVkFMCisgKi8KK3N0YXRpYyBpbnQgaW9jdGxfc19zdGQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlpbnQgZXJyLCBpOworCisJaWYgKHN0ZF9pZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBkZWNvZGVyLT5udW1fc3RkczsgaSsrKQorCQlpZiAoKnN0ZF9pZCAmIGRlY29kZXItPnN0ZF9saXN0W2ldLnN0YW5kYXJkLmlkKQorCQkJYnJlYWs7CisKKwlpZiAoKGkgPT0gZGVjb2Rlci0+bnVtX3N0ZHMpIHx8IChpID09IFNURF9JTlZBTElEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19WSURFT19TVEQsCisJCQkJZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZGVjb2Rlci0+Y3VycmVudF9zdGQgPSBpOworCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1ZJREVPX1NURF0udmFsID0gZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkOworCisJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LCAiU3RhbmRhcmQgc2V0IHRvOiAlcyIsCisJCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS5zdGFuZGFyZC5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpb2N0bF9zX3JvdXRpbmcgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX0lOUFVUIGlvY3RsCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpbmRleDogbnVtYmVyIG9mIHRoZSBpbnB1dAorICoKKyAqIElmIGluZGV4IGlzIHZhbGlkLCBzZWxlY3RzIHRoZSByZXF1ZXN0ZWQgaW5wdXQuIE90aGVyd2lzZSwgcmV0dXJucyAtRUlOVkFMIGlmCisgKiB0aGUgaW5wdXQgaXMgbm90IHN1cHBvcnRlZCBvciB0aGVyZSBpcyBubyBhY3RpdmUgc2lnbmFsIHByZXNlbnQgaW4gdGhlCisgKiBzZWxlY3RlZCBpbnB1dC4KKyAqLworc3RhdGljIGludCBpb2N0bF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywKKwkJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlpbnQgZXJyOworCWVudW0gdHZwNTE0eF9pbnB1dCBpbnB1dF9zZWw7CisJZW51bSB0dnA1MTR4X291dHB1dCBvdXRwdXRfc2VsOworCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQgPSBTVERfSU5WQUxJRDsKKwl1OCBzeW5jX2xvY2tfc3RhdHVzLCBsb2NrX21hc2s7CisJaW50IHRyeV9jb3VudCA9IExPQ0tfUkVUUllfQ09VTlQ7CisKKwlpZiAoKCFyb3V0ZSkgfHwgKHJvdXRlLT5pbnB1dCA+PSBJTlBVVF9JTlZBTElEKSB8fAorCQkJKHJvdXRlLT5vdXRwdXQgPj0gT1VUUFVUX0lOVkFMSUQpKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogSW5kZXggb3V0IG9mIGJvdW5kICovCisKKwlpbnB1dF9zZWwgPSByb3V0ZS0+aW5wdXQ7CisJb3V0cHV0X3NlbCA9IHJvdXRlLT5vdXRwdXQ7CisKKwllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19JTlBVVF9TRUwsIGlucHV0X3NlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW91dHB1dF9zZWwgfD0gdHZwNTE0eF9yZWFkX3JlZyhkZWNvZGVyLT5jbGllbnQsCisJCQlSRUdfT1VUUFVUX0ZPUk1BVFRFUjEpICYgMHg3OworCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX09VVFBVVF9GT1JNQVRURVIxLAorCQkJb3V0cHV0X3NlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0lOUFVUX1NFTF0udmFsID0gaW5wdXRfc2VsOworCXR2cDUxNHhfcmVnX2xpc3RbUkVHX09VVFBVVF9GT1JNQVRURVIxXS52YWwgPSBvdXRwdXRfc2VsOworCisJLyogQ2xlYXIgc3RhdHVzICovCisJbXNsZWVwKExPQ0tfUkVUUllfREVMQVkpOworCWVyciA9CisJICAgIHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0NMRUFSX0xPU1RfTE9DSywgMHgwMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAoaW5wdXRfc2VsKSB7CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUE6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUI6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMUM6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkE6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkI6CisJY2FzZSBJTlBVVF9DVkJTX1ZJMkM6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0E6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0I6CisJY2FzZSBJTlBVVF9DVkJTX1ZJM0M6CisJY2FzZSBJTlBVVF9DVkJTX1ZJNEE6CisJCWxvY2tfbWFzayA9IFNUQVRVU19DTFJfU1VCQ0FSX0xPQ0tfQklUIHwKKwkJCVNUQVRVU19IT1JaX1NZTkNfTE9DS19CSVQgfAorCQkJU1RBVFVTX1ZJUlRfU1lOQ19MT0NLX0JJVDsKKwkJYnJlYWs7CisKKwljYXNlIElOUFVUX1NWSURFT19WSTJBX1ZJMUE6CisJY2FzZSBJTlBVVF9TVklERU9fVkkyQl9WSTFCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJMkNfVkkxQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTJBX1ZJM0E6CisJY2FzZSBJTlBVVF9TVklERU9fVkkyQl9WSTNCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJMkNfVkkzQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTRBX1ZJMUE6CisJY2FzZSBJTlBVVF9TVklERU9fVkk0QV9WSTFCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJNEFfVkkxQzoKKwljYXNlIElOUFVUX1NWSURFT19WSTRBX1ZJM0E6CisJY2FzZSBJTlBVVF9TVklERU9fVkk0QV9WSTNCOgorCWNhc2UgSU5QVVRfU1ZJREVPX1ZJNEFfVkkzQzoKKwkJbG9ja19tYXNrID0gU1RBVFVTX0hPUlpfU1lOQ19MT0NLX0JJVCB8CisJCQlTVEFUVVNfVklSVF9TWU5DX0xPQ0tfQklUOworCQlicmVhazsKKwkvKk5lZWQgdG8gYWRkIG90aGVyIGludGVyZmFjZXMqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdoaWxlICh0cnlfY291bnQtLSA+IDApIHsKKwkJLyogQWxsb3cgZGVjb2RlciB0byBzeW5jIHVwIHdpdGggbmV3IGlucHV0ICovCisJCW1zbGVlcChMT0NLX1JFVFJZX0RFTEFZKTsKKworCQkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi8KKwkJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwkJaWYgKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKQorCQkJY29udGludWU7CisKKwkJc3luY19sb2NrX3N0YXR1cyA9IHR2cDUxNHhfcmVhZF9yZWcoZGVjb2Rlci0+Y2xpZW50LAorCQkJCVJFR19TVEFUVVMxKTsKKwkJaWYgKGxvY2tfbWFzayA9PSAoc3luY19sb2NrX3N0YXR1cyAmIGxvY2tfbWFzaykpCisJCQlicmVhazsJLyogSW5wdXQgZGV0ZWN0ZWQgKi8KKwl9CisKKwlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDwgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVjb2Rlci0+Y3VycmVudF9zdGQgPSBjdXJyZW50X3N0ZDsKKwlkZWNvZGVyLT5yb3V0ZS5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwlkZWNvZGVyLT5yb3V0ZS5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OworCisJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAorCQkJIklucHV0IHNldCB0bzogJWQsIHN0ZCA6ICVkIiwKKwkJCWlucHV0X3NlbCwgY3VycmVudF9zdGQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW9jdGxfcXVlcnljdHJsIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfUVVFUllDVFJMIGlvY3RsCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBxY3RybDogc3RhbmRhcmQgVjRMMiB2NGwyX3F1ZXJ5Y3RybCBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgaXMgc3VwcG9ydGVkLCByZXR1cm5zIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLgorICogT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZC4KKyAqLworc3RhdGljIGludAoraW9jdGxfcXVlcnljdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAocWN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAocWN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkvKiBCcmlnaHRuZXNzIHN1cHBvcnRlZCBpcyBzYW1lIGFzIHN0YW5kYXJkIG9uZSAoMC0yNTUpLAorCQkgKiBzbyBtYWtlIHVzZSBvZiBzdGFuZGFyZCBBUEkgcHJvdmlkZWQuCisJCSAqLworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJLyogU2F0dXJhdGlvbiBhbmQgQ29udHJhc3Qgc3VwcG9ydGVkIGlzIC0KKwkJICoJQ29udHJhc3Q6IDAgLSAyNTUgKERlZmF1bHQgLSAxMjgpCisJCSAqCVNhdHVyYXRpb246IDAgLSAyNTUgKERlZmF1bHQgLSAxMjgpCisJCSAqLworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAxMjgpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJLyogSHVlIFN1cHBvcnRlZCBpcyAtCisJCSAqCUh1ZSAtIC0xODAgLSArMTgwIChEZWZhdWx0IC0gMCwgU3RlcCAtICsxODApCisJCSAqLworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgLTE4MCwgMTgwLCAxODAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgorCQkvKiBBdXRvZ2FpbiBpcyBlaXRoZXIgMCBvciAxKi8KKwkJbWVtY3B5KHFjdHJsLCAmdHZwNTE0eF9hdXRvZ2Fpbl9jdHJsLAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwpKTsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCisJCQkiaW52YWxpZCBjb250cm9sIGlkICVkXG4iLCBxY3RybC0+aWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKKwkJCSJRdWVyeSBDb250cm9sOiAlcyA6IE1pbiAtICVkLCBNYXggLSAlZCwgRGVmIC0gJWQiLAorCQkJcWN0cmwtPm5hbWUsCisJCQlxY3RybC0+bWluaW11bSwKKwkJCXFjdHJsLT5tYXhpbXVtLAorCQkJcWN0cmwtPmRlZmF1bHRfdmFsdWUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpb2N0bF9nX2N0cmwgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19HX0NUUkwgaW9jdGwKKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogQGN0cmw6IHBvaW50ZXIgdG8gdjRsMl9jb250cm9sIHN0cnVjdHVyZQorICoKKyAqIElmIHRoZSByZXF1ZXN0ZWQgY29udHJvbCBpcyBzdXBwb3J0ZWQsIHJldHVybnMgdGhlIGNvbnRyb2wncyBjdXJyZW50CisgKiB2YWx1ZSBmcm9tIHRoZSBkZWNvZGVyLiBPdGhlcndpc2UsIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgY29udHJvbCBpcyBub3QKKyAqIHN1cHBvcnRlZC4KKyAqLworc3RhdGljIGludAoraW9jdGxfZ19jdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisKKwlpZiAoY3RybCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0NPTlRSQVNUXS52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19TQVRVUkFUSU9OXS52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0hVRV0udmFsOworCQlpZiAoY3RybC0+dmFsdWUgPT0gMHg3RikKKwkJCWN0cmwtPnZhbHVlID0gMTgwOworCQllbHNlIGlmIChjdHJsLT52YWx1ZSA9PSAweDgwKQorCQkJY3RybC0+dmFsdWUgPSAtMTgwOworCQllbHNlCisJCQljdHJsLT52YWx1ZSA9IDA7CisKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19BRkVfR0FJTl9DVFJMXS52YWw7CisJCWlmICgoY3RybC0+dmFsdWUgJiAweDMpID09IDMpCisJCQljdHJsLT52YWx1ZSA9IDE7CisJCWVsc2UKKwkJCWN0cmwtPnZhbHVlID0gMDsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKKwkJCSJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIGN0cmwtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LAorCQkJIkdldCBDb250cm9sOiBJRCAtICVkIC0gJWQiLAorCQkJY3RybC0+aWQsIGN0cmwtPnZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpb2N0bF9zX2N0cmwgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIFZJRElPQ19TX0NUUkwgaW9jdGwKKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogQGN0cmw6IHBvaW50ZXIgdG8gdjRsMl9jb250cm9sIHN0cnVjdHVyZQorICoKKyAqIElmIHRoZSByZXF1ZXN0ZWQgY29udHJvbCBpcyBzdXBwb3J0ZWQsIHNldHMgdGhlIGNvbnRyb2wncyBjdXJyZW50CisgKiB2YWx1ZSBpbiBIVy4gT3RoZXJ3aXNlLCByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZC4KKyAqLworc3RhdGljIGludAoraW9jdGxfc19jdHJsKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJaW50IGVyciA9IC1FSU5WQUwsIHZhbHVlOworCisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKKworCXZhbHVlID0gKF9fczMyKSBjdHJsLT52YWx1ZTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKKwkJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAorCQkJCQkiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCisJCQkJCWN0cmwtPnZhbHVlKTsKKwkJCXJldHVybiAtRVJBTkdFOworCQl9CisJCWVyciA9IHR2cDUxNHhfd3JpdGVfcmVnKGRlY29kZXItPmNsaWVudCwgUkVHX0JSSUdIVE5FU1MsCisJCQkJdmFsdWUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKKwkJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAorCQkJCQkiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAorCQkJCQljdHJsLT52YWx1ZSk7CisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19DT05UUkFTVCwKKwkJCQl2YWx1ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQl0dnA1MTR4X3JlZ19saXN0W1JFR19DT05UUkFTVF0udmFsID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgeworCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCisJCQkJCSJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKKwkJCQkJY3RybC0+dmFsdWUpOworCQkJcmV0dXJuIC1FUkFOR0U7CisJCX0KKwkJZXJyID0gdHZwNTE0eF93cml0ZV9yZWcoZGVjb2Rlci0+Y2xpZW50LCBSRUdfU0FUVVJBVElPTiwKKwkJCQl2YWx1ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQl0dnA1MTR4X3JlZ19saXN0W1JFR19TQVRVUkFUSU9OXS52YWwgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWlmICh2YWx1ZSA9PSAxODApCisJCQl2YWx1ZSA9IDB4N0Y7CisJCWVsc2UgaWYgKHZhbHVlID09IC0xODApCisJCQl2YWx1ZSA9IDB4ODA7CisJCWVsc2UgaWYgKHZhbHVlID09IDApCisJCQl2YWx1ZSA9IDA7CisJCWVsc2UgeworCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCisJCQkJCSJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLAorCQkJCQljdHJsLT52YWx1ZSk7CisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19IVUUsCisJCQkJdmFsdWUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfSFVFXS52YWwgPSB2YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwkJaWYgKHZhbHVlID09IDEpCisJCQl2YWx1ZSA9IDB4MEY7CisJCWVsc2UgaWYgKHZhbHVlID09IDApCisJCQl2YWx1ZSA9IDB4MEM7CisJCWVsc2UgeworCQkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCisJCQkJCSJpbnZhbGlkIGF1dG8gZ2FpbiBzZXR0aW5nICVkXG4iLAorCQkJCQljdHJsLT52YWx1ZSk7CisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCQllcnIgPSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19BRkVfR0FJTl9DVFJMLAorCQkJCXZhbHVlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbCA9IHZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKKwkJCSJpbnZhbGlkIGNvbnRyb2wgaWQgJWRcbiIsIGN0cmwtPmlkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCisJCQkiU2V0IENvbnRyb2w6IElEIC0gJWQgLSAlZCIsCisJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpb2N0bF9lbnVtX2ZtdF9jYXAgLSBJbXBsZW1lbnQgdGhlIENBUFRVUkUgYnVmZmVyIFZJRElPQ19FTlVNX0ZNVCBpb2N0bAorICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZm10OiBzdGFuZGFyZCBWNEwyIFZJRElPQ19FTlVNX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKKyAqCisgKiBJbXBsZW1lbnQgdGhlIFZJRElPQ19FTlVNX0ZNVCBpb2N0bCB0byBlbnVtZXJhdGUgc3VwcG9ydGVkIGZvcm1hdHMKKyAqLworc3RhdGljIGludAoraW9jdGxfZW51bV9mbXRfY2FwKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlpbnQgaW5kZXg7CisKKwlpZiAoZm10ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBmbXQtPmluZGV4OworCWlmICgoaW5kZXggPj0gZGVjb2Rlci0+bnVtX2ZtdHMpIHx8IChpbmRleCA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogSW5kZXggb3V0IG9mIGJvdW5kICovCisKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKworCW1lbWNweShmbXQsICZkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0sCisJCXNpemVvZihzdHJ1Y3QgdjRsMl9mbXRkZXNjKSk7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCisJCQkiQ3VycmVudCBGTVQ6IGluZGV4IC0gJWQgKCVzKSIsCisJCQlkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0uaW5kZXgsCisJCQlkZWNvZGVyLT5mbXRfbGlzdFtpbmRleF0uZGVzY3JpcHRpb24pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvY3RsX3RyeV9mbXRfY2FwIC0gSW1wbGVtZW50IHRoZSBDQVBUVVJFIGJ1ZmZlciBWSURJT0NfVFJZX0ZNVCBpb2N0bAorICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19UUllfRk1UIGlvY3RsIHN0cnVjdHVyZQorICoKKyAqIEltcGxlbWVudCB0aGUgVklESU9DX1RSWV9GTVQgaW9jdGwgZm9yIHRoZSBDQVBUVVJFIGJ1ZmZlciB0eXBlLiBUaGlzCisgKiBpb2N0bCBpcyB1c2VkIHRvIG5lZ290aWF0ZSB0aGUgaW1hZ2UgY2FwdHVyZSBzaXplIGFuZCBwaXhlbCBmb3JtYXQKKyAqIHdpdGhvdXQgYWN0dWFsbHkgbWFraW5nIGl0IHRha2UgZWZmZWN0LgorICovCitzdGF0aWMgaW50Citpb2N0bF90cnlfZm10X2NhcChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJaW50IGlmbXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CisKKwlpZiAoZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCXBpeCA9ICZmLT5mbXQucGl4OworCisJLyogQ2FsY3VsYXRlIGhlaWdodCBhbmQgd2lkdGggYmFzZWQgb24gY3VycmVudCBzdGFuZGFyZCAqLworCWN1cnJlbnRfc3RkID0gdHZwNTE0eF9nZXRfY3VycmVudF9zdGQoZGVjb2Rlcik7CisJaWYgKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlY29kZXItPmN1cnJlbnRfc3RkID0gY3VycmVudF9zdGQ7CisJcGl4LT53aWR0aCA9IGRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS53aWR0aDsKKwlwaXgtPmhlaWdodCA9IGRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS5oZWlnaHQ7CisKKwlmb3IgKGlmbXQgPSAwOyBpZm10IDwgZGVjb2Rlci0+bnVtX2ZtdHM7IGlmbXQrKykgeworCQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PQorCQkJZGVjb2Rlci0+Zm10X2xpc3RbaWZtdF0ucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwl9CisJaWYgKGlmbXQgPT0gZGVjb2Rlci0+bnVtX2ZtdHMpCisJCWlmbXQgPSAwOwkvKiBOb25lIG9mIHRoZSBmb3JtYXQgbWF0Y2hlZCwgc2VsZWN0IGRlZmF1bHQgKi8KKwlwaXgtPnBpeGVsZm9ybWF0ID0gZGVjb2Rlci0+Zm10X2xpc3RbaWZtdF0ucGl4ZWxmb3JtYXQ7CisKKwlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqIDI7CisJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmJ5dGVzcGVybGluZSAqIHBpeC0+aGVpZ2h0OworCXBpeC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJcGl4LT5wcml2ID0gMDsKKworCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwKKwkJCSJUcnkgRk1UOiBwaXhlbGZvcm1hdCAtICVzLCBieXRlc3BlcmxpbmUgLSAlZCIKKwkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsCisJCQlkZWNvZGVyLT5mbXRfbGlzdFtpZm10XS5kZXNjcmlwdGlvbiwgcGl4LT5ieXRlc3BlcmxpbmUsCisJCQlwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW9jdGxfc19mbXRfY2FwIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfU19GTVQgaW9jdGwKKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBWSURJT0NfU19GTVQgaW9jdGwgc3RydWN0dXJlCisgKgorICogSWYgdGhlIHJlcXVlc3RlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLCBjb25maWd1cmVzIHRoZSBIVyB0byB1c2UgdGhhdAorICogZm9ybWF0LCByZXR1cm5zIGVycm9yIGNvZGUgaWYgZm9ybWF0IG5vdCBzdXBwb3J0ZWQgb3IgSFcgY2FuJ3QgYmUKKyAqIGNvcnJlY3RseSBjb25maWd1cmVkLgorICovCitzdGF0aWMgaW50Citpb2N0bF9zX2ZtdF9jYXAoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKKwlpbnQgcnZhbDsKKworCWlmIChmID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCisJcGl4ID0gJmYtPmZtdC5waXg7CisJcnZhbCA9IGlvY3RsX3RyeV9mbXRfY2FwKHMsIGYpOworCWlmIChydmFsKQorCQlyZXR1cm4gcnZhbDsKKworCQlkZWNvZGVyLT5waXggPSAqcGl4OworCisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qKgorICogaW9jdGxfZ19mbXRfY2FwIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBpb2N0bF9nX2ZtdF9jYXAKKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiB2NGwyX2Zvcm1hdCBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIHRoZSBkZWNvZGVyJ3MgY3VycmVudCBwaXhlbCBmb3JtYXQgaW4gdGhlIHY0bDJfZm9ybWF0CisgKiBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBpbnQKK2lvY3RsX2dfZm10X2NhcChzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisKKwlpZiAoZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKworCWYtPmZtdC5waXggPSBkZWNvZGVyLT5waXg7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBkZWNvZGVyLT5jbGllbnQsCisJCQkiQ3VycmVudCBGTVQ6IGJ5dGVzcGVybGluZSAtICVkIgorCQkJIldpZHRoIC0gJWQsIEhlaWdodCAtICVkIiwKKwkJCWRlY29kZXItPnBpeC5ieXRlc3BlcmxpbmUsCisJCQlkZWNvZGVyLT5waXgud2lkdGgsIGRlY29kZXItPnBpeC5oZWlnaHQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvY3RsX2dfcGFybSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgVklESU9DX0dfUEFSTSBpb2N0bAorICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAYTogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19HX1BBUk0gaW9jdGwgc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgZGVjb2RlcidzIHZpZGVvIENBUFRVUkUgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIGludAoraW9jdGxfZ19wYXJtKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwYXJtOworCWVudW0gdHZwNTE0eF9zdGQgY3VycmVudF9zdGQ7CisKKwlpZiAoYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIG9ubHkgY2FwdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKworCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKKwlhLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJLyogZ2V0IHRoZSBjdXJyZW50IHN0YW5kYXJkICovCisJY3VycmVudF9zdGQgPSB0dnA1MTR4X2dldF9jdXJyZW50X3N0ZChkZWNvZGVyKTsKKwlpZiAoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVjb2Rlci0+Y3VycmVudF9zdGQgPSBjdXJyZW50X3N0ZDsKKworCWNwYXJtID0gJmEtPnBhcm0uY2FwdHVyZTsKKwljcGFybS0+Y2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKKwljcGFybS0+dGltZXBlcmZyYW1lID0KKwkJZGVjb2Rlci0+c3RkX2xpc3RbY3VycmVudF9zdGRdLnN0YW5kYXJkLmZyYW1lcGVyaW9kOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW9jdGxfc19wYXJtIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfU19QQVJNIGlvY3RsCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBhOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1NfUEFSTSBpb2N0bCBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmVzIHRoZSBkZWNvZGVyIHRvIHVzZSB0aGUgaW5wdXQgcGFyYW1ldGVycywgaWYgcG9zc2libGUuIElmCisgKiBub3QgcG9zc2libGUsIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQKK2lvY3RsX3NfcGFybShzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICpzLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQoreworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCXN0cnVjdCB2NGwyX2ZyYWN0ICp0aW1lcGVyZnJhbWU7CisJZW51bSB0dnA1MTR4X3N0ZCBjdXJyZW50X3N0ZDsKKworCWlmIChhID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogb25seSBjYXB0dXJlIGlzIHN1cHBvcnRlZCAqLworCisJdGltZXBlcmZyYW1lID0gJmEtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWU7CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgKi8KKwljdXJyZW50X3N0ZCA9IHR2cDUxNHhfZ2V0X2N1cnJlbnRfc3RkKGRlY29kZXIpOworCWlmIChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGN1cnJlbnRfc3RkOworCisJKnRpbWVwZXJmcmFtZSA9CisJICAgIGRlY29kZXItPnN0ZF9saXN0W2N1cnJlbnRfc3RkXS5zdGFuZGFyZC5mcmFtZXBlcmlvZDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvY3RsX2dfaWZwYXJtIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB2aWRpb2NfaW50X2dfaWZwYXJtX251bQorICogQHM6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHZpZGlvY19pbnRfZ19pZnBhcm1fbnVtIGlvY3RsIHN0cnVjdHVyZQorICoKKyAqIEdldHMgc2xhdmUgaW50ZXJmYWNlIHBhcmFtZXRlcnMuCisgKiBDYWxjdWxhdGVzIHRoZSByZXF1aXJlZCB4Y2xrIHZhbHVlIHRvIHN1cHBvcnQgdGhlIHJlcXVlc3RlZAorICogY2xvY2sgcGFyYW1ldGVycyBpbiBwLiBUaGlzIHZhbHVlIGlzIHJldHVybmVkIGluIHRoZSBwCisgKiBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBpbnQgaW9jdGxfZ19pZnBhcm0oc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgc3RydWN0IHY0bDJfaWZwYXJtICpwKQoreworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OworCWludCBydmFsOworCisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoTlVMTCA9PSBkZWNvZGVyLT5wZGF0YS0+aWZwYXJtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ2YWwgPSBkZWNvZGVyLT5wZGF0YS0+aWZwYXJtKHApOworCWlmIChydmFsKSB7CisJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LCAiZ19pZnBhcm0uRXJyWyVkXVxuIiwgcnZhbCk7CisJCXJldHVybiBydmFsOworCX0KKworCXAtPnUuYnQ2NTYuY2xvY2tfY3VyciA9IFRWUDUxNFhfWENMS19CVDY1NjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvY3RsX2dfcHJpdiAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdmlkaW9jX2ludF9nX3ByaXZfbnVtCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwOiB2b2lkIHBvaW50ZXIgdG8gaG9sZCBkZWNvZGVyJ3MgcHJpdmF0ZSBkYXRhIGFkZHJlc3MKKyAqCisgKiBSZXR1cm5zIGRldmljZSdzIChkZWNvZGVyJ3MpIHByaXZhdGUgZGF0YSBhcmVhIGFkZHJlc3MgaW4gcCBwYXJhbWV0ZXIKKyAqLworc3RhdGljIGludCBpb2N0bF9nX3ByaXYoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKworCWlmIChOVUxMID09IGRlY29kZXItPnBkYXRhLT5wcml2X2RhdGFfc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBkZWNvZGVyLT5wZGF0YS0+cHJpdl9kYXRhX3NldChwKTsKK30KKworLyoqCisgKiBpb2N0bF9zX3Bvd2VyIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB2aWRpb2NfaW50X3NfcG93ZXJfbnVtCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBvbjogcG93ZXIgc3RhdGUgdG8gd2hpY2ggZGV2aWNlIGlzIHRvIGJlIHNldAorICoKKyAqIFNldHMgZGV2aWNlcyBwb3dlciBzdGF0ZSB0byByZXF1cmVzdGVkIHN0YXRlLCBpZiBwb3NzaWJsZS4KKyAqLworc3RhdGljIGludCBpb2N0bF9zX3Bvd2VyKHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMsIGVudW0gdjRsMl9wb3dlciBvbikKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAob24pIHsKKwljYXNlIFY0TDJfUE9XRVJfT0ZGOgorCQkvKiBQb3dlciBEb3duIFNlcXVlbmNlICovCisJCWVyciA9CisJCSAgICB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsIFJFR19PUEVSQVRJT05fTU9ERSwKKwkJCQkJMHgwMSk7CisJCS8qIERpc2FibGUgbXV4IGZvciBUVlA1MTQ2LzQ3IGRlY29kZXIgZGF0YSBwYXRoICovCisJCWlmIChkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KQorCQkJZXJyIHw9IGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQob24pOworCQlkZWNvZGVyLT5zdGF0ZSA9IFNUQVRFX05PVF9ERVRFQ1RFRDsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfUE9XRVJfU1RBTkRCWToKKwkJaWYgKGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQpCisJCQllcnIgPSBkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KG9uKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfUE9XRVJfT046CisJCS8qIEVuYWJsZSBtdXggZm9yIFRWUDUxNDYvNDcgZGVjb2RlciBkYXRhIHBhdGggKi8KKwkJaWYgKChkZWNvZGVyLT5wZGF0YS0+cG93ZXJfc2V0KSAmJgorCQkJCShkZWNvZGVyLT5zdGF0ZSA9PSBTVEFURV9OT1RfREVURUNURUQpKSB7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCB0dnA1MTR4X2luaXRfc2VxICppbnRfc2VxID0KKwkJCQkoc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgKikKKwkJCQlkZWNvZGVyLT5pZC0+ZHJpdmVyX2RhdGE7CisKKwkJCWVyciA9IGRlY29kZXItPnBkYXRhLT5wb3dlcl9zZXQob24pOworCisJCQkvKiBQb3dlciBVcCBTZXF1ZW5jZSAqLworCQkJZm9yIChpID0gMDsgaSA8IGludF9zZXEtPm5vX3JlZ3M7IGkrKykgeworCQkJCWVyciB8PSB0dnA1MTR4X3dyaXRlX3JlZyhkZWNvZGVyLT5jbGllbnQsCisJCQkJCQlpbnRfc2VxLT5pbml0X3JlZ19zZXFbaV0ucmVnLAorCQkJCQkJaW50X3NlcS0+aW5pdF9yZWdfc2VxW2ldLnZhbCk7CisJCQl9CisJCQkvKiBEZXRlY3QgdGhlIHNlbnNvciBpcyBub3QgYWxyZWFkeSBkZXRlY3RlZCAqLworCQkJZXJyIHw9IHR2cDUxNHhfZGV0ZWN0KGRlY29kZXIpOworCQkJaWYgKGVycikgeworCQkJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAorCQkJCQkJIlVuYWJsZSB0byBkZXRlY3QgZGVjb2RlclxuIik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCQllcnIgfD0gdHZwNTE0eF9jb25maWd1cmUoZGVjb2Rlcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpb2N0bF9pbml0IC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciBWSURJT0NfSU5UX0lOSVQKKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEluaXRpYWxpemUgdGhlIGRlY29kZXIgZGV2aWNlIChjYWxscyB0dnA1MTR4X2NvbmZpZ3VyZSgpKQorICovCitzdGF0aWMgaW50IGlvY3RsX2luaXQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcykKK3sKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gcy0+cHJpdjsKKworCS8qIFNldCBkZWZhdWx0IHN0YW5kYXJkIHRvIGF1dG8gKi8KKwl0dnA1MTR4X3JlZ19saXN0W1JFR19WSURFT19TVERdLnZhbCA9CisJICAgIFZJREVPX1NURF9BVVRPX1NXSVRDSF9CSVQ7CisKKwlyZXR1cm4gdHZwNTE0eF9jb25maWd1cmUoZGVjb2Rlcik7Cit9CisKKy8qKgorICogaW9jdGxfZGV2X2V4aXQgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHZpZGlvY19pbnRfZGV2X2V4aXRfbnVtCisgKiBAczogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBEZWxpbml0aWFsaXNlIHRoZSBkZXYuIGF0IHNsYXZlIGRldGFjaC4gVGhlIGNvbXBsZW1lbnQgb2YgaW9jdGxfZGV2X2luaXQuCisgKi8KK3N0YXRpYyBpbnQgaW9jdGxfZGV2X2V4aXQoc3RydWN0IHY0bDJfaW50X2RldmljZSAqcykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpb2N0bF9kZXZfaW5pdCAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdmlkaW9jX2ludF9kZXZfaW5pdF9udW0KKyAqIEBzOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEluaXRpYWxpc2UgdGhlIGRldmljZSB3aGVuIHNsYXZlIGF0dGFjaGVzIHRvIHRoZSBtYXN0ZXIuIFJldHVybnMgMCBpZgorICogVFZQNTE0Ni80NyBkZXZpY2UgY291bGQgYmUgZm91bmQsIG90aGVyd2lzZSByZXR1cm5zIGFwcHJvcHJpYXRlIGVycm9yLgorICovCitzdGF0aWMgaW50IGlvY3RsX2Rldl9pbml0KHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgKnMpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CisJaW50IGVycjsKKworCWVyciA9IHR2cDUxNHhfZGV0ZWN0KGRlY29kZXIpOworCWlmIChlcnIgPCAwKSB7CisJCXY0bF9lcnIoZGVjb2Rlci0+Y2xpZW50LAorCQkJIlVuYWJsZSB0byBkZXRlY3QgZGVjb2RlclxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJdjRsX2luZm8oZGVjb2Rlci0+Y2xpZW50LAorCQkgImNoaXAgdmVyc2lvbiAweCUuMnggZGV0ZWN0ZWRcbiIsIGRlY29kZXItPnZlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2NGwyX2ludF9pb2N0bF9kZXNjIHR2cDUxNHhfaW9jdGxfZGVzY1tdID0geworCXt2aWRpb2NfaW50X2Rldl9pbml0X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9kZXZfaW5pdH0sCisJe3ZpZGlvY19pbnRfZGV2X2V4aXRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2Rldl9leGl0fSwKKwl7dmlkaW9jX2ludF9zX3Bvd2VyX251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9zX3Bvd2VyfSwKKwl7dmlkaW9jX2ludF9nX3ByaXZfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2dfcHJpdn0sCisJe3ZpZGlvY19pbnRfZ19pZnBhcm1fbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyopIGlvY3RsX2dfaWZwYXJtfSwKKwl7dmlkaW9jX2ludF9pbml0X251bSwgKHY0bDJfaW50X2lvY3RsX2Z1bmMqKSBpb2N0bF9pbml0fSwKKwl7dmlkaW9jX2ludF9lbnVtX2ZtdF9jYXBfbnVtLAorCSAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9lbnVtX2ZtdF9jYXB9LAorCXt2aWRpb2NfaW50X3RyeV9mbXRfY2FwX251bSwKKwkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfdHJ5X2ZtdF9jYXB9LAorCXt2aWRpb2NfaW50X2dfZm10X2NhcF9udW0sCisJICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX2dfZm10X2NhcH0sCisJe3ZpZGlvY19pbnRfc19mbXRfY2FwX251bSwKKwkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfc19mbXRfY2FwfSwKKwl7dmlkaW9jX2ludF9nX3Bhcm1fbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9nX3Bhcm19LAorCXt2aWRpb2NfaW50X3NfcGFybV9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3NfcGFybX0sCisJe3ZpZGlvY19pbnRfcXVlcnljdHJsX251bSwKKwkgKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfcXVlcnljdHJsfSwKKwl7dmlkaW9jX2ludF9nX2N0cmxfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9nX2N0cmx9LAorCXt2aWRpb2NfaW50X3NfY3RybF9udW0sICh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3NfY3RybH0sCisJe3ZpZGlvY19pbnRfcXVlcnlzdGRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9xdWVyeXN0ZH0sCisJe3ZpZGlvY19pbnRfc19zdGRfbnVtLCAodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX3N0ZH0sCisJe3ZpZGlvY19pbnRfc192aWRlb19yb3V0aW5nX251bSwKKwkJKHY0bDJfaW50X2lvY3RsX2Z1bmMgKikgaW9jdGxfc19yb3V0aW5nfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pbnRfc2xhdmUgdHZwNTE0eF9zbGF2ZSA9IHsKKwkuaW9jdGxzID0gdHZwNTE0eF9pb2N0bF9kZXNjLAorCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh0dnA1MTR4X2lvY3RsX2Rlc2MpLAorfTsKKworc3RhdGljIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgdHZwNTE0eF9kZXYgPSB7CisJLnN0YXRlID0gU1RBVEVfTk9UX0RFVEVDVEVELAorCisJLmZtdF9saXN0ID0gdHZwNTE0eF9mbXRfbGlzdCwKKwkubnVtX2ZtdHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfZm10X2xpc3QpLAorCisJLnBpeCA9IHsJCS8qIERlZmF1bHQgdG8gTlRTQyA4LWJpdCBZVVYgNDIyICovCisJCS53aWR0aCA9IE5UU0NfTlVNX0FDVElWRV9QSVhFTFMsCisJCS5oZWlnaHQgPSBOVFNDX05VTV9BQ1RJVkVfTElORVMsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCS5ieXRlc3BlcmxpbmUgPSBOVFNDX05VTV9BQ1RJVkVfUElYRUxTICogMiwKKwkJLnNpemVpbWFnZSA9CisJCU5UU0NfTlVNX0FDVElWRV9QSVhFTFMgKiAyICogTlRTQ19OVU1fQUNUSVZFX0xJTkVTLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCisJCX0sCisKKwkuY3VycmVudF9zdGQgPSBTVERfTlRTQ19NSiwKKwkuc3RkX2xpc3QgPSB0dnA1MTR4X3N0ZF9saXN0LAorCS5udW1fc3RkcyA9IEFSUkFZX1NJWkUodHZwNTE0eF9zdGRfbGlzdCksCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlIHR2cDUxNHhfaW50X2RldmljZSA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAorCS5wcml2ID0gJnR2cDUxNHhfZGV2LAorCS50eXBlID0gdjRsMl9pbnRfdHlwZV9zbGF2ZSwKKwkudSA9IHsKKwkgICAgICAuc2xhdmUgPSAmdHZwNTE0eF9zbGF2ZSwKKwkgICAgICB9LAorfTsKKworLyoqCisgKiB0dnA1MTR4X3Byb2JlIC0gZGVjb2RlciBkcml2ZXIgaTJjIHByb2JlIGhhbmRsZXIKKyAqIEBjbGllbnQ6IGkyYyBkcml2ZXIgY2xpZW50IGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZWdpc3RlciBkZWNvZGVyIGFzIGFuIGkyYyBjbGllbnQgZGV2aWNlIGFuZCBWNEwyCisgKiBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3R2cDUxNHhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSAmdHZwNTE0eF9kZXY7CisJaW50IGVycjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFkZWNvZGVyLT5wZGF0YSkgeworCQl2NGxfZXJyKGNsaWVudCwgIk5vIHBsYXRmb3JtIGRhdGFcbiEhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKgorCSAqIEZldGNoIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEsIGFuZCBjb25maWd1cmUgdGhlCisJICogdHZwNTE0eF9yZWdfbGlzdFtdIGFjY29yZGluZ2x5LiBTaW5jZSB0aGlzIGlzIG9uZQorCSAqIHRpbWUgY29uZmlndXJhdGlvbiwgbm8gbmVlZCB0byBwcmVzZXJ2ZS4KKwkgKi8KKwl0dnA1MTR4X3JlZ19saXN0W1JFR19PVVRQVVRfRk9STUFUVEVSMl0udmFsIHw9CisJCQkoZGVjb2Rlci0+cGRhdGEtPmNsa19wb2xhcml0eSA8PCAxKTsKKwl0dnA1MTR4X3JlZ19saXN0W1JFR19TWU5DX0NPTlRST0xdLnZhbCB8PQorCQkJKChkZWNvZGVyLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgMikgfAorCQkJKGRlY29kZXItPnBkYXRhLT52c19wb2xhcml0eSA8PCAzKSk7CisJLyoKKwkgKiBTYXZlIHRoZSBpZCBkYXRhLCByZXF1aXJlZCBmb3IgcG93ZXIgdXAgc2VxdWVuY2UKKwkgKi8KKwlkZWNvZGVyLT5pZCA9IChzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKWlkOworCS8qIEF0dGFjaCB0byBNYXN0ZXIgKi8KKwlzdHJjcHkodHZwNTE0eF9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywgZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7CisJZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlID0gJnR2cDUxNHhfaW50X2RldmljZTsKKwlkZWNvZGVyLT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CisKKwkvKiBSZWdpc3RlciB3aXRoIFY0TDIgbGF5ZXIgYXMgc2xhdmUgZGV2aWNlICovCisJZXJyID0gdjRsMl9pbnRfZGV2aWNlX3JlZ2lzdGVyKGRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CisJaWYgKGVycikgeworCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwkJdjRsX2VycihjbGllbnQsCisJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHRvIHY0bDIuIEVyclslZF1cbiIsIGVycik7CisKKwl9IGVsc2UKKwkJdjRsX2luZm8oY2xpZW50LCAiUmVnaXN0ZXJlZCB0byB2NGwyIG1hc3RlciAlcyEhXG4iLAorCQkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdHZwNTE0eF9yZW1vdmUgLSBkZWNvZGVyIGRyaXZlciBpMmMgcmVtb3ZlIGhhbmRsZXIKKyAqIEBjbGllbnQ6IGkyYyBkcml2ZXIgY2xpZW50IGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBVbnJlZ2lzdGVyIGRlY29kZXIgYXMgYW4gaTJjIGNsaWVudCBkZXZpY2UgYW5kIFY0TDIKKyAqIGRldmljZS4gQ29tcGxlbWVudCBvZiB0dnA1MTR4X3Byb2JlKCkuCisgKi8KK3N0YXRpYyBpbnQgX19leGl0IHR2cDUxNHhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKCFjbGllbnQtPmFkYXB0ZXIpCisJCXJldHVybiAtRU5PREVWOwkvKiBvdXIgY2xpZW50IGlzbid0IGF0dGFjaGVkICovCisKKwl2NGwyX2ludF9kZXZpY2VfdW5yZWdpc3RlcihkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisvKgorICogVFZQNTE0NiBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0Nl9pbml0X3JlZ19zZXFbXSA9IHsKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzEsIDB4MDJ9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMiwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MzLCAweDgwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19EQVRBX0FDQ0VTU19OT19WQlVTX0FERFJfSU5DUiwgMHgwMX0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MxLCAweDYwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzIsIDB4MDB9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMywgMHhCMH0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfREFUQV9BQ0NFU1NfTk9fVkJVU19BRERSX0lOQ1IsIDB4MDF9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0RBVEFfQUNDRVNTX05PX1ZCVVNfQUREUl9JTkNSLCAweDAwfSwKKwl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDF9LAorCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMH0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA1MTR4X2luaXRfc2VxIHR2cDUxNDZfaW5pdCA9IHsKKwkubm9fcmVncyA9IEFSUkFZX1NJWkUodHZwNTE0Nl9pbml0X3JlZ19zZXEpLAorCS5pbml0X3JlZ19zZXEgPSB0dnA1MTQ2X2luaXRfcmVnX3NlcSwKK307CisvKgorICogVFZQNTE0NyBJbml0L1Bvd2VyIG9uIFNlcXVlbmNlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0N19pbml0X3JlZ19zZXFbXSA9CXsKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzEsIDB4MDJ9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMiwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MzLCAweDgwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19EQVRBX0FDQ0VTU19OT19WQlVTX0FERFJfSU5DUiwgMHgwMX0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MxLCAweDYwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzIsIDB4MDB9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMywgMHhCMH0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfREFUQV9BQ0NFU1NfTk9fVkJVU19BRERSX0lOQ1IsIDB4MDF9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMSwgMHgxNn0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MyLCAweDAwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzMsIDB4QTB9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0RBVEFfQUNDRVNTX05PX1ZCVVNfQUREUl9JTkNSLCAweDE2fSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzEsIDB4NjB9LAorCXtUT0tfV1JJVEUsIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMiwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MzLCAweEIwfSwKKwl7VE9LX1dSSVRFLCBSRUdfVkJVU19EQVRBX0FDQ0VTU19OT19WQlVTX0FERFJfSU5DUiwgMHgwMH0sCisJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAxfSwKKwl7VE9LX1dSSVRFLCBSRUdfT1BFUkFUSU9OX01PREUsIDB4MDB9LAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSB0dnA1MTQ3X2luaXQgPSB7CisJLm5vX3JlZ3MgPSBBUlJBWV9TSVpFKHR2cDUxNDdfaW5pdF9yZWdfc2VxKSwKKwkuaW5pdF9yZWdfc2VxID0gdHZwNTE0N19pbml0X3JlZ19zZXEsCit9OworLyoKKyAqIFRWUDUxNDZNMi9UVlA1MTQ3TTEgSW5pdC9Qb3dlciBvbiBTZXF1ZW5jZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhtX2luaXRfcmVnX3NlcVtdID0geworCXtUT0tfV1JJVEUsIFJFR19PUEVSQVRJT05fTU9ERSwgMHgwMX0sCisJe1RPS19XUklURSwgUkVHX09QRVJBVElPTl9NT0RFLCAweDAwfSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgdHZwNTE0eG1faW5pdCA9IHsKKwkubm9fcmVncyA9IEFSUkFZX1NJWkUodHZwNTE0eG1faW5pdF9yZWdfc2VxKSwKKwkuaW5pdF9yZWdfc2VxID0gdHZwNTE0eG1faW5pdF9yZWdfc2VxLAorfTsKKy8qCisgKiBJMkMgRGV2aWNlIFRhYmxlIC0KKyAqCisgKiBuYW1lIC0gTmFtZSBvZiB0aGUgYWN0dWFsIGRldmljZS9jaGlwLgorICogZHJpdmVyX2RhdGEgLSBEcml2ZXIgZGF0YQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZwNTE0eF9pZFtdID0geworCXsidHZwNTE0NiIsICh1bnNpZ25lZCBsb25nKSZ0dnA1MTQ2X2luaXR9LAorCXsidHZwNTE0Nm0yIiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNHhtX2luaXR9LAorCXsidHZwNTE0NyIsICh1bnNpZ25lZCBsb25nKSZ0dnA1MTQ3X2luaXR9LAorCXsidHZwNTE0N20xIiwgKHVuc2lnbmVkIGxvbmcpJnR2cDUxNHhtX2luaXR9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2cDUxNHhfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHZwNTE0eF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gVFZQNTE0WF9NT0RVTEVfTkFNRSwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gdHZwNTE0eF9wcm9iZSwKKwkucmVtb3ZlID0gX19leGl0X3AodHZwNTE0eF9yZW1vdmUpLAorCS5pZF90YWJsZSA9IHR2cDUxNHhfaWQsCit9OworCisvKioKKyAqIHR2cDUxNHhfaW5pdAorICoKKyAqIE1vZHVsZSBpbml0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHR2cDUxNHhfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHZwNTE0eF9pMmNfZHJpdmVyKTsKK30KKworLyoqCisgKiB0dnA1MTR4X2NsZWFudXAKKyAqCisgKiBNb2R1bGUgZXhpdCBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdHZwNTE0eF9jbGVhbnVwKHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnR2cDUxNHhfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR2cDUxNHhfaW5pdCk7Cittb2R1bGVfZXhpdCh0dnA1MTR4X2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUVlA1MTRYIGxpbnV4IGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHhfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4X3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE2MjBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4X3JlZ3MuaApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eF9yZWdzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IFZhaWJoYXYgSGlyZW1hdGggPGh2YWliaGF2QHRpLmNvbT4KKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgU2l2YXJhaiBSIDxzaXZhcmFqQHRpLmNvbT4KKyAqICAgICBCcmlqZXNoIFIgSmFkYXYgPGJyaWplc2guakB0aS5jb20+CisgKiAgICAgSGFyZGlrIFNoYWggPGhhcmRpay5zaGFoQHRpLmNvbT4KKyAqICAgICBNYW5qdW5hdGggSGFkbGkgPG1yaEB0aS5jb20+CisgKiAgICAgS2FyaWNoZXJpIE11cmFsaWRoYXJhbiA8bS1rYXJpY2hlcmkyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfVFZQNTE0WF9SRUdTX0gKKyNkZWZpbmUgX1RWUDUxNFhfUkVHU19ICisKKy8qCisgKiBUVlA1MTQ2LzQ3IHJlZ2lzdGVycworICovCisjZGVmaW5lIFJFR19JTlBVVF9TRUwJCQkoMHgwMCkKKyNkZWZpbmUgUkVHX0FGRV9HQUlOX0NUUkwJCSgweDAxKQorI2RlZmluZSBSRUdfVklERU9fU1RECQkJKDB4MDIpCisjZGVmaW5lIFJFR19PUEVSQVRJT05fTU9ERQkJKDB4MDMpCisjZGVmaW5lIFJFR19BVVRPU1dJVENIX01BU0sJCSgweDA0KQorCisjZGVmaW5lIFJFR19DT0xPUl9LSUxMRVIJCSgweDA1KQorI2RlZmluZSBSRUdfTFVNQV9DT05UUk9MMQkJKDB4MDYpCisjZGVmaW5lIFJFR19MVU1BX0NPTlRST0wyCQkoMHgwNykKKyNkZWZpbmUgUkVHX0xVTUFfQ09OVFJPTDMJCSgweDA4KQorCisjZGVmaW5lIFJFR19CUklHSFRORVNTCQkJKDB4MDkpCisjZGVmaW5lIFJFR19DT05UUkFTVAkJCSgweDBBKQorI2RlZmluZSBSRUdfU0FUVVJBVElPTgkJCSgweDBCKQorI2RlZmluZSBSRUdfSFVFCQkJCSgweDBDKQorCisjZGVmaW5lIFJFR19DSFJPTUFfQ09OVFJPTDEJCSgweDBEKQorI2RlZmluZSBSRUdfQ0hST01BX0NPTlRST0wyCQkoMHgwRSkKKworLyogMHgwRiBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19DT01QX1BSX1NBVFVSQVRJT04JCSgweDEwKQorI2RlZmluZSBSRUdfQ09NUF9ZX0NPTlRSQVNUCQkoMHgxMSkKKyNkZWZpbmUgUkVHX0NPTVBfUEJfU0FUVVJBVElPTgkJKDB4MTIpCisKKy8qIDB4MTMgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfQ09NUF9ZX0JSSUdIVE5FU1MJCSgweDE0KQorCisvKiAweDE1IFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0FWSURfU1RBUlRfUElYRUxfTFNCCSgweDE2KQorI2RlZmluZSBSRUdfQVZJRF9TVEFSVF9QSVhFTF9NU0IJKDB4MTcpCisjZGVmaW5lIFJFR19BVklEX1NUT1BfUElYRUxfTFNCCQkoMHgxOCkKKyNkZWZpbmUgUkVHX0FWSURfU1RPUF9QSVhFTF9NU0IJCSgweDE5KQorCisjZGVmaW5lIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9MU0IJKDB4MUEpCisjZGVmaW5lIFJFR19IU1lOQ19TVEFSVF9QSVhFTF9NU0IJKDB4MUIpCisjZGVmaW5lIFJFR19IU1lOQ19TVE9QX1BJWEVMX0xTQgkoMHgxQykKKyNkZWZpbmUgUkVHX0hTWU5DX1NUT1BfUElYRUxfTVNCCSgweDFEKQorCisjZGVmaW5lIFJFR19WU1lOQ19TVEFSVF9MSU5FX0xTQgkoMHgxRSkKKyNkZWZpbmUgUkVHX1ZTWU5DX1NUQVJUX0xJTkVfTVNCCSgweDFGKQorI2RlZmluZSBSRUdfVlNZTkNfU1RPUF9MSU5FX0xTQgkJKDB4MjApCisjZGVmaW5lIFJFR19WU1lOQ19TVE9QX0xJTkVfTVNCCQkoMHgyMSkKKworI2RlZmluZSBSRUdfVkJMS19TVEFSVF9MSU5FX0xTQgkJKDB4MjIpCisjZGVmaW5lIFJFR19WQkxLX1NUQVJUX0xJTkVfTVNCCQkoMHgyMykKKyNkZWZpbmUgUkVHX1ZCTEtfU1RPUF9MSU5FX0xTQgkJKDB4MjQpCisjZGVmaW5lIFJFR19WQkxLX1NUT1BfTElORV9NU0IJCSgweDI1KQorCisvKiAweDI2IC0gMHgyNyBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19GQVNUX1NXVElDSF9DT05UUk9MCQkoMHgyOCkKKworLyogMHgyOSBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19GQVNUX1NXVElDSF9TQ0FSVF9ERUxBWQkoMHgyQSkKKworLyogMHgyQiBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19TQ0FSVF9ERUxBWQkJCSgweDJDKQorI2RlZmluZSBSRUdfQ1RJX0RFTEFZCQkJKDB4MkQpCisjZGVmaW5lIFJFR19DVElfQ09OVFJPTAkJCSgweDJFKQorCisvKiAweDJGIC0gMHgzMSBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19TWU5DX0NPTlRST0wJCSgweDMyKQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjEJCSgweDMzKQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjIJCSgweDM0KQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjMJCSgweDM1KQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjQJCSgweDM2KQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjUJCSgweDM3KQorI2RlZmluZSBSRUdfT1VUUFVUX0ZPUk1BVFRFUjYJCSgweDM4KQorI2RlZmluZSBSRUdfQ0xFQVJfTE9TVF9MT0NLCQkoMHgzOSkKKworI2RlZmluZSBSRUdfU1RBVFVTMQkJCSgweDNBKQorI2RlZmluZSBSRUdfU1RBVFVTMgkJCSgweDNCKQorCisjZGVmaW5lIFJFR19BR0NfR0FJTl9TVEFUVVNfTFNCCQkoMHgzQykKKyNkZWZpbmUgUkVHX0FHQ19HQUlOX1NUQVRVU19NU0IJCSgweDNEKQorCisvKiAweDNFIFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX1ZJREVPX1NURF9TVEFUVVMJCSgweDNGKQorI2RlZmluZSBSRUdfR1BJT19JTlBVVDEJCQkoMHg0MCkKKyNkZWZpbmUgUkVHX0dQSU9fSU5QVVQyCQkJKDB4NDEpCisKKy8qIDB4NDIgLSAweDQ1IFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0FGRV9DT0FSU0VfR0FJTl9DSDEJCSgweDQ2KQorI2RlZmluZSBSRUdfQUZFX0NPQVJTRV9HQUlOX0NIMgkJKDB4NDcpCisjZGVmaW5lIFJFR19BRkVfQ09BUlNFX0dBSU5fQ0gzCQkoMHg0OCkKKyNkZWZpbmUgUkVHX0FGRV9DT0FSU0VfR0FJTl9DSDQJCSgweDQ5KQorCisjZGVmaW5lIFJFR19BRkVfRklORV9HQUlOX1BCX0JfTFNCCSgweDRBKQorI2RlZmluZSBSRUdfQUZFX0ZJTkVfR0FJTl9QQl9CX01TQgkoMHg0QikKKyNkZWZpbmUgUkVHX0FGRV9GSU5FX0dBSU5fWV9HX0NIUk9NQV9MU0IJKDB4NEMpCisjZGVmaW5lIFJFR19BRkVfRklORV9HQUlOX1lfR19DSFJPTUFfTVNCCSgweDREKQorI2RlZmluZSBSRUdfQUZFX0ZJTkVfR0FJTl9QUl9SX0xTQgkoMHg0RSkKKyNkZWZpbmUgUkVHX0FGRV9GSU5FX0dBSU5fUFJfUl9NU0IJKDB4NEYpCisjZGVmaW5lIFJFR19BRkVfRklORV9HQUlOX0NWQlNfTFVNQV9MU0IJKDB4NTApCisjZGVmaW5lIFJFR19BRkVfRklORV9HQUlOX0NWQlNfTFVNQV9NU0IJKDB4NTEpCisKKy8qIDB4NTIgLSAweDY4IFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0ZCSVRfVkJJVF9DT05UUk9MMQkJKDB4NjkpCisKKy8qIDB4NkEgLSAweDZCIFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0JBQ0tFTkRfQUdDX0NPTlRST0wJCSgweDZDKQorCisvKiAweDZEIC0gMHg2RSBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19BR0NfREVDUkVNRU5UX1NQRUVEX0NPTlRST0wJKDB4NkYpCisjZGVmaW5lIFJFR19ST01fVkVSU0lPTgkJCSgweDcwKQorCisvKiAweDcxIC0gMHg3MyBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19BR0NfV0hJVEVfUEVBS19QUk9DRVNTSU5HCSgweDc0KQorI2RlZmluZSBSRUdfRkJJVF9WQklUX0NPTlRST0wyCQkoMHg3NSkKKyNkZWZpbmUgUkVHX1ZDUl9UUklDS19NT0RFX0NPTlRST0wJKDB4NzYpCisjZGVmaW5lIFJFR19IT1JJWk9OVEFMX1NIQUtFX0lOQ1JFTUVOVAkoMHg3NykKKyNkZWZpbmUgUkVHX0FHQ19JTkNSRU1FTlRfU1BFRUQJCSgweDc4KQorI2RlZmluZSBSRUdfQUdDX0lOQ1JFTUVOVF9ERUxBWQkJKDB4NzkpCisKKy8qIDB4N0EgLSAweDdGIFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0NISVBfSURfTVNCCQkJKDB4ODApCisjZGVmaW5lIFJFR19DSElQX0lEX0xTQgkJCSgweDgxKQorCisvKiAweDgyIFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX0NQTExfU1BFRURfQ09OVFJPTAkJKDB4ODMpCisKKy8qIDB4ODQgLSAweDk2IFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX1NUQVRVU19SRVFVRVNUCQkoMHg5NykKKworLyogMHg5OCAtIDB4OTkgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfVkVSVElDQUxfTElORV9DT1VOVF9MU0IJKDB4OUEpCisjZGVmaW5lIFJFR19WRVJUSUNBTF9MSU5FX0NPVU5UX01TQgkoMHg5QikKKworLyogMHg5QyAtIDB4OUQgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfQUdDX0RFQ1JFTUVOVF9ERUxBWQkJKDB4OUUpCisKKy8qIDB4OUYgLSAweEIwIFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX1ZEUF9UVFhfRklMVEVSXzFfTUFTSzEJKDB4QjEpCisjZGVmaW5lIFJFR19WRFBfVFRYX0ZJTFRFUl8xX01BU0syCSgweEIyKQorI2RlZmluZSBSRUdfVkRQX1RUWF9GSUxURVJfMV9NQVNLMwkoMHhCMykKKyNkZWZpbmUgUkVHX1ZEUF9UVFhfRklMVEVSXzFfTUFTSzQJKDB4QjQpCisjZGVmaW5lIFJFR19WRFBfVFRYX0ZJTFRFUl8xX01BU0s1CSgweEI1KQorI2RlZmluZSBSRUdfVkRQX1RUWF9GSUxURVJfMl9NQVNLMQkoMHhCNikKKyNkZWZpbmUgUkVHX1ZEUF9UVFhfRklMVEVSXzJfTUFTSzIJKDB4QjcpCisjZGVmaW5lIFJFR19WRFBfVFRYX0ZJTFRFUl8yX01BU0szCSgweEI4KQorI2RlZmluZSBSRUdfVkRQX1RUWF9GSUxURVJfMl9NQVNLNAkoMHhCOSkKKyNkZWZpbmUgUkVHX1ZEUF9UVFhfRklMVEVSXzJfTUFTSzUJKDB4QkEpCisjZGVmaW5lIFJFR19WRFBfVFRYX0ZJTFRFUl9DT05UUk9MCSgweEJCKQorI2RlZmluZSBSRUdfVkRQX0ZJRk9fV09SRF9DT1VOVAkJKDB4QkMpCisjZGVmaW5lIFJFR19WRFBfRklGT19JTlRFUlJVUFRfVEhSTEQJKDB4QkQpCisKKy8qIDB4QkUgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfVkRQX0ZJRk9fUkVTRVQJCSgweEJGKQorI2RlZmluZSBSRUdfVkRQX0ZJRk9fT1VUUFVUX0NPTlRST0wJKDB4QzApCisjZGVmaW5lIFJFR19WRFBfTElORV9OVU1CRVJfSU5URVJSVVBUCSgweEMxKQorI2RlZmluZSBSRUdfVkRQX1BJWEVMX0FMSUdOTUVOVF9MU0IJKDB4QzIpCisjZGVmaW5lIFJFR19WRFBfUElYRUxfQUxJR05NRU5UX01TQgkoMHhDMykKKworLyogMHhDNCAtIDB4RDUgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfVkRQX0xJTkVfU1RBUlQJCSgweEQ2KQorI2RlZmluZSBSRUdfVkRQX0xJTkVfU1RPUAkJKDB4RDcpCisjZGVmaW5lIFJFR19WRFBfR0xPQkFMX0xJTkVfTU9ERQkoMHhEOCkKKyNkZWZpbmUgUkVHX1ZEUF9GVUxMX0ZJRUxEX0VOQUJMRQkoMHhEOSkKKyNkZWZpbmUgUkVHX1ZEUF9GVUxMX0ZJRUxEX01PREUJCSgweERBKQorCisvKiAweERCIC0gMHhERiBSZXNlcnZlZCAqLworCisjZGVmaW5lIFJFR19WQlVTX0RBVEFfQUNDRVNTX05PX1ZCVVNfQUREUl9JTkNSCSgweEUwKQorI2RlZmluZSBSRUdfVkJVU19EQVRBX0FDQ0VTU19WQlVTX0FERFJfSU5DUgkoMHhFMSkKKyNkZWZpbmUgUkVHX0ZJRk9fUkVBRF9EQVRBCQkJKDB4RTIpCisKKy8qIDB4RTMgLSAweEU3IFJlc2VydmVkICovCisKKyNkZWZpbmUgUkVHX1ZCVVNfQUREUkVTU19BQ0NFU1MxCSgweEU4KQorI2RlZmluZSBSRUdfVkJVU19BRERSRVNTX0FDQ0VTUzIJKDB4RTkpCisjZGVmaW5lIFJFR19WQlVTX0FERFJFU1NfQUNDRVNTMwkoMHhFQSkKKworLyogMHhFQiAtIDB4RUYgUmVzZXJ2ZWQgKi8KKworI2RlZmluZSBSRUdfSU5URVJSVVBUX1JBV19TVEFUVVMwCSgweEYwKQorI2RlZmluZSBSRUdfSU5URVJSVVBUX1JBV19TVEFUVVMxCSgweEYxKQorI2RlZmluZSBSRUdfSU5URVJSVVBUX1NUQVRVUzAJCSgweEYyKQorI2RlZmluZSBSRUdfSU5URVJSVVBUX1NUQVRVUzEJCSgweEYzKQorI2RlZmluZSBSRUdfSU5URVJSVVBUX01BU0swCQkoMHhGNCkKKyNkZWZpbmUgUkVHX0lOVEVSUlVQVF9NQVNLMQkJKDB4RjUpCisjZGVmaW5lIFJFR19JTlRFUlJVUFRfQ0xFQVIwCQkoMHhGNikKKyNkZWZpbmUgUkVHX0lOVEVSUlVQVF9DTEVBUjEJCSgweEY3KQorCisvKiAweEY4IC0gMHhGRiBSZXNlcnZlZCAqLworCisvKgorICogTWFzayBhbmQgYml0IGRlZmluaXRpb25zIG9mIFRWUDUxNDYvNDcgcmVnaXN0ZXJzCisgKi8KKy8qIFRoZSBJRCB2YWx1ZXMgd2UgYXJlIGxvb2tpbmcgZm9yICovCisjZGVmaW5lIFRWUDUxNFhfQ0hJUF9JRF9NU0IJCSgweDUxKQorI2RlZmluZSBUVlA1MTQ2X0NISVBfSURfTFNCCQkoMHg0NikKKyNkZWZpbmUgVFZQNTE0N19DSElQX0lEX0xTQgkJKDB4NDcpCisKKyNkZWZpbmUgVklERU9fU1REX01BU0sJCQkoMHgwNykKKyNkZWZpbmUgVklERU9fU1REX0FVVE9fU1dJVENIX0JJVAkoMHgwMCkKKyNkZWZpbmUgVklERU9fU1REX05UU0NfTUpfQklUCQkoMHgwMSkKKyNkZWZpbmUgVklERU9fU1REX1BBTF9CREdISU5fQklUCSgweDAyKQorI2RlZmluZSBWSURFT19TVERfUEFMX01fQklUCQkoMHgwMykKKyNkZWZpbmUgVklERU9fU1REX1BBTF9DT01CSU5BVElPTl9OX0JJVAkoMHgwNCkKKyNkZWZpbmUgVklERU9fU1REX05UU0NfNF80M19CSVQJCSgweDA1KQorI2RlZmluZSBWSURFT19TVERfU0VDQU1fQklUCQkoMHgwNikKKyNkZWZpbmUgVklERU9fU1REX1BBTF82MF9CSVQJCSgweDA3KQorCisvKgorICogU3RhdHVzIGJpdAorICovCisjZGVmaW5lIFNUQVRVU19UVl9WQ1JfQklUCQkoMTw8MCkKKyNkZWZpbmUgU1RBVFVTX0hPUlpfU1lOQ19MT0NLX0JJVAkoMTw8MSkKKyNkZWZpbmUgU1RBVFVTX1ZJUlRfU1lOQ19MT0NLX0JJVAkoMTw8MikKKyNkZWZpbmUgU1RBVFVTX0NMUl9TVUJDQVJfTE9DS19CSVQJKDE8PDMpCisjZGVmaW5lIFNUQVRVU19MT1NUX0xPQ0tfREVURUNUX0JJVAkoMTw8NCkKKyNkZWZpbmUgU1RBVFVTX0ZFSUxEX1JBVEVfQklUCQkoMTw8NSkKKyNkZWZpbmUgU1RBVFVTX0xJTkVfQUxURVJOQVRJTkdfQklUCSgxPDw2KQorI2RlZmluZSBTVEFUVVNfUEVBS19XSElURV9ERVRFQ1RfQklUCSgxPDw3KQorCisvKiBUb2tlbnMgZm9yIHJlZ2lzdGVyIHdyaXRlICovCisjZGVmaW5lIFRPS19XUklURSAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvKiB0b2tlbiBmb3Igd3JpdGUgb3BlcmF0aW9uICovCisjZGVmaW5lIFRPS19URVJNICAgICAgICAgICAgICAgICAgICAgICAgKDEpICAgICAvKiB0ZXJtaW5hdGluZyB0b2tlbiAqLworI2RlZmluZSBUT0tfREVMQVkgICAgICAgICAgICAgICAgICAgICAgICgyKSAgICAgLyogZGVsYXkgdG9rZW4gZm9yIHJlZyBsaXN0ICovCisjZGVmaW5lIFRPS19TS0lQICAgICAgICAgICAgICAgICAgICAgICAgKDMpICAgICAvKiB0b2tlbiB0byBza2lwIGEgcmVnaXN0ZXIgKi8KKy8qKgorICogc3RydWN0IHR2cDUxNHhfcmVnIC0gU3RydWN0dXJlIGZvciBUVlA1MTQ2LzQ3IHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIHZhbHVlcworICogQHRva2VuIC0gVG9rZW46IFRPS19XUklURSwgVE9LX1RFUk0gZXRjLi4KKyAqIEByZWcgLSBSZWdpc3RlciBvZmZzZXQKKyAqIEB2YWwgLSBSZWdpc3RlciBWYWx1ZSBmb3IgVE9LX1dSSVRFIG9yIGRlbGF5IGluIG1zIGZvciBUT0tfREVMQVkKKyAqLworc3RydWN0IHR2cDUxNHhfcmVnIHsKKwl1OCB0b2tlbjsKKwl1OCByZWc7CisJdTMyIHZhbDsKK307CisKKy8qKgorICogc3RydWN0IHR2cDUxNHhfaW5pdF9zZXEgLSBTdHJ1Y3R1cmUgZm9yIFRWUDUxNDYvNDcvNDZNMi80N00xIHBvd2VyIHVwCisgKgkJU2VxdWVuY2UuCisgKiBAIG5vX3JlZ3MgLSBOdW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHdyaXRlIGZvciBwb3dlciB1cCBzZXF1ZW5jZS4KKyAqIEAgaW5pdF9yZWdfc2VxIC0gQXJyYXkgb2YgcmVnaXN0ZXJzIGFuZCByZXNwZWN0aXZlIHZhbHVlIHRvIHdyaXRlLgorICovCitzdHJ1Y3QgdHZwNTE0eF9pbml0X3NlcSB7CisJdW5zaWduZWQgaW50IG5vX3JlZ3M7CisJY29uc3Qgc3RydWN0IHR2cDUxNHhfcmVnICppbml0X3JlZ19zZXE7Cit9OworI2VuZGlmCQkJCS8qIGlmbmRlZiBfVFZQNTE0WF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggMjhhZjVjZS4uYTM4OGE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTksOCArOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dnA1MTUwLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiAjaW5jbHVkZSAidHZwNTE1MF9yZWcuaCIKIApAQCAtMjksMjEgKzMxLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwotCi0jZGVmaW5lIHR2cDUxNTBfZXJyKGZtdCwgYXJnLi4uKSBkbyB7IFwKLQlwcmludGsoS0VSTl9FUlIgIiVzICVkLSUwNHg6ICIgZm10LCBjLT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JICAgICAgIGkyY19hZGFwdGVyX2lkKGMtPmFkYXB0ZXIpLCBjLT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgdHZwNTE1MF9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKLQlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgYy0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgXAotCSAgICAgICBpMmNfYWRhcHRlcl9pZChjLT5hZGFwdGVyKSwgYy0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHR2cDUxNTBfZGJnKG51bSwgZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGRlYnVnICVkLSUwNHg6ICIgZm10LFwKLQkJCQljLT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCi0JCQkJaTJjX2FkYXB0ZXJfaWQoYy0+YWRhcHRlciksIFwKLQkJCQljLT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0yKSIpOwogCiAvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdHZwNTE1MF9xY3RybFtdID0gewpAQCAtODcsNyArNzUsNyBAQAogfTsKIAogc3RydWN0IHR2cDUxNTAgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCiAJdjRsMl9zdGRfaWQgbm9ybTsJLyogQ3VycmVudCBzZXQgc3RhbmRhcmQgKi8KIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwpAQCAtOTgsNDkgKzg2LDU3IEBACiAJaW50IHNhdDsKIH07CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBjaGFyIGFkZHIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dnA1MTUwICp0b190dnA1MTUwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHR2cDUxNTAsIHNkKTsKK30KKworc3RhdGljIGludCB0dnA1MTUwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdW5zaWduZWQgY2hhciBidWZmZXJbMV07CiAJaW50IHJjOwogCiAJYnVmZmVyWzBdID0gYWRkcjsKIAlpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAxKSkpCi0JCXR2cDUxNTBfZGJnKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CisJCXY0bDJfZGJnKDAsIGRlYnVnLCBzZCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIsIHJjKTsKIAogCW1zbGVlcCgxMCk7CiAKIAlpZiAoMSAhPSAocmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgYnVmZmVyLCAxKSkpCi0JCXR2cDUxNTBfZGJnKDAsICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLCByYyk7CisJCXY0bDJfZGJnKDAsIGRlYnVnLCBzZCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIsIHJjKTsKIAotCXR2cDUxNTBfZGJnKDIsICJ0dnA1MTUwOiByZWFkIDB4JTAyeCA9IDB4JTAyeFxuIiwgYWRkciwgYnVmZmVyWzBdKTsKKwl2NGwyX2RiZygyLCBkZWJ1Zywgc2QsICJ0dnA1MTUwOiByZWFkIDB4JTAyeCA9IDB4JTAyeFxuIiwgYWRkciwgYnVmZmVyWzBdKTsKIAogCXJldHVybiAoYnVmZmVyWzBdKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgYWRkciwKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA1MTUwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNoYXIgYWRkciwKIAkJCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOwogCWludCByYzsKIAogCWJ1ZmZlclswXSA9IGFkZHI7CiAJYnVmZmVyWzFdID0gdmFsdWU7Ci0JdHZwNTE1MF9kYmcoMiwgInR2cDUxNTA6IHdyaXRpbmcgMHglMDJ4IDB4JTAyeFxuIiwgYnVmZmVyWzBdLCBidWZmZXJbMV0pOworCXY0bDJfZGJnKDIsIGRlYnVnLCBzZCwgInR2cDUxNTA6IHdyaXRpbmcgMHglMDJ4IDB4JTAyeFxuIiwgYnVmZmVyWzBdLCBidWZmZXJbMV0pOwogCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDIpKSkKLQkJdHZwNTE1MF9kYmcoMCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIsIHJjKTsKKwkJdjRsMl9kYmcoMCwgZGVidWcsIHNkLCAiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIiwgcmMpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3JlZ19yYW5nZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY2hhciAqcywgdTggaW5pdCwgY29uc3QgdTggZW5kLGludCBtYXhfbGluZSkKK3N0YXRpYyB2b2lkIGR1bXBfcmVnX3JhbmdlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNoYXIgKnMsIHU4IGluaXQsCisJCQkJY29uc3QgdTggZW5kLCBpbnQgbWF4X2xpbmUpCiB7Ci0JaW50IGk9MDsKKwlpbnQgaSA9IDA7CiAKLQl3aGlsZSAoaW5pdCE9KHU4KShlbmQrMSkpIHsKLQkJaWYgKChpJW1heF9saW5lKSA9PSAwKSB7Ci0JCQlpZiAoaT4wKQorCXdoaWxlIChpbml0ICE9ICh1OCkoZW5kICsgMSkpIHsKKwkJaWYgKChpICUgbWF4X2xpbmUpID09IDApIHsKKwkJCWlmIChpID4gMCkKIAkJCQlwcmludGsoIlxuIik7Ci0JCQlwcmludGsoInR2cDUxNTA6ICVzIHJlZyAweCUwMnggPSAiLHMsaW5pdCk7CisJCQlwcmludGsoInR2cDUxNTA6ICVzIHJlZyAweCUwMnggPSAiLCBzLCBpbml0KTsKIAkJfQotCQlwcmludGsoIiUwMnggIix0dnA1MTUwX3JlYWQoYywgaW5pdCkpOworCQlwcmludGsoIiUwMnggIiwgdHZwNTE1MF9yZWFkKHNkLCBpbml0KSk7CiAKIAkJaW5pdCsrOwogCQlpKys7CkBAIC0xNDgsMTQ3ICsxNDQsMTQ4IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3N0YXRpYyBpbnQgdHZwNTE1MF9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJcHJpbnRrKCJ0dnA1MTUwOiBWaWRlbyBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICMxID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEpKTsKIAlwcmludGsoInR2cDUxNTA6IEFuYWxvZyBjaGFubmVsIGNvbnRyb2xzID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BTkFMX0NITF9DVEwpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9BTkFMX0NITF9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IE9wZXJhdGlvbiBtb2RlIGNvbnRyb2xzID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9PUF9NT0RFX0NUTCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX09QX01PREVfQ1RMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBNaXNjZWxsYW5lb3VzIGNvbnRyb2xzID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NSVNDX0NUTCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX01JU0NfQ1RMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBBdXRvc3dpdGNoIG1hc2s9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQVVUT1NXX01TSykpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0FVVE9TV19NU0spKTsKIAlwcmludGsoInR2cDUxNTA6IENvbG9yIGtpbGxlciB0aHJlc2hvbGQgY29udHJvbCA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09MT1JfS0lMX1RIU0hfQ1RMKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfQ09MT1JfS0lMX1RIU0hfQ1RMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9scyAjMSAjMiBhbmQgIzMgPSAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8xKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8yKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8zKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8xKSwKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzIpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMykpOwogCXByaW50aygidHZwNTE1MDogQnJpZ2h0bmVzcyBjb250cm9sID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9CUklHSFRfQ1RMKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfQlJJR0hUX0NUTCkpOwogCXByaW50aygidHZwNTE1MDogQ29sb3Igc2F0dXJhdGlvbiBjb250cm9sID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBIdWUgY29udHJvbCA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSFVFX0NUTCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0hVRV9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IENvbnRyYXN0IGNvbnRyb2wgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCkpOwogCXByaW50aygidHZwNTE1MDogT3V0cHV0cyBhbmQgZGF0YSByYXRlcyBzZWxlY3QgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0RBVEFfUkFURV9TRUwpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9EQVRBX1JBVEVfU0VMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBDb25maWd1cmF0aW9uIHNoYXJlZCBwaW5zID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05GX1NIQVJFRF9QSU4pKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9DT05GX1NIQVJFRF9QSU4pKTsKIAlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdGFydCA9IDB4JTAyeCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX01TQiksCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX0xTQikpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX01TQiksCisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RfTFNCKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCAgPSAweCUwMnglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTVNCKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RQX0xTQikpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9NU0IpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9MU0IpKTsKIAlwcmludGsoInR2cDUxNTA6IEdlbmxvY2svUlRDID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9HRU5MT0NLKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfR0VOTE9DSykpOwogCXByaW50aygidHZwNTE1MDogSG9yaXpvbnRhbCBzeW5jIHN0YXJ0ID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9IT1JJWl9TWU5DX1NUQVJUKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfSE9SSVpfU1lOQ19TVEFSVCkpOwogCXByaW50aygidHZwNTE1MDogVmVydGljYWwgYmxhbmtpbmcgc3RhcnQgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RBUlQpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUQVJUKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBWZXJ0aWNhbCBibGFua2luZyBzdG9wID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUT1ApKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUT1ApKTsKIAlwcmludGsoInR2cDUxNTA6IENocm9taW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMSBhbmQgIzIgPSAlMDJ4ICUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8xKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzIpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMSksCisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzIpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCByZXNldCByZWdpc3RlciBCID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQikpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0IpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVFRfQ09ORklHX1JFR19CKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfSU5UVF9DT05GSUdfUkVHX0IpKTsKIAlwcmludGsoInR2cDUxNTA6IFZpZGVvIHN0YW5kYXJkID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSURFT19TVEQpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9WSURFT19TVEQpKTsKIAlwcmludGsoInR2cDUxNTA6IENocm9tYSBnYWluIGZhY3RvcjogQ2I9MHglMDJ4IENyPTB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0JfR0FJTl9GQUNUKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ1JfR0FJTl9GQUNUT1IpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9DQl9HQUlOX0ZBQ1QpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0NSX0dBSU5fRkFDVE9SKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBNYWNyb3Zpc2lvbiBvbiBjb3VudGVyID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NQUNST1ZJU0lPTl9PTl9DVFIpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9NQUNST1ZJU0lPTl9PTl9DVFIpKTsKIAlwcmludGsoInR2cDUxNTA6IE1hY3JvdmlzaW9uIG9mZiBjb3VudGVyID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NQUNST1ZJU0lPTl9PRkZfQ1RSKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfTUFDUk9WSVNJT05fT0ZGX0NUUikpOwogCXByaW50aygidHZwNTE1MDogSVRVLVIgQlQuNjU2LiVkIHRpbWluZyhUVlA1MTUwQU0xIG9ubHkpXG4iLAotCQkJCQkodHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUkVWX1NFTEVDVCkmMSk/Mzo0KTsKKwkJCSh0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfUkVWX1NFTEVDVCkgJiAxKSA/IDMgOiA0KTsKIAlwcmludGsoInR2cDUxNTA6IERldmljZSBJRCA9ICUwMnglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NU0JfREVWX0lEKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFNCX0RFVl9JRCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX01TQl9ERVZfSUQpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0xTQl9ERVZfSUQpKTsKIAlwcmludGsoInR2cDUxNTA6IFJPTSB2ZXJzaW9uID0gKGhleCkgJTAyeC4lMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9ST01fTUFKT1JfVkVSKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUk9NX01JTk9SX1ZFUikpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1JPTV9NQUpPUl9WRVIpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1JPTV9NSU5PUl9WRVIpKTsKIAlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGxpbmUgY291bnQgPSAweCUwMnglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0xOX0NPVU5UX01TQiksCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTFNCKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfVkVSVF9MTl9DT1VOVF9NU0IpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTFNCKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9TVEFUVVNfUkVHX0IpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9JTlRfU1RBVFVTX1JFR19CKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgYWN0aXZlIHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9BQ1RJVkVfUkVHX0IpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9JTlRfQUNUSVZFX1JFR19CKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVncyAjMSB0byAjNSA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18xKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18yKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18zKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR180KSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR181KSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfU1RBVFVTX1JFR18xKSwKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9TVEFUVVNfUkVHXzIpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1NUQVRVU19SRUdfMyksCisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfU1RBVFVTX1JFR180KSwKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9TVEFUVVNfUkVHXzUpKTsKIAotCWR1bXBfcmVnX3JhbmdlKGMsIlRlbGV0ZXh0IGZpbHRlciAxIiwgICBUVlA1MTUwX1RFTEVURVhUX0ZJTDFfSU5JLAotCQkJCQkJVFZQNTE1MF9URUxFVEVYVF9GSUwxX0VORCw4KTsKLQlkdW1wX3JlZ19yYW5nZShjLCJUZWxldGV4dCBmaWx0ZXIgMiIsICAgVFZQNTE1MF9URUxFVEVYVF9GSUwyX0lOSSwKLQkJCQkJCVRWUDUxNTBfVEVMRVRFWFRfRklMMl9FTkQsOCk7CisJZHVtcF9yZWdfcmFuZ2Uoc2QsICJUZWxldGV4dCBmaWx0ZXIgMSIsICAgVFZQNTE1MF9URUxFVEVYVF9GSUwxX0lOSSwKKwkJCVRWUDUxNTBfVEVMRVRFWFRfRklMMV9FTkQsIDgpOworCWR1bXBfcmVnX3JhbmdlKHNkLCAiVGVsZXRleHQgZmlsdGVyIDIiLCAgIFRWUDUxNTBfVEVMRVRFWFRfRklMMl9JTkksCisJCQlUVlA1MTUwX1RFTEVURVhUX0ZJTDJfRU5ELCA4KTsKIAogCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIGVuYWJsZSA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMX0VOQSkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF9FTkEpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQSA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQSkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0lOVF9TVEFUVVNfUkVHX0EpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQSA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQSkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0EpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBjb25maWd1cmF0aW9uID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfQ09ORikpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0lOVF9DT05GKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBWRFAgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRFBfU1RBVFVTX1JFRykpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1ZEUF9TVEFUVVNfUkVHKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIHdvcmQgY291bnQgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fV09SRF9DT1VOVCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0ZJRk9fV09SRF9DT1VOVCkpOwogCXByaW50aygidHZwNTE1MDogRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX0lOVF9USFJFU0hPTEQpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9GSUZPX0lOVF9USFJFU0hPTEQpKTsKIAlwcmludGsoInR2cDUxNTA6IEZJRk8gcmVzZXQgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fUkVTRVQpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9GSUZPX1JFU0VUKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG51bWJlciBpbnRlcnJ1cHQgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTlVNQkVSX0lOVCkpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0xJTkVfTlVNQkVSX0lOVCkpOwogCXByaW50aygidHZwNTE1MDogUGl4ZWwgYWxpZ25tZW50IHJlZ2lzdGVyID0gMHglMDJ4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUElYX0FMSUdOX1JFR19ISUdIKSwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUElYX0FMSUdOX1JFR19MT1cpKTsKKwkJCXR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9QSVhfQUxJR05fUkVHX0hJR0gpLAorCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfTE9XKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIG91dHB1dCBjb250cm9sID0gMHglMDJ4XG4iLAotCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX09VVF9DVFJMKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfRklGT19PVVRfQ1RSTCkpOwogCXByaW50aygidHZwNTE1MDogRnVsbCBmaWVsZCBlbmFibGUgPSAweCUwMnhcbiIsCi0JCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BKSk7CisJCQl0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfRlVMTF9GSUVMRF9FTkEpKTsKIAlwcmludGsoInR2cDUxNTA6IEZ1bGwgZmllbGQgbW9kZSByZWdpc3RlciA9IDB4JTAyeFxuIiwKLQkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRlVMTF9GSUVMRF9NT0RFX1JFRykpOworCQkJdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0ZVTExfRklFTERfTU9ERV9SRUcpKTsKIAotCWR1bXBfcmVnX3JhbmdlKGMsIkNDICAgZGF0YSIsICAgVFZQNTE1MF9DQ19EQVRBX0lOSSwKLQkJCQkJVFZQNTE1MF9DQ19EQVRBX0VORCw4KTsKKwlkdW1wX3JlZ19yYW5nZShzZCwgIkNDICAgZGF0YSIsICAgVFZQNTE1MF9DQ19EQVRBX0lOSSwKKwkJCVRWUDUxNTBfQ0NfREFUQV9FTkQsIDgpOwogCi0JZHVtcF9yZWdfcmFuZ2UoYywiV1NTICBkYXRhIiwgICBUVlA1MTUwX1dTU19EQVRBX0lOSSwKLQkJCQkJVFZQNTE1MF9XU1NfREFUQV9FTkQsOCk7CisJZHVtcF9yZWdfcmFuZ2Uoc2QsICJXU1MgIGRhdGEiLCAgIFRWUDUxNTBfV1NTX0RBVEFfSU5JLAorCQkJVFZQNTE1MF9XU1NfREFUQV9FTkQsIDgpOwogCi0JZHVtcF9yZWdfcmFuZ2UoYywiVlBTICBkYXRhIiwgICBUVlA1MTUwX1ZQU19EQVRBX0lOSSwKLQkJCQkJVFZQNTE1MF9WUFNfREFUQV9FTkQsOCk7CisJZHVtcF9yZWdfcmFuZ2Uoc2QsICJWUFMgIGRhdGEiLCAgIFRWUDUxNTBfVlBTX0RBVEFfSU5JLAorCQkJVFZQNTE1MF9WUFNfREFUQV9FTkQsIDgpOwogCi0JZHVtcF9yZWdfcmFuZ2UoYywiVklUQyBkYXRhIiwgICBUVlA1MTUwX1ZJVENfREFUQV9JTkksCi0JCQkJCVRWUDUxNTBfVklUQ19EQVRBX0VORCwxMCk7CisJZHVtcF9yZWdfcmFuZ2Uoc2QsICJWSVRDIGRhdGEiLCAgIFRWUDUxNTBfVklUQ19EQVRBX0lOSSwKKwkJCVRWUDUxNTBfVklUQ19EQVRBX0VORCwgMTApOwogCi0JZHVtcF9yZWdfcmFuZ2UoYywiTGluZSBtb2RlIiwgICBUVlA1MTUwX0xJTkVfTU9ERV9JTkksCi0JCQkJCVRWUDUxNTBfTElORV9NT0RFX0VORCw4KTsKKwlkdW1wX3JlZ19yYW5nZShzZCwgIkxpbmUgbW9kZSIsICAgVFZQNTE1MF9MSU5FX01PREVfSU5JLAorCQkJVFZQNTE1MF9MSU5FX01PREVfRU5ELCA4KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJCUJhc2ljIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dnA1MTUwX3NlbG11eChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA1MTUwX3NlbG11eChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCWludCBvcG1vZGU9MDsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IHRvX3R2cDUxNTAoc2QpOwogCWludCBpbnB1dCA9IDA7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAKQEAgLTMwOSwyMyArMzA2LDIzIEBACiAJCWJyZWFrOwogCX0KIAotCXR2cDUxNTBfZGJnKCAxLCAiU2VsZWN0aW5nIHZpZGVvIHJvdXRlOiByb3V0ZSBpbnB1dD0laSwgb3V0cHV0PSVpICIKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgdmlkZW8gcm91dGU6IHJvdXRlIGlucHV0PSVpLCBvdXRwdXQ9JWkgIgogCQkJIj0+IHR2cDUxNTAgaW5wdXQ9JWksIG9wbW9kZT0laVxuIiwKIAkJCWRlY29kZXItPnJvdXRlLmlucHV0LGRlY29kZXItPnJvdXRlLm91dHB1dCwKIAkJCWlucHV0LCBvcG1vZGUgKTsKIAotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9PUF9NT0RFX0NUTCwgb3Btb2RlKTsKLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfVkRfSU5fU1JDX1NFTF8xLCBpbnB1dCk7CisJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9PUF9NT0RFX0NUTCwgb3Btb2RlKTsKKwl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX1ZEX0lOX1NSQ19TRUxfMSwgaW5wdXQpOwogCiAJLyogU3ZpZGVvIHNob3VsZCBlbmFibGUgWUNyQ2Igb3V0cHV0IGFuZCBkaXNhYmxlIEdQQ0wgb3V0cHV0CiAJICogRm9yIENvbXBvc2l0ZSBhbmQgVFYsIGl0IHNob3VsZCBiZSB0aGUgcmV2ZXJzZQogCSAqLwotCXZhbCA9IHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01JU0NfQ1RMKTsKKwl2YWwgPSB0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfTUlTQ19DVEwpOwogCWlmIChkZWNvZGVyLT5yb3V0ZS5pbnB1dCA9PSBUVlA1MTUwX1NWSURFTykKIAkJdmFsID0gKHZhbCAmIH4weDQwKSB8IDB4MTA7CiAJZWxzZQogCQl2YWwgPSAodmFsICYgfjB4MTApIHwgMHg0MDsKLQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfTUlTQ19DVEwsIHZhbCk7CisJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9NSVNDX0NUTCwgdmFsKTsKIH07CiAKIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHsKQEAgLTU5MywzNSArNTkwLDM1IEBACiAJeyAodTE2KS0xIH0KIH07CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF93cml0ZV9pbml0dGFiKHN0cnVjdCBpMmNfY2xpZW50ICpjLAorc3RhdGljIGludCB0dnA1MTUwX3dyaXRlX2luaXR0YWIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCQljb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcmVncykKIHsKIAl3aGlsZSAocmVncy0+cmVnICE9IDB4ZmYpIHsKLQkJdHZwNTE1MF93cml0ZShjLCByZWdzLT5yZWcsIHJlZ3MtPnZhbHVlKTsKKwkJdHZwNTE1MF93cml0ZShzZCwgcmVncy0+cmVnLCByZWdzLT52YWx1ZSk7CiAJCXJlZ3MrKzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF92ZHBfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKK3N0YXRpYyBpbnQgdHZwNTE1MF92ZHBfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIERpc2FibGUgRnVsbCBGaWVsZCAqLwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQSwgMCk7CisJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQSwgMCk7CiAKIAkvKiBCZWZvcmUgcHJvZ3JhbW1pbmcsIExpbmUgbW9kZSBzaG91bGQgYmUgYXQgMHhmZiAqLwotCWZvciAoaT1UVlA1MTUwX0xJTkVfTU9ERV9JTkk7IGk8PVRWUDUxNTBfTElORV9NT0RFX0VORDsgaSsrKQotCQl0dnA1MTUwX3dyaXRlKGMsIGksIDB4ZmYpOworCWZvciAoaSA9IFRWUDUxNTBfTElORV9NT0RFX0lOSTsgaSA8PSBUVlA1MTUwX0xJTkVfTU9ERV9FTkQ7IGkrKykKKwkJdHZwNTE1MF93cml0ZShzZCwgaSwgMHhmZik7CiAKIAkvKiBMb2FkIFJhbSBUYWJsZSAqLwotCXdoaWxlIChyZWdzLT5yZWcgIT0gKHUxNiktMSApIHsKLQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTkZfUkFNX0FERFJfSElHSCxyZWdzLT5yZWc+PjgpOwotCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09ORl9SQU1fQUREUl9MT1cscmVncy0+cmVnKTsKKwl3aGlsZSAocmVncy0+cmVnICE9ICh1MTYpLTEpIHsKKwkJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9DT05GX1JBTV9BRERSX0hJR0gsIHJlZ3MtPnJlZyA+PiA4KTsKKwkJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9DT05GX1JBTV9BRERSX0xPVywgcmVncy0+cmVnKTsKIAotCQlmb3IgKGk9MDtpPDE2O2krKykKLQkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9WRFBfQ09ORl9SQU1fREFUQSxyZWdzLT52YWx1ZXNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCXR2cDUxNTBfd3JpdGUoc2QsIFRWUDUxNTBfVkRQX0NPTkZfUkFNX0RBVEEsIHJlZ3MtPnZhbHVlc1tpXSk7CiAKIAkJcmVncysrOwogCX0KQEAgLTYyOSwxMSArNjI2LDEzIEBACiB9CiAKIC8qIEZpbGxzIFZCSSBjYXBhYmlsaXRpZXMgYmFzZWQgb24gaTJjX3ZiaV9yYW1fdmFsdWUgc3RydWN0ICovCi1zdGF0aWMgdm9pZCB0dnA1MTUwX3ZiaV9nZXRfY2FwKGNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncywKK3N0YXRpYyBpbnQgdHZwNTE1MF9nX3NsaWNlZF92YmlfY2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCkKIHsKKwljb25zdCBzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgKnJlZ3MgPSB2YmlfcmFtX2RlZmF1bHQ7CiAJaW50IGxpbmU7CiAKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJWSURJT0NfR19TTElDRURfVkJJX0NBUFxuIik7CiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mICpjYXApOwogCiAJd2hpbGUgKHJlZ3MtPnJlZyAhPSAodTE2KS0xICkgewpAQCAtNjQ0LDYgKzY0Myw3IEBACiAKIAkJcmVncysrOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogU2V0IHZiaSBwcm9jZXNzaW5nCkBAIC02NTksMTggKzY1OSwxOCBAQAogICoJTFNCID0gZmllbGQxCiAgKglNU0IgPSBmaWVsZDIKICAqLwotc3RhdGljIGludCB0dnA1MTUwX3NldF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmMsCitzdGF0aWMgaW50IHR2cDUxNTBfc2V0X3ZiaShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJY29uc3Qgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlICpyZWdzLAogCQkJdW5zaWduZWQgaW50IHR5cGUsdTggZmxhZ3MsIGludCBsaW5lLAogCQkJY29uc3QgaW50IGZpZWxkcykKIHsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl2NGwyX3N0ZF9pZCBzdGQ9ZGVjb2Rlci0+bm9ybTsKKwlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IHRvX3R2cDUxNTAoc2QpOworCXY0bDJfc3RkX2lkIHN0ZCA9IGRlY29kZXItPm5vcm07CiAJdTggcmVnOwogCWludCBwb3M9MDsKIAogCWlmIChzdGQgPT0gVjRMMl9TVERfQUxMKSB7Ci0JCXR2cDUxNTBfZXJyKCJWQkkgY2FuJ3QgYmUgY29uZmlndXJlZCB3aXRob3V0IGtub3dpbmcgbnVtYmVyIG9mIGxpbmVzXG4iKTsKKwkJdjRsMl9lcnIoc2QsICJWQkkgY2FuJ3QgYmUgY29uZmlndXJlZCB3aXRob3V0IGtub3dpbmcgbnVtYmVyIG9mIGxpbmVzXG4iKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKIAkJLyogRG9uJ3QgZm9sbG93IE5UU0MgTGluZSBudW1iZXIgY29udmVuc2lvbiAqLwpAQCAtNjk4LDE2MyArNjk4LDE4NiBAQAogCXJlZz0oKGxpbmUtNik8PDEpK1RWUDUxNTBfTElORV9NT0RFX0lOSTsKIAogCWlmIChmaWVsZHMmMSkgewotCQl0dnA1MTUwX3dyaXRlKGMsIHJlZywgdHlwZSk7CisJCXR2cDUxNTBfd3JpdGUoc2QsIHJlZywgdHlwZSk7CiAJfQogCiAJaWYgKGZpZWxkcyYyKSB7Ci0JCXR2cDUxNTBfd3JpdGUoYywgcmVnKzEsIHR5cGUpOworCQl0dnA1MTUwX3dyaXRlKHNkLCByZWcrMSwgdHlwZSk7CiAJfQogCiAJcmV0dXJuIHR5cGU7CiB9CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9nZXRfdmJpKHN0cnVjdCBpMmNfY2xpZW50ICpjLAorc3RhdGljIGludCB0dnA1MTUwX2dldF92Ymkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncywgaW50IGxpbmUpCiB7Ci0Jc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JdjRsMl9zdGRfaWQgc3RkPWRlY29kZXItPm5vcm07CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSB0b190dnA1MTUwKHNkKTsKKwl2NGwyX3N0ZF9pZCBzdGQgPSBkZWNvZGVyLT5ub3JtOwogCXU4IHJlZzsKLQlpbnQgcG9zLCB0eXBlPTA7CisJaW50IHBvcywgdHlwZSA9IDA7CiAKIAlpZiAoc3RkID09IFY0TDJfU1REX0FMTCkgewotCQl0dnA1MTUwX2VycigiVkJJIGNhbid0IGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBrbm93aW5nIG51bWJlciBvZiBsaW5lc1xuIik7CisJCXY0bDJfZXJyKHNkLCAiVkJJIGNhbid0IGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBrbm93aW5nIG51bWJlciBvZiBsaW5lc1xuIik7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CiAJCS8qIERvbid0IGZvbGxvdyBOVFNDIExpbmUgbnVtYmVyIGNvbnZlbnNpb24gKi8KIAkJbGluZSArPSAzOwogCX0KIAotCWlmIChsaW5lPDZ8fGxpbmU+MjcpCisJaWYgKGxpbmUgPCA2IHx8IGxpbmUgPiAyNykKIAkJcmV0dXJuIDA7CiAKLQlyZWc9KChsaW5lLTYpPDwxKStUVlA1MTUwX0xJTkVfTU9ERV9JTkk7CisJcmVnID0gKChsaW5lIC0gNikgPDwgMSkgKyBUVlA1MTUwX0xJTkVfTU9ERV9JTkk7CiAKLQlwb3M9dHZwNTE1MF9yZWFkKGMsIHJlZykmMHgwZjsKLQlpZiAocG9zPDB4MGYpCi0JCXR5cGU9cmVnc1twb3NdLnR5cGUudmJpX3R5cGU7CisJcG9zID0gdHZwNTE1MF9yZWFkKHNkLCByZWcpICYgMHgwZjsKKwlpZiAocG9zIDwgMHgwZikKKwkJdHlwZSA9IHJlZ3NbcG9zXS50eXBlLnZiaV90eXBlOwogCi0JcG9zPXR2cDUxNTBfcmVhZChjLCByZWcrMSkmMHgwZjsKLQlpZiAocG9zPDB4MGYpCi0JCXR5cGV8PXJlZ3NbcG9zXS50eXBlLnZiaV90eXBlOworCXBvcyA9IHR2cDUxNTBfcmVhZChzZCwgcmVnICsgMSkgJiAweDBmOworCWlmIChwb3MgPCAweDBmKQorCQl0eXBlIHw9IHJlZ3NbcG9zXS50eXBlLnZiaV90eXBlOwogCiAJcmV0dXJuIHR5cGU7CiB9Ci1zdGF0aWMgaW50IHR2cDUxNTBfc2V0X3N0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdjRsMl9zdGRfaWQgc3RkKQotewotCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludCBmbXQ9MDsKIAotCWRlY29kZXItPm5vcm09c3RkOworc3RhdGljIGludCB0dnA1MTUwX3NldF9zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gdG9fdHZwNTE1MChzZCk7CisJaW50IGZtdCA9IDA7CisKKwlkZWNvZGVyLT5ub3JtID0gc3RkOwogCiAJLyogRmlyc3QgdGVzdHMgc2hvdWxkIGJlIGFnYWluc3Qgc3BlY2lmaWMgc3RkICovCiAKIAlpZiAoc3RkID09IFY0TDJfU1REX0FMTCkgewotCQlmbXQ9MDsJLyogQXV0b2RldGVjdCBtb2RlICovCisJCWZtdCA9IDA7CS8qIEF1dG9kZXRlY3QgbW9kZSAqLwogCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfTlRTQ180NDMpIHsKLQkJZm10PTB4YTsKKwkJZm10ID0gMHhhOwogCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMX00pIHsKLQkJZm10PTB4NjsKLQl9IGVsc2UgaWYgKHN0ZCAmIChWNEwyX1NURF9QQUxfTnwgVjRMMl9TVERfUEFMX05jKSkgewotCQlmbXQ9MHg4OworCQlmbXQgPSAweDY7CisJfSBlbHNlIGlmIChzdGQgJiAoVjRMMl9TVERfUEFMX04gfCBWNEwyX1NURF9QQUxfTmMpKSB7CisJCWZtdCA9IDB4ODsKIAl9IGVsc2UgewogCQkvKiBUaGVuLCB0ZXN0IGFnYWluc3QgZ2VuZXJpYyBvbmVzICovCi0JCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7Ci0JCQlmbXQ9MHgyOwotCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgewotCQkJZm10PTB4NDsKLQkJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgewotCQkJZm10PTB4YzsKLQkJfQorCQlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykKKwkJCWZtdCA9IDB4MjsKKwkJZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKQorCQkJZm10ID0gMHg0OworCQllbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkKKwkJCWZtdCA9IDB4YzsKIAl9CiAKLQl0dnA1MTUwX2RiZygxLCJTZXQgdmlkZW8gc3RkIHJlZ2lzdGVyIHRvICVkLlxuIixmbXQpOwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9WSURFT19TVEQsIGZtdCk7Ci0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZXQgdmlkZW8gc3RkIHJlZ2lzdGVyIHRvICVkLlxuIiwgZm10KTsKKwl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX1ZJREVPX1NURCwgZm10KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdGF0aWMgaW50IHR2cDUxNTBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQogeworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gdG9fdHZwNTE1MChzZCk7CisKKwlpZiAoZGVjb2Rlci0+bm9ybSA9PSBzdGQpCisJCXJldHVybiAwOworCisJcmV0dXJuIHR2cDUxNTBfc2V0X3N0ZChzZCwgc3RkKTsKK30KKworc3RhdGljIGludCB0dnA1MTUwX3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSB0b190dnA1MTUwKHNkKTsKIAl1OCBtc2JfaWQsIGxzYl9pZCwgbXNiX3JvbSwgbHNiX3JvbTsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAotCW1zYl9pZD10dnA1MTUwX3JlYWQoYyxUVlA1MTUwX01TQl9ERVZfSUQpOwotCWxzYl9pZD10dnA1MTUwX3JlYWQoYyxUVlA1MTUwX0xTQl9ERVZfSUQpOwotCW1zYl9yb209dHZwNTE1MF9yZWFkKGMsVFZQNTE1MF9ST01fTUFKT1JfVkVSKTsKLQlsc2Jfcm9tPXR2cDUxNTBfcmVhZChjLFRWUDUxNTBfUk9NX01JTk9SX1ZFUik7CisJbXNiX2lkID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX01TQl9ERVZfSUQpOworCWxzYl9pZCA9IHR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9MU0JfREVWX0lEKTsKKwltc2Jfcm9tID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1JPTV9NQUpPUl9WRVIpOworCWxzYl9yb20gPSB0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfUk9NX01JTk9SX1ZFUik7CiAKLQlpZiAoKG1zYl9yb209PTQpJiYobHNiX3JvbT09MCkpIHsgLyogSXMgVFZQNTE1MEFNMSAqLwotCQl0dnA1MTUwX2luZm8oInR2cCUwMnglMDJ4YW0xIGRldGVjdGVkLlxuIixtc2JfaWQsIGxzYl9pZCk7CisJaWYgKG1zYl9yb20gPT0gNCAmJiBsc2Jfcm9tID09IDApIHsgLyogSXMgVFZQNTE1MEFNMSAqLworCQl2NGwyX2luZm8oc2QsICJ0dnAlMDJ4JTAyeGFtMSBkZXRlY3RlZC5cbiIsIG1zYl9pZCwgbHNiX2lkKTsKIAogCQkvKiBJVFUtVCBCVC42NTYuNCB0aW1pbmcgKi8KLQkJdHZwNTE1MF93cml0ZShjLFRWUDUxNTBfUkVWX1NFTEVDVCwwKTsKKwkJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9SRVZfU0VMRUNULCAwKTsKIAl9IGVsc2UgewotCQlpZiAoKG1zYl9yb209PTMpfHwobHNiX3JvbT09MHgyMSkpIHsgLyogSXMgVFZQNTE1MEEgKi8KLQkJCXR2cDUxNTBfaW5mbygidHZwJTAyeCUwMnhhIGRldGVjdGVkLlxuIixtc2JfaWQsIGxzYl9pZCk7CisJCWlmIChtc2Jfcm9tID09IDMgfHwgbHNiX3JvbSA9PSAweDIxKSB7IC8qIElzIFRWUDUxNTBBICovCisJCQl2NGwyX2luZm8oc2QsICJ0dnAlMDJ4JTAyeGEgZGV0ZWN0ZWQuXG4iLCBtc2JfaWQsIGxzYl9pZCk7CiAJCX0gZWxzZSB7Ci0JCQl0dnA1MTUwX2luZm8oIioqKiB1bmtub3duIHR2cCUwMnglMDJ4IGNoaXAgZGV0ZWN0ZWQuXG4iLG1zYl9pZCxsc2JfaWQpOwotCQkJdHZwNTE1MF9pbmZvKCIqKiogUm9tIHZlciBpcyAlZC4lZFxuIixtc2Jfcm9tLGxzYl9yb20pOworCQkJdjRsMl9pbmZvKHNkLCAiKioqIHVua25vd24gdHZwJTAyeCUwMnggY2hpcCBkZXRlY3RlZC5cbiIsCisJCQkJCW1zYl9pZCwgbHNiX2lkKTsKKwkJCXY0bDJfaW5mbyhzZCwgIioqKiBSb20gdmVyIGlzICVkLiVkXG4iLCBtc2Jfcm9tLCBsc2Jfcm9tKTsKIAkJfQogCX0KIAogCS8qIEluaXRpYWxpemVzIFRWUDUxNTAgdG8gaXRzIGRlZmF1bHQgdmFsdWVzICovCi0JdHZwNTE1MF93cml0ZV9pbml0dGFiKGMsIHR2cDUxNTBfaW5pdF9kZWZhdWx0KTsKKwl0dnA1MTUwX3dyaXRlX2luaXR0YWIoc2QsIHR2cDUxNTBfaW5pdF9kZWZhdWx0KTsKIAogCS8qIEluaXRpYWxpemVzIFZEUCByZWdpc3RlcnMgKi8KLQl0dnA1MTUwX3ZkcF9pbml0KGMsIHZiaV9yYW1fZGVmYXVsdCk7CisJdHZwNTE1MF92ZHBfaW5pdChzZCwgdmJpX3JhbV9kZWZhdWx0KTsKIAogCS8qIFNlbGVjdHMgZGVjb2RlciBpbnB1dCAqLwotCXR2cDUxNTBfc2VsbXV4KGMpOworCXR2cDUxNTBfc2VsbXV4KHNkKTsKIAogCS8qIEluaXRpYWxpemVzIFRWUDUxNTAgdG8gc3RyZWFtIGVuYWJsZWQgdmFsdWVzICovCi0JdHZwNTE1MF93cml0ZV9pbml0dGFiKGMsIHR2cDUxNTBfaW5pdF9lbmFibGUpOworCXR2cDUxNTBfd3JpdGVfaW5pdHRhYihzZCwgdHZwNTE1MF9pbml0X2VuYWJsZSk7CiAKIAkvKiBJbml0aWFsaXplIGltYWdlIHByZWZlcmVuY2VzICovCi0JdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0JSSUdIVF9DVEwsIGRlY29kZXItPmJyaWdodCk7Ci0JdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QpOwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QpOwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9IVUVfQ1RMLCBkZWNvZGVyLT5odWUpOworCXR2cDUxNTBfd3JpdGUoc2QsIFRWUDUxNTBfQlJJR0hUX0NUTCwgZGVjb2Rlci0+YnJpZ2h0KTsKKwl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QpOworCXR2cDUxNTBfd3JpdGUoc2QsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwsIGRlY29kZXItPmNvbnRyYXN0KTsKKwl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0hVRV9DVEwsIGRlY29kZXItPmh1ZSk7CiAKLQl0dnA1MTUwX3NldF9zdGQoYywgZGVjb2Rlci0+bm9ybSk7CisJdHZwNTE1MF9zZXRfc3RkKHNkLCBkZWNvZGVyLT5ub3JtKTsKKwlyZXR1cm4gMDsKIH07CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgdHZwNTE1MF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLS8qCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOyAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19HX0NUUkwgY2FsbGVkXG4iKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCk7CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0JSSUdIVF9DVEwpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCk7CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCk7CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSFVFX0NUTCk7CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKHNkLCBUVlA1MTUwX0hVRV9DVEwpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9zZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgdHZwNTE1MF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLS8qCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOyAqLworCXU4IGksIG47CisJbiA9IEFSUkFZX1NJWkUodHZwNTE1MF9xY3RybCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChjdHJsLT5pZCAhPSB0dnA1MTUwX3FjdHJsW2ldLmlkKQorCQkJY29udGludWU7CisJCWlmIChjdHJsLT52YWx1ZSA8IHR2cDUxNTBfcWN0cmxbaV0ubWluaW11bSB8fAorCQkgICAgY3RybC0+dmFsdWUgPiB0dnA1MTUwX3FjdHJsW2ldLm1heGltdW0pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX1NfQ1RSTDogaWQ9JWQsIHZhbHVlPSVkXG4iLAorCQkJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwl9CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQlJJR0hUX0NUTCwgY3RybC0+dmFsdWUpOworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0JSSUdIVF9DVEwsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgY3RybC0+dmFsdWUpOworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCwgY3RybC0+dmFsdWUpOworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfSFVFX0NUTCwgY3RybC0+dmFsdWUpOworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0hVRV9DVEwsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtODYzLDIyNyArODg2LDIxMCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJCUkyQyBDb21tYW5kCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgdHZwNTE1MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorCitzdGF0aWMgaW50IHR2cDUxNTBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gdG9fdHZwNTE1MChzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSAwOgotCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKLQkJdHZwNTE1MF9yZXNldChjKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCi0JCSpyb3V0ZSA9IGRlY29kZXItPnJvdXRlOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCi0JCWRlY29kZXItPnJvdXRlID0gKnJvdXRlOwotCQl0dnA1MTUwX3NlbG11eChjKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX1NfU1REOgotCQlpZiAoZGVjb2Rlci0+bm9ybSA9PSAqKHY0bDJfc3RkX2lkICopYXJnKQotCQkJYnJlYWs7Ci0JCXJldHVybiB0dnA1MTUwX3NldF9zdGQoYywgKih2NGwyX3N0ZF9pZCAqKWFyZyk7Ci0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JCSoodjRsMl9zdGRfaWQgKilhcmcgPSBkZWNvZGVyLT5ub3JtOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwID0gYXJnOwotCQl0dnA1MTUwX2RiZygxLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOwotCi0JCXR2cDUxNTBfdmJpX2dldF9jYXAodmJpX3JhbV9kZWZhdWx0LCBjYXApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKLQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7Ci0JCWludCBpOwotCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKHN2YmktPnNlcnZpY2Vfc2V0ICE9IDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gMjM7IGkrKykgewotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXT10dnA1MTUwX3NldF92YmkoYywKLQkJCQkJIHZiaV9yYW1fZGVmYXVsdCwKLQkJCQkJIHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0sMHhmMCxpLDMpOwotCQkJfQotCQkJLyogRW5hYmxlcyBGSUZPICovCi0JCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfRklGT19PVVRfQ1RSTCwxKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERpc2FibGVzIEZJRk8qLwotCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwsMCk7Ci0KLQkJCS8qIERpc2FibGUgRnVsbCBGaWVsZCAqLwotCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BLCAwKTsKLQotCQkJLyogRGlzYWJsZSBMaW5lIG1vZGVzICovCi0JCQlmb3IgKGk9VFZQNTE1MF9MSU5FX01PREVfSU5JOyBpPD1UVlA1MTUwX0xJTkVfTU9ERV9FTkQ7IGkrKykKLQkJCQl0dnA1MTUwX3dyaXRlKGMsIGksIDB4ZmYpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10OwotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKLQotCQlpbnQgaSwgbWFzaz0wOwotCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCi0JCWZvciAoaSA9IDA7IGkgPD0gMjM7IGkrKykgewotCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXT10dnA1MTUwX2dldF92YmkoYywKLQkJCQl2YmlfcmFtX2RlZmF1bHQsaSk7Ci0JCQltYXNrfD1zdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldOwotCQl9Ci0JCXN2YmktPnNlcnZpY2Vfc2V0PW1hc2s7Ci0JCWJyZWFrOwotCX0KLQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKLQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7Ci0KLQkJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjLCByZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCi0JCQlyZWctPnZhbCA9IHR2cDUxNTBfcmVhZChjLCByZWctPnJlZyAmIDB4ZmYpOwotCQllbHNlCi0JCQl0dnA1MTUwX3dyaXRlKGMsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQlkdW1wX3JlZyhjKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0JCQlpbnQgc3RhdHVzID0gdHZwNTE1MF9yZWFkKGMsIDB4ODgpOwotCi0JCQl2dC0+c2lnbmFsID0gKChzdGF0dXMgJiAweDA0KSAmJiAoc3RhdHVzICYgMHgwMikpID8gMHhmZmZmIDogMHgwOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCQlpbnQgaTsKLQotCQkJdHZwNTE1MF9kYmcoMSwgIlZJRElPQ19RVUVSWUNUUkwgY2FsbGVkXG4iKTsKLQotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHZwNTE1MF9xY3RybCk7IGkrKykKLQkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB0dnA1MTUwX3FjdHJsW2ldLmlkKSB7Ci0JCQkJCW1lbWNweShxYywgJih0dnA1MTUwX3FjdHJsW2ldKSwKLQkJCQkJICAgICAgIHNpemVvZigqcWMpKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQkJCXR2cDUxNTBfZGJnKDEsICJWSURJT0NfR19DVFJMIGNhbGxlZFxuIik7Ci0KLQkJCXJldHVybiB0dnA1MTUwX2dldF9jdHJsKGMsIGN0cmwpOwotCQl9Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQkJdTggaSwgbjsKLQkJCW4gPSBBUlJBWV9TSVpFKHR2cDUxNTBfcWN0cmwpOwotCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJCQlpZiAoY3RybC0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgewotCQkJCQlpZiAoY3RybC0+dmFsdWUgPAotCQkJCQkgICAgdHZwNTE1MF9xY3RybFtpXS5taW5pbXVtCi0JCQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+Ci0JCQkJCSAgICB0dnA1MTUwX3FjdHJsW2ldLm1heGltdW0pCi0JCQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCQkJdHZwNTE1MF9kYmcoMSwKLQkJCQkJCSJWSURJT0NfU19DVFJMOiBpZD0lZCwgdmFsdWU9JWRcbiIsCi0JCQkJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOwotCQkJCQlyZXR1cm4gdHZwNTE1MF9zZXRfY3RybChjLCBjdHJsKTsKLQkJCQl9Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCisJZGVjb2Rlci0+cm91dGUgPSAqcm91dGU7CisJdHZwNTE1MF9zZWxtdXgoc2QpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHR2cDUxNTBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJaW50IGk7CisKKwkvKiByYXcgdmJpICovCisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHRoaXMgaXMgZm9yIGNhcHR1cmluZyAzNiByYXcgdmJpIGxpbmVzCisJCSAgIGlmIHRoZXJlJ3MgYSB3YXkgdG8gY3V0IG9mZiB0aGUgYmVnaW5uaW5nIDIgdmJpIGxpbmVzCisJCSAgIHdpdGggdGhlIHR2cDUxNTAgdGhlbiB0aGUgdmJpIGxpbmUgY291bnQgY291bGQgYmUgbG93ZXJlZAorCQkgICB0byAxNyBsaW5lcy9maWVsZCBhZ2FpbiwgYWx0aG91Z2ggSSBjb3VsZG4ndCBmaW5kIGEgcmVnaXN0ZXIKKwkJICAgd2hpY2ggY291bGQgZG8gdGhhdCBjcm9wcGluZyAqLworCQlpZiAoZm10LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0dSRVkpCisJCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMSwgMHg3MCk7CisJCWlmIChmbXQtPmZtdC52YmkuY291bnRbMF0gPT0gMTggJiYgZm10LT5mbXQudmJpLmNvdW50WzFdID09IDE4KSB7CisJCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RBUlQsIDB4MDApOworCQkJdHZwNTE1MF93cml0ZShzZCwgVFZQNTE1MF9WRVJUX0JMQU5LSU5HX1NUT1AsIDB4MDEpOworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKKwlpZiAoc3ZiaS0+c2VydmljZV9zZXQgIT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDw9IDIzOyBpKyspIHsKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJdHZwNTE1MF9zZXRfdmJpKHNkLCB2YmlfcmFtX2RlZmF1bHQsCisJCQkJICAgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0sIDB4ZjAsIGksIDMpOworCQl9CisJCS8qIEVuYWJsZXMgRklGTyAqLworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwsIDEpOworCX0gZWxzZSB7CisJCS8qIERpc2FibGVzIEZJRk8qLworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwsIDApOworCisJCS8qIERpc2FibGUgRnVsbCBGaWVsZCAqLworCQl0dnA1MTUwX3dyaXRlKHNkLCBUVlA1MTUwX0ZVTExfRklFTERfRU5BLCAwKTsKKworCQkvKiBEaXNhYmxlIExpbmUgbW9kZXMgKi8KKwkJZm9yIChpID0gVFZQNTE1MF9MSU5FX01PREVfSU5JOyBpIDw9IFRWUDUxNTBfTElORV9NT0RFX0VORDsgaSsrKQorCQkJdHZwNTE1MF93cml0ZShzZCwgaSwgMHhmZik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR2cDUxNTBfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJaW50IGksIG1hc2sgPSAwOworCisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOworCisJZm9yIChpID0gMDsgaSA8PSAyMzsgaSsrKSB7CisJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQorCQkJdHZwNTE1MF9nZXRfdmJpKHNkLCB2YmlfcmFtX2RlZmF1bHQsIGkpOworCQltYXNrIHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV07CisJfQorCXN2YmktPnNlcnZpY2Vfc2V0ID0gbWFzazsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHR2cDUxNTBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlpbnQgcmV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldiA9IHR2cDUxNTBfcmVhZChzZCwgVFZQNTE1MF9ST01fTUFKT1JfVkVSKSA8PCA4IHwKKwkgICAgICB0dnA1MTUwX3JlYWQoc2QsIFRWUDUxNTBfUk9NX01JTk9SX1ZFUik7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RWUDUxNTAsCisJCQkJCSAgcmV2KTsKK30KKworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB0dnA1MTUwX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnZhbCA9IHR2cDUxNTBfcmVhZChzZCwgcmVnLT5yZWcgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dnA1MTUwX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwl0dnA1MTUwX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB0dnA1MTUwX2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCWludCBzdGF0dXMgPSB0dnA1MTUwX3JlYWQoc2QsIDB4ODgpOworCisJdnQtPnNpZ25hbCA9ICgoc3RhdHVzICYgMHgwNCkgJiYgKHN0YXR1cyAmIDB4MDIpKSA/IDB4ZmZmZiA6IDB4MDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dnA1MTUwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX1FVRVJZQ1RSTCBjYWxsZWRcbiIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHZwNTE1MF9xY3RybCk7IGkrKykKKwkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgeworCQkJbWVtY3B5KHFjLCAmKHR2cDUxNTBfcWN0cmxbaV0pLAorCQkJICAgICAgIHNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB0dnA1MTUwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0dnA1MTUwX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gdHZwNTE1MF9sb2dfc3RhdHVzLAorCS5nX2N0cmwgPSB0dnA1MTUwX2dfY3RybCwKKwkuc19jdHJsID0gdHZwNTE1MF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHR2cDUxNTBfcXVlcnljdHJsLAorCS5yZXNldCA9IHR2cDUxNTBfcmVzZXQsCisJLmdfY2hpcF9pZGVudCA9IHR2cDUxNTBfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IHR2cDUxNTBfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IHR2cDUxNTBfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdHZwNTE1MF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gdHZwNTE1MF9zX3N0ZCwKKwkuZ190dW5lciA9IHR2cDUxNTBfZ190dW5lciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHR2cDUxNTBfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB0dnA1MTUwX3Nfcm91dGluZywKKwkuZ19mbXQgPSB0dnA1MTUwX2dfZm10LAorCS5zX2ZtdCA9IHR2cDUxNTBfc19mbXQsCisJLmdfc2xpY2VkX3ZiaV9jYXAgPSB0dnA1MTUwX2dfc2xpY2VkX3ZiaV9jYXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0dnA1MTUwX29wcyA9IHsKKwkuY29yZSA9ICZ0dnA1MTUwX2NvcmVfb3BzLAorCS50dW5lciA9ICZ0dnA1MTUwX3R1bmVyX29wcywKKwkudmlkZW8gPSAmdHZwNTE1MF92aWRlb19vcHMsCit9OworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCQlJMkMgQ2xpZW50ICYgRHJpdmVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPSAiKHVuc2V0KSIsCi0JLmRyaXZlciA9ICZkcml2ZXIsCi19OwotCi1zdGF0aWMgaW50IHR2cDUxNTBfZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgdHZwNTE1MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmM7CiAJc3RydWN0IHR2cDUxNTAgKmNvcmU7Ci0JaW50IHJ2OwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoIEtFUk5fSU5GTwotCQkidHZwNTE1MC5jOiBkZXRlY3RpbmcgdHZwNTE1MCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCi0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcmVzczsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKLQkgICAgKGFkYXB0ZXIsCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjLT5hZGFwdGVyLAogCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7Ci0KLQljID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShjLCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKwkJcmV0dXJuIC1FSU87CiAKIAljb3JlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR2cDUxNTApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvcmUpIHsKLQkJa2ZyZWUoYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywgY29yZSk7Ci0KLQlydiA9IGkyY19hdHRhY2hfY2xpZW50KGMpOworCXNkID0gJmNvcmUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjLCAmdHZwNTE1MF9vcHMpOworCXY0bF9pbmZvKGMsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCSBjLT5hZGRyIDw8IDEsIGMtPmFkYXB0ZXItPm5hbWUpOwogCiAJY29yZS0+bm9ybSA9IFY0TDJfU1REX0FMTDsJLyogRGVmYXVsdCBpcyBhdXRvZGV0ZWN0ICovCiAJY29yZS0+cm91dGUuaW5wdXQgPSBUVlA1MTUwX0NPTVBPU0lURTE7CkBAIC0xMDkzLDY5ICsxMDk5LDM4IEBACiAJY29yZS0+aHVlID0gMDsKIAljb3JlLT5zYXQgPSAxMjg7CiAKLQlpZiAocnYpIHsKLQkJa2ZyZWUoYyk7Ci0JCWtmcmVlKGNvcmUpOwotCQlyZXR1cm4gcnY7Ci0JfQotCiAJaWYgKGRlYnVnID4gMSkKLQkJZHVtcF9yZWcoYyk7CisJCXR2cDUxNTBfbG9nX3N0YXR1cyhzZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHZwNTE1MF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHR2cDUxNTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKCBLRVJOX0lORk8KLQkJInR2cDUxNTAuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlhZGFwdGVyLT5uYW1lLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmdHZwNTE1MF9kZXRlY3RfY2xpZW50KTsKLX0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCi1zdGF0aWMgaW50IHR2cDUxNTBfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQlpbnQgZXJyOwotCi0JdHZwNTE1MF9kYmcoMSwKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCSJ0dnA1MTUwLmM6IHJlbW92aW5nIHR2cDUxNTAgYWRhcHRlciBvbiBhZGRyZXNzIDB4JXhcbiIsCiAJCWMtPmFkZHIgPDwgMSk7CiAKLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjKTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoYyk7Ci0KKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fdHZwNTE1MChzZCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInR2cDUxNTAiLAotCX0sCi0JLmlkID0gSTJDX0RSSVZFUklEX1RWUDUxNTAsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSB0dnA1MTUwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gdHZwNTE1MF9kZXRhY2hfY2xpZW50LAotCi0JLmNvbW1hbmQgPSB0dnA1MTUwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZwNTE1MF9pZFtdID0geworCXsgInR2cDUxNTAiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2cDUxNTBfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdCB0dnA1MTUwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dnA1MTUwX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodHZwNTE1MF9pbml0KTsKLW1vZHVsZV9leGl0KHR2cDUxNTBfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAidHZwNTE1MCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RWUDUxNTAsCisJLmNvbW1hbmQgPSB0dnA1MTUwX2NvbW1hbmQsCisJLnByb2JlID0gdHZwNTE1MF9wcm9iZSwKKwkucmVtb3ZlID0gdHZwNTE1MF9yZW1vdmUsCisJLmxlZ2FjeV9jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0cgfCBJMkNfQ0xBU1NfVFZfRElHSVRBTCwKKwkuaWRfdGFibGUgPSB0dnA1MTUwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2RjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC0wLDAgKzEsOTUxIEBACisvKgorICogdHc5OTEwIFZpZGVvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIG92NzcyeCBkcml2ZXIsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqIENvcHlyaWdodCAyMDA2LTcgSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDA4LCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvdHc5OTEwLmg+CisKKyNkZWZpbmUgR0VUX0lEKHZhbCkgICgodmFsICYgMHhGOCkgPj4gMykKKyNkZWZpbmUgR0VUX1JlVih2YWwpICh2YWwgJiAweDA3KQorCisvKgorICogcmVnaXN0ZXIgb2Zmc2V0CisgKi8KKyNkZWZpbmUgSUQJCTB4MDAgLyogUHJvZHVjdCBJRCBDb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNUQVRVUzEJCTB4MDEgLyogQ2hpcCBTdGF0dXMgUmVnaXN0ZXIgSSAqLworI2RlZmluZSBJTkZPUk0JCTB4MDIgLyogSW5wdXQgRm9ybWF0ICovCisjZGVmaW5lIE9QRk9STQkJMHgwMyAvKiBPdXRwdXQgRm9ybWF0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRExZQ1RSCQkweDA0IC8qIEh5c3RlcmVzaXMgYW5kIEhTWU5DIERlbGF5IENvbnRyb2wgKi8KKyNkZWZpbmUgT1VUQ1RSMQkJMHgwNSAvKiBPdXRwdXQgQ29udHJvbCBJICovCisjZGVmaW5lIEFDTlRMMQkJMHgwNiAvKiBBbmFsb2cgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIENST1BfSEkJCTB4MDcgLyogQ3JvcHBpbmcgUmVnaXN0ZXIsIEhpZ2ggKi8KKyNkZWZpbmUgVkRFTEFZX0xPCTB4MDggLyogVmVydGljYWwgRGVsYXkgUmVnaXN0ZXIsIExvdyAqLworI2RlZmluZSBWQUNUSVZFX0xPCTB4MDkgLyogVmVydGljYWwgQWN0aXZlIFJlZ2lzdGVyLCBMb3cgKi8KKyNkZWZpbmUgSERFTEFZX0xPCTB4MEEgLyogSG9yaXpvbnRhbCBEZWxheSBSZWdpc3RlciwgTG93ICovCisjZGVmaW5lIEhBQ1RJVkVfTE8JMHgwQiAvKiBIb3Jpem9udGFsIEFjdGl2ZSBSZWdpc3RlciwgTG93ICovCisjZGVmaW5lIENOVFJMMQkJMHgwQyAvKiBDb250cm9sIFJlZ2lzdGVyIEkgKi8KKyNkZWZpbmUgVlNDQUxFX0xPCTB4MEQgLyogVmVydGljYWwgU2NhbGluZyBSZWdpc3RlciwgTG93ICovCisjZGVmaW5lIFNDQUxFX0hJCTB4MEUgLyogU2NhbGluZyBSZWdpc3RlciwgSGlnaCAqLworI2RlZmluZSBIU0NBTEVfTE8JMHgwRiAvKiBIb3Jpem9udGFsIFNjYWxpbmcgUmVnaXN0ZXIsIExvdyAqLworI2RlZmluZSBCUklHSFQJCTB4MTAgLyogQlJJR0hUTkVTUyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENPTlRSQVNUCTB4MTEgLyogQ09OVFJBU1QgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTSEFSUE5FU1MJMHgxMiAvKiBTSEFSUE5FU1MgQ29udHJvbCBSZWdpc3RlciBJICovCisjZGVmaW5lIFNBVF9VCQkweDEzIC8qIENocm9tYSAoVSkgR2FpbiBSZWdpc3RlciAqLworI2RlZmluZSBTQVRfVgkJMHgxNCAvKiBDaHJvbWEgKFYpIEdhaW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSFVFCQkweDE1IC8qIEh1ZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENPUklORzEJCTB4MTcKKyNkZWZpbmUgQ09SSU5HMgkJMHgxOCAvKiBDb3JpbmcgYW5kIElGIGNvbXBlbnNhdGlvbiAqLworI2RlZmluZSBWQklDTlRMCQkweDE5IC8qIFZCSSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEFDTlRMMgkJMHgxQSAvKiBBbmFsb2cgQ29udHJvbCAyICovCisjZGVmaW5lIE9VVENUUjIJCTB4MUIgLyogT3V0cHV0IENvbnRyb2wgMiAqLworI2RlZmluZSBTRFQJCTB4MUMgLyogU3RhbmRhcmQgU2VsZWN0aW9uICovCisjZGVmaW5lIFNEVFIJCTB4MUQgLyogU3RhbmRhcmQgUmVjb2duaXRpb24gKi8KKyNkZWZpbmUgVEVTVAkJMHgxRiAvKiBUZXN0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0xNUEcJCTB4MjAgLyogQ2xhbXBpbmcgR2FpbiAqLworI2RlZmluZSBJQUdDCQkweDIxIC8qIEluZGl2aWR1YWwgQUdDIEdhaW4gKi8KKyNkZWZpbmUgQUdDR0FJTgkJMHgyMiAvKiBBR0MgR2FpbiAqLworI2RlZmluZSBQRUFLV1QJCTB4MjMgLyogV2hpdGUgUGVhayBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgQ0xNUEwJCTB4MjQgLyogQ2xhbXAgbGV2ZWwgKi8KKyNkZWZpbmUgU1lOQ1QJCTB4MjUgLyogU3luYyBBbXBsaXR1ZGUgKi8KKyNkZWZpbmUgTUlTU0NOVAkJMHgyNiAvKiBTeW5jIE1pc3MgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENMQU1QCQkweDI3IC8qIENsYW1wIFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFZDTlRMMQkJMHgyOCAvKiBWZXJ0aWNhbCBDb250cm9sIEkgKi8KKyNkZWZpbmUgVkNOVEwyCQkweDI5IC8qIFZlcnRpY2FsIENvbnRyb2wgSUkgKi8KKyNkZWZpbmUgQ0tJTEwJCTB4MkEgLyogQ29sb3IgS2lsbGVyIExldmVsIENvbnRyb2wgKi8KKyNkZWZpbmUgQ09NQgkJMHgyQiAvKiBDb21iIEZpbHRlciBDb250cm9sICovCisjZGVmaW5lIExETFkJCTB4MkMgLyogTHVtYSBEZWxheSBhbmQgSCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBNSVNDMQkJMHgyRCAvKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgSSAqLworI2RlZmluZSBMT09QCQkweDJFIC8qIExPT1AgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDMgkJMHgyRiAvKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgSUkgKi8KKyNkZWZpbmUgTVZTTgkJMHgzMCAvKiBNYWNyb3Zpc2lvbiBEZXRlY3Rpb24gKi8KKyNkZWZpbmUgU1RBVFVTMgkJMHgzMSAvKiBDaGlwIFNUQVRVUyBJSSAqLworI2RlZmluZSBIRlJFRgkJMHgzMiAvKiBIIG1vbml0b3IgKi8KKyNkZWZpbmUgQ0xNRAkJMHgzMyAvKiBDTEFNUCBNT0RFICovCisjZGVmaW5lIElEQ05UTAkJMHgzNCAvKiBJRCBEZXRlY3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBDTENOVEwxCQkweDM1IC8qIENsYW1wIENvbnRyb2wgSSAqLworI2RlZmluZSBBTkFQTExDVEwJMHg0QworI2RlZmluZSBWQklNSU4JCTB4NEQKKyNkZWZpbmUgSFNMT1dDVEwJMHg0RQorI2RlZmluZSBXU1MzCQkweDRGCisjZGVmaW5lIEZJTExEQVRBCTB4NTAKKyNkZWZpbmUgU0RJRAkJMHg1MQorI2RlZmluZSBESUQJCTB4NTIKKyNkZWZpbmUgV1NTMQkJMHg1MworI2RlZmluZSBXU1MyCQkweDU0CisjZGVmaW5lIFZWQkkJCTB4NTUKKyNkZWZpbmUgTENUTDYJCTB4NTYKKyNkZWZpbmUgTENUTDcJCTB4NTcKKyNkZWZpbmUgTENUTDgJCTB4NTgKKyNkZWZpbmUgTENUTDkJCTB4NTkKKyNkZWZpbmUgTENUTDEwCQkweDVBCisjZGVmaW5lIExDVEwxMQkJMHg1QgorI2RlZmluZSBMQ1RMMTIJCTB4NUMKKyNkZWZpbmUgTENUTDEzCQkweDVECisjZGVmaW5lIExDVEwxNAkJMHg1RQorI2RlZmluZSBMQ1RMMTUJCTB4NUYKKyNkZWZpbmUgTENUTDE2CQkweDYwCisjZGVmaW5lIExDVEwxNwkJMHg2MQorI2RlZmluZSBMQ1RMMTgJCTB4NjIKKyNkZWZpbmUgTENUTDE5CQkweDYzCisjZGVmaW5lIExDVEwyMAkJMHg2NAorI2RlZmluZSBMQ1RMMjEJCTB4NjUKKyNkZWZpbmUgTENUTDIyCQkweDY2CisjZGVmaW5lIExDVEwyMwkJMHg2NworI2RlZmluZSBMQ1RMMjQJCTB4NjgKKyNkZWZpbmUgTENUTDI1CQkweDY5CisjZGVmaW5lIExDVEwyNgkJMHg2QQorI2RlZmluZSBIU0dFR0lOCQkweDZCCisjZGVmaW5lIEhTRU5ECQkweDZDCisjZGVmaW5lIE9WU0RMWQkJMHg2RAorI2RlZmluZSBPVlNFTkQJCTB4NkUKKyNkZWZpbmUgVkJJREVMQVkJMHg2RgorCisvKgorICogcmVnaXN0ZXIgZGV0YWlsCisgKi8KKworLyogSU5GT1JNICovCisjZGVmaW5lIEZDMjdfT04gICAgIDB4NDAgLyogMSA6IElucHV0IGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5IGlzIDI3TUh6ICovCisjZGVmaW5lIEZDMjdfRkYgICAgIDB4MDAgLyogMCA6IFNxdWFyZSBwaXhlbCBtb2RlLiAqLworCQkJIC8qICAgICBNdXN0IHVzZSAyNC41NE1IeiBmb3IgNjBIeiBmaWVsZCByYXRlICovCisJCQkgLyogICAgIHNvdXJjZSBvciAyOS41TUh6IGZvciA1MEh6IGZpZWxkIHJhdGUgKi8KKyNkZWZpbmUgSUZTRUxfUyAgICAgMHgxMCAvKiAwMSA6IFMtdmlkZW8gZGVjb2RpbmcgKi8KKyNkZWZpbmUgSUZTRUxfQyAgICAgMHgwMCAvKiAwMCA6IENvbXBvc2l0ZSB2aWRlbyBkZWNvZGluZyAqLworCQkJIC8qIFkgaW5wdXQgdmlkZW8gc2VsZWN0aW9uICovCisjZGVmaW5lIFlTRUxfTTAgICAgIDB4MDAgLyogIDAwIDogTXV4MCBzZWxlY3RlZCAqLworI2RlZmluZSBZU0VMX00xICAgICAweDA0IC8qICAwMSA6IE11eDEgc2VsZWN0ZWQgKi8KKyNkZWZpbmUgWVNFTF9NMiAgICAgMHgwOCAvKiAgMTAgOiBNdXgyIHNlbGVjdGVkICovCisjZGVmaW5lIFlTRUxfTTMgICAgIDB4MTAgLyogIDExIDogTXV4MyBzZWxlY3RlZCAqLworCisvKiBPUEZPUk0gKi8KKyNkZWZpbmUgTU9ERSAgICAgICAgMHg4MCAvKiAwIDogQ0NJUjYwMSBjb21wYXRpYmxlIFlDckNiIDQ6MjoyIGZvcm1hdCAqLworCQkJIC8qIDEgOiBJVFUtUi02NTYgY29tcGF0aWJsZSBkYXRhIHNlcXVlbmNlIGZvcm1hdCAqLworI2RlZmluZSBMRU4gICAgICAgICAweDQwIC8qIDAgOiA4LWJpdCBZQ3JDYiA0OjI6MiBvdXRwdXQgZm9ybWF0ICovCisJCQkgLyogMSA6IDE2LWJpdCBZQ3JDYiA0OjI6MiBvdXRwdXQgZm9ybWF0LiovCisjZGVmaW5lIExMQ01PREUgICAgIDB4MjAgLyogMSA6IExMQyBvdXRwdXQgbW9kZS4gKi8KKwkJCSAvKiAwIDogZnJlZS1ydW4gb3V0cHV0IG1vZGUgKi8KKyNkZWZpbmUgQUlOQyAgICAgICAgMHgxMCAvKiBTZXJpYWwgaW50ZXJmYWNlIGF1dG8taW5kZXhpbmcgY29udHJvbCAqLworCQkJIC8qIDAgOiBhdXRvLWluY3JlbWVudCAqLworCQkJIC8qIDEgOiBub24tYXV0byAqLworI2RlZmluZSBWU0NUTCAgICAgICAweDA4IC8qIDEgOiBWZXJ0aWNhbCBvdXQgY3RybCBieSBEVkFMSUQgKi8KKwkJCSAvKiAwIDogVmVydGljYWwgb3V0IGN0cmwgYnkgSEFDVElWRSBhbmQgRFZBTElEICovCisjZGVmaW5lIE9FTiAgICAgICAgIDB4MDQgLyogT3V0cHV0IEVuYWJsZSB0b2dldGhlciB3aXRoIFRSSV9TRUwuICovCisKKy8qIE9VVENUUjEgKi8KKyNkZWZpbmUgVlNQX0xPICAgICAgMHgwMCAvKiAwIDogVlMgcGluIG91dHB1dCBwb2xhcml0eSBpcyBhY3RpdmUgbG93ICovCisjZGVmaW5lIFZTUF9ISSAgICAgIDB4ODAgLyogMSA6IFZTIHBpbiBvdXRwdXQgcG9sYXJpdHkgaXMgYWN0aXZlIGhpZ2guICovCisJCQkgLyogVlMgcGluIG91dHB1dCBjb250cm9sICovCisjZGVmaW5lIFZTU0xfVlNZTkMgIDB4MDAgLyogICAwIDogVlNZTkMgICovCisjZGVmaW5lIFZTU0xfVkFDVCAgIDB4MTAgLyogICAxIDogVkFDVCAgICovCisjZGVmaW5lIFZTU0xfRklFTEQgIDB4MjAgLyogICAyIDogRklFTEQgICovCisjZGVmaW5lIFZTU0xfVlZBTElEIDB4MzAgLyogICAzIDogVlZBTElEICovCisjZGVmaW5lIFZTU0xfWkVSTyAgIDB4NzAgLyogICA3IDogMCAgICAgICovCisjZGVmaW5lIEhTUF9MT1cgICAgIDB4MDAgLyogMCA6IEhTIHBpbiBvdXRwdXQgcG9sYXJpdHkgaXMgYWN0aXZlIGxvdyAqLworI2RlZmluZSBIU1BfSEkgICAgICAweDA4IC8qIDEgOiBIUyBwaW4gb3V0cHV0IHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoLiovCisJCQkgLyogSFMgcGluIG91dHB1dCBjb250cm9sICovCisjZGVmaW5lIEhTU0xfSEFDVCAgIDB4MDAgLyogICAwIDogSEFDVCAgICovCisjZGVmaW5lIEhTU0xfSFNZTkMgIDB4MDEgLyogICAxIDogSFNZTkMgICovCisjZGVmaW5lIEhTU0xfRFZBTElEIDB4MDIgLyogICAyIDogRFZBTElEICovCisjZGVmaW5lIEhTU0xfSExPQ0sgIDB4MDMgLyogICAzIDogSExPQ0sgICovCisjZGVmaW5lIEhTU0xfQVNZTkNXIDB4MDQgLyogICA0IDogQVNZTkNXICovCisjZGVmaW5lIEhTU0xfWkVSTyAgIDB4MDcgLyogICA3IDogMCAgICAgICovCisKKy8qIEFDTlRMMSAqLworI2RlZmluZSBTUkVTRVQgICAgICAweDgwIC8qIHJlc2V0cyB0aGUgZGV2aWNlIHRvIGl0cyBkZWZhdWx0IHN0YXRlCisJCQkgICogYnV0IGFsbCByZWdpc3RlciBjb250ZW50IHJlbWFpbiB1bmNoYW5nZWQuCisJCQkgICogVGhpcyBiaXQgaXMgc2VsZi1yZXNldHRpbmcuCisJCQkgICovCisKKy8qIFZCSUNOVEwgKi8KKy8qIFJUU0VMIDogY29udHJvbCB0aGUgcmVhbCB0aW1lIHNpZ25hbAorKiAgICAgICAgICBvdXRwdXQgZnJvbSB0aGUgTVBPVVQgcGluCisqLworI2RlZmluZSBSVFNFTF9NQVNLICAweDA3CisjZGVmaW5lIFJUU0VMX1ZMT1NTIDB4MDAgLyogMDAwMCA9IFZpZGVvIGxvc3MgKi8KKyNkZWZpbmUgUlRTRUxfSExPQ0sgMHgwMSAvKiAwMDAxID0gSC1sb2NrICovCisjZGVmaW5lIFJUU0VMX1NMT0NLIDB4MDIgLyogMDAxMCA9IFMtbG9jayAqLworI2RlZmluZSBSVFNFTF9WTE9DSyAweDAzIC8qIDAwMTEgPSBWLWxvY2sgKi8KKyNkZWZpbmUgUlRTRUxfTU9OTyAgMHgwNCAvKiAwMTAwID0gTU9OTyAqLworI2RlZmluZSBSVFNFTF9ERVQ1MCAweDA1IC8qIDAxMDEgPSBERVQ1MCAqLworI2RlZmluZSBSVFNFTF9GSUVMRCAweDA2IC8qIDAxMTAgPSBGSUVMRCAqLworI2RlZmluZSBSVFNFTF9SVENPICAweDA3IC8qIDAxMTEgPSBSVENPICggUmVhbCBUaW1lIENvbnRyb2wgKSAqLworCisvKgorICogc3RydWN0dXJlCisgKi8KKworc3RydWN0IHJlZ3ZhbF9saXN0IHsKKwl1bnNpZ25lZCBjaGFyIHJlZ19udW07CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKK307CisKK3N0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCB7CisJY2hhciAgICAgICAgICAgKm5hbWU7CisJdW5zaWduZWQgc2hvcnQgIHdpZHRoOworCXVuc2lnbmVkIHNob3J0ICBoZWlnaHQ7CisJdTE2ICAgICAgICAgICAgIGhzY2FsZTsKKwl1MTYgICAgICAgICAgICAgdnNjYWxlOworfTsKKworc3RydWN0IHR3OTkxMF9jcm9wcGluZ19jdHJsIHsKKwl1MTYgdmRlbGF5OworCXUxNiB2YWN0aXZlOworCXUxNiBoZGVsYXk7CisJdTE2IGhhY3RpdmU7Cit9OworCitzdHJ1Y3QgdHc5OTEwX2hzeW5jX2N0cmwgeworCXUxNiBzdGFydDsKKwl1MTYgZW5kOworfTsKKworc3RydWN0IHR3OTkxMF9wcml2IHsKKwlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87CisJc3RydWN0IGkyY19jbGllbnQgICAgICAgICAgICAgICpjbGllbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICBpY2Q7CisJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKK307CisKKy8qCisgKiByZWdpc3RlciBzZXR0aW5ncworICovCisKKyNkZWZpbmUgRU5ETUFSS0VSIHsgMHhmZiwgMHhmZiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3QgdHc5OTEwX2RlZmF1bHRfcmVnc1tdID0KK3sKKwl7IE9QRk9STSwgIDB4MDAgfSwKKwl7IE9VVENUUjEsIFZTUF9MTyB8IFZTU0xfVlZBTElEIHwgSFNQX0hJIHwgSFNTTF9IU1lOQyB9LAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCB0dzk5MTBfY29sb3JfZm10W10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJWWVVZIiwKKwkJLmZvdXJjYyAgICAgPSBWNEwyX1BJWF9GTVRfVllVWSwKKwkJLmRlcHRoICAgICAgPSAxNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgdHc5OTEwX250c2Nfc2NhbGVzW10gPSB7CisJeworCQkubmFtZSAgID0gIk5UU0MgU1EiLAorCQkud2lkdGggID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkuaHNjYWxlID0gMHgwMTAwLAorCQkudnNjYWxlID0gMHgwMTAwLAorCX0sCisJeworCQkubmFtZSAgID0gIk5UU0MgQ0NJUjYwMSIsCisJCS53aWR0aCAgPSA3MjAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5oc2NhbGUgPSAweDAxMDAsCisJCS52c2NhbGUgPSAweDAxMDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTlRTQyBTUSAoQ0lGKSIsCisJCS53aWR0aCAgPSAzMjAsCisJCS5oZWlnaHQgPSAyNDAsCisJCS5oc2NhbGUgPSAweDAyMDAsCisJCS52c2NhbGUgPSAweDAyMDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTlRTQyBDQ0lSNjAxIChDSUYpIiwKKwkJLndpZHRoICA9IDM2MCwKKwkJLmhlaWdodCA9IDI0MCwKKwkJLmhzY2FsZSA9IDB4MDIwMCwKKwkJLnZzY2FsZSA9IDB4MDIwMCwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOVFNDIFNRIChRQ0lGKSIsCisJCS53aWR0aCAgPSAxNjAsCisJCS5oZWlnaHQgPSAxMjAsCisJCS5oc2NhbGUgPSAweDA0MDAsCisJCS52c2NhbGUgPSAweDA0MDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTlRTQyBDQ0lSNjAxIChRQ0lGKSIsCisJCS53aWR0aCAgPSAxODAsCisJCS5oZWlnaHQgPSAxMjAsCisJCS5oc2NhbGUgPSAweDA0MDAsCisJCS52c2NhbGUgPSAweDA0MDAsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgdHc5OTEwX3BhbF9zY2FsZXNbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiUEFMIFNRIiwKKwkJLndpZHRoICA9IDc2OCwKKwkJLmhlaWdodCA9IDU3NiwKKwkJLmhzY2FsZSA9IDB4MDEwMCwKKwkJLnZzY2FsZSA9IDB4MDEwMCwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJQQUwgQ0NJUjYwMSIsCisJCS53aWR0aCAgPSA3MjAsCisJCS5oZWlnaHQgPSA1NzYsCisJCS5oc2NhbGUgPSAweDAxMDAsCisJCS52c2NhbGUgPSAweDAxMDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiUEFMIFNRIChDSUYpIiwKKwkJLndpZHRoICA9IDM4NCwKKwkJLmhlaWdodCA9IDI4OCwKKwkJLmhzY2FsZSA9IDB4MDIwMCwKKwkJLnZzY2FsZSA9IDB4MDIwMCwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJQQUwgQ0NJUjYwMSAoQ0lGKSIsCisJCS53aWR0aCAgPSAzNjAsCisJCS5oZWlnaHQgPSAyODgsCisJCS5oc2NhbGUgPSAweDAyMDAsCisJCS52c2NhbGUgPSAweDAyMDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiUEFMIFNRIChRQ0lGKSIsCisJCS53aWR0aCAgPSAxOTIsCisJCS5oZWlnaHQgPSAxNDQsCisJCS5oc2NhbGUgPSAweDA0MDAsCisJCS52c2NhbGUgPSAweDA0MDAsCisJfSwKKwl7CisJCS5uYW1lICAgPSAiUEFMIENDSVI2MDEgKFFDSUYpIiwKKwkJLndpZHRoICA9IDE4MCwKKwkJLmhlaWdodCA9IDE0NCwKKwkJLmhzY2FsZSA9IDB4MDQwMCwKKwkJLnZzY2FsZSA9IDB4MDQwMCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dzk5MTBfY3JvcHBpbmdfY3RybCB0dzk5MTBfY3JvcHBpbmdfY3RybCA9IHsKKwkudmRlbGF5ICA9IDB4MDAxMiwKKwkudmFjdGl2ZSA9IDB4MDBGMCwKKwkuaGRlbGF5ICA9IDB4MDAxMCwKKwkuaGFjdGl2ZSA9IDB4MDJEMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX2hzeW5jX2N0cmwgdHc5OTEwX2hzeW5jX2N0cmwgPSB7CisJLnN0YXJ0ID0gMHgwMjYwLAorCS5lbmQgICA9IDB4MDMwMCwKK307CisKKy8qCisgKiBnZW5lcmFsIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9zY2FsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgIGNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCAqc2NhbGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBTQ0FMRV9ISSwKKwkJCQkJKHNjYWxlLT52c2NhbGUgJiAweDBGMDApID4+IDQgfAorCQkJCQkoc2NhbGUtPmhzY2FsZSAmIDB4MEYwMCkgPj4gOCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSFNDQUxFX0xPLAorCQkJCQlzY2FsZS0+aHNjYWxlICYgMHgwMEZGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBWU0NBTEVfTE8sCisJCQkJCXNjYWxlLT52c2NhbGUgJiAweDAwRkYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0dzk5MTBfc2V0X2Nyb3BwaW5nKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHR3OTkxMF9jcm9wcGluZ19jdHJsICpjcm9wcGluZykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIENST1BfSEksCisJCQkJCShjcm9wcGluZy0+dmRlbGF5ICAmIDB4MDMwMCkgPj4gMiB8CisJCQkJCShjcm9wcGluZy0+dmFjdGl2ZSAmIDB4MDMwMCkgPj4gNCB8CisJCQkJCShjcm9wcGluZy0+aGRlbGF5ICAmIDB4MDMwMCkgPj4gNiB8CisJCQkJCShjcm9wcGluZy0+aGFjdGl2ZSAmIDB4MDMwMCkgPj4gOCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVkRFTEFZX0xPLAorCQkJCQljcm9wcGluZy0+dmRlbGF5ICYgMHgwMEZGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBWQUNUSVZFX0xPLAorCQkJCQljcm9wcGluZy0+dmFjdGl2ZSAmIDB4MDBGRik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSERFTEFZX0xPLAorCQkJCQljcm9wcGluZy0+aGRlbGF5ICYgMHgwMEZGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBIQUNUSVZFX0xPLAorCQkJCQljcm9wcGluZy0+aGFjdGl2ZSAmIDB4MDBGRik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3OTkxMF9zZXRfaHN5bmMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdHc5OTEwX2hzeW5jX2N0cmwgKmhzeW5jKQoreworCWludCByZXQ7CisKKwkvKiBiaXQgMTAgLSAzICovCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEhTR0VHSU4sCisJCQkJCShoc3luYy0+c3RhcnQgJiAweDA3RjgpID4+IDMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYml0IDEwIC0gMyAqLworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBIU0VORCwKKwkJCQkJKGhzeW5jLT5lbmQgJiAweDA3RjgpID4+IDMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYml0IDIgLSAwICovCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSFNMT1dDVEwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEhTTE9XQ1RMLAorCQkJCQkocmV0ICYgMHg4OCkgICAgICAgICAgICAgICAgIHwKKwkJCQkJKGhzeW5jLT5zdGFydCAmIDB4MDAwNykgPDwgNCB8CisJCQkJCShoc3luYy0+ZW5kICAgJiAweDAwMDcpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3dyaXRlX2FycmF5KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnZhbHMpCit7CisJd2hpbGUgKHZhbHMtPnJlZ19udW0gIT0gMHhmZikgeworCQlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgICAgdmFscy0+cmVnX251bSwKKwkJCQkJCSAgICB2YWxzLT52YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJdmFscysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfbWFza19zZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCSAgIHU4IG1hc2ssIHU4IHNldCkKK3sKKwlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9ICBzZXQ7CisKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHR3OTkxMF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBQ05UTDEsIFNSRVNFVCk7CisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsKgordHc5OTEwX3NlbGVjdF9ub3JtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKKwljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnJldCA9IE5VTEw7CisJdjRsMl9zdGRfaWQgbm9ybSA9IGljZC0+dmRldi0+Y3VycmVudF9ub3JtOworCV9fdTMyIGRpZmYgPSAweGZmZmZmZmZmLCB0bXA7CisJaW50IHNpemUsIGk7CisKKwlpZiAobm9ybSAmIFY0TDJfU1REX05UU0MpIHsKKwkJc2NhbGUgPSB0dzk5MTBfbnRzY19zY2FsZXM7CisJCXNpemUgPSBBUlJBWV9TSVpFKHR3OTkxMF9udHNjX3NjYWxlcyk7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfUEFMKSB7CisJCXNjYWxlID0gdHc5OTEwX3BhbF9zY2FsZXM7CisJCXNpemUgPSBBUlJBWV9TSVpFKHR3OTkxMF9wYWxfc2NhbGVzKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXRtcCA9IGFicyh3aWR0aCAtIHNjYWxlW2ldLndpZHRoKSArCisJCQlhYnMoaGVpZ2h0IC0gc2NhbGVbaV0uaGVpZ2h0KTsKKwkJaWYgKHRtcCA8IGRpZmYpIHsKKwkJCWRpZmYgPSB0bXA7CisJCQlyZXQgPSBzY2FsZSArIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc29jX2NhbWVyYV9vcHMgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCB0dzk5MTBfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+aW5mby0+bGluay5wb3dlcikgeworCQlyZXQgPSBwcml2LT5pbmZvLT5saW5rLnBvd2VyKCZwcml2LT5jbGllbnQtPmRldiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocHJpdi0+aW5mby0+bGluay5yZXNldCkKKwkJcmV0ID0gcHJpdi0+aW5mby0+bGluay5yZXNldCgmcHJpdi0+Y2xpZW50LT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0dzk5MTBfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+aW5mby0+bGluay5wb3dlcikKKwkJcmV0ID0gcHJpdi0+aW5mby0+bGluay5wb3dlcigmcHJpdi0+Y2xpZW50LT5kZXYsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0dzk5MTBfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CisKKwlpZiAoIXByaXYtPnNjYWxlKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAibm9ybSBzZWxlY3QgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgJWR4JWRcbiIsCisJCSBwcml2LT5zY2FsZS0+bmFtZSwKKwkJIHByaXYtPnNjYWxlLT53aWR0aCwKKwkJIHByaXYtPnNjYWxlLT5oZWlnaHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0dzk5MTBfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBwcml2LT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOworCisJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHR3OTkxMF9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmlkKQoreworCWlkLT5pZGVudCA9IFY0TDJfSURFTlRfVFc5OTEwOworCWlkLT5yZXZpc2lvbiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfc2V0X3N0ZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgdjRsMl9zdGRfaWQgKmEpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoKmEgJiAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCkpCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3OTkxMF9lbnVtX2lucHV0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQoreworCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwlpbnAtPnN0ZCAgPSBWNEwyX1NURF9VTktOT1dOOworCXN0cmNweShpbnAtPm5hbWUsICJWaWRlbyIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHR3OTkxMF9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CisJaW50IHJldDsKKworCWlmIChyZWctPnJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgcmVnLT5yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogcmV0ICAgICAgPSBpbnQKKwkgKiByZWctPnZhbCA9IF9fdTY0CisJICovCisJcmVnLT52YWwgPSAoX191NjQpcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKworCWlmIChyZWctPnJlZyA+IDB4ZmYgfHwKKwkgICAgcmVnLT52YWwgPiAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKKwlpbnQgICAgICAgICAgICAgICAgIHJldCAgPSAtRUlOVkFMOworCXU4ICAgICAgICAgICAgICAgICAgdmFsOworCisJLyoKKwkgKiBzZWxlY3Qgc3VpdGFibGUgbm9ybQorCSAqLworCXByaXYtPnNjYWxlID0gdHc5OTEwX3NlbGVjdF9ub3JtKGljZCwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisJaWYgKCFwcml2LT5zY2FsZSkKKwkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKKworCS8qCisJICogcmVzZXQgaGFyZHdhcmUKKwkgKi8KKwl0dzk5MTBfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlyZXQgPSB0dzk5MTBfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCB0dzk5MTBfZGVmYXVsdF9yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKKworCS8qCisJICogc2V0IGJ1cyB3aWR0aAorCSAqLworCXZhbCA9IDB4MDA7CisJaWYgKFNPQ0FNX0RBVEFXSURUSF8xNiA9PSBwcml2LT5pbmZvLT5idXN3aWR0aCkKKwkJdmFsID0gTEVOOworCisJcmV0ID0gdHc5OTEwX21hc2tfc2V0KHByaXYtPmNsaWVudCwgT1BGT1JNLCBMRU4sIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CisKKwkvKgorCSAqIHNlbGVjdCBNUE9VVCBiZWhhdmlvcgorCSAqLworCXN3aXRjaCAocHJpdi0+aW5mby0+bXBvdXQpIHsKKwljYXNlIFRXOTkxMF9NUE9fVkxPU1M6CisJCXZhbCA9IFJUU0VMX1ZMT1NTOyBicmVhazsKKwljYXNlIFRXOTkxMF9NUE9fSExPQ0s6CisJCXZhbCA9IFJUU0VMX0hMT0NLOyBicmVhazsKKwljYXNlIFRXOTkxMF9NUE9fU0xPQ0s6CisJCXZhbCA9IFJUU0VMX1NMT0NLOyBicmVhazsKKwljYXNlIFRXOTkxMF9NUE9fVkxPQ0s6CisJCXZhbCA9IFJUU0VMX1ZMT0NLOyBicmVhazsKKwljYXNlIFRXOTkxMF9NUE9fTU9OTzoKKwkJdmFsID0gUlRTRUxfTU9OTzsgIGJyZWFrOworCWNhc2UgVFc5OTEwX01QT19ERVQ1MDoKKwkJdmFsID0gUlRTRUxfREVUNTA7IGJyZWFrOworCWNhc2UgVFc5OTEwX01QT19GSUVMRDoKKwkJdmFsID0gUlRTRUxfRklFTEQ7IGJyZWFrOworCWNhc2UgVFc5OTEwX01QT19SVENPOgorCQl2YWwgPSBSVFNFTF9SVENPOyAgYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsID0gMDsKKwl9CisKKwlyZXQgPSB0dzk5MTBfbWFza19zZXQocHJpdi0+Y2xpZW50LCBWQklDTlRMLCBSVFNFTF9NQVNLLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgc2NhbGUKKwkgKi8KKwlyZXQgPSB0dzk5MTBfc2V0X3NjYWxlKHByaXYtPmNsaWVudCwgcHJpdi0+c2NhbGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHR3OTkxMF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgY3JvcHBpbmcKKwkgKi8KKwlyZXQgPSB0dzk5MTBfc2V0X2Nyb3BwaW5nKHByaXYtPmNsaWVudCwgJnR3OTkxMF9jcm9wcGluZ19jdHJsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB0dzk5MTBfc2V0X2ZtdF9lcnJvcjsKKworCS8qCisJICogc2V0IGhzeW5jCisJICovCisJcmV0ID0gdHc5OTEwX3NldF9oc3luYyhwcml2LT5jbGllbnQsICZ0dzk5MTBfaHN5bmNfY3RybCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdHc5OTEwX3NldF9mbXRfZXJyb3I7CisKKwlyZXR1cm4gcmV0OworCit0dzk5MTBfc2V0X2ZtdF9lcnJvcjoKKworCXR3OTkxMF9yZXNldChwcml2LT5jbGllbnQpOworCXByaXYtPnNjYWxlID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBwaXgtPmZpZWxkKSB7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJfSBlbHNlIGlmIChWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgIT0gcGl4LT5maWVsZCkgeworCQlkZXZfZXJyKCZpY2QtPmRldiwgIkZpZWxkIHR5cGUgaW52YWxpZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIHNlbGVjdCBzdWl0YWJsZSBub3JtCisJICovCisJc2NhbGUgPSB0dzk5MTBfc2VsZWN0X25vcm0oaWNkLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJaWYgKCFzY2FsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXgtPndpZHRoICA9IHNjYWxlLT53aWR0aDsKKwlwaXgtPmhlaWdodCA9IHNjYWxlLT5oZWlnaHQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzk5MTBfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHR3OTkxMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IHR3OTkxMF9wcml2LCBpY2QpOworCXMzMiB2YWw7CisJaW50IHJldDsKKworCS8qCisJICogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KKwkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LgorCSAqLworCWlmICghaWNkLT5kZXYucGFyZW50IHx8CisJICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogdHc5OTEwIG9ubHkgdXNlIDggb3IgMTYgYml0IGJ1cyB3aWR0aAorCSAqLworCWlmIChTT0NBTV9EQVRBV0lEVEhfMTYgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGggJiYKKwkgICAgU09DQU1fREFUQVdJRFRIXzggICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiYnVzIHdpZHRoIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWNkLT5mb3JtYXRzICAgICA9IHR3OTkxMF9jb2xvcl9mbXQ7CisJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUodHc5OTEwX2NvbG9yX2ZtdCk7CisKKwkvKgorCSAqIGNoZWNrIGFuZCBzaG93IFByb2R1Y3QgSUQKKwkgKi8KKwl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBJRCk7CisJaWYgKDB4MEIgIT0gR0VUX0lEKHZhbCkgfHwKKwkgICAgMHgwMCAhPSBHRVRfUmVWKHZhbCkpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsCisJCQkiUHJvZHVjdCBJRCBlcnJvciAleDoleFxuIiwgR0VUX0lEKHZhbCksIEdFVF9SZVYodmFsKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pbmZvKCZpY2QtPmRldiwKKwkJICJ0dzk5MTAgUHJvZHVjdCBJRCAlMHg6JTB4XG4iLCBHRVRfSUQodmFsKSwgR0VUX1JlVih2YWwpKTsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWljZC0+dmRldi0+dHZub3JtcyAgICAgID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTDsKKwlpY2QtPnZkZXYtPmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0dzk5MTBfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXNvY19jYW1lcmFfdmlkZW9fc3RvcChpY2QpOworfQorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIHR3OTkxMF9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCQk9IHR3OTkxMF92aWRlb19wcm9iZSwKKwkucmVtb3ZlCQkJPSB0dzk5MTBfdmlkZW9fcmVtb3ZlLAorCS5pbml0CQkJPSB0dzk5MTBfaW5pdCwKKwkucmVsZWFzZQkJPSB0dzk5MTBfcmVsZWFzZSwKKwkuc3RhcnRfY2FwdHVyZQkJPSB0dzk5MTBfc3RhcnRfY2FwdHVyZSwKKwkuc3RvcF9jYXB0dXJlCQk9IHR3OTkxMF9zdG9wX2NhcHR1cmUsCisJLnNldF9mbXQJCT0gdHc5OTEwX3NldF9mbXQsCisJLnRyeV9mbXQJCT0gdHc5OTEwX3RyeV9mbXQsCisJLnNldF9idXNfcGFyYW0JCT0gdHc5OTEwX3NldF9idXNfcGFyYW0sCisJLnF1ZXJ5X2J1c19wYXJhbQk9IHR3OTkxMF9xdWVyeV9idXNfcGFyYW0sCisJLmdldF9jaGlwX2lkCQk9IHR3OTkxMF9nZXRfY2hpcF9pZCwKKwkuc2V0X3N0ZAkJPSB0dzk5MTBfc2V0X3N0ZCwKKwkuZW51bV9pbnB1dAkJPSB0dzk5MTBfZW51bV9pbnB1dCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdldF9yZWdpc3RlcgkJPSB0dzk5MTBfZ2V0X3JlZ2lzdGVyLAorCS5zZXRfcmVnaXN0ZXIJCT0gdHc5OTEwX3NldF9yZWdpc3RlciwKKyNlbmRpZgorfTsKKworLyoKKyAqIGkyY19kcml2ZXIgZnVuY3Rpb24KKyAqLworCitzdGF0aWMgaW50IHR3OTkxMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKKworeworCXN0cnVjdCB0dzk5MTBfcHJpdiAgICAgICAgICAgICAqcHJpdjsKKwlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAgICAgICppY2Q7CisJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHJldDsKKworCWluZm8gPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCksCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkkyQy1BZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCAiCisJCQkiSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmluZm8gICA9IGluZm87CisJcHJpdi0+Y2xpZW50ID0gY2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHByaXYpOworCisJaWNkICAgICAgICAgID0gJnByaXYtPmljZDsKKwlpY2QtPm9wcyAgICAgPSAmdHc5OTEwX29wczsKKwlpY2QtPmNvbnRyb2wgPSAmY2xpZW50LT5kZXY7CisJaWNkLT5pZmFjZSAgID0gaW5mby0+bGluay5idXNfaWQ7CisKKwkvKgorCSAqIHNldCB3aWR0aCBhbmQgaGVpZ2h0CisJICovCisJaWNkLT53aWR0aF9tYXggID0gdHc5OTEwX250c2Nfc2NhbGVzWzBdLndpZHRoOyAvKiBzZXQgZGVmYXVsdCAqLworCWljZC0+d2lkdGhfbWluICA9IHR3OTkxMF9udHNjX3NjYWxlc1swXS53aWR0aDsKKwlpY2QtPmhlaWdodF9tYXggPSB0dzk5MTBfbnRzY19zY2FsZXNbMF0uaGVpZ2h0OworCWljZC0+aGVpZ2h0X21pbiA9IHR3OTkxMF9udHNjX3NjYWxlc1swXS5oZWlnaHQ7CisKKwlzY2FsZSA9IHR3OTkxMF9udHNjX3NjYWxlczsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dzk5MTBfbnRzY19zY2FsZXMpOyBpKyspIHsKKwkJaWNkLT53aWR0aF9tYXggID0gbWF4KHNjYWxlW2ldLndpZHRoLCAgaWNkLT53aWR0aF9tYXgpOworCQlpY2QtPndpZHRoX21pbiAgPSBtaW4oc2NhbGVbaV0ud2lkdGgsICBpY2QtPndpZHRoX21pbik7CisJCWljZC0+aGVpZ2h0X21heCA9IG1heChzY2FsZVtpXS5oZWlnaHQsIGljZC0+aGVpZ2h0X21heCk7CisJCWljZC0+aGVpZ2h0X21pbiA9IG1pbihzY2FsZVtpXS5oZWlnaHQsIGljZC0+aGVpZ2h0X21pbik7CisJfQorCXNjYWxlID0gdHc5OTEwX3BhbF9zY2FsZXM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHc5OTEwX3BhbF9zY2FsZXMpOyBpKyspIHsKKwkJaWNkLT53aWR0aF9tYXggID0gbWF4KHNjYWxlW2ldLndpZHRoLCAgaWNkLT53aWR0aF9tYXgpOworCQlpY2QtPndpZHRoX21pbiAgPSBtaW4oc2NhbGVbaV0ud2lkdGgsICBpY2QtPndpZHRoX21pbik7CisJCWljZC0+aGVpZ2h0X21heCA9IG1heChzY2FsZVtpXS5oZWlnaHQsIGljZC0+aGVpZ2h0X21heCk7CisJCWljZC0+aGVpZ2h0X21pbiA9IG1pbihzY2FsZVtpXS5oZWlnaHQsIGljZC0+aGVpZ2h0X21pbik7CisJfQorCisJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKKworCWlmIChyZXQpIHsKKwkJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJCWtmcmVlKHByaXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHc5OTEwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmcHJpdi0+aWNkKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHR3OTkxMF9pZFtdID0geworCXsgInR3OTkxMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdHc5OTEwX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHR3OTkxMF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInR3OTkxMCIsCisJfSwKKwkucHJvYmUgICAgPSB0dzk5MTBfcHJvYmUsCisJLnJlbW92ZSAgID0gdHc5OTEwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB0dzk5MTBfaWQsCit9OworCisvKgorICogbW9kdWxlIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHR3OTkxMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdHc5OTEwX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHc5OTEwX21vZHVsZV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnR3OTkxMF9pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodHc5OTEwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHR3OTkxMF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29DIENhbWVyYSBkcml2ZXIgZm9yIHR3OTkxMCIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCmluZGV4IGI0NjI4ODcuLjdhNjA5YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlIDxtZWRpYS91cGQ2NDAzMWEuaD4KQEAgLTYyLDYgKzYyLDcgQEAKIH07CiAKIHN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCByZWdzW1RPVF9SRUdTXTsKIAl1OCBncl9tb2RlOwogCXU4IGRpcmVjdF8zZHljc19jb25uZWN0OwpAQCAtNjksNiArNzAsMTEgQEAKIAl1OCBleHRfdmVydF9zeW5jOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUsIHNkKTsKK30KKwogc3RhdGljIHU4IHVwZDY0MDMxYV9pbml0W10gPSB7CiAJMHgwMCwgMHhiOCwgMHg0OCwgMHhkMiwgMHhlNiwKIAkweDAzLCAweDEwLCAweDBiLCAweGFmLCAweDdmLApAQCAtNzgsOCArODQsOSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHU4IHVwZDY0MDMxYV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyB1OCB1cGQ2NDAzMWFfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXU4IGJ1ZlsyXTsKIAogCWlmIChyZWcgPj0gc2l6ZW9mKGJ1ZikpCkBAIC05MCwxMDcgKzk3LDEyOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQgdXBkNjQwMzFhX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHZvaWQgdXBkNjQwMzFhX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAl1OCBidWZbMl07CiAKIAlidWZbMF0gPSByZWc7CiAJYnVmWzFdID0gdmFsOwotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRlIHJlZzogJTAyWCB2YWw6ICUwMlhcbiIsIHJlZywgdmFsKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ3cml0ZSByZWc6ICUwMlggdmFsOiAlMDJYXG4iLCByZWcsIHZhbCk7CiAJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikgIT0gMikKLQkJdjRsX2VycihjbGllbnQsICJJL08gZXJyb3Igd3JpdGUgMHglMDJ4LzB4JTAyeFxuIiwgcmVnLCB2YWwpOworCQl2NGwyX2VycihzZCwgIkkvTyBlcnJvciB3cml0ZSAweCUwMngvMHglMDJ4XG4iLCByZWcsIHZhbCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBUaGUgaW5wdXQgY2hhbmdlZCBkdWUgdG8gbmV3IGlucHV0IG9yIGNoYW5uZWwgY2hhbmdlZCAqLwotc3RhdGljIHZvaWQgdXBkNjQwMzFhX2NoYW5nZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB1cGQ2NDAzMWFfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQogewotCXN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdTggcmVnID0gc3RhdGUtPnJlZ3NbUjAwXTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNoYW5nZWQgaW5wdXQgb3IgY2hhbm5lbFxuIik7Ci0JdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgUjAwLCByZWcgfCAweDEwKTsKLQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBSMDAsIHJlZyAmIH4weDEwKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjaGFuZ2VkIGlucHV0IG9yIGNoYW5uZWxcbiIpOworCXVwZDY0MDMxYV93cml0ZShzZCwgUjAwLCByZWcgfCAweDEwKTsKKwl1cGQ2NDAzMWFfd3JpdGUoc2QsIFIwMCwgcmVnICYgfjB4MTApOworCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCB1cGQ2NDAzMWFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdXBkNjQwMzFhX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKLQlzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCXN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4IHIwMCwgcjA1LCByMDg7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCQl1cGQ2NDAzMWFfY2hhbmdlKGNsaWVudCk7Ci0JCWJyZWFrOworCXN0YXRlLT5ncl9tb2RlID0gKHJvdXRlLT5pbnB1dCAmIDMpIDw8IDY7CisJc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0ID0gKHJvdXRlLT5pbnB1dCAmIDB4YykgPDwgNDsKKwlzdGF0ZS0+ZXh0X2NvbXBfc3luYyA9CisJCShyb3V0ZS0+aW5wdXQgJiBVUEQ2NDAzMUFfQ09NUE9TSVRFX0VYVEVSTkFMKSA8PCAxOworCXN0YXRlLT5leHRfdmVydF9zeW5jID0KKwkJKHJvdXRlLT5pbnB1dCAmIFVQRDY0MDMxQV9WRVJUSUNBTF9FWFRFUk5BTCkgPDwgMjsKKwlyMDAgPSAoc3RhdGUtPnJlZ3NbUjAwXSAmIH5HUl9NT0RFX01BU0spIHwgc3RhdGUtPmdyX21vZGU7CisJcjA1ID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+U1lOQ19DSVJDVUlUX01BU0spIHwKKwkJc3RhdGUtPmV4dF9jb21wX3N5bmMgfCBzdGF0ZS0+ZXh0X3ZlcnRfc3luYzsKKwlyMDggPSAoc3RhdGUtPnJlZ3NbUjA4XSAmIH5ESVJFQ1RfM0RZQ1NfQ09OTkVDVF9NQVNLKSB8CisJCXN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdDsKKwl1cGQ2NDAzMWFfd3JpdGUoc2QsIFIwMCwgcjAwKTsKKwl1cGQ2NDAzMWFfd3JpdGUoc2QsIFIwNSwgcjA1KTsKKwl1cGQ2NDAzMWFfd3JpdGUoc2QsIFIwOCwgcjA4KTsKKwlyZXR1cm4gdXBkNjQwMzFhX3NfZnJlcXVlbmN5KHNkLCBOVUxMKTsKK30KIAotCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6Ci0JCXJvdXRlLT5pbnB1dCA9IChzdGF0ZS0+Z3JfbW9kZSA+PiA2KSB8Ci0JCQkoc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0ID4+IDQpIHwKLQkJCShzdGF0ZS0+ZXh0X2NvbXBfc3luYyA+PiAxKSB8Ci0JCQkoc3RhdGUtPmV4dF92ZXJ0X3N5bmMgPj4gMik7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOwotCQlicmVhazsKK3N0YXRpYyBpbnQgdXBkNjQwMzFhX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6Ci0JewotCQl1OCByMDAsIHIwNSwgcjA4OworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVVBENjQwMzFBLCAwKTsKK30KIAotCQlzdGF0ZS0+Z3JfbW9kZSA9IChyb3V0ZS0+aW5wdXQgJiAzKSA8PCA2OwotCQlzdGF0ZS0+ZGlyZWN0XzNkeWNzX2Nvbm5lY3QgPSAocm91dGUtPmlucHV0ICYgMHhjKSA8PCA0OwotCQlzdGF0ZS0+ZXh0X2NvbXBfc3luYyA9Ci0JCQkocm91dGUtPmlucHV0ICYgVVBENjQwMzFBX0NPTVBPU0lURV9FWFRFUk5BTCkgPDwgMTsKLQkJc3RhdGUtPmV4dF92ZXJ0X3N5bmMgPQotCQkJKHJvdXRlLT5pbnB1dCAmIFVQRDY0MDMxQV9WRVJUSUNBTF9FWFRFUk5BTCkgPDwgMjsKLQkJcjAwID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+R1JfTU9ERV9NQVNLKSB8IHN0YXRlLT5ncl9tb2RlOwotCQlyMDUgPSAoc3RhdGUtPnJlZ3NbUjAwXSAmIH5TWU5DX0NJUkNVSVRfTUFTSykgfAotCQkJc3RhdGUtPmV4dF9jb21wX3N5bmMgfCBzdGF0ZS0+ZXh0X3ZlcnRfc3luYzsKLQkJcjA4ID0gKHN0YXRlLT5yZWdzW1IwOF0gJiB+RElSRUNUXzNEWUNTX0NPTk5FQ1RfTUFTSykgfAotCQkJc3RhdGUtPmRpcmVjdF8zZHljc19jb25uZWN0OwotCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBSMDAsIHIwMCk7Ci0JCXVwZDY0MDMxYV93cml0ZShjbGllbnQsIFIwNSwgcjA1KTsKLQkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgUjA4LCByMDgpOwotCQl1cGQ2NDAzMWFfY2hhbmdlKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXY0bF9pbmZvKGNsaWVudCwgIlN0YXR1czogU0EwMD0weCUwMnggU0EwMT0weCUwMnhcbiIsCi0JCQl1cGQ2NDAzMWFfcmVhZChjbGllbnQsIDApLCB1cGQ2NDAzMWFfcmVhZChjbGllbnQsIDEpKTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAotCQkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpIHsKLQkJCXJlZy0+dmFsID0gdXBkNjQwMzFhX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVDoKLQkJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgYXJnLAotCQkJCVY0TDJfSURFTlRfVVBENjQwMzFBLCAwKTsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbnQgdXBkNjQwMzFhX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwl2NGwyX2luZm8oc2QsICJTdGF0dXM6IFNBMDA9MHglMDJ4IFNBMDE9MHglMDJ4XG4iLAorCQkJdXBkNjQwMzFhX3JlYWQoc2QsIDApLCB1cGQ2NDAzMWFfcmVhZChzZCwgMSkpOwogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB1cGQ2NDAzMWFfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAorCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+dmFsID0gdXBkNjQwMzFhX3JlYWQoc2QsIHJlZy0+cmVnICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwMzFhX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwl1cGQ2NDAzMWFfd3JpdGUoc2QsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHVwZDY0MDMxYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdXBkNjQwMzFhX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gdXBkNjQwMzFhX2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IHVwZDY0MDMxYV9nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gdXBkNjQwMzFhX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSB1cGQ2NDAzMWFfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdXBkNjQwMzFhX3R1bmVyX29wcyA9IHsKKwkuc19mcmVxdWVuY3kgPSB1cGQ2NDAzMWFfc19mcmVxdWVuY3ksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB1cGQ2NDAzMWFfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB1cGQ2NDAzMWFfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdXBkNjQwMzFhX29wcyA9IHsKKwkuY29yZSA9ICZ1cGQ2NDAzMWFfY29yZV9vcHMsCisJLnR1bmVyID0gJnVwZDY0MDMxYV90dW5lcl9vcHMsCisJLnZpZGVvID0gJnVwZDY0MDMxYV92aWRlb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogaTJjIGltcGxlbWVudGF0aW9uICovCkBAIC0xOTksNiArMjI3LDcgQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBpOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC0yMTAsMTkgKzIzOSwyMyBAQAogCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzdGF0ZSk7CisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ1cGQ2NDAzMWFfb3BzKTsKIAltZW1jcHkoc3RhdGUtPnJlZ3MsIHVwZDY0MDMxYV9pbml0LCBzaXplb2Yoc3RhdGUtPnJlZ3MpKTsKIAlzdGF0ZS0+Z3JfbW9kZSA9IFVQRDY0MDMxQV9HUl9PTiA8PCA2OwogCXN0YXRlLT5kaXJlY3RfM2R5Y3NfY29ubmVjdCA9IFVQRDY0MDMxQV8zRFlDU19DT01QT1NJVEUgPDwgNDsKIAlzdGF0ZS0+ZXh0X2NvbXBfc3luYyA9IHN0YXRlLT5leHRfdmVydF9zeW5jID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgVE9UX1JFR1M7IGkrKykKLQkJdXBkNjQwMzFhX3dyaXRlKGNsaWVudCwgaSwgc3RhdGUtPnJlZ3NbaV0pOworCQl1cGQ2NDAzMWFfd3JpdGUoc2QsIGksIHN0YXRlLT5yZWdzW2ldKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1cGQ2NDAzMWFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKaW5kZXggOTUyMWNlMC4uNTg0MTJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlIDxtZWRpYS91cGQ2NDA4My5oPgpAQCAtNTEsMTEgKzUxLDE3IEBACiB9OwogCiBzdHJ1Y3QgdXBkNjQwODNfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCBtb2RlOwogCXU4IGV4dF95X2FkYzsKIAl1OCByZWdzW1RPVF9SRUdTXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVwZDY0MDgzX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB1cGQ2NDA4M19zdGF0ZSwgc2QpOworfQorCiAvKiBJbml0aWFsIHZhbHVlcyB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKICAgIE5FQyB1cGQ2NDAzMWEgZ2hvc3QgcmVkdWN0aW9uIGNoaXAuICovCiBzdGF0aWMgdTggdXBkNjQwODNfaW5pdFtdID0gewpAQCAtNjgsMzQgKzc0LDI0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCB1cGQ2NDA4M19sb2dfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCB1cGQ2NDA4M193cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKIHsKLQl1OCBidWZbN107Ci0KLQlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIDcpOwotCXY0bF9pbmZvKGNsaWVudCwgIlN0YXR1czogU0EwMD0lMDJ4IFNBMDE9JTAyeCBTQTAyPSUwMnggU0EwMz0lMDJ4ICIKLQkJICAgICAgIlNBMDQ9JTAyeCBTQTA1PSUwMnggU0EwNj0lMDJ4XG4iLAotCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQgdXBkNjQwODNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCi17CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXU4IGJ1ZlsyXTsKIAogCWJ1ZlswXSA9IHJlZzsKIAlidWZbMV0gPSB2YWw7Ci0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAid3JpdGUgcmVnOiAlMDJ4IHZhbDogJTAyeFxuIiwgcmVnLCB2YWwpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIndyaXRlIHJlZzogJTAyeCB2YWw6ICUwMnhcbiIsIHJlZywgdmFsKTsKIAlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSAhPSAyKQotCQl2NGxfZXJyKGNsaWVudCwgIkkvTyBlcnJvciB3cml0ZSAweCUwMngvMHglMDJ4XG4iLCByZWcsIHZhbCk7CisJCXY0bDJfZXJyKHNkLCAiSS9PIGVycm9yIHdyaXRlIDB4JTAyeC8weCUwMnhcbiIsIHJlZywgdmFsKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgdTggdXBkNjQwODNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgdTggdXBkNjQwODNfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXU4IGJ1Zls3XTsKIAogCWlmIChyZWcgPj0gc2l6ZW9mKGJ1ZikpCkBAIC0xMDcsNjcgKzEwMyw5NCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCB1cGQ2NDA4M19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB1cGQ2NDA4M19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IHVwZDY0MDgzX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCXN0cnVjdCB1cGQ2NDA4M19zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJdTggcjAwLCByMDI7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6Ci0JCXJvdXRlLT5pbnB1dCA9IChzdGF0ZS0+bW9kZSA+PiA2KSB8IChzdGF0ZS0+ZXh0X3lfYWRjID4+IDMpOwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgotCXsKLQkJdTggcjAwLCByMDI7Ci0KLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDcgfHwgKHJvdXRlLT5pbnB1dCAmIDYpID09IDYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3RhdGUtPm1vZGUgPSAocm91dGUtPmlucHV0ICYgMykgPDwgNjsKLQkJc3RhdGUtPmV4dF95X2FkYyA9IChyb3V0ZS0+aW5wdXQgJiBVUEQ2NDA4M19FWFRfWV9BREMpIDw8IDM7Ci0JCXIwMCA9IChzdGF0ZS0+cmVnc1tSMDBdICYgfigzIDw8IDYpKSB8IHN0YXRlLT5tb2RlOwotCQlyMDIgPSAoc3RhdGUtPnJlZ3NbUjAyXSAmIH4oMSA8PCA1KSkgfCBzdGF0ZS0+ZXh0X3lfYWRjOwotCQl1cGQ2NDA4M193cml0ZShjbGllbnQsIFIwMCwgcjAwKTsKLQkJdXBkNjQwODNfd3JpdGUoY2xpZW50LCBSMDIsIHIwMik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCXVwZDY0MDgzX2xvZ19zdGF0dXMoY2xpZW50KTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAotCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikgewotCQkJcmVnLT52YWwgPSB1cGQ2NDA4M19yZWFkKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVDoKLQkJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgYXJnLAotCQkJCVY0TDJfSURFTlRfVVBENjQwODMsIDApOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCisJaWYgKHJvdXRlLT5pbnB1dCA+IDcgfHwgKHJvdXRlLT5pbnB1dCAmIDYpID09IDYpCisJCXJldHVybiAtRUlOVkFMOworCXN0YXRlLT5tb2RlID0gKHJvdXRlLT5pbnB1dCAmIDMpIDw8IDY7CisJc3RhdGUtPmV4dF95X2FkYyA9IChyb3V0ZS0+aW5wdXQgJiBVUEQ2NDA4M19FWFRfWV9BREMpIDw8IDM7CisJcjAwID0gKHN0YXRlLT5yZWdzW1IwMF0gJiB+KDMgPDwgNikpIHwgc3RhdGUtPm1vZGU7CisJcjAyID0gKHN0YXRlLT5yZWdzW1IwMl0gJiB+KDEgPDwgNSkpIHwgc3RhdGUtPmV4dF95X2FkYzsKKwl1cGQ2NDA4M193cml0ZShzZCwgUjAwLCByMDApOworCXVwZDY0MDgzX3dyaXRlKHNkLCBSMDIsIHIwMik7CiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHVwZDY0MDgzX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCQlyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnZhbCA9IHVwZDY0MDgzX3JlYWQoc2QsIHJlZy0+cmVnICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwODNfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LAorCQkJCXJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXVwZDY0MDgzX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB1cGQ2NDA4M19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1VQRDY0MDgzLCAwKTsKK30KKworc3RhdGljIGludCB1cGQ2NDA4M19sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1Zls3XTsKKworCWkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgNyk7CisJdjRsMl9pbmZvKHNkLCAiU3RhdHVzOiBTQTAwPSUwMnggU0EwMT0lMDJ4IFNBMDI9JTAyeCBTQTAzPSUwMnggIgorCQkgICAgICAiU0EwND0lMDJ4IFNBMDU9JTAyeCBTQTA2PSUwMnhcbiIsCisJCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkNjQwODNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHVwZDY0MDgzX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gdXBkNjQwODNfbG9nX3N0YXR1cywKKwkuZ19jaGlwX2lkZW50ID0gdXBkNjQwODNfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IHVwZDY0MDgzX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSB1cGQ2NDA4M19zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB1cGQ2NDA4M192aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHVwZDY0MDgzX3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHVwZDY0MDgzX29wcyA9IHsKKwkuY29yZSA9ICZ1cGQ2NDA4M19jb3JlX29wcywKKwkudmlkZW8gPSAmdXBkNjQwODNfdmlkZW9fb3BzLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLwpAQCAtMTc2LDYgKzE5OSw3IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXBkNjQwODNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJaW50IGk7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTE4NywxOSArMjExLDIzIEBACiAJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwODNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdXBkNjQwODNfb3BzKTsKIAkvKiBJbml0aWFsbHkgYXNzdW1lIHRoYXQgYSBnaG9zdCByZWR1Y3Rpb24gY2hpcCBpcyBwcmVzZW50ICovCiAJc3RhdGUtPm1vZGUgPSAwOyAgLyogWUNTIG1vZGUgKi8KIAlzdGF0ZS0+ZXh0X3lfYWRjID0gKDEgPDwgNSk7CiAJbWVtY3B5KHN0YXRlLT5yZWdzLCB1cGQ2NDA4M19pbml0LCBUT1RfUkVHUyk7CiAJZm9yIChpID0gMDsgaSA8IFRPVF9SRUdTOyBpKyspCi0JCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgaSwgc3RhdGUtPnJlZ3NbaV0pOworCQl1cGQ2NDA4M193cml0ZShzZCwgaSwgc3RhdGUtPnJlZ3NbaV0pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVwZDY0MDgzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMKaW5kZXggYzcxMGJjZC4uZjhkODVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2libWNhbS5jCkBAIC0zNzc5LDExICszNzc5LDExIEBACiAJCQllcnIoIkFsdGVybmF0ZSBzZXR0aW5ncyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBhZGRyZXNzZXMhIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfdHlwZShlbmRwb2ludCkgIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewogCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsIGlmbnVtKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAwKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlbmRwb2ludCkpIHsKIAkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLCBpZm51bSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCmluZGV4IGRhMjdhNTIuLjkwZjBjZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKQEAgLTgyMywxMiArODIzLDEyIEBACiAJCQllcnIoIkFsdGVybmF0ZSBzZXR0aW5ncyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBhZGRyZXNzZXMhIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfdHlwZShlbmRwb2ludCkgIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewogCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCiAJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfb3V0KGVuZHBvaW50KSkgewogCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsCiAJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwppbmRleCA0NDU5YjhhLi5mZDExMmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0dyh1dmQtPmRldiwgMHgxNWMxLAogCQkJCWNwdV90b19sZTE2KElTT0NfUEFDS0VUX1NJWkUpKSk7CiAJQ0hFQ0tfUkVUKHJldCwgcWNtX3N0dl9zZXRiKHV2ZC0+ZGV2LCAweDE1YzMsIDB4MDgpKTsKLQlDSEVDS19SRVQocmV0LCByZXQgPSBxY21fc3R2X3NldGIodXZkLT5kZXYsIDB4MTQzZiwgMHgwMSkpOworCUNIRUNLX1JFVChyZXQsIHFjbV9zdHZfc2V0Yih1dmQtPmRldiwgMHgxNDNmLCAweDAxKSk7CiAKIAlDSEVDS19SRVQocmV0LCBxY21fc3R2X3NldGIodXZkLT5kZXYsIFNUVl9JU09fRU5BQkxFLCAweDAwKSk7CiAKQEAgLTk1NSw4ICs5NTUsNyBAQAogCQlmb3IgKGo9MDsgaiA8IGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBqKyspIHsKIAkJCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbal0uZGVzYzsKIAotCQkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmCi0JCQkJVVNCX0VORFBPSU5UX0RJUl9NQVNLKSAhPSBVU0JfRElSX0lOKQorCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfb3V0KGVuZHBvaW50KSkKIAkJCQljb250aW51ZTsgLyogbm90IGlucHV0IHRoZW4gbm90IGdvb2QgKi8KIAogCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwpAQCAtOTY1LDkgKzk2NCw3IEBACiAJCQkJY29udGludWU7IC8qIDAgcGt0IHNpemUgaXMgbm90IHdoYXQgd2Ugd2FudCAqLwogCQkJfQogCi0JCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJgotCQkJCVVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVuZHBvaW50KSkgewogCQkJCXZpZGVvX2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CiAJCQkJLyogYnJlYWsgb3V0IG9mIHRoZSBzZWFyY2ggKi8KIAkJCQlnb3RvIGdvb2RfdmlkZW9lcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdWx0cmFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdWx0cmFjYW0uYwppbmRleCA5NzE0YmFhLi44MzlhMDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCkBAIC01NTYsMTIgKzU1NiwxMiBAQAogCQkJZXJyKCJBbHRlcm5hdGUgc2V0dGluZ3MgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgYWRkcmVzc2VzISIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSkgeworCQlpZiAodXNiX2VuZHBvaW50X3R5cGUoZW5kcG9pbnQpICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKIAkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAogCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAwKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlbmRwb2ludCkpIHsKIAkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAogCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCmluZGV4IDdjNTc1YmIuLjE0OGExZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQogCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzKCQlcClcbiIsIF9fZnVuY19fLCBkZXYpOwogCi0JaWYgKDAgPCB1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpKQorCWlmICh1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJbXV0ZXhfbG9jaygmdXZkLT5sb2NrKTsKIApAQCAtMTI4MSw4ICsxMjgxLDcgQEAKICAqIEhpc3Rvcnk6CiAgKiAyMi1KYW4tMjAwMCBDb3JyZWN0ZWQgVklESU9DU1BJQ1QgdG8gcmVqZWN0IHVuc3VwcG9ydGVkIHNldHRpbmdzLgogICovCi1zdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB1c2J2aWRlb192NGxfZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdXZkICp1dmQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTE1MDUsNyArMTUwNCw3IEBACiBzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHVzYnZpZGVvX3Y0bF9kb19pb2N0bCk7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB1c2J2aWRlb192NGxfZG9faW9jdGwpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDhlMmQ1OGIuLjQ2MDI1OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTg0NCw4ICs4NDQsNyBAQAogCSAgICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgKHVuc2lnbmVkKSAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKIAllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CiAKLQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKLQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKSB7CiAJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLwogCQlidWxrRW5kcG9pbnQgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCBkMTg1YjU3Li44NTY2MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJc3RybGNweSh2Yy0+Y2FyZCwKIAkJdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nLAogCQlzaXplb2YodmMtPmNhcmQpKTsKLQlzdHJsY3B5KHZjLT5idXNfaW5mbywgdXNidmlzaW9uLT5kZXYtPmRldi5idXNfaWQsCisJc3RybGNweSh2Yy0+YnVzX2luZm8sIGRldl9uYW1lKCZ1c2J2aXNpb24tPmRldi0+ZGV2KSwKIAkJc2l6ZW9mKHZjLT5idXNfaW5mbykpOwogCXZjLT52ZXJzaW9uID0gVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OOwogCXZjLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKQEAgLTEyNzgsNyArMTI3OCw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgdXNidmlzaW9uX2RvX3ZiaV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgdXNidmlzaW9uX2RvX3ZiaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCS8qIFRPRE8gKi8KQEAgLTEyODgsNyArMTI4OCw3IEBACiBzdGF0aWMgaW50IHVzYnZpc2lvbl92YmlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB1c2J2aXNpb25fZG9fdmJpX2lvY3RsKTsKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHVzYnZpc2lvbl9kb192YmlfaW9jdGwpOwogfQogCiAKQEAgLTE2NzksNyArMTY3OSw3IEBACiAJCWludGVyZmFjZSA9ICZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS0+YWx0c2V0dGluZ1swXTsKIAl9CiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOwotCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPQorCWlmICh1c2JfZW5kcG9pbnRfdHlwZShlbmRwb2ludCkgIT0KIAkgICAgVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewogCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCiAJCSAgICBfX2Z1bmNfXywgaWZudW0pOwpAQCAtMTY4Nyw4ICsxNjg3LDcgQEAKIAkJICAgIF9fZnVuY19fLCBlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09Ci0JICAgIFVTQl9ESVJfT1VUKSB7CisJaWYgKHVzYl9lbmRwb2ludF9kaXJfb3V0KGVuZHBvaW50KSkgewogCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsCiAJCSAgICBfX2Z1bmNfXywgaWZudW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGYxNmFhZmUuLjIyMDgxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMzI3LDYgKzMyNywzMSBAQAogCXsgOCwgIkFwZXJ0dXJlIFByaW9yaXR5IE1vZGUiIH0sCiB9OwogCitzdGF0aWMgX19zMzIgdXZjX2N0cmxfZ2V0X3pvb20oc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmcsCisJX191OCBxdWVyeSwgY29uc3QgX191OCAqZGF0YSkKK3sKKwlfX3M4IHpvb20gPSAoX19zOClkYXRhWzBdOworCisJc3dpdGNoIChxdWVyeSkgeworCWNhc2UgR0VUX0NVUjoKKwkJcmV0dXJuICh6b29tID09IDApID8gMCA6ICh6b29tID4gMCA/IGRhdGFbMl0gOiAtZGF0YVsyXSk7CisKKwljYXNlIEdFVF9NSU46CisJY2FzZSBHRVRfTUFYOgorCWNhc2UgR0VUX1JFUzoKKwljYXNlIEdFVF9ERUY6CisJZGVmYXVsdDoKKwkJcmV0dXJuIGRhdGFbMl07CisJfQorfQorCitzdGF0aWMgdm9pZCB1dmNfY3RybF9zZXRfem9vbShzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZywKKwlfX3MzMiB2YWx1ZSwgX191OCAqZGF0YSkKK3sKKwlkYXRhWzBdID0gdmFsdWUgPT0gMCA/IDAgOiAodmFsdWUgPiAwKSA/IDEgOiAweGZmOworCWRhdGFbMl0gPSBtaW4oYWJzKHZhbHVlKSwgMHhmZik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyB1dmNfY3RybF9tYXBwaW5nc1tdID0gewogCXsKIAkJLmlkCQk9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC01MzIsNiArNTU3LDM4IEBACiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkuZGF0YV90eXBlCT0gVVZDX0NUUkxfREFUQV9UWVBFX0JPT0xFQU4sCiAJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9aT09NX0FCU09MVVRFLAorCQkubmFtZQkJPSAiWm9vbSwgQWJzb2x1dGUiLAorCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNpemUJCT0gMTYsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5kYXRhX3R5cGUJPSBVVkNfQ1RSTF9EQVRBX1RZUEVfVU5TSUdORUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVMsCisJCS5uYW1lCQk9ICJab29tLCBDb250aW51b3VzIiwKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9aT09NX1JFTEFUSVZFX0NPTlRST0wsCisJCS5zaXplCQk9IDAsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5kYXRhX3R5cGUJPSBVVkNfQ1RSTF9EQVRBX1RZUEVfU0lHTkVELAorCQkuZ2V0CQk9IHV2Y19jdHJsX2dldF96b29tLAorCQkuc2V0CQk9IHV2Y19jdHJsX3NldF96b29tLAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfUFJJVkFDWSwKKwkJLm5hbWUJCT0gIlByaXZhY3kiLAorCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1BSSVZBQ1lfQ09OVFJPTCwKKwkJLnNpemUJCT0gMSwKKwkJLm9mZnNldAkJPSAwLAorCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLmRhdGFfdHlwZQk9IFVWQ19DVFJMX0RBVEFfVFlQRV9CT09MRUFOLAorCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0MywxOCArNjAwLDIzIEBACiAJcmV0dXJuIGN0cmwtPmRhdGEgKyBpZCAqIGN0cmwtPmluZm8tPnNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHV2Y19nZXRfYml0KGNvbnN0IF9fdTggKmRhdGEsIGludCBiaXQpCitzdGF0aWMgaW5saW5lIGludCB1dmNfdGVzdF9iaXQoY29uc3QgX191OCAqZGF0YSwgaW50IGJpdCkKIHsKIAlyZXR1cm4gKGRhdGFbYml0ID4+IDNdID4+IChiaXQgJiA3KSkgJiAxOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdXZjX2NsZWFyX2JpdChfX3U4ICpkYXRhLCBpbnQgYml0KQoreworCWRhdGFbYml0ID4+IDNdICY9IH4oMSA8PCAoYml0ICYgNykpOworfQorCiAvKiBFeHRyYWN0IHRoZSBiaXQgc3RyaW5nIHNwZWNpZmllZCBieSBtYXBwaW5nLT5vZmZzZXQgYW5kIG1hcHBpbmctPnNpemUKICAqIGZyb20gdGhlIGxpdHRsZS1lbmRpYW4gZGF0YSBzdG9yZWQgYXQgJ2RhdGEnIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcwogICogYSBzaWduZWQgMzJiaXQgaW50ZWdlci4gU2lnbiBleHRlbnNpb24gd2lsbCBiZSBwZXJmb3JtZWQgaWYgdGhlIG1hcHBpbmcKICAqIHJlZmVyZW5jZXMgYSBzaWduZWQgZGF0YSB0eXBlLgogICovCi1zdGF0aWMgX19zMzIgdXZjX2dldF9sZV92YWx1ZShjb25zdCBfX3U4ICpkYXRhLAotCXN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICptYXBwaW5nKQorc3RhdGljIF9fczMyIHV2Y19nZXRfbGVfdmFsdWUoc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmcsCisJX191OCBxdWVyeSwgY29uc3QgX191OCAqZGF0YSkKIHsKIAlpbnQgYml0cyA9IG1hcHBpbmctPnNpemU7CiAJaW50IG9mZnNldCA9IG1hcHBpbmctPm9mZnNldDsKQEAgLTU4Myw4ICs2NDUsOCBAQAogLyogU2V0IHRoZSBiaXQgc3RyaW5nIHNwZWNpZmllZCBieSBtYXBwaW5nLT5vZmZzZXQgYW5kIG1hcHBpbmctPnNpemUKICAqIGluIHRoZSBsaXR0bGUtZW5kaWFuIGRhdGEgc3RvcmVkIGF0ICdkYXRhJyB0byB0aGUgdmFsdWUgJ3ZhbHVlJy4KICAqLwotc3RhdGljIHZvaWQgdXZjX3NldF9sZV92YWx1ZShfX3MzMiB2YWx1ZSwgX191OCAqZGF0YSwKLQlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZykKK3N0YXRpYyB2b2lkIHV2Y19zZXRfbGVfdmFsdWUoc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmcsCisJX19zMzIgdmFsdWUsIF9fdTggKmRhdGEpCiB7CiAJaW50IGJpdHMgPSBtYXBwaW5nLT5zaXplOwogCWludCBvZmZzZXQgPSBtYXBwaW5nLT5vZmZzZXQ7CkBAIC03MzYsNyArNzk4LDcgQEAKIAkJCQl2aWRlby0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKIAkJCQlkYXRhLCBjdHJsLT5pbmZvLT5zaXplKSkgPCAwKQogCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+ZGVmYXVsdF92YWx1ZSA9IHV2Y19nZXRfbGVfdmFsdWUoZGF0YSwgbWFwcGluZyk7CisJCXY0bDJfY3RybC0+ZGVmYXVsdF92YWx1ZSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBHRVRfREVGLCBkYXRhKTsKIAl9CiAKIAlzd2l0Y2ggKG1hcHBpbmctPnY0bDJfdHlwZSkgewpAQCAtNzcyLDIxICs4MzQsMjEgQEAKIAkJCQl2aWRlby0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKIAkJCQlkYXRhLCBjdHJsLT5pbmZvLT5zaXplKSkgPCAwKQogCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+bWluaW11bSA9IHV2Y19nZXRfbGVfdmFsdWUoZGF0YSwgbWFwcGluZyk7CisJCXY0bDJfY3RybC0+bWluaW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBHRVRfTUlOLCBkYXRhKTsKIAl9CiAJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01BWCkgewogCQlpZiAoKHJldCA9IHV2Y19xdWVyeV9jdHJsKHZpZGVvLT5kZXYsIEdFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCiAJCQkJdmlkZW8tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCiAJCQkJZGF0YSwgY3RybC0+aW5mby0+c2l6ZSkpIDwgMCkKIAkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPm1heGltdW0gPSB1dmNfZ2V0X2xlX3ZhbHVlKGRhdGEsIG1hcHBpbmcpOworCQl2NGwyX2N0cmwtPm1heGltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgR0VUX01BWCwgZGF0YSk7CiAJfQogCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpIHsKIAkJaWYgKChyZXQgPSB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBHRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAogCQkJCXZpZGVvLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAogCQkJCWRhdGEsIGN0cmwtPmluZm8tPnNpemUpKSA8IDApCiAJCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5zdGVwID0gdXZjX2dldF9sZV92YWx1ZShkYXRhLCBtYXBwaW5nKTsKKwkJdjRsMl9jdHJsLT5zdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIEdFVF9SRVMsIGRhdGEpOwogCX0KIAogCXJldCA9IDA7CkBAIC05MjMsOCArOTg1LDggQEAKIAkJY3RybC0+bG9hZGVkID0gMTsKIAl9CiAKLQl4Y3RybC0+dmFsdWUgPSB1dmNfZ2V0X2xlX3ZhbHVlKAotCQl1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksIG1hcHBpbmcpOworCXhjdHJsLT52YWx1ZSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBHRVRfQ1VSLAorCQl1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCkpOwogCiAJaWYgKG1hcHBpbmctPnY0bDJfdHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKSB7CiAJCW1lbnUgPSBtYXBwaW5nLT5tZW51X2luZm87CkBAIC05ODAsOCArMTA0Miw4IEBACiAJCSAgICAgICBjdHJsLT5pbmZvLT5zaXplKTsKIAl9CiAKLQl1dmNfc2V0X2xlX3ZhbHVlKHZhbHVlLAotCQl1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksIG1hcHBpbmcpOworCW1hcHBpbmctPnNldChtYXBwaW5nLCB2YWx1ZSwKKwkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpKTsKIAogCWN0cmwtPmRpcnR5ID0gMTsKIAljdHJsLT5tb2RpZmllZCA9IDE7CkBAIC0xMjU3LDYgKzEzMTksMTEgQEAKIAlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwOwogCWludCByZXQgPSAtRUlOVkFMOwogCisJaWYgKG1hcHBpbmctPmdldCA9PSBOVUxMKQorCQltYXBwaW5nLT5nZXQgPSB1dmNfZ2V0X2xlX3ZhbHVlOworCWlmIChtYXBwaW5nLT5zZXQgPT0gTlVMTCkKKwkJbWFwcGluZy0+c2V0ID0gdXZjX3NldF9sZV92YWx1ZTsKKwogCWlmIChtYXBwaW5nLT5pZCAmIH5WNEwyX0NUUkxfSURfTUFTSykgewogCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDYW4ndCBhZGQgbWFwcGluZyAnJXMnIHdpdGggIgogCQkJImludmFsaWQgY29udHJvbCBpZCAweCUwOHhcbiIsIG1hcHBpbmctPm5hbWUsCkBAIC0xMzA2LDYgKzEzNzMsNTEgQEAKIH0KIAogLyoKKyAqIFBydW5lIGFuIGVudGl0eSBvZiBpdHMgYm9ndXMgY29udHJvbHMuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzIHByb2Nlc3NpbmcKKyAqIHVuaXQgYXV0byBjb250cm9scyBmb3Igd2hpY2ggbm8gY29ycmVzcG9uZGluZyBtYW51YWwgY29udHJvbCBpcyBhdmFpbGFibGUuCisgKiBTdWNoIGF1dG8gY29udHJvbHMgbWFrZSBsaXR0bGUgc2Vuc2UgaWYgYW55LCBhbmQgYXJlIGtub3duIHRvIGNyYXNoIGF0CisgKiBsZWFzdCB0aGUgU2lHbWEgTWljcm8gd2ViY2FtLgorICovCitzdGF0aWMgdm9pZAordXZjX2N0cmxfcHJ1bmVfZW50aXR5KHN0cnVjdCB1dmNfZW50aXR5ICplbnRpdHkpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCXU4IGlkeF9tYW51YWw7CisJCXU4IGlkeF9hdXRvOworCX0gYmxhY2tsaXN0W10gPSB7CisJCXsgMiwgMTEgfSwgLyogSHVlICovCisJCXsgNiwgMTIgfSwgLyogV2hpdGUgQmFsYW5jZSBUZW1wZXJhdHVyZSAqLworCQl7IDcsIDEzIH0sIC8qIFdoaXRlIEJhbGFuY2UgQ29tcG9uZW50ICovCisJfTsKKworCXU4ICpjb250cm9sczsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSAhPSBWQ19QUk9DRVNTSU5HX1VOSVQpCisJCXJldHVybjsKKworCWNvbnRyb2xzID0gZW50aXR5LT5wcm9jZXNzaW5nLmJtQ29udHJvbHM7CisJc2l6ZSA9IGVudGl0eS0+cHJvY2Vzc2luZy5iQ29udHJvbFNpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibGFja2xpc3QpOyArK2kpIHsKKwkJaWYgKGJsYWNrbGlzdFtpXS5pZHhfYXV0byA+PSA4ICogc2l6ZSB8fAorCQkgICAgYmxhY2tsaXN0W2ldLmlkeF9tYW51YWwgPj0gOCAqIHNpemUpCisJCQljb250aW51ZTsKKworCQlpZiAoIXV2Y190ZXN0X2JpdChjb250cm9scywgYmxhY2tsaXN0W2ldLmlkeF9hdXRvKSB8fAorCQkgICAgIHV2Y190ZXN0X2JpdChjb250cm9scywgYmxhY2tsaXN0W2ldLmlkeF9tYW51YWwpKQorCQkJY29udGludWU7CisKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQXV0byBjb250cm9sICV1LyV1IGhhcyBubyAiCisJCQkibWF0Y2hpbmcgbWFudWFsIGNvbnRyb2wsIHJlbW92aW5nIGl0LlxuIiwgZW50aXR5LT5pZCwKKwkJCWJsYWNrbGlzdFtpXS5pZHhfYXV0byk7CisKKwkJdXZjX2NsZWFyX2JpdChjb250cm9scywgYmxhY2tsaXN0W2ldLmlkeF9hdXRvKTsKKwl9Cit9CisKKy8qCiAgKiBJbml0aWFsaXplIGRldmljZSBjb250cm9scy4KICAqLwogaW50IHV2Y19jdHJsX2luaXRfZGV2aWNlKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYpCkBAIC0xMzMxLDYgKzE0NDMsOSBAQAogCQkJYkNvbnRyb2xTaXplID0gZW50aXR5LT5jYW1lcmEuYkNvbnRyb2xTaXplOwogCQl9CiAKKwkJaWYgKGRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1BSVU5FX0NPTlRST0xTKQorCQkJdXZjX2N0cmxfcHJ1bmVfZW50aXR5KGVudGl0eSk7CisKIAkJZm9yIChpID0gMDsgaSA8IGJDb250cm9sU2l6ZTsgKytpKQogCQkJbmNvbnRyb2xzICs9IGh3ZWlnaHQ4KGJtQ29udHJvbHNbaV0pOwogCkBAIC0xMzQ1LDcgKzE0NjAsNyBAQAogCiAJCWN0cmwgPSBlbnRpdHktPmNvbnRyb2xzOwogCQlmb3IgKGkgPSAwOyBpIDwgYkNvbnRyb2xTaXplICogODsgKytpKSB7Ci0JCQlpZiAodXZjX2dldF9iaXQoYm1Db250cm9scywgaSkgPT0gMCkKKwkJCWlmICh1dmNfdGVzdF9iaXQoYm1Db250cm9scywgaSkgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJY3RybC0+ZW50aXR5ID0gZW50aXR5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IGQ3YWQwNjAuLjg5ZDhiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTEyLDggKzEyLDggQEAKICAqLwogCiAvKgotICogVGhpcyBkcml2ZXIgYWltcyB0byBzdXBwb3J0IHZpZGVvIGlucHV0IGRldmljZXMgY29tcGxpYW50IHdpdGggdGhlICdVU0IKLSAqIFZpZGVvIENsYXNzJyBzcGVjaWZpY2F0aW9uLgorICogVGhpcyBkcml2ZXIgYWltcyB0byBzdXBwb3J0IHZpZGVvIGlucHV0IGFuZCBvdXB1dCBkZXZpY2VzIGNvbXBsaWFudCB3aXRoIHRoZQorICogJ1VTQiBWaWRlbyBDbGFzcycgc3BlY2lmaWNhdGlvbi4KICAqCiAgKiBUaGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZGVwcmVjYXRlZCB2NGwxIGludGVyZmFjZS4gSXQgaW1wbGVtZW50cyB0aGUKICAqIG1tYXAgY2FwdHVyZSBtZXRob2Qgb25seSwgYW5kIGRvZXNuJ3QgZG8gYW55IGltYWdlIGZvcm1hdCBjb252ZXJzaW9uIGluCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIApAQCAtNDMsNiArNDQsNyBAQAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInYwLjEuMCIKICNlbmRpZgogCit1bnNpZ25lZCBpbnQgdXZjX25vX2Ryb3BfcGFyYW07CiBzdGF0aWMgdW5zaWduZWQgaW50IHV2Y19xdWlya3NfcGFyYW07CiB1bnNpZ25lZCBpbnQgdXZjX3RyYWNlX3BhcmFtOwogCkBAIC0yODgsOCArMjkwLDEwIEBACiAJc3RydWN0IHV2Y19mb3JtYXRfZGVzYyAqZm10ZGVzYzsKIAlzdHJ1Y3QgdXZjX2ZyYW1lICpmcmFtZTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzdGFydCA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpfYnVmZmVyOwogCXVuc2lnbmVkIGludCBpbnRlcnZhbDsKIAl1bnNpZ25lZCBpbnQgaSwgbjsKKwlpbnQgX2J1ZmxlbjsKIAlfX3U4IGZ0eXBlOwogCiAJZm9ybWF0LT50eXBlID0gYnVmZmVyWzJdOwpAQCAtNDEwLDEyICs0MTQsMjAgQEAKIAlidWZsZW4gLT0gYnVmZmVyWzBdOwogCWJ1ZmZlciArPSBidWZmZXJbMF07CiAKKwkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZyYW1lIGRlc2NyaXB0b3JzIHRvIHRlc3QgdGhlIGJGcmFtZUluZGV4CisJICogZmllbGQgd2hlbiBwYXJzaW5nIHRoZSBkZXNjcmlwdG9ycy4gV2UgY2FuJ3QgcmVseSBvbiB0aGUKKwkgKiBiTnVtRnJhbWVEZXNjcmlwdG9ycyBmaWVsZCBhcyBzb21lIGNhbWVyYXMgZG9uJ3QgaW5pdGlhbGl6ZSBpdAorCSAqIHByb3Blcmx5LgorCSAqLworCWZvciAoX2J1ZmxlbiA9IGJ1ZmxlbiwgX2J1ZmZlciA9IGJ1ZmZlcjsKKwkgICAgIF9idWZsZW4gPiAyICYmIF9idWZmZXJbMl0gPT0gZnR5cGU7CisJICAgICBfYnVmbGVuIC09IF9idWZmZXJbMF0sIF9idWZmZXIgKz0gX2J1ZmZlclswXSkKKwkJZm9ybWF0LT5uZnJhbWVzKys7CisKIAkvKiBQYXJzZSB0aGUgZnJhbWUgZGVzY3JpcHRvcnMuIE9ubHkgdW5jb21wcmVzc2VkLCBNSlBFRyBhbmQgZnJhbWUKIAkgKiBiYXNlZCBmb3JtYXRzIGhhdmUgZnJhbWUgZGVzY3JpcHRvcnMuCiAJICovCiAJd2hpbGUgKGJ1ZmxlbiA+IDIgJiYgYnVmZmVyWzJdID09IGZ0eXBlKSB7Ci0JCWZyYW1lID0gJmZvcm1hdC0+ZnJhbWVbZm9ybWF0LT5uZnJhbWVzXTsKLQogCQlpZiAoZnR5cGUgIT0gVlNfRlJBTUVfRlJBTUVfQkFTRUQpCiAJCQluID0gYnVmbGVuID4gMjUgPyBidWZmZXJbMjVdIDogMDsKIAkJZWxzZQpAQCAtNDMwLDIyICs0NDIsMzIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKKwkJaWYgKGJ1ZmZlclszXSAtIDEgPj0gZm9ybWF0LT5uZnJhbWVzKSB7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvc3RyZWFtaW5nIgorCQkJICAgICAgICJpbnRlcmZhY2UgJWQgZnJhbWUgaW5kZXggJXUgb3V0IG9mIHJhbmdlXG4iLAorCQkJICAgICAgIGRldi0+dWRldi0+ZGV2bnVtLCBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkgICAgICAgYnVmZmVyWzNdKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZnJhbWUgPSAmZm9ybWF0LT5mcmFtZVtidWZmZXJbM10gLSAxXTsKKwogCQlmcmFtZS0+YkZyYW1lSW5kZXggPSBidWZmZXJbM107CiAJCWZyYW1lLT5ibUNhcGFiaWxpdGllcyA9IGJ1ZmZlcls0XTsKLQkJZnJhbWUtPndXaWR0aCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1ZmZlcls1XSk7Ci0JCWZyYW1lLT53SGVpZ2h0ID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmZmVyWzddKTsKLQkJZnJhbWUtPmR3TWluQml0UmF0ZSA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopJmJ1ZmZlcls5XSk7Ci0JCWZyYW1lLT5kd01heEJpdFJhdGUgPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSZidWZmZXJbMTNdKTsKKwkJZnJhbWUtPndXaWR0aCA9IGdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzVdKTsKKwkJZnJhbWUtPndIZWlnaHQgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmJ1ZmZlcls3XSk7CisJCWZyYW1lLT5kd01pbkJpdFJhdGUgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZmZlcls5XSk7CisJCWZyYW1lLT5kd01heEJpdFJhdGUgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZmZlclsxM10pOwogCQlpZiAoZnR5cGUgIT0gVlNfRlJBTUVfRlJBTUVfQkFTRUQpIHsKIAkJCWZyYW1lLT5kd01heFZpZGVvRnJhbWVCdWZmZXJTaXplID0KLQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSZidWZmZXJbMTddKTsKKwkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZmZlclsxN10pOwogCQkJZnJhbWUtPmR3RGVmYXVsdEZyYW1lSW50ZXJ2YWwgPQotCQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopJmJ1ZmZlclsyMV0pOworCQkJCWdldF91bmFsaWduZWRfbGUzMigmYnVmZmVyWzIxXSk7CiAJCQlmcmFtZS0+YkZyYW1lSW50ZXJ2YWxUeXBlID0gYnVmZmVyWzI1XTsKIAkJfSBlbHNlIHsKIAkJCWZyYW1lLT5kd01heFZpZGVvRnJhbWVCdWZmZXJTaXplID0gMDsKIAkJCWZyYW1lLT5kd0RlZmF1bHRGcmFtZUludGVydmFsID0KLQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSZidWZmZXJbMTddKTsKKwkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZmZlclsxN10pOwogCQkJZnJhbWUtPmJGcmFtZUludGVydmFsVHlwZSA9IGJ1ZmZlclsyMV07CiAJCX0KIAkJZnJhbWUtPmR3RnJhbWVJbnRlcnZhbCA9ICppbnRlcnZhbHM7CkBAIC00NjgsNyArNDkwLDcgQEAKIAkJICogc29tZSBvdGhlciBkaXZpc2lvbnMgYnkgemVybyB3aGljaCBjb3VsZCBoYXBwZW4uCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0JCQlpbnRlcnZhbCA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopJmJ1ZmZlclsyNis0KmldKTsKKwkJCWludGVydmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZmZXJbMjYrNCppXSk7CiAJCQkqKCppbnRlcnZhbHMpKysgPSBpbnRlcnZhbCA/IGludGVydmFsIDogMTsKIAkJfQogCkBAIC00ODYsNyArNTA4LDYgQEAKIAkJCTEwMDAwMDAwL2ZyYW1lLT5kd0RlZmF1bHRGcmFtZUludGVydmFsLAogCQkJKDEwMDAwMDAwMC9mcmFtZS0+ZHdEZWZhdWx0RnJhbWVJbnRlcnZhbCklMTApOwogCi0JCWZvcm1hdC0+bmZyYW1lcysrOwogCQlidWZsZW4gLT0gYnVmZmVyWzBdOwogCQlidWZmZXIgKz0gYnVmZmVyWzBdOwogCX0KQEAgLTU4OCw0NiArNjA5LDU1IEBACiAJfQogCiAJLyogUGFyc2UgdGhlIGhlYWRlciBkZXNjcmlwdG9yLiAqLwotCWlmIChidWZmZXJbMl0gPT0gVlNfT1VUUFVUX0hFQURFUikgewotCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvc3RyZWFtaW5nIGludGVyZmFjZSAiCi0JCQkiJWQgT1VUUFVUIEhFQURFUiBkZXNjcmlwdG9yIGlzIG5vdCBzdXBwb3J0ZWQuXG4iLAotCQkJZGV2LT51ZGV2LT5kZXZudW0sIGFsdHMtPmRlc2MuYkludGVyZmFjZU51bWJlcik7Ci0JCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIGlmIChidWZmZXJbMl0gPT0gVlNfSU5QVVRfSEVBREVSKSB7Ci0JCXAgPSBidWZsZW4gPj0gNSA/IGJ1ZmZlclszXSA6IDA7Ci0JCW4gPSBidWZsZW4gPj0gMTIgPyBidWZmZXJbMTJdIDogMDsKKwlzd2l0Y2ggKGJ1ZmZlclsyXSkgeworCWNhc2UgVlNfT1VUUFVUX0hFQURFUjoKKwkJc3RyZWFtaW5nLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCXNpemUgPSA5OworCQlicmVhazsKIAotCQlpZiAoYnVmbGVuIDwgMTMgKyBwKm4gfHwgYnVmZmVyWzJdICE9IFZTX0lOUFVUX0hFQURFUikgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyAiCi0JCQkJImludGVyZmFjZSAlZCBJTlBVVCBIRUFERVIgZGVzY3JpcHRvciBpcyAiCi0JCQkJImludmFsaWQuXG4iLCBkZXYtPnVkZXYtPmRldm51bSwKLQkJCQlhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwotCQkJZ290byBlcnJvcjsKLQkJfQorCWNhc2UgVlNfSU5QVVRfSEVBREVSOgorCQlzdHJlYW1pbmctPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXNpemUgPSAxMzsKKwkJYnJlYWs7CiAKLQkJc3RyZWFtaW5nLT5oZWFkZXIuYk51bUZvcm1hdHMgPSBwOwotCQlzdHJlYW1pbmctPmhlYWRlci5iRW5kcG9pbnRBZGRyZXNzID0gYnVmZmVyWzZdOwotCQlzdHJlYW1pbmctPmhlYWRlci5ibUluZm8gPSBidWZmZXJbN107Ci0JCXN0cmVhbWluZy0+aGVhZGVyLmJUZXJtaW5hbExpbmsgPSBidWZmZXJbOF07Ci0JCXN0cmVhbWluZy0+aGVhZGVyLmJTdGlsbENhcHR1cmVNZXRob2QgPSBidWZmZXJbOV07Ci0JCXN0cmVhbWluZy0+aGVhZGVyLmJUcmlnZ2VyU3VwcG9ydCA9IGJ1ZmZlclsxMF07Ci0JCXN0cmVhbWluZy0+aGVhZGVyLmJUcmlnZ2VyVXNhZ2UgPSBidWZmZXJbMTFdOwotCQlzdHJlYW1pbmctPmhlYWRlci5iQ29udHJvbFNpemUgPSBuOwotCi0JCXN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzID0ga21hbGxvYyhwKm4sIEdGUF9LRVJORUwpOwotCQlpZiAoc3RyZWFtaW5nLT5oZWFkZXIuYm1hQ29udHJvbHMgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQltZW1jcHkoc3RyZWFtaW5nLT5oZWFkZXIuYm1hQ29udHJvbHMsICZidWZmZXJbMTNdLCBwKm4pOwotCX0gZWxzZSB7CisJZGVmYXVsdDoKIAkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyBpbnRlcmZhY2UgIgogCQkJIiVkIEhFQURFUiBkZXNjcmlwdG9yIG5vdCBmb3VuZC5cbiIsIGRldi0+dWRldi0+ZGV2bnVtLAogCQkJYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlwID0gYnVmbGVuID49IDQgPyBidWZmZXJbM10gOiAwOworCW4gPSBidWZsZW4gPj0gc2l6ZSA/IGJ1ZmZlcltzaXplLTFdIDogMDsKKworCWlmIChidWZsZW4gPCBzaXplICsgcCpuKSB7CisJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgdmlkZW9zdHJlYW1pbmcgIgorCQkJImludGVyZmFjZSAlZCBIRUFERVIgZGVzY3JpcHRvciBpcyBpbnZhbGlkLlxuIiwKKwkJCWRldi0+dWRldi0+ZGV2bnVtLCBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0cmVhbWluZy0+aGVhZGVyLmJOdW1Gb3JtYXRzID0gcDsKKwlzdHJlYW1pbmctPmhlYWRlci5iRW5kcG9pbnRBZGRyZXNzID0gYnVmZmVyWzZdOworCWlmIChidWZmZXJbMl0gPT0gVlNfSU5QVVRfSEVBREVSKSB7CisJCXN0cmVhbWluZy0+aGVhZGVyLmJtSW5mbyA9IGJ1ZmZlcls3XTsKKwkJc3RyZWFtaW5nLT5oZWFkZXIuYlRlcm1pbmFsTGluayA9IGJ1ZmZlcls4XTsKKwkJc3RyZWFtaW5nLT5oZWFkZXIuYlN0aWxsQ2FwdHVyZU1ldGhvZCA9IGJ1ZmZlcls5XTsKKwkJc3RyZWFtaW5nLT5oZWFkZXIuYlRyaWdnZXJTdXBwb3J0ID0gYnVmZmVyWzEwXTsKKwkJc3RyZWFtaW5nLT5oZWFkZXIuYlRyaWdnZXJVc2FnZSA9IGJ1ZmZlclsxMV07CisJfSBlbHNlIHsKKwkJc3RyZWFtaW5nLT5oZWFkZXIuYlRlcm1pbmFsTGluayA9IGJ1ZmZlcls3XTsKKwl9CisJc3RyZWFtaW5nLT5oZWFkZXIuYkNvbnRyb2xTaXplID0gbjsKKworCXN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzID0ga21hbGxvYyhwKm4sIEdGUF9LRVJORUwpOworCWlmIChzdHJlYW1pbmctPmhlYWRlci5ibWFDb250cm9scyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWVtY3B5KHN0cmVhbWluZy0+aGVhZGVyLmJtYUNvbnRyb2xzLCAmYnVmZmVyW3NpemVdLCBwKm4pOworCiAJYnVmbGVuIC09IGJ1ZmZlclswXTsKIAlidWZmZXIgKz0gYnVmZmVyWzBdOwogCkBAIC04MTMsOCArODQzLDcgQEAKIAkJdW5pdC0+dHlwZSA9IFZDX0VYVEVOU0lPTl9VTklUOwogCQltZW1jcHkodW5pdC0+ZXh0ZW5zaW9uLmd1aWRFeHRlbnNpb25Db2RlLCAmYnVmZmVyWzRdLCAxNik7CiAJCXVuaXQtPmV4dGVuc2lvbi5iTnVtQ29udHJvbHMgPSBidWZmZXJbMjBdOwotCQl1bml0LT5leHRlbnNpb24uYk5ySW5QaW5zID0KLQkJCWxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1ZmZlclsyMV0pOworCQl1bml0LT5leHRlbnNpb24uYk5ySW5QaW5zID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZmZXJbMjFdKTsKIAkJdW5pdC0+ZXh0ZW5zaW9uLmJhU291cmNlSUQgPSAoX191OCAqKXVuaXQgKyBzaXplb2YgKnVuaXQ7CiAJCW1lbWNweSh1bml0LT5leHRlbnNpb24uYmFTb3VyY2VJRCwgJmJ1ZmZlclsyMl0sIHApOwogCQl1bml0LT5leHRlbnNpb24uYkNvbnRyb2xTaXplID0gYnVmZmVyWzIyK3BdOwpAQCAtODU4LDggKzg4Nyw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWRldi0+dXZjX3ZlcnNpb24gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZidWZmZXJbM10pOwotCQlkZXYtPmNsb2NrX2ZyZXF1ZW5jeSA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopJmJ1ZmZlcls3XSk7CisJCWRldi0+dXZjX3ZlcnNpb24gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmJ1ZmZlclszXSk7CisJCWRldi0+Y2xvY2tfZnJlcXVlbmN5ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZmZXJbN10pOwogCiAJCS8qIFBhcnNlIGFsbCBVU0IgVmlkZW8gU3RyZWFtaW5nIGludGVyZmFjZXMuICovCiAJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKQEAgLTg4Niw3ICs5MTUsNyBAQAogCQkvKiBNYWtlIHN1cmUgdGhlIHRlcm1pbmFsIHR5cGUgTVNCIGlzIG5vdCBudWxsLCBvdGhlcndpc2UgaXQKIAkJICogY291bGQgYmUgY29uZnVzZWQgd2l0aCBhIHVuaXQuCiAJCSAqLwotCQl0eXBlID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmZmVyWzRdKTsKKwkJdHlwZSA9IGdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzRdKTsKIAkJaWYgKCh0eXBlICYgMHhmZjAwKSA9PSAwKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvY29udHJvbCAiCiAJCQkJImludGVyZmFjZSAlZCBJTlBVVF9URVJNSU5BTCAlZCBoYXMgaW52YWxpZCAiCkBAIC05MjgsMTEgKzk1NywxMSBAQAogCQkJdGVybS0+Y2FtZXJhLmJDb250cm9sU2l6ZSA9IG47CiAJCQl0ZXJtLT5jYW1lcmEuYm1Db250cm9scyA9IChfX3U4ICopdGVybSArIHNpemVvZiAqdGVybTsKIAkJCXRlcm0tPmNhbWVyYS53T2JqZWN0aXZlRm9jYWxMZW5ndGhNaW4gPQotCQkJCWxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1ZmZlcls4XSk7CisJCQkJZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZmZXJbOF0pOwogCQkJdGVybS0+Y2FtZXJhLndPYmplY3RpdmVGb2NhbExlbmd0aE1heCA9Ci0JCQkJbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmZmVyWzEwXSk7CisJCQkJZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZmZXJbMTBdKTsKIAkJCXRlcm0tPmNhbWVyYS53T2N1bGFyRm9jYWxMZW5ndGggPQotCQkJCWxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1ZmZlclsxMl0pOworCQkJCWdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzEyXSk7CiAJCQltZW1jcHkodGVybS0+Y2FtZXJhLmJtQ29udHJvbHMsICZidWZmZXJbMTVdLCBuKTsKIAkJfSBlbHNlIGlmIChVVkNfRU5USVRZX1RZUEUodGVybSkgPT0gSVRUX01FRElBX1RSQU5TUE9SVF9JTlBVVCkgewogCQkJdGVybS0+bWVkaWEuYkNvbnRyb2xTaXplID0gbjsKQEAgLTk2OCw3ICs5OTcsNyBAQAogCQkvKiBNYWtlIHN1cmUgdGhlIHRlcm1pbmFsIHR5cGUgTVNCIGlzIG5vdCBudWxsLCBvdGhlcndpc2UgaXQKIAkJICogY291bGQgYmUgY29uZnVzZWQgd2l0aCBhIHVuaXQuCiAJCSAqLwotCQl0eXBlID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmZmVyWzRdKTsKKwkJdHlwZSA9IGdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzRdKTsKIAkJaWYgKCh0eXBlICYgMHhmZjAwKSA9PSAwKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvY29udHJvbCAiCiAJCQkJImludGVyZmFjZSAlZCBPVVRQVVRfVEVSTUlOQUwgJWQgaGFzIGludmFsaWQgIgpAQCAtMTA0Miw3ICsxMDcxLDcgQEAKIAkJdW5pdC0+dHlwZSA9IGJ1ZmZlclsyXTsKIAkJdW5pdC0+cHJvY2Vzc2luZy5iU291cmNlSUQgPSBidWZmZXJbNF07CiAJCXVuaXQtPnByb2Nlc3Npbmcud01heE11bHRpcGxpZXIgPQotCQkJbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmZmVyWzVdKTsKKwkJCWdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzVdKTsKIAkJdW5pdC0+cHJvY2Vzc2luZy5iQ29udHJvbFNpemUgPSBidWZmZXJbN107CiAJCXVuaXQtPnByb2Nlc3NpbmcuYm1Db250cm9scyA9IChfX3U4ICopdW5pdCArIHNpemVvZiAqdW5pdDsKIAkJbWVtY3B5KHVuaXQtPnByb2Nlc3NpbmcuYm1Db250cm9scywgJmJ1ZmZlcls4XSwgbik7CkBAIC0xMDc3LDggKzExMDYsNyBAQAogCQl1bml0LT50eXBlID0gYnVmZmVyWzJdOwogCQltZW1jcHkodW5pdC0+ZXh0ZW5zaW9uLmd1aWRFeHRlbnNpb25Db2RlLCAmYnVmZmVyWzRdLCAxNik7CiAJCXVuaXQtPmV4dGVuc2lvbi5iTnVtQ29udHJvbHMgPSBidWZmZXJbMjBdOwotCQl1bml0LT5leHRlbnNpb24uYk5ySW5QaW5zID0KLQkJCWxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1ZmZlclsyMV0pOworCQl1bml0LT5leHRlbnNpb24uYk5ySW5QaW5zID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZmZXJbMjFdKTsKIAkJdW5pdC0+ZXh0ZW5zaW9uLmJhU291cmNlSUQgPSAoX191OCAqKXVuaXQgKyBzaXplb2YgKnVuaXQ7CiAJCW1lbWNweSh1bml0LT5leHRlbnNpb24uYmFTb3VyY2VJRCwgJmJ1ZmZlclsyMl0sIHApOwogCQl1bml0LT5leHRlbnNpb24uYkNvbnRyb2xTaXplID0gYnVmZmVyWzIyK3BdOwpAQCAtMTEyOCw4ICsxMTU2LDEzIEBACiAJCWJ1ZmZlciArPSBidWZmZXJbMF07CiAJfQogCi0JLyogQ2hlY2sgaWYgdGhlIG9wdGlvbmFsIHN0YXR1cyBlbmRwb2ludCBpcyBwcmVzZW50LiAqLwotCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gMSkgeworCS8qIENoZWNrIGlmIHRoZSBvcHRpb25hbCBzdGF0dXMgZW5kcG9pbnQgaXMgcHJlc2VudC4gQnVpbHQtaW4gaVNpZ2h0CisJICogd2ViY2FtcyBoYXZlIGFuIGludGVycnVwdCBlbmRwb2ludCBidXQgc3BpdCBwcm9wcmlldGFyeSBkYXRhIHRoYXQKKwkgKiBkb24ndCBjb25mb3JtIHRvIHRoZSBVVkMgc3RhdHVzIGVuZHBvaW50IG1lc3NhZ2VzLiBEb24ndCB0cnkgdG8KKwkgKiBoYW5kbGUgdGhlIGludGVycnVwdCBlbmRwb2ludCBmb3IgdGhvc2UgY2FtZXJhcy4KKwkgKi8KKwlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDEgJiYKKwkgICAgIShkZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVCkpIHsKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9ICZhbHRzLT5lbmRwb2ludFswXTsKIAkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjID0gJmVwLT5kZXNjOwogCkBAIC0xMjM0LDYgKzEyNjcsMjYgQEAKIAkJbGlzdF9hZGRfdGFpbCgmZW50aXR5LT5jaGFpbiwgJnZpZGVvLT5pdGVybXMpOwogCQlicmVhazsKIAorCWNhc2UgVFRfU1RSRUFNSU5HOgorCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKQorCQkJcHJpbnRrKCIgPC0gSVQgJWRcbiIsIGVudGl0eS0+aWQpOworCisJCWlmICghVVZDX0VOVElUWV9JU19JVEVSTShlbnRpdHkpKSB7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiVW5zdXBwb3J0ZWQgaW5wdXQgIgorCQkJCSJ0ZXJtaW5hbCAldS5cbiIsIGVudGl0eS0+aWQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHZpZGVvLT5zdGVybSAhPSBOVUxMKSB7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiRm91bmQgbXVsdGlwbGUgc3RyZWFtaW5nICIKKwkJCQkiZW50aXRpZXMgaW4gY2hhaW4uXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJmVudGl0eS0+Y2hhaW4sICZ2aWRlby0+aXRlcm1zKTsKKwkJdmlkZW8tPnN0ZXJtID0gZW50aXR5OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJVbnN1cHBvcnRlZCBlbnRpdHkgdHlwZSAiCiAJCQkiMHglMDR4IGZvdW5kIGluIGNoYWluLlxuIiwgVVZDX0VOVElUWV9UWVBFKGVudGl0eSkpOwpAQCAtMTM0NCw2ICsxMzk3LDEwIEBACiAKIAllbnRpdHkgPSB2aWRlby0+b3Rlcm07CiAJdXZjX3RyYWNlKFVWQ19UUkFDRV9QUk9CRSwgIlNjYW5uaW5nIFVWQyBjaGFpbjogT1QgJWQiLCBlbnRpdHktPmlkKTsKKworCWlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSA9PSBUVF9TVFJFQU1JTkcpCisJCXZpZGVvLT5zdGVybSA9IGVudGl0eTsKKwogCWlkID0gZW50aXR5LT5vdXRwdXQuYlNvdXJjZUlEOwogCXdoaWxlIChpZCAhPSAwKSB7CiAJCXByZXYgPSBlbnRpdHk7CkBAIC0xMzcyLDggKzE0MjksMTEgQEAKIAkJCXJldHVybiBpZDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHRoZSB2aWRlbyBidWZmZXJzIHF1ZXVlLiAqLwotCXV2Y19xdWV1ZV9pbml0KCZ2aWRlby0+cXVldWUpOworCWlmICh2aWRlby0+c3Rlcm0gPT0gTlVMTCkgeworCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiTm8gc3RyZWFtaW5nIGVudGl0eSBmb3VuZCBpbiAiCisJCQkiY2hhaW4uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTM4NCw3ICsxNDQ0LDggQEAKICAqIFRoZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIGEgc2luZ2xlIHZpZGVvIGRldmljZSBwZXIgY29udHJvbCBpbnRlcmZhY2UKICAqIG9ubHkuIFRoZSB0ZXJtaW5hbCBhbmQgdW5pdHMgbXVzdCBtYXRjaCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICAqCi0gKiBJVFRfQ0FNRVJBIC0+IFZDX1BST0NFU1NJTkdfVU5JVCAtPiBWQ19FWFRFTlNJT05fVU5JVHswLG59IC0+IFRUX1NUUkVBTUlORworICogSVRUXyogLT4gVkNfUFJPQ0VTU0lOR19VTklUIC0+IFZDX0VYVEVOU0lPTl9VTklUezAsbn0gLT4gVFRfU1RSRUFNSU5HCisgKiBUVF9TVFJFQU1JTkcgLT4gVkNfUFJPQ0VTU0lOR19VTklUIC0+IFZDX0VYVEVOU0lPTl9VTklUezAsbn0gLT4gT1RUXyoKICAqCiAgKiBUaGUgRXh0ZW5zaW9uIFVuaXRzLCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBzaW5nbGUgaW5wdXQgcGluLiBUaGUKICAqIFByb2Nlc3NpbmcgVW5pdCBhbmQgRXh0ZW5zaW9uIFVuaXRzIGNhbiBiZSBpbiBhbnkgb3JkZXIuIEFkZGl0aW9uYWwKQEAgLTE0MDEsNyArMTQ2Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXJtLCAmZGV2LT5lbnRpdGllcywgbGlzdCkgewogCQlzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtaW5nOwogCi0JCWlmIChVVkNfRU5USVRZX1RZUEUodGVybSkgIT0gVFRfU1RSRUFNSU5HKQorCQlpZiAoIVVWQ19FTlRJVFlfSVNfVEVSTSh0ZXJtKSB8fCAhVVZDX0VOVElUWV9JU19PVEVSTSh0ZXJtKSkKIAkJCWNvbnRpbnVlOwogCiAJCW1lbXNldCgmZGV2LT52aWRlbywgMCwgc2l6ZW9mIGRldi0+dmlkZW8pOwpAQCAtMTQxNCw3ICsxNDc1LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFtaW5nLCAmZGV2LT5zdHJlYW1pbmcsIGxpc3QpIHsKLQkJCWlmIChzdHJlYW1pbmctPmhlYWRlci5iVGVybWluYWxMaW5rID09IHRlcm0tPmlkKSB7CisJCQlpZiAoc3RyZWFtaW5nLT5oZWFkZXIuYlRlcm1pbmFsTGluayA9PQorCQkJICAgIGRldi0+dmlkZW8uc3Rlcm0tPmlkKSB7CiAJCQkJZGV2LT52aWRlby5zdHJlYW1pbmcgPSBzdHJlYW1pbmc7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtMTQ0MCw2ICsxNTAyLDkgQEAKIAkJcHJpbnRrKCIgLT4gJWQpLlxuIiwgZGV2LT52aWRlby5vdGVybS0+aWQpOwogCX0KIAorCS8qIEluaXRpYWxpemUgdGhlIHZpZGVvIGJ1ZmZlcnMgcXVldWUuICovCisJdXZjX3F1ZXVlX2luaXQoJmRldi0+dmlkZW8ucXVldWUsIGRldi0+dmlkZW8uc3RyZWFtaW5nLT50eXBlKTsKKwogCS8qIEluaXRpYWxpemUgdGhlIHN0cmVhbWluZyBpbnRlcmZhY2Ugd2l0aCBkZWZhdWx0IHN0cmVhbWluZwogCSAqIHBhcmFtZXRlcnMuCiAJICovCkBAIC0xNzA3LDI0ICsxNzcyLDYgQEAKICAqIHRob3VnaCB0aGV5IGFyZSBjb21wbGlhbnQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1dmNfaWRzW10gPSB7Ci0JLyogQUxpIE01NjA2IChDbGV2byBNNTQwU1IpICovCi0JeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKLQkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCi0JICAuaWRWZW5kb3IJCT0gMHgwNDAyLAotCSAgLmlkUHJvZHVjdAkJPSAweDU2MDYsCi0JICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAotCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCi0JICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCi0JLyogQ3JlYXRpdmUgTGl2ZSEgT3B0aWEgKi8KLQl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQotCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKLQkgIC5pZFZlbmRvcgkJPSAweDA0MWUsCi0JICAuaWRQcm9kdWN0CQk9IDB4NDA1NywKLQkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKLQkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAotCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKIAkvKiBNaWNyb3NvZnQgTGlmZWNhbSBOWC02MDAwICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODEwLDE1ICsxODU3LDYgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgICA9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sICAgPSAwLAogCSAgLmRyaXZlcl9pbmZvICAgICAgICAgID0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKLQkvKiBTaWxpY29uIE1vdGlvbiBTTTM3MSAqLwotCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCi0JCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAotCSAgLmlkVmVuZG9yCQk9IDB4MDkwYywKLQkgIC5pZFByb2R1Y3QJCT0gMHhiMzcxLAotCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKLQkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAotCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCi0JICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAogCS8qIE1UNjIyNyAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApAQCAtMTgzNyw2ICsxODc1LDE1IEBACiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAogCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19TVFJFQU1fTk9fRklEIH0sCisJLyogU3ludGVrIChTYW1zdW5nIFEzMTApICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxNzRmLAorCSAgLmlkUHJvZHVjdAkJPSAweDU5MzEsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAogCS8qIEFzdXMgRjlTRyAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApAQCAtMTg1NSw2ICsxOTAyLDE1IEBACiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAogCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19TVFJFQU1fTk9fRklEIH0sCisJLyogTGVub3ZvIFRoaW5rcGFkIFNMNTAwICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxN2VmLAorCSAgLmlkUHJvZHVjdAkJPSAweDQ4MGIsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAogCS8qIEVjYW1tIFBpY28gaU1hZ2UgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE4ODQsMTA2ICsxOTQwLDggQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWAotCQkJCXwgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUfSwKLQkvKiBBY2VyIE9FTSBXZWJjYW0gLSBVbmtub3duIHZlbmRvciAqLwotCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCi0JCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAotCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKLQkgIC5pZFByb2R1Y3QJCT0gMHgwMTAwLAotCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKLQkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAotCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCi0JICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAotCS8qIFBhY2thcmQgQmVsbCBPRU0gV2ViY2FtIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KLQl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQotCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKLQkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCi0JICAuaWRQcm9kdWN0CQk9IDB4MDEwMSwKLQkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKLQkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAotCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKLQkvKiBBY2VyIENyeXN0YWwgRXllIHdlYmNhbSAtIEJpc29uIEVsZWN0cm9uaWNzICovCi0JeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKLQkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCi0JICAuaWRWZW5kb3IJCT0gMHg1OTg2LAotCSAgLmlkUHJvZHVjdAkJPSAweDAxMDIsCi0JICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAotCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCi0JICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCi0JLyogQ29tcGFxIFByZXNhcmlvIEIxMjAwIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KLQl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQotCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKLQkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCi0JICAuaWRQcm9kdWN0CQk9IDB4MDEwNCwKLQkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKLQkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAotCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKLQkvKiBBY2VyIFRyYXZlbG1hdGUgNzcyMCAtIEJpc29uIEVsZWN0cm9uaWNzICovCi0JeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKLQkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCi0JICAuaWRWZW5kb3IJCT0gMHg1OTg2LAotCSAgLmlkUHJvZHVjdAkJPSAweDAxMDUsCi0JICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAotCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCi0JICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCi0JLyogTWVkaW9uIEFrb3lhIE1pbmkgRTEyMTAgLSBCaXNvbiBFbGVjdHJvbmljcyAqLwotCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCi0JCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAotCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKLQkgIC5pZFByb2R1Y3QJCT0gMHgwMTQxLAotCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKLQkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAotCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCi0JICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAotCS8qIEFjZXIgT3JiaUNhbSAtIEJpc29uIEVsZWN0cm9uaWNzICovCi0JeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKLQkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCi0JICAuaWRWZW5kb3IJCT0gMHg1OTg2LAotCSAgLmlkUHJvZHVjdAkJPSAweDAyMDAsCi0JICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAotCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCi0JICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCi0JLyogIEZ1aml0c3UgQW1pbG8gU0kyNjM2IC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KLQl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQotCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKLQkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCi0JICAuaWRQcm9kdWN0CQk9IDB4MDIwMiwKLQkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKLQkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAotCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKLQkvKiAgQWR2ZW50IDQyMTEgLSBCaXNvbiBFbGVjdHJvbmljcyAqLwotCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCi0JCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAotCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKLQkgIC5pZFByb2R1Y3QJCT0gMHgwMjAzLAotCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKLQkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAotCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCi0JICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAotCS8qIEJpc29uIEVsZWN0cm9uaWNzICovCi0JeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKLQkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCi0JICAuaWRWZW5kb3IJCT0gMHg1OTg2LAotCSAgLmlkUHJvZHVjdAkJPSAweDAzMDAsCi0JICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAotCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCi0JICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCi0JLyogQ2xldm8gTTU3MFRVIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KLQl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQotCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKLQkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCi0JICAuaWRQcm9kdWN0CQk9IDB4MDMwMywKLQkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCi0JICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKLQkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAotCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKKwkJCQl8IFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVAorCQkJCXwgVVZDX1FVSVJLX1BSVU5FX0NPTlRST0xTIH0sCiAJLyogR2VuZXJpYyBVU0IgVmlkZW8gQ2xhc3MgKi8KIAl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfVklERU8sIDEsIDApIH0sCiAJe30KQEAgLTIwMjksNiArMTk4Nyw4IEBACiBtb2R1bGVfaW5pdCh1dmNfaW5pdCk7CiBtb2R1bGVfZXhpdCh1dmNfY2xlYW51cCk7CiAKK21vZHVsZV9wYXJhbV9uYW1lZChub2Ryb3AsIHV2Y19ub19kcm9wX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhub2Ryb3AsICJEb24ndCBkcm9wIGluY29tcGxldGUgZnJhbWVzIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCB1dmNfcXVpcmtzX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxdWlya3MsICJGb3JjZWQgZGV2aWNlIHF1aXJrcyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCB1dmNfdHJhY2VfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCmluZGV4IDU2NDZhNmEuLjQyNTQ2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCkBAIC03OSwxMiArNzksMTMgQEAKICAqCiAgKi8KIAotdm9pZCB1dmNfcXVldWVfaW5pdChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSkKK3ZvaWQgdXZjX3F1ZXVlX2luaXQoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewogCW11dGV4X2luaXQoJnF1ZXVlLT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5pcnFsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcXVldWUtPm1haW5xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5pcnFxdWV1ZSk7CisJcXVldWUtPnR5cGUgPSB0eXBlOwogfQogCiAvKgpAQCAtMTMyLDcgKzEzMyw3IEBACiAJCXF1ZXVlLT5idWZmZXJbaV0uYnVmLmluZGV4ID0gaTsKIAkJcXVldWUtPmJ1ZmZlcltpXS5idWYubS5vZmZzZXQgPSBpICogYnVmc2l6ZTsKIAkJcXVldWUtPmJ1ZmZlcltpXS5idWYubGVuZ3RoID0gYnVmbGVuZ3RoOwotCQlxdWV1ZS0+YnVmZmVyW2ldLmJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlxdWV1ZS0+YnVmZmVyW2ldLmJ1Zi50eXBlID0gcXVldWUtPnR5cGU7CiAJCXF1ZXVlLT5idWZmZXJbaV0uYnVmLnNlcXVlbmNlID0gMDsKIAkJcXVldWUtPmJ1ZmZlcltpXS5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJCXF1ZXVlLT5idWZmZXJbaV0uYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CkBAIC0yMjYsNyArMjI3LDcgQEAKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FQVFVSRSwgIlF1ZXVpbmcgYnVmZmVyICV1LlxuIiwgdjRsMl9idWYtPmluZGV4KTsKIAotCWlmICh2NGwyX2J1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwlpZiAodjRsMl9idWYtPnR5cGUgIT0gcXVldWUtPnR5cGUgfHwKIAkgICAgdjRsMl9idWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CiAJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FQVFVSRSwgIltFXSBJbnZhbGlkIGJ1ZmZlciB0eXBlICgldSkgIgogCQkJImFuZC9vciBtZW1vcnkgKCV1KS5cbiIsIHY0bDJfYnVmLT50eXBlLApAQCAtMjQ5LDYgKzI1MCwxMyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKHY0bDJfYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIHY0bDJfYnVmLT5ieXRlc3VzZWQgPiBidWYtPmJ1Zi5sZW5ndGgpIHsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DQVBUVVJFLCAiW0VdIEJ5dGVzIHVzZWQgb3V0IG9mIGJvdW5kcy5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5pcnFsb2NrLCBmbGFncyk7CiAJaWYgKHF1ZXVlLT5mbGFncyAmIFVWQ19RVUVVRV9ESVNDT05ORUNURUQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmlycWxvY2ssIGZsYWdzKTsKQEAgLTI1Niw3ICsyNjQsMTEgQEAKIAkJZ290byBkb25lOwogCX0KIAlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9RVUVVRUQ7Ci0JYnVmLT5idWYuYnl0ZXN1c2VkID0gMDsKKwlpZiAodjRsMl9idWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlidWYtPmJ1Zi5ieXRlc3VzZWQgPSAwOworCWVsc2UKKwkJYnVmLT5idWYuYnl0ZXN1c2VkID0gdjRsMl9idWYtPmJ5dGVzdXNlZDsKKwogCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+c3RyZWFtLCAmcXVldWUtPm1haW5xdWV1ZSk7CiAJbGlzdF9hZGRfdGFpbCgmYnVmLT5xdWV1ZSwgJnF1ZXVlLT5pcnFxdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmlycWxvY2ssIGZsYWdzKTsKQEAgLTI4OSw3ICszMDEsNyBAQAogCXN0cnVjdCB1dmNfYnVmZmVyICpidWY7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodjRsMl9idWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJaWYgKHY0bDJfYnVmLT50eXBlICE9IHF1ZXVlLT50eXBlIHx8CiAJICAgIHY0bDJfYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewogCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBUFRVUkUsICJbRV0gSW52YWxpZCBidWZmZXIgdHlwZSAoJXUpICIKIAkJCSJhbmQvb3IgbWVtb3J5ICgldSkuXG4iLCB2NGwyX2J1Zi0+dHlwZSwKQEAgLTM5Nyw2ICs0MDksNyBAQAogCQl9CiAJCXF1ZXVlLT5zZXF1ZW5jZSA9IDA7CiAJCXF1ZXVlLT5mbGFncyB8PSBVVkNfUVVFVUVfU1RSRUFNSU5HOworCQlxdWV1ZS0+YnVmX3VzZWQgPSAwOwogCX0gZWxzZSB7CiAJCXV2Y19xdWV1ZV9jYW5jZWwocXVldWUsIDApOwogCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPm1haW5xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCA3NThkZmVmLi5hZmNjNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCWludCByZXQgPSAwOwogCV9fdTggKmZjYzsKIAotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCWlmIChmbXQtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmY2MgPSAoX191OCAqKSZmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CkBAIC0yMTYsNyArMjE2LDcgQEAKIAlzdHJ1Y3QgdXZjX2Zvcm1hdCAqZm9ybWF0ID0gdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2Zvcm1hdDsKIAlzdHJ1Y3QgdXZjX2ZyYW1lICpmcmFtZSA9IHZpZGVvLT5zdHJlYW1pbmctPmN1cl9mcmFtZTsKIAotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCWlmIChmbXQtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZm9ybWF0ID09IE5VTEwgfHwgZnJhbWUgPT0gTlVMTCkKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lOwogCWludCByZXQ7CiAKLQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwlpZiAoZm10LT50eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHV2Y19xdWV1ZV9zdHJlYW1pbmcoJnZpZGVvLT5xdWV1ZSkpCkBAIC0yNTIsOSArMjUyLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gdXZjX3NldF92aWRlb19jdHJsKHZpZGVvLCAmcHJvYmUsIDApKSA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAltZW1jcHkoJnZpZGVvLT5zdHJlYW1pbmctPmN0cmwsICZwcm9iZSwgc2l6ZW9mIHByb2JlKTsKIAl2aWRlby0+c3RyZWFtaW5nLT5jdXJfZm9ybWF0ID0gZm9ybWF0OwogCXZpZGVvLT5zdHJlYW1pbmctPmN1cl9mcmFtZSA9IGZyYW1lOwpAQCAtMjY3LDcgKzI2NCw3IEBACiB7CiAJdWludDMyX3QgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKIAotCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwlpZiAocGFybS0+dHlwZSAhPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW51bWVyYXRvciA9IHZpZGVvLT5zdHJlYW1pbmctPmN0cmwuZHdGcmFtZUludGVydmFsOwpAQCAtMjc1LDEzICsyNzIsMjEgQEAKIAl1dmNfc2ltcGxpZnlfZnJhY3Rpb24oJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLCA4LCAzMzMpOwogCiAJbWVtc2V0KHBhcm0sIDAsIHNpemVvZiAqcGFybSk7Ci0JcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlwYXJtLT5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKLQlwYXJtLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgPSAwOwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gbnVtZXJhdG9yOwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBkZW5vbWluYXRvcjsKLQlwYXJtLT5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKLQlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSAwOworCXBhcm0tPnR5cGUgPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlOworCisJaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXBhcm0tPnBhcm0uY2FwdHVyZS5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCQlwYXJtLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgPSAwOworCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IG51bWVyYXRvcjsKKwkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IGRlbm9taW5hdG9yOworCQlwYXJtLT5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKwkJcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMDsKKwl9IGVsc2UgeworCQlwYXJtLT5wYXJtLm91dHB1dC5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCQlwYXJtLT5wYXJtLm91dHB1dC5vdXRwdXRtb2RlID0gMDsKKwkJcGFybS0+cGFybS5vdXRwdXQudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IG51bWVyYXRvcjsKKwkJcGFybS0+cGFybS5vdXRwdXQudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gZGVub21pbmF0b3I7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTEsNDIgKzI5Niw0NSBAQAogewogCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lID0gdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2ZyYW1lOwogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgcHJvYmU7CisJc3RydWN0IHY0bDJfZnJhY3QgdGltZXBlcmZyYW1lOwogCXVpbnQzMl90IGludGVydmFsOwogCWludCByZXQ7CiAKLQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJaWYgKHBhcm0tPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodXZjX3F1ZXVlX3N0cmVhbWluZygmdmlkZW8tPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChwYXJtLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJdGltZXBlcmZyYW1lID0gcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZTsKKwllbHNlCisJCXRpbWVwZXJmcmFtZSA9IHBhcm0tPnBhcm0ub3V0cHV0LnRpbWVwZXJmcmFtZTsKKwogCW1lbWNweSgmcHJvYmUsICZ2aWRlby0+c3RyZWFtaW5nLT5jdHJsLCBzaXplb2YgcHJvYmUpOwotCWludGVydmFsID0gdXZjX2ZyYWN0aW9uX3RvX2ludGVydmFsKAotCQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IsCi0JCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yKTsKKwlpbnRlcnZhbCA9IHV2Y19mcmFjdGlvbl90b19pbnRlcnZhbCh0aW1lcGVyZnJhbWUubnVtZXJhdG9yLAorCQl0aW1lcGVyZnJhbWUuZGVub21pbmF0b3IpOwogCiAJdXZjX3RyYWNlKFVWQ19UUkFDRV9GT1JNQVQsICJTZXR0aW5nIGZyYW1lIGludGVydmFsIHRvICV1LyV1ICgldSkuXG4iLAotCQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IsCi0JCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yLAotCQkJaW50ZXJ2YWwpOworCQl0aW1lcGVyZnJhbWUubnVtZXJhdG9yLCB0aW1lcGVyZnJhbWUuZGVub21pbmF0b3IsIGludGVydmFsKTsKIAlwcm9iZS5kd0ZyYW1lSW50ZXJ2YWwgPSB1dmNfdHJ5X2ZyYW1lX2ludGVydmFsKGZyYW1lLCBpbnRlcnZhbCk7CiAKIAkvKiBQcm9iZSB0aGUgZGV2aWNlIHdpdGggdGhlIG5ldyBzZXR0aW5ncy4gKi8KIAlpZiAoKHJldCA9IHV2Y19wcm9iZV92aWRlbyh2aWRlbywgJnByb2JlKSkgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogQ29tbWl0IHRoZSBuZXcgc2V0dGluZ3MuICovCi0JaWYgKChyZXQgPSB1dmNfc2V0X3ZpZGVvX2N0cmwodmlkZW8sICZwcm9iZSwgMCkpIDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCW1lbWNweSgmdmlkZW8tPnN0cmVhbWluZy0+Y3RybCwgJnByb2JlLCBzaXplb2YgcHJvYmUpOwogCiAJLyogUmV0dXJuIHRoZSBhY3R1YWwgZnJhbWUgcGVyaW9kLiAqLwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gcHJvYmUuZHdGcmFtZUludGVydmFsOwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSAxMDAwMDAwMDsKLQl1dmNfc2ltcGxpZnlfZnJhY3Rpb24oJnBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yLAotCQkJCSZwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yLAotCQkJCTgsIDMzMyk7CisJdGltZXBlcmZyYW1lLm51bWVyYXRvciA9IHByb2JlLmR3RnJhbWVJbnRlcnZhbDsKKwl0aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSAxMDAwMDAwMDsKKwl1dmNfc2ltcGxpZnlfZnJhY3Rpb24oJnRpbWVwZXJmcmFtZS5udW1lcmF0b3IsCisJCSZ0aW1lcGVyZnJhbWUuZGVub21pbmF0b3IsIDgsIDMzMyk7CisKKwlpZiAocGFybS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUgPSB0aW1lcGVyZnJhbWU7CisJZWxzZQorCQlwYXJtLT5wYXJtLm91dHB1dC50aW1lcGVyZnJhbWUgPSB0aW1lcGVyZnJhbWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2NCwxNyArNDcyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX191dmNfdjRsMl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHV2Y192NGwyX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX0lPQ1RMKQotCQl2NGxfcHJpbnRrX2lvY3RsKGNtZCk7Ci0KIAlzd2l0Y2ggKGNtZCkgewogCS8qIFF1ZXJ5IGNhcGFiaWxpdGllcyAqLwogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgpAQCAtNDg3LDggKzQ5MSwxMiBAQAogCQlzdHJuY3B5KGNhcC0+YnVzX2luZm8sIHZpZGVvLT5kZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCiAJCQlzaXplb2YgY2FwLT5idXNfaW5mbyk7CiAJCWNhcC0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCi0JCQkJICB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwkJaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCisJCQkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJCWVsc2UKKwkJCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUCisJCQkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAJCWJyZWFrOwogCX0KIApAQCAtNjY2LDcgKzY3NCw3IEBACiAJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IGFyZzsKIAkJc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKIAotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQlpZiAoZm10LT50eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgfHwKIAkJICAgIGZtdC0+aW5kZXggPj0gdmlkZW8tPnN0cmVhbWluZy0+bmZvcm1hdHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODA1LDcgKzgxMyw3IEBACiAJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjYXAgPSBhcmc7CiAJCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lID0gdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2ZyYW1lOwogCi0JCWlmIChjY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJaWYgKGNjYXAtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKQEAgLTgzMSw3ICs4MzksNyBAQAogCQl1bnNpZ25lZCBpbnQgYnVmc2l6ZSA9CiAJCQl2aWRlby0+c3RyZWFtaW5nLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7CiAKLQkJaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQlpZiAocmItPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSB8fAogCQkgICAgcmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg1MSw3ICs4NTksNyBAQAogCXsKIAkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CiAKLQkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCWlmIChidWYtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghdXZjX2hhc19wcml2aWxlZ2VzKGhhbmRsZSkpCkBAIC04NzcsNyArODg1LDcgQEAKIAl7CiAJCWludCAqdHlwZSA9IGFyZzsKIAotCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlpZiAoKnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghdXZjX2hhc19wcml2aWxlZ2VzKGhhbmRsZSkpCkBAIC04OTIsNyArOTAwLDcgQEAKIAl7CiAJCWludCAqdHlwZSA9IGFyZzsKIAotCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlpZiAoKnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghdXZjX2hhc19wcml2aWxlZ2VzKGhhbmRsZSkpCkBAIC05MjUsNyArOTMzLDcgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlpbmZvID0ga21hbGxvYyhzaXplb2YgKmluZm8sIEdGUF9LRVJORUwpOworCQlpbmZvID0ga3phbGxvYyhzaXplb2YgKmluZm8sIEdGUF9LRVJORUwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTk1Miw3ICs5NjAsNyBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mICptYXAsIEdGUF9LRVJORUwpOworCQltYXAgPSBremFsbG9jKHNpemVvZiAqbWFwLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1hcCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTk3OSw3ICs5ODcsNyBAQAogCiAJZGVmYXVsdDoKIAkJaWYgKChyZXQgPSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywKLQkJCV9fdXZjX3Y0bDJfZG9faW9jdGwpKSA9PSAtRU5PSU9DVExDTUQpCisJCQl1dmNfdjRsMl9kb19pb2N0bCkpID09IC1FTk9JT0NUTENNRCkKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfSU9DVEwsICJVbmtub3duIGlvY3RsIDB4JTA4eFxuIiwKIAkJCQkgIGNtZCk7CiAJCXJldHVybiByZXQ7CkBAIC05ODgsMTcgKzk5NiwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3Y0bDJfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIF9fdXZjX3Y0bDJfZG9faW9jdGwoZmlsZSwgY21kLCBhcmcpOwotfQotCiBzdGF0aWMgaW50IHV2Y192NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FMTFMsICJ1dmNfdjRsMl9pb2N0bFxuIik7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdXZjX3Y0bDJfZG9faW9jdGwpOworCWlmICh1dmNfdHJhY2VfcGFyYW0gJiBVVkNfVFJBQ0VfSU9DVEwpIHsKKwkJdXZjX3ByaW50ayhLRVJOX0RFQlVHLCAidXZjX3Y0bDJfaW9jdGwoIik7CisJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKKwkJcHJpbnRrKCIpXG4iKTsKKwl9CisKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHV2Y192NGwyX2RvX2lvY3RsKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdXZjX3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IGI3YmIyMzguLmU3YzMxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC0zNiwxNSArMzYsMjIgQEAKIHsKIAlfX3U4IHR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CiAJdW5zaWduZWQgaW50IHBpcGU7Ci0JaW50IHJldDsKIAogCXBpcGUgPSAocXVlcnkgJiAweDgwKSA/IHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApCiAJCQkgICAgICA6IHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApOwogCXR5cGUgfD0gKHF1ZXJ5ICYgMHg4MCkgPyBVU0JfRElSX0lOIDogVVNCX0RJUl9PVVQ7CiAKLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCBwaXBlLCBxdWVyeSwgdHlwZSwgY3MgPDwgOCwKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgcGlwZSwgcXVlcnksIHR5cGUsIGNzIDw8IDgsCiAJCQl1bml0IDw8IDggfCBpbnRmbnVtLCBkYXRhLCBzaXplLCB0aW1lb3V0KTsKK30KIAoraW50IHV2Y19xdWVyeV9jdHJsKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsIF9fdTggcXVlcnksIF9fdTggdW5pdCwKKwkJCV9fdTggaW50Zm51bSwgX191OCBjcywgdm9pZCAqZGF0YSwgX191MTYgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gX191dmNfcXVlcnlfY3RybChkZXYsIHF1ZXJ5LCB1bml0LCBpbnRmbnVtLCBjcywgZGF0YSwgc2l6ZSwKKwkJCQlVVkNfQ1RSTF9DT05UUk9MX1RJTUVPVVQpOwogCWlmIChyZXQgIT0gc2l6ZSkgewogCQl1dmNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIHF1ZXJ5ICgldSkgVVZDIGNvbnRyb2wgJXUgIgogCQkJIih1bml0ICV1KSA6ICVkIChleHAuICV1KS5cbiIsIHF1ZXJ5LCBjcywgdW5pdCwgcmV0LApAQCAtNTUsMTMgKzYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHV2Y19xdWVyeV9jdHJsKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsIF9fdTggcXVlcnksIF9fdTggdW5pdCwKLQkJCV9fdTggaW50Zm51bSwgX191OCBjcywgdm9pZCAqZGF0YSwgX191MTYgc2l6ZSkKLXsKLQlyZXR1cm4gX191dmNfcXVlcnlfY3RybChkZXYsIHF1ZXJ5LCB1bml0LCBpbnRmbnVtLCBjcywgZGF0YSwgc2l6ZSwKLQkJCQlVVkNfQ1RSTF9DT05UUk9MX1RJTUVPVVQpOwotfQotCiBzdGF0aWMgdm9pZCB1dmNfZml4dXBfYnVmZmVyX3NpemUoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwpCiB7CkBAIC0xMDIsOCArMTAyLDM2IEBACiAJcmV0ID0gX191dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBxdWVyeSwgMCwgdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwKIAkJcHJvYmUgPyBWU19QUk9CRV9DT05UUk9MIDogVlNfQ09NTUlUX0NPTlRST0wsIGRhdGEsIHNpemUsCiAJCVVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUKTsKLQlpZiAocmV0IDwgMCkKKworCWlmICgocXVlcnkgPT0gR0VUX01JTiB8fCBxdWVyeSA9PSBHRVRfTUFYKSAmJiByZXQgPT0gMikgeworCQkvKiBTb21lIGNhbWVyYXMsIG1vc3RseSBiYXNlZCBvbiBCaXNvbiBFbGVjdHJvbmljcyBjaGlwc2V0cywKKwkJICogYW5zd2VyIGEgR0VUX01JTiBvciBHRVRfTUFYIHJlcXVlc3Qgd2l0aCB0aGUgd0NvbXBRdWFsaXR5CisJCSAqIGZpZWxkIG9ubHkuCisJCSAqLworCQl1dmNfd2Fybl9vbmNlKHZpZGVvLT5kZXYsIFVWQ19XQVJOX01JTk1BWCwgIlVWQyBub24gIgorCQkJImNvbXBsaWFuY2UgLSBHRVRfTUlOL01BWChQUk9CRSkgaW5jb3JyZWN0bHkgIgorCQkJInN1cHBvcnRlZC4gRW5hYmxpbmcgd29ya2Fyb3VuZC5cbiIpOworCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mIGN0cmwpOworCQljdHJsLT53Q29tcFF1YWxpdHkgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWRhdGEpOworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHF1ZXJ5ID09IEdFVF9ERUYgJiYgcHJvYmUgPT0gMSkgeworCQkvKiBNYW55IGNhbWVyYXMgZG9uJ3Qgc3VwcG9ydCB0aGUgR0VUX0RFRiByZXF1ZXN0IG9uIHRoZWlyCisJCSAqIHZpZGVvIHByb2JlIGNvbnRyb2wuIFdhcm4gb25jZSBhbmQgcmV0dXJuLCB0aGUgY2FsbGVyIHdpbGwKKwkJICogZmFsbCBiYWNrIHRvIEdFVF9DVVIuCisJCSAqLworCQl1dmNfd2Fybl9vbmNlKHZpZGVvLT5kZXYsIFVWQ19XQVJOX1BST0JFX0RFRiwgIlVWQyBub24gIgorCQkJImNvbXBsaWFuY2UgLSBHRVRfREVGKFBST0JFKSBub3Qgc3VwcG9ydGVkLiAiCisJCQkiRW5hYmxpbmcgd29ya2Fyb3VuZC5cbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHJldCAhPSBzaXplKSB7CisJCXV2Y19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gcXVlcnkgKCV1KSBVVkMgJXMgY29udHJvbCA6ICIKKwkJCSIlZCAoZXhwLiAldSkuXG4iLCBxdWVyeSwgcHJvYmUgPyAicHJvYmUiIDogImNvbW1pdCIsCisJCQlyZXQsIHNpemUpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CiAKIAljdHJsLT5ibUhpbnQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhWzBdKTsKIAljdHJsLT5iRm9ybWF0SW5kZXggPSBkYXRhWzJdOwpAQCAtMTE0LDE0ICsxNDIsMTEgQEAKIAljdHJsLT53Q29tcFF1YWxpdHkgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZkYXRhWzEyXSk7CiAJY3RybC0+d0NvbXBXaW5kb3dTaXplID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmZGF0YVsxNF0pOwogCWN0cmwtPndEZWxheSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmRhdGFbMTZdKTsKLQljdHJsLT5kd01heFZpZGVvRnJhbWVTaXplID0KLQkJbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopJmRhdGFbMThdKSk7Ci0JY3RybC0+ZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplID0KLQkJbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyICopJmRhdGFbMjJdKSk7CisJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9IGdldF91bmFsaWduZWRfbGUzMigmZGF0YVsxOF0pOworCWN0cmwtPmR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZSA9IGdldF91bmFsaWduZWRfbGUzMigmZGF0YVsyMl0pOwogCiAJaWYgKHNpemUgPT0gMzQpIHsKLQkJY3RybC0+ZHdDbG9ja0ZyZXF1ZW5jeSA9Ci0JCQlsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIgKikmZGF0YVsyNl0pKTsKKwkJY3RybC0+ZHdDbG9ja0ZyZXF1ZW5jeSA9IGdldF91bmFsaWduZWRfbGUzMigmZGF0YVsyNl0pOwogCQljdHJsLT5ibUZyYW1pbmdJbmZvID0gZGF0YVszMF07CiAJCWN0cmwtPmJQcmVmZXJlZFZlcnNpb24gPSBkYXRhWzMxXTsKIAkJY3RybC0+Yk1pblZlcnNpb24gPSBkYXRhWzMyXTsKQEAgLTEzOCwxMyArMTYzLDE0IEBACiAJICogVHJ5IHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9yLgogCSAqLwogCXV2Y19maXh1cF9idWZmZXJfc2l6ZSh2aWRlbywgY3RybCk7CisJcmV0ID0gMDsKIAogb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCB1dmNfc2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfc2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwsIGludCBwcm9iZSkKIHsKIAlfX3U4ICpkYXRhOwpAQCAtMTY4LDE0ICsxOTQsMTEgQEAKIAkvKiBOb3RlOiBTb21lIG9mIHRoZSBmaWVsZHMgYmVsb3cgYXJlIG5vdCByZXF1aXJlZCBmb3IgSU4gZGV2aWNlcyAoc2VlCiAJICogVVZDIHNwZWMsIDQuMy4xLjEpLCBidXQgd2Ugc3RpbGwgY29weSB0aGVtIGluIGNhc2Ugc3VwcG9ydCBmb3IgT1VUCiAJICogZGV2aWNlcyBpcyBhZGRlZCBpbiB0aGUgZnV0dXJlLiAqLwotCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSksCi0JCShfX2xlMzIgKikmZGF0YVsxOF0pOwotCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoY3RybC0+ZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplKSwKLQkJKF9fbGUzMiAqKSZkYXRhWzIyXSk7CisJcHV0X3VuYWxpZ25lZF9sZTMyKGN0cmwtPmR3TWF4VmlkZW9GcmFtZVNpemUsICZkYXRhWzE4XSk7CisJcHV0X3VuYWxpZ25lZF9sZTMyKGN0cmwtPmR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZSwgJmRhdGFbMjJdKTsKIAogCWlmIChzaXplID09IDM0KSB7Ci0JCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoY3RybC0+ZHdDbG9ja0ZyZXF1ZW5jeSksCi0JCQkoX19sZTMyICopJmRhdGFbMjZdKTsKKwkJcHV0X3VuYWxpZ25lZF9sZTMyKGN0cmwtPmR3Q2xvY2tGcmVxdWVuY3ksICZkYXRhWzI2XSk7CiAJCWRhdGFbMzBdID0gY3RybC0+Ym1GcmFtaW5nSW5mbzsKIAkJZGF0YVszMV0gPSBjdHJsLT5iUHJlZmVyZWRWZXJzaW9uOwogCQlkYXRhWzMyXSA9IGN0cmwtPmJNaW5WZXJzaW9uOwpAQCAtMTg2LDYgKzIwOSwxMiBAQAogCQl2aWRlby0+c3RyZWFtaW5nLT5pbnRmbnVtLAogCQlwcm9iZSA/IFZTX1BST0JFX0NPTlRST0wgOiBWU19DT01NSVRfQ09OVFJPTCwgZGF0YSwgc2l6ZSwKIAkJVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQpOworCWlmIChyZXQgIT0gc2l6ZSkgeworCQl1dmNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIHNldCBVVkMgJXMgY29udHJvbCA6ICIKKwkJCSIlZCAoZXhwLiAldSkuXG4iLCBwcm9iZSA/ICJwcm9iZSIgOiAiY29tbWl0IiwKKwkJCXJldCwgc2l6ZSk7CisJCXJldCA9IC1FSU87CisJfQogCiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJldDsKQEAgLTI1Miw2ICsyODEsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgdXZjX2NvbW1pdF92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCisJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCAqcHJvYmUpCit7CisJcmV0dXJuIHV2Y19zZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFZpZGVvIGNvZGVjcwogICovCkBAIC0zMzMsNyArMzY4LDcgQEAKIAogCS8qIFN5bmNocm9uaXplIHRvIHRoZSBpbnB1dCBzdHJlYW0gYnkgd2FpdGluZyBmb3IgdGhlIEZJRCBiaXQgdG8gYmUKIAkgKiB0b2dnbGVkIHdoZW4gdGhlIHRoZSBidWZmZXIgc3RhdGUgaXMgbm90IFVWQ19CVUZfU1RBVEVfQUNUSVZFLgotCSAqIHF1ZXVlLT5sYXN0X2ZpZCBpcyBpbml0aWFsaXplZCB0byAtMSwgc28gdGhlIGZpcnN0IGlzb2Nocm9ub3VzCisJICogdmlkZW8tPmxhc3RfZmlkIGlzIGluaXRpYWxpemVkIHRvIC0xLCBzbyB0aGUgZmlyc3QgaXNvY2hyb25vdXMKIAkgKiBmcmFtZSB3aWxsIGFsd2F5cyBiZSBpbiBzeW5jLgogCSAqCiAJICogSWYgdGhlIGRldmljZSBkb2Vzbid0IHRvZ2dsZSB0aGUgRklEIGJpdCwgaW52ZXJ0IHZpZGVvLT5sYXN0X2ZpZApAQCAtMzYwLDcgKzM5NSw3IEBACiAJICogbGFzdCBwYXlsb2FkIGNhbiBiZSBsb3N0IGFueXdheSkuIFdlIHRodXMgbXVzdCBjaGVjayBpZiB0aGUgRklEIGhhcwogCSAqIGJlZW4gdG9nZ2xlZC4KIAkgKgotCSAqIHF1ZXVlLT5sYXN0X2ZpZCBpcyBpbml0aWFsaXplZCB0byAtMSwgc28gdGhlIGZpcnN0IGlzb2Nocm9ub3VzCisJICogdmlkZW8tPmxhc3RfZmlkIGlzIGluaXRpYWxpemVkIHRvIC0xLCBzbyB0aGUgZmlyc3QgaXNvY2hyb25vdXMKIAkgKiBmcmFtZSB3aWxsIG5ldmVyIHRyaWdnZXIgYW4gZW5kIG9mIGZyYW1lIGRldGVjdGlvbi4KIAkgKgogCSAqIEVtcHR5IGJ1ZmZlcnMgKGJ5dGVzdXNlZCA9PSAwKSBkb24ndCB0cmlnZ2VyIGVuZCBvZiBmcmFtZSBkZXRlY3Rpb24KQEAgLTQxOCw2ICs0NTMsMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgdXZjX3ZpZGVvX2VuY29kZV9oZWFkZXIoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorCQlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmLCBfX3U4ICpkYXRhLCBpbnQgbGVuKQoreworCWRhdGFbMF0gPSAyOwkvKiBIZWFkZXIgbGVuZ3RoICovCisJZGF0YVsxXSA9IFVWQ19TVFJFQU1fRU9IIHwgVVZDX1NUUkVBTV9FT0YKKwkJfCAodmlkZW8tPmxhc3RfZmlkICYgVVZDX1NUUkVBTV9GSUQpOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHV2Y192aWRlb19lbmNvZGVfZGF0YShzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCisJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYsIF9fdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUgPSAmdmlkZW8tPnF1ZXVlOworCXVuc2lnbmVkIGludCBuYnl0ZXM7CisJdm9pZCAqbWVtOworCisJLyogQ29weSB2aWRlbyBkYXRhIHRvIHRoZSBVUkIgYnVmZmVyLiAqLworCW1lbSA9IHF1ZXVlLT5tZW0gKyBidWYtPmJ1Zi5tLm9mZnNldCArIHF1ZXVlLT5idWZfdXNlZDsKKwluYnl0ZXMgPSBtaW4oKHVuc2lnbmVkIGludClsZW4sIGJ1Zi0+YnVmLmJ5dGVzdXNlZCAtIHF1ZXVlLT5idWZfdXNlZCk7CisJbmJ5dGVzID0gbWluKHZpZGVvLT5idWxrLm1heF9wYXlsb2FkX3NpemUgLSB2aWRlby0+YnVsay5wYXlsb2FkX3NpemUsCisJCQluYnl0ZXMpOworCW1lbWNweShkYXRhLCBtZW0sIG5ieXRlcyk7CisKKwlxdWV1ZS0+YnVmX3VzZWQgKz0gbmJ5dGVzOworCisJcmV0dXJuIG5ieXRlczsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBVUkIgaGFuZGxpbmcKICAqLwpAQCAtNDc3LDcgKzU0MCw3IEBACiAJLyogSWYgdGhlIFVSQiBpcyB0aGUgZmlyc3Qgb2YgaXRzIHBheWxvYWQsIGRlY29kZSBhbmQgc2F2ZSB0aGUKIAkgKiBoZWFkZXIuCiAJICovCi0JaWYgKHZpZGVvLT5idWxrLmhlYWRlcl9zaXplID09IDApIHsKKwlpZiAodmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPT0gMCAmJiAhdmlkZW8tPmJ1bGsuc2tpcF9wYXlsb2FkKSB7CiAJCWRvIHsKIAkJCXJldCA9IHV2Y192aWRlb19kZWNvZGVfc3RhcnQodmlkZW8sIGJ1ZiwgbWVtLCBsZW4pOwogCQkJaWYgKHJldCA9PSAtRUFHQUlOKQpAQCAtNDg3LDE0ICs1NTAsMTMgQEAKIAkJLyogSWYgYW4gZXJyb3Igb2NjdXJlZCBza2lwIHRoZSByZXN0IG9mIHRoZSBwYXlsb2FkLiAqLwogCQlpZiAocmV0IDwgMCB8fCBidWYgPT0gTlVMTCkgewogCQkJdmlkZW8tPmJ1bGsuc2tpcF9wYXlsb2FkID0gMTsKLQkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSh2aWRlby0+YnVsay5oZWFkZXIsIG1lbSwgcmV0KTsKKwkJCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplID0gcmV0OworCisJCQltZW0gKz0gcmV0OworCQkJbGVuIC09IHJldDsKIAkJfQotCi0JCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplID0gcmV0OwotCQltZW1jcHkodmlkZW8tPmJ1bGsuaGVhZGVyLCBtZW0sIHZpZGVvLT5idWxrLmhlYWRlcl9zaXplKTsKLQotCQltZW0gKz0gcmV0OwotCQlsZW4gLT0gcmV0OwogCX0KIAogCS8qIFRoZSBidWZmZXIgcXVldWUgbWlnaHQgaGF2ZSBiZWVuIGNhbmNlbGxlZCB3aGlsZSBhIGJ1bGsgdHJhbnNmZXIKQEAgLTUyNSw2ICs1ODcsNDggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHV2Y192aWRlb19lbmNvZGVfYnVsayhzdHJ1Y3QgdXJiICp1cmIsCisJc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLCBzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmKQoreworCXU4ICptZW0gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuID0gdmlkZW8tPnVyYl9zaXplLCByZXQ7CisKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSBVUkIgaXMgdGhlIGZpcnN0IG9mIGl0cyBwYXlsb2FkLCBhZGQgdGhlIGhlYWRlci4gKi8KKwlpZiAodmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPT0gMCkgeworCQlyZXQgPSB1dmNfdmlkZW9fZW5jb2RlX2hlYWRlcih2aWRlbywgYnVmLCBtZW0sIGxlbik7CisJCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplID0gcmV0OworCQl2aWRlby0+YnVsay5wYXlsb2FkX3NpemUgKz0gcmV0OworCQltZW0gKz0gcmV0OworCQlsZW4gLT0gcmV0OworCX0KKworCS8qIFByb2Nlc3MgdmlkZW8gZGF0YS4gKi8KKwlyZXQgPSB1dmNfdmlkZW9fZW5jb2RlX2RhdGEodmlkZW8sIGJ1ZiwgbWVtLCBsZW4pOworCisJdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplICs9IHJldDsKKwlsZW4gLT0gcmV0OworCisJaWYgKGJ1Zi0+YnVmLmJ5dGVzdXNlZCA9PSB2aWRlby0+cXVldWUuYnVmX3VzZWQgfHwKKwkgICAgdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplID09IHZpZGVvLT5idWxrLm1heF9wYXlsb2FkX3NpemUpIHsKKwkJaWYgKGJ1Zi0+YnVmLmJ5dGVzdXNlZCA9PSB2aWRlby0+cXVldWUuYnVmX3VzZWQpIHsKKwkJCXZpZGVvLT5xdWV1ZS5idWZfdXNlZCA9IDA7CisJCQlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9ET05FOworCQkJdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZ2aWRlby0+cXVldWUsIGJ1Zik7CisJCQl2aWRlby0+bGFzdF9maWQgXj0gVVZDX1NUUkVBTV9GSUQ7CisJCX0KKworCQl2aWRlby0+YnVsay5oZWFkZXJfc2l6ZSA9IDA7CisJCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSA9IDA7CisJfQorCisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdmlkZW8tPnVyYl9zaXplIC0gbGVuOworfQorCiBzdGF0aWMgdm9pZCB1dmNfdmlkZW9fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHVyYi0+Y29udGV4dDsKQEAgLTcyMiw3ICs4MjYsMTUgQEAKIAlpZiAodXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh2aWRlby0+ZGV2LT51ZGV2LCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZXAtPmRlc2MpKQorCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHZpZGVvLT5kZXYtPnVkZXYsCisJCQkJICAgICAgIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWVsc2UKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh2aWRlby0+ZGV2LT51ZGV2LAorCQkJCSAgICAgICBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKworCWlmICh2aWRlby0+c3RyZWFtaW5nLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKQorCQlzaXplID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBVVkNfVVJCUzsgKytpKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX2ZsYWdzKTsKQEAgLTg1NCw3ICs5NjYsNyBAQAogCiAJdmlkZW8tPmZyb3plbiA9IDA7CiAKLQlpZiAoKHJldCA9IHV2Y19zZXRfdmlkZW9fY3RybCh2aWRlbywgJnZpZGVvLT5zdHJlYW1pbmctPmN0cmwsIDApKSA8IDApIHsKKwlpZiAoKHJldCA9IHV2Y19jb21taXRfdmlkZW8odmlkZW8sICZ2aWRlby0+c3RyZWFtaW5nLT5jdHJsKSkgPCAwKSB7CiAJCXV2Y19xdWV1ZV9lbmFibGUoJnZpZGVvLT5xdWV1ZSwgMCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtOTM1LDIzICsxMDQ3LDMwIEBACiAJCQlicmVhazsKIAl9CiAKLQkvKiBDb21taXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MuICovCiAJcHJvYmUtPmJGb3JtYXRJbmRleCA9IGZvcm1hdC0+aW5kZXg7CiAJcHJvYmUtPmJGcmFtZUluZGV4ID0gZnJhbWUtPmJGcmFtZUluZGV4OwotCWlmICgocmV0ID0gdXZjX3NldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMCkpIDwgMCkKLQkJcmV0dXJuIHJldDsKIAogCXZpZGVvLT5zdHJlYW1pbmctPmN1cl9mb3JtYXQgPSBmb3JtYXQ7CiAJdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2ZyYW1lID0gZnJhbWU7CiAJYXRvbWljX3NldCgmdmlkZW8tPmFjdGl2ZSwgMCk7CiAKIAkvKiBTZWxlY3QgdGhlIHZpZGVvIGRlY29kaW5nIGZ1bmN0aW9uICovCi0JaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVCkKLQkJdmlkZW8tPmRlY29kZSA9IHV2Y192aWRlb19kZWNvZGVfaXNpZ2h0OwotCWVsc2UgaWYgKHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkKLQkJdmlkZW8tPmRlY29kZSA9IHV2Y192aWRlb19kZWNvZGVfaXNvYzsKLQllbHNlCi0JCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2J1bGs7CisJaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWlmICh2aWRlby0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfQlVJTFRJTl9JU0lHSFQpCisJCQl2aWRlby0+ZGVjb2RlID0gdXZjX3ZpZGVvX2RlY29kZV9pc2lnaHQ7CisJCWVsc2UgaWYgKHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkKKwkJCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2lzb2M7CisJCWVsc2UKKwkJCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2J1bGs7CisJfSBlbHNlIHsKKwkJaWYgKHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID09IDEpCisJCQl2aWRlby0+ZGVjb2RlID0gdXZjX3ZpZGVvX2VuY29kZV9idWxrOworCQllbHNlIHsKKwkJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiSXNvY2hyb25vdXMgZW5kcG9pbnRzIGFyZSBub3QgIgorCQkJCSJzdXBwb3J0ZWQgZm9yIHZpZGVvIG91dHB1dCBkZXZpY2VzLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KIAogCXJldHVybiAwOwogfQpAQCAtOTcxLDcgKzEwOTAsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAodmlkZW8tPnN0cmVhbWluZy0+Y3VyX2Zvcm1hdC0+ZmxhZ3MgJiBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRCkKKwlpZiAoKHZpZGVvLT5zdHJlYW1pbmctPmN1cl9mb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpIHx8CisJICAgIHV2Y19ub19kcm9wX3BhcmFtKQogCQl2aWRlby0+cXVldWUuZmxhZ3MgJj0gflVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEU7CiAJZWxzZQogCQl2aWRlby0+cXVldWUuZmxhZ3MgfD0gVVZDX1FVRVVFX0RST1BfSU5DT01QTEVURTsKQEAgLTk3OSw2ICsxMDk5LDEwIEBACiAJaWYgKChyZXQgPSB1dmNfcXVldWVfZW5hYmxlKCZ2aWRlby0+cXVldWUsIDEpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKKwkvKiBDb21taXQgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzLiAqLworCWlmICgocmV0ID0gdXZjX2NvbW1pdF92aWRlbyh2aWRlbywgJnZpZGVvLT5zdHJlYW1pbmctPmN0cmwpKSA8IDApCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gdXZjX2luaXRfdmlkZW8odmlkZW8sIEdGUF9LRVJORUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCA5YTZiYzFhLi44OTZiNzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKLQogLyoKICAqIER5bmFtaWMgY29udHJvbHMKICAqLwpAQCAtMzE2LDYgKzMxNSw3IEBACiAjZGVmaW5lIFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVAkweDAwMDAwMDA4CiAjZGVmaW5lIFVWQ19RVUlSS19TVFJFQU1fTk9fRklECQkweDAwMDAwMDEwCiAjZGVmaW5lIFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVAkweDAwMDAwMDIwCisjZGVmaW5lIFVWQ19RVUlSS19QUlVORV9DT05UUk9MUwkweDAwMDAwMDQwCiAKIC8qIEZvcm1hdCBmbGFncyAqLwogI2RlZmluZSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRAkJMHgwMDAwMDAwMQpAQCAtMzgzLDYgKzM4MywxMSBAQAogCiAJc3RydWN0IHV2Y19tZW51X2luZm8gKm1lbnVfaW5mbzsKIAlfX3UzMiBtZW51X2NvdW50OworCisJX19zMzIgKCpnZXQpIChzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZywgX191OCBxdWVyeSwKKwkJICAgICAgY29uc3QgX191OCAqZGF0YSk7CisJdm9pZCAoKnNldCkgKHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICptYXBwaW5nLCBfX3MzMiB2YWx1ZSwKKwkJICAgICBfX3U4ICpkYXRhKTsKIH07CiAKIHN0cnVjdCB1dmNfY29udHJvbCB7CkBAIC01MjMsNiArNTI4LDcgQEAKIAlfX3UxNiBtYXhwc2l6ZTsKIAogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2hlYWRlciBoZWFkZXI7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CiAKIAl1bnNpZ25lZCBpbnQgbmZvcm1hdHM7CiAJc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKQEAgLTU1OCwxMiArNTY0LDE1IEBACiAjZGVmaW5lIFVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEUJKDEgPDwgMikKIAogc3RydWN0IHV2Y192aWRlb19xdWV1ZSB7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisKIAl2b2lkICptZW07CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCV9fdTMyIHNlcXVlbmNlOwogCiAJdW5zaWduZWQgaW50IGNvdW50OwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYnVmX3VzZWQ7CiAJc3RydWN0IHV2Y19idWZmZXIgYnVmZmVyW1VWQ19NQVhfVklERU9fQlVGRkVSU107CiAJc3RydWN0IG11dGV4IG11dGV4OwkvKiBwcm90ZWN0cyBidWZmZXJzIGFuZCBtYWlucXVldWUgKi8KIAlzcGlubG9ja190IGlycWxvY2s7CS8qIHByb3RlY3RzIGlycXF1ZXVlICovCkBAIC01NzgsOCArNTg3LDkgQEAKIAlhdG9taWNfdCBhY3RpdmU7CiAJdW5zaWduZWQgaW50IGZyb3plbiA6IDE7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGl0ZXJtczsKLQlzdHJ1Y3QgdXZjX2VudGl0eSAqb3Rlcm07CisJc3RydWN0IGxpc3RfaGVhZCBpdGVybXM7CQkvKiBJbnB1dCB0ZXJtaW5hbHMgKi8KKwlzdHJ1Y3QgdXZjX2VudGl0eSAqb3Rlcm07CQkvKiBPdXRwdXQgdGVybWluYWwgKi8KKwlzdHJ1Y3QgdXZjX2VudGl0eSAqc3Rlcm07CQkvKiBVU0Igc3RyZWFtaW5nIHRlcm1pbmFsICovCiAJc3RydWN0IHV2Y19lbnRpdHkgKnByb2Nlc3Npbmc7CiAJc3RydWN0IHV2Y19lbnRpdHkgKnNlbGVjdG9yOwogCXN0cnVjdCBsaXN0X2hlYWQgZXh0ZW5zaW9uczsKQEAgLTYxNyw2ICs2MjcsNyBAQAogc3RydWN0IHV2Y19kZXZpY2UgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXVuc2lnbmVkIGxvbmcgd2FybmluZ3M7CiAJX191MzIgcXVpcmtzOwogCWludCBpbnRmbnVtOwogCWNoYXIgbmFtZVszMl07CkBAIC02NzksNiArNjkwLDEwIEBACiAjZGVmaW5lIFVWQ19UUkFDRV9TVVNQRU5ECSgxIDw8IDgpCiAjZGVmaW5lIFVWQ19UUkFDRV9TVEFUVVMJKDEgPDwgOSkKIAorI2RlZmluZSBVVkNfV0FSTl9NSU5NQVgJCTAKKyNkZWZpbmUgVVZDX1dBUk5fUFJPQkVfREVGCTEKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfbm9fZHJvcF9wYXJhbTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdXZjX3RyYWNlX3BhcmFtOwogCiAjZGVmaW5lIHV2Y190cmFjZShmbGFnLCBtc2cuLi4pIFwKQEAgLTY4Nyw2ICs3MDIsMTIgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJ1dmN2aWRlbzogIiBtc2cpOyBcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSB1dmNfd2Fybl9vbmNlKGRldiwgd2FybiwgbXNnLi4uKSBcCisJZG8geyBcCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdCh3YXJuLCAmZGV2LT53YXJuaW5ncykpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gInV2Y3ZpZGVvOiAiIG1zZyk7IFwKKwl9IHdoaWxlICgwKQorCiAjZGVmaW5lIHV2Y19wcmludGsobGV2ZWwsIG1zZy4uLikgXAogCXByaW50ayhsZXZlbCAidXZjdmlkZW86ICIgbXNnKQogCkBAIC03MDksNyArNzMwLDggQEAKIGV4dGVybiB2b2lkIHV2Y19kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpOwogCiAvKiBWaWRlbyBidWZmZXJzIHF1ZXVlIG1hbmFnZW1lbnQuICovCi1leHRlcm4gdm9pZCB1dmNfcXVldWVfaW5pdChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSk7CitleHRlcm4gdm9pZCB1dmNfcXVldWVfaW5pdChzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKKwkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpOwogZXh0ZXJuIGludCB1dmNfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKIAkJdW5zaWduZWQgaW50IG5idWZmZXJzLCB1bnNpZ25lZCBpbnQgYnVmbGVuZ3RoKTsKIGV4dGVybiBpbnQgdXZjX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSk7CkBAIC03NDAsMTAgKzc2MiwxMCBAQAogZXh0ZXJuIGludCB1dmNfdmlkZW9fZW5hYmxlKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywgaW50IGVuYWJsZSk7CiBleHRlcm4gaW50IHV2Y19wcm9iZV92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCiAJCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKnByb2JlKTsKK2V4dGVybiBpbnQgdXZjX2NvbW1pdF92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCisJCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwpOwogZXh0ZXJuIGludCB1dmNfcXVlcnlfY3RybChzdHJ1Y3QgdXZjX2RldmljZSAqZGV2LCBfX3U4IHF1ZXJ5LCBfX3U4IHVuaXQsCiAJCV9fdTggaW50Zm51bSwgX191OCBjcywgdm9pZCAqZGF0YSwgX191MTYgc2l6ZSk7Ci1leHRlcm4gaW50IHV2Y19zZXRfdmlkZW9fY3RybChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCi0JCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwsIGludCBwcm9iZSk7CiAKIC8qIFN0YXR1cyAqLwogZXh0ZXJuIGludCB1dmNfc3RhdHVzX2luaXQoc3RydWN0IHV2Y19kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggODQ2NzYzZC4uYzY3NmIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMjgsNyArMjgsNyBAQAogICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogQXV0aG9yOglBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4KKyAqIEF1dGhvcjoJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICogRml4ZXM6CiAgKi8KQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNkZWZpbmUgX19PTERfVklESU9DXyAvKiBUbyBhbGxvdyBmaXhpbmcgb2xkIGNhbGxzKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KQEAgLTMyMCw2ICszMjEsMTkgQEAKIAkJIlByaXZhdGUgcGFja2V0LCBJVlRWIGZvcm1hdCIsCiAJCU5VTEwKIAl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjYW1lcmFfcG93ZXJfbGluZV9mcmVxdWVuY3lbXSA9IHsKKwkJIkRpc2FibGVkIiwKKwkJIjUwIEh6IiwKKwkJIjYwIEh6IiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNhbWVyYV9leHBvc3VyZV9hdXRvW10gPSB7CisJCSJBdXRvIE1vZGUiLAorCQkiTWFudWFsIE1vZGUiLAorCQkiU2h1dHRlciBQcmlvcml0eSBNb2RlIiwKKwkJIkFwZXJ0dXJlIFByaW9yaXR5IE1vZGUiLAorCQlOVUxMCisJfTsKIAogCXN3aXRjaCAoaWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CkBAIC0zNTIsNiArMzY2LDEwIEBACiAJCQlyZXR1cm4gbXBlZ19zdHJlYW1fdHlwZTsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgogCQkJcmV0dXJuIG1wZWdfc3RyZWFtX3ZiaV9mbXQ7CisJCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CisJCQlyZXR1cm4gY2FtZXJhX3Bvd2VyX2xpbmVfZnJlcXVlbmN5OworCQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJCQlyZXR1cm4gY2FtZXJhX2V4cG9zdXJlX2F1dG87CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0zNjMsMTcgKzM4MSwzNyBAQAogewogCXN3aXRjaCAoaWQpIHsKIAkvKiBVU0VSIGNvbnRyb2xzICovCi0JY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJcmV0dXJuICJVc2VyIENvbnRyb2xzIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCXJldHVybiAiVm9sdW1lIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IAlyZXR1cm4gIk11dGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCXJldHVybiAiQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJcmV0dXJuICJCYXNzIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRTogCXJldHVybiAiVHJlYmxlIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJcmV0dXJuICJMb3VkbmVzcyI7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiAJcmV0dXJuICJCcmlnaHRuZXNzIjsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOiAJcmV0dXJuICJDb250cmFzdCI7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJcmV0dXJuICJTYXR1cmF0aW9uIjsKLQljYXNlIFY0TDJfQ0lEX0hVRTogCQlyZXR1cm4gIkh1ZSI7CisJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJCXJldHVybiAiVXNlciBDb250cm9scyI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6IAkJcmV0dXJuICJWb2x1bWUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCQlyZXR1cm4gIkJhbGFuY2UiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzogCQlyZXR1cm4gIkJhc3MiOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOiAJCXJldHVybiAiVHJlYmxlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJCXJldHVybiAiTG91ZG5lc3MiOworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCQlyZXR1cm4gIkJyaWdodG5lc3MiOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IAkJcmV0dXJuICJDb250cmFzdCI7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJCXJldHVybiAiU2F0dXJhdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9IVUU6IAkJCXJldHVybiAiSHVlIjsKKwljYXNlIFY0TDJfQ0lEX0JMQUNLX0xFVkVMOgkJcmV0dXJuICJCbGFjayBMZXZlbCI7CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CXJldHVybiAiV2hpdGUgQmFsYW5jZSwgQXV0b21hdGljIjsKKwljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6CQlyZXR1cm4gIkRvIFdoaXRlIEJhbGFuY2UiOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CQlyZXR1cm4gIlJlZCBCYWxhbmNlIjsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToJCXJldHVybiAiQmx1ZSBCYWxhbmNlIjsKKwljYXNlIFY0TDJfQ0lEX0dBTU1BOgkJCXJldHVybiAiR2FtbWEiOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CQkJcmV0dXJuICJFeHBvc3VyZSI7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoJCQlyZXR1cm4gIkdhaW4sIEF1dG9tYXRpYyI7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgkJCXJldHVybiAiR2FpbiI7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoJCQlyZXR1cm4gIkhvcml6b250YWwgRmxpcCI7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoJCQlyZXR1cm4gIlZlcnRpY2FsIEZsaXAiOworCWNhc2UgVjRMMl9DSURfSENFTlRFUjoJCQlyZXR1cm4gIkhvcml6b250YWwgQ2VudGVyIjsKKwljYXNlIFY0TDJfQ0lEX1ZDRU5URVI6CQkJcmV0dXJuICJWZXJ0aWNhbCBDZW50ZXIiOworCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CXJldHVybiAiUG93ZXIgTGluZSBGcmVxdWVuY3kiOworCWNhc2UgVjRMMl9DSURfSFVFX0FVVE86CQkJcmV0dXJuICJIdWUsIEF1dG9tYXRpYyI7CisJY2FzZSBWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFOiByZXR1cm4gIldoaXRlIEJhbGFuY2UgVGVtcGVyYXR1cmUiOworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgkJcmV0dXJuICJTaGFycG5lc3MiOworCWNhc2UgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTjoJcmV0dXJuICJCYWNrbGlnaHQgQ29tcGVuc2F0aW9uIjsKKwljYXNlIFY0TDJfQ0lEX0NIUk9NQV9BR0M6CQlyZXR1cm4gIkNocm9tYSBBR0MiOworCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgkJcmV0dXJuICJDb2xvciBLaWxsZXIiOwogCiAJLyogTVBFRyBjb250cm9scyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzogCQlyZXR1cm4gIk1QRUcgRW5jb2RlciBDb250cm9scyI7CkBAIC00MTAsNiArNDQ4LDI1IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86IHJldHVybiAiU3RyZWFtIFBFUyBWaWRlbyBJRCI7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOglyZXR1cm4gIlN0cmVhbSBWQkkgRm9ybWF0IjsKIAorCS8qIENBTUVSQSBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgkJcmV0dXJuICJDYW1lcmEgQ29udHJvbHMiOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoJCXJldHVybiAiQXV0byBFeHBvc3VyZSI7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURToJcmV0dXJuICJFeHBvc3VyZSBUaW1lLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOglyZXR1cm4gIkV4cG9zdXJlLCBEeW5hbWljIEZyYW1lcmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CQlyZXR1cm4gIlBhbiwgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfVElMVF9SRUxBVElWRToJCXJldHVybiAiVGlsdCwgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfUEFOX1JFU0VUOgkJcmV0dXJuICJQYW4sIFJlc2V0IjsKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CQlyZXR1cm4gIlRpbHQsIFJlc2V0IjsKKwljYXNlIFY0TDJfQ0lEX1BBTl9BQlNPTFVURToJCXJldHVybiAiUGFuLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9USUxUX0FCU09MVVRFOgkJcmV0dXJuICJUaWx0LCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURToJCXJldHVybiAiRm9jdXMsIEFic29sdXRlIjsKKwljYXNlIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFOgkJcmV0dXJuICJGb2N1cywgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoJCXJldHVybiAiRm9jdXMsIEF1dG9tYXRpYyI7CisJY2FzZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFOgkJcmV0dXJuICJab29tLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgkJcmV0dXJuICJab29tLCBSZWxhdGl2ZSI7CisJY2FzZSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM6CQlyZXR1cm4gIlpvb20sIENvbnRpbnVvdXMiOworCWNhc2UgVjRMMl9DSURfUFJJVkFDWToJCQlyZXR1cm4gIlByaXZhY3kiOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNDI4LDE0ICs0ODUsMjIgQEAKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgorCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCWNhc2UgVjRMMl9DSURfSFVFX0FVVE86CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjoKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFk6CisJY2FzZSBWNEwyX0NJRF9QUklWQUNZOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CiAJCW1pbiA9IDA7CiAJCW1heCA9IHN0ZXAgPSAxOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKQEAgLTQ1MSwxMCArNTE2LDEyIEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgorCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOwogCQlzdGVwID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOgorCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgogCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzoKIAkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTOwogCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOwpAQCAtODAxLDQgKzg2OCwxMTYgQEAKIAlyZXR1cm4gZXJyICE9IC1FTk9NRU0gPyAwIDogZXJyOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2kyY19hdHRhY2gpOworCit2b2lkIHY0bDJfaTJjX3N1YmRldl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wcykKK3sKKwl2NGwyX3N1YmRldl9pbml0KHNkLCBvcHMpOworCS8qIHRoZSBvd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgaTJjX2NsaWVudCdzIGRyaXZlciBvd25lciAqLworCXNkLT5vd25lciA9IGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXI7CisJLyogaTJjX2NsaWVudCBhbmQgdjRsMl9zdWJkZXYgcG9pbnQgdG8gb25lIGFub3RoZXIgKi8KKwl2NGwyX3NldF9zdWJkZXZkYXRhKHNkLCBjbGllbnQpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHNkKTsKKwkvKiBpbml0aWFsaXplIG5hbWUgKi8KKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwgIiVzICVkLSUwNHgiLAorCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksCisJCWNsaWVudC0+YWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19zdWJkZXZfaW5pdCk7CisKKworCisvKiBMb2FkIGFuIGkyYyBzdWItZGV2aWNlLiBJdCBhc3N1bWVzIHRoYXQgaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKQorICAgcmV0dXJucyB0aGUgdjRsMl9kZXZpY2UgYW5kIHRoYXQgaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkKKyAgIHJldHVybnMgdGhlIHY0bDJfc3ViZGV2LiAqLworc3RydWN0IHY0bDJfc3ViZGV2ICp2NGwyX2kyY19uZXdfc3ViZGV2KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IGNoYXIgKmNsaWVudF90eXBlLCB1OCBhZGRyKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gTlVMTDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJQlVHX09OKCFkZXYpOworI2lmZGVmIE1PRFVMRQorCWlmIChtb2R1bGVfbmFtZSkKKwkJcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWUpOworI2VuZGlmCisJLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAorCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJc3RybGNweShpbmZvLnR5cGUsIGNsaWVudF90eXBlLCBzaXplb2YoaW5mby50eXBlKSk7CisJaW5mby5hZGRyID0gYWRkcjsKKworCS8qIENyZWF0ZSB0aGUgaTJjIGNsaWVudCAqLworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwkvKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlIHRoYXQKKwkgICBjLT5kcml2ZXIgaXMgTlVMTCBpZiB0aGUgZHJpdmVyIGlzIHN0aWxsIGJlaW5nIGxvYWRlZC4KKwkgICBXZSBuZWVkIGJldHRlciBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbCBzbyB0aGF0IHdlCisJICAgY2FuIGVhc2lseSB3YWl0IGZvciB0aGUgbG9hZCB0byBmaW5pc2guICovCisJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogTG9jayB0aGUgbW9kdWxlIHNvIHdlIGNhbiBzYWZlbHkgZ2V0IHRoZSB2NGwyX3N1YmRldiBwb2ludGVyICovCisJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkKKwkJcmV0dXJuIE5VTEw7CisJc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHY0bDJfZGV2aWNlIHdoaWNoIGluY3JlYXNlcyB0aGUgbW9kdWxlJ3MKKwkgICB1c2UgY291bnQgYXMgd2VsbC4gKi8KKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KGRldiwgc2QpKQorCQlzZCA9IE5VTEw7CisJLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLworCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7CisJcmV0dXJuIHNkOworCit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfc3ViZGV2KTsKKworLyogUHJvYmUgYW5kIGxvYWQgYW4gaTJjIHN1Yi1kZXZpY2UuIEl0IGFzc3VtZXMgdGhhdCBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpCisgICByZXR1cm5zIHRoZSB2NGwyX2RldmljZSBhbmQgdGhhdCBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KQorICAgcmV0dXJucyB0aGUgdjRsMl9zdWJkZXYuICovCitzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJzKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gTlVMTDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gTlVMTDsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKworCUJVR19PTighZGV2KTsKKyNpZmRlZiBNT0RVTEUKKwlpZiAobW9kdWxlX25hbWUpCisJCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKKyNlbmRpZgorCS8qIFNldHVwIHRoZSBpMmMgYm9hcmQgaW5mbyB3aXRoIHRoZSBkZXZpY2UgdHlwZSBhbmQKKwkgICB0aGUgZGV2aWNlIGFkZHJlc3MuICovCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCXN0cmxjcHkoaW5mby50eXBlLCBjbGllbnRfdHlwZSwgc2l6ZW9mKGluZm8udHlwZSkpOworCisJLyogUHJvYmUgYW5kIGNyZWF0ZSB0aGUgaTJjIGNsaWVudCAqLworCWNsaWVudCA9IGkyY19uZXdfcHJvYmVkX2RldmljZShhZGFwdGVyLCAmaW5mbywgYWRkcnMpOworCS8qIE5vdGU6IGl0IGlzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmUgdGhhdAorCSAgIGMtPmRyaXZlciBpcyBOVUxMIGlmIHRoZSBkcml2ZXIgaXMgc3RpbGwgYmVpbmcgbG9hZGVkLgorCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKKwkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KKwlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQorCQlyZXR1cm4gTlVMTDsKKwlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncworCSAgIHVzZSBjb3VudCBhcyB3ZWxsLiAqLworCWlmICh2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoZGV2LCBzZCkpCisJCXNkID0gTlVMTDsKKwkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCisJbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwlyZXR1cm4gc2Q7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGUxYmQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTAsMCArMSwxMDgyIEBACisvKgorICogaW9jdGwzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBpb2N0bHMuCisgKglTZXBhcmF0ZWQgZnJvbSBmcyBzdHVmZiBieSBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwICBKYWt1YiBKZWxpbmVrICAoamFrdWJAcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiAgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgICAgICAgUGF2ZWwgTWFjaGVrIChwYXZlbEBzdXNlLmN6KQorICogQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgIFBoaWxpcHBlIERlIE11eXRlciAocGhkbUBtYWNxZWwuYmUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgorICogVGhlc2Ugcm91dGluZXMgbWFpbnRhaW4gYXJndW1lbnQgc2l6ZSBjb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0CisgKiBpb2N0bHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2RlZmluZSBfX09MRF9WSURJT0NfIC8qIFRvIGFsbG93IGZpeGluZyBvbGQgY2FsbHMqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0cnVjdCB2aWRlb190dW5lcjMyIHsKKwljb21wYXRfaW50X3QgdHVuZXI7CisJY2hhciBuYW1lWzMyXTsKKwljb21wYXRfdWxvbmdfdCByYW5nZWxvdywgcmFuZ2VoaWdoOworCXUzMiBmbGFnczsJLyogSXQgaXMgcmVhbGx5IHUzMiBpbiB2aWRlb2Rldi5oICovCisJdTE2IG1vZGUsIHNpZ25hbDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fdHVuZXIzMikpIHx8CisJCWdldF91c2VyKGtwLT50dW5lciwgJnVwLT50dW5lcikgfHwKKwkJY29weV9mcm9tX3VzZXIoa3AtPm5hbWUsIHVwLT5uYW1lLCAzMikgfHwKKwkJZ2V0X3VzZXIoa3AtPnJhbmdlbG93LCAmdXAtPnJhbmdlbG93KSB8fAorCQlnZXRfdXNlcihrcC0+cmFuZ2VoaWdoLCAmdXAtPnJhbmdlaGlnaCkgfHwKKwkJZ2V0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKSB8fAorCQlnZXRfdXNlcihrcC0+bW9kZSwgJnVwLT5tb2RlKSB8fAorCQlnZXRfdXNlcihrcC0+c2lnbmFsLCAmdXAtPnNpZ25hbCkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1dF92aWRlb190dW5lcjMyKHN0cnVjdCB2aWRlb190dW5lciAqa3AsIHN0cnVjdCB2aWRlb190dW5lcjMyIF9fdXNlciAqdXApCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb190dW5lcjMyKSkgfHwKKwkJcHV0X3VzZXIoa3AtPnR1bmVyLCAmdXAtPnR1bmVyKSB8fAorCQljb3B5X3RvX3VzZXIodXAtPm5hbWUsIGtwLT5uYW1lLCAzMikgfHwKKwkJcHV0X3VzZXIoa3AtPnJhbmdlbG93LCAmdXAtPnJhbmdlbG93KSB8fAorCQlwdXRfdXNlcihrcC0+cmFuZ2VoaWdoLCAmdXAtPnJhbmdlaGlnaCkgfHwKKwkJcHV0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKSB8fAorCQlwdXRfdXNlcihrcC0+bW9kZSwgJnVwLT5tb2RlKSB8fAorCQlwdXRfdXNlcihrcC0+c2lnbmFsLCAmdXAtPnNpZ25hbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHZpZGVvX2J1ZmZlcjMyIHsKKwljb21wYXRfY2FkZHJfdCBiYXNlOworCWNvbXBhdF9pbnRfdCBoZWlnaHQsIHdpZHRoLCBkZXB0aCwgYnl0ZXNwZXJsaW5lOworfTsKKworc3RhdGljIGludCBnZXRfdmlkZW9fYnVmZmVyMzIoc3RydWN0IHZpZGVvX2J1ZmZlciAqa3AsIHN0cnVjdCB2aWRlb19idWZmZXIzMiBfX3VzZXIgKnVwKQoreworCXUzMiB0bXA7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYnVmZmVyMzIpKSB8fAorCQlnZXRfdXNlcih0bXAsICZ1cC0+YmFzZSkgfHwKKwkJZ2V0X3VzZXIoa3AtPmhlaWdodCwgJnVwLT5oZWlnaHQpIHx8CisJCWdldF91c2VyKGtwLT53aWR0aCwgJnVwLT53aWR0aCkgfHwKKwkJZ2V0X3VzZXIoa3AtPmRlcHRoLCAmdXAtPmRlcHRoKSB8fAorCQlnZXRfdXNlcihrcC0+Ynl0ZXNwZXJsaW5lLCAmdXAtPmJ5dGVzcGVybGluZSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBwaHlzaWNhbCBhZGRyZXNzIHN0b3JlZAorCSAqIGFzIGEgdm9pZCBwb2ludGVyLgorCSAqLworCWtwLT5iYXNlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgdG1wOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X3ZpZGVvX2J1ZmZlcjMyKHN0cnVjdCB2aWRlb19idWZmZXIgKmtwLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyMzIgX191c2VyICp1cCkKK3sKKwl1MzIgdG1wID0gKHUzMikoKHVuc2lnbmVkIGxvbmcpa3AtPmJhc2UpOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19idWZmZXIzMikpIHx8CisJCXB1dF91c2VyKHRtcCwgJnVwLT5iYXNlKSB8fAorCQlwdXRfdXNlcihrcC0+aGVpZ2h0LCAmdXAtPmhlaWdodCkgfHwKKwkJcHV0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKSB8fAorCQlwdXRfdXNlcihrcC0+ZGVwdGgsICZ1cC0+ZGVwdGgpIHx8CisJCXB1dF91c2VyKGtwLT5ieXRlc3BlcmxpbmUsICZ1cC0+Ynl0ZXNwZXJsaW5lKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdmlkZW9fY2xpcDMyIHsKKwlzMzIgeCwgeSwgd2lkdGgsIGhlaWdodDsJLyogSXQncyByZWFsbHkgczMyIGluIHZpZGVvZGV2LmggKi8KKwljb21wYXRfY2FkZHJfdCBuZXh0OworfTsKKworc3RydWN0IHZpZGVvX3dpbmRvdzMyIHsKKwl1MzIgeCwgeSwgd2lkdGgsIGhlaWdodCwgY2hyb21ha2V5LCBmbGFnczsKKwljb21wYXRfY2FkZHJfdCBjbGlwczsKKwljb21wYXRfaW50X3QgY2xpcGNvdW50OworfTsKKworc3RhdGljIGludCBnZXRfdmlkZW9fd2luZG93MzIoc3RydWN0IHZpZGVvX3dpbmRvdyAqa3AsIHN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwKQoreworCXN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqdWNsaXBzOworCXN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqa2NsaXBzOworCWNvbXBhdF9jYWRkcl90IHA7CisJaW50IG5jbGlwczsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3czMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChnZXRfdXNlcihuY2xpcHMsICZ1cC0+Y2xpcGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93MzIpKSB8fAorCSAgICBnZXRfdXNlcihrcC0+eCwgJnVwLT54KSB8fAorCSAgICBnZXRfdXNlcihrcC0+eSwgJnVwLT55KSB8fAorCSAgICBnZXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpIHx8CisJICAgIGdldF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KSB8fAorCSAgICBnZXRfdXNlcihrcC0+Y2hyb21ha2V5LCAmdXAtPmNocm9tYWtleSkgfHwKKwkgICAgZ2V0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKSB8fAorCSAgICBnZXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJbmNsaXBzID0ga3AtPmNsaXBjb3VudDsKKwlrcC0+Y2xpcHMgPSBOVUxMOworCisJaWYgKG5jbGlwcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3VzZXIocCwgJnVwLT5jbGlwcykpCisJCXJldHVybiAtRUZBVUxUOworCXVjbGlwcyA9IGNvbXBhdF9wdHIocCk7CisKKwkvKiBJZiBuY2xpcHMgPCAwLCB0aGVuIGl0IGlzIGEgY2xpcHBpbmcgYml0bWFwIG9mIHNpemUKKwkgICBWSURFT19DTElQTUFQX1NJWkUgKi8KKwlpZiAobmNsaXBzIDwgMCkgeworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWNsaXBzLCBWSURFT19DTElQTUFQX1NJWkUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWtwLT5jbGlwcyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKFZJREVPX0NMSVBNQVBfU0laRSk7CisJCWlmIChjb3B5X2luX3VzZXIoa3AtPmNsaXBzLCB1Y2xpcHMsIFZJREVPX0NMSVBNQVBfU0laRSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogT3RoZXJ3aXNlIGl0IGlzIGFuIGFycmF5IG9mIHZpZGVvX2NsaXAgc3RydWN0cy4gKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWNsaXBzLCBuY2xpcHMgKiBzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlrcC0+Y2xpcHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuY2xpcHMgKiBzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApKTsKKwlrY2xpcHMgPSBrcC0+Y2xpcHM7CisJd2hpbGUgKG5jbGlwcy0tKSB7CisJCWludCBlcnI7CisKKwkJZXJyID0gY29weV9pbl91c2VyKCZrY2xpcHMtPngsICZ1Y2xpcHMtPngsIHNpemVvZihrY2xpcHMtPngpKTsKKwkJZXJyIHw9IGNvcHlfaW5fdXNlcigma2NsaXBzLT55LCAmdWNsaXBzLT55LCBzaXplb2Yoa2NsaXBzLT55KSk7CisJCWVyciB8PSBjb3B5X2luX3VzZXIoJmtjbGlwcy0+d2lkdGgsICZ1Y2xpcHMtPndpZHRoLCBzaXplb2Yoa2NsaXBzLT53aWR0aCkpOworCQllcnIgfD0gY29weV9pbl91c2VyKCZrY2xpcHMtPmhlaWdodCwgJnVjbGlwcy0+aGVpZ2h0LCBzaXplb2Yoa2NsaXBzLT5oZWlnaHQpKTsKKwkJa2NsaXBzLT5uZXh0ID0gTlVMTDsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtRUZBVUxUOworCQlrY2xpcHMrKzsKKwkJdWNsaXBzKys7CisJfQorCXJldHVybiAwOworfQorCisvKiBZb3UgZ2V0IGJhY2sgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNsaXBzLi4uICovCitzdGF0aWMgaW50IHB1dF92aWRlb193aW5kb3czMihzdHJ1Y3QgdmlkZW9fd2luZG93ICprcCwgc3RydWN0IHZpZGVvX3dpbmRvdzMyIF9fdXNlciAqdXApCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3czMikpIHx8CisJCXB1dF91c2VyKGtwLT54LCAmdXAtPngpIHx8CisJCXB1dF91c2VyKGtwLT55LCAmdXAtPnkpIHx8CisJCXB1dF91c2VyKGtwLT53aWR0aCwgJnVwLT53aWR0aCkgfHwKKwkJcHV0X3VzZXIoa3AtPmhlaWdodCwgJnVwLT5oZWlnaHQpIHx8CisJCXB1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAorCQlwdXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8CisJCXB1dF91c2VyKGtwLT5jbGlwY291bnQsICZ1cC0+Y2xpcGNvdW50KSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdmlkZW9fY29kZTMyIHsKKwljaGFyCQlsb2Fkd2hhdFsxNl07CS8qIG5hbWUgb3IgdGFnIG9mIGZpbGUgYmVpbmcgcGFzc2VkICovCisJY29tcGF0X2ludF90CWRhdGFzaXplOworCXVuc2lnbmVkIGNoYXIJKmRhdGE7Cit9OworCitzdGF0aWMgaW50IGdldF9taWNyb2NvZGUzMihzdHJ1Y3QgdmlkZW9fY29kZSAqa3AsIHN0cnVjdCB2aWRlb19jb2RlMzIgX191c2VyICp1cCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY29kZTMyKSkgfHwKKwkJY29weV9mcm9tX3VzZXIoa3AtPmxvYWR3aGF0LCB1cC0+bG9hZHdoYXQsIHNpemVvZih1cC0+bG9hZHdoYXQpKSB8fAorCQlnZXRfdXNlcihrcC0+ZGF0YXNpemUsICZ1cC0+ZGF0YXNpemUpIHx8CisJCWNvcHlfZnJvbV91c2VyKGtwLT5kYXRhLCB1cC0+ZGF0YSwgdXAtPmRhdGFzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFZJRElPQ0dUVU5FUjMyCQlfSU9XUigndicsIDQsIHN0cnVjdCB2aWRlb190dW5lcjMyKQorI2RlZmluZSBWSURJT0NTVFVORVIzMgkJX0lPVygndicsIDUsIHN0cnVjdCB2aWRlb190dW5lcjMyKQorI2RlZmluZSBWSURJT0NHV0lOMzIJCV9JT1IoJ3YnLCA5LCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCisjZGVmaW5lIFZJRElPQ1NXSU4zMgkJX0lPVygndicsIDEwLCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCisjZGVmaW5lIFZJRElPQ0dGQlVGMzIJCV9JT1IoJ3YnLCAxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyKQorI2RlZmluZSBWSURJT0NTRkJVRjMyCQlfSU9XKCd2JywgMTIsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKKyNkZWZpbmUgVklESU9DR0ZSRVEzMgkJX0lPUigndicsIDE0LCB1MzIpCisjZGVmaW5lIFZJRElPQ1NGUkVRMzIJCV9JT1coJ3YnLCAxNSwgdTMyKQorI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFMzIJX0lPVygndicsIDI3LCBzdHJ1Y3QgdmlkZW9fY29kZTMyKQorCisjZGVmaW5lIFZJRElPQ0NBUFRVUkUzMgkJX0lPVygndicsIDgsIHMzMikKKyNkZWZpbmUgVklESU9DU1lOQzMyCQlfSU9XKCd2JywgMTgsIHMzMikKKyNkZWZpbmUgVklESU9DU1dSSVRFTU9ERTMyCV9JT1coJ3YnLCAyNSwgczMyKQorCisjZW5kaWYKKworc3RhdGljIGludCBuYXRpdmVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisKKwlpZiAoZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwpCisJCXJldCA9IGZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwllbHNlIGlmIChmaWxlLT5mX29wLT5pb2N0bCkgeworCQlsb2NrX2tlcm5lbCgpOworCQlyZXQgPSBmaWxlLT5mX29wLT5pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0cnVjdCB2NGwyX2NsaXAzMiB7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgYzsKKwljb21wYXRfY2FkZHJfdCAJCW5leHQ7Cit9OworCitzdHJ1Y3QgdjRsMl93aW5kb3czMiB7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgdzsKKwllbnVtIHY0bDJfZmllbGQgIAlmaWVsZDsKKwlfX3UzMgkJCWNocm9tYWtleTsKKwljb21wYXRfY2FkZHJfdAkJY2xpcHM7IC8qIGFjdHVhbGx5IHN0cnVjdCB2NGwyX2NsaXAzMiAqICovCisJX191MzIJCQljbGlwY291bnQ7CisJY29tcGF0X2NhZGRyX3QJCWJpdG1hcDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3Y0bDJfd2luZG93MzIoc3RydWN0IHY0bDJfd2luZG93ICprcCwgc3RydWN0IHY0bDJfd2luZG93MzIgX191c2VyICp1cCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl93aW5kb3czMikpIHx8CisJCWNvcHlfZnJvbV91c2VyKCZrcC0+dywgJnVwLT53LCBzaXplb2YodXAtPncpKSB8fAorCQlnZXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8CisJCWdldF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAorCQlnZXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoa3AtPmNsaXBjb3VudCA+IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChrcC0+Y2xpcGNvdW50KSB7CisJCXN0cnVjdCB2NGwyX2NsaXAzMiBfX3VzZXIgKnVjbGlwczsKKwkJc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKmtjbGlwczsKKwkJaW50IG4gPSBrcC0+Y2xpcGNvdW50OworCQljb21wYXRfY2FkZHJfdCBwOworCisJCWlmIChnZXRfdXNlcihwLCAmdXAtPmNsaXBzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl1Y2xpcHMgPSBjb21wYXRfcHRyKHApOworCQlrY2xpcHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuICogc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApKTsKKwkJa3AtPmNsaXBzID0ga2NsaXBzOworCQl3aGlsZSAoLS1uID49IDApIHsKKwkJCWlmIChjb3B5X2luX3VzZXIoJmtjbGlwcy0+YywgJnVjbGlwcy0+Yywgc2l6ZW9mKHVjbGlwcy0+YykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHB1dF91c2VyKG4gPyBrY2xpcHMgKyAxIDogTlVMTCwgJmtjbGlwcy0+bmV4dCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl1Y2xpcHMgKz0gMTsKKwkJCWtjbGlwcyArPSAxOworCQl9CisJfSBlbHNlCisJCWtwLT5jbGlwcyA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X3Y0bDJfd2luZG93MzIoc3RydWN0IHY0bDJfd2luZG93ICprcCwgc3RydWN0IHY0bDJfd2luZG93MzIgX191c2VyICp1cCkKK3sKKwlpZiAoY29weV90b191c2VyKCZ1cC0+dywgJmtwLT53LCBzaXplb2YodXAtPncpKSB8fAorCQlwdXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8CisJCXB1dF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAorCQlwdXRfdXNlcihrcC0+Y2xpcGNvdW50LCAmdXAtPmNsaXBjb3VudCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3Y0bDJfcGl4X2Zvcm1hdChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBfX3VzZXIgKnVwKQoreworCWlmIChjb3B5X2Zyb21fdXNlcihrcCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl9waXhfZm9ybWF0KHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IF9fdXNlciAqdXApCit7CisJaWYgKGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfdjRsMl92YmlfZm9ybWF0KHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IF9fdXNlciAqdXApCit7CisJaWYgKGNvcHlfZnJvbV91c2VyKGtwLCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1dF92NGwyX3ZiaV9mb3JtYXQoc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqa3AsIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgX191c2VyICp1cCkKK3sKKwlpZiAoY29weV90b191c2VyKHVwLCBrcCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF92NGwyX3NsaWNlZF92YmlfZm9ybWF0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgX191c2VyICp1cCkKK3sKKwlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1dF92NGwyX3NsaWNlZF92YmlfZm9ybWF0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgX191c2VyICp1cCkKK3sKKwlpZiAoY29weV90b191c2VyKHVwLCBrcCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9mb3JtYXQzMiB7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CXBpeDsKKwkJc3RydWN0IHY0bDJfd2luZG93MzIJd2luOworCQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0CXZiaTsKKwkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQJc2xpY2VkOworCQlfX3U4CXJhd19kYXRhWzIwMF07ICAgICAgICAvKiB1c2VyLWRlZmluZWQgKi8KKwl9IGZtdDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3Y0bDJfZm9ybWF0MzIoc3RydWN0IHY0bDJfZm9ybWF0ICprcCwgc3RydWN0IHY0bDJfZm9ybWF0MzIgX191c2VyICp1cCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQzMikpIHx8CisJCQlnZXRfdXNlcihrcC0+dHlwZSwgJnVwLT50eXBlKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXN3aXRjaCAoa3AtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgorCQlyZXR1cm4gZ2V0X3Y0bDJfcGl4X2Zvcm1hdCgma3AtPmZtdC5waXgsICZ1cC0+Zm10LnBpeCk7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZOgorCQlyZXR1cm4gZ2V0X3Y0bDJfd2luZG93MzIoJmtwLT5mbXQud2luLCAmdXAtPmZtdC53aW4pOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVDoKKwkJcmV0dXJuIGdldF92NGwyX3ZiaV9mb3JtYXQoJmtwLT5mbXQudmJpLCAmdXAtPmZtdC52YmkpOworCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6CisJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUOgorCQlyZXR1cm4gZ2V0X3Y0bDJfc2xpY2VkX3ZiaV9mb3JtYXQoJmtwLT5mbXQuc2xpY2VkLCAmdXAtPmZtdC5zbGljZWQpOworCWNhc2UgVjRMMl9CVUZfVFlQRV9QUklWQVRFOgorCQlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoa3AtPmZtdC5yYXdfZGF0YSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCWNhc2UgMDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGF0X2lvY3RsMzI6IHVuZXhwZWN0ZWQgVklESU9DX0ZNVCB0eXBlICVkXG4iLAorCQkJCQkJCQlrcC0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBwdXRfdjRsMl9mb3JtYXQzMihzdHJ1Y3QgdjRsMl9mb3JtYXQgKmtwLCBzdHJ1Y3QgdjRsMl9mb3JtYXQzMiBfX3VzZXIgKnVwKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQzMikpIHx8CisJCXB1dF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlzd2l0Y2ggKGtwLT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKKwkJcmV0dXJuIHB1dF92NGwyX3BpeF9mb3JtYXQoJmtwLT5mbXQucGl4LCAmdXAtPmZtdC5waXgpOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWToKKwkJcmV0dXJuIHB1dF92NGwyX3dpbmRvdzMyKCZrcC0+Zm10LndpbiwgJnVwLT5mbXQud2luKTsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ6CisJCXJldHVybiBwdXRfdjRsMl92YmlfZm9ybWF0KCZrcC0+Zm10LnZiaSwgJnVwLT5mbXQudmJpKTsKKwljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgorCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVDoKKwkJcmV0dXJuIHB1dF92NGwyX3NsaWNlZF92YmlfZm9ybWF0KCZrcC0+Zm10LnNsaWNlZCwgJnVwLT5mbXQuc2xpY2VkKTsKKwljYXNlIFY0TDJfQlVGX1RZUEVfUFJJVkFURToKKwkJaWYgKGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZih1cC0+Zm10LnJhd19kYXRhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJY2FzZSAwOgorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJjb21wYXRfaW9jdGwzMjogdW5leHBlY3RlZCBWSURJT0NfRk1UIHR5cGUgJWRcbiIsCisJCQkJCQkJCWtwLT50eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdHJ1Y3QgdjRsMl9zdGFuZGFyZDMyIHsKKwlfX3UzMgkJICAgICBpbmRleDsKKwlfX3UzMgkJICAgICBpZFsyXTsgLyogX191NjQgd291bGQgZ2V0IHRoZSBhbGlnbm1lbnQgd3JvbmcgKi8KKwlfX3U4CQkgICAgIG5hbWVbMjRdOworCXN0cnVjdCB2NGwyX2ZyYWN0ICAgIGZyYW1lcGVyaW9kOyAvKiBGcmFtZXMsIG5vdCBmaWVsZHMgKi8KKwlfX3UzMgkJICAgICBmcmFtZWxpbmVzOworCV9fdTMyCQkgICAgIHJlc2VydmVkWzRdOworfTsKKworc3RhdGljIGludCBnZXRfdjRsMl9zdGFuZGFyZDMyKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMiBfX3VzZXIgKnVwKQoreworCS8qIG90aGVyIGZpZWxkcyBhcmUgbm90IHNldCBieSB0aGUgdXNlciwgbm9yIHVzZWQgYnkgdGhlIGRyaXZlciAqLworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkMzIpKSB8fAorCQlnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdjRsMl9zdGFuZGFyZDMyKHN0cnVjdCB2NGwyX3N0YW5kYXJkICprcCwgc3RydWN0IHY0bDJfc3RhbmRhcmQzMiBfX3VzZXIgKnVwKQoreworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZDMyKSkgfHwKKwkJcHV0X3VzZXIoa3AtPmluZGV4LCAmdXAtPmluZGV4KSB8fAorCQljb3B5X3RvX3VzZXIodXAtPmlkLCAma3AtPmlkLCBzaXplb2YoX191NjQpKSB8fAorCQljb3B5X3RvX3VzZXIodXAtPm5hbWUsIGtwLT5uYW1lLCAyNCkgfHwKKwkJY29weV90b191c2VyKCZ1cC0+ZnJhbWVwZXJpb2QsICZrcC0+ZnJhbWVwZXJpb2QsIHNpemVvZihrcC0+ZnJhbWVwZXJpb2QpKSB8fAorCQlwdXRfdXNlcihrcC0+ZnJhbWVsaW5lcywgJnVwLT5mcmFtZWxpbmVzKSB8fAorCQljb3B5X3RvX3VzZXIodXAtPnJlc2VydmVkLCBrcC0+cmVzZXJ2ZWQsIDQgKiBzaXplb2YoX191MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9idWZmZXIzMiB7CisJX191MzIJCQlpbmRleDsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICB0eXBlOworCV9fdTMyCQkJYnl0ZXN1c2VkOworCV9fdTMyCQkJZmxhZ3M7CisJZW51bSB2NGwyX2ZpZWxkCQlmaWVsZDsKKwlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwJdGltZXN0YW1wOworCXN0cnVjdCB2NGwyX3RpbWVjb2RlCXRpbWVjb2RlOworCV9fdTMyCQkJc2VxdWVuY2U7CisKKwkvKiBtZW1vcnkgbG9jYXRpb24gKi8KKwllbnVtIHY0bDJfbWVtb3J5ICAgICAgICBtZW1vcnk7CisJdW5pb24geworCQlfX3UzMiAgICAgICAgICAgb2Zmc2V0OworCQljb21wYXRfbG9uZ190ICAgdXNlcnB0cjsKKwl9IG07CisJX191MzIJCQlsZW5ndGg7CisJX191MzIJCQlpbnB1dDsKKwlfX3UzMgkJCXJlc2VydmVkOworfTsKKworc3RhdGljIGludCBnZXRfdjRsMl9idWZmZXIzMihzdHJ1Y3QgdjRsMl9idWZmZXIgKmtwLCBzdHJ1Y3QgdjRsMl9idWZmZXIzMiBfX3VzZXIgKnVwKQoreworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfYnVmZmVyMzIpKSB8fAorCQlnZXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpIHx8CisJCWdldF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpIHx8CisJCWdldF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykgfHwKKwkJZ2V0X3VzZXIoa3AtPm1lbW9yeSwgJnVwLT5tZW1vcnkpIHx8CisJCWdldF91c2VyKGtwLT5pbnB1dCwgJnVwLT5pbnB1dCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlzd2l0Y2ggKGtwLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWJyZWFrOworCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKKwkJeworCQljb21wYXRfbG9uZ190IHRtcDsKKworCQlpZiAoZ2V0X3VzZXIoa3AtPmxlbmd0aCwgJnVwLT5sZW5ndGgpIHx8CisJCSAgICBnZXRfdXNlcih0bXAsICZ1cC0+bS51c2VycHRyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWtwLT5tLnVzZXJwdHIgPSAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKHRtcCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9PVkVSTEFZOgorCQlpZiAoZ2V0X3VzZXIoa3AtPm0ub2Zmc2V0LCAmdXAtPm0ub2Zmc2V0KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X3Y0bDJfYnVmZmVyMzIoc3RydWN0IHY0bDJfYnVmZmVyICprcCwgc3RydWN0IHY0bDJfYnVmZmVyMzIgX191c2VyICp1cCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfYnVmZmVyMzIpKSB8fAorCQlwdXRfdXNlcihrcC0+aW5kZXgsICZ1cC0+aW5kZXgpIHx8CisJCXB1dF91c2VyKGtwLT50eXBlLCAmdXAtPnR5cGUpIHx8CisJCXB1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykgfHwKKwkJcHV0X3VzZXIoa3AtPm1lbW9yeSwgJnVwLT5tZW1vcnkpIHx8CisJCXB1dF91c2VyKGtwLT5pbnB1dCwgJnVwLT5pbnB1dCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlzd2l0Y2ggKGtwLT5tZW1vcnkpIHsKKwljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWlmIChwdXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCkgfHwKKwkJCXB1dF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgorCQlpZiAocHV0X3VzZXIoa3AtPmxlbmd0aCwgJnVwLT5sZW5ndGgpIHx8CisJCQlwdXRfdXNlcihrcC0+bS51c2VycHRyLCAmdXAtPm0udXNlcnB0cikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01FTU9SWV9PVkVSTEFZOgorCQlpZiAocHV0X3VzZXIoa3AtPm0ub2Zmc2V0LCAmdXAtPm0ub2Zmc2V0KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisJaWYgKHB1dF91c2VyKGtwLT5ieXRlc3VzZWQsICZ1cC0+Ynl0ZXN1c2VkKSB8fAorCQlwdXRfdXNlcihrcC0+ZmllbGQsICZ1cC0+ZmllbGQpIHx8CisJCXB1dF91c2VyKGtwLT50aW1lc3RhbXAudHZfc2VjLCAmdXAtPnRpbWVzdGFtcC50dl9zZWMpIHx8CisJCXB1dF91c2VyKGtwLT50aW1lc3RhbXAudHZfdXNlYywgJnVwLT50aW1lc3RhbXAudHZfdXNlYykgfHwKKwkJY29weV90b191c2VyKCZ1cC0+dGltZWNvZGUsICZrcC0+dGltZWNvZGUsIHNpemVvZihzdHJ1Y3QgdjRsMl90aW1lY29kZSkpIHx8CisJCXB1dF91c2VyKGtwLT5zZXF1ZW5jZSwgJnVwLT5zZXF1ZW5jZSkgfHwKKwkJcHV0X3VzZXIoa3AtPnJlc2VydmVkLCAmdXAtPnJlc2VydmVkKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyIHsKKwlfX3UzMgkJCWNhcGFiaWxpdHk7CisJX191MzIJCQlmbGFnczsKKwljb21wYXRfY2FkZHJfdCAJCWJhc2U7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAlmbXQ7Cit9OworCitzdGF0aWMgaW50IGdldF92NGwyX2ZyYW1lYnVmZmVyMzIoc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmtwLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyIF9fdXNlciAqdXApCit7CisJdTMyIHRtcDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyMzIpKSB8fAorCQlnZXRfdXNlcih0bXAsICZ1cC0+YmFzZSkgfHwKKwkJZ2V0X3VzZXIoa3AtPmNhcGFiaWxpdHksICZ1cC0+Y2FwYWJpbGl0eSkgfHwKKwkJZ2V0X3VzZXIoa3AtPmZsYWdzLCAmdXAtPmZsYWdzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCWtwLT5iYXNlID0gY29tcGF0X3B0cih0bXApOworCWdldF92NGwyX3BpeF9mb3JtYXQoJmtwLT5mbXQsICZ1cC0+Zm10KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdjRsMl9mcmFtZWJ1ZmZlcjMyKHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICprcCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMiBfX3VzZXIgKnVwKQoreworCXUzMiB0bXAgPSAodTMyKSgodW5zaWduZWQgbG9uZylrcC0+YmFzZSk7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMikpIHx8CisJCXB1dF91c2VyKHRtcCwgJnVwLT5iYXNlKSB8fAorCQlwdXRfdXNlcihrcC0+Y2FwYWJpbGl0eSwgJnVwLT5jYXBhYmlsaXR5KSB8fAorCQlwdXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJcHV0X3Y0bDJfcGl4X2Zvcm1hdCgma3AtPmZtdCwgJnVwLT5mbXQpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdjRsMl9pbnB1dDMyIHsKKwlfX3UzMgkgICAgIGluZGV4OwkJLyogIFdoaWNoIGlucHV0ICovCisJX191OAkgICAgIG5hbWVbMzJdOwkJLyogIExhYmVsICovCisJX191MzIJICAgICB0eXBlOwkJLyogIFR5cGUgb2YgaW5wdXQgKi8KKwlfX3UzMgkgICAgIGF1ZGlvc2V0OwkJLyogIEFzc29jaWF0ZWQgYXVkaW9zIChiaXRmaWVsZCkgKi8KKwlfX3UzMiAgICAgICAgdHVuZXI7ICAgICAgICAgICAgIC8qICBBc3NvY2lhdGVkIHR1bmVyICovCisJdjRsMl9zdGRfaWQgIHN0ZDsKKwlfX3UzMgkgICAgIHN0YXR1czsKKwlfX3UzMgkgICAgIHJlc2VydmVkWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFRoZSA2NC1iaXQgdjRsMl9pbnB1dCBzdHJ1Y3QgaGFzIGV4dHJhIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LgorICAgT3RoZXJ3aXNlIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgMzItYml0IHZlcnNpb24uICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfdjRsMl9pbnB1dDMyKHN0cnVjdCB2NGwyX2lucHV0ICprcCwgc3RydWN0IHY0bDJfaW5wdXQzMiBfX3VzZXIgKnVwKQoreworCWlmIChjb3B5X2Zyb21fdXNlcihrcCwgdXAsIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dDMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdXRfdjRsMl9pbnB1dDMyKHN0cnVjdCB2NGwyX2lucHV0ICprcCwgc3RydWN0IHY0bDJfaW5wdXQzMiBfX3VzZXIgKnVwKQoreworCWlmIChjb3B5X3RvX3VzZXIodXAsIGtwLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIgeworICAgICAgIF9fdTMyIGN0cmxfY2xhc3M7CisgICAgICAgX191MzIgY291bnQ7CisgICAgICAgX191MzIgZXJyb3JfaWR4OworICAgICAgIF9fdTMyIHJlc2VydmVkWzJdOworICAgICAgIGNvbXBhdF9jYWRkcl90IGNvbnRyb2xzOyAvKiBhY3R1YWxseSBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbDMyICogKi8KK307CisKK3N0YXRpYyBpbnQgZ2V0X3Y0bDJfZXh0X2NvbnRyb2xzMzIoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICprcCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIgX191c2VyICp1cCkKK3sKKwlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBfX3VzZXIgKnVjb250cm9sczsKKwlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBfX3VzZXIgKmtjb250cm9sczsKKwlpbnQgbjsKKwljb21wYXRfY2FkZHJfdCBwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIpKSB8fAorCQlnZXRfdXNlcihrcC0+Y3RybF9jbGFzcywgJnVwLT5jdHJsX2NsYXNzKSB8fAorCQlnZXRfdXNlcihrcC0+Y291bnQsICZ1cC0+Y291bnQpIHx8CisJCWdldF91c2VyKGtwLT5lcnJvcl9pZHgsICZ1cC0+ZXJyb3JfaWR4KSB8fAorCQljb3B5X2Zyb21fdXNlcihrcC0+cmVzZXJ2ZWQsIHVwLT5yZXNlcnZlZCwgc2l6ZW9mKGtwLT5yZXNlcnZlZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJbiA9IGtwLT5jb3VudDsKKwlpZiAobiA9PSAwKSB7CisJCWtwLT5jb250cm9scyA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKwlpZiAoZ2V0X3VzZXIocCwgJnVwLT5jb250cm9scykpCisJCXJldHVybiAtRUZBVUxUOworCXVjb250cm9scyA9IGNvbXBhdF9wdHIocCk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVjb250cm9scywgbiAqIHNpemVvZihzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrY29udHJvbHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuICogc2l6ZW9mKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sKSk7CisJa3AtPmNvbnRyb2xzID0ga2NvbnRyb2xzOworCXdoaWxlICgtLW4gPj0gMCkgeworCQlpZiAoY29weV9pbl91c2VyKCZrY29udHJvbHMtPmlkLCAmdWNvbnRyb2xzLT5pZCwgc2l6ZW9mKF9fdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfaW5fdXNlcigma2NvbnRyb2xzLT5yZXNlcnZlZDIsICZ1Y29udHJvbHMtPnJlc2VydmVkMiwgc2l6ZW9mKHVjb250cm9scy0+cmVzZXJ2ZWQyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJLyogTm90ZTogaWYgdGhlIHZvaWQgKiBwYXJ0IG9mIHRoZSB1bmlvbiBldmVyIGJlY29tZXMgcmVsZXZhbnQKKwkJICAgdGhlbiB3ZSBuZWVkIHRvIGtub3cgdGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgaW4gb3JkZXIgdG8gZG8KKwkJICAgdGhlIHJpZ2h0IHRoaW5nIGhlcmUuIEx1Y2tpbHksIHRoYXQgaXMgbm90IHlldCBhbiBpc3N1ZS4gKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigma2NvbnRyb2xzLT52YWx1ZSwgJnVjb250cm9scy0+dmFsdWUsIHNpemVvZih1Y29udHJvbHMtPnZhbHVlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdWNvbnRyb2xzKys7CisJCWtjb250cm9scysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfdjRsMl9leHRfY29udHJvbHMzMihzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmtwLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMzMiBfX3VzZXIgKnVwKQoreworCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sIF9fdXNlciAqdWNvbnRyb2xzOworCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sIF9fdXNlciAqa2NvbnRyb2xzID0ga3AtPmNvbnRyb2xzOworCWludCBuID0ga3AtPmNvdW50OworCWNvbXBhdF9jYWRkcl90IHA7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIpKSB8fAorCQlwdXRfdXNlcihrcC0+Y3RybF9jbGFzcywgJnVwLT5jdHJsX2NsYXNzKSB8fAorCQlwdXRfdXNlcihrcC0+Y291bnQsICZ1cC0+Y291bnQpIHx8CisJCXB1dF91c2VyKGtwLT5lcnJvcl9pZHgsICZ1cC0+ZXJyb3JfaWR4KSB8fAorCQljb3B5X3RvX3VzZXIodXAtPnJlc2VydmVkLCBrcC0+cmVzZXJ2ZWQsIHNpemVvZih1cC0+cmVzZXJ2ZWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCWlmICgha3AtPmNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChnZXRfdXNlcihwLCAmdXAtPmNvbnRyb2xzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJdWNvbnRyb2xzID0gY29tcGF0X3B0cihwKTsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVjb250cm9scywgbiAqIHNpemVvZihzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXdoaWxlICgtLW4gPj0gMCkgeworCQlpZiAoY29weV9pbl91c2VyKCZ1Y29udHJvbHMtPmlkLCAma2NvbnRyb2xzLT5pZCwgc2l6ZW9mKF9fdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfaW5fdXNlcigmdWNvbnRyb2xzLT5yZXNlcnZlZDIsICZrY29udHJvbHMtPnJlc2VydmVkMiwKKwkJCQkJc2l6ZW9mKHVjb250cm9scy0+cmVzZXJ2ZWQyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJLyogTm90ZTogaWYgdGhlIHZvaWQgKiBwYXJ0IG9mIHRoZSB1bmlvbiBldmVyIGJlY29tZXMgcmVsZXZhbnQKKwkJICAgdGhlbiB3ZSBuZWVkIHRvIGtub3cgdGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgaW4gb3JkZXIgdG8gZG8KKwkJICAgdGhlIHJpZ2h0IHRoaW5nIGhlcmUuIEx1Y2tpbHksIHRoYXQgaXMgbm90IHlldCBhbiBpc3N1ZS4gKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmdWNvbnRyb2xzLT52YWx1ZSwgJmtjb250cm9scy0+dmFsdWUsIHNpemVvZih1Y29udHJvbHMtPnZhbHVlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdWNvbnRyb2xzKys7CisJCWtjb250cm9scysrOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBWSURJT0NfR19GTVQzMgkJX0lPV1IoJ1YnLCAgNCwgc3RydWN0IHY0bDJfZm9ybWF0MzIpCisjZGVmaW5lIFZJRElPQ19TX0ZNVDMyCQlfSU9XUignVicsICA1LCBzdHJ1Y3QgdjRsMl9mb3JtYXQzMikKKyNkZWZpbmUgVklESU9DX1FVRVJZQlVGMzIJX0lPV1IoJ1YnLCAgOSwgc3RydWN0IHY0bDJfYnVmZmVyMzIpCisjZGVmaW5lIFZJRElPQ19HX0ZCVUYzMgkJX0lPUiAoJ1YnLCAxMCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIzMikKKyNkZWZpbmUgVklESU9DX1NfRkJVRjMyCQlfSU9XICgnVicsIDExLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcjMyKQorI2RlZmluZSBWSURJT0NfUUJVRjMyCQlfSU9XUignVicsIDE1LCBzdHJ1Y3QgdjRsMl9idWZmZXIzMikKKyNkZWZpbmUgVklESU9DX0RRQlVGMzIJCV9JT1dSKCdWJywgMTcsIHN0cnVjdCB2NGwyX2J1ZmZlcjMyKQorI2RlZmluZSBWSURJT0NfRU5VTVNURDMyCV9JT1dSKCdWJywgMjUsIHN0cnVjdCB2NGwyX3N0YW5kYXJkMzIpCisjZGVmaW5lIFZJRElPQ19FTlVNSU5QVVQzMglfSU9XUignVicsIDI2LCBzdHJ1Y3QgdjRsMl9pbnB1dDMyKQorI2RlZmluZSBWSURJT0NfVFJZX0ZNVDMyICAgICAgCV9JT1dSKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQorI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMzMiAgICBfSU9XUignVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMzMikKKyNkZWZpbmUgVklESU9DX1NfRVhUX0NUUkxTMzIgICAgX0lPV1IoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIpCisjZGVmaW5lIFZJRElPQ19UUllfRVhUX0NUUkxTMzIgIF9JT1dSKCdWJywgNzMsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sczMyKQorCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZMzIJX0lPVyAoJ1YnLCAxNCwgczMyKQorI2lmZGVmIF9fT0xEX1ZJRElPQ18KKyNkZWZpbmUgVklESU9DX09WRVJMQVkzMl9PTEQJX0lPV1IoJ1YnLCAxNCwgczMyKQorI2VuZGlmCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PTjMyCV9JT1cgKCdWJywgMTgsIHMzMikKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRjMyCV9JT1cgKCdWJywgMTksIHMzMikKKyNkZWZpbmUgVklESU9DX0dfSU5QVVQzMglfSU9SICgnVicsIDM4LCBzMzIpCisjZGVmaW5lIFZJRElPQ19TX0lOUFVUMzIJX0lPV1IoJ1YnLCAzOSwgczMyKQorI2RlZmluZSBWSURJT0NfR19PVVRQVVQzMglfSU9SICgnVicsIDQ2LCBzMzIpCisjZGVmaW5lIFZJRElPQ19TX09VVFBVVDMyCV9JT1dSKCdWJywgNDcsIHMzMikKKworc3RhdGljIGludCBkb192aWRlb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5pb24geworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgdnQ7CisJCXN0cnVjdCB2aWRlb19idWZmZXIgdmI7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7CisJCXN0cnVjdCB2aWRlb19jb2RlIHZjOworCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdmE7CisjZW5kaWYKKwkJc3RydWN0IHY0bDJfZm9ybWF0IHYyZjsKKwkJc3RydWN0IHY0bDJfYnVmZmVyIHYyYjsKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgdjJmYjsKKwkJc3RydWN0IHY0bDJfaW5wdXQgdjJpOworCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCB2MnM7CisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB2MmVjczsKKwkJdW5zaWduZWQgbG9uZyB2eDsKKwkJaW50IHZpOworCX0ga2FyZzsKKwl2b2lkIF9fdXNlciAqdXAgPSBjb21wYXRfcHRyKGFyZyk7CisJaW50IGNvbXBhdGlibGVfYXJnID0gMTsKKwlpbnQgZXJyID0gMDsKKworCS8qIEZpcnN0LCBjb252ZXJ0IHRoZSBjb21tYW5kLiAqLworCXN3aXRjaCAoY21kKSB7CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJY2FzZSBWSURJT0NHVFVORVIzMjogY21kID0gVklESU9DR1RVTkVSOyBicmVhazsKKwljYXNlIFZJRElPQ1NUVU5FUjMyOiBjbWQgPSBWSURJT0NTVFVORVI7IGJyZWFrOworCWNhc2UgVklESU9DR1dJTjMyOiBjbWQgPSBWSURJT0NHV0lOOyBicmVhazsKKwljYXNlIFZJRElPQ1NXSU4zMjogY21kID0gVklESU9DU1dJTjsgYnJlYWs7CisJY2FzZSBWSURJT0NHRkJVRjMyOiBjbWQgPSBWSURJT0NHRkJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NTRkJVRjMyOiBjbWQgPSBWSURJT0NTRkJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NHRlJFUTMyOiBjbWQgPSBWSURJT0NHRlJFUTsgYnJlYWs7CisJY2FzZSBWSURJT0NTRlJFUTMyOiBjbWQgPSBWSURJT0NTRlJFUTsgYnJlYWs7CisJY2FzZSBWSURJT0NTTUlDUk9DT0RFMzI6IGNtZCA9IFZJRElPQ1NNSUNST0NPREU7IGJyZWFrOworI2VuZGlmCisJY2FzZSBWSURJT0NfR19GTVQzMjogY21kID0gVklESU9DX0dfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19TX0ZNVDMyOiBjbWQgPSBWSURJT0NfU19GTVQ7IGJyZWFrOworCWNhc2UgVklESU9DX1FVRVJZQlVGMzI6IGNtZCA9IFZJRElPQ19RVUVSWUJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfR19GQlVGMzI6IGNtZCA9IFZJRElPQ19HX0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX1NfRkJVRjMyOiBjbWQgPSBWSURJT0NfU19GQlVGOyBicmVhazsKKwljYXNlIFZJRElPQ19RQlVGMzI6IGNtZCA9IFZJRElPQ19RQlVGOyBicmVhazsKKwljYXNlIFZJRElPQ19EUUJVRjMyOiBjbWQgPSBWSURJT0NfRFFCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX0VOVU1TVEQzMjogY21kID0gVklESU9DX0VOVU1TVEQ7IGJyZWFrOworCWNhc2UgVklESU9DX0VOVU1JTlBVVDMyOiBjbWQgPSBWSURJT0NfRU5VTUlOUFVUOyBicmVhazsKKwljYXNlIFZJRElPQ19UUllfRk1UMzI6IGNtZCA9IFZJRElPQ19UUllfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzMyOiBjbWQgPSBWSURJT0NfR19FWFRfQ1RSTFM7IGJyZWFrOworCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTMzI6IGNtZCA9IFZJRElPQ19TX0VYVF9DVFJMUzsgYnJlYWs7CisJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzMyOiBjbWQgPSBWSURJT0NfVFJZX0VYVF9DVFJMUzsgYnJlYWs7CisJY2FzZSBWSURJT0NfT1ZFUkxBWTMyOiBjbWQgPSBWSURJT0NfT1ZFUkxBWTsgYnJlYWs7CisjaWZkZWYgX19PTERfVklESU9DXworCWNhc2UgVklESU9DX09WRVJMQVkzMl9PTEQ6IGNtZCA9IFZJRElPQ19PVkVSTEFZOyBicmVhazsKKyNlbmRpZgorCWNhc2UgVklESU9DX1NUUkVBTU9OMzI6IGNtZCA9IFZJRElPQ19TVFJFQU1PTjsgYnJlYWs7CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGMzI6IGNtZCA9IFZJRElPQ19TVFJFQU1PRkY7IGJyZWFrOworCWNhc2UgVklESU9DX0dfSU5QVVQzMjogY21kID0gVklESU9DX0dfSU5QVVQ7IGJyZWFrOworCWNhc2UgVklESU9DX1NfSU5QVVQzMjogY21kID0gVklESU9DX1NfSU5QVVQ7IGJyZWFrOworCWNhc2UgVklESU9DX0dfT1VUUFVUMzI6IGNtZCA9IFZJRElPQ19HX09VVFBVVDsgYnJlYWs7CisJY2FzZSBWSURJT0NfU19PVVRQVVQzMjogY21kID0gVklESU9DX1NfT1VUUFVUOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCWNhc2UgVklESU9DU1RVTkVSOgorCWNhc2UgVklESU9DR1RVTkVSOgorCQllcnIgPSBnZXRfdmlkZW9fdHVuZXIzMigma2FyZy52dCwgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NTRkJVRjoKKwkJZXJyID0gZ2V0X3ZpZGVvX2J1ZmZlcjMyKCZrYXJnLnZiLCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NXSU46CisJCWVyciA9IGdldF92aWRlb193aW5kb3czMigma2FyZy52dywgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHV0lOOgorCWNhc2UgVklESU9DR0ZCVUY6CisJY2FzZSBWSURJT0NHRlJFUToKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DU01JQ1JPQ09ERToKKwkJZXJyID0gZ2V0X21pY3JvY29kZTMyKCZrYXJnLnZjLCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NGUkVROgorCQllcnIgPSBnZXRfdXNlcihrYXJnLnZ4LCAodTMyIF9fdXNlciAqKXVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DQ0FQVFVSRToKKwljYXNlIFZJRElPQ1NZTkM6CisJY2FzZSBWSURJT0NTV1JJVEVNT0RFOgorI2VuZGlmCisJY2FzZSBWSURJT0NfT1ZFUkxBWToKKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwljYXNlIFZJRElPQ19TX09VVFBVVDoKKwkJZXJyID0gZ2V0X3VzZXIoa2FyZy52aSwgKHMzMiBfX3VzZXIgKil1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0lOUFVUOgorCWNhc2UgVklESU9DX0dfT1VUUFVUOgorCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19GTVQ6CisJY2FzZSBWSURJT0NfU19GTVQ6CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwkJZXJyID0gZ2V0X3Y0bDJfZm9ybWF0MzIoJmthcmcudjJmLCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwljYXNlIFZJRElPQ19RQlVGOgorCWNhc2UgVklESU9DX0RRQlVGOgorCQllcnIgPSBnZXRfdjRsMl9idWZmZXIzMigma2FyZy52MmIsIHVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfRkJVRjoKKwkJZXJyID0gZ2V0X3Y0bDJfZnJhbWVidWZmZXIzMigma2FyZy52MmZiLCB1cCk7CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0ZCVUY6CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19FTlVNU1REOgorCQllcnIgPSBnZXRfdjRsMl9zdGFuZGFyZDMyKCZrYXJnLnYycywgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCQllcnIgPSBnZXRfdjRsMl9pbnB1dDMyKCZrYXJnLnYyaSwgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6CisJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6CisJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKKwkJZXJyID0gZ2V0X3Y0bDJfZXh0X2NvbnRyb2xzMzIoJmthcmcudjJlY3MsIHVwKTsKKwkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChjb21wYXRpYmxlX2FyZykKKwkJZXJyID0gbmF0aXZlX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpdXApOworCWVsc2UgeworCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCWVyciA9IG5hdGl2ZV9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSZrYXJnKTsKKwkJc2V0X2ZzKG9sZF9mcyk7CisJfQorCisJLyogU3BlY2lhbCBjYXNlOiBldmVuIGFmdGVyIGFuIGVycm9yIHdlIG5lZWQgdG8gcHV0IHRoZQorCSAgIHJlc3VsdHMgYmFjayBmb3IgdGhlc2UgaW9jdGxzIHNpbmNlIHRoZSBlcnJvcl9pZHggd2lsbAorCSAgIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gd2hpY2ggY29udHJvbCBmYWlsZWQuICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKKwljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKKwljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgorCQlpZiAocHV0X3Y0bDJfZXh0X2NvbnRyb2xzMzIoJmthcmcudjJlY3MsIHVwKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChjbWQpIHsKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwkJZXJyID0gcHV0X3ZpZGVvX3R1bmVyMzIoJmthcmcudnQsIHVwKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ0dXSU46CisJCWVyciA9IHB1dF92aWRlb193aW5kb3czMigma2FyZy52dywgdXApOworCQlicmVhazsKKworCWNhc2UgVklESU9DR0ZCVUY6CisJCWVyciA9IHB1dF92aWRlb19idWZmZXIzMigma2FyZy52YiwgdXApOworCQlicmVhazsKKworCWNhc2UgVklESU9DR0ZSRVE6CisJCWVyciA9IHB1dF91c2VyKCgodTMyKWthcmcudngpLCAodTMyIF9fdXNlciAqKXVwKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCWNhc2UgVklESU9DX1NfT1VUUFVUOgorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJY2FzZSBWSURJT0NfR19PVVRQVVQ6CisJCWVyciA9IHB1dF91c2VyKCgoczMyKWthcmcudmkpLCAoczMyIF9fdXNlciAqKXVwKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0ZCVUY6CisJCWVyciA9IHB1dF92NGwyX2ZyYW1lYnVmZmVyMzIoJmthcmcudjJmYiwgdXApOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfRk1UOgorCWNhc2UgVklESU9DX1NfRk1UOgorCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJCWVyciA9IHB1dF92NGwyX2Zvcm1hdDMyKCZrYXJnLnYyZiwgdXApOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCWNhc2UgVklESU9DX1FCVUY6CisJY2FzZSBWSURJT0NfRFFCVUY6CisJCWVyciA9IHB1dF92NGwyX2J1ZmZlcjMyKCZrYXJnLnYyYiwgdXApOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJCWVyciA9IHB1dF92NGwyX3N0YW5kYXJkMzIoJmthcmcudjJzLCB1cCk7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCQllcnIgPSBwdXRfdjRsMl9pbnB1dDMyKCZrYXJnLnYyaSwgdXApOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworbG9uZyB2NGxfY29tcGF0X2lvY3RsMzIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAtRU5PSU9DVExDTUQ7CisKKwlpZiAoIWZpbGUtPmZfb3AtPmlvY3RsICYmICFmaWxlLT5mX29wLT51bmxvY2tlZF9pb2N0bCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY21kKSB7CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJY2FzZSBWSURJT0NHQ0FQOgorCWNhc2UgVklESU9DR0NIQU46CisJY2FzZSBWSURJT0NTQ0hBTjoKKwljYXNlIFZJRElPQ0dUVU5FUjMyOgorCWNhc2UgVklESU9DU1RVTkVSMzI6CisJY2FzZSBWSURJT0NHUElDVDoKKwljYXNlIFZJRElPQ1NQSUNUOgorCWNhc2UgVklESU9DQ0FQVFVSRTMyOgorCWNhc2UgVklESU9DR1dJTjMyOgorCWNhc2UgVklESU9DU1dJTjMyOgorCWNhc2UgVklESU9DR0ZCVUYzMjoKKwljYXNlIFZJRElPQ1NGQlVGMzI6CisJY2FzZSBWSURJT0NLRVk6CisJY2FzZSBWSURJT0NHRlJFUTMyOgorCWNhc2UgVklESU9DU0ZSRVEzMjoKKwljYXNlIFZJRElPQ0dBVURJTzoKKwljYXNlIFZJRElPQ1NBVURJTzoKKwljYXNlIFZJRElPQ1NZTkMzMjoKKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCWNhc2UgVklESU9DR01CVUY6CisJY2FzZSBWSURJT0NHVU5JVDoKKwljYXNlIFZJRElPQ0dDQVBUVVJFOgorCWNhc2UgVklESU9DU0NBUFRVUkU6CisJY2FzZSBWSURJT0NTUExBWU1PREU6CisJY2FzZSBWSURJT0NTV1JJVEVNT0RFMzI6CisJY2FzZSBWSURJT0NHUExBWUlORk86CisJY2FzZSBWSURJT0NTTUlDUk9DT0RFMzI6CisJY2FzZSBWSURJT0NHVkJJRk1UOgorCWNhc2UgVklESU9DU1ZCSUZNVDoKKyNlbmRpZgorI2lmZGVmIF9fT0xEX1ZJRElPQ18KKwljYXNlIFZJRElPQ19PVkVSTEFZMzJfT0xEOgorCWNhc2UgVklESU9DX1NfUEFSTV9PTEQ6CisJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKKwljYXNlIFZJRElPQ19HX0FVRElPX09MRDoKKwljYXNlIFZJRElPQ19HX0FVRE9VVF9PTEQ6CisJY2FzZSBWSURJT0NfQ1JPUENBUF9PTEQ6CisjZW5kaWYKKwljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwljYXNlIFZJRElPQ19SRVNFUlZFRDoKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwljYXNlIFZJRElPQ19HX0ZNVDMyOgorCWNhc2UgVklESU9DX1NfRk1UMzI6CisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwljYXNlIFZJRElPQ19RVUVSWUJVRjMyOgorCWNhc2UgVklESU9DX0dfRkJVRjMyOgorCWNhc2UgVklESU9DX1NfRkJVRjMyOgorCWNhc2UgVklESU9DX09WRVJMQVkzMjoKKwljYXNlIFZJRElPQ19RQlVGMzI6CisJY2FzZSBWSURJT0NfRFFCVUYzMjoKKwljYXNlIFZJRElPQ19TVFJFQU1PTjMyOgorCWNhc2UgVklESU9DX1NUUkVBTU9GRjMyOgorCWNhc2UgVklESU9DX0dfUEFSTToKKwljYXNlIFZJRElPQ19TX1BBUk06CisJY2FzZSBWSURJT0NfR19TVEQ6CisJY2FzZSBWSURJT0NfU19TVEQ6CisJY2FzZSBWSURJT0NfRU5VTVNURDMyOgorCWNhc2UgVklESU9DX0VOVU1JTlBVVDMyOgorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCWNhc2UgVklESU9DX0dfQVVESU86CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCWNhc2UgVklESU9DX0dfSU5QVVQzMjoKKwljYXNlIFZJRElPQ19TX0lOUFVUMzI6CisJY2FzZSBWSURJT0NfR19PVVRQVVQzMjoKKwljYXNlIFZJRElPQ19TX09VVFBVVDMyOgorCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6CisJY2FzZSBWSURJT0NfR19BVURPVVQ6CisJY2FzZSBWSURJT0NfU19BVURPVVQ6CisJY2FzZSBWSURJT0NfR19NT0RVTEFUT1I6CisJY2FzZSBWSURJT0NfU19NT0RVTEFUT1I6CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwljYXNlIFZJRElPQ19HX0NST1A6CisJY2FzZSBWSURJT0NfU19DUk9QOgorCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CisJY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKKwljYXNlIFZJRElPQ19RVUVSWVNURDoKKwljYXNlIFZJRElPQ19UUllfRk1UMzI6CisJY2FzZSBWSURJT0NfRU5VTUFVRElPOgorCWNhc2UgVklESU9DX0VOVU1BVURPVVQ6CisJY2FzZSBWSURJT0NfR19QUklPUklUWToKKwljYXNlIFZJRElPQ19TX1BSSU9SSVRZOgorCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzMyOgorCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTMzI6CisJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzMyOgorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVTSVpFUzoKKwljYXNlIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTOgorCWNhc2UgVklESU9DX0dfRU5DX0lOREVYOgorCWNhc2UgVklESU9DX0VOQ09ERVJfQ01EOgorCWNhc2UgVklESU9DX1RSWV9FTkNPREVSX0NNRDoKKwljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKKwljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKKwljYXNlIFZJRElPQ19HX0NISVBfSURFTlQ6CisJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CisJCXJldCA9IGRvX3ZpZGVvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkvKiBCVFRWIHNwZWNpZmljLi4uICovCisJY2FzZSBfSU9XKCd2JywgIEJBU0VfVklESU9DUFJJVkFURSswLCBjaGFyIFsyNTZdKToKKwljYXNlIF9JT1IoJ3YnLCAgQkFTRV9WSURJT0NQUklWQVRFKzEsIGNoYXIgWzI1Nl0pOgorCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrMiwgdW5zaWduZWQgaW50KToKKwljYXNlIF9JT1coJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzMsIGNoYXIgWzE2XSk6IC8qIHN0cnVjdCBidHR2X3BsbF9pbmZvICovCisJY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs0LCBpbnQpOgorCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNSwgaW50KToKKwljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzYsIGludCk6CisJY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs3LCBpbnQpOgorCQlyZXQgPSBuYXRpdmVfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXY0bF9wcmludF9pb2N0bCgiY29tcGF0X2lvY3RsMzIiLCBjbWQpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCitsb25nIHY0bF9jb21wYXRfaW9jdGwzMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwodjRsX2NvbXBhdF9pb2N0bDMyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IGNjZDY1NjYuLjdhZDY3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTksNyArOSw3IEBACiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogQXV0aG9yczoJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+ICh2ZXJzaW9uIDEpCisgKiBBdXRob3JzOglBbGFuIENveCwgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4gKHZlcnNpb24gMSkKICAqICAgICAgICAgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4gKHZlcnNpb24gMikKICAqCiAgKiBGaXhlczoJMjAwMDA1MTYgIENsYXVkaW8gTWF0c3Vva2EgPGNsYXVkaW9AY29uZWN0aXZhLmNvbT4KQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAKICNkZWZpbmUgVklERU9fTlVNX0RFVklDRVMJMjU2CiAjZGVmaW5lIFZJREVPX05BTUUgICAgICAgICAgICAgICJ2aWRlbzRsaW51eCIKQEAgLTQxLDE3ICs0MiwxNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19pbmRleChzdHJ1Y3QgZGV2aWNlICpjZCwKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNkKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCB2ZmQtPmluZGV4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdmRldi0+aW5kZXgpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqY2QsCiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHRvX3ZpZGVvX2RldmljZShjZCk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCAoaW50KXNpemVvZih2ZmQtPm5hbWUpLCB2ZmQtPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUuKnNcbiIsIChpbnQpc2l6ZW9mKHZkZXYtPm5hbWUpLCB2ZGV2LT5uYW1lKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHZpZGVvX2RldmljZV9hdHRyc1tdID0gewpAQCAtNzMsNjQgKzc0LDY0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9hbGxvYyk7CiAKLXZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogewotCWtmcmVlKHZmZCk7CisJa2ZyZWUodmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9yZWxlYXNlKTsKIAotdm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpCit2b2lkIHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCiB7CiAJLyogRG8gbm90aGluZyAqLwogCS8qIE9ubHkgdmFsaWQgd2hlbiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCBpcyBhIHN0YXRpYy4gKi8KIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkpOwogCi0vKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGlzIGdvbmUuICovCi1zdGF0aWMgdm9pZCB2NGwyX2NoYXJkZXZfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWRlb19nZXQoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHZpZGVvX2RldmljZSwgY2Rldi5rb2JqKTsKKwlnZXRfZGV2aWNlKCZ2ZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmlkZW9fcHV0KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJcHV0X2RldmljZSgmdmRldi0+ZGV2KTsKK30KKworLyogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgdXNlciBvZiB0aGUgdmlkZW8gZGV2aWNlIGV4aXRzLiAqLworc3RhdGljIHZvaWQgdjRsMl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNkKTsKIAogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCWlmICh2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gIT0gdmZkKSB7CisJaWYgKHZpZGVvX2RldmljZVt2ZGV2LT5taW5vcl0gIT0gdmRldikgewogCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCQlCVUcoKTsKKwkJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEZyZWUgdXAgdGhpcyBkZXZpY2UgZm9yIHJldXNlICovCi0JdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gTlVMTDsKLQljbGVhcl9iaXQodmZkLT5udW0sIHZpZGVvX251bXNbdmZkLT52ZmxfdHlwZV0pOworCXZpZGVvX2RldmljZVt2ZGV2LT5taW5vcl0gPSBOVUxMOworCisJLyogRGVsZXRlIHRoZSBjZGV2IG9uIHRoaXMgbWlub3IgYXMgd2VsbCAqLworCWNkZXZfZGVsKHZkZXYtPmNkZXYpOworCS8qIEp1c3QgaW4gY2FzZSBzb21lIGRyaXZlciB0cmllcyB0byBhY2Nlc3MgdGhpcyBmcm9tCisJICAgdGhlIHJlbGVhc2UoKSBjYWxsYmFjay4gKi8KKwl2ZGV2LT5jZGV2ID0gTlVMTDsKKworCS8qIE1hcmsgbWlub3IgYXMgZnJlZSAqLworCWNsZWFyX2JpdCh2ZGV2LT5udW0sIHZpZGVvX251bXNbdmRldi0+dmZsX3R5cGVdKTsKKwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiAKLQkvKiBSZWxlYXNlIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCi0JdmZkLT5jZGV2X3JlbGVhc2Uoa29iaik7CiAJLyogUmVsZWFzZSB2aWRlb19kZXZpY2UgYW5kIHBlcmZvcm0gb3RoZXIKIAkgICBjbGVhbnVwcyBhcyBuZWVkZWQuICovCi0JaWYgKHZmZC0+cmVsZWFzZSkKLQkJdmZkLT5yZWxlYXNlKHZmZCk7Ci19Ci0KLS8qIFRoZSBuZXcga29ial90eXBlIGZvciB0aGUgY2hhcmFjdGVyIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdjRsMl9rdHlwZV9jZGV2X2RlZmF1bHQgPSB7Ci0JLnJlbGVhc2UgPSB2NGwyX2NoYXJkZXZfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyB2b2lkIHZpZGVvX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqY2QpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwotCi0JLyogSXQncyBub3cgc2FmZSB0byBkZWxldGUgdGhlIGNoYXIgZGV2aWNlLgotCSAgIFRoaXMgd2lsbCBlaXRoZXIgdHJpZ2dlciB0aGUgdjRsMl9jaGFyZGV2X3JlbGVhc2UgaW1tZWRpYXRlbHkgKGlmCi0JICAgdGhlIHJlZmNvdW50IGdvZXMgdG8gMCkgb3IgbGF0ZXIgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIHRoZQotCSAgIGNoYXJhY3RlciBkZXZpY2UgY2xvc2VzIGl0LiAqLwotCWNkZXZfZGVsKCZ2ZmQtPmNkZXYpOworCXZkZXYtPnJlbGVhc2UodmRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgdmlkZW9fY2xhc3MgPSB7CiAJLm5hbWUgPSBWSURFT19OQU1FLAogCS5kZXZfYXR0cnMgPSB2aWRlb19kZXZpY2VfYXR0cnMsCi0JLmRldl9yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKIH07CiAKIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMzksMTMgKzE0MCwxNjMgQEAKIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fZGV2ZGF0YSk7CiAKK3N0YXRpYyBzc2l6ZV90IHY0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IHN6LCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKworCWlmICghdmRldi0+Zm9wcy0+cmVhZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHZkZXYtPmZvcHMtPnJlYWQoZmlscCwgYnVmLCBzeiwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgdjRsMl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IHN6LCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKworCWlmICghdmRldi0+Zm9wcy0+d3JpdGUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2aWRlb19pc191bnJlZ2lzdGVyZWQodmRldikpCisJCXJldHVybiAtRUlPOworCXJldHVybiB2ZGV2LT5mb3BzLT53cml0ZShmaWxwLCBidWYsIHN6LCBvZmYpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHY0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwb2xsKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCisJaWYgKCF2ZGV2LT5mb3BzLT5wb2xsIHx8IHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkKKwkJcmV0dXJuIERFRkFVTFRfUE9MTE1BU0s7CisJcmV0dXJuIHZkZXYtPmZvcHMtPnBvbGwoZmlscCwgcG9sbCk7Cit9CisKK3N0YXRpYyBpbnQgdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisKKwlpZiAoIXZkZXYtPmZvcHMtPmlvY3RsKQorCQlyZXR1cm4gLUVOT1RUWTsKKwkvKiBBbGxvdyBpb2N0bCB0byBjb250aW51ZSBldmVuIGlmIHRoZSBkZXZpY2Ugd2FzIHVucmVnaXN0ZXJlZC4KKwkgICBUaGluZ3MgbGlrZSBkZXF1ZXVlaW5nIGJ1ZmZlcnMgbWlnaHQgc3RpbGwgYmUgdXNlZnVsLiAqLworCXJldHVybiB2ZGV2LT5mb3BzLT5pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgbG9uZyB2NGwyX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKworCWlmICghdmRldi0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwpCisJCXJldHVybiAtRU5PVFRZOworCS8qIEFsbG93IGlvY3RsIHRvIGNvbnRpbnVlIGV2ZW4gaWYgdGhlIGRldmljZSB3YXMgdW5yZWdpc3RlcmVkLgorCSAgIFRoaW5ncyBsaWtlIGRlcXVldWVpbmcgYnVmZmVycyBtaWdodCBzdGlsbCBiZSB1c2VmdWwuICovCisJcmV0dXJuIHZkZXYtPmZvcHMtPnVubG9ja2VkX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIHY0bDJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKworCWlmICghdmRldi0+Zm9wcy0+Y29tcGF0X2lvY3RsKQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCS8qIEFsbG93IGlvY3RsIHRvIGNvbnRpbnVlIGV2ZW4gaWYgdGhlIGRldmljZSB3YXMgdW5yZWdpc3RlcmVkLgorCSAgIFRoaW5ncyBsaWtlIGRlcXVldWVpbmcgYnVmZmVycyBtaWdodCBzdGlsbCBiZSB1c2VmdWwuICovCisJcmV0dXJuIHZkZXYtPmZvcHMtPmNvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB2NGwyX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm0pCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisKKwlpZiAoIXZkZXYtPmZvcHMtPm1tYXAgfHwKKwkgICAgdmlkZW9faXNfdW5yZWdpc3RlcmVkKHZkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gdmRldi0+Zm9wcy0+bW1hcChmaWxwLCB2bSk7Cit9CisKKy8qIE92ZXJyaWRlIGZvciB0aGUgb3BlbiBmdW5jdGlvbiAqLworc3RhdGljIGludCB2NGwyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlpbnQgcmV0OworCisJLyogQ2hlY2sgaWYgdGhlIHZpZGVvIGRldmljZSBpcyBhdmFpbGFibGUgKi8KKwltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwkvKiByZXR1cm4gRU5PREVWIGlmIHRoZSB2aWRlbyBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZAorCSAgIGFscmVhZHkgb3IgaWYgaXQgaXMgbm90IHJlZ2lzdGVyZWQgYW55bW9yZS4gKi8KKwlpZiAodmRldiA9PSBOVUxMIHx8IHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkgeworCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogYW5kIGluY3JlYXNlIHRoZSBkZXZpY2UgcmVmY291bnQgKi8KKwl2aWRlb19nZXQodmRldik7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwlyZXQgPSB2ZGV2LT5mb3BzLT5vcGVuKGlub2RlLCBmaWxwKTsKKwkvKiBkZWNyZWFzZSB0aGUgcmVmY291bnQgaW4gY2FzZSBvZiBhbiBlcnJvciAqLworCWlmIChyZXQpCisJCXZpZGVvX3B1dCh2ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBPdmVycmlkZSBmb3IgdGhlIHJlbGVhc2UgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgdjRsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCWludCByZXQgPSB2ZGV2LT5mb3BzLT5yZWxlYXNlKGlub2RlLCBmaWxwKTsKKworCS8qIGRlY3JlYXNlIHRoZSByZWZjb3VudCB1bmNvbmRpdGlvbmFsbHkgc2luY2UgdGhlIHJlbGVhc2UoKQorCSAgIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiAqLworCXZpZGVvX3B1dCh2ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2NGwyX3VubG9ja2VkX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB2NGwyX3JlYWQsCisJLndyaXRlID0gdjRsMl93cml0ZSwKKwkub3BlbiA9IHY0bDJfb3BlbiwKKwkubW1hcCA9IHY0bDJfbW1hcCwKKwkudW5sb2NrZWRfaW9jdGwgPSB2NGwyX3VubG9ja2VkX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gdjRsMl9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkucmVsZWFzZSA9IHY0bDJfcmVsZWFzZSwKKwkucG9sbCA9IHY0bDJfcG9sbCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjRsMl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gdjRsMl9yZWFkLAorCS53cml0ZSA9IHY0bDJfd3JpdGUsCisJLm9wZW4gPSB2NGwyX29wZW4sCisJLm1tYXAgPSB2NGwyX21tYXAsCisJLmlvY3RsID0gdjRsMl9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IHY0bDJfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLnJlbGVhc2UgPSB2NGwyX3JlbGVhc2UsCisJLnBvbGwgPSB2NGwyX3BvbGwsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKK307CisKIC8qKgogICogZ2V0X2luZGV4IC0gYXNzaWduIHN0cmVhbSBudW1iZXIgYmFzZWQgb24gcGFyZW50IGRldmljZQotICogQHZkZXY6IHZpZGVvX2RldmljZSB0byBhc3NpZ24gaW5kZXggbnVtYmVyIHRvLCB2ZGV2LT5kZXYgc2hvdWxkIGJlIGFzc2lnbmVkCi0gKiBAbnVtOiAtMSBpZiBhdXRvIGFzc2lnbiwgcmVxdWVzdGVkIG51bWJlciBvdGhlcndpc2UKKyAqIEB2ZGV2OiB2aWRlb19kZXZpY2UgdG8gYXNzaWduIGluZGV4IG51bWJlciB0bywgdmRldi0+cGFyZW50IHNob3VsZCBiZSBhc3NpZ25lZAorICogQG51bTogIC0xIGlmIGF1dG8gYXNzaWduLCByZXF1ZXN0ZWQgbnVtYmVyIG90aGVyd2lzZQogICoKKyAqIE5vdGUgdGhhdCB3aGVuIHRoaXMgaXMgY2FsbGVkIHRoZSBuZXcgZGV2aWNlIGhhcyBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZAorICogaW4gdGhlIHZpZGVvX2RldmljZSBhcnJheS4KICAqCi0gKiByZXR1cm5zIC1FTkZJTEUgaWYgbnVtIGlzIGFscmVhZHkgaW4gdXNlLCBhIGZyZWUgaW5kZXggbnVtYmVyIGlmCisgKiBSZXR1cm5zIC1FTkZJTEUgaWYgbnVtIGlzIGFscmVhZHkgaW4gdXNlLCBhIGZyZWUgaW5kZXggbnVtYmVyIGlmCiAgKiBzdWNjZXNzZnVsLgogICovCiBzdGF0aWMgaW50IGdldF9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgbnVtKQpAQCAtMTYyLDkgKzMxMywxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBTb21lIGRyaXZlcnMgZG8gbm90IHNldCB0aGUgcGFyZW50LiBJbiB0aGF0IGNhc2UgYWx3YXlzIHJldHVybiAwLiAqLworCWlmICh2ZGV2LT5wYXJlbnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgVklERU9fTlVNX0RFVklDRVM7IGkrKykgewogCQlpZiAodmlkZW9fZGV2aWNlW2ldICE9IE5VTEwgJiYKLQkJICAgIHZpZGVvX2RldmljZVtpXSAhPSB2ZGV2ICYmCiAJCSAgICB2aWRlb19kZXZpY2VbaV0tPnBhcmVudCA9PSB2ZGV2LT5wYXJlbnQpIHsKIAkJCXVzZWQgfD0gMSA8PCB2aWRlb19kZXZpY2VbaV0tPmluZGV4OwogCQl9CkBAIC0xODAsMTcgKzMzNCwxNSBAQAogCXJldHVybiBpID4gbWF4X2luZGV4ID8gLUVORklMRSA6IGk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpZGVvX2ZvcHM7Ci0KLWludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yKQoraW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQogewotCXJldHVybiB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgodmZkLCB0eXBlLCBuciwgLTEpOworCXJldHVybiB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgodmRldiwgdHlwZSwgbnIsIC0xKTsKIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKTsKIAogLyoqCiAgKgl2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXggLSByZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzCi0gKglAdmZkOiAgdmlkZW8gZGV2aWNlIHN0cnVjdHVyZSB3ZSB3YW50IHRvIHJlZ2lzdGVyCisgKglAdmRldjogdmlkZW8gZGV2aWNlIHN0cnVjdHVyZSB3ZSB3YW50IHRvIHJlZ2lzdGVyCiAgKglAdHlwZTogdHlwZSBvZiBkZXZpY2UgdG8gcmVnaXN0ZXIKICAqCUBucjogICB3aGljaCBkZXZpY2UgbnVtYmVyICgwID09IC9kZXYvdmlkZW8wLCAxID09IC9kZXYvdmlkZW8xLCAuLi4KICAqICAgICAgICAgICAgIC0xID09IGZpcnN0IGZyZWUpCkBAIC0yMTQsOCArMzY2LDcgQEAKICAqCiAgKgklVkZMX1RZUEVfUkFESU8gLSBBIHJhZGlvIGNhcmQKICAqLwotCi1pbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBuciwKK2ludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IHR5cGUsIGludCBuciwKIAkJCQkJaW50IGluZGV4KQogewogCWludCBpID0gMDsKQEAgLTIyMywxNCArMzc0LDE5IEBACiAJaW50IG1pbm9yX29mZnNldCA9IDA7CiAJaW50IG1pbm9yX2NudCA9IFZJREVPX05VTV9ERVZJQ0VTOwogCWNvbnN0IGNoYXIgKm5hbWVfYmFzZTsKLQl2b2lkICpwcml2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKwl2b2lkICpwcml2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwkvKiBBIG1pbm9yIHZhbHVlIG9mIC0xIG1hcmtzIHRoaXMgdmlkZW8gZGV2aWNlIGFzIG5ldmVyCisJICAgaGF2aW5nIGJlZW4gcmVnaXN0ZXJlZCAqLworCWlmICh2ZGV2KQorCQl2ZGV2LT5taW5vciA9IC0xOwogCiAJLyogdGhlIHJlbGVhc2UgY2FsbGJhY2sgTVVTVCBiZSBwcmVzZW50ICovCi0JQlVHX09OKCF2ZmQtPnJlbGVhc2UpOwotCi0JaWYgKHZmZCA9PSBOVUxMKQorCVdBUk5fT04oIXZkZXYgfHwgIXZkZXYtPnJlbGVhc2UpOworCWlmICghdmRldiB8fCAhdmRldi0+cmVsZWFzZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBQYXJ0IDE6IGNoZWNrIGRldmljZSB0eXBlICovCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgogCQluYW1lX2Jhc2UgPSAidmlkZW8iOwpAQCAtMjUwLDggKzQwNiwxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2ZmQtPnZmbF90eXBlID0gdHlwZTsKKwl2ZGV2LT52ZmxfdHlwZSA9IHR5cGU7CisJdmRldi0+Y2RldiA9IE5VTEw7CisJaWYgKHZkZXYtPnY0bDJfZGV2KQorCQl2ZGV2LT5wYXJlbnQgPSB2ZGV2LT52NGwyX2Rldi0+ZGV2OwogCisJLyogUGFydCAyOiBmaW5kIGEgZnJlZSBtaW5vciwga2VybmVsIG51bWJlciBhbmQgZGV2aWNlIGluZGV4LiAqLwogI2lmZGVmIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMKIAkvKiBLZWVwIHRoZSByYW5nZXMgZm9yIHRoZSBmaXJzdCBmb3VyIHR5cGVzIGZvciBoaXN0b3JpY2FsCiAJICogcmVhc29ucy4KQEAgLTI4MiwxMCArNDQyLDcgQEAKIAl9CiAjZW5kaWYKIAotCS8qIEluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBkZXZpY2UgKi8KLQljZGV2X2luaXQoJnZmZC0+Y2RldiwgdmZkLT5mb3BzKTsKLQl2ZmQtPmNkZXYub3duZXIgPSB2ZmQtPmZvcHMtPm93bmVyOwotCS8qIHBpY2sgYSBtaW5vciBudW1iZXIgKi8KKwkvKiBQaWNrIGEgbWlub3IgbnVtYmVyICovCiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7CiAJbnIgPSBmaW5kX25leHRfemVyb19iaXQodmlkZW9fbnVtc1t0eXBlXSwgbWlub3JfY250LCBuciA9PSAtMSA/IDAgOiBucik7CiAJaWYgKG5yID09IG1pbm9yX2NudCkKQEAgLTMwOSw3MiArNDY2LDkyIEBACiAJCXJldHVybiAtRU5GSUxFOwogCX0KICNlbmRpZgotCXZmZC0+bWlub3IgPSBpICsgbWlub3Jfb2Zmc2V0OwotCXZmZC0+bnVtID0gbnI7CisJdmRldi0+bWlub3IgPSBpICsgbWlub3Jfb2Zmc2V0OworCXZkZXYtPm51bSA9IG5yOwogCXNldF9iaXQobnIsIHZpZGVvX251bXNbdHlwZV0pOwotCUJVR19PTih2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0pOwotCXZpZGVvX2RldmljZVt2ZmQtPm1pbm9yXSA9IHZmZDsKLQotCXJldCA9IGdldF9pbmRleCh2ZmQsIGluZGV4KTsKLQl2ZmQtPmluZGV4ID0gcmV0OwotCisJLyogU2hvdWxkIG5vdCBoYXBwZW4gc2luY2Ugd2UgdGhvdWdodCB0aGlzIG1pbm9yIHdhcyBmcmVlICovCisJV0FSTl9PTih2aWRlb19kZXZpY2VbdmRldi0+bWlub3JdICE9IE5VTEwpOworCXJldCA9IHZkZXYtPmluZGV4ID0gZ2V0X2luZGV4KHZkZXYsIGluZGV4KTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZ2V0X2luZGV4IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGZhaWxfbWlub3I7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQlyZXQgPSBjZGV2X2FkZCgmdmZkLT5jZGV2LCBNS0RFVihWSURFT19NQUpPUiwgdmZkLT5taW5vciksIDEpOworCS8qIFBhcnQgMzogSW5pdGlhbGl6ZSB0aGUgY2hhcmFjdGVyIGRldmljZSAqLworCXZkZXYtPmNkZXYgPSBjZGV2X2FsbG9jKCk7CisJaWYgKHZkZXYtPmNkZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXA7CisJfQorCWlmICh2ZGV2LT5mb3BzLT51bmxvY2tlZF9pb2N0bCkKKwkJdmRldi0+Y2Rldi0+b3BzID0gJnY0bDJfdW5sb2NrZWRfZm9wczsKKwllbHNlCisJCXZkZXYtPmNkZXYtPm9wcyA9ICZ2NGwyX2ZvcHM7CisJdmRldi0+Y2Rldi0+b3duZXIgPSB2ZGV2LT5mb3BzLT5vd25lcjsKKwlyZXQgPSBjZGV2X2FkZCh2ZGV2LT5jZGV2LCBNS0RFVihWSURFT19NQUpPUiwgdmRldi0+bWlub3IpLCAxKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjZGV2X2FkZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBmYWlsX21pbm9yOworCQlrZnJlZSh2ZGV2LT5jZGV2KTsKKwkJdmRldi0+Y2RldiA9IE5VTEw7CisJCWdvdG8gY2xlYW51cDsKIAl9Ci0JLyogc3lzZnMgY2xhc3MgKi8KLQltZW1zZXQoJnZmZC0+ZGV2LCAwLCBzaXplb2YodmZkLT5kZXYpKTsKKworCS8qIFBhcnQgNDogcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHN5c2ZzICovCisJbWVtc2V0KCZ2ZGV2LT5kZXYsIDAsIHNpemVvZih2ZGV2LT5kZXYpKTsKIAkvKiBUaGUgbWVtc2V0IGFib3ZlIGNsZWFyZWQgdGhlIGRldmljZSdzIGRydmRhdGEsIHNvCiAJICAgcHV0IGJhY2sgdGhlIGNvcHkgd2UgbWFkZSBlYXJsaWVyLiAqLwotCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgcHJpdik7Ci0JdmZkLT5kZXYuY2xhc3MgPSAmdmlkZW9fY2xhc3M7Ci0JdmZkLT5kZXYuZGV2dCA9IE1LREVWKFZJREVPX01BSk9SLCB2ZmQtPm1pbm9yKTsKLQlpZiAodmZkLT5wYXJlbnQpCi0JCXZmZC0+ZGV2LnBhcmVudCA9IHZmZC0+cGFyZW50OwotCXNwcmludGYodmZkLT5kZXYuYnVzX2lkLCAiJXMlZCIsIG5hbWVfYmFzZSwgbnIpOwotCXJldCA9IGRldmljZV9yZWdpc3RlcigmdmZkLT5kZXYpOworCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIHByaXYpOworCXZkZXYtPmRldi5jbGFzcyA9ICZ2aWRlb19jbGFzczsKKwl2ZGV2LT5kZXYuZGV2dCA9IE1LREVWKFZJREVPX01BSk9SLCB2ZGV2LT5taW5vcik7CisJaWYgKHZkZXYtPnBhcmVudCkKKwkJdmRldi0+ZGV2LnBhcmVudCA9IHZkZXYtPnBhcmVudDsKKwlkZXZfc2V0X25hbWUoJnZkZXYtPmRldiwgIiVzJWQiLCBuYW1lX2Jhc2UsIG5yKTsKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnZkZXYtPmRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGRlbF9jZGV2OworCQlnb3RvIGNsZWFudXA7CiAJfQotCS8qIFJlbWVtYmVyIHRoZSBjZGV2J3MgcmVsZWFzZSBmdW5jdGlvbiAqLwotCXZmZC0+Y2Rldl9yZWxlYXNlID0gdmZkLT5jZGV2LmtvYmoua3R5cGUtPnJlbGVhc2U7Ci0JLyogSW5zdGFsbCBvdXIgb3duICovCi0JdmZkLT5jZGV2LmtvYmoua3R5cGUgPSAmdjRsMl9rdHlwZV9jZGV2X2RlZmF1bHQ7CisJLyogUmVnaXN0ZXIgdGhlIHJlbGVhc2UgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBsYXN0CisJICAgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgZ29lcyBhd2F5LiAqLworCXZkZXYtPmRldi5yZWxlYXNlID0gdjRsMl9kZXZpY2VfcmVsZWFzZTsKKworCS8qIFBhcnQgNTogQWN0aXZhdGUgdGhpcyBtaW5vci4gVGhlIGNoYXIgZGV2aWNlIGNhbiBub3cgYmUgdXNlZC4gKi8KKwltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwl2aWRlb19kZXZpY2VbdmRldi0+bWlub3JdID0gdmRldjsKKwltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogCXJldHVybiAwOwogCi1kZWxfY2RldjoKLQljZGV2X2RlbCgmdmZkLT5jZGV2KTsKLQotZmFpbF9taW5vcjoKK2NsZWFudXA6CiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gTlVMTDsKLQljbGVhcl9iaXQodmZkLT5udW0sIHZpZGVvX251bXNbdHlwZV0pOworCWlmICh2ZGV2LT5jZGV2KQorCQljZGV2X2RlbCh2ZGV2LT5jZGV2KTsKKwljbGVhcl9iaXQodmRldi0+bnVtLCB2aWRlb19udW1zW3R5cGVdKTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCXZmZC0+bWlub3IgPSAtMTsKKwkvKiBNYXJrIHRoaXMgdmlkZW8gZGV2aWNlIGFzIG5ldmVyIGhhdmluZyBiZWVuIHJlZ2lzdGVyZWQuICovCisJdmRldi0+bWlub3IgPSAtMTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgpOwogCiAvKioKICAqCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlIC0gdW5yZWdpc3RlciBhIHZpZGVvNGxpbnV4IGRldmljZQotICoJQHZmZDogdGhlIGRldmljZSB0byB1bnJlZ2lzdGVyCisgKglAdmRldjogdGhlIGRldmljZSB0byB1bnJlZ2lzdGVyCiAgKgotICoJVGhpcyB1bnJlZ2lzdGVycyB0aGUgcGFzc2VkIGRldmljZSBhbmQgZGVhc3NpZ25zIHRoZSBtaW5vcgotICoJbnVtYmVyLiBGdXR1cmUgb3BlbiBjYWxscyB3aWxsIGJlIG1ldCB3aXRoIGVycm9ycy4KKyAqCVRoaXMgdW5yZWdpc3RlcnMgdGhlIHBhc3NlZCBkZXZpY2UuIEZ1dHVyZSBvcGVuIGNhbGxzIHdpbGwKKyAqCWJlIG1ldCB3aXRoIGVycm9ycy4KICAqLwotCi12b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKK3ZvaWQgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKIHsKLQlkZXZpY2VfdW5yZWdpc3RlcigmdmZkLT5kZXYpOworCS8qIENoZWNrIGlmIHZkZXYgd2FzIGV2ZXIgcmVnaXN0ZXJlZCBhdCBhbGwgKi8KKwlpZiAoIXZkZXYgfHwgdmRldi0+bWlub3IgPCAwKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwlzZXRfYml0KFY0TDJfRkxfVU5SRUdJU1RFUkVELCAmdmRldi0+ZmxhZ3MpOworCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisJZGV2aWNlX3VucmVnaXN0ZXIoJnZkZXYtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZWZkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAgICBWNEwyIGRldmljZSBzdXBwb3J0LgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKK2ludCB2NGwyX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJaWYgKGRldiA9PSBOVUxMIHx8IHY0bDJfZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCS8qIFdhcm4gaWYgd2UgYXBwYXJlbnRseSByZS1yZWdpc3RlciBhIGRldmljZSAqLworCVdBUk5fT04oZGV2X2dldF9kcnZkYXRhKGRldikpOworCUlOSVRfTElTVF9IRUFEKCZ2NGwyX2Rldi0+c3ViZGV2cyk7CisJc3Bpbl9sb2NrX2luaXQoJnY0bDJfZGV2LT5sb2NrKTsKKwl2NGwyX2Rldi0+ZGV2ID0gZGV2OworCXNucHJpbnRmKHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpLCAiJXMgJXMiLAorCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldi0+YnVzX2lkKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9yZWdpc3Rlcik7CisKK3ZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QsICpuZXh0OworCisJaWYgKHY0bDJfZGV2ID09IE5VTEwgfHwgdjRsMl9kZXYtPmRldiA9PSBOVUxMKQorCQlyZXR1cm47CisJZGV2X3NldF9kcnZkYXRhKHY0bDJfZGV2LT5kZXYsIE5VTEwpOworCS8qIHVucmVnaXN0ZXIgc3ViZGV2cyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZCwgbmV4dCwgJnY0bDJfZGV2LT5zdWJkZXZzLCBsaXN0KQorCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisKKwl2NGwyX2Rldi0+ZGV2ID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3VucmVnaXN0ZXIpOworCitpbnQgdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCS8qIENoZWNrIGZvciB2YWxpZCBpbnB1dCAqLworCWlmIChkZXYgPT0gTlVMTCB8fCBzZCA9PSBOVUxMIHx8ICFzZC0+bmFtZVswXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogV2FybiBpZiB3ZSBhcHBhcmVudGx5IHJlLXJlZ2lzdGVyIGEgc3ViZGV2ICovCisJV0FSTl9PTihzZC0+ZGV2KTsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNkLT5vd25lcikpCisJCXJldHVybiAtRU5PREVWOworCXNkLT5kZXYgPSBkZXY7CisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJnNkLT5saXN0LCAmZGV2LT5zdWJkZXZzKTsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldik7CisKK3ZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwkvKiByZXR1cm4gaWYgaXQgaXNuJ3QgcmVnaXN0ZXJlZCAqLworCWlmIChzZCA9PSBOVUxMIHx8IHNkLT5kZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmc2QtPmRldi0+bG9jayk7CisJbGlzdF9kZWwoJnNkLT5saXN0KTsKKwlzcGluX3VubG9jaygmc2QtPmRldi0+bG9jayk7CisJc2QtPmRldiA9IE5VTEw7CisJbW9kdWxlX3B1dChzZC0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwppbmRleCA3MTBlMWE0Li5iMDYzMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtOCw3ICs4LDcgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBBdXRob3JzOglBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4gKHZlcnNpb24gMSkKKyAqIEF1dGhvcnM6CUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiAodmVyc2lvbiAxKQogICogICAgICAgICAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAodmVyc2lvbiAyKQogICovCiAKQEAgLTM5MywxMCArMzkzLDggQEAKICAqIE9ic29sZXRlIHVzZXJjb3B5IGZ1bmN0aW9uIC0gU2hvdWxkIGJlIHJlbW92ZWQgc29vbgogICovCiBpbnQKLXZpZGVvX3VzZXJjb3B5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkgICAgICAgaW50ICgqZnVuYykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKQordmlkZW9fdXNlcmNvcHkoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQl2NGwyX2tpb2N0bCBmdW5jKQogewogCWNoYXIJc2J1ZlsxMjhdOwogCXZvaWQgICAgKm1idWYgPSBOVUxMOwpAQCAtNDU4LDcgKzQ1Niw3IEBACiAJfQogCiAJLyogY2FsbCBkcml2ZXIgKi8KLQllcnIgPSBmdW5jKGlub2RlLCBmaWxlLCBjbWQsIHBhcmcpOworCWVyciA9IGZ1bmMoZmlsZSwgY21kLCBwYXJnKTsKIAlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKIAkJZXJyID0gLUVJTlZBTDsKIAlpZiAoaXNfZXh0X2N0cmwpIHsKQEAgLTE0ODEsOSArMTQ3OSwxNSBAQAogCWNhc2UgVklESU9DX0dfQ1JPUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2Nyb3AgKnAgPSBhcmc7CisJCV9fdTMyIHR5cGU7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2Nyb3ApCiAJCQlicmVhazsKKworCQl0eXBlID0gcC0+dHlwZTsKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCQlwLT50eXBlID0gdHlwZTsKKwogCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2Nyb3AoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTE1MDQsMTAgKzE1MDgsMTYgQEAKIAljYXNlIFZJRElPQ19DUk9QQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcCA9IGFyZzsKKwkJX191MzIgdHlwZTsKIAogCQkvKkZJWE1FOiBTaG91bGQgYWxzbyBzaG93IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3QgKi8KIAkJaWYgKCFvcHMtPnZpZGlvY19jcm9wY2FwKQogCQkJYnJlYWs7CisKKwkJdHlwZSA9IHAtPnR5cGU7CisJCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwkJcC0+dHlwZSA9IHR5cGU7CisKIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIAkJcmV0ID0gb3BzLT52aWRpb2NfY3JvcGNhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KSB7CkBAIC0xNTIyLDYgKzE1MzIsOSBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfZ19qcGVnY29tcCkKIAkJCWJyZWFrOworCisJCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2pwZWdjb21wKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAicXVhbGl0eT0lZCwgQVBQbj0lZCwgIgpAQCAtMTc0OSw2ICsxNzYyLDc3IEBACiAJCXJldCA9IG9wcy0+dmlkaW9jX3NfaHdfZnJlcV9zZWVrKGZpbGUsIGZoLCBwKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVTSVpFUzoKKwl7CisJCXN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpwID0gYXJnOworCisJCWlmICghb3BzLT52aWRpb2NfZW51bV9mcmFtZXNpemVzKQorCQkJYnJlYWs7CisKKwkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCisJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZnJhbWVzaXplcyhmaWxlLCBmaCwgcCk7CisJCWRiZ2FyZyhjbWQsCisJCQkiaW5kZXg9JWQsIHBpeGVsZm9ybWF0PSVkLCB0eXBlPSVkICIsCisJCQlwLT5pbmRleCwgcC0+cGl4ZWxfZm9ybWF0LCBwLT50eXBlKTsKKwkJc3dpdGNoIChwLT50eXBlKSB7CisJCWNhc2UgVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU6CisJCQlkYmdhcmcyKCJ3aWR0aCA9ICVkLCBoZWlnaHQ9JWRcbiIsCisJCQkJcC0+ZGlzY3JldGUud2lkdGgsIHAtPmRpc2NyZXRlLmhlaWdodCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRToKKwkJCWRiZ2FyZzIoIm1pbiAlZHglZCwgbWF4ICVkeCVkLCBzdGVwICVkeCVkXG4iLAorCQkJCXAtPnN0ZXB3aXNlLm1pbl93aWR0aCwgIHAtPnN0ZXB3aXNlLm1pbl9oZWlnaHQsCisJCQkJcC0+c3RlcHdpc2Uuc3RlcF93aWR0aCwgcC0+c3RlcHdpc2Uuc3RlcF9oZWlnaHQsCisJCQkJcC0+c3RlcHdpc2UubWF4X3dpZHRoLCAgcC0+c3RlcHdpc2UubWF4X2hlaWdodCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTOgorCQkJZGJnYXJnMigiY29udGludW91c1xuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZ2FyZzIoIi0gVW5rbm93biB0eXBlIVxuIik7CisJCX0KKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUzoKKwl7CisJCXN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpwID0gYXJnOworCisJCWlmICghb3BzLT52aWRpb2NfZW51bV9mcmFtZWludGVydmFscykKKwkJCWJyZWFrOworCisJCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKworCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKGZpbGUsIGZoLCBwKTsKKwkJZGJnYXJnKGNtZCwKKwkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIHR5cGU9JWQgIiwKKwkJCXAtPmluZGV4LCBwLT5waXhlbF9mb3JtYXQsCisJCQlwLT53aWR0aCwgcC0+aGVpZ2h0LCBwLT50eXBlKTsKKwkJc3dpdGNoIChwLT50eXBlKSB7CisJCWNhc2UgVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU6CisJCQlkYmdhcmcyKCJmcHM9JWQvJWRcbiIsCisJCQkJcC0+ZGlzY3JldGUubnVtZXJhdG9yLAorCQkJCXAtPmRpc2NyZXRlLmRlbm9taW5hdG9yKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFOgorCQkJZGJnYXJnMigibWluPSVkLyVkLCBtYXg9JWQvJWQsIHN0ZXA9JWQvJWRcbiIsCisJCQkJcC0+c3RlcHdpc2UubWluLm51bWVyYXRvciwKKwkJCQlwLT5zdGVwd2lzZS5taW4uZGVub21pbmF0b3IsCisJCQkJcC0+c3RlcHdpc2UubWF4Lm51bWVyYXRvciwKKwkJCQlwLT5zdGVwd2lzZS5tYXguZGVub21pbmF0b3IsCisJCQkJcC0+c3RlcHdpc2Uuc3RlcC5udW1lcmF0b3IsCisJCQkJcC0+c3RlcHdpc2Uuc3RlcC5kZW5vbWluYXRvcik7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTOgorCQkJZGJnYXJnMigiY29udGludW91c1xuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZ2FyZzIoIi0gVW5rbm93biB0eXBlIVxuIik7CisJCX0KKwkJYnJlYWs7CisJfQorCiAJZGVmYXVsdDoKIAl7CiAJCWlmICghb3BzLT52aWRpb2NfZGVmYXVsdCkKQEAgLTE3NjgsNyArMTg1Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IF9fdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAorbG9uZyBfX3ZpZGVvX2lvY3RsMihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJY2hhcglzYnVmWzEyOF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MTJmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAgICBWNEwyIHN1Yi1kZXZpY2Ugc3VwcG9ydC4KKworICAgIENvcHlyaWdodCAoQykgMjAwOCAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorCitpbnQgdjRsMl9zdWJkZXZfY29tbWFuZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHF1ZXJ5bWVudSwgYXJnKTsKKwljYXNlIFZJRElPQ19HX0NUUkw6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2N0cmwsIGFyZyk7CisJY2FzZSBWSURJT0NfU19DVFJMOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jdHJsLCBhcmcpOworCWNhc2UgVklESU9DX1FVRVJZTUVOVToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHF1ZXJ5Y3RybCwgYXJnKTsKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgbG9nX3N0YXR1cyk7CisJY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19jaGlwX2lkZW50LCBhcmcpOworCWNhc2UgVklESU9DX0lOVF9TX1NUQU5EQlk6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3N0YW5kYnksIGFyZyA/ICgqKHUzMiAqKWFyZykgOiAwKTsKKwljYXNlIFZJRElPQ19JTlRfUkVTRVQ6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCByZXNldCwgYXJnID8gKCoodTMyICopYXJnKSA6IDApOworCWNhc2UgVklESU9DX0lOVF9TX0dQSU86CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2dwaW8sIGFyZyA/ICgqKHUzMiAqKWFyZykgOiAwKTsKKwljYXNlIFZJRElPQ19JTlRfSU5JVDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGluaXQsIGFyZyA/ICgqKHUzMiAqKWFyZykgOiAwKTsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX3JlZ2lzdGVyLCBhcmcpOworCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19yZWdpc3RlciwgYXJnKTsKKyNlbmRpZgorCisJY2FzZSBWSURJT0NfSU5UX1NfVFVORVJfTU9ERToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX21vZGUsICooZW51bSB2NGwyX3R1bmVyX3R5cGUgKilhcmcpOworCWNhc2UgQVVEQ19TRVRfUkFESU86CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB0dW5lciwgc19yYWRpbyk7CisJY2FzZSBWSURJT0NfU19UVU5FUjoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R1bmVyLCBhcmcpOworCWNhc2UgVklESU9DX0dfVFVORVI6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB0dW5lciwgZ190dW5lciwgYXJnKTsKKwljYXNlIFZJRElPQ19TX1NURDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3N0ZCwgKih2NGwyX3N0ZF9pZCAqKWFyZyk7CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB0dW5lciwgc19mcmVxdWVuY3ksIGFyZyk7CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB0dW5lciwgZ19mcmVxdWVuY3ksIGFyZyk7CisJY2FzZSBUVU5FUl9TRVRfVFlQRV9BRERSOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdHVuZXIsIHNfdHlwZV9hZGRyLCBhcmcpOworCWNhc2UgVFVORVJfU0VUX0NPTkZJRzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX2NvbmZpZywgYXJnKTsKKworCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgYXVkaW8sIHNfY2xvY2tfZnJlcSwgKih1MzIgKilhcmcpOworCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBhdWRpbywgc19yb3V0aW5nLCBhcmcpOworCWNhc2UgVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGF1ZGlvLCBzX2kyc19jbG9ja19mcmVxLCAqKHUzMiAqKWFyZyk7CisKKwljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfcm91dGluZywgYXJnKTsKKwljYXNlIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVE6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19jcnlzdGFsX2ZyZXEsIGFyZyk7CisJY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBkZWNvZGVfdmJpX2xpbmUsIGFyZyk7CisJY2FzZSBWSURJT0NfSU5UX1NfVkJJX0RBVEE6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc192YmlfZGF0YSwgYXJnKTsKKwljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3ZiaV9kYXRhLCBhcmcpOworCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19zbGljZWRfdmJpX2NhcCwgYXJnKTsKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgYXJnKTsKKwljYXNlIFZJRElPQ19HX0ZNVDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgYXJnKTsKKwljYXNlIFZJRElPQ19JTlRfU19TVERfT1VUUFVUOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RkX291dHB1dCwgKih2NGwyX3N0ZF9pZCAqKWFyZyk7CisJY2FzZSBWSURJT0NfU1RSRUFNT046CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDEpOworCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX3N1YmRldl9jb21tYW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggMWVmYzVmMy4uYTcyYTM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTQyMzcsOCArNDIzNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2aW5vX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpbm9fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCkBAIC00MzUzLDcgKzQzNTIsNyBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCi0JcmV0ID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB2aW5vX2RvX2lvY3RsKTsKKwlyZXQgPSB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgdmlub19kb19pb2N0bCk7CiAKIAltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKaW5kZXggNTc3OTU2Yy4uZjcyYjg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIApAQCAtNDAsMTMgKzQwLDIwIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdnAyN3NtcHhfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlpbnQgcmFkaW87CiAJdTMyIGF1ZG1vZGU7CiB9OwogCi1zdGF0aWMgdm9pZCB2cDI3c21weF9zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgYXVkbW9kZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZwMjdzbXB4X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCB2cDI3c21weF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdnAyN3NtcHhfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIHZvaWQgdnAyN3NtcHhfc2V0X2F1ZG1vZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGF1ZG1vZGUpCit7CisJc3RydWN0IHZwMjdzbXB4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdTggZGF0YVszXSA9IHsgMHgwMCwgMHgwMCwgMHgwNCB9OwogCiAJc3dpdGNoIChhdWRtb2RlKSB7CkBAIC02Myw1NSArNzAsODkgQEAKIAl9CiAKIAlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSAhPSBzaXplb2YoZGF0YSkpCi0JCXY0bF9lcnIoY2xpZW50LCAiJXM6IEkvTyBlcnJvciBzZXR0aW5nIGF1ZG1vZGVcbiIsCi0JCQkJY2xpZW50LT5uYW1lKTsKKwkJdjRsMl9lcnIoc2QsICJJL08gZXJyb3Igc2V0dGluZyBhdWRtb2RlXG4iKTsKIAllbHNlCiAJCXN0YXRlLT5hdWRtb2RlID0gYXVkbW9kZTsKIH0KIAotc3RhdGljIGludCB2cDI3c21weF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2cDI3c21weF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHZwMjdzbXB4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKKwlzdHJ1Y3QgdnAyN3NtcHhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEFVRENfU0VUX1JBRElPOgotCQlzdGF0ZS0+cmFkaW8gPSAxOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfU1REOgotCQlzdGF0ZS0+cmFkaW8gPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCWlmICghc3RhdGUtPnJhZGlvKQotCQkJdnAyN3NtcHhfc2V0X2F1ZG1vZGUoY2xpZW50LCB2dC0+YXVkbW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOwotCQl2dC0+YXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOwotCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8Ci0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwotCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBhcmcsCi0JCQkJVjRMMl9JREVOVF9WUDI3U01QWCwgMCk7Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQl2NGxfaW5mbyhjbGllbnQsICJBdWRpbyBNb2RlOiAldSVzXG4iLCBzdGF0ZS0+YXVkbW9kZSwKLQkJCQlzdGF0ZS0+cmFkaW8gPyAiIChSYWRpbykiIDogIiIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwlzdGF0ZS0+cmFkaW8gPSAxOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZwMjdzbXB4X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCit7CisJc3RydWN0IHZwMjdzbXB4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN0YXRlLT5yYWRpbyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnAyN3NtcHhfc190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IHZwMjdzbXB4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmICghc3RhdGUtPnJhZGlvKQorCQl2cDI3c21weF9zZXRfYXVkbW9kZShzZCwgdnQtPmF1ZG1vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwMjdzbXB4X2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCB2cDI3c21weF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoc3RhdGUtPnJhZGlvKQorCQlyZXR1cm4gMDsKKwl2dC0+YXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOworCXZ0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKKwkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKKwl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnAyN3NtcHhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9WUDI3U01QWCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdnAyN3NtcHhfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCB2cDI3c21weF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2luZm8oc2QsICJBdWRpbyBNb2RlOiAldSVzXG4iLCBzdGF0ZS0+YXVkbW9kZSwKKwkJCXN0YXRlLT5yYWRpbyA/ICIgKFJhZGlvKSIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnAyN3NtcHhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZwMjdzbXB4X2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gdnAyN3NtcHhfbG9nX3N0YXR1cywKKwkuZ19jaGlwX2lkZW50ID0gdnAyN3NtcHhfZ19jaGlwX2lkZW50LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdnAyN3NtcHhfdHVuZXJfb3BzID0geworCS5zX3JhZGlvID0gdnAyN3NtcHhfc19yYWRpbywKKwkuc19zdGQgPSB2cDI3c21weF9zX3N0ZCwKKwkuc190dW5lciA9IHZwMjdzbXB4X3NfdHVuZXIsCisJLmdfdHVuZXIgPSB2cDI3c21weF9nX3R1bmVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdnAyN3NtcHhfb3BzID0geworCS5jb3JlID0gJnZwMjdzbXB4X2NvcmVfb3BzLAorCS50dW5lciA9ICZ2cDI3c21weF90dW5lcl9vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KQEAgLTEyNSw2ICsxNjYsNyBAQAogCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHZwMjdzbXB4X3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMTM2LDE3ICsxNzgsMjEgQEAKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2cDI3c21weF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZzdGF0ZS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnZwMjdzbXB4X29wcyk7CiAJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKIAogCS8qIGluaXRpYWxpemUgdnAyN3NtcHggKi8KLQl2cDI3c21weF9zZXRfYXVkbW9kZShjbGllbnQsIHN0YXRlLT5hdWRtb2RlKTsKKwl2cDI3c21weF9zZXRfYXVkbW9kZShzZCwgc3RhdGUtPmF1ZG1vZGUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZwMjdzbXB4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCmluZGV4IGIyZGJlNDguLjU2YzU3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKQEAgLTcyNyw4ICs3MjcsNyBAQAogICoJVmlkZW80bGludXggaW50ZXJmYWNpbmcKICAqLwogCi1zdGF0aWMgaW50IHc5OTY2X3Y0bF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdzk5NjZfdjRsX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHc5OTY2X2RldiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIApAQCAtODgxLDcgKzg4MCw3IEBACiBzdGF0aWMgaW50IHc5OTY2X3Y0bF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHc5OTY2X3Y0bF9kb19pb2N0bCk7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB3OTk2Nl92NGxfZG9faW9jdGwpOwogfQogCiAvLyBDYXB0dXJlIGRhdGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCmluZGV4IDU0YWMzZmUuLjEyYTMxZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIApAQCAtNTIsNiArNTIsNyBAQAogfTsKIAogc3RydWN0IHdtODczOV9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXUzMiBjbG9ja19mcmVxOwogCXU4IG11dGVkOwogCXUxNiB2b2x1bWU7CkBAIC02MCw0MyArNjEsNDkgQEAKIAl1OCB2b2xfcjsgCQkvKiArMTJkQiB0byAtMzQuNWRCIDEuNWRCIHN0ZXAgKDViaXQpIGRlZjowZEIgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdtODczOV9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgd204NzM5X3N0YXRlLCBzZCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHdtODczOV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCB1MTYgdmFsKQorc3RhdGljIGludCB3bTg3Mzlfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHJlZywgdTE2IHZhbCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IGk7CiAKIAlpZiAocmVnIDwgMCB8fCByZWcgPj0gVE9UX1JFR1MpIHsKLQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKKwkJdjRsMl9lcnIoc2QsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRlOiAlMDJ4ICUwMnhcbiIsIHJlZywgdmFsKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ3cml0ZTogJTAyeCAlMDJ4XG4iLCByZWcsIHZhbCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJKHJlZyA8PCAxKSB8ICh2YWwgPj4gOCksIHZhbCAmIDB4ZmYpID09IDApCiAJCQlyZXR1cm4gMDsKLQl2NGxfZXJyKGNsaWVudCwgIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CisJdjRsMl9lcnIoc2QsICJJMkM6IGNhbm5vdCB3cml0ZSAlMDN4IHRvIHJlZ2lzdGVyIFIlZFxuIiwgdmFsLCByZWcpOwogCXJldHVybiAtMTsKIH0KIAogLyogd3JpdGUgcmVncyB0byBzZXQgYXVkaW8gdm9sdW1lIGV0YyAqLwotc3RhdGljIHZvaWQgd204NzM5X3NldF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgd204NzM5X3NldF9hdWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdTE2IG11dGUgPSBzdGF0ZS0+bXV0ZWQgPyAweDgwIDogMDsKIAogCS8qIFZvbHVtZSBzZXR0aW5nOiBiaXRzIDAtNCwgMHgxZiA9IDEyIGRCLCAweDAwID0gLTM0LjUgZEIKIAkgKiBEZWZhdWx0IHNldHRpbmc6IDB4MTcgPSAwIGRCCiAJICovCi0Jd204NzM5X3dyaXRlKGNsaWVudCwgUjAsIChzdGF0ZS0+dm9sX2wgJiAweDFmKSB8IG11dGUpOwotCXdtODczOV93cml0ZShjbGllbnQsIFIxLCAoc3RhdGUtPnZvbF9yICYgMHgxZikgfCBtdXRlKTsKKwl3bTg3Mzlfd3JpdGUoc2QsIFIwLCAoc3RhdGUtPnZvbF9sICYgMHgxZikgfCBtdXRlKTsKKwl3bTg3Mzlfd3JpdGUoc2QsIFIxLCAoc3RhdGUtPnZvbF9yICYgMHgxZikgfCBtdXRlKTsKIH0KIAotc3RhdGljIGludCB3bTg3MzlfZ2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgd204NzM5X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMTE3LDkgKzEyNCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd204NzM5X3NldF9jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHdtODczOV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXVuc2lnbmVkIGludCB3b3JrX2wsIHdvcmtfcjsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTE0Nyw3ICsxNTQsNyBAQAogCXN0YXRlLT52b2xfciA9IChsb25nKXdvcmtfciAqIDMxIC8gNjU1MzU7CiAKIAkvKiBzZXQgYXVkaW8gdm9sdW1lIGV0Yy4gKi8KLQl3bTg3Mzlfc2V0X2F1ZGlvKGNsaWVudCk7CisJd204NzM5X3NldF9hdWRpbyhzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4Niw3NyArMTkzLDg5IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHdtODczOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB3bTg3Mzlfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBhdWRpb2ZyZXEpCiB7Ci0Jc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JewotCQl1MzIgYXVkaW9mcmVxID0gKih1MzIgKilhcmc7Ci0KLQkJc3RhdGUtPmNsb2NrX2ZyZXEgPSBhdWRpb2ZyZXE7Ci0JCS8qIGRlLWFjdGl2YXRlICovCi0JCXdtODczOV93cml0ZShjbGllbnQsIFI5LCAweDAwMCk7Ci0JCXN3aXRjaCAoYXVkaW9mcmVxKSB7Ci0JCWNhc2UgNDQxMDA6Ci0JCQkvKiAyNTZmcHMsIGZzPTQ0LjFrICovCi0JCQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSOCwgMHgwMjApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDgwMDA6Ci0JCQkvKiAyNTZmcHMsIGZzPTQ4ayAqLwotCQkJd204NzM5X3dyaXRlKGNsaWVudCwgUjgsIDB4MDAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDMyMDAwOgotCQkJLyogMjU2ZnBzLCBmcz0zMmsgKi8KLQkJCXdtODczOV93cml0ZShjbGllbnQsIFI4LCAweDAxOCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGFjdGl2YXRlICovCi0JCXdtODczOV93cml0ZShjbGllbnQsIFI5LCAweDAwMSk7CisJc3RhdGUtPmNsb2NrX2ZyZXEgPSBhdWRpb2ZyZXE7CisJLyogZGUtYWN0aXZhdGUgKi8KKwl3bTg3Mzlfd3JpdGUoc2QsIFI5LCAweDAwMCk7CisJc3dpdGNoIChhdWRpb2ZyZXEpIHsKKwljYXNlIDQ0MTAwOgorCQkvKiAyNTZmcHMsIGZzPTQ0LjFrICovCisJCXdtODczOV93cml0ZShzZCwgUjgsIDB4MDIwKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gd204NzM5X2dldF9jdHJsKGNsaWVudCwgYXJnKTsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHdtODczOV9zZXRfY3RybChjbGllbnQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzlfcWN0cmwpOyBpKyspCi0JCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB3bTg3MzlfcWN0cmxbaV0uaWQpIHsKLQkJCQltZW1jcHkocWMsICZ3bTg3MzlfcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAotCQkJCWFyZywgVjRMMl9JREVOVF9XTTg3MzksIDApOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJdjRsX2luZm8oY2xpZW50LCAiRnJlcXVlbmN5OiAldSBIelxuIiwgc3RhdGUtPmNsb2NrX2ZyZXEpOwotCQl2NGxfaW5mbyhjbGllbnQsICJWb2x1bWUgTDogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9sICYgMHgxZiwKLQkJCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOwotCQl2NGxfaW5mbyhjbGllbnQsICJWb2x1bWUgUjogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9yICYgMHgxZiwKLQkJCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCWNhc2UgNDgwMDA6CisJCS8qIDI1NmZwcywgZnM9NDhrICovCisJCXdtODczOV93cml0ZShzZCwgUjgsIDB4MDAwKTsKIAkJYnJlYWs7Ci0KKwljYXNlIDMyMDAwOgorCQkvKiAyNTZmcHMsIGZzPTMyayAqLworCQl3bTg3Mzlfd3JpdGUoc2QsIFI4LCAweDAxOCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0KKwkvKiBhY3RpdmF0ZSAqLworCXdtODczOV93cml0ZShzZCwgUjksIDB4MDAxKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB3bTg3MzlfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzlfcWN0cmwpOyBpKyspCisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHdtODczOV9xY3RybFtpXS5pZCkgeworCQkJbWVtY3B5KHFjLCAmd204NzM5X3FjdHJsW2ldLCBzaXplb2YoKnFjKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHdtODczOV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1dNODczOSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd204NzM5X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXY0bDJfaW5mbyhzZCwgIkZyZXF1ZW5jeTogJXUgSHpcbiIsIHN0YXRlLT5jbG9ja19mcmVxKTsKKwl2NGwyX2luZm8oc2QsICJWb2x1bWUgTDogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9sICYgMHgxZiwKKwkJCXN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7CisJdjRsMl9pbmZvKHNkLCAiVm9sdW1lIFI6ICAlMDJ4JXNcbiIsIHN0YXRlLT52b2xfciAmIDB4MWYsCisJCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODczOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204NzM5X2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gd204NzM5X2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IHdtODczOV9nX2NoaXBfaWRlbnQsCisJLnF1ZXJ5Y3RybCA9IHdtODczOV9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHdtODczOV9nX2N0cmwsCisJLnNfY3RybCA9IHdtODczOV9zX2N0cmwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyB3bTg3MzlfYXVkaW9fb3BzID0geworCS5zX2Nsb2NrX2ZyZXEgPSB3bTg3Mzlfc19jbG9ja19mcmVxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgd204NzM5X29wcyA9IHsKKwkuY29yZSA9ICZ3bTg3MzlfY29yZV9vcHMsCisJLmF1ZGlvID0gJndtODczOV9hdWRpb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogaTJjIGltcGxlbWVudGF0aW9uICovCkBAIC0yNjUsNiArMjg0LDcgQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMjc2LDYgKzI5Niw4IEBACiAJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzM5X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmd204NzM5X29wcyk7CiAJc3RhdGUtPnZvbF9sID0gMHgxNzsgLyogMGRCICovCiAJc3RhdGUtPnZvbF9yID0gMHgxNzsgLyogMGRCICovCiAJc3RhdGUtPm11dGVkID0gMDsKQEAgLTI4MywzMSArMzA1LDMzIEBACiAJLyogbm9ybWFsaXplICgxMmRCKDMxKSB0byAtMzQuNWRCKDApIFswZEIoMjMpXSAtPiA2NTUzNSB0byAwKSAqLwogCXN0YXRlLT52b2x1bWUgPSAoKGxvbmcpc3RhdGUtPnZvbF9sICsgMSkgKiA2NTUzNSAvIDMxOwogCXN0YXRlLT5jbG9ja19mcmVxID0gNDgwMDA7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOwogCiAJLyogSW5pdGlhbGl6ZSB3bTg3MzkgKi8KIAogCS8qIHJlc2V0ICovCi0Jd204NzM5X3dyaXRlKGNsaWVudCwgUjE1LCAweDAwKTsKKwl3bTg3Mzlfd3JpdGUoc2QsIFIxNSwgMHgwMCk7CiAJLyogZmlsdGVyIHNldHRpbmcsIGhpZ2ggcGF0aCwgb2ZmZXQgY2xlYXIgKi8KLQl3bTg3Mzlfd3JpdGUoY2xpZW50LCBSNSwgMHgwMDApOworCXdtODczOV93cml0ZShzZCwgUjUsIDB4MDAwKTsKIAkvKiBBREMsIE9TQywgUG93ZXIgT2ZmIG1vZGUgRGlzYWJsZSAqLwotCXdtODczOV93cml0ZShjbGllbnQsIFI2LCAweDAwMCk7CisJd204NzM5X3dyaXRlKHNkLCBSNiwgMHgwMDApOwogCS8qIERpZ2l0YWwgQXVkaW8gaW50ZXJmYWNlIGZvcm1hdDoKIAkgICBFbmFibGUgTWFzdGVyIG1vZGUsIDI0IGJpdCwgTVNCIGZpcnN0L2xlZnQganVzdGlmaWVkICovCi0Jd204NzM5X3dyaXRlKGNsaWVudCwgUjcsIDB4MDQ5KTsKKwl3bTg3Mzlfd3JpdGUoc2QsIFI3LCAweDA0OSk7CiAJLyogc2FtcGxpbmcgY29udHJvbDogbm9ybWFsLCAyNTZmcywgNDhLSHogc2FtcGxpbmcgcmF0ZSAqLwotCXdtODczOV93cml0ZShjbGllbnQsIFI4LCAweDAwMCk7CisJd204NzM5X3dyaXRlKHNkLCBSOCwgMHgwMDApOwogCS8qIGFjdGl2YXRlICovCi0Jd204NzM5X3dyaXRlKGNsaWVudCwgUjksIDB4MDAxKTsKKwl3bTg3Mzlfd3JpdGUoc2QsIFI5LCAweDAwMSk7CiAJLyogc2V0IHZvbHVtZS9tdXRlICovCi0Jd204NzM5X3NldF9hdWRpbyhjbGllbnQpOworCXdtODczOV9zZXRfYXVkaW8oc2QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHdtODczOV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCmluZGV4IDQ4ZGY2NjEuLmQwMjIwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKQEAgLTU0LDE2ICs1NCwyMyBAQAogfTsKIAogc3RydWN0IHdtODc3NV9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXU4IGlucHV0OwkJLyogTGFzdCBzZWxlY3RlZCBpbnB1dCAoMC0weGYpICovCiAJdTggbXV0ZWQ7CiB9OwogCi1zdGF0aWMgaW50IHdtODc3NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCB1MTYgdmFsKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgd204Nzc1X3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB3bTg3NzVfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCB3bTg3NzVfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IGk7CiAKIAlpZiAocmVnIDwgMCB8fCByZWcgPj0gVE9UX1JFR1MpIHsKLQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKKwkJdjRsMl9lcnIoc2QsICJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNzEsODYgKzc4LDExOSBAQAogCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJKHJlZyA8PCAxKSB8ICh2YWwgPj4gOCksIHZhbCAmIDB4ZmYpID09IDApCiAJCQlyZXR1cm4gMDsKLQl2NGxfZXJyKGNsaWVudCwgIkkyQzogY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCB2YWwsIHJlZyk7CisJdjRsMl9lcnIoc2QsICJJMkM6IGNhbm5vdCB3cml0ZSAlMDN4IHRvIHJlZ2lzdGVyIFIlZFxuIiwgdmFsLCByZWcpOwogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGludCB3bTg3NzVfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCB3bTg3NzVfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJLyogVGhlcmUgYXJlIDQgaW5wdXRzIGFuZCBvbmUgb3V0cHV0LiBaZXJvIG9yIG1vcmUgaW5wdXRzCisJICAgYXJlIG11bHRpcGxleGVkIHRvZ2V0aGVyIHRvIHRoZSBvdXRwdXQuIEhlbmNlIHRoZXJlIGFyZQorCSAgIDE2IGNvbWJpbmF0aW9ucy4KKwkgICBJZiBvbmx5IG9uZSBpbnB1dCBpcyBhY3RpdmUgKHRoZSBub3JtYWwgY2FzZSkgdGhlbiB0aGUKKwkgICBpbnB1dCB2YWx1ZXMgMSwgMiwgNCBvciA4IHNob3VsZCBiZSB1c2VkLiAqLworCWlmIChyb3V0ZS0+aW5wdXQgPiAxNSkgeworCQl2NGwyX2VycihzZCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OworCWlmIChzdGF0ZS0+bXV0ZWQpCisJCXJldHVybiAwOworCXdtODc3NV93cml0ZShzZCwgUjIxLCAweDBjMCk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTQsIDB4MWQ0KTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxNSwgMHgxZDQpOworCXdtODc3NV93cml0ZShzZCwgUjIxLCAweDEwMCArIHN0YXRlLT5pbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc1X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB3bTg3NzVfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCisJCXJldHVybiAtRUlOVkFMOworCWN0cmwtPnZhbHVlID0gc3RhdGUtPm11dGVkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3NV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdGF0ZS0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIyMSwgMHgwYzApOworCXdtODc3NV93cml0ZShzZCwgUjE0LCAweDFkNCk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTUsIDB4MWQ0KTsKKwlpZiAoIXN0YXRlLT5tdXRlZCkKKwkJd204Nzc1X3dyaXRlKHNkLCBSMjEsIDB4MTAwICsgc3RhdGUtPmlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzVfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9XTTg3NzUsIDApOworfQorCitzdGF0aWMgaW50IHdtODc3NV9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwl2NGwyX2luZm8oc2QsICJJbnB1dDogJWQlc1xuIiwgc3RhdGUtPmlucHV0LAorCQkJc3RhdGUtPm11dGVkID8gIiAobXV0ZWQpIiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzVfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCB3bTg3NzVfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJLyogSWYgSSByZW1vdmUgdGhpcywgdGhlbiBpdCBjYW4gaGFwcGVuIHRoYXQgSSBoYXZlIG5vCisJICAgc291bmQgdGhlIGZpcnN0IHRpbWUgSSB0dW5lIGZyb20gc3RhdGljIHRvIGEgdmFsaWQgY2hhbm5lbC4KKwkgICBJdCdzIGRpZmZpY3VsdCB0byByZXByb2R1Y2UgYW5kIGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZAorCSAgIHRvIHRoZSB6ZXJvIGNyb3NzIGRldGVjdCBjaXJjdWl0LiAqLworCXdtODc3NV93cml0ZShzZCwgUjIxLCAweDBjMCk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTQsIDB4MWQ0KTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxNSwgMHgxZDQpOworCXdtODc3NV93cml0ZShzZCwgUjIxLCAweDEwMCArIHN0YXRlLT5pbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgd204Nzc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+aW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JCS8qIFRoZXJlIGFyZSA0IGlucHV0cyBhbmQgb25lIG91dHB1dC4gWmVybyBvciBtb3JlIGlucHV0cwotCQkgICBhcmUgbXVsdGlwbGV4ZWQgdG9nZXRoZXIgdG8gdGhlIG91dHB1dC4gSGVuY2UgdGhlcmUgYXJlCi0JCSAgIDE2IGNvbWJpbmF0aW9ucy4KLQkJICAgSWYgb25seSBvbmUgaW5wdXQgaXMgYWN0aXZlICh0aGUgbm9ybWFsIGNhc2UpIHRoZW4gdGhlCi0JCSAgIGlucHV0IHZhbHVlcyAxLCAyLCA0IG9yIDggc2hvdWxkIGJlIHVzZWQuICovCi0JCWlmIChyb3V0ZS0+aW5wdXQgPiAxNSkgewotCQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIGlucHV0ICVkLlxuIiwgcm91dGUtPmlucHV0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXN0YXRlLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKLQkJaWYgKHN0YXRlLT5tdXRlZCkKLQkJCWJyZWFrOwotCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MGMwKTsKLQkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE0LCAweDFkNCk7Ci0JCXdtODc3NV93cml0ZShjbGllbnQsIFIxNSwgMHgxZDQpOwotCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTAwICsgc3RhdGUtPmlucHV0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPm11dGVkOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX01VVEUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3RhdGUtPm11dGVkID0gY3RybC0+dmFsdWU7Ci0JCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgwYzApOwotCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKLQkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7Ci0JCWlmICghc3RhdGUtPm11dGVkKQotCQkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDEwMCArIHN0YXRlLT5pbnB1dCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAotCQkJCWFyZywgVjRMMl9JREVOVF9XTTg3NzUsIDApOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJdjRsX2luZm8oY2xpZW50LCAiSW5wdXQ6ICVkJXNcbiIsIHN0YXRlLT5pbnB1dCwKLQkJCSAgICBzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCQkvKiBJZiBJIHJlbW92ZSB0aGlzLCB0aGVuIGl0IGNhbiBoYXBwZW4gdGhhdCBJIGhhdmUgbm8KLQkJICAgc291bmQgdGhlIGZpcnN0IHRpbWUgSSB0dW5lIGZyb20gc3RhdGljIHRvIGEgdmFsaWQgY2hhbm5lbC4KLQkJICAgSXQncyBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlIGFuZCBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQKLQkJICAgdG8gdGhlIHplcm8gY3Jvc3MgZGV0ZWN0IGNpcmN1aXQuICovCi0JCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgwYzApOwotCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKLQkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7Ci0JCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDAgKyBzdGF0ZS0+aW5wdXQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHdtODc3NV9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IHdtODc3NV9sb2dfc3RhdHVzLAorCS5nX2NoaXBfaWRlbnQgPSB3bTg3NzVfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSB3bTg3NzVfZ19jdHJsLAorCS5zX2N0cmwgPSB3bTg3NzVfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgd204Nzc1X3R1bmVyX29wcyA9IHsKKwkuc19mcmVxdWVuY3kgPSB3bTg3NzVfc19mcmVxdWVuY3ksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyB3bTg3NzVfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB3bTg3NzVfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgd204Nzc1X29wcyA9IHsKKwkuY29yZSA9ICZ3bTg3NzVfY29yZV9vcHMsCisJLnR1bmVyID0gJndtODc3NV90dW5lcl9vcHMsCisJLmF1ZGlvID0gJndtODc3NV9hdWRpb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiAvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KIAogLyoKQEAgLTE2Miw1NiArMjAyLDYxIEBACiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CiAKLQl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd204Nzc1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmd204Nzc1X29wcyk7CiAJc3RhdGUtPmlucHV0ID0gMjsKIAlzdGF0ZS0+bXV0ZWQgPSAwOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKIAogCS8qIEluaXRpYWxpemUgd204Nzc1ICovCiAKIAkvKiBSRVNFVCAqLwotCXdtODc3NV93cml0ZShjbGllbnQsIFIyMywgMHgwMDApOworCXdtODc3NV93cml0ZShzZCwgUjIzLCAweDAwMCk7CiAJLyogRGlzYWJsZSB6ZXJvIGNyb3NzIGRldGVjdCB0aW1lb3V0ICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjcsIDB4MDAwKTsKKwl3bTg3NzVfd3JpdGUoc2QsIFI3LCAweDAwMCk7CiAJLyogTGVmdCBqdXN0aWZpZWQsIDI0LWJpdCBtb2RlICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjExLCAweDAyMSk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTEsIDB4MDIxKTsKIAkvKiBNYXN0ZXIgbW9kZSwgY2xvY2sgcmF0aW8gMjU2ZnMgKi8KLQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTIsIDB4MTAyKTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxMiwgMHgxMDIpOwogCS8qIFBvd2VyZWQgdXAgKi8KLQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTMsIDB4MDAwKTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxMywgMHgwMDApOwogCS8qIEFEQyBnYWluICsyLjVkQiwgZW5hYmxlIHplcm8gY3Jvc3MgKi8KLQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxNCwgMHgxZDQpOwogCS8qIEFEQyBnYWluICsyLjVkQiwgZW5hYmxlIHplcm8gY3Jvc3MgKi8KLQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTUsIDB4MWQ0KTsKKwl3bTg3NzVfd3JpdGUoc2QsIFIxNSwgMHgxZDQpOwogCS8qIEFMQyBTdGVyZW8sIEFMQyB0YXJnZXQgbGV2ZWwgLTFkQiBGUyBtYXggZ2FpbiArOGRCICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjE2LCAweDFiZik7CisJd204Nzc1X3dyaXRlKHNkLCBSMTYsIDB4MWJmKTsKIAkvKiBFbmFibGUgZ2FpbiBjb250cm9sLCB1c2UgemVybyBjcm9zcyBkZXRlY3Rpb24sCiAJICAgQUxDIGhvbGQgdGltZSA0Mi42IG1zICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjE3LCAweDE4NSk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTcsIDB4MTg1KTsKIAkvKiBBTEMgZ2FpbiByYW1wIHVwIGRlbGF5IDM0IHMsIEFMQyBnYWluIHJhbXAgZG93biBkZWxheSAzMyBtcyAqLwotCXdtODc3NV93cml0ZShjbGllbnQsIFIxOCwgMHgwYTIpOworCXdtODc3NV93cml0ZShzZCwgUjE4LCAweDBhMik7CiAJLyogRW5hYmxlIG5vaXNlIGdhdGUsIHRocmVzaG9sZCAtNzJkQmZzICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjE5LCAweDAwNSk7CisJd204Nzc1X3dyaXRlKHNkLCBSMTksIDB4MDA1KTsKIAkvKiBUcmFuc2llbnQgd2luZG93IDRtcywgbG93ZXIgUEdBIGdhaW4gbGltaXQgLTFkQiAqLwotCXdtODc3NV93cml0ZShjbGllbnQsIFIyMCwgMHgwN2EpOworCXdtODc3NV93cml0ZShzZCwgUjIwLCAweDA3YSk7CiAJLyogTFJCT1RIID0gMSwgdXNlIGlucHV0IDIuICovCi0Jd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDEwMik7CisJd204Nzc1X3dyaXRlKHNkLCBSMjEsIDB4MTAyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTg3NzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCA5ZmM1ODE3Li45ZDAwZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTEwMjAsNyArMTAyMCw3IEBACiAKIAlzdHJsY3B5KGNhcC5jYXJkLCBjYW0tPnY0bGRldi0+bmFtZSwgc2l6ZW9mKGNhcC5jYXJkKSk7CiAJaWYgKHVzYl9tYWtlX3BhdGgoY2FtLT51c2JkZXYsIGNhcC5idXNfaW5mbywgc2l6ZW9mKGNhcC5idXNfaW5mbykpIDwgMCkKLQkJc3RybGNweShjYXAuYnVzX2luZm8sIGNhbS0+dXNiZGV2LT5kZXYuYnVzX2lkLAorCQlzdHJsY3B5KGNhcC5idXNfaW5mbywgZGV2X25hbWUoJmNhbS0+dXNiZGV2LT5kZXYpLAogCQkJc2l6ZW9mKGNhcC5idXNfaW5mbykpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKaW5kZXggZmE1ZjJmOC4uMDVmMzkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTE1MywxMiArMTUzLDYgQEAKIE1PRFVMRV9BVVRIT1IoIlNlcmd1ZWkgTWlyaWRvbm92Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6cjM2MDY3X3BjaV90YmxbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjA1NywKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JezB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHpyMzYwNjdfcGNpX3RibCk7CiAKIGludCB6b3Jhbl9udW07CQkJLyogbnVtYmVyIG9mIEJ1enMgaW4gdXNlICovCiBzdHJ1Y3Qgem9yYW4gKnpvcmFuW0JVWl9NQVhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggZGIxMWFiOS4uMDBiOTdkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0xOTQwLDExICsxOTQwLDcgQEAKICAqICAgaW9jdGwgcm91dGluZQogICovCiAKLXN0YXRpYyBpbnQKLXpvcmFuX2RvX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQlzdHJ1Y3QgZmlsZSAgKmZpbGUsCi0JCXVuc2lnbmVkIGludCAgY21kLAotCQl2b2lkICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgem9yYW5fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CkBAIC00MjAxLDcgKzQxOTcsNyBAQAogCSAgICAgdW5zaWduZWQgaW50ICBjbWQsCiAJICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB6b3Jhbl9kb19pb2N0bCk7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB6b3Jhbl9kb19pb2N0bCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FzaWMzLmMgYi9kcml2ZXJzL21mZC9hc2ljMy5jCmluZGV4IGU0YzBkYjQuLjllNDg1NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtNDc0LDkgKzQ3NCw5IEBACiAJdTE2IGRpcl9yZWdbQVNJQzNfTlVNX0dQSU9fQkFOS1NdOwogCWludCBpOwogCi0JbWVtemVybyhhbHRfcmVnLCBBU0lDM19OVU1fR1BJT19CQU5LUyAqIHNpemVvZih1MTYpKTsKLQltZW16ZXJvKG91dF9yZWcsIEFTSUMzX05VTV9HUElPX0JBTktTICogc2l6ZW9mKHUxNikpOwotCW1lbXplcm8oZGlyX3JlZywgQVNJQzNfTlVNX0dQSU9fQkFOS1MgKiBzaXplb2YodTE2KSk7CisJbWVtc2V0KGFsdF9yZWcsIDAsIEFTSUMzX05VTV9HUElPX0JBTktTICogc2l6ZW9mKHUxNikpOworCW1lbXNldChvdXRfcmVnLCAwLCBBU0lDM19OVU1fR1BJT19CQU5LUyAqIHNpemVvZih1MTYpKTsKKwltZW1zZXQoZGlyX3JlZywgMCwgQVNJQzNfTlVNX0dQSU9fQkFOS1MgKiBzaXplb2YodTE2KSk7CiAKIAkvKiBFbmFibGUgYWxsIEdQSU9zICovCiAJYXNpYzNfd3JpdGVfcmVnaXN0ZXIoYXNpYywgQVNJQzNfR1BJT19PRkZTRVQoQSwgTUFTSyksIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwppbmRleCBiNGVkNTdlLi42MDYzZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJtY3AuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYyBiL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYwppbmRleCAyODM4MGIyLi42MmIzMmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMKKysrIGIvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC1hc3NhYmV0LmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWFzc2FiZXQuYwppbmRleCA2MWFlYWY3Li44NmZlZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLWFzc2FiZXQuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWFzc2FiZXQuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSAidWNiMXgwMC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IGEzMTZmMWIuLjY4NjBjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgInVjYjF4MDAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCA0NDc2MmNhLi42MWI3ZDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvY29sbGllLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9pbXhtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvaW14bW1jLmMKaW5kZXggMmYwZmNkYi4uZWIyOWIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9pbXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2lteG1tYy5jCkBAIC0xMCwyMCArMTAsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqICAyMDA1LTA0LTE3IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KLSAqICAgICAgICAgICAgIENoYW5nZWQgdG8gY29uZm9ybSByZWRlc2lnbmVkIGkuTVggc2NhdHRlciBnYXRoZXIgRE1BIGludGVyZmFjZQotICoKLSAqICAyMDA1LTExLTA0IFBhdmVsIFBpc2EgPHBpc2FAY21wLmZlbGsuY3Z1dC5jej4KLSAqICAgICAgICAgICAgIFVwZGF0ZWQgZm9yIDIuNi4xNCBrZXJuZWwKLSAqCi0gKiAgMjAwNS0xMi0xMyBKYXkgTW9ua21hbiA8anRtQHNtb290aHNtb290aGllLmNvbT4KLSAqICAgICAgICAgICAgIEZvdW5kIGFuZCBjb3JyZWN0ZWQgcHJvYmxlbXMgaW4gdGhlIHdyaXRlIHBhdGgKLSAqCi0gKiAgMjAwNS0xMi0zMCBQYXZlbCBQaXNhIDxwaXNhQGNtcC5mZWxrLmN2dXQuY3o+Ci0gKiAgICAgICAgICAgICBUaGUgZXZlbnQgaGFuZGxpbmcgcmV3cml0dGVuIHJpZ2h0IHdheSBpbiBzb2Z0aXJxLgotICogICAgICAgICAgICAgQWRkZWQgbWFueSB1Z2x5IGhhY2tzIGFuZCBkZWxheXMgdG8gb3ZlcmNvbWUgU0RIQwotICogICAgICAgICAgICAgZGVmaWNpZW5jaWVzCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM3LDkgKzIzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KQEAgLTUwLDE3ICszNiwxNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAiaW14LW1tYyIKIAogI2RlZmluZSBJTVhNQ0lfSU5UX01BU0tfREVGQVVMVCAoSU5UX01BU0tfQlVGX1JFQURZIHwgSU5UX01BU0tfREFUQV9UUkFOIHwgXAotCSAgICAgICAgICAgICAgSU5UX01BU0tfV1JJVEVfT1BfRE9ORSB8IElOVF9NQVNLX0VORF9DTURfUkVTIHwgXAotCQkgICAgICBJTlRfTUFTS19BVVRPX0NBUkRfREVURUNUIHwgSU5UX01BU0tfREFUMF9FTiB8IElOVF9NQVNLX1NESU8pCisJCQkJIElOVF9NQVNLX1dSSVRFX09QX0RPTkUgfCBJTlRfTUFTS19FTkRfQ01EX1JFUyB8IFwKKwkJCQkgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVCB8IElOVF9NQVNLX0RBVDBfRU4gfCBJTlRfTUFTS19TRElPKQogCiBzdHJ1Y3QgaW14bWNpX2hvc3QgewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOwogCWludAkJCWlycTsKIAlpbXhfZG1hY2hfdAkJZG1hOwotCXVuc2lnbmVkIGludAkJY2xrcnQ7Ci0JdW5zaWduZWQgaW50CQljbWRhdDsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJaW1hc2s7CiAJdW5zaWduZWQgaW50CQlwb3dlcl9tb2RlOwogCXVuc2lnbmVkIGludAkJcHJlc2VudDsKQEAgLTc0LDcgKzU5LDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKIAl1bnNpZ25lZCBpbnQJCXN0YXR1c19yZWc7CiAJdW5zaWduZWQgbG9uZwkJcGVuZGluZ19ldmVudHM7Ci0JLyogTmV4dCB0byBmaWVsZHMgYXJlIHRoZXJlIGZvciBDUFUgZHJpdmVuIHRyYW5zZmVycyB0byBvdmVyY29tZSBTREhDIGRlZmljaWVuY2llcyAqLworCS8qIE5leHQgdHdvIGZpZWxkcyBhcmUgdGhlcmUgZm9yIENQVSBkcml2ZW4gdHJhbnNmZXJzIHRvIG92ZXJjb21lIFNESEMgZGVmaWNpZW5jaWVzICovCiAJdTE2CQkJKmRhdGFfcHRyOwogCXVuc2lnbmVkIGludAkJZGF0YV9jbnQ7CiAJYXRvbWljX3QJCXN0dWNrX3RpbWVvdXQ7CkBAIC0xMTQsMTQgKzk5LDIyIEBACiBzdGF0aWMgdm9pZCBpbXhtY2lfc3RvcF9jbG9jayhzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QpCiB7CiAJaW50IGkgPSAwOwotCU1NQ19TVFJfU1RQX0NMSyAmPSB+U1RSX1NUUF9DTEtfU1RBUlRfQ0xLOwotCXdoaWxlKGkgPCAweDEwMDApIHsKLQkgICAgICAgIGlmKCEoaSAmIDB4N2YpKQotCQkJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUT1BfQ0xLOworCXUxNiByZWc7CiAKLQkJaWYoIShNTUNfU1RBVFVTICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pKSB7CisJcmVnID0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RSX1NUUF9DTEspOworCXdyaXRldyhyZWcgJiB+U1RSX1NUUF9DTEtfU1RBUlRfQ0xLLCBob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CisJd2hpbGUgKGkgPCAweDEwMDApIHsKKwkJaWYgKCEoaSAmIDB4N2YpKSB7CisJCQlyZWcgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CisJCQl3cml0ZXcocmVnIHwgU1RSX1NUUF9DTEtfU1RPUF9DTEssCisJCQkJCWhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUUl9TVFBfQ0xLKTsKKwkJfQorCisJCXJlZyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CisJCWlmICghKHJlZyAmIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOKSkgewogCQkJLyogQ2hlY2sgdHdpY2UgYmVmb3JlIGN1dCAqLwotCQkJaWYoIShNTUNfU1RBVFVTICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pKQorCQkJcmVnID0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RBVFVTKTsKKwkJCWlmICghKHJlZyAmIFNUQVRVU19DQVJEX0JVU19DTEtfUlVOKSkKIAkJCQlyZXR1cm47CiAJCX0KIApAQCAtMTM1LDggKzEyOCwxMCBAQAogCXVuc2lnbmVkIGludCB0cmlhbHMgPSAwOwogCXVuc2lnbmVkIGludCBkZWxheV9saW1pdCA9IDEyODsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiByZWc7CiAKLQlNTUNfU1RSX1NUUF9DTEsgJj0gflNUUl9TVFBfQ0xLX1NUT1BfQ0xLOworCXJlZyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUUl9TVFBfQ0xLKTsKKwl3cml0ZXcocmVnICYgflNUUl9TVFBfQ0xLX1NUT1BfQ0xLLCBob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CiAKIAljbGVhcl9iaXQoSU1YTUNJX1BFTkRfU1RBUlRFRF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOwogCkBAIC0xNDUsMTggKzE0MCwyMSBAQAogCSAqIHRoZW4gNiBkZWxheSBsb29wcywgYnV0IGR1cmluZyBjYXJkIGRldGVjdGlvbiAobG93IGNsb2NrcmF0ZSkKIAkgKiBpdCB0YWtlcyB1cCB0byA1MDAwIGRlbGF5IGxvb3BzIGFuZCBzb21ldGltZXMgZmFpbHMgZm9yIHRoZSBmaXJzdCB0aW1lCiAJICovCi0JTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUQVJUX0NMSzsKKwlyZWcgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CisJd3JpdGV3KHJlZyB8IFNUUl9TVFBfQ0xLX1NUQVJUX0NMSywgaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RSX1NUUF9DTEspOwogCiAJZG8gewogCQl1bnNpZ25lZCBpbnQgZGVsYXkgPSBkZWxheV9saW1pdDsKIAotCQl3aGlsZShkZWxheS0tKXsKLQkJCWlmKE1NQ19TVEFUVVMgJiBTVEFUVVNfQ0FSRF9CVVNfQ0xLX1JVTikKKwkJd2hpbGUgKGRlbGF5LS0pIHsKKwkJCXJlZyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CisJCQlpZiAocmVnICYgU1RBVFVTX0NBUkRfQlVTX0NMS19SVU4pCiAJCQkJLyogQ2hlY2sgdHdpY2UgYmVmb3JlIGN1dCAqLwotCQkJCWlmKE1NQ19TVEFUVVMgJiBTVEFUVVNfQ0FSRF9CVVNfQ0xLX1JVTikKKwkJCQlyZWcgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOworCQkJCWlmIChyZWcgJiBTVEFUVVNfQ0FSRF9CVVNfQ0xLX1JVTikKIAkJCQkJcmV0dXJuIDA7CiAKLQkJCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX1NUQVJURURfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMTY3LDU4ICsxNjUsNTkgQEAKIAkJICogSVJRIG9yIHNjaGVkdWxlIGRlbGF5cyB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGlvbiBhbmQgdGhlIGNsb2NrcyBoYXMKIAkJICogYmVlbiBhbHJlYWR5IHN0b3BwZWQgYnkgb3RoZXIgbWVhbnMgKHJlc3BvbnNlIHByb2Nlc3NpbmcsIFNESEMgSFcpCiAJCSAqLwotCQlpZighdGVzdF9iaXQoSU1YTUNJX1BFTkRfU1RBUlRFRF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQotCQkJTU1DX1NUUl9TVFBfQ0xLIHw9IFNUUl9TVFBfQ0xLX1NUQVJUX0NMSzsKKwkJaWYgKCF0ZXN0X2JpdChJTVhNQ0lfUEVORF9TVEFSVEVEX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJCXJlZyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUUl9TVFBfQ0xLKTsKKwkJCXdyaXRldyhyZWcgfCBTVFJfU1RQX0NMS19TVEFSVF9DTEssCisJCQkJCWhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUUl9TVFBfQ0xLKTsKKwkJfQogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQl9IHdoaWxlKCsrdHJpYWxzPDI1Nik7CisJfSB3aGlsZSAoKyt0cmlhbHMgPCAyNTYpOwogCiAJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfc3RhcnRfY2xvY2sgYmxvY2tlZCwgbm8gbHVja1xuIik7CiAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIGlteG1jaV9zb2Z0cmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIGlteG1jaV9zb2Z0cmVzZXQoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0KQogewotCS8qIHJlc2V0IHNlcXVlbmNlICovCi0JTU1DX1NUUl9TVFBfQ0xLID0gMHg4OwotCU1NQ19TVFJfU1RQX0NMSyA9IDB4RDsKLQlNTUNfU1RSX1NUUF9DTEsgPSAweDU7Ci0JTU1DX1NUUl9TVFBfQ0xLID0gMHg1OwotCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKLQlNTUNfU1RSX1NUUF9DTEsgPSAweDU7Ci0JTU1DX1NUUl9TVFBfQ0xLID0gMHg1OwotCU1NQ19TVFJfU1RQX0NMSyA9IDB4NTsKLQlNTUNfU1RSX1NUUF9DTEsgPSAweDU7Ci0JTU1DX1NUUl9TVFBfQ0xLID0gMHg1OworCWludCBpOwogCi0JTU1DX1JFU19UTyA9IDB4ZmY7Ci0JTU1DX0JMS19MRU4gPSA1MTI7Ci0JTU1DX05PQiA9IDE7CisJLyogcmVzZXQgc2VxdWVuY2UgKi8KKwl3cml0ZXcoMHgwOCwgaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RSX1NUUF9DTEspOworCXdyaXRldygweDBELCBob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQl3cml0ZXcoMHgwNSwgaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RSX1NUUF9DTEspOworCisJd3JpdGV3KDB4ZmYsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFU19UTyk7CisJd3JpdGV3KDUxMiwgaG9zdC0+YmFzZSArIE1NQ19SRUdfQkxLX0xFTik7CisJd3JpdGV3KDEsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX05PQik7CiB9CiAKIHN0YXRpYyBpbnQgaW14bWNpX2J1c3lfd2FpdF9mb3Jfc3RhdHVzKHN0cnVjdCBpbXhtY2lfaG9zdCAqaG9zdCwKLQkJCXVuc2lnbmVkIGludCAqcHN0YXQsIHVuc2lnbmVkIGludCBzdGF0X21hc2ssCi0JCQlpbnQgdGltZW91dCwgY29uc3QgY2hhciAqd2hlcmUpCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHN0YXQsIHVuc2lnbmVkIGludCBzdGF0X21hc2ssCisJCQkJICAgICAgIGludCB0aW1lb3V0LCBjb25zdCBjaGFyICp3aGVyZSkKIHsKLQlpbnQgbG9vcHM9MDsKLQl3aGlsZSghKCpwc3RhdCAmIHN0YXRfbWFzaykpIHsKLQkJbG9vcHMrPTI7Ci0JCWlmKGxvb3BzID49IHRpbWVvdXQpIHsKKwlpbnQgbG9vcHMgPSAwOworCisJd2hpbGUgKCEoKnBzdGF0ICYgc3RhdF9tYXNrKSkgeworCQlsb29wcyArPSAyOworCQlpZiAobG9vcHMgPj0gdGltZW91dCkgewogCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJidXN5IHdhaXQgdGltZW91dCBpbiAlcywgU1RBVFVTID0gMHgleCAoMHgleClcbiIsCiAJCQkJd2hlcmUsICpwc3RhdCwgc3RhdF9tYXNrKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQl1ZGVsYXkoMik7Ci0JCSpwc3RhdCB8PSBNTUNfU1RBVFVTOworCQkqcHN0YXQgfD0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RBVFVTKTsKIAl9Ci0JaWYoIWxvb3BzKQorCWlmICghbG9vcHMpCiAJCXJldHVybiAwOwogCiAJLyogVGhlIGJ1c3ktd2FpdCBpcyBleHBlY3RlZCB0aGVyZSBmb3IgY2xvY2sgPDhNSHogZHVlIHRvIFNESEMgaGFyZHdhcmUgZmxhd3MgKi8KLQlpZighKHN0YXRfbWFzayAmIFNUQVRVU19FTkRfQ01EX1JFU1ApIHx8IChob3N0LT5tbWMtPmlvcy5jbG9jaz49ODAwMDAwMCkpCisJaWYgKCEoc3RhdF9tYXNrICYgU1RBVFVTX0VORF9DTURfUkVTUCkgfHwgKGhvc3QtPm1tYy0+aW9zLmNsb2NrID49IDgwMDAwMDApKQogCQlkZXZfaW5mbyhtbWNfZGV2KGhvc3QtPm1tYyksICJidXN5IHdhaXQgZm9yICVkIHVzZWMgaW4gJXMsIFNUQVRVUyA9IDB4JXggKDB4JXgpXG4iLAotCQkJbG9vcHMsIHdoZXJlLCAqcHN0YXQsIHN0YXRfbWFzayk7CisJCQkgbG9vcHMsIHdoZXJlLCAqcHN0YXQsIHN0YXRfbWFzayk7CiAJcmV0dXJuIGxvb3BzOwogfQogCkBAIC0yMzUsOCArMjM0LDggQEAKIAlob3N0LT5kYXRhID0gZGF0YTsKIAlkYXRhLT5ieXRlc194ZmVyZWQgPSAwOwogCi0JTU1DX05PQiA9IG5vYjsKLQlNTUNfQkxLX0xFTiA9IGJsa3N6OworCXdyaXRldyhub2IsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX05PQik7CisJd3JpdGV3KGJsa3N6LCBob3N0LT5iYXNlICsgTU1DX1JFR19CTEtfTEVOKTsKIAogCS8qCiAJICogRE1BIGNhbm5vdCBiZSB1c2VkIGZvciBzbWFsbCBibG9jayBzaXplcywgd2UgaGF2ZSB0byB1c2UgQ1BVIGRyaXZlbiB0cmFuc2ZlcnMgb3RoZXJ3aXNlLgpAQCAtMjUyLDE0ICsyNTEsMTQgQEAKIAkJCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CiAKIAkJCS8qIEhhY2sgdG8gZW5hYmxlIHJlYWQgU0NSICovCi0JCQlNTUNfTk9CID0gMTsKLQkJCU1NQ19CTEtfTEVOID0gNTEyOworCQkJd3JpdGV3KDEsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX05PQik7CisJCQl3cml0ZXcoNTEyLCBob3N0LT5iYXNlICsgTU1DX1JFR19CTEtfTEVOKTsKIAkJfSBlbHNlIHsKIAkJCWhvc3QtPmRtYV9kaXIgPSBETUFfVE9fREVWSUNFOwogCQl9CiAKIAkJLyogQ29udmVydCBiYWNrIHRvIHZpcnR1YWwgYWRkcmVzcyAqLwotCQlob3N0LT5kYXRhX3B0ciA9ICh1MTYqKXNnX3ZpcnQoZGF0YS0+c2cpOworCQlob3N0LT5kYXRhX3B0ciA9ICh1MTYgKilzZ192aXJ0KGRhdGEtPnNnKTsKIAkJaG9zdC0+ZGF0YV9jbnQgPSAwOwogCiAJCWNsZWFyX2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOwpAQCAtMjcxLDEwICsyNzAsMTEgQEAKIAlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CiAJCWhvc3QtPmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CiAJCWhvc3QtPmRtYV9uZW50cyA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKLQkJCQkJCWRhdGEtPnNnX2xlbiwgIGhvc3QtPmRtYV9kaXIpOworCQkJCQkgICAgIGRhdGEtPnNnX2xlbiwgIGhvc3QtPmRtYV9kaXIpOwogCiAJCWlteF9kbWFfc2V0dXBfc2coaG9zdC0+ZG1hLCBkYXRhLT5zZywgZGF0YS0+c2dfbGVuLCBkYXRhc3osCi0JCQlob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX0JVRkZFUl9BQ0NFU1NfT0ZTLCBETUFfTU9ERV9SRUFEKTsKKwkJCQkgaG9zdC0+cmVzLT5zdGFydCArIE1NQ19SRUdfQlVGRkVSX0FDQ0VTUywKKwkJCQkgRE1BX01PREVfUkVBRCk7CiAKIAkJLyppbXhfZG1hX3NldHVwX21lbTJkZXZfY2NyKGhvc3QtPmRtYSwgRE1BX01PREVfUkVBRCwgSU1YX0RNQV9XSURUSF8xNiwgQ0NSX1JFTik7Ki8KIAkJQ0NSKGhvc3QtPmRtYSkgPSBDQ1JfRE1PRF9MSU5FQVIgfCBDQ1JfRFNJWl8zMiB8IENDUl9TTU9EX0ZJRk8gfCBDQ1JfU1NJWl8xNiB8IENDUl9SRU47CkBAIC0yODIsMTAgKzI4MiwxMSBAQAogCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKIAogCQlob3N0LT5kbWFfbmVudHMgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCi0JCQkJCQlkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKKwkJCQkJICAgICBkYXRhLT5zZ19sZW4sICBob3N0LT5kbWFfZGlyKTsKIAogCQlpbXhfZG1hX3NldHVwX3NnKGhvc3QtPmRtYSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGF0YXN6LAotCQkJaG9zdC0+cmVzLT5zdGFydCArIE1NQ19CVUZGRVJfQUNDRVNTX09GUywgRE1BX01PREVfV1JJVEUpOworCQkJCSBob3N0LT5yZXMtPnN0YXJ0ICsgTU1DX1JFR19CVUZGRVJfQUNDRVNTLAorCQkJCSBETUFfTU9ERV9XUklURSk7CiAKIAkJLyppbXhfZG1hX3NldHVwX21lbTJkZXZfY2NyKGhvc3QtPmRtYSwgRE1BX01PREVfV1JJVEUsIElNWF9ETUFfV0lEVEhfMTYsIENDUl9SRU4pOyovCiAJCUNDUihob3N0LT5kbWEpID0gQ0NSX1NNT0RfTElORUFSIHwgQ0NSX1NTSVpfMzIgfCBDQ1JfRE1PRF9GSUZPIHwgQ0NSX0RTSVpfMTYgfCBDQ1JfUkVOOwpAQCAtMjkzLDEyICsyOTQsMTIgQEAKIAogI2lmIDEJLyogVGhpcyBjb2RlIGlzIHRoZXJlIG9ubHkgZm9yIGNvbnNpc3RlbmN5IGNoZWNraW5nIGFuZCBjYW4gYmUgZGlzYWJsZWQgaW4gZnV0dXJlICovCiAJaG9zdC0+ZG1hX3NpemUgPSAwOwotCWZvcihpPTA7IGk8aG9zdC0+ZG1hX25lbnRzOyBpKyspCi0JCWhvc3QtPmRtYV9zaXplKz1kYXRhLT5zZ1tpXS5sZW5ndGg7CisJZm9yIChpID0gMDsgaSA8IGhvc3QtPmRtYV9uZW50czsgaSsrKQorCQlob3N0LT5kbWFfc2l6ZSArPSBkYXRhLT5zZ1tpXS5sZW5ndGg7CiAKIAlpZiAoZGF0YXN6ID4gaG9zdC0+ZG1hX3NpemUpIHsKIAkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfc2V0dXBfZGF0YSBkYXRhc3ogMHgleCA+IDB4JXggZG1fc2l6ZVxuIiwKLQkJICAgICAgIGRhdGFzeiwgaG9zdC0+ZG1hX3NpemUpOworCQkJZGF0YXN6LCBob3N0LT5kbWFfc2l6ZSk7CiAJfQogI2VuZGlmCiAKQEAgLTMwNiw3ICszMDcsNyBAQAogCiAJd21iKCk7CiAKLQlpZihob3N0LT5hY3R1YWxfYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKKwlpZiAoaG9zdC0+YWN0dWFsX2J1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCiAJCUJMUihob3N0LT5kbWEpID0gMDsJLyogYnVyc3QgNjQgYnl0ZSByZWFkIC8gNjQgYnl0ZXMgd3JpdGUgKi8KIAllbHNlCiAJCUJMUihob3N0LT5kbWEpID0gMTY7CS8qIGJ1cnN0IDE2IGJ5dGUgcmVhZCAvIDE2IGJ5dGVzIHdyaXRlICovCkBAIC0zMTcsOSArMzE4LDggQEAKIAljbGVhcl9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKIAogCS8qIHN0YXJ0IERNQSBlbmdpbmUgZm9yIHJlYWQsIHdyaXRlIGlzIGRlbGF5ZWQgYWZ0ZXIgaW5pdGlhbCByZXNwb25zZSAqLwotCWlmIChob3N0LT5kbWFfZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCWlmIChob3N0LT5kbWFfZGlyID09IERNQV9GUk9NX0RFVklDRSkKIAkJaW14X2RtYV9lbmFibGUoaG9zdC0+ZG1hKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGlteG1jaV9zdGFydF9jbWQoc3RydWN0IGlteG1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwgdW5zaWduZWQgaW50IGNtZGF0KQpAQCAtMzUxLDE2ICszNTEsMTYgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKCB0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfU0VUX0lOSVRfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSApCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9TRVRfSU5JVF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQogCQljbWRhdCB8PSBDTURfREFUX0NPTlRfSU5JVDsgLyogVGhpcyBjb21tYW5kIG5lZWRzIGluaXQgKi8KIAotCWlmICggaG9zdC0+YWN0dWFsX2J1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQgKQorCWlmIChob3N0LT5hY3R1YWxfYnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKIAkJY21kYXQgfD0gQ01EX0RBVF9DT05UX0JVU19XSURUSF80OwogCi0JTU1DX0NNRCA9IGNtZC0+b3Bjb2RlOwotCU1NQ19BUkdIID0gY21kLT5hcmcgPj4gMTY7Ci0JTU1DX0FSR0wgPSBjbWQtPmFyZyAmIDB4ZmZmZjsKLQlNTUNfQ01EX0RBVF9DT05UID0gY21kYXQ7CisJd3JpdGV3KGNtZC0+b3Bjb2RlLCBob3N0LT5iYXNlICsgTU1DX1JFR19DTUQpOworCXdyaXRldyhjbWQtPmFyZyA+PiAxNiwgaG9zdC0+YmFzZSArIE1NQ19SRUdfQVJHSCk7CisJd3JpdGV3KGNtZC0+YXJnICYgMHhmZmZmLCBob3N0LT5iYXNlICsgTU1DX1JFR19BUkdMKTsKKwl3cml0ZXcoY21kYXQsIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0NNRF9EQVRfQ09OVCk7CiAKIAlhdG9taWNfc2V0KCZob3N0LT5zdHVja190aW1lb3V0LCAwKTsKIAlzZXRfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpOwpAQCAtMzY4LDE4ICszNjgsMTggQEAKIAogCWltYXNrID0gSU1YTUNJX0lOVF9NQVNLX0RFRkFVTFQ7CiAJaW1hc2sgJj0gfklOVF9NQVNLX0VORF9DTURfUkVTOwotCWlmICggY21kYXQgJiBDTURfREFUX0NPTlRfREFUQV9FTkFCTEUgKSB7Ci0JCS8qaW1hc2sgJj0gfklOVF9NQVNLX0JVRl9SRUFEWTsqLworCWlmIChjbWRhdCAmIENNRF9EQVRfQ09OVF9EQVRBX0VOQUJMRSkgeworCQkvKiBpbWFzayAmPSB+SU5UX01BU0tfQlVGX1JFQURZOyAqLwogCQlpbWFzayAmPSB+SU5UX01BU0tfREFUQV9UUkFOOwotCQlpZiAoIGNtZGF0ICYgQ01EX0RBVF9DT05UX1dSSVRFICkKKwkJaWYgKGNtZGF0ICYgQ01EX0RBVF9DT05UX1dSSVRFKQogCQkJaW1hc2sgJj0gfklOVF9NQVNLX1dSSVRFX09QX0RPTkU7Ci0JCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0NQVV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCisJCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9DUFVfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQogCQkJaW1hc2sgJj0gfklOVF9NQVNLX0JVRl9SRUFEWTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCWhvc3QtPmltYXNrID0gaW1hc2s7Ci0JTU1DX0lOVF9NQVNLID0gaG9zdC0+aW1hc2s7CisJd3JpdGV3KGhvc3QtPmltYXNrLCBob3N0LT5iYXNlICsgTU1DX1JFR19JTlRfTUFTSyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJDTUQlMDJkICgweCUwMngpIG1hc2sgc2V0IHRvIDB4JTA0eFxuIiwKQEAgLTM5NSwxNCArMzk1LDE0IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCWhvc3QtPnBlbmRpbmdfZXZlbnRzICY9IH4oSU1YTUNJX1BFTkRfV0FJVF9SRVNQX20gfCBJTVhNQ0lfUEVORF9ETUFfRU5EX20gfAotCQkJSU1YTUNJX1BFTkRfRE1BX0RBVEFfbSB8IElNWE1DSV9QRU5EX0NQVV9EQVRBX20pOworCQkJCSAgSU1YTUNJX1BFTkRfRE1BX0RBVEFfbSB8IElNWE1DSV9QRU5EX0NQVV9EQVRBX20pOwogCiAJaG9zdC0+aW1hc2sgPSBJTVhNQ0lfSU5UX01BU0tfREVGQVVMVDsKLQlNTUNfSU5UX01BU0sgPSBob3N0LT5pbWFzazsKKwl3cml0ZXcoaG9zdC0+aW1hc2ssIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0lOVF9NQVNLKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAotCWlmKHJlcSAmJiByZXEtPmNtZCkKKwlpZiAocmVxICYmIHJlcS0+Y21kKQogCQlob3N0LT5wcmV2X2NtZF9jb2RlID0gcmVxLT5jbWQtPm9wY29kZTsKIAogCWhvc3QtPnJlcSA9IE5VTEw7CkBAIC00MTYsMTcgKzQxNiwxNyBAQAogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmRhdGE7CiAJaW50IGRhdGFfZXJyb3I7CiAKLQlpZih0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSl7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CiAJCWlteF9kbWFfZGlzYWJsZShob3N0LT5kbWEpOwogCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+ZG1hX25lbnRzLAogCQkJICAgICBob3N0LT5kbWFfZGlyKTsKIAl9CiAKLQlpZiAoIHN0YXQgJiBTVEFUVVNfRVJSX01BU0sgKSB7Ci0JCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAicmVxdWVzdCBmYWlsZWQuIHN0YXR1czogMHglMDh4XG4iLHN0YXQpOwotCQlpZihzdGF0ICYgKFNUQVRVU19DUkNfUkVBRF9FUlIgfCBTVEFUVVNfQ1JDX1dSSVRFX0VSUikpCisJaWYgKHN0YXQgJiBTVEFUVVNfRVJSX01BU0spIHsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJyZXF1ZXN0IGZhaWxlZC4gc3RhdHVzOiAweCUwOHhcbiIsIHN0YXQpOworCQlpZiAoc3RhdCAmIChTVEFUVVNfQ1JDX1JFQURfRVJSIHwgU1RBVFVTX0NSQ19XUklURV9FUlIpKQogCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwotCQllbHNlIGlmKHN0YXQgJiBTVEFUVVNfVElNRV9PVVRfUkVBRCkKKwkJZWxzZSBpZiAoc3RhdCAmIFNUQVRVU19USU1FX09VVF9SRUFEKQogCQkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCQllbHNlCiAJCQlkYXRhLT5lcnJvciA9IC1FSU87CkBAIC00NDUsNyArNDQ1LDcgQEAKIHsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IGhvc3QtPmNtZDsKIAlpbnQgaTsKLQl1MzIgYSxiLGM7CisJdTMyIGEsIGIsIGM7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhID0gaG9zdC0+ZGF0YTsKIAogCWlmICghY21kKQpAQCAtNDYxLDE4ICs0NjEsMTggQEAKIAkJY21kLT5lcnJvciA9IC1FSUxTRVE7CiAJfQogCi0JaWYoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgewotCQlpZihjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJdTMyIGEgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7Ci0JCQkJdTMyIGIgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7Ci0JCQkJY21kLT5yZXNwW2ldID0gYTw8MTYgfCBiOworCQkJCWEgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19SRVNfRklGTyk7CisJCQkJYiA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFU19GSUZPKTsKKwkJCQljbWQtPnJlc3BbaV0gPSBhIDw8IDE2IHwgYjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWEgPSBNTUNfUkVTX0ZJRk8gJiAweGZmZmY7Ci0JCQliID0gTU1DX1JFU19GSUZPICYgMHhmZmZmOwotCQkJYyA9IE1NQ19SRVNfRklGTyAmIDB4ZmZmZjsKLQkJCWNtZC0+cmVzcFswXSA9IGE8PDI0IHwgYjw8OCB8IGM+Pjg7CisJCQlhID0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfUkVTX0ZJRk8pOworCQkJYiA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFU19GSUZPKTsKKwkJCWMgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19SRVNfRklGTyk7CisJCQljbWQtPnJlc3BbMF0gPSBhIDw8IDI0IHwgYiA8PCA4IHwgYyA+PiA4OwogCQl9CiAJfQogCkBAIC00ODQsMzYgKzQ4NCwzNCBAQAogCiAJCQkvKiBXYWl0IGZvciBGSUZPIHRvIGJlIGVtcHR5IGJlZm9yZSBzdGFydGluZyBETUEgd3JpdGUgKi8KIAotCQkJc3RhdCA9IE1NQ19TVEFUVVM7Ci0JCQlpZihpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCi0JCQkJU1RBVFVTX0FQUExfQlVGRl9GRSwKLQkJCQk0MCwgImlteG1jaV9jbWRfZG9uZSBETUEgV1IiKSA8IDApIHsKKwkJCXN0YXQgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOworCQkJaWYgKGlteG1jaV9idXN5X3dhaXRfZm9yX3N0YXR1cyhob3N0LCAmc3RhdCwKKwkJCQkJCQlTVEFUVVNfQVBQTF9CVUZGX0ZFLAorCQkJCQkJCTQwLCAiaW14bWNpX2NtZF9kb25lIERNQSBXUiIpIDwgMCkgewogCQkJCWNtZC0+ZXJyb3IgPSAtRUlPOwogCQkJCWlteG1jaV9maW5pc2hfZGF0YShob3N0LCBzdGF0KTsKLQkJCQlpZihob3N0LT5yZXEpCisJCQkJaWYgKGhvc3QtPnJlcSkKIAkJCQkJaW14bWNpX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIGhvc3QtPnJlcSk7CiAJCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiU1RBVFVTID0gMHglMDR4XG4iLAotCQkJCSAgICAgICBzdGF0KTsKKwkJCQkJIHN0YXQpOwogCQkJCXJldHVybiAwOwogCQkJfQogCi0JCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKIAkJCQlpbXhfZG1hX2VuYWJsZShob3N0LT5kbWEpOwotCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IG1tY19yZXF1ZXN0ICpyZXE7CiAJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOwogCQlyZXEgPSBob3N0LT5yZXE7CiAKLQkJaWYoZGF0YSkKKwkJaWYgKGRhdGEpCiAJCQlpbXhtY2lfZmluaXNoX2RhdGEoaG9zdCwgc3RhdCk7CiAKLQkJaWYoIHJlcSApIHsKKwkJaWYgKHJlcSkKIAkJCWlteG1jaV9maW5pc2hfcmVxdWVzdChob3N0LCByZXEpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY21kX2RvbmU6IG5vIHJlcXVlc3QgdG8gZmluaXNoXG4iKTsKLQkJfQogCX0KIAogCXJldHVybiAxOwpAQCAtNTM1LDExICs1MzMsMTAgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcTsKIAkJcmVxID0gaG9zdC0+cmVxOwotCQlpZiggcmVxICkgeworCQlpZiAocmVxKQogCQkJaW14bWNpX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIHJlcSk7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9kYXRhX2RvbmU6IG5vIHJlcXVlc3QgdG8gZmluaXNoXG4iKTsKLQkJfQogCX0KIAogCXJldHVybiAxOwpAQCAtNTUyLDcgKzU0OSw3IEBACiAJaW50IHRyYW5zX2RvbmUgPSAwOwogCXVuc2lnbmVkIGludCBzdGF0ID0gKnBzdGF0OwogCi0JaWYoaG9zdC0+YWN0dWFsX2J1c193aWR0aCAhPSBNTUNfQlVTX1dJRFRIXzQpCisJaWYgKGhvc3QtPmFjdHVhbF9idXNfd2lkdGggIT0gTU1DX0JVU19XSURUSF80KQogCQlidXJzdF9sZW4gPSAxNjsKIAllbHNlCiAJCWJ1cnN0X2xlbiA9IDY0OwpAQCAtNTYzLDQ0ICs1NjAsNDQgQEAKIAogCXVkZWxheSgyMCk7CS8qIHJlcXVpcmVkIGZvciBjbG9ja3MgPCA4TUh6Ki8KIAotCWlmKGhvc3QtPmRtYV9kaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJaWYgKGhvc3QtPmRtYV9kaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CiAJCWlteG1jaV9idXN5X3dhaXRfZm9yX3N0YXR1cyhob3N0LCAmc3RhdCwKLQkJCQlTVEFUVVNfQVBQTF9CVUZGX0ZGIHwgU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSB8Ci0JCQkJU1RBVFVTX1RJTUVfT1VUX1JFQUQsCi0JCQkJNTAsICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQiKTsKKwkJCQkJICAgIFNUQVRVU19BUFBMX0JVRkZfRkYgfCBTVEFUVVNfREFUQV9UUkFOU19ET05FIHwKKwkJCQkJICAgIFNUQVRVU19USU1FX09VVF9SRUFELAorCQkJCQkgICAgNTAsICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQiKTsKIAotCQl3aGlsZSgoc3RhdCAmIChTVEFUVVNfQVBQTF9CVUZGX0ZGIHwgIFNUQVRVU19EQVRBX1RSQU5TX0RPTkUpKSAmJgotCQkgICAgICAhKHN0YXQgJiBTVEFUVVNfVElNRV9PVVRfUkVBRCkgJiYKLQkJICAgICAgKGhvc3QtPmRhdGFfY250IDwgNTEyKSkgeworCQl3aGlsZSAoKHN0YXQgJiAoU1RBVFVTX0FQUExfQlVGRl9GRiB8IFNUQVRVU19EQVRBX1RSQU5TX0RPTkUpKSAmJgorCQkgICAgICAgIShzdGF0ICYgU1RBVFVTX1RJTUVfT1VUX1JFQUQpICYmCisJCSAgICAgICAoaG9zdC0+ZGF0YV9jbnQgPCA1MTIpKSB7CiAKIAkJCXVkZWxheSgyMCk7CS8qIHJlcXVpcmVkIGZvciBjbG9ja3MgPCA4TUh6Ki8KIAotCQkJZm9yKGkgPSBidXJzdF9sZW47IGk+PTIgOyBpLT0yKSB7CisJCQlmb3IgKGkgPSBidXJzdF9sZW47IGkgPj0gMiA7IGkgLT0gMikgewogCQkJCXUxNiBkYXRhOwotCQkJCWRhdGEgPSBNTUNfQlVGRkVSX0FDQ0VTUzsKKwkJCQlkYXRhID0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfQlVGRkVSX0FDQ0VTUyk7CiAJCQkJdWRlbGF5KDEwKTsJLyogcmVxdWlyZWQgZm9yIGNsb2NrcyA8IDhNSHoqLwotCQkJCWlmKGhvc3QtPmRhdGFfY250KzIgPD0gaG9zdC0+ZG1hX3NpemUpIHsKKwkJCQlpZiAoaG9zdC0+ZGF0YV9jbnQrMiA8PSBob3N0LT5kbWFfc2l6ZSkgewogCQkJCQkqKGhvc3QtPmRhdGFfcHRyKyspID0gZGF0YTsKIAkJCQl9IGVsc2UgewotCQkJCQlpZihob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKQotCQkJCQkJKih1OCopKGhvc3QtPmRhdGFfcHRyKSA9IGRhdGE7CisJCQkJCWlmIChob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKQorCQkJCQkJKih1OCAqKShob3N0LT5kYXRhX3B0cikgPSBkYXRhOwogCQkJCX0KIAkJCQlob3N0LT5kYXRhX2NudCArPSAyOwogCQkJfQogCi0JCQlzdGF0ID0gTU1DX1NUQVRVUzsKKwkJCXN0YXQgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOwogCiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgcmVhZCAlZCBidXJzdCAlZCBTVEFUVVMgPSAweCV4XG4iLAogCQkJCWhvc3QtPmRhdGFfY250LCBidXJzdF9sZW4sIHN0YXQpOwogCQl9CiAKLQkJaWYoKHN0YXQgJiBTVEFUVVNfREFUQV9UUkFOU19ET05FKSAmJiAoaG9zdC0+ZGF0YV9jbnQgPj0gNTEyKSkKKwkJaWYgKChzdGF0ICYgU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSkgJiYgKGhvc3QtPmRhdGFfY250ID49IDUxMikpCiAJCQl0cmFuc19kb25lID0gMTsKIAotCQlpZihob3N0LT5kbWFfc2l6ZSAmIDB4MWZmKQorCQlpZiAoaG9zdC0+ZG1hX3NpemUgJiAweDFmZikKIAkJCXN0YXQgJj0gflNUQVRVU19DUkNfUkVBRF9FUlI7CiAKLQkJaWYoc3RhdCAmIFNUQVRVU19USU1FX09VVF9SRUFEKSB7CisJCWlmIChzdGF0ICYgU1RBVFVTX1RJTUVfT1VUX1JFQUQpIHsKIAkJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiaW14bWNpX2NwdV9kcml2ZW5fZGF0YSByZWFkIHRpbWVvdXQgU1RBVFVTID0gMHgleFxuIiwKIAkJCQlzdGF0KTsKIAkJCXRyYW5zX2RvbmUgPSAtMTsKQEAgLTYwOCwxMiArNjA1LDEyIEBACiAKIAl9IGVsc2UgewogCQlpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCi0JCQkJU1RBVFVTX0FQUExfQlVGRl9GRSwKLQkJCQkyMCwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgd3JpdGUiKTsKKwkJCQkJICAgIFNUQVRVU19BUFBMX0JVRkZfRkUsCisJCQkJCSAgICAyMCwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgd3JpdGUiKTsKIAotCQl3aGlsZSgoc3RhdCAmIFNUQVRVU19BUFBMX0JVRkZfRkUpICYmCi0JCSAgICAgIChob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKSkgewotCQkJaWYoYnVyc3RfbGVuID49IGhvc3QtPmRtYV9zaXplIC0gaG9zdC0+ZGF0YV9jbnQpIHsKKwkJd2hpbGUgKChzdGF0ICYgU1RBVFVTX0FQUExfQlVGRl9GRSkgJiYKKwkJICAgICAgIChob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKSkgeworCQkJaWYgKGJ1cnN0X2xlbiA+PSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250KSB7CiAJCQkJYnVyc3RfbGVuID0gaG9zdC0+ZG1hX3NpemUgLSBob3N0LT5kYXRhX2NudDsKIAkJCQlob3N0LT5kYXRhX2NudCA9IGhvc3QtPmRtYV9zaXplOwogCQkJCXRyYW5zX2RvbmUgPSAxOwpAQCAtNjIxLDEwICs2MTgsMTAgQEAKIAkJCQlob3N0LT5kYXRhX2NudCArPSBidXJzdF9sZW47CiAJCQl9CiAKLQkJCWZvcihpID0gYnVyc3RfbGVuOyBpPjAgOyBpLT0yKQotCQkJCU1NQ19CVUZGRVJfQUNDRVNTID0gKihob3N0LT5kYXRhX3B0cisrKTsKKwkJCWZvciAoaSA9IGJ1cnN0X2xlbjsgaSA+IDAgOyBpIC09IDIpCisJCQkJd3JpdGV3KCooaG9zdC0+ZGF0YV9wdHIrKyksIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0JVRkZFUl9BQ0NFU1MpOwogCi0JCQlzdGF0ID0gTU1DX1NUQVRVUzsKKwkJCXN0YXQgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOwogCiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgd3JpdGUgYnVyc3QgJWQgU1RBVFVTID0gMHgleFxuIiwKIAkJCQlidXJzdF9sZW4sIHN0YXQpOwpAQCAtNjM5LDcgKzYzNiw3IEBACiBzdGF0aWMgdm9pZCBpbXhtY2lfZG1hX2lycShpbnQgZG1hLCB2b2lkICpkZXZpZCkKIHsKIAlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBkZXZpZDsKLQl1aW50MzJfdCBzdGF0ID0gTU1DX1NUQVRVUzsKKwl1MzIgc3RhdCA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CiAKIAlhdG9taWNfc2V0KCZob3N0LT5zdHVja190aW1lb3V0LCAwKTsKIAlob3N0LT5zdGF0dXNfcmVnID0gc3RhdDsKQEAgLTY1MCwxMCArNjQ3LDExIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14bWNpX2lycShpbnQgaXJxLCB2b2lkICpkZXZpZCkKIHsKIAlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBkZXZpZDsKLQl1aW50MzJfdCBzdGF0ID0gTU1DX1NUQVRVUzsKKwl1MzIgc3RhdCA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CiAJaW50IGhhbmRsZWQgPSAxOwogCi0JTU1DX0lOVF9NQVNLID0gaG9zdC0+aW1hc2sgfCBJTlRfTUFTS19TRElPIHwgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVDsKKwl3cml0ZXcoaG9zdC0+aW1hc2sgfCBJTlRfTUFTS19TRElPIHwgSU5UX01BU0tfQVVUT19DQVJEX0RFVEVDVCwKKwkJCWhvc3QtPmJhc2UgKyBNTUNfUkVHX0lOVF9NQVNLKTsKIAogCWF0b21pY19zZXQoJmhvc3QtPnN0dWNrX3RpbWVvdXQsIDApOwogCWhvc3QtPnN0YXR1c19yZWcgPSBzdGF0OwpAQCAtNjcxLDEwICs2NjksMTAgQEAKIAl1bnNpZ25lZCBpbnQgZGF0YV9kaXJfbWFzayA9IDA7CS8qIFNUQVRVU19XUl9DUkNfRVJST1JfQ09ERV9NQVNLICovCiAJaW50IHRpbWVvdXQgPSAwOwogCi0JaWYoYXRvbWljX3JlYWQoJmhvc3QtPnN0dWNrX3RpbWVvdXQpID4gNCkgeworCWlmIChhdG9taWNfcmVhZCgmaG9zdC0+c3R1Y2tfdGltZW91dCkgPiA0KSB7CiAJCWNoYXIgKndoYXQ7CiAJCXRpbWVvdXQgPSAxOwotCQlzdGF0ID0gTU1DX1NUQVRVUzsKKwkJc3RhdCA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CiAJCWhvc3QtPnN0YXR1c19yZWcgPSBzdGF0OwogCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCiAJCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKQEAgLTY4MywyOSArNjgxLDM3IEBACiAJCQkJd2hhdCA9ICJSRVNQIjsKIAkJZWxzZQogCQkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCi0JCQkJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0VORF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQkJCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCiAJCQkJCXdoYXQgPSAiREFUQSI7CiAJCQkJZWxzZQogCQkJCQl3aGF0ID0gIkRNQSI7CiAJCQllbHNlCiAJCQkJd2hhdCA9ICI/Pz8iOwogCi0JCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiJXMgVElNRU9VVCwgaGFyZHdhcmUgc3R1Y2tlZCBTVEFUVVMgPSAweCUwNHggSU1BU0sgPSAweCUwNHhcbiIsCi0JCSAgICAgICB3aGF0LCBzdGF0LCBNTUNfSU5UX01BU0spOwotCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRF9EQVRfQ09OVCA9IDB4JTA0eCwgTU1DX0JMS19MRU4gPSAweCUwNHgsIE1NQ19OT0IgPSAweCUwNHgsIERNQV9DQ1IgPSAweCUwOHhcbiIsCi0JCSAgICAgICBNTUNfQ01EX0RBVF9DT05ULCBNTUNfQkxLX0xFTiwgTU1DX05PQiwgQ0NSKGhvc3QtPmRtYSkpOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSIlcyBUSU1FT1VULCBoYXJkd2FyZSBzdHVja2VkIFNUQVRVUyA9IDB4JTA0eCBJTUFTSyA9IDB4JTA0eFxuIiwKKwkJCXdoYXQsIHN0YXQsCisJCQlyZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19JTlRfTUFTSykpOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSJDTURfREFUX0NPTlQgPSAweCUwNHgsIE1NQ19CTEtfTEVOID0gMHglMDR4LCBNTUNfTk9CID0gMHglMDR4LCBETUFfQ0NSID0gMHglMDh4XG4iLAorCQkJcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfQ01EX0RBVF9DT05UKSwKKwkJCXJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX0JMS19MRU4pLAorCQkJcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfTk9CKSwKKwkJCUNDUihob3N0LT5kbWEpKTsKIAkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJDTUQlZCwgcHJldkNNRCVkLCBidXMgJWQtYml0LCBkbWFfc2l6ZSA9IDB4JXhcbiIsCi0JCSAgICAgICBob3N0LT5jbWQ/aG9zdC0+Y21kLT5vcGNvZGU6MCwgaG9zdC0+cHJldl9jbWRfY29kZSwgMTw8aG9zdC0+YWN0dWFsX2J1c193aWR0aCwgaG9zdC0+ZG1hX3NpemUpOworCQkJaG9zdC0+Y21kID8gaG9zdC0+Y21kLT5vcGNvZGUgOiAwLAorCQkJaG9zdC0+cHJldl9jbWRfY29kZSwKKwkJCTEgPDwgaG9zdC0+YWN0dWFsX2J1c193aWR0aCwgaG9zdC0+ZG1hX3NpemUpOwogCX0KIAotCWlmKCFob3N0LT5wcmVzZW50IHx8IHRpbWVvdXQpCisJaWYgKCFob3N0LT5wcmVzZW50IHx8IHRpbWVvdXQpCiAJCWhvc3QtPnN0YXR1c19yZWcgPSBTVEFUVVNfVElNRV9PVVRfUkVTUCB8IFNUQVRVU19USU1FX09VVF9SRUFEIHwKLQkJCQkgICAgU1RBVFVTX0NSQ19SRUFEX0VSUiB8IFNUQVRVU19DUkNfV1JJVEVfRVJSOworCQkJU1RBVFVTX0NSQ19SRUFEX0VSUiB8IFNUQVRVU19DUkNfV1JJVEVfRVJSOwogCi0JaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfSVJRX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgfHwgdGltZW91dCkgeworCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9JUlFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSB8fCB0aW1lb3V0KSB7CiAJCWNsZWFyX2JpdChJTVhNQ0lfUEVORF9JUlFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKIAotCQlzdGF0ID0gTU1DX1NUQVRVUzsKKwkJc3RhdCA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1NUQVRVUyk7CiAJCS8qCiAJCSAqIFRoaXMgaXMgbm90IHJlcXVpcmVkIGluIHRoZW9yeSwgYnV0IHRoZXJlIGlzIGNoYW5jZSB0byBtaXNzIHNvbWUgZmxhZwogCQkgKiB3aGljaCBjbGVhcnMgYXV0b21hdGljYWxseSBieSBtYXNrIHdyaXRlLCBGcmVlU2NhbGUgb3JpZ2luYWwgY29kZSBrZWVwcwpAQCAtNzEzLDYzICs3MTksNjIgQEAKIAkJICovCiAJCXN0YXQgfD0gaG9zdC0+c3RhdHVzX3JlZzsKIAotCQlpZih0ZXN0X2JpdChJTVhNQ0lfUEVORF9DUFVfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQlpZiAodGVzdF9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKIAkJCXN0YXQgJj0gflNUQVRVU19DUkNfUkVBRF9FUlI7CiAKLQkJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CiAJCQlpbXhtY2lfYnVzeV93YWl0X2Zvcl9zdGF0dXMoaG9zdCwgJnN0YXQsCi0JCQkJCVNUQVRVU19FTkRfQ01EX1JFU1AgfCBTVEFUVVNfRVJSX01BU0ssCi0JCQkJCTIwLCAiaW14bWNpX3Rhc2tsZXRfZm5jIHJlc3AgKEVSUkFUVU0gIzQpIik7CisJCQkJCQkgICAgU1RBVFVTX0VORF9DTURfUkVTUCB8IFNUQVRVU19FUlJfTUFTSywKKwkJCQkJCSAgICAyMCwgImlteG1jaV90YXNrbGV0X2ZuYyByZXNwIChFUlJBVFVNICM0KSIpOwogCQl9CiAKLQkJaWYoc3RhdCAmIChTVEFUVVNfRU5EX0NNRF9SRVNQIHwgU1RBVFVTX0VSUl9NQVNLKSkgewotCQkJaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKQorCQlpZiAoc3RhdCAmIChTVEFUVVNfRU5EX0NNRF9SRVNQIHwgU1RBVFVTX0VSUl9NQVNLKSkgeworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKIAkJCQlpbXhtY2lfY21kX2RvbmUoaG9zdCwgc3RhdCk7Ci0JCQlpZihob3N0LT5kYXRhICYmIChzdGF0ICYgU1RBVFVTX0VSUl9NQVNLKSkKKwkJCWlmIChob3N0LT5kYXRhICYmIChzdGF0ICYgU1RBVFVTX0VSUl9NQVNLKSkKIAkJCQlpbXhtY2lfZGF0YV9kb25lKGhvc3QsIHN0YXQpOwogCQl9CiAKLQkJaWYodGVzdF9iaXQoSU1YTUNJX1BFTkRfQ1BVX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgewotCQkJc3RhdCB8PSBNTUNfU1RBVFVTOwotCQkJaWYoaW14bWNpX2NwdV9kcml2ZW5fZGF0YShob3N0LCAmc3RhdCkpewotCQkJCWlmKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkKKwkJaWYgKHRlc3RfYml0KElNWE1DSV9QRU5EX0NQVV9EQVRBX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpIHsKKwkJCXN0YXQgfD0gcmVhZHcoaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RBVFVTKTsKKwkJCWlmIChpbXhtY2lfY3B1X2RyaXZlbl9kYXRhKGhvc3QsICZzdGF0KSkgeworCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSU1YTUNJX1BFTkRfV0FJVF9SRVNQX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykpCiAJCQkJCWlteG1jaV9jbWRfZG9uZShob3N0LCBzdGF0KTsKIAkJCQlhdG9taWNfY2xlYXJfbWFzayhJTVhNQ0lfUEVORF9JUlFfbXxJTVhNQ0lfUEVORF9DUFVfREFUQV9tLAotCQkJCQkJCSZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CisJCQkJCQkgICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CiAJCQkJaW14bWNpX2RhdGFfZG9uZShob3N0LCBzdGF0KTsKIAkJCX0KIAkJfQogCX0KIAotCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX0RNQV9FTkRfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSAmJgotCSAgICF0ZXN0X2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgeworCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cykgJiYKKwkgICAgIXRlc3RfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CiAKLQkJc3RhdCA9IE1NQ19TVEFUVVM7CisJCXN0YXQgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVEFUVVMpOwogCQkvKiBTYW1lIGFzIGFib3ZlICovCiAJCXN0YXQgfD0gaG9zdC0+c3RhdHVzX3JlZzsKIAotCQlpZihob3N0LT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpIHsKKwkJaWYgKGhvc3QtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKIAkJCWRhdGFfZGlyX21hc2sgPSBTVEFUVVNfV1JJVEVfT1BfRE9ORTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJZGF0YV9kaXJfbWFzayA9IFNUQVRVU19EQVRBX1RSQU5TX0RPTkU7Ci0JCX0KIAotCQlpZihzdGF0ICYgZGF0YV9kaXJfbWFzaykgeworCQlpZiAoc3RhdCAmIGRhdGFfZGlyX21hc2spIHsKIAkJCWNsZWFyX2JpdChJTVhNQ0lfUEVORF9ETUFfRU5EX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CiAJCQlpbXhtY2lfZGF0YV9kb25lKGhvc3QsIHN0YXQpOwogCQl9CiAJfQogCi0JaWYodGVzdF9hbmRfY2xlYXJfYml0KElNWE1DSV9QRU5EX0NBUkRfWENIR19iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJTVhNQ0lfUEVORF9DQVJEX1hDSEdfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgewogCi0JCWlmKGhvc3QtPmNtZCkKKwkJaWYgKGhvc3QtPmNtZCkKIAkJCWlteG1jaV9jbWRfZG9uZShob3N0LCBTVEFUVVNfVElNRV9PVVRfUkVTUCk7CiAKLQkJaWYoaG9zdC0+ZGF0YSkKKwkJaWYgKGhvc3QtPmRhdGEpCiAJCQlpbXhtY2lfZGF0YV9kb25lKGhvc3QsIFNUQVRVU19USU1FX09VVF9SRUFEIHwKIAkJCQkJIFNUQVRVU19DUkNfUkVBRF9FUlIgfCBTVEFUVVNfQ1JDX1dSSVRFX0VSUik7CiAKLQkJaWYoaG9zdC0+cmVxKQorCQlpZiAoaG9zdC0+cmVxKQogCQkJaW14bWNpX2ZpbmlzaF9yZXF1ZXN0KGhvc3QsIGhvc3QtPnJlcSk7CiAKIAkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwpAQCAtNzk2LDkgKzgwMSw4IEBACiAJCWlmIChyZXEtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCiAJCQljbWRhdCB8PSBDTURfREFUX0NPTlRfV1JJVEU7CiAKLQkJaWYgKHJlcS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9TVFJFQU0pIHsKKwkJaWYgKHJlcS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9TVFJFQU0pCiAJCQljbWRhdCB8PSBDTURfREFUX0NPTlRfU1RSRUFNX0JMT0NLOwotCQl9CiAJfQogCiAJaW14bWNpX3N0YXJ0X2NtZChob3N0LCByZXEtPmNtZCwgY21kYXQpOwpAQCAtODExLDM2ICs4MTUsMzcgQEAKIAlzdHJ1Y3QgaW14bWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCWludCBwcmVzY2FsZXI7CiAKLQlpZiggaW9zLT5idXNfd2lkdGg9PU1NQ19CVVNfV0lEVEhfNCApIHsKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CiAJCWhvc3QtPmFjdHVhbF9idXNfd2lkdGggPSBNTUNfQlVTX1dJRFRIXzQ7CiAJCWlteF9ncGlvX21vZGUoUEIxMV9QRl9TRF9EQVQzKTsKLQl9ZWxzZXsKKwl9IGVsc2UgewogCQlob3N0LT5hY3R1YWxfYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwogCQlpbXhfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QVUVOIHwgMTEpOwogCX0KIAotCWlmICggaG9zdC0+cG93ZXJfbW9kZSAhPSBpb3MtPnBvd2VyX21vZGUgKSB7CisJaWYgKGhvc3QtPnBvd2VyX21vZGUgIT0gaW9zLT5wb3dlcl9tb2RlKSB7CiAJCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJCWNhc2UgTU1DX1BPV0VSX09GRjoKLSAgICAgICAgCQlicmVhazsKKwkJCWJyZWFrOwogCQljYXNlIE1NQ19QT1dFUl9VUDoKIAkJCXNldF9iaXQoSU1YTUNJX1BFTkRfU0VUX0lOSVRfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKTsKLSAgICAgICAgCQlicmVhazsKKwkJCWJyZWFrOwogCQljYXNlIE1NQ19QT1dFUl9PTjoKLSAgICAgICAgCQlicmVhazsKKwkJCWJyZWFrOwogCQl9CiAJCWhvc3QtPnBvd2VyX21vZGUgPSBpb3MtPnBvd2VyX21vZGU7CiAJfQogCi0JaWYgKCBpb3MtPmNsb2NrICkgeworCWlmIChpb3MtPmNsb2NrKSB7CiAJCXVuc2lnbmVkIGludCBjbGs7CisJCXUxNiByZWc7CiAKIAkJLyogVGhlIHByZXNjYWxlciBpcyA1IGZvciBQRVJDTEsyIGVxdWFsIHRvIDk2TUh6CiAJCSAqIHRoZW4gOTZNSHogLyA1ID0gMTkuMiBNSHoKIAkJICovCiAJCWNsayA9IGNsa19nZXRfcmF0ZShob3N0LT5jbGspOwotCQlwcmVzY2FsZXI9KGNsaysoQ0xLX1JBVEUqNykvOCkvQ0xLX1JBVEU7Ci0JCXN3aXRjaChwcmVzY2FsZXIpIHsKKwkJcHJlc2NhbGVyID0gKGNsayArIChDTEtfUkFURSAqIDcpIC8gOCkgLyBDTEtfUkFURTsKKwkJc3dpdGNoIChwcmVzY2FsZXIpIHsKIAkJY2FzZSAwOgogCQljYXNlIDE6CXByZXNjYWxlciA9IDA7CiAJCQlicmVhazsKQEAgLTg1OCwyNCArODYzLDI5IEBACiAJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiUEVSQ0xLMiAlZCBNSHogLT4gcHJlc2NhbGVyICVkXG4iLAogCQkJY2xrLCBwcmVzY2FsZXIpOwogCi0JCWZvcihjbGs9MDsgY2xrPDg7IGNsaysrKSB7CisJCWZvciAoY2xrID0gMDsgY2xrIDwgODsgY2xrKyspIHsKIAkJCWludCB4OwotCQkJeCA9IENMS19SQVRFIC8gKDE8PGNsayk7Ci0JCQlpZiggeCA8PSBpb3MtPmNsb2NrKQorCQkJeCA9IENMS19SQVRFIC8gKDEgPDwgY2xrKTsKKwkJCWlmICh4IDw9IGlvcy0+Y2xvY2spCiAJCQkJYnJlYWs7CiAJCX0KIAotCQlNTUNfU1RSX1NUUF9DTEsgfD0gU1RSX1NUUF9DTEtfRU5BQkxFOyAvKiBlbmFibGUgY29udHJvbGxlciAqLworCQkvKiBlbmFibGUgY29udHJvbGxlciAqLworCQlyZWcgPSByZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19TVFJfU1RQX0NMSyk7CisJCXdyaXRldyhyZWcgfCBTVFJfU1RQX0NMS19FTkFCTEUsCisJCQkJaG9zdC0+YmFzZSArIE1NQ19SRUdfU1RSX1NUUF9DTEspOwogCiAJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOwotCQlNTUNfQ0xLX1JBVEUgPSAocHJlc2NhbGVyPDwzKSB8IGNsazsKKwkJd3JpdGV3KChwcmVzY2FsZXIgPDwgMykgfCBjbGssIGhvc3QtPmJhc2UgKyBNTUNfUkVHX0NMS19SQVRFKTsKIAkJLyoKIAkJICogVW5kZXIgbXkgdW5kZXJzdGFuZGluZywgY2xvY2sgc2hvdWxkIG5vdCBiZSBzdGFydGVkIHRoZXJlLCBiZWNhdXNlIGl0IHdvdWxkCiAJCSAqIGluaXRpYXRlIFNESEMgc2VxdWVuY2VyIGFuZCBzZW5kIGxhc3Qgb3IgcmFuZG9tIGNvbW1hbmQgaW50byBjYXJkCiAJCSAqLwotCQkvKmlteG1jaV9zdGFydF9jbG9jayhob3N0KTsqLworCQkvKiBpbXhtY2lfc3RhcnRfY2xvY2soaG9zdCk7ICovCiAKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNTUNfQ0xLX1JBVEU6IDB4JTA4eFxuIiwgTU1DX0NMS19SQVRFKTsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCisJCQkiTU1DX0NMS19SQVRFOiAweCUwOHhcbiIsCisJCQlyZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19DTEtfUkFURSkpOwogCX0gZWxzZSB7CiAJCWlteG1jaV9zdG9wX2Nsb2NrKGhvc3QpOwogCX0KQEAgLTkxNSwxMCArOTI1LDEwIEBACiAJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOwogCX0KIAotCWlmKHRlc3RfYml0KElNWE1DSV9QRU5EX1dBSVRfUkVTUF9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpIHx8Ci0JICAgdGVzdF9iaXQoSU1YTUNJX1BFTkRfRE1BX0RBVEFfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSkgeworCWlmICh0ZXN0X2JpdChJTVhNQ0lfUEVORF9XQUlUX1JFU1BfYiwgJmhvc3QtPnBlbmRpbmdfZXZlbnRzKSB8fAorCSAgICB0ZXN0X2JpdChJTVhNQ0lfUEVORF9ETUFfREFUQV9iLCAmaG9zdC0+cGVuZGluZ19ldmVudHMpKSB7CiAJCWF0b21pY19pbmMoJmhvc3QtPnN0dWNrX3RpbWVvdXQpOwotCQlpZihhdG9taWNfcmVhZCgmaG9zdC0+c3R1Y2tfdGltZW91dCkgPiA0KQorCQlpZiAoYXRvbWljX3JlYWQoJmhvc3QtPnN0dWNrX3RpbWVvdXQpID4gNCkKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPnRhc2tsZXQpOwogCX0gZWxzZSB7CiAJCWF0b21pY19zZXQoJmhvc3QtPnN0dWNrX3RpbWVvdXQsIDApOwpAQCAtOTM0LDYgKzk0NCw3IEBACiAJc3RydWN0IGlteG1jaV9ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IHJldCA9IDAsIGlycTsKKwl1MTYgcmV2X25vOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaS5NWCBtbWMgZHJpdmVyXG4iKTsKIApAQCAtOTQyLDcgKzk1Myw4IEBACiAJaWYgKCFyIHx8IGlycSA8IDApCiAJCXJldHVybiAtRU5YSU87CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgMHgxMDAsIHBkZXYtPm5hbWUpKQorCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpOworCWlmICghcikKIAkJcmV0dXJuIC1FQlVTWTsKIAogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgaW14bWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKQEAgLTk2Niw2ICs5NzgsMTIgQEAKIAltbWMtPm1heF9ibGtfY291bnQgPSA2NTUzNTsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPmJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKwlpZiAoIWhvc3QtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJaG9zdC0+bW1jID0gbW1jOwogCWhvc3QtPmRtYV9hbGxvY2F0ZWQgPSAwOwogCWhvc3QtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC05OTMsMTggKzEwMTEsMjAgQEAKIAlpbXhfZ3Bpb19tb2RlKFBCMTJfUEZfU0RfQ0xLKTsKIAlpbXhfZ3Bpb19tb2RlKFBCMTNfUEZfU0RfQ01EKTsKIAotCWlteG1jaV9zb2Z0cmVzZXQoKTsKKwlpbXhtY2lfc29mdHJlc2V0KGhvc3QpOwogCi0JaWYgKCBNTUNfUkVWX05PICE9IDB4MzkwICkgeworCXJldl9ubyA9IHJlYWR3KGhvc3QtPmJhc2UgKyBNTUNfUkVHX1JFVl9OTyk7CisJaWYgKHJldl9ubyAhPSAweDM5MCkgewogCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIndyb25nIHJldi5uby4gMHglMDh4LiBhYm9ydGluZy5cbiIsCi0JCSAgICAgICAgTU1DX1JFVl9OTyk7CisJCQlyZWFkdyhob3N0LT5iYXNlICsgTU1DX1JFR19SRVZfTk8pKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JTU1DX1JFQURfVE8gPSAweDJkYjQ7IC8qIHJlY29tbWVuZGVkIGluIGRhdGEgc2hlZXQgKi8KKwkvKiByZWNvbW1lbmRlZCBpbiBkYXRhIHNoZWV0ICovCisJd3JpdGV3KDB4MmRiNCwgaG9zdC0+YmFzZSArIE1NQ19SRUdfUkVBRF9UTyk7CiAKIAlob3N0LT5pbWFzayA9IElNWE1DSV9JTlRfTUFTS19ERUZBVUxUOwotCU1NQ19JTlRfTUFTSyA9IGhvc3QtPmltYXNrOworCXdyaXRldyhob3N0LT5pbWFzaywgaG9zdC0+YmFzZSArIE1NQ19SRUdfSU5UX01BU0spOwogCiAJaG9zdC0+ZG1hID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8oRFJJVkVSX05BTUUsIERNQV9QUklPX0xPVyk7CiAJaWYoaG9zdC0+ZG1hIDwgMCkgewpAQCAtMTAxMiw3ICsxMDMyLDcgQEAKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9Ci0JaG9zdC0+ZG1hX2FsbG9jYXRlZD0xOworCWhvc3QtPmRtYV9hbGxvY2F0ZWQgPSAxOwogCWlteF9kbWFfc2V0dXBfaGFuZGxlcnMoaG9zdC0+ZG1hLCBpbXhtY2lfZG1hX2lycSwgTlVMTCwgaG9zdCk7CiAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPnRhc2tsZXQsIGlteG1jaV90YXNrbGV0X2ZuYywgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CkBAIC0xMDMyLDcgKzEwNTIsNyBAQAogCWhvc3QtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3N0OwogCWhvc3QtPnRpbWVyLmZ1bmN0aW9uID0gaW14bWNpX2NoZWNrX3N0YXR1czsKIAlhZGRfdGltZXIoJmhvc3QtPnRpbWVyKTsKLQltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgKEhaPj4xKSk7CisJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIChIWiA+PiAxKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOwogCkBAIC0xMDQyLDE4ICsxMDYyLDIwIEBACiAKIG91dDoKIAlpZiAoaG9zdCkgewotCQlpZihob3N0LT5kbWFfYWxsb2NhdGVkKXsKKwkJaWYgKGhvc3QtPmRtYV9hbGxvY2F0ZWQpIHsKIAkJCWlteF9kbWFfZnJlZShob3N0LT5kbWEpOwotCQkJaG9zdC0+ZG1hX2FsbG9jYXRlZD0wOworCQkJaG9zdC0+ZG1hX2FsbG9jYXRlZCA9IDA7CiAJCX0KIAkJaWYgKGhvc3QtPmNsaykgewogCQkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAkJCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAkJfQorCQlpZiAoaG9zdC0+YmFzZSkKKwkJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAJfQogCWlmIChtbWMpCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIDB4MTAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNzIsOSArMTA5NCwxMCBAQAogCQltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCQlpZihob3N0LT5kbWFfYWxsb2NhdGVkKXsKKwkJaW91bm1hcChob3N0LT5iYXNlKTsKKwkJaWYgKGhvc3QtPmRtYV9hbGxvY2F0ZWQpIHsKIAkJCWlteF9kbWFfZnJlZShob3N0LT5kbWEpOwotCQkJaG9zdC0+ZG1hX2FsbG9jYXRlZD0wOworCQkJaG9zdC0+ZG1hX2FsbG9jYXRlZCA9IDA7CiAJCX0KIAogCQl0YXNrbGV0X2tpbGwoJmhvc3QtPnRhc2tsZXQpOwpAQCAtMTA4Miw3ICsxMTA1LDcgQEAKIAkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAkJY2xrX3B1dChob3N0LT5jbGspOwogCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5yZXMtPnN0YXJ0LCAweDEwMCk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPnJlcykpOwogCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKIAl9CkBAIC0xMTA5LDcgKzExMzIsNyBAQAogCiAJaWYgKG1tYykgewogCQlob3N0ID0gbW1jX3ByaXYobW1jKTsKLQkJaWYoaG9zdCkKKwkJaWYgKGhvc3QpCiAJCQlzZXRfYml0KElNWE1DSV9QRU5EX1NFVF9JTklUX2IsICZob3N0LT5wZW5kaW5nX2V2ZW50cyk7CiAJCXJldCA9IG1tY19yZXN1bWVfaG9zdChtbWMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvaW14bW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L2lteG1tYy5oCmluZGV4IGU1MzM5ZTMuLjA5ZDVkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvaW14bW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9pbXhtbWMuaApAQCAtMSwyNCArMSwyMSBAQAorI2RlZmluZSBNTUNfUkVHX1NUUl9TVFBfQ0xLCQkweDAwCisjZGVmaW5lIE1NQ19SRUdfU1RBVFVTCQkJMHgwNAorI2RlZmluZSBNTUNfUkVHX0NMS19SQVRFCQkweDA4CisjZGVmaW5lIE1NQ19SRUdfQ01EX0RBVF9DT05UCQkweDBDCisjZGVmaW5lIE1NQ19SRUdfUkVTX1RPCQkJMHgxMAorI2RlZmluZSBNTUNfUkVHX1JFQURfVE8JCQkweDE0CisjZGVmaW5lIE1NQ19SRUdfQkxLX0xFTgkJCTB4MTgKKyNkZWZpbmUgTU1DX1JFR19OT0IJCQkweDFDCisjZGVmaW5lIE1NQ19SRUdfUkVWX05PCQkJMHgyMAorI2RlZmluZSBNTUNfUkVHX0lOVF9NQVNLCQkweDI0CisjZGVmaW5lIE1NQ19SRUdfQ01ECQkJMHgyOAorI2RlZmluZSBNTUNfUkVHX0FSR0gJCQkweDJDCisjZGVmaW5lIE1NQ19SRUdfQVJHTAkJCTB4MzAKKyNkZWZpbmUgTU1DX1JFR19SRVNfRklGTwkJMHgzNAorI2RlZmluZSBNTUNfUkVHX0JVRkZFUl9BQ0NFU1MJCTB4MzgKIAotIyBkZWZpbmUgX19SRUcxNih4KQkoKigodm9sYXRpbGUgdTE2ICopSU9fQUREUkVTUyh4KSkpCi0KLSNkZWZpbmUgTU1DX1NUUl9TVFBfQ0xLICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MDApCi0jZGVmaW5lIE1NQ19TVEFUVVMgICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDA0KQotI2RlZmluZSBNTUNfQ0xLX1JBVEUgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgwOCkKLSNkZWZpbmUgTU1DX0NNRF9EQVRfQ09OVCBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MEMpCi0jZGVmaW5lIE1NQ19SRVNfVE8gICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDEwKQotI2RlZmluZSBNTUNfUkVBRF9UTyAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgxNCkKLSNkZWZpbmUgTU1DX0JMS19MRU4gICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MTgpCi0jZGVmaW5lIE1NQ19OT0IgICAgICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDFDKQotI2RlZmluZSBNTUNfUkVWX05PICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgyMCkKLSNkZWZpbmUgTU1DX0lOVF9NQVNLICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MjQpCi0jZGVmaW5lIE1NQ19DTUQgICAgICAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDI4KQotI2RlZmluZSBNTUNfQVJHSCAgICAgICAgIF9fUkVHMTYoSU1YX01NQ19CQVNFICsgMHgyQykKLSNkZWZpbmUgTU1DX0FSR0wgICAgICAgICBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MzApCi0jZGVmaW5lIE1NQ19SRVNfRklGTyAgICAgX19SRUcxNihJTVhfTU1DX0JBU0UgKyAweDM0KQotI2RlZmluZSBNTUNfQlVGRkVSX0FDQ0VTUyBfX1JFRzE2KElNWF9NTUNfQkFTRSArIDB4MzgpCi0jZGVmaW5lIE1NQ19CVUZGRVJfQUNDRVNTX09GUyAweDM4Ci0KLQorI2RlZmluZSBTVFJfU1RQX0NMS19JUEdfQ0xLX0dBVEVfRElTICAgICgxPDwxNSkKKyNkZWZpbmUgU1RSX1NUUF9DTEtfSVBHX1BFUkNMS19HQVRFX0RJUyAoMTw8MTQpCiAjZGVmaW5lIFNUUl9TVFBfQ0xLX0VORElBTiAgICAgICAgICAgICAgKDE8PDUpCiAjZGVmaW5lIFNUUl9TVFBfQ0xLX1JFU0VUICAgICAgICAgICAgICAgKDE8PDMpCiAjZGVmaW5lIFNUUl9TVFBfQ0xLX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDJmYWRmMzIuLjFiY2JkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC01MDAsNyArNTAwLDcgQEAKIAl9CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKLQlob3N0LT5jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgIk1DTEsiKTsKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihob3N0LT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoaG9zdC0+Y2xrKTsKIAkJaG9zdC0+Y2xrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggMWI5ZmMzYy4uNjdkN2I3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJfQogCiAJaWYgKGlzX3JlYWQpIHsKLQkJaWYgKGhvc3QtPmlkID09IDEpIHsKKwkJaWYgKGhvc3QtPmlkID09IDApIHsKIAkJCXN5bmNfZGV2ID0gT01BUF9ETUFfTU1DX1JYOwogCQkJZG1hX2Rldl9uYW1lID0gIk1NQzEgcmVhZCI7CiAJCX0gZWxzZSB7CkBAIC0xMDIzLDcgKzEwMjMsNyBAQAogCQkJZG1hX2Rldl9uYW1lID0gIk1NQzIgcmVhZCI7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoaG9zdC0+aWQgPT0gMSkgeworCQlpZiAoaG9zdC0+aWQgPT0gMCkgewogCQkJc3luY19kZXYgPSBPTUFQX0RNQV9NTUNfVFg7CiAJCQlkbWFfZGV2X25hbWUgPSAiTU1DMSB3cml0ZSI7CiAJCX0gZWxzZSB7CkBAIC0xMzE3LDcgKzEzMTcsNyBAQAogCWhvc3QtPnNsb3RzW2lkXSA9IHNsb3Q7CiAKIAltbWMtPmNhcHMgPSAwOwotCWlmIChob3N0LT5wZGF0YS0+Y29uZi53aXJlNCkKKwlpZiAoaG9zdC0+cGRhdGEtPnNsb3RzW2lkXS53aXJlcyA+PSA0KQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJbW1jLT5vcHMgPSAmbW1jX29tYXBfb3BzOwpAQCAtMTQ1MSw2ICsxNDUxLDcgQEAKIAlob3N0LT5pcnEgPSBpcnE7CiAKIAlob3N0LT51c2VfZG1hID0gMTsKKwlob3N0LT5kZXYtPmRtYV9tYXNrID0gJnBkYXRhLT5kbWFfbWFzazsKIAlob3N0LT5kbWFfY2ggPSAtMTsKIAogCWhvc3QtPmlycSA9IGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGViZmFhOTkuLmY4OGNjNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMjYsMTEgKzI2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKQEAgLTUzMyw3ICs1MzQsNyBAQAogCWhvc3QtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaG9zdC0+Y2xrcnQgPSBDTEtSVF9PRkY7CiAKLQlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJNTUNDTEsiKTsKKwlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CiAJCWhvc3QtPmNsayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwppbmRleCAzYjIwODViLi5mY2M5OGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvbWNpLmg+CisjaW5jbHVkZSA8cGxhdC9tY2kuaD4KIAogI2luY2x1ZGUgInMzY21jaS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2RjMjEyODUuYyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCmluZGV4IDNhYTAxOGMuLjQyOTY5ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCkBAIC0zMiwxNiArMzIsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgbndfZW5fd3JpdGUodm9pZCkKIHsKLQlleHRlcm4gc3BpbmxvY2tfdCBncGlvX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCiAJICogd2Ugd2FudCB0byB3cml0ZSBhIGJpdCBwYXR0ZXJuIFhYWDEgdG8gWGlsaW54IHRvIGVuYWJsZQogCSAqIHRoZSB3cml0ZSBnYXRlLCB3aGljaCB3aWxsIGJlIG9wZW4gZm9yIGFib3V0IHRoZSBuZXh0IDJtcy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JY3BsZF9tb2RpZnkoMSwgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm53X2dwaW9fbG9jaywgZmxhZ3MpOworCW53X2NwbGRfbW9kaWZ5KENQTERfRkxBU0hfV1JfRU5BQkxFLCBDUExEX0ZMQVNIX1dSX0VOQUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbndfZ3Bpb19sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIGxldCB0aGUgSVNBIGJ1cyB0byBjYXRjaCBvbi4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwppbmRleCBkY2RiMWYxLi4zZWExZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gRXJyb3I7CiAJfQotCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8pKTsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8pKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCmluZGV4IDljN2E1ZmIuLjE2NTU1Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gRXJyb3I7CiAJfQotCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbykpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGl4cDR4eF9mbGFzaF9pbmZvKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggMWMyZTk0NS4uZjhhZTA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtNDA4LDcgKzQwOCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9NWEMKIAl0cmlzdGF0ZSAiTVhDIE5BTkQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgyCisJZGVwZW5kcyBvbiBBUkNIX01YMiB8fCBBUkNIX01YMwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZQogCSAgTVhDIHByb2Nlc3NvcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggMTVmMGEyNi4uZmM0MTQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eF9uYW5kLmg+CiAKQEAgLTEwODAsNyArMTA4MCw3IEBACiAJdGhpcyA9ICZpbmZvLT5uYW5kX2NoaXA7CiAJbXRkLT5wcml2ID0gaW5mbzsKIAotCWluZm8tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIk5BTkRDTEsiKTsKKwlpbmZvLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaW5mby0+Y2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG5hbmQgY2xvY2tcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGluZm8tPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCmluZGV4IDU1NjEzOWUuLjhlMzc1ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCkBAIC00NSw4ICs0NSw4IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLW5hbmQuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9IV0VDQwogc3RhdGljIGludCBoYXJkd2FyZV9lY2MgPSAxOwpAQCAtODE4LDcgKzgxOCw3IEBACiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKLQltZW16ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5jb250cm9sbGVyLmxvY2spOwpAQCAtODgzLDcgKzg4Myw3IEBACiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKLQltZW16ZXJvKGluZm8tPm10ZHMsIHNpemUpOworCW1lbXNldChpbmZvLT5tdGRzLCAwLCBzaXplKTsKIAogCS8qIGluaXRpYWxpc2UgYWxsIHBvc3NpYmxlIGNoaXBzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwppbmRleCBhN2U0ZDk4Li5kMWUwYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCQlJTklUX0NPTVBMRVRJT04oYy0+aXJxX2RvbmUpOwogCQlpZiAoYy0+Z3Bpb19pcnEpIHsKLQkJCXJlc3VsdCA9IG9tYXBfZ2V0X2dwaW9fZGF0YWluKGMtPmdwaW9faXJxKTsKKwkJCXJlc3VsdCA9IGdwaW9fZ2V0X3ZhbHVlKGMtPmdwaW9faXJxKTsKIAkJCWlmIChyZXN1bHQgPT0gLTEpIHsKIAkJCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOwogCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOwpAQCAtNjM0LDkgKzYzNCw5IEBACiAJCQkJIk9uZU5BTkRcbiIsIGMtPmdwaW9faXJxKTsKIAkJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGMtPmdwaW9faXJxLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChjLT5ncGlvX2lycSk7CiAKLQlpZiAoKHIgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwKKwlpZiAoKHIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShjLT5ncGlvX2lycSksCiAJCQkgICAgIG9tYXAyX29uZW5hbmRfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAogCQkJICAgICBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBjKSkgPCAwKQogCQlnb3RvIGVycl9yZWxlYXNlX2dwaW87CkBAIC03MjMsNyArNzIzLDcgQEAKIAlpZiAoYy0+ZG1hX2NoYW5uZWwgIT0gLTEpCiAJCW9tYXBfZnJlZV9kbWEoYy0+ZG1hX2NoYW5uZWwpOwogCWlmIChjLT5ncGlvX2lycSkKLQkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworCQlmcmVlX2lycShncGlvX3RvX2lycShjLT5ncGlvX2lycSksIGMpOwogZXJyX3JlbGVhc2VfZ3BpbzoKIAlpZiAoYy0+Z3Bpb19pcnEpCiAJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKQEAgLTc2MCw3ICs3NjAsNyBAQAogCW9tYXAyX29uZW5hbmRfc2h1dGRvd24ocGRldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaWYgKGMtPmdwaW9faXJxKSB7Ci0JCWZyZWVfaXJxKE9NQVBfR1BJT19JUlEoYy0+Z3Bpb19pcnEpLCBjKTsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEoYy0+Z3Bpb19pcnEpLCBjKTsKIAkJb21hcF9mcmVlX2dwaW8oYy0+Z3Bpb19pcnEpOwogCX0KIAlpb3VubWFwKGMtPm9uZW5hbmQuYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCA2ZWNjNjAwLi4zZWMyMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmZXAtPnJ4X2xvY2spOwogCi0JCWlmIChtb3JlICYmIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCBuYXBpKSkKKwkJaWYgKG1vcmUgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKIAkJCWdvdG8gcG9sbF9zb21lX21vcmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwppbmRleCAyNmFmNDExLi41ZmNlMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CiAJCQlxbWdyX2VuYWJsZV9pcnEocnhxKTsKIAkJCWlmICghcW1ncl9zdGF0X2VtcHR5KHJ4cSkgJiYKLQkJCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKGRldiwgbmFwaSkpIHsKKwkJCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKSB7CiAjaWYgREVCVUdfUlgKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIgogCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2Vzc2VkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IDU5MmRhZWUuLjlhZDIyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggZDU0OGE0NS4uZmY2NDk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTE3MCwxMSArMTcwLDcgQEAKIC8qIFRoZSBjczg5MDAgaGFzIDQgSVJRIHBpbnMsIHNvZnR3YXJlIHNlbGVjdGFibGUuIGNzODkwMF9pcnFfbWFwIG1hcHMKICAgIHRoZW0gdG8gc3lzdGVtIElSUSBudW1iZXJzLiBUaGlzIG1hcHBpbmcgaXMgY2FyZCBzcGVjaWZpYyBhbmQgaXMgc2V0IHRvCiAgICB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgQ2lycnVzIEV2YWwgYm9hcmQgZm9yIHRoaXMgY2hpcC4gKi8KLSNpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMAotc3RhdGljIHVuc2lnbmVkIGludCBuZXRjYXJkX3BvcnRsaXN0W10gX191c2VkIF9faW5pdGRhdGEgPQotICAgeyAweDgwMDkwMzAzLCAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCwgMHgyMDAsIDB4MjIwLCAweDI0MCwgMHgyNjAsIDB4MjgwLCAweDJhMCwgMHgyYzAsIDB4MmUwLCAwfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHsxMiwwLDAsMH07Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TSF9ISUNPU0g0KQorI2lmIGRlZmluZWQoQ09ORklHX1NIX0hJQ09TSDQpCiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9CiAgICB7IDB4MDMwMCwgMH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNzODkwMF9pcnFfbWFwW10gPSB7MSwwLDAsMH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5oIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuaAppbmRleCA3MDdkZjNmLi5kYzljNmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5oCisrKyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmgKQEAgLTY4LDE3ICs2OCwxNyBAQAogICovCiAKIC8qIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHRoZSBTQ0Igc3RhdHVzIHdvcmQgYW5kIHRlc3QgdGhlIHJlbGV2YW50IHN0YXR1cyBiaXQgKi8KLSNkZWZpbmUgU0NCX2NvbXBsZXRlKHMpICgocyYweDgwMDApIT0wKQotI2RlZmluZSBTQ0JfcnhkZnJhbWUocykgKChzJjB4NDAwMCkhPTApCi0jZGVmaW5lIFNDQl9DVWRlYWQocykgICAoKHMmMHgyMDAwKSE9MCkKLSNkZWZpbmUgU0NCX1JVZGVhZChzKSAgICgocyYweDEwMDApIT0wKQotI2RlZmluZSBTQ0JfYWNrKHMpICAgICAgKHMgJiAweGYwMDApCisjZGVmaW5lIFNDQl9jb21wbGV0ZShzKSAoKChzKSAmIDB4ODAwMCkgIT0gMCkKKyNkZWZpbmUgU0NCX3J4ZGZyYW1lKHMpICgoKHMpICYgMHg0MDAwKSAhPSAwKQorI2RlZmluZSBTQ0JfQ1VkZWFkKHMpICAgKCgocykgJiAweDIwMDApICE9IDApCisjZGVmaW5lIFNDQl9SVWRlYWQocykgICAoKChzKSAmIDB4MTAwMCkgIT0gMCkKKyNkZWZpbmUgU0NCX2FjayhzKSAgICAgICgocykgJiAweGYwMDApCiAKIC8qIENvbW1hbmQgdW5pdCBzdGF0dXM6IDA9aWRsZSwgMT1zdXNwZW5kZWQsIDI9YWN0aXZlICovCi0jZGVmaW5lIFNDQl9DVXN0YXQocykgICAoKHMmMHgwMzAwKT4+OCkKKyNkZWZpbmUgU0NCX0NVc3RhdChzKSAgICgoKHMpJjB4MDMwMCk+PjgpCiAKIC8qIFJlY2VpdmUgdW5pdCBzdGF0dXM6IDA9aWRsZSwgMT1zdXNwZW5kZWQsIDI9b3V0IG9mIHJlc291cmNlcywgND1yZWFkeSAqLwotI2RlZmluZSBTQ0JfUlVzdGF0KHMpICAgKChzJjB4MDA3MCk+PjQpCisjZGVmaW5lIFNDQl9SVXN0YXQocykgICAoKChzKSYweDAwNzApPj40KQogCiAvKiBTQ0IgY29tbWFuZHMgKi8KICNkZWZpbmUgU0NCX0NVbm9wICAgICAgIDB4MDAwMApAQCAtOTgsMTggKzk4LDE4IEBACiAgKiBDb21tYW5kIGJsb2NrIGRlZmluZXMKICAqLwogCi0jZGVmaW5lIFN0YXRfRG9uZShzKSAgICAoKHMmMHg4MDAwKSE9MCkKLSNkZWZpbmUgU3RhdF9CdXN5KHMpICAgICgocyYweDQwMDApIT0wKQotI2RlZmluZSBTdGF0X09LKHMpICAgICAgKChzJjB4MjAwMCkhPTApCi0jZGVmaW5lIFN0YXRfQWJvcnQocykgICAoKHMmMHgxMDAwKSE9MCkKLSNkZWZpbmUgU3RhdF9TVEZhaWwgICAgICgocyYweDA4MDApIT0wKQotI2RlZmluZSBTdGF0X1ROb0NhcihzKSAgKChzJjB4MDQwMCkhPTApCi0jZGVmaW5lIFN0YXRfVE5vQ1RTKHMpICAoKHMmMHgwMjAwKSE9MCkKLSNkZWZpbmUgU3RhdF9UTm9ETUEocykgICgocyYweDAxMDApIT0wKQotI2RlZmluZSBTdGF0X1REZWZlcihzKSAgKChzJjB4MDA4MCkhPTApCi0jZGVmaW5lIFN0YXRfVENvbGwocykgICAoKHMmMHgwMDQwKSE9MCkKLSNkZWZpbmUgU3RhdF9UWENvbGwocykgICgocyYweDAwMjApIT0wKQotI2RlZmluZSBTdGF0X05vQ29sbChzKSAgKHMmMHgwMDBmKQorI2RlZmluZSBTdGF0X0RvbmUocykgICAgKCgocykgJiAweDgwMDApICE9IDApCisjZGVmaW5lIFN0YXRfQnVzeShzKSAgICAoKChzKSAmIDB4NDAwMCkgIT0gMCkKKyNkZWZpbmUgU3RhdF9PSyhzKSAgICAgICgoKHMpICYgMHgyMDAwKSAhPSAwKQorI2RlZmluZSBTdGF0X0Fib3J0KHMpICAgKCgocykgJiAweDEwMDApICE9IDApCisjZGVmaW5lIFN0YXRfU1RGYWlsICAgICAoKChzKSAmIDB4MDgwMCkgIT0gMCkKKyNkZWZpbmUgU3RhdF9UTm9DYXIocykgICgoKHMpICYgMHgwNDAwKSAhPSAwKQorI2RlZmluZSBTdGF0X1ROb0NUUyhzKSAgKCgocykgJiAweDAyMDApICE9IDApCisjZGVmaW5lIFN0YXRfVE5vRE1BKHMpICAoKChzKSAmIDB4MDEwMCkgIT0gMCkKKyNkZWZpbmUgU3RhdF9URGVmZXIocykgICgoKHMpICYgMHgwMDgwKSAhPSAwKQorI2RlZmluZSBTdGF0X1RDb2xsKHMpICAgKCgocykgJiAweDAwNDApICE9IDApCisjZGVmaW5lIFN0YXRfVFhDb2xsKHMpICAoKChzKSAmIDB4MDAyMCkgIT0gMCkKKyNkZWZpbmUgU3RhdF9Ob0NvbGwocykgICgocykgJiAweDAwMGYpCiAKIC8qIENtZF9FTkQgd2lsbCBlbmQgQUZURVIgdGhlIGNvbW1hbmQgaWYgdGhpcyBpcyB0aGUgZmlyc3QKICAqIGNvbW1hbmQgYmxvY2sgYWZ0ZXIgYW4gU0NCX0NVc3RhcnQsIGJ1dCBCRUZPUkUgdGhlIGNvbW1hbmQKQEAgLTEzNiwxNiArMTM2LDE2IEBACiAgKiBGcmFtZSBEZXNjcmlwdG9yIChSZWNlaXZlIGJsb2NrKSBkZWZpbmVzCiAgKi8KIAotI2RlZmluZSBGRF9Eb25lKHMpICAoKHMmMHg4MDAwKSE9MCkKLSNkZWZpbmUgRkRfQnVzeShzKSAgKChzJjB4NDAwMCkhPTApCi0jZGVmaW5lIEZEX09LKHMpICAgICgocyYweDIwMDApIT0wKQorI2RlZmluZSBGRF9Eb25lKHMpICAoKChzKSAmIDB4ODAwMCkgIT0gMCkKKyNkZWZpbmUgRkRfQnVzeShzKSAgKCgocykgJiAweDQwMDApICE9IDApCisjZGVmaW5lIEZEX09LKHMpICAgICgoKHMpICYgMHgyMDAwKSAhPSAwKQogCi0jZGVmaW5lIEZEX0NSQyhzKSAgICgocyYweDA4MDApIT0wKQotI2RlZmluZSBGRF9BbGlnbihzKSAoKHMmMHgwNDAwKSE9MCkKLSNkZWZpbmUgRkRfUmVzcmMocykgKChzJjB4MDIwMCkhPTApCi0jZGVmaW5lIEZEX0RNQShzKSAgICgocyYweDAxMDApIT0wKQotI2RlZmluZSBGRF9TaG9ydChzKSAoKHMmMHgwMDgwKSE9MCkKLSNkZWZpbmUgRkRfTm9FT0YocykgKChzJjB4MDA0MCkhPTApCisjZGVmaW5lIEZEX0NSQyhzKSAgICgoKHMpICYgMHgwODAwKSAhPSAwKQorI2RlZmluZSBGRF9BbGlnbihzKSAoKChzKSAmIDB4MDQwMCkgIT0gMCkKKyNkZWZpbmUgRkRfUmVzcmMocykgKCgocykgJiAweDAyMDApICE9IDApCisjZGVmaW5lIEZEX0RNQShzKSAgICgoKHMpICYgMHgwMTAwKSAhPSAwKQorI2RlZmluZSBGRF9TaG9ydChzKSAoKChzKSAmIDB4MDA4MCkgIT0gMCkKKyNkZWZpbmUgRkRfTm9FT0YocykgKCgocykgJiAweDAwNDApICE9IDApCiAKIHN0cnVjdCByZmRfaGVhZGVyIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwppbmRleCBhMGVlMDUzLi4wMDRhOWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwpAQCAtMjIsOSArMjIsNTMgQEAKICNpbmNsdWRlIDxuZXQvaXJkYS93cmFwcGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KKworI2RlZmluZSBGSUNQCQlfX1JFRygweDQwODAwMDAwKSAgLyogU3RhcnQgb2YgRklDUCBhcmVhICovCisjZGVmaW5lIElDQ1IwCQlfX1JFRygweDQwODAwMDAwKSAgLyogSUNQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBJQ0NSMQkJX19SRUcoMHg0MDgwMDAwNCkgIC8qIElDUCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgSUNDUjIJCV9fUkVHKDB4NDA4MDAwMDgpICAvKiBJQ1AgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIElDRFIJCV9fUkVHKDB4NDA4MDAwMGMpICAvKiBJQ1AgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBJQ1NSMAkJX19SRUcoMHg0MDgwMDAxNCkgIC8qIElDUCBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBJQ1NSMQkJX19SRUcoMHg0MDgwMDAxOCkgIC8qIElDUCBTdGF0dXMgUmVnaXN0ZXIgMSAqLworCisjZGVmaW5lIElDQ1IwX0FNRQkoMSA8PCA3KQkvKiBBZGRyZXNzIG1hdGNoIGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9USUUJKDEgPDwgNikJLyogVHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIElDQ1IwX1JJRQkoMSA8PCA1KQkvKiBSZWNpZXZlIEZJRk8gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9SWEUJKDEgPDwgNCkJLyogUmVjZWl2ZSBlbmFibGUgKi8KKyNkZWZpbmUgSUNDUjBfVFhFCSgxIDw8IDMpCS8qIFRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZSBJQ0NSMF9UVVMJKDEgPDwgMikJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBzZWxlY3QgKi8KKyNkZWZpbmUgSUNDUjBfTEJNCSgxIDw8IDEpCS8qIExvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgSUNDUjBfSVRSCSgxIDw8IDApCS8qIElyREEgdHJhbnNtaXNzaW9uICovCisKKyNkZWZpbmUgSUNDUjJfUlhQICAgICAgICgxIDw8IDMpCS8qIFJlY2VpdmUgUGluIFBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBJQ0NSMl9UWFAgICAgICAgKDEgPDwgMikJLyogVHJhbnNtaXQgUGluIFBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBJQ0NSMl9UUklHCSgzIDw8IDApCS8qIFJlY2VpdmUgRklGTyBUcmlnZ2VyIHRocmVzaG9sZCAqLworI2RlZmluZSBJQ0NSMl9UUklHXzggICAgKDAgPDwgMCkJLyogCT49IDggYnl0ZXMgKi8KKyNkZWZpbmUgSUNDUjJfVFJJR18xNiAgICgxIDw8IDApCS8qCT49IDE2IGJ5dGVzICovCisjZGVmaW5lIElDQ1IyX1RSSUdfMzIgICAoMiA8PCAwKQkvKgk+PSAzMiBieXRlcyAqLworCisjaWZkZWYgQ09ORklHX1BYQTI3eAorI2RlZmluZSBJQ1NSMF9FT0MJKDEgPDwgNikJLyogRE1BIEVuZCBvZiBEZXNjcmlwdG9yIENoYWluICovCisjZW5kaWYKKyNkZWZpbmUgSUNTUjBfRlJFCSgxIDw8IDUpCS8qIEZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgSUNTUjBfUkZTCSgxIDw8IDQpCS8qIFJlY2VpdmUgRklGTyBzZXJ2aWNlIHJlcXVlc3QgKi8KKyNkZWZpbmUgSUNTUjBfVEZTCSgxIDw8IDMpCS8qIFRyYW5zbml0IEZJRk8gc2VydmljZSByZXF1ZXN0ICovCisjZGVmaW5lIElDU1IwX1JBQgkoMSA8PCAyKQkvKiBSZWNlaXZlciBhYm9ydCAqLworI2RlZmluZSBJQ1NSMF9UVVIJKDEgPDwgMSkJLyogVHJ1bnNtaXQgRklGTyB1bmRlcnVuICovCisjZGVmaW5lIElDU1IwX0VJRgkoMSA8PCAwKQkvKiBFbmQvRXJyb3IgaW4gRklGTyAqLworCisjZGVmaW5lIElDU1IxX1JPUgkoMSA8PCA2KQkvKiBSZWNlaXZlciBGSUZPIHVuZGVycnVuICAqLworI2RlZmluZSBJQ1NSMV9DUkUJKDEgPDwgNSkJLyogQ1JDIGVycm9yICovCisjZGVmaW5lIElDU1IxX0VPRgkoMSA8PCA0KQkvKiBFbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgSUNTUjFfVE5GCSgxIDw8IDMpCS8qIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgSUNTUjFfUk5FCSgxIDw8IDIpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgSUNTUjFfVEJZCSgxIDw8IDEpCS8qIFRyYW1zbWl0ZXIgYnVzeSBmbGFnICovCisjZGVmaW5lIElDU1IxX1JTWQkoMSA8PCAwKQkvKiBSZWNldmllciBzeW5jaHJvbml6ZWQgZmxhZyAqLwogCiAjZGVmaW5lIElyU1JfUlhQTF9ORUdfSVNfWkVSTyAoMTw8NCkKICNkZWZpbmUgSXJTUl9SWFBMX1BPU19JU19aRVJPIDB4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggY2NkZTU4MjkuLmQzMDJiY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lyZGEuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYwppbmRleCBjMWMwNTg1Mi4uZWRhNzJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKQEAgLTE2OSwxMyArMTY5LDEwIEBACiAJbWx4NF9mb3JlYWNoX3BvcnQoaSwgZGV2LCBNTFg0X1BPUlRfVFlQRV9FVEgpIHsKIAkJbWx4NF9pbmZvKG1kZXYsICJVc2luZyAlZCB0eCByaW5ncyBmb3IgcG9ydDolZFxuIiwKIAkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnR4X3JpbmdfbnVtLCBpKTsKLQkJaWYgKCFtZGV2LT5wcm9maWxlLnByb2ZbaV0ucnhfcmluZ19udW0pIHsKLQkJCW1kZXYtPnByb2ZpbGUucHJvZltpXS5yeF9yaW5nX251bSA9IGRldi0+Y2Fwcy5udW1fY29tcF92ZWN0b3JzOwotCQkJbWx4NF9pbmZvKG1kZXYsICJEZWZhdWx0aW5nIHRvICVkIHJ4IHJpbmdzIGZvciBwb3J0OiVkXG4iLAotCQkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtLCBpKTsKLQkJfSBlbHNlCi0JCQltbHg0X2luZm8obWRldiwgIlVzaW5nICVkIHJ4IHJpbmdzIGZvciBwb3J0OiVkXG4iLAotCQkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtLCBpKTsKKwkJbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtID0KKwkJCW1pbl90KGludCwgZGV2LT5jYXBzLm51bV9jb21wX3ZlY3RvcnMsIE1BWF9SWF9SSU5HUyk7CisJCW1seDRfaW5mbyhtZGV2LCAiRGVmYXVsdGluZyB0byAlZCByeCByaW5ncyBmb3IgcG9ydDolZFxuIiwKKwkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtLCBpKTsKIAl9CiAKIAkvKiBDcmVhdGUgb3VyIG93biB3b3JrcXVldWUgZm9yIHJlc2V0L211bHRpY2FzdCB0YXNrcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKaW5kZXggZWJhZGEzYy4uMTViYjM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCkBAIC01NTIsNyArNTUyLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IG1seDRfZW5fc3RhcnRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IG1seDRfZW5fc3RhcnRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CkBAIC03MDcsNyArNzA3LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBtbHg0X2VuX3N0b3BfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBtbHg0X2VuX3N0b3BfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CkBAIC04MjYsNyArODI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWx4NF9lbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KQordm9pZCBtbHg0X2VuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7CiAKQEAgLTg0NSw3ICs4NDUsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBtbHg0X2VuX2FsbG9jX3Jlc291cmNlcyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KQoraW50IG1seDRfZW5fYWxsb2NfcmVzb3VyY2VzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKIAlzdHJ1Y3QgbWx4NF9lbl9wb3J0X3Byb2ZpbGUgKnByb2YgPSBwcml2LT5wcm9mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9wYXJhbXMuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcGFyYW1zLmMKaW5kZXggMDQ3YjM3Zi4uY2ZlZWYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9wYXJhbXMuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3BhcmFtcy5jCkBAIC02NSwxNSArNjUsNiBAQAogTUxYNF9FTl9QQVJNX0lOVChwZmNyeCwgMCwgIlByaW9yaXR5IGJhc2VkIEZsb3cgQ29udHJvbCBwb2xpY3kgb24gUlhbNzowXS4iCiAJCQkgICAiIFBlciBwcmlvcml0eSBiaXQgbWFzayIpOwogCi1NTFg0X0VOX1BBUk1fSU5UKHJ4X3JpbmdfbnVtMSwgMCwgIk51bWJlciBvciBSeCByaW5ncyBmb3IgcG9ydCAxICgwID0gI2NvcmVzKSIpOwotTUxYNF9FTl9QQVJNX0lOVChyeF9yaW5nX251bTIsIDAsICJOdW1iZXIgb3IgUnggcmluZ3MgZm9yIHBvcnQgMiAoMCA9ICNjb3JlcykiKTsKLQotTUxYNF9FTl9QQVJNX0lOVCh0eF9yaW5nX3NpemUxLCBNTFg0X0VOX0FVVE9fQ09ORiwgIlR4IHJpbmcgc2l6ZSBmb3IgcG9ydCAxIik7Ci1NTFg0X0VOX1BBUk1fSU5UKHR4X3Jpbmdfc2l6ZTIsIE1MWDRfRU5fQVVUT19DT05GLCAiVHggcmluZyBzaXplIGZvciBwb3J0IDIiKTsKLU1MWDRfRU5fUEFSTV9JTlQocnhfcmluZ19zaXplMSwgTUxYNF9FTl9BVVRPX0NPTkYsICJSeCByaW5nIHNpemUgZm9yIHBvcnQgMSIpOwotTUxYNF9FTl9QQVJNX0lOVChyeF9yaW5nX3NpemUyLCBNTFg0X0VOX0FVVE9fQ09ORiwgIlJ4IHJpbmcgc2l6ZSBmb3IgcG9ydCAyIik7Ci0KLQogaW50IG1seDRfZW5fZ2V0X3Byb2ZpbGUoc3RydWN0IG1seDRfZW5fZGV2ICptZGV2KQogewogCXN0cnVjdCBtbHg0X2VuX3Byb2ZpbGUgKnBhcmFtcyA9ICZtZGV2LT5wcm9maWxlOwpAQCAtODcsNiArNzgsOCBAQAogCQlwYXJhbXMtPnByb2ZbaV0ucnhfcHBwID0gcGZjcng7CiAJCXBhcmFtcy0+cHJvZltpXS50eF9wYXVzZSA9IDE7CiAJCXBhcmFtcy0+cHJvZltpXS50eF9wcHAgPSBwZmN0eDsKKwkJcGFyYW1zLT5wcm9mW2ldLnR4X3Jpbmdfc2l6ZSA9IE1MWDRfRU5fREVGX1RYX1JJTkdfU0laRTsKKwkJcGFyYW1zLT5wcm9mW2ldLnJ4X3Jpbmdfc2l6ZSA9IE1MWDRfRU5fREVGX1JYX1JJTkdfU0laRTsKIAl9CiAJaWYgKHBmY3J4IHx8IHBmY3R4KSB7CiAJCXBhcmFtcy0+cHJvZlsxXS50eF9yaW5nX251bSA9IE1MWDRfRU5fVFhfUklOR19OVU07CkBAIC05NSwzMiArODgsNyBAQAogCQlwYXJhbXMtPnByb2ZbMV0udHhfcmluZ19udW0gPSAxOwogCQlwYXJhbXMtPnByb2ZbMl0udHhfcmluZ19udW0gPSAxOwogCX0KLQlwYXJhbXMtPnByb2ZbMV0ucnhfcmluZ19udW0gPSBtaW5fdChpbnQsIHJ4X3JpbmdfbnVtMSwgTUFYX1JYX1JJTkdTKTsKLQlwYXJhbXMtPnByb2ZbMl0ucnhfcmluZ19udW0gPSBtaW5fdChpbnQsIHJ4X3JpbmdfbnVtMiwgTUFYX1JYX1JJTkdTKTsKIAotCWlmICh0eF9yaW5nX3NpemUxID09IE1MWDRfRU5fQVVUT19DT05GKQotCQl0eF9yaW5nX3NpemUxID0gTUxYNF9FTl9ERUZfVFhfUklOR19TSVpFOwotCXBhcmFtcy0+cHJvZlsxXS50eF9yaW5nX3NpemUgPQotCQkodHhfcmluZ19zaXplMSA8IE1MWDRfRU5fTUlOX1RYX1NJWkUpID8KLQkJIE1MWDRfRU5fTUlOX1RYX1NJWkUgOiByb3VuZHVwX3Bvd19vZl90d28odHhfcmluZ19zaXplMSk7Ci0KLQlpZiAodHhfcmluZ19zaXplMiA9PSBNTFg0X0VOX0FVVE9fQ09ORikKLQkJdHhfcmluZ19zaXplMiA9IE1MWDRfRU5fREVGX1RYX1JJTkdfU0laRTsKLQlwYXJhbXMtPnByb2ZbMl0udHhfcmluZ19zaXplID0KLQkJKHR4X3Jpbmdfc2l6ZTIgPCBNTFg0X0VOX01JTl9UWF9TSVpFKSA/Ci0JCSBNTFg0X0VOX01JTl9UWF9TSVpFIDogcm91bmR1cF9wb3dfb2ZfdHdvKHR4X3Jpbmdfc2l6ZTIpOwotCi0JaWYgKHJ4X3Jpbmdfc2l6ZTEgPT0gTUxYNF9FTl9BVVRPX0NPTkYpCi0JCXJ4X3Jpbmdfc2l6ZTEgPSBNTFg0X0VOX0RFRl9SWF9SSU5HX1NJWkU7Ci0JcGFyYW1zLT5wcm9mWzFdLnJ4X3Jpbmdfc2l6ZSA9Ci0JCShyeF9yaW5nX3NpemUxIDwgTUxYNF9FTl9NSU5fUlhfU0laRSkgPwotCQkgTUxYNF9FTl9NSU5fUlhfU0laRSA6IHJvdW5kdXBfcG93X29mX3R3byhyeF9yaW5nX3NpemUxKTsKLQotCWlmIChyeF9yaW5nX3NpemUyID09IE1MWDRfRU5fQVVUT19DT05GKQotCQlyeF9yaW5nX3NpemUyID0gTUxYNF9FTl9ERUZfUlhfUklOR19TSVpFOwotCXBhcmFtcy0+cHJvZlsyXS5yeF9yaW5nX3NpemUgPQotCQkocnhfcmluZ19zaXplMiA8IE1MWDRfRU5fTUlOX1JYX1NJWkUpID8KLQkJIE1MWDRfRU5fTUlOX1JYX1NJWkUgOiByb3VuZHVwX3Bvd19vZl90d28ocnhfcmluZ19zaXplMik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNyw2ICszODUsNTQgQEAKIAlwYXVzZS0+cnhfcGF1c2UgPSBwcml2LT5wcm9mLT5yeF9wYXVzZTsKIH0KIAorc3RhdGljIGludCBtbHg0X2VuX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OworCXUzMiByeF9zaXplLCB0eF9zaXplOworCWludCBwb3J0X3VwID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwYXJhbS0+cnhfanVtYm9fcGVuZGluZyB8fCBwYXJhbS0+cnhfbWluaV9wZW5kaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ4X3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28ocGFyYW0tPnJ4X3BlbmRpbmcpOworCXJ4X3NpemUgPSBtYXhfdCh1MzIsIHJ4X3NpemUsIE1MWDRfRU5fTUlOX1JYX1NJWkUpOworCXR4X3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28ocGFyYW0tPnR4X3BlbmRpbmcpOworCXR4X3NpemUgPSBtYXhfdCh1MzIsIHR4X3NpemUsIE1MWDRfRU5fTUlOX1RYX1NJWkUpOworCisJaWYgKHJ4X3NpemUgPT0gcHJpdi0+cHJvZi0+cnhfcmluZ19zaXplICYmCisJICAgIHR4X3NpemUgPT0gcHJpdi0+cHJvZi0+dHhfcmluZ19zaXplKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCWlmIChwcml2LT5wb3J0X3VwKSB7CisJCXBvcnRfdXAgPSAxOworCQltbHg0X2VuX3N0b3BfcG9ydChkZXYpOworCX0KKworCW1seDRfZW5fZnJlZV9yZXNvdXJjZXMocHJpdik7CisKKwlwcml2LT5wcm9mLT50eF9yaW5nX3NpemUgPSB0eF9zaXplOworCXByaXYtPnByb2YtPnJ4X3Jpbmdfc2l6ZSA9IHJ4X3NpemU7CisKKwllcnIgPSBtbHg0X2VuX2FsbG9jX3Jlc291cmNlcyhwcml2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgcmVhbGxvY2F0aW5nIHBvcnQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChwb3J0X3VwKSB7CisJCWVyciA9IG1seDRfZW5fc3RhcnRfcG9ydChkZXYpOworCQlpZiAoZXJyKQorCQkJbWx4NF9lcnIobWRldiwgIkZhaWxlZCBzdGFydGluZyBwb3J0XG4iKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJm1kZXYtPnN0YXRlX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIG1seDRfZW5fZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpwYXJhbSkKIHsKQEAgLTQ1Niw2ICs0NzIsNyBAQAogCS5nZXRfcGF1c2VwYXJhbSA9IG1seDRfZW5fZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbWx4NF9lbl9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IG1seDRfZW5fZ2V0X3JpbmdwYXJhbSwKKwkuc2V0X3JpbmdwYXJhbSA9IG1seDRfZW5fc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCiAJLnNldF9mbGFncyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKaW5kZXggZTc4MjA5Ny4uMmU5NmM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKQEAgLTQ4OSw2ICs0ODksMTIgQEAKIGludCBtbHg0X2VuX2luaXRfbmV0ZGV2KHN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiwgaW50IHBvcnQsCiAJCQlzdHJ1Y3QgbWx4NF9lbl9wb3J0X3Byb2ZpbGUgKnByb2YpOwogCitpbnQgbWx4NF9lbl9zdGFydF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBtbHg0X2VuX3N0b3BfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwordm9pZCBtbHg0X2VuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpOworaW50IG1seDRfZW5fYWxsb2NfcmVzb3VyY2VzKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYpOworCiBpbnQgbWx4NF9lbl9nZXRfcHJvZmlsZShzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYpOwogCiBpbnQgbWx4NF9lbl9jcmVhdGVfY3Eoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgc3RydWN0IG1seDRfZW5fY3EgKmNxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IGRjZDE5OTAuLjViN2E1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTk1NCw3ICs5NTQsNiBAQAogewogCWNvbnN0IHN0cnVjdCBwYXNlbWlfbWFjX3J4cmluZyAqcnhyaW5nID0gZGF0YTsKIAlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gcnhyaW5nLT5tYWM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1hYy0+bmV0ZGV2OwogCWNvbnN0IHN0cnVjdCBwYXNlbWlfZG1hY2hhbiAqY2hhbiA9ICZyeHJpbmctPmNoYW47CiAJdW5zaWduZWQgaW50IHJlZzsKIApAQCAtMTYzNCw3ICsxNjMzLDYgQEAKIHN0YXRpYyBpbnQgcGFzZW1pX21hY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBwYXNlbWlfbWFjLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbWFjLT5uZXRkZXY7CiAJaW50IHBrdHM7CiAKIAlwYXNlbWlfbWFjX2NsZWFuX3R4KHR4X3JpbmcobWFjKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggY2M3ZDg1Yi4uODcwYjRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtMjAwLDYgKzIwMCw5IEBACiAKIAogI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQorCisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKwogLyoKICAqIERlZmluZSB0aGUgcmVxdWVzdCBhbmQgZnJlZSBmdW5jdGlvbnMKICAqIFRoZXNlIGFyZSB1bmZvcnR1bmF0ZWx5IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcyBubyBnZW5lcmljIGFsbG9jYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggM2U3YzZhMy4uYzRjY2QxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTQ5Myw3ICs0OTMsOCBAQAogICogYXMgUlggd2hpY2ggY2FuIG92ZXJydW4gbWVtb3J5IGFuZCBsb3NlIHBhY2tldHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNpZmRlZiBTTUNfaW5zbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggNWU5ODlkOC4uZGMzZjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0xNDg0LDEzICsxNDg0LDEzIEBACiAJfQogCiAJaWYgKGxpa2VseShpbnRzdHMgJiBpbnRlbiAmIElOVF9TVFNfUlNGTF8pKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYsICZwZGF0YS0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgewogCQkJLyogRGlzYWJsZSBSeCBpbnRlcnJ1cHRzICovCiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wICY9ICh+SU5UX0VOX1JTRkxfRU5fKTsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAkJCS8qIFNjaGVkdWxlIGEgTkFQSSBwb2xsICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldiwgJnBkYXRhLT5uYXBpKTsKKwkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCVNNU0NfV0FSTklORyhSWF9FUlIsCiAJCQkJIm5ldGlmX3J4X3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggYzVjMTIzZC4uODhkMmM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTI3Nyw3ICsxMjc3LDYgQEAKIHN0YXRpYyBpbnQgc3BpZGVyX25ldF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3Qgc3BpZGVyX25ldF9jYXJkICpjYXJkID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBzcGlkZXJfbmV0X2NhcmQsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBjYXJkLT5uZXRkZXY7CiAJaW50IHBhY2tldHNfZG9uZSA9IDA7CiAKIAl3aGlsZSAocGFja2V0c19kb25lIDwgYnVkZ2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDY2NmMxZDkuLjY5ZjlhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRVTl9UQVBfREVWOgotCQlkZXYtPm5ldGRldl9vcHMgPSAmdHVuX25ldGRldl9vcHM7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ0YXBfbmV0ZGV2X29wczsKIAkJLyogRXRoZXJuZXQgVEFQIERldmljZSAqLwogCQlldGhlcl9zZXR1cChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggMTk4Y2UzYy4uOWY3ODk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMjgzMSw3ICsyODMxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaWZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CiAJCWVuZHAgPSAmaWZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CiAJCWlmICgoKGVuZHAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IGRpcikgJiYKLQkJICAgICgoZW5kcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IHR5cGUpKQorCQkgICAgKHVzYl9lbmRwb2ludF90eXBlKGVuZHApID09IHR5cGUpKQogCQkJcmV0dXJuIGVuZHA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwppbmRleCAwYzY4MDI1Li4yZGMyNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKQEAgLTY1NCw3ICs2NTQsNyBAQAogCQkJbmV0aWZfcnhfY29tcGxldGUoZGV2LCBuYXBpKTsKIAkJCXFtZ3JfZW5hYmxlX2lycShyeHEpOwogCQkJaWYgKCFxbWdyX3N0YXRfZW1wdHkocnhxKSAmJgotCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCBuYXBpKSkgeworCQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpIHsKICNpZiBERUJVR19SWAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKIAkJCQkgICAgICAgIiBuZXRpZl9yeF9yZXNjaGVkdWxlIHN1Y2NlZWRlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggMDRjMTM5Ni4uYjVkYjU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTEwNjUsOCArMTA2NSw3IEBACiAJLyogRmluZCBidWxrIG91dCBlbmRwb2ludCAqLwogCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzFdLmRlc2M7CiAJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9UWVBFX01BU0spID09IFVTQl9ESVJfT1VUICYmCi0JICAgIChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JICAgIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkgICAgdXNiX2VuZHBvaW50X3hmZXJfYnVsayhlbmRwb2ludCkpIHsKIAkJYnVsa19vdXRfZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggYjU1Y2QyMy4uNzM3YmQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtMjY4LDE4ICsyNjgsNiBAQAogCXJldHVybiBjb29raWU7CiB9CiAKLXN0YXRpYyB2b2lkIGluY3JlbWVudF90YWlsKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpiKQotewotCXVuc2lnbmVkIGxvbmcgbmV3X3RhaWwgPSBiLT50YWlsX3BvcyArIDE7Ci0KLQlybWIoKTsJLyogYmUgc3VyZSBmaWZvIHBvaW50ZXJzIGFyZSBzeW5jaHJvbWl6ZWQgKi8KLQotCWlmIChuZXdfdGFpbCA8IGItPmJ1ZmZlcl9zaXplKQotCQliLT50YWlsX3BvcyA9IG5ld190YWlsOwotCWVsc2UKLQkJYi0+dGFpbF9wb3MgPSAwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2Nvb2tpZSA9IElOVkFMSURfQ09PS0lFOwogCiBzdGF0aWMgdm9pZCBhZGRfY3B1X3N3aXRjaChpbnQgaSkKQEAgLTMzMSwyOCArMzE5LDI1IEBACiAKICNkZWZpbmUgSUJTX0ZFVENIX0NPREVfU0laRQkyCiAjZGVmaW5lIElCU19PUF9DT0RFX1NJWkUJNQotI2RlZmluZSBJQlNfRUlQKG9mZnNldCkJCQkJXAotCSgoKHN0cnVjdCBvcF9zYW1wbGUgKikmY3B1X2J1Zi0+YnVmZmVyWyhvZmZzZXQpXSktPmVpcCkKLSNkZWZpbmUgSUJTX0VWRU5UKG9mZnNldCkJCQkJXAotCSgoKHN0cnVjdCBvcF9zYW1wbGUgKikmY3B1X2J1Zi0+YnVmZmVyWyhvZmZzZXQpXSktPmV2ZW50KQogCiAvKgogICogQWRkIElCUyBmZXRjaCBhbmQgb3AgZW50cmllcyB0byBldmVudCBidWZmZXIKICAqLwotc3RhdGljIHZvaWQgYWRkX2lic19iZWdpbihzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwgaW50IGNvZGUsCi0JCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorc3RhdGljIHZvaWQgYWRkX2lic19iZWdpbihpbnQgY3B1LCBpbnQgY29kZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJdW5zaWduZWQgbG9uZyByaXA7CiAJaW50IGksIGNvdW50OwogCXVuc2lnbmVkIGxvbmcgaWJzX2Nvb2tpZSA9IDA7CiAJb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCBvcF9zYW1wbGUgKnNhbXBsZTsKIAotCWluY3JlbWVudF90YWlsKGNwdV9idWYpOwkvKiBtb3ZlIHRvIFJJUCBlbnRyeSAqLwotCi0JcmlwID0gSUJTX0VJUChjcHVfYnVmLT50YWlsX3Bvcyk7CisJc2FtcGxlID0gY3B1X2J1ZmZlcl9yZWFkX2VudHJ5KGNwdSk7CisJaWYgKCFzYW1wbGUpCisJCWdvdG8gRXJyb3I7CisJcmlwID0gc2FtcGxlLT5laXA7CiAKICNpZmRlZiBfX0xQNjRfXwotCXJpcCArPSBJQlNfRVZFTlQoY3B1X2J1Zi0+dGFpbF9wb3MpIDw8IDMyOworCXJpcCArPSBzYW1wbGUtPmV2ZW50IDw8IDMyOwogI2VuZGlmCiAKIAlpZiAobW0pIHsKQEAgLTM3Niw4ICszNjEsOCBAQAogCWFkZF9ldmVudF9lbnRyeShvZmZzZXQpOwkvKiBPZmZzZXQgZnJvbSBEY29va2llICovCiAKIAkvKiB3ZSBzZW5kIHRoZSBEY29va2llIG9mZnNldCwgYnV0IHNlbmQgdGhlIHJhdyBMaW5lYXIgQWRkIGFsc28qLwotCWFkZF9ldmVudF9lbnRyeShJQlNfRUlQKGNwdV9idWYtPnRhaWxfcG9zKSk7Ci0JYWRkX2V2ZW50X2VudHJ5KElCU19FVkVOVChjcHVfYnVmLT50YWlsX3BvcykpOworCWFkZF9ldmVudF9lbnRyeShzYW1wbGUtPmVpcCk7CisJYWRkX2V2ZW50X2VudHJ5KHNhbXBsZS0+ZXZlbnQpOwogCiAJaWYgKGNvZGUgPT0gSUJTX0ZFVENIX0NPREUpCiAJCWNvdW50ID0gSUJTX0ZFVENIX0NPREVfU0laRTsJLypJQlMgRkVUQ0ggaXMgMiBpbnQ2NHMqLwpAQCAtMzg1LDEwICszNzAsMTcgQEAKIAkJY291bnQgPSBJQlNfT1BfQ09ERV9TSVpFOwkvKklCUyBPUCBpcyA1IGludDY0cyovCiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlpbmNyZW1lbnRfdGFpbChjcHVfYnVmKTsKLQkJYWRkX2V2ZW50X2VudHJ5KElCU19FSVAoY3B1X2J1Zi0+dGFpbF9wb3MpKTsKLQkJYWRkX2V2ZW50X2VudHJ5KElCU19FVkVOVChjcHVfYnVmLT50YWlsX3BvcykpOworCQlzYW1wbGUgPSBjcHVfYnVmZmVyX3JlYWRfZW50cnkoY3B1KTsKKwkJaWYgKCFzYW1wbGUpCisJCQlnb3RvIEVycm9yOworCQlhZGRfZXZlbnRfZW50cnkoc2FtcGxlLT5laXApOworCQlhZGRfZXZlbnRfZW50cnkoc2FtcGxlLT5ldmVudCk7CiAJfQorCisJcmV0dXJuOworCitFcnJvcjoKKwlyZXR1cm47CiB9CiAKICNlbmRpZgpAQCAtNDY2LDMzICs0NTgsNiBAQAogfQogCiAKLS8qICJhY3F1aXJlIiBhcyBtYW55IGNwdSBidWZmZXIgc2xvdHMgYXMgd2UgY2FuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdHMoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmIpCi17Ci0JdW5zaWduZWQgbG9uZyBoZWFkID0gYi0+aGVhZF9wb3M7Ci0JdW5zaWduZWQgbG9uZyB0YWlsID0gYi0+dGFpbF9wb3M7Ci0KLQkvKgotCSAqIFN1YnRsZS4gVGhpcyByZXNldHMgdGhlIHBlcnNpc3RlbnQgbGFzdF90YXNrCi0JICogYW5kIGluX2tlcm5lbCB2YWx1ZXMgdXNlZCBmb3Igc3dpdGNoaW5nIG5vdGVzLgotCSAqIEJVVCwgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgYmV0d2VlbiByZWFkaW5nCi0JICogaGVhZF9wb3MsIGFuZCB0aGlzIGNhbGwsIHRoYXQgbWVhbnMgc2FtcGxlcwotCSAqIGNhbiBhcHBlYXIgYXQgdGhlIG5ldyBoZWFkIHBvc2l0aW9uLCBidXQgbm90Ci0JICogYmUgcHJlZml4ZWQgd2l0aCB0aGUgbm90ZXMgZm9yIHN3aXRjaGluZwotCSAqIGtlcm5lbCBtb2RlIG9yIGEgdGFzayBzd2l0Y2guIFRoaXMgc21hbGwgaG9sZQotCSAqIGNhbiBsZWFkIHRvIG1pcy1hdHRyaWJ1dGlvbiBvciBzYW1wbGVzIHdoZXJlCi0JICogd2UgZG9uJ3Qga25vdyBpZiBpdCdzIGluIHRoZSBrZXJuZWwgb3Igbm90LAotCSAqIGF0IHRoZSBzdGFydCBvZiBhbiBldmVudCBidWZmZXIuCi0JICovCi0JY3B1X2J1ZmZlcl9yZXNldChiKTsKLQotCWlmIChoZWFkID49IHRhaWwpCi0JCXJldHVybiBoZWFkIC0gdGFpbDsKLQotCXJldHVybiBoZWFkICsgKGItPmJ1ZmZlcl9zaXplIC0gdGFpbCk7Ci19Ci0KLQogLyogTW92ZSB0YXNrcyBhbG9uZyB0b3dhcmRzIGRlYXRoLiBBbnkgdGFza3Mgb24gZGVhZF90YXNrcwogICogd2lsbCBkZWZpbml0ZWx5IGhhdmUgbm8gcmVtYWluaW5nIHJlZmVyZW5jZXMgaW4gYW55CiAgKiBDUFUgYnVmZmVycyBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIHdlIHVzZSB0d28gbGlzdHMsCkBAIC01NTksNjEgKzUyNCw2MSBAQAogICovCiB2b2lkIHN5bmNfYnVmZmVyKGludCBjcHUpCiB7Ci0Jc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBjcHUpOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldzsKIAl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7CiAJaW50IGluX2tlcm5lbCA9IDE7CiAJc3luY19idWZmZXJfc3RhdGUgc3RhdGUgPSBzYl9idWZmZXJfc3RhcnQ7Ci0jaWZuZGVmIENPTkZJR19PUFJPRklMRV9JQlMKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTsKLSNlbmRpZgogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAogCWFkZF9jcHVfc3dpdGNoKGNwdSk7CiAKLQkvKiBSZW1lbWJlciwgb25seSB3ZSBjYW4gbW9kaWZ5IHRhaWxfcG9zICovCi0KLSNpZm5kZWYgQ09ORklHX09QUk9GSUxFX0lCUwotCWF2YWlsYWJsZSA9IGdldF9zbG90cyhjcHVfYnVmKTsKKwljcHVfYnVmZmVyX3Jlc2V0KGNwdSk7CisJYXZhaWxhYmxlID0gY3B1X2J1ZmZlcl9lbnRyaWVzKGNwdSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYXZhaWxhYmxlOyArK2kpIHsKLSNlbHNlCi0Jd2hpbGUgKGdldF9zbG90cyhjcHVfYnVmKSkgewotI2VuZGlmCi0JCXN0cnVjdCBvcF9zYW1wbGUgKnMgPSAmY3B1X2J1Zi0+YnVmZmVyW2NwdV9idWYtPnRhaWxfcG9zXTsKKwkJc3RydWN0IG9wX3NhbXBsZSAqcyA9IGNwdV9idWZmZXJfcmVhZF9lbnRyeShjcHUpOworCQlpZiAoIXMpCisJCQlicmVhazsKIAogCQlpZiAoaXNfY29kZShzLT5laXApKSB7Ci0JCQlpZiAocy0+ZXZlbnQgPD0gQ1BVX0lTX0tFUk5FTCkgeworCQkJc3dpdGNoIChzLT5ldmVudCkgeworCQkJY2FzZSAwOgorCQkJY2FzZSBDUFVfSVNfS0VSTkVMOgogCQkJCS8qIGtlcm5lbC91c2Vyc3BhY2Ugc3dpdGNoICovCiAJCQkJaW5fa2VybmVsID0gcy0+ZXZlbnQ7CiAJCQkJaWYgKHN0YXRlID09IHNiX2J1ZmZlcl9zdGFydCkKIAkJCQkJc3RhdGUgPSBzYl9zYW1wbGVfc3RhcnQ7CiAJCQkJYWRkX2tlcm5lbF9jdHhfc3dpdGNoKHMtPmV2ZW50KTsKLQkJCX0gZWxzZSBpZiAocy0+ZXZlbnQgPT0gQ1BVX1RSQUNFX0JFR0lOKSB7CisJCQkJYnJlYWs7CisJCQljYXNlIENQVV9UUkFDRV9CRUdJTjoKIAkJCQlzdGF0ZSA9IHNiX2J0X3N0YXJ0OwogCQkJCWFkZF90cmFjZV9iZWdpbigpOworCQkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKLQkJCX0gZWxzZSBpZiAocy0+ZXZlbnQgPT0gSUJTX0ZFVENIX0JFR0lOKSB7CisJCQljYXNlIElCU19GRVRDSF9CRUdJTjoKIAkJCQlzdGF0ZSA9IHNiX2J0X3N0YXJ0OwotCQkJCWFkZF9pYnNfYmVnaW4oY3B1X2J1ZiwgSUJTX0ZFVENIX0NPREUsIG1tKTsKLQkJCX0gZWxzZSBpZiAocy0+ZXZlbnQgPT0gSUJTX09QX0JFR0lOKSB7CisJCQkJYWRkX2lic19iZWdpbihjcHUsIElCU19GRVRDSF9DT0RFLCBtbSk7CisJCQkJYnJlYWs7CisJCQljYXNlIElCU19PUF9CRUdJTjoKIAkJCQlzdGF0ZSA9IHNiX2J0X3N0YXJ0OwotCQkJCWFkZF9pYnNfYmVnaW4oY3B1X2J1ZiwgSUJTX09QX0NPREUsIG1tKTsKKwkJCQlhZGRfaWJzX2JlZ2luKGNwdSwgSUJTX09QX0NPREUsIG1tKTsKKwkJCQlicmVhazsKICNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSA9IG1tOwotCisJCQlkZWZhdWx0OgogCQkJCS8qIHVzZXJzcGFjZSBjb250ZXh0IHN3aXRjaCAqLworCQkJCW9sZG1tID0gbW07CiAJCQkJbmV3ID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKXMtPmV2ZW50OwotCiAJCQkJcmVsZWFzZV9tbShvbGRtbSk7CiAJCQkJbW0gPSB0YWtlX3Rhc2tzX21tKG5ldyk7CiAJCQkJaWYgKG1tICE9IG9sZG1tKQogCQkJCQljb29raWUgPSBnZXRfZXhlY19kY29va2llKG1tKTsKIAkJCQlhZGRfdXNlcl9jdHhfc3dpdGNoKG5ldywgY29va2llKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdGF0ZSA+PSBzYl9idF9zdGFydCAmJgogCQkJICAgIWFkZF9zYW1wbGUobW0sIHMsIGluX2tlcm5lbCkpIHsKQEAgLTYyMiw4ICs1ODcsNiBAQAogCQkJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmJ0X2xvc3Rfbm9fbWFwcGluZyk7CiAJCQl9CiAJCX0KLQotCQlpbmNyZW1lbnRfdGFpbChjcHVfYnVmKTsKIAl9CiAJcmVsZWFzZV9tbShtbSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKaW5kZXggMDFkMzhlNy4uNjEwOTA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKQEAgLTI4LDYgKzI4LDI1IEBACiAjaW5jbHVkZSAiYnVmZmVyX3N5bmMuaCIKICNpbmNsdWRlICJvcHJvZi5oIgogCisjZGVmaW5lIE9QX0JVRkZFUl9GTEFHUwkwCisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSBhY2Nlc3MgaXMgdXNpbmcgc3BpbiBsb2NraW5nLiBUaHVzLCB3cml0aW5nIHRvIHRoZQorICogYnVmZmVyIGJ5IE5NSSBoYW5kbGVyICh4ODYpIGNvdWxkIG9jY3VyIGFsc28gZHVyaW5nIGNyaXRpY2FsCisgKiBzZWN0aW9ucyB3aGVuIHJlYWRpbmcgdGhlIGJ1ZmZlci4gVG8gYXZvaWQgdGhpcywgdGhlcmUgYXJlIDIKKyAqIGJ1ZmZlcnMgZm9yIGluZGVwZW5kZW50IHJlYWQgYW5kIHdyaXRlIGFjY2Vzcy4gUmVhZCBhY2Nlc3MgaXMgaW4KKyAqIHByb2Nlc3MgY29udGV4dCBvbmx5LCB3cml0ZSBhY2Nlc3Mgb25seSBpbiB0aGUgTk1JIGhhbmRsZXIuIElmIHRoZQorICogcmVhZCBidWZmZXIgcnVucyBlbXB0eSwgYm90aCBidWZmZXJzIGFyZSBzd2FwcGVkIGF0b21pY2FsbHkuIFRoZXJlCisgKiBpcyBwb3RlbnRpYWxseSBhIHNtYWxsIHdpbmRvdyBkdXJpbmcgc3dhcHBpbmcgd2hlcmUgdGhlIGJ1ZmZlcnMgYXJlCisgKiBkaXNhYmxlZCBhbmQgc2FtcGxlcyBjb3VsZCBiZSBsb3N0LgorICoKKyAqIFVzaW5nIDIgYnVmZmVycyBpcyBhIGxpdHRsZSBiaXQgb3ZlcmhlYWQsIGJ1dCB0aGUgc29sdXRpb24gaXMgY2xlYXIKKyAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIGNoYW5nZXMgaW4gdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uLiBJdAorICogY2FuIGJlIGNoYW5nZWQgdG8gYSBzaW5nbGUgYnVmZmVyIHNvbHV0aW9uIHdoZW4gdGhlIHJpbmcgYnVmZmVyCisgKiBhY2Nlc3MgaXMgaW1wbGVtZW50ZWQgYXMgbm9uLWxvY2tpbmcgYXRvbWljIGNvZGUuCisgKi8KK3N0cnVjdCByaW5nX2J1ZmZlciAqb3BfcmluZ19idWZmZXJfcmVhZDsKK3N0cnVjdCByaW5nX2J1ZmZlciAqb3BfcmluZ19idWZmZXJfd3JpdGU7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciwgY3B1X2J1ZmZlcik7CiAKIHN0YXRpYyB2b2lkIHdxX3N5bmNfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC0zNywxMiArNTYsMTIgQEAKIAogdm9pZCBmcmVlX2NwdV9idWZmZXJzKHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQl2ZnJlZShwZXJfY3B1KGNwdV9idWZmZXIsIGkpLmJ1ZmZlcik7Ci0JCXBlcl9jcHUoY3B1X2J1ZmZlciwgaSkuYnVmZmVyID0gTlVMTDsKLQl9CisJaWYgKG9wX3JpbmdfYnVmZmVyX3JlYWQpCisJCXJpbmdfYnVmZmVyX2ZyZWUob3BfcmluZ19idWZmZXJfcmVhZCk7CisJb3BfcmluZ19idWZmZXJfcmVhZCA9IE5VTEw7CisJaWYgKG9wX3JpbmdfYnVmZmVyX3dyaXRlKQorCQlyaW5nX2J1ZmZlcl9mcmVlKG9wX3JpbmdfYnVmZmVyX3dyaXRlKTsKKwlvcF9yaW5nX2J1ZmZlcl93cml0ZSA9IE5VTEw7CiB9CiAKIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfZ2V0X2NwdV9idWZmZXJfc2l6ZSh2b2lkKQpAQCAtNjQsMTQgKzgzLDE2IEBACiAKIAl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zaXplID0gZnNfY3B1X2J1ZmZlcl9zaXplOwogCisJb3BfcmluZ19idWZmZXJfcmVhZCA9IHJpbmdfYnVmZmVyX2FsbG9jKGJ1ZmZlcl9zaXplLCBPUF9CVUZGRVJfRkxBR1MpOworCWlmICghb3BfcmluZ19idWZmZXJfcmVhZCkKKwkJZ290byBmYWlsOworCW9wX3JpbmdfYnVmZmVyX3dyaXRlID0gcmluZ19idWZmZXJfYWxsb2MoYnVmZmVyX3NpemUsIE9QX0JVRkZFUl9GTEFHUyk7CisJaWYgKCFvcF9yaW5nX2J1ZmZlcl93cml0ZSkKKwkJZ290byBmYWlsOworCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmIgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBpKTsKIAotCQliLT5idWZmZXIgPSB2bWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBvcF9zYW1wbGUpICogYnVmZmVyX3NpemUsCi0JCQljcHVfdG9fbm9kZShpKSk7Ci0JCWlmICghYi0+YnVmZmVyKQotCQkJZ290byBmYWlsOwotCiAJCWItPmxhc3RfdGFzayA9IE5VTEw7CiAJCWItPmxhc3RfaXNfa2VybmVsID0gLTE7CiAJCWItPnRyYWNpbmcgPSAwOwpAQCAtMTI0LDU3ICsxNDUsMzEgQEAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQogCi0vKiBSZXNldHMgdGhlIGNwdSBidWZmZXIgdG8gYSBzYW5lIHN0YXRlLiAqLwotdm9pZCBjcHVfYnVmZmVyX3Jlc2V0KHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmKQotewotCS8qIHJlc2V0IHRoZXNlIHRvIGludmFsaWQgdmFsdWVzOyB0aGUgbmV4dCBzYW1wbGUKLQkgKiBjb2xsZWN0ZWQgd2lsbCBwb3B1bGF0ZSB0aGUgYnVmZmVyIHdpdGggcHJvcGVyCi0JICogdmFsdWVzIHRvIGluaXRpYWxpemUgdGhlIGJ1ZmZlcgotCSAqLwotCWNwdV9idWYtPmxhc3RfaXNfa2VybmVsID0gLTE7Ci0JY3B1X2J1Zi0+bGFzdF90YXNrID0gTlVMTDsKLX0KLQotLyogY29tcHV0ZSBudW1iZXIgb2YgYXZhaWxhYmxlIHNsb3RzIGluIGNwdV9idWZmZXIgcXVldWUgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZV9zbG90cyhzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciBjb25zdCAqYikKLXsKLQl1bnNpZ25lZCBsb25nIGhlYWQgPSBiLT5oZWFkX3BvczsKLQl1bnNpZ25lZCBsb25nIHRhaWwgPSBiLT50YWlsX3BvczsKLQotCWlmICh0YWlsID4gaGVhZCkKLQkJcmV0dXJuICh0YWlsIC0gaGVhZCkgLSAxOwotCi0JcmV0dXJuIHRhaWwgKyAoYi0+YnVmZmVyX3NpemUgLSBoZWFkKSAtIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGluY3JlbWVudF9oZWFkKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpiKQotewotCXVuc2lnbmVkIGxvbmcgbmV3X2hlYWQgPSBiLT5oZWFkX3BvcyArIDE7Ci0KLQkvKiBFbnN1cmUgYW55dGhpbmcgd3JpdHRlbiB0byB0aGUgc2xvdCBiZWZvcmUgd2UKLQkgKiBpbmNyZW1lbnQgaXMgdmlzaWJsZSAqLwotCXdtYigpOwotCi0JaWYgKG5ld19oZWFkIDwgYi0+YnVmZmVyX3NpemUpCi0JCWItPmhlYWRfcG9zID0gbmV3X2hlYWQ7Ci0JZWxzZQotCQliLT5oZWFkX3BvcyA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSBpbnQKIGFkZF9zYW1wbGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYsCiAJICAgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKLQlzdHJ1Y3Qgb3Bfc2FtcGxlICplbnRyeSA9ICZjcHVfYnVmLT5idWZmZXJbY3B1X2J1Zi0+aGVhZF9wb3NdOwotCWVudHJ5LT5laXAgPSBwYzsKLQllbnRyeS0+ZXZlbnQgPSBldmVudDsKLQlpbmNyZW1lbnRfaGVhZChjcHVfYnVmKTsKKwlzdHJ1Y3Qgb3BfZW50cnkgZW50cnk7CisJaW50IHJldDsKKworCXJldCA9IGNwdV9idWZmZXJfd3JpdGVfZW50cnkoJmVudHJ5KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZW50cnkuc2FtcGxlLT5laXAgPSBwYzsKKwllbnRyeS5zYW1wbGUtPmV2ZW50ID0gZXZlbnQ7CisKKwlyZXQgPSBjcHVfYnVmZmVyX3dyaXRlX2NvbW1pdCgmZW50cnkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIGludAogYWRkX2NvZGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlhZGRfc2FtcGxlKGJ1ZmZlciwgRVNDQVBFX0NPREUsIHZhbHVlKTsKKwlyZXR1cm4gYWRkX3NhbXBsZShidWZmZXIsIEVTQ0FQRV9DT0RFLCB2YWx1ZSk7CiB9CiAKIC8qIFRoaXMgbXVzdCBiZSBzYWZlIGZyb20gYW55IGNvbnRleHQuIEl0J3Mgc2FmZSB3cml0aW5nIGhlcmUKQEAgLTE5OCwxMSArMTkzLDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKG5yX2F2YWlsYWJsZV9zbG90cyhjcHVfYnVmKSA8IDMpIHsKLQkJY3B1X2J1Zi0+c2FtcGxlX2xvc3Rfb3ZlcmZsb3crKzsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaXNfa2VybmVsID0gISFpc19rZXJuZWw7CiAKIAl0YXNrID0gY3VycmVudDsKQEAgLTIxMCwyNiArMjAwLDI5IEBACiAJLyogbm90aWNlIGEgc3dpdGNoIGZyb20gdXNlci0+a2VybmVsIG9yIHZpY2UgdmVyc2EgKi8KIAlpZiAoY3B1X2J1Zi0+bGFzdF9pc19rZXJuZWwgIT0gaXNfa2VybmVsKSB7CiAJCWNwdV9idWYtPmxhc3RfaXNfa2VybmVsID0gaXNfa2VybmVsOwotCQlhZGRfY29kZShjcHVfYnVmLCBpc19rZXJuZWwpOworCQlpZiAoYWRkX2NvZGUoY3B1X2J1ZiwgaXNfa2VybmVsKSkKKwkJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBub3RpY2UgYSB0YXNrIHN3aXRjaCAqLwogCWlmIChjcHVfYnVmLT5sYXN0X3Rhc2sgIT0gdGFzaykgewogCQljcHVfYnVmLT5sYXN0X3Rhc2sgPSB0YXNrOwotCQlhZGRfY29kZShjcHVfYnVmLCAodW5zaWduZWQgbG9uZyl0YXNrKTsKKwkJaWYgKGFkZF9jb2RlKGNwdV9idWYsICh1bnNpZ25lZCBsb25nKXRhc2spKQorCQkJZ290byBmYWlsOwogCX0KIAotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgcGMsIGV2ZW50KTsKKwlpZiAoYWRkX3NhbXBsZShjcHVfYnVmLCBwYywgZXZlbnQpKQorCQlnb3RvIGZhaWw7CisKIAlyZXR1cm4gMTsKKworZmFpbDoKKwljcHVfYnVmLT5zYW1wbGVfbG9zdF9vdmVyZmxvdysrOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9wcm9maWxlX2JlZ2luX3RyYWNlKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmKQogewotCWlmIChucl9hdmFpbGFibGVfc2xvdHMoY3B1X2J1ZikgPCA0KSB7Ci0JCWNwdV9idWYtPnNhbXBsZV9sb3N0X292ZXJmbG93Kys7Ci0JCXJldHVybiAwOwotCX0KLQogCWFkZF9jb2RlKGNwdV9idWYsIENQVV9UUkFDRV9CRUdJTik7CiAJY3B1X2J1Zi0+dHJhY2luZyA9IDE7CiAJcmV0dXJuIDE7CkBAIC0yNTMsOCArMjQ2LDEwIEBACiAJaWYgKCFvcHJvZmlsZV9iZWdpbl90cmFjZShjcHVfYnVmKSkKIAkJcmV0dXJuOwogCi0JLyogaWYgbG9nX3NhbXBsZSgpIGZhaWwgd2UgY2FuJ3QgYmFja3RyYWNlIHNpbmNlIHdlIGxvc3QgdGhlIHNvdXJjZQotCSAqIG9mIHRoaXMgZXZlbnQgKi8KKwkvKgorCSAqIGlmIGxvZ19zYW1wbGUoKSBmYWlsIHdlIGNhbid0IGJhY2t0cmFjZSBzaW5jZSB3ZSBsb3N0IHRoZQorCSAqIHNvdXJjZSBvZiB0aGlzIGV2ZW50CisJICovCiAJaWYgKGxvZ19zYW1wbGUoY3B1X2J1ZiwgcGMsIGlzX2tlcm5lbCwgZXZlbnQpKQogCQlvcHJvZmlsZV9vcHMuYmFja3RyYWNlKHJlZ3MsIGJhY2t0cmFjZV9kZXB0aCk7CiAJb3Byb2ZpbGVfZW5kX3RyYWNlKGNwdV9idWYpOwpAQCAtMjcyLDQ5ICsyNjcsNTUgQEAKIAogI2RlZmluZSBNQVhfSUJTX1NBTVBMRV9TSVpFIDE0CiAKLXZvaWQgb3Byb2ZpbGVfYWRkX2lic19zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKmNvbnN0IHJlZ3MsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqY29uc3QgaWJzX3NhbXBsZSwgaW50IGlic19jb2RlKQordm9pZCBvcHJvZmlsZV9hZGRfaWJzX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCisJCQkgICAgIHVuc2lnbmVkIGludCAqIGNvbnN0IGlic19zYW1wbGUsIGludCBpYnNfY29kZSkKIHsKIAlpbnQgaXNfa2VybmVsID0gIXVzZXJfbW9kZShyZWdzKTsKIAlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKGNwdV9idWZmZXIpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlpbnQgZmFpbCA9IDA7CiAKIAljcHVfYnVmLT5zYW1wbGVfcmVjZWl2ZWQrKzsKIAotCWlmIChucl9hdmFpbGFibGVfc2xvdHMoY3B1X2J1ZikgPCBNQVhfSUJTX1NBTVBMRV9TSVpFKSB7Ci0JCS8qIHdlIGNhbid0IGJhY2t0cmFjZSBzaW5jZSB3ZSBsb3N0IHRoZSBzb3VyY2Ugb2YgdGhpcyBldmVudCAqLwotCQljcHVfYnVmLT5zYW1wbGVfbG9zdF9vdmVyZmxvdysrOwotCQlyZXR1cm47Ci0JfQotCiAJLyogbm90aWNlIGEgc3dpdGNoIGZyb20gdXNlci0+a2VybmVsIG9yIHZpY2UgdmVyc2EgKi8KIAlpZiAoY3B1X2J1Zi0+bGFzdF9pc19rZXJuZWwgIT0gaXNfa2VybmVsKSB7CisJCWlmIChhZGRfY29kZShjcHVfYnVmLCBpc19rZXJuZWwpKQorCQkJZ290byBmYWlsOwogCQljcHVfYnVmLT5sYXN0X2lzX2tlcm5lbCA9IGlzX2tlcm5lbDsKLQkJYWRkX2NvZGUoY3B1X2J1ZiwgaXNfa2VybmVsKTsKIAl9CiAKIAkvKiBub3RpY2UgYSB0YXNrIHN3aXRjaCAqLwogCWlmICghaXNfa2VybmVsKSB7CiAJCXRhc2sgPSBjdXJyZW50OwogCQlpZiAoY3B1X2J1Zi0+bGFzdF90YXNrICE9IHRhc2spIHsKKwkJCWlmIChhZGRfY29kZShjcHVfYnVmLCAodW5zaWduZWQgbG9uZyl0YXNrKSkKKwkJCQlnb3RvIGZhaWw7CiAJCQljcHVfYnVmLT5sYXN0X3Rhc2sgPSB0YXNrOwotCQkJYWRkX2NvZGUoY3B1X2J1ZiwgKHVuc2lnbmVkIGxvbmcpdGFzayk7CiAJCX0KIAl9CiAKLQlhZGRfY29kZShjcHVfYnVmLCBpYnNfY29kZSk7Ci0JYWRkX3NhbXBsZShjcHVfYnVmLCBpYnNfc2FtcGxlWzBdLCBpYnNfc2FtcGxlWzFdKTsKLQlhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbMl0sIGlic19zYW1wbGVbM10pOwotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVs0XSwgaWJzX3NhbXBsZVs1XSk7CisJZmFpbCA9IGZhaWwgfHwgYWRkX2NvZGUoY3B1X2J1ZiwgaWJzX2NvZGUpOworCWZhaWwgPSBmYWlsIHx8IGFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVswXSwgaWJzX3NhbXBsZVsxXSk7CisJZmFpbCA9IGZhaWwgfHwgYWRkX3NhbXBsZShjcHVfYnVmLCBpYnNfc2FtcGxlWzJdLCBpYnNfc2FtcGxlWzNdKTsKKwlmYWlsID0gZmFpbCB8fCBhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbNF0sIGlic19zYW1wbGVbNV0pOwogCiAJaWYgKGlic19jb2RlID09IElCU19PUF9CRUdJTikgewotCQlhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbNl0sIGlic19zYW1wbGVbN10pOwotCQlhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbOF0sIGlic19zYW1wbGVbOV0pOwotCQlhZGRfc2FtcGxlKGNwdV9idWYsIGlic19zYW1wbGVbMTBdLCBpYnNfc2FtcGxlWzExXSk7CisJCWZhaWwgPSBmYWlsIHx8IGFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVs2XSwgaWJzX3NhbXBsZVs3XSk7CisJCWZhaWwgPSBmYWlsIHx8IGFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVs4XSwgaWJzX3NhbXBsZVs5XSk7CisJCWZhaWwgPSBmYWlsIHx8IGFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzX3NhbXBsZVsxMF0sIGlic19zYW1wbGVbMTFdKTsKIAl9CiAKKwlpZiAoZmFpbCkKKwkJZ290byBmYWlsOworCiAJaWYgKGJhY2t0cmFjZV9kZXB0aCkKIAkJb3Byb2ZpbGVfb3BzLmJhY2t0cmFjZShyZWdzLCBiYWNrdHJhY2VfZGVwdGgpOworCisJcmV0dXJuOworCitmYWlsOgorCWNwdV9idWYtPnNhbXBsZV9sb3N0X292ZXJmbG93Kys7CisJcmV0dXJuOwogfQogCiAjZW5kaWYKQEAgLTMzMiwyMSArMzMzLDIxIEBACiAJaWYgKCFjcHVfYnVmLT50cmFjaW5nKQogCQlyZXR1cm47CiAKLQlpZiAobnJfYXZhaWxhYmxlX3Nsb3RzKGNwdV9idWYpIDwgMSkgewotCQljcHVfYnVmLT50cmFjaW5nID0gMDsKLQkJY3B1X2J1Zi0+c2FtcGxlX2xvc3Rfb3ZlcmZsb3crKzsKLQkJcmV0dXJuOwotCX0KKwkvKgorCSAqIGJyb2tlbiBmcmFtZSBjYW4gZ2l2ZSBhbiBlaXAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyBhbgorCSAqIGVzY2FwZSBjb2RlLCBhYm9ydCB0aGUgdHJhY2UgaWYgd2UgZ2V0IGl0CisJICovCisJaWYgKHBjID09IEVTQ0FQRV9DT0RFKQorCQlnb3RvIGZhaWw7CiAKLQkvKiBicm9rZW4gZnJhbWUgY2FuIGdpdmUgYW4gZWlwIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgYW4gZXNjYXBlIGNvZGUsCi0JICogYWJvcnQgdGhlIHRyYWNlIGlmIHdlIGdldCBpdCAqLwotCWlmIChwYyA9PSBFU0NBUEVfQ09ERSkgewotCQljcHVfYnVmLT50cmFjaW5nID0gMDsKLQkJY3B1X2J1Zi0+YmFja3RyYWNlX2Fib3J0ZWQrKzsKLQkJcmV0dXJuOwotCX0KKwlpZiAoYWRkX3NhbXBsZShjcHVfYnVmLCBwYywgMCkpCisJCWdvdG8gZmFpbDsKIAotCWFkZF9zYW1wbGUoY3B1X2J1ZiwgcGMsIDApOworCXJldHVybjsKK2ZhaWw6CisJY3B1X2J1Zi0+dHJhY2luZyA9IDA7CisJY3B1X2J1Zi0+YmFja3RyYWNlX2Fib3J0ZWQrKzsKKwlyZXR1cm47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCmluZGV4IGQzY2MyNjIuLmFhY2IwZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIApAQCAtMzIsNiArMzMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGV2ZW50OwogfTsKIAorc3RydWN0IG9wX2VudHJ5IHsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBvcF9zYW1wbGUgKnNhbXBsZTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKK307CisKIHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGhlYWRfcG9zOwogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdGFpbF9wb3M7CkBAIC0zOSw3ICs0Niw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2s7CiAJaW50IGxhc3RfaXNfa2VybmVsOwogCWludCB0cmFjaW5nOwotCXN0cnVjdCBvcF9zYW1wbGUgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHNhbXBsZV9yZWNlaXZlZDsKIAl1bnNpZ25lZCBsb25nIHNhbXBsZV9sb3N0X292ZXJmbG93OwogCXVuc2lnbmVkIGxvbmcgYmFja3RyYWNlX2Fib3J0ZWQ7CkBAIC00OCw5ICs1NCw2OCBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgcmluZ19idWZmZXIgKm9wX3JpbmdfYnVmZmVyX3JlYWQ7CitleHRlcm4gc3RydWN0IHJpbmdfYnVmZmVyICpvcF9yaW5nX2J1ZmZlcl93cml0ZTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciwgY3B1X2J1ZmZlcik7CiAKLXZvaWQgY3B1X2J1ZmZlcl9yZXNldChzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1Zik7CisvKgorICogUmVzZXRzIHRoZSBjcHUgYnVmZmVyIHRvIGEgc2FuZSBzdGF0ZS4KKyAqCisgKiByZXNldCB0aGVzZSB0byBpbnZhbGlkIHZhbHVlczsgdGhlIG5leHQgc2FtcGxlIGNvbGxlY3RlZCB3aWxsCisgKiBwb3B1bGF0ZSB0aGUgYnVmZmVyIHdpdGggcHJvcGVyIHZhbHVlcyB0byBpbml0aWFsaXplIHRoZSBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNwdV9idWZmZXJfcmVzZXQoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGNwdSk7CisKKwljcHVfYnVmLT5sYXN0X2lzX2tlcm5lbCA9IC0xOworCWNwdV9idWYtPmxhc3RfdGFzayA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9idWZmZXJfd3JpdGVfZW50cnkoc3RydWN0IG9wX2VudHJ5ICplbnRyeSkKK3sKKwllbnRyeS0+ZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUob3BfcmluZ19idWZmZXJfd3JpdGUsCisJCQkJCQlzaXplb2Yoc3RydWN0IG9wX3NhbXBsZSksCisJCQkJCQkmZW50cnktPmlycV9mbGFncyk7CisJaWYgKGVudHJ5LT5ldmVudCkKKwkJZW50cnktPnNhbXBsZSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZW50cnktPmV2ZW50KTsKKwllbHNlCisJCWVudHJ5LT5zYW1wbGUgPSBOVUxMOworCisJaWYgKCFlbnRyeS0+c2FtcGxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVfYnVmZmVyX3dyaXRlX2NvbW1pdChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5KQoreworCXJldHVybiByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KG9wX3JpbmdfYnVmZmVyX3dyaXRlLCBlbnRyeS0+ZXZlbnQsCisJCQkJCSBlbnRyeS0+aXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3Bfc2FtcGxlICpjcHVfYnVmZmVyX3JlYWRfZW50cnkoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmU7CisJZSA9IHJpbmdfYnVmZmVyX2NvbnN1bWUob3BfcmluZ19idWZmZXJfcmVhZCwgY3B1LCBOVUxMKTsKKwlpZiAoZSkKKwkJcmV0dXJuIHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZSk7CisJaWYgKHJpbmdfYnVmZmVyX3N3YXBfY3B1KG9wX3JpbmdfYnVmZmVyX3JlYWQsCisJCQkJIG9wX3JpbmdfYnVmZmVyX3dyaXRlLAorCQkJCSBjcHUpKQorCQlyZXR1cm4gTlVMTDsKKwllID0gcmluZ19idWZmZXJfY29uc3VtZShvcF9yaW5nX2J1ZmZlcl9yZWFkLCBjcHUsIE5VTEwpOworCWlmIChlKQorCQlyZXR1cm4gcmluZ19idWZmZXJfZXZlbnRfZGF0YShlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogImFjcXVpcmUiIGFzIG1hbnkgY3B1IGJ1ZmZlciBzbG90cyBhcyB3ZSBjYW4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHVfYnVmZmVyX2VudHJpZXMoaW50IGNwdSkKK3sKKwlyZXR1cm4gcmluZ19idWZmZXJfZW50cmllc19jcHUob3BfcmluZ19idWZmZXJfcmVhZCwgY3B1KQorCQkrIHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KG9wX3JpbmdfYnVmZmVyX3dyaXRlLCBjcHUpOworfQogCiAvKiB0cmFuc2llbnQgZXZlbnRzIGZvciB0aGUgQ1BVIGJ1ZmZlciAtPiBldmVudCBidWZmZXIgKi8KICNkZWZpbmUgQ1BVX0lTX0tFUk5FTCAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKaW5kZXggY2MxMDZkNS4uZDgyMDE5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfZmlsZXMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKQEAgLTE0LDkgKzE0LDEzIEBACiAjaW5jbHVkZSAib3Byb2ZpbGVfc3RhdHMuaCIKICNpbmNsdWRlICJvcHJvZi5oIgogCi11bnNpZ25lZCBsb25nIGZzX2J1ZmZlcl9zaXplID0gMTMxMDcyOwotdW5zaWduZWQgbG9uZyBmc19jcHVfYnVmZmVyX3NpemUgPSA4MTkyOwotdW5zaWduZWQgbG9uZyBmc19idWZmZXJfd2F0ZXJzaGVkID0gMzI3Njg7IC8qIEZJWE1FOiB0dW5lICovCisjZGVmaW5lIEZTX0JVRkZFUl9TSVpFX0RFRkFVTFQJCTEzMTA3MgorI2RlZmluZSBGU19DUFVfQlVGRkVSX1NJWkVfREVGQVVMVAk4MTkyCisjZGVmaW5lIEZTX0JVRkZFUl9XQVRFUlNIRURfREVGQVVMVAkzMjc2OAkvKiBGSVhNRTogdHVuZSAqLworCit1bnNpZ25lZCBsb25nIGZzX2J1ZmZlcl9zaXplOwordW5zaWduZWQgbG9uZyBmc19jcHVfYnVmZmVyX3NpemU7Cit1bnNpZ25lZCBsb25nIGZzX2J1ZmZlcl93YXRlcnNoZWQ7CiAKIHN0YXRpYyBzc2l6ZV90IGRlcHRoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CkBAIC0xMjAsNiArMTI0LDExIEBACiAKIHZvaWQgb3Byb2ZpbGVfY3JlYXRlX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7CisJLyogcmVpbml0aWFsaXplIGRlZmF1bHQgdmFsdWVzICovCisJZnNfYnVmZmVyX3NpemUgPQlGU19CVUZGRVJfU0laRV9ERUZBVUxUOworCWZzX2NwdV9idWZmZXJfc2l6ZSA9CUZTX0NQVV9CVUZGRVJfU0laRV9ERUZBVUxUOworCWZzX2J1ZmZlcl93YXRlcnNoZWQgPQlGU19CVUZGRVJfV0FURVJTSEVEX0RFRkFVTFQ7CisKIAlvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCAiZW5hYmxlIiwgJmVuYWJsZV9mb3BzKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV9maWxlX3Blcm0oc2IsIHJvb3QsICJkdW1wIiwgJmR1bXBfZm9wcywgMDY2Nik7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImJ1ZmZlciIsICZldmVudF9idWZmZXJfZm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCAyZGU1YTMyLi5mNzgzNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlICJpbnRyX3JlbWFwcGluZy5oIgogCkBAIC0xOSwxNyArMjAsNzUgQEAKIAl1OCAgaXJ0ZV9tYXNrOwogfTsKIAotc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSBpcnFfMl9pb21tdVhbTlJfSVJRU107CisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKK3N0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmdldF9vbmVfZnJlZV9pcnFfMl9pb21tdShpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfMl9pb21tdSAqaW9tbXU7CisJaW50IG5vZGU7CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKworCWlvbW11ID0ga3phbGxvY19ub2RlKHNpemVvZigqaW9tbXUpLCBHRlBfQVRPTUlDLCBub2RlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiYWxsb2MgaXJxXzJfaW9tbXUgb24gY3B1ICVkIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CisKKwlyZXR1cm4gaW9tbXU7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV8yX2lvbW11KHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIChpcnEgPCBucl9pcnFzKSA/IGlycV8yX2lvbW11WCArIGlycSA6IE5VTEw7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFkZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZGVzYy0+aXJxXzJfaW9tbXU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV8yX2lvbW11X2FsbG9jX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKworCS8qCisJICogYWxsb2MgaXJxIGRlc2MgaWYgbm90IGFsbG9jYXRlZCBhbHJlYWR5LgorCSAqLworCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19jcHUoaXJxLCBjcHUpOworCWlmICghZGVzYykgeworCQlwcmludGsoS0VSTl9JTkZPICJjYW4gbm90IGdldCBpcnFfZGVzYyBmb3IgJWRcbiIsIGlycSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlycV9pb21tdSA9IGRlc2MtPmlycV8yX2lvbW11OworCisJaWYgKCFpcnFfaW9tbXUpCisJCWRlc2MtPmlycV8yX2lvbW11ID0gZ2V0X29uZV9mcmVlX2lycV8yX2lvbW11KGNwdSk7CisKKwlyZXR1cm4gZGVzYy0+aXJxXzJfaW9tbXU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV8yX2lvbW11X2FsbG9jKHVuc2lnbmVkIGludCBpcnEpCiB7CisJcmV0dXJuIGlycV8yX2lvbW11X2FsbG9jX2NwdShpcnEsIGJvb3RfY3B1X2lkKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCisKK3N0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgaXJxXzJfaW9tbXVYW05SX0lSUVNdOworCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICppcnFfMl9pb21tdSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPCBucl9pcnFzKQorCQlyZXR1cm4gJmlycV8yX2lvbW11WFtpcnFdOworCisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICppcnFfMl9pb21tdV9hbGxvYyh1bnNpZ25lZCBpbnQgaXJxKQorewogCXJldHVybiBpcnFfMl9pb21tdShpcnEpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxXzJfaXJfbG9jayk7CiAKQEAgLTg2LDkgKzE0NSwxMSBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAtMTsKIAorI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQogCS8qIHByb3RlY3QgaXJxXzJfaW9tbXVfYWxsb2MgbGF0ZXIgKi8KIAlpZiAoaXJxID49IG5yX2lycXMpCiAJCXJldHVybiAtMTsKKyNlbmRpZgogCiAJLyoKIAkgKiBzdGFydCB0aGUgSVJURSBzZWFyY2ggZnJvbSBpbmRleCAwLgpAQCAtMTMwLDYgKzE5MSwxMiBAQAogCQl0YWJsZS0+YmFzZVtpXS5wcmVzZW50ID0gMTsKIAogCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKKwkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIGlycV8yX2lvbW11XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCWlycV9pb21tdS0+aW9tbXUgPSBpb21tdTsKIAlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSAgaW5kZXg7CiAJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKQEAgLTE3Nyw2ICsyNDQsMTIgQEAKIAogCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CiAKKwlpZiAoIWlycV9pb21tdSkgeworCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgaXJxXzJfaW9tbXVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCiAJaXJxX2lvbW11LT5pb21tdSA9IGlvbW11OwogCWlycV9pb21tdS0+aXJ0ZV9pbmRleCA9IGluZGV4OwogCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IHN1YmhhbmRsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5jIGIvZHJpdmVycy9wY2kvbXNpLmMKaW5kZXggNzQ4MDFmNy4uMTFhNTFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmMKKysrIGIvZHJpdmVycy9wY2kvbXNpLmMKQEAgLTEwMywxMSArMTAzLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBtc2l4X2ZsdXNoX3dyaXRlcyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbXNpeF9mbHVzaF93cml0ZXMoc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAKLQllbnRyeSA9IGdldF9pcnFfbXNpKGlycSk7CisJZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwogCUJVR19PTighZW50cnkgfHwgIWVudHJ5LT5kZXYpOwogCXN3aXRjaCAoZW50cnktPm1zaV9hdHRyaWIudHlwZSkgewogCWNhc2UgUENJX0NBUF9JRF9NU0k6CkBAIC0xMzUsMTEgKzEzNSwxMSBAQAogICogUmV0dXJucyAxIGlmIGl0IHN1Y2NlZWRlZCBpbiBtYXNraW5nIHRoZSBpbnRlcnJ1cHQgYW5kIDAgaWYgdGhlIGRldmljZQogICogZG9lc24ndCBzdXBwb3J0IE1TSSBtYXNraW5nLgogICovCi1zdGF0aWMgaW50IG1zaV9zZXRfbWFza19iaXRzKHVuc2lnbmVkIGludCBpcnEsIHUzMiBtYXNrLCB1MzIgZmxhZykKK3N0YXRpYyBpbnQgbXNpX3NldF9tYXNrX2JpdHMoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAotCWVudHJ5ID0gZ2V0X2lycV9tc2koaXJxKTsKKwllbnRyeSA9IGdldF9pcnFfZGVzY19tc2koZGVzYyk7CiAJQlVHX09OKCFlbnRyeSB8fCAhZW50cnktPmRldik7CiAJc3dpdGNoIChlbnRyeS0+bXNpX2F0dHJpYi50eXBlKSB7CiAJY2FzZSBQQ0lfQ0FQX0lEX01TSToKQEAgLTE3Miw5ICsxNzIsOSBAQAogCXJldHVybiAxOwogfQogCi12b2lkIHJlYWRfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCByZWFkX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGdldF9pcnFfbXNpKGlycSk7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGdldF9pcnFfZGVzY19tc2koZGVzYyk7CiAJc3dpdGNoKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKIAljYXNlIFBDSV9DQVBfSURfTVNJOgogCXsKQEAgLTIxMSw5ICsyMTEsMTYgQEAKIAl9CiB9CiAKLXZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQordm9pZCByZWFkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKLQlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9tc2koaXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJcmVhZF9tc2lfbXNnX2Rlc2MoZGVzYywgbXNnKTsKK30KKwordm9pZCB3cml0ZV9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwogCXN3aXRjaCAoZW50cnktPm1zaV9hdHRyaWIudHlwZSkgewogCWNhc2UgUENJX0NBUF9JRF9NU0k6CiAJewpAQCAtMjUyLDIxICsyNTksMzEgQEAKIAllbnRyeS0+bXNnID0gKm1zZzsKIH0KIAordm9pZCB3cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCBtc2cpOworfQorCiB2b2lkIG1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCW1zaV9zZXRfbWFza19iaXRzKGlycSwgMSwgMSk7Ci0JbXNpeF9mbHVzaF93cml0ZXMoaXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJbXNpX3NldF9tYXNrX2JpdHMoZGVzYywgMSwgMSk7CisJbXNpeF9mbHVzaF93cml0ZXMoZGVzYyk7CiB9CiAKIHZvaWQgdW5tYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQltc2lfc2V0X21hc2tfYml0cyhpcnEsIDEsIDApOwotCW1zaXhfZmx1c2hfd3JpdGVzKGlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCW1zaV9zZXRfbWFza19iaXRzKGRlc2MsIDEsIDApOworCW1zaXhfZmx1c2hfd3JpdGVzKGRlc2MpOwogfQogCiBzdGF0aWMgaW50IG1zaV9mcmVlX2lycXMoc3RydWN0IHBjaV9kZXYqIGRldik7CiAKLQogc3RhdGljIHN0cnVjdCBtc2lfZGVzYyogYWxsb2NfbXNpX2VudHJ5KHZvaWQpCiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKQEAgLTMwMyw5ICszMjAsMTEgQEAKIAlwY2lfaW50eF9mb3JfbXNpKGRldiwgMCk7CiAJbXNpX3NldF9lbmFibGUoZGV2LCAwKTsKIAl3cml0ZV9tc2lfbXNnKGRldi0+aXJxLCAmZW50cnktPm1zZyk7Ci0JaWYgKGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQpCi0JCW1zaV9zZXRfbWFza19iaXRzKGRldi0+aXJxLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0c19tYXNrLAorCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGRldi0+aXJxKTsKKwkJbXNpX3NldF9tYXNrX2JpdHMoZGVzYywgZW50cnktPm1zaV9hdHRyaWIubWFza2JpdHNfbWFzaywKIAkJCQkgIGVudHJ5LT5tc2lfYXR0cmliLm1hc2tlZCk7CisJfQogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmY29udHJvbCk7CiAJY29udHJvbCAmPSB+UENJX01TSV9GTEFHU19RU0laRTsKQEAgLTMyNyw4ICszNDYsOSBAQAogCW1zaXhfc2V0X2VuYWJsZShkZXYsIDApOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZW50cnktPmlycSk7CiAJCXdyaXRlX21zaV9tc2coZW50cnktPmlycSwgJmVudHJ5LT5tc2cpOwotCQltc2lfc2V0X21hc2tfYml0cyhlbnRyeS0+aXJxLCAxLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOworCQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOwogCX0KIAogCUJVR19PTihsaXN0X2VtcHR5KCZkZXYtPm1zaV9saXN0KSk7CkBAIC01OTYsNyArNjE2LDggQEAKIAkvKiBSZXR1cm4gdGhlIHRoZSBwY2kgcmVzZXQgd2l0aCBtc2kgaXJxcyB1bm1hc2tlZCAqLwogCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7CiAJCXUzMiBtYXNrID0gZW50cnktPm1zaV9hdHRyaWIubWFza2JpdHNfbWFzazsKLQkJbXNpX3NldF9tYXNrX2JpdHMoZGV2LT5pcnEsIG1hc2ssIH5tYXNrKTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZGV2LT5pcnEpOworCQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCBtYXNrLCB+bWFzayk7CiAJfQogCWlmICghZW50cnktPmRldiB8fCBlbnRyeS0+bXNpX2F0dHJpYi50eXBlICE9IFBDSV9DQVBfSURfTVNJKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCAyMjI5MDQ0Li4yNzY0NzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTIxNyw3ICsyMTcsNyBAQAogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfUFhBICYmIFBDTUNJQQogCWRlcGVuZHMgb24gKEFSQ0hfTFVCQk9DSyB8fCBNQUNIX01BSU5TVE9ORSB8fCBQWEFfU0hBUlBTTCBcCiAJCSAgICB8fCBNQUNIX0FSTUNPUkUgfHwgQVJDSF9QWEFfUEFMTSB8fCBUUklaRVBTX1BDTUNJQSBcCi0JCSAgICB8fCBBUkNIX1ZJUEVSKQorCQkgICAgfHwgQVJDSF9WSVBFUiB8fCBBUkNIX1BYQV9FU0VSSUVTKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUFhBMnh4IFBDTUNJQSBjb250cm9sbGVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggMjM4NjI5YS4uYmJhYzQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTcyLDUgKzcyLDYgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfVFJJWkVQU19QQ01DSUEpCQkrPSBweGEyeHhfdHJpemVwczQubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJCSs9IHB4YTJ4eF9wYWxtdHgubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJCSs9IHB4YTJ4eF9wYWxtbGQubworcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0U3NDApCQkJKz0gcHhhMnh4X2U3NDAubwogCiBvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWCkJCQkrPSBweGEyeHhfY29yZS5vICQocHhhMnh4LW9iai15KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2U3NDAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2M2EwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBUb3NoaWJhIGU3NDAgUENNQ0lBIHNwZWNpZmljIHJvdXRpbmVzLgorICoKKyAqIChjKSAyMDA0IElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICJzb2NfY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2lycXMgY2RfaXJxc1tdID0geworCXsKKwkJLnNvY2sgPSAwLAorCQkuaXJxICA9IElSUV9HUElPKEdQSU9fRTc0MF9QQ01DSUFfQ0QwKSwKKwkJLnN0ciAgPSAiQ0YgY2FyZCBkZXRlY3QiCisJfSwKKwl7CisJCS5zb2NrID0gMSwKKwkJLmlycSAgPSBJUlFfR1BJTyhHUElPX0U3NDBfUENNQ0lBX0NEMSksCisJCS5zdHIgID0gIldpZmkgc3dpdGNoIgorCX0sCit9OworCitzdGF0aWMgaW50IGU3NDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJc2t0LT5pcnEgPSBza3QtPm5yID09IDAgPyBJUlFfR1BJTyhHUElPX0U3NDBfUENNQ0lBX1JEWTApIDoKKwkJCQlJUlFfR1BJTyhHUElPX0U3NDBfUENNQ0lBX1JEWTEpOworCisJcmV0dXJuIHNvY19wY21jaWFfcmVxdWVzdF9pcnFzKHNrdCwgJmNkX2lycXNbc2t0LT5ucl0sIDEpOworfQorCisvKgorICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzLgorICovCitzdGF0aWMgdm9pZCBlNzQwX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlzb2NfcGNtY2lhX2ZyZWVfaXJxcyhza3QsICZjZF9pcnFzW3NrdC0+bnJdLCAxKTsKK30KKworc3RhdGljIHZvaWQgZTc0MF9wY21jaWFfc29ja2V0X3N0YXRlKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQlzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc2t0LT5uciA9PSAwKSB7CisJCXN0YXRlLT5kZXRlY3QgPSBncGlvX2dldF92YWx1ZShHUElPX0U3NDBfUENNQ0lBX0NEMCkgPyAwIDogMTsKKwkJc3RhdGUtPnJlYWR5ICA9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fRTc0MF9QQ01DSUFfUkRZMCkgPyAxIDogMDsKKwl9IGVsc2UgeworCQlzdGF0ZS0+ZGV0ZWN0ID0gZ3Bpb19nZXRfdmFsdWUoR1BJT19FNzQwX1BDTUNJQV9DRDEpID8gMCA6IDE7CisJCXN0YXRlLT5yZWFkeSAgPSBncGlvX2dldF92YWx1ZShHUElPX0U3NDBfUENNQ0lBX1JEWTEpID8gMSA6IDA7CisJfQorCisJc3RhdGUtPnZzXzN2ICA9IDE7CisJc3RhdGUtPmJ2ZDEgICA9IDE7CisJc3RhdGUtPmJ2ZDIgICA9IDE7CisJc3RhdGUtPndycHJvdCA9IDA7CisJc3RhdGUtPnZzX1h2ICA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkJY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgeworCQlpZiAoc2t0LT5uciA9PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX1BDTUNJQV9SU1QwLCAxKTsKKwkJZWxzZQorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX1BDTUNJQV9SU1QxLCAxKTsKKwl9IGVsc2UgeworCQlpZiAoc2t0LT5uciA9PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX1BDTUNJQV9SU1QwLCAwKTsKKwkJZWxzZQorCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX1BDTUNJQV9SU1QxLCAwKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlLT5WY2MpIHsKKwljYXNlIDA6CS8qIFNvY2tldCBvZmYgKi8KKwkJaWYgKHNrdC0+bnIgPT0gMCkKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9QQ01DSUFfUFdSMCwgMCk7CisJCWVsc2UKKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc0MF9QQ01DSUFfUFdSMSwgMSk7CisJCWJyZWFrOworCWNhc2UgNTA6CisJY2FzZSAzMzogLyogc29ja2V0IG9uICovCisJCWlmIChza3QtPm5yID09IDApCisJCQlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfUENNQ0lBX1BXUjAsIDEpOworCQllbHNlCisJCQlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfUENNQ0lBX1BXUjEsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImU3NDBfY3M6IFVuc3VwcG9ydGVkIFZjYzogJWRcbiIsIHN0YXRlLT5WY2MpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRW5hYmxlIGNhcmQgc3RhdHVzIElSUXMgb24gKHJlLSlpbml0aWFsaXNhdGlvbi4gIFRoaXMgY2FuCisgKiBiZSBjYWxsZWQgYXQgaW5pdGlhbGlzYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQsIG9yCisgKiBwY21jaWEgZXZlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGU3NDBfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXNvY19wY21jaWFfZW5hYmxlX2lycXMoc2t0LCBjZF9pcnFzLCBBUlJBWV9TSVpFKGNkX2lycXMpKTsKK30KKworLyoKKyAqIERpc2FibGUgY2FyZCBzdGF0dXMgSVJRcyBvbiBzdXNwZW5kLgorICovCitzdGF0aWMgdm9pZCBlNzQwX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlzb2NfcGNtY2lhX2Rpc2FibGVfaXJxcyhza3QsIGNkX2lycXMsIEFSUkFZX1NJWkUoY2RfaXJxcykpOworfQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgZTc0MF9wY21jaWFfb3BzID0geworCS5vd25lciAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLmh3X2luaXQgICAgICAgICAgPSBlNzQwX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93biAgICAgID0gZTc0MF9wY21jaWFfaHdfc2h1dGRvd24sCisJLnNvY2tldF9zdGF0ZSAgICAgPSBlNzQwX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLmNvbmZpZ3VyZV9zb2NrZXQgPSBlNzQwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCS5zb2NrZXRfaW5pdCAgICAgID0gZTc0MF9wY21jaWFfc29ja2V0X2luaXQsCisJLnNvY2tldF9zdXNwZW5kICAgPSBlNzQwX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKKwkubnIgICAgICAgICAgICAgICA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZTc0MF9wY21jaWFfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBlNzQwX3BjbWNpYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19lNzQwKCkpCisJCXJldHVybiAtRU5PREVWOworCisJZTc0MF9wY21jaWFfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtcGNtY2lhIiwgLTEpOworCWlmICghZTc0MF9wY21jaWFfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShlNzQwX3BjbWNpYV9kZXZpY2UsICZlNzQwX3BjbWNpYV9vcHMsCisJCQkJCXNpemVvZihlNzQwX3BjbWNpYV9vcHMpKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NDBfcGNtY2lhX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU3NDBfcGNtY2lhX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc0MF9wY21jaWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU3NDBfcGNtY2lhX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGU3NDBfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQoZTc0MF9wY21jaWFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIklhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1wY21jaWEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZTc0MCBQQ01DSUEgcGxhdGZvcm0gc3VwcG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCAyMTMzZjM3Li5kNWU0ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9ydHQuaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggZjU5Mjc3Yi4uN2E1NjhiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXJ0Yy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1ydGMuaD4KIAogLyogSSBoYXZlIHlldCB0byBmaW5kIGFuIFMzQyBpbXBsZW1lbnRhdGlvbiB3aXRoIG1vcmUgdGhhbiBvbmUKICAqIG9mIHRoZXNlIHJ0YyBibG9ja3MgaW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA2NmE5YmI4Li5kMjZhNWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zOCwxMSArMzgsMTEgQEAKICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjZW5kaWYKIAotI2RlZmluZSBUSU1FUl9GUkVRCQlDTE9DS19USUNLX1JBVEUKICNkZWZpbmUgUlRDX0RFRl9ESVZJREVSCQkzMjc2OCAtIDEKICNkZWZpbmUgUlRDX0RFRl9UUklNCQkwCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJ0Y19mcmVxID0gMTAyNDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2ZyZXE7CiBzdGF0aWMgc3RydWN0IHJ0Y190aW1lIHJ0Y19hbGFybTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2ExMTAwX3J0Y19sb2NrKTsKIApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJcnRjX3VwZGF0ZV9pcnEocnRjLCBydGNfdGltZXIxX2NvdW50LCBSVENfUEYgfCBSVENfSVJRRik7CiAKIAlpZiAocnRjX3RpbWVyMV9jb3VudCA9PSAxKQotCQlydGNfdGltZXIxX2NvdW50ID0gKHJ0Y19mcmVxICogKCgxPDwzMCkvKFRJTUVSX0ZSRVE+PjIpKSk7CisJCXJ0Y190aW1lcjFfY291bnQgPSAocnRjX2ZyZXEgKiAoKDEgPDwgMzApIC8gKHRpbWVyX2ZyZXEgPj4gMikpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogewogCWlmIChkYXRhICYgUlRDX1BGKSB7CiAJCS8qIGludGVycG9sYXRlIG1pc3NlZCBwZXJpb2RzIGFuZCBzZXQgbWF0Y2ggZm9yIHRoZSBuZXh0ICovCi0JCXVuc2lnbmVkIGxvbmcgcGVyaW9kID0gVElNRVJfRlJFUS9ydGNfZnJlcTsKKwkJdW5zaWduZWQgbG9uZyBwZXJpb2QgPSB0aW1lcl9mcmVxIC8gcnRjX2ZyZXE7CiAJCXVuc2lnbmVkIGxvbmcgb3NjciA9IE9TQ1I7CiAJCXVuc2lnbmVkIGxvbmcgb3NtcjEgPSBPU01SMTsKIAkJdW5zaWduZWQgbG9uZyBtaXNzZWQgPSAob3NjciAtIG9zbXIxKS9wZXJpb2Q7CkBAIC0yNjMsNyArMjYzLDcgQEAKIAkJcmV0dXJuIDA7CiAJY2FzZSBSVENfUElFX09OOgogCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlPU01SMSA9IFRJTUVSX0ZSRVEvcnRjX2ZyZXEgKyBPU0NSOworCQlPU01SMSA9IHRpbWVyX2ZyZXEgLyBydGNfZnJlcSArIE9TQ1I7CiAJCU9JRVIgfD0gT0lFUl9FMTsKIAkJcnRjX3RpbWVyMV9jb3VudCA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKQEAgLTI3MSw3ICsyNzEsNyBAQAogCWNhc2UgUlRDX0lSUVBfUkVBRDoKIAkJcmV0dXJuIHB1dF91c2VyKHJ0Y19mcmVxLCAodW5zaWduZWQgbG9uZyAqKWFyZyk7CiAJY2FzZSBSVENfSVJRUF9TRVQ6Ci0JCWlmIChhcmcgPCAxIHx8IGFyZyA+IFRJTUVSX0ZSRVEpCisJCWlmIChhcmcgPCAxIHx8IGFyZyA+IHRpbWVyX2ZyZXEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcnRjX2ZyZXEgPSBhcmc7CiAJCXJldHVybiAwOwpAQCAtMzUyLDYgKzM1Miw4IEBACiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAorCXRpbWVyX2ZyZXEgPSBnZXRfY2xvY2tfdGlja19yYXRlKCk7CisKIAkvKgogCSAqIEFjY29yZGluZyB0byB0aGUgbWFudWFsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxldCBSVFRSIGJlIHplcm8KIAkgKiBhbmQgdGhlbiBhIGRlZmF1bHQgZGl2aXNlciBmb3IgYSAzMi43NjhLSHogY2xvY2sgaXMgdXNlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggM2Q0NDI0NC4uMjhjOTBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTE4OCwxMSArMTg4LDEzIEBACiAJY29uZmlnID0ga3ZtX3ZxX2NvbmZpZyhrZGV2LT5kZXNjKStpbmRleDsKIAogCWVyciA9IHZtZW1fYWRkX21hcHBpbmcoY29uZmlnLT5hZGRyZXNzLAotCQkJICAgICAgIHZyaW5nX3NpemUoY29uZmlnLT5udW0sIFBBR0VfU0laRSkpOworCQkJICAgICAgIHZyaW5nX3NpemUoY29uZmlnLT5udW0sCisJCQkJCSAgS1ZNX1MzOTBfVklSVElPX1JJTkdfQUxJR04pKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCXZxID0gdnJpbmdfbmV3X3ZpcnRxdWV1ZShjb25maWctPm51bSwgdmRldiwgKHZvaWQgKikgY29uZmlnLT5hZGRyZXNzLAorCXZxID0gdnJpbmdfbmV3X3ZpcnRxdWV1ZShjb25maWctPm51bSwgS1ZNX1MzOTBfVklSVElPX1JJTkdfQUxJR04sCisJCQkJIHZkZXYsICh2b2lkICopIGNvbmZpZy0+YWRkcmVzcywKIAkJCQkga3ZtX25vdGlmeSwgY2FsbGJhY2spOwogCWlmICghdnEpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTIwOSw3ICsyMTEsOCBAQAogCXJldHVybiB2cTsKIHVubWFwOgogCXZtZW1fcmVtb3ZlX21hcHBpbmcoY29uZmlnLT5hZGRyZXNzLAotCQkJICAgIHZyaW5nX3NpemUoY29uZmlnLT5udW0sIFBBR0VfU0laRSkpOworCQkJICAgIHZyaW5nX3NpemUoY29uZmlnLT5udW0sCisJCQkJICAgICAgIEtWTV9TMzkwX1ZJUlRJT19SSU5HX0FMSUdOKSk7CiBvdXQ6CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTIyMCw3ICsyMjMsOCBAQAogCiAJdnJpbmdfZGVsX3ZpcnRxdWV1ZSh2cSk7CiAJdm1lbV9yZW1vdmVfbWFwcGluZyhjb25maWctPmFkZHJlc3MsCi0JCQkgICAgdnJpbmdfc2l6ZShjb25maWctPm51bSwgUEFHRV9TSVpFKSk7CisJCQkgICAgdnJpbmdfc2l6ZShjb25maWctPm51bSwKKwkJCQkgICAgICAgS1ZNX1MzOTBfVklSVElPX1JJTkdfQUxJR04pKTsKIH0KIAogLyoKQEAgLTI5NSwxMyArMjk5LDI5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGt2bV9leHRpbnRfaGFuZGxlcih1MTYgY29kZSkKIHsKLQl2b2lkICpkYXRhID0gKHZvaWQgKikgKihsb25nICopIF9fTENfUEZBVUxUX0lOVFBBUk07Ci0JdTE2IHN1YmNvZGUgPSBTMzkwX2xvd2NvcmUuY3B1X2FkZHI7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJdTE2IHN1YmNvZGU7CisJaW50IGNvbmZpZ19jaGFuZ2VkOwogCisJc3ViY29kZSA9IFMzOTBfbG93Y29yZS5jcHVfYWRkcjsKIAlpZiAoKHN1YmNvZGUgJiAweGZmMDApICE9IFZJUlRJT19TVUJDT0RFXzY0KQogCQlyZXR1cm47CiAKLQl2cmluZ19pbnRlcnJ1cHQoMCwgZGF0YSk7CisJLyogVGhlIExTQiBtaWdodCBiZSBvdmVybG9hZGVkLCB3ZSBoYXZlIHRvIG1hc2sgaXQgKi8KKwl2cSA9IChzdHJ1Y3QgdmlydHF1ZXVlICopICgoKihsb25nICopIF9fTENfUEZBVUxUX0lOVFBBUk0pICYgfjFVTCk7CisKKwkvKiBXZSB1c2UgdGhlIExTQiBvZiBleHRwYXJhbSwgdG8gZGVjaWRlLCBpZiB0aGlzIGludGVycnVwdCBpcyBhIGNvbmZpZworCSAqIGNoYW5nZSBvciBhICJzdGFuZGFyZCIgaW50ZXJydXB0ICovCisJY29uZmlnX2NoYW5nZWQgPSAgKCooaW50ICopICBfX0xDX0VYVF9QQVJBTVMgJiAxKTsKKworCWlmIChjb25maWdfY2hhbmdlZCkgeworCQlzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2OworCQlkcnYgPSBjb250YWluZXJfb2YodnEtPnZkZXYtPmRldi5kcml2ZXIsCisJCQkJICAgc3RydWN0IHZpcnRpb19kcml2ZXIsIGRyaXZlcik7CisJCWlmIChkcnYtPmNvbmZpZ19jaGFuZ2VkKQorCQkJZHJ2LT5jb25maWdfY2hhbmdlZCh2cS0+dmRldik7CisJfSBlbHNlCisJCXZyaW5nX2ludGVycnVwdCgwLCB2cSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCmluZGV4IDIzNzBmZDguLmMyNDE0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCkBAIC01NzgsNiArNTc4LDggQEAKIHsKIAlpZGVzY3NpX3Njc2lfdCAqc2NzaSAgPSBzY3NpaG9zdF90b19pZGVzY3NpKGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAlpZGVfZHJpdmVfdCAgICAqZHJpdmUgPSBzY3NpLT5kcml2ZTsKKwlpZGVfaHdpZl90ICAgICAqaHdpZjsKKwlpZGVfaHdncm91cF90ICAqaHdncm91cDsKIAlpbnQJCWJ1c3k7CiAJaW50ICAgICAgICAgICAgIHJldCAgID0gRkFJTEVEOwogCkBAIC01OTQsMTMgKzU5NiwxNiBAQAogCQlnb3RvIG5vX2RyaXZlOwogCX0KIAotCS8qIEZpcnN0IGdpdmUgaXQgc29tZSBtb3JlIHRpbWUsIGhvdyBtdWNoIGlzICJyaWdodCIgaXMgaGFyZCB0byBzYXkgOi0oICovCisJaHdpZiA9IGRyaXZlLT5od2lmOworCWh3Z3JvdXAgPSBod2lmLT5od2dyb3VwOwogCi0JYnVzeSA9IGlkZV93YWl0X25vdF9idXN5KEhXSUYoZHJpdmUpLCAxMDApOwkvKiBGSVhNRSAtIHVzZXMgbWRlbGF5IHdoaWNoIGNhdXNlcyBsYXRlbmN5PyAqLworCS8qIEZpcnN0IGdpdmUgaXQgc29tZSBtb3JlIHRpbWUsIGhvdyBtdWNoIGlzICJyaWdodCIgaXMgaGFyZCB0byBzYXkgOi0oCisJICAgRklYTUUgLSB1c2VzIG1kZWxheSB3aGljaCBjYXVzZXMgbGF0ZW5jeT8gKi8KKwlidXN5ID0gaWRlX3dhaXRfbm90X2J1c3koaHdpZiwgMTAwKTsKIAlpZiAodGVzdF9iaXQoSURFU0NTSV9MT0dfQ01ELCAmc2NzaS0+bG9nKSkKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgImlkZS1zY3NpOiBkcml2ZSBkaWQlcyBiZWNvbWUgcmVhZHlcbiIsIGJ1c3k/IiBub3QiOiIiKTsKIAotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIAogCS8qIElmIHRoZXJlIGlzIG5vIHBjIHJ1bm5pbmcgd2UncmUgZG9uZSAob3VyIGludGVycnVwdCB0b29rIGNhcmUgb2YgaXQpICovCiAJcGMgPSBkcml2ZS0+cGM7CkBAIC02MjksNyArNjM0LDcgQEAKIAl9CiAKIGlkZV91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZod2dyb3VwLT5sb2NrKTsKIG5vX2RyaXZlOgogCWlmICh0ZXN0X2JpdChJREVTQ1NJX0xPR19DTUQsICZzY3NpLT5sb2cpKQogCQlwcmludGsgKEtFUk5fV0FSTklORyAiaWRlLXNjc2k6IGFib3J0IHJldHVybnMgJXNcbiIsIHJldCA9PSBTVUNDRVNTPyJzdWNjZXNzIjoiZmFpbGVkIik7CkBAIC02NDIsNiArNjQ3LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCWlkZXNjc2lfc2NzaV90ICpzY3NpICA9IHNjc2lob3N0X3RvX2lkZXNjc2koY21kLT5kZXZpY2UtPmhvc3QpOwogCWlkZV9kcml2ZV90ICAgICpkcml2ZSA9IHNjc2ktPmRyaXZlOworCWlkZV9od2dyb3VwX3QgICpod2dyb3VwOwogCWludCAgICAgICAgICAgICByZWFkeSA9IDA7CiAJaW50ICAgICAgICAgICAgIHJldCAgID0gU1VDQ0VTUzsKIApAQCAtNjU4LDE0ICs2NjQsMTggQEAKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAKKwlod2dyb3VwID0gZHJpdmUtPmh3aWYtPmh3Z3JvdXA7CisKIAlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXNwaW5fbG9jaygmaWRlX2xvY2spOworCXNwaW5fbG9jaygmaHdncm91cC0+bG9jayk7CiAKIAlwYyA9IGRyaXZlLT5wYzsKKwlpZiAocGMpCisJCXJlcSA9IHBjLT5ycTsKIAotCWlmIChwYyA9PSBOVUxMIHx8IChyZXEgPSBwYy0+cnEpICE9IEhXR1JPVVAoZHJpdmUpLT5ycSB8fCAhSFdHUk9VUChkcml2ZSktPmhhbmRsZXIpIHsKKwlpZiAocGMgPT0gTlVMTCB8fCByZXEgIT0gaHdncm91cC0+cnEgfHwgaHdncm91cC0+aGFuZGxlciA9PSBOVUxMKSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJpZGUtc2NzaTogTm8gYWN0aXZlIHJlcXVlc3QgaW4gaWRlc2NzaV9laF9yZXNldFxuIik7Ci0JCXNwaW5fdW5sb2NrKCZpZGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZod2dyb3VwLT5sb2NrKTsKIAkJc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KQEAgLTY4NSwxMCArNjk1LDEwIEBACiAJCQlCVUcoKTsKIAl9CiAKLQlIV0dST1VQKGRyaXZlKS0+cnEgPSBOVUxMOwotCUhXR1JPVVAoZHJpdmUpLT5oYW5kbGVyID0gTlVMTDsKLQlIV0dST1VQKGRyaXZlKS0+YnVzeSA9IDE7CQkvKiB3aWxsIHNldCB0aGlzIHRvIHplcm8gd2hlbiBpZGUgcmVzZXQgZmluaXNoZWQgKi8KLQlzcGluX3VubG9jaygmaWRlX2xvY2spOworCWh3Z3JvdXAtPnJxID0gTlVMTDsKKwlod2dyb3VwLT5oYW5kbGVyID0gTlVMTDsKKwlod2dyb3VwLT5idXN5ID0gMTsgLyogd2lsbCBzZXQgdGhpcyB0byB6ZXJvIHdoZW4gaWRlIHJlc2V0IGZpbmlzaGVkICovCisJc3Bpbl91bmxvY2soJmh3Z3JvdXAtPmxvY2spOwogCiAJaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggNTc5ZDYzYS4uYjY5NWFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC00NDcsNyArNDQ3LDcgQEAKIAogY29uZmlnIFNFUklBTF9TQU1TVU5HCiAJdHJpc3RhdGUgIlNhbXN1bmcgU29DIHNlcmlhbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJNICYmIFBMQVRfUzNDMjRYWAorCWRlcGVuZHMgb24gQVJNICYmIFBMQVRfUzNDCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIG9uLWNoaXAgVUFSVHMgb24gdGhlIFNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgQ1BVcywKQEAgLTQ1NSw2ICs0NTUsMTYgQEAKIAkgIHByb3ZpZGUgYWxsIG9mIHRoZXNlIHBvcnRzLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzZXJpYWwgcG9ydAogCSAgcGlucyBhcmUgY29uZmlndXJlZC4KIAorY29uZmlnIFNFUklBTF9TQU1TVU5HX1VBUlRTCisJaW50CisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORworCWRlZmF1bHQgMiBpZiBBUkNIX1MzQzI0MDAKKwlkZWZhdWx0IDQgaWYgQVJDSF9TM0M2NFhYIHx8IENQVV9TM0MyNDQzCisJZGVmYXVsdCAzCisJaGVscAorCSAgU2VsZWN0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIFVBUlQgcG9ydHMgZm9yIHRoZSBTYW1zdW5nIFMzQworCSAgc2VyaWFsIGRyaXZlcgorCQogY29uZmlnIFNFUklBTF9TQU1TVU5HX0RFQlVHCiAJYm9vbCAiU2Ftc3VuZyBTb0Mgc2VyaWFsIGRlYnVnIgogCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcgJiYgREVCVUdfTEwKQEAgLTUwOCw3ICs1MTgsMjAgQEAKIAloZWxwCiAJICBTZXJpYWwgcG9ydCBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTM0MyNDQwIGFuZCBTM0MyNDQyIFNvQwogCitjb25maWcgU0VSSUFMX1MzQzI0QTAKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MyNEEwIFNlcmlhbCBwb3J0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORyAmJiBDUFVfUzNDMjRBMAorCWRlZmF1bHQgeSBpZiBDUFVfUzNDMjRBMAorCWhlbHAKKwkgIFNlcmlhbCBwb3J0IHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFMzQzI0QTAgU29DCiAKK2NvbmZpZyBTRVJJQUxfUzNDNjQwMAorCXRyaXN0YXRlICJTYW1zdW5nIFMzQzY0MDAvUzNDNjQxMCBTZXJpYWwgcG9ydCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcgJiYgKENQVV9TM0M2MDAgfHwgQ1BVX1MzQzY0MTApCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzNDNjQwMCBhbmQgUzNDNjQxMAorCSAgU29DcwogCiBjb25maWcgU0VSSUFMX0RaCiAJYm9vbCAiREVDc3RhdGlvbiBEWiBzZXJpYWwgZHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCAwYzE3YzhkLi5kZmU3NzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtNDEsNiArNDEsOCBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNDEwKSArPSBzM2MyNDEwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUzNDMjQxMikgKz0gczNjMjQxMi5vCiBvYmotJChDT05GSUdfU0VSSUFMX1MzQzI0NDApICs9IHMzYzI0NDAubworb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNEEwKSArPSBzM2MyNGEwLm8KK29iai0kKENPTkZJR19TRVJJQUxfUzNDNjQwMCkgKz0gczNjNjQwMC5vCiBvYmotJChDT05GSUdfU0VSSUFMX0lQMjJfWklMT0cpICs9IGlwMjJ6aWxvZy5vCiBvYmotJChDT05GSUdfU0VSSUFMX01VWCkgKz0gbXV4Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfNjgzMjgpICs9IDY4MzI4c2VyaWFsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwppbmRleCA3MTU2MjY4Li5lM2E1YWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXVhcC0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJVQVJUQ0xLIik7CisJdWFwLT5jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUih1YXAtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUih1YXAtPmNsayk7CiAJCWdvdG8gdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggYjcxODAwNC4uOGIyYjk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtNzU2LDcgKzc1Niw3IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl1YXAtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiVUFSVENMSyIpOworCXVhcC0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIodWFwLT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIodWFwLT5jbGspOwogCQlnb3RvIHVubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCAzZjkwZjFiLi5hNTA5NTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtNjYsNyArNjYsNyBAQAogI2RlZmluZSBPTkVNUyAweGIwIC8qIE9uZSBNaWxsaXNlY29uZCByZWdpc3RlciAqLwogI2RlZmluZSBVVFMgICAweGI0IC8qIFVBUlQgVGVzdCBSZWdpc3RlciAqLwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU1YCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVgxKQogI2RlZmluZSBCSVBSMSAweGIwIC8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAxICovCiAjZGVmaW5lIEJJUFIyIDB4YjQgLyogSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgQklQUjMgMHhiOCAvKiBJbmNyZW1lbnRhbCBQcmVzZXQgUmVnaXN0ZXIgMyAqLwpAQCAtOTYsNyArOTYsNyBAQAogI2RlZmluZSAgVUNSMV9SVFNERU4gICAgICgxPDw1KQkgLyogUlRTIGRlbHRhIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIFVDUjFfU05EQlJLICAgICAoMTw8NCkJIC8qIFNlbmQgYnJlYWsgKi8KICNkZWZpbmUgIFVDUjFfVERNQUVOICAgICAoMTw8MykJIC8qIFRyYW5zbWl0dGVyIHJlYWR5IERNQSBlbmFibGUgKi8KLSNpZmRlZiBDT05GSUdfQVJDSF9JTVgKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWDEpCiAjZGVmaW5lICBVQ1IxX1VBUlRDTEtFTiAgKDE8PDIpCSAvKiBVQVJUIGNsb2NrIGVuYWJsZWQgKi8KICNlbmRpZgogI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzIHx8IGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCkBAIC0xODcsMTEgKzE4NywxMSBAQAogI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRCUlNWF9JUlFTCiAjZW5kaWYKIAotI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzIHx8IGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDCiAjZGVmaW5lIFNFUklBTF9JTVhfTUFKT1IgICAgICAgIDIwNwogI2RlZmluZSBNSU5PUl9TVEFSVAkgICAgICAgIDE2CiAjZGVmaW5lIERFVl9OQU1FCQkidHR5bXhjIgotI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRCU1YQ19NQVhfSU5UX0xJTkVTCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9JUlEJTVhDX0lOVEVSTkFMX0lSUVMKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCBhYmMwMGJlLi5mNmUzYjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+CiAKIAogc3RydWN0IHVhcnRfcHhhX3BvcnQgewpAQCAtNzY2LDcgKzc2Nyw3IEBACiAJaWYgKCFzcG9ydCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzcG9ydC0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJVQVJUQ0xLIik7CisJc3BvcnQtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHNwb3J0LT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoc3BvcnQtPmNsayk7CiAJCWdvdG8gZXJyX2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNGEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNGEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmMmZkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0YTAuYwpAQCAtMCwwICsxLDExOCBAQAorLyogbGludXgvZHJpdmVycy9zZXJpYWwvczNjMjRhMC5jCisgKgorICogRHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0QTAgU29DIG9uYm9hcmQgVUFSVHMuCisgKgorICogQmFzZWQgb24gZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisgKgorICogQXV0aG9yOiBTYW5kZWVwIFBhdGlsIDxzYW5kZWVwLnBhdGlsQGF6aW5nby5jb20+CisgKgorICogQmVuIERvb2tzLCBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgInNhbXN1bmcuaCIKKworc3RhdGljIGludCBzM2MyNGEwX3NlcmlhbF9zZXRzb3VyY2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgICAgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHVjb24gPSByZF9yZWdsKHBvcnQsIFMzQzI0MTBfVUNPTik7CisKKwlpZiAoc3RyY21wKGNsay0+bmFtZSwgInVjbGsiKSA9PSAwKQorCQl1Y29uIHw9IFMzQzI0MTBfVUNPTl9VQ0xLOworCWVsc2UKKwkJdWNvbiAmPSB+UzNDMjQxMF9VQ09OX1VDTEs7CisKKwl3cl9yZWdsKHBvcnQsIFMzQzI0MTBfVUNPTiwgdWNvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjRhMF9zZXJpYWxfZ2V0c291cmNlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB1Y29uID0gcmRfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04pOworCisJY2xrLT5kaXZpc29yID0gMTsKKwljbGstPm5hbWUgPSAodWNvbiAmIFMzQzI0MTBfVUNPTl9VQ0xLKSA/ICJ1Y2xrIiA6ICJwY2xrIjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0YTBfc2VyaWFsX3Jlc2V0cG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCSAgICBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcpCit7CisJZGJnKCJzM2MyNGEwX3NlcmlhbF9yZXNldHBvcnQ6IHBvcnQ9JXAgKCUwOGx4KSwgY2ZnPSVwXG4iLAorCSAgICBwb3J0LCBwb3J0LT5tYXBiYXNlLCBjZmcpOworCisJd3JfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04sICBjZmctPnVjb24pOworCXdyX3JlZ2wocG9ydCwgUzNDMjQxMF9VTENPTiwgY2ZnLT51bGNvbik7CisKKwkvKiByZXNldCBib3RoIGZpZm9zICovCisKKwl3cl9yZWdsKHBvcnQsIFMzQzI0MTBfVUZDT04sIGNmZy0+dWZjb24gfCBTM0MyNDEwX1VGQ09OX1JFU0VUQk9USCk7CisJd3JfcmVnbChwb3J0LCBTM0MyNDEwX1VGQ09OLCBjZmctPnVmY29uKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvIHMzYzI0YTBfdWFydF9pbmYgPSB7CisJLm5hbWUJCT0gIlNhbXN1bmcgUzNDMjRBMCBVQVJUIiwKKwkudHlwZQkJPSBQT1JUX1MzQzI0MTAsCisJLmZpZm9zaXplCT0gMTYsCisJLnJ4X2ZpZm9tYXNrCT0gUzNDMjRBMF9VRlNUQVRfUlhNQVNLLAorCS5yeF9maWZvc2hpZnQJPSBTM0MyNEEwX1VGU1RBVF9SWFNISUZULAorCS5yeF9maWZvZnVsbAk9IFMzQzI0QTBfVUZTVEFUX1JYRlVMTCwKKwkudHhfZmlmb2Z1bGwJPSBTM0MyNEEwX1VGU1RBVF9UWEZVTEwsCisJLnR4X2ZpZm9tYXNrCT0gUzNDMjRBMF9VRlNUQVRfVFhNQVNLLAorCS50eF9maWZvc2hpZnQJPSBTM0MyNEEwX1VGU1RBVF9UWFNISUZULAorCS5nZXRfY2xrc3JjCT0gczNjMjRhMF9zZXJpYWxfZ2V0c291cmNlLAorCS5zZXRfY2xrc3JjCT0gczNjMjRhMF9zZXJpYWxfc2V0c291cmNlLAorCS5yZXNldF9wb3J0CT0gczNjMjRhMF9zZXJpYWxfcmVzZXRwb3J0LAorfTsKKworc3RhdGljIGludCBzM2MyNGEwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0YTBfdWFydF9pbmYpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNGEwX3NlcmlhbF9kcnYgPSB7CisJLnByb2JlCQk9IHMzYzI0YTBfc2VyaWFsX3Byb2JlLAorCS5yZW1vdmUJCT0gczNjMjR4eF9zZXJpYWxfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNGEwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworczNjMjR4eF9jb25zb2xlX2luaXQoJnMzYzI0YTBfc2VyaWFsX2RydiwgJnMzYzI0YTBfdWFydF9pbmYpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNGEwX3NlcmlhbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX2luaXQoJnMzYzI0YTBfc2VyaWFsX2RydiwgJnMzYzI0YTBfdWFydF9pbmYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjMjRhMF9zZXJpYWxfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNGEwX3NlcmlhbF9kcnYpOworfQorCittb2R1bGVfaW5pdChzM2MyNGEwX3NlcmlhbF9pbml0KTsKK21vZHVsZV9leGl0KHMzYzI0YTBfc2VyaWFsX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2M2NDAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2M2NDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5MzZkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzY0MDAuYwpAQCAtMCwwICsxLDE1MSBAQAorLyogbGludXgvZHJpdmVycy9zZXJpYWwvczNjNjQwMC5jCisgKgorICogRHJpdmVyIGZvciBTYW1zdW5nIFMzQzY0MDAgYW5kIFMzQzY0MTAgU29DIG9uYm9hcmQgVUFSVHMuCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sICBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgInNhbXN1bmcuaCIKKworc3RhdGljIGludCBzM2M2NDAwX3NlcmlhbF9zZXRzb3VyY2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgICAgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHVjb24gPSByZF9yZWdsKHBvcnQsIFMzQzI0MTBfVUNPTik7CisKKwlpZiAoc3RyY21wKGNsay0+bmFtZSwgInVjbGswIikgPT0gMCkgeworCQl1Y29uICY9IH5TM0M2NDAwX1VDT05fQ0xLTUFTSzsKKwkJdWNvbiB8PSBTM0M2NDAwX1VDT05fVUNMSzA7CisJfSBlbHNlIGlmIChzdHJjbXAoY2xrLT5uYW1lLCAidWNsazEiKSA9PSAwKQorCQl1Y29uIHw9IFMzQzY0MDBfVUNPTl9VQ0xLMTsKKwllbHNlIGlmIChzdHJjbXAoY2xrLT5uYW1lLCAicGNsayIpID09IDApIHsKKwkJLyogU2VlIG5vdGVzIGFib3V0IHRyYW5zaXRpb25pbmcgZnJvbSBVQ0xLIHRvIFBDTEsgKi8KKwkJdWNvbiAmPSB+UzNDNjQwMF9VQ09OX1VDTEswOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBjbG9jayBzb3VyY2UgJXNcbiIsIGNsay0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyX3JlZ2wocG9ydCwgUzNDMjQxMF9VQ09OLCB1Y29uKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHMzYzY0MDBfc2VyaWFsX2dldHNvdXJjZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCSAgICBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyAqY2xrKQoreworCXUzMiB1Y29uID0gcmRfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04pOworCisJY2xrLT5kaXZpc29yID0gMTsKKworCXN3aXRjaCAodWNvbiAmIFMzQzY0MDBfVUNPTl9DTEtNQVNLKSB7CisJY2FzZSBTM0M2NDAwX1VDT05fVUNMSzA6CisJCWNsay0+bmFtZSA9ICJ1Y2xrMCI7CisJCWJyZWFrOworCisJY2FzZSBTM0M2NDAwX1VDT05fVUNMSzE6CisJCWNsay0+bmFtZSA9ICJ1Y2xrMSI7CisJCWJyZWFrOworCisJY2FzZSBTM0M2NDAwX1VDT05fUENMSzoKKwljYXNlIFMzQzY0MDBfVUNPTl9QQ0xLMjoKKwkJY2xrLT5uYW1lID0gInBjbGsiOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2M2NDAwX3NlcmlhbF9yZXNldHBvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgICAgc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgdWNvbiA9IHJkX3JlZ2wocG9ydCwgUzNDMjQxMF9VQ09OKTsKKworCWRiZygiczNjNjQwMF9zZXJpYWxfcmVzZXRwb3J0OiBwb3J0PSVwICglMDhseCksIGNmZz0lcFxuIiwKKwkgICAgcG9ydCwgcG9ydC0+bWFwYmFzZSwgY2ZnKTsKKworCS8qIGVuc3VyZSB3ZSBkb24ndCBjaGFuZ2UgdGhlIGNsb2NrIHNldHRpbmdzLi4uICovCisKKwl1Y29uICY9IFMzQzY0MDBfVUNPTl9DTEtNQVNLOworCisJd3JfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04sICB1Y29uIHwgY2ZnLT51Y29uKTsKKwl3cl9yZWdsKHBvcnQsIFMzQzI0MTBfVUxDT04sIGNmZy0+dWxjb24pOworCisJLyogcmVzZXQgYm90aCBmaWZvcyAqLworCisJd3JfcmVnbChwb3J0LCBTM0MyNDEwX1VGQ09OLCBjZmctPnVmY29uIHwgUzNDMjQxMF9VRkNPTl9SRVNFVEJPVEgpOworCXdyX3JlZ2wocG9ydCwgUzNDMjQxMF9VRkNPTiwgY2ZnLT51ZmNvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyBzM2M2NDAwX3VhcnRfaW5mID0geworCS5uYW1lCQk9ICJTYW1zdW5nIFMzQzY0MDAgVUFSVCIsCisJLnR5cGUJCT0gUE9SVF9TM0M2NDAwLAorCS5maWZvc2l6ZQk9IDY0LAorCS5yeF9maWZvbWFzawk9IFMzQzI0NDBfVUZTVEFUX1JYTUFTSywKKwkucnhfZmlmb3NoaWZ0CT0gUzNDMjQ0MF9VRlNUQVRfUlhTSElGVCwKKwkucnhfZmlmb2Z1bGwJPSBTM0MyNDQwX1VGU1RBVF9SWEZVTEwsCisJLnR4X2ZpZm9mdWxsCT0gUzNDMjQ0MF9VRlNUQVRfVFhGVUxMLAorCS50eF9maWZvbWFzawk9IFMzQzI0NDBfVUZTVEFUX1RYTUFTSywKKwkudHhfZmlmb3NoaWZ0CT0gUzNDMjQ0MF9VRlNUQVRfVFhTSElGVCwKKwkuZ2V0X2Nsa3NyYwk9IHMzYzY0MDBfc2VyaWFsX2dldHNvdXJjZSwKKwkuc2V0X2Nsa3NyYwk9IHMzYzY0MDBfc2VyaWFsX3NldHNvdXJjZSwKKwkucmVzZXRfcG9ydAk9IHMzYzY0MDBfc2VyaWFsX3Jlc2V0cG9ydCwKK307CisKKy8qIGRldmljZSBtYW5hZ2VtZW50ICovCisKK3N0YXRpYyBpbnQgczNjNjQwMF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWRiZygiczNjNjQwMF9zZXJpYWxfcHJvYmU6IGRldj0lcFxuIiwgZGV2KTsKKwlyZXR1cm4gczNjMjR4eF9zZXJpYWxfcHJvYmUoZGV2LCAmczNjNjQwMF91YXJ0X2luZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzY0MDBfc2VyaWFsX2RydiA9IHsKKwkucHJvYmUJCT0gczNjNjQwMF9zZXJpYWxfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzY0MDAtdWFydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzM2MyNHh4X2NvbnNvbGVfaW5pdCgmczNjNjQwMF9zZXJpYWxfZHJ2LCAmczNjNjQwMF91YXJ0X2luZik7CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzY0MDBfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gczNjMjR4eF9zZXJpYWxfaW5pdCgmczNjNjQwMF9zZXJpYWxfZHJ2LCAmczNjNjQwMF91YXJ0X2luZik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2M2NDAwX3NlcmlhbF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzY0MDBfc2VyaWFsX2Rydik7Cit9CisKK21vZHVsZV9pbml0KHMzYzY0MDBfc2VyaWFsX2luaXQpOworbW9kdWxlX2V4aXQoczNjNjQwMF9zZXJpYWxfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0M2NDAwLFMzQzY0MTAgU29DIFNlcmlhbCBwb3J0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2M2NDAwLXVhcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYwppbmRleCAxZTIxOWQzLi40MWFjOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCkBAIC00MiwxMyArNDIsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlICJzYW1zdW5nLmgiCiAKQEAgLTU4LDE5ICs1OSw2IEBACiAjZGVmaW5lIFMzQzI0WFhfU0VSSUFMX01BSk9SCTIwNAogI2RlZmluZSBTM0MyNFhYX1NFUklBTF9NSU5PUgk2NAogCi0vKiB3ZSBjYW4gc3VwcG9ydCAzIHVhcnRzLCBidXQgbm90IGFsd2F5cyB1c2UgdGhlbSAqLwotCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDAwCi0jZGVmaW5lIE5SX1BPUlRTICgyKQotI2Vsc2UKLSNkZWZpbmUgTlJfUE9SVFMgKDMpCi0jZW5kaWYKLQotLyogcG9ydCBpcnEgbnVtYmVycyAqLwotCi0jZGVmaW5lIFRYX0lSUShwb3J0KSAoKHBvcnQpLT5pcnEgKyAxKQotI2RlZmluZSBSWF9JUlEocG9ydCkgKChwb3J0KS0+aXJxKQotCiAvKiBtYWNyb3MgdG8gY2hhbmdlIG9uZSB0aGluZyB0byBhbm90aGVyICovCiAKICNkZWZpbmUgdHhfZW5hYmxlZChwb3J0KSAoKHBvcnQpLT51bnVzZWRbMF0pCkBAIC0xMzYsOCArMTI0LDEwIEBACiAKIHN0YXRpYyB2b2lkIHMzYzI0eHhfc2VyaWFsX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSB0b19vdXJwb3J0KHBvcnQpOworCiAJaWYgKHR4X2VuYWJsZWQocG9ydCkpIHsKLQkJZGlzYWJsZV9pcnEoVFhfSVJRKHBvcnQpKTsKKwkJZGlzYWJsZV9pcnEob3VycG9ydC0+dHhfaXJxKTsKIAkJdHhfZW5hYmxlZChwb3J0KSA9IDA7CiAJCWlmIChwb3J0LT5mbGFncyAmIFVQRl9DT05TX0ZMT1cpCiAJCQlzM2MyNHh4X3NlcmlhbF9yeF9lbmFibGUocG9ydCk7CkBAIC0xNDYsMTEgKzEzNiwxMyBAQAogCiBzdGF0aWMgdm9pZCBzM2MyNHh4X3NlcmlhbF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogeworCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7CisKIAlpZiAoIXR4X2VuYWJsZWQocG9ydCkpIHsKIAkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0NPTlNfRkxPVykKIAkJCXMzYzI0eHhfc2VyaWFsX3J4X2Rpc2FibGUocG9ydCk7CiAKLQkJZW5hYmxlX2lycShUWF9JUlEocG9ydCkpOworCQllbmFibGVfaXJxKG91cnBvcnQtPnR4X2lycSk7CiAJCXR4X2VuYWJsZWQocG9ydCkgPSAxOwogCX0KIH0KQEAgLTE1OCw5ICsxNTAsMTEgQEAKIAogc3RhdGljIHZvaWQgczNjMjR4eF9zZXJpYWxfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogeworCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7CisKIAlpZiAocnhfZW5hYmxlZChwb3J0KSkgewogCQlkYmcoInMzYzI0eHhfc2VyaWFsX3N0b3Bfcng6IHBvcnQ9JXBcbiIsIHBvcnQpOwotCQlkaXNhYmxlX2lycShSWF9JUlEocG9ydCkpOworCQlkaXNhYmxlX2lycShvdXJwb3J0LT5yeF9pcnEpOwogCQlyeF9lbmFibGVkKHBvcnQpID0gMDsKIAl9CiB9CkBAIC0zODQsMTMgKzM3OCwxMyBAQAogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7CiAKIAlpZiAob3VycG9ydC0+dHhfY2xhaW1lZCkgewotCQlmcmVlX2lycShUWF9JUlEocG9ydCksIG91cnBvcnQpOworCQlmcmVlX2lycShvdXJwb3J0LT50eF9pcnEsIG91cnBvcnQpOwogCQl0eF9lbmFibGVkKHBvcnQpID0gMDsKIAkJb3VycG9ydC0+dHhfY2xhaW1lZCA9IDA7CiAJfQogCiAJaWYgKG91cnBvcnQtPnJ4X2NsYWltZWQpIHsKLQkJZnJlZV9pcnEoUlhfSVJRKHBvcnQpLCBvdXJwb3J0KTsKKwkJZnJlZV9pcnEob3VycG9ydC0+cnhfaXJxLCBvdXJwb3J0KTsKIAkJb3VycG9ydC0+cnhfY2xhaW1lZCA9IDA7CiAJCXJ4X2VuYWJsZWQocG9ydCkgPSAwOwogCX0KQEAgLTQwNywxMiArNDAxLDExIEBACiAKIAlyeF9lbmFibGVkKHBvcnQpID0gMTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKFJYX0lSUShwb3J0KSwKLQkJCSAgczNjMjR4eF9zZXJpYWxfcnhfY2hhcnMsIDAsCisJcmV0ID0gcmVxdWVzdF9pcnEob3VycG9ydC0+cnhfaXJxLCBzM2MyNHh4X3NlcmlhbF9yeF9jaGFycywgMCwKIAkJCSAgczNjMjR4eF9zZXJpYWxfcG9ydG5hbWUocG9ydCksIG91cnBvcnQpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdldCBpcnEgJWRcbiIsIFJYX0lSUShwb3J0KSk7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdldCBpcnEgJWRcbiIsIG91cnBvcnQtPnJ4X2lycSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00MjIsMTIgKzQxNSwxMSBAQAogCiAJdHhfZW5hYmxlZChwb3J0KSA9IDE7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShUWF9JUlEocG9ydCksCi0JCQkgIHMzYzI0eHhfc2VyaWFsX3R4X2NoYXJzLCAwLAorCXJldCA9IHJlcXVlc3RfaXJxKG91cnBvcnQtPnR4X2lycSwgczNjMjR4eF9zZXJpYWxfdHhfY2hhcnMsIDAsCiAJCQkgIHMzYzI0eHhfc2VyaWFsX3BvcnRuYW1lKHBvcnQpLCBvdXJwb3J0KTsKIAogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGlycSAlZFxuIiwgVFhfSVJRKHBvcnQpKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGlycSAlZFxuIiwgb3VycG9ydC0+dHhfaXJxKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC00NTIsNiArNDQ0LDggQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSB0b19vdXJwb3J0KHBvcnQpOwogCisJb3VycG9ydC0+cG1fbGV2ZWwgPSBsZXZlbDsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIDM6CiAJCWlmICghSVNfRVJSKG91cnBvcnQtPmJhdWRjbGspICYmIG91cnBvcnQtPmJhdWRjbGsgIT0gTlVMTCkKQEAgLTY2MSw2ICs2NTUsNyBAQAogCiAJCW91cnBvcnQtPmNsa3NyYyA9IGNsa3NyYzsKIAkJb3VycG9ydC0+YmF1ZGNsayA9IGNsazsKKwkJb3VycG9ydC0+YmF1ZGNsa19yYXRlID0gY2xrID8gY2xrX2dldF9yYXRlKGNsaykgOiAwOwogCX0KIAogCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CkBAIC03NTIsNiArNzQ3LDggQEAKIAkJcmV0dXJuICJTM0MyNDQwIjsKIAljYXNlIFBPUlRfUzNDMjQxMjoKIAkJcmV0dXJuICJTM0MyNDEyIjsKKwljYXNlIFBPUlRfUzNDNjQwMDoKKwkJcmV0dXJuICJTM0M2NDAwLzEwIjsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC04MjcsMTQgKzgyNCwxNCBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzM2MyNHh4X3VhcnRfZHJ2ID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZGV2X25hbWUJPSAiczNjMjQxMF9zZXJpYWwiLAotCS5ucgkJPSAzLAorCS5ucgkJPSBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMsCiAJLmNvbnMJCT0gUzNDMjRYWF9TRVJJQUxfQ09OU09MRSwKIAkuZHJpdmVyX25hbWUJPSBTM0MyNFhYX1NFUklBTF9OQU1FLAogCS5tYWpvcgkJPSBTM0MyNFhYX1NFUklBTF9NQUpPUiwKIAkubWlub3IJCT0gUzNDMjRYWF9TRVJJQUxfTUlOT1IsCiB9OwogCi1zdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0IHMzYzI0eHhfc2VyaWFsX3BvcnRzW05SX1BPUlRTXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgczNjMjR4eF9zZXJpYWxfcG9ydHNbQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXSA9IHsKIAlbMF0gPSB7CiAJCS5wb3J0ID0gewogCQkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoczNjMjR4eF9zZXJpYWxfcG9ydHNbMF0ucG9ydC5sb2NrKSwKQEAgLTg1OSw3ICs4NTYsNyBAQAogCQkJLmxpbmUJCT0gMSwKIAkJfQogCX0sCi0jaWYgTlJfUE9SVFMgPiAyCisjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gMgogCiAJWzJdID0gewogCQkucG9ydCA9IHsKQEAgLTg3Miw2ICs4NjksMjAgQEAKIAkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJCS5saW5lCQk9IDIsCiAJCX0KKwl9LAorI2VuZGlmCisjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gMworCVszXSA9IHsKKwkJLnBvcnQgPSB7CisJCQkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChzM2MyNHh4X3NlcmlhbF9wb3J0c1szXS5wb3J0LmxvY2spLAorCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJCS5pcnEJCT0gSVJRX1MzQ1VBUlRfUlgzLAorCQkJLnVhcnRjbGsJPSAwLAorCQkJLmZpZm9zaXplCT0gMTYsCisJCQkub3BzCQk9ICZzM2MyNHh4X3NlcmlhbF9vcHMsCisJCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCQkubGluZQkJPSAzLAorCQl9CiAJfQogI2VuZGlmCiB9OwpAQCAtODkwLDYgKzkwMSw4OSBAQAogCXJldHVybiAoaW5mby0+cmVzZXRfcG9ydCkocG9ydCwgY2ZnKTsKIH0KIAorCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0LCBmcmVxX3RyYW5zaXRpb24pOworCXVwb3J0ID0gJnBvcnQtPnBvcnQ7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgcG9ydCBpcyBlbmFibGVkICovCisKKwlpZiAocG9ydC0+cG1fbGV2ZWwgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiB0cnkgYW5kIHdvcmsgb3V0IGlmIHRoZSBiYXVkcmF0ZSBpcyBjaGFuZ2luZywgd2UgY2FuIGRldGVjdAorCSAqIGEgY2hhbmdlIGluIHJhdGUsIGJ1dCB3ZSBkbyBub3QgaGF2ZSBzdXBwb3J0IGZvciBkZXRlY3RpbmcKKwkgKiBhIGRpc3R1cmJhbmNlIGluIHRoZSBjbG9jay1yYXRlIG92ZXIgdGhlIGNoYW5nZS4KKwkgKi8KKworCWlmIChJU19FUlIocG9ydC0+Y2xrKSkKKwkJZ290byBleGl0OworCisJaWYgKHBvcnQtPmJhdWRjbGtfcmF0ZSA9PSBjbGtfZ2V0X3JhdGUocG9ydC0+Y2xrKSkKKwkJZ290byBleGl0OworCisJaWYgKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSkgeworCQkvKiB3ZSBzaG91bGQgcmVhbGx5IHNodXQgdGhlIHBvcnQgZG93biB3aGlsc3QgdGhlCisJCSAqIGZyZXF1ZW5jeSBjaGFuZ2UgaXMgaW4gcHJvZ3Jlc3MuICovCisKKwl9IGVsc2UgaWYgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UpIHsKKwkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJCWlmICh1cG9ydC0+aW5mbyA9PSBOVUxMKQorCQkJZ290byBleGl0OworCisJCXR0eSA9IHVwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKworCQlpZiAodHR5ID09IE5VTEwpCisJCQlnb3RvIGV4aXQ7CisKKwkJdGVybWlvcyA9IHR0eS0+dGVybWlvczsKKworCQlpZiAodGVybWlvcyA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gdGVybWlvcz9cbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXMzYzI0eHhfc2VyaWFsX3NldF90ZXJtaW9zKHVwb3J0LCB0ZXJtaW9zLCBOVUxMKTsKKwl9CisKKyBleGl0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzM2MyNHh4X3NlcmlhbF9jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqcG9ydCkKK3sKKwlwb3J0LT5mcmVxX3RyYW5zaXRpb24ubm90aWZpZXJfY2FsbCA9IHMzYzI0eHhfc2VyaWFsX2NwdWZyZXFfdHJhbnNpdGlvbjsKKworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZwb3J0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJCSBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjMjR4eF9zZXJpYWxfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqcG9ydCkKK3sKKwljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJnBvcnQtPmZyZXFfdHJhbnNpdGlvbiwKKwkJCQkgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHMzYzI0eHhfc2VyaWFsX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjMjR4eF9zZXJpYWxfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqcG9ydCkKK3sKK30KKyNlbmRpZgorCiAvKiBzM2MyNHh4X3NlcmlhbF9pbml0X3BvcnQKICAqCiAgKiBpbml0aWFsaXNlIGEgc2luZ2xlIHNlcmlhbCBwb3J0IGZyb20gdGhlIHBsYXRmb3JtIGRldmljZSBnaXZlbgpAQCAtOTE0LDggKzEwMDgsMTEgQEAKIAlpZiAocG9ydC0+bWFwYmFzZSAhPSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChjZmctPmh3cG9ydCA+IDMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChjZmctPmh3cG9ydCA+IENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwb3J0ICVkIGJpZ2dlciB0aGFuICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgIGNmZy0+aHdwb3J0LCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CiAKIAkvKiBzZXR1cCBpbmZvIGZvciBwb3J0ICovCiAJcG9ydC0+ZGV2CT0gJnBsYXRkZXYtPmRldjsKQEAgLTk0MywxOCArMTA0MCwyNiBAQAogCiAJZGJnKCJyZXNvdXJjZSAlcCAoJWx4Li4lbHgpXG4iLCByZXMsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKIAotCXBvcnQtPm1hcGJhc2UJPSByZXMtPnN0YXJ0OwotCXBvcnQtPm1lbWJhc2UJPSBTM0MyNFhYX1ZBX1VBUlQgKyAocmVzLT5zdGFydCAtIFMzQzI0WFhfUEFfVUFSVCk7CisJcG9ydC0+bWFwYmFzZSA9IHJlcy0+c3RhcnQ7CisJcG9ydC0+bWVtYmFzZSA9IFMzQ19WQV9VQVJUICsgcmVzLT5zdGFydCAtIChTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDApOwogCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGxhdGRldiwgMCk7CiAJaWYgKHJldCA8IDApCiAJCXBvcnQtPmlycSA9IDA7Ci0JZWxzZQorCWVsc2UgewogCQlwb3J0LT5pcnEgPSByZXQ7CisJCW91cnBvcnQtPnJ4X2lycSA9IHJldDsKKwkJb3VycG9ydC0+dHhfaXJxID0gcmV0ICsgMTsKKwl9CisJCisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwbGF0ZGV2LCAxKTsKKwlpZiAocmV0ID4gMCkKKwkJb3VycG9ydC0+dHhfaXJxID0gcmV0OwogCiAJb3VycG9ydC0+Y2xrCT0gY2xrX2dldCgmcGxhdGRldi0+ZGV2LCAidWFydCIpOwogCi0JZGJnKCJwb3J0OiBtYXA9JTA4eCwgbWVtPSUwOHgsIGlycT0lZCwgY2xvY2s9JWxkXG4iLAotCSAgICBwb3J0LT5tYXBiYXNlLCBwb3J0LT5tZW1iYXNlLCBwb3J0LT5pcnEsIHBvcnQtPnVhcnRjbGspOworCWRiZygicG9ydDogbWFwPSUwOHgsIG1lbT0lMDh4LCBpcnE9JWQgKCVkLCVkKSwgY2xvY2s9JWxkXG4iLAorCSAgICBwb3J0LT5tYXBiYXNlLCBwb3J0LT5tZW1iYXNlLCBwb3J0LT5pcnEsCisJICAgIG91cnBvcnQtPnJ4X2lycSwgb3VycG9ydC0+dHhfaXJxLCBwb3J0LT51YXJ0Y2xrKTsKIAogCS8qIHJlc2V0IHRoZSBmaWZvcyAoYW5kIHNldHVwIHRoZSB1YXJ0KSAqLwogCXMzYzI0eHhfc2VyaWFsX3Jlc2V0cG9ydChwb3J0LCBjZmcpOwpAQCAtMTAwMiw2ICsxMTA3LDEwIEBACiAJaWYgKHJldCA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhZGQgY2xrc3JjIGF0dHIuXG4iLCBfX2Z1bmNfXyk7CiAKKwlyZXQgPSBzM2MyNHh4X3NlcmlhbF9jcHVmcmVxX3JlZ2lzdGVyKG91cnBvcnQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgY3B1ZnJlcSBub3RpZmllclxuIik7CisKIAlyZXR1cm4gMDsKIAogIHByb2JlX2VycjoKQEAgLTEwMTUsNiArMTEyNCw3IEBACiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoJmRldi0+ZGV2KTsKIAogCWlmIChwb3J0KSB7CisJCXMzYzI0eHhfc2VyaWFsX2NwdWZyZXFfZGVyZWdpc3Rlcih0b19vdXJwb3J0KHBvcnQpKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Nsb2NrX3NvdXJjZSk7CiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzM2MyNHh4X3VhcnRfZHJ2LCBwb3J0KTsKIAl9CkBAIC0xMjE5LDcgKzEzMjksNyBAQAogCiAJcGxhdGRldl9wdHIgPSBzM2MyNHh4X3VhcnRfZGV2czsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUzsgaSsrLCBwdHIrKywgcGxhdGRldl9wdHIrKykgeworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IGkrKywgcHRyKyssIHBsYXRkZXZfcHRyKyspIHsKIAkJczNjMjR4eF9zZXJpYWxfaW5pdF9wb3J0KHB0ciwgaW5mbywgKnBsYXRkZXZfcHRyKTsKIAl9CiAKQEAgLTEyNDAsNyArMTM1MCw3IEBACiAKIAkvKiBpcyB0aGlzIGEgdmFsaWQgcG9ydCAqLwogCi0JaWYgKGNvLT5pbmRleCA9PSAtMSB8fCBjby0+aW5kZXggPj0gTlJfUE9SVFMpCisJaWYgKGNvLT5pbmRleCA9PSAtMSB8fCBjby0+aW5kZXggPj0gQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTKQogCQljby0+aW5kZXggPSAwOwogCiAJcG9ydCA9ICZzM2MyNHh4X3NlcmlhbF9wb3J0c1tjby0+aW5kZXhdLnBvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmggYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmgKaW5kZXggNWM5MmViYi4uNTcxZDZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuaApAQCAtMzMsMTIgKzMzLDIxIEBACiBzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgewogCXVuc2lnbmVkIGNoYXIJCQlyeF9jbGFpbWVkOwogCXVuc2lnbmVkIGNoYXIJCQl0eF9jbGFpbWVkOworCXVuc2lnbmVkIGludAkJCXBtX2xldmVsOworCXVuc2lnbmVkIGxvbmcJCQliYXVkY2xrX3JhdGU7CisKKwl1bnNpZ25lZCBpbnQJCQlyeF9pcnE7CisJdW5zaWduZWQgaW50CQkJdHhfaXJxOwogCiAJc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvCSppbmZvOwogCXN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjCSpjbGtzcmM7CiAJc3RydWN0IGNsawkJCSpjbGs7CiAJc3RydWN0IGNsawkJCSpiYXVkY2xrOwogCXN0cnVjdCB1YXJ0X3BvcnQJCXBvcnQ7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCWZyZXFfdHJhbnNpdGlvbjsKKyNlbmRpZgogfTsKIAogLyogY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IDYxZGM4YjMuLmE3YmYwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtNDEsOSArNDEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNkZWZpbmUgREVWX01BSk9SCTIwNAogI2RlZmluZSBERVZfTUlOT1IJMTYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBjZjEyZjJkLi42MTA0ZjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0zMiw4ICszMiw4IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwppbmRleCBjMjUyY2JhLi4yNTZkMTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAogc3RydWN0IHMzYzI0eHhfc3BpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCmluZGV4IDJkYmMwZGIuLjhjNTAyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwpAQCAtMjE0NSw3ICsyMTQ1LDcgQEAKIAlpZiAoaXJxIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIlVEQ0NMSyIpOworCWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGRldi0+Y2xrKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKGRldi0+Y2xrKTsKIAkJZ290byBlcnJfY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggY2FhMzdjOS4uOTQ0ZTRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0yMjI2LDcgKzIyMjYsNyBAQAogCXVkYy0+ZGV2ID0gJnBkZXYtPmRldjsKIAl1ZGMtPm1hY2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXVkYy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiVURDQ0xLIik7CisJdWRjLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIodWRjLT5jbGspKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIodWRjLT5jbGspOwogCQlnb3RvIGVycl9jbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IDAwYmEwNmIuLjhkOGQ2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC01Myw4ICs1Myw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtdWRjLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdWRjLmg+CisjaW5jbHVkZSA8cGxhdC91ZGMuaD4KIAogCiAjaW5jbHVkZSAiczNjMjQxMF91ZGMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vcmlvbi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKaW5kZXggNTQxNmNmOS4uOWQ0ODc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMKQEAgLTMzLDggKzMzLDkgQEAKIC8qCiAgKiBJbXBsZW1lbnQgT3Jpb24gVVNCIGNvbnRyb2xsZXIgc3BlY2lmaWNhdGlvbiBndWlkZWxpbmVzCiAgKi8KLXN0YXRpYyB2b2lkIG9yaW9uX3VzYl9zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorc3RhdGljIHZvaWQgb3Jpb25fdXNiX3BoeV92MV9zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogeworCS8qIFRoZSBiZWxvdyBHTHMgYXJlIGFjY29yZGluZyB0byB0aGUgT3Jpb24gRXJyYXRhIGRvY3VtZW50ICovCiAJLyoKIAkgKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgYW5kIG1hc2sKIAkgKi8KQEAgLTI1OCw5ICsyNTksMTkgQEAKIAkJZWhjaV9vcmlvbl9jb25mX21idXNfd2luZG93cyhoY2QsIHBkLT5kcmFtKTsKIAogCS8qCi0JICogc2V0dXAgT3Jpb24gVVNCIGNvbnRyb2xsZXIKKwkgKiBzZXR1cCBPcmlvbiBVU0IgY29udHJvbGxlci4KIAkgKi8KLQlvcmlvbl91c2Jfc2V0dXAoaGNkKTsKKwlzd2l0Y2ggKHBkLT5waHlfdmVyc2lvbikgeworCWNhc2UgRUhDSV9QSFlfTkE6CS8qIGRvbnQgY2hhbmdlIFVTQiBwaHkgc2V0dGluZ3MgKi8KKwkJYnJlYWs7CisJY2FzZSBFSENJX1BIWV9PUklPTjoKKwkJb3Jpb25fdXNiX3BoeV92MV9zZXR1cChoY2QpOworCQlicmVhazsKKwljYXNlIEVIQ0lfUEhZX0REOgorCWNhc2UgRUhDSV9QSFlfS1c6CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3Jpb24gZWhjaSAtVVNCIHBoeSB2ZXJzaW9uIGlzbid0IHN1cHBvcnRlZC5cbiIpOworCX0KIAogCWVyciA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCA5MTY5N2JkLi40YmJkZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMjUsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCkBAIC0yNTQsOCArMjU0LDggQEAKIAogCQkJLyogZ3BpbzkgZm9yIG92ZXJjdXJyZW50IGRldGN0aW9uICovCiAJCQlvbWFwX2NmZ19yZWcoVzhfMTYxMF9HUElPOSk7Ci0JCQlvbWFwX3JlcXVlc3RfZ3Bpbyg5KTsKLQkJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDksIDEgLyogSU4gKi8pOworCQkJZ3Bpb19yZXF1ZXN0KDksICJPSENJIG92ZXJjdXJyZW50Iik7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dCg5KTsKIAogCQkJLyogZm9yIHBhcmFub2lhJ3Mgc2FrZTogIGRpc2FibGUgVVNCLlBVRU4gKi8KIAkJCW9tYXBfY2ZnX3JlZyhXNF9VU0JfSElHSFopOwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CiAJfQogCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpCi0JCW9tYXBfZnJlZV9ncGlvKDkpOworCQlncGlvX2ZyZWUoOSk7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCXVzYl9wdXRfaGNkKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggZTI5NGQ0My4uZTQ0ZGMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JdXNiX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIlVTQkNMSyIpOworCXVzYl9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIodXNiX2NsaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9jbGspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZDBjODIxOS4uNjM3MmY4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMzYyLDcgKzM2Miw3IEBACiAKIGNvbmZpZyBGQl9BQ09STgogCWJvb2wgIkFjb3JuIFZJREMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChGQiA9IHkpICYmIEFSTSAmJiAoQVJDSF9BQ09STiB8fCBBUkNIX0NMUFM3NTAwKQorCWRlcGVuZHMgb24gKEZCID0geSkgJiYgQVJNICYmIEFSQ0hfQUNPUk4KIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC0xODE3LDYgKzE4MTcsMTEgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEZCX1BYQV9PVkVSTEFZCisJYm9vbCAiU3VwcG9ydCBQWEEyN3gvUFhBM3h4IE92ZXJsYXkocykgYXMgZnJhbWVidWZmZXIiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBGQl9QWEEgJiYgKFBYQTI3eCB8fCBQWEEzeHgpCisKIGNvbmZpZyBGQl9QWEFfU01BUlRQQU5FTAogCWJvb2wgIlBYQSBTbWFydHBhbmVsIExDRCBzdXBwb3J0IgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYyBiL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKaW5kZXggYTdhMWM4OS4uMmFjNTJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCkBAIC0zNDMsMTQgKzM0MywxNCBAQAogewogCWludCByZXQ7CiAKLQlmYi0+Y2xrID0gY2xrX2dldCgmZmItPmRldi0+ZGV2LCAiQ0xDRENMSyIpOworCWZiLT5jbGsgPSBjbGtfZ2V0KCZmYi0+ZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoZmItPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihmYi0+Y2xrKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJZmItPmZiLmZpeC5tbWlvX3N0YXJ0CT0gZmItPmRldi0+cmVzLnN0YXJ0OwotCWZiLT5mYi5maXgubW1pb19sZW4JPSBTWl80SzsKKwlmYi0+ZmIuZml4Lm1taW9fbGVuCT0gNDA5NjsKIAogCWZiLT5yZWdzID0gaW9yZW1hcChmYi0+ZmIuZml4Lm1taW9fc3RhcnQsIGZiLT5mYi5maXgubW1pb19sZW4pOwogCWlmICghZmItPnJlZ3MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCA0NDhkMjA5Li5lNjIxMDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC0xMTIsNiArMTEyLDIzIEBACiBzdGF0aWMgaW50IAkJdmdhX3NjYW5fbGluZXMJCV9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IAl2Z2Ffcm9sbGVkX292ZXI7CiAKK2ludCB2Z2Fjb25fdGV4dF9tb2RlX2ZvcmNlID0gMDsKKworYm9vbCB2Z2Fjb25fdGV4dF9mb3JjZSh2b2lkKQoreworCXJldHVybiB2Z2Fjb25fdGV4dF9tb2RlX2ZvcmNlID8gdHJ1ZSA6IGZhbHNlOworfQorRVhQT1JUX1NZTUJPTCh2Z2Fjb25fdGV4dF9mb3JjZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHRleHRfbW9kZShjaGFyICpzdHIpCit7CisJdmdhY29uX3RleHRfbW9kZV9mb3JjZSA9IDE7CisJcmV0dXJuIDE7Cit9CisKKy8qIGZvcmNlIHRleHQgbW9kZSAtIHVzZWQgYnkga2VybmVsIG1vZGVzZXR0aW5nICovCitfX3NldHVwKCJub21vZGVzZXQiLCB0ZXh0X21vZGUpOworCiBzdGF0aWMgaW50IF9faW5pdCBub19zY3JvbGwoY2hhciAqc3RyKQogewogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggNDFkNjI2My4uMzlkNWQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtMTUxMyw3ICsxNTEzLDcgQEAKIAogCWlvcCA9IGlvcmVtYXAoMHgzMDAwMDAwLCAweDUwMDApOwogCWlmIChpb3AgPT0gTlVMTCkgewotCQlwcm9tX3ByaW50ZigiaWdhNTAwMDogY2Fubm90IG1hcCBJL09cbiIpOworCQlwcmludGsoS0VSTl9FUlIgImlnYTUwMDA6IGNhbm5vdCBtYXAgSS9PXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggY2NkOTg2MS4uZDU4YzY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy92aWRlby9pbXhmYi5jCi0gKgogICogIEZyZWVzY2FsZSBpLk1YIEZyYW1lIEJ1ZmZlciBkZXZpY2UgZHJpdmVyCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CkBAIC0xNiw3ICsxNCw2IEBACiAgKglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsKICAqLwogCi0vLyNkZWZpbmUgREVCVUcgMQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMiw5ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAKIC8qCkBAIC00MiwyMyArMzgsMTUwIEBACiAgKi8KICNkZWZpbmUgREVCVUdfVkFSIDEKIAotI2luY2x1ZGUgImlteGZiLmgiCisjZGVmaW5lIERSSVZFUl9OQU1FICJpbXgtZmIiCiAKLXN0YXRpYyBzdHJ1Y3QgaW14ZmJfcmdiIGRlZl9yZ2JfMTYgPSB7Ci0JLnJlZAk9IHsgLm9mZnNldCA9IDgsICAubGVuZ3RoID0gNCwgfSwKLQkuZ3JlZW4JPSB7IC5vZmZzZXQgPSA0LCAgLmxlbmd0aCA9IDQsIH0sCi0JLmJsdWUJPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDQsIH0sCi0JLnRyYW5zcCA9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gMCwgfSwKKyNkZWZpbmUgTENEQ19TU0EJMHgwMAorCisjZGVmaW5lIExDRENfU0laRQkweDA0CisjZGVmaW5lIFNJWkVfWE1BWCh4KQkoKCgoeCkgPj4gNCkgJiAweDNmKSA8PCAyMCkKKyNkZWZpbmUgU0laRV9ZTUFYKHkpCSgoeSkgJiAweDFmZikKKworI2RlZmluZSBMQ0RDX1ZQVwkweDA4CisjZGVmaW5lIFZQV19WUFcoeCkJKCh4KSAmIDB4M2ZmKQorCisjZGVmaW5lIExDRENfQ1BPUwkweDBDCisjZGVmaW5lIENQT1NfQ0MxCSgxPDwzMSkKKyNkZWZpbmUgQ1BPU19DQzAJKDE8PDMwKQorI2RlZmluZSBDUE9TX09QCQkoMTw8MjgpCisjZGVmaW5lIENQT1NfQ1hQKHgpCSgoKHgpICYgM2ZmKSA8PCAxNikKKyNkZWZpbmUgQ1BPU19DWVAoeSkJKCh5KSAmIDB4MWZmKQorCisjZGVmaW5lIExDRENfTENXSEIJMHgxMAorI2RlZmluZSBMQ1dIQl9CS19FTgkoMTw8MzEpCisjZGVmaW5lIExDV0hCX0NXKHcpCSgoKHcpICYgMHgxZikgPDwgMjQpCisjZGVmaW5lIExDV0hCX0NIKGgpCSgoKGgpICYgMHgxZikgPDwgMTYpCisjZGVmaW5lIExDV0hCX0JEKHgpCSgoeCkgJiAweGZmKQorCisjZGVmaW5lIExDRENfTENIQ0MJMHgxNAorI2RlZmluZSBMQ0hDQ19DVVJfQ09MX1IocikgKCgocikgJiAweDFmKSA8PCAxMSkKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9HKGcpICgoKGcpICYgMHgzZikgPDwgNSkKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9CKGIpICgoYikgJiAweDFmKQorCisjZGVmaW5lIExDRENfUENSCTB4MTgKKworI2RlZmluZSBMQ0RDX0hDUgkweDFDCisjZGVmaW5lIEhDUl9IX1dJRFRIKHgpCSgoKHgpICYgMHgzZikgPDwgMjYpCisjZGVmaW5lIEhDUl9IX1dBSVRfMSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIEhDUl9IX1dBSVRfMih4KQkoKHgpICYgMHhmZikKKworI2RlZmluZSBMQ0RDX1ZDUgkweDIwCisjZGVmaW5lIFZDUl9WX1dJRFRIKHgpCSgoKHgpICYgMHgzZikgPDwgMjYpCisjZGVmaW5lIFZDUl9WX1dBSVRfMSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFZDUl9WX1dBSVRfMih4KQkoKHgpICYgMHhmZikKKworI2RlZmluZSBMQ0RDX1BPUwkweDI0CisjZGVmaW5lIFBPU19QT1MoeCkJKCh4KSAmIDFmKQorCisjZGVmaW5lIExDRENfTFNDUjEJMHgyOAorLyogYml0IGZpZWxkcyBpbiBpbXhmYi5oICovCisKKyNkZWZpbmUgTENEQ19QV01SCTB4MkMKKy8qIGJpdCBmaWVsZHMgaW4gaW14ZmIuaCAqLworCisjZGVmaW5lIExDRENfRE1BQ1IJMHgzMAorLyogYml0IGZpZWxkcyBpbiBpbXhmYi5oICovCisKKyNkZWZpbmUgTENEQ19STUNSCTB4MzQKKyNkZWZpbmUgUk1DUl9MQ0RDX0VOCSgxPDwxKQorI2RlZmluZSBSTUNSX1NFTEZfUkVGCSgxPDwwKQorCisjZGVmaW5lIExDRENfTENESUNSCTB4MzgKKyNkZWZpbmUgTENESUNSX0lOVF9TWU4JKDE8PDIpCisjZGVmaW5lIExDRElDUl9JTlRfQ09OCSgxKQorCisjZGVmaW5lIExDRENfTENESVNSCTB4NDAKKyNkZWZpbmUgTENESVNSX1VEUl9FUlIJKDE8PDMpCisjZGVmaW5lIExDRElTUl9FUlJfUkVTCSgxPDwyKQorI2RlZmluZSBMQ0RJU1JfRU9GCSgxPDwxKQorI2RlZmluZSBMQ0RJU1JfQk9GCSgxPDwwKQorCisvKgorICogVGhlc2UgYXJlIHRoZSBiaXRmaWVsZHMgZm9yIGVhY2gKKyAqIGRpc3BsYXkgZGVwdGggdGhhdCB3ZSBzdXBwb3J0LgorICovCitzdHJ1Y3QgaW14ZmJfcmdiIHsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJcmVkOworCXN0cnVjdCBmYl9iaXRmaWVsZAlncmVlbjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYmx1ZTsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJdHJhbnNwOworfTsKKworc3RydWN0IGlteGZiX2luZm8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICpwZGV2OworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisKKwl1X2ludAkJCW1heF9icHA7CisJdV9pbnQJCQltYXhfeHJlczsKKwl1X2ludAkJCW1heF95cmVzOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIGFkZHJlc3NlcyB3ZSBtYXBwZWQKKwkgKiB0aGUgZnJhbWVidWZmZXIgbWVtb3J5IHJlZ2lvbiB0by4KKwkgKi8KKwlkbWFfYWRkcl90CQltYXBfZG1hOworCXVfY2hhcgkJCSptYXBfY3B1OworCXVfaW50CQkJbWFwX3NpemU7CisKKwl1X2NoYXIJCQkqc2NyZWVuX2NwdTsKKwlkbWFfYWRkcl90CQlzY3JlZW5fZG1hOworCXVfaW50CQkJcGFsZXR0ZV9zaXplOworCisJZG1hX2FkZHJfdAkJZGJhcjE7CisJZG1hX2FkZHJfdAkJZGJhcjI7CisKKwl1X2ludAkJCXBjcjsKKwl1X2ludAkJCXB3bXI7CisJdV9pbnQJCQlsc2NyMTsKKwl1X2ludAkJCWRtYWNyOworCXVfaW50CQkJY21hcF9pbnZlcnNlOjEsCisJCQkJY21hcF9zdGF0aWM6MSwKKwkJCQl1bnVzZWQ6MzA7CisKKwl2b2lkICgqbGNkX3Bvd2VyKShpbnQpOworCXZvaWQgKCpiYWNrbGlnaHRfcG93ZXIpKGludCk7Cit9OworCisjZGVmaW5lIElNWF9OQU1FCSJJTVgiCisKKy8qCisgKiBNaW5pbXVtIFggYW5kIFkgcmVzb2x1dGlvbnMKKyAqLworI2RlZmluZSBNSU5fWFJFUwk2NAorI2RlZmluZSBNSU5fWVJFUwk2NAorCitzdGF0aWMgc3RydWN0IGlteGZiX3JnYiBkZWZfcmdiXzE2X3RmdCA9IHsKKwkucmVkCT0gey5vZmZzZXQgPSAxMSwgLmxlbmd0aCA9IDUsfSwKKwkuZ3JlZW4JPSB7Lm9mZnNldCA9IDUsIC5sZW5ndGggPSA2LH0sCisJLmJsdWUJPSB7Lm9mZnNldCA9IDAsIC5sZW5ndGggPSA1LH0sCisJLnRyYW5zcCA9IHsub2Zmc2V0ID0gMCwgLmxlbmd0aCA9IDAsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14ZmJfcmdiIGRlZl9yZ2JfMTZfc3RuID0geworCS5yZWQJPSB7Lm9mZnNldCA9IDgsIC5sZW5ndGggPSA0LH0sCisJLmdyZWVuCT0gey5vZmZzZXQgPSA0LCAubGVuZ3RoID0gNCx9LAorCS5ibHVlCT0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gNCx9LAorCS50cmFuc3AgPSB7Lm9mZnNldCA9IDAsIC5sZW5ndGggPSAwLH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGlteGZiX3JnYiBkZWZfcmdiXzggPSB7Ci0JLnJlZAk9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gOCwgfSwKLQkuZ3JlZW4JPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDgsIH0sCi0JLmJsdWUJPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDgsIH0sCi0JLnRyYW5zcCA9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gMCwgfSwKKwkucmVkCT0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gOCx9LAorCS5ncmVlbgk9IHsub2Zmc2V0ID0gMCwgLmxlbmd0aCA9IDgsfSwKKwkuYmx1ZQk9IHsub2Zmc2V0ID0gMCwgLmxlbmd0aCA9IDgsfSwKKwkudHJhbnNwID0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gMCx9LAogfTsKIAotc3RhdGljIGludCBpbXhmYl9hY3RpdmF0ZV92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIHN0YXRpYyBpbmxpbmUgdV9pbnQgY2hhbl90b19maWVsZCh1X2ludCBjaGFuLCBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQogewpAQCAtNjcsMTAgKzE5MCw4IEBACiAJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKIH0KIAotI2RlZmluZSBMQ0RDX1BBTEVUVEUoeCkgX19SRUcyKElNWF9MQ0RDX0JBU0UrMHg4MDAsICh4KTw8MikKLXN0YXRpYyBpbnQKLWlteGZiX3NldHBhbGV0dGVyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCi0JCSAgICAgICB1X2ludCB0cmFucywgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGlteGZiX3NldHBhbGV0dGVyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCisJCXVfaW50IHRyYW5zLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXVfaW50IHZhbCwgcmV0ID0gMTsKQEAgLTgxLDE0ICsyMDIsMTMgQEAKIAkJICAgICAgKENOVlRfVE9IVyhncmVlbiw0KSA8PCA0KSB8CiAJCSAgICAgIENOVlRfVE9IVyhibHVlLCAgNCk7CiAKLQkJTENEQ19QQUxFVFRFKHJlZ25vKSA9IHZhbDsKKwkJd3JpdGVsKHZhbCwgZmJpLT5yZWdzICsgMHg4MDAgKyAocmVnbm8gPDwgMikpOwogCQlyZXQgPSAwOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1pbXhmYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCitzdGF0aWMgaW50IGlteGZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwgdV9pbnQgYmx1ZSwKIAkJICAgdV9pbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CkBAIC0xNDgsMTEgKzI2OCwxMCBAQAogICogICAgeXJlcywgeHJlc192aXJ0dWFsLCB5cmVzX3ZpcnR1YWwsIHhvZmZzZXQsIHlvZmZzZXQsIGdyYXlzY2FsZSwKICAqICAgIGJpdGZpZWxkcywgaG9yaXpvbnRhbCB0aW1pbmcsIHZlcnRpY2FsIHRpbWluZy4KICAqLwotc3RhdGljIGludAotaW14ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgaW14ZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwotCWludCByZ2JpZHg7CisJc3RydWN0IGlteGZiX3JnYiAqcmdiOwogCiAJaWYgKHZhci0+eHJlcyA8IE1JTl9YUkVTKQogCQl2YXItPnhyZXMgPSBNSU5fWFJFUzsKQEAgLTE2OCwyMyArMjg3LDI1IEBACiAJcHJfZGVidWcoInZhci0+Yml0c19wZXJfcGl4ZWw9JWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgMTY6Ci0JCXJnYmlkeCA9IFJHQl8xNjsKKwlkZWZhdWx0OgorCQlpZiAocmVhZGwoZmJpLT5yZWdzICsgTENEQ19QQ1IpICYgUENSX1RGVCkKKwkJCXJnYiA9ICZkZWZfcmdiXzE2X3RmdDsKKwkJZWxzZQorCQkJcmdiID0gJmRlZl9yZ2JfMTZfc3RuOwogCQlicmVhazsKIAljYXNlIDg6Ci0JCXJnYmlkeCA9IFJHQl84OworCQlyZ2IgPSAmZGVmX3JnYl84OwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZ2JpZHggPSBSR0JfMTY7CiAJfQogCiAJLyoKIAkgKiBDb3B5IHRoZSBSR0IgcGFyYW1ldGVycyBmb3IgdGhpcyBkaXNwbGF5CiAJICogZnJvbSB0aGUgbWFjaGluZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLgogCSAqLwotCXZhci0+cmVkICAgID0gZmJpLT5yZ2JbcmdiaWR4XS0+cmVkOwotCXZhci0+Z3JlZW4gID0gZmJpLT5yZ2JbcmdiaWR4XS0+Z3JlZW47Ci0JdmFyLT5ibHVlICAgPSBmYmktPnJnYltyZ2JpZHhdLT5ibHVlOwotCXZhci0+dHJhbnNwID0gZmJpLT5yZ2JbcmdiaWR4XS0+dHJhbnNwOworCXZhci0+cmVkICAgID0gcmdiLT5yZWQ7CisJdmFyLT5ncmVlbiAgPSByZ2ItPmdyZWVuOworCXZhci0+Ymx1ZSAgID0gcmdiLT5ibHVlOworCXZhci0+dHJhbnNwID0gcmdiLT50cmFuc3A7CiAKIAlwcl9kZWJ1ZygiUkdCVCBsZW5ndGggPSAlZDolZDolZDolZFxuIiwKIAkJdmFyLT5yZWQubGVuZ3RoLCB2YXItPmdyZWVuLmxlbmd0aCwgdmFyLT5ibHVlLmxlbmd0aCwKQEAgLTIyMSw4ICszNDIsNyBAQAogCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjsKIAl9CiAKLQlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqCi0JCQkJICB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OwogCWZiaS0+cGFsZXR0ZV9zaXplID0gdmFyLT5iaXRzX3Blcl9waXhlbCA9PSA4ID8gMjU2IDogMTY7CiAKIAlpbXhmYl9hY3RpdmF0ZV92YXIodmFyLCBpbmZvKTsKQEAgLTIzNSwyMiArMzU1LDI3IEBACiAJcHJfZGVidWcoIkVuYWJsaW5nIExDRCBjb250cm9sbGVyXG4iKTsKIAogCS8qIGluaXRpYWxpemUgTENEQyAqLwotCUxDRENfUk1DUiAmPSB+Uk1DUl9MQ0RDX0VOOwkJLyoganVzdCB0byBiZSBzYWZlLi4uICovCisJd3JpdGVsKHJlYWRsKGZiaS0+cmVncyArIExDRENfUk1DUikgJiB+Uk1DUl9MQ0RDX0VOLAorCQlmYmktPnJlZ3MgKyBMQ0RDX1JNQ1IpOwkvKiBqdXN0IHRvIGJlIHNhZmUuLi4gKi8KIAotCUxDRENfU1NBCT0gZmJpLT5zY3JlZW5fZG1hOworCXdyaXRlbChmYmktPnNjcmVlbl9kbWEsIGZiaS0+cmVncyArIExDRENfU1NBKTsKKwogCS8qIHBoeXNpY2FsIHNjcmVlbiBzdGFydCBhZGRyZXNzCSAgICAqLwotCUxDRENfVlBXCT0gVlBXX1ZQVyhmYmktPm1heF94cmVzICogZmJpLT5tYXhfYnBwIC8gOCAvIDQpOworCXdyaXRlbChWUFdfVlBXKGZiaS0+bWF4X3hyZXMgKiBmYmktPm1heF9icHAgLyA4IC8gNCksCisJCWZiaS0+cmVncyArIExDRENfVlBXKTsKIAotCUxDRENfUE9TCT0gMHgwMDAwMDAwMDsgICAvKiBwYW5uaW5nIG9mZnNldCAwICgwIHBpeGVsIG9mZnNldCkgICAgICAgICovCisJLyogcGFubmluZyBvZmZzZXQgMCAoMCBwaXhlbCBvZmZzZXQpICAgICAgICAqLworCXdyaXRlbCgweDAwMDAwMDAwLCBmYmktPnJlZ3MgKyBMQ0RDX1BPUyk7CiAKIAkvKiBkaXNhYmxlIGhhcmR3YXJlIGN1cnNvciAqLwotCUxDRENfQ1BPUwkmPSB+KENQT1NfQ0MwIHwgQ1BPU19DQzEpOworCXdyaXRlbChyZWFkbChmYmktPnJlZ3MgKyBMQ0RDX0NQT1MpICYgfihDUE9TX0NDMCB8IENQT1NfQ0MxKSwKKwkJZmJpLT5yZWdzICsgTENEQ19DUE9TKTsKIAotCUxDRENfUk1DUiA9IFJNQ1JfTENEQ19FTjsKKwl3cml0ZWwoUk1DUl9MQ0RDX0VOLCBmYmktPnJlZ3MgKyBMQ0RDX1JNQ1IpOwogCi0JaWYoZmJpLT5iYWNrbGlnaHRfcG93ZXIpCisJaWYgKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQogCQlmYmktPmJhY2tsaWdodF9wb3dlcigxKTsKLQlpZihmYmktPmxjZF9wb3dlcikKKwlpZiAoZmJpLT5sY2RfcG93ZXIpCiAJCWZiaS0+bGNkX3Bvd2VyKDEpOwogfQogCkBAIC0yNTgsMTIgKzM4MywxMiBAQAogewogCXByX2RlYnVnKCJEaXNhYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOwogCi0JaWYoZmJpLT5iYWNrbGlnaHRfcG93ZXIpCisJaWYgKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQogCQlmYmktPmJhY2tsaWdodF9wb3dlcigwKTsKLQlpZihmYmktPmxjZF9wb3dlcikKKwlpZiAoZmJpLT5sY2RfcG93ZXIpCiAJCWZiaS0+bGNkX3Bvd2VyKDApOwogCi0JTENEQ19STUNSID0gMDsKKwl3cml0ZWwoMCwgZmJpLT5yZWdzICsgTENEQ19STUNSKTsKIH0KIAogc3RhdGljIGludCBpbXhmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtMzQwLDc0ICs0NjUsMjYgQEAKIAkJCWluZm8tPmZpeC5pZCwgdmFyLT5sb3dlcl9tYXJnaW4pOwogI2VuZGlmCiAKLQlMQ0RDX0hDUgk9IEhDUl9IX1dJRFRIKHZhci0+aHN5bmNfbGVuKSB8Ci0JICAgICAgICAgICAgICAgICAgSENSX0hfV0FJVF8xKHZhci0+bGVmdF9tYXJnaW4pIHwKLQkJCSAgSENSX0hfV0FJVF8yKHZhci0+cmlnaHRfbWFyZ2luKTsKKwl3cml0ZWwoSENSX0hfV0lEVEgodmFyLT5oc3luY19sZW4pIHwKKwkJSENSX0hfV0FJVF8xKHZhci0+cmlnaHRfbWFyZ2luKSB8CisJCUhDUl9IX1dBSVRfMih2YXItPmxlZnRfbWFyZ2luKSwKKwkJZmJpLT5yZWdzICsgTENEQ19IQ1IpOwogCi0JTENEQ19WQ1IJPSBWQ1JfVl9XSURUSCh2YXItPnZzeW5jX2xlbikgfAotCSAgICAgICAgICAgICAgICAgIFZDUl9WX1dBSVRfMSh2YXItPnVwcGVyX21hcmdpbikgfAotCQkJICBWQ1JfVl9XQUlUXzIodmFyLT5sb3dlcl9tYXJnaW4pOworCXdyaXRlbChWQ1JfVl9XSURUSCh2YXItPnZzeW5jX2xlbikgfAorCQlWQ1JfVl9XQUlUXzEodmFyLT5sb3dlcl9tYXJnaW4pIHwKKwkJVkNSX1ZfV0FJVF8yKHZhci0+dXBwZXJfbWFyZ2luKSwKKwkJZmJpLT5yZWdzICsgTENEQ19WQ1IpOwogCi0JTENEQ19TSVpFCT0gU0laRV9YTUFYKHZhci0+eHJlcykgfCBTSVpFX1lNQVgodmFyLT55cmVzKTsKLQlMQ0RDX1BDUgk9IGZiaS0+cGNyOwotCUxDRENfUFdNUgk9IGZiaS0+cHdtcjsKLQlMQ0RDX0xTQ1IxCT0gZmJpLT5sc2NyMTsKLQlMQ0RDX0RNQUNSCT0gZmJpLT5kbWFjcjsKKwl3cml0ZWwoU0laRV9YTUFYKHZhci0+eHJlcykgfCBTSVpFX1lNQVgodmFyLT55cmVzKSwKKwkJCWZiaS0+cmVncyArIExDRENfU0laRSk7CisJd3JpdGVsKGZiaS0+cGNyLCBmYmktPnJlZ3MgKyBMQ0RDX1BDUik7CisJd3JpdGVsKGZiaS0+cHdtciwgZmJpLT5yZWdzICsgTENEQ19QV01SKTsKKwl3cml0ZWwoZmJpLT5sc2NyMSwgZmJpLT5yZWdzICsgTENEQ19MU0NSMSk7CisJd3JpdGVsKGZiaS0+ZG1hY3IsIGZiaS0+cmVncyArIExDRENfRE1BQ1IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlteGZiX3NldHVwX2dwaW8oc3RydWN0IGlteGZiX2luZm8gKmZiaSkKLXsKLQlpbnQgd2lkdGg7Ci0KLQlMQ0RDX1JNQ1IJJj0gfihSTUNSX0xDRENfRU4gfCBSTUNSX1NFTEZfUkVGKTsKLQotCWlmKCBmYmktPnBjciAmIFBDUl9URlQgKQotCQl3aWR0aCA9IDE2OwotCWVsc2UKLQkJd2lkdGggPSAxIDw8ICgoZmJpLT5wY3IgPj4gMjgpICYgMHgzKTsKLQotCXN3aXRjaCh3aWR0aCkgewotCWNhc2UgMTY6Ci0JCWlteF9ncGlvX21vZGUoUEQzMF9QRl9MRDE1KTsKLQkJaW14X2dwaW9fbW9kZShQRDI5X1BGX0xEMTQpOwotCQlpbXhfZ3Bpb19tb2RlKFBEMjhfUEZfTEQxMyk7Ci0JCWlteF9ncGlvX21vZGUoUEQyN19QRl9MRDEyKTsKLQkJaW14X2dwaW9fbW9kZShQRDI2X1BGX0xEMTEpOwotCQlpbXhfZ3Bpb19tb2RlKFBEMjVfUEZfTEQxMCk7Ci0JCWlteF9ncGlvX21vZGUoUEQyNF9QRl9MRDkpOwotCQlpbXhfZ3Bpb19tb2RlKFBEMjNfUEZfTEQ4KTsKLQljYXNlIDg6Ci0JCWlteF9ncGlvX21vZGUoUEQyMl9QRl9MRDcpOwotCQlpbXhfZ3Bpb19tb2RlKFBEMjFfUEZfTEQ2KTsKLQkJaW14X2dwaW9fbW9kZShQRDIwX1BGX0xENSk7Ci0JCWlteF9ncGlvX21vZGUoUEQxOV9QRl9MRDQpOwotCWNhc2UgNDoKLQkJaW14X2dwaW9fbW9kZShQRDE4X1BGX0xEMyk7Ci0JCWlteF9ncGlvX21vZGUoUEQxN19QRl9MRDIpOwotCWNhc2UgMjoKLQkJaW14X2dwaW9fbW9kZShQRDE2X1BGX0xEMSk7Ci0JY2FzZSAxOgotCQlpbXhfZ3Bpb19tb2RlKFBEMTVfUEZfTEQwKTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIEdQSU9zICovCi0JaW14X2dwaW9fbW9kZShQRDZfUEZfTFNDTEspOwotCWlteF9ncGlvX21vZGUoUEQxMV9QRl9DT05UUkFTVCk7Ci0JaW14X2dwaW9fbW9kZShQRDE0X1BGX0ZMTV9WU1lOQyk7Ci0JaW14X2dwaW9fbW9kZShQRDEzX1BGX0xQX0hTWU5DKTsKLQlpbXhfZ3Bpb19tb2RlKFBEMTJfUEZfQUNEX09FKTsKLQotCS8qIFRoZXNlIGFyZSBvbmx5IG5lZWRlZCBmb3IgU2hhcnAgSFIgVEZUIGRpc3BsYXlzICovCi0JaWYgKGZiaS0+cGNyICYgUENSX1NIQVJQKSB7Ci0JCWlteF9ncGlvX21vZGUoUEQ3X1BGX1JFVik7Ci0JCWlteF9ncGlvX21vZGUoUEQ4X1BGX0NMUyk7Ci0JCWlteF9ncGlvX21vZGUoUEQ5X1BGX1BTKTsKLQkJaW14X2dwaW9fbW9kZShQRDEwX1BGX1NQTF9TUFIpOwotCX0KLX0KLQogI2lmZGVmIENPTkZJR19QTQogLyoKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCkBAIC00MTYsNyArNDkzLDggQEAKIHN0YXRpYyBpbnQgaW14ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQlwcl9kZWJ1ZygiJXNcbiIsX19mdW5jX18pOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKIAlyZXR1cm4gMDsKQEAgLTQyNSw3ICs1MDMsOCBAQAogc3RhdGljIGludCBpbXhmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCXByX2RlYnVnKCIlc1xuIixfX2Z1bmNfXyk7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCWlteGZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CiAJcmV0dXJuIDA7CkBAIC00MzUsMTQ5ICs1MTQsMTM2IEBACiAjZGVmaW5lIGlteGZiX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgaW14ZmJfaW5pdF9mYmluZm8oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaW14ZmJfaW5pdF9mYmluZm8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvICppbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAogCXByX2RlYnVnKCIlc1xuIixfX2Z1bmNfXyk7CiAKLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGttYWxsb2MoIHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOworCWluZm8tPnBzZXVkb19wYWxldHRlID0ga21hbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8tPnBzZXVkb19wYWxldHRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbXNldChmYmksIDAsIHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbykpOwotCWZiaS0+ZGV2ID0gZGV2OwogCiAJc3RybGNweShpbmZvLT5maXguaWQsIElNWF9OQU1FLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CiAKLQlpbmZvLT5maXgudHlwZQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudHlwZQkJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwogCWluZm8tPmZpeC50eXBlX2F1eAkJPSAwOwogCWluZm8tPmZpeC54cGFuc3RlcAkJPSAwOwogCWluZm8tPmZpeC55cGFuc3RlcAkJPSAwOwogCWluZm8tPmZpeC55d3JhcHN0ZXAJCT0gMDsKLQlpbmZvLT5maXguYWNjZWwJPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPmZpeC5hY2NlbAkJCT0gRkJfQUNDRUxfTk9ORTsKIAogCWluZm8tPnZhci5ub25zdGQJCT0gMDsKIAlpbmZvLT52YXIuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfTk9XOwogCWluZm8tPnZhci5oZWlnaHQJCT0gLTE7CiAJaW5mby0+dmFyLndpZHRoCT0gLTE7CiAJaW5mby0+dmFyLmFjY2VsX2ZsYWdzCQk9IDA7Ci0JaW5mby0+dmFyLnZtb2RlCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKwlpbmZvLT52YXIudm1vZGUJCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CiAKIAlpbmZvLT5mYm9wcwkJCT0gJmlteGZiX29wczsKLQlpbmZvLT5mbGFncwkJCT0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8IEZCSU5GT19SRUFEU19GQVNUOworCWluZm8tPmZsYWdzCQkJPSBGQklORk9fRkxBR19ERUZBVUxUIHwKKwkJCQkJICBGQklORk9fUkVBRFNfRkFTVDsKIAotCWZiaS0+cmdiW1JHQl8xNl0JCT0gJmRlZl9yZ2JfMTY7Ci0JZmJpLT5yZ2JbUkdCXzhdCQkJPSAmZGVmX3JnYl84OwotCi0JZmJpLT5tYXhfeHJlcwkJCT0gaW5mLT54cmVzOwotCWluZm8tPnZhci54cmVzCQkJPSBpbmYtPnhyZXM7Ci0JaW5mby0+dmFyLnhyZXNfdmlydHVhbAkJPSBpbmYtPnhyZXM7Ci0JZmJpLT5tYXhfeXJlcwkJCT0gaW5mLT55cmVzOwotCWluZm8tPnZhci55cmVzCQkJPSBpbmYtPnlyZXM7Ci0JaW5mby0+dmFyLnlyZXNfdmlydHVhbAkJPSBpbmYtPnlyZXM7Ci0JZmJpLT5tYXhfYnBwCQkJPSBpbmYtPmJwcDsKLQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwJPSBpbmYtPmJwcDsKLQlpbmZvLT52YXIubm9uc3RkCQk9IGluZi0+bm9uc3RkOwotCWluZm8tPnZhci5waXhjbG9jawkJPSBpbmYtPnBpeGNsb2NrOwotCWluZm8tPnZhci5oc3luY19sZW4JCT0gaW5mLT5oc3luY19sZW47Ci0JaW5mby0+dmFyLmxlZnRfbWFyZ2luCQk9IGluZi0+bGVmdF9tYXJnaW47Ci0JaW5mby0+dmFyLnJpZ2h0X21hcmdpbgkJPSBpbmYtPnJpZ2h0X21hcmdpbjsKLQlpbmZvLT52YXIudnN5bmNfbGVuCQk9IGluZi0+dnN5bmNfbGVuOwotCWluZm8tPnZhci51cHBlcl9tYXJnaW4JCT0gaW5mLT51cHBlcl9tYXJnaW47Ci0JaW5mby0+dmFyLmxvd2VyX21hcmdpbgkJPSBpbmYtPmxvd2VyX21hcmdpbjsKLQlpbmZvLT52YXIuc3luYwkJCT0gaW5mLT5zeW5jOwotCWluZm8tPnZhci5ncmF5c2NhbGUJCT0gaW5mLT5jbWFwX2dyZXlzY2FsZTsKLQlmYmktPmNtYXBfaW52ZXJzZQkJPSBpbmYtPmNtYXBfaW52ZXJzZTsKLQlmYmktPmNtYXBfc3RhdGljCQk9IGluZi0+Y21hcF9zdGF0aWM7Ci0JZmJpLT5wY3IJCQk9IGluZi0+cGNyOwotCWZiaS0+bHNjcjEJCQk9IGluZi0+bHNjcjE7Ci0JZmJpLT5kbWFjcgkJCT0gaW5mLT5kbWFjcjsKLQlmYmktPnB3bXIJCQk9IGluZi0+cHdtcjsKLQlmYmktPmxjZF9wb3dlcgkJCT0gaW5mLT5sY2RfcG93ZXI7Ci0JZmJpLT5iYWNrbGlnaHRfcG93ZXIJCT0gaW5mLT5iYWNrbGlnaHRfcG93ZXI7CisJZmJpLT5tYXhfeHJlcwkJCT0gcGRhdGEtPnhyZXM7CisJaW5mby0+dmFyLnhyZXMJCQk9IHBkYXRhLT54cmVzOworCWluZm8tPnZhci54cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnhyZXM7CisJZmJpLT5tYXhfeXJlcwkJCT0gcGRhdGEtPnlyZXM7CisJaW5mby0+dmFyLnlyZXMJCQk9IHBkYXRhLT55cmVzOworCWluZm8tPnZhci55cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnlyZXM7CisJZmJpLT5tYXhfYnBwCQkJPSBwZGF0YS0+YnBwOworCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbAk9IHBkYXRhLT5icHA7CisJaW5mby0+dmFyLm5vbnN0ZAkJPSBwZGF0YS0+bm9uc3RkOworCWluZm8tPnZhci5waXhjbG9jawkJPSBwZGF0YS0+cGl4Y2xvY2s7CisJaW5mby0+dmFyLmhzeW5jX2xlbgkJPSBwZGF0YS0+aHN5bmNfbGVuOworCWluZm8tPnZhci5sZWZ0X21hcmdpbgkJPSBwZGF0YS0+bGVmdF9tYXJnaW47CisJaW5mby0+dmFyLnJpZ2h0X21hcmdpbgkJPSBwZGF0YS0+cmlnaHRfbWFyZ2luOworCWluZm8tPnZhci52c3luY19sZW4JCT0gcGRhdGEtPnZzeW5jX2xlbjsKKwlpbmZvLT52YXIudXBwZXJfbWFyZ2luCQk9IHBkYXRhLT51cHBlcl9tYXJnaW47CisJaW5mby0+dmFyLmxvd2VyX21hcmdpbgkJPSBwZGF0YS0+bG93ZXJfbWFyZ2luOworCWluZm8tPnZhci5zeW5jCQkJPSBwZGF0YS0+c3luYzsKKwlpbmZvLT52YXIuZ3JheXNjYWxlCQk9IHBkYXRhLT5jbWFwX2dyZXlzY2FsZTsKKwlmYmktPmNtYXBfaW52ZXJzZQkJPSBwZGF0YS0+Y21hcF9pbnZlcnNlOworCWZiaS0+Y21hcF9zdGF0aWMJCT0gcGRhdGEtPmNtYXBfc3RhdGljOworCWZiaS0+cGNyCQkJPSBwZGF0YS0+cGNyOworCWZiaS0+bHNjcjEJCQk9IHBkYXRhLT5sc2NyMTsKKwlmYmktPmRtYWNyCQkJPSBwZGF0YS0+ZG1hY3I7CisJZmJpLT5wd21yCQkJPSBwZGF0YS0+cHdtcjsKKwlmYmktPmxjZF9wb3dlcgkJCT0gcGRhdGEtPmxjZF9wb3dlcjsKKwlmYmktPmJhY2tsaWdodF9wb3dlcgkJPSBwZGF0YS0+YmFja2xpZ2h0X3Bvd2VyOwogCWluZm8tPmZpeC5zbWVtX2xlbgkJPSBmYmktPm1heF94cmVzICogZmJpLT5tYXhfeXJlcyAqCiAJCQkJCSAgZmJpLT5tYXhfYnBwIC8gODsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogICAgICBBbGxvY2F0ZXMgdGhlIERSQU0gbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVyLiAgVGhpcyBidWZmZXIgaXMKLSAqCXJlbWFwcGVkIGludG8gYSBub24tY2FjaGVkLCBub24tYnVmZmVyZWQsIG1lbW9yeSByZWdpb24gdG8KLSAqICAgICAgYWxsb3cgcGl4ZWwgd3JpdGVzIHRvIG9jY3VyIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgotICogICAgICBPbmNlIHRoaXMgYXJlYSBpcyByZW1hcHBlZCwgYWxsIHZpcnR1YWwgbWVtb3J5IGFjY2VzcyB0byB0aGUKLSAqICAgICAgdmlkZW8gbWVtb3J5IHNob3VsZCBvY2N1ciBhdCB0aGUgbmV3IHJlZ2lvbi4KLSAqLwotc3RhdGljIGludCBfX2luaXQgaW14ZmJfbWFwX3ZpZGVvX21lbW9yeShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwotCi0JZmJpLT5tYXBfc2l6ZSA9IFBBR0VfQUxJR04oaW5mby0+Zml4LnNtZW1fbGVuKTsKLQlmYmktPm1hcF9jcHUgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGZiaS0+ZGV2LCBmYmktPm1hcF9zaXplLAotCQkJCQkmZmJpLT5tYXBfZG1hLEdGUF9LRVJORUwpOwotCi0JaWYgKGZiaS0+bWFwX2NwdSkgewotCQlpbmZvLT5zY3JlZW5fYmFzZSA9IGZiaS0+bWFwX2NwdTsKLQkJZmJpLT5zY3JlZW5fY3B1ID0gZmJpLT5tYXBfY3B1OwotCQlmYmktPnNjcmVlbl9kbWEgPSBmYmktPm1hcF9kbWE7Ci0JCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOwotCX0KLQotCXJldHVybiBmYmktPm1hcF9jcHUgPyAwIDogLUVOT01FTTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCXN0cnVjdCBpbXhmYl9tYWNoX2luZm8gKmluZjsKKwlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQ7CiAKIAlwcmludGsoImkuTVggRnJhbWVidWZmZXIgZHJpdmVyXG4iKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYoIXJlcykKKwlpZiAoIXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZighaW5mKSB7CisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwiTm8gcGxhdGZvcm1fZGF0YSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbXhmYl9pbmZvKSwgJnBkZXYtPmRldik7Ci0JaWYoIWluZm8pCisJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZiaSA9IGluZm8tPnBhcjsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8oJnBkZXYtPmRldik7Ci0JaWYoIHJldCA8IDAgKQorCXJldCA9IGlteGZiX2luaXRfZmJpbmZvKHBkZXYpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGZhaWxlZF9pbml0OwogCi0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsICJJTVhGQiIpOworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCisJCQkJRFJJVkVSX05BTUUpOwogCWlmICghcmVzKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJZ290byBmYWlsZWRfcmVnczsKKwkJZ290byBmYWlsZWRfcmVxOwogCX0KIAotCWlmICghaW5mLT5maXhlZF9zY3JlZW5fY3B1KSB7Ci0JCXJldCA9IGlteGZiX21hcF92aWRlb19tZW1vcnkoaW5mbyk7Ci0JCWlmIChyZXQpIHsKKwlmYmktPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGZiaS0+cmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiJDYW5ub3QgbWFwIGZyYW1lIGJ1ZmZlciByZWdpc3RlcnNcbiIpOworCQlnb3RvIGZhaWxlZF9pb3JlbWFwOworCX0KKworCWlmICghcGRhdGEtPmZpeGVkX3NjcmVlbl9jcHUpIHsKKwkJZmJpLT5tYXBfc2l6ZSA9IFBBR0VfQUxJR04oaW5mby0+Zml4LnNtZW1fbGVuKTsKKwkJZmJpLT5tYXBfY3B1ID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmcGRldi0+ZGV2LAorCQkJCWZiaS0+bWFwX3NpemUsICZmYmktPm1hcF9kbWEsIEdGUF9LRVJORUwpOworCisJCWlmICghZmJpLT5tYXBfY3B1KSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gUkFNOiAlZFxuIiwgcmV0KTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZhaWxlZF9tYXA7CiAJCX0KKworCQlpbmZvLT5zY3JlZW5fYmFzZSA9IGZiaS0+bWFwX2NwdTsKKwkJZmJpLT5zY3JlZW5fY3B1ID0gZmJpLT5tYXBfY3B1OworCQlmYmktPnNjcmVlbl9kbWEgPSBmYmktPm1hcF9kbWE7CisJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOwogCX0gZWxzZSB7CiAJCS8qIEZpeGVkIGZyYW1lYnVmZmVyIG1hcHBpbmcgZW5hYmxlcyBsb2NhdGlvbiBvZiB0aGUgc2NyZWVuIGluIGVTUkFNICovCi0JCWZiaS0+bWFwX2NwdSA9IGluZi0+Zml4ZWRfc2NyZWVuX2NwdTsKLQkJZmJpLT5tYXBfZG1hID0gaW5mLT5maXhlZF9zY3JlZW5fZG1hOworCQlmYmktPm1hcF9jcHUgPSBwZGF0YS0+Zml4ZWRfc2NyZWVuX2NwdTsKKwkJZmJpLT5tYXBfZG1hID0gcGRhdGEtPmZpeGVkX3NjcmVlbl9kbWE7CiAJCWluZm8tPnNjcmVlbl9iYXNlID0gZmJpLT5tYXBfY3B1OwogCQlmYmktPnNjcmVlbl9jcHUgPSBmYmktPm1hcF9jcHU7CiAJCWZiaS0+c2NyZWVuX2RtYSA9IGZiaS0+bWFwX2RtYTsKQEAgLTU5MCwxMiArNjU2LDEwIEBACiAJICovCiAJaW14ZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOwogCi0JcmV0ID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMTw8aW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCAwKTsKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxIDw8IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbGVkX2NtYXA7CiAKLQlpbXhmYl9zZXR1cF9ncGlvKGZiaSk7Ci0KIAlpbXhmYl9zZXRfcGFyKGluZm8pOwogCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChyZXQgPCAwKSB7CkBAIC02MTAsMjAgKzY3NCwyMiBAQAogZmFpbGVkX3JlZ2lzdGVyOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBmYWlsZWRfY21hcDoKLQlpZiAoIWluZi0+Zml4ZWRfc2NyZWVuX2NwdSkKKwlpZiAoIXBkYXRhLT5maXhlZF9zY3JlZW5fY3B1KQogCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJnBkZXYtPmRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKLQkJICAgICAgICAgICBmYmktPm1hcF9kbWEpOworCQkJZmJpLT5tYXBfZG1hKTsKIGZhaWxlZF9tYXA6Ci0Ja2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwotZmFpbGVkX3JlZ3M6CisJaW91bm1hcChmYmktPnJlZ3MpOworZmFpbGVkX2lvcmVtYXA6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CitmYWlsZWRfcmVxOgorCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKIGZhaWxlZF9pbml0OgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlteGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKQEAgLTYzOSw2ICs3MDUsNyBAQAogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCisJaW91bm1hcChmYmktPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIApAQCAtNjUzLDE5ICs3MjAsMTggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14ZmJfZHJpdmVyID0gewotCS5wcm9iZQkJPSBpbXhmYl9wcm9iZSwKIAkuc3VzcGVuZAk9IGlteGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpbXhmYl9yZXN1bWUsCi0JLnJlbW92ZQkJPSBpbXhmYl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChpbXhmYl9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGlteGZiX3NodXRkb3duLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJpbXgtZmIiLAorCQkubmFtZQk9IERSSVZFUl9OQU1FLAogCX0sCiB9OwogCiBpbnQgX19pbml0IGlteGZiX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlteGZiX2RyaXZlciwgaW14ZmJfcHJvYmUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW14ZmJfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5oIGIvZHJpdmVycy92aWRlby9pbXhmYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODM3YThiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2lteGZiLmgKLSAqCi0gKiAgRnJlZXNjYWxlIGkuTVggRnJhbWUgQnVmZmVyIGRldmljZSBkcml2ZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IFMuSGF1ZXIsIFBlbmd1dHJvbml4Ci0gKgotICogIENvcHlyaWdodCAoQykgMTk5OSBFcmljIEEuIFRob21hcwotICogICBCYXNlZCBvbiBhY29ybmZiLmMgQ29weXJpZ2h0IChDKSBSdXNzZWxsIEtpbmcuCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGJpdGZpZWxkcyBmb3IgZWFjaAotICogZGlzcGxheSBkZXB0aCB0aGF0IHdlIHN1cHBvcnQuCi0gKi8KLXN0cnVjdCBpbXhmYl9yZ2IgewotCXN0cnVjdCBmYl9iaXRmaWVsZAlyZWQ7Ci0Jc3RydWN0IGZiX2JpdGZpZWxkCWdyZWVuOwotCXN0cnVjdCBmYl9iaXRmaWVsZAlibHVlOwotCXN0cnVjdCBmYl9iaXRmaWVsZAl0cmFuc3A7Ci19OwotCi0jZGVmaW5lIFJHQl8xNgkoMCkKLSNkZWZpbmUgUkdCXzgJKDEpCi0jZGVmaW5lIE5SX1JHQgkyCi0KLXN0cnVjdCBpbXhmYl9pbmZvIHsKLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwotCXN0cnVjdCBpbXhmYl9yZ2IJKnJnYltOUl9SR0JdOwotCi0JdV9pbnQJCQltYXhfYnBwOwotCXVfaW50CQkJbWF4X3hyZXM7Ci0JdV9pbnQJCQltYXhfeXJlczsKLQotCS8qCi0JICogVGhlc2UgYXJlIHRoZSBhZGRyZXNzZXMgd2UgbWFwcGVkCi0JICogdGhlIGZyYW1lYnVmZmVyIG1lbW9yeSByZWdpb24gdG8uCi0JICovCi0JZG1hX2FkZHJfdAkJbWFwX2RtYTsKLQl1X2NoYXIgKgkJbWFwX2NwdTsKLQl1X2ludAkJCW1hcF9zaXplOwotCi0JdV9jaGFyICoJCXNjcmVlbl9jcHU7Ci0JZG1hX2FkZHJfdAkJc2NyZWVuX2RtYTsKLQl1X2ludAkJCXBhbGV0dGVfc2l6ZTsKLQotCWRtYV9hZGRyX3QJCWRiYXIxOwotCWRtYV9hZGRyX3QJCWRiYXIyOwotCi0JdV9pbnQJCQlwY3I7Ci0JdV9pbnQJCQlwd21yOwotCXVfaW50CQkJbHNjcjE7Ci0JdV9pbnQJCQlkbWFjcjsKLQl1X2ludAkJCWNtYXBfaW52ZXJzZToxLAotCQkJCWNtYXBfc3RhdGljOjEsCi0JCQkJdW51c2VkOjMwOwotCi0Jdm9pZCAoKmxjZF9wb3dlcikoaW50KTsKLQl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwotfTsKLQotI2RlZmluZSBJTVhfTkFNRQkiSU1YIgotCi0vKgotICogTWluaW11bSBYIGFuZCBZIHJlc29sdXRpb25zCi0gKi8KLSNkZWZpbmUgTUlOX1hSRVMJNjQKLSNkZWZpbmUgTUlOX1lSRVMJNjQKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IGNjNTljNTIuLjQ4ZmY3MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTIwLDYgKzIwLDE2IEBACiAgKgogICoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCiAgKgorICogQWRkIHN1cHBvcnQgZm9yIG92ZXJsYXkxIGFuZCBvdmVybGF5MiBiYXNlZCBvbiBweGFmYl9vdmVybGF5LmM6CisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDQsIEludGVsIENvcnBvcmF0aW9uCisgKgorICogICAgIDIwMDMvMDgvMjc6IDx5dS50YW5nQGludGVsLmNvbT4KKyAqICAgICAyMDA0LzAzLzEwOiA8c3RhbmxleS5jYWlAaW50ZWwuY29tPgorICogICAgIDIwMDQvMTAvMjg6IDx5YW4ueWluQGludGVsLmNvbT4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01MCw3ICs2MCw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9iaXRmaWVsZC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIApAQCAtNjcsMTQgKzc2LDE2IEBACiAJCQkJCSBMQ0NSMF9TRk0gfCBMQ0NSMF9MRE0gfCBMQ0NSMF9FTkIpCiAKICNkZWZpbmUgTENDUjNfSU5WQUxJRF9DT05GSUdfTUFTSwkoTENDUjNfSFNQIHwgTENDUjNfVlNQIHxcCi0JCQkJCSBMQ0NSM19QQ0QgfCBMQ0NSM19CUFApCi0KLXN0YXRpYyB2b2lkICgqcHhhZmJfYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwotc3RhdGljIHZvaWQgKCpweGFmYl9sY2RfcG93ZXIpKGludCwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICopOworCQkJCQkgTENDUjNfUENEIHwgTENDUjNfQlBQKDB4ZikpCiAKIHN0YXRpYyBpbnQgcHhhZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJCXN0cnVjdCBweGFmYl9pbmZvICopOwogc3RhdGljIHZvaWQgc2V0X2N0cmxyX3N0YXRlKHN0cnVjdCBweGFmYl9pbmZvICpmYmksIHVfaW50IHN0YXRlKTsKK3N0YXRpYyB2b2lkIHNldHVwX2Jhc2VfZnJhbWUoc3RydWN0IHB4YWZiX2luZm8gKmZiaSwgaW50IGJyYW5jaCk7CitzdGF0aWMgaW50IHNldHVwX2ZyYW1lX2RtYShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpLCBpbnQgZG1hLCBpbnQgcGFsLAorCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlkZW9fbWVtX3NpemUgPSAwOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGxjZF9yZWFkbChzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpLCB1bnNpZ25lZCBpbnQgb2ZmKQpAQCAtMTU2LDYgKzE2NywxMiBAQAogCQl2YWwgfD0gKChibHVlICA+PiA4KSAmIDB4MDAwMDAwZmMpOwogCQkoKHUzMiAqKShmYmktPnBhbGV0dGVfY3B1KSlbcmVnbm9dID0gdmFsOwogCQlicmVhazsKKwljYXNlIExDQ1I0X1BBTF9GT1JfMzoKKwkJdmFsICA9ICgocmVkICAgPDwgOCkgJiAweDAwZmYwMDAwKTsKKwkJdmFsIHw9ICgoZ3JlZW4gPj4gMCkgJiAweDAwMDBmZjAwKTsKKwkJdmFsIHw9ICgoYmx1ZSAgPj4gOCkgJiAweDAwMDAwMGZmKTsKKwkJKCh1MzIgKikoZmJpLT5wYWxldHRlX2NwdSkpW3JlZ25vXSA9IHZhbDsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTYsMzcgKzIzMywxMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogIHB4YWZiX2JwcF90b19sY2NyMygpOgotICogICAgQ29udmVydCBhIGJpdHMgcGVyIHBpeGVsIHZhbHVlIHRvIHRoZSBjb3JyZWN0IGJpdCBwYXR0ZXJuIGZvciBMQ0NSMwotICovCi1zdGF0aWMgaW50IHB4YWZiX2JwcF90b19sY2NyMyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKKy8qIGNhbGN1bGF0ZSBwaXhlbCBkZXB0aCwgdHJhbnNwYXJlbmN5IGJpdCBpbmNsdWRlZCwgPj0xNmJwcCBmb3JtYXRzIF9vbmx5XyAqLworc3RhdGljIGlubGluZSBpbnQgdmFyX3RvX2RlcHRoKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQogewotCWludCByZXQgPSAwOworCXJldHVybiB2YXItPnJlZC5sZW5ndGggKyB2YXItPmdyZWVuLmxlbmd0aCArCisJCXZhci0+Ymx1ZS5sZW5ndGggKyB2YXItPnRyYW5zcC5sZW5ndGg7Cit9CisKKy8qIGNhbGN1bGF0ZSA0LWJpdCBCUFAgdmFsdWUgZm9yIExDQ1IzIGFuZCBPVkx4QzEgKi8KK3N0YXRpYyBpbnQgcHhhZmJfdmFyX3RvX2JwcChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlpbnQgYnBwID0gLUVJTlZBTDsKKwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMTogIHJldCA9IExDQ1IzXzFCUFA7IGJyZWFrOwotCWNhc2UgMjogIHJldCA9IExDQ1IzXzJCUFA7IGJyZWFrOwotCWNhc2UgNDogIHJldCA9IExDQ1IzXzRCUFA7IGJyZWFrOwotCWNhc2UgODogIHJldCA9IExDQ1IzXzhCUFA7IGJyZWFrOwotCWNhc2UgMTY6IHJldCA9IExDQ1IzXzE2QlBQOyBicmVhazsKKwljYXNlIDE6ICBicHAgPSAwOyBicmVhazsKKwljYXNlIDI6ICBicHAgPSAxOyBicmVhazsKKwljYXNlIDQ6ICBicHAgPSAyOyBicmVhazsKKwljYXNlIDg6ICBicHAgPSAzOyBicmVhazsKKwljYXNlIDE2OiBicHAgPSA0OyBicmVhazsKIAljYXNlIDI0OgotCQlzd2l0Y2ggKHZhci0+cmVkLmxlbmd0aCArIHZhci0+Z3JlZW4ubGVuZ3RoICsKLQkJCQl2YXItPmJsdWUubGVuZ3RoICsgdmFyLT50cmFuc3AubGVuZ3RoKSB7Ci0JCWNhc2UgMTg6IHJldCA9IExDQ1IzXzE4QlBQX1AgfCBMQ0NSM19QREZPUl8zOyBicmVhazsKLQkJY2FzZSAxOTogcmV0ID0gTENDUjNfMTlCUFBfUDsgYnJlYWs7CisJCXN3aXRjaCAodmFyX3RvX2RlcHRoKHZhcikpIHsKKwkJY2FzZSAxODogYnBwID0gNjsgYnJlYWs7IC8qIDE4LWJpdHMvcGl4ZWwgcGFja2VkICovCisJCWNhc2UgMTk6IGJwcCA9IDg7IGJyZWFrOyAvKiAxOS1iaXRzL3BpeGVsIHBhY2tlZCAqLworCQljYXNlIDI0OiBicHAgPSA5OyBicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIDMyOgotCQlzd2l0Y2ggKHZhci0+cmVkLmxlbmd0aCArIHZhci0+Z3JlZW4ubGVuZ3RoICsKLQkJCQl2YXItPmJsdWUubGVuZ3RoICsgdmFyLT50cmFuc3AubGVuZ3RoKSB7Ci0JCWNhc2UgMTg6IHJldCA9IExDQ1IzXzE4QlBQIHwgTENDUjNfUERGT1JfMzsgYnJlYWs7Ci0JCWNhc2UgMTk6IHJldCA9IExDQ1IzXzE5QlBQOyBicmVhazsKLQkJY2FzZSAyNDogcmV0ID0gTENDUjNfMjRCUFAgfCBMQ0NSM19QREZPUl8zOyBicmVhazsKLQkJY2FzZSAyNTogcmV0ID0gTENDUjNfMjVCUFA7IGJyZWFrOworCQlzd2l0Y2ggKHZhcl90b19kZXB0aCh2YXIpKSB7CisJCWNhc2UgMTg6IGJwcCA9IDU7IGJyZWFrOyAvKiAxOC1iaXRzL3BpeGVsIHVucGFja2VkICovCisJCWNhc2UgMTk6IGJwcCA9IDc7IGJyZWFrOyAvKiAxOS1iaXRzL3BpeGVsIHVucGFja2VkICovCisJCWNhc2UgMjU6IGJwcCA9IDEwOyBicmVhazsKIAkJfQogCQlicmVhazsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gYnBwOworfQorCisvKgorICogIHB4YWZiX3Zhcl90b19sY2NyMygpOgorICogICAgQ29udmVydCBhIGJpdHMgcGVyIHBpeGVsIHZhbHVlIHRvIHRoZSBjb3JyZWN0IGJpdCBwYXR0ZXJuIGZvciBMQ0NSMworICoKKyAqICBOT1RFOiBmb3IgUFhBMjd4IHdpdGggb3ZlcmxheXMgc3VwcG9ydCwgdGhlIExDQ1IzX1BERk9SX3ggYml0cyBoYXZlIGFuCisgKiAgaW1wbGljYXRpb24gb2YgdGhlIGFjdXRhbCB1c2Ugb2YgdHJhbnNwYXJlbmN5IGJpdCwgIHdoaWNoIHdlIGhhbmRsZSBpdAorICogIGhlcmUgc2VwYXJhdGVkbHkuIFNlZSBQWEEyN3ggRGV2ZWxvcGVyJ3MgTWFudWFsLCBTZWN0aW9uIDw8Ny40LjYgUGl4ZWwKKyAqICBGb3JtYXRzPj4gZm9yIHRoZSB2YWxpZCBjb21iaW5hdGlvbiBvZiBQREZPUiwgUEFMX0ZPUiBmb3IgdmFyaW91cyBCUFAuCisgKgorICogIFRyYW5zcGFyZW5jeSBmb3IgcGFsZXR0ZSBwaXhlbCBmb3JtYXRzIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KKyAqLworc3RhdGljIHVpbnQzMl90IHB4YWZiX3Zhcl90b19sY2NyMyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlpbnQgYnBwID0gcHhhZmJfdmFyX3RvX2JwcCh2YXIpOworCXVpbnQzMl90IGxjY3IzOworCisJaWYgKGJwcCA8IDApCisJCXJldHVybiAwOworCisJbGNjcjMgPSBMQ0NSM19CUFAoYnBwKTsKKworCXN3aXRjaCAodmFyX3RvX2RlcHRoKHZhcikpIHsKKwljYXNlIDE2OiBsY2NyMyB8PSB2YXItPnRyYW5zcC5sZW5ndGggPyBMQ0NSM19QREZPUl8zIDogMDsgYnJlYWs7CisJY2FzZSAxODogbGNjcjMgfD0gTENDUjNfUERGT1JfMzsgYnJlYWs7CisJY2FzZSAyNDogbGNjcjMgfD0gdmFyLT50cmFuc3AubGVuZ3RoID8gTENDUjNfUERGT1JfMiA6IExDQ1IzX1BERk9SXzM7CisJCSBicmVhazsKKwljYXNlIDE5OgorCWNhc2UgMjU6IGxjY3IzIHw9IExDQ1IzX1BERk9SXzA7IGJyZWFrOworCX0KKwlyZXR1cm4gbGNjcjM7Cit9CisKKyNkZWZpbmUgU0VUX1BJWEZNVCh2LCByLCBnLCBiLCB0KQkJCQlcCisoewkJCQkJCQkJXAorCSh2KS0+dHJhbnNwLm9mZnNldCA9ICh0KSA/IChyKSArIChnKSArIChiKSA6IDA7CQlcCisJKHYpLT50cmFuc3AubGVuZ3RoID0gKHQpID8gKHQpIDogMDsJCQlcCisJKHYpLT5ibHVlLmxlbmd0aCAgID0gKGIpOyAodiktPmJsdWUub2Zmc2V0ID0gMDsJCVwKKwkodiktPmdyZWVuLmxlbmd0aCAgPSAoZyk7ICh2KS0+Z3JlZW4ub2Zmc2V0ID0gKGIpOwlcCisJKHYpLT5yZWQubGVuZ3RoICAgID0gKHIpOyAodiktPnJlZC5vZmZzZXQgPSAoYikgKyAoZyk7CVwKK30pCisKKy8qIHNldCB0aGUgUkdCVCBiaXRmaWVsZHMgb2YgZmJfdmFyX3NjcmVlbmluZiBhY2NvcmRpbmcgdG8KKyAqIHZhci0+Yml0c19wZXJfcGl4ZWwgYW5kIGdpdmVuIGRlcHRoCisgKi8KK3N0YXRpYyB2b2lkIHB4YWZiX3NldF9waXhmbXQoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCBkZXB0aCkKK3sKKwlpZiAoZGVwdGggPT0gMCkKKwkJZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOworCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPCAxNikgeworCQkvKiBpbmRleGVkIHBpeGVsIGZvcm1hdHMgKi8KKwkJdmFyLT5yZWQub2Zmc2V0ICAgID0gMDsgdmFyLT5yZWQubGVuZ3RoICAgID0gODsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgID0gMDsgdmFyLT5ncmVlbi5sZW5ndGggID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCAgID0gMDsgdmFyLT5ibHVlLmxlbmd0aCAgID0gODsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsgdmFyLT50cmFuc3AubGVuZ3RoID0gODsKKwl9CisKKwlzd2l0Y2ggKGRlcHRoKSB7CisJY2FzZSAxNjogdmFyLT50cmFuc3AubGVuZ3RoID8KKwkJIFNFVF9QSVhGTVQodmFyLCA1LCA1LCA1LCAxKSA6CQkvKiBSR0JUNTU1ICovCisJCSBTRVRfUElYRk1UKHZhciwgNSwgNiwgNSwgMCk7IGJyZWFrOwkvKiBSR0I1NjUgKi8KKwljYXNlIDE4OiBTRVRfUElYRk1UKHZhciwgNiwgNiwgNiwgMCk7IGJyZWFrOwkvKiBSR0I2NjYgKi8KKwljYXNlIDE5OiBTRVRfUElYRk1UKHZhciwgNiwgNiwgNiwgMSk7IGJyZWFrOwkvKiBSR0JUNjY2ICovCisJY2FzZSAyNDogdmFyLT50cmFuc3AubGVuZ3RoID8KKwkJIFNFVF9QSVhGTVQodmFyLCA4LCA4LCA3LCAxKSA6CQkvKiBSR0JUODg3ICovCisJCSBTRVRfUElYRk1UKHZhciwgOCwgOCwgOCwgMCk7IGJyZWFrOwkvKiBSR0I4ODggKi8KKwljYXNlIDI1OiBTRVRfUElYRk1UKHZhciwgOCwgOCwgOCwgMSk7IGJyZWFrOwkvKiBSR0JUODg4ICovCisJfQogfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCkBAIC0zMDgsOCArMzk4LDQ5IEBACiAJdmFyLT5sb3dlcl9tYXJnaW4JPSBtb2RlLT5sb3dlcl9tYXJnaW47CiAJdmFyLT5zeW5jCQk9IG1vZGUtPnN5bmM7CiAJdmFyLT5ncmF5c2NhbGUJCT0gbW9kZS0+Y21hcF9ncmV5c2NhbGU7Ci0JdmFyLT54cmVzX3ZpcnR1YWwgCT0gdmFyLT54cmVzOwotCXZhci0+eXJlc192aXJ0dWFsCT0gdmFyLT55cmVzOworCisJLyogc2V0IHRoZSBpbml0aWFsIFJHQkEgYml0ZmllbGRzICovCisJcHhhZmJfc2V0X3BpeGZtdCh2YXIsIG1vZGUtPmRlcHRoKTsKK30KKworc3RhdGljIGludCBweGFmYl9hZGp1c3RfdGltaW5nKHN0cnVjdCBweGFmYl9pbmZvICpmYmksCisJCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJaW50IGxpbmVfbGVuZ3RoOworCisJdmFyLT54cmVzID0gbWF4X3QoaW50LCB2YXItPnhyZXMsIE1JTl9YUkVTKTsKKwl2YXItPnlyZXMgPSBtYXhfdChpbnQsIHZhci0+eXJlcywgTUlOX1lSRVMpOworCisJaWYgKCEoZmJpLT5sY2NyMCAmIExDQ1IwX0xDRFQpKSB7CisJCWNsYW1wX3ZhbCh2YXItPmhzeW5jX2xlbiwgMSwgNjQpOworCQljbGFtcF92YWwodmFyLT52c3luY19sZW4sIDEsIDY0KTsKKwkJY2xhbXBfdmFsKHZhci0+bGVmdF9tYXJnaW4sICAxLCAyNTUpOworCQljbGFtcF92YWwodmFyLT5yaWdodF9tYXJnaW4sIDEsIDI1NSk7CisJCWNsYW1wX3ZhbCh2YXItPnVwcGVyX21hcmdpbiwgMSwgMjU1KTsKKwkJY2xhbXBfdmFsKHZhci0+bG93ZXJfbWFyZ2luLCAxLCAyNTUpOworCX0KKworCS8qIG1ha2Ugc3VyZSBlYWNoIGxpbmUgaXMgYWxpZ25lZCBvbiB3b3JkIGJvdW5kYXJ5ICovCisJbGluZV9sZW5ndGggPSB2YXItPnhyZXMgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlsaW5lX2xlbmd0aCA9IEFMSUdOKGxpbmVfbGVuZ3RoLCA0KTsKKwl2YXItPnhyZXMgPSBsaW5lX2xlbmd0aCAqIDggLyB2YXItPmJpdHNfcGVyX3BpeGVsOworCisJLyogd2UgZG9uJ3Qgc3VwcG9ydCB4cGFuLCBmb3JjZSB4cmVzX3ZpcnR1YWwgdG8gYmUgZXF1YWwgdG8geHJlcyAqLworCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOworCisJaWYgKHZhci0+YWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSBmYmktPmZiLmZpeC5zbWVtX2xlbiAvIGxpbmVfbGVuZ3RoOworCWVsc2UKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT55cmVzX3ZpcnR1YWwsIHZhci0+eXJlcyk7CisKKwkvKiBjaGVjayBmb3IgbGltaXRzICovCisJaWYgKHZhci0+eHJlcyA+IE1BWF9YUkVTIHx8IHZhci0+eXJlcyA+IE1BWF9ZUkVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTMyNSwxMSArNDU2LDcgQEAKIHsKIAlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gKHN0cnVjdCBweGFmYl9pbmZvICopaW5mbzsKIAlzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmYgPSBmYmktPmRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICh2YXItPnhyZXMgPCBNSU5fWFJFUykKLQkJdmFyLT54cmVzID0gTUlOX1hSRVM7Ci0JaWYgKHZhci0+eXJlcyA8IE1JTl9ZUkVTKQotCQl2YXItPnlyZXMgPSBNSU5fWVJFUzsKKwlpbnQgZXJyOwogCiAJaWYgKGluZi0+Zml4ZWRfbW9kZXMpIHsKIAkJc3RydWN0IHB4YWZiX21vZGVfaW5mbyAqbW9kZTsKQEAgLTMzOCw3NCArNDY1LDE4IEBACiAJCWlmICghbW9kZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlweGFmYl9zZXRtb2RlKHZhciwgbW9kZSk7Ci0JfSBlbHNlIHsKLQkJaWYgKHZhci0+eHJlcyA+IGluZi0+bW9kZXMtPnhyZXMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHZhci0+eXJlcyA+IGluZi0+bW9kZXMtPnlyZXMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPiBpbmYtPm1vZGVzLT5icHApCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2YXItPnhyZXNfdmlydHVhbCA9Ci0JCW1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKLQl2YXItPnlyZXNfdmlydHVhbCA9Ci0JCW1heCh2YXItPnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKKwkvKiBkbyBhIHRlc3QgY29udmVyc2lvbiB0byBCUFAgZmllbGRzIHRvIGNoZWNrIHRoZSBjb2xvciBmb3JtYXRzICovCisJZXJyID0gcHhhZmJfdmFyX3RvX2JwcCh2YXIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCi0JLyoKLQkgKiBTZXR1cCB0aGUgUkdCIHBhcmFtZXRlcnMgZm9yIHRoaXMgZGlzcGxheS4KLQkgKgotCSAqIFRoZSBwaXhlbCBwYWNraW5nIGZvcm1hdCBpcyBkZXNjcmliZWQgb24gcGFnZSA3LTExIG9mIHRoZQotCSAqIFBYQTJYWCBEZXZlbG9wZXIncyBNYW51YWwuCi0JICovCi0JaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKLQkJdmFyLT5yZWQub2Zmc2V0ICAgPSAxMTsgdmFyLT5yZWQubGVuZ3RoICAgPSA1OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7ICB2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgID0gMDsgIHZhci0+Ymx1ZS5sZW5ndGggID0gNTsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQl9IGVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPiAxNikgewotCQlzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvICptb2RlOworCXB4YWZiX3NldF9waXhmbXQodmFyLCB2YXJfdG9fZGVwdGgodmFyKSk7CiAKLQkJbW9kZSA9IHB4YWZiX2dldG1vZGUoaW5mLCB2YXIpOwotCQlpZiAoIW1vZGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzd2l0Y2ggKG1vZGUtPmRlcHRoKSB7Ci0JCWNhc2UgMTg6IC8qIFJHQjY2NiAqLwotCQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gdmFyLT50cmFuc3AubGVuZ3RoICAgICA9IDA7Ci0JCQl2YXItPnJlZC5vZmZzZXQJICAgPSAxMjsgdmFyLT5yZWQubGVuZ3RoICAgID0gNjsKLQkJCXZhci0+Z3JlZW4ub2Zmc2V0ICA9IDY7ICB2YXItPmdyZWVuLmxlbmd0aCAgPSA2OwotCQkJdmFyLT5ibHVlLm9mZnNldCAgID0gMDsgIHZhci0+Ymx1ZS5sZW5ndGggICA9IDY7Ci0JCQlicmVhazsKLQkJY2FzZSAxOTogLyogUkdCVDY2NiAqLwotCQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMTg7IHZhci0+dHJhbnNwLmxlbmd0aCA9IDE7Ci0JCQl2YXItPnJlZC5vZmZzZXQJICAgPSAxMjsgdmFyLT5yZWQubGVuZ3RoICAgID0gNjsKLQkJCXZhci0+Z3JlZW4ub2Zmc2V0ICA9IDY7ICB2YXItPmdyZWVuLmxlbmd0aCAgPSA2OwotCQkJdmFyLT5ibHVlLm9mZnNldCAgID0gMDsgIHZhci0+Ymx1ZS5sZW5ndGggICA9IDY7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDogLyogUkdCODg4ICovCi0JCQl2YXItPnRyYW5zcC5vZmZzZXQgPSB2YXItPnRyYW5zcC5sZW5ndGggICAgID0gMDsKLQkJCXZhci0+cmVkLm9mZnNldAkgICA9IDE2OyB2YXItPnJlZC5sZW5ndGggICAgPSA4OwotCQkJdmFyLT5ncmVlbi5vZmZzZXQgID0gODsgIHZhci0+Z3JlZW4ubGVuZ3RoICA9IDg7Ci0JCQl2YXItPmJsdWUub2Zmc2V0ICAgPSAwOyAgdmFyLT5ibHVlLmxlbmd0aCAgID0gODsKLQkJCWJyZWFrOwotCQljYXNlIDI1OiAvKiBSR0JUODg4ICovCi0JCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsgdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKLQkJCXZhci0+cmVkLm9mZnNldAkgICA9IDE2OyB2YXItPnJlZC5sZW5ndGggICAgPSA4OwotCQkJdmFyLT5ncmVlbi5vZmZzZXQgID0gODsgIHZhci0+Z3JlZW4ubGVuZ3RoICA9IDg7Ci0JCQl2YXItPmJsdWUub2Zmc2V0ICAgPSAwOyAgdmFyLT5ibHVlLmxlbmd0aCAgID0gODsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQl2YXItPnJlZC5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSB2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggICA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCAgPSA4OwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCX0KKwllcnIgPSBweGFmYl9hZGp1c3RfdGltaW5nKGZiaSwgdmFyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAJcHJfZGVidWcoInB4YWZiOiBkbWEgcGVyaW9kID0gJWQgcHNcbiIsCkBAIC00MTUsMTEgKzQ4Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBweGFmYl9zZXRfdHJ1ZWNvbG9yKHVfaW50IGlzX3RydWVfY29sb3IpCi17Ci0JLyogZG8geW91ciBtYWNoaW5lLXNwZWNpZmljIHNldHVwIGlmIG5lZWRlZCAqLwotfQotCiAvKgogICogcHhhZmJfc2V0X3BhcigpOgogICoJU2V0IHRoZSB1c2VyIGRlZmluZWQgcGFydCBvZiB0aGUgZGlzcGxheSBmb3IgdGhlIHNwZWNpZmllZCBjb25zb2xlCkBAIC00NTIsMTEgKzUxOCw2IEBACiAKIAlmYmktPnBhbGV0dGVfY3B1ID0gKHUxNiAqKSZmYmktPmRtYV9idWZmLT5wYWxldHRlWzBdOwogCi0JLyoKLQkgKiBTZXQgKGFueSkgYm9hcmQgY29udHJvbCByZWdpc3RlciB0byBoYW5kbGUgbmV3IGNvbG9yIGRlcHRoCi0JICovCi0JcHhhZmJfc2V0X3RydWVjb2xvcihmYmktPmZiLmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUik7Ci0KIAlpZiAoZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPj0gMTYpCiAJCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5mYi5jbWFwKTsKIAllbHNlCkBAIC00NjcsNiArNTI4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcHhhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSAoc3RydWN0IHB4YWZiX2luZm8gKilpbmZvOworCWludCBkbWEgPSBETUFfTUFYICsgRE1BX0JBU0U7CisKKwlpZiAoZmJpLT5zdGF0ZSAhPSBDX0VOQUJMRSkKKwkJcmV0dXJuIDA7CisKKwlzZXR1cF9iYXNlX2ZyYW1lKGZiaSwgMSk7CisKKwlpZiAoZmJpLT5sY2NyMCAmIExDQ1IwX1NEUykKKwkJbGNkX3dyaXRlbChmYmksIEZCUjEsIGZiaS0+ZmRhZHJbZG1hICsgMV0gfCAweDEpOworCisJbGNkX3dyaXRlbChmYmksIEZCUjAsIGZiaS0+ZmRhZHJbZG1hXSB8IDB4MSk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBweGFmYl9ibGFuaygpOgogICoJQmxhbmsgdGhlIGRpc3BsYXkgYnkgc2V0dGluZyBhbGwgcGFsZXR0ZSB2YWx1ZXMgdG8gemVyby4gIE5vdGUsIHRoZQpAQCAtNTAyLDMyICs1ODEsMzQyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IChzdHJ1Y3QgcHhhZmJfaW5mbyAqKWluZm87Ci0JdW5zaWduZWQgbG9uZyBvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlpZiAob2ZmIDwgaW5mby0+Zml4LnNtZW1fbGVuKSB7Ci0JCXZtYS0+dm1fcGdvZmYgKz0gZmJpLT52aWRlb19vZmZzZXQgLyBQQUdFX1NJWkU7Ci0JCXJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUoZmJpLT5kZXYsIHZtYSwgZmJpLT5tYXBfY3B1LAotCQkJCQkgICAgIGZiaS0+bWFwX2RtYSwgZmJpLT5tYXBfc2l6ZSk7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyBweGFmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5mYl9jaGVja192YXIJPSBweGFmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSBweGFmYl9zZXRfcGFyLAorCS5mYl9wYW5fZGlzcGxheQk9IHB4YWZiX3Bhbl9kaXNwbGF5LAogCS5mYl9zZXRjb2xyZWcJPSBweGFmYl9zZXRjb2xyZWcsCiAJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfYmxhbmsJPSBweGFmYl9ibGFuaywKLQkuZmJfbW1hcAk9IHB4YWZiX21tYXAsCiB9OwogCisjaWZkZWYgQ09ORklHX0ZCX1BYQV9PVkVSTEFZCitzdGF0aWMgdm9pZCBvdmVybGF5MWZiX3NldHVwKHN0cnVjdCBweGFmYl9sYXllciAqb2ZiKQoreworCWludCBzaXplID0gb2ZiLT5mYi5maXgubGluZV9sZW5ndGggKiBvZmItPmZiLnZhci55cmVzX3ZpcnR1YWw7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IG9mYi0+dmlkZW9fbWVtX3BoeXM7CisJc2V0dXBfZnJhbWVfZG1hKG9mYi0+ZmJpLCBETUFfT1YxLCBQQUxfTk9ORSwgc3RhcnQsIHNpemUpOworfQorCisvKiBEZXBlbmRpbmcgb24gdGhlIGVuYWJsZSBzdGF0dXMgb2Ygb3ZlcmxheTEvMiwgdGhlIERNQSBzaG91bGQgYmUKKyAqIHVwZGF0ZWQgZnJvbSBGREFEUnggKHdoZW4gZGlzYWJsZWQpIG9yIEZCUnggKHdoZW4gZW5hYmxlZCkuCisgKi8KK3N0YXRpYyB2b2lkIG92ZXJsYXkxZmJfZW5hYmxlKHN0cnVjdCBweGFmYl9sYXllciAqb2ZiKQoreworCWludCBlbmFibGVkID0gbGNkX3JlYWRsKG9mYi0+ZmJpLCBPVkwxQzEpICYgT1ZMeEMxX09FTjsKKwl1aW50MzJfdCBmZGFkcjEgPSBvZmItPmZiaS0+ZmRhZHJbRE1BX09WMV0gfCAoZW5hYmxlZCA/IDB4MSA6IDApOworCisJbGNkX3dyaXRlbChvZmItPmZiaSwgZW5hYmxlZCA/IEZCUjEgOiBGREFEUjEsIGZkYWRyMSk7CisJbGNkX3dyaXRlbChvZmItPmZiaSwgT1ZMMUMyLCBvZmItPmNvbnRyb2xbMV0pOworCWxjZF93cml0ZWwob2ZiLT5mYmksIE9WTDFDMSwgb2ZiLT5jb250cm9sWzBdIHwgT1ZMeEMxX09FTik7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJsYXkxZmJfZGlzYWJsZShzdHJ1Y3QgcHhhZmJfbGF5ZXIgKm9mYikKK3sKKwl1aW50MzJfdCBsY2NyNSA9IGxjZF9yZWFkbChvZmItPmZiaSwgTENDUjUpOworCisJbGNkX3dyaXRlbChvZmItPmZiaSwgT1ZMMUMxLCBvZmItPmNvbnRyb2xbMF0gJiB+T1ZMeEMxX09FTik7CisKKwlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBMQ1NSMSwgTENTUjFfQlMoMSkpOworCWxjZF93cml0ZWwob2ZiLT5mYmksIExDQ1I1LCBsY2NyNSAmIH5MQ1NSMV9CUygxKSk7CisJbGNkX3dyaXRlbChvZmItPmZiaSwgRkJSMSwgb2ZiLT5mYmktPmZkYWRyW0RNQV9PVjFdIHwgMHgzKTsKKworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm9mYi0+YnJhbmNoX2RvbmUsIDEgKiBIWikgPT0gMCkKKwkJcHJfd2FybmluZygiJXM6IHRpbWVvdXQgZGlzYWJsaW5nIG92ZXJsYXkxXG4iLCBfX2Z1bmNfXyk7CisKKwlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBMQ0NSNSwgbGNjcjUpOworfQorCitzdGF0aWMgdm9pZCBvdmVybGF5MmZiX3NldHVwKHN0cnVjdCBweGFmYl9sYXllciAqb2ZiKQoreworCWludCBzaXplLCBkaXYgPSAxLCBwZm9yID0gTk9OU1REX1RPX1BGT1Iob2ZiLT5mYi52YXIubm9uc3RkKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0WzNdID0geyBvZmItPnZpZGVvX21lbV9waHlzLCAwLCAwIH07CisKKwlpZiAocGZvciA9PSBPVkVSTEFZX0ZPUk1BVF9SR0IgfHwgcGZvciA9PSBPVkVSTEFZX0ZPUk1BVF9ZVVY0NDRfUEFDS0VEKSB7CisJCXNpemUgPSBvZmItPmZiLmZpeC5saW5lX2xlbmd0aCAqIG9mYi0+ZmIudmFyLnlyZXNfdmlydHVhbDsKKwkJc2V0dXBfZnJhbWVfZG1hKG9mYi0+ZmJpLCBETUFfT1YyX1ksIC0xLCBzdGFydFswXSwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJc2l6ZSA9IG9mYi0+ZmIudmFyLnhyZXNfdmlydHVhbCAqIG9mYi0+ZmIudmFyLnlyZXNfdmlydHVhbDsKKwkJc3dpdGNoIChwZm9yKSB7CisJCWNhc2UgT1ZFUkxBWV9GT1JNQVRfWVVWNDQ0X1BMQU5BUjogZGl2ID0gMTsgYnJlYWs7CisJCWNhc2UgT1ZFUkxBWV9GT1JNQVRfWVVWNDIyX1BMQU5BUjogZGl2ID0gMjsgYnJlYWs7CisJCWNhc2UgT1ZFUkxBWV9GT1JNQVRfWVVWNDIwX1BMQU5BUjogZGl2ID0gNDsgYnJlYWs7CisJCX0KKwkJc3RhcnRbMV0gPSBzdGFydFswXSArIHNpemU7CisJCXN0YXJ0WzJdID0gc3RhcnRbMV0gKyBzaXplIC8gZGl2OworCQlzZXR1cF9mcmFtZV9kbWEob2ZiLT5mYmksIERNQV9PVjJfWSwgIC0xLCBzdGFydFswXSwgc2l6ZSk7CisJCXNldHVwX2ZyYW1lX2RtYShvZmItPmZiaSwgRE1BX09WMl9DYiwgLTEsIHN0YXJ0WzFdLCBzaXplIC8gZGl2KTsKKwkJc2V0dXBfZnJhbWVfZG1hKG9mYi0+ZmJpLCBETUFfT1YyX0NyLCAtMSwgc3RhcnRbMl0sIHNpemUgLyBkaXYpOworCX0KK30KKworc3RhdGljIHZvaWQgb3ZlcmxheTJmYl9lbmFibGUoc3RydWN0IHB4YWZiX2xheWVyICpvZmIpCit7CisJaW50IHBmb3IgPSBOT05TVERfVE9fUEZPUihvZmItPmZiLnZhci5ub25zdGQpOworCWludCBlbmFibGVkID0gbGNkX3JlYWRsKG9mYi0+ZmJpLCBPVkwyQzEpICYgT1ZMeEMxX09FTjsKKwl1aW50MzJfdCBmZGFkcjIgPSBvZmItPmZiaS0+ZmRhZHJbRE1BX09WMl9ZXSAgfCAoZW5hYmxlZCA/IDB4MSA6IDApOworCXVpbnQzMl90IGZkYWRyMyA9IG9mYi0+ZmJpLT5mZGFkcltETUFfT1YyX0NiXSB8IChlbmFibGVkID8gMHgxIDogMCk7CisJdWludDMyX3QgZmRhZHI0ID0gb2ZiLT5mYmktPmZkYWRyW0RNQV9PVjJfQ3JdIHwgKGVuYWJsZWQgPyAweDEgOiAwKTsKKworCWlmIChwZm9yID09IE9WRVJMQVlfRk9STUFUX1JHQiB8fCBwZm9yID09IE9WRVJMQVlfRk9STUFUX1lVVjQ0NF9QQUNLRUQpCisJCWxjZF93cml0ZWwob2ZiLT5mYmksIGVuYWJsZWQgPyBGQlIyIDogRkRBRFIyLCBmZGFkcjIpOworCWVsc2UgeworCQlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBlbmFibGVkID8gRkJSMiA6IEZEQURSMiwgZmRhZHIyKTsKKwkJbGNkX3dyaXRlbChvZmItPmZiaSwgZW5hYmxlZCA/IEZCUjMgOiBGREFEUjMsIGZkYWRyMyk7CisJCWxjZF93cml0ZWwob2ZiLT5mYmksIGVuYWJsZWQgPyBGQlI0IDogRkRBRFI0LCBmZGFkcjQpOworCX0KKwlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBPVkwyQzIsIG9mYi0+Y29udHJvbFsxXSk7CisJbGNkX3dyaXRlbChvZmItPmZiaSwgT1ZMMkMxLCBvZmItPmNvbnRyb2xbMF0gfCBPVkx4QzFfT0VOKTsKK30KKworc3RhdGljIHZvaWQgb3ZlcmxheTJmYl9kaXNhYmxlKHN0cnVjdCBweGFmYl9sYXllciAqb2ZiKQoreworCXVpbnQzMl90IGxjY3I1ID0gbGNkX3JlYWRsKG9mYi0+ZmJpLCBMQ0NSNSk7CisKKwlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBPVkwyQzEsIG9mYi0+Y29udHJvbFswXSAmIH5PVkx4QzFfT0VOKTsKKworCWxjZF93cml0ZWwob2ZiLT5mYmksIExDU1IxLCBMQ1NSMV9CUygyKSk7CisJbGNkX3dyaXRlbChvZmItPmZiaSwgTENDUjUsIGxjY3I1ICYgfkxDU1IxX0JTKDIpKTsKKwlsY2Rfd3JpdGVsKG9mYi0+ZmJpLCBGQlIyLCBvZmItPmZiaS0+ZmRhZHJbRE1BX09WMl9ZXSAgfCAweDMpOworCWxjZF93cml0ZWwob2ZiLT5mYmksIEZCUjMsIG9mYi0+ZmJpLT5mZGFkcltETUFfT1YyX0NiXSB8IDB4Myk7CisJbGNkX3dyaXRlbChvZmItPmZiaSwgRkJSNCwgb2ZiLT5mYmktPmZkYWRyW0RNQV9PVjJfQ3JdIHwgMHgzKTsKKworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm9mYi0+YnJhbmNoX2RvbmUsIDEgKiBIWikgPT0gMCkKKwkJcHJfd2FybmluZygiJXM6IHRpbWVvdXQgZGlzYWJsaW5nIG92ZXJsYXkyXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbGF5ZXJfb3BzIG9mYl9vcHNbXSA9IHsKKwlbMF0gPSB7CisJCS5lbmFibGUJCT0gb3ZlcmxheTFmYl9lbmFibGUsCisJCS5kaXNhYmxlCT0gb3ZlcmxheTFmYl9kaXNhYmxlLAorCQkuc2V0dXAJCT0gb3ZlcmxheTFmYl9zZXR1cCwKKwl9LAorCVsxXSA9IHsKKwkJLmVuYWJsZQkJPSBvdmVybGF5MmZiX2VuYWJsZSwKKwkJLmRpc2FibGUJPSBvdmVybGF5MmZiX2Rpc2FibGUsCisJCS5zZXR1cAkJPSBvdmVybGF5MmZiX3NldHVwLAorCX0sCit9OworCitzdGF0aWMgaW50IG92ZXJsYXlmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgcHhhZmJfbGF5ZXIgKm9mYiA9IChzdHJ1Y3QgcHhhZmJfbGF5ZXIgKilpbmZvOworCisJLyogbm8gc3VwcG9ydCBmb3IgZnJhbWVidWZmZXIgY29uc29sZSBvbiBvdmVybGF5ICovCisJaWYgKHVzZXIgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBhbGxvdyBvbmx5IG9uZSB1c2VyIGF0IGEgdGltZSAqLworCWlmIChhdG9taWNfaW5jX2FuZF90ZXN0KCZvZmItPnVzYWdlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHVuYmxhbmsgdGhlIGJhc2UgZnJhbWVidWZmZXIgKi8KKwlmYl9ibGFuaygmb2ZiLT5mYmktPmZiLCBGQl9CTEFOS19VTkJMQU5LKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdmVybGF5ZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IHB4YWZiX2xheWVyICpvZmIgPSAoc3RydWN0IHB4YWZiX2xheWVyKikgaW5mbzsKKworCWF0b21pY19kZWMoJm9mYi0+dXNhZ2UpOworCW9mYi0+b3BzLT5kaXNhYmxlKG9mYik7CisKKwlmcmVlX3BhZ2VzX2V4YWN0KG9mYi0+dmlkZW9fbWVtLCBvZmItPnZpZGVvX21lbV9zaXplKTsKKwlvZmItPnZpZGVvX21lbSA9IE5VTEw7CisJb2ZiLT52aWRlb19tZW1fc2l6ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3ZlcmxheWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcHhhZmJfbGF5ZXIgKm9mYiA9IChzdHJ1Y3QgcHhhZmJfbGF5ZXIgKilpbmZvOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqYmFzZV92YXIgPSAmb2ZiLT5mYmktPmZiLnZhcjsKKwlpbnQgeHBvcywgeXBvcywgcGZvciwgYnBwOworCisJeHBvcyA9IE5PTlNURF9UT19YUE9TKHZhci0+bm9uc3RkKTsKKwl5cG9zID0gTk9OU1REX1RPX1hQT1ModmFyLT5ub25zdGQpOworCXBmb3IgPSBOT05TVERfVE9fUEZPUih2YXItPm5vbnN0ZCk7CisKKwlicHAgPSBweGFmYl92YXJfdG9fYnBwKHZhcik7CisJaWYgKGJwcCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbm8gc3VwcG9ydCBmb3IgWVVWIGZvcm1hdCBvbiBvdmVybGF5MSAqLworCWlmIChvZmItPmlkID09IE9WRVJMQVkxICYmIHBmb3IgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmb3IgWVVWIHBhY2tlZCBmb3JtYXRzLCBicHAgPSAnbWluaW11bSBicHAgb2YgWVVWIGNvbXBvbmVudHMnICovCisJc3dpdGNoIChwZm9yKSB7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9SR0I6CisJCWJwcCA9IHB4YWZiX3Zhcl90b19icHAodmFyKTsKKwkJaWYgKGJwcCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlweGFmYl9zZXRfcGl4Zm10KHZhciwgdmFyX3RvX2RlcHRoKHZhcikpOworCQlicmVhazsKKwljYXNlIE9WRVJMQVlfRk9STUFUX1lVVjQ0NF9QQUNLRUQ6IGJwcCA9IDI0OyBicmVhazsKKwljYXNlIE9WRVJMQVlfRk9STUFUX1lVVjQ0NF9QTEFOQVI6IGJwcCA9IDg7IGJyZWFrOworCWNhc2UgT1ZFUkxBWV9GT1JNQVRfWVVWNDIyX1BMQU5BUjogYnBwID0gNDsgYnJlYWs7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9ZVVY0MjBfUExBTkFSOiBicHAgPSAyOyBicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBlYWNoIGxpbmUgbXVzdCBzdGFydCBhdCBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5ICovCisJaWYgKCh4cG9zICogYnBwKSAlIDMyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHhyZXMgbXVzdCBhbGlnbiBvbiAzMi1iaXQgd29yZCBib3VuZGFyeSAqLworCXZhci0+eHJlcyA9IHJvdW5kdXAodmFyLT54cmVzICogYnBwLCAzMikgLyBicHA7CisKKwlpZiAoKHhwb3MgKyB2YXItPnhyZXMgPiBiYXNlX3Zhci0+eHJlcykgfHwKKwkgICAgKHlwb3MgKyB2YXItPnlyZXMgPiBiYXNlX3Zhci0+eXJlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSBtYXgodmFyLT55cmVzLCB2YXItPnlyZXNfdmlydHVhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3ZlcmxheWZiX21hcF92aWRlb19tZW1vcnkoc3RydWN0IHB4YWZiX2xheWVyICpvZmIpCit7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmb2ZiLT5mYi52YXI7CisJaW50IHBmb3IgPSBOT05TVERfVE9fUEZPUih2YXItPm5vbnN0ZCk7CisJaW50IHNpemUsIGJwcCA9IDA7CisKKwlzd2l0Y2ggKHBmb3IpIHsKKwljYXNlIE9WRVJMQVlfRk9STUFUX1JHQjogYnBwID0gdmFyLT5iaXRzX3Blcl9waXhlbDsgYnJlYWs7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9ZVVY0NDRfUEFDS0VEOiBicHAgPSAyNDsgYnJlYWs7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9ZVVY0NDRfUExBTkFSOiBicHAgPSAyNDsgYnJlYWs7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9ZVVY0MjJfUExBTkFSOiBicHAgPSAxNjsgYnJlYWs7CisJY2FzZSBPVkVSTEFZX0ZPUk1BVF9ZVVY0MjBfUExBTkFSOiBicHAgPSAxMjsgYnJlYWs7CisJfQorCisJb2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIGJwcCAvIDg7CisKKwlzaXplID0gUEFHRV9BTElHTihvZmItPmZiLmZpeC5saW5lX2xlbmd0aCAqIHZhci0+eXJlc192aXJ0dWFsKTsKKworCS8qIGRvbid0IHJlLWFsbG9jYXRlIGlmIHRoZSBvcmlnaW5hbCB2aWRlbyBtZW1vcnkgaXMgZW5vdWdoICovCisJaWYgKG9mYi0+dmlkZW9fbWVtKSB7CisJCWlmIChvZmItPnZpZGVvX21lbV9zaXplID49IHNpemUpCisJCQlyZXR1cm4gMDsKKworCQlmcmVlX3BhZ2VzX2V4YWN0KG9mYi0+dmlkZW9fbWVtLCBvZmItPnZpZGVvX21lbV9zaXplKTsKKwl9CisKKwlvZmItPnZpZGVvX21lbSA9IGFsbG9jX3BhZ2VzX2V4YWN0KHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlpZiAob2ZiLT52aWRlb19tZW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvZmItPnZpZGVvX21lbV9waHlzID0gdmlydF90b19waHlzKG9mYi0+dmlkZW9fbWVtKTsKKwlvZmItPnZpZGVvX21lbV9zaXplID0gc2l6ZTsKKworCW9mYi0+ZmIuZml4LnNtZW1fc3RhcnQJPSBvZmItPnZpZGVvX21lbV9waHlzOworCW9mYi0+ZmIuZml4LnNtZW1fbGVuCT0gb2ZiLT5mYi5maXgubGluZV9sZW5ndGggKiB2YXItPnlyZXNfdmlydHVhbDsKKwlvZmItPmZiLnNjcmVlbl9iYXNlCT0gb2ZiLT52aWRlb19tZW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3ZlcmxheWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHB4YWZiX2xheWVyICpvZmIgPSAoc3RydWN0IHB4YWZiX2xheWVyICopaW5mbzsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CisJaW50IHhwb3MsIHlwb3MsIHBmb3IsIGJwcCwgcmV0OworCisJcmV0ID0gb3ZlcmxheWZiX21hcF92aWRlb19tZW1vcnkob2ZiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnBwICA9IHB4YWZiX3Zhcl90b19icHAodmFyKTsKKwl4cG9zID0gTk9OU1REX1RPX1hQT1ModmFyLT5ub25zdGQpOworCXlwb3MgPSBOT05TVERfVE9fWFBPUyh2YXItPm5vbnN0ZCk7CisJcGZvciA9IE5PTlNURF9UT19QRk9SKHZhci0+bm9uc3RkKTsKKworCW9mYi0+Y29udHJvbFswXSA9IE9WTHhDMV9QUEwodmFyLT54cmVzKSB8IE9WTHhDMV9MUE8odmFyLT55cmVzKSB8CisJCQkgIE9WTHhDMV9CUFAoYnBwKTsKKwlvZmItPmNvbnRyb2xbMV0gPSBPVkx4QzJfWFBPUyh4cG9zKSB8IE9WTHhDMl9ZUE9TKHlwb3MpOworCisJaWYgKG9mYi0+aWQgPT0gT1ZFUkxBWTIpCisJCW9mYi0+Y29udHJvbFsxXSB8PSBPVkwyQzJfUEZPUihwZm9yKTsKKworCW9mYi0+b3BzLT5zZXR1cChvZmIpOworCW9mYi0+b3BzLT5lbmFibGUob2ZiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgb3ZlcmxheV9mYl9vcHMgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZmJfb3BlbgkJPSBvdmVybGF5ZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQkJPSBvdmVybGF5ZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyIAkJPSBvdmVybGF5ZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCQk9IG92ZXJsYXlmYl9zZXRfcGFyLAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfcHhhZmJfb3ZlcmxheShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpLAorCQkJCQkgc3RydWN0IHB4YWZiX2xheWVyICpvZmIsIGludCBpZCkKK3sKKwlzcHJpbnRmKG9mYi0+ZmIuZml4LmlkLCAib3ZlcmxheSVkIiwgaWQgKyAxKTsKKworCW9mYi0+ZmIuZml4LnR5cGUJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCW9mYi0+ZmIuZml4LnhwYW5zdGVwCQk9IDA7CisJb2ZiLT5mYi5maXgueXBhbnN0ZXAJCT0gMTsKKworCW9mYi0+ZmIudmFyLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVzsKKwlvZmItPmZiLnZhci5oZWlnaHQJCT0gLTE7CisJb2ZiLT5mYi52YXIud2lkdGgJCT0gLTE7CisJb2ZiLT5mYi52YXIudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKworCW9mYi0+ZmIuZmJvcHMJCQk9ICZvdmVybGF5X2ZiX29wczsKKwlvZmItPmZiLmZsYWdzCQkJPSBGQklORk9fRkxBR19ERUZBVUxUOworCW9mYi0+ZmIubm9kZQkJCT0gLTE7CisJb2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZQkJPSBOVUxMOworCisJb2ZiLT5pZCA9IGlkOworCW9mYi0+b3BzID0gJm9mYl9vcHNbaWRdOworCWF0b21pY19zZXQoJm9mYi0+dXNhZ2UsIDApOworCW9mYi0+ZmJpID0gZmJpOworCWluaXRfY29tcGxldGlvbigmb2ZiLT5icmFuY2hfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX292ZXJsYXlfaW5pdChzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQoreworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWluaXRfcHhhZmJfb3ZlcmxheShmYmksICZmYmktPm92ZXJsYXlbaV0sIGkpOworCQlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5vdmVybGF5W2ldLmZiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihmYmktPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBvdmVybGF5ICVkXG4iLCBpKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBtYXNrIGFsbCBJVS9CUy9FT0YvU09GIGludGVycnVwdHMgKi8KKwlsY2Rfd3JpdGVsKGZiaSwgTENDUjUsIH4wKTsKKworCS8qIHBsYWNlIG92ZXJsYXkocykgb24gdG9wIG9mIGJhc2UgKi8KKwlmYmktPmxjY3IwIHw9IExDQ1IwX09VQzsKKwlwcl9pbmZvKCJQWEEgT3ZlcmxheSBkcml2ZXIgbG9hZGVkIHN1Y2Nlc3NmdWxseSFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHhhZmJfb3ZlcmxheV9leGl0KHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPm92ZXJsYXlbaV0uZmIpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGFmYl9vdmVybGF5X2luaXQoc3RydWN0IHB4YWZiX2luZm8gKmZiaSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGFmYl9vdmVybGF5X2V4aXQoc3RydWN0IHB4YWZiX2luZm8gKmZiaSkge30KKyNlbmRpZiAvKiBDT05GSUdfRkJfUFhBX09WRVJMQVkgKi8KKwogLyoKICAqIENhbGN1bGF0ZSB0aGUgUENEIHZhbHVlIGZyb20gdGhlIGNsb2NrIHJhdGUgKGluIHBpY29zZWNvbmRzKS4KICAqIFdlIHRha2UgYWNjb3VudCBvZiB0aGUgUFBDUiBjbG9jayBzZXR0aW5nLgpAQCAtNjA3LDIyICs5OTYsMjIgQEAKIEVYUE9SVF9TWU1CT0wocHhhZmJfZ2V0X2hzeW5jX3RpbWUpOwogCiBzdGF0aWMgaW50IHNldHVwX2ZyYW1lX2RtYShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpLCBpbnQgZG1hLCBpbnQgcGFsLAotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBweGFmYl9kbWFfZGVzY3JpcHRvciAqZG1hX2Rlc2MsICpwYWxfZGVzYzsKIAl1bnNpZ25lZCBpbnQgZG1hX2Rlc2Nfb2ZmLCBwYWxfZGVzY19vZmY7CiAKLQlpZiAoZG1hIDwgMCB8fCBkbWEgPj0gRE1BX01BWCkKKwlpZiAoZG1hIDwgMCB8fCBkbWEgPj0gRE1BX01BWCAqIDIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG1hX2Rlc2MgPSAmZmJpLT5kbWFfYnVmZi0+ZG1hX2Rlc2NbZG1hXTsKIAlkbWFfZGVzY19vZmYgPSBvZmZzZXRvZihzdHJ1Y3QgcHhhZmJfZG1hX2J1ZmYsIGRtYV9kZXNjW2RtYV0pOwogCi0JZG1hX2Rlc2MtPmZzYWRyID0gZmJpLT5zY3JlZW5fZG1hICsgb2Zmc2V0OworCWRtYV9kZXNjLT5mc2FkciA9IHN0YXJ0OwogCWRtYV9kZXNjLT5maWRyICA9IDA7CiAJZG1hX2Rlc2MtPmxkY21kID0gc2l6ZTsKIAotCWlmIChwYWwgPCAwIHx8IHBhbCA+PSBQQUxfTUFYKSB7CisJaWYgKHBhbCA8IDAgfHwgcGFsID49IFBBTF9NQVggKiAyKSB7CiAJCWRtYV9kZXNjLT5mZGFkciA9IGZiaS0+ZG1hX2J1ZmZfcGh5cyArIGRtYV9kZXNjX29mZjsKIAkJZmJpLT5mZGFkcltkbWFdID0gZmJpLT5kbWFfYnVmZl9waHlzICsgZG1hX2Rlc2Nfb2ZmOwogCX0gZWxzZSB7CkBAIC02NDgsNiArMTAzNywyNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9iYXNlX2ZyYW1lKHN0cnVjdCBweGFmYl9pbmZvICpmYmksIGludCBicmFuY2gpCit7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT5mYi52YXI7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5mYi5maXg7CisJaW50IG5ieXRlcywgZG1hLCBwYWwsIGJwcCA9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwlkbWEgPSBETUFfQkFTRSArIChicmFuY2ggPyBETUFfTUFYIDogMCk7CisJcGFsID0gKGJwcCA+PSAxNikgPyBQQUxfTk9ORSA6IFBBTF9CQVNFICsgKGJyYW5jaCA/IFBBTF9NQVggOiAwKTsKKworCW5ieXRlcyA9IGZpeC0+bGluZV9sZW5ndGggKiB2YXItPnlyZXM7CisJb2Zmc2V0ID0gZml4LT5saW5lX2xlbmd0aCAqIHZhci0+eW9mZnNldCArIGZiaS0+dmlkZW9fbWVtX3BoeXM7CisKKwlpZiAoZmJpLT5sY2NyMCAmIExDQ1IwX1NEUykgeworCQluYnl0ZXMgPSBuYnl0ZXMgLyAyOworCQlzZXR1cF9mcmFtZV9kbWEoZmJpLCBkbWEgKyAxLCBQQUxfTk9ORSwgb2Zmc2V0ICsgbmJ5dGVzLCBuYnl0ZXMpOworCX0KKworCXNldHVwX2ZyYW1lX2RtYShmYmksIGRtYSwgcGFsLCBvZmZzZXQsIG5ieXRlcyk7Cit9CisKICNpZmRlZiBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwKIHN0YXRpYyBpbnQgc2V0dXBfc21hcnRfZG1hKHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCiB7CkBAIC03MDEsNiArMTExMSw3IEBACiAJbGNkX3dyaXRlbChmYmksIExDQ1IxLCBmYmktPnJlZ19sY2NyMSk7CiAJbGNkX3dyaXRlbChmYmksIExDQ1IyLCBmYmktPnJlZ19sY2NyMik7CiAJbGNkX3dyaXRlbChmYmksIExDQ1IzLCBmYmktPnJlZ19sY2NyMyk7CisJbGNkX3dyaXRlbChmYmksIExDQ1I0LCBmYmktPnJlZ19sY2NyNCk7CiAJbGNkX3dyaXRlbChmYmksIEZEQURSMCwgZmJpLT5mZGFkclswXSk7CiAJbGNkX3dyaXRlbChmYmksIEZEQURSNiwgZmJpLT5mZGFkcls2XSk7CiAKQEAgLTcyNywxMiArMTEzOCwxOSBAQAogCWludCBpOwogCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHB4YWZiX2luZm8sIGZiKTsKIAotCS8qIGxlYXZlIDIgY29tbWFuZHMgZm9yIElOVEVSUlVQVCBhbmQgV0FJVF9GT1JfU1lOQyAqLwotCWZvciAoaSA9IDA7IGkgPCBuX2NtZHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuX2NtZHM7IGkrKywgY21kcysrKSB7CisJCS8qIGlmIGl0IGlzIGEgc29mdHdhcmUgZGVsYXksIGZsdXNoIGFuZCBkZWxheSAqLworCQlpZiAoKCpjbWRzICYgMHhmZjAwKSA9PSBTTUFSVF9DTURfREVMQVkpIHsKKwkJCXB4YWZiX3NtYXJ0X2ZsdXNoKGluZm8pOworCQkJbWRlbGF5KCpjbWRzICYgMHhmZik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGxlYXZlIDIgY29tbWFuZHMgZm9yIElOVEVSUlVQVCBhbmQgV0FJVF9GT1JfU1lOQyAqLwogCQlpZiAoZmJpLT5uX3NtYXJ0X2NtZHMgPT0gQ01EX0JVRkZfU0laRSAtIDgpCiAJCQlweGFmYl9zbWFydF9mbHVzaChpbmZvKTsKIAotCQlmYmktPnNtYXJ0X2NtZHNbZmJpLT5uX3NtYXJ0X2NtZHMrK10gPSAqY21kcysrOworCQlmYmktPnNtYXJ0X2NtZHNbZmJpLT5uX3NtYXJ0X2NtZHMrK10gPSAqY21kczsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc2NCw3ICsxMTgyLDkgQEAKIAkJTENDUjFfSG9yU25jaFdkdGgoX19zbWFydF90aW1pbmcodDMsIGxjbGspKTsKIAogCWZiaS0+cmVnX2xjY3IyID0gTENDUjJfRGlzSGdodCh2YXItPnlyZXMpOwotCWZiaS0+cmVnX2xjY3IzID0gTENDUjNfUGl4Q2xrRGl2KF9fc21hcnRfdGltaW5nKHQ0LCBsY2xrKSk7CisJZmJpLT5yZWdfbGNjcjMgPSBmYmktPmxjY3IzIHwgTENDUjNfUGl4Q2xrRGl2KF9fc21hcnRfdGltaW5nKHQ0LCBsY2xrKSk7CisJZmJpLT5yZWdfbGNjcjMgfD0gKHZhci0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKSA/IExDQ1IzX0hTUCA6IDA7CisJZmJpLT5yZWdfbGNjcjMgfD0gKHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkgPyBMQ0NSM19WU1AgOiAwOwogCiAJLyogRklYTUU6IG1ha2UgdGhpcyBjb25maWd1cmFibGUgKi8KIAlmYmktPnJlZ19jbWRjciA9IDE7CkBAIC03ODksMTEgKzEyMDksMTUgQEAKIAkJaWYgKHRyeV90b19mcmVlemUoKSkKIAkJCWNvbnRpbnVlOwogCisJCW11dGV4X2xvY2soJmZiaS0+Y3RybHJfbG9jayk7CisKIAkJaWYgKGZiaS0+c3RhdGUgPT0gQ19FTkFCTEUpIHsKIAkJCWluZi0+c21hcnRfdXBkYXRlKCZmYmktPmZiKTsKIAkJCWNvbXBsZXRlKCZmYmktPnJlZnJlc2hfZG9uZSk7CiAJCX0KIAorCQltdXRleF91bmxvY2soJmZiaS0+Y3RybHJfbG9jayk7CisKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dCgzMCAqIEhaIC8gMTAwMCk7CiAJfQpAQCAtODA0LDE2ICsxMjI4LDIyIEBACiAKIHN0YXRpYyBpbnQgcHhhZmJfc21hcnRfaW5pdChzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQogewotCWlmICghKGZiaS0+bGNjcjAgfCBMQ0NSMF9MQ0RUKSkKKwlpZiAoIShmYmktPmxjY3IwICYgTENDUjBfTENEVCkpCiAJCXJldHVybiAwOwogCisJZmJpLT5zbWFydF9jbWRzID0gKHVpbnQxNl90ICopIGZiaS0+ZG1hX2J1ZmYtPmNtZF9idWZmOworCWZiaS0+bl9zbWFydF9jbWRzID0gMDsKKworCWluaXRfY29tcGxldGlvbigmZmJpLT5jb21tYW5kX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmZmJpLT5yZWZyZXNoX2RvbmUpOworCiAJZmJpLT5zbWFydF90aHJlYWQgPSBrdGhyZWFkX3J1bihweGFmYl9zbWFydF90aHJlYWQsIGZiaSwKIAkJCQkJImxjZF9yZWZyZXNoIik7CiAJaWYgKElTX0VSUihmYmktPnNtYXJ0X3RocmVhZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGNyZWF0ZSBrZXJuZWwgdGhyZWFkXG4iLAotCQkJCV9fZnVuY19fKTsKKwkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGNyZWF0ZSBrZXJuZWwgdGhyZWFkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQVFJfRVJSKGZiaS0+c21hcnRfdGhyZWFkKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KICNlbHNlCkBAIC04MjYsNyArMTI1Niw5IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0ZCX1NNQVJUX1BBTkVMICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB4YWZiX3NtYXJ0X2luaXQoc3RydWN0IHB4YWZiX2luZm8gKmZiaSkgeyByZXR1cm4gMDsgfQorI2VuZGlmIC8qIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCAqLwogCiBzdGF0aWMgdm9pZCBzZXR1cF9wYXJhbGxlbF90aW1pbmcoc3RydWN0IHB4YWZiX2luZm8gKmZiaSwKIAkJCQkgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQpAQCAtODc0LDUxICsxMzA2LDcgQEAKIAkJCSAgICAgIHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCiB7CiAJdV9sb25nIGZsYWdzOwotCXNpemVfdCBuYnl0ZXM7CiAKLSNpZiBERUJVR19WQVIKLQlpZiAoIShmYmktPmxjY3IwICYgTENDUjBfTENEVCkpIHsKLQkJaWYgKHZhci0+eHJlcyA8IDE2IHx8IHZhci0+eHJlcyA+IDEwMjQpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHhyZXMgJWRcbiIsCi0JCQkJZmJpLT5mYi5maXguaWQsIHZhci0+eHJlcyk7Ci0JCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCQljYXNlIDE6Ci0JCWNhc2UgMjoKLQkJY2FzZSA0OgotCQljYXNlIDg6Ci0JCWNhc2UgMTY6Ci0JCWNhc2UgMjQ6Ci0JCWNhc2UgMzI6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgYml0IGRlcHRoICVkXG4iLAotCQkJICAgICAgIGZiaS0+ZmIuZml4LmlkLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHZhci0+aHN5bmNfbGVuIDwgMSB8fCB2YXItPmhzeW5jX2xlbiA+IDY0KQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBoc3luY19sZW4gJWRcbiIsCi0JCQkJZmJpLT5mYi5maXguaWQsIHZhci0+aHN5bmNfbGVuKTsKLQkJaWYgKHZhci0+bGVmdF9tYXJnaW4gPCAxIHx8IHZhci0+bGVmdF9tYXJnaW4gPiAyNTUpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGxlZnRfbWFyZ2luICVkXG4iLAotCQkJCWZiaS0+ZmIuZml4LmlkLCB2YXItPmxlZnRfbWFyZ2luKTsKLQkJaWYgKHZhci0+cmlnaHRfbWFyZ2luIDwgMSB8fCB2YXItPnJpZ2h0X21hcmdpbiA+IDI1NSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcmlnaHRfbWFyZ2luICVkXG4iLAotCQkJCWZiaS0+ZmIuZml4LmlkLCB2YXItPnJpZ2h0X21hcmdpbik7Ci0JCWlmICh2YXItPnlyZXMgPCAxIHx8IHZhci0+eXJlcyA+IDEwMjQpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHlyZXMgJWRcbiIsCi0JCQkJZmJpLT5mYi5maXguaWQsIHZhci0+eXJlcyk7Ci0JCWlmICh2YXItPnZzeW5jX2xlbiA8IDEgfHwgdmFyLT52c3luY19sZW4gPiA2NCkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgdnN5bmNfbGVuICVkXG4iLAotCQkJCWZiaS0+ZmIuZml4LmlkLCB2YXItPnZzeW5jX2xlbik7Ci0JCWlmICh2YXItPnVwcGVyX21hcmdpbiA8IDAgfHwgdmFyLT51cHBlcl9tYXJnaW4gPiAyNTUpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHVwcGVyX21hcmdpbiAlZFxuIiwKLQkJCQlmYmktPmZiLmZpeC5pZCwgdmFyLT51cHBlcl9tYXJnaW4pOwotCQlpZiAodmFyLT5sb3dlcl9tYXJnaW4gPCAwIHx8IHZhci0+bG93ZXJfbWFyZ2luID4gMjU1KQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBsb3dlcl9tYXJnaW4gJWRcbiIsCi0JCQkJZmJpLT5mYi5maXguaWQsIHZhci0+bG93ZXJfbWFyZ2luKTsKLQl9Ci0jZW5kaWYKIAkvKiBVcGRhdGUgc2hhZG93IGNvcHkgYXRvbWljYWxseSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtOTI5LDIzICsxMzE3LDEzIEBACiAjZW5kaWYKIAkJc2V0dXBfcGFyYWxsZWxfdGltaW5nKGZiaSwgdmFyKTsKIAorCXNldHVwX2Jhc2VfZnJhbWUoZmJpLCAwKTsKKwogCWZiaS0+cmVnX2xjY3IwID0gZmJpLT5sY2NyMCB8CiAJCShMQ0NSMF9MRE0gfCBMQ0NSMF9TRk0gfCBMQ0NSMF9JVU0gfCBMQ0NSMF9FRk0gfAogCQkgTENDUjBfUURNIHwgTENDUjBfQk0gIHwgTENDUjBfT1VNKTsKIAotCWZiaS0+cmVnX2xjY3IzIHw9IHB4YWZiX2JwcF90b19sY2NyMyh2YXIpOwotCi0JbmJ5dGVzID0gdmFyLT55cmVzICogZmJpLT5mYi5maXgubGluZV9sZW5ndGg7Ci0KLQlpZiAoKGZiaS0+bGNjcjAgJiBMQ0NSMF9TRFMpID09IExDQ1IwX0R1YWwpIHsKLQkJbmJ5dGVzID0gbmJ5dGVzIC8gMjsKLQkJc2V0dXBfZnJhbWVfZG1hKGZiaSwgRE1BX0xPV0VSLCBQQUxfTk9ORSwgbmJ5dGVzLCBuYnl0ZXMpOwotCX0KLQotCWlmICgodmFyLT5iaXRzX3Blcl9waXhlbCA+PSAxNikgfHwgKGZiaS0+bGNjcjAgJiBMQ0NSMF9MQ0RUKSkKLQkJc2V0dXBfZnJhbWVfZG1hKGZiaSwgRE1BX0JBU0UsIFBBTF9OT05FLCAwLCBuYnl0ZXMpOwotCWVsc2UKLQkJc2V0dXBfZnJhbWVfZG1hKGZiaSwgRE1BX0JBU0UsIFBBTF9CQVNFLCAwLCBuYnl0ZXMpOworCWZiaS0+cmVnX2xjY3IzIHw9IHB4YWZiX3Zhcl90b19sY2NyMyh2YXIpOwogCiAJZmJpLT5yZWdfbGNjcjQgPSBsY2RfcmVhZGwoZmJpLCBMQ0NSNCkgJiB+TENDUjRfUEFMX0ZPUl9NQVNLOwogCWZiaS0+cmVnX2xjY3I0IHw9IChmYmktPmxjY3I0ICYgTENDUjRfUEFMX0ZPUl9NQVNLKTsKQEAgLTk1OSw2ICsxMzM3LDcgQEAKIAkgICAgKGxjZF9yZWFkbChmYmksIExDQ1IxKSAhPSBmYmktPnJlZ19sY2NyMSkgfHwKIAkgICAgKGxjZF9yZWFkbChmYmksIExDQ1IyKSAhPSBmYmktPnJlZ19sY2NyMikgfHwKIAkgICAgKGxjZF9yZWFkbChmYmksIExDQ1IzKSAhPSBmYmktPnJlZ19sY2NyMykgfHwKKwkgICAgKGxjZF9yZWFkbChmYmksIExDQ1I0KSAhPSBmYmktPnJlZ19sY2NyNCkgfHwKIAkgICAgKGxjZF9yZWFkbChmYmksIEZEQURSMCkgIT0gZmJpLT5mZGFkclswXSkgfHwKIAkgICAgKGxjZF9yZWFkbChmYmksIEZEQURSMSkgIT0gZmJpLT5mZGFkclsxXSkpCiAJCXB4YWZiX3NjaGVkdWxlX3dvcmsoZmJpLCBDX1JFRU5BQkxFKTsKQEAgLTk3Niw2NyArMTM1NSwxNiBAQAogewogCXByX2RlYnVnKCJweGFmYjogYmFja2xpZ2h0IG8lc1xuIiwgb24gPyAibiIgOiAiZmYiKTsKIAotCWlmIChweGFmYl9iYWNrbGlnaHRfcG93ZXIpCi0JCXB4YWZiX2JhY2tsaWdodF9wb3dlcihvbik7CisJaWYgKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQorCQlmYmktPmJhY2tsaWdodF9wb3dlcihvbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B4YWZiX2xjZF9wb3dlcihzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpLCBpbnQgb24pCiB7CiAJcHJfZGVidWcoInB4YWZiOiBMQ0QgcG93ZXIgbyVzXG4iLCBvbiA/ICJuIiA6ICJmZiIpOwogCi0JaWYgKHB4YWZiX2xjZF9wb3dlcikKLQkJcHhhZmJfbGNkX3Bvd2VyKG9uLCAmZmJpLT5mYi52YXIpOwotfQotCi1zdGF0aWMgdm9pZCBweGFmYl9zZXR1cF9ncGlvKHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCi17Ci0JaW50IGdwaW8sIGxkZF9iaXRzOwotCXVuc2lnbmVkIGludCBsY2NyMCA9IGZiaS0+bGNjcjA7Ci0KLQkvKgotCSAqIHNldHVwIGlzIGJhc2VkIG9uIHR5cGUgb2YgcGFuZWwgc3VwcG9ydGVkCi0JICovCi0KLQkvKiA0IGJpdCBpbnRlcmZhY2UgKi8KLQlpZiAoKGxjY3IwICYgTENDUjBfQ01TKSA9PSBMQ0NSMF9Nb25vICYmCi0JICAgIChsY2NyMCAmIExDQ1IwX1NEUykgPT0gTENDUjBfU25nbCAmJgotCSAgICAobGNjcjAgJiBMQ0NSMF9EUEQpID09IExDQ1IwXzRQaXhNb25vKQotCQlsZGRfYml0cyA9IDQ7Ci0KLQkvKiA4IGJpdCBpbnRlcmZhY2UgKi8KLQllbHNlIGlmICgoKGxjY3IwICYgTENDUjBfQ01TKSA9PSBMQ0NSMF9Nb25vICYmCi0JCSAgKChsY2NyMCAmIExDQ1IwX1NEUykgPT0gTENDUjBfRHVhbCB8fAotCQkgICAobGNjcjAgJiBMQ0NSMF9EUEQpID09IExDQ1IwXzhQaXhNb25vKSkgfHwKLQkJICgobGNjcjAgJiBMQ0NSMF9DTVMpID09IExDQ1IwX0NvbG9yICYmCi0JCSAgKGxjY3IwICYgTENDUjBfUEFTKSA9PSBMQ0NSMF9QYXMgJiYKLQkJICAobGNjcjAgJiBMQ0NSMF9TRFMpID09IExDQ1IwX1NuZ2wpKQotCQlsZGRfYml0cyA9IDg7Ci0KLQkvKiAxNiBiaXQgaW50ZXJmYWNlICovCi0JZWxzZSBpZiAoKGxjY3IwICYgTENDUjBfQ01TKSA9PSBMQ0NSMF9Db2xvciAmJgotCQkgKChsY2NyMCAmIExDQ1IwX1NEUykgPT0gTENDUjBfRHVhbCB8fAotCQkgIChsY2NyMCAmIExDQ1IwX1BBUykgPT0gTENDUjBfQWN0KSkKLQkJbGRkX2JpdHMgPSAxNjsKLQotCWVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgInB4YWZiX3NldHVwX2dwaW86IHVuYWJsZSB0byBkZXRlcm1pbmUgIgotCQkJICAgICAgICJiaXRzIHBlciBwaXhlbFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGdwaW8gPSA1ODsgbGRkX2JpdHM7IGdwaW8rKywgbGRkX2JpdHMtLSkKLQkJcHhhX2dwaW9fbW9kZShncGlvIHwgR1BJT19BTFRfRk5fMl9PVVQpOwotCS8qIDE4IGJpdCBpbnRlcmZhY2UgKi8KLQlpZiAoZmJpLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPiAxNikgewotCQlweGFfZ3Bpb19tb2RlKDg2IHwgR1BJT19BTFRfRk5fMl9PVVQpOwotCQlweGFfZ3Bpb19tb2RlKDg3IHwgR1BJT19BTFRfRk5fMl9PVVQpOwotCX0KLQlweGFfZ3Bpb19tb2RlKEdQSU83NF9MQ0RfRkNMS19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNzVfTENEX0xDTEtfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzc2X0xDRF9QQ0xLX01EKTsKLQotCWlmICgobGNjcjAgJiBMQ0NSMF9QQVMpID09IDApCi0JCXB4YV9ncGlvX21vZGUoR1BJTzc3X0xDRF9BQ0JJQVNfTUQpOworCWlmIChmYmktPmxjZF9wb3dlcikKKwkJZmJpLT5sY2RfcG93ZXIob24sICZmYmktPmZiLnZhcik7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YWZiX2VuYWJsZV9jb250cm9sbGVyKHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCkBAIC0xMDU2LDYgKzEzODQsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBTZXF1ZW5jZSBmcm9tIDExLjcuMTAgKi8KKwlsY2Rfd3JpdGVsKGZiaSwgTENDUjQsIGZiaS0+cmVnX2xjY3I0KTsKIAlsY2Rfd3JpdGVsKGZiaSwgTENDUjMsIGZiaS0+cmVnX2xjY3IzKTsKIAlsY2Rfd3JpdGVsKGZiaSwgTENDUjIsIGZiaS0+cmVnX2xjY3IyKTsKIAlsY2Rfd3JpdGVsKGZiaSwgTENDUjEsIGZiaS0+cmVnX2xjY3IxKTsKQEAgLTEwOTcsOCArMTQyNiw5IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcHhhZmJfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgbGNjcjAsIGxjc3IgPSBsY2RfcmVhZGwoZmJpLCBMQ1NSKTsKKwl1bnNpZ25lZCBpbnQgbGNjcjAsIGxjc3IsIGxjc3IxOwogCisJbGNzciA9IGxjZF9yZWFkbChmYmksIExDU1IpOwogCWlmIChsY3NyICYgTENTUl9MREQpIHsKIAkJbGNjcjAgPSBsY2RfcmVhZGwoZmJpLCBMQ0NSMCk7CiAJCWxjZF93cml0ZWwoZmJpLCBMQ0NSMCwgbGNjcjAgfCBMQ0NSMF9MRE0pOwpAQCAtMTEwOSw4ICsxNDM5LDE4IEBACiAJaWYgKGxjc3IgJiBMQ1NSX0NNRF9JTlQpCiAJCWNvbXBsZXRlKCZmYmktPmNvbW1hbmRfZG9uZSk7CiAjZW5kaWYKLQogCWxjZF93cml0ZWwoZmJpLCBMQ1NSLCBsY3NyKTsKKworI2lmZGVmIENPTkZJR19GQl9QWEFfT1ZFUkxBWQorCWxjc3IxID0gbGNkX3JlYWRsKGZiaSwgTENTUjEpOworCWlmIChsY3NyMSAmIExDU1IxX0JTKDEpKQorCQljb21wbGV0ZSgmZmJpLT5vdmVybGF5WzBdLmJyYW5jaF9kb25lKTsKKworCWlmIChsY3NyMSAmIExDU1IxX0JTKDIpKQorCQljb21wbGV0ZSgmZmJpLT5vdmVybGF5WzFdLmJyYW5jaF9kb25lKTsKKworCWxjZF93cml0ZWwoZmJpLCBMQ1NSMSwgbGNzcjEpOworI2VuZGlmCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xMTgxLDcgKzE1MjEsNiBAQAogCQlpZiAob2xkX3N0YXRlID09IENfRU5BQkxFKSB7CiAJCQlfX3B4YWZiX2xjZF9wb3dlcihmYmksIDApOwogCQkJcHhhZmJfZGlzYWJsZV9jb250cm9sbGVyKGZiaSk7Ci0JCQlweGFmYl9zZXR1cF9ncGlvKGZiaSk7CiAJCQlweGFmYl9lbmFibGVfY29udHJvbGxlcihmYmkpOwogCQkJX19weGFmYl9sY2RfcG93ZXIoZmJpLCAxKTsKIAkJfQpAQCAtMTIwNCw3ICsxNTQzLDYgQEAKIAkJICovCiAJCWlmIChvbGRfc3RhdGUgIT0gQ19FTkFCTEUpIHsKIAkJCWZiaS0+c3RhdGUgPSBDX0VOQUJMRTsKLQkJCXB4YWZiX3NldHVwX2dwaW8oZmJpKTsKIAkJCXB4YWZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CiAJCQlfX3B4YWZiX2xjZF9wb3dlcihmYmksIDEpOwogCQkJX19weGFmYl9iYWNrbGlnaHRfcG93ZXIoZmJpLCAxKTsKQEAgLTEzMDMsNzcgKzE2NDEsMzQgQEAKICNkZWZpbmUgcHhhZmJfcmVzdW1lCU5VTEwKICNlbmRpZgogCi0vKgotICogcHhhZmJfbWFwX3ZpZGVvX21lbW9yeSgpOgotICogICAgICBBbGxvY2F0ZXMgdGhlIERSQU0gbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVyLiAgVGhpcyBidWZmZXIgaXMKLSAqCXJlbWFwcGVkIGludG8gYSBub24tY2FjaGVkLCBub24tYnVmZmVyZWQsIG1lbW9yeSByZWdpb24gdG8KLSAqICAgICAgYWxsb3cgcGFsZXR0ZSBhbmQgcGl4ZWwgd3JpdGVzIHRvIG9jY3VyIHdpdGhvdXQgZmx1c2hpbmcgdGhlCi0gKiAgICAgIGNhY2hlLiAgT25jZSB0aGlzIGFyZWEgaXMgcmVtYXBwZWQsIGFsbCB2aXJ0dWFsIG1lbW9yeQotICogICAgICBhY2Nlc3MgdG8gdGhlIHZpZGVvIG1lbW9yeSBzaG91bGQgb2NjdXIgYXQgdGhlIG5ldyByZWdpb24uCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX21hcF92aWRlb19tZW1vcnkoc3RydWN0IHB4YWZiX2luZm8gKmZiaSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX2luaXRfdmlkZW9fbWVtb3J5KHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCiB7Ci0JLyoKLQkgKiBXZSByZXNlcnZlIG9uZSBwYWdlIGZvciB0aGUgcGFsZXR0ZSwgcGx1cyB0aGUgc2l6ZQotCSAqIG9mIHRoZSBmcmFtZWJ1ZmZlci4KLQkgKi8KLQlmYmktPnZpZGVvX29mZnNldCA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBweGFmYl9kbWFfYnVmZikpOwotCWZiaS0+bWFwX3NpemUgPSBQQUdFX0FMSUdOKGZiaS0+ZmIuZml4LnNtZW1fbGVuICsgZmJpLT52aWRlb19vZmZzZXQpOwotCWZiaS0+bWFwX2NwdSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZmJpLT5kZXYsIGZiaS0+bWFwX3NpemUsCi0JCQkJCSAgICAgICZmYmktPm1hcF9kbWEsIEdGUF9LRVJORUwpOworCWludCBzaXplID0gUEFHRV9BTElHTihmYmktPnZpZGVvX21lbV9zaXplKTsKIAotCWlmIChmYmktPm1hcF9jcHUpIHsKLQkJLyogcHJldmVudCBpbml0aWFsIGdhcmJhZ2Ugb24gc2NyZWVuICovCi0JCW1lbXNldChmYmktPm1hcF9jcHUsIDAsIGZiaS0+bWFwX3NpemUpOwotCQlmYmktPmZiLnNjcmVlbl9iYXNlID0gZmJpLT5tYXBfY3B1ICsgZmJpLT52aWRlb19vZmZzZXQ7Ci0JCWZiaS0+c2NyZWVuX2RtYSA9IGZiaS0+bWFwX2RtYSArIGZiaS0+dmlkZW9fb2Zmc2V0OworCWZiaS0+dmlkZW9fbWVtID0gYWxsb2NfcGFnZXNfZXhhY3Qoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmIChmYmktPnZpZGVvX21lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQkvKgotCQkgKiBGSVhNRTogdGhpcyBpcyBhY3R1YWxseSB0aGUgd3JvbmcgdGhpbmcgdG8gcGxhY2UgaW4KLQkJICogc21lbV9zdGFydC4gIEJ1dCBmYmRldiBzdWZmZXJzIGZyb20gdGhlIHByb2JsZW0gdGhhdAotCQkgKiBpdCBuZWVkcyBhbiBBUEkgd2hpY2ggZG9lc24ndCBleGlzdCAoaW4gdGhpcyBjYXNlLAotCQkgKiBkbWFfd3JpdGVjb21iaW5lX21tYXApCi0JCSAqLwotCQlmYmktPmZiLmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOwotCQlmYmktPnBhbGV0dGVfc2l6ZSA9IGZiaS0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDggPyAyNTYgOiAxNjsKKwlmYmktPnZpZGVvX21lbV9waHlzID0gdmlydF90b19waHlzKGZiaS0+dmlkZW9fbWVtKTsKKwlmYmktPnZpZGVvX21lbV9zaXplID0gc2l6ZTsKIAotCQlmYmktPmRtYV9idWZmID0gKHZvaWQgKikgZmJpLT5tYXBfY3B1OwotCQlmYmktPmRtYV9idWZmX3BoeXMgPSBmYmktPm1hcF9kbWE7Ci0JCWZiaS0+cGFsZXR0ZV9jcHUgPSAodTE2ICopIGZiaS0+ZG1hX2J1ZmYtPnBhbGV0dGU7CisJZmJpLT5mYi5maXguc21lbV9zdGFydAk9IGZiaS0+dmlkZW9fbWVtX3BoeXM7CisJZmJpLT5mYi5maXguc21lbV9sZW4JPSBmYmktPnZpZGVvX21lbV9zaXplOworCWZiaS0+ZmIuc2NyZWVuX2Jhc2UJPSBmYmktPnZpZGVvX21lbTsKIAotCSAgICAgICAgcHJfZGVidWcoInB4YWZiOiBwYWxldHRlX21lbV9zaXplID0gMHglMDh4XG4iLCBmYmktPnBhbGV0dGVfc2l6ZSpzaXplb2YodTE2KSk7Ci0KLSNpZmRlZiBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwKLQkJZmJpLT5zbWFydF9jbWRzID0gKHVpbnQxNl90ICopIGZiaS0+ZG1hX2J1ZmYtPmNtZF9idWZmOwotCQlmYmktPm5fc21hcnRfY21kcyA9IDA7Ci0jZW5kaWYKLQl9Ci0KLQlyZXR1cm4gZmJpLT5tYXBfY3B1ID8gMCA6IC1FTk9NRU07Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YWZiX2RlY29kZV9tb2RlX2luZm8oc3RydWN0IHB4YWZiX2luZm8gKmZiaSwKLQkJCQkgICBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvICptb2RlcywKLQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX21vZGVzKQotewotCXVuc2lnbmVkIGludCBpLCBzbWVtbGVuOwotCi0JcHhhZmJfc2V0bW9kZSgmZmJpLT5mYi52YXIsICZtb2Rlc1swXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKLQkJc21lbWxlbiA9IG1vZGVzW2ldLnhyZXMgKiBtb2Rlc1tpXS55cmVzICogbW9kZXNbaV0uYnBwIC8gODsKLQkJaWYgKHNtZW1sZW4gPiBmYmktPmZiLmZpeC5zbWVtX2xlbikKLQkJCWZiaS0+ZmIuZml4LnNtZW1fbGVuID0gc21lbWxlbjsKLQl9CisJcmV0dXJuIGZiaS0+dmlkZW9fbWVtID8gMCA6IC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHB4YWZiX2RlY29kZV9tYWNoX2luZm8oc3RydWN0IHB4YWZiX2luZm8gKmZiaSwKIAkJCQkgICBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmYpCiB7CiAJdW5zaWduZWQgaW50IGxjZF9jb25uID0gaW5mLT5sY2RfY29ubjsKKwlzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvICptOworCWludCBpOwogCiAJZmJpLT5jbWFwX2ludmVyc2UJPSBpbmYtPmNtYXBfaW52ZXJzZTsKIAlmYmktPmNtYXBfc3RhdGljCT0gaW5mLT5jbWFwX3N0YXRpYzsKKwlmYmktPmxjY3I0IAkJPSBpbmYtPmxjY3I0OwogCiAJc3dpdGNoIChsY2RfY29ubiAmIExDRF9UWVBFX01BU0spIHsKIAljYXNlIExDRF9UWVBFX01PTk9fU1ROOgpAQCAtMTM5OCw3ICsxNjkzLDYgQEAKIAkJLyogZmFsbCBiYWNrIHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2F5ICovCiAJCWZiaS0+bGNjcjAgPSBpbmYtPmxjY3IwOwogCQlmYmktPmxjY3IzID0gaW5mLT5sY2NyMzsKLQkJZmJpLT5sY2NyNCA9IGluZi0+bGNjcjQ7CiAJCWdvdG8gZGVjb2RlX21vZGU7CiAJfQogCkBAIC0xNDEyLDcgKzE3MDYsMjIgQEAKIAlmYmktPmxjY3IzIHw9IChsY2RfY29ubiAmIExDRF9QQ0xLX0VER0VfRkFMTCkgID8gTENDUjNfUENQIDogMDsKIAogZGVjb2RlX21vZGU6Ci0JcHhhZmJfZGVjb2RlX21vZGVfaW5mbyhmYmksIGluZi0+bW9kZXMsIGluZi0+bnVtX21vZGVzKTsKKwlweGFmYl9zZXRtb2RlKCZmYmktPmZiLnZhciwgJmluZi0+bW9kZXNbMF0pOworCisJLyogZGVjaWRlIHZpZGVvIG1lbW9yeSBzaXplIGFzIGZvbGxvd3M6CisJICogMS4gZGVmYXVsdCB0byBtb2RlIG9mIG1heGltdW0gcmVzb2x1dGlvbgorCSAqIDIuIGFsbG93IHBsYXRmb3JtIHRvIG92ZXJyaWRlCisJICogMy4gYWxsb3cgbW9kdWxlIHBhcmFtZXRlciB0byBvdmVycmlkZQorCSAqLworCWZvciAoaSA9IDAsIG0gPSAmaW5mLT5tb2Rlc1swXTsgaSA8IGluZi0+bnVtX21vZGVzOyBpKyssIG0rKykKKwkJZmJpLT52aWRlb19tZW1fc2l6ZSA9IG1heF90KHNpemVfdCwgZmJpLT52aWRlb19tZW1fc2l6ZSwKKwkJCQltLT54cmVzICogbS0+eXJlcyAqIG0tPmJwcCAvIDgpOworCisJaWYgKGluZi0+dmlkZW9fbWVtX3NpemUgPiBmYmktPnZpZGVvX21lbV9zaXplKQorCQlmYmktPnZpZGVvX21lbV9zaXplID0gaW5mLT52aWRlb19tZW1fc2l6ZTsKKworCWlmICh2aWRlb19tZW1fc2l6ZSA+IGZiaS0+dmlkZW9fbWVtX3NpemUpCisJCWZiaS0+dmlkZW9fbWVtX3NpemUgPSB2aWRlb19tZW1fc2l6ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmYl9pbmZvICogX19kZXZpbml0IHB4YWZiX2luaXRfZmJpbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE0MjksNyArMTczOCw3IEBACiAJbWVtc2V0KGZiaSwgMCwgc2l6ZW9mKHN0cnVjdCBweGFmYl9pbmZvKSk7CiAJZmJpLT5kZXYgPSBkZXY7CiAKLQlmYmktPmNsayA9IGNsa19nZXQoZGV2LCAiTENEQ0xLIik7CisJZmJpLT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihmYmktPmNsaykpIHsKIAkJa2ZyZWUoZmJpKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNDQwLDcgKzE3NDksNyBAQAogCWZiaS0+ZmIuZml4LnR5cGUJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJZmJpLT5mYi5maXgudHlwZV9hdXgJPSAwOwogCWZiaS0+ZmIuZml4LnhwYW5zdGVwCT0gMDsKLQlmYmktPmZiLmZpeC55cGFuc3RlcAk9IDA7CisJZmJpLT5mYi5maXgueXBhbnN0ZXAJPSAxOwogCWZiaS0+ZmIuZml4Lnl3cmFwc3RlcAk9IDA7CiAJZmJpLT5mYi5maXguYWNjZWwJPSBGQl9BQ0NFTF9OT05FOwogCkBAIC0xNDQ4LDcgKzE3NTcsNyBAQAogCWZiaS0+ZmIudmFyLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XOwogCWZiaS0+ZmIudmFyLmhlaWdodAk9IC0xOwogCWZiaS0+ZmIudmFyLndpZHRoCT0gLTE7Ci0JZmJpLT5mYi52YXIuYWNjZWxfZmxhZ3MJPSAwOworCWZiaS0+ZmIudmFyLmFjY2VsX2ZsYWdzCT0gRkJfQUNDRUxGX1RFWFQ7CiAJZmJpLT5mYi52YXIudm1vZGUJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOwogCiAJZmJpLT5mYi5mYm9wcwkJPSAmcHhhZmJfb3BzOwpAQCAtMTQ2OCwxMCArMTc3Nyw2IEBACiAJSU5JVF9XT1JLKCZmYmktPnRhc2ssIHB4YWZiX3Rhc2spOwogCW11dGV4X2luaXQoJmZiaS0+Y3RybHJfbG9jayk7CiAJaW5pdF9jb21wbGV0aW9uKCZmYmktPmRpc2FibGVfZG9uZSk7Ci0jaWZkZWYgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMCi0JaW5pdF9jb21wbGV0aW9uKCZmYmktPmNvbW1hbmRfZG9uZSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZmYmktPnJlZnJlc2hfZG9uZSk7Ci0jZW5kaWYKIAogCXJldHVybiBmYmk7CiB9CkBAIC0xNTQ0LDcgKzE4NDksOSBAQAogCiAJc1swXSA9ICdcMCc7CiAKLQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJtb2RlOiIsIDUpKSB7CisJaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidm1lbToiLCA1KSkgeworCQl2aWRlb19tZW1fc2l6ZSA9IG1lbXBhcnNlKHRoaXNfb3B0ICsgNSwgTlVMTCk7CisJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm1vZGU6IiwgNSkpIHsKIAkJcmV0dXJuIHBhcnNlX29wdF9tb2RlKGRldiwgdGhpc19vcHQpOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJwaXhjbG9jazoiLCA5KSkgewogCQltb2RlLT5waXhjbG9jayA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzksIE5VTEwsIDApOwpAQCAtMTc0OCw4ICsyMDU1LDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBmYWlsZWQ7CiAJfQotCXB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGluZi0+cHhhZmJfYmFja2xpZ2h0X3Bvd2VyOwotCXB4YWZiX2xjZF9wb3dlciA9IGluZi0+cHhhZmJfbGNkX3Bvd2VyOworCiAJZmJpID0gcHhhZmJfaW5pdF9mYmluZm8oJmRldi0+ZGV2KTsKIAlpZiAoIWZiaSkgewogCQkvKiBvbmx5IHJlYXNvbiBmb3IgcHhhZmJfaW5pdF9mYmluZm8gdG8gZmFpbCBpcyBrbWFsbG9jICovCkBAIC0xNzU4LDYgKzIwNjQsOSBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlmYmktPmJhY2tsaWdodF9wb3dlciA9IGluZi0+cHhhZmJfYmFja2xpZ2h0X3Bvd2VyOworCWZiaS0+bGNkX3Bvd2VyID0gaW5mLT5weGFmYl9sY2RfcG93ZXI7CisKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJubyBJL08gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOwpAQCAtMTc3OSwxMiArMjA4OCwyMCBAQAogCQlnb3RvIGZhaWxlZF9mcmVlX3JlczsKIAl9CiAKLQkvKiBJbml0aWFsaXplIHZpZGVvIG1lbW9yeSAqLwotCXJldCA9IHB4YWZiX21hcF92aWRlb19tZW1vcnkoZmJpKTsKKwlmYmktPmRtYV9idWZmX3NpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgcHhhZmJfZG1hX2J1ZmYpKTsKKwlmYmktPmRtYV9idWZmID0gZG1hX2FsbG9jX2NvaGVyZW50KGZiaS0+ZGV2LCBmYmktPmRtYV9idWZmX3NpemUsCisJCQkJJmZiaS0+ZG1hX2J1ZmZfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKGZiaS0+ZG1hX2J1ZmYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIERNQVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW87CisJfQorCisJcmV0ID0gcHhhZmJfaW5pdF92aWRlb19tZW1vcnkoZmJpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIFJBTTogJWRcbiIsIHJldCk7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbGVkX2ZyZWVfaW87CisJCWdvdG8gZmFpbGVkX2ZyZWVfZG1hOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKQEAgLTE4MDEsMTMgKzIxMTgsMTIgQEAKIAkJZ290byBmYWlsZWRfZnJlZV9tZW07CiAJfQogCi0jaWZkZWYgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMCiAJcmV0ID0gcHhhZmJfc21hcnRfaW5pdChmYmkpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzbWFydHBhbmVsXG4iKTsKIAkJZ290byBmYWlsZWRfZnJlZV9pcnE7CiAJfQotI2VuZGlmCisKIAkvKgogCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG91ciBjb2xvdXIgYml0ZmllbGQKIAkgKiBkZXNjcmlwdG9ycyBhcmUgY29ycmVjdGx5IGluaXRpYWxpc2VkLgpAQCAtMTgzMyw2ICsyMTQ5LDggQEAKIAkJZ290byBmYWlsZWRfZnJlZV9jbWFwOwogCX0KIAorCXB4YWZiX292ZXJsYXlfaW5pdChmYmkpOworCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAJZmJpLT5mcmVxX3RyYW5zaXRpb24ubm90aWZpZXJfY2FsbCA9IHB4YWZiX2ZyZXFfdHJhbnNpdGlvbjsKIAlmYmktPmZyZXFfcG9saWN5Lm5vdGlmaWVyX2NhbGwgPSBweGFmYl9mcmVxX3BvbGljeTsKQEAgLTE4NTUsOCArMjE3MywxMCBAQAogZmFpbGVkX2ZyZWVfaXJxOgogCWZyZWVfaXJxKGlycSwgZmJpKTsKIGZhaWxlZF9mcmVlX21lbToKLQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBmYmktPm1hcF9zaXplLAotCQkJZmJpLT5tYXBfY3B1LCBmYmktPm1hcF9kbWEpOworCWZyZWVfcGFnZXNfZXhhY3QoZmJpLT52aWRlb19tZW0sIGZiaS0+dmlkZW9fbWVtX3NpemUpOworZmFpbGVkX2ZyZWVfZG1hOgorCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwgZmJpLT5kbWFfYnVmZl9zaXplLAorCQkJZmJpLT5kbWFfYnVmZiwgZmJpLT5kbWFfYnVmZl9waHlzKTsKIGZhaWxlZF9mcmVlX2lvOgogCWlvdW5tYXAoZmJpLT5tbWlvX2Jhc2UpOwogZmFpbGVkX2ZyZWVfcmVzOgpAQCAtMTg4MSw2ICsyMjAxLDcgQEAKIAogCWluZm8gPSAmZmJpLT5mYjsKIAorCXB4YWZiX292ZXJsYXlfZXhpdChmYmkpOwogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAKIAlweGFmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKQEAgLTE4OTEsOCArMjIxMiwxMCBAQAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKIAlmcmVlX2lycShpcnEsIGZiaSk7CiAKLQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBmYmktPm1hcF9zaXplLAotCQkJCQlmYmktPm1hcF9jcHUsIGZiaS0+bWFwX2RtYSk7CisJZnJlZV9wYWdlc19leGFjdChmYmktPnZpZGVvX21lbSwgZmJpLT52aWRlb19tZW1fc2l6ZSk7CisKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJmRldi0+ZGV2LCBmYmktPmRtYV9idWZmX3NpemUsCisJCQlmYmktPmRtYV9idWZmLCBmYmktPmRtYV9idWZmX3BoeXMpOwogCiAJaW91bm1hcChmYmktPm1taW9fYmFzZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuaCBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuaAppbmRleCAzMTU0MWI4Li4yMzUzNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmgKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5oCkBAIC01NCwxMSArNTQsNTUgQEAKICNkZWZpbmUgUEFMRVRURV9TSVpFCSgyNTYgKiA0KQogI2RlZmluZSBDTURfQlVGRl9TSVpFCSgxMDI0ICogNTApCiAKKy8qIE5PVEU6IHRoZSBwYWxldHRlIGFuZCBmcmFtZSBkbWEgZGVzY3JpcHRvcnMgYXJlIGRvdWJsZWQgdG8gYWxsb3cKKyAqIHRoZSAybmQgc2V0IGZvciBicmFuY2ggc2V0dGluZ3MgKEZCUngpCisgKi8KIHN0cnVjdCBweGFmYl9kbWFfYnVmZiB7CiAJdW5zaWduZWQgY2hhciBwYWxldHRlW1BBTF9NQVggKiBQQUxFVFRFX1NJWkVdOwogCXVpbnQxNl90IGNtZF9idWZmW0NNRF9CVUZGX1NJWkVdOwotCXN0cnVjdCBweGFmYl9kbWFfZGVzY3JpcHRvciBwYWxfZGVzY1tQQUxfTUFYXTsKLQlzdHJ1Y3QgcHhhZmJfZG1hX2Rlc2NyaXB0b3IgZG1hX2Rlc2NbRE1BX01BWF07CisJc3RydWN0IHB4YWZiX2RtYV9kZXNjcmlwdG9yIHBhbF9kZXNjW1BBTF9NQVggKiAyXTsKKwlzdHJ1Y3QgcHhhZmJfZG1hX2Rlc2NyaXB0b3IgZG1hX2Rlc2NbRE1BX01BWCAqIDJdOworfTsKKworZW51bSB7CisJT1ZFUkxBWTEsCisJT1ZFUkxBWTIsCit9OworCitlbnVtIHsKKwlPVkVSTEFZX0ZPUk1BVF9SR0IgPSAwLAorCU9WRVJMQVlfRk9STUFUX1lVVjQ0NF9QQUNLRUQsCisJT1ZFUkxBWV9GT1JNQVRfWVVWNDQ0X1BMQU5BUiwKKwlPVkVSTEFZX0ZPUk1BVF9ZVVY0MjJfUExBTkFSLAorCU9WRVJMQVlfRk9STUFUX1lVVjQyMF9QTEFOQVIsCit9OworCisjZGVmaW5lIE5PTlNURF9UT19YUE9TKHgpCSgoKHgpID4+IDApICAmIDB4M2ZmKQorI2RlZmluZSBOT05TVERfVE9fWVBPUyh4KQkoKCh4KSA+PiAxMCkgJiAweDNmZikKKyNkZWZpbmUgTk9OU1REX1RPX1BGT1IoeCkJKCgoeCkgPj4gMjApICYgMHg3KQorCitzdHJ1Y3QgcHhhZmJfbGF5ZXI7CisKK3N0cnVjdCBweGFmYl9sYXllcl9vcHMgeworCXZvaWQgKCplbmFibGUpKHN0cnVjdCBweGFmYl9sYXllciAqKTsKKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IHB4YWZiX2xheWVyICopOworCXZvaWQgKCpzZXR1cCkoc3RydWN0IHB4YWZiX2xheWVyICopOworfTsKKworc3RydWN0IHB4YWZiX2xheWVyIHsKKwlzdHJ1Y3QgZmJfaW5mbwkJZmI7CisJaW50CQkJaWQ7CisJYXRvbWljX3QJCXVzYWdlOworCXVpbnQzMl90CQljb250cm9sWzJdOworCisJc3RydWN0IHB4YWZiX2xheWVyX29wcwkqb3BzOworCisJdm9pZCBfX2lvbWVtCQkqdmlkZW9fbWVtOworCXVuc2lnbmVkIGxvbmcJCXZpZGVvX21lbV9waHlzOworCXNpemVfdAkJCXZpZGVvX21lbV9zaXplOworCXN0cnVjdCBjb21wbGV0aW9uCWJyYW5jaF9kb25lOworCisJc3RydWN0IHB4YWZiX2luZm8JKmZiaTsKIH07CiAKIHN0cnVjdCBweGFmYl9pbmZvIHsKQEAgLTY5LDI0ICsxMTMsMTUgQEAKIAl2b2lkIF9faW9tZW0JCSptbWlvX2Jhc2U7CiAKIAlzdHJ1Y3QgcHhhZmJfZG1hX2J1ZmYJKmRtYV9idWZmOworCXNpemVfdAkJCWRtYV9idWZmX3NpemU7CiAJZG1hX2FkZHJfdAkJZG1hX2J1ZmZfcGh5czsKLQlkbWFfYWRkcl90CQlmZGFkcltETUFfTUFYXTsKKwlkbWFfYWRkcl90CQlmZGFkcltETUFfTUFYICogMl07CiAKLQkvKgotCSAqIFRoZXNlIGFyZSB0aGUgYWRkcmVzc2VzIHdlIG1hcHBlZAotCSAqIHRoZSBmcmFtZWJ1ZmZlciBtZW1vcnkgcmVnaW9uIHRvLgotCSAqLwotCS8qIHJhdyBtZW1vcnkgYWRkcmVzc2VzICovCi0JZG1hX2FkZHJfdAkJbWFwX2RtYTsJLyogcGh5c2ljYWwgKi8KLQl1X2NoYXIgKgkJbWFwX2NwdTsJLyogdmlydHVhbCAqLwotCXVfaW50CQkJbWFwX3NpemU7Ci0KLQkvKiBhZGRyZXNzZXMgb2YgcGllY2VzIHBsYWNlZCBpbiByYXcgYnVmZmVyICovCi0JdV9jaGFyICoJCXNjcmVlbl9jcHU7CS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQlkbWFfYWRkcl90CQlzY3JlZW5fZG1hOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCXZvaWQgX19pb21lbQkJKnZpZGVvX21lbTsJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcJCXZpZGVvX21lbV9waHlzOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCXNpemVfdAkJCXZpZGVvX21lbV9zaXplOwkvKiBzaXplIG9mIHRoZSBmcmFtZSBidWZmZXIgKi8KIAl1MTYgKgkJCXBhbGV0dGVfY3B1OwkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgcGFsZXR0ZSBtZW1vcnkgKi8KIAl1X2ludAkJCXBhbGV0dGVfc2l6ZTsKLQlzc2l6ZV90CQkJdmlkZW9fb2Zmc2V0OwogCiAJdV9pbnQJCQlsY2NyMDsKIAl1X2ludAkJCWxjY3IzOwpAQCAtMTIwLDEwICsxNTUsMTcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnNtYXJ0X3RocmVhZDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZCX1BYQV9PVkVSTEFZCisJc3RydWN0IHB4YWZiX2xheWVyCW92ZXJsYXlbMl07CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCXN0cnVjdCBub3RpZmllcl9ibG9jawlmcmVxX3RyYW5zaXRpb247CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWZyZXFfcG9saWN5OwogI2VuZGlmCisKKwl2b2lkICgqbGNkX3Bvd2VyKShpbnQsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqKTsKKwl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwogfTsKIAogI2RlZmluZSBUT19JTkYocHRyLG1lbWJlcikgY29udGFpbmVyX29mKHB0cixzdHJ1Y3QgcHhhZmJfaW5mbyxtZW1iZXIpCkBAIC0xNDgsNCArMTkwLDEwIEBACiAjZGVmaW5lIE1JTl9YUkVTCTY0CiAjZGVmaW5lIE1JTl9ZUkVTCTY0CiAKKy8qIG1heGltdW0gWCBhbmQgWSByZXNvbHV0aW9ucyAtIG5vdGUgdGhlc2UgYXJlIGxpbWl0cyBmcm9tIHRoZSByZWdpc3RlcgorICogYml0cyBsZW5ndGggaW5zdGVhZCBvZiB0aGUgcmVhbCBvbmVzCisgKi8KKyNkZWZpbmUgTUFYX1hSRVMJMTAyNAorI2RlZmluZSBNQVhfWVJFUwkxMDI0CisKICNlbmRpZiAvKiBfX1BYQUZCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IGMwNTJiZDQuLjA3NmY5NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogICoJLSBjb252ZXJ0IGRtYSBhZGRyZXNzIHR5cGVzIHRvIGRtYV9hZGRyX3QKICAqCS0gcmVtb3ZlIHVudXNlZCAnbW9udHlwZScgc3R1ZmYKICAqCS0gcmVtb3ZlIHJlZHVuZGFudCB6ZXJvIGluaXRzIG9mIGluaXRfdmFyIGFmdGVyIHRoZSBpbml0aWFsCi0gKgkgIG1lbXplcm8uCisgKgkgIG1lbXNldC4KICAqCS0gcmVtb3ZlIGFsbG93X21vZGVzZXQgKGFjb3JuZmIgaWRlYSBkb2VzIG5vdCBiZWxvbmcgaGVyZSkKICAqCiAgKiAyMDAxLzA1LzI4OiA8cm1rQGFybS5saW51eC5vcmcudWs+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCmluZGV4IDViNzhmZDAuLjAxOGMwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpby5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCS8qIEFzc2lnbiBhIHVuaXF1ZSBkZXZpY2UgaW5kZXggYW5kIGhlbmNlIG5hbWUuICovCiAJZGV2LT5pbmRleCA9IGRldl9pbmRleCsrOwotCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCAidmlydGlvJXUiLCBkZXYtPmluZGV4KTsKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAidmlydGlvJXUiLCBkZXYtPmluZGV4KTsKIAogCS8qIFdlIGFsd2F5cyBzdGFydCBieSByZXNldHRpbmcgdGhlIGRldmljZSwgaW4gY2FzZSBhIHByZXZpb3VzCiAJICogZHJpdmVyIG1lc3NlZCBpdCB1cC4gIFRoaXMgYWxzbyB0ZXN0cyB0aGF0IGNvZGUgcGF0aCBhIGxpdHRsZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDYyZWFiNDMuLjU5MjY4MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtNTYsNiArNTYsMTUgQEAKIAl7IDAgfSwKIH07CiAKK3N0YXRpYyB1MzIgcGFnZV90b19iYWxsb29uX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCisJQlVJTERfQlVHX09OKFBBR0VfU0hJRlQgPCBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQpOworCS8qIENvbnZlcnQgcGZuIGZyb20gTGludXggcGFnZSBzaXplIHRvIGJhbGxvb24gcGFnZSBzaXplLiAqLworCXJldHVybiBwZm4gPj4gKFBBR0VfU0hJRlQgLSBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQpOworfQorCiBzdGF0aWMgdm9pZCBiYWxsb29uX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIHsKIAlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiOwpAQCAtOTksNyArMTA4LDcgQEAKIAkJCW1zbGVlcCgyMDApOwogCQkJYnJlYWs7CiAJCX0KLQkJdmItPnBmbnNbdmItPm51bV9wZm5zXSA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCQl2Yi0+cGZuc1t2Yi0+bnVtX3BmbnNdID0gcGFnZV90b19iYWxsb29uX3BmbihwYWdlKTsKIAkJdG90YWxyYW1fcGFnZXMtLTsKIAkJdmItPm51bV9wYWdlcysrOwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmdmItPnBhZ2VzKTsKQEAgLTEzMiw3ICsxNDEsNyBAQAogCWZvciAodmItPm51bV9wZm5zID0gMDsgdmItPm51bV9wZm5zIDwgbnVtOyB2Yi0+bnVtX3BmbnMrKykgewogCQlwYWdlID0gbGlzdF9maXJzdF9lbnRyeSgmdmItPnBhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCXZiLT5wZm5zW3ZiLT5udW1fcGZuc10gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwkJdmItPnBmbnNbdmItPm51bV9wZm5zXSA9IHBhZ2VfdG9fYmFsbG9vbl9wZm4ocGFnZSk7CiAJCXZiLT5udW1fcGFnZXMtLTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCBjN2RjMzdjLi4yNjVmZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC03NSw3ICs3NSw3IEBACiAgKiB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZm9yIHZpcnRpbyB0byBub3QgaW5zaXN0IG9uIGhhdmluZyBpdCdzIG93biBkZXZpY2UuICovCiBzdGF0aWMgc3RydWN0IGRldmljZSB2aXJ0aW9fcGNpX3Jvb3QgPSB7CiAJLnBhcmVudAkJPSBOVUxMLAotCS5idXNfaWQJCT0gInZpcnRpby1wY2kiLAorCS5pbml0X25hbWUJPSAidmlydGlvLXBjaSIsCiB9OwogCiAvKiBDb252ZXJ0IGEgZ2VuZXJpYyB2aXJ0aW8gZGV2aWNlIHRvIG91ciBzdHJ1Y3R1cmUgKi8KQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwogCXN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8gKmluZm87CiAJc3RydWN0IHZpcnRxdWV1ZSAqdnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBzaXplOwogCXUxNiBudW07CiAJaW50IGVycjsKIApAQCAtMjM3LDE5ICsyMzcsMjAgQEAKIAlpbmZvLT5xdWV1ZV9pbmRleCA9IGluZGV4OwogCWluZm8tPm51bSA9IG51bTsKIAotCWluZm8tPnF1ZXVlID0ga3phbGxvYyhQQUdFX0FMSUdOKHZyaW5nX3NpemUobnVtLFBBR0VfU0laRSkpLCBHRlBfS0VSTkVMKTsKKwlzaXplID0gUEFHRV9BTElHTih2cmluZ19zaXplKG51bSwgVklSVElPX1BDSV9WUklOR19BTElHTikpOworCWluZm8tPnF1ZXVlID0gYWxsb2NfcGFnZXNfZXhhY3Qoc2l6ZSwgR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKIAlpZiAoaW5mby0+cXVldWUgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9pbmZvOwogCX0KIAogCS8qIGFjdGl2YXRlIHRoZSBxdWV1ZSAqLwotCWlvd3JpdGUzMih2aXJ0X3RvX3BoeXMoaW5mby0+cXVldWUpID4+IFBBR0VfU0hJRlQsCisJaW93cml0ZTMyKHZpcnRfdG9fcGh5cyhpbmZvLT5xdWV1ZSkgPj4gVklSVElPX1BDSV9RVUVVRV9BRERSX1NISUZULAogCQkgIHZwX2Rldi0+aW9hZGRyICsgVklSVElPX1BDSV9RVUVVRV9QRk4pOwogCiAJLyogY3JlYXRlIHRoZSB2cmluZyAqLwotCXZxID0gdnJpbmdfbmV3X3ZpcnRxdWV1ZShpbmZvLT5udW0sIHZkZXYsIGluZm8tPnF1ZXVlLAotCQkJCSB2cF9ub3RpZnksIGNhbGxiYWNrKTsKKwl2cSA9IHZyaW5nX25ld192aXJ0cXVldWUoaW5mby0+bnVtLCBWSVJUSU9fUENJX1ZSSU5HX0FMSUdOLAorCQkJCSB2ZGV2LCBpbmZvLT5xdWV1ZSwgdnBfbm90aWZ5LCBjYWxsYmFjayk7CiAJaWYgKCF2cSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9hY3RpdmF0ZV9xdWV1ZTsKQEAgLTI2Niw3ICsyNjcsNyBAQAogCiBvdXRfYWN0aXZhdGVfcXVldWU6CiAJaW93cml0ZTMyKDAsIHZwX2Rldi0+aW9hZGRyICsgVklSVElPX1BDSV9RVUVVRV9QRk4pOwotCWtmcmVlKGluZm8tPnF1ZXVlKTsKKwlmcmVlX3BhZ2VzX2V4YWN0KGluZm8tPnF1ZXVlLCBzaXplKTsKIG91dF9pbmZvOgogCWtmcmVlKGluZm8pOwogCXJldHVybiBFUlJfUFRSKGVycik7CkBAIC0yNzcsNyArMjc4LDcgQEAKIHsKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2cS0+dmRldik7CiAJc3RydWN0IHZpcnRpb19wY2lfdnFfaW5mbyAqaW5mbyA9IHZxLT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncywgc2l6ZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmaW5mby0+bm9kZSk7CkBAIC0yODksNyArMjkwLDggQEAKIAlpb3dyaXRlMTYoaW5mby0+cXVldWVfaW5kZXgsIHZwX2Rldi0+aW9hZGRyICsgVklSVElPX1BDSV9RVUVVRV9TRUwpOwogCWlvd3JpdGUzMigwLCB2cF9kZXYtPmlvYWRkciArIFZJUlRJT19QQ0lfUVVFVUVfUEZOKTsKIAotCWtmcmVlKGluZm8tPnF1ZXVlKTsKKwlzaXplID0gUEFHRV9BTElHTih2cmluZ19zaXplKGluZm8tPm51bSwgVklSVElPX1BDSV9WUklOR19BTElHTikpOworCWZyZWVfcGFnZXNfZXhhY3QoaW5mby0+cXVldWUsIHNpemUpOwogCWtmcmVlKGluZm8pOwogfQogCkBAIC0zMDUsNiArMzA3LDIwIEBACiAJLmZpbmFsaXplX2ZlYXR1cmVzID0gdnBfZmluYWxpemVfZmVhdHVyZXMsCiB9OwogCitzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQoreworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLCBkZXYpOworCXN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB2cF9kZXYtPnBjaV9kZXY7CisKKwlmcmVlX2lycShwY2lfZGV2LT5pcnEsIHZwX2Rldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXBjaV9pb3VubWFwKHBjaV9kZXYsIHZwX2Rldi0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKKwlrZnJlZSh2cF9kZXYpOworfQorCiAvKiB0aGUgUENJIHByb2JpbmcgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtMzI4LDYgKzM0NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJdnBfZGV2LT52ZGV2LmRldi5wYXJlbnQgPSAmdmlydGlvX3BjaV9yb290OworCXZwX2Rldi0+dmRldi5kZXYucmVsZWFzZSA9IHZpcnRpb19wY2lfcmVsZWFzZV9kZXY7CiAJdnBfZGV2LT52ZGV2LmNvbmZpZyA9ICZ2aXJ0aW9fcGNpX2NvbmZpZ19vcHM7CiAJdnBfZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKIAlJTklUX0xJU1RfSEVBRCgmdnBfZGV2LT52aXJ0cXVldWVzKTsKQEAgLTM1Nyw3ICszNzQsNyBAQAogCiAJLyogcmVnaXN0ZXIgYSBoYW5kbGVyIGZvciB0aGUgcXVldWUgd2l0aCB0aGUgUENJIGRldmljZSdzIGludGVycnVwdCAqLwogCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+cGNpX2Rldi0+aXJxLCB2cF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICB2cF9kZXYtPnZkZXYuZGV2LmJ1c19pZCwgdnBfZGV2KTsKKwkJCSAgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCB2cF9kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3NldF9kcnZkYXRhOwogCkBAIC0zODcsMTIgKzQwNCw2IEBACiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKIAl1bnJlZ2lzdGVyX3ZpcnRpb19kZXZpY2UoJnZwX2Rldi0+dmRldik7Ci0JZnJlZV9pcnEocGNpX2Rldi0+aXJxLCB2cF9kZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKLQlwY2lfaW91bm1hcChwY2lfZGV2LCB2cF9kZXYtPmlvYWRkcik7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7Ci0Ja2ZyZWUodnBfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggNmViNTMwMy4uNTc3NzE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0yNzQsNiArMjc0LDcgQEAKIH07CiAKIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQgaW50IG51bSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdnJpbmdfYWxpZ24sCiAJCQkJICAgICAgc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsCiAJCQkJICAgICAgdm9pZCAqcGFnZXMsCiAJCQkJICAgICAgdm9pZCAoKm5vdGlmeSkoc3RydWN0IHZpcnRxdWV1ZSAqKSwKQEAgLTI5Miw3ICsyOTMsNyBAQAogCWlmICghdnEpCiAJCXJldHVybiBOVUxMOwogCi0JdnJpbmdfaW5pdCgmdnEtPnZyaW5nLCBudW0sIHBhZ2VzLCBQQUdFX1NJWkUpOworCXZyaW5nX2luaXQoJnZxLT52cmluZywgbnVtLCBwYWdlcywgdnJpbmdfYWxpZ24pOwogCXZxLT52cS5jYWxsYmFjayA9IGNhbGxiYWNrOwogCXZxLT52cS52ZGV2ID0gdmRldjsKIAl2cS0+dnEudnFfb3BzID0gJnZyaW5nX3ZxX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCBmN2Y2Y2U4Li5lMzE5MjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC00Miw3ICs0Miw3IEBACiAjdW5kZWYgUzNDX1ZBX1dBVENIRE9HCiAjZGVmaW5lIFMzQ19WQV9XQVRDSERPRyAoMCkKIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXdhdGNoZG9nLmg+CiAKICNkZWZpbmUgUEZYICJzM2MyNDEwLXdkdDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IGVkMDFlNGMuLmUxOWI0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgpAQCAtMzUsOCArMzYsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgT1NDUl9GUkVRCQlDTE9DS19USUNLX1JBVEUKLQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb3Njcl9mcmVxOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2ExMTAwd2R0X3VzZXJzOwogc3RhdGljIGludCBwcmVfbWFyZ2luOwogc3RhdGljIGludCBib290X3N0YXR1czsKQEAgLTEyMywxMiArMTIzLDEyIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXByZV9tYXJnaW4gPSBPU0NSX0ZSRVEgKiB0aW1lOworCQlwcmVfbWFyZ2luID0gb3Njcl9mcmVxICogdGltZTsKIAkJT1NNUjMgPSBPU0NSICsgcHJlX21hcmdpbjsKIAkJLypmYWxsIHRocm91Z2gqLwogCiAJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgotCQlyZXQgPSBwdXRfdXNlcihwcmVfbWFyZ2luIC8gT1NDUl9GUkVRLCBwKTsKKwkJcmV0ID0gcHV0X3VzZXIocHJlX21hcmdpbiAvIG9zY3JfZnJlcSwgcCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTU1LDYgKzE1NSw4IEBACiB7CiAJaW50IHJldDsKIAorCW9zY3JfZnJlcSA9IGdldF9jbG9ja190aWNrX3JhdGUoKTsKKwogCS8qCiAJICogUmVhZCB0aGUgcmVzZXQgc3RhdHVzLCBhbmQgc2F2ZSBpdCBmb3IgbGF0ZXIuICBJZgogCSAqIHdlIHN1c3BlbmQsIFJDU1Igd2lsbCBiZSBjbGVhcmVkLCBhbmQgdGhlIHdhdGNoZG9nCkBAIC0xNjIsNyArMTY0LDcgQEAKIAkgKi8KIAlib290X3N0YXR1cyA9IChyZXNldF9zdGF0dXMgJiBSRVNFVF9TVEFUVVNfV0FUQ0hET0cpID8KIAkJCQlXRElPRl9DQVJEUkVTRVQgOiAwOwotCXByZV9tYXJnaW4gPSBPU0NSX0ZSRVEgKiBtYXJnaW47CisJcHJlX21hcmdpbiA9IG9zY3JfZnJlcSAqIG1hcmdpbjsKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnNhMTEwMGRvZ19taXNjZGV2KTsKIAlpZiAocmV0ID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IDFlM2I5MzQuLjQ2NjI1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xNDEsOCArMTQxLDEyIEBACiAJaW50IGk7CiAKIAkvKiBCeSBkZWZhdWx0IGFsbCBldmVudCBjaGFubmVscyBub3RpZnkgQ1BVIzAuICovCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCiAJCWRlc2MtPmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoMCk7CisJfQogI2VuZGlmCiAKIAltZW1zZXQoY3B1X2V2dGNobiwgMCwgc2l6ZW9mKGNwdV9ldnRjaG4pKTsKQEAgLTIyOSwxNSArMjMzLDIwIEBACiBzdGF0aWMgaW50IGZpbmRfdW5ib3VuZF9pcnEodm9pZCkKIHsKIAlpbnQgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCS8qIE9ubHkgYWxsb2NhdGUgZnJvbSBkeW5pcnEgcmFuZ2UgKi8KLQlmb3JfZWFjaF9pcnFfbnIoaXJxKQorCWZvciAoaXJxID0gMDsgaXJxIDwgbnJfaXJxczsgaXJxKyspCiAJCWlmIChpcnFfYmluZGNvdW50W2lycV0gPT0gMCkKIAkJCWJyZWFrOwogCiAJaWYgKGlycSA9PSBucl9pcnFzKQogCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBucl9pcnFzIVxuIik7CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KGlycSwgMCk7CisJaWYgKFdBUk5fT04oZGVzYyA9PSBOVUxMKSkKKwkJcmV0dXJuIC0xOworCiAJcmV0dXJuIGlycTsKIH0KIApAQCAtNzkyLDcgKzgwMSw3IEBACiAJCW1hc2tfZXZ0Y2huKGV2dGNobik7CiAKIAkvKiBObyBJUlEgPC0+IGV2ZW50LWNoYW5uZWwgbWFwcGluZ3MuICovCi0JZm9yX2VhY2hfaXJxX25yKGlycSkKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKQogCQlpcnFfaW5mb1tpcnFdLmV2dGNobiA9IDA7IC8qIHphcCBldmVudC1jaGFubmVsIGJpbmRpbmcgKi8KIAogCWZvciAoZXZ0Y2huID0gMDsgZXZ0Y2huIDwgTlJfRVZFTlRfQ0hBTk5FTFM7IGV2dGNobisrKQpAQCAtODI0LDcgKzgzMyw3IEBACiAJCW1hc2tfZXZ0Y2huKGkpOwogCiAJLyogRHluYW1pYyBJUlEgc3BhY2UgaXMgY3VycmVudGx5IHVuYm91bmQuIFplcm8gdGhlIHJlZmNudHMuICovCi0JZm9yX2VhY2hfaXJxX25yKGkpCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKIAkJaXJxX2JpbmRjb3VudFtpXSA9IDA7CiAKIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNDk5M2E0Yi4uNjk2ODM4ODggMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0xNTAsMjcgKzE1MCwxNSBAQAogJChvYmopLyU6ICQob2JqKS8lLmloZXggfCAkKG9ianRyZWUpLyQob2JqKS8kJChkaXIgJSkKIAkkKGNhbGwgY21kLGloZXgpCiAKLSMgRG9uJ3QgZGVwZW5kIG9uIGloZXgyZncgaWYgd2UncmUgaW5zdGFsbGluZyBhbmQgaXQgYWxyZWFkeSBleGlzdHMuCi0jIFB1dHRpbmcgaXQgYWZ0ZXIgfCBpbiB0aGUgZGVwZW5kZW5jaWVzIGRvZXNuJ3Qgc2VlbSBzdWZmaWNpZW50IHdoZW4KLSMgd2UncmUgaW5zdGFsbGluZyBhZnRlciBhIGNyb3NzLWNvbXBpbGUsIGJlY2F1c2UgaWhleDJmdyBoYXMgZGVwZW5kZW5jaWVzCi0jIG9uIHN0dWZmIGxpa2UgL3Vzci9saWIvZ2NjL3BwYzY0LXJlZGhhdC1saW51eC80LjMuMC9pbmNsdWRlL3N0ZGRlZi5oIGFuZCAKLSMgdGh1cyB3YW50cyB0byBiZSByZWJ1aWx0LiBXaGljaCBpdCBjYW4ndCBiZSwgaWYgdGhlIHByZWJ1aWx0IGtlcm5lbCB0cmVlCi0jIGlzIGV4cG9ydGVkIHJlYWQtb25seSBmb3Igc29tZW9uZSB0byBydW4gJ21ha2UgaW5zdGFsbCcuCi1pZmVxICgkKElOU1RBTEwpOiQod2lsZGNhcmQgJChvYmopL2loZXgyZncpLGluc3RhbGw6JChvYmopL2loZXgyZncpCi1paGV4MmZ3X2RlcCA6PQotZWxzZQotaWhleDJmd19kZXAgOj0gJChvYmopL2loZXgyZncKLWVuZGlmCi0KICMgLkhFWCBpcyBhbHNvIEludGVsIEhFWCwgYnV0IHdoZXJlIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBpbiBlYWNoIHJlY29yZAogIyBpcyBhY3R1YWxseSBtZWFuaW5nZnVsLCBiZWNhdXNlIHRoZSBmaXJtd2FyZSBoYXMgdG8gYmUgbG9hZGVkIGluIGEgY2VydGFpbgogIyBvcmRlciByYXRoZXIgdGhhbiBhcyBhIHNpbmdsZSBiaW5hcnkgYmxvYi4gVGh1cywgd2UgY29udmVydCB0aGVtIGludG8gb3VyCiAjIG1vcmUgY29tcGFjdCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgaWhleCByZWNvcmRzICg8bGludXgvaWhleC5oPikKLSQob2JqKS8lLmZ3OiAkKG9iaikvJS5IRVggJChpaGV4MmZ3X2RlcCkgfCAkKG9ianRyZWUpLyQob2JqKS8kJChkaXIgJSkKKyQob2JqKS8lLmZ3OiAkKG9iaikvJS5IRVggJChvYmopL2loZXgyZncgfCAkKG9ianRyZWUpLyQob2JqKS8kJChkaXIgJSkKIAkkKGNhbGwgY21kLGloZXgyZncpCiAKICMgLkgxNiBpcyBvdXIgb3duIG1vZGlmaWVkIGZvcm0gb2YgSW50ZWwgSEVYLCB3aXRoIDE2LWJpdCBsZW5ndGggZm9yIHJlY29yZHMuCi0kKG9iaikvJS5mdzogJChvYmopLyUuSDE2ICQoaWhleDJmd19kZXApIHwgJChvYmp0cmVlKS8kKG9iaikvJCQoZGlyICUpCiskKG9iaikvJS5mdzogJChvYmopLyUuSDE2ICQob2JqKS9paGV4MmZ3IHwgJChvYmp0cmVlKS8kKG9iaikvJCQoZGlyICUpCiAJJChjYWxsIGNtZCxoMTZ0b2Z3KQogCiAkKGZpcm13YXJlLWRpcnMpOgpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBmNjU4NDQxLi5kNmY4OWQzIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMTkxLDIzICsxOTEsMTEgQEAKIAlrdW5tYXBfYXRvbWljKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKV9fZXZlbnQgJiBQQUdFX01BU0spLCBrbSk7IFwKIH0gd2hpbGUoMCkKIAotCi0vKiBfX3B1dF9pb2N0eAotICoJQ2FsbGVkIHdoZW4gdGhlIGxhc3QgdXNlciBvZiBhbiBhaW8gY29udGV4dCBoYXMgZ29uZSBhd2F5LAotICoJYW5kIHRoZSBzdHJ1Y3QgbmVlZHMgdG8gYmUgZnJlZWQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fcHV0X2lvY3R4KHN0cnVjdCBraW9jdHggKmN0eCkKK3N0YXRpYyB2b2lkIGN0eF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CisJc3RydWN0IGtpb2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBraW9jdHgsIHJjdV9oZWFkKTsKIAl1bnNpZ25lZCBucl9ldmVudHMgPSBjdHgtPm1heF9yZXFzOwogCi0JQlVHX09OKGN0eC0+cmVxc19hY3RpdmUpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmY3R4LT53cSk7Ci0JY2FuY2VsX3dvcmtfc3luYygmY3R4LT53cS53b3JrKTsKLQlhaW9fZnJlZV9yaW5nKGN0eCk7Ci0JbW1kcm9wKGN0eC0+bW0pOwotCWN0eC0+bW0gPSBOVUxMOwotCXByX2RlYnVnKCJfX3B1dF9pb2N0eDogZnJlZWluZyAlcFxuIiwgY3R4KTsKIAlrbWVtX2NhY2hlX2ZyZWUoa2lvY3R4X2NhY2hlcCwgY3R4KTsKIAogCWlmIChucl9ldmVudHMpIHsKQEAgLTIxOCw2ICsyMDYsMjMgQEAKIAl9CiB9CiAKKy8qIF9fcHV0X2lvY3R4CisgKglDYWxsZWQgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIGFuIGFpbyBjb250ZXh0IGhhcyBnb25lIGF3YXksCisgKglhbmQgdGhlIHN0cnVjdCBuZWVkcyB0byBiZSBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQgX19wdXRfaW9jdHgoc3RydWN0IGtpb2N0eCAqY3R4KQoreworCUJVR19PTihjdHgtPnJlcXNfYWN0aXZlKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmN0eC0+d3EpOworCWNhbmNlbF93b3JrX3N5bmMoJmN0eC0+d3Eud29yayk7CisJYWlvX2ZyZWVfcmluZyhjdHgpOworCW1tZHJvcChjdHgtPm1tKTsKKwljdHgtPm1tID0gTlVMTDsKKwlwcl9kZWJ1ZygiX19wdXRfaW9jdHg6IGZyZWVpbmcgJXBcbiIsIGN0eCk7CisJY2FsbF9yY3UoJmN0eC0+cmN1X2hlYWQsIGN0eF9yY3VfZnJlZSk7Cit9CisKICNkZWZpbmUgZ2V0X2lvY3R4KGtpb2N0eCkgZG8gewkJCQkJCVwKIAlCVUdfT04oYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCk7CQkJXAogCWF0b21pY19pbmMoJihraW9jdHgpLT51c2Vycyk7CQkJCQlcCkBAIC0yMzUsNiArMjQwLDcgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3Qga2lvY3R4ICpjdHg7CisJaW50IGRpZF9zeW5jID0gMDsKIAogCS8qIFByZXZlbnQgb3ZlcmZsb3dzICovCiAJaWYgKChucl9ldmVudHMgPiAoMHgxMDAwMDAwMFUgLyBzaXplb2Yoc3RydWN0IGlvX2V2ZW50KSkpIHx8CkBAIC0yNjcsMjEgKzI3MywzMCBAQAogCQlnb3RvIG91dF9mcmVlY3R4OwogCiAJLyogbGltaXQgdGhlIG51bWJlciBvZiBzeXN0ZW0gd2lkZSBhaW9zICovCi0Jc3Bpbl9sb2NrKCZhaW9fbnJfbG9jayk7Ci0JaWYgKGFpb19uciArIGN0eC0+bWF4X3JlcXMgPiBhaW9fbWF4X25yIHx8Ci0JICAgIGFpb19uciArIGN0eC0+bWF4X3JlcXMgPCBhaW9fbnIpCi0JCWN0eC0+bWF4X3JlcXMgPSAwOwotCWVsc2UKLQkJYWlvX25yICs9IGN0eC0+bWF4X3JlcXM7Ci0Jc3Bpbl91bmxvY2soJmFpb19ucl9sb2NrKTsKKwlkbyB7CisJCXNwaW5fbG9ja19iaCgmYWlvX25yX2xvY2spOworCQlpZiAoYWlvX25yICsgbnJfZXZlbnRzID4gYWlvX21heF9uciB8fAorCQkgICAgYWlvX25yICsgbnJfZXZlbnRzIDwgYWlvX25yKQorCQkJY3R4LT5tYXhfcmVxcyA9IDA7CisJCWVsc2UKKwkJCWFpb19uciArPSBjdHgtPm1heF9yZXFzOworCQlzcGluX3VubG9ja19iaCgmYWlvX25yX2xvY2spOworCQlpZiAoY3R4LT5tYXhfcmVxcyB8fCBkaWRfc3luYykKKwkJCWJyZWFrOworCisJCS8qIHdhaXQgZm9yIHJjdSBjYWxsYmFja3MgdG8gaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIGdpdmluZyB1cCAqLworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJZGlkX3N5bmMgPSAxOworCQljdHgtPm1heF9yZXFzID0gbnJfZXZlbnRzOworCX0gd2hpbGUgKDEpOworCiAJaWYgKGN0eC0+bWF4X3JlcXMgPT0gMCkKIAkJZ290byBvdXRfY2xlYW51cDsKIAogCS8qIG5vdyBsaW5rIGludG8gZ2xvYmFsIGxpc3QuICovCi0Jd3JpdGVfbG9jaygmbW0tPmlvY3R4X2xpc3RfbG9jayk7Ci0JY3R4LT5uZXh0ID0gbW0tPmlvY3R4X2xpc3Q7Ci0JbW0tPmlvY3R4X2xpc3QgPSBjdHg7Ci0Jd3JpdGVfdW5sb2NrKCZtbS0+aW9jdHhfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJm1tLT5pb2N0eF9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmN0eC0+bGlzdCwgJm1tLT5pb2N0eF9saXN0KTsKKwlzcGluX3VubG9jaygmbW0tPmlvY3R4X2xvY2spOwogCiAJZHByaW50aygiYWlvOiBhbGxvY2F0ZWQgaW9jdHggJXBbJWxkXTogbW09JXAgbWFzaz0weCV4XG4iLAogCQljdHgsIGN0eC0+dXNlcl9pZCwgY3VycmVudC0+bW0sIGN0eC0+cmluZ19pbmZvLm5yKTsKQEAgLTM3NSwxMSArMzkwLDEyIEBACiAgKi8KIHZvaWQgZXhpdF9haW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0Jc3RydWN0IGtpb2N0eCAqY3R4ID0gbW0tPmlvY3R4X2xpc3Q7Ci0JbW0tPmlvY3R4X2xpc3QgPSBOVUxMOwotCXdoaWxlIChjdHgpIHsKLQkJc3RydWN0IGtpb2N0eCAqbmV4dCA9IGN0eC0+bmV4dDsKLQkJY3R4LT5uZXh0ID0gTlVMTDsKKwlzdHJ1Y3Qga2lvY3R4ICpjdHg7CisKKwl3aGlsZSAoIWhsaXN0X2VtcHR5KCZtbS0+aW9jdHhfbGlzdCkpIHsKKwkJY3R4ID0gaGxpc3RfZW50cnkobW0tPmlvY3R4X2xpc3QuZmlyc3QsIHN0cnVjdCBraW9jdHgsIGxpc3QpOworCQlobGlzdF9kZWxfcmN1KCZjdHgtPmxpc3QpOworCiAJCWFpb19jYW5jZWxfYWxsKGN0eCk7CiAKIAkJd2FpdF9mb3JfYWxsX2Fpb3MoY3R4KTsKQEAgLTM5NCw3ICs0MTAsNiBAQAogCQkJCWF0b21pY19yZWFkKCZjdHgtPnVzZXJzKSwgY3R4LT5kZWFkLAogCQkJCWN0eC0+cmVxc19hY3RpdmUpOwogCQlwdXRfaW9jdHgoY3R4KTsKLQkJY3R4ID0gbmV4dDsKIAl9CiB9CiAKQEAgLTU1NSwxOSArNTcwLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3Qga2lvY3R4ICpsb29rdXBfaW9jdHgodW5zaWduZWQgbG9uZyBjdHhfaWQpCiB7Ci0Jc3RydWN0IGtpb2N0eCAqaW9jdHg7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qga2lvY3R4ICpjdHggPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JbW0gPSBjdXJyZW50LT5tbTsKLQlyZWFkX2xvY2soJm1tLT5pb2N0eF9saXN0X2xvY2spOwotCWZvciAoaW9jdHggPSBtbS0+aW9jdHhfbGlzdDsgaW9jdHg7IGlvY3R4ID0gaW9jdHgtPm5leHQpCi0JCWlmIChsaWtlbHkoaW9jdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFpb2N0eC0+ZGVhZCkpIHsKLQkJCWdldF9pb2N0eChpb2N0eCk7CisJcmN1X3JlYWRfbG9jaygpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0eCwgbiwgJm1tLT5pb2N0eF9saXN0LCBsaXN0KSB7CisJCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQpIHsKKwkJCWdldF9pb2N0eChjdHgpOwogCQkJYnJlYWs7CiAJCX0KLQlyZWFkX3VubG9jaygmbW0tPmlvY3R4X2xpc3RfbG9jayk7CisJfQogCi0JcmV0dXJuIGlvY3R4OworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBjdHg7CiB9CiAKIC8qCkBAIC0xMjE1LDE5ICsxMjMyLDE0IEBACiBzdGF0aWMgdm9pZCBpb19kZXN0cm95KHN0cnVjdCBraW9jdHggKmlvY3R4KQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0Jc3RydWN0IGtpb2N0eCAqKnRtcDsKIAlpbnQgd2FzX2RlYWQ7CiAKIAkvKiBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIGxpc3QgaXMgc29tZW9uZSBlbHNlIGhhc24ndCBhbHJlYWR5ICovCi0Jd3JpdGVfbG9jaygmbW0tPmlvY3R4X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrKCZtbS0+aW9jdHhfbG9jayk7CiAJd2FzX2RlYWQgPSBpb2N0eC0+ZGVhZDsKIAlpb2N0eC0+ZGVhZCA9IDE7Ci0JZm9yICh0bXAgPSAmbW0tPmlvY3R4X2xpc3Q7ICp0bXAgJiYgKnRtcCAhPSBpb2N0eDsKLQkgICAgIHRtcCA9ICYoKnRtcCktPm5leHQpCi0JCTsKLQlpZiAoKnRtcCkKLQkJKnRtcCA9IGlvY3R4LT5uZXh0OwotCXdyaXRlX3VubG9jaygmbW0tPmlvY3R4X2xpc3RfbG9jayk7CisJaGxpc3RfZGVsX3JjdSgmaW9jdHgtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZtbS0+aW9jdHhfbG9jayk7CiAKIAlkcHJpbnRrKCJhaW9fcmVsZWFzZSglcClcbiIsIGlvY3R4KTsKIAlpZiAobGlrZWx5KCF3YXNfZGVhZCkpCmRpZmYgLS1naXQgYS9mcy9iaW8taW50ZWdyaXR5LmMgYi9mcy9iaW8taW50ZWdyaXR5LmMKaW5kZXggMTljYWY3Yy4uNzdlYmMzYyAxMDA2NDQKLS0tIGEvZnMvYmlvLWludGVncml0eS5jCisrKyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJICAgICYmIGJpcC0+YmlwX2J1ZiAhPSBOVUxMKQogCQlrZnJlZShiaXAtPmJpcF9idWYpOwogCi0JbWVtcG9vbF9mcmVlKGJpcC0+YmlwX3ZlYywgYnMtPmJ2ZWNfcG9vbHNbYmlwLT5iaXBfcG9vbF0pOworCWJ2ZWNfZnJlZV9icyhicywgYmlwLT5iaXBfdmVjLCBiaXAtPmJpcF9wb29sKTsKIAltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKIAogCWJpby0+YmlfaW50ZWdyaXR5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggZGY5OWM4OC4uNzExY2VlMSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTMxLDcgKzMxLDExIEBACiAKIERFRklORV9UUkFDRShibG9ja19zcGxpdCk7CiAKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmlvX3NsYWIgX19yZWFkX21vc3RseTsKKy8qCisgKiBUZXN0IHBhdGNoIHRvIGlubGluZSBhIGNlcnRhaW4gbnVtYmVyIG9mIGJpX2lvX3ZlYydzIGluc2lkZSB0aGUgYmlvCisgKiBpdHNlbGYsIHRvIHNocmluayBhIGJpbyBkYXRhIGFsbG9jYXRpb24gZnJvbSB0d28gbWVtcG9vbCBjYWxscyB0byBvbmUKKyAqLworI2RlZmluZSBCSU9fSU5MSU5FX1ZFQ1MJCTQKIAogc3RhdGljIG1lbXBvb2xfdCAqYmlvX3NwbGl0X3Bvb2wgX19yZWFkX21vc3RseTsKIApAQCAtNDAsOSArNDQsOCBAQAogICogYnJlYWsgYmFkbHkhIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB3aGF0IHlvdSBjYW4gZml0IGludG8gYW4KICAqIHVuc2lnbmVkIHNob3J0CiAgKi8KLQogI2RlZmluZSBCVih4KSB7IC5ucl92ZWNzID0geCwgLm5hbWUgPSAiYmlvdmVjLSJfX3N0cmluZ2lmeSh4KSB9Ci1zdGF0aWMgc3RydWN0IGJpb3ZlY19zbGFiIGJ2ZWNfc2xhYnNbQklPVkVDX05SX1BPT0xTXSBfX3JlYWRfbW9zdGx5ID0geworc3RydWN0IGJpb3ZlY19zbGFiIGJ2ZWNfc2xhYnNbQklPVkVDX05SX1BPT0xTXSBfX3JlYWRfbW9zdGx5ID0gewogCUJWKDEpLCBCVig0KSwgQlYoMTYpLCBCVig2NCksIEJWKDEyOCksIEJWKEJJT19NQVhfUEFHRVMpLAogfTsKICN1bmRlZiBCVgpAQCAtNTMsMTIgKzU2LDEyMSBAQAogICovCiBzdHJ1Y3QgYmlvX3NldCAqZnNfYmlvX3NldDsKIAorLyoKKyAqIE91ciBzbGFiIHBvb2wgbWFuYWdlbWVudAorICovCitzdHJ1Y3QgYmlvX3NsYWIgeworCXN0cnVjdCBrbWVtX2NhY2hlICpzbGFiOworCXVuc2lnbmVkIGludCBzbGFiX3JlZjsKKwl1bnNpZ25lZCBpbnQgc2xhYl9zaXplOworCWNoYXIgbmFtZVs4XTsKK307CitzdGF0aWMgREVGSU5FX01VVEVYKGJpb19zbGFiX2xvY2spOworc3RhdGljIHN0cnVjdCBiaW9fc2xhYiAqYmlvX3NsYWJzOworc3RhdGljIHVuc2lnbmVkIGludCBiaW9fc2xhYl9uciwgYmlvX3NsYWJfbWF4OworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJpb19maW5kX29yX2NyZWF0ZV9zbGFiKHVuc2lnbmVkIGludCBleHRyYV9zaXplKQoreworCXVuc2lnbmVkIGludCBzeiA9IHNpemVvZihzdHJ1Y3QgYmlvKSArIGV4dHJhX3NpemU7CisJc3RydWN0IGttZW1fY2FjaGUgKnNsYWIgPSBOVUxMOworCXN0cnVjdCBiaW9fc2xhYiAqYnNsYWI7CisJdW5zaWduZWQgaW50IGksIGVudHJ5ID0gLTE7CisKKwltdXRleF9sb2NrKCZiaW9fc2xhYl9sb2NrKTsKKworCWkgPSAwOworCXdoaWxlIChpIDwgYmlvX3NsYWJfbnIpIHsKKwkJc3RydWN0IGJpb19zbGFiICpic2xhYiA9ICZiaW9fc2xhYnNbaV07CisKKwkJaWYgKCFic2xhYi0+c2xhYiAmJiBlbnRyeSA9PSAtMSkKKwkJCWVudHJ5ID0gaTsKKwkJZWxzZSBpZiAoYnNsYWItPnNsYWJfc2l6ZSA9PSBzeikgeworCQkJc2xhYiA9IGJzbGFiLT5zbGFiOworCQkJYnNsYWItPnNsYWJfcmVmKys7CisJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCisJaWYgKHNsYWIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChiaW9fc2xhYl9uciA9PSBiaW9fc2xhYl9tYXggJiYgZW50cnkgPT0gLTEpIHsKKwkJYmlvX3NsYWJfbWF4IDw8PSAxOworCQliaW9fc2xhYnMgPSBrcmVhbGxvYyhiaW9fc2xhYnMsCisJCQkJICAgICBiaW9fc2xhYl9tYXggKiBzaXplb2Yoc3RydWN0IGJpb19zbGFiKSwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWJpb19zbGFicykKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJaWYgKGVudHJ5ID09IC0xKQorCQllbnRyeSA9IGJpb19zbGFiX25yKys7CisKKwlic2xhYiA9ICZiaW9fc2xhYnNbZW50cnldOworCisJc25wcmludGYoYnNsYWItPm5hbWUsIHNpemVvZihic2xhYi0+bmFtZSksICJiaW8tJWQiLCBlbnRyeSk7CisJc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKGJzbGFiLT5uYW1lLCBzeiwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIXNsYWIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXByaW50aygiYmlvOiBjcmVhdGUgc2xhYiA8JXM+IGF0ICVkXG4iLCBic2xhYi0+bmFtZSwgZW50cnkpOworCWJzbGFiLT5zbGFiID0gc2xhYjsKKwlic2xhYi0+c2xhYl9yZWYgPSAxOworCWJzbGFiLT5zbGFiX3NpemUgPSBzejsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZiaW9fc2xhYl9sb2NrKTsKKwlyZXR1cm4gc2xhYjsKK30KKworc3RhdGljIHZvaWQgYmlvX3B1dF9zbGFiKHN0cnVjdCBiaW9fc2V0ICpicykKK3sKKwlzdHJ1Y3QgYmlvX3NsYWIgKmJzbGFiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCW11dGV4X2xvY2soJmJpb19zbGFiX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IGJpb19zbGFiX25yOyBpKyspIHsKKwkJaWYgKGJzLT5iaW9fc2xhYiA9PSBiaW9fc2xhYnNbaV0uc2xhYikgeworCQkJYnNsYWIgPSAmYmlvX3NsYWJzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoV0FSTighYnNsYWIsIEtFUk5fRVJSICJiaW86IHVuYWJsZSB0byBmaW5kIHNsYWIhXG4iKSkKKwkJZ290byBvdXQ7CisKKwlXQVJOX09OKCFic2xhYi0+c2xhYl9yZWYpOworCisJaWYgKC0tYnNsYWItPnNsYWJfcmVmKQorCQlnb3RvIG91dDsKKworCWttZW1fY2FjaGVfZGVzdHJveShic2xhYi0+c2xhYik7CisJYnNsYWItPnNsYWIgPSBOVUxMOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZiaW9fc2xhYl9sb2NrKTsKK30KKwogdW5zaWduZWQgaW50IGJ2ZWNfbnJfdmVjcyh1bnNpZ25lZCBzaG9ydCBpZHgpCiB7CiAJcmV0dXJuIGJ2ZWNfc2xhYnNbaWR4XS5ucl92ZWNzOwogfQogCi1zdHJ1Y3QgYmlvX3ZlYyAqYnZlY19hbGxvY19icyhnZnBfdCBnZnBfbWFzaywgaW50IG5yLCB1bnNpZ25lZCBsb25nICppZHgsIHN0cnVjdCBiaW9fc2V0ICpicykKK3ZvaWQgYnZlY19mcmVlX2JzKHN0cnVjdCBiaW9fc2V0ICpicywgc3RydWN0IGJpb192ZWMgKmJ2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCUJJT19CVUdfT04oaWR4ID49IEJJT1ZFQ19OUl9QT09MUyk7CisKKwlpZiAoaWR4ID09IEJJT1ZFQ19NQVhfSURYKQorCQltZW1wb29sX2ZyZWUoYnYsIGJzLT5idmVjX3Bvb2wpOworCWVsc2UgeworCQlzdHJ1Y3QgYmlvdmVjX3NsYWIgKmJ2cyA9IGJ2ZWNfc2xhYnMgKyBpZHg7CisKKwkJa21lbV9jYWNoZV9mcmVlKGJ2cy0+c2xhYiwgYnYpOworCX0KK30KKworc3RydWN0IGJpb192ZWMgKmJ2ZWNfYWxsb2NfYnMoZ2ZwX3QgZ2ZwX21hc2ssIGludCBuciwgdW5zaWduZWQgbG9uZyAqaWR4LAorCQkJICAgICAgc3RydWN0IGJpb19zZXQgKmJzKQogewogCXN0cnVjdCBiaW9fdmVjICpidmw7CiAKQEAgLTY3LDYwICsxNzksODUgQEAKIAkgKiBJZiBub3QsIHRoaXMgaXMgYSBiaW9fa21hbGxvYygpIGFsbG9jYXRpb24gYW5kIGp1c3QgZG8gYQogCSAqIGt6YWxsb2MoKSBmb3IgdGhlIGV4YWN0IG51bWJlciBvZiB2ZWNzIHJpZ2h0IGF3YXkuCiAJICovCi0JaWYgKGJzKSB7Ci0JCS8qCi0JCSAqIHNlZSBjb21tZW50IG5lYXIgYnZlY19hcnJheSBkZWZpbmUhCi0JCSAqLwotCQlzd2l0Y2ggKG5yKSB7Ci0JCWNhc2UgMToKLQkJCSppZHggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMiAuLi4gNDoKLQkJCSppZHggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgNSAuLi4gMTY6Ci0JCQkqaWR4ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDE3IC4uLiA2NDoKLQkJCSppZHggPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjUgLi4uIDEyODoKLQkJCSppZHggPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMTI5IC4uLiBCSU9fTUFYX1BBR0VTOgotCQkJKmlkeCA9IDU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBOVUxMOwotCQl9CisJaWYgKCFicykKKwkJYnZsID0ga21hbGxvYyhuciAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksIGdmcF9tYXNrKTsKKworCS8qCisJICogc2VlIGNvbW1lbnQgbmVhciBidmVjX2FycmF5IGRlZmluZSEKKwkgKi8KKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAxOgorCQkqaWR4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyIC4uLiA0OgorCQkqaWR4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSA1IC4uLiAxNjoKKwkJKmlkeCA9IDI7CisJCWJyZWFrOworCWNhc2UgMTcgLi4uIDY0OgorCQkqaWR4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSA2NSAuLi4gMTI4OgorCQkqaWR4ID0gNDsKKwkJYnJlYWs7CisJY2FzZSAxMjkgLi4uIEJJT19NQVhfUEFHRVM6CisJCSppZHggPSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIGlkeCBub3cgcG9pbnRzIHRvIHRoZSBwb29sIHdlIHdhbnQgdG8gYWxsb2NhdGUgZnJvbS4gb25seSB0aGUKKwkgKiAxLXZlYyBlbnRyeSBwb29sIGlzIG1lbXBvb2wgYmFja2VkLgorCSAqLworCWlmICgqaWR4ID09IEJJT1ZFQ19NQVhfSURYKSB7CitmYWxsYmFjazoKKwkJYnZsID0gbWVtcG9vbF9hbGxvYyhicy0+YnZlY19wb29sLCBnZnBfbWFzayk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJpb3ZlY19zbGFiICpidnMgPSBidmVjX3NsYWJzICsgKmlkeDsKKwkJZ2ZwX3QgX19nZnBfbWFzayA9IGdmcF9tYXNrICYgfihfX0dGUF9XQUlUIHwgX19HRlBfSU8pOwogCiAJCS8qCi0JCSAqIGlkeCBub3cgcG9pbnRzIHRvIHRoZSBwb29sIHdlIHdhbnQgdG8gYWxsb2NhdGUgZnJvbQorCQkgKiBNYWtlIHRoaXMgYWxsb2NhdGlvbiByZXN0cmljdGVkIGFuZCBkb24ndCBkdW1wIGluZm8gb24KKwkJICogYWxsb2NhdGlvbiBmYWlsdXJlcywgc2luY2Ugd2UnbGwgZmFsbGJhY2sgdG8gdGhlIG1lbXBvb2wKKwkJICogaW4gY2FzZSBvZiBmYWlsdXJlLgogCQkgKi8KLQkJYnZsID0gbWVtcG9vbF9hbGxvYyhicy0+YnZlY19wb29sc1sqaWR4XSwgZ2ZwX21hc2spOwotCQlpZiAoYnZsKQotCQkJbWVtc2V0KGJ2bCwgMCwKLQkJCQlidmVjX25yX3ZlY3MoKmlkeCkgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpKTsKLQl9IGVsc2UKLQkJYnZsID0ga3phbGxvYyhuciAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksIGdmcF9tYXNrKTsKKwkJX19nZnBfbWFzayB8PSBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjsKKworCQkvKgorCQkgKiBUcnkgYSBzbGFiIGFsbG9jYXRpb24uIElmIHRoaXMgZmFpbHMgYW5kIF9fR0ZQX1dBSVQKKwkJICogaXMgc2V0LCByZXRyeSB3aXRoIHRoZSAxLWVudHJ5IG1lbXBvb2wKKwkJICovCisJCWJ2bCA9IGttZW1fY2FjaGVfYWxsb2MoYnZzLT5zbGFiLCBfX2dmcF9tYXNrKTsKKwkJaWYgKHVubGlrZWx5KCFidmwgJiYgKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpKSB7CisJCQkqaWR4ID0gQklPVkVDX01BWF9JRFg7CisJCQlnb3RvIGZhbGxiYWNrOworCQl9CisJfQogCiAJcmV0dXJuIGJ2bDsKIH0KIAotdm9pZCBiaW9fZnJlZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fc2V0ICpiaW9fc2V0KQordm9pZCBiaW9fZnJlZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fc2V0ICpicykKIHsKLQlpZiAoYmlvLT5iaV9pb192ZWMpIHsKLQkJY29uc3QgaW50IHBvb2xfaWR4ID0gQklPX1BPT0xfSURYKGJpbyk7CisJdm9pZCAqcDsKIAotCQlCSU9fQlVHX09OKHBvb2xfaWR4ID49IEJJT1ZFQ19OUl9QT09MUyk7Ci0KLQkJbWVtcG9vbF9mcmVlKGJpby0+YmlfaW9fdmVjLCBiaW9fc2V0LT5idmVjX3Bvb2xzW3Bvb2xfaWR4XSk7Ci0JfQorCWlmIChiaW9faGFzX2FsbG9jYXRlZF92ZWMoYmlvKSkKKwkJYnZlY19mcmVlX2JzKGJzLCBiaW8tPmJpX2lvX3ZlYywgQklPX1BPT0xfSURYKGJpbykpOwogCiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSkKLQkJYmlvX2ludGVncml0eV9mcmVlKGJpbywgYmlvX3NldCk7CisJCWJpb19pbnRlZ3JpdHlfZnJlZShiaW8sIGJzKTsKIAotCW1lbXBvb2xfZnJlZShiaW8sIGJpb19zZXQtPmJpb19wb29sKTsKKwkvKgorCSAqIElmIHdlIGhhdmUgZnJvbnQgcGFkZGluZywgYWRqdXN0IHRoZSBiaW8gcG9pbnRlciBiZWZvcmUgZnJlZWluZworCSAqLworCXAgPSBiaW87CisJaWYgKGJzLT5mcm9udF9wYWQpCisJCXAgLT0gYnMtPmZyb250X3BhZDsKKworCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwogfQogCiAvKgpAQCAtMTMzLDcgKzI3MCw4IEBACiAKIHN0YXRpYyB2b2lkIGJpb19rbWFsbG9jX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQogewotCWtmcmVlKGJpby0+YmlfaW9fdmVjKTsKKwlpZiAoYmlvX2hhc19hbGxvY2F0ZWRfdmVjKGJpbykpCisJCWtmcmVlKGJpby0+YmlfaW9fdmVjKTsKIAlrZnJlZShiaW8pOwogfQogCkBAIC0xNTcsMTYgKzI5NSwyMCBAQAogICogICBmb3IgYSAmc3RydWN0IGJpbyB0byBiZWNvbWUgZnJlZS4gSWYgYSAlTlVMTCBAYnMgaXMgcGFzc2VkIGluLCB3ZSB3aWxsCiAgKiAgIGZhbGwgYmFjayB0byBqdXN0IHVzaW5nIEBrbWFsbG9jIHRvIGFsbG9jYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkuCiAgKgotICogICBhbGxvY2F0ZSBiaW8gYW5kIGlvdmVjcyBmcm9tIHRoZSBtZW1vcnkgcG9vbHMgc3BlY2lmaWVkIGJ5IHRoZQotICogICBiaW9fc2V0IHN0cnVjdHVyZSwgb3IgQGttYWxsb2MgaWYgbm9uZSBnaXZlbi4KKyAqICAgTm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBzZXQgLT5iaV9kZXN0cnVjdG9yIG9uIHN1Y2Nlc2Z1bCByZXR1cm4KKyAqICAgb2YgYSBiaW8sIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlaW5nIG9mIHRoZSBiaW8gb25jZSB0aGUgcmVmZXJlbmNlCisgKiAgIGNvdW50IGRyb3BzIHRvIHplcm8uCiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLCBzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7Ci0Jc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7CiAKLQlpZiAoYnMpCi0JCWJpbyA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19wb29sLCBnZnBfbWFzayk7Ci0JZWxzZQorCWlmIChicykgeworCQl2b2lkICpwID0gbWVtcG9vbF9hbGxvYyhicy0+YmlvX3Bvb2wsIGdmcF9tYXNrKTsKKworCQlpZiAocCkKKwkJCWJpbyA9IHAgKyBicy0+ZnJvbnRfcGFkOworCX0gZWxzZQogCQliaW8gPSBrbWFsbG9jKHNpemVvZigqYmlvKSwgZ2ZwX21hc2spOwogCiAJaWYgKGxpa2VseShiaW8pKSB7CkBAIC0xNzYsNyArMzE4LDE1IEBACiAJCWlmIChsaWtlbHkobnJfaW92ZWNzKSkgewogCQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihpZHgpOwogCi0JCQlidmwgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl9pb3ZlY3MsICZpZHgsIGJzKTsKKwkJCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCQkJaWR4ID0gMDsKKwkJCQlidmwgPSBiaW8tPmJpX2lubGluZV92ZWNzOworCQkJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKKwkJCX0gZWxzZSB7CisJCQkJYnZsID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfaW92ZWNzLCAmaWR4LAorCQkJCQkJCWJzKTsKKwkJCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKKwkJCX0KIAkJCWlmICh1bmxpa2VseSghYnZsKSkgewogCQkJCWlmIChicykKIAkJCQkJbWVtcG9vbF9mcmVlKGJpbywgYnMtPmJpb19wb29sKTsKQEAgLTE4Niw3ICszMzYsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOwotCQkJYmlvLT5iaV9tYXhfdmVjcyA9IGJ2ZWNfbnJfdmVjcyhpZHgpOworCQkJYmlvLT5iaV9tYXhfdmVjcyA9IG5yX2lvdmVjczsKIAkJfQogCQliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKIAl9CkBAIC0xMzQ2LDMwICsxNDk2LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgYmlvdmVjX2NyZWF0ZV9wb29scyhzdHJ1Y3QgYmlvX3NldCAqYnMsIGludCBwb29sX2VudHJpZXMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGJpb3ZlY19zbGFiICpicCA9IGJ2ZWNfc2xhYnMgKyBCSU9WRUNfTUFYX0lEWDsKIAotCWZvciAoaSA9IDA7IGkgPCBCSU9WRUNfTlJfUE9PTFM7IGkrKykgewotCQlzdHJ1Y3QgYmlvdmVjX3NsYWIgKmJwID0gYnZlY19zbGFicyArIGk7Ci0JCW1lbXBvb2xfdCAqKmJ2cCA9IGJzLT5idmVjX3Bvb2xzICsgaTsKKwlicy0+YnZlY19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKHBvb2xfZW50cmllcywgYnAtPnNsYWIpOworCWlmICghYnMtPmJ2ZWNfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkJKmJ2cCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChwb29sX2VudHJpZXMsIGJwLT5zbGFiKTsKLQkJaWYgKCEqYnZwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBiaW92ZWNfZnJlZV9wb29scyhzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQklPVkVDX05SX1BPT0xTOyBpKyspIHsKLQkJbWVtcG9vbF90ICpidnAgPSBicy0+YnZlY19wb29sc1tpXTsKLQotCQlpZiAoYnZwKQotCQkJbWVtcG9vbF9kZXN0cm95KGJ2cCk7Ci0JfQotCisJbWVtcG9vbF9kZXN0cm95KGJzLT5idmVjX3Bvb2wpOwogfQogCiB2b2lkIGJpb3NldF9mcmVlKHN0cnVjdCBiaW9fc2V0ICpicykKQEAgLTEzNzksMjUgKzE1MTcsNDkgQEAKIAogCWJpb3NldF9pbnRlZ3JpdHlfZnJlZShicyk7CiAJYmlvdmVjX2ZyZWVfcG9vbHMoYnMpOworCWJpb19wdXRfc2xhYihicyk7CiAKIAlrZnJlZShicyk7CiB9CiAKLXN0cnVjdCBiaW9fc2V0ICpiaW9zZXRfY3JlYXRlKGludCBiaW9fcG9vbF9zaXplLCBpbnQgYnZlY19wb29sX3NpemUpCisvKioKKyAqIGJpb3NldF9jcmVhdGUgIC0gQ3JlYXRlIGEgYmlvX3NldAorICogQHBvb2xfc2l6ZToJTnVtYmVyIG9mIGJpbyBhbmQgYmlvX3ZlY3MgdG8gY2FjaGUgaW4gdGhlIG1lbXBvb2wKKyAqIEBmcm9udF9wYWQ6CU51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZSBpbiBmcm9udCBvZiB0aGUgcmV0dXJuZWQgYmlvCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICBTZXQgdXAgYSBiaW9fc2V0IHRvIGJlIHVzZWQgd2l0aCBAYmlvX2FsbG9jX2Jpb3NldC4gQWxsb3dzIHRoZSBjYWxsZXIKKyAqICAgIHRvIGFzayBmb3IgYSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgYWxsb2NhdGVkIGluIGZyb250IG9mIHRoZSBiaW8uCisgKiAgICBGcm9udCBwYWQgYWxsb2NhdGlvbiBpcyB1c2VmdWwgZm9yIGVtYmVkZGluZyB0aGUgYmlvIGluc2lkZQorICogICAgYW5vdGhlciBzdHJ1Y3R1cmUsIHRvIGF2b2lkIGFsbG9jYXRpbmcgZXh0cmEgZGF0YSB0byBnbyB3aXRoIHRoZSBiaW8uCisgKiAgICBOb3RlIHRoYXQgdGhlIGJpbyBtdXN0IGJlIGVtYmVkZGVkIGF0IHRoZSBFTkQgb2YgdGhhdCBzdHJ1Y3R1cmUgYWx3YXlzLAorICogICAgb3IgdGhpbmdzIHdpbGwgYnJlYWsgYmFkbHkuCisgKi8KK3N0cnVjdCBiaW9fc2V0ICpiaW9zZXRfY3JlYXRlKHVuc2lnbmVkIGludCBwb29sX3NpemUsIHVuc2lnbmVkIGludCBmcm9udF9wYWQpCiB7Ci0Jc3RydWN0IGJpb19zZXQgKmJzID0ga3phbGxvYyhzaXplb2YoKmJzKSwgR0ZQX0tFUk5FTCk7CisJdW5zaWduZWQgaW50IGJhY2tfcGFkID0gQklPX0lOTElORV9WRUNTICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKTsKKwlzdHJ1Y3QgYmlvX3NldCAqYnM7CiAKKwlicyA9IGt6YWxsb2Moc2l6ZW9mKCpicyksIEdGUF9LRVJORUwpOwogCWlmICghYnMpCiAJCXJldHVybiBOVUxMOwogCi0JYnMtPmJpb19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKGJpb19wb29sX3NpemUsIGJpb19zbGFiKTsKKwlicy0+ZnJvbnRfcGFkID0gZnJvbnRfcGFkOworCisJYnMtPmJpb19zbGFiID0gYmlvX2ZpbmRfb3JfY3JlYXRlX3NsYWIoZnJvbnRfcGFkICsgYmFja19wYWQpOworCWlmICghYnMtPmJpb19zbGFiKSB7CisJCWtmcmVlKGJzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYnMtPmJpb19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKHBvb2xfc2l6ZSwgYnMtPmJpb19zbGFiKTsKIAlpZiAoIWJzLT5iaW9fcG9vbCkKIAkJZ290byBiYWQ7CiAKLQlpZiAoYmlvc2V0X2ludGVncml0eV9jcmVhdGUoYnMsIGJpb19wb29sX3NpemUpKQorCWlmIChiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShicywgcG9vbF9zaXplKSkKIAkJZ290byBiYWQ7CiAKLQlpZiAoIWJpb3ZlY19jcmVhdGVfcG9vbHMoYnMsIGJ2ZWNfcG9vbF9zaXplKSkKKwlpZiAoIWJpb3ZlY19jcmVhdGVfcG9vbHMoYnMsIHBvb2xfc2l6ZSkpCiAJCXJldHVybiBiczsKIAogYmFkOgpAQCAtMTQyMSwxMiArMTU4MywxNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2Jpbyh2b2lkKQogewotCWJpb19zbGFiID0gS01FTV9DQUNIRShiaW8sIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKKwliaW9fc2xhYl9tYXggPSAyOworCWJpb19zbGFiX25yID0gMDsKKwliaW9fc2xhYnMgPSBremFsbG9jKGJpb19zbGFiX21heCAqIHNpemVvZihzdHJ1Y3QgYmlvX3NsYWIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpb19zbGFicykKKwkJcGFuaWMoImJpbzogY2FuJ3QgYWxsb2NhdGUgYmlvc1xuIik7CiAKIAliaW9faW50ZWdyaXR5X2luaXRfc2xhYigpOwogCWJpb3ZlY19pbml0X3NsYWJzKCk7CiAKLQlmc19iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAyKTsKKwlmc19iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAwKTsKIAlpZiAoIWZzX2Jpb19zZXQpCiAJCXBhbmljKCJiaW86IGNhbid0IGFsbG9jYXRlIGJpb3NcbiIpOwogCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDEwMTc5Y2YuLjc3NmFlMDkgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC05OSwxMCArOTksMTggQEAKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKKworc3RhdGljIGludCBxdWlldF9lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWlmICghdGVzdF9iaXQoQkhfUXVpZXQsICZiaC0+Yl9zdGF0ZSkgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworCiBzdGF0aWMgdm9pZCBidWZmZXJfaW9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0KIAlwcmludGsoS0VSTl9FUlIgIkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2aWNlICVzLCBsb2dpY2FsIGJsb2NrICVMdVxuIiwKIAkJCWJkZXZuYW1lKGJoLT5iX2JkZXYsIGIpLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKQEAgLTE0NCw3ICsxNTIsNyBAQAogCWlmICh1cHRvZGF0ZSkgewogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAl9IGVsc2UgewotCQlpZiAoIWJ1ZmZlcl9lb3Bub3RzdXBwKGJoKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJaWYgKCFidWZmZXJfZW9wbm90c3VwcChiaCkgJiYgIXF1aWV0X2Vycm9yKGJoKSkgewogCQkJYnVmZmVyX2lvX2Vycm9yKGJoKTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvc3QgcGFnZSB3cml0ZSBkdWUgdG8gIgogCQkJCQkiSS9PIGVycm9yIG9uICVzXG4iLApAQCAtMzk0LDcgKzQwMiw3IEBACiAJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCX0gZWxzZSB7CiAJCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCWlmICghcXVpZXRfZXJyb3IoYmgpKQogCQkJYnVmZmVyX2lvX2Vycm9yKGJoKTsKIAkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCX0KQEAgLTQ1NSw3ICs0NjMsNyBAQAogCWlmICh1cHRvZGF0ZSkgewogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAl9IGVsc2UgewotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCWlmICghcXVpZXRfZXJyb3IoYmgpKSB7CiAJCQlidWZmZXJfaW9fZXJyb3IoYmgpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9zdCBwYWdlIHdyaXRlIGR1ZSB0byAiCiAJCQkJCSJJL08gZXJyb3Igb24gJXNcbiIsCkBAIC0yOTEzLDYgKzI5MjEsOSBAQAogCQlzZXRfYml0KEJIX0VvcG5vdHN1cHAsICZiaC0+Yl9zdGF0ZSk7CiAJfQogCisJaWYgKHVubGlrZWx5ICh0ZXN0X2JpdChCSU9fUVVJRVQsJmJpby0+YmlfZmxhZ3MpKSkKKwkJc2V0X2JpdChCSF9RdWlldCwgJmJoLT5iX3N0YXRlKTsKKwogCWJoLT5iX2VuZF9pbyhiaCwgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykpOwogCWJpb19wdXQoYmlvKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAxZjU5ZWEwNy4uMDJkMmUxMiAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNzczLDcgKzc3Myw2IEBACiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IHRzay0+c2lnbmFsOwogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqb2xkc2lnaGFuZCA9IHRzay0+c2lnaGFuZDsKIAlzcGlubG9ja190ICpsb2NrID0gJm9sZHNpZ2hhbmQtPnNpZ2xvY2s7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXIgPSBOVUxMOwogCWludCBjb3VudDsKIAogCWlmICh0aHJlYWRfZ3JvdXBfZW1wdHkodHNrKSkKQEAgLTgxMSw3ICs4MTAsNyBAQAogCSAqIGFuZCB0byBhc3N1bWUgaXRzIFBJRDoKIAkgKi8KIAlpZiAoIXRocmVhZF9ncm91cF9sZWFkZXIodHNrKSkgewotCQlsZWFkZXIgPSB0c2stPmdyb3VwX2xlYWRlcjsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXIgPSB0c2stPmdyb3VwX2xlYWRlcjsKIAogCQlzaWctPm5vdGlmeV9jb3VudCA9IC0xOwkvKiBmb3IgZXhpdF9ub3RpZnkoKSAqLwogCQlmb3IgKDs7KSB7CkBAIC04NjMsOCArODYyLDkgQEAKIAogCQlCVUdfT04obGVhZGVyLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKTsKIAkJbGVhZGVyLT5leGl0X3N0YXRlID0gRVhJVF9ERUFEOwotCiAJCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCisJCXJlbGVhc2VfdGFzayhsZWFkZXIpOwogCX0KIAogCXNpZy0+Z3JvdXBfZXhpdF90YXNrID0gTlVMTDsKQEAgLTg3Myw4ICs4NzMsNiBAQAogbm9fdGhyZWFkX2dyb3VwOgogCWV4aXRfaXRpbWVycyhzaWcpOwogCWZsdXNoX2l0aW1lcl9zaWduYWxzKCk7Ci0JaWYgKGxlYWRlcikKLQkJcmVsZWFzZV90YXNrKGxlYWRlcik7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm9sZHNpZ2hhbmQtPmNvdW50KSAhPSAxKSB7CiAJCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqbmV3c2lnaGFuZDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCBlNGEyNDFjLi4wNDE1OGFkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogCS8qIHNtYWxsIGlfYmxvY2tzIGluIHZmcyBpbm9kZT8gKi8KIAlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgotCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCisJCSAqIENPTkZJR19MQkQgaXMgbm90IGVuYWJsZWQgaW1wbGllcyB0aGUgaW5vZGUKIAkJICogaV9ibG9jayByZXByZXNlbnQgdG90YWwgYmxvY2tzIGluIDUxMiBieXRlcwogCQkgKiAzMiA9PSBzaXplIG9mIHZmcyBpbm9kZSBpX2Jsb2NrcyAqIDgKIAkJICovCkBAIC0xNzY0LDcgKzE3NjQsNyBAQAogCiAJaWYgKCFoYXNfaHVnZV9maWxlcyB8fCBzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKIAkJLyoKLQkJICogIWhhc19odWdlX2ZpbGVzIG9yIENPTkZJR19MU0YgaXMgbm90IGVuYWJsZWQKKwkJICogIWhhc19odWdlX2ZpbGVzIG9yIENPTkZJR19MQkQgaXMgbm90IGVuYWJsZWQKIAkJICogaW1wbGllcyB0aGUgaW5vZGUgaV9ibG9jayByZXByZXNlbnQgdG90YWwgYmxvY2tzIGluCiAJCSAqIDUxMiBieXRlcyAzMiA9PSBzaXplIG9mIHZmcyBpbm9kZSBpX2Jsb2NrcyAqIDgKIAkJICovCkBAIC0yMDIxLDEzICsyMDIxLDEzIEBACiAJaWYgKGhhc19odWdlX2ZpbGVzKSB7CiAJCS8qCiAJCSAqIExhcmdlIGZpbGUgc2l6ZSBlbmFibGVkIGZpbGUgc3lzdGVtIGNhbiBvbmx5IGJlCi0JCSAqIG1vdW50IGlmIGtlcm5lbCBpcyBidWlsZCB3aXRoIENPTkZJR19MU0YKKwkJICogbW91bnQgaWYga2VybmVsIGlzIGJ1aWxkIHdpdGggQ09ORklHX0xCRAogCQkgKi8KIAkJaWYgKHNpemVvZihyb290LT5pX2Jsb2NrcykgPCBzaXplb2YodTY0KSAmJgogCQkJCSEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6ICVzOiBGaWxlc3lzdGVtIHdpdGggaHVnZSAiCiAJCQkJCSJmaWxlcyBjYW5ub3QgYmUgbW91bnRlZCByZWFkLXdyaXRlICIKLQkJCQkJIndpdGhvdXQgQ09ORklHX0xTRi5cbiIsIHNiLT5zX2lkKTsKKwkJCQkJIndpdGhvdXQgQ09ORklHX0xCRC5cbiIsIHNiLT5zX2lkKTsKIAkJCWdvdG8gZmFpbGVkX21vdW50OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvamZzL2lub2RlLmMgYi9mcy9qZnMvaW5vZGUuYwppbmRleCAyMTAzMzk3Li5iMDBlZTlmIDEwMDY0NAotLS0gYS9mcy9qZnMvaW5vZGUuYworKysgYi9mcy9qZnMvaW5vZGUuYwpAQCAtNTksOCArNTksMTQgQEAKIAkJaWYgKGlub2RlLT5pX3NpemUgPj0gSURBVEFTSVpFKSB7CiAJCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmpmc19hb3BzOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKIAkJCWlub2RlLT5pX29wID0gJmpmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCQkvKgorCQkJICogVGhlIGlubGluZSBkYXRhIHNob3VsZCBiZSBudWxsLXRlcm1pbmF0ZWQsIGJ1dAorCQkJICogZG9uJ3QgbGV0IG9uLWRpc2sgY29ycnVwdGlvbiBjcmFzaCB0aGUga2VybmVsCisJCQkgKi8KKwkJCUpGU19JUChpbm9kZSktPmlfaW5saW5lW2lub2RlLT5pX3NpemVdID0gJ1wwJzsKKwkJfQogCX0gZWxzZSB7CiAJCWlub2RlLT5pX29wID0gJmpmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3N0YXQuYyBiL2ZzL3Byb2Mvc3RhdC5jCmluZGV4IDgxOTA0ZjAuLjNiYjFjZjEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvc3RhdC5jCisrKyBiL2ZzL3Byb2Mvc3RhdC5jCkBAIC00NCwxMCArNDQsMTMgQEAKIAkJc29mdGlycSA9IGNwdXRpbWU2NF9hZGQoc29mdGlycSwga3N0YXRfY3B1KGkpLmNwdXN0YXQuc29mdGlycSk7CiAJCXN0ZWFsID0gY3B1dGltZTY0X2FkZChzdGVhbCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuc3RlYWwpOwogCQlndWVzdCA9IGNwdXRpbWU2NF9hZGQoZ3Vlc3QsIGtzdGF0X2NwdShpKS5jcHVzdGF0Lmd1ZXN0KTsKLQotCQlmb3JfZWFjaF9pcnFfbnIoaikKKwkJZm9yX2VhY2hfaXJxX25yKGopIHsKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorCQkJaWYgKCFpcnFfdG9fZGVzYyhqKSkKKwkJCQljb250aW51ZTsKKyNlbmRpZgogCQkJc3VtICs9IGtzdGF0X2lycXNfY3B1KGosIGkpOwotCisJCX0KIAkJc3VtICs9IGFyY2hfaXJxX3N0YXRfY3B1KGkpOwogCX0KIAlzdW0gKz0gYXJjaF9pcnFfc3RhdCgpOwpAQCAtOTIsNyArOTUsMTIgQEAKIAkvKiBzdW0gYWdhaW4gPyBpdCBjb3VsZCBiZSB1cGRhdGVkPyAqLwogCWZvcl9lYWNoX2lycV9ucihqKSB7CiAJCXBlcl9pcnFfc3VtID0gMDsKLQorI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCisJCWlmICghaXJxX3RvX2Rlc2MoaikpIHsKKwkJCXNlcV9wcmludGYocCwgIiAldSIsIHBlcl9pcnFfc3VtKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCiAJCQlwZXJfaXJxX3N1bSArPSBrc3RhdF9pcnFzX2NwdShqLCBpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2lpYy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2lpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTA2YWNhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9paWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaWljLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQxMCAtIEkyQyBDb250cm9sbGVyIHBsYXRmcm9tX2RldmljZSBpbmZvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9JSUNfSAotI2RlZmluZSBfX0FTTV9BUkNIX0lJQ19IIF9fRklMRV9fCi0KLSNkZWZpbmUgUzNDX0lJQ0ZMR19GSUxURVIJKDE8PDApCS8qIGVuYWJsZSBzM2MyNDQwIGZpbHRlciAqLwotCi0vKiBOb3RlczoKLSAqCTEpIEFsbCBmcmVxdWVuY2llcyBhcmUgZXhwcmVzc2VkIGluIEh6Ci0gKgkyKSBBIHZhbHVlIG9mIHplcm8gaXMgYGRvIG5vdCBjYXJlYAotKi8KLQotc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1faTJjIHsKLQlpbnQJCWJ1c19udW07CS8qIGJ1cyBudW1iZXIgdG8gdXNlICovCi0JdW5zaWduZWQgaW50CWZsYWdzOwotCXVuc2lnbmVkIGludAlzbGF2ZV9hZGRyOwkvKiBzbGF2ZSBhZGRyZXNzIGZvciBjb250cm9sbGVyICovCi0JdW5zaWduZWQgbG9uZwlidXNfZnJlcTsJLyogc3RhbmRhcmQgYnVzIGZyZXF1ZW5jeSAqLwotCXVuc2lnbmVkIGxvbmcJbWF4X2ZyZXE7CS8qIG1heCBmcmVxdWVuY3kgZm9yIHRoZSBidXMgKi8KLQl1bnNpZ25lZCBsb25nCW1pbl9mcmVxOwkvKiBtaW4gZnJlcXVlbmN5IGZvciB0aGUgYnVzICovCi0JdW5zaWduZWQgaW50CXNkYV9kZWxheTsJLyogcGNsa3MgKHMzYzI0NDAgb25seSkgKi8KLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0lJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCA0Yzc5NGQ3Li44YWYyNzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTQxLDE1ICs0MSwxNCBAQAogCiAjaWZuZGVmIF9fV0FSTgogI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIHdhcm5fb25fc2xvd3BhdGgoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpOwogZXh0ZXJuIHZvaWQgd2Fybl9zbG93cGF0aChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgbGluZSwKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDMsIDQpKSk7CiAjZGVmaW5lIFdBTlRfV0FSTl9PTl9TTE9XUEFUSAogI2VuZGlmCi0jZGVmaW5lIF9fV0FSTigpIHdhcm5fb25fc2xvd3BhdGgoX19GSUxFX18sIF9fTElORV9fKQotI2RlZmluZSBfX1dBUk5fcHJpbnRmKGFyZy4uLikgd2Fybl9zbG93cGF0aChfX0ZJTEVfXywgX19MSU5FX18sIGFyZykKKyNkZWZpbmUgX19XQVJOKCkJCXdhcm5fc2xvd3BhdGgoX19GSUxFX18sIF9fTElORV9fLCBOVUxMKQorI2RlZmluZSBfX1dBUk5fcHJpbnRmKGFyZy4uLikJd2Fybl9zbG93cGF0aChfX0ZJTEVfXywgX19MSU5FX18sIGFyZykKICNlbHNlCi0jZGVmaW5lIF9fV0FSTl9wcmludGYoYXJnLi4uKSBkbyB7IHByaW50ayhhcmcpOyBfX1dBUk4oKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19XQVJOX3ByaW50ZihhcmcuLi4pCWRvIHsgcHJpbnRrKGFyZyk7IF9fV0FSTigpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZm5kZWYgV0FSTl9PTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vS2J1aWxkIGIvaW5jbHVkZS9kcm0vS2J1aWxkCmluZGV4IDgyYjY5ODMuLmI5NDBmZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL0tidWlsZAorKysgYi9pbmNsdWRlL2RybS9LYnVpbGQKQEAgLTEsNCArMSw0IEBACi11bmlmZGVmLXkgKz0gZHJtLmggZHJtX3NhcmVhLmgKK3VuaWZkZWYteSArPSBkcm0uaCBkcm1fc2FyZWEuaCBkcm1fbW9kZS5oCiB1bmlmZGVmLXkgKz0gaTgxMF9kcm0uaAogdW5pZmRlZi15ICs9IGk4MzBfZHJtLmgKIHVuaWZkZWYteSArPSBpOTE1X2RybS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm0uaCBiL2luY2x1ZGUvZHJtL2RybS5oCmluZGV4IGY0NmJhNGIuLjMyZTUwOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybS5oCkBAIC0xNzMsNiArMTczLDcgQEAKIAlfRFJNX0FHUCA9IDMsCQkgIC8qKjwgQUdQL0dBUlQgKi8KIAlfRFJNX1NDQVRURVJfR0FUSEVSID0gNCwgIC8qKjwgU2NhdHRlci9nYXRoZXIgbWVtb3J5IGZvciBQQ0kgRE1BICovCiAJX0RSTV9DT05TSVNURU5UID0gNSwJICAvKio8IENvbnNpc3RlbnQgbWVtb3J5IGZvciBQQ0kgRE1BICovCisJX0RSTV9HRU0gPSA2LAkJICAvKio8IEdFTSBvYmplY3QgKi8KIH07CiAKIC8qKgpAQCAtNTk4LDYgKzU5OSw4IEBACiAJdWludDY0X3Qgc2l6ZTsKIH07CiAKKyNpbmNsdWRlICJkcm1fbW9kZS5oIgorCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCiAjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKQEAgLTYzNCw2ICs2MzcsOSBAQAogI2RlZmluZSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWAkJRFJNX0lPVyggMHgxYywgc3RydWN0IGRybV9jdHhfcHJpdl9tYXApCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYIAlEUk1fSU9XUigweDFkLCBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCkKIAorI2RlZmluZSBEUk1fSU9DVExfU0VUX01BU1RFUiAgICAgICAgICAgIERSTV9JTygweDFlKQorI2RlZmluZSBEUk1fSU9DVExfRFJPUF9NQVNURVIgICAgICAgICAgIERSTV9JTygweDFmKQorCiAjZGVmaW5lIERSTV9JT0NUTF9BRERfQ1RYCQlEUk1fSU9XUigweDIwLCBzdHJ1Y3QgZHJtX2N0eCkKICNkZWZpbmUgRFJNX0lPQ1RMX1JNX0NUWAkJRFJNX0lPV1IoMHgyMSwgc3RydWN0IGRybV9jdHgpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RfQ1RYCQlEUk1fSU9XKCAweDIyLCBzdHJ1Y3QgZHJtX2N0eCkKQEAgLTY2NCw2ICs2NzAsMjQgQEAKIAogI2RlZmluZSBEUk1fSU9DVExfVVBEQVRFX0RSQVcJCURSTV9JT1coMHgzZiwgc3RydWN0IGRybV91cGRhdGVfZHJhdykKIAorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRSRVNPVVJDRVMJRFJNX0lPV1IoMHhBMCwgc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRDUlRDCQlEUk1fSU9XUigweEExLCBzdHJ1Y3QgZHJtX21vZGVfY3J0YykKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfU0VUQ1JUQwkJRFJNX0lPV1IoMHhBMiwgc3RydWN0IGRybV9tb2RlX2NydGMpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0NVUlNPUgkJRFJNX0lPV1IoMHhBMywgc3RydWN0IGRybV9tb2RlX2N1cnNvcikKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUR0FNTUEJCURSTV9JT1dSKDB4QTQsIHN0cnVjdCBkcm1fbW9kZV9jcnRjX2x1dCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfU0VUR0FNTUEJCURSTV9JT1dSKDB4QTUsIHN0cnVjdCBkcm1fbW9kZV9jcnRjX2x1dCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VURU5DT0RFUglEUk1fSU9XUigweEE2LCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVENPTk5FQ1RPUglEUk1fSU9XUigweEE3LCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvcikKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQVRUQUNITU9ERQlEUk1fSU9XUigweEE4LCBzdHJ1Y3QgZHJtX21vZGVfbW9kZV9jbWQpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0RFVEFDSE1PREUJRFJNX0lPV1IoMHhBOSwgc3RydWN0IGRybV9tb2RlX21vZGVfY21kKQorCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVFBST1BFUlRZCURSTV9JT1dSKDB4QUEsIHN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1NFVFBST1BFUlRZCURSTV9JT1dSKDB4QUIsIHN0cnVjdCBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRQUk9QQkxPQglEUk1fSU9XUigweEFDLCBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IpCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0dFVEZCCQlEUk1fSU9XUigweEFELCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kKQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9BRERGQgkJRFJNX0lPV1IoMHhBRSwgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfUk1GQgkJRFJNX0lPV1IoMHhBRiwgdW5zaWduZWQgaW50KQorCiAvKioKICAqIERldmljZSBzcGVjaWZpYyBpb2N0bHMgc2hvdWxkIG9ubHkgYmUgaW4gdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXJzCiAgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIGZyb20gMHg0MCB0byAweDk5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGQ1ZThlNWMuLmFmYjc4NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCiAjZGVmaW5lIERSSVZFUl9HRU0gICAgICAgICAweDEwMDAKKyNkZWZpbmUgRFJJVkVSX01PREVTRVQgICAgIDB4MjAwMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiogXG5hbWUgQmVnaW4gdGhlIERSTS4uLiAqLwpAQCAtMjM4LDExICsyMzksMTEgQEAKICAqLwogI2RlZmluZSBMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlsZV9wcml2ICkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoICFfRFJNX0xPQ0tfSVNfSEVMRCggZGV2LT5sb2NrLmh3X2xvY2stPmxvY2sgKSB8fAkJXAotCSAgICAgZGV2LT5sb2NrLmZpbGVfcHJpdiAhPSBmaWxlX3ByaXYgKQl7CQkJXAorCWlmICghX0RSTV9MT0NLX0lTX0hFTEQoZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaHdfbG9jay0+bG9jaykgfHwJCVwKKwkgICAgZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suZmlsZV9wcml2ICE9IGZpbGVfcHJpdikJewkJCVwKIAkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGhvdXQgbG9jayBoZWxkLCBoZWxkICAlZCBvd25lciAlcCAlcFxuIixcCi0JCQkgICBfX2Z1bmNfXywgX0RSTV9MT0NLX0lTX0hFTEQoIGRldi0+bG9jay5od19sb2NrLT5sb2NrICksXAotCQkJICAgZGV2LT5sb2NrLmZpbGVfcHJpdiwgZmlsZV9wcml2ICk7CQlcCisJCQkgICBfX2Z1bmNfXywgX0RSTV9MT0NLX0lTX0hFTEQoZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suaHdfbG9jay0+bG9jayksXAorCQkJICAgZmlsZV9wcml2LT5tYXN0ZXItPmxvY2suZmlsZV9wcml2LCBmaWxlX3ByaXYpOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTI3Niw2ICsyNzcsNyBAQAogI2RlZmluZSBEUk1fQVVUSAkweDEKICNkZWZpbmUJRFJNX01BU1RFUgkweDIKICNkZWZpbmUgRFJNX1JPT1RfT05MWQkweDQKKyNkZWZpbmUgRFJNX0NPTlRST0xfQUxMT1cgMHg4CiAKIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB7CiAJdW5zaWduZWQgaW50IGNtZDsKQEAgLTM3OSwyMSArMzgxLDI2IEBACiAvKiogRmlsZSBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBkcm1fZmlsZSB7CiAJaW50IGF1dGhlbnRpY2F0ZWQ7Ci0JaW50IG1hc3RlcjsKIAlwaWRfdCBwaWQ7CiAJdWlkX3QgdWlkOwogCWRybV9tYWdpY190IG1hZ2ljOwogCXVuc2lnbmVkIGxvbmcgaW9jdGxfY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaGVhZDsKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKLQlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCiAJLyoqIE1hcHBpbmcgb2YgbW0gb2JqZWN0IGhhbmRsZXMgdG8gb2JqZWN0IHBvaW50ZXJzLiAqLwogCXN0cnVjdCBpZHIgb2JqZWN0X2lkcjsKIAkvKiogTG9jayBmb3Igc3luY2hyb25pemF0aW9uIG9mIGFjY2VzcyB0byBvYmplY3RfaWRyLiAqLwogCXNwaW5sb2NrX3QgdGFibGVfbG9jazsKKwogCXN0cnVjdCBmaWxlICpmaWxwOwogCXZvaWQgKmRyaXZlcl9wcml2OworCisJaW50IGlzX21hc3RlcjsgLyogdGhpcyBmaWxlIHByaXZhdGUgaXMgYSBtYXN0ZXIgZm9yIGEgbWlub3IgKi8KKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOyAvKiBtYXN0ZXIgdGhpcyBub2RlIGlzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGgKKwkJCQkgICAgICBOLkIuIG5vdCBhbHdheXMgbWlub3ItPm1hc3RlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmJzOwogfTsKIAogLyoqIFdhaXQgcXVldWUgKi8KQEAgLTUyMyw2ICs1MzAsOCBAQAogCXN0cnVjdCBkcm1faGFzaF9pdGVtIGhhc2g7CiAJc3RydWN0IGRybV9tYXAgKm1hcDsJCQkvKio8IG1hcHBpbmcgKi8KIAl1aW50NjRfdCB1c2VyX3Rva2VuOworCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IGRybV9tbV9ub2RlICpmaWxlX29mZnNldF9ub2RlOwkvKio8IGZha2Ugb2Zmc2V0ICovCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWFwIGRybV9sb2NhbF9tYXBfdDsKQEAgLTU2Myw2ICs1NzIsMTQgQEAKIH07CiAKIC8qKgorICogR0VNIHNwZWNpZmljIG1tIHByaXZhdGUgZm9yIHRyYWNraW5nIEdFTSBvYmplY3RzCisgKi8KK3N0cnVjdCBkcm1fZ2VtX21tIHsKKwlzdHJ1Y3QgZHJtX21tIG9mZnNldF9tYW5hZ2VyOwkvKio8IE9mZnNldCBtZ210IGZvciBidWZmZXIgb2JqZWN0cyAqLworCXN0cnVjdCBkcm1fb3Blbl9oYXNoIG9mZnNldF9oYXNoOyAvKio8IFVzZXIgdG9rZW4gaGFzaCB0YWJsZSBmb3IgbWFwcyAqLworfTsKKworLyoqCiAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkcm1fbW0gbWVtb3J5IG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZQogICogRFJNIGZvciBpdHMgYnVmZmVyIG9iamVjdHMuCiAgKi8KQEAgLTU3OSw2ICs1OTYsOSBAQAogCS8qKiBGaWxlIHJlcHJlc2VudGluZyB0aGUgc2htZW0gc3RvcmFnZSAqLwogCXN0cnVjdCBmaWxlICpmaWxwOwogCisJLyogTWFwcGluZyBpbmZvIGZvciB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBkcm1fbWFwX2xpc3QgbWFwX2xpc3Q7CisKIAkvKioKIAkgKiBTaXplIG9mIHRoZSBvYmplY3QsIGluIGJ5dGVzLiAgSW1tdXRhYmxlIG92ZXIgdGhlIG9iamVjdCdzCiAJICogbGlmZXRpbWUuCkBAIC02MTIsNiArNjMyLDMzIEBACiAJdm9pZCAqZHJpdmVyX3ByaXZhdGU7CiB9OwogCisjaW5jbHVkZSAiZHJtX2NydGMuaCIKKworLyogcGVyLW1hc3RlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkcm1fbWFzdGVyIHsKKworCXN0cnVjdCBrcmVmIHJlZmNvdW50OyAvKiByZWZjb3VudCBmb3IgdGhpcyBtYXN0ZXIgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsgLyoqPCBlYWNoIG1pbm9yIGNvbnRhaW5zIGEgbGlzdCBvZiBtYXN0ZXJzICovCisJc3RydWN0IGRybV9taW5vciAqbWlub3I7IC8qKjwgbGluayBiYWNrIHRvIG1pbm9yIHdlIGFyZSBhIG1hc3RlciBmb3IgKi8KKworCWNoYXIgKnVuaXF1ZTsJCQkvKio8IFVuaXF1ZSBpZGVudGlmaWVyOiBlLmcuLCBidXNpZCAqLworCWludCB1bmlxdWVfbGVuOwkJCS8qKjwgTGVuZ3RoIG9mIHVuaXF1ZSBmaWVsZCAqLworCWludCB1bmlxdWVfc2l6ZTsJCS8qKjwgYW1vdW50IGFsbG9jYXRlZCAqLworCisJaW50IGJsb2NrZWQ7CQkJLyoqPCBCbG9ja2VkIGR1ZSB0byBWQyBzd2l0Y2g/ICovCisKKwkvKiogXG5hbWUgQXV0aGVudGljYXRpb24gKi8KKwkvKkB7ICovCisJc3RydWN0IGRybV9vcGVuX2hhc2ggbWFnaWNsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbWFnaWNmcmVlOworCS8qQH0gKi8KKworCXN0cnVjdCBkcm1fbG9ja19kYXRhIGxvY2s7CS8qKjwgSW5mb3JtYXRpb24gb24gaGFyZHdhcmUgbG9jayAqLworCisJdm9pZCAqZHJpdmVyX3ByaXY7IC8qKjwgUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIGRyaXZlciB0byB1c2UgKi8KK307CisKIC8qKgogICogRFJNIGRyaXZlciBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudCB0aGUgY29tbW9uIGNvZGUgZm9yCiAgKiBhIGZhbWlseSBvZiBjYXJkcy4gVGhlcmUgd2lsbCBvbmUgZHJtX2RldmljZSBmb3IgZWFjaCBjYXJkIHByZXNlbnQKQEAgLTcxMiw2ICs3NTksMTAgQEAKIAl2b2lkICgqc2V0X3ZlcnNpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uICpzdik7CiAKKwkvKiBNYXN0ZXIgcm91dGluZXMgKi8KKwlpbnQgKCptYXN0ZXJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKKwl2b2lkICgqbWFzdGVyX2Rlc3Ryb3kpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOworCiAJaW50ICgqcHJvY19pbml0KShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAJdm9pZCAoKnByb2NfY2xlYW51cCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwogCkBAIC03MjQsNiArNzc1LDkgQEAKIAlpbnQgKCpnZW1faW5pdF9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiAJdm9pZCAoKmdlbV9mcmVlX29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAorCS8qIERyaXZlciBwcml2YXRlIG9wcyBmb3IgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKmdlbV92bV9vcHM7CisKIAlpbnQgbWFqb3I7CiAJaW50IG1pbm9yOwogCWludCBwYXRjaGxldmVsOwpAQCAtNzM3LDEwICs3OTEsMTQgQEAKIAlpbnQgbnVtX2lvY3RsczsKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHM7CiAJc3RydWN0IHBjaV9kcml2ZXIgcGNpX2RyaXZlcjsKKwkvKiBMaXN0IG9mIGRldmljZXMgaGFuZ2luZyBvZmYgdGhpcyBkcml2ZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9saXN0OwogfTsKIAogI2RlZmluZSBEUk1fTUlOT1JfVU5BU1NJR05FRCAwCiAjZGVmaW5lIERSTV9NSU5PUl9MRUdBQ1kgMQorI2RlZmluZSBEUk1fTUlOT1JfQ09OVFJPTCAyCisjZGVmaW5lIERSTV9NSU5PUl9SRU5ERVIgMwogCiAvKioKICAqIERSTSBtaW5vciBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkcm0gbWlub3IgbnVtYmVyLgpAQCAtNzUyLDYgKzgxMCw5IEBACiAJc3RydWN0IGRldmljZSBrZGV2OwkJLyoqPCBMaW51eCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGV2X3Jvb3Q7ICAvKio8IHByb2MgZGlyZWN0b3J5IGVudHJ5ICovCisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcjsgLyogY3VycmVudGx5IGFjdGl2ZSBtYXN0ZXIgZm9yIHRoaXMgbm9kZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbWFzdGVyX2xpc3Q7CisJc3RydWN0IGRybV9tb2RlX2dyb3VwIG1vZGVfZ3JvdXA7CiB9OwogCiAvKioKQEAgLTc1OSwxMyArODIwLDEwIEBACiAgKiBtYXkgY29udGFpbiBtdWx0aXBsZSBoZWFkcy4KICAqLwogc3RydWN0IGRybV9kZXZpY2UgewotCWNoYXIgKnVuaXF1ZTsJCQkvKio8IFVuaXF1ZSBpZGVudGlmaWVyOiBlLmcuLCBidXNpZCAqLwotCWludCB1bmlxdWVfbGVuOwkJCS8qKjwgTGVuZ3RoIG9mIHVuaXF1ZSBmaWVsZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZHJpdmVyX2l0ZW07CS8qKjwgbGlzdCBvZiBkZXZpY2VzIHBlciBkcml2ZXIgKi8KIAljaGFyICpkZXZuYW1lOwkJCS8qKjwgRm9yIC9wcm9jL2ludGVycnVwdHMgKi8KIAlpbnQgaWZfdmVyc2lvbjsJCQkvKio8IEhpZ2hlc3QgaW50ZXJmYWNlIHZlcnNpb24gc2V0ICovCiAKLQlpbnQgYmxvY2tlZDsJCQkvKio8IEJsb2NrZWQgZHVlIHRvIFZDIHN3aXRjaD8gKi8KLQogCS8qKiBcbmFtZSBMb2NrcyAqLwogCS8qQHsgKi8KIAlzcGlubG9ja190IGNvdW50X2xvY2s7CQkvKio8IEZvciBpbnVzZSwgZHJtX2RldmljZTo6b3Blbl9jb3VudCwgZHJtX2RldmljZTo6YnVmX3VzZSAqLwpAQCAtNzg4LDEyICs4NDYsNyBAQAogCWF0b21pY190IGNvdW50c1sxNV07CiAJLypAfSAqLwogCi0JLyoqIFxuYW1lIEF1dGhlbnRpY2F0aW9uICovCi0JLypAeyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsZWxpc3Q7Ci0Jc3RydWN0IGRybV9vcGVuX2hhc2ggbWFnaWNsaXN0OwkvKio8IG1hZ2ljIGhhc2ggdGFibGUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG1hZ2ljZnJlZTsKLQkvKkB9ICovCiAKIAkvKiogXG5hbWUgTWVtb3J5IG1hbmFnZW1lbnQgKi8KIAkvKkB7ICovCkBAIC04MTAsNyArODYzLDcgQEAKIAlzdHJ1Y3QgaWRyIGN0eF9pZHI7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZtYWxpc3Q7CS8qKjwgTGlzdCBvZiB2bWFzIChmb3IgZGVidWdnaW5nKSAqLwotCXN0cnVjdCBkcm1fbG9ja19kYXRhIGxvY2s7CS8qKjwgSW5mb3JtYXRpb24gb24gaGFyZHdhcmUgbG9jayAqLworCiAJLypAfSAqLwogCiAJLyoqIFxuYW1lIERNQSBxdWV1ZXMgKGNvbnRleHRzKSAqLwpAQCAtODU4LDYgKzkxMSw3IEBACiAJaW50ICp2YmxhbmtfZW5hYmxlZDsgICAgICAgICAgICAvKiBzbyB3ZSBkb24ndCBjYWxsIGVuYWJsZSBtb3JlIHRoYW4KIAkJCQkJICAgb25jZSBwZXIgZGlzYWJsZSAqLwogCWludCAqdmJsYW5rX2lubW9kZXNldDsgICAgICAgICAgLyogRGlzcGxheSBkcml2ZXIgaXMgc2V0dGluZyBtb2RlICovCisJdTMyICpsYXN0X3ZibGFua193YWl0OwkJLyogTGFzdCB2Ymxhbmsgc2Vxbm8gd2FpdGVkIHBlciBDUlRDICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdmJsYW5rX2Rpc2FibGVfdGltZXI7CiAKIAl1MzIgbWF4X3ZibGFua19jb3VudDsgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB2YmxhbmsgY291bnRlciByZWdpc3RlciAqLwpAQCAtODgxLDEyICs5MzUsMTUgQEAKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqc2c7CS8qKjwgU2NhdHRlciBnYXRoZXIgbWVtb3J5ICovCiAJaW50IG51bV9jcnRjczsgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBDUlRDcyBvbiB0aGlzIGRldmljZSAqLwogCXZvaWQgKmRldl9wcml2YXRlOwkJLyoqPCBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCisJdm9pZCAqbW1fcHJpdmF0ZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqZGV2X21hcHBpbmc7CiAJc3RydWN0IGRybV9zaWdkYXRhIHNpZ2RhdGE7CSAgIC8qKjwgRm9yIGJsb2NrX2FsbF9zaWduYWxzICovCiAJc2lnc2V0X3Qgc2lnbWFzazsKIAogCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXI7CiAJZHJtX2xvY2FsX21hcF90ICphZ3BfYnVmZmVyX21hcDsKIAl1bnNpZ25lZCBpbnQgYWdwX2J1ZmZlcl90b2tlbjsKKwlzdHJ1Y3QgZHJtX21pbm9yICpjb250cm9sOwkJLyoqPCBDb250cm9sIG5vZGUgZm9yIGNhcmQgKi8KIAlzdHJ1Y3QgZHJtX21pbm9yICpwcmltYXJ5OwkJLyoqPCByZW5kZXIgdHlwZSBwcmltYXJ5IHNjcmVlbiBoZWFkICovCiAKIAkvKiogXG5hbWUgRHJhd2FibGUgaW5mb3JtYXRpb24gKi8KQEAgLTg5NSw2ICs5NTIsOCBAQAogCXN0cnVjdCBpZHIgZHJ3X2lkcjsKIAkvKkB9ICovCiAKKyAgICAgICAgc3RydWN0IGRybV9tb2RlX2NvbmZpZyBtb2RlX2NvbmZpZzsJLyoqPCBDdXJyZW50IG1vZGUgY29uZmlnICovCisKIAkvKiogXG5hbWUgR0VNIGluZm9ybWF0aW9uICovCiAJLypAeyAqLwogCXNwaW5sb2NrX3Qgb2JqZWN0X25hbWVfbG9jazsKQEAgLTk5Nyw2ICsxMDU2LDggQEAKIAogCQkJCS8qIE1hcHBpbmcgc3VwcG9ydCAoZHJtX3ZtLmgpICovCiBleHRlcm4gaW50IGRybV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gaW50IGRybV9tbWFwX2xvY2tlZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIHZvaWQgZHJtX3ZtX29wZW5fbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9tYXBfb2ZzKHN0cnVjdCBkcm1fbWFwICogbWFwKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKQEAgLTExNTMsNiArMTIxNCw4IEBACiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAvKiBNb2Rlc2V0dGluZyBzdXBwb3J0ICovCitleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3ByZV9tb2Rlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiBpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKQEAgLTExODksNiArMTI1MiwxMyBAQAogZXh0ZXJuIHZvaWQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiAJCQkJLyogU3R1YiBzdXBwb3J0IChkcm1fc3R1Yi5oKSAqLworZXh0ZXJuIGludCBkcm1fc2V0bWFzdGVyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fZHJvcG1hc3Rlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3N0cnVjdCBkcm1fbWFzdGVyICpkcm1fbWFzdGVyX2NyZWF0ZShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitleHRlcm4gc3RydWN0IGRybV9tYXN0ZXIgKmRybV9tYXN0ZXJfZ2V0KHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOworZXh0ZXJuIHZvaWQgZHJtX21hc3Rlcl9wdXQoc3RydWN0IGRybV9tYXN0ZXIgKiptYXN0ZXIpOwogZXh0ZXJuIGludCBkcm1fZ2V0X2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwKIAkJICAgICAgIHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwogZXh0ZXJuIGludCBkcm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTEyMzEsNyArMTMwMSwxMSBAQAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqZHJtX3N5c2ZzX2NyZWF0ZShzdHJ1Y3QgbW9kdWxlICpvd25lciwgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBkcm1fc3lzZnNfZGVzdHJveSh2b2lkKTsKIGV4dGVybiBpbnQgZHJtX3N5c2ZzX2RldmljZV9hZGQoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworZXh0ZXJuIHZvaWQgZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fc3lzZnNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitleHRlcm4gY2hhciAqZHJtX2dldF9jb25uZWN0b3Jfc3RhdHVzX25hbWUoZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpOworZXh0ZXJuIGludCBkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2V4dGVybiB2b2lkIGRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiAvKgogICogQmFzaWMgbWVtb3J5IG1hbmFnZXIgc3VwcG9ydCAoZHJtX21tLmMpCkBAIC0xMjUxLDEwICsxMzI1LDEyIEBACiAKIC8qIEdyYXBoaWNzIEV4ZWN1dGlvbiBNYW5hZ2VyIGxpYnJhcnkgZnVuY3Rpb25zIChkcm1fZ2VtLmMpICovCiBpbnQgZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBkcm1fZ2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwogc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgc2l6ZV90IHNpemUpOwogdm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CitpbnQgZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjYjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTAsMCArMSw3MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwNiBLZWl0aCBQYWNrYXJkCisgKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDA4IERhdmUgQWlybGllCisgKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0RSTV9DUlRDX0hfXworI2RlZmluZSBfX0RSTV9DUlRDX0hfXworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgZHJtX21vZGVfc2V0Oworc3RydWN0IGRybV9mcmFtZWJ1ZmZlcjsKKworCisjZGVmaW5lIERSTV9NT0RFX09CSkVDVF9DUlRDIDB4Y2NjY2NjY2MKKyNkZWZpbmUgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUiAweGMwYzBjMGMwCisjZGVmaW5lIERSTV9NT0RFX09CSkVDVF9FTkNPREVSIDB4ZTBlMGUwZTAKKyNkZWZpbmUgRFJNX01PREVfT0JKRUNUX01PREUgMHhkZWRlZGVkZQorI2RlZmluZSBEUk1fTU9ERV9PQkpFQ1RfUFJPUEVSVFkgMHhiMGIwYjBiMAorI2RlZmluZSBEUk1fTU9ERV9PQkpFQ1RfRkIgMHhmYmZiZmJmYgorI2RlZmluZSBEUk1fTU9ERV9PQkpFQ1RfQkxPQiAweGJiYmJiYmJiCisKK3N0cnVjdCBkcm1fbW9kZV9vYmplY3QgeworCXVpbnQzMl90IGlkOworCXVpbnQzMl90IHR5cGU7Cit9OworCisvKgorICogTm90ZSBvbiB0ZXJtaW5vbG9neTogIGhlcmUsIGZvciBicmV2aXR5IGFuZCBjb252ZW5pZW5jZSwgd2UgcmVmZXIgdG8gY29ubmVjdG9yCisgKiBjb250cm9sIGNoaXBzIGFzICdDUlRDcycuICBUaGV5IGNhbiBjb250cm9sIGFueSB0eXBlIG9mIGNvbm5lY3RvciwgVkdBLCBMVkRTLAorICogRFZJLCBldGMuICBBbmQgJ3NjcmVlbicgcmVmZXJzIHRvIHRoZSB3aG9sZSBvZiB0aGUgdmlzaWJsZSBkaXNwbGF5LCB3aGljaAorICogbWF5IHNwYW4gbXVsdGlwbGUgbW9uaXRvcnMgKGFuZCB0aGVyZWZvcmUgbXVsdGlwbGUgQ1JUQyBhbmQgY29ubmVjdG9yCisgKiBzdHJ1Y3R1cmVzKS4KKyAqLworCitlbnVtIGRybV9tb2RlX3N0YXR1cyB7CisgICAgTU9ERV9PSwk9IDAsCS8qIE1vZGUgT0sgKi8KKyAgICBNT0RFX0hTWU5DLAkJLyogaHN5bmMgb3V0IG9mIHJhbmdlICovCisgICAgTU9ERV9WU1lOQywJCS8qIHZzeW5jIG91dCBvZiByYW5nZSAqLworICAgIE1PREVfSF9JTExFR0FMLAkvKiBtb2RlIGhhcyBpbGxlZ2FsIGhvcml6b250YWwgdGltaW5ncyAqLworICAgIE1PREVfVl9JTExFR0FMLAkvKiBtb2RlIGhhcyBpbGxlZ2FsIGhvcml6b250YWwgdGltaW5ncyAqLworICAgIE1PREVfQkFEX1dJRFRILAkvKiByZXF1aXJlcyBhbiB1bnN1cHBvcnRlZCBsaW5lcGl0Y2ggKi8KKyAgICBNT0RFX05PTU9ERSwJLyogbm8gbW9kZSB3aXRoIGEgbWFjaGluZyBuYW1lICovCisgICAgTU9ERV9OT19JTlRFUkxBQ0UsCS8qIGludGVybGFjZWQgbW9kZSBub3Qgc3VwcG9ydGVkICovCisgICAgTU9ERV9OT19EQkxFU0NBTiwJLyogZG91Ymxlc2NhbiBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBNT0RFX05PX1ZTQ0FOLAkvKiBtdWx0aXNjYW4gbW9kZSBub3Qgc3VwcG9ydGVkICovCisgICAgTU9ERV9NRU0sCQkvKiBpbnN1ZmZpY2llbnQgdmlkZW8gbWVtb3J5ICovCisgICAgTU9ERV9WSVJUVUFMX1gsCS8qIG1vZGUgd2lkdGggdG9vIGxhcmdlIGZvciBzcGVjaWZpZWQgdmlydHVhbCBzaXplICovCisgICAgTU9ERV9WSVJUVUFMX1ksCS8qIG1vZGUgaGVpZ2h0IHRvbyBsYXJnZSBmb3Igc3BlY2lmaWVkIHZpcnR1YWwgc2l6ZSAqLworICAgIE1PREVfTUVNX1ZJUlQsCS8qIGluc3VmZmljaWVudCB2aWRlbyBtZW1vcnkgZ2l2ZW4gdmlydHVhbCBzaXplICovCisgICAgTU9ERV9OT0NMT0NLLAkvKiBubyBmaXhlZCBjbG9jayBhdmFpbGFibGUgKi8KKyAgICBNT0RFX0NMT0NLX0hJR0gsCS8qIGNsb2NrIHJlcXVpcmVkIGlzIHRvbyBoaWdoICovCisgICAgTU9ERV9DTE9DS19MT1csCS8qIGNsb2NrIHJlcXVpcmVkIGlzIHRvbyBsb3cgKi8KKyAgICBNT0RFX0NMT0NLX1JBTkdFLAkvKiBjbG9jay9tb2RlIGlzbid0IGluIGEgQ2xvY2tSYW5nZSAqLworICAgIE1PREVfQkFEX0hWQUxVRSwJLyogaG9yaXpvbnRhbCB0aW1pbmcgd2FzIG91dCBvZiByYW5nZSAqLworICAgIE1PREVfQkFEX1ZWQUxVRSwJLyogdmVydGljYWwgdGltaW5nIHdhcyBvdXQgb2YgcmFuZ2UgKi8KKyAgICBNT0RFX0JBRF9WU0NBTiwJLyogVlNjYW4gdmFsdWUgb3V0IG9mIHJhbmdlICovCisgICAgTU9ERV9IU1lOQ19OQVJST1csCS8qIGhvcml6b250YWwgc3luYyB0b28gbmFycm93ICovCisgICAgTU9ERV9IU1lOQ19XSURFLAkvKiBob3Jpem9udGFsIHN5bmMgdG9vIHdpZGUgKi8KKyAgICBNT0RFX0hCTEFOS19OQVJST1csCS8qIGhvcml6b250YWwgYmxhbmtpbmcgdG9vIG5hcnJvdyAqLworICAgIE1PREVfSEJMQU5LX1dJREUsCS8qIGhvcml6b250YWwgYmxhbmtpbmcgdG9vIHdpZGUgKi8KKyAgICBNT0RFX1ZTWU5DX05BUlJPVywJLyogdmVydGljYWwgc3luYyB0b28gbmFycm93ICovCisgICAgTU9ERV9WU1lOQ19XSURFLAkvKiB2ZXJ0aWNhbCBzeW5jIHRvbyB3aWRlICovCisgICAgTU9ERV9WQkxBTktfTkFSUk9XLAkvKiB2ZXJ0aWNhbCBibGFua2luZyB0b28gbmFycm93ICovCisgICAgTU9ERV9WQkxBTktfV0lERSwJLyogdmVydGljYWwgYmxhbmtpbmcgdG9vIHdpZGUgKi8KKyAgICBNT0RFX1BBTkVMLCAgICAgICAgIC8qIGV4Y2VlZHMgcGFuZWwgZGltZW5zaW9ucyAqLworICAgIE1PREVfSU5URVJMQUNFX1dJRFRILCAvKiB3aWR0aCB0b28gbGFyZ2UgZm9yIGludGVybGFjZWQgbW9kZSAqLworICAgIE1PREVfT05FX1dJRFRILCAgICAgLyogb25seSBvbmUgd2lkdGggaXMgc3VwcG9ydGVkICovCisgICAgTU9ERV9PTkVfSEVJR0hULCAgICAvKiBvbmx5IG9uZSBoZWlnaHQgaXMgc3VwcG9ydGVkICovCisgICAgTU9ERV9PTkVfU0laRSwgICAgICAvKiBvbmx5IG9uZSByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCAqLworICAgIE1PREVfTk9fUkVEVUNFRCwgICAgLyogbW9uaXRvciBkb2Vzbid0IGFjY2VwdCByZWR1Y2VkIGJsYW5raW5nICovCisgICAgTU9ERV9VTlZFUklGSUVEID0gLTMsIC8qIG1vZGUgbmVlZHMgdG8gcmV2ZXJpZmllZCAqLworICAgIE1PREVfQkFEID0gLTIsCS8qIHVuc3BlY2lmaWVkIHJlYXNvbiAqLworICAgIE1PREVfRVJST1IJPSAtMQkvKiBlcnJvciBjb25kaXRpb24gKi8KK307CisKKyNkZWZpbmUgRFJNX01PREVfVFlQRV9DTE9DS19DUlRDX0MgKERSTV9NT0RFX1RZUEVfQ0xPQ0tfQyB8IFwKKwkJCQkgICAgRFJNX01PREVfVFlQRV9DUlRDX0MpCisKKyNkZWZpbmUgRFJNX01PREUobm0sIHQsIGMsIGhkLCBoc3MsIGhzZSwgaHQsIGhzaywgdmQsIHZzcywgdnNlLCB2dCwgdnMsIGYpIFwKKwkubmFtZSA9IG5tLCAuc3RhdHVzID0gMCwgLnR5cGUgPSAodCksIC5jbG9jayA9IChjKSwgXAorCS5oZGlzcGxheSA9IChoZCksIC5oc3luY19zdGFydCA9IChoc3MpLCAuaHN5bmNfZW5kID0gKGhzZSksIFwKKwkuaHRvdGFsID0gKGh0KSwgLmhza2V3ID0gKGhzayksIC52ZGlzcGxheSA9ICh2ZCksIFwKKwkudnN5bmNfc3RhcnQgPSAodnNzKSwgLnZzeW5jX2VuZCA9ICh2c2UpLCAudnRvdGFsID0gKHZ0KSwgXAorCS52c2NhbiA9ICh2cyksIC5mbGFncyA9IChmKSwgLnZyZWZyZXNoID0gMAorCisjZGVmaW5lIENSVENfSU5URVJMQUNFX0hBTFZFX1YgMHgxIC8qIGhhbHZlIFYgdmFsdWVzIGZvciBpbnRlcmxhY2luZyAqLworCitzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB7CisJLyogSGVhZGVyICovCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgYmFzZTsKKworCWNoYXIgbmFtZVtEUk1fRElTUExBWV9NT0RFX0xFTl07CisKKwlpbnQgY29ubmVjdG9yX2NvdW50OworCWVudW0gZHJtX21vZGVfc3RhdHVzIHN0YXR1czsKKwlpbnQgdHlwZTsKKworCS8qIFByb3Bvc2VkIG1vZGUgdmFsdWVzICovCisJaW50IGNsb2NrOworCWludCBoZGlzcGxheTsKKwlpbnQgaHN5bmNfc3RhcnQ7CisJaW50IGhzeW5jX2VuZDsKKwlpbnQgaHRvdGFsOworCWludCBoc2tldzsKKwlpbnQgdmRpc3BsYXk7CisJaW50IHZzeW5jX3N0YXJ0OworCWludCB2c3luY19lbmQ7CisJaW50IHZ0b3RhbDsKKwlpbnQgdnNjYW47CisJdW5zaWduZWQgaW50IGZsYWdzOworCisJLyogQWRkcmVzc2FibGUgaW1hZ2Ugc2l6ZSAobWF5IGJlIDAgZm9yIHByb2plY3RvcnMsIGV0Yy4pICovCisJaW50IHdpZHRoX21tOworCWludCBoZWlnaHRfbW07CisKKwkvKiBBY3R1YWwgbW9kZSB3ZSBnaXZlIHRvIGh3ICovCisJaW50IGNsb2NrX2luZGV4OworCWludCBzeW50aF9jbG9jazsKKwlpbnQgY3J0Y19oZGlzcGxheTsKKwlpbnQgY3J0Y19oYmxhbmtfc3RhcnQ7CisJaW50IGNydGNfaGJsYW5rX2VuZDsKKwlpbnQgY3J0Y19oc3luY19zdGFydDsKKwlpbnQgY3J0Y19oc3luY19lbmQ7CisJaW50IGNydGNfaHRvdGFsOworCWludCBjcnRjX2hza2V3OworCWludCBjcnRjX3ZkaXNwbGF5OworCWludCBjcnRjX3ZibGFua19zdGFydDsKKwlpbnQgY3J0Y192YmxhbmtfZW5kOworCWludCBjcnRjX3ZzeW5jX3N0YXJ0OworCWludCBjcnRjX3ZzeW5jX2VuZDsKKwlpbnQgY3J0Y192dG90YWw7CisJaW50IGNydGNfaGFkanVzdGVkOworCWludCBjcnRjX3ZhZGp1c3RlZDsKKworCS8qIERyaXZlciBwcml2YXRlIG1vZGUgaW5mbyAqLworCWludCBwcml2YXRlX3NpemU7CisJaW50ICpwcml2YXRlOworCWludCBwcml2YXRlX2ZsYWdzOworCisJaW50IHZyZWZyZXNoOworCWZsb2F0IGhzeW5jOworfTsKKworZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyB7CisJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgPSAxLAorCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkID0gMiwKKwljb25uZWN0b3Jfc3RhdHVzX3Vua25vd24gPSAzLAorfTsKKworZW51bSBzdWJwaXhlbF9vcmRlciB7CisJU3ViUGl4ZWxVbmtub3duID0gMCwKKwlTdWJQaXhlbEhvcml6b250YWxSR0IsCisJU3ViUGl4ZWxIb3Jpem9udGFsQkdSLAorCVN1YlBpeGVsVmVydGljYWxSR0IsCisJU3ViUGl4ZWxWZXJ0aWNhbEJHUiwKKwlTdWJQaXhlbE5vbmUsCit9OworCisKKy8qCisgKiBEZXNjcmliZXMgYSBnaXZlbiBkaXNwbGF5IChlLmcuIENSVCBvciBmbGF0IHBhbmVsKSBhbmQgaXRzIGxpbWl0YXRpb25zLgorICovCitzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyB7CisJY2hhciBuYW1lW0RSTV9ESVNQTEFZX0lORk9fTEVOXTsKKwkvKiBJbnB1dCBpbmZvICovCisJYm9vbCBzZXJyYXRpb25fdnN5bmM7CisJYm9vbCBzeW5jX29uX2dyZWVuOworCWJvb2wgY29tcG9zaXRlX3N5bmM7CisJYm9vbCBzZXBhcmF0ZV9zeW5jczsKKwlib29sIGJsYW5rX3RvX2JsYWNrOworCXVuc2lnbmVkIGNoYXIgdmlkZW9fbGV2ZWw7CisJYm9vbCBkaWdpdGFsOworCS8qIFBoeXNpY2FsIHNpemUgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoX21tOworCXVuc2lnbmVkIGludCBoZWlnaHRfbW07CisKKwkvKiBEaXNwbGF5IHBhcmFtZXRlcnMgKi8KKwl1bnNpZ25lZCBjaGFyIGdhbW1hOyAvKiBGSVhNRTogc3RvcmFnZSBmb3JtYXQgKi8KKwlib29sIGd0Zl9zdXBwb3J0ZWQ7CisJYm9vbCBzdGFuZGFyZF9jb2xvcjsKKwllbnVtIHsKKwkJbW9ub2Nocm9tZSA9IDAsCisJCXJnYiwKKwkJb3RoZXIsCisJCXVua25vd24sCisJfSBkaXNwbGF5X3R5cGU7CisJYm9vbCBhY3RpdmVfb2ZmX3N1cHBvcnRlZDsKKwlib29sIHN1c3BlbmRfc3VwcG9ydGVkOworCWJvb2wgc3RhbmRieV9zdXBwb3J0ZWQ7CisKKwkvKiBDb2xvciBpbmZvIEZJWE1FOiBzdG9yYWdlIGZvcm1hdCAqLworCXVuc2lnbmVkIHNob3J0IHJlZHgsIHJlZHk7CisJdW5zaWduZWQgc2hvcnQgZ3JlZW54LCBncmVlbnk7CisJdW5zaWduZWQgc2hvcnQgYmx1ZXgsIGJsdWV5OworCXVuc2lnbmVkIHNob3J0IHdoaXRleCwgd2hpdGV5OworCisJLyogQ2xvY2sgbGltaXRzIEZJWE1FOiBzdG9yYWdlIGZvcm1hdCAqLworCXVuc2lnbmVkIGludCBtaW5fdmZyZXEsIG1heF92ZnJlcTsKKwl1bnNpZ25lZCBpbnQgbWluX2hmcmVxLCBtYXhfaGZyZXE7CisJdW5zaWduZWQgaW50IHBpeGVsX2Nsb2NrOworCisJLyogV2hpdGUgcG9pbnQgaW5kaWNlcyBGSVhNRTogc3RvcmFnZSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgd3B4MSwgd3B5MTsKKwl1bnNpZ25lZCBpbnQgd3BnYW1tYTE7CisJdW5zaWduZWQgaW50IHdweDIsIHdweTI7CisJdW5zaWduZWQgaW50IHdwZ2FtbWEyOworCisJZW51bSBzdWJwaXhlbF9vcmRlciBzdWJwaXhlbF9vcmRlcjsKKworCWNoYXIgKnJhd19lZGlkOyAvKiBpZiBhbnkgKi8KK307CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgeworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7CisJaW50ICgqY3JlYXRlX2hhbmRsZSkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSk7Cit9OworCitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0IGJhc2U7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAqZnVuY3M7CisJdW5zaWduZWQgaW50IHBpdGNoOworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCS8qIGRlcHRoIGNhbiBiZSAxNSBvciAxNiAqLworCXVuc2lnbmVkIGludCBkZXB0aDsKKwlpbnQgYml0c19wZXJfcGl4ZWw7CisJaW50IGZsYWdzOworCXZvaWQgKmZiZGV2OworCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxN107CisJc3RydWN0IGxpc3RfaGVhZCBmaWxwX2hlYWQ7Cit9OworCitzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgeworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgYmFzZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl2b2lkICpkYXRhOworfTsKKworc3RydWN0IGRybV9wcm9wZXJ0eV9lbnVtIHsKKwl1aW50NjRfdCB2YWx1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKK307CisKK3N0cnVjdCBkcm1fcHJvcGVydHkgeworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0IGJhc2U7CisJdWludDMyX3QgZmxhZ3M7CisJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKKwl1aW50MzJfdCBudW1fdmFsdWVzOworCXVpbnQ2NF90ICp2YWx1ZXM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudW1fYmxvYl9saXN0OworfTsKKworc3RydWN0IGRybV9jcnRjOworc3RydWN0IGRybV9jb25uZWN0b3I7CitzdHJ1Y3QgZHJtX2VuY29kZXI7CisKKy8qKgorICogZHJtX2NydGNfZnVuY3MgLSBjb250cm9sIENSVENzIGZvciBhIGdpdmVuIGRldmljZQorICogQGRwbXM6IGNvbnRyb2wgZGlzcGxheSBwb3dlciBsZXZlbHMKKyAqIEBzYXZlOiBzYXZlIENSVEMgc3RhdGUKKyAqIEByZXNvcmU6IHJlc3RvcmUgQ1JUQyBzdGF0ZQorICogQGxvY2s6IGxvY2sgdGhlIENSVEMKKyAqIEB1bmxvY2s6IHVubG9jayB0aGUgQ1JUQworICogQHNoYWRvd19hbGxvY2F0ZTogYWxsb2NhdGUgc2hhZG93IHBpeG1hcAorICogQHNoYWRvd19jcmVhdGU6IGNyZWF0ZSBzaGFkb3cgcGl4bWFwIGZvciByb3RhdGlvbiBzdXBwb3J0CisgKiBAc2hhZG93X2Rlc3Ryb3k6IGZyZWUgc2hhZG93IHBpeG1hcAorICogQG1vZGVfZml4dXA6IGZpeHVwIHByb3Bvc2VkIG1vZGUKKyAqIEBtb2RlX3NldDogc2V0IHRoZSBkZXNpcmVkIG1vZGUgb24gdGhlIENSVEMKKyAqIEBnYW1tYV9zZXQ6IHNwZWNpZnkgY29sb3IgcmFtcCBmb3IgQ1JUQworICogQGRlc3Ryb3k6IGRlaW5pdCBhbmQgZnJlZSBvYmplY3QuCisgKgorICogVGhlIGRybV9jcnRjX2Z1bmNzIHN0cnVjdHVyZSBpcyB0aGUgY2VudHJhbCBDUlRDIG1hbmFnZW1lbnQgc3RydWN0dXJlCisgKiBpbiB0aGUgRFJNLiAgRWFjaCBDUlRDIGNvbnRyb2xzIG9uZSBvciBtb3JlIGNvbm5lY3RvcnMgKG5vdGUgdGhhdCB0aGUgbmFtZQorICogQ1JUQyBpcyBzaW1wbHkgaGlzdG9yaWNhbCwgYSBDUlRDIG1heSBjb250cm9sIExWRFMsIFZHQSwgRFZJLCBUViBvdXQsIGV0Yy4KKyAqIGNvbm5lY3RvcnMsIG5vdCBqdXN0IENSVHMpLgorICoKKyAqIEVhY2ggZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIG91dCB0aGlzIHN0cnVjdHVyZSBhdCBzdGFydHVwIHRpbWUsCisgKiBpbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgb3RoZXIgbW9kZXNldHRpbmcgZmVhdHVyZXMsIGxpa2UgaTJjIGFuZCBEREMKKyAqIGJ1cyBhY2Nlc3NvcnMuCisgKi8KK3N0cnVjdCBkcm1fY3J0Y19mdW5jcyB7CisJLyogU2F2ZSBDUlRDIHN0YXRlICovCisJdm9pZCAoKnNhdmUpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7IC8qIHN1c3BlbmQ/ICovCisJLyogUmVzdG9yZSBDUlRDIHN0YXRlICovCisJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7IC8qIHJlc3VtZT8gKi8KKworCS8qIGN1cnNvciBjb250cm9scyAqLworCWludCAoKmN1cnNvcl9zZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCk7CisJaW50ICgqY3Vyc29yX21vdmUpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5KTsKKworCS8qIFNldCBnYW1tYSBvbiB0aGUgQ1JUQyAqLworCXZvaWQgKCpnYW1tYV9zZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyLCB1MTYgKmcsIHUxNiAqYiwKKwkJCSAgdWludDMyX3Qgc2l6ZSk7CisJLyogT2JqZWN0IGRlc3Ryb3kgcm91dGluZSAqLworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCisJaW50ICgqc2V0X2NvbmZpZykoc3RydWN0IGRybV9tb2RlX3NldCAqc2V0KTsKK307CisKKy8qKgorICogZHJtX2NydGMgLSBjZW50cmFsIENSVEMgY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBlbmFibGVkOiBpcyB0aGlzIENSVEMgZW5hYmxlZD8KKyAqIEB4OiB4IHBvc2l0aW9uIG9uIHNjcmVlbgorICogQHk6IHkgcG9zaXRpb24gb24gc2NyZWVuCisgKiBAZGVzaXJlZF9tb2RlOiBuZXcgZGVzaXJlZCBtb2RlCisgKiBAZGVzaXJlZF94OiBkZXNpcmVkIHggZm9yIGRlc2lyZWRfbW9kZQorICogQGRlc2lyZWRfeTogZGVzaXJlZCB5IGZvciBkZXNpcmVkX21vZGUKKyAqIEBmdW5jczogQ1JUQyBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIEVhY2ggQ1JUQyBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBjb25uZWN0b3JzIGFzc29jaWF0ZWQgd2l0aCBpdC4gIFRoaXMgc3RydWN0dXJlCisgKiBhbGxvd3MgdGhlIENSVEMgdG8gYmUgY29udHJvbGxlZC4KKyAqLworc3RydWN0IGRybV9jcnRjIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgYmFzZTsKKworCS8qIGZyYW1lYnVmZmVyIHRoZSBjb25uZWN0b3IgaXMgY3VycmVudGx5IGJvdW5kIHRvICovCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisKKwlib29sIGVuYWJsZWQ7CisKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCisJaW50IHgsIHk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRlc2lyZWRfbW9kZTsKKwlpbnQgZGVzaXJlZF94LCBkZXNpcmVkX3k7CisJY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzICpmdW5jczsKKworCS8qIENSVEMgZ2FtbWEgc2l6ZSBmb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSAqLworCXVpbnQzMl90IGdhbW1hX3NpemU7CisJdWludDE2X3QgKmdhbW1hX3N0b3JlOworCisJLyogaWYgeW91IGFyZSB1c2luZyB0aGUgaGVscGVyICovCisJdm9pZCAqaGVscGVyX3ByaXZhdGU7Cit9OworCisKKy8qKgorICogZHJtX2Nvbm5lY3Rvcl9mdW5jcyAtIGNvbnRyb2wgY29ubmVjdG9ycyBvbiBhIGdpdmVuIGRldmljZQorICogQGRwbXM6IHNldCBwb3dlciBzdGF0ZSAoc2VlIGRybV9jcnRjX2Z1bmNzIGFib3ZlKQorICogQHNhdmU6IHNhdmUgY29ubmVjdG9yIHN0YXRlCisgKiBAcmVzdG9yZTogcmVzdG9yZSBjb25uZWN0b3Igc3RhdGUKKyAqIEBtb2RlX3ZhbGlkOiBpcyB0aGlzIG1vZGUgdmFsaWQgb24gdGhlIGdpdmVuIGNvbm5lY3Rvcj8KKyAqIEBtb2RlX2ZpeHVwOiB0cnkgdG8gZml4dXAgcHJvcG9zZWQgbW9kZSBmb3IgdGhpcyBjb25uZWN0b3IKKyAqIEBtb2RlX3NldDogc2V0IHRoaXMgbW9kZQorICogQGRldGVjdDogaXMgdGhpcyBjb25uZWN0b3IgYWN0aXZlPworICogQGdldF9tb2RlczogZ2V0IG1vZGUgbGlzdCBmb3IgdGhpcyBjb25uZWN0b3IKKyAqIEBzZXRfcHJvcGVydHk6IHByb3BlcnR5IGZvciB0aGlzIGNvbm5lY3RvciBtYXkgbmVlZCB1cGRhdGUKKyAqIEBkZXN0cm95OiBtYWtlIG9iamVjdCBnbyBhd2F5CisgKgorICogRWFjaCBDUlRDIG1heSBoYXZlIG9uZSBvciBtb3JlIGNvbm5lY3RvcnMgYXR0YWNoZWQgdG8gaXQuICBUaGUgZnVuY3Rpb25zCisgKiBiZWxvdyBhbGxvdyB0aGUgY29yZSBEUk0gY29kZSB0byBjb250cm9sIGNvbm5lY3RvcnMsIGVudW1lcmF0ZSBhdmFpbGFibGUgbW9kZXMsCisgKiBldGMuCisgKi8KK3N0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHsKKwl2b2lkICgqZHBtcykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpOworCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJdm9pZCAoKmZpbGxfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHVpbnQzMl90IG1heF93aWR0aCwgdWludDMyX3QgbWF4X2hlaWdodCk7CisJaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCSAgICAgdWludDY0X3QgdmFsKTsKKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cit9OworCitzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgeworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworfTsKKworI2RlZmluZSBEUk1fQ09OTkVDVE9SX01BWF9VTU9ERVMgMTYKKyNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFkgMTYKKyNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9MRU4gMzIKKyNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUiAyCisKKy8qKgorICogZHJtX2VuY29kZXIgLSBjZW50cmFsIERSTSBlbmNvZGVyIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZHJtX2VuY29kZXIgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCisJc3RydWN0IGRybV9tb2RlX29iamVjdCBiYXNlOworCWludCBlbmNvZGVyX3R5cGU7CisJdWludDMyX3QgcG9zc2libGVfY3J0Y3M7CisJdWludDMyX3QgcG9zc2libGVfY2xvbmVzOworCisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCWNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyAqZnVuY3M7CisJdm9pZCAqaGVscGVyX3ByaXZhdGU7Cit9OworCisvKioKKyAqIGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3IgY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBjcnRjOiBDUlRDIHRoaXMgY29ubmVjdG9yIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8sIE5VTEwgaWYgbm9uZQorICogQGludGVybGFjZV9hbGxvd2VkOiBjYW4gdGhpcyBjb25uZWN0b3IgaGFuZGxlIGludGVybGFjZWQgbW9kZXM/CisgKiBAZG91Ymxlc2Nhbl9hbGxvd2VkOiBjYW4gdGhpcyBjb25uZWN0b3IgaGFuZGxlIGRvdWJsZXNjYW4/CisgKiBAYXZhaWxhYmxlX21vZGVzOiBtb2RlcyBhdmFpbGFibGUgb24gdGhpcyBjb25uZWN0b3IgKGZyb20gZ2V0X21vZGVzKCkgKyB1c2VyKQorICogQGluaXRpYWxfeDogaW5pdGlhbCB4IHBvc2l0aW9uIGZvciB0aGlzIGNvbm5lY3RvcgorICogQGluaXRpYWxfeTogaW5pdGlhbCB5IHBvc2l0aW9uIGZvciB0aGlzIGNvbm5lY3RvcgorICogQHN0YXR1czogY29ubmVjdG9yIGNvbm5lY3RlZD8KKyAqIEBmdW5jczogY29ubmVjdG9yIGNvbnRyb2wgZnVuY3Rpb25zCisgKgorICogRWFjaCBjb25uZWN0b3IgbWF5IGJlIGNvbm5lY3RlZCB0byBvbmUgb3IgbW9yZSBDUlRDcywgb3IgbWF5IGJlIGNsb25hYmxlIGJ5CisgKiBhbm90aGVyIGNvbm5lY3RvciBpZiB0aGV5IGNhbiBzaGFyZSBhIENSVEMuICBFYWNoIGNvbm5lY3RvciBhbHNvIGhhcyBhIHNwZWNpZmljCisgKiBwb3NpdGlvbiBpbiB0aGUgYnJvYWRlciBkaXNwbGF5IChyZWZlcnJlZCB0byBhcyBhICdzY3JlZW4nIHRob3VnaCBpdCBjb3VsZAorICogc3BhbiBtdWx0aXBsZSBtb25pdG9ycykuCisgKi8KK3N0cnVjdCBkcm1fY29ubmVjdG9yIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2Uga2RldjsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0IGJhc2U7CisKKwlpbnQgY29ubmVjdG9yX3R5cGU7CisJaW50IGNvbm5lY3Rvcl90eXBlX2lkOworCWJvb2wgaW50ZXJsYWNlX2FsbG93ZWQ7CisJYm9vbCBkb3VibGVzY2FuX2FsbG93ZWQ7CisJc3RydWN0IGxpc3RfaGVhZCBtb2RlczsgLyogbGlzdCBvZiBtb2RlcyBvbiB0aGlzIGNvbm5lY3RvciAqLworCisJaW50IGluaXRpYWxfeCwgaW5pdGlhbF95OworCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOworCisJLyogdGhlc2UgYXJlIG1vZGVzIGFkZGVkIGJ5IHByb2Jpbmcgd2l0aCBEREMgb3IgdGhlIEJJT1MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlZF9tb2RlczsKKworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvIGRpc3BsYXlfaW5mbzsKKwljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqZnVuY3M7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJfbW9kZXM7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICplZGlkX2Jsb2JfcHRyOworCXUzMiBwcm9wZXJ0eV9pZHNbRFJNX0NPTk5FQ1RPUl9NQVhfUFJPUEVSVFldOworCXVpbnQ2NF90IHByb3BlcnR5X3ZhbHVlc1tEUk1fQ09OTkVDVE9SX01BWF9QUk9QRVJUWV07CisKKwl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKKworCXVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOworCXVpbnQzMl90IGZvcmNlX2VuY29kZXJfaWQ7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIGVuY29kZXIgKi8KK307CisKKy8qKgorICogc3RydWN0IGRybV9tb2RlX3NldAorICoKKyAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY3J0YyB0aGUgY29ubmVjdG9ycyB0aGF0IGl0IGRyaXZlcyB3aXRoIHdoYXQgbW9kZQorICogYW5kIGZyb20gd2hpY2ggZnJhbWVidWZmZXIgaXQgc2NhbnMgb3V0IGZyb20uCisgKgorICogVGhpcyBpcyB1c2VkIHRvIHNldCBtb2Rlcy4KKyAqLworc3RydWN0IGRybV9tb2RlX3NldCB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJdWludDMyX3QgeDsKKwl1aW50MzJfdCB5OworCisJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzOworCXNpemVfdCBudW1fY29ubmVjdG9yczsKK307CisKKy8qKgorICogc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyAtIGNvbmZpZ3VyZSBDUlRDcyBmb3IgYSBnaXZlbiBzY3JlZW4gbGF5b3V0CisgKiBAcmVzaXplOiBhZGp1c3QgQ1JUQ3MgYXMgbmVjZXNzYXJ5IGZvciB0aGUgcHJvcG9zZWQgbGF5b3V0CisgKgorICogQ3VycmVudGx5IG9ubHkgYSByZXNpemUgaG9vayBpcyBhdmFpbGFibGUuICBEUk0gd2lsbCBjYWxsIGJhY2sgaW50byB0aGUKKyAqIGRyaXZlciB3aXRoIGEgbmV3IHNjcmVlbiB3aWR0aCBhbmQgaGVpZ2h0LiAgSWYgdGhlIGRyaXZlciBjYW4ndCBzdXBwb3J0CisgKiB0aGUgcHJvcG9zZWQgc2l6ZSwgaXQgY2FuIHJldHVybiBmYWxzZS4gIE90aGVyd2lzZSBpdCBzaG91bGQgYWRqdXN0CisgKiB0aGUgQ1JUQzwtPmNvbm5lY3RvciBtYXBwaW5ncyBhcyBuZWVkZWQgYW5kIHVwZGF0ZSBpdHMgdmlldyBvZiB0aGUgc2NyZWVuLgorICovCitzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICooKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKm1vZGVfY21kKTsKKwlpbnQgKCpmYl9jaGFuZ2VkKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK307CisKK3N0cnVjdCBkcm1fbW9kZV9ncm91cCB7CisJdWludDMyX3QgbnVtX2NydGNzOworCXVpbnQzMl90IG51bV9lbmNvZGVyczsKKwl1aW50MzJfdCBudW1fY29ubmVjdG9yczsKKworCS8qIGxpc3Qgb2Ygb2JqZWN0IElEcyBmb3IgdGhpcyBncm91cCAqLworCXVpbnQzMl90ICppZF9saXN0OworfTsKKworLyoqCisgKiBkcm1fbW9kZV9jb25maWcgLSBNb2RlIGNvbmZpZ3VyYXRpb24gY29udHJvbCBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0cnVjdCBkcm1fbW9kZV9jb25maWcgeworCXN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgY29uZmlndXJhdGlvbiBhbmQgSURSICovCisJc3RydWN0IGlkciBjcnRjX2lkcjsgLyogdXNlIHRoaXMgaWRyIGZvciBhbGwgSURzLCBmYiwgY3J0YywgY29ubmVjdG9yLCBtb2RlcyAtIGp1c3QgbWFrZXMgbGlmZSBlYXNpZXIgKi8KKwkvKiB0aGlzIGlzIGxpbWl0ZWQgdG8gb25lIGZvciBub3cgKi8KKwlpbnQgbnVtX2ZiOworCXN0cnVjdCBsaXN0X2hlYWQgZmJfbGlzdDsKKwlpbnQgbnVtX2Nvbm5lY3RvcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbm5lY3Rvcl9saXN0OworCWludCBudW1fZW5jb2RlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVuY29kZXJfbGlzdDsKKworCWludCBudW1fY3J0YzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNydGNfbGlzdDsKKworCXN0cnVjdCBsaXN0X2hlYWQgcHJvcGVydHlfbGlzdDsKKworCS8qIGluLWtlcm5lbCBmcmFtZWJ1ZmZlcnMgLSBodW5nIG9mIGZpbHBfaGVhZCBpbiBkcm1fZnJhbWVidWZmZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZiX2tlcm5lbF9saXN0OworCisJaW50IG1pbl93aWR0aCwgbWluX2hlaWdodDsKKwlpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgKmZ1bmNzOworCXVuc2lnbmVkIGxvbmcgZmJfYmFzZTsKKworCS8qIHBvaW50ZXJzIHRvIHN0YW5kYXJkIHByb3BlcnRpZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHByb3BlcnR5X2Jsb2JfbGlzdDsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICplZGlkX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmRwbXNfcHJvcGVydHk7CisKKwkvKiBEVkktSSBwcm9wZXJ0aWVzICovCisJc3RydWN0IGRybV9wcm9wZXJ0eSAqZHZpX2lfc3ViY29ubmVjdG9yX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmR2aV9pX3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHk7CisKKwkvKiBUViBwcm9wZXJ0aWVzICovCisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc3ViY29ubmVjdG9yX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfbW9kZV9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9yaWdodF9tYXJnaW5fcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfdG9wX21hcmdpbl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5OworCisJLyogT3B0aW9uYWwgcHJvcGVydGllcyAqLworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnNjYWxpbmdfbW9kZV9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpkaXRoZXJpbmdfbW9kZV9wcm9wZXJ0eTsKK307CisKKyNkZWZpbmUgb2JqX3RvX2NydGMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fY3J0YywgYmFzZSkKKyNkZWZpbmUgb2JqX3RvX2Nvbm5lY3Rvcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9jb25uZWN0b3IsIGJhc2UpCisjZGVmaW5lIG9ial90b19lbmNvZGVyKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2VuY29kZXIsIGJhc2UpCisjZGVmaW5lIG9ial90b19tb2RlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgYmFzZSkKKyNkZWZpbmUgb2JqX3RvX2ZiKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyLCBiYXNlKQorI2RlZmluZSBvYmpfdG9fcHJvcGVydHkoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fcHJvcGVydHksIGJhc2UpCisjZGVmaW5lIG9ial90b19ibG9iKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IsIGJhc2UpCisKKworZXh0ZXJuIHZvaWQgZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyAqZnVuY3MpOworZXh0ZXJuIHZvaWQgZHJtX2NydGNfY2xlYW51cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCitleHRlcm4gdm9pZCBkcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzICpmdW5jcywKKwkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUpOworCitleHRlcm4gdm9pZCBkcm1fY29ubmVjdG9yX2NsZWFudXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisKK2V4dGVybiB2b2lkIGRybV9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgKmZ1bmNzLAorCQkJICAgICBpbnQgZW5jb2Rlcl90eXBlKTsKKworZXh0ZXJuIHZvaWQgZHJtX2VuY29kZXJfY2xlYW51cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCitleHRlcm4gY2hhciAqZHJtX2dldF9jb25uZWN0b3JfbmFtZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2V4dGVybiBjaGFyICpkcm1fZ2V0X2RwbXNfbmFtZShpbnQgdmFsKTsKK2V4dGVybiBjaGFyICpkcm1fZ2V0X2R2aV9pX3N1YmNvbm5lY3Rvcl9uYW1lKGludCB2YWwpOworZXh0ZXJuIGNoYXIgKmRybV9nZXRfZHZpX2lfc2VsZWN0X25hbWUoaW50IHZhbCk7CitleHRlcm4gY2hhciAqZHJtX2dldF90dl9zdWJjb25uZWN0b3JfbmFtZShpbnQgdmFsKTsKK2V4dGVybiBjaGFyICpkcm1fZ2V0X3R2X3NlbGVjdF9uYW1lKGludCB2YWwpOworZXh0ZXJuIHZvaWQgZHJtX2ZiX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCBkcm1fbW9kZV9ncm91cF9pbml0X2xlZ2FjeV9ncm91cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21vZGVfZ3JvdXAgKmdyb3VwKTsKK2V4dGVybiBzdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdW5zaWduZWQgY2hhciAqZHJtX2RvX3Byb2JlX2RkY19lZGlkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCk7CitleHRlcm4gdm9pZCBkcm1fbW9kZV9wcm9iZWRfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX3JlbW92ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlX2R1cGxpY2F0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfc2V0X25hbWUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIGJvb2wgZHJtX21vZGVfZXF1YWwoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpOworZXh0ZXJuIGludCBkcm1fbW9kZV93aWR0aChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitleHRlcm4gaW50IGRybV9tb2RlX2hlaWdodChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CisKKy8qIGZvciB1cyBieSBmYiBtb2R1bGUgKi8KK2V4dGVybiBpbnQgZHJtX21vZGVfYXR0YWNobW9kZV9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIGludCBkcm1fbW9kZV9kZXRhY2htb2RlX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2RlX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfbGlzdF9jb25jYXQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbmV3KTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX3NpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICptb2RlX2xpc3QsCisJCQkJICAgaW50IG1heFgsIGludCBtYXhZLCBpbnQgbWF4UGl0Y2gpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfcHJ1bmVfaW52YWxpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKm1vZGVfbGlzdCwgYm9vbCB2ZXJib3NlKTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX3NvcnQoc3RydWN0IGxpc3RfaGVhZCAqbW9kZV9saXN0KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfdnJlZnJlc2goc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfc2V0X2NydGNpbmZvKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwLAorCQkJCSAgaW50IGFkanVzdF9mbGFncyk7CitleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25uZWN0b3JfbGlzdF91cGRhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CitleHRlcm4gaW50IGRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkJc3RydWN0IGVkaWQgKmVkaWQpOworZXh0ZXJuIGludCBkcm1fY29ubmVjdG9yX3Byb3BlcnR5X3NldF92YWx1ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJCSB1aW50NjRfdCB2YWx1ZSk7CitleHRlcm4gaW50IGRybV9jb25uZWN0b3JfcHJvcGVydHlfZ2V0X3ZhbHVlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCSBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCQkJIHVpbnQ2NF90ICp2YWx1ZSk7CitleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jcnRjX21vZGVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX2ZyYW1lYnVmZmVyX3NldF9vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpOworZXh0ZXJuIGludCBkcm1fZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgKmZ1bmNzKTsKK2V4dGVybiB2b2lkIGRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK2V4dGVybiBpbnQgZHJtZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2V4dGVybiBpbnQgZHJtZmJfcmVtb3ZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK2V4dGVybiB2b2lkIGRybV9jcnRjX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbWF4WCwgaW50IG1heFkpOworZXh0ZXJuIGJvb2wgZHJtX2NydGNfaW5fdXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKK2V4dGVybiBpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgaW5pdF92YWwpOworZXh0ZXJuIHN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9wcm9wZXJ0eV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGZsYWdzLAorCQkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG51bV92YWx1ZXMpOworZXh0ZXJuIHZvaWQgZHJtX3Byb3BlcnR5X2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHkpOworZXh0ZXJuIGludCBkcm1fcHJvcGVydHlfYWRkX2VudW0oc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIGludCBpbmRleCwKKwkJCQkgdWludDY0X3QgdmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfY3JlYXRlX3R2X3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9mb3JtYXRzLAorCQkJCSAgICAgY2hhciAqZm9ybWF0c1tdKTsKK2V4dGVybiBpbnQgZHJtX21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfY3JlYXRlX2RpdGhlcmluZ19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBjaGFyICpkcm1fZ2V0X2VuY29kZXJfbmFtZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCitleHRlcm4gaW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25uZWN0b3JfZGV0YWNoX2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKK2V4dGVybiBib29sIGRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCQkgaW50IGdhbW1hX3NpemUpOworZXh0ZXJuIHZvaWQgKmRybV9tb2RlX29iamVjdF9maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGlkLCB1aW50MzJfdCB0eXBlKTsKKy8qIElPQ1RMcyAqLworZXh0ZXJuIGludCBkcm1fbW9kZV9nZXRyZXNvdXJjZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCitleHRlcm4gaW50IGRybV9tb2RlX2dldGNydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX2dldGNvbm5lY3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9zZXRjcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9jdXJzb3JfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX2FkZGZiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfcm1mYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfZ2V0ZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9hZGRtb2RlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX3JtbW9kZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX2F0dGFjaG1vZGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgZHJtX21vZGVfZGV0YWNobW9kZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCitleHRlcm4gaW50IGRybV9tb2RlX2dldHByb3BlcnR5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9nZXRibG9iX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9ob3RwbHVnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gaW50IGRybV9tb2RlX3JlcGxhY2VmYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9nZXRlbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9nYW1tYV9nZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworI2VuZGlmIC8qIF9fRFJNX0NSVENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzA0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA2IEtlaXRoIFBhY2thcmQKKyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMDggRGF2ZSBBaXJsaWUKKyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBUaGUgRFJNIG1vZGUgc2V0dGluZyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBjb21tb24gY29kZSBmb3IgZHJpdmVycyB0byB1c2UgaWYKKyAqIHRoZXkgd2lzaC4gIERyaXZlcnMgYXJlIG5vdCBmb3JjZWQgdG8gdXNlIHRoaXMgY29kZSBpbiB0aGVpcgorICogaW1wbGVtZW50YXRpb25zIGJ1dCBpdCB3b3VsZCBiZSB1c2VmdWwgaWYgdGhleSBjb2RlIHRoZXkgZG8gdXNlIGF0IGxlYXN0CisgKiBwcm92aWRlcyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFuZCBvcGVyYXRpb24gdG8gdXNlcnNwYWNlCisgKi8KKworI2lmbmRlZiBfX0RSTV9DUlRDX0hFTFBFUl9IX18KKyNkZWZpbmUgX19EUk1fQ1JUQ19IRUxQRVJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCitzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHsKKwkvKgorCSAqIENvbnRyb2wgcG93ZXIgbGV2ZWxzIG9uIHRoZSBDUlRDLiAgSWYgdGhlIG1vZGUgcGFzc2VkIGluIGlzCisJICogdW5zdXBwb3J0ZWQsIHRoZSBwcm92aWRlciBtdXN0IHVzZSB0aGUgbmV4dCBsb3dlc3QgcG93ZXIgbGV2ZWwuCisJICovCisJdm9pZCAoKmRwbXMpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IG1vZGUpOworCXZvaWQgKCpwcmVwYXJlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCXZvaWQgKCpjb21taXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKKwkvKiBQcm92aWRlciBjYW4gZml4dXAgb3IgY2hhbmdlIG1vZGUgdGltaW5ncyBiZWZvcmUgbW9kZXNldCBvY2N1cnMgKi8KKwlib29sICgqbW9kZV9maXh1cCkoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisJLyogQWN0dWFsbHkgc2V0IHRoZSBtb2RlICovCisJdm9pZCAoKm1vZGVfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLCBpbnQgeCwgaW50IHksCisJCQkgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKTsKKworCS8qIE1vdmUgdGhlIGNydGMgb24gdGhlIGN1cnJlbnQgZmIgdG8gdGhlIGdpdmVuIHBvc2l0aW9uICpvcHRpb25hbCogKi8KKwl2b2lkICgqbW9kZV9zZXRfYmFzZSkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpOworfTsKKworc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB7CisJdm9pZCAoKmRwbXMpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpOworCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCisJYm9vbCAoKm1vZGVfZml4dXApKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOworCXZvaWQgKCpwcmVwYXJlKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworCXZvaWQgKCpjb21taXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CisJdm9pZCAoKm1vZGVfc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOworCS8qIGRldGVjdCBmb3IgREFDIHN0eWxlIGVuY29kZXJzICovCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgeworCWludCAoKmdldF9tb2Rlcykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJaW50ICgqbW9kZV92YWxpZCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqKCpiZXN0X2VuY29kZXIpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworfTsKKworZXh0ZXJuIHZvaWQgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHVpbnQzMl90IG1heFgsIHVpbnQzMl90IG1heFkpOworZXh0ZXJuIHZvaWQgZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGRybV9oZWxwZXJfaG90cGx1Z19zdGFnZV90d28oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gYm9vbCBkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgY2FuX2dyb3cpOworZXh0ZXJuIGludCBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpOworZXh0ZXJuIGJvb2wgZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgaW50IHgsIGludCB5LAorCQkJCSAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKTsKK2V4dGVybiBib29sIGRybV9oZWxwZXJfY3J0Y19pbl91c2Uoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKworZXh0ZXJuIGludCBkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3Qoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2NydGNfaGVscGVyX2FkZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1bmNzKQoreworCWNydGMtPmhlbHBlcl9wcml2YXRlID0gKHZvaWQgKilmdW5jczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRybV9lbmNvZGVyX2hlbHBlcl9hZGQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmZ1bmNzKQoreworCWVuY29kZXItPmhlbHBlcl9wcml2YXRlID0gKHZvaWQgKilmdW5jczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRybV9jb25uZWN0b3JfaGVscGVyX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpmdW5jcykKK3sKKwljb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlID0gKHZvaWQgKilmdW5jczsKK30KKworZXh0ZXJuIGludCBkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZWRpZC5oIGIvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA3YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fRFJNX0VESURfSF9fCisjZGVmaW5lIF9fRFJNX0VESURfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEVESURfTEVOR1RIIDEyOAorI2RlZmluZSBERENfQUREUiAweDUwCisKKyNpZmRlZiBCSUdfRU5ESUFOCisjZXJyb3IgIkVESUQgc3RydWN0dXJlIGlzIGxpdHRsZSBlbmRpYW4sIG5lZWQgYmlnIGVuZGlhbiB2ZXJzaW9ucyIKKyNlbHNlCisKK3N0cnVjdCBlc3RfdGltaW5ncyB7CisJdTggdDE7CisJdTggdDI7CisJdTggbWZnX3JzdmQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc3RkX3RpbWluZyB7CisJdTggaHNpemU7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgOCB0aGVuIGFkZCAyNDggKi8KKwl1OCB2ZnJlcTo2OyAvKiBuZWVkIHRvIGFkZCA2MCAqLworCXU4IGFzcGVjdF9yYXRpbzoyOyAvKiAwMD0xNjoxMCwgMDE9NDozLCAxMD01OjQsIDExPTE2OjkgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIElmIGRldGFpbGVkIGRhdGEgaXMgcGl4ZWwgdGltaW5nICovCitzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxfdGltaW5nIHsKKwl1OCBoYWN0aXZlX2xvOworCXU4IGhibGFua19sbzsKKwl1OCBoYmxhbmtfaGk6NDsKKwl1OCBoYWN0aXZlX2hpOjQ7CisJdTggdmFjdGl2ZV9sbzsKKwl1OCB2YmxhbmtfbG87CisJdTggdmJsYW5rX2hpOjQ7CisJdTggdmFjdGl2ZV9oaTo0OworCXU4IGhzeW5jX29mZnNldF9sbzsKKwl1OCBoc3luY19wdWxzZV93aWR0aF9sbzsKKwl1OCB2c3luY19wdWxzZV93aWR0aF9sbzo0OworCXU4IHZzeW5jX29mZnNldF9sbzo0OworCXU4IGhzeW5jX3B1bHNlX3dpZHRoX2hpOjI7CisJdTggaHN5bmNfb2Zmc2V0X2hpOjI7CisJdTggdnN5bmNfcHVsc2Vfd2lkdGhfaGk6MjsKKwl1OCB2c3luY19vZmZzZXRfaGk6MjsKKwl1OCB3aWR0aF9tbV9sbzsKKwl1OCBoZWlnaHRfbW1fbG87CisJdTggaGVpZ2h0X21tX2hpOjQ7CisJdTggd2lkdGhfbW1faGk6NDsKKwl1OCBoYm9yZGVyOworCXU4IHZib3JkZXI7CisJdTggdW5rbm93bjA6MTsKKwl1OCB2c3luY19wb3NpdGl2ZToxOworCXU4IGhzeW5jX3Bvc2l0aXZlOjE7CisJdTggc2VwYXJhdGVfc3luYzoyOworCXU4IHN0ZXJlbzoxOworCXU4IHVua25vd242OjE7CisJdTggaW50ZXJsYWNlZDoxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSWYgaXQncyBub3QgcGl4ZWwgdGltaW5nLCBpdCdsbCBiZSBvbmUgb2YgdGhlIGJlbG93ICovCitzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgeworCXU4IHN0clsxM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9tb25pdG9yX3JhbmdlIHsKKwl1OCBtaW5fdmZyZXE7CisJdTggbWF4X3ZmcmVxOworCXU4IG1pbl9oZnJlcV9raHo7CisJdTggbWF4X2hmcmVxX2toejsKKwl1OCBwaXhlbF9jbG9ja19taHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMTAgKi8KKwl1MTYgc2VjX2d0Zl90b2dnbGU7IC8qIEEwMDA9dXNlIGFib3ZlLCAyMD11c2UgYmVsb3cgKi8gLyogRklYTUU6IGJ5dGUgb3JkZXIgKi8KKwl1OCBoZnJlcV9zdGFydF9raHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMiAqLworCXU4IGM7IC8qIG5lZWQgdG8gZGl2aWRlIGJ5IDIgKi8KKwl1MTYgbTsgLyogRklYTUU6IGJ5dGUgb3JkZXIgKi8KKwl1OCBrOworCXU4IGo7IC8qIG5lZWQgdG8gZGl2aWRlIGJ5IDIgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkZXRhaWxlZF9kYXRhX3dwaW5kZXggeworCXU4IHdoaXRlX3lfbG86MjsKKwl1OCB3aGl0ZV94X2xvOjI7CisJdTggcGFkOjQ7CisJdTggd2hpdGVfeF9oaTsKKwl1OCB3aGl0ZV95X2hpOworCXU4IGdhbW1hOyAvKiBuZWVkIHRvIGRpdmlkZSBieSAxMDAgdGhlbiBhZGQgMSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGRldGFpbGVkX2RhdGFfY29sb3JfcG9pbnQgeworCXU4IHdpbmRleDE7CisJdTggd3BpbmRleDFbM107CisJdTggd2luZGV4MjsKKwl1OCB3cGluZGV4MlszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgeworCXU4IHBhZDE7CisJdTggdHlwZTsgLyogZmY9c2VyaWFsLCBmZT1zdHJpbmcsIGZkPW1vbml0b3IgcmFuZ2UsIGZjPW1vbml0b3IgbmFtZQorCQkgICAgZmI9Y29sb3IgcG9pbnQgZGF0YSwgZmE9c3RhbmRhcmQgdGltaW5nIGRhdGEsCisJCSAgICBmOT11bmRlZmluZWQsIGY4PW1mZy4gcmVzZXJ2ZWQgKi8KKwl1OCBwYWQyOworCXVuaW9uIHsKKwkJc3RydWN0IGRldGFpbGVkX2RhdGFfc3RyaW5nIHN0cjsKKwkJc3RydWN0IGRldGFpbGVkX2RhdGFfbW9uaXRvcl9yYW5nZSByYW5nZTsKKwkJc3RydWN0IGRldGFpbGVkX2RhdGFfd3BpbmRleCBjb2xvcjsKKwkJc3RydWN0IHN0ZF90aW1pbmcgdGltaW5nc1s1XTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEVESURfREVUQUlMX1NURF9NT0RFUyAweGZhCisjZGVmaW5lIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBIDB4ZmIKKyNkZWZpbmUgRURJRF9ERVRBSUxfTU9OSVRPUl9OQU1FIDB4ZmMKKyNkZWZpbmUgRURJRF9ERVRBSUxfTU9OSVRPUl9SQU5HRSAweGZkCisjZGVmaW5lIEVESURfREVUQUlMX01PTklUT1JfU1RSSU5HIDB4ZmUKKyNkZWZpbmUgRURJRF9ERVRBSUxfTU9OSVRPUl9TRVJJQUwgMHhmZgorCitzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nIHsKKwl1MTYgcGl4ZWxfY2xvY2s7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMTAgS0h6ICovIC8qIEZJWE1FOiBieXRlIG9yZGVyICovCisJdW5pb24geworCQlzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxfdGltaW5nIHBpeGVsX2RhdGE7CisJCXN0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgb3RoZXJfZGF0YTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZWRpZCB7CisJdTggaGVhZGVyWzhdOworCS8qIFZlbmRvciAmIHByb2R1Y3QgaW5mbyAqLworCXU4IG1mZ19pZFsyXTsKKwl1OCBwcm9kX2NvZGVbMl07CisJdTMyIHNlcmlhbDsgLyogRklYTUU6IGJ5dGUgb3JkZXIgKi8KKwl1OCBtZmdfd2VlazsKKwl1OCBtZmdfeWVhcjsKKwkvKiBFRElEIHZlcnNpb24gKi8KKwl1OCB2ZXJzaW9uOworCXU4IHJldmlzaW9uOworCS8qIERpc3BsYXkgaW5mbzogKi8KKwkvKiAgIGlucHV0IGRlZmluaXRpb24gKi8KKwl1OCBzZXJyYXRpb25fdnN5bmM6MTsKKwl1OCBzeW5jX29uX2dyZWVuOjE7CisJdTggY29tcG9zaXRlX3N5bmM6MTsKKwl1OCBzZXBhcmF0ZV9zeW5jczoxOworCXU4IGJsYW5rX3RvX2JsYWNrOjE7CisJdTggdmlkZW9fbGV2ZWw6MjsKKwl1OCBkaWdpdGFsOjE7IC8qIGJpdHMgYmVsb3cgbXVzdCBiZSB6ZXJvIGlmIHNldCAqLworCXU4IHdpZHRoX2NtOworCXU4IGhlaWdodF9jbTsKKwl1OCBnYW1tYTsKKwkvKiAgIGZlYXR1cmUgc3VwcG9ydCAqLworCXU4IGRlZmF1bHRfZ3RmOjE7CisJdTggcHJlZmVycmVkX3RpbWluZzoxOworCXU4IHN0YW5kYXJkX2NvbG9yOjE7CisJdTggZGlzcGxheV90eXBlOjI7IC8qIDAwPW1vbm8sIDAxPXJnYiwgMTA9bm9uLXJnYiwgMTE9dW5rbm93biAqLworCXU4IHBtX2FjdGl2ZV9vZmY6MTsKKwl1OCBwbV9zdXNwZW5kOjE7CisJdTggcG1fc3RhbmRieToxOworCS8qIENvbG9yIGNoYXJhY3RlcmlzdGljcyAqLworCXU4IHJlZF9ncmVlbl9sbzsKKwl1OCBibGFja193aGl0ZV9sbzsKKwl1OCByZWRfeDsKKwl1OCByZWRfeTsKKwl1OCBncmVlbl94OworCXU4IGdyZWVuX3k7CisJdTggYmx1ZV94OworCXU4IGJsdWVfeTsKKwl1OCB3aGl0ZV94OworCXU4IHdoaXRlX3k7CisJLyogRXN0LiB0aW1pbmdzIGFuZCBtZmcgcnN2ZCB0aW1pbmdzKi8KKwlzdHJ1Y3QgZXN0X3RpbWluZ3MgZXN0YWJsaXNoZWRfdGltaW5nczsKKwkvKiBTdGFuZGFyZCB0aW1pbmdzIDEtOCovCisJc3RydWN0IHN0ZF90aW1pbmcgc3RhbmRhcmRfdGltaW5nc1s4XTsKKwkvKiBEZXRhaWxpbmcgdGltaW5ncyAxLTQgKi8KKwlzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nIGRldGFpbGVkX3RpbWluZ3NbNF07CisJLyogTnVtYmVyIG9mIDEyOCBieXRlIGV4dC4gYmxvY2tzICovCisJdTggZXh0ZW5zaW9uczsKKwkvKiBDaGVja3N1bSAqLworCXU4IGNoZWNrc3VtOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2VuZGlmIC8qIGxpdHRsZSBlbmRpYW4gc3RydWN0cyAqLworCisjZGVmaW5lIEVESURfUFJPRFVDVF9JRChlKSAoKGUpLT5wcm9kX2NvZGVbMF0gfCAoKGUpLT5wcm9kX2NvZGVbMV0gPDwgOCkpCisKKyNlbmRpZiAvKiBfX0RSTV9FRElEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZDJiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSmFrb2IgQm9ybmVjcmFudHogPHdhbGxicmFrZXJAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRYLiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9EUk1fTU9ERV9ICisjZGVmaW5lIF9EUk1fTU9ERV9ICisKKyNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNlbmRpZgorCisjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCisjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKKyNkZWZpbmUgRFJNX0RJU1BMQVlfTU9ERV9MRU4JMzIKKyNkZWZpbmUgRFJNX1BST1BfTkFNRV9MRU4JMzIKKworI2RlZmluZSBEUk1fTU9ERV9UWVBFX0JVSUxUSU4JKDE8PDApCisjZGVmaW5lIERSTV9NT0RFX1RZUEVfQ0xPQ0tfQwkoKDE8PDEpIHwgRFJNX01PREVfVFlQRV9CVUlMVElOKQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX0NSVENfQwkoKDE8PDIpIHwgRFJNX01PREVfVFlQRV9CVUlMVElOKQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRAkoMTw8MykKKyNkZWZpbmUgRFJNX01PREVfVFlQRV9ERUZBVUxUCSgxPDw0KQorI2RlZmluZSBEUk1fTU9ERV9UWVBFX1VTRVJERUYJKDE8PDUpCisjZGVmaW5lIERSTV9NT0RFX1RZUEVfRFJJVkVSCSgxPDw2KQorCisvKiBWaWRlbyBtb2RlIGZsYWdzICovCisvKiBiaXQgY29tcGF0aWJsZSB3aXRoIHRoZSB4b3JnIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBEUk1fTU9ERV9GTEFHX1BIU1lOQwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19OSFNZTkMJKDE8PDEpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfUFZTWU5DCSgxPDwyKQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX05WU1lOQwkoMTw8MykKKyNkZWZpbmUgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UJKDE8PDQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfREJMU0NBTgkoMTw8NSkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19DU1lOQwkoMTw8NikKKyNkZWZpbmUgRFJNX01PREVfRkxBR19QQ1NZTkMJKDE8PDcpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfTkNTWU5DCSgxPDw4KQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX0hTS0VXCSgxPDw5KSAvKiBoc2tldyBwcm92aWRlZCAqLworI2RlZmluZSBEUk1fTU9ERV9GTEFHX0JDQVNUCSgxPDwxMCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR19QSVhNVVgJKDE8PDExKQorI2RlZmluZSBEUk1fTU9ERV9GTEFHX0RCTENMSwkoMTw8MTIpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfQ0xLRElWMgkoMTw8MTMpCisKKy8qIERQTVMgZmxhZ3MgKi8KKy8qIGJpdCBjb21wYXRpYmxlIHdpdGggdGhlIHhvcmcgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIERSTV9NT0RFX0RQTVNfT04JMAorI2RlZmluZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlkJMQorI2RlZmluZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQJMgorI2RlZmluZSBEUk1fTU9ERV9EUE1TX09GRgkzCisKKy8qIFNjYWxpbmcgbW9kZSBvcHRpb25zICovCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PTl9HUFUJCTAKKyNkZWZpbmUgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTgkxCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PX1NDQUxFCQkyCisjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0FTUEVDVAkJMworCisvKiBEaXRoZXJpbmcgbW9kZSBvcHRpb25zICovCisjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PRkYJMAorI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQorCitzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8geworCXVpbnQzMl90IGNsb2NrOworCXVpbnQxNl90IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OworCXVpbnQxNl90IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworCisJdWludDMyX3QgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCB0eXBlOworCWNoYXIgbmFtZVtEUk1fRElTUExBWV9NT0RFX0xFTl07Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMgeworCXVpbnQ2NF90IGZiX2lkX3B0cjsKKwl1aW50NjRfdCBjcnRjX2lkX3B0cjsKKwl1aW50NjRfdCBjb25uZWN0b3JfaWRfcHRyOworCXVpbnQ2NF90IGVuY29kZXJfaWRfcHRyOworCXVpbnQzMl90IGNvdW50X2ZiczsKKwl1aW50MzJfdCBjb3VudF9jcnRjczsKKwl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOworCXVpbnQzMl90IGNvdW50X2VuY29kZXJzOworCXVpbnQzMl90IG1pbl93aWR0aCwgbWF4X3dpZHRoOworCXVpbnQzMl90IG1pbl9oZWlnaHQsIG1heF9oZWlnaHQ7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfY3J0YyB7CisJdWludDY0X3Qgc2V0X2Nvbm5lY3RvcnNfcHRyOworCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7CisKKwl1aW50MzJfdCBjcnRjX2lkOyAvKio8IElkICovCisJdWludDMyX3QgZmJfaWQ7IC8qKjwgSWQgb2YgZnJhbWVidWZmZXIgKi8KKworCXVpbnQzMl90IHgsIHk7IC8qKjwgUG9zaXRpb24gb24gdGhlIGZyYW1ldWZmZXIgKi8KKworCXVpbnQzMl90IGdhbW1hX3NpemU7CisJdWludDMyX3QgbW9kZV92YWxpZDsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKK307CisKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9OT05FCTAKKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9EQUMJMQorI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1RNRFMJMgorI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX0xWRFMJMworI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1RWREFDCTQKKworc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyIHsKKwl1aW50MzJfdCBlbmNvZGVyX2lkOworCXVpbnQzMl90IGVuY29kZXJfdHlwZTsKKworCXVpbnQzMl90IGNydGNfaWQ7IC8qKjwgSWQgb2YgY3J0YyAqLworCisJdWludDMyX3QgcG9zc2libGVfY3J0Y3M7CisJdWludDMyX3QgcG9zc2libGVfY2xvbmVzOworfTsKKworLyogVGhpcyBpcyBmb3IgY29ubmVjdG9ycyB3aXRoIG11bHRpcGxlIHNpZ25hbCB0eXBlcy4gKi8KKy8qIFRyeSB0byBtYXRjaCBEUk1fTU9ERV9DT05ORUNUT1JfWCBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLiAqLworI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQXV0b21hdGljCTAKKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24JMAorI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJRAkzCisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9EVklBCTQKKyNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZQk1CisjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TVklERU8JNgorI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9uZW50CTgKKworI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bgkwCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EJCTEKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUkJCTIKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQJCTMKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUEJCTQKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZQk1CisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8JNgorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUwkJNworI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50CTgKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU4JOQorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQJMTAKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBCTExCisjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQgkxMgorCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CisKKwl1aW50NjRfdCBlbmNvZGVyc19wdHI7CisJdWludDY0X3QgbW9kZXNfcHRyOworCXVpbnQ2NF90IHByb3BzX3B0cjsKKwl1aW50NjRfdCBwcm9wX3ZhbHVlc19wdHI7CisKKwl1aW50MzJfdCBjb3VudF9tb2RlczsKKwl1aW50MzJfdCBjb3VudF9wcm9wczsKKwl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKKworCXVpbnQzMl90IGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCisJdWludDMyX3QgY29ubmVjdG9yX2lkOyAvKio8IElkICovCisJdWludDMyX3QgY29ubmVjdG9yX3R5cGU7CisJdWludDMyX3QgY29ubmVjdG9yX3R5cGVfaWQ7CisKKwl1aW50MzJfdCBjb25uZWN0aW9uOworCXVpbnQzMl90IG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJdWludDMyX3Qgc3VicGl4ZWw7Cit9OworCisjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9SQU5HRQkoMTw8MSkKKyNkZWZpbmUgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUJKDE8PDIpCisjZGVmaW5lIERSTV9NT0RFX1BST1BfRU5VTQkoMTw8MykgLyogZW51bWVyYXRlZCB0eXBlIHdpdGggdGV4dCBzdHJpbmdzICovCisjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKKworc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0geworCXVpbnQ2NF90IHZhbHVlOworCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKKwl1aW50NjRfdCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLworCXVpbnQ2NF90IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCisJdWludDMyX3QgcHJvcF9pZDsKKwl1aW50MzJfdCBmbGFnczsKKwljaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOworCisJdWludDMyX3QgY291bnRfdmFsdWVzOworCXVpbnQzMl90IGNvdW50X2VudW1fYmxvYnM7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSB7CisJdWludDY0X3QgdmFsdWU7CisJdWludDMyX3QgcHJvcF9pZDsKKwl1aW50MzJfdCBjb25uZWN0b3JfaWQ7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Jsb2IgeworCXVpbnQzMl90IGJsb2JfaWQ7CisJdWludDMyX3QgbGVuZ3RoOworCXVpbnQ2NF90IGRhdGE7Cit9OworCitzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKKwl1aW50MzJfdCBmYl9pZDsKKwl1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OworCXVpbnQzMl90IHBpdGNoOworCXVpbnQzMl90IGJwcDsKKwl1aW50MzJfdCBkZXB0aDsKKwkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCisJdWludDMyX3QgaGFuZGxlOworfTsKKworc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKKwl1aW50MzJfdCBjb25uZWN0b3JfaWQ7CisJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7Cit9OworCisjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9CTwkoMTw8MCkKKyNkZWZpbmUgRFJNX01PREVfQ1VSU09SX01PVkUJKDE8PDEpCisKKy8qCisgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIGluIGZsYWdzIGRpZmZyZW50IG1lbWJlcnMgYXJlIHVzZWQuCisgKgorICogQ1VSU09SX0JPIHVzZXMKKyAqICAgIGNydGMKKyAqICAgIHdpZHRoCisgKiAgICBoZWlnaHQKKyAqICAgIGhhbmRsZSAtIGlmIDAgdHVybnMgdGhlIGN1cnNvciBvZgorICoKKyAqIENVUlNPUl9NT1ZFIHVzZXMKKyAqICAgIGNydGMKKyAqICAgIHgKKyAqICAgIHkKKyAqLworc3RydWN0IGRybV9tb2RlX2N1cnNvciB7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgY3J0Y19pZDsKKwlpbnQzMl90IHg7CisJaW50MzJfdCB5OworCXVpbnQzMl90IHdpZHRoOworCXVpbnQzMl90IGhlaWdodDsKKwkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCisJdWludDMyX3QgaGFuZGxlOworfTsKKworc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKKwl1aW50MzJfdCBjcnRjX2lkOworCXVpbnQzMl90IGdhbW1hX3NpemU7CisKKwkvKiBwb2ludGVycyB0byBhcnJheXMgKi8KKwl1aW50NjRfdCByZWQ7CisJdWludDY0X3QgZ3JlZW47CisJdWludDY0X3QgYmx1ZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3NhcmVhLmggYi9pbmNsdWRlL2RybS9kcm1fc2FyZWEuaAppbmRleCA0ODAwMzczLi5lZTUzODlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fc2FyZWEuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fc2FyZWEuaApAQCAtMzYsMTIgKzM2LDEyIEBACiAKIC8qIFNBUkVBIGFyZWEgbmVlZHMgdG8gYmUgYXQgbGVhc3QgYSBwYWdlICovCiAjaWYgZGVmaW5lZChfX2FscGhhX18pCi0jZGVmaW5lIFNBUkVBX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFNBUkVBX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwVQogI2VsaWYgZGVmaW5lZChfX2lhNjRfXykKLSNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwCS8qIDY0a0IgKi8KKyNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwVQkvKiA2NGtCICovCiAjZWxzZQogLyogSW50ZWwgODMwTSBkcml2ZXIgbmVlZHMgYXQgbGVhc3QgOGsgU0FSRUEgKi8KLSNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDIwMDBVCiAjZW5kaWYKIAogLyoqIE1heGltdW0gbnVtYmVyIG9mIGRyYXdhYmxlcyBpbiB0aGUgU0FSRUEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDE1MmIzNGQuLmIzYmNmNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMTEzLDggKzExMywzMSBAQAogCWludCBwaXBlQl95OwogCWludCBwaXBlQl93OwogCWludCBwaXBlQl9oOworCisJLyogZmlsbCBvdXQgc29tZSBzcGFjZSBmb3Igb2xkIHVzZXJzcGFjZSB0cmlwbGUgYnVmZmVyICovCisJZHJtX2hhbmRsZV90IHVudXNlZF9oYW5kbGU7CisJdWludDMyX3QgdW51c2VkMSwgdW51c2VkMiwgdW51c2VkMzsKKworCS8qIGJ1ZmZlciBvYmplY3QgaGFuZGxlcyBmb3Igc3RhdGljIGJ1ZmZlcnMuIE1heSBjaGFuZ2UKKwkgKiBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY2xpZW50LgorCSAqLworCXVpbnQzMl90IGZyb250X2JvX2hhbmRsZTsKKwl1aW50MzJfdCBiYWNrX2JvX2hhbmRsZTsKKwl1aW50MzJfdCB1bnVzZWRfYm9faGFuZGxlOworCXVpbnQzMl90IGRlcHRoX2JvX2hhbmRsZTsKKwogfSBkcm1faTkxNV9zYXJlYV90OwogCisvKiBkdWUgdG8gdXNlcnNwYWNlIGJ1aWxkaW5nIGFnYWluc3QgdGhlc2UgaGVhZGVycyB3ZSBuZWVkIHNvbWUgY29tcGF0IGhlcmUgKi8KKyNkZWZpbmUgcGxhbmVBX3ggcGlwZUFfeAorI2RlZmluZSBwbGFuZUFfeSBwaXBlQV95CisjZGVmaW5lIHBsYW5lQV93IHBpcGVBX3cKKyNkZWZpbmUgcGxhbmVBX2ggcGlwZUFfaAorI2RlZmluZSBwbGFuZUJfeCBwaXBlQl94CisjZGVmaW5lIHBsYW5lQl95IHBpcGVCX3kKKyNkZWZpbmUgcGxhbmVCX3cgcGlwZUJfdworI2RlZmluZSBwbGFuZUJfaCBwaXBlQl9oCisKIC8qIEZsYWdzIGZvciBwZXJmX2JveGVzCiAgKi8KICNkZWZpbmUgSTkxNV9CT1hfUklOR19FTVBUWSAgICAweDEKQEAgLTE2MCw2ICsxODMsNyBAQAogI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX1RJTElORwkweDIxCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HCTB4MjIKICNkZWZpbmUgRFJNX0k5MTVfR0VNX0dFVF9BUEVSVFVSRSAweDIzCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQX0dUVAkweDI0CiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTE3Nyw2ICsyMDEsOCBAQAogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9TRVRfVkJMQU5LX1BJUEUJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1NFVF9WQkxBTktfUElQRSwgZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VUX1ZCTEFOS19QSVBFCURSTV9JT1IoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1ZCTEFOS19TV0FQCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9WQkxBTktfU1dBUCwgZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0lOSVQJCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9JTklULCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QSU4JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbikKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VOUElOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VTlBJTiwgc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbikKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1kJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQpAQCAtMTg3LDYgKzIxMyw3IEBACiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUF9HVFQJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NTUFQX0dUVCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NFVF9ET01BSU4JRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TRVRfRE9NQUlOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4pCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TV19GSU5JU0gJRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TV19GSU5JU0gsIHN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX1RJTElORwlEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9TRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcpCkBAIC0xOTYsNyArMjIzLDcgQEAKIC8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwogICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9iYXRjaGJ1ZmZlciB7Cit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9iYXRjaGJ1ZmZlciB7CiAJaW50IHN0YXJ0OwkJLyogYWdwIG9mZnNldCAqLwogCWludCB1c2VkOwkJLyogbnIgYnl0ZXMgaW4gdXNlICovCiAJaW50IERSMTsJCS8qIGh3IGZsYWdzIGZvciBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAqLwpAQCAtMzgyLDYgKzQwOSwxOCBAQAogCXVpbnQ2NF90IGFkZHJfcHRyOwogfTsKIAorc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwkvKioKKwkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxsCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCXVpbnQ2NF90IG9mZnNldDsKK307CisKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLwogCXVpbnQzMl90IGhhbmRsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggZTUzMTc4My4uOTVhYzgyMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0zMTMsNiArMzEzLDcgQEAKIHVuaWZkZWYteSArPSBxbng0X2ZzLmgKIHVuaWZkZWYteSArPSBxdW90YS5oCiB1bmlmZGVmLXkgKz0gcmFuZG9tLmgKK3VuaWZkZWYteSArPSBpcnFuci5oCiB1bmlmZGVmLXkgKz0gcmVib290LmgKIHVuaWZkZWYteSArPSByZWlzZXJmc19mcy5oCiB1bmlmZGVmLXkgKz0gcmVpc2VyZnNfeGF0dHIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKaW5kZXggZjZiOGNmOS4uYjE2YTk1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Fpby5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpb19hYmkuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0xODMsNyArMTg0LDcgQEAKIAogCS8qIFRoaXMgbmVlZHMgaW1wcm92aW5nICovCiAJdW5zaWduZWQgbG9uZwkJdXNlcl9pZDsKLQlzdHJ1Y3Qga2lvY3R4CQkqbmV4dDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKIApAQCAtMTk5LDYgKzIwMCw4IEBACiAJc3RydWN0IGFpb19yaW5nX2luZm8JcmluZ19pbmZvOwogCiAJc3RydWN0IGRlbGF5ZWRfd29yawl3cTsKKworCXN0cnVjdCByY3VfaGVhZAkJcmN1X2hlYWQ7CiB9OwogCiAvKiBwcm90b3R5cGVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCA2YTY0MjA5Li4xODQ2MmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTkwLDEwICs5MCwxMSBAQAogCiAJdW5zaWduZWQgaW50CQliaV9jb21wX2NwdTsJLyogY29tcGxldGlvbiBDUFUgKi8KIAorCWF0b21pY190CQliaV9jbnQ7CQkvKiBwaW4gY291bnQgKi8KKwogCXN0cnVjdCBiaW9fdmVjCQkqYmlfaW9fdmVjOwkvKiB0aGUgYWN0dWFsIHZlYyBsaXN0ICovCiAKIAliaW9fZW5kX2lvX3QJCSpiaV9lbmRfaW87Ci0JYXRvbWljX3QJCWJpX2NudDsJCS8qIHBpbiBjb3VudCAqLwogCiAJdm9pZAkJCSpiaV9wcml2YXRlOwogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQpAQCAtMTAxLDYgKzEwMiwxMyBAQAogI2VuZGlmCiAKIAliaW9fZGVzdHJ1Y3Rvcl90CSpiaV9kZXN0cnVjdG9yOwkvKiBkZXN0cnVjdG9yICovCisKKwkvKgorCSAqIFdlIGNhbiBpbmxpbmUgYSBudW1iZXIgb2YgdmVjcyBhdCB0aGUgZW5kIG9mIHRoZSBiaW8sIHRvIGF2b2lkCisJICogZG91YmxlIGFsbG9jYXRpb25zIGZvciBhIHNtYWxsIG51bWJlciBvZiBiaW9fdmVjcy4gVGhpcyBtZW1iZXIKKwkgKiBNVVNUIG9idmlvdXNseSBiZSBrZXB0IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmlvLgorCSAqLworCXN0cnVjdCBiaW9fdmVjCQliaV9pbmxpbmVfdmVjc1swXTsKIH07CiAKIC8qCkBAIC0xMTcsNiArMTI1LDcgQEAKICNkZWZpbmUgQklPX0NQVV9BRkZJTkUJOAkvKiBjb21wbGV0ZSBiaW8gb24gc2FtZSBDUFUgYXMgc3VibWl0dGVkICovCiAjZGVmaW5lIEJJT19OVUxMX01BUFBFRCA5CS8qIGNvbnRhaW5zIGludmFsaWQgdXNlciBwYWdlcyAqLwogI2RlZmluZSBCSU9fRlNfSU5URUdSSVRZIDEwCS8qIGZzIG93bnMgaW50ZWdyaXR5IGRhdGEsIG5vdCBibG9jayBsYXllciAqLworI2RlZmluZSBCSU9fUVVJRVQJMTEJLyogTWFrZSBCSU8gUXVpZXQgKi8KICNkZWZpbmUgYmlvX2ZsYWdnZWQoYmlvLCBmbGFnKQkoKGJpbyktPmJpX2ZsYWdzICYgKDEgPDwgKGZsYWcpKSkKIAogLyoKQEAgLTIxMSw2ICsyMjAsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmlvX2hhc19hbGxvY2F0ZWRfdmVjKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlyZXR1cm4gYmlvLT5iaV9pb192ZWMgJiYgYmlvLT5iaV9pb192ZWMgIT0gYmlvLT5iaV9pbmxpbmVfdmVjczsKK30KKwogLyoKICAqIHdpbGwgZGllCiAgKi8KQEAgLTMzMiw3ICszNDYsNyBAQAogZXh0ZXJuIHN0cnVjdCBiaW9fcGFpciAqYmlvX3NwbGl0KHN0cnVjdCBiaW8gKmJpLCBpbnQgZmlyc3Rfc2VjdG9ycyk7CiBleHRlcm4gdm9pZCBiaW9fcGFpcl9yZWxlYXNlKHN0cnVjdCBiaW9fcGFpciAqZGJpbyk7CiAKLWV4dGVybiBzdHJ1Y3QgYmlvX3NldCAqYmlvc2V0X2NyZWF0ZShpbnQsIGludCk7CitleHRlcm4gc3RydWN0IGJpb19zZXQgKmJpb3NldF9jcmVhdGUodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvc2V0X2ZyZWUoc3RydWN0IGJpb19zZXQgKik7CiAKIGV4dGVybiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2MoZ2ZwX3QsIGludCk7CkBAIC0zNzcsNiArMzkxLDcgQEAKIGV4dGVybiBpbnQgYmlvX3VuY29weV91c2VyKHN0cnVjdCBiaW8gKik7CiB2b2lkIHplcm9fZmlsbF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY19hbGxvY19icyhnZnBfdCwgaW50LCB1bnNpZ25lZCBsb25nICosIHN0cnVjdCBiaW9fc2V0ICopOworZXh0ZXJuIHZvaWQgYnZlY19mcmVlX2JzKHN0cnVjdCBiaW9fc2V0ICosIHN0cnVjdCBiaW9fdmVjICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGJ2ZWNfbnJfdmVjcyh1bnNpZ25lZCBzaG9ydCBpZHgpOwogCiAvKgpAQCAtMzk1LDEzICs0MTAsMTcgQEAKICAqLwogI2RlZmluZSBCSU9fUE9PTF9TSVpFIDIKICNkZWZpbmUgQklPVkVDX05SX1BPT0xTIDYKKyNkZWZpbmUgQklPVkVDX01BWF9JRFgJKEJJT1ZFQ19OUl9QT09MUyAtIDEpCiAKIHN0cnVjdCBiaW9fc2V0IHsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqYmlvX3NsYWI7CisJdW5zaWduZWQgaW50IGZyb250X3BhZDsKKwogCW1lbXBvb2xfdCAqYmlvX3Bvb2w7CiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCiAJbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7CiAjZW5kaWYKLQltZW1wb29sX3QgKmJ2ZWNfcG9vbHNbQklPVkVDX05SX1BPT0xTXTsKKwltZW1wb29sX3QgKmJ2ZWNfcG9vbDsKIH07CiAKIHN0cnVjdCBiaW92ZWNfc2xhYiB7CkBAIC00MTEsNiArNDMwLDcgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYmlvX3NldCAqZnNfYmlvX3NldDsKK2V4dGVybiBzdHJ1Y3QgYmlvdmVjX3NsYWIgYnZlY19zbGFic1tCSU9WRUNfTlJfUE9PTFNdIF9fcmVhZF9tb3N0bHk7CiAKIC8qCiAgKiBhIHNtYWxsIG51bWJlciBvZiBlbnRyaWVzIGlzIGZpbmUsIG5vdCBnb2luZyB0byBiZSBwZXJmb3JtYW5jZSBjcml0aWNhbC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDAzMWEzMTUuLjcwMzVjZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMjYsNyArMjYsNiBAQAogCiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZTsKLXR5cGVkZWYgc3RydWN0IGVsZXZhdG9yX3F1ZXVlIGVsZXZhdG9yX3Q7CiBzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZTsKIHN0cnVjdCBibGtfdHJhY2U7CiBzdHJ1Y3QgcmVxdWVzdDsKQEAgLTMxMyw3ICszMTIsNyBAQAogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWVfaGVhZDsKIAlzdHJ1Y3QgcmVxdWVzdAkJKmxhc3RfbWVyZ2U7Ci0JZWxldmF0b3JfdAkJKmVsZXZhdG9yOworCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZQkqZWxldmF0b3I7CiAKIAkvKgogCSAqIHRoZSBxdWV1ZSByZXF1ZXN0IGZyZWVsaXN0LCBvbmUgZm9yIHJlYWRzIGFuZCBvbmUgZm9yIHdyaXRlcwpAQCAtNDQ5LDYgKzQ0OCw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfRkFJTF9JTyAgICAgMTIJLyogZmFrZSB0aW1lb3V0ICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfU1RBQ0tBQkxFICAgMTMJLyogc3VwcG9ydHMgcmVxdWVzdCBzdGFja2luZyAqLwogI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDE0CS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLworI2RlZmluZSBRVUVVRV9GTEFHX1ZJUlQgICAgICAgIFFVRVVFX0ZMQUdfTk9OUk9UIC8qIHBhcmF2aXJ0IGRldmljZSAqLwogCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9pc19sb2NrZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC01MjIsMjIgKzUyMiwzMiBAQAogCSAqIFRBR19GTFVTSAk6IG9yZGVyaW5nIGJ5IHRhZyB3LyBwcmUgYW5kIHBvc3QgZmx1c2hlcwogCSAqIFRBR19GVUEJOiBvcmRlcmluZyBieSB0YWcgdy8gcHJlIGZsdXNoIGFuZCBGVUEgd3JpdGUKIAkgKi8KLQlRVUVVRV9PUkRFUkVEX05PTkUJPSAweDAwLAotCVFVRVVFX09SREVSRURfRFJBSU4JPSAweDAxLAotCVFVRVVFX09SREVSRURfVEFHCT0gMHgwMiwKKwlRVUVVRV9PUkRFUkVEX0JZX0RSQUlOCQk9IDB4MDEsCisJUVVFVUVfT1JERVJFRF9CWV9UQUcJCT0gMHgwMiwKKwlRVUVVRV9PUkRFUkVEX0RPX1BSRUZMVVNICT0gMHgxMCwKKwlRVUVVRV9PUkRFUkVEX0RPX0JBUgkJPSAweDIwLAorCVFVRVVFX09SREVSRURfRE9fUE9TVEZMVVNICT0gMHg0MCwKKwlRVUVVRV9PUkRFUkVEX0RPX0ZVQQkJPSAweDgwLAogCi0JUVVFVUVfT1JERVJFRF9QUkVGTFVTSAk9IDB4MTAsCi0JUVVFVUVfT1JERVJFRF9QT1NURkxVU0gJPSAweDIwLAotCVFVRVVFX09SREVSRURfRlVBCT0gMHg0MCwKKwlRVUVVRV9PUkRFUkVEX05PTkUJCT0gMHgwMCwKIAotCVFVRVVFX09SREVSRURfRFJBSU5fRkxVU0ggPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKLQkJCVFVRVVFX09SREVSRURfUFJFRkxVU0ggfCBRVUVVRV9PUkRFUkVEX1BPU1RGTFVTSCwKLQlRVUVVRV9PUkRFUkVEX0RSQUlOX0ZVQQk9IFFVRVVFX09SREVSRURfRFJBSU4gfAotCQkJUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfRlVBLAotCVFVRVVFX09SREVSRURfVEFHX0ZMVVNICT0gUVVFVUVfT1JERVJFRF9UQUcgfAotCQkJUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfUE9TVEZMVVNILAotCVFVRVVFX09SREVSRURfVEFHX0ZVQQk9IFFVRVVFX09SREVSRURfVEFHIHwKLQkJCVFVRVVFX09SREVSRURfUFJFRkxVU0ggfCBRVUVVRV9PUkRFUkVEX0ZVQSwKKwlRVUVVRV9PUkRFUkVEX0RSQUlOCQk9IFFVRVVFX09SREVSRURfQllfRFJBSU4gfAorCQkJCQkgIFFVRVVFX09SREVSRURfRE9fQkFSLAorCVFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gJPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX1BSRUZMVVNIIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX1BPU1RGTFVTSCwKKwlRVUVVRV9PUkRFUkVEX0RSQUlOX0ZVQQkJPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX1BSRUZMVVNIIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX0ZVQSwKKworCVFVRVVFX09SREVSRURfVEFHCQk9IFFVRVVFX09SREVSRURfQllfVEFHIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX0JBUiwKKwlRVUVVRV9PUkRFUkVEX1RBR19GTFVTSAkJPSBRVUVVRV9PUkRFUkVEX1RBRyB8CisJCQkJCSAgUVVFVUVfT1JERVJFRF9ET19QUkVGTFVTSCB8CisJCQkJCSAgUVVFVUVfT1JERVJFRF9ET19QT1NURkxVU0gsCisJUVVFVUVfT1JERVJFRF9UQUdfRlVBCQk9IFFVRVVFX09SREVSRURfVEFHIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX1BSRUZMVVNIIHwKKwkJCQkJICBRVUVVRV9PUkRFUkVEX0RPX0ZVQSwKIAogCS8qCiAJICogT3JkZXJlZCBvcGVyYXRpb24gc2VxdWVuY2UKQEAgLTU4NSw3ICs1OTUsNiBAQAogI2RlZmluZSBibGtfZnVhX3JxKHJxKQkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GVUEpCiAjZGVmaW5lIGJsa19kaXNjYXJkX3JxKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCiAjZGVmaW5lIGJsa19iaWRpX3JxKHJxKQkJKChycSktPm5leHRfcnEgIT0gTlVMTCkKLSNkZWZpbmUgYmxrX2VtcHR5X2JhcnJpZXIocnEpCShibGtfYmFycmllcl9ycShycSkgJiYgYmxrX2ZzX3JlcXVlc3QocnEpICYmICEocnEpLT5oYXJkX25yX3NlY3RvcnMpCiAvKiBycS0+cXVldWVsaXN0IG9mIGRlcXVldWVkIHJlcXVlc3QgbXVzdCBiZSBsaXN0X2VtcHR5KCkgKi8KICNkZWZpbmUgYmxrX3F1ZXVlZF9ycShycSkJKCFsaXN0X2VtcHR5KCYocnEpLT5xdWV1ZWxpc3QpKQogCkBAIC04NTUsMTAgKzg2NCwxMCBAQAogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogZXh0ZXJuIGludCBibGtfcXVldWVfb3JkZXJlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCwgcHJlcGFyZV9mbHVzaF9mbiAqKTsKLWV4dGVybiBpbnQgYmxrX2RvX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiopOworZXh0ZXJuIGJvb2wgYmxrX2RvX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiopOwogZXh0ZXJuIHVuc2lnbmVkIGJsa19vcmRlcmVkX2N1cl9zZXEoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiBleHRlcm4gdW5zaWduZWQgYmxrX29yZGVyZWRfcmVxX3NlcShzdHJ1Y3QgcmVxdWVzdCAqKTsKLWV4dGVybiB2b2lkIGJsa19vcmRlcmVkX2NvbXBsZXRlX3NlcShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCwgaW50KTsKK2V4dGVybiBib29sIGJsa19vcmRlcmVkX2NvbXBsZXRlX3NlcShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCwgaW50KTsKIAogZXh0ZXJuIGludCBibGtfcnFfbWFwX3NnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqKTsKIGV4dGVybiB2b2lkIGJsa19kdW1wX3JxX2ZsYWdzKHN0cnVjdCByZXF1ZXN0ICosIGNoYXIgKik7CkBAIC05NzcsNyArOTg2LDYgQEAKIAogc3RydWN0IHdvcmtfc3RydWN0OwogaW50IGtibG9ja2Rfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQga2Jsb2NrZF9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0JMT0NLREVWKG1ham9yLG1pbm9yKSBcCiAJTU9EVUxFX0FMSUFTKCJibG9jay1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib3R0b21faGFsZi5oIGIvaW5jbHVkZS9saW51eC9ib3R0b21faGFsZi5oCmluZGV4IDc3N2RiZjYuLjI3YjFiY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm90dG9tX2hhbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JvdHRvbV9oYWxmLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9CSF9ICiAKIGV4dGVybiB2b2lkIGxvY2FsX2JoX2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2xvY2FsX2JoX2VuYWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9sb2NhbF9iaF9lbmFibGUodm9pZCk7CiBleHRlcm4gdm9pZCBsb2NhbF9iaF9lbmFibGUodm9pZCk7CiBleHRlcm4gdm9pZCBsb2NhbF9iaF9lbmFibGVfaXAodW5zaWduZWQgbG9uZyBpcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggM2NlNjRiOS4uODYwNWY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMzUsNiArMzUsNyBAQAogCUJIX09yZGVyZWQsCS8qIG9yZGVyZWQgd3JpdGUgKi8KIAlCSF9Fb3Bub3RzdXBwLAkvKiBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCAoYmFycmllcikgKi8KIAlCSF9VbndyaXR0ZW4sCS8qIEJ1ZmZlciBpcyBhbGxvY2F0ZWQgb24gZGlzayBidXQgbm90IHdyaXR0ZW4gKi8KKwlCSF9RdWlldCwJLyogQnVmZmVyIEVycm9yIFByaW5rcyB0byBiZSBxdWlldCAqLwogCiAJQkhfUHJpdmF0ZVN0YXJ0LC8qIG5vdCBhIHN0YXRlIGJpdCwgYnV0IHRoZSBmaXJzdCBiaXQgYXZhaWxhYmxlCiAJCQkgKiBmb3IgcHJpdmF0ZSBhbGxvY2F0aW9uIGJ5IG90aGVyIGVudGl0aWVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IDI0OGU2ZTMuLmE2N2E5MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xNTMsNCArMTUzLDggQEAKICNkZWZpbmUgVkVTQV9IU1lOQ19TVVNQRU5EICAgICAgMgogI2RlZmluZSBWRVNBX1BPV0VSRE9XTiAgICAgICAgICAzCiAKKyNpZmRlZiBDT05GSUdfVkdBX0NPTlNPTEUKK2V4dGVybiBib29sIHZnYWNvbl90ZXh0X2ZvcmNlKHZvaWQpOworI2VuZGlmCisKICNlbmRpZiAvKiBfTElOVVhfQ09OU09MRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlYnVnX2xvY2tzLmggYi9pbmNsdWRlL2xpbnV4L2RlYnVnX2xvY2tzLmgKaW5kZXggNGFhYTRhZi4uMDk2NDc2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVidWdfbG9ja3MuaApAQCAtMTcsNyArMTcsNyBAQAogKHsJCQkJCQkJCQlcCiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAogCQkJCQkJCQkJXAotCWlmICh1bmxpa2VseShjKSkgewkJCQkJCVwKKwlpZiAoIW9vcHNfaW5fcHJvZ3Jlc3MgJiYgdW5saWtlbHkoYykpIHsJCQkJXAogCQlpZiAoZGVidWdfbG9ja3Nfb2ZmKCkgJiYgIWRlYnVnX2xvY2tzX3NpbGVudCkJCVwKIAkJCVdBUk5fT04oMSk7CQkJCQlcCiAJCV9fcmV0ID0gMTsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCAyYmZkYTE3Li4zNDE2MTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIGV4dGVybiBpbnQgZG1pX25hbWVfaW5fc2VyaWFsKGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gaW50IGRtaV9hdmFpbGFibGU7CiBleHRlcm4gaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKTsKK2V4dGVybiBib29sIGRtaV9tYXRjaChlbnVtIGRtaV9maWVsZCBmLCBjb25zdCBjaGFyICpzdHIpOwogCiAjZWxzZQogCkBAIC02MSw2ICs2Miw4IEBACiAjZGVmaW5lIGRtaV9hdmFpbGFibGUgMAogc3RhdGljIGlubGluZSBpbnQgZG1pX3dhbGsodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpCiAJeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBkbWlfbWF0Y2goZW51bSBkbWlfZmllbGQgZiwgY29uc3QgY2hhciAqc3RyKQorCXsgcmV0dXJuIGZhbHNlOyB9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKaW5kZXggOTJmNmY2My4uN2EyMDQyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaApAQCAtMjgsNyArMjgsNyBAQAogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiB0eXBlZGVmIHZvaWQgKihlbGV2YXRvcl9pbml0X2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7Ci10eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2V4aXRfZm4pIChlbGV2YXRvcl90ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9leGl0X2ZuKSAoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICopOwogCiBzdHJ1Y3QgZWxldmF0b3Jfb3BzCiB7CkBAIC02Miw4ICs2Miw4IEBACiAKIHN0cnVjdCBlbHZfZnNfZW50cnkgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoZWxldmF0b3JfdCAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoZWxldmF0b3JfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKIC8qCkBAIC0xMzAsNyArMTMwLDcgQEAKIGV4dGVybiBzc2l6ZV90IGVsdl9pb3NjaGVkX3N0b3JlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIAogZXh0ZXJuIGludCBlbGV2YXRvcl9pbml0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGNoYXIgKik7Ci1leHRlcm4gdm9pZCBlbGV2YXRvcl9leGl0KGVsZXZhdG9yX3QgKik7CitleHRlcm4gdm9pZCBlbGV2YXRvcl9leGl0KHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqKTsKIGV4dGVybiBpbnQgZWx2X3JxX21lcmdlX29rKHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBiaW8gKik7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZhdWx0LWluamVjdC5oIGIvaW5jbHVkZS9saW51eC9mYXVsdC1pbmplY3QuaAppbmRleCAzMjM2OGM0Li4wNmNhOWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZhdWx0LWluamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvZmF1bHQtaW5qZWN0LmgKQEAgLTgxLDQgKzgxLDEzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OICovCiAKKyNpZmRlZiBDT05GSUdfRkFJTFNMQUIKK2V4dGVybiBib29sIHNob3VsZF9mYWlsc2xhYihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKQoreworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRkFJTFNMQUIgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9GQVVMVF9JTkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCmluZGV4IDU4NmFiNTYuLjNiZjViYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTI1LDcgKzI1LDggQEAKICNkZWZpbmUgRlVURVhfV0FLRV9CSVRTRVQJMTAKIAogI2RlZmluZSBGVVRFWF9QUklWQVRFX0ZMQUcJMTI4Ci0jZGVmaW5lIEZVVEVYX0NNRF9NQVNLCQl+RlVURVhfUFJJVkFURV9GTEFHCisjZGVmaW5lIEZVVEVYX0NMT0NLX1JFQUxUSU1FCTI1NgorI2RlZmluZSBGVVRFWF9DTURfTUFTSwkJfihGVVRFWF9QUklWQVRFX0ZMQUcgfCBGVVRFWF9DTE9DS19SRUFMVElNRSkKIAogI2RlZmluZSBGVVRFWF9XQUlUX1BSSVZBVEUJKEZVVEVYX1dBSVQgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1dBS0VfUFJJVkFURQkoRlVURVhfV0FLRSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKQEAgLTE2NCw2ICsxNjUsOCBAQAogCX0gYm90aDsKIH07CiAKKyNkZWZpbmUgRlVURVhfS0VZX0lOSVQgKHVuaW9uIGZ1dGV4X2tleSkgeyAuYm90aCA9IHsgLnB0ciA9IE5VTEwgfSB9CisKICNpZmRlZiBDT05GSUdfRlVURVgKIGV4dGVybiB2b2lkIGV4aXRfcm9idXN0X2xpc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKTsKIGV4dGVybiB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDNkZjc3NDIuLjE2OTQ4ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogc3RydWN0IGRpc2tfcGFydF90YmwgewogCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAlpbnQgbGVuOworCXN0cnVjdCBoZF9zdHJ1Y3QgKmxhc3RfbG9va3VwOwogCXN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnRbXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKaW5kZXggODlhNTZkNy4uZjgzMjg4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKQEAgLTExOSwxMyArMTE5LDE3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSAmJiBkZWZpbmVkKENPTkZJR19OT19IWikKKyNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgIWRlZmluZWQoQ09ORklHX0NMQVNTSUNfUkNVKQogZXh0ZXJuIHZvaWQgcmN1X2lycV9lbnRlcih2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9pcnFfZXhpdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9ubWlfZW50ZXIodm9pZCk7CitleHRlcm4gdm9pZCByY3Vfbm1pX2V4aXQodm9pZCk7CiAjZWxzZQogIyBkZWZpbmUgcmN1X2lycV9lbnRlcigpIGRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIHJjdV9pcnFfZXhpdCgpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KKyMgZGVmaW5lIHJjdV9ubWlfZW50ZXIoKSBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3Vfbm1pX2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX05PX0haKSAmJiAhZGVmaW5lZChDT05GSUdfQ0xBU1NJQ19SQ1UpICovCiAKIC8qCiAgKiBJdCBpcyBzYWZlIHRvIGRvIG5vbi1hdG9taWMgb3BzIG9uIC0+aGFyZGlycV9jb250ZXh0LApAQCAtMTM1LDcgKzEzOSw2IEBACiAgKi8KICNkZWZpbmUgX19pcnFfZW50ZXIoKQkJCQkJXAogCWRvIHsJCQkJCQlcCi0JCXJjdV9pcnFfZW50ZXIoKTsJCQlcCiAJCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwkJXAogCQlhZGRfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7CVwKIAkJdHJhY2VfaGFyZGlycV9lbnRlcigpOwkJCVwKQEAgLTE1NCw3ICsxNTcsNiBAQAogCQl0cmFjZV9oYXJkaXJxX2V4aXQoKTsJCQlcCiAJCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwkJXAogCQlzdWJfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7CVwKLQkJcmN1X2lycV9leGl0KCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCiAvKgpAQCAtMTY2LDExICsxNjgsMTQgQEAKIAlkbyB7CQkJCQlcCiAJCWZ0cmFjZV9ubWlfZW50ZXIoKTsJCVwKIAkJbG9ja2RlcF9vZmYoKTsJCQlcCisJCXJjdV9ubWlfZW50ZXIoKTsJCVwKIAkJX19pcnFfZW50ZXIoKTsJCQlcCiAJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBubWlfZXhpdCgpCQkJCVwKIAlkbyB7CQkJCQlcCiAJCV9faXJxX2V4aXQoKTsJCQlcCisJCXJjdV9ubWlfZXhpdCgpOwkJCVwKIAkJbG9ja2RlcF9vbigpOwkJCVwKIAkJZnRyYWNlX25taV9leGl0KCk7CQlcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggM2ViYTQzOC4uYmQzNzA3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTQzLDI2ICs0Myw2IEBACiB9OwogCiAvKgotICogaHJ0aW1lciBjYWxsYmFjayBtb2RlczoKLSAqCi0gKglIUlRJTUVSX0NCX1NPRlRJUlE6CQlDYWxsYmFjayBtdXN0IHJ1biBpbiBzb2Z0aXJxIGNvbnRleHQKLSAqCUhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFU6CUNhbGxiYWNrIG11c3QgcnVuIGluIGhhcmRpcnEgY29udGV4dAotICoJCQkJCVNwZWNpYWwgbW9kZSBmb3IgdGljayBlbXVsYXRpb24gYW5kCi0gKgkJCQkJc2NoZWR1bGVyIHRpbWVyLiBTdWNoIHRpbWVycyBhcmUgcGVyCi0gKgkJCQkJY3B1IGFuZCBub3QgYWxsb3dlZCB0byBiZSBtaWdyYXRlZCBvbgotICoJCQkJCWNwdSB1bnBsdWcuCi0gKglIUlRJTUVSX0NCX0lSUVNBRkVfVU5MT0NLRUQ6CUNhbGxiYWNrIHNob3VsZCBydW4gaW4gaGFyZGlycSBjb250ZXh0Ci0gKgkJCQkJd2l0aCB0aW1lci0+YmFzZSBsb2NrIHVubG9ja2VkCi0gKgkJCQkJdXNlZCBmb3IgdGltZXJzIHdoaWNoIGNhbGwgd2FrZXVwIHRvCi0gKgkJCQkJYXZvaWQgbG9jayBvcmRlciBwcm9ibGVtcyB3aXRoIHJxLT5sb2NrCi0gKi8KLWVudW0gaHJ0aW1lcl9jYl9tb2RlIHsKLQlIUlRJTUVSX0NCX1NPRlRJUlEsCi0JSFJUSU1FUl9DQl9JUlFTQUZFX1BFUkNQVSwKLQlIUlRJTUVSX0NCX0lSUVNBRkVfVU5MT0NLRUQsCi19OwotCi0vKgogICogVmFsdWVzIHRvIHRyYWNrIHN0YXRlIG9mIHRoZSB0aW1lcgogICoKICAqIFBvc3NpYmxlIHN0YXRlczoKQEAgLTcwLDcgKzUwLDYgQEAKICAqIDB4MDAJCWluYWN0aXZlCiAgKiAweDAxCQllbnF1ZXVlZCBpbnRvIHJidHJlZQogICogMHgwMgkJY2FsbGJhY2sgZnVuY3Rpb24gcnVubmluZwotICogMHgwNAkJY2FsbGJhY2sgcGVuZGluZyAoaGlnaCByZXNvbHV0aW9uIG1vZGUpCiAgKgogICogU3BlY2lhbCBjYXNlczoKICAqIDB4MDMJCWNhbGxiYWNrIGZ1bmN0aW9uIHJ1bm5pbmcgYW5kIGVucXVldWVkCkBAIC05Miw4ICs3MSw3IEBACiAjZGVmaW5lIEhSVElNRVJfU1RBVEVfSU5BQ1RJVkUJMHgwMAogI2RlZmluZSBIUlRJTUVSX1NUQVRFX0VOUVVFVUVECTB4MDEKICNkZWZpbmUgSFJUSU1FUl9TVEFURV9DQUxMQkFDSwkweDAyCi0jZGVmaW5lIEhSVElNRVJfU1RBVEVfUEVORElORwkweDA0Ci0jZGVmaW5lIEhSVElNRVJfU1RBVEVfTUlHUkFURQkweDA4CisjZGVmaW5lIEhSVElNRVJfU1RBVEVfTUlHUkFURQkweDA0CiAKIC8qKgogICogc3RydWN0IGhydGltZXIgLSB0aGUgYmFzaWMgaHJ0aW1lciBzdHJ1Y3R1cmUKQEAgLTEwOSw4ICs4Nyw2IEBACiAgKiBAZnVuY3Rpb246CXRpbWVyIGV4cGlyeSBjYWxsYmFjayBmdW5jdGlvbgogICogQGJhc2U6CXBvaW50ZXIgdG8gdGhlIHRpbWVyIGJhc2UgKHBlciBjcHUgYW5kIHBlciBjbG9jaykKICAqIEBzdGF0ZToJc3RhdGUgaW5mb3JtYXRpb24gKFNlZSBiaXQgdmFsdWVzIGFib3ZlKQotICogQGNiX21vZGU6CWhpZ2ggcmVzb2x1dGlvbiB0aW1lciBmZWF0dXJlIHRvIHNlbGVjdCB0aGUgY2FsbGJhY2sgZXhlY3V0aW9uCi0gKgkJIG1vZGUKICAqIEBjYl9lbnRyeToJbGlzdCBoZWFkIHRvIGVucXVldWUgYW4gZXhwaXJlZCB0aW1lciBpbnRvIHRoZSBjYWxsYmFjayBsaXN0CiAgKiBAc3RhcnRfc2l0ZToJdGltZXIgc3RhdGlzdGljcyBmaWVsZCB0byBzdG9yZSB0aGUgc2l0ZSB3aGVyZSB0aGUgdGltZXIKICAqCQl3YXMgc3RhcnRlZApAQCAtMTI5LDcgKzEwNSw2IEBACiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZQkqYmFzZTsKIAl1bnNpZ25lZCBsb25nCQkJc3RhdGU7CiAJc3RydWN0IGxpc3RfaGVhZAkJY2JfZW50cnk7Ci0JZW51bSBocnRpbWVyX2NiX21vZGUJCWNiX21vZGU7CiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCiAJaW50CQkJCXN0YXJ0X3BpZDsKIAl2b2lkCQkJCSpzdGFydF9zaXRlOwpAQCAtMTg4LDE1ICsxNjMsMTEgQEAKICAqIEBjaGVja19jbG9ja3M6CUluZGljdGF0b3IsIHdoZW4gc2V0IGV2YWx1YXRlIHRpbWUgc291cmNlIGFuZCBjbG9jawogICoJCQlldmVudCBkZXZpY2VzIHdoZXRoZXIgaGlnaCByZXNvbHV0aW9uIG1vZGUgY2FuIGJlCiAgKgkJCWFjdGl2YXRlZC4KLSAqIEBjYl9wZW5kaW5nOgkJRXhwaXJlZCB0aW1lcnMgYXJlIG1vdmVkIGZyb20gdGhlIHJidHJlZSB0byB0aGlzCi0gKgkJCWxpc3QgaW4gdGhlIHRpbWVyIGludGVycnVwdC4gVGhlIGxpc3QgaXMgcHJvY2Vzc2VkCi0gKgkJCWluIHRoZSBzb2Z0aXJxLgogICogQG5yX2V2ZW50czoJCVRvdGFsIG51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgZXZlbnRzCiAgKi8KIHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlIHsKIAlzcGlubG9ja190CQkJbG9jazsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCWNsb2NrX2Jhc2VbSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVNdOwotCXN0cnVjdCBsaXN0X2hlYWQJCWNiX3BlbmRpbmc7CiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCWt0aW1lX3QJCQkJZXhwaXJlc19uZXh0OwogCWludAkJCQlocmVzX2FjdGl2ZTsKQEAgLTQwNCw4ICszNzUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2lzX3F1ZXVlZChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7Ci0JcmV0dXJuIHRpbWVyLT5zdGF0ZSAmCi0JCShIUlRJTUVSX1NUQVRFX0VOUVVFVUVEIHwgSFJUSU1FUl9TVEFURV9QRU5ESU5HKTsKKwlyZXR1cm4gdGltZXItPnN0YXRlICYgSFJUSU1FUl9TVEFURV9FTlFVRVVFRDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDAxMGZiMjYuLmU5OWM1NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMTIyLDggKzEyMiw2IEBACiAjZGVmaW5lIE1BWF9EUklWRVMJMgkvKiBwZXIgaW50ZXJmYWNlOyAyIGFzc3VtZWQgYnkgbG90cyBvZiBjb2RlICovCiAjZGVmaW5lIFNFQ1RPUl9TSVpFCTUxMgogCi0jZGVmaW5lIElERV9MQVJHRV9TRUVLKGIxLGIyLHQpCSgoKGIxKSA+IChiMikgKyAodCkpIHx8ICgoYjIpID4gKGIxKSArICh0KSkpCi0KIC8qCiAgKiBUaW1lb3V0cyBmb3IgdmFyaW91cyBvcGVyYXRpb25zOgogICovCkBAIC0xNzIsOSArMTcwLDcgQEAKIGVudW0gewkJaWRlX3Vua25vd24sCWlkZV9nZW5lcmljLAlpZGVfcGNpLAogCQlpZGVfY21kNjQwLAlpZGVfZHRjMjI3OCwJaWRlX2FsaTE0eHgsCiAJCWlkZV9xZDY1eHgsCWlkZV91bWM4NjcyLAlpZGVfaHQ2NTYwYiwKLQkJaWRlX3J6MTAwMCwJaWRlX3RybTI5MCwKLQkJaWRlX2NtZDY0NiwJaWRlX2N5ODJjNjkzLAlpZGVfNGRyaXZlcywKLQkJaWRlX3BtYWMsCWlkZV9hY29ybiwKKwkJaWRlXzRkcml2ZXMsCWlkZV9wbWFjLAlpZGVfYWNvcm4sCiAJCWlkZV9hdTF4eHgsCWlkZV9wYWxtMzcxMAogfTsKIApAQCAtNDk2LDggKzQ5Miw2IEBACiAJICogd2hlbiBtb3JlIHRoYW4gb25lIGludGVycnVwdCBpcyBuZWVkZWQuCiAJICovCiAJSURFX0FGTEFHX0xJTUlUX05GUkFNRVMJCT0gKDEgPDwgNyksCi0JLyogU2Vla2luZyBpbiBwcm9ncmVzcy4gKi8KLQlJREVfQUZMQUdfU0VFS0lORwkJPSAoMSA8PCA4KSwKIAkvKiBTYXZlZCBUT0MgaW5mb3JtYXRpb24gaXMgY3VycmVudC4gKi8KIAlJREVfQUZMQUdfVE9DX1ZBTElECQk9ICgxIDw8IDkpLAogCS8qIFdlIHRoaW5rIHRoYXQgdGhlIGRyaXZlIGRvb3IgaXMgbG9ja2VkLiAqLwpAQCAtODQ1LDggKzgzOSw2IEBACiAJdW5zaWduZWQJZXh0cmFfcG9ydHM7CS8qIG51bWJlciBvZiBleHRyYSBkbWEgcG9ydHMgKi8KIAogCXVuc2lnbmVkCXByZXNlbnQgICAgOiAxOwkvKiB0aGlzIGludGVyZmFjZSBleGlzdHMgKi8KLQl1bnNpZ25lZAlzZXJpYWxpemVkIDogMTsJLyogc2VyaWFsaXplZCBhbGwgY2hhbm5lbCBvcGVyYXRpb24gKi8KLQl1bnNpZ25lZAlzaGFyaW5nX2lycTogMTsJLyogMSA9IHNoYXJpbmcgaXJxIHdpdGggYW5vdGhlciBod2lmICovCiAJdW5zaWduZWQJc2dfbWFwcGVkICA6IDE7CS8qIHNnX3RhYmxlIGFuZCBzZ19uZW50cyBhcmUgcmVhZHkgKi8KIAogCXN0cnVjdCBkZXZpY2UJCWdlbmRldjsKQEAgLTkwOSw2ICs5MDEsOCBAQAogCiAJaW50IHJlcV9nZW47CiAJaW50IHJlcV9nZW5fdGltZXI7CisKKwlzcGlubG9ja190IGxvY2s7CiB9IGlkZV9od2dyb3VwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGlkZV9kcml2ZXJfcyBpZGVfZHJpdmVyX3Q7CkBAIC0xMTIyLDYgKzExMTYsMTQgQEAKIAlJREVfUE1fQ09NUExFVEVELAogfTsKIAoraW50IGdlbmVyaWNfaWRlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOworaW50IGdlbmVyaWNfaWRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICopOworCit2b2lkIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9zdGFydF9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordm9pZCBpZGVfY29tcGxldGVfcG1fcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgaWRlX2NoZWNrX3BtX3N0YXRlKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCiAvKgogICogU3ViZHJpdmVycyBzdXBwb3J0LgogICoKQEAgLTEzNzYsOCArMTM3OCw4IEBACiAJSURFX0hGTEFHX0xFR0FDWV9JUlFTCQk9ICgxIDw8IDIxKSwKIAkvKiBmb3JjZSB1c2Ugb2YgbGVnYWN5IElSUXMgKi8KIAlJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMJPSAoMSA8PCAyMiksCi0JLyogbGltaXQgTEJBNDggcmVxdWVzdHMgdG8gMjU2IHNlY3RvcnMgKi8KLQlJREVfSEZMQUdfUlFTSVpFXzI1NgkJPSAoMSA8PCAyMyksCisJLyogaG9zdCBpcyBUUk0yOTAgKi8KKwlJREVfSEZMQUdfVFJNMjkwCQk9ICgxIDw8IDIzKSwKIAkvKiB1c2UgMzItYml0IEkvTyBvcHMgKi8KIAlJREVfSEZMQUdfSU9fMzJCSVQJCT0gKDEgPDwgMjQpLAogCS8qIHVubWFzayBJUlFzICovCkBAIC0xNDE1LDYgKzE0MTcsOSBAQAogCiAJaWRlX3BjaV9lbmFibGViaXRfdAllbmFibGViaXRzWzJdOwogCWh3aWZfY2hpcHNldF90CQljaGlwc2V0OworCisJdTE2CQkJbWF4X3NlY3RvcnM7CS8qIGlmIDwgdGhhbiB0aGUgZGVmYXVsdCBvbmUgKi8KKwogCXUzMgkJCWhvc3RfZmxhZ3M7CiAJdTgJCQlwaW9fbWFzazsKIAl1OAkJCXN3ZG1hX21hc2s7CkBAIC0xNjEwLDEzICsxNjE1LDEzIEBACiAvKgogICogU3RydWN0dXJlIGxvY2tpbmc6CiAgKgotICogaWRlX2NmZ19tdHggYW5kIGlkZV9sb2NrIHRvZ2V0aGVyIHByb3RlY3QgY2hhbmdlcyB0bwotICogaWRlX2h3aWZfdC0+e25leHQsaHdncm91cH0KKyAqIGlkZV9jZmdfbXR4IGFuZCBod2dyb3VwLT5sb2NrIHRvZ2V0aGVyIHByb3RlY3QgY2hhbmdlcyB0bworICogaWRlX2h3aWZfdC0+bmV4dAogICogaWRlX2RyaXZlX3QtPm5leHQKICAqCi0gKiBpZGVfaHdncm91cF90LT5idXN5OiBpZGVfbG9jawotICogaWRlX2h3Z3JvdXBfdC0+aHdpZjogaWRlX2xvY2sKLSAqIGlkZV9od2lmX3QtPm1hdGU6IGNvbnN0YW50LCBubyBsb2NraW5nCisgKiBpZGVfaHdncm91cF90LT5idXN5OiBod2dyb3VwLT5sb2NrCisgKiBpZGVfaHdncm91cF90LT5od2lmOiBod2dyb3VwLT5sb2NrCisgKiBpZGVfaHdpZl90LT57aHdncm91cCxtYXRlfTogY29uc3RhbnQsIG5vIGxvY2tpbmcKICAqIGlkZV9kcml2ZV90LT5od2lmOiBjb25zdGFudCwgbm8gbG9ja2luZwogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IGY1OGEwY2YuLmJlM2M0ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjUxLDkgKzI1Myw2IEBACiAJQkxPQ0tfU09GVElSUSwKIAlUQVNLTEVUX1NPRlRJUlEsCiAJU0NIRURfU09GVElSUSwKLSNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi0JSFJUSU1FUl9TT0ZUSVJRLAotI2VuZGlmCiAJUkNVX1NPRlRJUlEsIAkvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi8KIAogCU5SX1NPRlRJUlFTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCAzZGRkZmE3Li45ODU2NGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTEyOSw5ICsxMjksMTQgQEAKIAljb25zdCBjaGFyCSp0eXBlbmFtZTsKIH07CiAKK3N0cnVjdCB0aW1lcl9yYW5kX3N0YXRlOworc3RydWN0IGlycV8yX2lvbW11OwogLyoqCiAgKiBzdHJ1Y3QgaXJxX2Rlc2MgLSBpbnRlcnJ1cHQgZGVzY3JpcHRvcgogICogQGlycToJCWludGVycnVwdCBudW1iZXIgZm9yIHRoaXMgZGVzY3JpcHRvcgorICogQHRpbWVyX3JhbmRfc3RhdGU6CXBvaW50ZXIgdG8gdGltZXIgcmFuZCBzdGF0ZSBzdHJ1Y3QKKyAqIEBrc3RhdF9pcnFzOgkJaXJxIHN0YXRzIHBlciBjcHUKKyAqIEBpcnFfMl9pb21tdToJaW9tbXUgd2l0aCB0aGlzIGlycQogICogQGhhbmRsZV9pcnE6CQloaWdobGV2ZWwgaXJxLWV2ZW50cyBoYW5kbGVyIFtpZiBOVUxMLCBfX2RvX0lSUSgpXQogICogQGNoaXA6CQlsb3cgbGV2ZWwgaW50ZXJydXB0IGhhcmR3YXJlIGFjY2VzcwogICogQG1zaV9kZXNjOgkJTVNJIGRlc2NyaXB0b3IKQEAgLTE0Myw4ICsxNDgsOCBAQAogICogQGRlcHRoOgkJZGlzYWJsZS1kZXB0aCwgZm9yIG5lc3RlZCBpcnFfZGlzYWJsZSgpIGNhbGxzCiAgKiBAd2FrZV9kZXB0aDoJCWVuYWJsZSBkZXB0aCwgZm9yIG11bHRpcGxlIHNldF9pcnFfd2FrZSgpIGNhbGxlcnMKICAqIEBpcnFfY291bnQ6CQlzdGF0cyBmaWVsZCB0byBkZXRlY3Qgc3RhbGxlZCBpcnFzCi0gKiBAaXJxc191bmhhbmRsZWQ6CXN0YXRzIGZpZWxkIGZvciBzcHVyaW91cyB1bmhhbmRsZWQgaW50ZXJydXB0cwogICogQGxhc3RfdW5oYW5kbGVkOglhZ2luZyB0aW1lciBmb3IgdW5oYW5kbGVkIGNvdW50CisgKiBAaXJxc191bmhhbmRsZWQ6CXN0YXRzIGZpZWxkIGZvciBzcHVyaW91cyB1bmhhbmRsZWQgaW50ZXJydXB0cwogICogQGxvY2s6CQlsb2NraW5nIGZvciBTTVAKICAqIEBhZmZpbml0eToJCUlSUSBhZmZpbml0eSBvbiBTTVAKICAqIEBjcHU6CQljcHUgaW5kZXggdXNlZnVsIGZvciBiYWxhbmNpbmcKQEAgLTE1NCw2ICsxNTksMTMgQEAKICAqLwogc3RydWN0IGlycV9kZXNjIHsKIAl1bnNpZ25lZCBpbnQJCWlycTsKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICp0aW1lcl9yYW5kX3N0YXRlOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICprc3RhdF9pcnFzOworIyBpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCXN0cnVjdCBpcnFfMl9pb21tdSAgICAgICppcnFfMl9pb21tdTsKKyMgZW5kaWYKKyNlbmRpZgogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CiAJc3RydWN0IG1zaV9kZXNjCQkqbXNpX2Rlc2M7CkBAIC0xNjUsOCArMTc3LDggQEAKIAl1bnNpZ25lZCBpbnQJCWRlcHRoOwkJLyogbmVzdGVkIGlycSBkaXNhYmxlcyAqLwogCXVuc2lnbmVkIGludAkJd2FrZV9kZXB0aDsJLyogbmVzdGVkIHdha2UgZW5hYmxlcyAqLwogCXVuc2lnbmVkIGludAkJaXJxX2NvdW50OwkvKiBGb3IgZGV0ZWN0aW5nIGJyb2tlbiBJUlFzICovCi0JdW5zaWduZWQgaW50CQlpcnFzX3VuaGFuZGxlZDsKIAl1bnNpZ25lZCBsb25nCQlsYXN0X3VuaGFuZGxlZDsJLyogQWdpbmcgdGltZXIgZm9yIHVuaGFuZGxlZCBjb3VudCAqLworCXVuc2lnbmVkIGludAkJaXJxc191bmhhbmRsZWQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKICNpZmRlZiBDT05GSUdfU01QCiAJY3B1bWFza190CQlhZmZpbml0eTsKQEAgLTE4MSwxMiArMTkzLDUxIEBACiAJY29uc3QgY2hhcgkJKm5hbWU7CiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKK2V4dGVybiB2b2lkIGVhcmx5X2lycV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYXJjaF9lYXJseV9pcnFfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGFyY2hfaW5pdF9jaGlwX2RhdGEoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGFyY2hfaW5pdF9jb3B5X2NoaXBfZGF0YShzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLAorCQkJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgYXJjaF9mcmVlX2NoaXBfZGF0YShzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogCisjaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCiBleHRlcm4gc3RydWN0IGlycV9kZXNjIGlycV9kZXNjW05SX0lSUVNdOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2ModW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxX2Rlc2MgKyBpcnEgOiBOVUxMOworCXJldHVybiAoaXJxIDwgTlJfSVJRUykgPyBpcnFfZGVzYyArIGlycSA6IE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCit7CisJcmV0dXJuIGlycV90b19kZXNjKGlycSk7Cit9CisKKyNlbHNlCisKK2V4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgKmlycV90b19kZXNjKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqbW92ZV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBpbnQgY3B1KTsKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQkJXAorCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV90b19kZXNjKGlycSk7IGlycSA8IG5yX2lycXM7IGlycSsrLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaXJxLCBkZXNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOyBpcnEgPj0gMDsgaXJxLS0sIGRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpKQorCisjZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoREVTQykgXAorCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSkKKyNkZWZpbmUga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycW5vLCBERVNDKSBcCisJKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKyspCisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfZGVzYyAqCitpcnFfcmVtYXBfdG9fZGVzYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQworCXJldHVybiBpcnFfdG9fZGVzYyhpcnEpOworI2Vsc2UKKwlyZXR1cm4gZGVzYzsKKyNlbmRpZgogfQogCiAvKgpAQCAtMzgwLDYgKzQzMSwxMSBAQAogI2RlZmluZSBnZXRfaXJxX2RhdGEoaXJxKQkoaXJxX3RvX2Rlc2MoaXJxKS0+aGFuZGxlcl9kYXRhKQogI2RlZmluZSBnZXRfaXJxX21zaShpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5tc2lfZGVzYykKIAorI2RlZmluZSBnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKQkJKChkZXNjKS0+Y2hpcCkKKyNkZWZpbmUgZ2V0X2lycV9kZXNjX2NoaXBfZGF0YShkZXNjKQkoKGRlc2MpLT5jaGlwX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfZGVzY19kYXRhKGRlc2MpCQkoKGRlc2MpLT5oYW5kbGVyX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfZGVzY19tc2koZGVzYykJCSgoZGVzYyktPm1zaV9kZXNjKQorCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIAogI2VuZGlmIC8qICFDT05GSUdfUzM5MCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFuci5oIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCmluZGV4IDQ1MmMyODAuLjk1ZDJiNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxbnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTEsMjQgKzEsMzggQEAKICNpZm5kZWYgX0xJTlVYX0lSUU5SX0gKICNkZWZpbmUgX0xJTlVYX0lSUU5SX0gKIAorLyoKKyAqIEdlbmVyaWMgaXJxX2Rlc2MgaXRlcmF0b3JzOgorICovCisjaWZkZWYgX19LRVJORUxfXworCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogIyBkZWZpbmUgbnJfaXJxcwkJTlJfSVJRUwogCiAjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQlcCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChpcnEgPSBucl9pcnFzIC0gMTsgaXJxID49IDA7IGlycS0tKQogI2Vsc2UKKwogZXh0ZXJuIGludCBucl9pcnFzOwogCisjaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisKK3N0cnVjdCBpcnFfZGVzYzsKICMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCVwKIAlmb3IgKGlycSA9IDAsIGRlc2MgPSBpcnFfZGVzYzsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGRlc2MrKykKLQotIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpCQkJCVwKLQlmb3IgKGlycSA9IG5yX2lycXMgLSAxLCBkZXNjID0gaXJxX2Rlc2MgKyAobnJfaXJxcyAtIDEpOwlcCi0JICAgICBpcnEgPj0gMDsgaXJxLS0sIGRlc2MtLSkKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaXJxLCBkZXNjKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoaXJxID0gbnJfaXJxcyAtIDEsIGRlc2MgPSBpcnFfZGVzYyArIChucl9pcnFzIC0gMSk7ICAgICAgICBcCisJICAgIGlycSA+PSAwOyBpcnEtLSwgZGVzYy0tKQorI2VuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBmb3JfZWFjaF9pcnFfbnIoaXJxKQkJCVwKLQlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKQorI2RlZmluZSBmb3JfZWFjaF9pcnFfbnIoaXJxKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA2MDAyYWU3Li5jYTlmZjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE0MSw2ICsxNDEsMTUgQEAKIAkJKF9feCA8IDApID8gLV9feCA6IF9feDsJCVwKIAl9KQogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK3ZvaWQgbWlnaHRfZmF1bHQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1pZ2h0X2ZhdWx0KHZvaWQpCit7CisJbWlnaHRfc2xlZXAoKTsKK30KKyNlbmRpZgorCiBleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHBhbmljX25vdGlmaWVyX2xpc3Q7CiBleHRlcm4gbG9uZyAoKnBhbmljX2JsaW5rKShsb25nIHRpbWUpOwogTk9SRVRfVFlQRSB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKQEAgLTE4OCw2ICsxOTcsOCBAQAogZXh0ZXJuIGludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IF9fa2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIGludCBrZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gaW50IGZ1bmNfcHRyX2lzX2tlcm5lbF90ZXh0KHZvaWQgKnB0cik7CisKIHN0cnVjdCBwaWQ7CiBleHRlcm4gc3RydWN0IHBpZCAqc2Vzc2lvbl9vZl9wZ3JwKHN0cnVjdCBwaWQgKnBncnApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggNGExNDVjYS4uNGVlNGIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMjgsNyArMjgsOSBAQAogCiBzdHJ1Y3Qga2VybmVsX3N0YXQgewogCXN0cnVjdCBjcHVfdXNhZ2Vfc3RhdAljcHVzdGF0OwotCXVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOworI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorICAgICAgIHVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOworI2VuZGlmCiB9OwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGtlcm5lbF9zdGF0LCBrc3RhdCk7CkBAIC0zOSw2ICs0MSwxMCBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKKyNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShpcnEpIFwKKwkoa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKQorCiBzdHJ1Y3QgaXJxX2Rlc2M7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUodW5zaWduZWQgaW50IGlycSwKQEAgLTQ2LDExICs1MiwxNyBAQAogewogCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwogfQorI2VuZGlmCiAKKworI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKICAgICAgICByZXR1cm4ga3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdOwogfQorI2Vsc2UKK2V4dGVybiB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7CisjZW5kaWYKIAogLyoKICAqIE51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzcGVjaWZpYyBJUlEgc291cmNlLCBzaW5jZSBib290dXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGd1ZXN0X2xhdW5jaGVyLmggYi9pbmNsdWRlL2xpbnV4L2xndWVzdF9sYXVuY2hlci5oCmluZGV4IGU3MjE3ZGMuLmE1MzQwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGd1ZXN0X2xhdW5jaGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZ3Vlc3RfbGF1bmNoZXIuaApAQCAtNTQsOSArNTQsMTMgQEAKIC8qIFdyaXRlIGNvbW1hbmQgZmlyc3Qgd29yZCBpcyBhIHJlcXVlc3QuICovCiBlbnVtIGxndWVzdF9yZXEKIHsKLQlMSFJFUV9JTklUSUFMSVpFLCAvKiArIGJhc2UsIHBmbmxpbWl0LCBwZ2Rpciwgc3RhcnQgKi8KKwlMSFJFUV9JTklUSUFMSVpFLCAvKiArIGJhc2UsIHBmbmxpbWl0LCBzdGFydCAqLwogCUxIUkVRX0dFVERNQSwgLyogTm8gbG9uZ2VyIHVzZWQgKi8KIAlMSFJFUV9JUlEsIC8qICsgaXJxICovCiAJTEhSRVFfQlJFQUssIC8qICsgb24vb2ZmIGZsYWcgKG9uIGJsb2NrcyB1bnRpbCBzb21lb25lIGRvZXMgb2ZmKSAqLwogfTsKKworLyogVGhlIGFsaWdubWVudCB0byB1c2UgYmV0d2VlbiBjb25zdW1lciBhbmQgcHJvZHVjZXIgcGFydHMgb2YgdnJpbmcuCisgKiB4ODYgcGFnZXNpemUgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gKi8KKyNkZWZpbmUgTEdVRVNUX1ZSSU5HX0FMSUdOCTQwOTYKICNlbmRpZiAvKiBfTElOVVhfTEdVRVNUX0xBVU5DSEVSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBlZDNmMjZlLi4zNDQ5ZGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTIxMywxMCArMjEzLDExIEBACiAJQVRBX1BGTEFHX0ZST1pFTgk9ICgxIDw8IDIpLCAvKiBwb3J0IGlzIGZyb3plbiAqLwogCUFUQV9QRkxBR19SRUNPVkVSRUQJPSAoMSA8PCAzKSwgLyogcmVjb3ZlcnkgYWN0aW9uIHBlcmZvcm1lZCAqLwogCUFUQV9QRkxBR19MT0FESU5HCT0gKDEgPDwgNCksIC8qIGJvb3QvbG9hZGluZyBwcm9iZSAqLwotCUFUQV9QRkxBR19VTkxPQURJTkcJPSAoMSA8PCA1KSwgLyogbW9kdWxlIGlzIHVubG9hZGluZyAqLwogCUFUQV9QRkxBR19TQ1NJX0hPVFBMVUcJPSAoMSA8PCA2KSwgLyogU0NTSSBob3RwbHVnIHNjaGVkdWxlZCAqLwogCUFUQV9QRkxBR19JTklUSUFMSVpJTkcJPSAoMSA8PCA3KSwgLyogYmVpbmcgaW5pdGlhbGl6ZWQsIGRvbid0IHRvdWNoICovCiAJQVRBX1BGTEFHX1JFU0VUVElORwk9ICgxIDw8IDgpLCAvKiByZXNldCBpbiBwcm9ncmVzcyAqLworCUFUQV9QRkxBR19VTkxPQURJTkcJPSAoMSA8PCA5KSwgLyogZHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkICovCisJQVRBX1BGTEFHX1VOTE9BREVECT0gKDEgPDwgMTApLCAvKiBkcml2ZXIgaXMgdW5sb2FkZWQgKi8KIAogCUFUQV9QRkxBR19TVVNQRU5ERUQJPSAoMSA8PCAxNyksIC8qIHBvcnQgaXMgc3VzcGVuZGVkIChwb3dlcikgKi8KIAlBVEFfUEZMQUdfUE1fUEVORElORwk9ICgxIDw8IDE4KSwgLyogUE0gb3BlcmF0aW9uIHBlbmRpbmcgKi8KQEAgLTEyODUsMjYgKzEyODYsNjIgQEAKIAlyZXR1cm4gYXRhX3RhZ192YWxpZChsaW5rLT5hY3RpdmVfdGFnKSB8fCBsaW5rLT5zYWN0aXZlOwogfQogCi1leHRlcm4gc3RydWN0IGF0YV9saW5rICpfX2F0YV9wb3J0X25leHRfbGluayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCQkgICAgIHN0cnVjdCBhdGFfbGluayAqbGluaywKLQkJCQkJICAgICBib29sIGRldl9vbmx5KTsKKy8qCisgKiBJdGVyYXRvcnMKKyAqCisgKiBBVEFfTElURVJfKiBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2VsZWN0IGxpbmsgaXRlcmF0aW9uIG1vZGUgYW5kCisgKiBBVEFfRElURVJfKiBkZXZpY2UgaXRlcmF0aW9uIG1vZGUuCisgKgorICogRm9yIGEgY3VzdG9tIGl0ZXJhdGlvbiBkaXJlY3RseSB1c2luZyBhdGFfe2xpbmt8ZGV2fV9uZXh0KCksIGlmCisgKiBAbGluayBvciBAZGV2LCByZXNwZWN0aXZlbHksIGlzIE5VTEwsIHRoZSBmaXJzdCBlbGVtZW50IGlzCisgKiByZXR1cm5lZC4gIEBkZXYgYW5kIEBsaW5rIGNhbiBiZSBhbnkgdmFsaWQgZGV2aWNlIG9yIGxpbmsgYW5kIHRoZQorICogbmV4dCBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgaXRlcmF0aW9uIG1vZGUgd2lsbCBiZSByZXR1cm5lZC4KKyAqIEFmdGVyIHRoZSBsYXN0IGVsZW1lbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK2VudW0gYXRhX2xpbmtfaXRlcl9tb2RlIHsKKwlBVEFfTElURVJfRURHRSwJCS8qIGlmIHByZXNlbnQsIFBNUCBsaW5rcyBvbmx5OyBvdGhlcndpc2UsCisJCQkJICogaG9zdCBsaW5rLiAgbm8gc2xhdmUgbGluayAqLworCUFUQV9MSVRFUl9IT1NUX0ZJUlNULAkvKiBob3N0IGxpbmsgZm9sbG93ZWQgYnkgUE1QIG9yIHNsYXZlIGxpbmtzICovCisJQVRBX0xJVEVSX1BNUF9GSVJTVCwJLyogUE1QIGxpbmtzIGZvbGxvd2VkIGJ5IGhvc3QgbGluaywKKwkJCQkgKiBzbGF2ZSBsaW5rIHN0aWxsIGNvbWVzIGFmdGVyIGhvc3QgbGluayAqLworfTsKIAotI2RlZmluZSBfX2F0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIFwKLQlmb3IgKChsaW5rKSA9IF9fYXRhX3BvcnRfbmV4dF9saW5rKChhcCksIE5VTEwsIGZhbHNlKTsgKGxpbmspOyBcCi0JICAgICAobGluaykgPSBfX2F0YV9wb3J0X25leHRfbGluaygoYXApLCAobGluayksIGZhbHNlKSkKK2VudW0gYXRhX2Rldl9pdGVyX21vZGUgeworCUFUQV9ESVRFUl9FTkFCTEVELAorCUFUQV9ESVRFUl9FTkFCTEVEX1JFVkVSU0UsCisJQVRBX0RJVEVSX0FMTCwKKwlBVEFfRElURVJfQUxMX1JFVkVSU0UsCit9OwogCi0jZGVmaW5lIGF0YV9wb3J0X2Zvcl9lYWNoX2xpbmsobGluaywgYXApIFwKLQlmb3IgKChsaW5rKSA9IF9fYXRhX3BvcnRfbmV4dF9saW5rKChhcCksIE5VTEwsIHRydWUpOyAobGluayk7IFwKLQkgICAgIChsaW5rKSA9IF9fYXRhX3BvcnRfbmV4dF9saW5rKChhcCksIChsaW5rKSwgdHJ1ZSkpCitleHRlcm4gc3RydWN0IGF0YV9saW5rICphdGFfbGlua19uZXh0KHN0cnVjdCBhdGFfbGluayAqbGluaywKKwkJCQkgICAgICBzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCSAgICAgIGVudW0gYXRhX2xpbmtfaXRlcl9tb2RlIG1vZGUpOwogCi0jZGVmaW5lIGF0YV9saW5rX2Zvcl9lYWNoX2RldihkZXYsIGxpbmspIFwKLQlmb3IgKChkZXYpID0gKGxpbmspLT5kZXZpY2U7IFwKLQkgICAgIChkZXYpIDwgKGxpbmspLT5kZXZpY2UgKyBhdGFfbGlua19tYXhfZGV2aWNlcyhsaW5rKSB8fCAoKGRldikgPSBOVUxMKTsgXAotCSAgICAgKGRldikrKykKK2V4dGVybiBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2Rldl9uZXh0KHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBhdGFfbGluayAqbGluaywKKwkJCQkgICAgICAgZW51bSBhdGFfZGV2X2l0ZXJfbW9kZSBtb2RlKTsKIAotI2RlZmluZSBhdGFfbGlua19mb3JfZWFjaF9kZXZfcmV2ZXJzZShkZXYsIGxpbmspIFwKLQlmb3IgKChkZXYpID0gKGxpbmspLT5kZXZpY2UgKyBhdGFfbGlua19tYXhfZGV2aWNlcyhsaW5rKSAtIDE7IFwKLQkgICAgIChkZXYpID49IChsaW5rKS0+ZGV2aWNlIHx8ICgoZGV2KSA9IE5VTEwpOyAoZGV2KS0tKQorLyoKKyAqIFNob3J0Y3V0IG5vdGF0aW9uIGZvciBpdGVyYXRpb25zCisgKgorICogYXRhX2Zvcl9lYWNoX2xpbmsoKSBpdGVyYXRlcyBvdmVyIGVhY2ggbGluayBvZiBAYXAgYWNjb3JkaW5nIHRvCisgKiBAbW9kZS4gIEBsaW5rIHBvaW50cyB0byB0aGUgY3VycmVudCBsaW5rIGluIHRoZSBsb29wLiAgQGxpbmsgaXMKKyAqIE5VTEwgYWZ0ZXIgbG9vcCB0ZXJtaW5hdGlvbi4gIGF0YV9mb3JfZWFjaF9kZXYoKSB3b3JrcyB0aGUgc2FtZSB3YXkKKyAqIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWFjaCBkZXZpY2Ugb2YgQGxpbmsuCisgKgorICogTm90ZSB0aGF0IHRoZSBtb2RlIHByZWZpeGVzIEFUQV97THxEfUlURVJfIHNob3VsZG4ndCBuZWVkIHRvIGJlCisgKiBzcGVjaWZpZWQgd2hlbiB1c2luZyB0aGUgZm9sbG93aW5nIHNob3J0aGFuZCBub3RhdGlvbnMuICBPbmx5IHRoZQorICogbW9kZSBpdHNlbGYgKEVER0UsIEhPU1RfRklSU1QsIEVOQUJMRUQsIGV0Yy4uLikgc2hvdWxkIGJlCisgKiBzcGVjaWZpZWQuICBUaGlzIG5vdCBvbmx5IGluY3JlYXNlcyBicmV2aXR5IGJ1dCBhbHNvIG1ha2VzIGl0CisgKiBpbXBvc3NpYmxlIHRvIHVzZSBBVEFfTElURVJfKiBmb3IgZGV2aWNlIGl0ZXJhdGlvbiBvciB2aWNlLXZlcnNhLgorICovCisjZGVmaW5lIGF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBtb2RlKSBcCisJZm9yICgobGluaykgPSBhdGFfbGlua19uZXh0KE5VTEwsIChhcCksIEFUQV9MSVRFUl8jI21vZGUpOyAobGluayk7IFwKKwkgICAgIChsaW5rKSA9IGF0YV9saW5rX25leHQoKGxpbmspLCAoYXApLCBBVEFfTElURVJfIyNtb2RlKSkKKworI2RlZmluZSBhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgbW9kZSkgXAorCWZvciAoKGRldikgPSBhdGFfZGV2X25leHQoTlVMTCwgKGxpbmspLCBBVEFfRElURVJfIyNtb2RlKTsgKGRldik7IFwKKwkgICAgIChkZXYpID0gYXRhX2Rldl9uZXh0KChkZXYpLCAobGluayksIEFUQV9ESVRFUl8jI21vZGUpKQogCiAvKioKICAqCWF0YV9uY3FfZW5hYmxlZCAtIFRlc3Qgd2hldGhlciBOQ1EgaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCAyOWFlYzZlLi4yM2JmMDJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtNzMsNiArNzMsOCBAQAogCXN0cnVjdCBsb2NrZGVwX3N1YmNsYXNzX2tleQlzdWJrZXlzW01BWF9MT0NLREVQX1NVQkNMQVNTRVNdOwogfTsKIAorI2RlZmluZSBMT0NLU1RBVF9QT0lOVFMJCTQKKwogLyoKICAqIFRoZSBsb2NrLWNsYXNzIGl0c2VsZjoKICAqLwpAQCAtMTE5LDcgKzEyMSw4IEBACiAJaW50CQkJCW5hbWVfdmVyc2lvbjsKIAogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKLQl1bnNpZ25lZCBsb25nCQkJY29udGVudGlvbl9wb2ludFs0XTsKKwl1bnNpZ25lZCBsb25nCQkJY29udGVudGlvbl9wb2ludFtMT0NLU1RBVF9QT0lOVFNdOworCXVuc2lnbmVkIGxvbmcJCQljb250ZW5kaW5nX3BvaW50W0xPQ0tTVEFUX1BPSU5UU107CiAjZW5kaWYKIH07CiAKQEAgLTE0NCw2ICsxNDcsNyBAQAogCiBzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyB7CiAJdW5zaWduZWQgbG9uZwkJCWNvbnRlbnRpb25fcG9pbnRbNF07CisJdW5zaWduZWQgbG9uZwkJCWNvbnRlbmRpbmdfcG9pbnRbNF07CiAJc3RydWN0IGxvY2tfdGltZQkJcmVhZF93YWl0dGltZTsKIAlzdHJ1Y3QgbG9ja190aW1lCQl3cml0ZV93YWl0dGltZTsKIAlzdHJ1Y3QgbG9ja190aW1lCQlyZWFkX2hvbGR0aW1lOwpAQCAtMTY1LDYgKzE2OSw3IEBACiAJY29uc3QgY2hhcgkJCSpuYW1lOwogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIAlpbnQJCQkJY3B1OworCXVuc2lnbmVkIGxvbmcJCQlpcDsKICNlbmRpZgogfTsKIApAQCAtMzA5LDggKzMxNCwxNSBAQAogZXh0ZXJuIHZvaWQgbG9ja19yZWxlYXNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IG5lc3RlZCwKIAkJCSB1bnNpZ25lZCBsb25nIGlwKTsKIAotZXh0ZXJuIHZvaWQgbG9ja19zZXRfc3ViY2xhc3Moc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGlwKTsKK2V4dGVybiB2b2lkIGxvY2tfc2V0X2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCisJCQkgICB1bnNpZ25lZCBsb25nIGlwKTsKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc2V0X3N1YmNsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKKwkJdW5zaWduZWQgaW50IHN1YmNsYXNzLCB1bnNpZ25lZCBsb25nIGlwKQoreworCWxvY2tfc2V0X2NsYXNzKGxvY2ssIGxvY2stPm5hbWUsIGxvY2stPmtleSwgc3ViY2xhc3MsIGlwKTsKK30KIAogIyBkZWZpbmUgSU5JVF9MT0NLREVQCQkJCS5sb2NrZGVwX3JlY3Vyc2lvbiA9IDAsCiAKQEAgLTMyOCw2ICszNDAsNyBAQAogCiAjIGRlZmluZSBsb2NrX2FjcXVpcmUobCwgcywgdCwgciwgYywgbiwgaSkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgbG9ja19yZWxlYXNlKGwsIG4sIGkpCQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja19zZXRfY2xhc3MobCwgbiwgaywgcywgaSkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tfc2V0X3N1YmNsYXNzKGwsIHMsIGkpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBsb2NrZGVwX2luaXQoKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBsb2NrZGVwX2luZm8oKQkJCQlkbyB7IH0gd2hpbGUgKDApCkBAIC0zNTYsNyArMzY5LDcgQEAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAKIGV4dGVybiB2b2lkIGxvY2tfY29udGVuZGVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCk7Ci1leHRlcm4gdm9pZCBsb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7CitleHRlcm4gdm9pZCBsb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCk7CiAKICNkZWZpbmUgTE9DS19DT05URU5ERUQoX2xvY2ssIHRyeSwgbG9jaykJCQlcCiBkbyB7CQkJCQkJCQlcCkBAIC0zNjQsMjAgKzM3NywyMCBAQAogCQlsb2NrX2NvbnRlbmRlZCgmKF9sb2NrKS0+ZGVwX21hcCwgX1JFVF9JUF8pOwlcCiAJCWxvY2soX2xvY2spOwkJCQkJXAogCX0JCQkJCQkJXAotCWxvY2tfYWNxdWlyZWQoJihfbG9jayktPmRlcF9tYXApOwkJCVwKKwlsb2NrX2FjcXVpcmVkKCYoX2xvY2spLT5kZXBfbWFwLCBfUkVUX0lQXyk7CQkJXAogfSB3aGlsZSAoMCkKIAogI2Vsc2UgLyogQ09ORklHX0xPQ0tfU1RBVCAqLwogCiAjZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGxvY2tfYWNxdWlyZWQobG9ja2RlcF9tYXApIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrX2FjcXVpcmVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApCiAKICNkZWZpbmUgTE9DS19DT05URU5ERUQoX2xvY2ssIHRyeSwgbG9jaykgXAogCWxvY2soX2xvY2spCiAKICNlbmRpZiAvKiBDT05GSUdfTE9DS19TVEFUICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHUykgJiYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKQpAQCAtNDgxLDQgKzQ5NCwyMiBAQAogIyBkZWZpbmUgbG9ja19tYXBfcmVsZWFzZShsKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKKyMgZGVmaW5lIG1pZ2h0X2xvY2sobG9jaykgCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwl0eXBlY2hlY2soc3RydWN0IGxvY2tkZXBfbWFwICosICYobG9jayktPmRlcF9tYXApOwkJXAorCWxvY2tfYWNxdWlyZSgmKGxvY2spLT5kZXBfbWFwLCAwLCAwLCAwLCAyLCBOVUxMLCBfVEhJU19JUF8pOwlcCisJbG9ja19yZWxlYXNlKCYobG9jayktPmRlcF9tYXAsIDAsIF9USElTX0lQXyk7CQkJXAorfSB3aGlsZSAoMCkKKyMgZGVmaW5lIG1pZ2h0X2xvY2tfcmVhZChsb2NrKSAJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgJihsb2NrKS0+ZGVwX21hcCk7CQlcCisJbG9ja19hY3F1aXJlKCYobG9jayktPmRlcF9tYXAsIDAsIDAsIDEsIDIsIE5VTEwsIF9USElTX0lQXyk7CVwKKwlsb2NrX3JlbGVhc2UoJihsb2NrKS0+ZGVwX21hcCwgMCwgX1RISVNfSVBfKTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIG1pZ2h0X2xvY2sobG9jaykgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9MT0NLREVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBmZTgyNTQ3MS4uOWNmYzliNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMjMyLDggKzIzMiw5IEBACiAJc3RydWN0IGNvcmVfc3RhdGUgKmNvcmVfc3RhdGU7IC8qIGNvcmVkdW1waW5nIHN1cHBvcnQgKi8KIAogCS8qIGFpbyBiaXRzICovCi0Jcndsb2NrX3QJCWlvY3R4X2xpc3RfbG9jazsJLyogYWlvIGxvY2sgKi8KLQlzdHJ1Y3Qga2lvY3R4CQkqaW9jdHhfbGlzdDsKKwlzcGlubG9ja190CQlpb2N0eF9sb2NrOworCXN0cnVjdCBobGlzdF9oZWFkCWlvY3R4X2xpc3Q7CisKICNpZmRlZiBDT05GSUdfTU1fT1dORVIKIAkvKgogCSAqICJvd25lciIgcG9pbnRzIHRvIGEgdGFzayB0aGF0IGlzIHJlZ2FyZGVkIGFzIHRoZSBjYW5vbmljYWwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXNpLmggYi9pbmNsdWRlL2xpbnV4L21zaS5oCmluZGV4IDhmMjkzOTIuLmQyYjhhMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tc2kuaApAQCAtMTAsOCArMTAsMTEgQEAKIH07CiAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KK3N0cnVjdCBpcnFfZGVzYzsKIGV4dGVybiB2b2lkIG1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIHVubWFza19tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgcmVhZF9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKK2V4dGVybiB2b2lkIHdyaXRlX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgcmVhZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgd3JpdGVfbXNpX21zZyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdXRleC5oIGIvaW5jbHVkZS9saW51eC9tdXRleC5oCmluZGV4IGJjNmRhMTAuLjdhMGU1YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKQEAgLTE0NCw2ICsxNDQsOCBAQAogLyoKICAqIE5PVEU6IG11dGV4X3RyeWxvY2soKSBmb2xsb3dzIHRoZSBzcGluX3RyeWxvY2soKSBjb252ZW50aW9uLAogICogICAgICAgbm90IHRoZSBkb3duX3RyeWxvY2soKSBjb252ZW50aW9uIQorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgbXV0ZXggaGFzIGJlZW4gYWNxdWlyZWQgc3VjY2Vzc2Z1bGx5LCBhbmQgMCBvbiBjb250ZW50aW9uLgogICovCiBleHRlcm4gaW50IG11dGV4X3RyeWxvY2soc3RydWN0IG11dGV4ICpsb2NrKTsKIGV4dGVybiB2b2lkIG11dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oCmluZGV4IGE4ZWZjZmUuLjNkMzI3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmgKQEAgLTI2LDggKzI2LDcgQEAKIAogLyoKICAqIEFuIG9mX3BsYXRmb3JtX2RyaXZlciBkcml2ZXIgaXMgYXR0YWNoZWQgdG8gYSBiYXNpYyBvZl9kZXZpY2Ugb24KLSAqIHRoZSAicGxhdGZvcm0gYnVzIiAob2ZfcGxhdGZvcm1fYnVzX3R5cGUpIChvciBJU0EsIEVCVVMgYW5kIFNCVVMKLSAqIGJ1c3NlcyBvbiBzcGFyYykuCisgKiB0aGUgInBsYXRmb3JtIGJ1cyIgKG9mX3BsYXRmb3JtX2J1c190eXBlKS4KICAqLwogc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlcgogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCmluZGV4IDUyMzE4NjEuLjFjZTlmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKQEAgLTg2LDggKzg2LDcgQEAKIHZvaWQgb3Byb2ZpbGVfYXJjaF9leGl0KHZvaWQpOwogCiAvKioKLSAqIEFkZCBhIHNhbXBsZS4gVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuIFBhc3MKLSAqIHNtcF9wcm9jZXNzb3JfaWQoKSBhcyBjcHUuCisgKiBBZGQgYSBzYW1wbGUuIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgogICovCiB2b2lkIG9wcm9maWxlX2FkZF9zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLCB1bnNpZ25lZCBsb25nIGV2ZW50KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKaW5kZXggYTdjNzIxMy4uNGY3MWJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCkBAIC00NSw3ICs0NSwxMSBAQAogCWludCBpdF9yZXF1ZXVlX3BlbmRpbmc7CQkvKiB3YWl0aW5nIHRvIHJlcXVldWUgdGhpcyB0aW1lciAqLwogI2RlZmluZSBSRVFVRVVFX1BFTkRJTkcgMQogCWludCBpdF9zaWdldl9ub3RpZnk7CQkvKiBub3RpZnkgd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKml0X3Byb2Nlc3M7CS8qIHByb2Nlc3MgdG8gc2VuZCBzaWduYWwgdG8gKi8KKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqaXRfc2lnbmFsOworCXVuaW9uIHsKKwkJc3RydWN0IHBpZCAqaXRfcGlkOwkvKiBwaWQgb2YgcHJvY2VzcyB0byBzZW5kIHNpZ25hbCB0byAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKml0X3Byb2Nlc3M7CS8qIGZvciBjbG9ja19uYW5vc2xlZXAgKi8KKwl9OwogCXN0cnVjdCBzaWdxdWV1ZSAqc2lncTsJCS8qIHNpZ25hbCBxdWV1ZSBlbnRyeS4gKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oIGIvaW5jbHVkZS9saW51eC9yYW5kb20uaAppbmRleCAzNmYxMjVjLi5hZGJmM2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIF9MSU5VWF9SQU5ET01fSAogCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogCiAvKiBpb2N0bCgpJ3MgZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLwogCkBAIC00NCw2ICs0NSw1NiBAQAogCiBleHRlcm4gdm9pZCByYW5kX2luaXRpYWxpemVfaXJxKGludCBpcnEpOwogCitzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZTsKKyNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKworZXh0ZXJuIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbXTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqZ2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV90aW1lcl9zdGF0ZVtpcnFdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnN0YXRlKQoreworCWlmIChpcnEgPj0gbnJfaXJxcykKKwkJcmV0dXJuOworCisJaXJxX3RpbWVyX3N0YXRlW2lycV0gPSBzdGF0ZTsKK30KKworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqZ2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICghZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZGVzYy0+dGltZXJfcmFuZF9zdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF90aW1lcl9yYW5kX3N0YXRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICghZGVzYykKKwkJcmV0dXJuOworCisJZGVzYy0+dGltZXJfcmFuZF9zdGF0ZSA9IHN0YXRlOworfQorI2VuZGlmCisKKwogZXh0ZXJuIHZvaWQgYWRkX2lucHV0X3JhbmRvbW5lc3ModW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLAogCQkJCSB1bnNpZ25lZCBpbnQgdmFsdWUpOwogZXh0ZXJuIHZvaWQgYWRkX2ludGVycnVwdF9yYW5kb21uZXNzKGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VjbGFzc2ljLmggYi9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaAppbmRleCA1Zjg5YjYyLi4zMDFkZGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWNsYXNzaWMuaApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KIAogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCi0jZGVmaW5lIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfQ0hFQ0sJKCAzICogSFopIC8qIGZvciByY3AtPmppZmZpZXNfc3RhbGwgKi8KKyNkZWZpbmUgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSwkoMTAgKiBIWikgLyogZm9yIHJjcC0+amlmZmllc19zdGFsbCAqLwogI2RlZmluZSBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0sJKDMwICogSFopIC8qIGZvciByY3AtPmppZmZpZXNfc3RhbGwgKi8KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDg5NWRjOWMuLjExNjhmYmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC01MiwxMSArNTIsMTUgQEAKIAl2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKTsKIH07CiAKLSNpZmRlZiBDT05GSUdfQ0xBU1NJQ19SQ1UKKyNpZiBkZWZpbmVkKENPTkZJR19DTEFTU0lDX1JDVSkKICNpbmNsdWRlIDxsaW51eC9yY3VjbGFzc2ljLmg+Ci0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX0NMQVNTSUNfUkNVICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSkKKyNpbmNsdWRlIDxsaW51eC9yY3V0cmVlLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUX1JDVSkKICNpbmNsdWRlIDxsaW51eC9yY3VwcmVlbXB0Lmg+Ci0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19DTEFTU0lDX1JDVSAqLworI2Vsc2UKKyNlcnJvciAiVW5rbm93biBSQ1UgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uIgorI2VuZGlmIC8qICNlbHNlICNpZiBkZWZpbmVkKENPTkZJR19DTEFTU0lDX1JDVSkgKi8KIAogI2RlZmluZSBSQ1VfSEVBRF9JTklUIAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KICNkZWZpbmUgUkNVX0hFQUQoaGVhZCkgc3RydWN0IHJjdV9oZWFkIGhlYWQgPSBSQ1VfSEVBRF9JTklUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzY4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uICh0cmVlLWJhc2VkIHZlcnNpb24pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA4CisgKgorICogQXV0aG9yOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KKyAqCSAgIFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPiBIaWVyYXJjaGljYWwgYWxnb3JpdGhtCisgKgorICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIHdvcmsgYnkgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgorICogYW5kIGlucHV0cyBmcm9tIFJ1c3R5IFJ1c3NlbGwsIEFuZHJlYSBBcmNhbmdlbGkgYW5kIEFuZGkgS2xlZW4uCisgKgorICogRm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIHNlZSAtCisgKiAJRG9jdW1lbnRhdGlvbi9SQ1UKKyAqLworCisjaWZuZGVmIF9fTElOVVhfUkNVVFJFRV9ICisjZGVmaW5lIF9fTElOVVhfUkNVVFJFRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisKKy8qCisgKiBEZWZpbmUgc2hhcGUgb2YgaGllcmFyY2h5IGJhc2VkIG9uIE5SX0NQVVMgYW5kIENPTkZJR19SQ1VfRkFOT1VULgorICogSW4gdGhlb3J5LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRkIG1vcmUgbGV2ZWxzIHN0cmFpZ2h0Zm9yd2FyZGx5LgorICogSW4gcHJhY3RpY2UsIHRoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCwgc28gdGhlcmUgaXMgcHJvYmFibHkgc29tZQorICogYnVnIHNvbWV3aGVyZS4KKyAqLworI2RlZmluZSBNQVhfUkNVX0xWTFMgMworI2RlZmluZSBSQ1VfRkFOT1VUCSAgICAgIChDT05GSUdfUkNVX0ZBTk9VVCkKKyNkZWZpbmUgUkNVX0ZBTk9VVF9TUQkgICAgICAoUkNVX0ZBTk9VVCAqIFJDVV9GQU5PVVQpCisjZGVmaW5lIFJDVV9GQU5PVVRfQ1VCRQkgICAgICAoUkNVX0ZBTk9VVF9TUSAqIFJDVV9GQU5PVVQpCisKKyNpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVQKKyMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKE5SX0NQVVMpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAwCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCisjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfU1EKKyMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMgorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUIC0gMSkgLyBSQ1VfRkFOT1VUKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKE5SX0NQVVMpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCisjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfQ1VCRQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAzCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoKChOUl9DUFVTKSArIFJDVV9GQU5PVVRfU1EgLSAxKSAvIFJDVV9GQU5PVVRfU1EpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoKChOUl9DUFVTKSArIChSQ1VfRkFOT1VUKSAtIDEpIC8gKFJDVV9GQU5PVVQpKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgTlJfQ1BVUworI2Vsc2UKKyMgZXJyb3IgIkNPTkZJR19SQ1VfRkFOT1VUIGluc3VmZmljaWVudCBmb3IgTlJfQ1BVUyIKKyNlbmRpZiAvKiAjaWYgKE5SX0NQVVMpIDw9IFJDVV9GQU5PVVQgKi8KKworI2RlZmluZSBSQ1VfU1VNIChOVU1fUkNVX0xWTF8wICsgTlVNX1JDVV9MVkxfMSArIE5VTV9SQ1VfTFZMXzIgKyBOVU1fUkNVX0xWTF8zKQorI2RlZmluZSBOVU1fUkNVX05PREVTIChSQ1VfU1VNIC0gTlJfQ1BVUykKKworLyoKKyAqIER5bnRpY2tzIHBlci1DUFUgc3RhdGUuCisgKi8KK3N0cnVjdCByY3VfZHludGlja3MgeworCWludCBkeW50aWNrc19uZXN0aW5nOwkvKiBUcmFjayBuZXN0aW5nIGxldmVsLCBzb3J0IG9mLiAqLworCWludCBkeW50aWNrczsJCS8qIEV2ZW4gdmFsdWUgZm9yIGR5bnRpY2tzLWlkbGUsIGVsc2Ugb2RkLiAqLworCWludCBkeW50aWNrc19ubWk7CS8qIEV2ZW4gdmFsdWUgZm9yIGVpdGhlciBkeW50aWNrcy1pZGxlIG9yICovCisJCQkJLyogIG5vdCBpbiBubWkgaGFuZGxlciwgZWxzZSBvZGQuICBTbyB0aGlzICovCisJCQkJLyogIHJlbWFpbnMgZXZlbiBmb3Igbm1pIGZyb20gaXJxIGhhbmRsZXIuICovCit9OworCisvKgorICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KKyAqLworc3RydWN0IHJjdV9ub2RlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgbG9uZyBxc21hc2s7CS8qIENQVXMgb3IgZ3JvdXBzIHRoYXQgbmVlZCB0byBzd2l0Y2ggaW4gKi8KKwkJCQkvKiAgb3JkZXIgZm9yIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIHRvIHByb2NlZWQuKi8KKwl1bnNpZ25lZCBsb25nIHFzbWFza2luaXQ7CisJCQkJLyogUGVyLUdQIGluaXRpYWxpemF0aW9uIGZvciBxc21hc2suICovCisJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkvKiBNYXNrIHRvIGFwcGx5IHRvIHBhcmVudCBxc21hc2suICovCisJaW50CWdycGxvOwkJLyogbG93ZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLworCWludAlncnBoaTsJCS8qIGhpZ2hlc3QtbnVtYmVyZWQgQ1BVIG9yIGdyb3VwIGhlcmUuICovCisJdTgJZ3JwbnVtOwkJLyogQ1BVL2dyb3VwIG51bWJlciBmb3IgbmV4dCBsZXZlbCB1cC4gKi8KKwl1OAlsZXZlbDsJCS8qIHJvb3QgaXMgYXQgbGV2ZWwgMC4gKi8KKwlzdHJ1Y3QgcmN1X25vZGUgKnBhcmVudDsKK30gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKKworLyogSW5kZXggdmFsdWVzIGZvciBueHR0YWlsIGFycmF5IGluIHN0cnVjdCByY3VfZGF0YS4gKi8KKyNkZWZpbmUgUkNVX0RPTkVfVEFJTAkJMAkvKiBBbHNvIFJDVV9XQUlUIGhlYWQuICovCisjZGVmaW5lIFJDVV9XQUlUX1RBSUwJCTEJLyogQWxzbyBSQ1VfTkVYVF9SRUFEWSBoZWFkLiAqLworI2RlZmluZSBSQ1VfTkVYVF9SRUFEWV9UQUlMCTIJLyogQWxzbyBSQ1VfTkVYVCBoZWFkLiAqLworI2RlZmluZSBSQ1VfTkVYVF9UQUlMCQkzCisjZGVmaW5lIFJDVV9ORVhUX1NJWkUJCTQKKworLyogUGVyLUNQVSBkYXRhIGZvciByZWFkLWNvcHkgdXBkYXRlLiAqLworc3RydWN0IHJjdV9kYXRhIHsKKwkvKiAxKSBxdWllc2NlbnQtc3RhdGUgYW5kIGdyYWNlLXBlcmlvZCBoYW5kbGluZyA6ICovCisJbG9uZwkJY29tcGxldGVkOwkvKiBUcmFjayByc3AtPmNvbXBsZXRlZCBncCBudW1iZXIgKi8KKwkJCQkJLyogIGluIG9yZGVyIHRvIGRldGVjdCBHUCBlbmQuICovCisJbG9uZwkJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCisJCQkJCS8qICBpcyBhd2FyZSBvZiBoYXZpbmcgc3RhcnRlZC4gKi8KKwlsb25nCQlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKKwkJCQkJLyogVmFsdWUgb2YgY29tcGxldGVkIGF0IHRpbWUgb2YgcXMuICovCisJYm9vbAkJcGFzc2VkX3F1aWVzYzsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCisJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLworCWJvb2wJCWJlZW5vbmxpbmU7CS8qIENQVSBvbmxpbmUgYXQgbGVhc3Qgb25jZS4gKi8KKwlzdHJ1Y3QgcmN1X25vZGUgKm15bm9kZTsJLyogVGhpcyBDUFUncyBsZWFmIG9mIGhpZXJhcmNoeSAqLworCXVuc2lnbmVkIGxvbmcgZ3JwbWFzazsJCS8qIE1hc2sgdG8gYXBwbHkgdG8gbGVhZiBxc21hc2suICovCisKKwkvKiAyKSBiYXRjaCBoYW5kbGluZyAqLworCS8qCisJICogSWYgbnh0bGlzdCBpcyBub3QgTlVMTCwgaXQgaXMgcGFydGl0aW9uZWQgYXMgZm9sbG93cy4KKwkgKiBBbnkgb2YgdGhlIHBhcnRpdGlvbnMgbWlnaHQgYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlCisJICogcG9pbnRlciB0byB0aGF0IHBhcnRpdGlvbiB3aWxsIGJlIGVxdWFsIHRvIHRoZSBwb2ludGVyIGZvcgorCSAqIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9uLiAgV2hlbiB0aGUgbGlzdCBpcyBlbXB0eSwgYWxsIG9mCisJICogdGhlIG54dHRhaWwgZWxlbWVudHMgcG9pbnQgdG8gbnh0bGlzdCwgd2hpY2ggaXMgTlVMTC4KKwkgKgorCSAqIFsqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSwgTlVMTCA9ICpueHR0YWlsW1JDVV9ORVhUX1RBSUxdKToKKwkgKglFbnRyaWVzIHRoYXQgbWlnaHQgaGF2ZSBhcnJpdmVkIGFmdGVyIGN1cnJlbnQgR1AgZW5kZWQKKwkgKiBbKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdKToKKwkgKglFbnRyaWVzIGtub3duIHRvIGhhdmUgYXJyaXZlZCBiZWZvcmUgY3VycmVudCBHUCBlbmRlZAorCSAqIFsqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSwgKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkIC0gMTogd2FpdGluZyBmb3IgY3VycmVudCBHUAorCSAqIFtueHRsaXN0LCAqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSk6CisJICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQKKwkgKglUaGUgZ3JhY2UgcGVyaW9kIGZvciB0aGVzZSBlbnRyaWVzIGhhcyBjb21wbGV0ZWQsIGFuZAorCSAqCXRoZSBvdGhlciBncmFjZS1wZXJpb2QtY29tcGxldGVkIGVudHJpZXMgbWF5IGJlIG1vdmVkCisJICoJaGVyZSB0ZW1wb3JhcmlseSBpbiByY3VfcHJvY2Vzc19jYWxsYmFja3MoKS4KKwkgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgKm54dGxpc3Q7CisJc3RydWN0IHJjdV9oZWFkICoqbnh0dGFpbFtSQ1VfTkVYVF9TSVpFXTsKKwlsb25nCQlxbGVuOyAJIAkvKiAjIG9mIHF1ZXVlZCBjYWxsYmFja3MgKi8KKwlsb25nCQlibGltaXQ7CQkvKiBVcHBlciBsaW1pdCBvbiBhIHByb2Nlc3NlZCBiYXRjaCAqLworCisjaWZkZWYgQ09ORklHX05PX0haCisJLyogMykgZHludGlja3MgaW50ZXJmYWNlLiAqLworCXN0cnVjdCByY3VfZHludGlja3MgKmR5bnRpY2tzOwkvKiBTaGFyZWQgcGVyLUNQVSBkeW50aWNrcyBzdGF0ZS4gKi8KKwlpbnQgZHludGlja3Nfc25hcDsJCS8qIFBlci1HUCB0cmFja2luZyBmb3IgZHludGlja3MuICovCisJaW50IGR5bnRpY2tzX25taV9zbmFwOwkJLyogUGVyLUdQIHRyYWNraW5nIGZvciBkeW50aWNrc19ubWkuICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCisJLyogNCkgcmVhc29ucyB0aGlzIENQVSBuZWVkZWQgdG8gYmUga2lja2VkIGJ5IGZvcmNlX3F1aWVzY2VudF9zdGF0ZSAqLworI2lmZGVmIENPTkZJR19OT19IWgorCXVuc2lnbmVkIGxvbmcgZHludGlja3NfZnFzOwkvKiBLaWNrZWQgZHVlIHRvIGR5bnRpY2tzIGlkbGUuICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCXVuc2lnbmVkIGxvbmcgb2ZmbGluZV9mcXM7CS8qIEtpY2tlZCBkdWUgdG8gYmVpbmcgb2ZmbGluZS4gKi8KKwl1bnNpZ25lZCBsb25nIHJlc2NoZWRfaXBpOwkvKiBTZW50IGEgcmVzY2hlZCBJUEkuICovCisKKwkvKiA1KSBzdGF0ZSB0byBhbGxvdyB0aGlzIENQVSB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUgb24gb3RoZXJzICovCisJbG9uZyBuX3JjdV9wZW5kaW5nOwkJLyogcmN1X3BlbmRpbmcoKSBjYWxscyBzaW5jZSBib290LiAqLworCWxvbmcgbl9yY3VfcGVuZGluZ19mb3JjZV9xczsJLyogd2hlbiB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGVzLiAqLworCisJaW50IGNwdTsKK307CisKKy8qIFZhbHVlcyBmb3Igc2lnbmFsZWQgZmllbGQgaW4gc3RydWN0IHJjdV9zdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0dQX0lOSVQJCTAJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLworI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTEJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCisjZGVmaW5lIFJDVV9GT1JDRV9RUwkJMgkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KKyNpZmRlZiBDT05GSUdfTk9fSFoKKyNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9EWU5USUNLCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX0ZPUkNFX1FTCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19OT19IWiAqLworCisjZGVmaW5lIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVMJIDMJLyogZm9yIHJzcC0+amlmZmllc19mb3JjZV9xcyAqLworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisjZGVmaW5lIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfQ0hFQ0sgICAoMTAgKiBIWikgIC8qIGZvciByc3AtPmppZmZpZXNfc3RhbGwgKi8KKyNkZWZpbmUgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLICgzMCAqIEhaKSAgLyogZm9yIHJzcC0+amlmZmllc19zdGFsbCAqLworI2RlZmluZSBSQ1VfU1RBTExfUkFUX0RFTEFZCQkyCSAgLyogQWxsb3cgb3RoZXIgQ1BVcyB0aW1lICovCisJCQkJCQkgIC8qICB0byB0YWtlIGF0IGxlYXN0IG9uZSAqLworCQkJCQkJICAvKiAgc2NoZWR1bGluZyBjbG9jayBpcnEgKi8KKwkJCQkJCSAgLyogIGJlZm9yZSByYXR0aW5nIG9uIHRoZW0uICovCisKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKworLyoKKyAqIFJDVSBnbG9iYWwgc3RhdGUsIGluY2x1ZGluZyBub2RlIGhpZXJhcmNoeS4gIFRoaXMgaGllcmFyY2h5IGlzCisgKiByZXByZXNlbnRlZCBpbiAiaGVhcCIgZm9ybSBpbiBhIGRlbnNlIGFycmF5LiAgVGhlIHJvb3QgKGZpcnN0IGxldmVsKQorICogb2YgdGhlIGhpZXJhcmNoeSBpcyBpbiAtPm5vZGVbMF0gKHJlZmVyZW5jZWQgYnkgLT5sZXZlbFswXSksIHRoZSBzZWNvbmQKKyAqIGxldmVsIGluIC0+bm9kZVsxXSB0aHJvdWdoIC0+bm9kZVttXSAoLT5ub2RlWzFdIHJlZmVyZW5jZWQgYnkgLT5sZXZlbFsxXSksCisgKiBhbmQgdGhlIHRoaXJkIGxldmVsIGluIC0+bm9kZVttKzFdIGFuZCBmb2xsb3dpbmcgKC0+bm9kZVttKzFdIHJlZmVyZW5jZWQKKyAqIGJ5IC0+bGV2ZWxbMl0pLiAgVGhlIG51bWJlciBvZiBsZXZlbHMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mCisgKiBDUFVzIGFuZCBieSBDT05GSUdfUkNVX0ZBTk9VVC4gIFNtYWxsIHN5c3RlbXMgd2lsbCBoYXZlIGEgImhpZXJhcmNoeSIKKyAqIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgcmN1X25vZGUuCisgKi8KK3N0cnVjdCByY3Vfc3RhdGUgeworCXN0cnVjdCByY3Vfbm9kZSBub2RlW05VTV9SQ1VfTk9ERVNdOwkvKiBIaWVyYXJjaHkuICovCisJc3RydWN0IHJjdV9ub2RlICpsZXZlbFtOVU1fUkNVX0xWTFNdOwkvKiBIaWVyYXJjaHkgbGV2ZWxzLiAqLworCXUzMiBsZXZlbGNudFtNQVhfUkNVX0xWTFMgKyAxXTsJCS8qICMgbm9kZXMgaW4gZWFjaCBsZXZlbC4gKi8KKwl1OCBsZXZlbHNwcmVhZFtOVU1fUkNVX0xWTFNdOwkJLyoga2lkcy9ub2RlIGluIGVhY2ggbGV2ZWwuICovCisJc3RydWN0IHJjdV9kYXRhICpyZGFbTlJfQ1BVU107CQkvKiBhcnJheSBvZiByZHAgcG9pbnRlcnMuICovCisKKwkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgZ3VhcmRlZCBieSB0aGUgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCisKKwl1OAlzaWduYWxlZCBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOworCQkJCQkJLyogRm9yY2UgUVMgc3RhdGUuICovCisJbG9uZwlncG51bTsJCQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCisJbG9uZwljb21wbGV0ZWQ7CQkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KKwlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCisJCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAqLworCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KKwkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCisJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzOwkJLyogTnVtYmVyIG9mIGNhbGxzIHRvICovCisJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzX2xoOwkJLyogfk51bWJlciBvZiBjYWxscyBsZWF2aW5nICovCisJCQkJCQkvKiAgZHVlIHRvIGxvY2sgdW5hdmFpbGFibGUuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzX25ncDsJCS8qIE51bWJlciBvZiBjYWxscyBsZWF2aW5nICovCisJCQkJCQkvKiAgZHVlIHRvIG5vIEdQIGFjdGl2ZS4gKi8KKyNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorCXVuc2lnbmVkIGxvbmcgZ3Bfc3RhcnQ7CQkJLyogVGltZSBhdCB3aGljaCBHUCBzdGFydGVkLCAqLworCQkJCQkJLyogIGJ1dCBpbiBqaWZmaWVzLiAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19zdGFsbDsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gY2hlY2sgKi8KKwkJCQkJCS8qICBmb3IgQ1BVIHN0YWxscy4gKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKyNpZmRlZiBDT05GSUdfTk9fSFoKKwlsb25nIGR5bnRpY2tzX2NvbXBsZXRlZDsJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBAIHNuYXAuICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworfTsKKworZXh0ZXJuIHN0cnVjdCByY3Vfc3RhdGUgcmN1X3N0YXRlOworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2RhdGEpOworCitleHRlcm4gc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGU7CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CisKKy8qCisgKiBJbmNyZW1lbnQgdGhlIHF1aWVzY2VudCBzdGF0ZSBjb3VudGVyLgorICogVGhlIGNvdW50ZXIgaXMgYSBiaXQgZGVnZW5lcmF0ZWQ6IFdlIGRvIG5vdCBuZWVkIHRvIGtub3cKKyAqIGhvdyBtYW55IHF1aWVzY2VudCBzdGF0ZXMgcGFzc2VkLCBqdXN0IGlmIHRoZXJlIHdhcyBhdCBsZWFzdAorICogb25lIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgZ3JhY2UgcGVyaW9kLiBUaHVzIGp1c3QgYSBmbGFnLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3FzY3RyX2luYyhpbnQgY3B1KQoreworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2RhdGEsIGNwdSk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKKwlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcmRwLT5jb21wbGV0ZWQ7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JoX3FzY3RyX2luYyhpbnQgY3B1KQoreworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSk7CisJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKKwlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcmRwLT5jb21wbGV0ZWQ7Cit9CisKK2V4dGVybiBpbnQgcmN1X3BlbmRpbmcoaW50IGNwdSk7CitleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXA7CisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkJXAorCQkJbG9ja19hY3F1aXJlKCZyY3VfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlsb2NrX3JlbGVhc2UoJnJjdV9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorI2Vsc2UKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX2FjcXVpcmUoUkNVKTsKKwlyY3VfcmVhZF9hY3F1aXJlKCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19yY3VfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlyY3VfcmVhZF9yZWxlYXNlKCk7CisJX19yZWxlYXNlKFJDVSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2tfYmgodm9pZCkKK3sKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJX19hY3F1aXJlKFJDVV9CSCk7CisJcmN1X3JlYWRfYWNxdWlyZSgpOworfQorc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfdW5sb2NrX2JoKHZvaWQpCit7CisJcmN1X3JlYWRfcmVsZWFzZSgpOworCV9fcmVsZWFzZShSQ1VfQkgpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisjZGVmaW5lIF9fc3luY2hyb25pemVfc2NoZWQoKSBzeW5jaHJvbml6ZV9yY3UoKQorCisjZGVmaW5lIGNhbGxfcmN1X3NjaGVkKGhlYWQsIGZ1bmMpIGNhbGxfcmN1KGhlYWQsIGZ1bmMpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfaW5pdF9zY2hlZCh2b2lkKQoreworfQorCitleHRlcm4gdm9pZCBfX3JjdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcik7CitleHRlcm4gdm9pZCByY3VfcmVzdGFydF9jcHUoaW50IGNwdSk7CisKK2V4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKK2V4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19OT19IWgordm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKK3ZvaWQgcmN1X2V4aXRfbm9oeih2b2lkKTsKKyNlbHNlIC8qIENPTkZJR19OT19IWiAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2V4aXRfbm9oeih2b2lkKQoreworfQorI2VuZGlmIC8qIENPTkZJR19OT19IWiAqLworCisjZW5kaWYgLyogX19MSU5VWF9SQ1VUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaCBiL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaAppbmRleCBkMzYzNDY3Li5iM2IzNTk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCkBAIC0xMTgsNiArMTE4LDggQEAKIAogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOwordW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7Cit1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIAogdTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoaW50IGNwdSk7CiB2b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGludCBjcHUsIHU2NCAqdHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDRlNGYxMjcuLmZlYjNiOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE1OCw2ICsxNTgsOCBAQAogLyogU0gtU0NJICovCiAjZGVmaW5lIFBPUlRfU0NJRkEJODMKIAorI2RlZmluZSBQT1JUX1MzQzY0MDAJODQKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDAwMGRhMTIuLmY5NmQxM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0yNTMsOSArMjUzLDkgQEAKICAqIHJlcXVlc3QgY29tZXMgZnJvbS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1NMVUIpCi1leHRlcm4gdm9pZCAqX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplX3QsIGdmcF90LCB2b2lkKik7CitleHRlcm4gdm9pZCAqX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplX3QsIGdmcF90LCB1bnNpZ25lZCBsb25nKTsKICNkZWZpbmUga21hbGxvY190cmFja19jYWxsZXIoc2l6ZSwgZmxhZ3MpIFwKLQlfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisJX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgX1JFVF9JUF8pCiAjZWxzZQogI2RlZmluZSBrbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncykgXAogCV9fa21hbGxvYyhzaXplLCBmbGFncykKQEAgLTI3MSwxMCArMjcxLDEwIEBACiAgKiBhbGxvY2F0aW9uIHJlcXVlc3QgY29tZXMgZnJvbS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1NMVUIpCi1leHRlcm4gdm9pZCAqX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemVfdCwgZ2ZwX3QsIGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZV90LCBnZnBfdCwgaW50LCB1bnNpZ25lZCBsb25nKTsKICNkZWZpbmUga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgbm9kZSkgXAogCV9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgbm9kZSwgXAotCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorCQkJX1JFVF9JUF8pCiAjZWxzZQogI2RlZmluZSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlKSBcCiAJX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpCkBAIC0yODUsNyArMjg1LDcgQEAKICNkZWZpbmUga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgbm9kZSkgXAogCWttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzKQogCi0jZW5kaWYgLyogREVCVUdfU0xBQiAqLworI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKIC8qCiAgKiBTaG9ydGN1dHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKaW5kZXggYjE4ZWM1NS4uMzI1YWYxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTcsOSArNywzMSBAQAogc3RydWN0IGRtYV9hdHRyczsKIHN0cnVjdCBzY2F0dGVybGlzdDsKIAorLyoKKyAqIE1heGltdW0gYWxsb3dhYmxlIG51bWJlciBvZiBjb250aWd1b3VzIHNsYWJzIHRvIG1hcCwKKyAqIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgV2hhdCBpcyB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgPworICogVGhlIGNvbXBsZXhpdHkgb2Yge21hcCx1bm1hcH1fc2luZ2xlIGlzIGxpbmVhcmx5IGRlcGVuZGVudCBvbiB0aGlzIHZhbHVlLgorICovCisjZGVmaW5lIElPX1RMQl9TRUdTSVpFCTEyOAorCisKKy8qCisgKiBsb2cgb2YgdGhlIHNpemUgb2YgZWFjaCBJTyBUTEIgc2xhYi4gIFRoZSBudW1iZXIgb2Ygc2xhYnMgaXMgY29tbWFuZCBsaW5lCisgKiBjb250cm9sbGFibGUuCisgKi8KKyNkZWZpbmUgSU9fVExCX1NISUZUIDExCisKIGV4dGVybiB2b2lkCiBzd2lvdGxiX2luaXQodm9pZCk7CiAKK2V4dGVybiB2b2lkICpzd2lvdGxiX2FsbG9jX2Jvb3Qoc2l6ZV90IGJ5dGVzLCB1bnNpZ25lZCBsb25nIG5zbGFicyk7CitleHRlcm4gdm9pZCAqc3dpb3RsYl9hbGxvYyh1bnNpZ25lZCBvcmRlciwgdW5zaWduZWQgbG9uZyBuc2xhYnMpOworCitleHRlcm4gZG1hX2FkZHJfdCBzd2lvdGxiX3BoeXNfdG9fYnVzKHBoeXNfYWRkcl90IGFkZHJlc3MpOworZXh0ZXJuIHBoeXNfYWRkcl90IHN3aW90bGJfYnVzX3RvX3BoeXMoZG1hX2FkZHJfdCBhZGRyZXNzKTsKKworZXh0ZXJuIGludCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKwogZXh0ZXJuIHZvaWQKICpzd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCA5MDA3MzEzLi45OThhNTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC01Myw0NyArNTMsMTEgQEAKICNpZm5kZWYgX0xJTlVYX1RJTUVYX0gKICNkZWZpbmUgX0xJTlVYX1RJTUVYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BhcmFtLmg+Ci0KICNkZWZpbmUgTlRQX0FQSQkJNAkvKiBOVFAgQVBJIHZlcnNpb24gKi8KIAogLyoKLSAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiBlc3RhYmxpc2ggdGhlIGRhbXBpbmcgb2YgdGhlIFBMTCBhbmQgYXJlIGNob3NlbgotICogZm9yIGEgc2xpZ2h0bHkgdW5kZXJkYW1wZWQgY29udmVyZ2VuY2UgY2hhcmFjdGVyaXN0aWMuIFNISUZUX0tICi0gKiBlc3RhYmxpc2hlcyB0aGUgZGFtcGluZyBvZiB0aGUgRkxMIGFuZCBpcyBjaG9zZW4gYnkgd2lzZG9tIGFuZCBibGFjawotICogYXJ0LgotICoKLSAqIE1BWFRDIGVzdGFibGlzaGVzIHRoZSBtYXhpbXVtIHRpbWUgY29uc3RhbnQgb2YgdGhlIFBMTC4gV2l0aCB0aGUKLSAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiB2YWx1ZXMgZ2l2ZW4gYW5kIGEgdGltZSBjb25zdGFudCByYW5nZSBmcm9tCi0gKiB6ZXJvIHRvIE1BWFRDLCB0aGUgUExMIHdpbGwgY29udmVyZ2UgaW4gMTUgbWludXRlcyB0byAxNiBob3VycywKLSAqIHJlc3BlY3RpdmVseS4KLSAqLwotI2RlZmluZSBTSElGVF9QTEwJNAkvKiBQTEwgZnJlcXVlbmN5IGZhY3RvciAoc2hpZnQpICovCi0jZGVmaW5lIFNISUZUX0ZMTAkyCS8qIEZMTCBmcmVxdWVuY3kgZmFjdG9yIChzaGlmdCkgKi8KLSNkZWZpbmUgTUFYVEMJCTEwCS8qIG1heGltdW0gdGltZSBjb25zdGFudCAoc2hpZnQpICovCi0KLS8qCi0gKiBTSElGVF9VU0VDIGRlZmluZXMgdGhlIHNjYWxpbmcgKHNoaWZ0KSBvZiB0aGUgdGltZV9mcmVxIGFuZAotICogdGltZV90b2xlcmFuY2UgdmFyaWFibGVzLCB3aGljaCByZXByZXNlbnQgdGhlIGN1cnJlbnQgZnJlcXVlbmN5Ci0gKiBvZmZzZXQgYW5kIG1heGltdW0gZnJlcXVlbmN5IHRvbGVyYW5jZS4KLSAqLwotI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KLSNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKLSNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAxOQotI2RlZmluZSBQUE1fU0NBTEVfSU5WICgoMWxsIDw8IChQUE1fU0NBTEVfSU5WX1NISUZUICsgTlRQX1NDQUxFX1NISUZUKSkgLyBcCi0JCSAgICAgICBQUE1fU0NBTEUgKyAxKQotCi0jZGVmaW5lIE1BWFBIQVNFIDUwMDAwMDAwMGwJLyogbWF4IHBoYXNlIGVycm9yIChucykgKi8KLSNkZWZpbmUgTUFYRlJFUSA1MDAwMDAJCS8qIG1heCBmcmVxdWVuY3kgZXJyb3IgKG5zL3MpICovCi0jZGVmaW5lIE1BWEZSRVFfU0NBTEVEICgoczY0KU1BWEZSRVEgPDwgTlRQX1NDQUxFX1NISUZUKQotI2RlZmluZSBNSU5TRUMgMjU2CQkvKiBtaW4gaW50ZXJ2YWwgYmV0d2VlbiB1cGRhdGVzIChzKSAqLwotI2RlZmluZSBNQVhTRUMgMjA0OAkJLyogbWF4IGludGVydmFsIGJldHdlZW4gdXBkYXRlcyAocykgKi8KLSNkZWZpbmUgTlRQX1BIQVNFX0xJTUlUICgoTUFYUEhBU0UgLyBOU0VDX1BFUl9VU0VDKSA8PCA1KSAvKiBiZXlvbmQgbWF4LiBkaXNwZXJzaW9uICovCi0KLS8qCiAgKiBzeXNjYWxsIGludGVyZmFjZSAtIHVzZWQgKG1haW5seSBieSBOVFAgZGFlbW9uKQogICogdG8gZGlzY2lwbGluZSBrZXJuZWwgY2xvY2sgb3NjaWxsYXRvcgogICovCkBAIC0xOTksOSArMTYzLDQ2IEBACiAjZGVmaW5lIFRJTUVfQkFECVRJTUVfRVJST1IgLyogYncgY29tcGF0ICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisKICNpbmNsdWRlIDxhc20vdGltZXguaD4KIAogLyoKKyAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiBlc3RhYmxpc2ggdGhlIGRhbXBpbmcgb2YgdGhlIFBMTCBhbmQgYXJlIGNob3NlbgorICogZm9yIGEgc2xpZ2h0bHkgdW5kZXJkYW1wZWQgY29udmVyZ2VuY2UgY2hhcmFjdGVyaXN0aWMuIFNISUZUX0tICisgKiBlc3RhYmxpc2hlcyB0aGUgZGFtcGluZyBvZiB0aGUgRkxMIGFuZCBpcyBjaG9zZW4gYnkgd2lzZG9tIGFuZCBibGFjaworICogYXJ0LgorICoKKyAqIE1BWFRDIGVzdGFibGlzaGVzIHRoZSBtYXhpbXVtIHRpbWUgY29uc3RhbnQgb2YgdGhlIFBMTC4gV2l0aCB0aGUKKyAqIFNISUZUX0tHIGFuZCBTSElGVF9LRiB2YWx1ZXMgZ2l2ZW4gYW5kIGEgdGltZSBjb25zdGFudCByYW5nZSBmcm9tCisgKiB6ZXJvIHRvIE1BWFRDLCB0aGUgUExMIHdpbGwgY29udmVyZ2UgaW4gMTUgbWludXRlcyB0byAxNiBob3VycywKKyAqIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTSElGVF9QTEwJNAkvKiBQTEwgZnJlcXVlbmN5IGZhY3RvciAoc2hpZnQpICovCisjZGVmaW5lIFNISUZUX0ZMTAkyCS8qIEZMTCBmcmVxdWVuY3kgZmFjdG9yIChzaGlmdCkgKi8KKyNkZWZpbmUgTUFYVEMJCTEwCS8qIG1heGltdW0gdGltZSBjb25zdGFudCAoc2hpZnQpICovCisKKy8qCisgKiBTSElGVF9VU0VDIGRlZmluZXMgdGhlIHNjYWxpbmcgKHNoaWZ0KSBvZiB0aGUgdGltZV9mcmVxIGFuZAorICogdGltZV90b2xlcmFuY2UgdmFyaWFibGVzLCB3aGljaCByZXByZXNlbnQgdGhlIGN1cnJlbnQgZnJlcXVlbmN5CisgKiBvZmZzZXQgYW5kIG1heGltdW0gZnJlcXVlbmN5IHRvbGVyYW5jZS4KKyAqLworI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KKyNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKKyNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAxOQorI2RlZmluZSBQUE1fU0NBTEVfSU5WICgoMWxsIDw8IChQUE1fU0NBTEVfSU5WX1NISUZUICsgTlRQX1NDQUxFX1NISUZUKSkgLyBcCisJCSAgICAgICBQUE1fU0NBTEUgKyAxKQorCisjZGVmaW5lIE1BWFBIQVNFIDUwMDAwMDAwMGwJLyogbWF4IHBoYXNlIGVycm9yIChucykgKi8KKyNkZWZpbmUgTUFYRlJFUSA1MDAwMDAJCS8qIG1heCBmcmVxdWVuY3kgZXJyb3IgKG5zL3MpICovCisjZGVmaW5lIE1BWEZSRVFfU0NBTEVEICgoczY0KU1BWEZSRVEgPDwgTlRQX1NDQUxFX1NISUZUKQorI2RlZmluZSBNSU5TRUMgMjU2CQkvKiBtaW4gaW50ZXJ2YWwgYmV0d2VlbiB1cGRhdGVzIChzKSAqLworI2RlZmluZSBNQVhTRUMgMjA0OAkJLyogbWF4IGludGVydmFsIGJldHdlZW4gdXBkYXRlcyAocykgKi8KKyNkZWZpbmUgTlRQX1BIQVNFX0xJTUlUICgoTUFYUEhBU0UgLyBOU0VDX1BFUl9VU0VDKSA8PCA1KSAvKiBiZXlvbmQgbWF4LiBkaXNwZXJzaW9uICovCisKKy8qCiAgKiBrZXJuZWwgdmFyaWFibGVzCiAgKiBOb3RlOiBtYXhpbXVtIGVycm9yID0gTlRQIHN5bmNoIGRpc3RhbmNlID0gZGlzcGVyc2lvbiArIGRlbGF5IC8gMjsKICAqIGVzdGltYXRlZCBlcnJvciA9IE5UUCBkaXNwZXJzaW9uLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDFkOTgzMzAuLjEyMWYzNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTEzNSwxOSArMTM1LDE0IEBACiAgKgogICogTGludXggYWx3YXlzIGNvbnNpZGVycyBzZWN0b3JzIHRvIGJlIDUxMiBieXRlcyBsb25nIGluZGVwZW5kZW50bHkKICAqIG9mIHRoZSBkZXZpY2VzIHJlYWwgYmxvY2sgc2l6ZS4KKyAqCisgKiBibGtjbnRfdCBpcyB0aGUgdHlwZSBvZiB0aGUgaW5vZGUncyBibG9jayBjb3VudC4KICAqLwogI2lmZGVmIENPTkZJR19MQkQKIHR5cGVkZWYgdTY0IHNlY3Rvcl90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBzZWN0b3JfdDsKLSNlbmRpZgotCi0vKgotICogVGhlIHR5cGUgb2YgdGhlIGlub2RlJ3MgYmxvY2sgY291bnQuCi0gKi8KLSNpZmRlZiBDT05GSUdfTFNGCiB0eXBlZGVmIHU2NCBibGtjbnRfdDsKICNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2VjdG9yX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmxrY250X3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAppbmRleCBmZWM2ZGVjLi42YjU4MzY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaApAQCAtNzgsNyArNzgsNyBAQAogCQkJCQkJCVwKIAkJc2V0X2ZzKEtFUk5FTF9EUyk7CQkJXAogCQlwYWdlZmF1bHRfZGlzYWJsZSgpOwkJCVwKLQkJcmV0ID0gX19nZXRfdXNlcihyZXR2YWwsIChfX2ZvcmNlIHR5cGVvZihyZXR2YWwpIF9fdXNlciAqKShhZGRyKSk7CQlcCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJihyZXR2YWwpLCAoX19mb3JjZSB0eXBlb2YocmV0dmFsKSBfX3VzZXIgKikoYWRkciksIHNpemVvZihyZXR2YWwpKTsJCVwKIAkJcGFnZWZhdWx0X2VuYWJsZSgpOwkJCVwKIAkJc2V0X2ZzKG9sZF9mcyk7CQkJCVwKIAkJcmV0OwkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggNDY2OWQ3ZS4uMWYxMjZlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0yOTMsNiArMjkzLDcgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyMCAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICcxJywgJzInKSAvKiAxMiAgWVZVIDQ6MjowICAgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVZViAgICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1knLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9VWVZZICAgIHY0bDJfZm91cmNjKCdVJywgJ1knLCAnVicsICdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZZVVkgICAgdjRsMl9mb3VyY2MoJ1YnLCAnWScsICdVJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDIyUCB2NGwyX2ZvdXJjYygnNCcsICcyJywgJzInLCAnUCcpIC8qIDE2ICBZVlU0MjIgcGxhbmFyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTFQIHY0bDJfZm91cmNjKCc0JywgJzEnLCAnMScsICdQJykgLyogMTYgIFlWVTQxMSBwbGFuYXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1k0MVAgICAgdjRsMl9mb3VyY2MoJ1knLCAnNCcsICcxJywgJ1AnKSAvKiAxMiAgWVVWIDQ6MToxICAgICAqLwpAQCAtMzA0LDYgKzMwNSw4IEBACiAvKiB0d28gcGxhbmVzIC0tIG9uZSBZLCBvbmUgQ3IgKyBDYiBpbnRlcmxlYXZlZCAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTIgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcxJywgJzInKSAvKiAxMiAgWS9DYkNyIDQ6MjowICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYyMSAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzInLCAnMScpIC8qIDEyICBZL0NyQ2IgNDoyOjAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjE2ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICc2JykgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNjEgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc2JywgJzEnKSAvKiAxNiAgWS9DckNiIDQ6MjoyICAqLwogCiAvKiAgVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgVjRMMiBzcGVjaWZpY2F0aW9uICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KQEAgLTEwNTAsNyArMTA1Myw3IEBACiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTEpCiAKLS8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIHNwZWNpZmljIHRvIHRoZSBDWDI1ODR4IGRyaXZlciBhcyBkZWZpbmVkIGJ5IFY0TDIgKi8KKy8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIHNwZWNpZmljIHRvIHRoZSBDWDIzNDF4IGRyaXZlciBhcyBkZWZpbmVkIGJ5IFY0TDIgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgCQkJCShWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTAwMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlIHsKQEAgLTExMTcsNiArMTEyMCwxMiBAQAogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMSkKICNkZWZpbmUgVjRMMl9DSURfRk9DVVNfQVVUTwkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMikKIAorI2RlZmluZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEzKQorI2RlZmluZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE0KQorI2RlZmluZSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVMJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNSkKKworI2RlZmluZSBWNEwyX0NJRF9QUklWQUNZCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE2KQorCiAvKgogICoJVCBVIE4gSSBOIEcKICAqLwpAQCAtMTM2OSw2ICsxMzc4LDcgQEAKICNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgICAgICAgMCAgLyogTWF0Y2ggYWdhaW5zdCBjaGlwIElEIG9uIGhvc3QgKDAgZm9yIHRoZSBob3N0KSAqLwogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAxICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyBkcml2ZXIgSUQgKi8KICNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19BRERSICAgMiAgLyogTWF0Y2ggYWdhaW5zdCBJMkMgNy1iaXQgYWRkcmVzcyAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfQUM5NyAgICAgICAzICAvKiBNYXRjaCBhZ2FpbnN0IGFuY2lsaWFyeSBBQzk3IGNoaXAgKi8KIAogc3RydWN0IHY0bDJfcmVnaXN0ZXIgewogCV9fdTMyIG1hdGNoX3R5cGU7IC8qIE1hdGNoIHR5cGUgKi8KQEAgLTE0NTgsNiArMTQ2OCw4IEBACiAjZGVmaW5lIFZJRElPQ19HX0NISVBfSURFTlQgICAgIF9JT1dSKCdWJywgODEsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQpCiAjZW5kaWYKICNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLCSBfSU9XKCdWJywgODIsIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlaykKKy8qIFJlbWluZGVyOiB3aGVuIGFkZGluZyBuZXcgaW9jdGxzIHBsZWFzZSBhZGQgc3VwcG9ydCBmb3IgdGhlbSB0bworICAgZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYXMgd2VsbCEgKi8KIAogI2lmZGVmIF9fT0xEX1ZJRElPQ18KIC8qIGZvciBjb21wYXRpYmlsaXR5LCB3aWxsIGdvIGF3YXkgc29tZSBkYXkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCBjMzBjN2JmLi44NzI2ZmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC0xMCw2ICsxMCw5IEBACiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCiAjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QJMCAvKiBUZWxsIGJlZm9yZSByZWNsYWltaW5nIHBhZ2VzICovCiAKKy8qIFNpemUgb2YgYSBQRk4gaW4gdGhlIGJhbGxvb24gaW50ZXJmYWNlLiAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQgMTIKKwogc3RydWN0IHZpcnRpb19iYWxsb29uX2NvbmZpZwogewogCS8qIE51bWJlciBvZiBwYWdlcyBob3N0IHdhbnRzIEd1ZXN0IHRvIGdpdmUgdXAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggMTlhMGRhMC4uNzYxNWZmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtNyw2ICs3LDE3IEBACiAvKiBUaGUgSUQgZm9yIHZpcnRpbyBjb25zb2xlICovCiAjZGVmaW5lIFZJUlRJT19JRF9DT05TT0xFCTMKIAorLyogRmVhdHVyZSBiaXRzICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfU0laRQkwCS8qIERvZXMgaG9zdCBwcm92aWRlIGNvbnNvbGUgc2l6ZT8gKi8KKworc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyB7CisJLyogY29sdW1zIG9mIHRoZSBzY3JlZW5zICovCisJX191MTYgY29sczsKKwkvKiByb3dzIG9mIHRoZSBzY3JlZW5zICovCisJX191MTYgcm93czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKwogI2lmZGVmIF9fS0VSTkVMX18KIGludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19wY2kuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCmluZGV4IGNkZWYzNTcuLmNkMGZkNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3BjaS5oCkBAIC01Myw0ICs1MywxMiBAQAogCiAvKiBWaXJ0aW8gQUJJIHZlcnNpb24sIHRoaXMgbXVzdCBtYXRjaCBleGFjdGx5ICovCiAjZGVmaW5lIFZJUlRJT19QQ0lfQUJJX1ZFUlNJT04JCTAKKworLyogSG93IG1hbnkgYml0cyB0byBzaGlmdCBwaHlzaWNhbCBxdWV1ZSBhZGRyZXNzIHdyaXR0ZW4gdG8gUVVFVUVfUEZOLgorICogMTIgaXMgaGlzdG9yaWNhbCwgYW5kIGR1ZSB0byB4ODYgcGFnZSBzaXplLiAqLworI2RlZmluZSBWSVJUSU9fUENJX1FVRVVFX0FERFJfU0hJRlQJMTIKKworLyogVGhlIGFsaWdubWVudCB0byB1c2UgYmV0d2VlbiBjb25zdW1lciBhbmQgcHJvZHVjZXIgcGFydHMgb2YgdnJpbmcuCisgKiB4ODYgcGFnZXNpemUgYWdhaW4uICovCisjZGVmaW5lIFZJUlRJT19QQ0lfVlJJTkdfQUxJR04JCTQwOTYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oCmluZGV4IGM0YTU5OGYuLjcxZTAzNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgKQEAgLTgzLDcgKzgzLDcgQEAKICAqCV9fdTE2IGF2YWlsX2lkeDsKICAqCV9fdTE2IGF2YWlsYWJsZVtudW1dOwogICoKLSAqCS8vIFBhZGRpbmcgdG8gdGhlIG5leHQgcGFnZSBib3VuZGFyeS4KKyAqCS8vIFBhZGRpbmcgdG8gdGhlIG5leHQgYWxpZ24gYm91bmRhcnkuCiAgKgljaGFyIHBhZFtdOwogICoKICAqCS8vIEEgcmluZyBvZiB1c2VkIGRlc2NyaXB0b3IgaGVhZHMgd2l0aCBmcmVlLXJ1bm5pbmcgaW5kZXguCkBAIC05MywxOSArOTMsMTkgQEAKICAqIH07CiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB2cmluZ19pbml0KHN0cnVjdCB2cmluZyAqdnIsIHVuc2lnbmVkIGludCBudW0sIHZvaWQgKnAsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIHBhZ2VzaXplKQorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKIAl2ci0+bnVtID0gbnVtOwogCXZyLT5kZXNjID0gcDsKIAl2ci0+YXZhaWwgPSBwICsgbnVtKnNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyk7Ci0JdnItPnVzZWQgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpJnZyLT5hdmFpbC0+cmluZ1tudW1dICsgcGFnZXNpemUtMSkKLQkJCSAgICAmIH4ocGFnZXNpemUgLSAxKSk7CisJdnItPnVzZWQgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpJnZyLT5hdmFpbC0+cmluZ1tudW1dICsgYWxpZ24tMSkKKwkJCSAgICAmIH4oYWxpZ24gLSAxKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdnJpbmdfc2l6ZSh1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCB2cmluZ19zaXplKHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CiAJcmV0dXJuICgoc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSAqIG51bSArIHNpemVvZihfX3UxNikgKiAoMiArIG51bSkKLQkJICsgcGFnZXNpemUgLSAxKSAmIH4ocGFnZXNpemUgLSAxKSkKKwkJICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKSkKIAkJKyBzaXplb2YoX191MTYpICogMiArIHNpemVvZihzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSAqIG51bTsKIH0KIApAQCAtMTE1LDYgKzExNSw3IEBACiBzdHJ1Y3QgdmlydHF1ZXVlOwogCiBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBudW0sCisJCQkJICAgICAgdW5zaWduZWQgaW50IHZyaW5nX2FsaWduLAogCQkJCSAgICAgIHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAogCQkJCSAgICAgIHZvaWQgKnBhZ2VzLAogCQkJCSAgICAgIHZvaWQgKCpub3RpZnkpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaTJjLWFkZHIuaCBiL2luY2x1ZGUvbWVkaWEvaTJjLWFkZHIuaAppbmRleCBlN2ZmNDRhLi41ZDBmNTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2kyYy1hZGRyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pMmMtYWRkci5oCkBAIC0xMiw4ICsxMiw2IEBACiAvKiBidHR2IGFkZHJlc3MgbGlzdCAqLwogI2RlZmluZSBJMkNfQUREUl9UU0E1NTIyCTB4YzIKICNkZWZpbmUgSTJDX0FERFJfVERBNzQzMgkweDhhCi0jZGVmaW5lIEkyQ19BRERSX0JUODMyX0FMVDEJMHg4OAotI2RlZmluZSBJMkNfQUREUl9CVDgzMl9BTFQyCTB4OGEgLy8gYWx0ZXJuYXRlIHNldHRpbmcKICNkZWZpbmUgSTJDX0FERFJfVERBODQyNQkweDgyCiAjZGVmaW5lIEkyQ19BRERSX1REQTk4NDAJMHg4NAogI2RlZmluZSBJMkNfQUREUl9UREE5ODUwCTB4YjYgLyogYWxzbyB1c2VkIGJ5IDk4NTUsOTg3MyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggMzhmMmQ5My4uNWJmMmVhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0xNTcsNiArMTU3LDggQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c1tJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ1tJUl9LRVlUQUJfU0laRV07CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmggYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTFkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIG92NzcyeCBDYW1lcmEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19PVjc3MlhfSF9fCisjZGVmaW5lIF9fT1Y3NzJYX0hfXworCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorCitzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgbGluazsKK307CisKKyNlbmRpZiAvKiBfX09WNzcyWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKaW5kZXggMWQxMDQwOS4uNmJiYjBkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKQEAgLTIxNiw4ICsyMTYsNyBAQAogZXh0ZXJuIHN0cnVjdCBzYWE3MTQ2X3VzZV9vcHMgc2FhNzE0Nl92aWRlb191b3BzOwogaW50IHNhYTcxNDZfc3RhcnRfcHJldmlldyhzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgpOwogaW50IHNhYTcxNDZfc3RvcF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7Ci1pbnQgc2FhNzE0Nl92aWRlb19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgc2FhNzE0Nl92aWRlb19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIAogLyogZnJvbSBzYWE3MTQ2X3ZiaS5jICovCiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZiaV91b3BzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmggYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAppbmRleCBjNWRlN2JiLi40MjViNmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaApAQCAtMTIsOSArMTIsMTAgQEAKICNpZm5kZWYgU09DX0NBTUVSQV9ICiAjZGVmaW5lIFNPQ19DQU1FUkFfSAogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTM2LDE0ICszNywxOSBAQAogCXVuc2lnbmVkIGNoYXIgaWZhY2U7CQkvKiBIb3N0IG51bWJlciAqLwogCXVuc2lnbmVkIGNoYXIgZGV2bnVtOwkJLyogRGV2aWNlIG51bWJlciBwZXIgaG9zdCAqLwogCXVuc2lnbmVkIGNoYXIgYnVzd2lkdGg7CQkvKiBTZWUgY29tbWVudCBpbiAuYyAqLworCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlICpzZW5zZTsJLyogU2VlIGNvbW1lbnQgaW4gc3RydWN0IGRlZmluaXRpb24gKi8KIAlzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgKm9wczsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjdXJyZW50X2ZtdDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZm9ybWF0czsKIAlpbnQgbnVtX2Zvcm1hdHM7CisJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CisJaW50IG51bV91c2VyX2Zvcm1hdHM7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JLyogc29jX2NhbWVyYS5jIHByaXZhdGUgY291bnQuIE9ubHkgYWNjZXNzZWQgd2l0aCB2aWRlb19sb2NrIGhlbGQgKi8KKwl2b2lkICpob3N0X3ByaXY7CQkvKiBQZXItZGV2aWNlIGhvc3QgcHJpdmF0ZSBkYXRhICovCisJLyogc29jX2NhbWVyYS5jIHByaXZhdGUgY291bnQuIE9ubHkgYWNjZXNzZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCiAJaW50IHVzZV9jb3VudDsKKwlzdHJ1Y3QgbXV0ZXggdmlkZW9fbG9jazsJLyogUHJvdGVjdHMgZGV2aWNlIGRhdGEgKi8KIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgewpAQCAtNTYsNyArNjIsNyBAQAogCXN0cnVjdCBkZXZpY2UgZGV2OwogCXVuc2lnbmVkIGNoYXIgbnI7CQkJCS8qIEhvc3QgbnVtYmVyICovCiAJdm9pZCAqcHJpdjsKLQljaGFyICpkcnZfbmFtZTsKKwljb25zdCBjaGFyICpkcnZfbmFtZTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0X29wcyAqb3BzOwogfTsKIApAQCAtNjQsMjUgKzcwLDMzIEBACiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50ICgqYWRkKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJdm9pZCAoKnJlbW92ZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBwbV9tZXNzYWdlX3QpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnNldF9mbXRfY2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsCi0JCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICopOwotCWludCAoKnRyeV9mbXRfY2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOworCWludCAoKmdldF9mb3JtYXRzKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgaW50LAorCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICopOworCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKIAkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpyZXFidWZzKShzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICosIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICopOwogCWludCAoKnF1ZXJ5Y2FwKShzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICosIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKik7Ci0JaW50ICgqdHJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIF9fdTMyKTsKIAlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIpOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CiB9OwogCisjZGVmaW5lIFNPQ0FNX1NFTlNPUl9JTlZFUlRfUENMSwkoMSA8PCAwKQorI2RlZmluZSBTT0NBTV9TRU5TT1JfSU5WRVJUX01DTEsJKDEgPDwgMSkKKyNkZWZpbmUgU09DQU1fU0VOU09SX0lOVkVSVF9IU1lOQwkoMSA8PCAyKQorI2RlZmluZSBTT0NBTV9TRU5TT1JfSU5WRVJUX1ZTWU5DCSgxIDw8IDMpCisjZGVmaW5lIFNPQ0FNX1NFTlNPUl9JTlZFUlRfREFUQQkoMSA8PCA0KQorCiBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIHsKIAkvKiBDYW1lcmEgYnVzIGlkLCB1c2VkIHRvIG1hdGNoIGEgY2FtZXJhIGFuZCBhIGJ1cyAqLwogCWludCBidXNfaWQ7CiAJLyogR1BJTyBudW1iZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IG1vZGVzICovCiAJdW5zaWduZWQgaW50IGdwaW87CisJLyogUGVyIGNhbWVyYSBTT0NBTV9TRU5TT1JfKiBidXMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCS8qIE9wdGlvbmFsIGNhbGxiYWNrcyB0byBwb3dlciBvbiBvciBvZmYgYW5kIHJlc2V0IHRoZSBzZW5zb3IgKi8KIAlpbnQgKCpwb3dlcikoc3RydWN0IGRldmljZSAqLCBpbnQpOwogCWludCAoKnJlc2V0KShzdHJ1Y3QgZGV2aWNlICopOwpAQCAtMTA2LDEzICsxMjAsMzUgQEAKIGV4dGVybiBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CiBleHRlcm4gdm9pZCBzb2NfY2FtZXJhX3ZpZGVvX3N0b3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKnNvY19jYW1lcmFfZm9ybWF0X2J5X2ZvdXJjYygKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYyk7CitleHRlcm4gY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICpzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYygKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgaW50IGZvdXJjYyk7CisKIHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgaW50IGRlcHRoOwogCV9fdTMyIGZvdXJjYzsKIAllbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOwogfTsKIAorLyoqCisgKiBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgLSBtYXRjaCBiZXR3ZWVuIGhvc3QgYW5kIHNlbnNvciBmb3JtYXRzCisgKiBAY2FtX2ZtdDogc2Vuc29yIGZvcm1hdCBwcm92aWRlZCBieSB0aGUgc2Vuc29yCisgKiBAaG9zdF9mbXQ6IGhvc3QgZm9ybWF0IGFmdGVyIGhvc3QgdHJhbnNsYXRpb24gZnJvbSBjYW1fZm10CisgKiBAYnVzd2lkdGg6IGJ1cyB3aWR0aCBmb3IgdGhpcyBmb3JtYXQKKyAqCisgKiBIb3N0IGFuZCBzZW5zb3IgdHJhbnNsYXRpb24gc3RydWN0dXJlLiBVc2VkIGluIHRhYmxlIG9mIGhvc3QgYW5kIHNlbnNvcgorICogZm9ybWF0cyBtYXRjaGluZ3MgaW4gc29jX2NhbWVyYV9kZXZpY2UuIEEgaG9zdCBjYW4gb3ZlcnJpZGUgdGhlIGdlbmVyaWMgbGlzdAorICogZ2VuZXJhdGlvbiBieSBpbXBsZW1lbnRpbmcgZ2V0X2Zvcm1hdHMoKSwgYW5kIHVzZSBpdCBmb3IgZm9ybWF0IGNoZWNrcyBhbmQKKyAqIGZvcm1hdCBzZXR1cC4KKyAqLworc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlIHsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtX2ZtdDsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqaG9zdF9mbXQ7CisJdW5zaWduZWQgY2hhciBidXN3aWR0aDsKK307CisKIHN0cnVjdCBzb2NfY2FtZXJhX29wcyB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50ICgqcHJvYmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKQEAgLTEyMywxMyArMTU5LDE0IEBACiAJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN0YXJ0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzdG9wX2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpzZXRfZm10X2NhcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIF9fdTMyLAotCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqKTsKLQlpbnQgKCp0cnlfZm10X2NhcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKKwlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwogCWludCAoKmdldF9jaGlwX2lkKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwKIAkJCSAgIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKik7CisJaW50ICgqc2V0X3N0ZCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHY0bDJfc3RkX2lkICopOworCWludCAoKmVudW1faW5wdXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqKTsKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJaW50ICgqZ2V0X3JlZ2lzdGVyKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKik7CiAJaW50ICgqc2V0X3JlZ2lzdGVyKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfcmVnaXN0ZXIgKik7CkBAIC0xNDAsNiArMTc3LDMyIEBACiAJaW50IG51bV9jb250cm9sczsKIH07CiAKKyNkZWZpbmUgU09DQU1fU0VOU0VfUENMS19DSEFOR0VECSgxIDw8IDApCisKKy8qKgorICogVGhpcyBzdHJ1Y3QgY2FuIGJlIGF0dGFjaGVkIHRvIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBieSB0aGUgaG9zdCBkcml2ZXIKKyAqIHRvIHJlcXVlc3Qgc2Vuc2UgZnJvbSB0aGUgY2FtZXJhLCBmb3IgZXhhbXBsZSwgd2hlbiBjYWxsaW5nIC5zZXRfZm10KCkuIFRoZQorICogaG9zdCB0aGVuIGNhbiBjaGVjayB3aGljaCBmbGFncyBhcmUgc2V0IGFuZCB2ZXJpZnkgcmVzcGVjdGl2ZSB2YWx1ZXMgaWYgYW55LgorICogRm9yIGV4YW1wbGUsIGlmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCBpcyBzZXQsIGl0IG1lYW5zLCBwaXhjbG9jayBoYXMKKyAqIGNoYW5nZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLiBBZnRlciBjb21wbGV0aW9uIHRoZSBob3N0IHNob3VsZCBkZXRhY2ggc2Vuc2UuCisgKgorICogQGZsYWdzCQlvcmVkIFNPQ0FNX1NFTlNFXyogZmxhZ3MKKyAqIEBtYXN0ZXJfY2xvY2sJaWYgdGhlIGhvc3Qgd2FudHMgdG8gYmUgaW5mb3JtZWQgYWJvdXQgcGl4ZWwtY2xvY2sKKyAqCQkJY2hhbmdlLCBpdCBiZXR0ZXIgc2V0IG1hc3Rlcl9jbG9jay4KKyAqIEBwaXhlbF9jbG9ja19tYXgJbWF4aW11bSBwaXhlbCBjbG9jayBmcmVxdWVuY3kgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LAorICoJCQljYW1lcmEgaXMgbm90IGFsbG93ZWQgdG8gZXhjZWVkIHRoaXMuCisgKiBAcGl4ZWxfY2xvY2sJCWlmIHRoZSBjYW1lcmEgZHJpdmVyIGNoYW5nZWQgcGl4ZWwgY2xvY2sgZHVyaW5nIHRoaXMKKyAqCQkJb3BlcmF0aW9uLCBpdCBzZXRzIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCwgdXNlcworICoJCQltYXN0ZXJfY2xvY2sgdG8gY2FsY3VsYXRlIHRoZSBuZXcgcGl4ZWwtY2xvY2sgYW5kCisgKgkJCXNldHMgdGhpcyBmaWVsZC4KKyAqLworc3RydWN0IHNvY19jYW1lcmFfc2Vuc2UgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXN0ZXJfY2xvY2s7CisJdW5zaWduZWQgbG9uZyBwaXhlbF9jbG9ja19tYXg7CisJdW5zaWduZWQgbG9uZyBwaXhlbF9jbG9jazsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJfcXVlcnljdHJsIGNvbnN0ICpzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoCiAJc3RydWN0IHNvY19jYW1lcmFfb3BzICpvcHMsIGludCBpZCkKIHsKQEAgLTE1OCwxNSArMjIxLDIwIEBACiAjZGVmaW5lIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cJCSgxIDw8IDMpCiAjZGVmaW5lIFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdICQkoMSA8PCA0KQogI2RlZmluZSBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XCQkoMSA8PCA1KQotI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfOAkJKDEgPDwgNikKLSNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzkJCSgxIDw8IDcpCi0jZGVmaW5lIFNPQ0FNX0RBVEFXSURUSF8xMAkJKDEgPDwgOCkKLSNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzE2CQkoMSA8PCA5KQotI2RlZmluZSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcJKDEgPDwgMTApCi0jZGVmaW5lIFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcJKDEgPDwgMTEpCisjZGVmaW5lIFNPQ0FNX0RBVEFXSURUSF80CQkoMSA8PCA2KQorI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfOAkJKDEgPDwgNykKKyNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzkJCSgxIDw8IDgpCisjZGVmaW5lIFNPQ0FNX0RBVEFXSURUSF8xMAkJKDEgPDwgOSkKKyNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzE1CQkoMSA8PCAxMCkKKyNkZWZpbmUgU09DQU1fREFUQVdJRFRIXzE2CQkoMSA8PCAxMSkKKyNkZWZpbmUgU09DQU1fUENMS19TQU1QTEVfUklTSU5HCSgxIDw8IDEyKQorI2RlZmluZSBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HCSgxIDw8IDEzKQorI2RlZmluZSBTT0NBTV9EQVRBX0FDVElWRV9ISUdICQkoMSA8PCAxNCkKKyNkZWZpbmUgU09DQU1fREFUQV9BQ1RJVkVfTE9XCQkoMSA8PCAxNSkKIAotI2RlZmluZSBTT0NBTV9EQVRBV0lEVEhfTUFTSyAoU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfOSB8IFwKLQkJCSAgICAgIFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX0RBVEFXSURUSF8xNikKKyNkZWZpbmUgU09DQU1fREFUQVdJRFRIX01BU0sgKFNPQ0FNX0RBVEFXSURUSF80IHwgU09DQU1fREFUQVdJRFRIXzggfCBcCisJCQkgICAgICBTT0NBTV9EQVRBV0lEVEhfOSB8IFNPQ0FNX0RBVEFXSURUSF8xMCB8IFwKKwkJCSAgICAgIFNPQ0FNX0RBVEFXSURUSF8xNSB8IFNPQ0FNX0RBVEFXSURUSF8xNikKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoCiAJCQl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MpCkBAIC0xODIsNCArMjUwLDcgQEAKIAlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGspID8gMCA6IGNvbW1vbl9mbGFnczsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3Moc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmggYi9pbmNsdWRlL21lZGlhL3R2cDUxNHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTdlZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dnA1MTR4LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBkcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBTaXZhcmFqIFIgPHNpdmFyYWpAdGkuY29tPgorICogICAgIEJyaWplc2ggUiBKYWRhdiA8YnJpamVzaC5qQHRpLmNvbT4KKyAqICAgICBIYXJkaWsgU2hhaCA8aGFyZGlrLnNoYWhAdGkuY29tPgorICogICAgIE1hbmp1bmF0aCBIYWRsaSA8bXJoQHRpLmNvbT4KKyAqICAgICBLYXJpY2hlcmkgTXVyYWxpZGhhcmFuIDxtLWthcmljaGVyaTJAdGkuY29tPgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9UVlA1MTRYX0gKKyNkZWZpbmUgX1RWUDUxNFhfSAorCisvKgorICogT3RoZXIgbWFjcm9zCisgKi8KKyNkZWZpbmUgVFZQNTE0WF9NT0RVTEVfTkFNRQkJInR2cDUxNHgiCisKKyNkZWZpbmUgVFZQNTE0WF9YQ0xLX0JUNjU2CQkoMjcwMDAwMDApCisKKy8qIE51bWJlciBvZiBwaXhlbHMgYW5kIG51bWJlciBvZiBsaW5lcyBwZXIgZnJhbWUgZm9yIGRpZmZlcmVudCBzdGFuZGFyZHMgKi8KKyNkZWZpbmUgTlRTQ19OVU1fQUNUSVZFX1BJWEVMUwkJKDcyMCkKKyNkZWZpbmUgTlRTQ19OVU1fQUNUSVZFX0xJTkVTCQkoNDgwKQorI2RlZmluZSBQQUxfTlVNX0FDVElWRV9QSVhFTFMJCSg3MjApCisjZGVmaW5lIFBBTF9OVU1fQUNUSVZFX0xJTkVTCQkoNTc2KQorCisvKioKKyAqIGVudW0gdHZwNTE0eF9pbnB1dCAtIGVudW0gZm9yIGRpZmZlcmVudCBkZWNvZGVyIGlucHV0IHBpbgorICoJCWNvbmZpZ3VyYXRpb24uCisgKi8KK2VudW0gdHZwNTE0eF9pbnB1dCB7CisJLyoKKwkgKiBDVkJTIGlucHV0IHNlbGVjdGlvbgorCSAqLworCUlOUFVUX0NWQlNfVkkxQSA9IDB4MCwKKwlJTlBVVF9DVkJTX1ZJMUIsCisJSU5QVVRfQ1ZCU19WSTFDLAorCUlOUFVUX0NWQlNfVkkyQSA9IDB4MDQsCisJSU5QVVRfQ1ZCU19WSTJCLAorCUlOUFVUX0NWQlNfVkkyQywKKwlJTlBVVF9DVkJTX1ZJM0EgPSAweDA4LAorCUlOUFVUX0NWQlNfVkkzQiwKKwlJTlBVVF9DVkJTX1ZJM0MsCisJSU5QVVRfQ1ZCU19WSTRBID0gMHgwQywKKwkvKgorCSAqIFMtVmlkZW8gaW5wdXQgc2VsZWN0aW9uCisJICovCisJSU5QVVRfU1ZJREVPX1ZJMkFfVkkxQSA9IDB4NDQsCisJSU5QVVRfU1ZJREVPX1ZJMkJfVkkxQiwKKwlJTlBVVF9TVklERU9fVkkyQ19WSTFDLAorCUlOUFVUX1NWSURFT19WSTJBX1ZJM0EgPSAweDU0LAorCUlOUFVUX1NWSURFT19WSTJCX1ZJM0IsCisJSU5QVVRfU1ZJREVPX1ZJMkNfVkkzQywKKwlJTlBVVF9TVklERU9fVkk0QV9WSTFBID0gMHg0QywKKwlJTlBVVF9TVklERU9fVkk0QV9WSTFCLAorCUlOUFVUX1NWSURFT19WSTRBX1ZJMUMsCisJSU5QVVRfU1ZJREVPX1ZJNEFfVkkzQSA9IDB4NUMsCisJSU5QVVRfU1ZJREVPX1ZJNEFfVkkzQiwKKwlJTlBVVF9TVklERU9fVkk0QV9WSTNDLAorCisJLyogTmVlZCB0byBhZGQgZW50cmllcyBmb3IKKwkgKiBSR0IsIFlQYlByIGFuZCBTQ0FSVC4KKwkgKi8KKwlJTlBVVF9JTlZBTElECit9OworCisvKioKKyAqIGVudW0gdHZwNTE0eF9vdXRwdXQgLSBlbnVtIGZvciBvdXRwdXQgZm9ybWF0CisgKgkJCXN1cHBvcnRlZC4KKyAqCisgKi8KK2VudW0gdHZwNTE0eF9vdXRwdXQgeworCU9VVFBVVF8xMEJJVF80MjJfRU1CRURERURfU1lOQyA9IDAsCisJT1VUUFVUXzIwQklUXzQyMl9TRVBFUkFURV9TWU5DLAorCU9VVFBVVF8xMEJJVF80MjJfU0VQRVJBVEVfU1lOQyA9IDMsCisJT1VUUFVUX0lOVkFMSUQKK307CisKKy8qKgorICogc3RydWN0IHR2cDUxNHhfcGxhdGZvcm1fZGF0YSAtIFBsYXRmb3JtIGRhdGEgdmFsdWVzIGFuZCBhY2Nlc3MgZnVuY3Rpb25zLgorICogQHBvd2VyX3NldDogUG93ZXIgc3RhdGUgYWNjZXNzIGZ1bmN0aW9uLCB6ZXJvIGlzIG9mZiwgbm9uLXplcm8gaXMgb24uCisgKiBAaWZwYXJtOiBJbnRlcmZhY2UgcGFyYW1ldGVycyBhY2Nlc3MgZnVuY3Rpb24uCisgKiBAcHJpdl9kYXRhX3NldDogRGV2aWNlIHByaXZhdGUgZGF0YSAocG9pbnRlcikgYWNjZXNzIGZ1bmN0aW9uLgorICogQGNsa19wb2xhcml0eTogQ2xvY2sgcG9sYXJpdHkgb2YgdGhlIGN1cnJlbnQgaW50ZXJmYWNlLgorICogQCBoc19wb2xhcml0eTogSFNZTkMgUG9sYXJpdHkgY29uZmlndXJhdGlvbiBmb3IgY3VycmVudCBpbnRlcmZhY2UuCisgKiBAIHZzX3BvbGFyaXR5OiBWU1lOQyBQb2xhcml0eSBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGludGVyZmFjZS4KKyAqLworc3RydWN0IHR2cDUxNHhfcGxhdGZvcm1fZGF0YSB7CisJY2hhciAqbWFzdGVyOworCWludCAoKnBvd2VyX3NldCkgKGVudW0gdjRsMl9wb3dlciBvbik7CisJaW50ICgqaWZwYXJtKSAoc3RydWN0IHY0bDJfaWZwYXJtICpwKTsKKwlpbnQgKCpwcml2X2RhdGFfc2V0KSAodm9pZCAqKTsKKwkvKiBJbnRlcmZhY2UgY29udHJvbCBwYXJhbXMgKi8KKwlib29sIGNsa19wb2xhcml0eTsKKwlib29sIGhzX3BvbGFyaXR5OworCWJvb2wgdnNfcG9sYXJpdHk7Cit9OworCisKKyNlbmRpZgkJCQkvKiBpZm5kZWYgX1RWUDUxNFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dzk5MTAuaCBiL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyMzFlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIHR3OTkxMCBEcml2ZXIgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogQmFzZWQgb24gb3Y3NzJ4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19UVzk5MTBfSF9fCisjZGVmaW5lIF9fVFc5OTEwX0hfXworCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorCitlbnVtIHR3OTkxMF9tcG91dF9waW4geworCVRXOTkxMF9NUE9fVkxPU1MsCisJVFc5OTEwX01QT19ITE9DSywKKwlUVzk5MTBfTVBPX1NMT0NLLAorCVRXOTkxMF9NUE9fVkxPQ0ssCisJVFc5OTEwX01QT19NT05PLAorCVRXOTkxMF9NUE9fREVUNTAsCisJVFc5OTEwX01QT19GSUVMRCwKKwlUVzk5MTBfTVBPX1JUQ08sCit9OworCitzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8geworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgYnVzd2lkdGg7CisJZW51bSB0dzk5MTBfbXBvdXRfcGluICBtcG91dDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGxpbms7Cit9OworCisKKyNlbmRpZiAvKiBfX1RXOTkxMF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IGQ3M2E4ZTkuLjQzZGJiNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtNjAsNiArNjAsOCBAQAogCiAJLyogT21uaVZpc2lvbiBzZW5zb3JzOiByZXNlcnZlZCByYW5nZSAyNTAtMjk5ICovCiAJVjRMMl9JREVOVF9PVjc2NzAgPSAyNTAsCisJVjRMMl9JREVOVF9PVjc3MjAgPSAyNTEsCisJVjRMMl9JREVOVF9PVjc3MjUgPSAyNTIsCiAKIAkvKiBDb25leGFudCBNUEVHIGVuY29kZXIvZGVjb2RlcnM6IHJlc2VydmVkIHJhbmdlIDQxMC00MjAgKi8KIAlWNEwyX0lERU5UX0NYMjM0MTUgPSA0MTUsCkBAIC02OSw2ICs3MSw5IEBACiAJLyogbW9kdWxlIHZwMjdzbXB4OiBqdXN0IGlkZW50IDI3MDAgKi8KIAlWNEwyX0lERU5UX1ZQMjdTTVBYID0gMjcwMCwKIAorCS8qIG1vZHVsZSB0dnA1MTUwICovCisJVjRMMl9JREVOVF9UVlA1MTUwID0gNTE1MCwKKwogCS8qIG1vZHVsZSBjczUzNDU6IGp1c3QgaWRlbnQgNTM0NSAqLwogCVY0TDJfSURFTlRfQ1M1MzQ1ID0gNTM0NSwKIApAQCAtODIsNiArODcsOSBAQAogCS8qIG1vZHVsZSB3bTg3NzU6IGp1c3QgaWRlbnQgODc3NSAqLwogCVY0TDJfSURFTlRfV004Nzc1ID0gODc3NSwKIAorCS8qIG1vZHVsZSB0dzk5MTA6IGp1c3QgaWRlbnQgOTkxMCAqLworCVY0TDJfSURFTlRfVFc5OTEwID0gOTkxMCwKKwogCS8qIG1vZHVsZSBjczUzMTMyYToganVzdCBpZGVudCA1MzEzMiAqLwogCVY0TDJfSURFTlRfQ1M1M2wzMkEgPSA1MzEzMiwKIApAQCAtMTY2LDggKzE3NCwxMCBAQAogCVY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUCQk9IDQ1MDAwLAogCVY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUTQk9IDQ1MDA1LAogCVY0TDJfSURFTlRfTVQ5TTExMQkJPSA0NTAwNywKKwlWNEwyX0lERU5UX01UOU0xMTIJCT0gNDUwMDgsCiAJVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDCT0gNDUwMTAsIC8qIE5vIHdheSB0byBkZXRlY3QgIm5vcm1hbCIgSTc3QVR4ICovCiAJVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNCT0gNDUwMTUsIC8qIGFuZCAibGVhZCBmcmVlIiBJQTdBVHggY2hpcHMgKi8KKwlWNEwyX0lERU5UX01UOVQwMzEJCT0gNDUwMjAsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCAyZjg3MTlhLi5mOTljODY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC01Nyw2ICs1NywyOSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qIFRoZXNlIHByaW50ayBjb25zdHJ1Y3RzIGNhbiBiZSB1c2VkIHdpdGggdjRsMl9kZXZpY2UgYW5kIHY0bDJfc3ViZGV2ICovCisjZGVmaW5lIHY0bDJfcHJpbnRrKGxldmVsLCBkZXYsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKGxldmVsICIlczogIiBmbXQsIChkZXYpLT5uYW1lICwgIyMgYXJnKQorCisjZGVmaW5lIHY0bDJfZXJyKGRldiwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX3ByaW50ayhLRVJOX0VSUiwgZGV2LCBmbXQgLCAjIyBhcmcpCisKKyNkZWZpbmUgdjRsMl93YXJuKGRldiwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX3ByaW50ayhLRVJOX1dBUk5JTkcsIGRldiwgZm10ICwgIyMgYXJnKQorCisjZGVmaW5lIHY0bDJfaW5mbyhkZXYsIGZtdCwgYXJnLi4uKSBcCisJdjRsMl9wcmludGsoS0VSTl9JTkZPLCBkZXYsIGZtdCAsICMjIGFyZykKKworLyogVGhlc2UgdGhyZWUgbWFjcm9zIGFzc3VtZSB0aGF0IHRoZSBkZWJ1ZyBsZXZlbCBpcyBzZXQgd2l0aCBhIG1vZHVsZQorICAgcGFyYW1ldGVyIGNhbGxlZCAnZGVidWcnLiAqLworI2RlZmluZSB2NGwyX2RiZyhsZXZlbCwgZGVidWcsIGRldiwgZm10LCBhcmcuLi4pCQkJXAorCWRvIHsgCQkJCQkJCQlcCisJCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKQkJCQkJXAorCQkJdjRsMl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmbXQgLCAjIyBhcmcpOyAJXAorCX0gd2hpbGUgKDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogLyogUHJpb3JpdHkgaGVscGVyIGZ1bmN0aW9ucyAqLwogCiBzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHsKQEAgLTEwNCwxMSArMTI3LDI5IEBACiBzdHJ1Y3QgaTJjX2FkYXB0ZXI7CiBzdHJ1Y3QgaTJjX2NsaWVudDsKIHN0cnVjdCBpMmNfZGV2aWNlX2lkOworc3RydWN0IHY0bDJfZGV2aWNlOworc3RydWN0IHY0bDJfc3ViZGV2Oworc3RydWN0IHY0bDJfc3ViZGV2X29wczsKIAogaW50IHY0bDJfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyLAogCQljb25zdCBjaGFyICpuYW1lLAogCQlpbnQgKCpwcm9iZSkoc3RydWN0IGkyY19jbGllbnQgKiwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKikpOwogCisvKiBMb2FkIGFuIGkyYyBtb2R1bGUgYW5kIHJldHVybiBhbiBpbml0aWFsaXplZCB2NGwyX3N1YmRldiBzdHJ1Y3QuCisgICBPbmx5IGNhbGwgcmVxdWVzdF9tb2R1bGUgaWYgbW9kdWxlX25hbWUgIT0gTlVMTC4KKyAgIFRoZSBjbGllbnRfdHlwZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgY2hpcCB0aGF0J3Mgb24gdGhlIGFkYXB0ZXIuICovCitzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfaTJjX25ld19zdWJkZXYoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsIHU4IGFkZHIpOworLyogUHJvYmUgYW5kIGxvYWQgYW4gaTJjIG1vZHVsZSBhbmQgcmV0dXJuIGFuIGluaXRpYWxpemVkIHY0bDJfc3ViZGV2IHN0cnVjdC4KKyAgIE9ubHkgY2FsbCByZXF1ZXN0X21vZHVsZSBpZiBtb2R1bGVfbmFtZSAhPSBOVUxMLgorICAgVGhlIGNsaWVudF90eXBlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlwIHRoYXQncyBvbiB0aGUgYWRhcHRlci4gKi8KK3N0cnVjdCB2NGwyX3N1YmRldiAqdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQljb25zdCBjaGFyICptb2R1bGVfbmFtZSwgY29uc3QgY2hhciAqY2xpZW50X3R5cGUsCisJCWNvbnN0IHVuc2lnbmVkIHNob3J0ICphZGRycyk7CisvKiBJbml0aWFsaXplIGFuIHY0bDJfc3ViZGV2IHdpdGggZGF0YSBmcm9tIGFuIGkyY19jbGllbnQgc3RydWN0ICovCit2b2lkIHY0bDJfaTJjX3N1YmRldl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wcyk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogSW50ZXJuYWwgaW9jdGxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggYTBhNmI0MS4uMGE4OGQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtMjUsNiArMjUsMTIgQEAKICNkZWZpbmUgVkZMX1RZUEVfTUFYCQk0CiAKIHN0cnVjdCB2NGwyX2lvY3RsX2NhbGxiYWNrczsKK3N0cnVjdCB2NGwyX2RldmljZTsKKworLyogRmxhZyB0byBtYXJrIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0IGFzIHVucmVnaXN0ZXJlZC4KKyAgIERyaXZlcnMgY2FuIHNldCB0aGlzIGZsYWcgaWYgdGhleSB3YW50IHRvIGJsb2NrIGFsbCBmdXR1cmUKKyAgIGRldmljZSBhY2Nlc3MuIEl0IGlzIHNldCBieSB2aWRlb191bnJlZ2lzdGVyX2RldmljZS4gKi8KKyNkZWZpbmUgVjRMMl9GTF9VTlJFR0lTVEVSRUQJKDApCiAKIC8qCiAgKiBOZXdlciB2ZXJzaW9uIG9mIHZpZGVvX2RldmljZSwgaGFuZGxlZCBieSB2aWRlb2RldjIuYwpAQCAtMzksMTUgKzQ1LDIwIEBACiAKIAkvKiBzeXNmcyAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogdjRsIGRldmljZSAqLwotCXN0cnVjdCBjZGV2IGNkZXY7CQkvKiBjaGFyYWN0ZXIgZGV2aWNlICovCi0Jdm9pZCAoKmNkZXZfcmVsZWFzZSkoc3RydWN0IGtvYmplY3QgKmtvYmopOworCXN0cnVjdCBjZGV2ICpjZGV2OwkJLyogY2hhcmFjdGVyIGRldmljZSAqLworCisJLyogU2V0IGVpdGhlciBwYXJlbnQgb3IgdjRsMl9kZXYgaWYgeW91ciBkcml2ZXIgdXNlcyB2NGwyX2RldmljZSAqLwogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsJCS8qIGRldmljZSBwYXJlbnQgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwkvKiB2NGwyX2RldmljZSBwYXJlbnQgKi8KIAogCS8qIGRldmljZSBpbmZvICovCiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgdmZsX3R5cGU7CisJLyogJ21pbm9yJyBpcyBzZXQgdG8gLTEgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQgKi8KIAlpbnQgbWlub3I7CiAJdTE2IG51bTsKKwkvKiB1c2UgYml0b3BzIHRvIHNldC9jbGVhci90ZXN0IGZsYWdzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvKiBhdHRyaWJ1dGUgdG8gZGlmZmVyZW50aWF0ZSBtdWx0aXBsZSBpbmRpY2VzIG9uIG9uZSBwaHlzaWNhbCBkZXZpY2UgKi8KIAlpbnQgaW5kZXg7CiAKQEAgLTU4LDcgKzY5LDcgQEAKIAl2NGwyX3N0ZF9pZCBjdXJyZW50X25vcm07CS8qIEN1cnJlbnQgdHZub3JtICovCiAKIAkvKiBjYWxsYmFja3MgKi8KLQl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7CiAKIAkvKiBpb2N0bCBjYWxsYmFja3MgKi8KIAljb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgKmlvY3RsX29wczsKQEAgLTY3LDM2ICs3OCw0MSBAQAogLyogZGV2IHRvIHZpZGVvLWRldmljZSAqLwogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KQogCi0vKiBSZWdpc3RlciBhbmQgdW5yZWdpc3RlciBkZXZpY2VzLiBOb3RlIHRoYXQgaWYgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxzLAorLyogUmVnaXN0ZXIgdmlkZW8gZGV2aWNlcy4gTm90ZSB0aGF0IGlmIHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlscywKICAgIHRoZSByZWxlYXNlKCkgY2FsbGJhY2sgb2YgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgaXMgKm5vdCogY2FsbGVkLCBzbwogICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbnkgZGF0YS4gVXN1YWxseSB0aGF0IG1lYW5zIHRoYXQKLSAgIHlvdSBjYWxsIHZpZGVvX2RldmljZV9yZWxlYXNlKCkgb24gZmFpbHVyZS4gKi8KLWludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBucik7Ci1pbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsCisgICB5b3UgY2FsbCB2aWRlb19kZXZpY2VfcmVsZWFzZSgpIG9uIGZhaWx1cmUuCisKKyAgIEFsc28gbm90ZSB0aGF0IHZkZXYtPm1pbm9yIGlzIHNldCB0byAtMSBpZiB0aGUgcmVnaXN0cmF0aW9uIGZhaWxlZC4gKi8KK2ludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpOworaW50IF9fbXVzdF9jaGVjayB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwKIAkJCQkJCWludCB0eXBlLCBpbnQgbnIsIGludCBpbmRleCk7Ci12b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7CisKKy8qIFVucmVnaXN0ZXIgdmlkZW8gZGV2aWNlcy4gV2lsbCBkbyBub3RoaW5nIGlmIHZkZXYgPT0gTlVMTCBvcgorICAgdmRldi0+bWlub3IgPCAwLiAqLwordm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhbGxvYy9yZWxlYXNlIHN0cnVjdCB2aWRlb19kZXZpY2UsIHRoZQogICAgbGF0dGVyIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHZpZGVvX2RldmljZS0+cmVsZWFzZSgpLiAqLwogc3RydWN0IHZpZGVvX2RldmljZSAqIF9fbXVzdF9jaGVjayB2aWRlb19kZXZpY2VfYWxsb2Modm9pZCk7CiAKLS8qIHRoaXMgcmVsZWFzZSBmdW5jdGlvbiBmcmVlcyB0aGUgdmZkIHBvaW50ZXIgKi8KLXZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKKy8qIHRoaXMgcmVsZWFzZSBmdW5jdGlvbiBmcmVlcyB0aGUgdmRldiBwb2ludGVyICovCit2b2lkIHZpZGVvX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwogCiAvKiB0aGlzIHJlbGVhc2UgZnVuY3Rpb24gZG9lcyBub3RoaW5nLCB1c2Ugd2hlbiB0aGUgdmlkZW9fZGV2aWNlIGlzIGEKICAgIHN0YXRpYyBnbG9iYWwgc3RydWN0LiBOb3RlIHRoYXQgaGF2aW5nIGEgc3RhdGljIHZpZGVvX2RldmljZSBpcwogICAgYSBkdWJpb3VzIGNvbnN0cnVjdGlvbiBhdCBiZXN0LiAqLwotdm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOwordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgZHJpdmVyIHByaXZhdGUgZGF0YS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqdmlkZW9fZ2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogewotCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZ2ZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmlkZW9fc2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHZpZGVvX3NldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGF0YSk7CisJZGV2X3NldF9kcnZkYXRhKCZ2ZGV2LT5kZXYsIGRhdGEpOwogfQogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTEwOCw0ICsxMjQsOSBAQAogCXJldHVybiB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdmlkZW9faXNfdW5yZWdpc3RlcmVkKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJcmV0dXJuIHRlc3RfYml0KFY0TDJfRkxfVU5SRUdJU1RFUkVELCAmdmRldi0+ZmxhZ3MpOworfQorCiAjZW5kaWYgLyogX1Y0TDJfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2IyODNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICAgIFY0TDIgZGV2aWNlIHN1cHBvcnQgaGVhZGVyLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9WNEwyX0RFVklDRV9ICisjZGVmaW5lIF9WNEwyX0RFVklDRV9ICisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorCisvKiBFYWNoIGluc3RhbmNlIG9mIGEgVjRMMiBkZXZpY2Ugc2hvdWxkIGNyZWF0ZSB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0LAorICAgZWl0aGVyIHN0YW5kLWFsb25lIG9yIGVtYmVkZGVkIGluIGEgbGFyZ2VyIHN0cnVjdC4KKworICAgSXQgYWxsb3dzIGVhc3kgYWNjZXNzIHRvIHN1Yi1kZXZpY2VzIChzZWUgdjRsMi1zdWJkZXYuaCkgYW5kIHByb3ZpZGVzCisgICBiYXNpYyBWNEwyIGRldmljZS1sZXZlbCBzdXBwb3J0LgorICovCisKKyNkZWZpbmUgVjRMMl9ERVZJQ0VfTkFNRV9TSVpFIChCVVNfSURfU0laRSArIDE2KQorCitzdHJ1Y3QgdjRsMl9kZXZpY2UgeworCS8qIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnRzIHRvIHRoaXMgc3RydWN0ICovCisJc3RydWN0IGRldmljZSAqZGV2OworCS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVnaXN0ZXJlZCBzdWJkZXZzICovCisJc3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzOworCS8qIGxvY2sgdGhpcyBzdHJ1Y3Q7IGNhbiBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBpZiB0aGlzCisJICAgc3RydWN0IGlzIGVtYmVkZGVkIGludG8gYSBsYXJnZXIgc3RydWN0LiAqLworCXNwaW5sb2NrX3QgbG9jazsKKwkvKiB1bmlxdWUgZGV2aWNlIG5hbWUsIGJ5IGRlZmF1bHQgdGhlIGRyaXZlciBuYW1lICsgYnVzIElEICovCisJY2hhciBuYW1lW1Y0TDJfREVWSUNFX05BTUVfU0laRV07Cit9OworCisvKiBJbml0aWFsaXplIHY0bDJfZGV2IGFuZCBtYWtlIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnQgdG8gdjRsMl9kZXYgKi8KK2ludCBfX211c3RfY2hlY2sgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKy8qIFNldCB2NGwyX2Rldi0+ZGV2LT5kcml2ZXJfZGF0YSB0byBOVUxMIGFuZCB1bnJlZ2lzdGVyIGFsbCBzdWItZGV2aWNlcyAqLwordm9pZCB2NGwyX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpOworCisvKiBSZWdpc3RlciBhIHN1YmRldiB3aXRoIGEgdjRsMiBkZXZpY2UuIFdoaWxlIHJlZ2lzdGVyZWQgdGhlIHN1YmRldiBtb2R1bGUKKyAgIGlzIG1hcmtlZCBhcyBpbi11c2UuIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIHRoZSBtb2R1bGUgaXMgbm8gbG9uZ2VyCisgICBsb2FkZWQgd2hlbiB5b3UgYXR0ZW1wdCB0byByZWdpc3RlciBpdC4gKi8KK2ludCBfX211c3RfY2hlY2sgdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKKy8qIFVucmVnaXN0ZXIgYSBzdWJkZXYgd2l0aCBhIHY0bDIgZGV2aWNlLiBDYW4gYWxzbyBiZSBjYWxsZWQgaWYgdGhlIHN1YmRldgorICAgd2Fzbid0IHJlZ2lzdGVyZWQuIEluIHRoYXQgY2FzZSBpdCB3aWxsIGRvIG5vdGhpbmcuICovCit2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworCisvKiBJdGVyYXRlIG92ZXIgYWxsIHN1YmRldnMuICovCisjZGVmaW5lIHY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgZGV2KQkJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJihkZXYpLT5zdWJkZXZzLCBsaXN0KQorCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uCisgICBJZ25vcmUgYW55IGVycm9ycy4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldgorICAgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLworI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyhkZXYsIGNvbmQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorCWRvIHsgCQkJCQkJCQlcCisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7IAkJCQlcCisJCQkJCQkJCQlcCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgICAJXAorCQkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAlcCisJCQkJc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAorCX0gd2hpbGUgKDApCisKKy8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgdGhlIGNvbmRpdGlvbi4KKyAgIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIG90aGVyIHRoYW4gMCBvciAtRU5PSU9DVExDTUQsIHRoZW4KKyAgIHJldHVybiB3aXRoIHRoYXQgZXJyb3IgY29kZS4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhCisgICBzdWJkZXYgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLworI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSAgXAorKHsgCQkJCQkJCQkJXAorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7IAkJCQkJXAorCWludCBlcnIgPSAwOyAJCQkJCQkJXAorCQkJCQkJCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKKwkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAkJXAorCQkJZXJyID0gc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAorCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpCQkJCVwKKwkJCWJyZWFrOyAJCQkJCQlcCisJfSAJCQkJCQkJCVwKKwkoZXJyID09IC1FTk9JT0NUTENNRCkgPyAwIDogZXJyOyAJCQkJXAorfSkKKworLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyBtYXRjaGluZyBncnBfaWQgKGlmIDAsIHRoZW4KKyAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGFkZCBvciBkZWxldGUKKyAgIGEgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KKyNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF9hbGwoZGV2LCBncnBfaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKGRldiwgCQkJCVwKKwkJCSEoZ3JwX2lkKSB8fCBzZC0+Z3JwX2lkID09IChncnBfaWQpLCBvLCBmICwgIyNhcmdzKQorCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIGdycF9pZCAoaWYgMCwgdGhlbgorICAgbWF0Y2ggdGhlbSBhbGwpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IKKyAgIC1FTk9JT0NUTENNRCwgdGhlbiByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuIE5vdGUgdGhhdCB5b3UgY2Fubm90CisgICBhZGQgb3IgZGVsZXRlIGEgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KKyNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoZGV2LCBncnBfaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycihkZXYsCQkJXAorCQkgICAgICAgIShncnBfaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycF9pZCksIG8sIGYgLCAjI2FyZ3MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWludC1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pbnQtZGV2aWNlLmgKaW5kZXggOWMyZGY0MS4uZWNkYTNjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWludC1kZXZpY2UuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaW50LWRldmljZS5oCkBAIC0xODMsNiArMTgzLDkgQEAKIAl2aWRpb2NfaW50X3NfY3JvcF9udW0sCiAJdmlkaW9jX2ludF9nX3Bhcm1fbnVtLAogCXZpZGlvY19pbnRfc19wYXJtX251bSwKKwl2aWRpb2NfaW50X3F1ZXJ5c3RkX251bSwKKwl2aWRpb2NfaW50X3Nfc3RkX251bSwKKwl2aWRpb2NfaW50X3NfdmlkZW9fcm91dGluZ19udW0sCiAKIAkvKgogCSAqCkBAIC0yODQsNiArMjg3LDkgQEAKIFY0TDJfSU5UX1dSQVBQRVJfMShzX2Nyb3AsIHN0cnVjdCB2NGwyX2Nyb3AsICopOwogVjRMMl9JTlRfV1JBUFBFUl8xKGdfcGFybSwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSwgKik7CiBWNEwyX0lOVF9XUkFQUEVSXzEoc19wYXJtLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtLCAqKTsKK1Y0TDJfSU5UX1dSQVBQRVJfMShxdWVyeXN0ZCwgdjRsMl9zdGRfaWQsICopOworVjRMMl9JTlRfV1JBUFBFUl8xKHNfc3RkLCB2NGwyX3N0ZF9pZCwgKik7CitWNEwyX0lOVF9XUkFQUEVSXzEoc192aWRlb19yb3V0aW5nLCBzdHJ1Y3QgdjRsMl9yb3V0aW5nLCAqKTsKIAogVjRMMl9JTlRfV1JBUFBFUl8wKGRldl9pbml0KTsKIFY0TDJfSU5UX1dSQVBQRVJfMChkZXZfZXhpdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IGU2YmEyNWIuLmZjZGI1OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0yMzIsNiArMjMyLDEyIEBACiAJaW50ICgqdmlkaW9jX2dfY2hpcF9pZGVudCkgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApOwogCisJaW50ICgqdmlkaW9jX2VudW1fZnJhbWVzaXplcykgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQkgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKTsKKworCWludCAoKnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQkgICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqZml2YWwpOworCiAJLyogRm9yIG90aGVyIHByaXZhdGUgaW9jdGxzICovCiAJaW50ICgqdmlkaW9jX2RlZmF1bHQpCSAgICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlpbnQgY21kLCB2b2lkICphcmcpOwpAQCAtMjg1LDE1ICsyOTEsMTMgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIEluY2x1ZGUgc3VwcG9ydCBmb3Igb2Jzb2xldGVkIHN0dWZmICovCi1leHRlcm4gaW50IHZpZGVvX3VzZXJjb3B5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJCSAgaW50ICgqZnVuYykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKSk7CitleHRlcm4gaW50IHZpZGVvX3VzZXJjb3B5KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnLCB2NGwyX2tpb2N0bCBmdW5jKTsKIAogLyogU3RhbmRhcmQgaGFuZGxlcnMgZm9yIFY0TCBpb2N0bCdzICovCiAKIC8qIFRoaXMgcHJvdG90eXBlIGlzIHVzZWQgb24gZm9wcy51bmxvY2tlZF9pb2N0bCAqLwotZXh0ZXJuIGludCBfX3ZpZGVvX2lvY3RsMihzdHJ1Y3QgZmlsZSAqZmlsZSwKK2V4dGVybiBsb25nIF9fdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiBUaGlzIHByb3RvdHlwZSBpcyB1c2VkIG9uIGZvcHMuaW9jdGwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVmMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICAgIFY0TDIgc3ViLWRldmljZSBzdXBwb3J0IGhlYWRlci4KKworICAgIENvcHlyaWdodCAoQykgMjAwOCAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfVjRMMl9TVUJERVZfSAorI2RlZmluZSBfVjRMMl9TVUJERVZfSAorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKworc3RydWN0IHY0bDJfZGV2aWNlOworc3RydWN0IHY0bDJfc3ViZGV2Oworc3RydWN0IHR1bmVyX3NldHVwOworCisvKiBTdWItZGV2aWNlcyBhcmUgZGV2aWNlcyB0aGF0IGFyZSBjb25uZWN0ZWQgc29tZWhvdyB0byB0aGUgbWFpbiBicmlkZ2UKKyAgIGRldmljZS4gVGhlc2UgZGV2aWNlcyBhcmUgdXN1YWxseSBhdWRpby92aWRlbyBtdXhlcnMvZW5jb2RlcnMvZGVjb2RlcnMgb3IKKyAgIHNlbnNvcnMgYW5kIHdlYmNhbSBjb250cm9sbGVycy4KKworICAgVXN1YWxseSB0aGVzZSBkZXZpY2VzIGFyZSBjb250cm9sbGVkIHRocm91Z2ggYW4gaTJjIGJ1cywgYnV0IG90aGVyIGJ1c3NlcworICAgbWF5IGFsc28gYmUgdXNlZC4KKworICAgVGhlIHY0bDJfc3ViZGV2IHN0cnVjdCBwcm92aWRlcyBhIHdheSBvZiBhY2Nlc3NpbmcgdGhlc2UgZGV2aWNlcyBpbiBhCisgICBnZW5lcmljIG1hbm5lci4gTW9zdCBvcGVyYXRpb25zIHRoYXQgdGhlc2Ugc3ViLWRldmljZXMgc3VwcG9ydCBmYWxsIGluCisgICBhIGZldyBjYXRlZ29yaWVzOiBjb3JlIG9wcywgYXVkaW8gb3BzLCB2aWRlbyBvcHMgYW5kIHR1bmVyIG9wcy4KKworICAgTW9yZSBjYXRlZ29yaWVzIGNhbiBiZSBhZGRlZCBpZiBuZWVkZWQsIGFsdGhvdWdoIHRoaXMgc2hvdWxkIHJlbWFpbiBhCisgICBsaW1pdGVkIHNldCAobm8gbW9yZSB0aGFuIGFwcHJveC4gOCBjYXRlZ29yaWVzKS4KKworICAgRWFjaCBjYXRlZ29yeSBoYXMgaXRzIG93biBzZXQgb2Ygb3BzIHRoYXQgc3ViZGV2IGRyaXZlcnMgY2FuIGltcGxlbWVudC4KKworICAgQSBzdWJkZXYgZHJpdmVyIGNhbiBsZWF2ZSB0aGUgcG9pbnRlciB0byB0aGUgY2F0ZWdvcnkgb3BzIE5VTEwgaWYKKyAgIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGVtIChlLmcuIGFuIGF1ZGlvIHN1YmRldiB3aWxsIGdlbmVyYWxseSBub3QKKyAgIGltcGxlbWVudCB0aGUgdmlkZW8gY2F0ZWdvcnkgb3BzKS4gVGhlIGV4Y2VwdGlvbiBpcyB0aGUgY29yZSBjYXRlZ29yeToKKyAgIHRoaXMgbXVzdCBhbHdheXMgYmUgcHJlc2VudC4KKworICAgVGhlc2Ugb3BzIGFyZSBhbGwgdXNlZCBpbnRlcm5hbGx5IHNvIGl0IGlzIG5vIHByb2JsZW0gdG8gY2hhbmdlLCByZW1vdmUKKyAgIG9yIGFkZCBvcHMgb3IgbW92ZSBvcHMgZnJvbSBvbmUgdG8gYW5vdGhlciBjYXRlZ29yeS4gQ3VycmVudGx5IHRoZXNlCisgICBvcHMgYXJlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBpb2N0bHMsIGJ1dCBzaW5jZSBvcHMgYXJlIG5vdCBsaW1pdGVkIHRvCisgICBvbmUgYXJndW1lbnQgdGhlcmUgaXMgcm9vbSBmb3IgaW1wcm92ZW1lbnQgaGVyZSBvbmNlIGFsbCBpMmMgc3ViZGV2CisgICBkcml2ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoZXNlIG9wcy4KKyAqLworCisvKiBDb3JlIG9wczogaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCBhdCBsZWFzdCB0aGVzZSBvcHM6CisKKyAgIGdfY2hpcF9pZGVudAorICAgbG9nX3N0YXR1cworICAgZ19yZWdpc3RlcgorICAgc19yZWdpc3RlcgorCisgICBUaGlzIHByb3ZpZGVzIGJhc2ljIGRlYnVnZ2luZyBzdXBwb3J0LgorCisgICBUaGUgaW9jdGwgb3BzIGlzIG1lYW50IGZvciBnZW5lcmljIGlvY3RsLWxpa2UgY29tbWFuZHMuIERlcGVuZGluZyBvbgorICAgdGhlIHVzZS1jYXNlIGl0IG1pZ2h0IGJlIGJldHRlciB0byB1c2Ugc3ViZGV2LXNwZWNpZmljIG9wcyAoY3VycmVudGx5CisgICBub3QgeWV0IGltcGxlbWVudGVkKSBzaW5jZSBvcHMgcHJvdmlkZSBwcm9wZXIgdHlwZS1jaGVja2luZy4KKyAqLworc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHsKKwlpbnQgKCpnX2NoaXBfaWRlbnQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NoaXBfaWRlbnQgKmNoaXApOworCWludCAoKmxvZ19zdGF0dXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworCWludCAoKmluaXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpOworCWludCAoKnNfc3RhbmRieSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHN0YW5kYnkpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKTsKKwlpbnQgKCpzX2dwaW8pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpOworCWludCAoKnF1ZXJ5Y3RybCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyk7CisJaW50ICgqZ19jdHJsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpzX2N0cmwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworCWludCAoKnF1ZXJ5bWVudSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CisJaW50ICgqaW9jdGwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWludCAoKmdfcmVnaXN0ZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpOworCWludCAoKnNfcmVnaXN0ZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpOworI2VuZGlmCit9OworCitzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHsKKwlpbnQgKCpzX21vZGUpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGVudW0gdjRsMl90dW5lcl90eXBlKTsKKwlpbnQgKCpzX3JhZGlvKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKKwlpbnQgKCpzX2ZyZXF1ZW5jeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKTsKKwlpbnQgKCpnX2ZyZXF1ZW5jeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKTsKKwlpbnQgKCpnX3R1bmVyKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpOworCWludCAoKnNfdHVuZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCk7CisJaW50ICgqc19zdGQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pOworCWludCAoKnNfdHlwZV9hZGRyKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdHVuZXJfc2V0dXAgKnR5cGUpOworCWludCAoKnNfY29uZmlnKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgKmNvbmZpZyk7Cit9OworCitzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIHsKKwlpbnQgKCpzX2Nsb2NrX2ZyZXEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKKwlpbnQgKCpzX2kyc19jbG9ja19mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CisJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSk7Cit9OworCitzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHsKKwlpbnQgKCpzX3JvdXRpbmcpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKTsKKwlpbnQgKCpzX2NyeXN0YWxfZnJlcSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxICpmcmVxKTsKKwlpbnQgKCpkZWNvZGVfdmJpX2xpbmUpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpX2xpbmUpOworCWludCAoKnNfdmJpX2RhdGEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqdmJpX2RhdGEpOworCWludCAoKmdfdmJpX2RhdGEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqdmJpX2RhdGEpOworCWludCAoKmdfc2xpY2VkX3ZiaV9jYXApKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApOworCWludCAoKnNfc3RkX291dHB1dCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKTsKKwlpbnQgKCpzX3N0cmVhbSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSk7CisJaW50ICgqc19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKKwlpbnQgKCpnX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworfTsKKworc3RydWN0IHY0bDJfc3ViZGV2X29wcyB7CisJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzICAqY29yZTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzICp0dW5lcjsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzICphdWRpbzsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzICp2aWRlbzsKK307CisKKyNkZWZpbmUgVjRMMl9TVUJERVZfTkFNRV9TSVpFIDMyCisKKy8qIEVhY2ggaW5zdGFuY2Ugb2YgYSBzdWJkZXYgZHJpdmVyIHNob3VsZCBjcmVhdGUgdGhpcyBzdHJ1Y3QsIGVpdGhlcgorICAgc3RhbmQtYWxvbmUgb3IgZW1iZWRkZWQgaW4gYSBsYXJnZXIgc3RydWN0LgorICovCitzdHJ1Y3QgdjRsMl9zdWJkZXYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CisJLyogbmFtZSBtdXN0IGJlIHVuaXF1ZSAqLworCWNoYXIgbmFtZVtWNEwyX1NVQkRFVl9OQU1FX1NJWkVdOworCS8qIGNhbiBiZSB1c2VkIHRvIGdyb3VwIHNpbWlsYXIgc3ViZGV2cywgdmFsdWUgaXMgZHJpdmVyLXNwZWNpZmljICovCisJdTMyIGdycF9pZDsKKwkvKiBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLworCXZvaWQgKnByaXY7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdjRsMl9zZXRfc3ViZGV2ZGF0YShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2b2lkICpwKQoreworCXNkLT5wcml2ID0gcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICp2NGwyX2dldF9zdWJkZXZkYXRhKGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIHNkLT5wcml2OworfQorCisvKiBDb252ZXJ0IGFuIGlvY3RsLXR5cGUgY29tbWFuZCB0byB0aGUgcHJvcGVyIHY0bDJfc3ViZGV2X29wcyBmdW5jdGlvbiBjYWxsLgorICAgVGhpcyBpcyB1c2VkIGJ5IHN1YmRldiBtb2R1bGVzIHRoYXQgY2FuIGJlIGNhbGxlZCBieSBib3RoIG9sZC1zdHlsZSBpb2N0bAorICAgY29tbWFuZHMgYW5kIHRocm91Z2ggdGhlIHY0bDJfc3ViZGV2X29wcy4KKworICAgVGhlIGlvY3RsIEFQSSBvZiB0aGUgc3ViZGV2IGRyaXZlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNhbGwgdGhlCisgICByaWdodCBvcHMgYmFzZWQgb24gdGhlIGlvY3RsIGNtZCBhbmQgYXJnLgorCisgICBPbmNlIGFsbCBzdWJkZXYgZHJpdmVycyBoYXZlIGJlZW4gY29udmVydGVkIGFuZCBhbGwgZHJpdmVycyBubyBsb25nZXIKKyAgIHVzZSB0aGUgaW9jdGwgaW50ZXJmYWNlLCB0aGVuIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHJlbW92ZWQuCisgKi8KK2ludCB2NGwyX3N1YmRldl9jb21tYW5kKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKTsKKworc3RhdGljIGlubGluZSB2b2lkIHY0bDJfc3ViZGV2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyAqb3BzKQoreworCUlOSVRfTElTVF9IRUFEKCZzZC0+bGlzdCk7CisJLyogb3BzLT5jb3JlIE1VU1QgYmUgc2V0ICovCisJQlVHX09OKCFvcHMgfHwgIW9wcy0+Y29yZSk7CisJc2QtPm9wcyA9IG9wczsKKwlzZC0+ZGV2ID0gTlVMTDsKKwlzZC0+bmFtZVswXSA9ICdcMCc7CisJc2QtPmdycF9pZCA9IDA7CisJc2QtPnByaXYgPSBOVUxMOworfQorCisvKiBDYWxsIGFuIG9wcyBvZiBhIHY0bDJfc3ViZGV2LCBkb2luZyB0aGUgcmlnaHQgY2hlY2tzIGFnYWluc3QKKyAgIE5VTEwgcG9pbnRlcnMuCisKKyAgIEV4YW1wbGU6IGVyciA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworICovCisjZGVmaW5lIHY0bDJfc3ViZGV2X2NhbGwoc2QsIG8sIGYsIGFyZ3MuLi4pCQkJCVwKKwkoIShzZCkgPyAtRU5PREVWIDogKCgoc2QpICYmIChzZCktPm9wcy0+byAmJiAoc2QpLT5vcHMtPm8tPmYpID8JXAorCQkoc2QpLT5vcHMtPm8tPmYoKHNkKSAsICMjYXJncykgOiAtRU5PSU9DVExDTUQpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA4YTYzYzQwLi4xMzYyNzE5IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC05MzYsMTAgKzkzNiw5MCBAQAogY29uZmlnIFBSRUVNUFRfTk9USUZJRVJTCiAJYm9vbAogCitjaG9pY2UKKwlwcm9tcHQgIlJDVSBJbXBsZW1lbnRhdGlvbiIKKwlkZWZhdWx0IENMQVNTSUNfUkNVCisKIGNvbmZpZyBDTEFTU0lDX1JDVQotCWRlZl9ib29sICFQUkVFTVBUX1JDVQorCWJvb2wgIkNsYXNzaWMgUkNVIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGNsYXNzaWMgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgaXMKIAkgIGRlc2lnbmVkIGZvciBiZXN0IHJlYWQtc2lkZSBwZXJmb3JtYW5jZSBvbiBub24tcmVhbHRpbWUKLQkgIHN5c3RlbXMuICBDbGFzc2ljIFJDVSBpcyB0aGUgZGVmYXVsdC4gIE5vdGUgdGhhdCB0aGUKLQkgIFBSRUVNUFRfUkNVIHN5bWJvbCBpcyB1c2VkIHRvIHNlbGVjdC9kZXNlbGVjdCB0aGlzIG9wdGlvbi4KKwkgIHN5c3RlbXMuCisKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIHVuc3VyZS4KKworY29uZmlnIFRSRUVfUkNVCisJYm9vbCAiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzCisJICBkZXNpZ25lZCBmb3IgdmVyeSBsYXJnZSBTTVAgc3lzdGVtIHdpdGggaHVuZHJlZHMgb3IKKwkgIHRob3VzYW5kcyBvZiBDUFVzLgorCitjb25maWcgUFJFRU1QVF9SQ1UKKwlib29sICJQcmVlbXB0aWJsZSBSQ1UiCisJZGVwZW5kcyBvbiBQUkVFTVBUCisJaGVscAorCSAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgbGF0ZW5jeSBvZiB0aGUga2VybmVsIGJ5IG1ha2luZyBjZXJ0YWluCisJICBSQ1Ugc2VjdGlvbnMgcHJlZW1wdGlibGUuIE5vcm1hbGx5IFJDVSBjb2RlIGlzIG5vbi1wcmVlbXB0aWJsZSwgaWYKKwkgIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIHRoZW4gcmVhZC1vbmx5IFJDVSBzZWN0aW9ucyBiZWNvbWUKKwkgIHByZWVtcHRpYmxlLiBUaGlzIGhlbHBzIGxhdGVuY3ksIGJ1dCBtYXkgZXhwb3NlIGJ1Z3MgZHVlIHRvCisJICBub3ctbmFpdmUgYXNzdW1wdGlvbnMgYWJvdXQgZWFjaCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24KKwkgIHJlbWFpbmluZyBvbiBhIGdpdmVuIENQVSB0aHJvdWdoIGl0cyBleGVjdXRpb24uCisKK2VuZGNob2ljZQorCitjb25maWcgUkNVX1RSQUNFCisJYm9vbCAiRW5hYmxlIHRyYWNpbmcgZm9yIFJDVSIKKwlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVCisJaGVscAorCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBpbiBSQ1Ugd2hpY2ggcHJlc2VudHMgc3RhdHMKKwkgIGluIGRlYnVnZnMgZm9yIGRlYnVnZ2luZyBSQ1UgaW1wbGVtZW50YXRpb24uCisKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFJDVSB0cmFjaW5nCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKworY29uZmlnIFJDVV9GQU5PVVQKKwlpbnQgIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWUiCisJcmFuZ2UgMiA2NCBpZiA2NEJJVAorCXJhbmdlIDIgMzIgaWYgITY0QklUCisJZGVwZW5kcyBvbiBUUkVFX1JDVQorCWRlZmF1bHQgNjQgaWYgNjRCSVQKKwlkZWZhdWx0IDMyIGlmICE2NEJJVAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBmYW5vdXQgb2YgaGllcmFyY2hpY2FsIGltcGxlbWVudGF0aW9ucworCSAgb2YgUkNVLCBhbGxvd2luZyBSQ1UgdG8gd29yayBlZmZpY2llbnRseSBvbiBtYWNoaW5lcyB3aXRoCisJICBsYXJnZSBudW1iZXJzIG9mIENQVXMuICBUaGlzIHZhbHVlIG11c3QgYmUgYXQgbGVhc3QgdGhlIGN1YmUKKwkgIHJvb3Qgb2YgTlJfQ1BVUywgd2hpY2ggYWxsb3dzIE5SX0NQVVMgdXAgdG8gMzIsNzY4IGZvciAzMi1iaXQKKwkgIHN5c3RlbXMgYW5kIHVwIHRvIDI2MiwxNDQgZm9yIDY0LWJpdCBzeXN0ZW1zLgorCisJICBTZWxlY3QgYSBzcGVjaWZpYyBudW1iZXIgaWYgdGVzdGluZyBSQ1UgaXRzZWxmLgorCSAgVGFrZSB0aGUgZGVmYXVsdCBpZiB1bnN1cmUuCisKK2NvbmZpZyBSQ1VfRkFOT1VUX0VYQUNUCisJYm9vbCAiRGlzYWJsZSB0cmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgYXV0by1iYWxhbmNpbmciCisJZGVwZW5kcyBvbiBUUkVFX1JDVQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGZvcmNlcyB1c2Ugb2YgdGhlIGV4YWN0IFJDVV9GQU5PVVQgdmFsdWUgc3BlY2lmaWVkLAorCSAgcmVnYXJkbGVzcyBvZiBpbWJhbGFuY2VzIGluIHRoZSBoaWVyYXJjaHkuICBUaGlzIGlzIHVzZWZ1bCBmb3IKKwkgIHRlc3RpbmcgUkNVIGl0c2VsZiwgYW5kIG1pZ2h0IG9uZSBkYXkgYmUgdXNlZnVsIG9uIHN5c3RlbXMgd2l0aAorCSAgc3Ryb25nIE5VTUEgYmVoYXZpb3IuCisKKwkgIFdpdGhvdXQgUkNVX0ZBTk9VVF9FWEFDVCwgdGhlIGNvZGUgd2lsbCBiYWxhbmNlIHRoZSBoaWVyYXJjaHkuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKworY29uZmlnIFRSRUVfUkNVX1RSQUNFCisJZGVmX2Jvb2wgUkNVX1RSQUNFICYmIFRSRUVfUkNVCisJc2VsZWN0IERFQlVHX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBmb3IgdGhlIFRSRUVfUkNVIGltcGxlbWVudGF0aW9uLAorCSAgcGVybWl0dGluZyBNYWtlZmlsZSB0byB0cml2aWFsbHkgc2VsZWN0IGtlcm5lbC9yY3V0cmVlX3RyYWNlLmMuCisKK2NvbmZpZyBQUkVFTVBUX1JDVV9UUkFDRQorCWRlZl9ib29sIFJDVV9UUkFDRSAmJiBQUkVFTVBUX1JDVQorCXNlbGVjdCBERUJVR19GUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRyYWNpbmcgZm9yIHRoZSBQUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbiwKKwkgIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8gdHJpdmlhbGx5IHNlbGVjdCBrZXJuZWwvcmN1cHJlZW1wdF90cmFjZS5jLgpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAxN2U5NzU3Yi4uMmE3Y2UwZiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTU0MCw2ICs1NDAsMTUgQEAKIHsKIH0KIAordm9pZCBfX2luaXQgX193ZWFrIGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKK3sKK30KKwordm9pZCBfX2luaXQgX193ZWFrIGVhcmx5X2lycV9pbml0KHZvaWQpCit7CisJYXJjaF9lYXJseV9pcnFfaW5pdCgpOworfQorCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHN0YXJ0X2tlcm5lbCh2b2lkKQogewogCWNoYXIgKiBjb21tYW5kX2xpbmU7CkBAIC02MDQsNiArNjEzLDggQEAKIAlzb3J0X21haW5fZXh0YWJsZSgpOwogCXRyYXBfaW5pdCgpOwogCXJjdV9pbml0KCk7CisJLyogaW5pdCBzb21lIGxpbmtzIGJlZm9yZSBpbml0X0lTQV9pcnFzKCkgKi8KKwllYXJseV9pcnFfaW5pdCgpOwogCWluaXRfSVJRKCk7CiAJcGlkaGFzaF9pbml0KCk7CiAJaW5pdF90aW1lcnMoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLnByZWVtcHQgYi9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0CmluZGV4IDlmZGJhMDMuLmJmOTg3YjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9LY29uZmlnLnByZWVtcHQKKysrIGIva2VybmVsL0tjb25maWcucHJlZW1wdApAQCAtNTIsMjggKzUyLDMgQEAKIAogZW5kY2hvaWNlCiAKLWNvbmZpZyBQUkVFTVBUX1JDVQotCWJvb2wgIlByZWVtcHRpYmxlIFJDVSIKLQlkZXBlbmRzIG9uIFBSRUVNUFQKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIGNlcnRhaW4KLQkgIFJDVSBzZWN0aW9ucyBwcmVlbXB0aWJsZS4gTm9ybWFsbHkgUkNVIGNvZGUgaXMgbm9uLXByZWVtcHRpYmxlLCBpZgotCSAgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgdGhlbiByZWFkLW9ubHkgUkNVIHNlY3Rpb25zIGJlY29tZQotCSAgcHJlZW1wdGlibGUuIFRoaXMgaGVscHMgbGF0ZW5jeSwgYnV0IG1heSBleHBvc2UgYnVncyBkdWUgdG8KLQkgIG5vdy1uYWl2ZSBhc3N1bXB0aW9ucyBhYm91dCBlYWNoIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgotCSAgcmVtYWluaW5nIG9uIGEgZ2l2ZW4gQ1BVIHRocm91Z2ggaXRzIGV4ZWN1dGlvbi4KLQotCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCi0KLWNvbmZpZyBSQ1VfVFJBQ0UKLQlib29sICJFbmFibGUgdHJhY2luZyBmb3IgUkNVIC0gY3VycmVudGx5IHN0YXRzIGluIGRlYnVnZnMiCi0JZGVwZW5kcyBvbiBQUkVFTVBUX1JDVQotCXNlbGVjdCBERUJVR19GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRyYWNpbmcgaW4gUkNVIHdoaWNoIHByZXNlbnRzIHN0YXRzCi0JICBpbiBkZWJ1Z2ZzIGZvciBkZWJ1Z2dpbmcgUkNVIGltcGxlbWVudGF0aW9uLgotCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBSQ1UgdHJhY2luZwotCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDI3ZWRkYS4uZTFjNWJmMyAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNzMsMTAgKzczLDEwIEBACiBvYmotJChDT05GSUdfU0VDQ09NUCkgKz0gc2VjY29tcC5vCiBvYmotJChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgKz0gcmN1dG9ydHVyZS5vCiBvYmotJChDT05GSUdfQ0xBU1NJQ19SQ1UpICs9IHJjdWNsYXNzaWMubworb2JqLSQoQ09ORklHX1RSRUVfUkNVKSArPSByY3V0cmVlLm8KIG9iai0kKENPTkZJR19QUkVFTVBUX1JDVSkgKz0gcmN1cHJlZW1wdC5vCi1pZmVxICgkKENPTkZJR19QUkVFTVBUX1JDVSkseSkKLW9iai0kKENPTkZJR19SQ1VfVFJBQ0UpICs9IHJjdXByZWVtcHRfdHJhY2UubwotZW5kaWYKK29iai0kKENPTkZJR19UUkVFX1JDVV9UUkFDRSkgKz0gcmN1dHJlZV90cmFjZS5vCitvYmotJChDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UpICs9IHJjdXByZWVtcHRfdHJhY2Uubwogb2JqLSQoQ09ORklHX1JFTEFZKSArPSByZWxheS5vCiBvYmotJChDT05GSUdfU1lTQ1RMKSArPSB1dHNuYW1lX3N5c2N0bC5vCiBvYmotJChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKSArPSBkZWxheWFjY3QubwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggYzc0MjJjYS4uYzllNWExYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0xMDM3LDggKzEwMzcsNiBAQAogCQkgKiB0YXNrIGludG8gdGhlIHdhaXQgZm9yIGV2ZXIgbmlyd2FuYSBhcyB3ZWxsLgogCQkgKi8KIAkJdHNrLT5mbGFncyB8PSBQRl9FWElUUElET05FOwotCQlpZiAodHNrLT5pb19jb250ZXh0KQotCQkJZXhpdF9pb19jb250ZXh0KCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGUoKTsKIAl9CkBAIC0xMzI4LDEwICsxMzI2LDEwIEBACiAJCSAqIGdyb3VwLCB3aGljaCBjb25zb2xpZGF0ZXMgdGltZXMgZm9yIGFsbCB0aHJlYWRzIGluIHRoZQogCQkgKiBncm91cCBpbmNsdWRpbmcgdGhlIGdyb3VwIGxlYWRlci4KIAkJICovCisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKIAkJc3Bpbl9sb2NrX2lycSgmcC0+cGFyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJcHNpZyA9IHAtPnBhcmVudC0+c2lnbmFsOwogCQlzaWcgPSBwLT5zaWduYWw7Ci0JCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKIAkJcHNpZy0+Y3V0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmN1dGltZSwKIAkJCWNwdXRpbWVfYWRkKGNwdXRpbWUudXRpbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXh0YWJsZS5jIGIva2VybmVsL2V4dGFibGUuYwppbmRleCBmZWIwMzE3Li5lMTM2ZWQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvZXh0YWJsZS5jCisrKyBiL2tlcm5lbC9leHRhYmxlLmMKQEAgLTY3LDMgKzY3LDE5IEBACiAJCXJldHVybiAxOwogCXJldHVybiBtb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpICE9IE5VTEw7CiB9CisKKy8qCisgKiBPbiBzb21lIGFyY2hpdGVjdHVyZXMgKFBQQzY0LCBJQTY0KSBmdW5jdGlvbiBwb2ludGVycworICogYXJlIGFjdHVhbGx5IG9ubHkgdG9rZW5zIHRvIHNvbWUgZGF0YSB0aGF0IHRoZW4gaG9sZHMgdGhlCisgKiByZWFsIGZ1bmN0aW9uIGFkZHJlc3MuIEFzIGEgcmVzdWx0LCB0byBmaW5kIGlmIGEgZnVuY3Rpb24KKyAqIHBvaW50ZXIgaXMgcGFydCBvZiB0aGUga2VybmVsIHRleHQsIHdlIG5lZWQgdG8gZG8gc29tZQorICogc3BlY2lhbCBkZXJlZmVyZW5jaW5nIGZpcnN0LgorICovCitpbnQgZnVuY19wdHJfaXNfa2VybmVsX3RleHQodm9pZCAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IocHRyKTsKKwlpZiAoY29yZV9rZXJuZWxfdGV4dChhZGRyKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIG1vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikgIT0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDYxNDRiMzYuLjQzY2JmMzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNDE1LDggKzQxNSw4IEBACiAJc2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzLCAwKTsKIAlzZXRfbW1fY291bnRlcihtbSwgYW5vbl9yc3MsIDApOwogCXNwaW5fbG9ja19pbml0KCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlyd2xvY2tfaW5pdCgmbW0tPmlvY3R4X2xpc3RfbG9jayk7Ci0JbW0tPmlvY3R4X2xpc3QgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZtbS0+aW9jdHhfbG9jayk7CisJSU5JVF9ITElTVF9IRUFEKCZtbS0+aW9jdHhfbGlzdCk7CiAJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKIAltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAJbW1faW5pdF9vd25lcihtbSwgcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDRmZTc5MGUuLjdjNmNiYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC05MiwxMSArOTIsMTIgQEAKICAqIEEgZnV0ZXhfcSBoYXMgYSB3b2tlbiBzdGF0ZSwganVzdCBsaWtlIHRhc2tzIGhhdmUgVEFTS19SVU5OSU5HLgogICogSXQgaXMgY29uc2lkZXJlZCB3b2tlbiB3aGVuIHBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpIHx8IHEtPmxvY2tfcHRyID09IDAuCiAgKiBUaGUgb3JkZXIgb2Ygd2FrdXAgaXMgYWx3YXlzIHRvIG1ha2UgdGhlIGZpcnN0IGNvbmRpdGlvbiB0cnVlLCB0aGVuCi0gKiB3YWtlIHVwIHEtPndhaXRlcnMsIHRoZW4gbWFrZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiB0cnVlLgorICogd2FrZSB1cCBxLT53YWl0ZXIsIHRoZW4gbWFrZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiB0cnVlLgogICovCiBzdHJ1Y3QgZnV0ZXhfcSB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0ZXJzOworCS8qIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIHdhaXRlciAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRlcjsKIAogCS8qIFdoaWNoIGhhc2ggbGlzdCBsb2NrIHRvIHVzZTogKi8KIAlzcGlubG9ja190ICpsb2NrX3B0cjsKQEAgLTEyMywyNCArMTI0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgZnV0ZXhfcXVldWVzWzE8PEZVVEVYX0hBU0hCSVRTXTsKIAogLyoKLSAqIFRha2UgbW0tPm1tYXBfc2VtLCB3aGVuIGZ1dGV4IGlzIHNoYXJlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfbG9ja19tbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkKQotewotCWlmIChmc2hhcmVkKQotCQlkb3duX3JlYWQoZnNoYXJlZCk7Ci19Ci0KLS8qCi0gKiBSZWxlYXNlIG1tLT5tbWFwX3NlbSwgd2hlbiB0aGUgZnV0ZXggaXMgc2hhcmVkCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF91bmxvY2tfbW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCkKLXsKLQlpZiAoZnNoYXJlZCkKLQkJdXBfcmVhZChmc2hhcmVkKTsKLX0KLQotLyoKICAqIFdlIGhhc2ggb24gdGhlIGtleXMgcmV0dXJuZWQgZnJvbSBnZXRfZnV0ZXhfa2V5IChzZWUgYmVsb3cpLgogICovCiBzdGF0aWMgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYXNoX2Z1dGV4KHVuaW9uIGZ1dGV4X2tleSAqa2V5KQpAQCAtMTYxLDYgKzE0NCw0NSBAQAogCQkmJiBrZXkxLT5ib3RoLm9mZnNldCA9PSBrZXkyLT5ib3RoLm9mZnNldCk7CiB9CiAKKy8qCisgKiBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBhZGRyZXNzZWQgYnkgYSBrZXkuCisgKiBDYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLgorICoKKyAqLworc3RhdGljIHZvaWQgZ2V0X2Z1dGV4X2tleV9yZWZzKHVuaW9uIGZ1dGV4X2tleSAqa2V5KQoreworCWlmICgha2V5LT5ib3RoLnB0cikKKwkJcmV0dXJuOworCisJc3dpdGNoIChrZXktPmJvdGgub2Zmc2V0ICYgKEZVVF9PRkZfSU5PREV8RlVUX09GRl9NTVNIQVJFRCkpIHsKKwljYXNlIEZVVF9PRkZfSU5PREU6CisJCWF0b21pY19pbmMoJmtleS0+c2hhcmVkLmlub2RlLT5pX2NvdW50KTsKKwkJYnJlYWs7CisJY2FzZSBGVVRfT0ZGX01NU0hBUkVEOgorCQlhdG9taWNfaW5jKCZrZXktPnByaXZhdGUubW0tPm1tX2NvdW50KTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogRHJvcCBhIHJlZmVyZW5jZSB0byB0aGUgcmVzb3VyY2UgYWRkcmVzc2VkIGJ5IGEga2V5LgorICogVGhlIGhhc2ggYnVja2V0IHNwaW5sb2NrIG11c3Qgbm90IGJlIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGRyb3BfZnV0ZXhfa2V5X3JlZnModW5pb24gZnV0ZXhfa2V5ICprZXkpCit7CisJaWYgKCFrZXktPmJvdGgucHRyKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGtleS0+Ym90aC5vZmZzZXQgJiAoRlVUX09GRl9JTk9ERXxGVVRfT0ZGX01NU0hBUkVEKSkgeworCWNhc2UgRlVUX09GRl9JTk9ERToKKwkJaXB1dChrZXktPnNoYXJlZC5pbm9kZSk7CisJCWJyZWFrOworCWNhc2UgRlVUX09GRl9NTVNIQVJFRDoKKwkJbW1kcm9wKGtleS0+cHJpdmF0ZS5tbSk7CisJCWJyZWFrOworCX0KK30KKwogLyoqCiAgKiBnZXRfZnV0ZXhfa2V5IC0gR2V0IHBhcmFtZXRlcnMgd2hpY2ggYXJlIHRoZSBrZXlzIGZvciBhIGZ1dGV4LgogICogQHVhZGRyOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4CkBAIC0xNzksMTIgKzIwMSwxMCBAQAogICogRm9yIG90aGVyIGZ1dGV4ZXMsIGl0IHBvaW50cyB0byAmY3VycmVudC0+bW0tPm1tYXBfc2VtIGFuZAogICogY2FsbGVyIG11c3QgaGF2ZSB0YWtlbiB0aGUgcmVhZGVyIGxvY2suIGJ1dCBOT1QgYW55IHNwaW5sb2Nrcy4KICAqLwotc3RhdGljIGludCBnZXRfZnV0ZXhfa2V5KHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAotCQkJIHVuaW9uIGZ1dGV4X2tleSAqa2V5KQorc3RhdGljIGludCBnZXRfZnV0ZXhfa2V5KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZnNoYXJlZCwgdW5pb24gZnV0ZXhfa2V5ICprZXkpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpdWFkZHI7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgZXJyOwogCkBAIC0yMDgsMTAwICsyMjgsNTAgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlrZXktPnByaXZhdGUubW0gPSBtbTsKIAkJa2V5LT5wcml2YXRlLmFkZHJlc3MgPSBhZGRyZXNzOworCQlnZXRfZnV0ZXhfa2V5X3JlZnMoa2V5KTsKIAkJcmV0dXJuIDA7CiAJfQotCS8qCi0JICogVGhlIGZ1dGV4IGlzIGhhc2hlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlcgotCSAqIGl0J3MgaW4gYSBzaGFyZWQgb3IgcHJpdmF0ZSBtYXBwaW5nLiAgU28gY2hlY2sgdm1hIGZpcnN0LgotCSAqLwotCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgYWRkcmVzcyk7Ci0JaWYgKHVubGlrZWx5KCF2bWEpKQotCQlyZXR1cm4gLUVGQVVMVDsKIAotCS8qCi0JICogUGVybWlzc2lvbnMuCi0JICovCi0JaWYgKHVubGlrZWx5KCh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPfFZNX1JFQUQpKSAhPSBWTV9SRUFEKSkKLQkJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fSU8pID8gLUVQRVJNIDogLUVBQ0NFUzsKK2FnYWluOgorCWVyciA9IGdldF91c2VyX3BhZ2VzX2Zhc3QoYWRkcmVzcywgMSwgMCwgJnBhZ2UpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbG9ja19wYWdlKHBhZ2UpOworCWlmICghcGFnZS0+bWFwcGluZykgeworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcHV0X3BhZ2UocGFnZSk7CisJCWdvdG8gYWdhaW47CisJfQogCiAJLyoKIAkgKiBQcml2YXRlIG1hcHBpbmdzIGFyZSBoYW5kbGVkIGluIGEgc2ltcGxlIHdheS4KIAkgKgogCSAqIE5PVEU6IFdoZW4gdXNlcnNwYWNlIHdhaXRzIG9uIGEgTUFQX1NIQVJFRCBtYXBwaW5nLCBldmVuIGlmCiAJICogaXQncyBhIHJlYWQtb25seSBoYW5kbGUsIGl0J3MgZXhwZWN0ZWQgdGhhdCBmdXRleGVzIGF0dGFjaCB0bwotCSAqIHRoZSBvYmplY3Qgbm90IHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3MuICBUaGVyZWZvcmUgd2UgdXNlCi0JICogVk1fTUFZU0hBUkUgaGVyZSwgbm90IFZNX1NIQVJFRCB3aGljaCBpcyByZXN0cmljdGVkIHRvIHNoYXJlZAotCSAqIG1hcHBpbmdzIG9mIF93cml0YWJsZV8gaGFuZGxlcy4KKwkgKiB0aGUgb2JqZWN0IG5vdCB0aGUgcGFydGljdWxhciBwcm9jZXNzLgogCSAqLwotCWlmIChsaWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKSkgewotCQlrZXktPmJvdGgub2Zmc2V0IHw9IEZVVF9PRkZfTU1TSEFSRUQ7IC8qIHJlZmVyZW5jZSB0YWtlbiBvbiBtbSAqLworCWlmIChQYWdlQW5vbihwYWdlKSkgeworCQlrZXktPmJvdGgub2Zmc2V0IHw9IEZVVF9PRkZfTU1TSEFSRUQ7IC8qIHJlZiB0YWtlbiBvbiBtbSAqLwogCQlrZXktPnByaXZhdGUubW0gPSBtbTsKIAkJa2V5LT5wcml2YXRlLmFkZHJlc3MgPSBhZGRyZXNzOwotCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlrZXktPmJvdGgub2Zmc2V0IHw9IEZVVF9PRkZfSU5PREU7IC8qIGlub2RlLWJhc2VkIGtleSAqLworCQlrZXktPnNoYXJlZC5pbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJCWtleS0+c2hhcmVkLnBnb2ZmID0gcGFnZS0+aW5kZXg7CiAJfQogCi0JLyoKLQkgKiBMaW5lYXIgZmlsZSBtYXBwaW5ncyBhcmUgYWxzbyBzaW1wbGUuCi0JICovCi0Ja2V5LT5zaGFyZWQuaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0Ja2V5LT5ib3RoLm9mZnNldCB8PSBGVVRfT0ZGX0lOT0RFOyAvKiBpbm9kZS1iYXNlZCBrZXkuICovCi0JaWYgKGxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSkgewotCQlrZXktPnNoYXJlZC5wZ29mZiA9ICgoKGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKQotCQkJCSAgICAgKyB2bWEtPnZtX3Bnb2ZmKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWdldF9mdXRleF9rZXlfcmVmcyhrZXkpOwogCi0JLyoKLQkgKiBXZSBjb3VsZCB3YWxrIHRoZSBwYWdlIHRhYmxlIHRvIHJlYWQgdGhlIG5vbi1saW5lYXIKLQkgKiBwdGUsIGFuZCBnZXQgdGhlIHBhZ2UgaW5kZXggd2l0aG91dCBmZXRjaGluZyB0aGUgcGFnZQotCSAqIGZyb20gc3dhcC4gIEJ1dCB0aGF0J3MgYSBsb3Qgb2YgY29kZSB0byBkdXBsaWNhdGUgaGVyZQotCSAqIGZvciBhIHJhcmUgY2FzZSwgc28gd2Ugc2ltcGx5IGZldGNoIHRoZSBwYWdlLgotCSAqLwotCWVyciA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyZXNzLCAxLCAwLCAwLCAmcGFnZSwgTlVMTCk7Ci0JaWYgKGVyciA+PSAwKSB7Ci0JCWtleS0+c2hhcmVkLnBnb2ZmID0KLQkJCXBhZ2UtPmluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JCXB1dF9wYWdlKHBhZ2UpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIGVycjsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRha2UgYSByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlIGFkZHJlc3NlZCBieSBhIGtleS4KLSAqIENhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBzcGlubG9ja3MuCi0gKgotICovCi1zdGF0aWMgdm9pZCBnZXRfZnV0ZXhfa2V5X3JlZnModW5pb24gZnV0ZXhfa2V5ICprZXkpCitzdGF0aWMgaW5saW5lCit2b2lkIHB1dF9mdXRleF9rZXkoaW50IGZzaGFyZWQsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KQogewotCWlmIChrZXktPmJvdGgucHRyID09IE5VTEwpCi0JCXJldHVybjsKLQlzd2l0Y2ggKGtleS0+Ym90aC5vZmZzZXQgJiAoRlVUX09GRl9JTk9ERXxGVVRfT0ZGX01NU0hBUkVEKSkgewotCQljYXNlIEZVVF9PRkZfSU5PREU6Ci0JCQlhdG9taWNfaW5jKCZrZXktPnNoYXJlZC5pbm9kZS0+aV9jb3VudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGVVRfT0ZGX01NU0hBUkVEOgotCQkJYXRvbWljX2luYygma2V5LT5wcml2YXRlLm1tLT5tbV9jb3VudCk7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBEcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBhZGRyZXNzZWQgYnkgYSBrZXkuCi0gKiBUaGUgaGFzaCBidWNrZXQgc3BpbmxvY2sgbXVzdCBub3QgYmUgaGVsZC4KLSAqLwotc3RhdGljIHZvaWQgZHJvcF9mdXRleF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSkKLXsKLQlpZiAoIWtleS0+Ym90aC5wdHIpCi0JCXJldHVybjsKLQlzd2l0Y2ggKGtleS0+Ym90aC5vZmZzZXQgJiAoRlVUX09GRl9JTk9ERXxGVVRfT0ZGX01NU0hBUkVEKSkgewotCQljYXNlIEZVVF9PRkZfSU5PREU6Ci0JCQlpcHV0KGtleS0+c2hhcmVkLmlub2RlKTsKLQkJCWJyZWFrOwotCQljYXNlIEZVVF9PRkZfTU1TSEFSRUQ6Ci0JCQltbWRyb3Aoa2V5LT5wcml2YXRlLm1tKTsKLQkJCWJyZWFrOwotCX0KKwlkcm9wX2Z1dGV4X2tleV9yZWZzKGtleSk7CiB9CiAKIHN0YXRpYyB1MzIgY21weGNoZ19mdXRleF92YWx1ZV9sb2NrZWQodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1MzIgbmV3dmFsKQpAQCAtMzI4LDEwICsyOTgsOCBAQAogCiAvKgogICogRmF1bHQgaGFuZGxpbmcuCi0gKiBpZiBmc2hhcmVkIGlzIG5vbiBOVUxMLCBjdXJyZW50LT5tbS0+bW1hcF9zZW0gaXMgYWxyZWFkeSBoZWxkCiAgKi8KLXN0YXRpYyBpbnQgZnV0ZXhfaGFuZGxlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCSAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsIGludCBhdHRlbXB0KQorc3RhdGljIGludCBmdXRleF9oYW5kbGVfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgYXR0ZW1wdCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKQEAgLTM0MCw4ICszMDgsNyBAQAogCWlmIChhdHRlbXB0ID4gMikKIAkJcmV0dXJuIHJldDsKIAotCWlmICghZnNoYXJlZCkKLQkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CiAJaWYgKHZtYSAmJiBhZGRyZXNzID49IHZtYS0+dm1fc3RhcnQgJiYKIAkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKQEAgLTM2MSw4ICszMjgsNyBAQAogCQkJCWN1cnJlbnQtPm1pbl9mbHQrKzsKIAkJfQogCX0KLQlpZiAoIWZzaGFyZWQpCi0JCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zODUsNiArMzUxLDcgQEAKIAkvKiBwaV9tdXRleCBnZXRzIGluaXRpYWxpemVkIGxhdGVyICovCiAJcGlfc3RhdGUtPm93bmVyID0gTlVMTDsKIAlhdG9taWNfc2V0KCZwaV9zdGF0ZS0+cmVmY291bnQsIDEpOworCXBpX3N0YXRlLT5rZXkgPSBGVVRFWF9LRVlfSU5JVDsKIAogCWN1cnJlbnQtPnBpX3N0YXRlX2NhY2hlID0gcGlfc3RhdGU7CiAKQEAgLTQ2OSw3ICs0MzYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpoZWFkID0gJmN1cnItPnBpX3N0YXRlX2xpc3Q7CiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZTsKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwotCXVuaW9uIGZ1dGV4X2tleSBrZXk7CisJdW5pb24gZnV0ZXhfa2V5IGtleSA9IEZVVEVYX0tFWV9JTklUOwogCiAJaWYgKCFmdXRleF9jbXB4Y2hnX2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTYxNCw3ICs1ODEsNyBAQAogCSAqIFRoZSBsb2NrIGluIHdha2VfdXBfYWxsKCkgaXMgYSBjcnVjaWFsIG1lbW9yeSBiYXJyaWVyIGFmdGVyIHRoZQogCSAqIHBsaXN0X2RlbCgpIGFuZCBhbHNvIGJlZm9yZSBhc3NpZ25pbmcgdG8gcS0+bG9ja19wdHIuCiAJICovCi0Jd2FrZV91cF9hbGwoJnEtPndhaXRlcnMpOworCXdha2VfdXAoJnEtPndhaXRlcik7CiAJLyoKIAkgKiBUaGUgd2FpdGluZyB0YXNrIGNhbiBmcmVlIHRoZSBmdXRleF9xIGFzIHNvb24gYXMgdGhpcyBpcyB3cml0dGVuLAogCSAqIHdpdGhvdXQgdGFraW5nIGFueSBsb2Nrcy4gIFRoaXMgbXVzdCBjb21lIGxhc3QuCkBAIC03MjYsMjAgKzY5MywxNyBAQAogICogV2FrZSB1cCBhbGwgd2FpdGVycyBoYXNoZWQgb24gdGhlIHBoeXNpY2FsIHBhZ2UgdGhhdCBpcyBtYXBwZWQKICAqIHRvIHRoaXMgdmlydHVhbCBhZGRyZXNzOgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3dha2UodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsCi0JCSAgICAgIGludCBucl93YWtlLCB1MzIgYml0c2V0KQorc3RhdGljIGludCBmdXRleF93YWtlKHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZnNoYXJlZCwgaW50IG5yX3dha2UsIHUzMiBiaXRzZXQpCiB7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7Ci0JdW5pb24gZnV0ZXhfa2V5IGtleTsKKwl1bmlvbiBmdXRleF9rZXkga2V5ID0gRlVURVhfS0VZX0lOSVQ7CiAJaW50IHJldDsKIAogCWlmICghYml0c2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZ1dGV4X2xvY2tfbW0oZnNoYXJlZCk7Ci0KIAlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmc2hhcmVkLCAma2V5KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKQEAgLTc2Nyw3ICs3MzEsNyBAQAogCiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKIG91dDoKLQlmdXRleF91bmxvY2tfbW0oZnNoYXJlZCk7CisJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NzYsMTkgKzc0MCwxNiBAQAogICogdG8gdGhpcyB2aXJ0dWFsIGFkZHJlc3M6CiAgKi8KIHN0YXRpYyBpbnQKLWZ1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAotCSAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwKK2Z1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCBpbnQgZnNoYXJlZCwgdTMyIF9fdXNlciAqdWFkZHIyLAogCSAgICAgIGludCBucl93YWtlLCBpbnQgbnJfd2FrZTIsIGludCBvcCkKIHsKLQl1bmlvbiBmdXRleF9rZXkga2V5MSwga2V5MjsKKwl1bmlvbiBmdXRleF9rZXkga2V5MSA9IEZVVEVYX0tFWV9JTklULCBrZXkyID0gRlVURVhfS0VZX0lOSVQ7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsICpoYjI7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwogCWludCByZXQsIG9wX3JldCwgYXR0ZW1wdCA9IDA7CiAKIHJldHJ5ZnVsbDoKLQlmdXRleF9sb2NrX21tKGZzaGFyZWQpOwotCiAJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZzaGFyZWQsICZrZXkxKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKQEAgLTgzMywxOCArNzk0LDEyIEBACiAJCSAqLwogCQlpZiAoYXR0ZW1wdCsrKSB7CiAJCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIyLAotCQkJCQkJIGZzaGFyZWQsIGF0dGVtcHQpOworCQkJCQkJIGF0dGVtcHQpOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dDsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAotCQkvKgotCQkgKiBJZiB3ZSB3b3VsZCBoYXZlIGZhdWx0ZWQsIHJlbGVhc2UgbW1hcF9zZW0sCi0JCSAqIGZhdWx0IGl0IGluIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KLQkJICovCi0JCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKLQogCQlyZXQgPSBnZXRfdXNlcihkdW1teSwgdWFkZHIyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC04ODAsNyArODM1LDggQEAKIAlpZiAoaGIxICE9IGhiMikKIAkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CiBvdXQ6Ci0JZnV0ZXhfdW5sb2NrX21tKGZzaGFyZWQpOworCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOworCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTg4OSwxOSArODQ1LDE2IEBACiAgKiBSZXF1ZXVlIGFsbCB3YWl0ZXJzIGhhc2hlZCBvbiBvbmUgcGh5c2ljYWwgcGFnZSB0byBhbm90aGVyCiAgKiBwaHlzaWNhbCBwYWdlLgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIxLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAotCQkJIHUzMiBfX3VzZXIgKnVhZGRyMiwKK3N0YXRpYyBpbnQgZnV0ZXhfcmVxdWV1ZSh1MzIgX191c2VyICp1YWRkcjEsIGludCBmc2hhcmVkLCB1MzIgX191c2VyICp1YWRkcjIsCiAJCQkgaW50IG5yX3dha2UsIGludCBucl9yZXF1ZXVlLCB1MzIgKmNtcHZhbCkKIHsKLQl1bmlvbiBmdXRleF9rZXkga2V5MSwga2V5MjsKKwl1bmlvbiBmdXRleF9rZXkga2V5MSA9IEZVVEVYX0tFWV9JTklULCBrZXkyID0gRlVURVhfS0VZX0lOSVQ7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsICpoYjI7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQxOwogCXN0cnVjdCBmdXRleF9xICp0aGlzLCAqbmV4dDsKIAlpbnQgcmV0LCBkcm9wX2NvdW50ID0gMDsKIAogIHJldHJ5OgotCWZ1dGV4X2xvY2tfbW0oZnNoYXJlZCk7Ci0KIAlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMSwgZnNoYXJlZCwgJmtleTEpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwpAQCAtOTI0LDEyICs4NzcsNiBAQAogCQkJaWYgKGhiMSAhPSBoYjIpCiAJCQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CiAKLQkJCS8qCi0JCQkgKiBJZiB3ZSB3b3VsZCBoYXZlIGZhdWx0ZWQsIHJlbGVhc2UgbW1hcF9zZW0sIGZhdWx0Ci0JCQkgKiBpdCBpbiBhbmQgc3RhcnQgYWxsIG92ZXIgYWdhaW4uCi0JCQkgKi8KLQkJCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKLQogCQkJcmV0ID0gZ2V0X3VzZXIoY3VydmFsLCB1YWRkcjEpOwogCiAJCQlpZiAoIXJldCkKQEAgLTk4MSw3ICs5MjgsOCBAQAogCQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZrZXkxKTsKIAogb3V0OgotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05OTAsNyArOTM4LDcgQEAKIHsKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcS0+d2FpdGVycyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcS0+d2FpdGVyKTsKIAogCWdldF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKIAloYiA9IGhhc2hfZnV0ZXgoJnEtPmtleSk7CkBAIC0xMTAzLDggKzEwNTEsNyBAQAogICogcHJpdmF0ZSBmdXRleGVzLgogICovCiBzdGF0aWMgaW50IGZpeHVwX3BpX3N0YXRlX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKLQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld293bmVyLAotCQkJCXN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQpCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXdvd25lciwgaW50IGZzaGFyZWQpCiB7CiAJdTMyIG5ld3RpZCA9IHRhc2tfcGlkX3ZucihuZXdvd25lcikgfCBGVVRFWF9XQUlURVJTOwogCXN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUgPSBxLT5waV9zdGF0ZTsKQEAgLTExODMsNyArMTEzMCw3IEBACiBoYW5kbGVfZmF1bHQ6CiAJc3Bpbl91bmxvY2socS0+bG9ja19wdHIpOwogCi0JcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBmc2hhcmVkLCBhdHRlbXB0KyspOworCXJldCA9IGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCsrKTsKIAogCXNwaW5fbG9jayhxLT5sb2NrX3B0cik7CiAKQEAgLTEyMDMsMTIgKzExNTAsMTMgQEAKICAqIEluIGNhc2Ugd2UgbXVzdCB1c2UgcmVzdGFydF9ibG9jayB0byByZXN0YXJ0IGEgZnV0ZXhfd2FpdCwKICAqIHdlIGVuY29kZSBpbiB0aGUgJ2ZsYWdzJyBzaGFyZWQgY2FwYWJpbGl0eQogICovCi0jZGVmaW5lIEZMQUdTX1NIQVJFRCAgMQorI2RlZmluZSBGTEFHU19TSEFSRUQJCTB4MDEKKyNkZWZpbmUgRkxBR1NfQ0xPQ0tSVAkJMHgwMgogCiBzdGF0aWMgbG9uZyBmdXRleF93YWl0X3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpOwogCi1zdGF0aWMgaW50IGZ1dGV4X3dhaXQodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsCi0JCSAgICAgIHUzMiB2YWwsIGt0aW1lX3QgKmFic190aW1lLCB1MzIgYml0c2V0KQorc3RhdGljIGludCBmdXRleF93YWl0KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZnNoYXJlZCwKKwkJICAgICAgdTMyIHZhbCwga3RpbWVfdCAqYWJzX3RpbWUsIHUzMiBiaXRzZXQsIGludCBjbG9ja3J0KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3Vycik7CkBAIC0xMjI1LDggKzExNzMsNyBAQAogCXEucGlfc3RhdGUgPSBOVUxMOwogCXEuYml0c2V0ID0gYml0c2V0OwogIHJldHJ5OgotCWZ1dGV4X2xvY2tfbW0oZnNoYXJlZCk7Ci0KKwlxLmtleSA9IEZVVEVYX0tFWV9JTklUOwogCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZzaGFyZWQsICZxLmtleSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcmVsZWFzZV9zZW07CkBAIC0xMjU4LDEyICsxMjA1LDYgQEAKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlxdWV1ZV91bmxvY2soJnEsIGhiKTsKIAotCQkvKgotCQkgKiBJZiB3ZSB3b3VsZCBoYXZlIGZhdWx0ZWQsIHJlbGVhc2UgbW1hcF9zZW0sIGZhdWx0IGl0IGluIGFuZAotCQkgKiBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KLQkJICovCi0JCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKLQogCQlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7CiAKIAkJaWYgKCFyZXQpCkBAIC0xMjc4LDEyICsxMjE5LDYgQEAKIAlxdWV1ZV9tZSgmcSwgaGIpOwogCiAJLyoKLQkgKiBOb3cgdGhlIGZ1dGV4IGlzIHF1ZXVlZCBhbmQgd2UgaGF2ZSBjaGVja2VkIHRoZSBkYXRhLCB3ZQotCSAqIGRvbid0IHdhbnQgdG8gaG9sZCBtbWFwX3NlbSB3aGlsZSB3ZSBzbGVlcC4KLQkgKi8KLQlmdXRleF91bmxvY2tfbW0oZnNoYXJlZCk7Ci0KLQkvKgogCSAqIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBzY2hlZHVsaW5nIHNpbmNlIHRoZSBxdWV1ZV9tZSgpLCBhcyB3ZQogCSAqIGNhbm5vdCBob2xkIGEgc3BpbmxvY2sgYWNyb3NzIHRoZSBnZXRfdXNlcigpIGluIGNhc2UgaXQKIAkgKiBmYXVsdHMsIGFuZCB3ZSBjYW5ub3QganVzdCBzZXQgVEFTS19JTlRFUlJVUFRJQkxFIHN0YXRlIHdoZW4KQEAgLTEyOTQsNyArMTIyOSw3IEBACiAKIAkvKiBhZGRfd2FpdF9xdWV1ZSBpcyB0aGUgYmFycmllciBhZnRlciBfX3NldF9jdXJyZW50X3N0YXRlLiAqLwogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlhZGRfd2FpdF9xdWV1ZSgmcS53YWl0ZXJzLCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnEud2FpdGVyLCAmd2FpdCk7CiAJLyoKIAkgKiAhcGxpc3Rfbm9kZV9lbXB0eSgpIGlzIHNhZmUgaGVyZSB3aXRob3V0IGFueSBsb2NrLgogCSAqIHEubG9ja19wdHIgIT0gMCBpcyBub3Qgc2FmZSwgYmVjYXVzZSBvZiBvcmRlcmluZyBhZ2FpbnN0IHdha2V1cC4KQEAgLTEzMDcsOCArMTI0MiwxMCBAQAogCQkJc2xhY2sgPSBjdXJyZW50LT50aW1lcl9zbGFja19uczsKIAkJCWlmIChydF90YXNrKGN1cnJlbnQpKQogCQkJCXNsYWNrID0gMDsKLQkJCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLAotCQkJCQkJSFJUSU1FUl9NT0RFX0FCUyk7CisJCQlocnRpbWVyX2luaXRfb25fc3RhY2soJnQudGltZXIsCisJCQkJCSAgICAgIGNsb2NrcnQgPyBDTE9DS19SRUFMVElNRSA6CisJCQkJCSAgICAgIENMT0NLX01PTk9UT05JQywKKwkJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCQlocnRpbWVyX2luaXRfc2xlZXBlcigmdCwgY3VycmVudCk7CiAJCQlocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKCZ0LnRpbWVyLCAqYWJzX3RpbWUsIHNsYWNrKTsKIApAQCAtMTM2Myw2ICsxMzAwLDggQEAKIAogCQlpZiAoZnNoYXJlZCkKIAkJCXJlc3RhcnQtPmZ1dGV4LmZsYWdzIHw9IEZMQUdTX1NIQVJFRDsKKwkJaWYgKGNsb2NrcnQpCisJCQlyZXN0YXJ0LT5mdXRleC5mbGFncyB8PSBGTEFHU19DTE9DS1JUOwogCQlyZXR1cm4gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKIAl9CiAKQEAgLTEzNzAsNyArMTMwOSw3IEBACiAJcXVldWVfdW5sb2NrKCZxLCBoYik7CiAKICBvdXRfcmVsZWFzZV9zZW06Ci0JZnV0ZXhfdW5sb2NrX21tKGZzaGFyZWQpOworCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzc4LDE1ICsxMzE3LDE2IEBACiBzdGF0aWMgbG9uZyBmdXRleF93YWl0X3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCiB7CiAJdTMyIF9fdXNlciAqdWFkZHIgPSAodTMyIF9fdXNlciAqKXJlc3RhcnQtPmZ1dGV4LnVhZGRyOwotCXN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQgPSBOVUxMOworCWludCBmc2hhcmVkID0gMDsKIAlrdGltZV90IHQ7CiAKIAl0LnR2NjQgPSByZXN0YXJ0LT5mdXRleC50aW1lOwogCXJlc3RhcnQtPmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCWlmIChyZXN0YXJ0LT5mdXRleC5mbGFncyAmIEZMQUdTX1NIQVJFRCkKLQkJZnNoYXJlZCA9ICZjdXJyZW50LT5tbS0+bW1hcF9zZW07CisJCWZzaGFyZWQgPSAxOwogCXJldHVybiAobG9uZylmdXRleF93YWl0KHVhZGRyLCBmc2hhcmVkLCByZXN0YXJ0LT5mdXRleC52YWwsICZ0LAotCQkJCXJlc3RhcnQtPmZ1dGV4LmJpdHNldCk7CisJCQkJcmVzdGFydC0+ZnV0ZXguYml0c2V0LAorCQkJCXJlc3RhcnQtPmZ1dGV4LmZsYWdzICYgRkxBR1NfQ0xPQ0tSVCk7CiB9CiAKIApAQCAtMTM5Niw3ICsxMzM2LDcgQEAKICAqIGlmIHRoZXJlIGFyZSB3YWl0ZXJzIHRoZW4gaXQgd2lsbCBibG9jaywgaXQgZG9lcyBQSSwgZXRjLiAoRHVlIHRvCiAgKiByYWNlcyB0aGUga2VybmVsIG1pZ2h0IHNlZSBhIDAgdmFsdWUgb2YgdGhlIGZ1dGV4IHRvby4pCiAgKi8KLXN0YXRpYyBpbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCwKK3N0YXRpYyBpbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsCiAJCQkgaW50IGRldGVjdCwga3RpbWVfdCAqdGltZSwgaW50IHRyeWxvY2spCiB7CiAJc3RydWN0IGhydGltZXJfc2xlZXBlciB0aW1lb3V0LCAqdG8gPSBOVUxMOwpAQCAtMTQxOSw4ICsxMzU5LDcgQEAKIAogCXEucGlfc3RhdGUgPSBOVUxMOwogIHJldHJ5OgotCWZ1dGV4X2xvY2tfbW0oZnNoYXJlZCk7Ci0KKwlxLmtleSA9IEZVVEVYX0tFWV9JTklUOwogCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZzaGFyZWQsICZxLmtleSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcmVsZWFzZV9zZW07CkBAIC0xNTA5LDcgKzE0NDgsNiBAQAogCQkJICogZXhpdCB0byBjb21wbGV0ZS4KIAkJCSAqLwogCQkJcXVldWVfdW5sb2NrKCZxLCBoYik7Ci0JCQlmdXRleF91bmxvY2tfbW0oZnNoYXJlZCk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWdvdG8gcmV0cnk7CiAKQEAgLTE1NDEsMTIgKzE0NzksNiBAQAogCSAqLwogCXF1ZXVlX21lKCZxLCBoYik7CiAKLQkvKgotCSAqIE5vdyB0aGUgZnV0ZXggaXMgcXVldWVkIGFuZCB3ZSBoYXZlIGNoZWNrZWQgdGhlIGRhdGEsIHdlCi0JICogZG9uJ3Qgd2FudCB0byBob2xkIG1tYXBfc2VtIHdoaWxlIHdlIHNsZWVwLgotCSAqLwotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKLQogCVdBUk5fT04oIXEucGlfc3RhdGUpOwogCS8qCiAJICogQmxvY2sgb24gdGhlIFBJIG11dGV4OgpAQCAtMTU1OSw3ICsxNDkxLDYgQEAKIAkJcmV0ID0gcmV0ID8gMCA6IC1FV09VTERCTE9DSzsKIAl9CiAKLQlmdXRleF9sb2NrX21tKGZzaGFyZWQpOwogCXNwaW5fbG9jayhxLmxvY2tfcHRyKTsKIAogCWlmICghcmV0KSB7CkBAIC0xNjI1LDcgKzE1NTYsNiBAQAogCiAJLyogVW5xdWV1ZSBhbmQgZHJvcCB0aGUgbG9jayAqLwogCXVucXVldWVfbWVfcGkoJnEpOwotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKIAogCWlmICh0bykKIAkJZGVzdHJveV9ocnRpbWVyX29uX3N0YWNrKCZ0by0+dGltZXIpOwpAQCAtMTYzNSwzNCArMTU2NSwzMCBAQAogCXF1ZXVlX3VubG9jaygmcSwgaGIpOwogCiAgb3V0X3JlbGVhc2Vfc2VtOgotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CiAJaWYgKHRvKQogCQlkZXN0cm95X2hydGltZXJfb25fc3RhY2soJnRvLT50aW1lcik7CiAJcmV0dXJuIHJldDsKIAogIHVhZGRyX2ZhdWx0ZWQ6CiAJLyoKLQkgKiBXZSBoYXZlIHRvIHIvdyAgKihpbnQgX191c2VyICopdWFkZHIsIGJ1dCB3ZSBjYW4ndCBtb2RpZnkgaXQKLQkgKiBub24tYXRvbWljYWxseS4gIFRoZXJlZm9yZSwgaWYgZ2V0X3VzZXIgYmVsb3cgaXMgbm90Ci0JICogZW5vdWdoLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgZmF1bHQgb3Vyc2VsdmVzLCB3aGlsZQotCSAqIHN0aWxsIGhvbGRpbmcgdGhlIG1tYXBfc2VtLgotCSAqCi0JICogLi4uIGFuZCBoYi0+bG9jay4gOi0pIC0tQU5LCisJICogV2UgaGF2ZSB0byByL3cgICooaW50IF9fdXNlciAqKXVhZGRyLCBhbmQgd2UgaGF2ZSB0byBtb2RpZnkgaXQKKwkgKiBhdG9taWNhbGx5LiAgVGhlcmVmb3JlLCBpZiB3ZSBjb250aW51ZSB0byBmYXVsdCBhZnRlciBnZXRfdXNlcigpCisJICogYmVsb3csIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBmYXVsdCBvdXJzZWx2ZXMsIHdoaWxlIHN0aWxsIGhvbGRpbmcKKwkgKiB0aGUgbW1hcF9zZW0uICBUaGlzIGNhbiBvY2N1ciBpZiB0aGUgdWFkZHIgaXMgdW5kZXIgY29udGVudGlvbiBhcworCSAqIHdlIGhhdmUgdG8gZHJvcCB0aGUgbW1hcF9zZW0gaW4gb3JkZXIgdG8gY2FsbCBnZXRfdXNlcigpLgogCSAqLwogCXF1ZXVlX3VubG9jaygmcSwgaGIpOwogCiAJaWYgKGF0dGVtcHQrKykgewotCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGZzaGFyZWQsCi0JCQkJCSBhdHRlbXB0KTsKKwkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X3JlbGVhc2Vfc2VtOwogCQlnb3RvIHJldHJ5X3VubG9ja2VkOwogCX0KIAotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKLQogCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKLQlpZiAoIXJldCAmJiAodXZhbCAhPSAtRUZBVUxUKSkKKwlpZiAoIXJldCkKIAkJZ290byByZXRyeTsKIAogCWlmICh0bykKQEAgLTE2NzUsMTMgKzE2MDEsMTMgQEAKICAqIFRoaXMgaXMgdGhlIGluLWtlcm5lbCBzbG93cGF0aDogd2UgbG9vayB1cCB0aGUgUEkgc3RhdGUgKGlmIGFueSksCiAgKiBhbmQgZG8gdGhlIHJ0LW11dGV4IHVubG9jay4KICAqLwotc3RhdGljIGludCBmdXRleF91bmxvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQpCitzdGF0aWMgaW50IGZ1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQpCiB7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7CiAJdTMyIHV2YWw7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7Ci0JdW5pb24gZnV0ZXhfa2V5IGtleTsKKwl1bmlvbiBmdXRleF9rZXkga2V5ID0gRlVURVhfS0VZX0lOSVQ7CiAJaW50IHJldCwgYXR0ZW1wdCA9IDA7CiAKIHJldHJ5OgpAQCAtMTY5MiwxMCArMTYxOCw2IEBACiAJICovCiAJaWYgKCh1dmFsICYgRlVURVhfVElEX01BU0spICE9IHRhc2tfcGlkX3ZucihjdXJyZW50KSkKIAkJcmV0dXJuIC1FUEVSTTsKLQkvKgotCSAqIEZpcnN0IHRha2UgYWxsIHRoZSBmdXRleCByZWxhdGVkIGxvY2tzOgotCSAqLwotCWZ1dGV4X2xvY2tfbW0oZnNoYXJlZCk7CiAKIAlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmc2hhcmVkLCAma2V5KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQpAQCAtMTc1NCwzNCArMTY3NiwzMCBAQAogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogb3V0OgotCWZ1dGV4X3VubG9ja19tbShmc2hhcmVkKTsKKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkpOwogCiAJcmV0dXJuIHJldDsKIAogcGlfZmF1bHRlZDoKIAkvKgotCSAqIFdlIGhhdmUgdG8gci93ICAqKGludCBfX3VzZXIgKil1YWRkciwgYnV0IHdlIGNhbid0IG1vZGlmeSBpdAotCSAqIG5vbi1hdG9taWNhbGx5LiAgVGhlcmVmb3JlLCBpZiBnZXRfdXNlciBiZWxvdyBpcyBub3QKLQkgKiBlbm91Z2gsIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBmYXVsdCBvdXJzZWx2ZXMsIHdoaWxlCi0JICogc3RpbGwgaG9sZGluZyB0aGUgbW1hcF9zZW0uCi0JICoKLQkgKiAuLi4gYW5kIGhiLT5sb2NrLiAtLUFOSworCSAqIFdlIGhhdmUgdG8gci93ICAqKGludCBfX3VzZXIgKil1YWRkciwgYW5kIHdlIGhhdmUgdG8gbW9kaWZ5IGl0CisJICogYXRvbWljYWxseS4gIFRoZXJlZm9yZSwgaWYgd2UgY29udGludWUgdG8gZmF1bHQgYWZ0ZXIgZ2V0X3VzZXIoKQorCSAqIGJlbG93LCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgZmF1bHQgb3Vyc2VsdmVzLCB3aGlsZSBzdGlsbCBob2xkaW5nCisJICogdGhlIG1tYXBfc2VtLiAgVGhpcyBjYW4gb2NjdXIgaWYgdGhlIHVhZGRyIGlzIHVuZGVyIGNvbnRlbnRpb24gYXMKKwkgKiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfc2VtIGluIG9yZGVyIHRvIGNhbGwgZ2V0X3VzZXIoKS4KIAkgKi8KIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogCiAJaWYgKGF0dGVtcHQrKykgewotCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGZzaGFyZWQsCi0JCQkJCSBhdHRlbXB0KTsKKwkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCQl1dmFsID0gMDsKIAkJZ290byByZXRyeV91bmxvY2tlZDsKIAl9CiAKLQlmdXRleF91bmxvY2tfbW0oZnNoYXJlZCk7Ci0KIAlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7Ci0JaWYgKCFyZXQgJiYgKHV2YWwgIT0gLUVGQVVMVCkpCisJaWYgKCFyZXQpCiAJCWdvdG8gcmV0cnk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTkwOCw4ICsxODI2LDcgQEAKIAkJICogUEkgZnV0ZXhlcyBoYXBwZW5zIGluIGV4aXRfcGlfc3RhdGUoKToKIAkJICovCiAJCWlmICghcGkgJiYgKHV2YWwgJiBGVVRFWF9XQUlURVJTKSkKLQkJCWZ1dGV4X3dha2UodWFkZHIsICZjdXJyLT5tbS0+bW1hcF9zZW0sIDEsCi0JCQkJICAgRlVURVhfQklUU0VUX01BVENIX0FOWSk7CisJCQlmdXRleF93YWtlKHVhZGRyLCAxLCAxLCBGVVRFWF9CSVRTRVRfTUFUQ0hfQU5ZKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDAzLDE4ICsxOTIwLDIyIEBACiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsCiAJCXUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKQogewotCWludCByZXQgPSAtRU5PU1lTOworCWludCBjbG9ja3J0LCByZXQgPSAtRU5PU1lTOwogCWludCBjbWQgPSBvcCAmIEZVVEVYX0NNRF9NQVNLOwotCXN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQgPSBOVUxMOworCWludCBmc2hhcmVkID0gMDsKIAogCWlmICghKG9wICYgRlVURVhfUFJJVkFURV9GTEFHKSkKLQkJZnNoYXJlZCA9ICZjdXJyZW50LT5tbS0+bW1hcF9zZW07CisJCWZzaGFyZWQgPSAxOworCisJY2xvY2tydCA9IG9wICYgRlVURVhfQ0xPQ0tfUkVBTFRJTUU7CisJaWYgKGNsb2NrcnQgJiYgY21kICE9IEZVVEVYX1dBSVRfQklUU0VUKQorCQlyZXR1cm4gLUVOT1NZUzsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGVVRFWF9XQUlUOgogCQl2YWwzID0gRlVURVhfQklUU0VUX01BVENIX0FOWTsKIAljYXNlIEZVVEVYX1dBSVRfQklUU0VUOgotCQlyZXQgPSBmdXRleF93YWl0KHVhZGRyLCBmc2hhcmVkLCB2YWwsIHRpbWVvdXQsIHZhbDMpOworCQlyZXQgPSBmdXRleF93YWl0KHVhZGRyLCBmc2hhcmVkLCB2YWwsIHRpbWVvdXQsIHZhbDMsIGNsb2NrcnQpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX1dBS0U6CiAJCXZhbDMgPSBGVVRFWF9CSVRTRVRfTUFUQ0hfQU5ZOwpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggNDdlNjMzNC4uYmRhOWNiOSAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC00NDIsMjIgKzQ0Miw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaHJ0aW1lcl9kZWFjdGl2YXRlKHN0cnVjdCBocnRpbWVyICp0aW1lcikgeyB9CiAjZW5kaWYKIAotLyoKLSAqIENoZWNrLCB3aGV0aGVyIHRoZSB0aW1lciBpcyBvbiB0aGUgY2FsbGJhY2sgcGVuZGluZyBsaXN0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfY2JfcGVuZGluZyhjb25zdCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCi17Ci0JcmV0dXJuIHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfUEVORElORzsKLX0KLQotLyoKLSAqIFJlbW92ZSBhIHRpbWVyIGZyb20gdGhlIGNhbGxiYWNrIHBlbmRpbmcgbGlzdAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9yZW1vdmVfY2JfcGVuZGluZyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCi17Ci0JbGlzdF9kZWxfaW5pdCgmdGltZXItPmNiX2VudHJ5KTsKLX0KLQogLyogSGlnaCByZXNvbHV0aW9uIHRpbWVyIHJlbGF0ZWQgZnVuY3Rpb25zICovCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCkBAIC02NTEsNiArNjM1LDggQEAKIHsKIH0KIAorc3RhdGljIHZvaWQgX19ydW5faHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOworCiAvKgogICogV2hlbiBIaWdoIHJlc29sdXRpb24gdGltZXJzIGFyZSBhY3RpdmUsIHRyeSB0byByZXByb2dyYW0uIE5vdGUsIHRoYXQgaW4gY2FzZQogICogdGhlIHN0YXRlIGhhcyBIUlRJTUVSX1NUQVRFX0NBTExCQUNLIHNldCwgbm8gcmVwcm9ncmFtbWluZyBhbmQgbm8gZXhwaXJ5CkBAIC02NjEsMzEgKzY0NywxNCBAQAogCQkJCQkgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSkKIHsKIAlpZiAoYmFzZS0+Y3B1X2Jhc2UtPmhyZXNfYWN0aXZlICYmIGhydGltZXJfcmVwcm9ncmFtKHRpbWVyLCBiYXNlKSkgewotCi0JCS8qIFRpbWVyIGlzIGV4cGlyZWQsIGFjdCB1cG9uIHRoZSBjYWxsYmFjayBtb2RlICovCi0JCXN3aXRjaCh0aW1lci0+Y2JfbW9kZSkgewotCQljYXNlIEhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFU6Ci0JCWNhc2UgSFJUSU1FUl9DQl9JUlFTQUZFX1VOTE9DS0VEOgotCQkJLyoKLQkJCSAqIFRoaXMgaXMgc29sZWx5IGZvciB0aGUgc2NoZWQgdGljayBlbXVsYXRpb24gd2l0aAotCQkJICogZHluYW1pYyB0aWNrIHN1cHBvcnQgdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90Ci0JCQkgKiByZXN0YXJ0IHRoZSB0aWNrIHJpZ2h0IG9uIHRoZSBlZGdlIGFuZCBlbmQgdXAgd2l0aAotCQkJICogdGhlIHRpY2sgdGltZXIgaW4gdGhlIHNvZnRpcnEgISBUaGUgY2FsbGluZyBzaXRlCi0JCQkgKiB0YWtlcyBjYXJlIG9mIHRoaXMuIEFsc28gdXNlZCBmb3IgaHJ0aW1lciBzbGVlcGVyICEKLQkJCSAqLwotCQkJZGVidWdfaHJ0aW1lcl9kZWFjdGl2YXRlKHRpbWVyKTsKLQkJCXJldHVybiAxOwotCQljYXNlIEhSVElNRVJfQ0JfU09GVElSUToKLQkJCS8qCi0JCQkgKiBNb3ZlIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIHRoZSBzb2Z0aXJxIHBlbmRpbmcgbGlzdCAhCi0JCQkgKi8KLQkJCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5jYl9lbnRyeSwKLQkJCQkgICAgICAmYmFzZS0+Y3B1X2Jhc2UtPmNiX3BlbmRpbmcpOwotCQkJdGltZXItPnN0YXRlID0gSFJUSU1FUl9TVEFURV9QRU5ESU5HOwotCQkJcmV0dXJuIDE7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJfQorCQkvKgorCQkgKiBYWFg6IHJlY3Vyc2lvbiBjaGVjaz8KKwkJICogaHJ0aW1lcl9mb3J3YXJkKCkgc2hvdWxkIHJvdW5kIHVwIHdpdGggdGltZXIgZ3JhbnVsYXJpdHkKKwkJICogc28gdGhhdCB3ZSBuZXZlciBnZXQgaW50byBpbmYgcmVjdXJzaW9uIGhlcmUsCisJCSAqIGl0IGRvZXNuJ3QgZG8gdGhhdCB0aG91Z2gKKwkJICovCisJCV9fcnVuX2hydGltZXIodGltZXIpOworCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03MjQsMTEgKzY5Myw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX3JhaXNlX3NvZnRpcnEodm9pZCkKLXsKLQlyYWlzZV9zb2Z0aXJxKEhSVElNRVJfU09GVElSUSk7Ci19Ci0KICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaHJlc19hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQpAQCAtNzQ3LDcgKzcxMSw2IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9yYWlzZV9zb2Z0aXJxKHZvaWQpIHsgfQogCiAjZW5kaWYgLyogQ09ORklHX0hJR0hfUkVTX1RJTUVSUyAqLwogCkBAIC04OTAsMTAgKzg1Myw3IEBACiAJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgbmV3c3RhdGUsIGludCByZXByb2dyYW0pCiB7Ci0JLyogSGlnaCByZXMuIGNhbGxiYWNrIGxpc3QuIE5PUCBmb3IgIUhJR0hSRVMgKi8KLQlpZiAoaHJ0aW1lcl9jYl9wZW5kaW5nKHRpbWVyKSkKLQkJaHJ0aW1lcl9yZW1vdmVfY2JfcGVuZGluZyh0aW1lcik7Ci0JZWxzZSB7CisJaWYgKHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfRU5RVUVVRUQpIHsKIAkJLyoKIAkJICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlCiAJCSAqIGZpcnN0IGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgpAQCAtOTUzLDcgKzkxMyw3IEBACiB7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwgKm5ld19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCwgcmFpc2U7CisJaW50IHJldDsKIAogCWJhc2UgPSBsb2NrX2hydGltZXJfYmFzZSh0aW1lciwgJmZsYWdzKTsKIApAQCAtOTg4LDI2ICs5NDgsOCBAQAogCWVucXVldWVfaHJ0aW1lcih0aW1lciwgbmV3X2Jhc2UsCiAJCQluZXdfYmFzZS0+Y3B1X2Jhc2UgPT0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcykpOwogCi0JLyoKLQkgKiBUaGUgdGltZXIgbWF5IGJlIGV4cGlyZWQgYW5kIG1vdmVkIHRvIHRoZSBjYl9wZW5kaW5nCi0JICogbGlzdC4gV2UgY2FuIG5vdCByYWlzZSB0aGUgc29mdGlycSB3aXRoIGJhc2UgbG9jayBoZWxkIGR1ZQotCSAqIHRvIGEgcG9zc2libGUgZGVhZGxvY2sgd2l0aCBydW5xdWV1ZSBsb2NrLgotCSAqLwotCXJhaXNlID0gdGltZXItPnN0YXRlID09IEhSVElNRVJfU1RBVEVfUEVORElORzsKLQotCS8qCi0JICogV2UgdXNlIHByZWVtcHRfZGlzYWJsZSB0byBwcmV2ZW50IHRoaXMgdGFzayBmcm9tIG1pZ3JhdGluZyBhZnRlcgotCSAqIHNldHRpbmcgdXAgdGhlIHNvZnRpcnEgYW5kIHJhaXNpbmcgaXQuIE90aGVyd2lzZSwgaWYgbWUgbWlncmF0ZQotCSAqIHdlIHdpbGwgcmFpc2UgdGhlIHNvZnRpcnEgb24gdGhlIHdyb25nIENQVS4KLQkgKi8KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQogCXVubG9ja19ocnRpbWVyX2Jhc2UodGltZXIsICZmbGFncyk7CiAKLQlpZiAocmFpc2UpCi0JCWhydGltZXJfcmFpc2Vfc29mdGlycSgpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9zdGFydF9yYW5nZV9ucyk7CkBAIC0xMTkyLDc1ICsxMTM0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfZ2V0X3Jlcyk7CiAKLXN0YXRpYyB2b2lkIHJ1bl9ocnRpbWVyX3BlbmRpbmcoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlKQotewotCXNwaW5fbG9ja19pcnEoJmNwdV9iYXNlLT5sb2NrKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmY3B1X2Jhc2UtPmNiX3BlbmRpbmcpKSB7Ci0JCWVudW0gaHJ0aW1lcl9yZXN0YXJ0ICgqZm4pKHN0cnVjdCBocnRpbWVyICopOwotCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7Ci0JCWludCByZXN0YXJ0OwotCQlpbnQgZW11bGF0ZV9oYXJkaXJxX2N0eCA9IDA7Ci0KLQkJdGltZXIgPSBsaXN0X2VudHJ5KGNwdV9iYXNlLT5jYl9wZW5kaW5nLm5leHQsCi0JCQkJICAgc3RydWN0IGhydGltZXIsIGNiX2VudHJ5KTsKLQotCQlkZWJ1Z19ocnRpbWVyX2RlYWN0aXZhdGUodGltZXIpOwotCQl0aW1lcl9zdGF0c19hY2NvdW50X2hydGltZXIodGltZXIpOwotCi0JCWZuID0gdGltZXItPmZ1bmN0aW9uOwotCQkvKgotCQkgKiBBIHRpbWVyIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgY2JfcGVuZGluZyBsaXN0Ci0JCSAqIHdoZW4gaXQgd2FzIG1pZ3JhdGVkIGR1cmluZyBhIGNwdS1vZmZsaW5lIG9wZXJhdGlvbi4KLQkJICogRW11bGF0ZSBoYXJkaXJxIGNvbnRleHQgZm9yIHN1Y2ggdGltZXJzLgotCQkgKi8KLQkJaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFUgfHwKLQkJICAgIHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfSVJRU0FGRV9VTkxPQ0tFRCkKLQkJCWVtdWxhdGVfaGFyZGlycV9jdHggPSAxOwotCi0JCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIHRpbWVyLT5iYXNlLCBIUlRJTUVSX1NUQVRFX0NBTExCQUNLLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjcHVfYmFzZS0+bG9jayk7Ci0KLQkJaWYgKHVubGlrZWx5KGVtdWxhdGVfaGFyZGlycV9jdHgpKSB7Ci0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJcmVzdGFydCA9IGZuKHRpbWVyKTsKLQkJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJfSBlbHNlCi0JCQlyZXN0YXJ0ID0gZm4odGltZXIpOwotCi0JCXNwaW5fbG9ja19pcnEoJmNwdV9iYXNlLT5sb2NrKTsKLQotCQl0aW1lci0+c3RhdGUgJj0gfkhSVElNRVJfU1RBVEVfQ0FMTEJBQ0s7Ci0JCWlmIChyZXN0YXJ0ID09IEhSVElNRVJfUkVTVEFSVCkgewotCQkJQlVHX09OKGhydGltZXJfYWN0aXZlKHRpbWVyKSk7Ci0JCQkvKgotCQkJICogRW5xdWV1ZSB0aGUgdGltZXIsIGFsbG93IHJlcHJvZ3JhbW1pbmcgb2YgdGhlIGV2ZW50Ci0JCQkgKiBkZXZpY2UKLQkJCSAqLwotCQkJZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCB0aW1lci0+YmFzZSwgMSk7Ci0JCX0gZWxzZSBpZiAoaHJ0aW1lcl9hY3RpdmUodGltZXIpKSB7Ci0JCQkvKgotCQkJICogSWYgdGhlIHRpbWVyIHdhcyByZWFybWVkIG9uIGFub3RoZXIgQ1BVLCByZXByb2dyYW0KLQkJCSAqIHRoZSBldmVudCBkZXZpY2UuCi0JCQkgKi8KLQkJCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSB0aW1lci0+YmFzZTsKLQotCQkJaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSAmJgotCQkJICAgIGhydGltZXJfcmVwcm9ncmFtKHRpbWVyLCBiYXNlKSkgewotCQkJCS8qCi0JCQkJICogVGltZXIgaXMgZXhwaXJlZC4gVGh1cyBtb3ZlIGl0IGZyb20gdHJlZSB0bwotCQkJCSAqIHBlbmRpbmcgbGlzdCBhZ2Fpbi4KLQkJCQkgKi8KLQkJCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLAotCQkJCQkJIEhSVElNRVJfU1RBVEVfUEVORElORywgMCk7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmdGltZXItPmNiX2VudHJ5LAotCQkJCQkgICAgICAmYmFzZS0+Y3B1X2Jhc2UtPmNiX3BlbmRpbmcpOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmY3B1X2Jhc2UtPmxvY2spOwotfQotCiBzdGF0aWMgdm9pZCBfX3J1bl9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gdGltZXItPmJhc2U7CkBAIC0xMjY4LDI1ICsxMTQxLDIxIEBACiAJZW51bSBocnRpbWVyX3Jlc3RhcnQgKCpmbikoc3RydWN0IGhydGltZXIgKik7CiAJaW50IHJlc3RhcnQ7CiAKKwlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCiAJZGVidWdfaHJ0aW1lcl9kZWFjdGl2YXRlKHRpbWVyKTsKIAlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLCBIUlRJTUVSX1NUQVRFX0NBTExCQUNLLCAwKTsKIAl0aW1lcl9zdGF0c19hY2NvdW50X2hydGltZXIodGltZXIpOwotCiAJZm4gPSB0aW1lci0+ZnVuY3Rpb247Ci0JaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFUgfHwKLQkgICAgdGltZXItPmNiX21vZGUgPT0gSFJUSU1FUl9DQl9JUlFTQUZFX1VOTE9DS0VEKSB7Ci0JCS8qCi0JCSAqIFVzZWQgZm9yIHNjaGVkdWxlciB0aW1lcnMsIGF2b2lkIGxvY2sgaW52ZXJzaW9uIHdpdGgKLQkJICogcnEtPmxvY2sgYW5kIHRhc2tsaXN0X2xvY2suCi0JCSAqCi0JCSAqIFRoZXNlIHRpbWVycyBhcmUgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIGVucXVldWUgZXhwaXJ5Ci0JCSAqIHRoZW1zZWx2ZXMgYW5kIGFyZSBub3QgYWxsb3dlZCB0byBtaWdyYXRlLgotCQkgKi8KLQkJc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKLQkJcmVzdGFydCA9IGZuKHRpbWVyKTsKLQkJc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7Ci0JfSBlbHNlCi0JCXJlc3RhcnQgPSBmbih0aW1lcik7CisKKwkvKgorCSAqIEJlY2F1c2Ugd2UgcnVuIHRpbWVycyBmcm9tIGhhcmRpcnEgY29udGV4dCwgdGhlcmUgaXMgbm8gY2hhbmNlCisJICogdGhleSBnZXQgbWlncmF0ZWQgdG8gYW5vdGhlciBjcHUsIHRoZXJlZm9yZSBpdHMgc2FmZSB0byB1bmxvY2sKKwkgKiB0aGUgdGltZXIgYmFzZS4KKwkgKi8KKwlzcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOworCXJlc3RhcnQgPSBmbih0aW1lcik7CisJc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAKIAkvKgogCSAqIE5vdGU6IFdlIGNsZWFyIHRoZSBDQUxMQkFDSyBiaXQgYWZ0ZXIgZW5xdWV1ZV9ocnRpbWVyIHRvIGF2b2lkCkBAIC0xMzExLDcgKzExODAsNyBAQAogCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2U7CiAJa3RpbWVfdCBleHBpcmVzX25leHQsIG5vdzsKLQlpbnQgaSwgcmFpc2UgPSAwOworCWludCBpOwogCiAJQlVHX09OKCFjcHVfYmFzZS0+aHJlc19hY3RpdmUpOwogCWNwdV9iYXNlLT5ucl9ldmVudHMrKzsKQEAgLTEzNjAsMTYgKzEyMjksNiBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQkvKiBNb3ZlIHNvZnRpcnEgY2FsbGJhY2tzIHRvIHRoZSBwZW5kaW5nIGxpc3QgKi8KLQkJCWlmICh0aW1lci0+Y2JfbW9kZSA9PSBIUlRJTUVSX0NCX1NPRlRJUlEpIHsKLQkJCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLAotCQkJCQkJIEhSVElNRVJfU1RBVEVfUEVORElORywgMCk7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmdGltZXItPmNiX2VudHJ5LAotCQkJCQkgICAgICAmYmFzZS0+Y3B1X2Jhc2UtPmNiX3BlbmRpbmcpOwotCQkJCXJhaXNlID0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJX19ydW5faHJ0aW1lcih0aW1lcik7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKQEAgLTEzODMsMTAgKzEyNDIsNiBAQAogCQlpZiAodGlja19wcm9ncmFtX2V2ZW50KGV4cGlyZXNfbmV4dCwgMCkpCiAJCQlnb3RvIHJldHJ5OwogCX0KLQotCS8qIFJhaXNlIHNvZnRpcnEgPyAqLwotCWlmIChyYWlzZSkKLQkJcmFpc2Vfc29mdGlycShIUlRJTUVSX1NPRlRJUlEpOwogfQogCiAvKioKQEAgLTE0MTMsMTEgKzEyNjgsNiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuX2hydGltZXJfc29mdGlycShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCi17Ci0JcnVuX2hydGltZXJfcGVuZGluZygmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKSk7Ci19Ci0KICNlbmRpZgkvKiBDT05GSUdfSElHSF9SRVNfVElNRVJTICovCiAKIC8qCkBAIC0xNDI5LDggKzEyNzksNiBAQAogICovCiB2b2lkIGhydGltZXJfcnVuX3BlbmRpbmcodm9pZCkKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKLQogCWlmIChocnRpbWVyX2hyZXNfYWN0aXZlKCkpCiAJCXJldHVybjsKIApAQCAtMTQ0NCw4ICsxMjkyLDYgQEAKIAkgKi8KIAlpZiAodGlja19jaGVja19vbmVzaG90X2NoYW5nZSghaHJ0aW1lcl9pc19ocmVzX2VuYWJsZWQoKSkpCiAJCWhydGltZXJfc3dpdGNoX3RvX2hyZXMoKTsKLQotCXJ1bl9ocnRpbWVyX3BlbmRpbmcoY3B1X2Jhc2UpOwogfQogCiAvKgpAQCAtMTQ4MiwxNCArMTMyOCw2IEBACiAJCQkJCWhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NCh0aW1lcikpCiAJCQkJYnJlYWs7CiAKLQkJCWlmICh0aW1lci0+Y2JfbW9kZSA9PSBIUlRJTUVSX0NCX1NPRlRJUlEpIHsKLQkJCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLAotCQkJCQlIUlRJTUVSX1NUQVRFX1BFTkRJTkcsIDApOwotCQkJCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5jYl9lbnRyeSwKLQkJCQkJJmJhc2UtPmNwdV9iYXNlLT5jYl9wZW5kaW5nKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJX19ydW5faHJ0aW1lcih0aW1lcik7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNwdV9iYXNlLT5sb2NrKTsKQEAgLTE1MTYsOSArMTM1NCw2IEBACiB7CiAJc2wtPnRpbWVyLmZ1bmN0aW9uID0gaHJ0aW1lcl93YWtldXA7CiAJc2wtPnRhc2sgPSB0YXNrOwotI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLQlzbC0+dGltZXIuY2JfbW9kZSA9IEhSVElNRVJfQ0JfSVJRU0FGRV9VTkxPQ0tFRDsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9fc2NoZWQgZG9fbmFub3NsZWVwKHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnQsIGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpCkBAIC0xNjU1LDE4ICsxNDkwLDE2IEBACiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspCiAJCWNwdV9iYXNlLT5jbG9ja19iYXNlW2ldLmNwdV9iYXNlID0gY3B1X2Jhc2U7CiAKLQlJTklUX0xJU1RfSEVBRCgmY3B1X2Jhc2UtPmNiX3BlbmRpbmcpOwogCWhydGltZXJfaW5pdF9ocmVzKGNwdV9iYXNlKTsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCi1zdGF0aWMgaW50IG1pZ3JhdGVfaHJ0aW1lcl9saXN0KHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKm9sZF9iYXNlLAotCQkJCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKm5ld19iYXNlLCBpbnQgZGNwdSkKK3N0YXRpYyB2b2lkIG1pZ3JhdGVfaHJ0aW1lcl9saXN0KHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKm9sZF9iYXNlLAorCQkJCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKm5ld19iYXNlKQogewogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKLQlpbnQgcmFpc2UgPSAwOwogCiAJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJm9sZF9iYXNlLT5hY3RpdmUpKSkgewogCQl0aW1lciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKQEAgLTE2NzQsMTggKzE1MDcsNiBAQAogCQlkZWJ1Z19ocnRpbWVyX2RlYWN0aXZhdGUodGltZXIpOwogCiAJCS8qCi0JCSAqIFNob3VsZCBub3QgaGFwcGVuLiBQZXIgQ1BVIHRpbWVycyBzaG91bGQgYmUKLQkJICogY2FuY2VsZWQgX2JlZm9yZV8gdGhlIG1pZ3JhdGlvbiBjb2RlIGlzIGNhbGxlZAotCQkgKi8KLQkJaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfSVJRU0FGRV9QRVJDUFUpIHsKLQkJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIG9sZF9iYXNlLAotCQkJCQkgSFJUSU1FUl9TVEFURV9JTkFDVElWRSwgMCk7Ci0JCQlXQVJOKDEsICJocnRpbWVyICglcCAlcClhY3RpdmUgYnV0IGNwdSAlZCBkZWFkXG4iLAotCQkJICAgICB0aW1lciwgdGltZXItPmZ1bmN0aW9uLCBkY3B1KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKIAkJICogTWFyayBpdCBhcyBTVEFURV9NSUdSQVRFIG5vdCBJTkFDVElWRSBvdGhlcndpc2UgdGhlCiAJCSAqIHRpbWVyIGNvdWxkIGJlIHNlZW4gYXMgIWFjdGl2ZSBhbmQganVzdCB2YW5pc2ggYXdheQogCQkgKiB1bmRlciB1cyBvbiBhbm90aGVyIENQVQpAQCAtMTY5Myw2OSArMTUxNCwzNCBAQAogCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBvbGRfYmFzZSwgSFJUSU1FUl9TVEFURV9NSUdSQVRFLCAwKTsKIAkJdGltZXItPmJhc2UgPSBuZXdfYmFzZTsKIAkJLyoKLQkJICogRW5xdWV1ZSB0aGUgdGltZXIuIEFsbG93IHJlcHJvZ3JhbW1pbmcgb2YgdGhlIGV2ZW50IGRldmljZQorCQkgKiBFbnF1ZXVlIHRoZSB0aW1lcnMgb24gdGhlIG5ldyBjcHUsIGJ1dCBkbyBub3QgcmVwcm9ncmFtIAorCQkgKiB0aGUgdGltZXIgYXMgdGhhdCB3b3VsZCBlbmFibGUgYSBkZWFkbG9jayBiZXR3ZWVuCisJCSAqIGhydGltZXJfZW5xdWV1ZV9yZXByb2dyYW1tKCkgcnVubmluZyB0aGUgdGltZXIgYW5kIHVzIHN0aWxsCisJCSAqIGhvbGRpbmcgYSBuZXN0ZWQgYmFzZSBsb2NrLgorCQkgKgorCQkgKiBJbnN0ZWFkIHdlIHRpY2tsZSB0aGUgaHJ0aW1lciBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIG1pZ3JhdGlvbgorCQkgKiBpcyBkb25lLCB3aGljaCB3aWxsIHJ1biBhbGwgZXhwaXJlZCB0aW1lcnMgYW5kIHJlLXByb2dyYW1tCisJCSAqIHRoZSB0aW1lciBkZXZpY2UuCiAJCSAqLwotCQllbnF1ZXVlX2hydGltZXIodGltZXIsIG5ld19iYXNlLCAxKTsKKwkJZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCBuZXdfYmFzZSwgMCk7CiAKLSNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi0JCS8qCi0JCSAqIEhhcHBlbnMgd2l0aCBoaWdoIHJlcyBlbmFibGVkIHdoZW4gdGhlIHRpbWVyIHdhcwotCQkgKiBhbHJlYWR5IGV4cGlyZWQgYW5kIHRoZSBjYWxsYmFjayBtb2RlIGlzCi0JCSAqIEhSVElNRVJfQ0JfSVJRU0FGRV9VTkxPQ0tFRCAoaHJ0aW1lcl9zbGVlcGVyKS4gVGhlCi0JCSAqIGVucXVldWUgY29kZSBkb2VzIG5vdCBtb3ZlIHRoZW0gdG8gdGhlIHNvZnQgaXJxCi0JCSAqIHBlbmRpbmcgbGlzdCBmb3IgcGVyZm9ybWFuY2UvbGF0ZW5jeSByZWFzb25zLCBidXQKLQkJICogaW4gdGhlIG1pZ3JhdGlvbiBzdGF0ZSwgd2UgbmVlZCB0byBkbyB0aGF0Ci0JCSAqIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBhIHN0YWxlIHRpbWVyLgotCQkgKi8KLQkJaWYgKHRpbWVyLT5zdGF0ZSA9PSBIUlRJTUVSX1NUQVRFX01JR1JBVEUpIHsKLQkJCXRpbWVyLT5zdGF0ZSA9IEhSVElNRVJfU1RBVEVfUEVORElORzsKLQkJCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5jYl9lbnRyeSwKLQkJCQkgICAgICAmbmV3X2Jhc2UtPmNwdV9iYXNlLT5jYl9wZW5kaW5nKTsKLQkJCXJhaXNlID0gMTsKLQkJfQotI2VuZGlmCiAJCS8qIENsZWFyIHRoZSBtaWdyYXRpb24gc3RhdGUgYml0ICovCiAJCXRpbWVyLT5zdGF0ZSAmPSB+SFJUSU1FUl9TVEFURV9NSUdSQVRFOwogCX0KLQlyZXR1cm4gcmFpc2U7CiB9CiAKLSNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi1zdGF0aWMgaW50IG1pZ3JhdGVfaHJ0aW1lcl9wZW5kaW5nKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpvbGRfYmFzZSwKLQkJCQkgICBzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqbmV3X2Jhc2UpCi17Ci0Jc3RydWN0IGhydGltZXIgKnRpbWVyOwotCWludCByYWlzZSA9IDA7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm9sZF9iYXNlLT5jYl9wZW5kaW5nKSkgewotCQl0aW1lciA9IGxpc3RfZW50cnkob2xkX2Jhc2UtPmNiX3BlbmRpbmcubmV4dCwKLQkJCQkgICBzdHJ1Y3QgaHJ0aW1lciwgY2JfZW50cnkpOwotCi0JCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIHRpbWVyLT5iYXNlLCBIUlRJTUVSX1NUQVRFX1BFTkRJTkcsIDApOwotCQl0aW1lci0+YmFzZSA9ICZuZXdfYmFzZS0+Y2xvY2tfYmFzZVt0aW1lci0+YmFzZS0+aW5kZXhdOwotCQlsaXN0X2FkZF90YWlsKCZ0aW1lci0+Y2JfZW50cnksICZuZXdfYmFzZS0+Y2JfcGVuZGluZyk7Ci0JCXJhaXNlID0gMTsKLQl9Ci0JcmV0dXJuIHJhaXNlOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWlncmF0ZV9ocnRpbWVyX3BlbmRpbmcoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKm9sZF9iYXNlLAotCQkJCSAgIHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpuZXdfYmFzZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBtaWdyYXRlX2hydGltZXJzKGludCBjcHUpCitzdGF0aWMgaW50IG1pZ3JhdGVfaHJ0aW1lcnMoaW50IHNjcHUpCiB7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKm9sZF9iYXNlLCAqbmV3X2Jhc2U7Ci0JaW50IGksIHJhaXNlID0gMDsKKwlpbnQgZGNwdSwgaTsKIAotCUJVR19PTihjcHVfb25saW5lKGNwdSkpOwotCW9sZF9iYXNlID0gJnBlcl9jcHUoaHJ0aW1lcl9iYXNlcywgY3B1KTsKKwlCVUdfT04oY3B1X29ubGluZShzY3B1KSk7CisJb2xkX2Jhc2UgPSAmcGVyX2NwdShocnRpbWVyX2Jhc2VzLCBzY3B1KTsKIAluZXdfYmFzZSA9ICZnZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIAotCXRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGNwdSk7CisJZGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKHNjcHUpOwogCS8qCiAJICogVGhlIGNhbGxlciBpcyBnbG9iYWxseSBzZXJpYWxpemVkIGFuZCBub2JvZHkgZWxzZQogCSAqIHRha2VzIHR3byBsb2NrcyBhdCBvbmNlLCBkZWFkbG9jayBpcyBub3QgcG9zc2libGUuCkBAIC0xNzY0LDQxICsxNTUwLDQ3IEBACiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7Ci0JCWlmIChtaWdyYXRlX2hydGltZXJfbGlzdCgmb2xkX2Jhc2UtPmNsb2NrX2Jhc2VbaV0sCi0JCQkJCSAmbmV3X2Jhc2UtPmNsb2NrX2Jhc2VbaV0sIGNwdSkpCi0JCQlyYWlzZSA9IDE7CisJCW1pZ3JhdGVfaHJ0aW1lcl9saXN0KCZvbGRfYmFzZS0+Y2xvY2tfYmFzZVtpXSwKKwkJCQkgICAgICZuZXdfYmFzZS0+Y2xvY2tfYmFzZVtpXSk7CiAJfQogCi0JaWYgKG1pZ3JhdGVfaHJ0aW1lcl9wZW5kaW5nKG9sZF9iYXNlLCBuZXdfYmFzZSkpCi0JCXJhaXNlID0gMTsKLQogCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJcHV0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CiAKLQlpZiAocmFpc2UpCi0JCWhydGltZXJfcmFpc2Vfc29mdGlycSgpOworCXJldHVybiBkY3B1OwogfQorCitzdGF0aWMgdm9pZCB0aWNrbGVfdGltZXJzKHZvaWQgKmFyZykKK3sKKwlocnRpbWVyX3BlZWtfYWhlYWRfdGltZXJzKCk7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIGludCBfX2NwdWluaXQgaHJ0aW1lcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisJaW50IHNjcHUgPSAobG9uZyloY3B1OwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCWluaXRfaHJ0aW1lcnNfY3B1KGNwdSk7CisJCWluaXRfaHJ0aW1lcnNfY3B1KHNjcHUpOwogCQlicmVhazsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWNhc2UgQ1BVX0RFQUQ6CiAJY2FzZSBDUFVfREVBRF9GUk9aRU46Ci0JCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0NQVV9ERUFELCAmY3B1KTsKLQkJbWlncmF0ZV9ocnRpbWVycyhjcHUpOworCXsKKwkJaW50IGRjcHU7CisKKwkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQ1BVX0RFQUQsICZzY3B1KTsKKwkJZGNwdSA9IG1pZ3JhdGVfaHJ0aW1lcnMoc2NwdSk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShkY3B1LCB0aWNrbGVfdGltZXJzLCBOVUxMLCAwKTsKIAkJYnJlYWs7CisJfQogI2VuZGlmCiAKIAlkZWZhdWx0OgpAQCAtMTgxNyw5ICsxNjA5LDYgQEAKIAlocnRpbWVyX2NwdV9ub3RpZnkoJmhydGltZXJzX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKIAkJCSAgKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaHJ0aW1lcnNfbmIpOwotI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLQlvcGVuX3NvZnRpcnEoSFJUSU1FUl9TT0ZUSVJRLCBydW5faHJ0aW1lcl9zb2Z0aXJxKTsKLSNlbmRpZgogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvTWFrZWZpbGUgYi9rZXJuZWwvaXJxL01ha2VmaWxlCmluZGV4IDY4MWM1MmQuLjRkZDViMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvTWFrZWZpbGUKKysrIGIva2VybmVsL2lycS9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAKIG9iai0kKENPTkZJR19HRU5FUklDX0lSUV9QUk9CRSkgKz0gYXV0b3Byb2JlLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSArPSBtaWdyYXRpb24ubworb2JqLSQoQ09ORklHX05VTUFfTUlHUkFURV9JUlFfREVTQykgKz0gbnVtYV9taWdyYXRlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCmluZGV4IGNjMGY3MzIuLjY1MGNlNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKKysrIGIva2VybmVsL2lycS9hdXRvcHJvYmUuYwpAQCAtNDAsNiArNDAsOSBAQAogCSAqIGZsdXNoIHN1Y2ggYSBsb25nc3RhbmRpbmcgaXJxIGJlZm9yZSBjb25zaWRlcmluZyBpdCBhcyBzcHVyaW91cy4KIAkgKi8KIAlmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGksIGRlc2MpIHsKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCWlmICghZGVzYy0+YWN0aW9uICYmICEoZGVzYy0+c3RhdHVzICYgSVJRX05PUFJPQkUpKSB7CiAJCQkvKgpAQCAtNjgsNiArNzEsOSBAQAogCSAqIGhhcHBlbmVkIGluIHRoZSBwcmV2aW91cyBzdGFnZSwgaXQgbWF5IGhhdmUgbWFza2VkIGl0c2VsZikKIAkgKi8KIAlmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGksIGRlc2MpIHsKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCWlmICghZGVzYy0+YWN0aW9uICYmICEoZGVzYy0+c3RhdHVzICYgSVJRX05PUFJPQkUpKSB7CiAJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0FVVE9ERVRFQ1QgfCBJUlFfV0FJVElORzsKQEAgLTg2LDYgKzkyLDkgQEAKIAkgKiBOb3cgZmlsdGVyIG91dCBhbnkgb2J2aW91c2x5IHNwdXJpb3VzIGludGVycnVwdHMKIAkgKi8KIAlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKQEAgLTEyNCw2ICsxMzMsOSBAQAogCWludCBpOwogCiAJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgeworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKwogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCkBAIC0xNjYsNiArMTc4LDkgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgeworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKwogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDEwYjUwOTIuLjZlYjNjNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0yNCw5ICsyNCwxMCBAQAogICovCiB2b2lkIGR5bmFtaWNfaXJxX2luaXQodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJaWYgKCFkZXNjKSB7CiAJCVdBUk4oMSwgS0VSTl9FUlIgIlRyeWluZyB0byBpbml0aWFsaXplIGludmFsaWQgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybjsKQEAgLTEyNCw2ICsxMjUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwl0eXBlICY9IElSUV9UWVBFX1NFTlNFX01BU0s7CiAJaWYgKHR5cGUgPT0gSVJRX1RZUEVfTk9ORSkKIAkJcmV0dXJuIDA7CiAKQEAgLTM1Miw2ICszNTQsNyBAQAogCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKKwlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKIAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQyOSw2ICs0MzIsNyBAQAogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CiBvdXQ6CiAJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CiAKIAlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CkBAIC00NjUsMTIgKzQ2OSwxNCBAQAogCQkgICAgIWRlc2MtPmFjdGlvbikpIHsKIAkJZGVzYy0+c3RhdHVzIHw9IChJUlFfUEVORElORyB8IElSUV9NQVNLRUQpOwogCQltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKKwkJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAkvKiBTdGFydCBoYW5kbGluZyB0aGUgaXJxICovCiAJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CiAKIAkvKiBNYXJrIHRoZSBJUlEgY3VycmVudGx5IGluIHByb2dyZXNzLiovCiAJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOwpAQCAtNTMxLDggKzUzNywxMCBAQAogCWlmICghbm9pcnFkZWJ1ZykKIAkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKIAotCWlmIChkZXNjLT5jaGlwLT5lb2kpCisJaWYgKGRlc2MtPmNoaXAtPmVvaSkgewogCQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKwkJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CisJfQogfQogCiB2b2lkCkBAIC01NjcsOCArNTc1LDEwIEBACiAKIAkvKiBVbmluc3RhbGw/ICovCiAJaWYgKGhhbmRsZSA9PSBoYW5kbGVfYmFkX2lycSkgewotCQlpZiAoZGVzYy0+Y2hpcCAhPSAmbm9faXJxX2NoaXApCisJCWlmIChkZXNjLT5jaGlwICE9ICZub19pcnFfY2hpcCkgewogCQkJbWFza19hY2tfaXJxKGRlc2MsIGlycSk7CisJCQlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKKwkJfQogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOwogCQlkZXNjLT5kZXB0aCA9IDE7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggYzgxNWI0Mi4uNjQ5MjQwMCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xNSw5ICsxNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KIAogI2luY2x1ZGUgImludGVybmFscy5oIgogCisvKgorICogbG9ja2RlcDogd2Ugd2FudCB0byBoYW5kbGUgYWxsIGlycV9kZXNjIGxvY2tzIGFzIGEgc2luZ2xlIGxvY2stY2xhc3M6CisgKi8KK3N0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfZGVzY19sb2NrX2NsYXNzOworCiAvKioKICAqIGhhbmRsZV9iYWRfaXJxIC0gaGFuZGxlIHNwdXJpb3VzIGFuZCB1bmhhbmRsZWQgaXJxcwogICogQGlycTogICAgICAgdGhlIGludGVycnVwdCBudW1iZXIKQEAgLTQ5LDYgKzU2LDE1NSBAQAogaW50IG5yX2lycXMgPSBOUl9JUlFTOwogRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CiAKK3ZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCit7Cit9CisKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQorc3RhdGljIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY19pbml0ID0geworCS5pcnEJICAgID0gLTEsCisJLnN0YXR1cwkgICAgPSBJUlFfRElTQUJMRUQsCisJLmNoaXAJICAgID0gJm5vX2lycV9jaGlwLAorCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCisJLmRlcHRoICAgICAgPSAxLAorCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaXJxX2Rlc2NfaW5pdC5sb2NrKSwKKyNpZmRlZiBDT05GSUdfU01QCisJLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKKyNlbmRpZgorfTsKKwordm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpCit7CisJdW5zaWduZWQgbG9uZyBieXRlczsKKwljaGFyICpwdHI7CisJaW50IG5vZGU7CisKKwkvKiBDb21wdXRlIGhvdyBtYW55IGJ5dGVzIHdlIG5lZWQgcGVyIGlycSBhbmQgYWxsb2NhdGUgdGhlbSAqLworCWJ5dGVzID0gbnIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKKworCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCXB0ciA9IGt6YWxsb2Nfbm9kZShieXRlcywgR0ZQX0FUT01JQywgbm9kZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgYWxsb2Mga3N0YXRfaXJxcyBvbiBjcHUgJWQgbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKKworCWlmIChwdHIpCisJCWRlc2MtPmtzdGF0X2lycXMgPSAodW5zaWduZWQgaW50ICopcHRyOworfQorCit2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmNoX2luaXRfY2hpcF9kYXRhKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSkKK3sKK30KKworc3RhdGljIHZvaWQgaW5pdF9vbmVfaXJxX2Rlc2MoaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQoreworCW1lbWNweShkZXNjLCAmaXJxX2Rlc2NfaW5pdCwgc2l6ZW9mKHN0cnVjdCBpcnFfZGVzYykpOworCWRlc2MtPmlycSA9IGlycTsKKyNpZmRlZiBDT05GSUdfU01QCisJZGVzYy0+Y3B1ID0gY3B1OworI2VuZGlmCisJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2MtPmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwlpbml0X2tzdGF0X2lycXMoZGVzYywgY3B1LCBucl9jcHVfaWRzKTsKKwlpZiAoIWRlc2MtPmtzdGF0X2lycXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jIGtzdGF0X2lycXNcbiIpOworCQlCVUdfT04oMSk7CisJfQorCWFyY2hfaW5pdF9jaGlwX2RhdGEoZGVzYywgY3B1KTsKK30KKworLyoKKyAqIFByb3RlY3QgdGhlIHNwYXJzZV9pcnFzOgorICovCitERUZJTkVfU1BJTkxPQ0soc3BhcnNlX2lycV9sb2NrKTsKKworc3RydWN0IGlycV9kZXNjICppcnFfZGVzY19wdHJzW05SX0lSUVNdIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NfbGVnYWN5W05SX0lSUVNfTEVHQUNZXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKKwlbMCAuLi4gTlJfSVJRU19MRUdBQ1ktMV0gPSB7CisJCS5pcnEJICAgID0gLTEsCisJCS5zdGF0dXMJICAgID0gSVJRX0RJU0FCTEVELAorCQkuY2hpcAkgICAgPSAmbm9faXJxX2NoaXAsCisJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCisJCS5kZXB0aAkgICAgPSAxLAorCQkubG9jawkgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpcnFfZGVzY19pbml0LmxvY2spLAorI2lmZGVmIENPTkZJR19TTVAKKwkJLmFmZmluaXR5ICAgPSBDUFVfTUFTS19BTEwKKyNlbmRpZgorCX0KK307CisKKy8qIEZJWE1FOiB1c2UgYm9vdG1lbSBhbGxvYyAuLi4qLworc3RhdGljIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2xlZ2FjeVtOUl9JUlFTX0xFR0FDWV1bTlJfQ1BVU107CisKK3ZvaWQgX19pbml0IGVhcmx5X2lycV9pbml0KHZvaWQpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBsZWdhY3lfY291bnQ7CisJaW50IGk7CisKKwlkZXNjID0gaXJxX2Rlc2NfbGVnYWN5OworCWxlZ2FjeV9jb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2NfbGVnYWN5KTsKKworCWZvciAoaSA9IDA7IGkgPCBsZWdhY3lfY291bnQ7IGkrKykgeworCQlkZXNjW2ldLmlycSA9IGk7CisJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGtzdGF0X2lycXNfbGVnYWN5W2ldOworCisJCWlycV9kZXNjX3B0cnNbaV0gPSBkZXNjICsgaTsKKwl9CisKKwlmb3IgKGkgPSBsZWdhY3lfY291bnQ7IGkgPCBOUl9JUlFTOyBpKyspCisJCWlycV9kZXNjX3B0cnNbaV0gPSBOVUxMOworCisJYXJjaF9lYXJseV9pcnFfaW5pdCgpOworfQorCitzdHJ1Y3QgaXJxX2Rlc2MgKmlycV90b19kZXNjKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIChpcnEgPCBOUl9JUlFTKSA/IGlycV9kZXNjX3B0cnNbaXJxXSA6IE5VTEw7Cit9CisKK3N0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5vZGU7CisKKwlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXJxID49IE5SX0lSUVMgaW4gaXJxX3RvX2Rlc2NfYWxsb2M6ICVkICVkXG4iLAorCQkJCWlycSwgTlJfSVJRUyk7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWRlc2MgPSBpcnFfZGVzY19wdHJzW2lycV07CisJaWYgKGRlc2MpCisJCXJldHVybiBkZXNjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOworCisJLyogV2UgaGF2ZSB0byBjaGVjayBpdCB0byBhdm9pZCByYWNlcyB3aXRoIGFub3RoZXIgQ1BVICovCisJZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKKwlpZiAoZGVzYykKKwkJZ290byBvdXRfdW5sb2NrOworCisJbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJZGVzYyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDLCBub2RlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICBhbGxvYyBpcnFfZGVzYyBmb3IgJWQgb24gY3B1ICVkIG5vZGUgJWRcbiIsCisJCSBpcnEsIGNwdSwgbm9kZSk7CisJaWYgKCFkZXNjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfZGVzY1xuIik7CisJCUJVR19PTigxKTsKKwl9CisJaW5pdF9vbmVfaXJxX2Rlc2MoaXJxLCBkZXNjLCBjcHUpOworCisJaXJxX2Rlc2NfcHRyc1tpcnFdID0gZGVzYzsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBkZXNjOworfQorCisjZWxzZQorCiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7CiAJWzAgLi4uIE5SX0lSUVMtMV0gPSB7CiAJCS5zdGF0dXMgPSBJUlFfRElTQUJMRUQsCkBAIC02Miw2ICsyMTgsOCBAQAogCX0KIH07CiAKKyNlbmRpZgorCiAvKgogICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPwogICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgpAQCAtMTc5LDggKzMzNywxMSBAQAogCQkvKgogCQkgKiBObyBsb2NraW5nIHJlcXVpcmVkIGZvciBDUFUtbG9jYWwgaW50ZXJydXB0czoKIAkJICovCi0JCWlmIChkZXNjLT5jaGlwLT5hY2spCisJCWlmIChkZXNjLT5jaGlwLT5hY2spIHsKIAkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQkJLyogZ2V0IG5ldyBvbmUgKi8KKwkJCWRlc2MgPSBpcnFfcmVtYXBfdG9fZGVzYyhpcnEsIGRlc2MpOworCQl9CiAJCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkgewogCQkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCBkZXNjLT5hY3Rpb24pOwogCQkJaWYgKCFub2lycWRlYnVnKQpAQCAtMTkxLDggKzM1MiwxMCBAQAogCX0KIAogCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JaWYgKGRlc2MtPmNoaXAtPmFjaykKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKSB7CiAJCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCQlkZXNjID0gaXJxX3JlbWFwX3RvX2Rlc2MoaXJxLCBkZXNjKTsKKwl9CiAJLyoKIAkgKiBSRVBMQVkgaXMgd2hlbiBMaW51eCByZXNlbmRzIGFuIElSUSB0aGF0IHdhcyBkcm9wcGVkIGVhcmxpZXIKIAkgKiBXQUlUSU5HIGlzIHVzZWQgYnkgcHJvYmUgdG8gbWFyayBpcnFzIHRoYXQgYXJlIGJlaW5nIHRlc3RlZApAQCAtMjU5LDE5ICs0MjIsMjUgQEAKIH0KICNlbmRpZgogCi0KLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLS8qCi0gKiBsb2NrZGVwOiB3ZSB3YW50IHRvIGhhbmRsZSBhbGwgaXJxX2Rlc2MgbG9ja3MgYXMgYSBzaW5nbGUgbG9jay1jbGFzczoKLSAqLwotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfZGVzY19sb2NrX2NsYXNzOwotCiB2b2lkIGVhcmx5X2luaXRfaXJxX2xvY2tfY2xhc3Modm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2MtPmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQordW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlyZXR1cm4gZGVzYy0+a3N0YXRfaXJxc1tjcHVdOwogfQogI2VuZGlmCitFWFBPUlRfU1lNQk9MKGtzdGF0X2lycXNfY3B1KTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggNjRjMWM3Mi4uZTZkMGE0MyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0xMyw2ICsxMywxMSBAQAogZXh0ZXJuIGludCBfX2lycV9zZXRfdHJpZ2dlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCitleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CitleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpOworZXh0ZXJuIHNwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOworZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2NfcHRyc1tOUl9JUlFTXTsKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA4MDFhZGRkLi41NDBmNmM0IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTM3MCwxNiArMzcwLDE4IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJldCA9IGNoaXAtPnNldF90eXBlKGlycSwgZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7CisJLyogY2FsbGVyIG1hc2tlZCBvdXQgYWxsIGV4Y2VwdCB0cmlnZ2VyIG1vZGUgZmxhZ3MgKi8KKwlyZXQgPSBjaGlwLT5zZXRfdHlwZShpcnEsIGZsYWdzKTsKIAogCWlmIChyZXQpCiAJCXByX2Vycigic2V0dGluZyB0cmlnZ2VyIG1vZGUgJWQgZm9yIGlycSAldSBmYWlsZWQgKCVwRilcbiIsCi0JCQkJKGludCkoZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyksCi0JCQkJaXJxLCBjaGlwLT5zZXRfdHlwZSk7CisJCQkJKGludClmbGFncywgaXJxLCBjaGlwLT5zZXRfdHlwZSk7CiAJZWxzZSB7CisJCWlmIChmbGFncyAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKKwkJCWZsYWdzIHw9IElSUV9MRVZFTDsKIAkJLyogbm90ZSB0aGF0IElSUUZfVFJJR0dFUl9NQVNLID09IElSUV9UWVBFX1NFTlNFX01BU0sgKi8KLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfVFlQRV9TRU5TRV9NQVNLOwotCQlkZXNjLT5zdGF0dXMgfD0gZmxhZ3MgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCQlkZXNjLT5zdGF0dXMgJj0gfihJUlFfTEVWRUwgfCBJUlFfVFlQRV9TRU5TRV9NQVNLKTsKKwkJZGVzYy0+c3RhdHVzIHw9IGZsYWdzOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NTksNyArNDYxLDggQEAKIAogCQkvKiBTZXR1cCB0aGUgdHlwZSAobGV2ZWwsIGVkZ2UgcG9sYXJpdHkpIGlmIGNvbmZpZ3VyZWQ6ICovCiAJCWlmIChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spIHsKLQkJCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgbmV3LT5mbGFncyk7CisJCQlyZXQgPSBfX2lycV9zZXRfdHJpZ2dlcihkZXNjLCBpcnEsCisJCQkJCW5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7CiAKIAkJCWlmIChyZXQpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC02NzMsNiArNjc2LDE4IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCByZXR2YWw7CiAKKwkvKgorCSAqIGhhbmRsZV9JUlFfZXZlbnQoKSBhbHdheXMgaWdub3JlcyBJUlFGX0RJU0FCTEVEIGV4Y2VwdCBmb3IKKwkgKiB0aGUgX2ZpcnN0XyBpcnFhY3Rpb24gKHNpZ2gpLiAgVGhhdCBjYW4gY2F1c2Ugb29wc2luZywgYnV0CisJICogdGhlIGJlaGF2aW9yIGlzIGNsYXNzaWZpZWQgYXMgIndpbGwgbm90IGZpeCIgc28gd2UgbmVlZCB0bworCSAqIHN0YXJ0IG51ZGdpbmcgZHJpdmVycyBhd2F5IGZyb20gdXNpbmcgdGhhdCBpZGlvbS4KKwkgKi8KKwlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQorCQkJPT0gKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKQorCQlwcl93YXJuaW5nKCJJUlEgJWQvJXM6IElSUUZfRElTQUJMRUQgaXMgbm90ICIKKwkJCQkiZ3VhcmFudGVlZCBvbiBzaGFyZWQgSVJRc1xuIiwKKwkJCQlpcnEsIGRldm5hbWUpOworCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAkvKgogCSAqIExvY2tkZXAgd2FudHMgYXRvbWljIGludGVycnVwdCBoYW5kbGVyczoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWMzNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIE5VTUEgaXJxLWRlc2MgbWlncmF0aW9uIGNvZGUKKyAqCisgKiBNaWdyYXRlIElSUSBkYXRhIHN0cnVjdHVyZXMgKGlycV9kZXNjLCBjaGlwX2RhdGEsIGV0Yy4pIG92ZXIgdG8KKyAqIHRoZSBuZXcgImhvbWUgbm9kZSIgb2YgdGhlIElSUS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKworI2luY2x1ZGUgImludGVybmFscy5oIgorCitzdGF0aWMgdm9pZCBpbml0X2NvcHlfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLAorCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkJIGludCBjcHUsIGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nIGJ5dGVzOworCisJaW5pdF9rc3RhdF9pcnFzKGRlc2MsIGNwdSwgbnIpOworCisJaWYgKGRlc2MtPmtzdGF0X2lycXMgIT0gb2xkX2Rlc2MtPmtzdGF0X2lycXMpIHsKKwkJLyogQ29tcHV0ZSBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHBlciBpcnEgYW5kIGFsbG9jYXRlIHRoZW0gKi8KKwkJYnl0ZXMgPSBuciAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworCisJCW1lbWNweShkZXNjLT5rc3RhdF9pcnFzLCBvbGRfZGVzYy0+a3N0YXRfaXJxcywgYnl0ZXMpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpZiAob2xkX2Rlc2MtPmtzdGF0X2lycXMgPT0gZGVzYy0+a3N0YXRfaXJxcykKKwkJcmV0dXJuOworCisJa2ZyZWUob2xkX2Rlc2MtPmtzdGF0X2lycXMpOworCW9sZF9kZXNjLT5rc3RhdF9pcnFzID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jb3B5X29uZV9pcnFfZGVzYyhpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLAorCQkgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQoreworCW1lbWNweShkZXNjLCBvbGRfZGVzYywgc2l6ZW9mKHN0cnVjdCBpcnFfZGVzYykpOworCWRlc2MtPmNwdSA9IGNwdTsKKwlsb2NrZGVwX3NldF9jbGFzcygmZGVzYy0+bG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOworCWluaXRfY29weV9rc3RhdF9pcnFzKG9sZF9kZXNjLCBkZXNjLCBjcHUsIG5yX2NwdV9pZHMpOworCWFyY2hfaW5pdF9jb3B5X2NoaXBfZGF0YShvbGRfZGVzYywgZGVzYywgY3B1KTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9vbmVfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpvbGRfZGVzYywgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWZyZWVfa3N0YXRfaXJxcyhvbGRfZGVzYywgZGVzYyk7CisJYXJjaF9mcmVlX2NoaXBfZGF0YShvbGRfZGVzYywgZGVzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgKl9fcmVhbF9tb3ZlX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqb2xkX2Rlc2MsCisJCQkJCQlpbnQgY3B1KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5vZGU7CisKKwlpcnEgPSBvbGRfZGVzYy0+aXJxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOworCisJLyogV2UgaGF2ZSB0byBjaGVjayBpdCB0byBhdm9pZCByYWNlcyB3aXRoIGFub3RoZXIgQ1BVICovCisJZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKKworCWlmIChkZXNjICYmIG9sZF9kZXNjICE9IGRlc2MpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKwlkZXNjID0ga3phbGxvY19ub2RlKHNpemVvZigqZGVzYyksIEdGUF9BVE9NSUMsIG5vZGUpOworCXByaW50ayhLRVJOX0RFQlVHICIgIG1vdmUgaXJxX2Rlc2MgZm9yICVkIHRvIGNwdSAlZCBub2RlICVkXG4iLAorCQkgaXJxLCBjcHUsIG5vZGUpOworCWlmICghZGVzYykgeworCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgZ2V0IG5ldyBpcnFfZGVzYyBmb3IgbW92aW5nXG4iKTsKKwkJLyogc3RpbGwgdXNlIG9sZCBvbmUgKi8KKwkJZGVzYyA9IG9sZF9kZXNjOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWluaXRfY29weV9vbmVfaXJxX2Rlc2MoaXJxLCBvbGRfZGVzYywgZGVzYywgY3B1KTsKKworCWlycV9kZXNjX3B0cnNbaXJxXSA9IGRlc2M7CisKKwkvKiBmcmVlIHRoZSBvbGQgb25lICovCisJZnJlZV9vbmVfaXJxX2Rlc2Mob2xkX2Rlc2MsIGRlc2MpOworCWtmcmVlKG9sZF9kZXNjKTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBkZXNjOworfQorCitzdHJ1Y3QgaXJxX2Rlc2MgKm1vdmVfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1KQoreworCWludCBvbGRfY3B1OworCWludCBub2RlLCBvbGRfbm9kZTsKKworCS8qIHRob3NlIGFsbCBzdGF0aWMsIGRvIG1vdmUgdGhlbSAqLworCWlmIChkZXNjLT5pcnEgPCBOUl9JUlFTX0xFR0FDWSkKKwkJcmV0dXJuIGRlc2M7CisKKwlvbGRfY3B1ID0gZGVzYy0+Y3B1OworCXByaW50ayhLRVJOX0RFQlVHCisJCSAidHJ5IHRvIG1vdmUgaXJxX2Rlc2MgZnJvbSBjcHUgJWQgdG8gJWRcbiIsIG9sZF9jcHUsIGNwdSk7CisJaWYgKG9sZF9jcHUgIT0gY3B1KSB7CisJCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCQlvbGRfbm9kZSA9IGNwdV90b19ub2RlKG9sZF9jcHUpOworCQlpZiAob2xkX25vZGUgIT0gbm9kZSkKKwkJCWRlc2MgPSBfX3JlYWxfbW92ZV9pcnFfZGVzYyhkZXNjLCBjcHUpOworCQllbHNlCisJCQlkZXNjLT5jcHUgPSBjcHU7CisJfQorCisJcmV0dXJuIGRlc2M7Cit9CisKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggZDI1N2U3ZC4uZjZiMzQ0MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTI0Myw3ICsyNDMsMTEgQEAKIAkvKgogCSAqIENyZWF0ZSBlbnRyaWVzIGZvciBhbGwgZXhpc3RpbmcgSVJRcy4KIAkgKi8KLQlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCiAJCXJlZ2lzdGVyX2lycV9wcm9jKGlycSwgZGVzYyk7CisJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggZGQzNjRjMS4uMzczODEwNyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtOTEsNiArOTEsOSBAQAogCWludCBpLCBvayA9IDA7CiAKIAlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOworCiAJCWlmICghaSkKIAkJCSBjb250aW51ZTsKIApAQCAtMTEyLDYgKzExNSw4IEBACiAJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCisJCWlmICghZGVzYykKKwkJCWNvbnRpbnVlOwogCQlpZiAoIWkpCiAJCQkgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDc0YjE4NzguLjA2YjBjMzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMTM3LDE2ICsxMzcsMTYgQEAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHNbTUFYX0xPQ0tERVBfS0VZU10sIGxvY2tfc3RhdHMpOwogCi1zdGF0aWMgaW50IGxvY2tfY29udGVudGlvbl9wb2ludChzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsIHVuc2lnbmVkIGxvbmcgaXApCitzdGF0aWMgaW50IGxvY2tfcG9pbnQodW5zaWduZWQgbG9uZyBwb2ludHNbXSwgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsYXNzLT5jb250ZW50aW9uX3BvaW50KTsgaSsrKSB7Ci0JCWlmIChjbGFzcy0+Y29udGVudGlvbl9wb2ludFtpXSA9PSAwKSB7Ci0JCQljbGFzcy0+Y29udGVudGlvbl9wb2ludFtpXSA9IGlwOworCWZvciAoaSA9IDA7IGkgPCBMT0NLU1RBVF9QT0lOVFM7IGkrKykgeworCQlpZiAocG9pbnRzW2ldID09IDApIHsKKwkJCXBvaW50c1tpXSA9IGlwOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGNsYXNzLT5jb250ZW50aW9uX3BvaW50W2ldID09IGlwKQorCQlpZiAocG9pbnRzW2ldID09IGlwKQogCQkJYnJlYWs7CiAJfQogCkBAIC0xODYsNiArMTg2LDkgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdHMuY29udGVudGlvbl9wb2ludCk7IGkrKykKIAkJCXN0YXRzLmNvbnRlbnRpb25fcG9pbnRbaV0gKz0gcGNzLT5jb250ZW50aW9uX3BvaW50W2ldOwogCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXRzLmNvbnRlbmRpbmdfcG9pbnQpOyBpKyspCisJCQlzdGF0cy5jb250ZW5kaW5nX3BvaW50W2ldICs9IHBjcy0+Y29udGVuZGluZ19wb2ludFtpXTsKKwogCQlsb2NrX3RpbWVfYWRkKCZwY3MtPnJlYWRfd2FpdHRpbWUsICZzdGF0cy5yZWFkX3dhaXR0aW1lKTsKIAkJbG9ja190aW1lX2FkZCgmcGNzLT53cml0ZV93YWl0dGltZSwgJnN0YXRzLndyaXRlX3dhaXR0aW1lKTsKIApAQCAtMjEwLDYgKzIxMyw3IEBACiAJCW1lbXNldChjcHVfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cykpOwogCX0KIAltZW1zZXQoY2xhc3MtPmNvbnRlbnRpb25fcG9pbnQsIDAsIHNpemVvZihjbGFzcy0+Y29udGVudGlvbl9wb2ludCkpOworCW1lbXNldChjbGFzcy0+Y29udGVuZGluZ19wb2ludCwgMCwgc2l6ZW9mKGNsYXNzLT5jb250ZW5kaW5nX3BvaW50KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqZ2V0X2xvY2tfc3RhdHMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQpAQCAtMjg4LDE0ICsyOTIsMTIgQEAKIHsKIAljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbisrOwogfQotCiBFWFBPUlRfU1lNQk9MKGxvY2tkZXBfb2ZmKTsKIAogdm9pZCBsb2NrZGVwX29uKHZvaWQpCiB7CiAJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24tLTsKIH0KLQogRVhQT1JUX1NZTUJPTChsb2NrZGVwX29uKTsKIAogLyoKQEAgLTU3Nyw3ICs1NzksOCBAQAogLyoKICAqIHByaW50ayBhbGwgbG9jayBkZXBlbmRlbmNpZXMgc3RhcnRpbmcgYXQgPGVudHJ5PjoKICAqLwotc3RhdGljIHZvaWQgcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBpbnQgZGVwdGgpCitzdGF0aWMgdm9pZCBfX3VzZWQKK3ByaW50X2xvY2tfZGVwZW5kZW5jaWVzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgaW50IGRlcHRoKQogewogCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OwogCkBAIC0yNTA5LDcgKzI1MTIsNiBAQAogCWlmIChzdWJjbGFzcykKIAkJcmVnaXN0ZXJfbG9ja19jbGFzcyhsb2NrLCBzdWJjbGFzcywgMSk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tkZXBfaW5pdF9tYXApOwogCiAvKgpAQCAtMjY5MCw4ICsyNjkyLDkgQEAKIH0KIAogc3RhdGljIGludAotX19sb2NrX3NldF9zdWJjbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssCi0JCSAgICB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsIHVuc2lnbmVkIGxvbmcgaXApCitfX2xvY2tfc2V0X2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCisJCSB1bnNpZ25lZCBsb25nIGlwKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssICpwcmV2X2hsb2NrOwpAQCAtMjcxOCw2ICsyNzIxLDcgQEAKIAlyZXR1cm4gcHJpbnRfdW5sb2NrX2luYmFsYW5jZV9idWcoY3VyciwgbG9jaywgaXApOwogCiBmb3VuZF9pdDoKKwlsb2NrZGVwX2luaXRfbWFwKGxvY2ssIG5hbWUsIGtleSwgMCk7CiAJY2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIHN1YmNsYXNzLCAwKTsKIAlobG9jay0+Y2xhc3NfaWR4ID0gY2xhc3MgLSBsb2NrX2NsYXNzZXMgKyAxOwogCkBAIC0yOTAyLDkgKzI5MDYsOSBAQAogI2VuZGlmCiB9CiAKLXZvaWQKLWxvY2tfc2V0X3N1YmNsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKLQkJICB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsIHVuc2lnbmVkIGxvbmcgaXApCit2b2lkIGxvY2tfc2V0X2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCisJCSAgICB1bnNpZ25lZCBsb25nIGlwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI5MTQsMTMgKzI5MTgsMTIgQEAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMTsKIAljaGVja19mbGFncyhmbGFncyk7Ci0JaWYgKF9fbG9ja19zZXRfc3ViY2xhc3MobG9jaywgc3ViY2xhc3MsIGlwKSkKKwlpZiAoX19sb2NrX3NldF9jbGFzcyhsb2NrLCBuYW1lLCBrZXksIHN1YmNsYXNzLCBpcCkpCiAJCWNoZWNrX2NoYWluX2tleShjdXJyZW50KTsKIAljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDA7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KLQotRVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXRfc3ViY2xhc3MpOworRVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXRfY2xhc3MpOwogCiAvKgogICogV2UgYXJlIG5vdCBhbHdheXMgY2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZCAtIGRvIHRoYXQgaGVyZSwKQEAgLTI5NDQsNyArMjk0Nyw2IEBACiAJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfYWNxdWlyZSk7CiAKIHZvaWQgbG9ja19yZWxlYXNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IG5lc3RlZCwKQEAgLTI5NjIsNyArMjk2NCw2IEBACiAJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcmVsZWFzZSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCkBAIC0zMDAwLDcgKzMwMDEsNyBAQAogCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCAqcHJldl9obG9jazsKIAlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGRlcHRoOwotCWludCBpLCBwb2ludDsKKwlpbnQgaSwgY29udGVudGlvbl9wb2ludCwgY29udGVuZGluZ19wb2ludDsKIAogCWRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighZGVwdGgpKQpAQCAtMzAyNCwxOCArMzAyNSwyMiBAQAogZm91bmRfaXQ6CiAJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gc2NoZWRfY2xvY2soKTsKIAotCXBvaW50ID0gbG9ja19jb250ZW50aW9uX3BvaW50KGhsb2NrX2NsYXNzKGhsb2NrKSwgaXApOworCWNvbnRlbnRpb25fcG9pbnQgPSBsb2NrX3BvaW50KGhsb2NrX2NsYXNzKGhsb2NrKS0+Y29udGVudGlvbl9wb2ludCwgaXApOworCWNvbnRlbmRpbmdfcG9pbnQgPSBsb2NrX3BvaW50KGhsb2NrX2NsYXNzKGhsb2NrKS0+Y29udGVuZGluZ19wb2ludCwKKwkJCQkgICAgICBsb2NrLT5pcCk7CiAKIAlzdGF0cyA9IGdldF9sb2NrX3N0YXRzKGhsb2NrX2NsYXNzKGhsb2NrKSk7Ci0JaWYgKHBvaW50IDwgQVJSQVlfU0laRShzdGF0cy0+Y29udGVudGlvbl9wb2ludCkpCi0JCXN0YXRzLT5jb250ZW50aW9uX3BvaW50W3BvaW50XSsrOworCWlmIChjb250ZW50aW9uX3BvaW50IDwgTE9DS1NUQVRfUE9JTlRTKQorCQlzdGF0cy0+Y29udGVudGlvbl9wb2ludFtjb250ZW50aW9uX3BvaW50XSsrOworCWlmIChjb250ZW5kaW5nX3BvaW50IDwgTE9DS1NUQVRfUE9JTlRTKQorCQlzdGF0cy0+Y29udGVuZGluZ19wb2ludFtjb250ZW5kaW5nX3BvaW50XSsrOwogCWlmIChsb2NrLT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQlzdGF0cy0+Ym91bmNlc1tib3VuY2VfY29udGVuZGVkICsgISFobG9jay0+cmVhZF0rKzsKIAlwdXRfbG9ja19zdGF0cyhzdGF0cyk7CiB9CiAKIHN0YXRpYyB2b2lkCi1fX2xvY2tfYWNxdWlyZWQoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQorX19sb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCAqcHJldl9obG9jazsKQEAgLTMwODQsNiArMzA4OSw3IEBACiAJcHV0X2xvY2tfc3RhdHMoc3RhdHMpOwogCiAJbG9jay0+Y3B1ID0gY3B1OworCWxvY2stPmlwID0gaXA7CiB9CiAKIHZvaWQgbG9ja19jb250ZW5kZWQoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKQpAQCAtMzEwNSw3ICszMTExLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfY29udGVuZGVkKTsKIAotdm9pZCBsb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKK3ZvaWQgbG9ja19hY3F1aXJlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzExOCw3ICszMTI0LDcgQEAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWNoZWNrX2ZsYWdzKGZsYWdzKTsKIAljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7Ci0JX19sb2NrX2FjcXVpcmVkKGxvY2spOworCV9fbG9ja19hY3F1aXJlZChsb2NrLCBpcCk7CiAJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0zNDQyLDcgKzM0NDgsNiBAQAogCWlmICh1bmxvY2spCiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdfc2hvd19hbGxfbG9ja3MpOwogCiAvKgpAQCAtMzQ2Myw3ICszNDY4LDYgQEAKIHsKIAkJX19kZWJ1Z19zaG93X2hlbGRfbG9ja3ModGFzayk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGRlYnVnX3Nob3dfaGVsZF9sb2Nrcyk7CiAKIHZvaWQgbG9ja2RlcF9zeXNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfcHJvYy5jIGIva2VybmVsL2xvY2tkZXBfcHJvYy5jCmluZGV4IDIwZGJjYmYuLjEzNzE2YjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwX3Byb2MuYworKysgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKQEAgLTQ3MCwxMSArNDcwLDEyIEBACiAKIHN0YXRpYyB2b2lkIHNucHJpbnRfdGltZShjaGFyICpidWYsIHNpemVfdCBidWZzaXosIHM2NCBucikKIHsKLQl1bnNpZ25lZCBsb25nIHJlbTsKKwlzNjQgZGl2OworCXMzMiByZW07CiAKIAluciArPSA1OyAvKiBmb3IgZGlzcGxheSByb3VuZGluZyAqLwotCXJlbSA9IGRvX2RpdihuciwgMTAwMCk7IC8qIFhYWDogZG9fZGl2X3NpZ25lZCAqLwotCXNucHJpbnRmKGJ1ZiwgYnVmc2l6LCAiJWxsZC4lMDJkIiwgKGxvbmcgbG9uZyluciwgKGludClyZW0vMTApOworCWRpdiA9IGRpdl9zNjRfcmVtKG5yLCAxMDAwLCAmcmVtKTsKKwlzbnByaW50ZihidWYsIGJ1ZnNpeiwgIiVsbGQuJTAyZCIsIChsb25nIGxvbmcpZGl2LCAoaW50KXJlbS8xMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcV90aW1lKHN0cnVjdCBzZXFfZmlsZSAqbSwgczY0IHRpbWUpCkBAIC01NTYsNyArNTU3LDcgQEAKIAlpZiAoc3RhdHMtPnJlYWRfaG9sZHRpbWUubnIpCiAJCW5hbWVsZW4gKz0gMjsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsYXNzLT5jb250ZW50aW9uX3BvaW50KTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExPQ0tTVEFUX1BPSU5UUzsgaSsrKSB7CiAJCWNoYXIgc3ltW0tTWU1fU1lNQk9MX0xFTl07CiAJCWNoYXIgaXBbMzJdOwogCkBAIC01NzMsNiArNTc0LDIzIEBACiAJCQkJc3RhdHMtPmNvbnRlbnRpb25fcG9pbnRbaV0sCiAJCQkJaXAsIHN5bSk7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBMT0NLU1RBVF9QT0lOVFM7IGkrKykgeworCQljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOworCQljaGFyIGlwWzMyXTsKKworCQlpZiAoY2xhc3MtPmNvbnRlbmRpbmdfcG9pbnRbaV0gPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICghaSkKKwkJCXNlcV9saW5lKG0sICctJywgNDAtbmFtZWxlbiwgbmFtZWxlbik7CisKKwkJc3ByaW50X3N5bWJvbChzeW0sIGNsYXNzLT5jb250ZW5kaW5nX3BvaW50W2ldKTsKKwkJc25wcmludGYoaXAsIHNpemVvZihpcCksICJbPCVwPl0iLAorCQkJCSh2b2lkICopY2xhc3MtPmNvbnRlbmRpbmdfcG9pbnRbaV0pOworCQlzZXFfcHJpbnRmKG0sICIlNDBzICUxNGx1ICUyOXMgJXNcbiIsIG5hbWUsCisJCQkJc3RhdHMtPmNvbnRlbmRpbmdfcG9pbnRbaV0sCisJCQkJaXAsIHN5bSk7CisJfQogCWlmIChpKSB7CiAJCXNlcV9wdXRzKG0sICJcbiIpOwogCQlzZXFfbGluZShtLCAnLicsIDAsIDQwICsgMSArIDEwICogKDE0ICsgMSkpOwpAQCAtNTgyLDcgKzYwMCw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcV9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewotCXNlcV9wcmludGYobSwgImxvY2tfc3RhdCB2ZXJzaW9uIDAuMlxuIik7CisJc2VxX3ByaW50ZihtLCAibG9ja19zdGF0IHZlcnNpb24gMC4zXG4iKTsKIAlzZXFfbGluZShtLCAnLScsIDAsIDQwICsgMSArIDEwICogKDE0ICsgMSkpOwogCXNlcV9wcmludGYobSwgIiU0MHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICIKIAkJCSIlMTRzICUxNHNcbiIsCmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXguYyBiL2tlcm5lbC9tdXRleC5jCmluZGV4IDEyYzc3OWQuLjRmNDVkNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC5jCisrKyBiL2tlcm5lbC9tdXRleC5jCkBAIC01OSw3ICs1OSw3IEBACiAgKiBXZSBhbHNvIHB1dCB0aGUgZmFzdHBhdGggZmlyc3QgaW4gdGhlIGtlcm5lbCBpbWFnZSwgdG8gbWFrZSBzdXJlIHRoZQogICogYnJhbmNoIGlzIHByZWRpY3RlZCBieSB0aGUgQ1BVIGFzIGRlZmF1bHQtdW50YWtlbi4KICAqLwotc3RhdGljIHZvaWQgbm9pbmxpbmUgX19zY2hlZAorc3RhdGljIF9fdXNlZCBub2lubGluZSB2b2lkIF9fc2NoZWQKIF9fbXV0ZXhfbG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCk7CiAKIC8qKioKQEAgLTk2LDcgKzk2LDcgQEAKIEVYUE9SVF9TWU1CT0wobXV0ZXhfbG9jayk7CiAjZW5kaWYKIAotc3RhdGljIG5vaW5saW5lIHZvaWQgX19zY2hlZCBfX211dGV4X3VubG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCk7CitzdGF0aWMgX191c2VkIG5vaW5saW5lIHZvaWQgX19zY2hlZCBfX211dGV4X3VubG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCk7CiAKIC8qKioKICAqIG11dGV4X3VubG9jayAtIHJlbGVhc2UgdGhlIG11dGV4CkBAIC0xODQsNyArMTg0LDcgQEAKIAl9CiAKIGRvbmU6Ci0JbG9ja19hY3F1aXJlZCgmbG9jay0+ZGVwX21hcCk7CisJbG9ja19hY3F1aXJlZCgmbG9jay0+ZGVwX21hcCwgaXApOwogCS8qIGdvdCB0aGUgbG9jayAtIHJlam9pY2UhICovCiAJbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKIAlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CkBAIC0yNjgsNyArMjY4LDcgQEAKIC8qCiAgKiBSZWxlYXNlIHRoZSBsb2NrLCBzbG93cGF0aDoKICAqLwotc3RhdGljIG5vaW5saW5lIHZvaWQKK3N0YXRpYyBfX3VzZWQgbm9pbmxpbmUgdm9pZAogX19tdXRleF91bmxvY2tfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQpCiB7CiAJX19tdXRleF91bmxvY2tfY29tbW9uX3Nsb3dwYXRoKGxvY2tfY291bnQsIDEpOwpAQCAtMzEzLDcgKzMxMyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2tfa2lsbGFibGUpOwogCi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX3NjaGVkCitzdGF0aWMgX191c2VkIG5vaW5saW5lIHZvaWQgX19zY2hlZAogX19tdXRleF9sb2NrX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50KQogewogCXN0cnVjdCBtdXRleCAqbG9jayA9IGNvbnRhaW5lcl9vZihsb2NrX2NvdW50LCBzdHJ1Y3QgbXV0ZXgsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ub3RpZmllci5jIGIva2VybmVsL25vdGlmaWVyLmMKaW5kZXggNDI4MmMwYS4uNjFkNWFhNSAxMDA2NDQKLS0tIGEva2VybmVsL25vdGlmaWVyLmMKKysrIGIva2VybmVsL25vdGlmaWVyLmMKQEAgLTgyLDYgKzgyLDE0IEBACiAKIAl3aGlsZSAobmIgJiYgbnJfdG9fY2FsbCkgewogCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlKG5iLT5uZXh0KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19OT1RJRklFUlMKKwkJaWYgKHVubGlrZWx5KCFmdW5jX3B0cl9pc19rZXJuZWxfdGV4dChuYi0+bm90aWZpZXJfY2FsbCkpKSB7CisJCQlXQVJOKDEsICJJbnZhbGlkIG5vdGlmaWVyIGNhbGxlZCEiKTsKKwkJCW5iID0gbmV4dF9uYjsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKIAkJcmV0ID0gbmItPm5vdGlmaWVyX2NhbGwobmIsIHZhbCwgdik7CiAKIAkJaWYgKG5yX2NhbGxzKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCA0ZDUwODgzLi4xM2YwNjM0IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogaW50IHBhbmljX29uX29vcHM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0YWludGVkX21hc2s7CkBAIC0zMjEsMzYgKzMyMiwyNyBAQAogfQogCiAjaWZkZWYgV0FOVF9XQVJOX09OX1NMT1dQQVRICi12b2lkIHdhcm5fb25fc2xvd3BhdGgoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCi17Ci0JY2hhciBmdW5jdGlvbltLU1lNX1NZTUJPTF9MRU5dOwotCXVuc2lnbmVkIGxvbmcgY2FsbGVyID0gKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKLQlzcHJpbnRfc3ltYm9sKGZ1bmN0aW9uLCBjYWxsZXIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tXG4iKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBhdCAlczolZCAlcygpXG4iLCBmaWxlLAotCQlsaW5lLCBmdW5jdGlvbik7Ci0JcHJpbnRfbW9kdWxlcygpOwotCWR1bXBfc3RhY2soKTsKLQlwcmludF9vb3BzX2VuZF9tYXJrZXIoKTsKLQlhZGRfdGFpbnQoVEFJTlRfV0FSTik7Ci19Ci1FWFBPUlRfU1lNQk9MKHdhcm5fb25fc2xvd3BhdGgpOwotCi0KIHZvaWQgd2Fybl9zbG93cGF0aChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWNoYXIgZnVuY3Rpb25bS1NZTV9TWU1CT0xfTEVOXTsKIAl1bnNpZ25lZCBsb25nIGNhbGxlciA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwljb25zdCBjaGFyICpib2FyZDsKKwogCXNwcmludF9zeW1ib2woZnVuY3Rpb24sIGNhbGxlcik7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICItLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IGF0ICVzOiVkICVzKClcbiIsIGZpbGUsCiAJCWxpbmUsIGZ1bmN0aW9uKTsKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7CisJYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX05BTUUpOworCWlmIChib2FyZCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGFyZHdhcmUgbmFtZTogJXNcbiIsIGJvYXJkKTsKKworCWlmIChmbXQpIHsKKwkJdmFfc3RhcnQoYXJncywgZm10KTsKKwkJdnByaW50ayhmbXQsIGFyZ3MpOworCQl2YV9lbmQoYXJncyk7CisJfQogCiAJcHJpbnRfbW9kdWxlcygpOwogCWR1bXBfc3RhY2soKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IDRlNTI4OGEuLjE1N2RlM2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtNTgsMjEgKzU4LDIxIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXMpCiB7Ci0Jc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICp0b3RhbHMsICp0b3Q7CiAJaW50IGk7Ci0Jc3RydWN0IHRhc2tfY3B1dGltZSAqdG90OwogCi0Jc2lnID0gdHNrLT5zaWduYWw7Ci0JaWYgKHVubGlrZWx5KCFzaWcpIHx8ICFzaWctPmNwdXRpbWUudG90YWxzKSB7CisJdG90YWxzID0gdHNrLT5zaWduYWwtPmNwdXRpbWUudG90YWxzOworCWlmICghdG90YWxzKSB7CiAJCXRpbWVzLT51dGltZSA9IHRzay0+dXRpbWU7CiAJCXRpbWVzLT5zdGltZSA9IHRzay0+c3RpbWU7CiAJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCQlyZXR1cm47CiAJfQorCiAJdGltZXMtPnN0aW1lID0gdGltZXMtPnV0aW1lID0gY3B1dGltZV96ZXJvOwogCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gMDsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQl0b3QgPSBwZXJfY3B1X3B0cih0c2stPnNpZ25hbC0+Y3B1dGltZS50b3RhbHMsIGkpOworCQl0b3QgPSBwZXJfY3B1X3B0cih0b3RhbHMsIGkpOwogCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIHRvdC0+dXRpbWUpOwogCQl0aW1lcy0+c3RpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+c3RpbWUsIHRvdC0+c3RpbWUpOwogCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSB0b3QtPnN1bV9leGVjX3J1bnRpbWU7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggYTE0MGU0NC4uODg3YzYzNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKgkgICAgbXVzdCBzdXBwbHkgZnVuY3Rpb25zIGhlcmUsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGp1c3QgcmV0dXJucwogICoJICAgIEVOT1NZUy4gIFRoZSBzdGFuZGFyZCBQT1NJWCB0aW1lciBtYW5hZ2VtZW50IGNvZGUgYXNzdW1lcyB0aGUKICAqCSAgICBmb2xsb3dpbmc6IDEuKSBUaGUga19pdGltZXIgc3RydWN0IChzY2hlZC5oKSBpcyB1c2VkIGZvciB0aGUKLSAqCSAgICB0aW1lci4gIDIuKSBUaGUgbGlzdCwgaXRfbG9jaywgaXRfY2xvY2ssIGl0X2lkIGFuZCBpdF9wcm9jZXNzCisgKgkgICAgdGltZXIuICAyLikgVGhlIGxpc3QsIGl0X2xvY2ssIGl0X2Nsb2NrLCBpdF9pZCBhbmQgaXRfcGlkCiAgKgkgICAgZmllbGRzIGFyZSBub3QgbW9kaWZpZWQgYnkgdGltZXIgY29kZS4KICAqCiAgKiAgICAgICAgICBBdCB0aGlzIHRpbWUgYWxsIGZ1bmN0aW9ucyBFWENFUFQgY2xvY2tfbmFub3NsZWVwIGNhbiBiZQpAQCAtMzE5LDcgKzMxOSw4IEBACiAKIGludCBwb3NpeF90aW1lcl9ldmVudChzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIGludCBzaV9wcml2YXRlKQogewotCWludCBzaGFyZWQsIHJldDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJaW50IHNoYXJlZCwgcmV0ID0gLTE7CiAJLyoKIAkgKiBGSVhNRTogaWYgLT5zaWdxIGlzIHF1ZXVlZCB3ZSBjYW4gcmFjZSB3aXRoCiAJICogZGVxdWV1ZV9zaWduYWwoKS0+ZG9fc2NoZWR1bGVfbmV4dF90aW1lcigpLgpAQCAtMzMzLDggKzMzNCwxMyBAQAogCSAqLwogCXRpbXItPnNpZ3EtPmluZm8uc2lfc3lzX3ByaXZhdGUgPSBzaV9wcml2YXRlOwogCi0Jc2hhcmVkID0gISh0aW1yLT5pdF9zaWdldl9ub3RpZnkgJiBTSUdFVl9USFJFQURfSUQpOwotCXJldCA9IHNlbmRfc2lncXVldWUodGltci0+c2lncSwgdGltci0+aXRfcHJvY2Vzcywgc2hhcmVkKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJdGFzayA9IHBpZF90YXNrKHRpbXItPml0X3BpZCwgUElEVFlQRV9QSUQpOworCWlmICh0YXNrKSB7CisJCXNoYXJlZCA9ICEodGltci0+aXRfc2lnZXZfbm90aWZ5ICYgU0lHRVZfVEhSRUFEX0lEKTsKKwkJcmV0ID0gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0YXNrLCBzaGFyZWQpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAkvKiBJZiB3ZSBmYWlsZWQgdG8gc2VuZCB0aGUgc2lnbmFsIHRoZSB0aW1lciBzdG9wcy4gKi8KIAlyZXR1cm4gcmV0ID4gMDsKIH0KQEAgLTQxMSw3ICs0MTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnb29kX3NpZ2V2ZW50KHNpZ2V2ZW50X3QgKiBldmVudCkKK3N0YXRpYyBzdHJ1Y3QgcGlkICpnb29kX3NpZ2V2ZW50KHNpZ2V2ZW50X3QgKiBldmVudCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0biA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIApAQCAtNDI1LDcgKzQzMSw3IEBACiAJICAgICgoZXZlbnQtPnNpZ2V2X3NpZ25vIDw9IDApIHx8IChldmVudC0+c2lnZXZfc2lnbm8gPiBTSUdSVE1BWCkpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBydG47CisJcmV0dXJuIHRhc2tfcGlkKHJ0bik7CiB9CiAKIHZvaWQgcmVnaXN0ZXJfcG9zaXhfY2xvY2soY29uc3QgY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3Qga19jbG9jayAqbmV3X2Nsb2NrKQpAQCAtNDY0LDYgKzQ3MCw3IEBACiAJCWlkcl9yZW1vdmUoJnBvc2l4X3RpbWVyc19pZCwgdG1yLT5pdF9pZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCBmbGFncyk7CiAJfQorCXB1dF9waWQodG1yLT5pdF9waWQpOwogCXNpZ3F1ZXVlX2ZyZWUodG1yLT5zaWdxKTsKIAlrbWVtX2NhY2hlX2ZyZWUocG9zaXhfdGltZXJzX2NhY2hlLCB0bXIpOwogfQpAQCAtNDc3LDcgKzQ4NCw2IEBACiB7CiAJc3RydWN0IGtfaXRpbWVyICpuZXdfdGltZXI7CiAJaW50IGVycm9yLCBuZXdfdGltZXJfaWQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwcm9jZXNzOwogCXNpZ2V2ZW50X3QgZXZlbnQ7CiAJaW50IGl0X2lkX3NldCA9IElUX0lEX05PVF9TRVQ7CiAKQEAgLTUzMSwxMSArNTM3LDkgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJcHJvY2VzcyA9IGdvb2Rfc2lnZXZlbnQoJmV2ZW50KTsKLQkJaWYgKHByb2Nlc3MpCi0JCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7CisJCW5ld190aW1lci0+aXRfcGlkID0gZ2V0X3BpZChnb29kX3NpZ2V2ZW50KCZldmVudCkpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJaWYgKCFwcm9jZXNzKSB7CisJCWlmICghbmV3X3RpbWVyLT5pdF9waWQpIHsKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC01NDMsOCArNTQ3LDcgQEAKIAkJZXZlbnQuc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwogCQlldmVudC5zaWdldl9zaWdubyA9IFNJR0FMUk07CiAJCWV2ZW50LnNpZ2V2X3ZhbHVlLnNpdmFsX2ludCA9IG5ld190aW1lci0+aXRfaWQ7Ci0JCXByb2Nlc3MgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7Ci0JCWdldF90YXNrX3N0cnVjdChwcm9jZXNzKTsKKwkJbmV3X3RpbWVyLT5pdF9waWQgPSBnZXRfcGlkKHRhc2tfdGdpZChjdXJyZW50KSk7CiAJfQogCiAJbmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgICAgID0gZXZlbnQuc2lnZXZfbm90aWZ5OwpAQCAtNTU0LDcgKzU1Nyw3IEBACiAJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX2NvZGUgID0gU0lfVElNRVI7CiAKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQluZXdfdGltZXItPml0X3Byb2Nlc3MgPSBwcm9jZXNzOworCW5ld190aW1lci0+aXRfc2lnbmFsID0gY3VycmVudC0+c2lnbmFsOwogCWxpc3RfYWRkKCZuZXdfdGltZXItPmxpc3QsICZjdXJyZW50LT5zaWduYWwtPnBvc2l4X3RpbWVycyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIApAQCAtNTg5LDggKzU5Miw3IEBACiAJdGltciA9IGlkcl9maW5kKCZwb3NpeF90aW1lcnNfaWQsIChpbnQpdGltZXJfaWQpOwogCWlmICh0aW1yKSB7CiAJCXNwaW5fbG9jaygmdGltci0+aXRfbG9jayk7Ci0JCWlmICh0aW1yLT5pdF9wcm9jZXNzICYmCi0JCSAgICBzYW1lX3RocmVhZF9ncm91cCh0aW1yLT5pdF9wcm9jZXNzLCBjdXJyZW50KSkgeworCQlpZiAodGltci0+aXRfc2lnbmFsID09IGN1cnJlbnQtPnNpZ25hbCkgewogCQkJc3Bpbl91bmxvY2soJmlkcl9sb2NrKTsKIAkJCXJldHVybiB0aW1yOwogCQl9CkBAIC04MzcsOCArODM5LDcgQEAKIAkgKiBUaGlzIGtlZXBzIGFueSB0YXNrcyB3YWl0aW5nIG9uIHRoZSBzcGluIGxvY2sgZnJvbSB0aGlua2luZwogCSAqIHRoZXkgZ290IHNvbWV0aGluZyAoc2VlIHRoZSBsb2NrIGNvZGUgYWJvdmUpLgogCSAqLwotCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7Ci0JdGltZXItPml0X3Byb2Nlc3MgPSBOVUxMOworCXRpbWVyLT5pdF9zaWduYWwgPSBOVUxMOwogCiAJdW5sb2NrX3RpbWVyKHRpbWVyLCBmbGFncyk7CiAJcmVsZWFzZV9wb3NpeF90aW1lcih0aW1lciwgSVRfSURfU0VUKTsKQEAgLTg2NCw4ICs4NjUsNyBAQAogCSAqIFRoaXMga2VlcHMgYW55IHRhc2tzIHdhaXRpbmcgb24gdGhlIHNwaW4gbG9jayBmcm9tIHRoaW5raW5nCiAJICogdGhleSBnb3Qgc29tZXRoaW5nIChzZWUgdGhlIGxvY2sgY29kZSBhYm92ZSkuCiAJICovCi0JcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKLQl0aW1lci0+aXRfcHJvY2VzcyA9IE5VTEw7CisJdGltZXItPml0X3NpZ25hbCA9IE5VTEw7CiAKIAl1bmxvY2tfdGltZXIodGltZXIsIGZsYWdzKTsKIAlyZWxlYXNlX3Bvc2l4X3RpbWVyKHRpbWVyLCBJVF9JRF9TRVQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IGY0OTJmMTUuLmU2NTFhYjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTY2Miw3ICs2NjIsNyBAQAogCWlmIChyZWN1cnNpb25fYnVnKSB7CiAJCXJlY3Vyc2lvbl9idWcgPSAwOwogCQlzdHJjcHkocHJpbnRrX2J1ZiwgcmVjdXJzaW9uX2J1Z19tc2cpOwotCQlwcmludGVkX2xlbiA9IHNpemVvZihyZWN1cnNpb25fYnVnX21zZyk7CisJCXByaW50ZWRfbGVuID0gc3RybGVuKHJlY3Vyc2lvbl9idWdfbXNnKTsKIAl9CiAJLyogRW1pdCB0aGUgb3V0cHV0IGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KIAlwcmludGVkX2xlbiArPSB2c2NucHJpbnRmKHByaW50a19idWYgKyBwcmludGVkX2xlbiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VjbGFzc2ljLmMgYi9rZXJuZWwvcmN1Y2xhc3NpYy5jCmluZGV4IDM3ZjcyZTU1MS4uZTUwM2EwMCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdWNsYXNzaWMuYworKysgYi9rZXJuZWwvcmN1Y2xhc3NpYy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogCS8qIE9LLCB0aW1lIHRvIHJhdCBvbiBvdXIgYnVkZHkuLi4gKi8KIAotCXByaW50ayhLRVJOX0VSUiAiUkNVIGRldGVjdGVkIENQVSBzdGFsbHM6Iik7CisJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVIHN0YWxsczoiKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCWlmIChjcHVfaXNzZXQoY3B1LCByY3AtPmNwdW1hc2spKQogCQkJcHJpbnRrKCIgJWQiLCBjcHUpOwpAQCAtMjA0LDcgKzIwNCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByaW50ayhLRVJOX0VSUiAiUkNVIGRldGVjdGVkIENQVSAlZCBzdGFsbCAodD0lbHUvJWx1IGppZmZpZXMpXG4iLAorCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSAlZCBzdGFsbCAodD0lbHUvJWx1IGppZmZpZXMpXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBqaWZmaWVzLAogCQkJamlmZmllcyAtIHJjcC0+Z3Bfc3RhcnQpOwogCWR1bXBfc3RhY2soKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwcmVlbXB0LmMgYi9rZXJuZWwvcmN1cHJlZW1wdC5jCmluZGV4IDU5MjM2ZTguLjA0OTgyNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwcmVlbXB0LmMKKysrIGIva2VybmVsL3JjdXByZWVtcHQuYwpAQCAtNTUxLDYgKzU1MSwxNiBAQAogCX0KIH0KIAordm9pZCByY3Vfbm1pX2VudGVyKHZvaWQpCit7CisJcmN1X2lycV9lbnRlcigpOworfQorCit2b2lkIHJjdV9ubWlfZXhpdCh2b2lkKQoreworCXJjdV9pcnFfZXhpdCgpOworfQorCiBzdGF0aWMgdm9pZCBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcihpbnQgY3B1KQogewogCXN0cnVjdCByY3VfZHludGlja19zY2hlZCAqcmRzc3AgPSAmcGVyX2NwdShyY3VfZHludGlja19zY2hlZCwgY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwcmVlbXB0X3RyYWNlLmMgYi9rZXJuZWwvcmN1cHJlZW1wdF90cmFjZS5jCmluZGV4IDM1YzJkMzMuLjdjMjY2NWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwcmVlbXB0X3RyYWNlLmMKKysrIGIva2VybmVsL3JjdXByZWVtcHRfdHJhY2UuYwpAQCAtMTQ5LDEyICsxNDksMTIgQEAKIAkJc3AtPmRvbmVfbGVuZ3RoICs9IGNwLT5kb25lX2xlbmd0aDsKIAkJc3AtPmRvbmVfYWRkICs9IGNwLT5kb25lX2FkZDsKIAkJc3AtPmRvbmVfcmVtb3ZlICs9IGNwLT5kb25lX3JlbW92ZTsKLQkJYXRvbWljX3NldCgmc3AtPmRvbmVfaW52b2tlZCwgYXRvbWljX3JlYWQoJmNwLT5kb25lX2ludm9rZWQpKTsKKwkJYXRvbWljX2FkZChhdG9taWNfcmVhZCgmY3AtPmRvbmVfaW52b2tlZCksICZzcC0+ZG9uZV9pbnZva2VkKTsKIAkJc3AtPnJjdV9jaGVja19jYWxsYmFja3MgKz0gY3AtPnJjdV9jaGVja19jYWxsYmFja3M7Ci0JCWF0b21pY19zZXQoJnNwLT5yY3VfdHJ5X2ZsaXBfMSwKLQkJCSAgIGF0b21pY19yZWFkKCZjcC0+cmN1X3RyeV9mbGlwXzEpKTsKLQkJYXRvbWljX3NldCgmc3AtPnJjdV90cnlfZmxpcF9lMSwKLQkJCSAgIGF0b21pY19yZWFkKCZjcC0+cmN1X3RyeV9mbGlwX2UxKSk7CisJCWF0b21pY19hZGQoYXRvbWljX3JlYWQoJmNwLT5yY3VfdHJ5X2ZsaXBfMSksCisJCQkgICAmc3AtPnJjdV90cnlfZmxpcF8xKTsKKwkJYXRvbWljX2FkZChhdG9taWNfcmVhZCgmY3AtPnJjdV90cnlfZmxpcF9lMSksCisJCQkgICAmc3AtPnJjdV90cnlfZmxpcF9lMSk7CiAJCXNwLT5yY3VfdHJ5X2ZsaXBfaTEgKz0gY3AtPnJjdV90cnlfZmxpcF9pMTsKIAkJc3AtPnJjdV90cnlfZmxpcF9pZTEgKz0gY3AtPnJjdV90cnlfZmxpcF9pZTE7CiAJCXNwLT5yY3VfdHJ5X2ZsaXBfZzEgKz0gY3AtPnJjdV90cnlfZmxpcF9nMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDg1Y2I5MDUuLmIzMTA2NTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTEwOCw3ICsxMDksNiBAQAogCWludCBydG9ydF9tYnRlc3Q7CiB9OwogCi1zdGF0aWMgaW50IGZ1bGxzdG9wID0gMDsJLyogc3RvcCBnZW5lcmF0aW5nIGNhbGxiYWNrcyBhdCB0ZXN0IGVuZC4gKi8KIHN0YXRpYyBMSVNUX0hFQUQocmN1X3RvcnR1cmVfZnJlZWxpc3QpOwogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZSAqcmN1X3RvcnR1cmVfY3VycmVudCA9IE5VTEw7CiBzdGF0aWMgbG9uZyByY3VfdG9ydHVyZV9jdXJyZW50X3ZlcnNpb24gPSAwOwpAQCAtMTM2LDYgKzEzNiwzMCBAQAogI2VuZGlmCiBpbnQgcmN1dG9ydHVyZV9ydW5uYWJsZSA9IFJDVVRPUlRVUkVfUlVOTkFCTEVfSU5JVDsKIAorI2RlZmluZSBGVUxMU1RPUF9TSUdOQUxFRCAxCS8qIEJhaWwgZHVlIHRvIHNpZ25hbC4gKi8KKyNkZWZpbmUgRlVMTFNUT1BfQ0xFQU5VUCAgMgkvKiBPcmRlcmx5IHNodXRkb3duLiAqLworc3RhdGljIGludCBmdWxsc3RvcDsJCS8qIHN0b3AgZ2VuZXJhdGluZyBjYWxsYmFja3MgYXQgdGVzdCBlbmQuICovCitERUZJTkVfTVVURVgoZnVsbHN0b3BfbXV0ZXgpOwkvKiBwcm90ZWN0IGZ1bGxzdG9wIHRyYW5zaXRpb25zIGFuZCAqLworCQkJCS8qICBzcGF3bmluZyBvZiBrdGhyZWFkcy4gKi8KKworLyoKKyAqIERldGVjdCBhbmQgcmVzcG9uZCB0byBhIHNpZ25hbC1iYXNlZCBzaHV0ZG93bi4KKyAqLworc3RhdGljIGludAorcmN1dG9ydHVyZV9zaHV0ZG93bl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQxLAorCQkJICAgdW5zaWduZWQgbG9uZyB1bnVzZWQyLCB2b2lkICp1bnVzZWQzKQoreworCWlmIChmdWxsc3RvcCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQltdXRleF9sb2NrKCZmdWxsc3RvcF9tdXRleCk7CisJCWlmICghQUNDRVNTX09OQ0UoZnVsbHN0b3ApKQorCQkJZnVsbHN0b3AgPSBGVUxMU1RPUF9TSUdOQUxFRDsKKwkJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CisJfQorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKwogLyoKICAqIEFsbG9jYXRlIGFuIGVsZW1lbnQgZnJvbSB0aGUgcmN1X3RvcnR1cmVzIHBvb2wuCiAgKi8KQEAgLTE5OSwxMSArMjIzLDEyIEBACiBzdGF0aWMgdm9pZAogcmN1X3N0dXR0ZXJfd2FpdCh2b2lkKQogewotCXdoaWxlIChzdHV0dGVyX3BhdXNlX3Rlc3QgfHwgIXJjdXRvcnR1cmVfcnVubmFibGUpCisJd2hpbGUgKChzdHV0dGVyX3BhdXNlX3Rlc3QgfHwgIXJjdXRvcnR1cmVfcnVubmFibGUpICYmICFmdWxsc3RvcCkgewogCQlpZiAocmN1dG9ydHVyZV9ydW5uYWJsZSkKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKKwl9CiB9CiAKIC8qCkBAIC01OTksNyArNjI0LDcgQEAKIAkJcmN1X3N0dXR0ZXJfd2FpdCgpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgIWZ1bGxzdG9wKTsKIAlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX3dyaXRlciB0YXNrIHN0b3BwaW5nIik7Ci0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgIT0gRlVMTFNUT1BfU0lHTkFMRUQpCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCXJldHVybiAwOwogfQpAQCAtNjI0LDcgKzY0OSw3IEBACiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhZnVsbHN0b3ApOwogCiAJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9mYWtld3JpdGVyIHRhc2sgc3RvcHBpbmciKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiBmdWxsc3RvcCAhPSBGVUxMU1RPUF9TSUdOQUxFRCkKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MzQsNyArNzU5LDcgQEAKIAlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX3JlYWRlciB0YXNrIHN0b3BwaW5nIik7CiAJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFjYXBhYmxlKQogCQlkZWxfdGltZXJfc3luYygmdCk7Ci0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgIT0gRlVMTFNUT1BfU0lHTkFMRUQpCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCXJldHVybiAwOwogfQpAQCAtODMxLDcgKzg1Niw3IEBACiAJZG8gewogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoc3RhdF9pbnRlcnZhbCAqIEhaKTsKIAkJcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQoKTsKLQl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFmdWxsc3RvcCk7CiAJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9zdGF0cyB0YXNrIHN0b3BwaW5nIik7CiAJcmV0dXJuIDA7CiB9CkBAIC04OTksNyArOTI0LDcgQEAKIAlkbyB7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShzaHVmZmxlX2ludGVydmFsICogSFopOwogCQlyY3VfdG9ydHVyZV9zaHVmZmxlX3Rhc2tzKCk7Ci0JfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhZnVsbHN0b3ApOwogCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfc2h1ZmZsZSB0YXNrIHN0b3BwaW5nIik7CiAJcmV0dXJuIDA7CiB9CkBAIC05MTQsMTAgKzkzOSwxMCBAQAogCWRvIHsKIAkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHN0dXR0ZXIgKiBIWik7CiAJCXN0dXR0ZXJfcGF1c2VfdGVzdCA9IDE7Ci0JCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlpZiAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhZnVsbHN0b3ApCiAJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoc3R1dHRlciAqIEhaKTsKIAkJc3R1dHRlcl9wYXVzZV90ZXN0ID0gMDsKLQl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFmdWxsc3RvcCk7CiAJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9zdHV0dGVyIHRhc2sgc3RvcHBpbmciKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkzNCwxMiArOTU5LDI3IEBACiAJCXN0dXR0ZXIsIGlycXJlYWRlcik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmN1dG9ydHVyZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHJjdXRvcnR1cmVfc2h1dGRvd25fbm90aWZ5LAorfTsKKwogc3RhdGljIHZvaWQKIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZCkKIHsKIAlpbnQgaTsKIAotCWZ1bGxzdG9wID0gMTsKKwltdXRleF9sb2NrKCZmdWxsc3RvcF9tdXRleCk7CisJaWYgKCFmdWxsc3RvcCkgeworCQkvKiBJZiBiZWluZyBzaWduYWxlZCwgbGV0IGl0IGhhcHBlbiwgdGhlbiBleGl0LiAqLworCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEwICogSFopOworCQlpZiAoY3VyX29wcy0+Y2JfYmFycmllciAhPSBOVUxMKQorCQkJY3VyX29wcy0+Y2JfYmFycmllcigpOworCQlyZXR1cm47CisJfQorCWZ1bGxzdG9wID0gRlVMTFNUT1BfQ0xFQU5VUDsKKwltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CiAJaWYgKHN0dXR0ZXJfdGFzaykgewogCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX3N0dXR0ZXIgdGFzayIpOwogCQlrdGhyZWFkX3N0b3Aoc3R1dHRlcl90YXNrKTsKQEAgLTEwMTUsNiArMTA1NSw4IEBACiAJCXsgJnJjdV9vcHMsICZyY3Vfc3luY19vcHMsICZyY3VfYmhfb3BzLCAmcmN1X2JoX3N5bmNfb3BzLAogCQkgICZzcmN1X29wcywgJnNjaGVkX29wcywgJnNjaGVkX29wc19zeW5jLCB9OwogCisJbXV0ZXhfbG9jaygmZnVsbHN0b3BfbXV0ZXgpOworCiAJLyogUHJvY2VzcyBhcmdzIGFuZCB0ZWxsIHRoZSB3b3JsZCB0aGF0IHRoZSB0b3J0dXJlciBpcyBvbiB0aGUgam9iLiAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvcnR1cmVfb3BzKTsgaSsrKSB7CiAJCWN1cl9vcHMgPSB0b3J0dXJlX29wc1tpXTsKQEAgLTEwMjQsNiArMTA2Niw3IEBACiAJaWYgKGkgPT0gQVJSQVlfU0laRSh0b3J0dXJlX29wcykpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdXRvcnR1cmU6IGludmFsaWQgdG9ydHVyZSB0eXBlOiBcIiVzXCJcbiIsCiAJCSAgICAgICB0b3J0dXJlX3R5cGUpOworCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAkJcmV0dXJuICgtRUlOVkFMKTsKIAl9CiAJaWYgKGN1cl9vcHMtPmluaXQpCkBAIC0xMTQ2LDkgKzExODksMTIgQEAKIAkJCWdvdG8gdW53aW5kOwogCQl9CiAJfQorCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CisJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJcmV0dXJuIDA7CiAKIHVud2luZDoKKwltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAlyY3VfdG9ydHVyZV9jbGVhbnVwKCk7CiAJcmV0dXJuIGZpcnN0ZXJyOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0MmIwMwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTAsMCArMSwxNTM1IEBACisvKgorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDgKKyAqCisgKiBBdXRob3JzOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KKyAqCSAgICBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgorICoJICAgIFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPiBIaWVyYXJjaGljYWwgdmVyc2lvbgorICoKKyAqIEJhc2VkIG9uIHRoZSBvcmlnaW5hbCB3b3JrIGJ5IFBhdWwgTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KKyAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgorICoKKyAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQorICogCURvY3VtZW50YXRpb24vUkNVCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKK3N0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQorCVNUQVRJQ19MT0NLREVQX01BUF9JTklUKCJyY3VfcmVhZF9sb2NrIiwgJnJjdV9sb2NrX2tleSk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOworI2VuZGlmCisKKy8qIERhdGEgc3RydWN0dXJlcy4gKi8KKworI2RlZmluZSBSQ1VfU1RBVEVfSU5JVElBTElaRVIobmFtZSkgeyBcCisJLmxldmVsID0geyAmbmFtZS5ub2RlWzBdIH0sIFwKKwkubGV2ZWxjbnQgPSB7IFwKKwkJTlVNX1JDVV9MVkxfMCwgIC8qIHJvb3Qgb2YgaGllcmFyY2h5LiAqLyBcCisJCU5VTV9SQ1VfTFZMXzEsIFwKKwkJTlVNX1JDVV9MVkxfMiwgXAorCQlOVU1fUkNVX0xWTF8zLCAvKiA9PSBNQVhfUkNVX0xWTFMgKi8gXAorCX0sIFwKKwkuc2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQsIFwKKwkuZ3BudW0gPSAtMzAwLCBcCisJLmNvbXBsZXRlZCA9IC0zMDAsIFwKKwkub25vZmZsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAorCS5mcXNsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKKwkubl9mb3JjZV9xcyA9IDAsIFwKKwkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCit9CisKK3N0cnVjdCByY3Vfc3RhdGUgcmN1X3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9zdGF0ZSk7CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9kYXRhKTsKKworc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGUgPSBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoX3N0YXRlKTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOworCisjaWZkZWYgQ09ORklHX05PX0haCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2R5bnRpY2tzLCByY3VfZHludGlja3MpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KKworc3RhdGljIGludCBibGltaXQgPSAxMDsJCS8qIE1heGltdW0gY2FsbGJhY2tzIHBlciBzb2Z0aXJxLiAqLworc3RhdGljIGludCBxaGltYXJrID0gMTAwMDA7CS8qIElmIHRoaXMgbWFueSBwZW5kaW5nLCBpZ25vcmUgYmxpbWl0LiAqLworc3RhdGljIGludCBxbG93bWFyayA9IDEwMDsJLyogT25jZSBvbmx5IHRoaXMgbWFueSBwZW5kaW5nLCB1c2UgYmxpbWl0LiAqLworCitzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCisgKi8KK2xvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpCit7CisJcmV0dXJuIHJjdV9zdGF0ZS5jb21wbGV0ZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWQpOworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIEJIIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgorICovCitsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKQoreworCXJldHVybiByY3VfYmhfc3RhdGUuY29tcGxldGVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKTsKKworLyoKKyAqIERvZXMgdGhlIENQVSBoYXZlIGNhbGxiYWNrcyByZWFkeSB0byBiZSBpbnZva2VkPworICovCitzdGF0aWMgaW50CitjcHVfaGFzX2NhbGxiYWNrc19yZWFkeV90b19pbnZva2Uoc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJcmV0dXJuICZyZHAtPm54dGxpc3QgIT0gcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdOworfQorCisvKgorICogRG9lcyB0aGUgY3VycmVudCBDUFUgcmVxdWlyZSBhIHlldC1hcy11bnNjaGVkdWxlZCBncmFjZSBwZXJpb2Q/CisgKi8KK3N0YXRpYyBpbnQKK2NwdV9uZWVkc19hbm90aGVyX2dwKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJLyogQUNDRVNTX09OQ0UoKSBiZWNhdXNlIHdlIGFyZSBhY2Nlc3Npbmcgb3V0c2lkZSBvZiBsb2NrLiAqLworCXJldHVybiAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICYmCisJICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcm9vdCBub2RlIG9mIHRoZSBzcGVjaWZpZWQgcmN1X3N0YXRlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyZXR1cm4gJnJzcC0+bm9kZVswXTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKworLyoKKyAqIElmIHRoZSBzcGVjaWZpZWQgQ1BVIGlzIG9mZmxpbmUsIHRlbGwgdGhlIGNhbGxlciB0aGF0IGl0IGlzIGluCisgKiBhIHF1aWVzY2VudCBzdGF0ZS4gIE90aGVyd2lzZSwgd2hhY2sgaXQgd2l0aCBhIHJlc2NoZWR1bGUgSVBJLgorICogR3JhY2UgcGVyaW9kcyBjYW4gZW5kIHVwIHdhaXRpbmcgb24gYW4gb2ZmbGluZSBDUFUgd2hlbiB0aGF0CisgKiBDUFUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgY29taW5nIG9ubGluZSAtLSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZQorICogcmN1X25vZGUgYml0bWFza3MgYmVmb3JlIGl0IGFjdHVhbGx5IG1ha2VzIGl0IG9ubGluZS4gIFRoZSBzYW1lIHRoaW5nCisgKiBjYW4gaGFwcGVuIHdoaWxlIGEgQ1BVIGlzIGluIHRoZSBwcm9jZXNzIG9mIGNvbWluZyBvbmxpbmUuICBCZWNhdXNlIHRoaXMKKyAqIHJhY2UgaXMgcXVpdGUgcmFyZSwgd2UgY2hlY2sgZm9yIGl0IGFmdGVyIGRldGVjdGluZyB0aGF0IHRoZSBncmFjZQorICogcGVyaW9kIGhhcyBiZWVuIGRlbGF5ZWQgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZWFjaCBhbmQgZXZlcnkgQ1BVCisgKiBlYWNoIGFuZCBldmVyeSB0aW1lIHdlIHN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZC4KKyAqLworc3RhdGljIGludCByY3VfaW1wbGljaXRfb2ZmbGluZV9xcyhzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwkvKgorCSAqIElmIHRoZSBDUFUgaXMgb2ZmbGluZSwgaXQgaXMgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBXZSBjYW4KKwkgKiB0cnVzdCBpdHMgc3RhdGUgbm90IHRvIGNoYW5nZSBiZWNhdXNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgorCSAqLworCWlmIChjcHVfaXNfb2ZmbGluZShyZHAtPmNwdSkpIHsKKwkJcmRwLT5vZmZsaW5lX2ZxcysrOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBUaGUgQ1BVIGlzIG9ubGluZSwgc28gc2VuZCBpdCBhIHJlc2NoZWR1bGUgSVBJLiAqLworCWlmIChyZHAtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXNtcF9zZW5kX3Jlc2NoZWR1bGUocmRwLT5jcHUpOworCWVsc2UKKwkJc2V0X25lZWRfcmVzY2hlZCgpOworCXJkcC0+cmVzY2hlZF9pcGkrKzsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfU01QICovCisKKyNpZmRlZiBDT05GSUdfTk9fSFoKK3N0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJjdV9ycywgMTAgKiBIWiwgNSk7CisKKy8qKgorICogcmN1X2VudGVyX25vaHogLSBpbmZvcm0gUkNVIHRoYXQgY3VycmVudCBDUFUgaXMgZW50ZXJpbmcgbm9oegorICoKKyAqIEVudGVyIG5vaHogbW9kZSwgaW4gb3RoZXIgd29yZHMsIC1sZWF2ZS0gdGhlIG1vZGUgaW4gd2hpY2ggUkNVCisgKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgY2FuIG9jY3VyLiAgKFRob3VnaCBSQ1UgcmVhZC1zaWRlCisgKiBjcml0aWNhbCBzZWN0aW9ucyBjYW4gb2NjdXIgaW4gaXJxIGhhbmRsZXJzIGluIG5vaHogbW9kZSwgYSBwb3NzaWJpbGl0eQorICogaGFuZGxlZCBieSByY3VfaXJxX2VudGVyKCkgYW5kIHJjdV9pcnFfZXhpdCgpKS4KKyAqLwordm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cDsKKworCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmR0cCA9ICZfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrcyk7CisJcmR0cC0+ZHludGlja3MrKzsKKwlyZHRwLT5keW50aWNrc19uZXN0aW5nLS07CisJV0FSTl9PTl9SQVRFTElNSVQocmR0cC0+ZHludGlja3MgJiAweDEsICZyY3VfcnMpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIHJjdV9leGl0X25vaHogLSBpbmZvcm0gUkNVIHRoYXQgY3VycmVudCBDUFUgaXMgbGVhdmluZyBub2h6CisgKgorICogRXhpdCBub2h6IG1vZGUsIGluIG90aGVyIHdvcmRzLCAtZW50ZXItIHRoZSBtb2RlIGluIHdoaWNoIFJDVQorICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG5vcm1hbGx5IG9jY3VyLgorICovCit2b2lkIHJjdV9leGl0X25vaHoodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmR0cCA9ICZfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrcyk7CisJcmR0cC0+ZHludGlja3MrKzsKKwlyZHRwLT5keW50aWNrc19uZXN0aW5nKys7CisJV0FSTl9PTl9SQVRFTElNSVQoIShyZHRwLT5keW50aWNrcyAmIDB4MSksICZyY3VfcnMpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCit9CisKKy8qKgorICogcmN1X25taV9lbnRlciAtIGluZm9ybSBSQ1Ugb2YgZW50cnkgdG8gTk1JIGNvbnRleHQKKyAqCisgKiBJZiB0aGUgQ1BVIHdhcyBpZGxlIHdpdGggZHluYW1pYyB0aWNrcyBhY3RpdmUsIGFuZCB0aGVyZSBpcyBubworICogaXJxIGhhbmRsZXIgcnVubmluZywgdGhpcyB1cGRhdGVzIHJkdHAtPmR5bnRpY2tzX25taSB0byBsZXQgdGhlCisgKiBSQ1UgZ3JhY2UtcGVyaW9kIGhhbmRsaW5nIGtub3cgdGhhdCB0aGUgQ1BVIGlzIGFjdGl2ZS4KKyAqLwordm9pZCByY3Vfbm1pX2VudGVyKHZvaWQpCit7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrcyk7CisKKwlpZiAocmR0cC0+ZHludGlja3MgJiAweDEpCisJCXJldHVybjsKKwlyZHRwLT5keW50aWNrc19ubWkrKzsKKwlXQVJOX09OX1JBVEVMSU1JVCghKHJkdHAtPmR5bnRpY2tzX25taSAmIDB4MSksICZyY3VfcnMpOworCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KK30KKworLyoqCisgKiByY3Vfbm1pX2V4aXQgLSBpbmZvcm0gUkNVIG9mIGV4aXQgZnJvbSBOTUkgY29udGV4dAorICoKKyAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgYW5kIHRoZXJlIGlzIG5vCisgKiBpcnEgaGFuZGxlciBydW5uaW5nLCB0aGlzIHVwZGF0ZXMgcmR0cC0+ZHludGlja3Nfbm1pIHRvIGxldCB0aGUKKyAqIFJDVSBncmFjZS1wZXJpb2QgaGFuZGxpbmcga25vdyB0aGF0IHRoZSBDUFUgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4KKyAqLwordm9pZCByY3Vfbm1pX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gJl9fZ2V0X2NwdV92YXIocmN1X2R5bnRpY2tzKTsKKworCWlmIChyZHRwLT5keW50aWNrcyAmIDB4MSkKKwkJcmV0dXJuOworCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KKwlyZHRwLT5keW50aWNrc19ubWkrKzsKKwlXQVJOX09OX1JBVEVMSU1JVChyZHRwLT5keW50aWNrc19ubWkgJiAweDEsICZyY3VfcnMpOworfQorCisvKioKKyAqIHJjdV9pcnFfZW50ZXIgLSBpbmZvcm0gUkNVIG9mIGVudHJ5IHRvIGhhcmQgaXJxIGNvbnRleHQKKyAqCisgKiBJZiB0aGUgQ1BVIHdhcyBpZGxlIHdpdGggZHluYW1pYyB0aWNrcyBhY3RpdmUsIHRoaXMgdXBkYXRlcyB0aGUKKyAqIHJkdHAtPmR5bnRpY2tzIHRvIGxldCB0aGUgUkNVIGhhbmRsaW5nIGtub3cgdGhhdCB0aGUgQ1BVIGlzIGFjdGl2ZS4KKyAqLwordm9pZCByY3VfaXJxX2VudGVyKHZvaWQpCit7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrcyk7CisKKwlpZiAocmR0cC0+ZHludGlja3NfbmVzdGluZysrKQorCQlyZXR1cm47CisJcmR0cC0+ZHludGlja3MrKzsKKwlXQVJOX09OX1JBVEVMSU1JVCghKHJkdHAtPmR5bnRpY2tzICYgMHgxKSwgJnJjdV9ycyk7CisJc21wX21iKCk7IC8qIENQVXMgc2VlaW5nICsrIG11c3Qgc2VlIGxhdGVyIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLworfQorCisvKioKKyAqIHJjdV9pcnFfZXhpdCAtIGluZm9ybSBSQ1Ugb2YgZXhpdCBmcm9tIGhhcmQgaXJxIGNvbnRleHQKKyAqCisgKiBJZiB0aGUgQ1BVIHdhcyBpZGxlIHdpdGggZHluYW1pYyB0aWNrcyBhY3RpdmUsIHVwZGF0ZSB0aGUgcmRwLT5keW50aWNrcworICogdG8gcHV0IGxldCB0aGUgUkNVIGhhbmRsaW5nIGJlIGF3YXJlIHRoYXQgdGhlIENQVSBpcyBnb2luZyBiYWNrIHRvIGlkbGUKKyAqIHdpdGggbm8gdGlja3MuCisgKi8KK3ZvaWQgcmN1X2lycV9leGl0KHZvaWQpCit7CisJc3RydWN0IHJjdV9keW50aWNrcyAqcmR0cCA9ICZfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrcyk7CisKKwlpZiAoLS1yZHRwLT5keW50aWNrc19uZXN0aW5nKQorCQlyZXR1cm47CisJc21wX21iKCk7IC8qIENQVXMgc2VlaW5nICsrIG11c3Qgc2VlIHByaW9yIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLworCXJkdHAtPmR5bnRpY2tzKys7CisJV0FSTl9PTl9SQVRFTElNSVQocmR0cC0+ZHludGlja3MgJiAweDEsICZyY3VfcnMpOworCisJLyogSWYgdGhlIGludGVycnVwdCBxdWV1ZWQgYSBjYWxsYmFjaywgZ2V0IG91dCBvZiBkeW50aWNrIG1vZGUuICovCisJaWYgKF9fZ2V0X2NwdV92YXIocmN1X2RhdGEpLm54dGxpc3QgfHwKKwkgICAgX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSkubnh0bGlzdCkKKwkJc2V0X25lZWRfcmVzY2hlZCgpOworfQorCisvKgorICogUmVjb3JkIHRoZSBzcGVjaWZpZWQgImNvbXBsZXRlZCIgdmFsdWUsIHdoaWNoIGlzIGxhdGVyIHVzZWQgdG8gdmFsaWRhdGUKKyAqIGR5bnRpY2tzIGNvdW50ZXIgbWFuaXB1bGF0aW9ucy4gIFNwZWNpZnkgInJzcC0+Y29tcGxldGVkIC0gMSIgdG8KKyAqIHVuY29uZGl0aW9uYWxseSBpbnZhbGlkYXRlIGFueSBmdXR1cmUgZHludGlja3MgbWFuaXB1bGF0aW9ucyAod2hpY2ggaXMKKyAqIHVzZWZ1bCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZ3JhY2UgcGVyaW9kKS4KKyAqLworc3RhdGljIHZvaWQgZHludGlja19yZWNvcmRfY29tcGxldGVkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgbG9uZyBjb21wKQoreworCXJzcC0+ZHludGlja3NfY29tcGxldGVkID0gY29tcDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKworLyoKKyAqIFJlY2FsbCB0aGUgcHJldmlvdXNseSByZWNvcmRlZCB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBmb3IgZHludGlja3MuCisgKi8KK3N0YXRpYyBsb25nIGR5bnRpY2tfcmVjYWxsX2NvbXBsZXRlZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJcmV0dXJuIHJzcC0+ZHludGlja3NfY29tcGxldGVkOworfQorCisvKgorICogU25hcHNob3QgdGhlIHNwZWNpZmllZCBDUFUncyBkeW50aWNrcyBjb3VudGVyIHNvIHRoYXQgd2UgY2FuIGxhdGVyCisgKiBjcmVkaXQgdGhlbSB3aXRoIGFuIGltcGxpY2l0IHF1aWVzY2VudCBzdGF0ZS4gIFJldHVybiAxIGlmIHRoaXMgQ1BVCisgKiBpcyBhbHJlYWR5IGluIGEgcXVpZXNjZW50IHN0YXRlIGNvdXJ0ZXN5IG9mIGR5bnRpY2tzIGlkbGUgbW9kZS4KKyAqLworc3RhdGljIGludCBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcihzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwlpbnQgcmV0OworCWludCBzbmFwOworCWludCBzbmFwX25taTsKKworCXNuYXAgPSByZHAtPmR5bnRpY2tzLT5keW50aWNrczsKKwlzbmFwX25taSA9IHJkcC0+ZHludGlja3MtPmR5bnRpY2tzX25taTsKKwlzbXBfbWIoKTsJLyogT3JkZXIgc2FtcGxpbmcgb2Ygc25hcCB3aXRoIGVuZCBvZiBncmFjZSBwZXJpb2QuICovCisJcmRwLT5keW50aWNrc19zbmFwID0gc25hcDsKKwlyZHAtPmR5bnRpY2tzX25taV9zbmFwID0gc25hcF9ubWk7CisJcmV0ID0gKChzbmFwICYgMHgxKSA9PSAwKSAmJiAoKHNuYXBfbm1pICYgMHgxKSA9PSAwKTsKKwlpZiAocmV0KQorCQlyZHAtPmR5bnRpY2tzX2ZxcysrOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIENQVSBoYXMgcGFzc2VkIHRocm91Z2ggYSBxdWllc2NlbnQKKyAqIHN0YXRlIGJ5IHZpcnR1ZSBvZiBiZWluZyBpbiBvciBoYXZpbmcgcGFzc2VkIHRocm91Z2ggYW4gZHludGlja3MKKyAqIGlkbGUgc3RhdGUgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcigpCisgKiBmb3IgdGhpcyBzYW1lIENQVS4KKyAqLworc3RhdGljIGludCByY3VfaW1wbGljaXRfZHludGlja3NfcXMoc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJbG9uZyBjdXJyOworCWxvbmcgY3Vycl9ubWk7CisJbG9uZyBzbmFwOworCWxvbmcgc25hcF9ubWk7CisKKwljdXJyID0gcmRwLT5keW50aWNrcy0+ZHludGlja3M7CisJc25hcCA9IHJkcC0+ZHludGlja3Nfc25hcDsKKwljdXJyX25taSA9IHJkcC0+ZHludGlja3MtPmR5bnRpY2tzX25taTsKKwlzbmFwX25taSA9IHJkcC0+ZHludGlja3Nfbm1pX3NuYXA7CisJc21wX21iKCk7IC8qIGZvcmNlIG9yZGVyaW5nIHdpdGggY3B1IGVudGVyaW5nL2xlYXZpbmcgZHludGlja3MuICovCisKKwkvKgorCSAqIElmIHRoZSBDUFUgcGFzc2VkIHRocm91Z2ggb3IgZW50ZXJlZCBhIGR5bnRpY2tzIGlkbGUgcGhhc2Ugd2l0aAorCSAqIG5vIGFjdGl2ZSBpcnEvTk1JIGhhbmRsZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgcHJldGVuZCB0aGF0IHRoZSBDUFUKKwkgKiBhbHJlYWR5IGFja25vd2xlZGdlZCB0aGUgcmVxdWVzdCB0byBwYXNzIHRocm91Z2ggYSBxdWllc2NlbnQKKwkgKiBzdGF0ZS4gIEVpdGhlciB3YXksIHRoYXQgQ1BVIGNhbm5vdCBwb3NzaWJseSBiZSBpbiBhbiBSQ1UKKwkgKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiB0aGF0IHN0YXJ0ZWQgYmVmb3JlIHRoZSBiZWdpbm5pbmcKKwkgKiBvZiB0aGUgY3VycmVudCBSQ1UgZ3JhY2UgcGVyaW9kLgorCSAqLworCWlmICgoY3VyciAhPSBzbmFwIHx8IChjdXJyICYgMHgxKSA9PSAwKSAmJgorCSAgICAoY3Vycl9ubWkgIT0gc25hcF9ubWkgfHwgKGN1cnJfbm1pICYgMHgxKSA9PSAwKSkgeworCQlyZHAtPmR5bnRpY2tzX2ZxcysrOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBHbyBjaGVjayBmb3IgdGhlIENQVSBiZWluZyBvZmZsaW5lLiAqLworCXJldHVybiByY3VfaW1wbGljaXRfb2ZmbGluZV9xcyhyZHApOworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19TTVAgKi8KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCitzdGF0aWMgdm9pZCBkeW50aWNrX3JlY29yZF9jb21wbGV0ZWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBsb25nIGNvbXApCit7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKKy8qCisgKiBJZiB0aGVyZSBhcmUgbm8gZHludGlja3MsIHRoZW4gdGhlIG9ubHkgd2F5IHRoYXQgYSBDUFUgY2FuIHBhc3NpdmVseQorICogYmUgaW4gYSBxdWllc2NlbnQgc3RhdGUgaXMgdG8gYmUgb2ZmbGluZS4gIFVubGlrZSBkeW50aWNrcyBpZGxlLCB3aGljaAorICogaXMgYSBwb2ludCBpbiB0aW1lIGR1cmluZyB0aGUgcHJpb3IgKGFscmVhZHkgZmluaXNoZWQpIGdyYWNlIHBlcmlvZCwKKyAqIGFuIG9mZmxpbmUgQ1BVIGlzIGFsd2F5cyBpbiBhIHF1aWVzY2VudCBzdGF0ZSwgYW5kIHRodXMgY2FuIGJlCisgKiB1bmNvbmRpdGlvbmFsbHkgYXBwbGllZC4gIFNvIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIGxvbmcgZHludGlja19yZWNhbGxfY29tcGxldGVkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyZXR1cm4gcnNwLT5jb21wbGV0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmN1X2ltcGxpY2l0X2R5bnRpY2tzX3FzKHN0cnVjdCByY3VfZGF0YSAqcmRwKQoreworCXJldHVybiByY3VfaW1wbGljaXRfb2ZmbGluZV9xcyhyZHApOworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19TTVAgKi8KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KKworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisKK3N0YXRpYyB2b2lkIHJlY29yZF9ncF9zdGFsbF9jaGVja190aW1lKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlyc3AtPmdwX3N0YXJ0ID0gamlmZmllczsKKwlyc3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSzsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpbnQgY3B1OworCWxvbmcgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07CisJc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKKworCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCWRlbHRhID0gamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbDsKKwlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8IHJzcC0+Z3BudW0gPT0gcnNwLT5jb21wbGV0ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJcnNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKworCS8qIE9LLCB0aW1lIHRvIHJhdCBvbiBvdXIgYnVkZHkuLi4gKi8KKworCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSBzdGFsbHM6Iik7CisJZm9yICg7IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspIHsKKwkJaWYgKHJucF9jdXItPnFzbWFzayA9PSAwKQorCQkJY29udGludWU7CisJCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucF9jdXItPmdycGhpIC0gcm5wX2N1ci0+Z3JwbG87IGNwdSsrKQorCQkJaWYgKHJucF9jdXItPnFzbWFzayAmICgxVUwgPDwgY3B1KSkKKwkJCQlwcmludGsoIiAlZCIsIHJucF9jdXItPmdycGxvICsgY3B1KTsKKwl9CisJcHJpbnRrKCIgKGRldGVjdGVkIGJ5ICVkLCB0PSVsZCBqaWZmaWVzKVxuIiwKKwkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCAobG9uZykoamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpKTsKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsgIC8qIEtpY2sgdGhlbSBhbGwuICovCit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NwdV9zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCisJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVICVkIHN0YWxsICh0PSVsdSBqaWZmaWVzKVxuIiwKKwkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpOworCWR1bXBfc3RhY2soKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJaWYgKChsb25nKShqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsKSA+PSAwKQorCQlyc3AtPmppZmZpZXNfc3RhbGwgPQorCQkJamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlzZXRfbmVlZF9yZXNjaGVkKCk7ICAvKiBraWNrIG91cnNlbHZlcyB0byBnZXQgdGhpbmdzIGdvaW5nLiAqLworfQorCitzdGF0aWMgdm9pZCBjaGVja19jcHVfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwlsb25nIGRlbHRhOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCisJZGVsdGEgPSBqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsOworCXJucCA9IHJkcC0+bXlub2RlOworCWlmICgocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spICYmIGRlbHRhID49IDApIHsKKworCQkvKiBXZSBoYXZlbid0IGNoZWNrZWQgaW4sIHNvIGdvIGR1bXAgc3RhY2suICovCisJCXByaW50X2NwdV9zdGFsbChyc3ApOworCisJfSBlbHNlIGlmIChyc3AtPmdwbnVtICE9IHJzcC0+Y29tcGxldGVkICYmCisJCSAgIGRlbHRhID49IFJDVV9TVEFMTF9SQVRfREVMQVkpIHsKKworCQkvKiBUaGV5IGhhZCB0d28gdGltZSB1bml0cyB0byBkdW1wIHN0YWNrLCBzbyBjb21wbGFpbi4gKi8KKwkJcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHJzcCk7CisJfQorfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKworc3RhdGljIHZvaWQgcmVjb3JkX2dwX3N0YWxsX2NoZWNrX3RpbWUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCitzdGF0aWMgdm9pZCBjaGVja19jcHVfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLworCisvKgorICogVXBkYXRlIENQVS1sb2NhbCByY3VfZGF0YSBzdGF0ZSB0byByZWNvcmQgdGhlIG5ld2x5IG5vdGljZWQgZ3JhY2UgcGVyaW9kLgorICogVGhpcyBpcyB1c2VkIGJvdGggd2hlbiB3ZSBzdGFydGVkIHRoZSBncmFjZSBwZXJpb2QgYW5kIHdoZW4gd2Ugbm90aWNlCisgKiB0aGF0IHNvbWVvbmUgZWxzZSBzdGFydGVkIHRoZSBncmFjZSBwZXJpb2QuCisgKi8KK3N0YXRpYyB2b2lkIG5vdGVfbmV3X2dwbnVtKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJcmRwLT5xc19wZW5kaW5nID0gMTsKKwlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOworCXJkcC0+Z3BudW0gPSByc3AtPmdwbnVtOworCXJkcC0+bl9yY3VfcGVuZGluZ19mb3JjZV9xcyA9IHJkcC0+bl9yY3VfcGVuZGluZyArCisJCQkJICAgICAgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKK30KKworLyoKKyAqIERpZCBzb21lb25lIGVsc2Ugc3RhcnQgYSBuZXcgUkNVIGdyYWNlIHBlcmlvZCBzdGFydCBzaW5jZSB3ZSBsYXN0CisgKiBjaGVja2VkPyAgVXBkYXRlIGxvY2FsIHN0YXRlIGFwcHJvcHJpYXRlbHkgaWYgc28uICBNdXN0IGJlIGNhbGxlZAorICogb24gdGhlIENQVSBjb3JyZXNwb25kaW5nIHRvIHJkcC4KKyAqLworc3RhdGljIGludAorY2hlY2tfZm9yX25ld19ncmFjZV9wZXJpb2Qoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChyZHAtPmdwbnVtICE9IHJzcC0+Z3BudW0pIHsKKwkJbm90ZV9uZXdfZ3BudW0ocnNwLCByZHApOworCQlyZXQgPSAxOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0YXJ0IGEgbmV3IFJDVSBncmFjZSBwZXJpb2QgaWYgd2FycmFudGVkLCByZS1pbml0aWFsaXppbmcgdGhlIGhpZXJhcmNoeQorICogaW4gcHJlcGFyYXRpb24gZm9yIGRldGVjdGluZyB0aGUgbmV4dCBncmFjZSBwZXJpb2QuICBUaGUgY2FsbGVyIG11c3QgaG9sZAorICogdGhlIHJvb3Qgbm9kZSdzIC0+bG9jaywgd2hpY2ggaXMgcmVsZWFzZWQgYmVmb3JlIHJldHVybi4gIEhhcmQgaXJxcyBtdXN0CisgKiBiZSBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQKK3JjdV9zdGFydF9ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKK3sKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucF9jdXI7CisJc3RydWN0IHJjdV9ub2RlICpybnBfZW5kOworCisJaWYgKCFjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBZHZhbmNlIHRvIGEgbmV3IGdyYWNlIHBlcmlvZCBhbmQgaW5pdGlhbGl6ZSBzdGF0ZS4gKi8KKwlyc3AtPmdwbnVtKys7CisJcnNwLT5zaWduYWxlZCA9IFJDVV9HUF9JTklUOyAvKiBIb2xkIG9mZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUuICovCisJcnNwLT5qaWZmaWVzX2ZvcmNlX3FzID0gamlmZmllcyArIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVM7CisJcmRwLT5uX3JjdV9wZW5kaW5nX2ZvcmNlX3FzID0gcmRwLT5uX3JjdV9wZW5kaW5nICsKKwkJCQkgICAgICBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTOworCXJlY29yZF9ncF9zdGFsbF9jaGVja190aW1lKHJzcCk7CisJZHludGlja19yZWNvcmRfY29tcGxldGVkKHJzcCwgcnNwLT5jb21wbGV0ZWQgLSAxKTsKKwlub3RlX25ld19ncG51bShyc3AsIHJkcCk7CisKKwkvKgorCSAqIEJlY2F1c2Ugd2UgYXJlIGZpcnN0LCB3ZSBrbm93IHRoYXQgYWxsIG91ciBjYWxsYmFja3Mgd2lsbAorCSAqIGJlIGNvdmVyZWQgYnkgdGhpcyB1cGNvbWluZyBncmFjZSBwZXJpb2QsIGV2ZW4gdGhlIG9uZXMKKwkgKiB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBhcmJpdHJhcmlseSByZWNlbnRseS4KKwkgKi8KKwlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisJcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOworCisJLyogU3BlY2lhbC1jYXNlIHRoZSBjb21tb24gc2luZ2xlLWxldmVsIGNhc2UuICovCisJaWYgKE5VTV9SQ1VfTk9ERVMgPT0gMSkgeworCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGxlYXZlIGlycXMgZGlzYWJsZWQuICovCisKKworCS8qIEV4Y2x1ZGUgYW55IGNvbmN1cnJlbnQgQ1BVLWhvdHBsdWcgb3BlcmF0aW9ucy4gKi8KKwlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKworCS8qCisJICogU2V0IHRoZSBxdWllc2NlbnQtc3RhdGUtbmVlZGVkIGJpdHMgaW4gYWxsIHRoZSBub24tbGVhZiBSQ1UKKwkgKiBub2RlcyBmb3IgYWxsIGN1cnJlbnRseSBvbmxpbmUgQ1BVcy4gIFRoaXMgb3BlcmF0aW9uIHJlbGllcworCSAqIG9uIHRoZSBsYXlvdXQgb2YgdGhlIGhpZXJhcmNoeSB3aXRoaW4gdGhlIHJzcC0+bm9kZVtdIGFycmF5LgorCSAqIE5vdGUgdGhhdCBvdGhlciBDUFVzIHdpbGwgYWNjZXNzIG9ubHkgdGhlIGxlYXZlcyBvZiB0aGUKKwkgKiBoaWVyYXJjaHksIHdoaWNoIHN0aWxsIGluZGljYXRlIHRoYXQgbm8gZ3JhY2UgcGVyaW9kIGlzIGluCisJICogcHJvZ3Jlc3MuICBJbiBhZGRpdGlvbiwgd2UgaGF2ZSBleGNsdWRlZCBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLgorCSAqCisJICogV2UgdGhlcmVmb3JlIGRvIG5vdCBuZWVkIHRvIGhvbGQgYW55IGxvY2tzLiAgQW55IHJlcXVpcmVkCisJICogbWVtb3J5IGJhcnJpZXJzIHdpbGwgYmUgc3VwcGxpZWQgYnkgdGhlIGxvY2tzIGd1YXJkaW5nIHRoZQorCSAqIGxlYWYgcmN1X25vZGVzIGluIHRoZSBoaWVyYXJjaHkuCisJICovCisKKwlybnBfZW5kID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKKwlmb3IgKHJucF9jdXIgPSAmcnNwLT5ub2RlWzBdOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKQorCQlybnBfY3VyLT5xc21hc2sgPSBybnBfY3VyLT5xc21hc2tpbml0OworCisJLyoKKwkgKiBOb3cgc2V0IHVwIHRoZSBsZWFmIG5vZGVzLiAgSGVyZSB3ZSBtdXN0IGJlIGNhcmVmdWwuICBGaXJzdCwKKwkgKiB3ZSBuZWVkIHRvIGhvbGQgdGhlIGxvY2sgaW4gb3JkZXIgdG8gZXhjbHVkZSBvdGhlciBDUFVzLCB3aGljaAorCSAqIG1pZ2h0IGJlIGNvbnRlbmRpbmcgZm9yIHRoZSBsZWFmIG5vZGVzJyBsb2Nrcy4gIFNlY29uZCwgYXMKKwkgKiBzb29uIGFzIHdlIGluaXRpYWxpemUgYSBnaXZlbiBsZWFmIG5vZGUsIGl0cyBDUFVzIG1pZ2h0IHJ1bgorCSAqIHVwIHRoZSByZXN0IG9mIHRoZSBoaWVyYXJjaHkuICBXZSBtdXN0IHRoZXJlZm9yZSBhY3F1aXJlIGxvY2tzCisJICogZm9yIGVhY2ggbm9kZSB0aGF0IHdlIHRvdWNoIGR1cmluZyB0aGlzIHN0YWdlLiAgKEJ1dCB3ZSBzdGlsbAorCSAqIGFyZSBleGNsdWRpbmcgQ1BVLWhvdHBsdWcgb3BlcmF0aW9ucy4pCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGdyYWNlIHBlcmlvZCBjYW5ub3QgY29tcGxldGUgdW50aWwgd2UgZmluaXNoCisJICogdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGFzIHRoZXJlIHdpbGwgYmUgYXQgbGVhc3Qgb25lCisJICogcXNtYXNrIGJpdCBzZXQgaW4gdGhlIHJvb3Qgbm9kZSB1bnRpbCB0aGF0IHRpbWUsIG5hbWVseSB0aGUKKwkgKiBvbmUgY29ycmVzcG9uZGluZyB0byB0aGlzIENQVS4KKwkgKi8KKwlybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKKwlybnBfY3VyID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKKwlmb3IgKDsgcm5wX2N1ciA8IHJucF9lbmQ7IHJucF9jdXIrKykgeworCQlzcGluX2xvY2soJnJucF9jdXItPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJucF9jdXItPnFzbWFzayA9IHJucF9jdXItPnFzbWFza2luaXQ7CisJCXNwaW5fdW5sb2NrKCZybnBfY3VyLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCX0KKworCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBub3cgT0suICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIEFkdmFuY2UgdGhpcyBDUFUncyBjYWxsYmFja3MsIGJ1dCBvbmx5IGlmIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZAorICogaGFzIGVuZGVkLiAgVGhpcyBtYXkgYmUgY2FsbGVkIG9ubHkgZnJvbSB0aGUgQ1BVIHRvIHdob20gdGhlIHJkcAorICogYmVsb25ncy4KKyAqLworc3RhdGljIHZvaWQKK3JjdV9wcm9jZXNzX2dwX2VuZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQoreworCWxvbmcgY29tcGxldGVkX3NuYXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljb21wbGV0ZWRfc25hcCA9IEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKTsgIC8qIG91dHNpZGUgb2YgbG9jay4gKi8KKworCS8qIERpZCBhbm90aGVyIGdyYWNlIHBlcmlvZCBlbmQ/ICovCisJaWYgKHJkcC0+Y29tcGxldGVkICE9IGNvbXBsZXRlZF9zbmFwKSB7CisKKwkJLyogQWR2YW5jZSBjYWxsYmFja3MuICBObyBoYXJtIGlmIGxpc3QgZW1wdHkuICovCisJCXJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXTsKKwkJcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdOworCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisKKwkJLyogUmVtZW1iZXIgdGhhdCB3ZSBzYXcgdGhpcyBncmFjZS1wZXJpb2QgY29tcGxldGlvbi4gKi8KKwkJcmRwLT5jb21wbGV0ZWQgPSBjb21wbGV0ZWRfc25hcDsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogU2ltaWxhciB0byBjcHVfcXVpZXQoKSwgZm9yIHdoaWNoIGl0IGlzIGEgaGVscGVyIGZ1bmN0aW9uLiAgQWxsb3dzCisgKiBhIGdyb3VwIG9mIENQVXMgdG8gYmUgcXVpZXRlZCBhdCBvbmUgZ28sIHRob3VnaCBhbGwgdGhlIENQVXMgaW4gdGhlCisgKiBncm91cCBtdXN0IGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlLgorICogVGhhdCBzdHJ1Y3R1cmUncyBsb2NrIG11c3QgYmUgaGVsZCB1cG9uIGVudHJ5LCBhbmQgaXQgaXMgcmVsZWFzZWQKKyAqIGJlZm9yZSByZXR1cm4uCisgKi8KK3N0YXRpYyB2b2lkCitjcHVfcXVpZXRfbXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCV9fcmVsZWFzZXMocm5wLT5sb2NrKQoreworCS8qIFdhbGsgdXAgdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gKi8KKwlmb3IgKDs7KSB7CisJCWlmICghKHJucC0+cXNtYXNrICYgbWFzaykpIHsKKworCQkJLyogT3VyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQsIHNvIGRvbmUuICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCQlybnAtPnFzbWFzayAmPSB+bWFzazsKKwkJaWYgKHJucC0+cXNtYXNrICE9IDApIHsKKworCQkJLyogT3RoZXIgYml0cyBzdGlsbCBzZXQgYXQgdGhpcyBsZXZlbCwgc28gZG9uZS4gKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJCW1hc2sgPSBybnAtPmdycG1hc2s7CisJCWlmIChybnAtPnBhcmVudCA9PSBOVUxMKSB7CisKKwkJCS8qIE5vIG1vcmUgbGV2ZWxzLiAgRXhpdCBsb29wIGhvbGRpbmcgcm9vdCBsb2NrLiAqLworCisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcm5wID0gcm5wLT5wYXJlbnQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKgorCSAqIEdldCBoZXJlIGlmIHdlIGFyZSB0aGUgbGFzdCBDUFUgdG8gcGFzcyB0aHJvdWdoIGEgcXVpZXNjZW50CisJICogc3RhdGUgZm9yIHRoaXMgZ3JhY2UgcGVyaW9kLiAgQ2xlYW4gdXAgYW5kIGxldCByY3Vfc3RhcnRfZ3AoKQorCSAqIHN0YXJ0IHVwIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCBpZiBvbmUgaXMgbmVlZGVkLiAgTm90ZSB0aGF0CisJICogd2Ugc3RpbGwgaG9sZCBybnAtPmxvY2ssIGFzIHJlcXVpcmVkIGJ5IHJjdV9zdGFydF9ncCgpLCB3aGljaAorCSAqIHdpbGwgcmVsZWFzZSBpdC4KKwkgKi8KKwlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CisJcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworfQorCisvKgorICogUmVjb3JkIGEgcXVpZXNjZW50IHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIENQVSwgd2hpY2ggbXVzdCBlaXRoZXIgYmUKKyAqIHRoZSBjdXJyZW50IENQVSBvciBhbiBvZmZsaW5lIENQVS4gIFRoZSBsYXN0Y29tcCBhcmd1bWVudCBpcyB1c2VkIHRvCisgKiBtYWtlIHN1cmUgd2UgYXJlIHN0aWxsIGluIHRoZSBncmFjZSBwZXJpb2Qgb2YgaW50ZXJlc3QuICBXZSBkb24ndCB3YW50CisgKiB0byBlbmQgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGJhc2VkIG9uIHF1aWVzY2VudCBzdGF0ZXMgZGV0ZWN0ZWQgaW4KKyAqIGFuIGVhcmxpZXIgZ3JhY2UgcGVyaW9kIQorICovCitzdGF0aWMgdm9pZAorY3B1X3F1aWV0KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHAsIGxvbmcgbGFzdGNvbXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJc3RydWN0IHJjdV9ub2RlICpybnA7CisKKwlybnAgPSByZHAtPm15bm9kZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJaWYgKGxhc3Rjb21wICE9IEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSkgeworCisJCS8qCisJCSAqIFNvbWVvbmUgYmVhdCB1cyB0byBpdCBmb3IgdGhpcyBncmFjZSBwZXJpb2QsIHNvIGxlYXZlLgorCQkgKiBUaGUgcmFjZSB3aXRoIEdQIHN0YXJ0IGlzIHJlc29sdmVkIGJ5IHRoZSBmYWN0IHRoYXQgd2UKKwkJICogaG9sZCB0aGUgbGVhZiByY3Vfbm9kZSBsb2NrLCBzbyB0aGF0IHRoZSBwZXItQ1BVIGJpdHMKKwkJICogY2Fubm90IHlldCBiZSBpbml0aWFsaXplZCAtLSBzbyB3ZSB3b3VsZCBzaW1wbHkgZmluZCBvdXIKKwkJICogQ1BVJ3MgYml0IGFscmVhZHkgY2xlYXJlZCBpbiBjcHVfcXVpZXRfbXNrKCkgaWYgdGhpcyByYWNlCisJCSAqIG9jY3VycmVkLgorCQkgKi8KKwkJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsJLyogdHJ5IGFnYWluIGxhdGVyISAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwltYXNrID0gcmRwLT5ncnBtYXNrOworCWlmICgocm5wLT5xc21hc2sgJiBtYXNrKSA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCXJkcC0+cXNfcGVuZGluZyA9IDA7CisKKwkJLyoKKwkJICogVGhpcyBHUCBjYW4ndCBlbmQgdW50aWwgY3B1IGNoZWNrcyBpbiwgc28gYWxsIG9mIG91cgorCQkgKiBjYWxsYmFja3MgY2FuIGJlIHByb2Nlc3NlZCBkdXJpbmcgdGhlIG5leHQgR1AuCisJCSAqLworCQlyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOworCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisKKwkJY3B1X3F1aWV0X21zayhtYXNrLCByc3AsIHJucCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2sgKi8KKwl9Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBuZXcgZ3JhY2UgcGVyaW9kIG9mIHdoaWNoIHRoaXMgQ1BVCisgKiBpcyBub3QgeWV0IGF3YXJlLCBhbmQgaWYgc28sIHNldCB1cCBsb2NhbCByY3VfZGF0YSBzdGF0ZSBmb3IgaXQuCisgKiBPdGhlcndpc2UsIHNlZSBpZiB0aGlzIENQVSBoYXMganVzdCBwYXNzZWQgdGhyb3VnaCBpdHMgZmlyc3QKKyAqIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhpcyBncmFjZSBwZXJpb2QsIGFuZCByZWNvcmQgdGhhdCBmYWN0IGlmIHNvLgorICovCitzdGF0aWMgdm9pZAorcmN1X2NoZWNrX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQoreworCS8qIElmIHRoZXJlIGlzIG5vdyBhIG5ldyBncmFjZSBwZXJpb2QsIHJlY29yZCBhbmQgcmV0dXJuLiAqLworCWlmIChjaGVja19mb3JfbmV3X2dyYWNlX3BlcmlvZChyc3AsIHJkcCkpCisJCXJldHVybjsKKworCS8qCisJICogRG9lcyB0aGlzIENQVSBzdGlsbCBuZWVkIHRvIGRvIGl0cyBwYXJ0IGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZD8KKwkgKiBJZiBubywgcmV0dXJuIGFuZCBsZXQgdGhlIG90aGVyIENQVXMgZG8gdGhlaXIgcGFydCBhcyB3ZWxsLgorCSAqLworCWlmICghcmRwLT5xc19wZW5kaW5nKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdhcyB0aGVyZSBhIHF1aWVzY2VudCBzdGF0ZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBncmFjZQorCSAqIHBlcmlvZD8gSWYgbm8sIHRoZW4gZXhpdCBhbmQgd2FpdCBmb3IgdGhlIG5leHQgY2FsbC4KKwkgKi8KKwlpZiAoIXJkcC0+cGFzc2VkX3F1aWVzYykKKwkJcmV0dXJuOworCisJLyogVGVsbCBSQ1Ugd2UgYXJlIGRvbmUgKGJ1dCBjcHVfcXVpZXQoKSB3aWxsIGJlIHRoZSBqdWRnZSBvZiB0aGF0KS4gKi8KKwljcHVfcXVpZXQocmRwLT5jcHUsIHJzcCwgcmRwLCByZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkKTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCisvKgorICogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgYml0bWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeQorICogYW5kIG1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBvdXRnb2luZyBDUFUgdG8gdGhlIGN1cnJlbnQgb25lLgorICovCitzdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGxhc3Rjb21wOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW2NwdV07CisJc3RydWN0IHJjdV9kYXRhICpyZHBfbWU7CisJc3RydWN0IHJjdV9ub2RlICpybnA7CisKKwkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisKKwkvKiBSZW1vdmUgdGhlIG91dGdvaW5nIENQVSBmcm9tIHRoZSBtYXNrcyBpbiB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAqLworCXJucCA9IHJkcC0+bXlub2RlOworCW1hc2sgPSByZHAtPmdycG1hc2s7CS8qIHJucC0+Z3JwbG8gaXMgY29uc3RhbnQuICovCisJZG8geworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJucC0+cXNtYXNraW5pdCAmPSB+bWFzazsKKwkJaWYgKHJucC0+cXNtYXNraW5pdCAhPSAwKSB7CisJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJYnJlYWs7CisJCX0KKwkJbWFzayA9IHJucC0+Z3JwbWFzazsKKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcm5wID0gcm5wLT5wYXJlbnQ7CisJfSB3aGlsZSAocm5wICE9IE5VTEwpOworCWxhc3Rjb21wID0gcnNwLT5jb21wbGV0ZWQ7CisKKwlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisKKwkvKiBCZWluZyBvZmZsaW5lIGlzIGEgcXVpZXNjZW50IHN0YXRlLCBzbyBnbyByZWNvcmQgaXQuICovCisJY3B1X3F1aWV0KGNwdSwgcnNwLCByZHAsIGxhc3Rjb21wKTsKKworCS8qCisJICogTW92ZSBjYWxsYmFja3MgZnJvbSB0aGUgb3V0Z29pbmcgQ1BVIHRvIHRoZSBydW5uaW5nIENQVS4KKwkgKiBOb3RlIHRoYXQgdGhlIG91dGdvaW5nIENQVSBpcyBub3cgcXVpc2NlbnQsIHNvIGl0IGlzIG5vdworCSAqICh1bmNoYXJhY3RlcmlzdGljYWxseSkgc2FmZSB0byBhY2Nlc3MgaXQgcmN1X2RhdGEgc3RydWN0dXJlLgorCSAqIE5vdGUgYWxzbyB0aGF0IHdlIG11c3QgY2FyZWZ1bGx5IHJldGFpbiB0aGUgb3JkZXIgb2YgdGhlCisJICogb3V0Z29pbmcgQ1BVJ3MgY2FsbGJhY2tzIGluIG9yZGVyIGZvciByY3VfYmFycmllcigpIHRvIHdvcmsKKwkgKiBjb3JyZWN0bHkuICBGaW5hbGx5LCBub3RlIHRoYXQgd2Ugc3RhcnQgYWxsIHRoZSBjYWxsYmFja3MKKwkgKiBhZnJlc2gsIGV2ZW4gdGhvc2UgdGhhdCBoYXZlIHBhc3NlZCB0aHJvdWdoIGEgZ3JhY2UgcGVyaW9kCisJICogYW5kIGFyZSB0aGVyZWZvcmUgcmVhZHkgdG8gaW52b2tlLiAgVGhlIHRoZW9yeSBpcyB0aGF0IGhvdHBsdWcKKwkgKiBldmVudHMgYXJlIHJhcmUsIGFuZCB0aGF0IGlmIHRoZXkgYXJlIGZyZXF1ZW50IGVub3VnaCB0bworCSAqIGluZGVmaW5pdGVseSBkZWxheSBjYWxsYmFja3MsIHlvdSBoYXZlIGZhciB3b3JzZSB0aGluZ3MgdG8KKwkgKiBiZSB3b3JyeWluZyBhYm91dC4KKwkgKi8KKwlyZHBfbWUgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOworCWlmIChyZHAtPm54dGxpc3QgIT0gTlVMTCkgeworCQkqcmRwX21lLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHRsaXN0OworCQlyZHBfbWUtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CisJCXJkcC0+bnh0bGlzdCA9IE5VTEw7CisJCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCisJCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OworCQlyZHBfbWUtPnFsZW4gKz0gcmRwLT5xbGVuOworCQlyZHAtPnFsZW4gPSAwOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBDUFUgZnJvbSB0aGUgUkNVIGhpZXJhcmNoeSBhbmQgbW92ZSBhbnkgcGVuZGluZworICogY2FsbGJhY2tzIHRoYXQgaXQgbWlnaHQgaGF2ZSB0byB0aGUgY3VycmVudCBDUFUuICBUaGlzIGNvZGUgYXNzdW1lcworICogdGhhdCBhdCBsZWFzdCBvbmUgQ1BVIGluIHRoZSBzeXN0ZW0gd2lsbCByZW1haW4gcnVubmluZyBhdCBhbGwgdGltZXMuCisgKiBBbnkgYXR0ZW1wdCB0byBvZmZsaW5lIC1hbGwtIENQVXMgaXMgbGlrZWx5IHRvIHN0cmFuZCBSQ1UgY2FsbGJhY2tzLgorICovCitzdGF0aWMgdm9pZCByY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSkKK3sKKwlfX3JjdV9vZmZsaW5lX2NwdShjcHUsICZyY3Vfc3RhdGUpOworCV9fcmN1X29mZmxpbmVfY3B1KGNwdSwgJnJjdV9iaF9zdGF0ZSk7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KKworc3RhdGljIHZvaWQgcmN1X29mZmxpbmVfY3B1KGludCBjcHUpCit7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCisKKy8qCisgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQorICogcGVyaW9kLiAgVGhvdHRsZSBhcyBzcGVjaWZpZWQgYnkgcmRwLT5ibGltaXQuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByY3VfaGVhZCAqbmV4dCwgKmxpc3QsICoqdGFpbDsKKwlpbnQgY291bnQ7CisKKwkvKiBJZiBubyBjYWxsYmFja3MgYXJlIHJlYWR5LCBqdXN0IHJldHVybi4qLworCWlmICghY3B1X2hhc19jYWxsYmFja3NfcmVhZHlfdG9faW52b2tlKHJkcCkpCisJCXJldHVybjsKKworCS8qCisJICogRXh0cmFjdCB0aGUgbGlzdCBvZiByZWFkeSBjYWxsYmFja3MsIGRpc2FibGluZyB0byBwcmV2ZW50CisJICogcmFjZXMgd2l0aCBjYWxsX3JjdSgpIGZyb20gaW50ZXJydXB0IGhhbmRsZXJzLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsaXN0ID0gcmRwLT5ueHRsaXN0OworCXJkcC0+bnh0bGlzdCA9ICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF07CisJKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSA9IE5VTEw7CisJdGFpbCA9IHJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXTsKKwlmb3IgKGNvdW50ID0gUkNVX05FWFRfU0laRSAtIDE7IGNvdW50ID49IDA7IGNvdW50LS0pCisJCWlmIChyZHAtPm54dHRhaWxbY291bnRdID09IHJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSkKKwkJCXJkcC0+bnh0dGFpbFtjb3VudF0gPSAmcmRwLT5ueHRsaXN0OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIEludm9rZSBjYWxsYmFja3MuICovCisJY291bnQgPSAwOworCXdoaWxlIChsaXN0KSB7CisJCW5leHQgPSBsaXN0LT5uZXh0OworCQlwcmVmZXRjaChuZXh0KTsKKwkJbGlzdC0+ZnVuYyhsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJCWlmICgrK2NvdW50ID49IHJkcC0+YmxpbWl0KQorCQkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogVXBkYXRlIGNvdW50LCBhbmQgcmVxdWV1ZSBhbnkgcmVtYWluaW5nIGNhbGxiYWNrcy4gKi8KKwlyZHAtPnFsZW4gLT0gY291bnQ7CisJaWYgKGxpc3QgIT0gTlVMTCkgeworCQkqdGFpbCA9IHJkcC0+bnh0bGlzdDsKKwkJcmRwLT5ueHRsaXN0ID0gbGlzdDsKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgUkNVX05FWFRfU0laRTsgY291bnQrKykKKwkJCWlmICgmcmRwLT5ueHRsaXN0ID09IHJkcC0+bnh0dGFpbFtjb3VudF0pCisJCQkJcmRwLT5ueHR0YWlsW2NvdW50XSA9IHRhaWw7CisJCQllbHNlCisJCQkJYnJlYWs7CisJfQorCisJLyogUmVpbnN0YXRlIGJhdGNoIGxpbWl0IGlmIHdlIGhhdmUgd29ya2VkIGRvd24gdGhlIGV4Y2Vzcy4gKi8KKwlpZiAocmRwLT5ibGltaXQgPT0gTE9OR19NQVggJiYgcmRwLT5xbGVuIDw9IHFsb3dtYXJrKQorCQlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIFJlLXJhaXNlIHRoZSBSQ1Ugc29mdGlycSBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlbWFpbmluZy4gKi8KKwlpZiAoY3B1X2hhc19jYWxsYmFja3NfcmVhZHlfdG9faW52b2tlKHJkcCkpCisJCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgQ1BVIGlzIGluIGEgbm9uLWNvbnRleHQtc3dpdGNoIHF1aWVzY2VudCBzdGF0ZQorICogKHVzZXIgbW9kZSBvciBpZGxlIGxvb3AgZm9yIHJjdSwgbm9uLXNvZnRpcnEgZXhlY3V0aW9uIGZvciByY3VfYmgpLgorICogQWxzbyBzY2hlZHVsZSB0aGUgUkNVIHNvZnRpcnEgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaGFyZGlycXMgZGlzYWJsZWQuICBJdCBpcyBub3JtYWxseQorICogaW52b2tlZCBmcm9tIHRoZSBzY2hlZHVsaW5nLWNsb2NrIGludGVycnVwdC4gIElmIHJjdV9wZW5kaW5nIHJldHVybnMKKyAqIGZhbHNlLCB0aGVyZSBpcyBubyBwb2ludCBpbiBpbnZva2luZyByY3VfY2hlY2tfY2FsbGJhY2tzKCkuCisgKi8KK3ZvaWQgcmN1X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1LCBpbnQgdXNlcikKK3sKKwlpZiAodXNlciB8fAorCSAgICAoaWRsZV9jcHUoY3B1KSAmJiAhaW5fc29mdGlycSgpICYmCisJCQkJaGFyZGlycV9jb3VudCgpIDw9ICgxIDw8IEhBUkRJUlFfU0hJRlQpKSkgeworCisJCS8qCisJCSAqIEdldCBoZXJlIGlmIHRoaXMgQ1BVIHRvb2sgaXRzIGludGVycnVwdCBmcm9tIHVzZXIKKwkJICogbW9kZSBvciBmcm9tIHRoZSBpZGxlIGxvb3AsIGFuZCBpZiB0aGlzIGlzIG5vdCBhCisJCSAqIG5lc3RlZCBpbnRlcnJ1cHQuICBJbiB0aGlzIGNhc2UsIHRoZSBDUFUgaXMgaW4KKwkJICogYSBxdWllc2NlbnQgc3RhdGUsIHNvIGNvdW50IGl0LgorCQkgKgorCQkgKiBObyBtZW1vcnkgYmFycmllciBpcyByZXF1aXJlZCBoZXJlIGJlY2F1c2UgYm90aAorCQkgKiByY3VfcXNjdHJfaW5jKCkgYW5kIHJjdV9iaF9xc2N0cl9pbmMoKSByZWZlcmVuY2UKKwkJICogb25seSBDUFUtbG9jYWwgdmFyaWFibGVzIHRoYXQgb3RoZXIgQ1BVcyBuZWl0aGVyCisJCSAqIGFjY2VzcyBub3IgbW9kaWZ5LCBhdCBsZWFzdCBub3Qgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcKKwkJICogQ1BVIGlzIG9ubGluZS4KKwkJICovCisKKwkJcmN1X3FzY3RyX2luYyhjcHUpOworCQlyY3VfYmhfcXNjdHJfaW5jKGNwdSk7CisKKwl9IGVsc2UgaWYgKCFpbl9zb2Z0aXJxKCkpIHsKKworCQkvKgorCQkgKiBHZXQgaGVyZSBpZiB0aGlzIENQVSBkaWQgbm90IHRha2UgaXRzIGludGVycnVwdCBmcm9tCisJCSAqIHNvZnRpcnEsIGluIG90aGVyIHdvcmRzLCBpZiBpdCBpcyBub3QgaW50ZXJydXB0aW5nCisJCSAqIGEgcmN1X2JoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgVGhpcyBpcyBhbiBfYmgKKwkJICogY3JpdGljYWwgc2VjdGlvbiwgc28gY291bnQgaXQuCisJCSAqLworCisJCXJjdV9iaF9xc2N0cl9pbmMoY3B1KTsKKwl9CisJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKKy8qCisgKiBTY2FuIHRoZSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZXMsIHByb2Nlc3NpbmcgZHludGljayBzdGF0ZSBmb3IgYW55IHRoYXQKKyAqIGhhdmUgbm90IHlldCBlbmNvdW50ZXJlZCBhIHF1aWVzY2VudCBzdGF0ZSwgdXNpbmcgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZC4KKyAqIFJldHVybnMgMSBpZiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgZW5kcyB3aGlsZSBzY2FubmluZyAocG9zc2libHkKKyAqIGJlY2F1c2Ugd2UgbWFkZSBpdCBlbmQpLgorICovCitzdGF0aWMgaW50IHJjdV9wcm9jZXNzX2R5bnRpY2soc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBsb25nIGxhc3Rjb21wLAorCQkJICAgICAgIGludCAoKmYpKHN0cnVjdCByY3VfZGF0YSAqKSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpdDsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07CisJc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKKworCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJCW1hc2sgPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQlpZiAocnNwLT5jb21wbGV0ZWQgIT0gbGFzdGNvbXApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChybnBfY3VyLT5xc21hc2sgPT0gMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKwkJY3B1ID0gcm5wX2N1ci0+Z3JwbG87CisJCWJpdCA9IDE7CisJCWZvciAoOyBjcHUgPD0gcm5wX2N1ci0+Z3JwaGk7IGNwdSsrLCBiaXQgPDw9IDEpIHsKKwkJCWlmICgocm5wX2N1ci0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCisJCQkJbWFzayB8PSBiaXQ7CisJCX0KKwkJaWYgKG1hc2sgIT0gMCAmJiByc3AtPmNvbXBsZXRlZCA9PSBsYXN0Y29tcCkgeworCisJCQkvKiBjcHVfcXVpZXRfbXNrKCkgcmVsZWFzZXMgcm5wX2N1ci0+bG9jay4gKi8KKwkJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnBfY3VyLCBmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnBfY3VyLT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRm9yY2UgcXVpZXNjZW50IHN0YXRlcyBvbiByZWx1Y3RhbnQgQ1BVcywgYW5kIGFsc28gZGV0ZWN0IHdoaWNoCisgKiBDUFVzIGFyZSBpbiBkeW50aWNrLWlkbGUgbW9kZS4KKyAqLworc3RhdGljIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHJlbGF4ZWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGxhc3Rjb21wOworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCXU4IHNpZ25hbGVkOworCisJaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSkKKwkJcmV0dXJuOyAgLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLCBub3RoaW5nIHRvIGZvcmNlLiAqLworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpKSB7CisJCXJzcC0+bl9mb3JjZV9xc19saCsrOyAvKiBJbmV4YWN0LCBjYW4gbG9zZSBjb3VudHMuICBUb3VnaCEgKi8KKwkJcmV0dXJuOwkvKiBTb21lb25lIGVsc2UgaXMgYWxyZWFkeSBvbiB0aGUgam9iLiAqLworCX0KKwlpZiAocmVsYXhlZCAmJgorCSAgICAobG9uZykocnNwLT5qaWZmaWVzX2ZvcmNlX3FzIC0gamlmZmllcykgPj0gMCAmJgorCSAgICAocmRwLT5uX3JjdV9wZW5kaW5nX2ZvcmNlX3FzIC0gcmRwLT5uX3JjdV9wZW5kaW5nKSA+PSAwKQorCQlnb3RvIHVubG9ja19yZXQ7IC8qIG5vIGVtZXJnZW5jeSBhbmQgZG9uZSByZWNlbnRseS4gKi8KKwlyc3AtPm5fZm9yY2VfcXMrKzsKKwlzcGluX2xvY2soJnJucC0+bG9jayk7CisJbGFzdGNvbXAgPSByc3AtPmNvbXBsZXRlZDsKKwlzaWduYWxlZCA9IHJzcC0+c2lnbmFsZWQ7CisJcnNwLT5qaWZmaWVzX2ZvcmNlX3FzID0gamlmZmllcyArIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVM7CisJcmRwLT5uX3JjdV9wZW5kaW5nX2ZvcmNlX3FzID0gcmRwLT5uX3JjdV9wZW5kaW5nICsKKwkJCQkgICAgICBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTOworCWlmIChsYXN0Y29tcCA9PSByc3AtPmdwbnVtKSB7CisJCXJzcC0+bl9mb3JjZV9xc19uZ3ArKzsKKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CisJCWdvdG8gdW5sb2NrX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCisJfQorCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOworCXN3aXRjaCAoc2lnbmFsZWQpIHsKKwljYXNlIFJDVV9HUF9JTklUOgorCisJCWJyZWFrOyAvKiBncmFjZSBwZXJpb2Qgc3RpbGwgaW5pdGlhbGl6aW5nLCBpZ25vcmUuICovCisKKwljYXNlIFJDVV9TQVZFX0RZTlRJQ0s6CisKKwkJaWYgKFJDVV9TSUdOQUxfSU5JVCAhPSBSQ1VfU0FWRV9EWU5USUNLKQorCQkJYnJlYWs7IC8qIFNvIGdjYyByZWNvZ25pemVzIHRoZSBkZWFkIGNvZGUuICovCisKKwkJLyogUmVjb3JkIGR5bnRpY2staWRsZSBzdGF0ZS4gKi8KKwkJaWYgKHJjdV9wcm9jZXNzX2R5bnRpY2socnNwLCBsYXN0Y29tcCwKKwkJCQkJZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIpKQorCQkJZ290byB1bmxvY2tfcmV0OworCisJCS8qIFVwZGF0ZSBzdGF0ZSwgcmVjb3JkIGNvbXBsZXRpb24gY291bnRlci4gKi8KKwkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOworCQlpZiAobGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQpIHsKKwkJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfRk9SQ0VfUVM7CisJCQlkeW50aWNrX3JlY29yZF9jb21wbGV0ZWQocnNwLCBsYXN0Y29tcCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CisJCWJyZWFrOworCisJY2FzZSBSQ1VfRk9SQ0VfUVM6CisKKwkJLyogQ2hlY2sgZHludGljay1pZGxlIHN0YXRlLCBzZW5kIElQSSB0byBsYWdnYXJ0cy4gKi8KKwkJaWYgKHJjdV9wcm9jZXNzX2R5bnRpY2socnNwLCBkeW50aWNrX3JlY2FsbF9jb21wbGV0ZWQocnNwKSwKKwkJCQkJcmN1X2ltcGxpY2l0X2R5bnRpY2tzX3FzKSkKKwkJCWdvdG8gdW5sb2NrX3JldDsKKworCQkvKiBMZWF2ZSBzdGF0ZSBpbiBjYXNlIG1vcmUgZm9yY2luZyBpcyByZXF1aXJlZC4gKi8KKworCQlicmVhazsKKwl9Cit1bmxvY2tfcmV0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1NNUCAqLworCitzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCkKK3sKKwlzZXRfbmVlZF9yZXNjaGVkKCk7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1NNUCAqLworCisvKgorICogVGhpcyBkb2VzIHRoZSBSQ1UgcHJvY2Vzc2luZyB3b3JrIGZyb20gc29mdGlycSBjb250ZXh0IGZvciB0aGUKKyAqIHNwZWNpZmllZCByY3Vfc3RhdGUgYW5kIHJjdV9kYXRhIHN0cnVjdHVyZXMuICBUaGlzIG1heSBiZSBjYWxsZWQKKyAqIG9ubHkgZnJvbSB0aGUgQ1BVIHRvIHdob20gdGhlIHJkcCBiZWxvbmdzLgorICovCitzdGF0aWMgdm9pZAorX19yY3VfcHJvY2Vzc19jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBJZiBhbiBSQ1UgR1AgaGFzIGdvbmUgbG9uZyBlbm91Z2gsIGdvIGNoZWNrIGZvciBkeW50aWNrCisJICogaWRsZSBDUFVzIGFuZCwgaWYgbmVlZGVkLCBzZW5kIHJlc2NoZWQgSVBJcy4KKwkgKi8KKwlpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDAgfHwKKwkgICAgKHJkcC0+bl9yY3VfcGVuZGluZ19mb3JjZV9xcyAtIHJkcC0+bl9yY3VfcGVuZGluZykgPCAwKQorCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKKworCS8qCisJICogQWR2YW5jZSBjYWxsYmFja3MgaW4gcmVzcG9uc2UgdG8gZW5kIG9mIGVhcmxpZXIgZ3JhY2UKKwkgKiBwZXJpb2QgdGhhdCBzb21lIG90aGVyIENQVSBlbmRlZC4KKwkgKi8KKwlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByZHApOworCisJLyogVXBkYXRlIFJDVSBzdGF0ZSBiYXNlZCBvbiBhbnkgcmVjZW50IHF1aWVzY2VudCBzdGF0ZXMuICovCisJcmN1X2NoZWNrX3F1aWVzY2VudF9zdGF0ZShyc3AsIHJkcCk7CisKKwkvKiBEb2VzIHRoaXMgQ1BVIHJlcXVpcmUgYSBub3QteWV0LXN0YXJ0ZWQgZ3JhY2UgcGVyaW9kPyAqLworCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrLCBmbGFncyk7CisJCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgIC8qIHJlbGVhc2VzIGFib3ZlIGxvY2sgKi8KKwl9CisKKwkvKiBJZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlYWR5LCBpbnZva2UgdGhlbS4gKi8KKwlyY3VfZG9fYmF0Y2gocmRwKTsKK30KKworLyoKKyAqIERvIHNvZnRpcnEgcHJvY2Vzc2luZyBmb3IgdGhlIGN1cnJlbnQgQ1BVLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJvY2Vzc19jYWxsYmFja3Moc3RydWN0IHNvZnRpcnFfYWN0aW9uICp1bnVzZWQpCit7CisJLyoKKwkgKiBNZW1vcnkgcmVmZXJlbmNlcyBmcm9tIGFueSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zCisJICogZXhlY3V0ZWQgYnkgdGhlIGludGVycnVwdGVkIGNvZGUgbXVzdCBiZSBzZWVuIGJlZm9yZSBhbnkgUkNVCisJICogZ3JhY2UtcGVyaW9kIG1hbmlwdWxhdGlvbnMgYmVsb3cuCisJICovCisJc21wX21iKCk7IC8qIFNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLworCisJX19yY3VfcHJvY2Vzc19jYWxsYmFja3MoJnJjdV9zdGF0ZSwgJl9fZ2V0X2NwdV92YXIocmN1X2RhdGEpKTsKKwlfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcygmcmN1X2JoX3N0YXRlLCAmX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSkpOworCisJLyoKKwkgKiBNZW1vcnkgcmVmZXJlbmNlcyBmcm9tIGFueSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zCisJICogZXhlY3V0ZWQgYnkgdGhlIGludGVycnVwdGVkIGNvZGUgbXVzdCBiZSBzZWVuIGFmdGVyIGFueSBSQ1UKKwkgKiBncmFjZS1wZXJpb2QgbWFuaXB1bGF0aW9ucyBhYm92ZS4KKwkgKi8KKwlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCit9CisKK3N0YXRpYyB2b2lkCitfX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSwKKwkgICBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKworCWhlYWQtPmZ1bmMgPSBmdW5jOworCWhlYWQtPm5leHQgPSBOVUxMOworCisJc21wX21iKCk7IC8qIEVuc3VyZSBSQ1UgdXBkYXRlIHNlZW4gYmVmb3JlIGNhbGxiYWNrIHJlZ2lzdHJ5LiAqLworCisJLyoKKwkgKiBPcHBvcnR1bmlzdGljYWxseSBub3RlIGdyYWNlLXBlcmlvZCBlbmRpbmdzIGFuZCBiZWdpbm5pbmdzLgorCSAqIE5vdGUgdGhhdCB3ZSBtaWdodCBzZWUgYSBiZWdpbm5pbmcgcmlnaHQgYWZ0ZXIgd2Ugc2VlIGFuCisJICogZW5kLCBidXQgbmV2ZXIgdmljZSB2ZXJzYSwgc2luY2UgdGhpcyBDUFUgaGFzIHRvIHBhc3MgdGhyb3VnaAorCSAqIGEgcXVpZXNjZW50IHN0YXRlIGJldHdlZW50aW1lcy4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByZHApOworCWNoZWNrX2Zvcl9uZXdfZ3JhY2VfcGVyaW9kKHJzcCwgcmRwKTsKKworCS8qIEFkZCB0aGUgY2FsbGJhY2sgdG8gb3VyIGxpc3QuICovCisJKnJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IGhlYWQ7CisJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gJmhlYWQtPm5leHQ7CisKKwkvKiBTdGFydCBhIG5ldyBncmFjZSBwZXJpb2QgaWYgb25lIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuICovCisJaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSkgeworCQl1bnNpZ25lZCBsb25nIG5lc3RmbGFnOworCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9yb290LT5sb2NrLCBuZXN0ZmxhZyk7CisJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLworCX0KKworCS8qIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuICovCisJaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcWhpbWFyaykpIHsKKwkJcmRwLT5ibGltaXQgPSBMT05HX01BWDsKKwkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJfSBlbHNlIGlmICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCB8fAorCQkgICAocmRwLT5uX3JjdV9wZW5kaW5nX2ZvcmNlX3FzIC0gcmRwLT5uX3JjdV9wZW5kaW5nKSA8IDApCisJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFF1ZXVlIGFuIFJDVSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhIGdyYWNlIHBlcmlvZC4KKyAqLwordm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpCit7CisJX19jYWxsX3JjdShoZWFkLCBmdW5jLCAmcmN1X3N0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKKworLyoKKyAqIFF1ZXVlIGFuIFJDVSBmb3IgaW52b2NhdGlvbiBhZnRlciBhIHF1aWNrZXIgZ3JhY2UgcGVyaW9kLgorICovCit2b2lkIGNhbGxfcmN1X2JoKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKK3sKKwlfX2NhbGxfcmN1KGhlYWQsIGZ1bmMsICZyY3VfYmhfc3RhdGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3VfYmgpOworCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbW1lZGlhdGUgUkNVLXJlbGF0ZWQgd29yayB0byBiZSBkb25lCisgKiBieSB0aGUgY3VycmVudCBDUFUsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgb2YgUkNVLCByZXR1cm5pbmcgMSBpZiBzby4KKyAqIFRoZSBjaGVja3MgYXJlIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgZXhwZW5zZTogY2hlY2tzIHRoYXQgY2FuIGJlCisgKiBjYXJyaWVkIG91dCBhZ2FpbnN0IENQVS1sb2NhbCBzdGF0ZSBhcmUgcGVyZm9ybWVkIGZpcnN0LiAgSG93ZXZlciwKKyAqIHdlIG11c3QgY2hlY2sgZm9yIENQVSBzdGFsbHMgZmlyc3QsIGVsc2Ugd2UgbWlnaHQgbm90IGdldCBhIGNoYW5jZS4KKyAqLworc3RhdGljIGludCBfX3JjdV9wZW5kaW5nKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJcmRwLT5uX3JjdV9wZW5kaW5nKys7CisKKwkvKiBDaGVjayBmb3IgQ1BVIHN0YWxscywgaWYgZW5hYmxlZC4gKi8KKwljaGVja19jcHVfc3RhbGwocnNwLCByZHApOworCisJLyogSXMgdGhlIFJDVSBjb3JlIHdhaXRpbmcgZm9yIGEgcXVpZXNjZW50IHN0YXRlIGZyb20gdGhpcyBDUFU/ICovCisJaWYgKHJkcC0+cXNfcGVuZGluZykKKwkJcmV0dXJuIDE7CisKKwkvKiBEb2VzIHRoaXMgQ1BVIGhhdmUgY2FsbGJhY2tzIHJlYWR5IHRvIGludm9rZT8gKi8KKwlpZiAoY3B1X2hhc19jYWxsYmFja3NfcmVhZHlfdG9faW52b2tlKHJkcCkpCisJCXJldHVybiAxOworCisJLyogSGFzIFJDVSBnb25lIGlkbGUgd2l0aCB0aGlzIENQVSBuZWVkaW5nIGFub3RoZXIgZ3JhY2UgcGVyaW9kPyAqLworCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpCisJCXJldHVybiAxOworCisJLyogSGFzIGFub3RoZXIgUkNVIGdyYWNlIHBlcmlvZCBjb21wbGV0ZWQ/ICAqLworCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgIT0gcmRwLT5jb21wbGV0ZWQpIC8qIG91dHNpZGUgb2YgbG9jayAqLworCQlyZXR1cm4gMTsKKworCS8qIEhhcyBhIG5ldyBSQ1UgZ3JhY2UgcGVyaW9kIHN0YXJ0ZWQ/ICovCisJaWYgKEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pICE9IHJkcC0+Z3BudW0pIC8qIG91dHNpZGUgb2YgbG9jayAqLworCQlyZXR1cm4gMTsKKworCS8qIEhhcyBhbiBSQ1UgR1AgZ29uZSBsb25nIGVub3VnaCB0byBzZW5kIHJlc2NoZWQgSVBJcyAmYz8gKi8KKwlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpICE9IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pICYmCisJICAgICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCB8fAorCSAgICAgKHJkcC0+bl9yY3VfcGVuZGluZ19mb3JjZV9xcyAtIHJkcC0+bl9yY3VfcGVuZGluZykgPCAwKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBub3RoaW5nIHRvIGRvICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBSQ1UtcmVsYXRlZCB3b3JrIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgcmV0dXJuaW5nIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlCisgKiBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqLworaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCit7CisJcmV0dXJuIF9fcmN1X3BlbmRpbmcoJnJjdV9zdGF0ZSwgJnBlcl9jcHUocmN1X2RhdGEsIGNwdSkpIHx8CisJICAgICAgIF9fcmN1X3BlbmRpbmcoJnJjdV9iaF9zdGF0ZSwgJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQorICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKKyAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KKyAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqLworaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3sKKwkvKiBSQ1UgY2FsbGJhY2tzIGVpdGhlciByZWFkeSBvciBwZW5kaW5nPyAqLworCXJldHVybiBwZXJfY3B1KHJjdV9kYXRhLCBjcHUpLm54dGxpc3QgfHwKKwkgICAgICAgcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KS5ueHRsaXN0OworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIENQVSdzIHBlci1DUFUgUkNVIGRhdGEuICBXZSB0YWtlIHRoaXMgInNjb3JjaGVkIGVhcnRoIgorICogYXBwcm9hY2ggc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGhvdyBsb25nIHRoZSBDUFUgaGFzCisgKiBiZWVuIGdvbmUsIG9yIHdoZXRoZXIgaXQgZXZlciB3YXMgb25saW5lIHByZXZpb3VzbHkuICBXZSBkbyB0cnVzdCB0aGUKKyAqIC0+bXlub2RlIGZpZWxkLCBhcyBpdCBpcyBjb25zdGFudCBmb3IgYSBnaXZlbiBzdHJ1Y3QgcmN1X2RhdGEgYW5kCisgKiBpbml0aWFsaXplZCBkdXJpbmcgZWFybHkgYm9vdC4KKyAqCisgKiBOb3RlIHRoYXQgb25seSBvbmUgb25saW5lIG9yIG9mZmxpbmUgZXZlbnQgY2FuIGJlIGhhcHBlbmluZyBhdCBhIGdpdmVuCisgKiB0aW1lLiAgTm90ZSBhbHNvIHRoYXQgd2UgY2FuIGFjY2VwdCBzb21lIHNsb3AgaW4gdGhlIHJzcC0+Y29tcGxldGVkCisgKiBhY2Nlc3MgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBDUFUgY2Fubm90IHBvc3NpYmx5IGhhdmUgYW55IFJDVQorICogY2FsbGJhY2tzIGluIGZsaWdodCB5ZXQuCisgKi8KK3N0YXRpYyB2b2lkCityY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlsb25nIGxhc3Rjb21wOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW2NwdV07CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKworCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJbGFzdGNvbXAgPSByc3AtPmNvbXBsZXRlZDsKKwlyZHAtPmNvbXBsZXRlZCA9IGxhc3Rjb21wOworCXJkcC0+Z3BudW0gPSBsYXN0Y29tcDsKKwlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOyAgLyogV2UgY291bGQgYmUgcmFjaW5nIHdpdGggbmV3IEdQLCAqLworCXJkcC0+cXNfcGVuZGluZyA9IDE7CSAvKiAgc28gc2V0IHVwIHRvIHJlc3BvbmQgdG8gY3VycmVudCBHUC4gKi8KKwlyZHAtPmJlZW5vbmxpbmUgPSAxOwkgLyogV2UgaGF2ZSBub3cgYmVlbiBvbmxpbmUuICovCisJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IGxhc3Rjb21wIC0gMTsKKwlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7CisJcmRwLT5ueHRsaXN0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQorCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OworCXJkcC0+cWxlbiA9IDA7CisJcmRwLT5ibGltaXQgPSBibGltaXQ7CisjaWZkZWYgQ09ORklHX05PX0haCisJcmRwLT5keW50aWNrcyA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisJcmRwLT5jcHUgPSBjcHU7CisJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKworCS8qCisJICogQSBuZXcgZ3JhY2UgcGVyaW9kIG1pZ2h0IHN0YXJ0IGhlcmUuICBJZiBzbywgd2Ugd29uJ3QgYmUgcGFydAorCSAqIG9mIGl0LCBidXQgdGhhdCBpcyBPSywgYXMgd2UgYXJlIGN1cnJlbnRseSBpbiBhIHF1aWVzY2VudCBzdGF0ZS4KKwkgKi8KKworCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IEdQIG9uIGxhcmdlIHN5c3RlbXMuICovCisJc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisKKwkvKiBBZGQgQ1BVIHRvIHJjdV9ub2RlIGJpdG1hc2tzLiAqLworCXJucCA9IHJkcC0+bXlub2RlOworCW1hc2sgPSByZHAtPmdycG1hc2s7CisJZG8geworCQkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBHUCBvbiBzbWFsbCBzeXN0ZW1zLiAqLworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcm5wLT5xc21hc2tpbml0IHw9IG1hc2s7CisJCW1hc2sgPSBybnAtPmdycG1hc2s7CisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXJucCA9IHJucC0+cGFyZW50OworCX0gd2hpbGUgKHJucCAhPSBOVUxMICYmICEocm5wLT5xc21hc2tpbml0ICYgbWFzaykpOworCisJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCisJLyoKKwkgKiBBIG5ldyBncmFjZSBwZXJpb2QgbWlnaHQgc3RhcnQgaGVyZS4gIElmIHNvLCB3ZSB3aWxsIGJlIHBhcnQgb2YKKwkgKiBpdCwgYW5kIGl0cyBncG51bSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBvdXJzLCBzbyB3ZSB3aWxsCisJICogcGFydGljaXBhdGUuICBJdCBpcyBhbHNvIHBvc3NpYmxlIGZvciB0aGUgZ3BudW0gdG8gaGF2ZSBiZWVuCisJICogaW5jcmVtZW50ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCwgYW5kIHRoZSBiaXRtYXNrcworCSAqIHRvIG5vdCBiZSBmaWxsZWQgb3V0IHVudGlsIG5vdywgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGFsc28KKwkgKiBwYXJ0aWNpcGF0ZSBkdWUgdG8gb3VyIGdwbnVtIGJlaW5nIGJlaGluZC4KKwkgKi8KKworCS8qIFNpbmNlIGl0IGlzIGNvbWluZyBvbmxpbmUsIHRoZSBDUFUgaXMgaW4gYSBxdWllc2NlbnQgc3RhdGUuICovCisJY3B1X3F1aWV0KGNwdSwgcnNwLCByZHAsIGxhc3Rjb21wKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19OT19IWgorCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CisKKwlyZHRwLT5keW50aWNrc19uZXN0aW5nID0gMTsKKwlyZHRwLT5keW50aWNrcyB8PSAxOyAJLyogbmVlZCBjb25zZWN1dGl2ZSAjcyBldmVuIGZvciBob3RwbHVnLiAqLworCXJkdHAtPmR5bnRpY2tzX25taSA9IChyZHRwLT5keW50aWNrc19ubWkgKyAxKSAmIH4weDE7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgJnJjdV9zdGF0ZSk7CisJcmN1X2luaXRfcGVyY3B1X2RhdGEoY3B1LCAmcmN1X2JoX3N0YXRlKTsKKwlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7Cit9CisKKy8qCisgKiBIYW5kbGUgQ1BVIG9ubGluZS9vZmZsaW5lIG5vdGlmY2F0aW9uIGV2ZW50cy4KKyAqLworc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJcmN1X29ubGluZV9jcHUoY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CisJCXJjdV9vZmZsaW5lX2NwdShjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIHBlci1sZXZlbCBmYW5vdXQsIGVpdGhlciB1c2luZyB0aGUgZXhhY3QgZmFub3V0IHNwZWNpZmllZAorICogb3IgYmFsYW5jaW5nIHRoZSB0cmVlLCBkZXBlbmRpbmcgb24gQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QuCisgKi8KKyNpZmRlZiBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVAorc3RhdGljIHZvaWQgX19pbml0IHJjdV9pbml0X2xldmVsc3ByZWFkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IE5VTV9SQ1VfTFZMUyAtIDE7IGkgPj0gMDsgaS0tKQorCQlyc3AtPmxldmVsc3ByZWFkW2ldID0gQ09ORklHX1JDVV9GQU5PVVQ7Cit9CisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCByY3VfaW5pdF9sZXZlbHNwcmVhZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJaW50IGNjdXI7CisJaW50IGNwcnY7CisJaW50IGk7CisKKwljcHJ2ID0gTlJfQ1BVUzsKKwlmb3IgKGkgPSBOVU1fUkNVX0xWTFMgLSAxOyBpID49IDA7IGktLSkgeworCQljY3VyID0gcnNwLT5sZXZlbGNudFtpXTsKKwkJcnNwLT5sZXZlbHNwcmVhZFtpXSA9IChjcHJ2ICsgY2N1ciAtIDEpIC8gY2N1cjsKKwkJY3BydiA9IGNjdXI7CisJfQorfQorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCAqLworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciByY3VfaW5pdCgpIHRoYXQgaW5pdGlhbGl6ZXMgb25lIHJjdV9zdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCByY3VfaW5pdF9vbmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCWludCBjcHVzdHJpZGUgPSAxOworCWludCBpOworCWludCBqOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbGV2ZWwtdHJhY2tpbmcgYXJyYXlzLiAqLworCisJZm9yIChpID0gMTsgaSA8IE5VTV9SQ1VfTFZMUzsgaSsrKQorCQlyc3AtPmxldmVsW2ldID0gcnNwLT5sZXZlbFtpIC0gMV0gKyByc3AtPmxldmVsY250W2kgLSAxXTsKKwlyY3VfaW5pdF9sZXZlbHNwcmVhZChyc3ApOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcywgc3RhcnRpbmcgZnJvbSB0aGUgbGVhdmVzLiAqLworCisJZm9yIChpID0gTlVNX1JDVV9MVkxTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJY3B1c3RyaWRlICo9IHJzcC0+bGV2ZWxzcHJlYWRbaV07CisJCXJucCA9IHJzcC0+bGV2ZWxbaV07CisJCWZvciAoaiA9IDA7IGogPCByc3AtPmxldmVsY250W2ldOyBqKyssIHJucCsrKSB7CisJCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCXJucC0+cXNtYXNrID0gMDsKKwkJCXJucC0+cXNtYXNraW5pdCA9IDA7CisJCQlybnAtPmdycGxvID0gaiAqIGNwdXN0cmlkZTsKKwkJCXJucC0+Z3JwaGkgPSAoaiArIDEpICogY3B1c3RyaWRlIC0gMTsKKwkJCWlmIChybnAtPmdycGhpID49IE5SX0NQVVMpCisJCQkJcm5wLT5ncnBoaSA9IE5SX0NQVVMgLSAxOworCQkJaWYgKGkgPT0gMCkgeworCQkJCXJucC0+Z3JwbnVtID0gMDsKKwkJCQlybnAtPmdycG1hc2sgPSAwOworCQkJCXJucC0+cGFyZW50ID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJcm5wLT5ncnBudW0gPSBqICUgcnNwLT5sZXZlbHNwcmVhZFtpIC0gMV07CisJCQkJcm5wLT5ncnBtYXNrID0gMVVMIDw8IHJucC0+Z3JwbnVtOworCQkJCXJucC0+cGFyZW50ID0gcnNwLT5sZXZlbFtpIC0gMV0gKworCQkJCQkgICAgICBqIC8gcnNwLT5sZXZlbHNwcmVhZFtpIC0gMV07CisJCQl9CisJCQlybnAtPmxldmVsID0gaTsKKwkJfQorCX0KK30KKworLyoKKyAqIEhlbHBlciBtYWNybyBmb3IgX19yY3VfaW5pdCgpLiAgVG8gYmUgdXNlZCBub3doZXJlIGVsc2UhCisgKiBBc3NpZ25zIGxlYWYgbm9kZSBwb2ludGVycyBpbnRvIGVhY2ggQ1BVJ3MgcmN1X2RhdGEgc3RydWN0dXJlLgorICovCisjZGVmaW5lIFJDVV9EQVRBX1BUUl9JTklUKHJzcCwgcmN1X2RhdGEpIFwKK2RvIHsgXAorCXJucCA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAorCWogPSAwOyBcCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsgXAorCQlpZiAoaSA+IHJucFtqXS5ncnBoaSkgXAorCQkJaisrOyBcCisJCXBlcl9jcHUocmN1X2RhdGEsIGkpLm15bm9kZSA9ICZybnBbal07IFwKKwkJKHJzcCktPnJkYVtpXSA9ICZwZXJfY3B1KHJjdV9kYXRhLCBpKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHJjdV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHJjdV9jcHVfbm90aWZ5LAorfTsKKwordm9pZCBfX2luaXQgX19yY3VfaW5pdCh2b2lkKQoreworCWludCBpOwkJCS8qIEFsbCB1c2VkIGJ5IFJDVV9EQVRBX1BUUl9JTklUKCkuICovCisJaW50IGo7CisJc3RydWN0IHJjdV9ub2RlICpybnA7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJFeHBlcmltZW50YWwgaGllcmFyY2hpY2FsIFJDVSBpbXBsZW1lbnRhdGlvbi5cbiIpOworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisJcHJpbnRrKEtFUk5fSU5GTyAiUkNVLWJhc2VkIGRldGVjdGlvbiBvZiBzdGFsbGVkIENQVXMgaXMgZW5hYmxlZC5cbiIpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLworCXJjdV9pbml0X29uZSgmcmN1X3N0YXRlKTsKKwlSQ1VfREFUQV9QVFJfSU5JVCgmcmN1X3N0YXRlLCByY3VfZGF0YSk7CisJcmN1X2luaXRfb25lKCZyY3VfYmhfc3RhdGUpOworCVJDVV9EQVRBX1BUUl9JTklUKCZyY3VfYmhfc3RhdGUsIHJjdV9iaF9kYXRhKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJcmN1X2NwdV9ub3RpZnkoJnJjdV9uYiwgQ1BVX1VQX1BSRVBBUkUsICh2b2lkICopKGxvbmcpaSk7CisJLyogUmVnaXN0ZXIgbm90aWZpZXIgZm9yIG5vbi1ib290IENQVXMgKi8KKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnJjdV9uYik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiRXhwZXJpbWVudGFsIGhpZXJhcmNoaWNhbCBSQ1UgaW5pdCBkb25lLlxuIik7Cit9CisKK21vZHVsZV9wYXJhbShibGltaXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocWhpbWFyaywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShxbG93bWFyaywgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGIzZTgzCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIFJlYWQtQ29weSBVcGRhdGUgdHJhY2luZyBmb3IgY2xhc3NpYyBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwOAorICoKKyAqIFBhcGVyczogIGh0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svUkNVCisgKgorICogRm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIHNlZSAtCisgKiAJCURvY3VtZW50YXRpb24vUkNVCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCisJCXJldHVybjsKKwlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWxkIGc9JWxkIHBxPSVkIHBxYz0lbGQgcXA9JWQgcnBmcT0lbGQgcnA9JXgiLAorCQkgICByZHAtPmNwdSwKKwkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gJyEnIDogJyAnLAorCQkgICByZHAtPmNvbXBsZXRlZCwgcmRwLT5ncG51bSwKKwkJICAgcmRwLT5wYXNzZWRfcXVpZXNjLCByZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkLAorCQkgICByZHAtPnFzX3BlbmRpbmcsCisJCSAgIHJkcC0+bl9yY3VfcGVuZGluZ19mb3JjZV9xcyAtIHJkcC0+bl9yY3VfcGVuZGluZywKKwkJICAgKGludCkocmRwLT5uX3JjdV9wZW5kaW5nICYgMHhmZmZmKSk7CisjaWZkZWYgQ09ORklHX05PX0haCisJc2VxX3ByaW50ZihtLCAiIGR0PSVkLyVkIGRuPSVkIGRmPSVsdSIsCisJCSAgIHJkcC0+ZHludGlja3MtPmR5bnRpY2tzLAorCQkgICByZHAtPmR5bnRpY2tzLT5keW50aWNrc19uZXN0aW5nLAorCQkgICByZHAtPmR5bnRpY2tzLT5keW50aWNrc19ubWksCisJCSAgIHJkcC0+ZHludGlja3NfZnFzKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisJc2VxX3ByaW50ZihtLCAiIG9mPSVsdSByaT0lbHUiLCByZHAtPm9mZmxpbmVfZnFzLCByZHAtPnJlc2NoZWRfaXBpKTsKKwlzZXFfcHJpbnRmKG0sICIgcWw9JWxkIGI9JWxkXG4iLCByZHAtPnFsZW4sIHJkcC0+YmxpbWl0KTsKK30KKworI2RlZmluZSBQUklOVF9SQ1VfREFUQShuYW1lLCBmdW5jLCBtKSBcCisJZG8geyBcCisJCWludCBfcF9yX2RfaTsgXAorCQlcCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShfcF9yX2RfaSkgXAorCQkJZnVuYyhtLCAmcGVyX2NwdShuYW1lLCBfcF9yX2RfaSkpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBzaG93X3JjdWRhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc2VxX3B1dHMobSwgInJjdTpcbiIpOworCVBSSU5UX1JDVV9EQVRBKHJjdV9kYXRhLCBwcmludF9vbmVfcmN1X2RhdGEsIG0pOworCXNlcV9wdXRzKG0sICJyY3VfYmg6XG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3VfYmhfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhLCBtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByY3VkYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1ZGF0YSwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJjdWRhdGFfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X29uZV9yY3VfZGF0YV9jc3Yoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwlpZiAoIXJkcC0+YmVlbm9ubGluZSkKKwkJcmV0dXJuOworCXNlcV9wcmludGYobSwgIiVkLCVzLCVsZCwlbGQsJWQsJWxkLCVkLCVsZCwlbGQiLAorCQkgICByZHAtPmNwdSwKKwkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gIlwiWVwiIiA6ICJcIk5cIiIsCisJCSAgIHJkcC0+Y29tcGxldGVkLCByZHAtPmdwbnVtLAorCQkgICByZHAtPnBhc3NlZF9xdWllc2MsIHJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQsCisJCSAgIHJkcC0+cXNfcGVuZGluZywKKwkJICAgcmRwLT5uX3JjdV9wZW5kaW5nX2ZvcmNlX3FzIC0gcmRwLT5uX3JjdV9wZW5kaW5nLAorCQkgICByZHAtPm5fcmN1X3BlbmRpbmcpOworI2lmZGVmIENPTkZJR19OT19IWgorCXNlcV9wcmludGYobSwgIiwlZCwlZCwlZCwlbHUiLAorCQkgICByZHAtPmR5bnRpY2tzLT5keW50aWNrcywKKwkJICAgcmRwLT5keW50aWNrcy0+ZHludGlja3NfbmVzdGluZywKKwkJICAgcmRwLT5keW50aWNrcy0+ZHludGlja3Nfbm1pLAorCQkgICByZHAtPmR5bnRpY2tzX2Zxcyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCXNlcV9wcmludGYobSwgIiwlbHUsJWx1IiwgcmRwLT5vZmZsaW5lX2ZxcywgcmRwLT5yZXNjaGVkX2lwaSk7CisJc2VxX3ByaW50ZihtLCAiLCVsZCwlbGRcbiIsIHJkcC0+cWxlbiwgcmRwLT5ibGltaXQpOworfQorCitzdGF0aWMgaW50IHNob3dfcmN1ZGF0YV9jc3Yoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc2VxX3B1dHMobSwgIlwiQ1BVXCIsXCJPbmxpbmU/XCIsXCJjXCIsXCJnXCIsXCJwcVwiLFwicHFjXCIsXCJwcVwiLFwicnBmcVwiLFwicnBcIiwiKTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwlzZXFfcHV0cyhtLCAiXCJkdFwiLFwiZHQgbmVzdGluZ1wiLFwiZG5cIixcImRmXCIsIik7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCXNlcV9wdXRzKG0sICJcIm9mXCIsXCJyaVwiLFwicWxcIixcImJcIlxuIik7CisJc2VxX3B1dHMobSwgIlwicmN1OlwiXG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3VfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CisJc2VxX3B1dHMobSwgIlwicmN1X2JoOlwiXG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3VfYmhfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmN1ZGF0YV9jc3Zfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VkYXRhX2NzdiwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfY3N2X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSByY3VkYXRhX2Nzdl9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpbnQgbGV2ZWwgPSAwOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCisJc2VxX3ByaW50ZihtLCAiYz0lbGQgZz0lbGQgcz0lZCBqZnE9JWxkIGo9JXggIgorCSAgICAgICAgICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdVxuIiwKKwkJICAgcnNwLT5jb21wbGV0ZWQsIHJzcC0+Z3BudW0sIHJzcC0+c2lnbmFsZWQsCisJCSAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSwKKwkJICAgKGludCkoamlmZmllcyAmIDB4ZmZmZiksCisJCSAgIHJzcC0+bl9mb3JjZV9xcywgcnNwLT5uX2ZvcmNlX3FzX25ncCwKKwkJICAgcnNwLT5uX2ZvcmNlX3FzIC0gcnNwLT5uX2ZvcmNlX3FzX25ncCwKKwkJICAgcnNwLT5uX2ZvcmNlX3FzX2xoKTsKKwlmb3IgKHJucCA9ICZyc3AtPm5vZGVbMF07IHJucCAtICZyc3AtPm5vZGVbMF0gPCBOVU1fUkNVX05PREVTOyBybnArKykgeworCQlpZiAocm5wLT5sZXZlbCAhPSBsZXZlbCkgeworCQkJc2VxX3B1dHMobSwgIlxuIik7CisJCQlsZXZlbCA9IHJucC0+bGV2ZWw7CisJCX0KKwkJc2VxX3ByaW50ZihtLCAiJWx4LyVseCAlZDolZCBeJWQgICAgIiwKKwkJCSAgIHJucC0+cXNtYXNrLCBybnAtPnFzbWFza2luaXQsCisJCQkgICBybnAtPmdycGxvLCBybnAtPmdycGhpLCBybnAtPmdycG51bSk7CisJfQorCXNlcV9wdXRzKG0sICJcbiIpOworfQorCitzdGF0aWMgaW50IHNob3dfcmN1aGllcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzZXFfcHV0cyhtLCAicmN1OlxuIik7CisJcHJpbnRfb25lX3JjdV9zdGF0ZShtLCAmcmN1X3N0YXRlKTsKKwlzZXFfcHV0cyhtLCAicmN1X2JoOlxuIik7CisJcHJpbnRfb25lX3JjdV9zdGF0ZShtLCAmcmN1X2JoX3N0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByY3VoaWVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1aGllciwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWhpZXJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJjdWhpZXJfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgc2hvd19yY3VncChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzZXFfcHJpbnRmKG0sICJyY3U6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwkJICAgcmN1X3N0YXRlLmNvbXBsZXRlZCwgcmN1X3N0YXRlLmdwbnVtKTsKKwlzZXFfcHJpbnRmKG0sICJyY3VfYmg6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwkJICAgcmN1X2JoX3N0YXRlLmNvbXBsZXRlZCwgcmN1X2JoX3N0YXRlLmdwbnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByY3VncF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWdwLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1Z3BfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJjdWdwX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcmN1ZGlyLCAqZGF0YWRpciwgKmRhdGFkaXJfY3N2LCAqaGllcmRpciwgKmdwZGlyOworc3RhdGljIGludCBfX2luaXQgcmN1Y2xhc3NpY190cmFjZV9pbml0KHZvaWQpCit7CisJcmN1ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJyY3UiLCBOVUxMKTsKKwlpZiAoIXJjdWRpcikKKwkJZ290byBvdXQ7CisKKwlkYXRhZGlyID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1ZGF0YSIsIDA0NDQsIHJjdWRpciwKKwkJCQkJCU5VTEwsICZyY3VkYXRhX2ZvcHMpOworCWlmICghZGF0YWRpcikKKwkJZ290byBmcmVlX291dDsKKworCWRhdGFkaXJfY3N2ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1ZGF0YS5jc3YiLCAwNDQ0LCByY3VkaXIsCisJCQkJCQlOVUxMLCAmcmN1ZGF0YV9jc3ZfZm9wcyk7CisJaWYgKCFkYXRhZGlyX2NzdikKKwkJZ290byBmcmVlX291dDsKKworCWdwZGlyID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1Z3AiLCAwNDQ0LCByY3VkaXIsIE5VTEwsICZyY3VncF9mb3BzKTsKKwlpZiAoIWdwZGlyKQorCQlnb3RvIGZyZWVfb3V0OworCisJaGllcmRpciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdWhpZXIiLCAwNDQ0LCByY3VkaXIsCisJCQkJCQlOVUxMLCAmcmN1aGllcl9mb3BzKTsKKwlpZiAoIWhpZXJkaXIpCisJCWdvdG8gZnJlZV9vdXQ7CisJcmV0dXJuIDA7CitmcmVlX291dDoKKwlpZiAoZGF0YWRpcikKKwkJZGVidWdmc19yZW1vdmUoZGF0YWRpcik7CisJaWYgKGRhdGFkaXJfY3N2KQorCQlkZWJ1Z2ZzX3JlbW92ZShkYXRhZGlyX2Nzdik7CisJaWYgKGdwZGlyKQorCQlkZWJ1Z2ZzX3JlbW92ZShncGRpcik7CisJZGVidWdmc19yZW1vdmUocmN1ZGlyKTsKK291dDoKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJjdWNsYXNzaWNfdHJhY2VfY2xlYW51cCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlKGRhdGFkaXIpOworCWRlYnVnZnNfcmVtb3ZlKGRhdGFkaXJfY3N2KTsKKwlkZWJ1Z2ZzX3JlbW92ZShncGRpcik7CisJZGVidWdmc19yZW1vdmUoaGllcmRpcik7CisJZGVidWdmc19yZW1vdmUocmN1ZGlyKTsKK30KKworCittb2R1bGVfaW5pdChyY3VjbGFzc2ljX3RyYWNlX2luaXQpOworbW9kdWxlX2V4aXQocmN1Y2xhc3NpY190cmFjZV9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiUGF1bCBFLiBNY0tlbm5leSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWFkLUNvcHkgVXBkYXRlIHRyYWNpbmcgZm9yIGhpZXJhcmNoaWNhbCBpbXBsZW1lbnRhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCA0MzM3MDYzLi5lNjMzMTA2IDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3VyY2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtODUzLDYgKzg1MywxNSBAQAogCQlpZiAoUEZOX0RPV04ocC0+c3RhcnQpIDw9IFBGTl9ET1dOKGFkZHIpICYmCiAJCSAgICBQRk5fRE9XTihwLT5lbmQpID49IFBGTl9ET1dOKGFkZHIgKyBzaXplIC0gMSkpCiAJCQljb250aW51ZTsKKwkJLyoKKwkJICogaWYgYSByZXNvdXJjZSBpcyAiQlVTWSIsIGl0J3Mgbm90IGEgaGFyZHdhcmUgcmVzb3VyY2UKKwkJICogYnV0IGEgZHJpdmVyIG1hcHBpbmcgb2Ygc3VjaCBhIHJlc291cmNlOyB3ZSBkb24ndCB3YW50CisJCSAqIHRvIHdhcm4gZm9yIHRob3NlOyBzb21lIGRyaXZlcnMgbGVnaXRpbWF0ZWx5IG1hcCBvbmx5CisJCSAqIHBhcnRpYWwgaGFyZHdhcmUgcmVzb3VyY2VzLiAoZXhhbXBsZTogdmVzYWZiKQorCQkgKi8KKwkJaWYgKHAtPmZsYWdzICYgSU9SRVNPVVJDRV9CVVNZKQorCQkJY29udGludWU7CisKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmVzb3VyY2UgbWFwIHNhbml0eSBjaGVjayBjb25mbGljdDogIgogCQkgICAgICAgIjB4JWxseCAweCVsbHggMHglbGx4IDB4JWxseCAlc1xuIiwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNzQ4ZmY5Mi4uZmZmMWM0YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIwOSw3ICsyMDksNiBAQAogCWhydGltZXJfaW5pdCgmcnRfYi0+cnRfcGVyaW9kX3RpbWVyLAogCQkJQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAlydF9iLT5ydF9wZXJpb2RfdGltZXIuZnVuY3Rpb24gPSBzY2hlZF9ydF9wZXJpb2RfdGltZXI7Ci0JcnRfYi0+cnRfcGVyaW9kX3RpbWVyLmNiX21vZGUgPSBIUlRJTUVSX0NCX0lSUVNBRkVfVU5MT0NLRUQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X2JhbmR3aWR0aF9lbmFibGVkKHZvaWQpCkBAIC0xMTM5LDcgKzExMzgsNiBAQAogCiAJaHJ0aW1lcl9pbml0KCZycS0+aHJ0aWNrX3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCXJxLT5ocnRpY2tfdGltZXIuZnVuY3Rpb24gPSBocnRpY2s7Ci0JcnEtPmhydGlja190aW1lci5jYl9tb2RlID0gSFJUSU1FUl9DQl9JUlFTQUZFX1BFUkNQVTsKIH0KICNlbHNlCS8qIENPTkZJR19TQ0hFRF9IUlRJQ0sgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBocnRpY2tfY2xlYXIoc3RydWN0IHJxICpycSkKQEAgLTQxOTIsNyArNDE5MCw2IEBACiAKIAlpZiAocCA9PSBycS0+aWRsZSkgewogCQlwLT5zdGltZSA9IGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBzdGVhbCk7Ci0JCWFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUocCwgc3RlYWwpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJxLT5ucl9pb3dhaXQpID4gMCkKIAkJCWNwdXN0YXQtPmlvd2FpdCA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+aW93YWl0LCB0bXApOwogCQllbHNlCkBAIC00MzI4LDcgKzQzMjUsNyBAQAogCS8qCiAJICogVW5kZXJmbG93PwogCSAqLwotCWlmIChERUJVR19MT0NLU19XQVJOX09OKHZhbCA+IHByZWVtcHRfY291bnQoKSkpCisgICAgICAgaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04odmFsID4gcHJlZW1wdF9jb3VudCgpIC0gKCEha2VybmVsX2xvY2tlZCgpKSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElzIHRoZSBzcGlubG9jayBwb3J0aW9uIHVuZGVyZmxvd2luZz8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGU3YzY5YTcuLjQ2NmU3NWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtMTAyLDIwICsxMDIsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGxvY2FsX2JoX2Rpc2FibGUpOwogCi12b2lkIF9fbG9jYWxfYmhfZW5hYmxlKHZvaWQpCi17Ci0JV0FSTl9PTl9PTkNFKGluX2lycSgpKTsKLQotCS8qCi0JICogc29mdGlycXMgc2hvdWxkIG5ldmVyIGJlIGVuYWJsZWQgYnkgX19sb2NhbF9iaF9lbmFibGUoKSwKLQkgKiBpdCBhbHdheXMgbmVzdHMgaW5zaWRlIGxvY2FsX2JoX2VuYWJsZSgpIHNlY3Rpb25zOgotCSAqLwotCVdBUk5fT05fT05DRShzb2Z0aXJxX2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpOwotCi0Jc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19sb2NhbF9iaF9lbmFibGUpOwotCiAvKgogICogU3BlY2lhbC1jYXNlIC0gc29mdGlycXMgY2FuIHNhZmVseSBiZSBlbmFibGVkIGluCiAgKiBjb25kX3Jlc2NoZWRfc29mdGlycSgpLCBvciBieSBfX2RvX3NvZnRpcnEoKSwKQEAgLTI2OSw2ICsyNTUsNyBAQAogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKKwlyY3VfaXJxX2VudGVyKCk7CiAJaWYgKGlkbGVfY3B1KGNwdSkgJiYgIWluX2ludGVycnVwdCgpKSB7CiAJCV9faXJxX2VudGVyKCk7CiAJCXRpY2tfY2hlY2tfaWRsZShjcHUpOwpAQCAtMjk1LDkgKzI4Miw5IEBACiAKICNpZmRlZiBDT05GSUdfTk9fSFoKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aW1lciB3aGVlbCB1cGRhdGVzIGFyZSBwcm9wYWdhdGVkICovCi0JaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiBpZGxlX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpICYmICFuZWVkX3Jlc2NoZWQoKSkKLQkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygwKTsKIAlyY3VfaXJxX2V4aXQoKTsKKwlpZiAoaWRsZV9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKSAmJiAhaW5faW50ZXJydXB0KCkgJiYgIW5lZWRfcmVzY2hlZCgpKQorCQl0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKDApOwogI2VuZGlmCiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKaW5kZXggZGMwYjNiZS4uMWFiNzkwYyAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIC8qCiAgKiBaZXJvIG1lYW5zIGluZmluaXRlIHRpbWVvdXQgLSBubyBjaGVja2luZyBkb25lOgogICovCi11bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3MgPSAxMjA7Cit1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3MgPSA0ODA7CiAKIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSBzeXNjdGxfaHVuZ190YXNrX3dhcm5pbmdzID0gMTA7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDk0YjUyN2UuLmViMjEyZjhmIDEwMDY0NAotLS0gYS9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTYsNiArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KQEAgLTI0LDMgKzI1LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwcmludF9zdGFja190cmFjZSk7CiAKKy8qCisgKiBBcmNoaXRlY3R1cmVzIHRoYXQgZG8gbm90IGltcGxlbWVudCBzYXZlX3N0YWNrX3RyYWNlX3RzayBnZXQgdGhpcworICogd2VhayBhbGlhcyBhbmQgYSBvbmNlLXBlci1ib290dXAgd2FybmluZyAod2hlbmV2ZXIgdGhpcyBmYWNpbGl0eQorICogaXMgdXRpbGl6ZWQgLSBmb3IgZXhhbXBsZSBieSBwcm9jZnMpOgorICovCitfX3dlYWsgdm9pZAorc2F2ZV9zdGFja190cmFjZV90c2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJV0FSTl9PTkNFKDEsIEtFUk5fSU5GTyAic2F2ZV9zdGFja190cmFjZV90c2soKSBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIik7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggZWJlNjVjMi4uZDM1NmQ3OSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtOTA3LDggKzkwNyw4IEBACiAJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKIAotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXRocmVhZF9ncm91cF9jcHV0aW1lKGN1cnJlbnQsICZjcHV0aW1lKTsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAljdXRpbWUgPSBjdXJyZW50LT5zaWduYWwtPmN1dGltZTsKIAljc3RpbWUgPSBjdXJyZW50LT5zaWduYWwtPmNzdGltZTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDBiNjI3ZDkuLmZmNmQ0NWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTEyMSw2ICsxMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TUEFSQzY0CitleHRlcm4gaW50IHN5c2N0bF90c2JfcmF0aW87CisjZW5kaWYKKwogI2lmZGVmIF9faHBwYV9fCiBleHRlcm4gaW50IHB3cnN3X2VuYWJsZWQ7CiBleHRlcm4gaW50IHVuYWxpZ25lZF9lbmFibGVkOwpAQCAtNDUxLDYgKzQ1NSwxNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TUEFSQzY0CisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInRzYi1yYXRpbyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdHNiX3JhdGlvLAorCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisjZW5kaWYKICNpZmRlZiBfX2hwcGFfXwogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9IUFBBX1BXUlNXLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCA4ZmYxNWU1Li5mNWY3OTNkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiB7CiAJZW51bSBocnRpbWVyX3Jlc3RhcnQgcmVzID0gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKIAlzd2l0Y2ggKHRpbWVfc3RhdGUpIHsKIAljYXNlIFRJTUVfT0s6CkBAIC0xNjQsNyArMTY0LDcgQEAKIAl9CiAJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgY2xvY2spOwogCi0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggMzQyZmM5Yy4uOGYzZmMyNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlnb3RvIGVuZDsKIAotCWlmICh1bmxpa2VseShsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkpIHsKKwlpZiAodW5saWtlbHkobG9jYWxfc29mdGlycV9wZW5kaW5nKCkgJiYgY3B1X29ubGluZShjcHUpKSkgewogCQlzdGF0aWMgaW50IHJhdGVsaW1pdDsKIAogCQlpZiAocmF0ZWxpbWl0IDwgMTApIHsKQEAgLTI4Miw4ICsyODIsMzEgQEAKIAkvKiBTY2hlZHVsZSB0aGUgdGljaywgaWYgd2UgYXJlIGF0IGxlYXN0IG9uZSBqaWZmaWUgb2ZmICovCiAJaWYgKChsb25nKWRlbHRhX2ppZmZpZXMgPj0gMSkgewogCisJCS8qCisJCSogY2FsY3VsYXRlIHRoZSBleHBpcnkgdGltZSBmb3IgdGhlIG5leHQgdGltZXIgd2hlZWwKKwkJKiB0aW1lcgorCQkqLworCQlleHBpcmVzID0ga3RpbWVfYWRkX25zKGxhc3RfdXBkYXRlLCB0aWNrX3BlcmlvZC50djY0ICoKKwkJCQkgICBkZWx0YV9qaWZmaWVzKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGNwdSBpcyB0aGUgb25lIHdoaWNoIHVwZGF0ZXMgamlmZmllcywgdGhlbgorCQkgKiBnaXZlIHVwIHRoZSBhc3NpZ25tZW50IGFuZCBsZXQgaXQgYmUgdGFrZW4gYnkgdGhlCisJCSAqIGNwdSB3aGljaCBydW5zIHRoZSB0aWNrIHRpbWVyIG5leHQsIHdoaWNoIG1pZ2h0IGJlCisJCSAqIHRoaXMgY3B1IGFzIHdlbGwuIElmIHdlIGRvbid0IGRyb3AgdGhpcyBoZXJlIHRoZQorCQkgKiBqaWZmaWVzIG1pZ2h0IGJlIHN0YWxlIGFuZCBkb190aW1lcigpIG5ldmVyCisJCSAqIGludm9rZWQuCisJCSAqLworCQlpZiAoY3B1ID09IHRpY2tfZG9fdGltZXJfY3B1KQorCQkJdGlja19kb190aW1lcl9jcHUgPSBUSUNLX0RPX1RJTUVSX05PTkU7CisKIAkJaWYgKGRlbHRhX2ppZmZpZXMgPiAxKQogCQkJY3B1X3NldChjcHUsIG5vaHpfY3B1X21hc2spOworCisJCS8qIFNraXAgcmVwcm9ncmFtIG9mIGV2ZW50IGlmIGl0cyBub3QgY2hhbmdlZCAqLworCQlpZiAodHMtPnRpY2tfc3RvcHBlZCAmJiBrdGltZV9lcXVhbChleHBpcmVzLCBkZXYtPm5leHRfZXZlbnQpKQorCQkJZ290byBvdXQ7CisKIAkJLyoKIAkJICogbm9oel9zdG9wX3NjaGVkX3RpY2sgY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGJlZm9yZQogCQkgKiB0aGUgbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sgaXMgY2FsbGVkLiBUaGlzIGhhcHBlbnMgd2hlbgpAQCAtMzA2LDE3ICszMjksNiBAQAogCQkJcmN1X2VudGVyX25vaHooKTsKIAkJfQogCi0JCS8qCi0JCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvbmUgd2hpY2ggdXBkYXRlcyBqaWZmaWVzLCB0aGVuCi0JCSAqIGdpdmUgdXAgdGhlIGFzc2lnbm1lbnQgYW5kIGxldCBpdCBiZSB0YWtlbiBieSB0aGUKLQkJICogY3B1IHdoaWNoIHJ1bnMgdGhlIHRpY2sgdGltZXIgbmV4dCwgd2hpY2ggbWlnaHQgYmUKLQkJICogdGhpcyBjcHUgYXMgd2VsbC4gSWYgd2UgZG9uJ3QgZHJvcCB0aGlzIGhlcmUgdGhlCi0JCSAqIGppZmZpZXMgbWlnaHQgYmUgc3RhbGUgYW5kIGRvX3RpbWVyKCkgbmV2ZXIKLQkJICogaW52b2tlZC4KLQkJICovCi0JCWlmIChjcHUgPT0gdGlja19kb190aW1lcl9jcHUpCi0JCQl0aWNrX2RvX3RpbWVyX2NwdSA9IFRJQ0tfRE9fVElNRVJfTk9ORTsKLQogCQl0cy0+aWRsZV9zbGVlcHMrKzsKIAogCQkvKgpAQCAtMzMyLDEyICszNDQsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKgotCQkgKiBjYWxjdWxhdGUgdGhlIGV4cGlyeSB0aW1lIGZvciB0aGUgbmV4dCB0aW1lciB3aGVlbAotCQkgKiB0aW1lcgotCQkgKi8KLQkJZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyhsYXN0X3VwZGF0ZSwgdGlja19wZXJpb2QudHY2NCAqCi0JCQkJICAgICAgIGRlbHRhX2ppZmZpZXMpOworCQkvKiBNYXJrIGV4cGlyaWVzICovCiAJCXRzLT5pZGxlX2V4cGlyZXMgPSBleHBpcmVzOwogCiAJCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7CkBAIC02ODEsNyArNjg4LDYgQEAKIAkgKi8KIAlocnRpbWVyX2luaXQoJnRzLT5zY2hlZF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfQUJTKTsKIAl0cy0+c2NoZWRfdGltZXIuZnVuY3Rpb24gPSB0aWNrX3NjaGVkX3RpbWVyOwotCXRzLT5zY2hlZF90aW1lci5jYl9tb2RlID0gSFJUSU1FUl9DQl9JUlFTQUZFX1BFUkNQVTsKIAogCS8qIEdldCB0aGUgbmV4dCBwZXJpb2QgKHBlciBjcHUpICovCiAJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdHMtPnNjaGVkX3RpbWVyLCB0aWNrX2luaXRfamlmZnlfdXBkYXRlKCkpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCA3NmYzNGMwLi4xZDYwMWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNjksNiArNjksNyBAQAogewogCXNldF9iaXQoUkJfQlVGRkVSU19PTl9CSVQsICZyaW5nX2J1ZmZlcl9mbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjaW5nX29uKTsKIAogLyoqCiAgKiB0cmFjaW5nX29mZiAtIHR1cm4gb2ZmIGFsbCB0cmFjaW5nIGJ1ZmZlcnMKQEAgLTgyLDYgKzgzLDcgQEAKIHsKIAljbGVhcl9iaXQoUkJfQlVGRkVSU19PTl9CSVQsICZyaW5nX2J1ZmZlcl9mbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjaW5nX29mZik7CiAKIC8qKgogICogdHJhY2luZ19vZmZfcGVybWFuZW50IC0gcGVybWFuZW50bHkgZGlzYWJsZSByaW5nIGJ1ZmZlcnMKQEAgLTExMSwxMiArMTEzLDE0IEBACiAKIAlyZXR1cm4gdGltZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3RpbWVfc3RhbXApOwogCiB2b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGludCBjcHUsIHU2NCAqdHMpCiB7CiAJLyogSnVzdCBzdHVwaWQgdGVzdGluZyB0aGUgbm9ybWFsaXplIGZ1bmN0aW9uIGFuZCBkZWx0YXMgKi8KIAkqdHMgPj49IERFQlVHX1NISUZUOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXApOwogCiAjZGVmaW5lIFJCX0VWTlRfSERSX1NJWkUgKHNpemVvZihzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQpKQogI2RlZmluZSBSQl9BTElHTk1FTlRfU0hJRlQJMgpAQCAtMTY2LDYgKzE3MCw3IEBACiB7CiAJcmV0dXJuIHJiX2V2ZW50X2xlbmd0aChldmVudCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgpOwogCiAvKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqCkBAIC0xODcsNiArMTkyLDcgQEAKIHsKIAlyZXR1cm4gcmJfZXZlbnRfZGF0YShldmVudCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKTsKIAogI2RlZmluZSBmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KQkJXAogCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgYnVmZmVyLT5jcHVtYXNrKQpAQCAtNDI3LDcgKzQzMyw3IEBACiAKIC8qKgogICogcmluZ19idWZmZXJfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyByaW5nX2J1ZmZlcgotICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIHRoYXQgaXMgbmVlZGVkLgorICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIHBlciBjcHUgdGhhdCBpcyBuZWVkZWQuCiAgKiBAZmxhZ3M6IGF0dHJpYnV0ZXMgdG8gc2V0IGZvciB0aGUgcmluZyBidWZmZXIuCiAgKgogICogQ3VycmVudGx5IHRoZSBvbmx5IGZsYWcgdGhhdCBpcyBhdmFpbGFibGUgaXMgdGhlIFJCX0ZMX09WRVJXUklURQpAQCAtNDkwLDYgKzQ5Niw3IEBACiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2FsbG9jKTsKIAogLyoqCiAgKiByaW5nX2J1ZmZlcl9mcmVlIC0gZnJlZSBhIHJpbmcgYnVmZmVyLgpAQCAtNTA1LDYgKzUxMiw3IEBACiAKIAlrZnJlZShidWZmZXIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZnJlZSk7CiAKIHN0YXRpYyB2b2lkIHJiX3Jlc2V0X2NwdShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcik7CiAKQEAgLTY4MCw2ICs2ODgsNyBAQAogCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZXNpemUpOwogCiBzdGF0aWMgaW5saW5lIGludCByYl9udWxsX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CkBAIC0xMzA0LDYgKzEzMTMsNyBAQAogCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSk7CiAKIHN0YXRpYyB2b2lkIHJiX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKIAkJICAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKQEAgLTEzNTAsNiArMTM2MCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX3dyaXRlIC0gd3JpdGUgZGF0YSB0byB0aGUgYnVmZmVyIHdpdGhvdXQgcmVzZXJ2aW5nCkBAIC0xNDExLDYgKzE0MjIsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3dyaXRlKTsKIAogc3RhdGljIGlubGluZSBpbnQgcmJfcGVyX2NwdV9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKQEAgLTE0MzcsNiArMTQ0OSw3IEBACiB7CiAJYXRvbWljX2luYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGUpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGUgLSBlbmFibGUgd3JpdGVzIHRvIHRoZSBidWZmZXIKQEAgLTE0NDksNiArMTQ2Miw3IEBACiB7CiAJYXRvbWljX2RlYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZSk7CiAKIC8qKgogICogcmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGVfY3B1IC0gc3RvcCBhbGwgd3JpdGVzIGludG8gdGhlIGNwdV9idWZmZXIKQEAgLTE0NzAsNiArMTQ4NCw3IEBACiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwogCWF0b21pY19pbmMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWNvcmRfZGlzYWJsZV9jcHUpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGVfY3B1IC0gZW5hYmxlIHdyaXRlcyB0byB0aGUgYnVmZmVyCkBAIC0xNDg5LDYgKzE1MDQsNyBAQAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAlhdG9taWNfZGVjKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZV9jcHUpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhIGNwdSBidWZmZXIKQEAgLTE1MDUsNiArMTUyMSw3IEBACiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwogCXJldHVybiBjcHVfYnVmZmVyLT5lbnRyaWVzOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYSBjcHVfYnVmZmVyCkBAIC0xNTIxLDYgKzE1MzgsNyBAQAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAlyZXR1cm4gY3B1X2J1ZmZlci0+b3ZlcnJ1bjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KTsKIAogLyoqCiAgKiByaW5nX2J1ZmZlcl9lbnRyaWVzIC0gZ2V0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhIGJ1ZmZlcgpAQCAtMTU0Myw2ICsxNTYxLDcgQEAKIAogCXJldHVybiBlbnRyaWVzOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7CiAKIC8qKgogICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKQEAgLTE1NjUsNiArMTU4NCw3IEBACiAKIAlyZXR1cm4gb3ZlcnJ1bnM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vdmVycnVucyk7CiAKIHN0YXRpYyB2b2lkIHJiX2l0ZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCiB7CkBAIC0xNjAwLDYgKzE2MjAsNyBAQAogCXJiX2l0ZXJfcmVzZXQoaXRlcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkgLSBjaGVjayBpZiBhbiBpdGVyYXRvciBoYXMgbm8gbW9yZSB0byByZWFkCkBAIC0xNjE0LDYgKzE2MzUsNyBAQAogCXJldHVybiBpdGVyLT5oZWFkX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UgJiYKIAkJaXRlci0+aGVhZCA9PSByYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9pdGVyX2VtcHR5KTsKIAogc3RhdGljIHZvaWQKIHJiX3VwZGF0ZV9yZWFkX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLApAQCAtMTg4MCw2ICsxOTAyLDcgQEAKIAogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcGVlayk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgogcmJfaXRlcl9wZWVrKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyLCB1NjQgKnRzKQpAQCAtMTk0MCw2ICsxOTYzLDcgQEAKIAogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfaXRlcl9wZWVrKTsKIAogLyoqCiAgKiByaW5nX2J1ZmZlcl9wZWVrIC0gcGVlayBhdCB0aGUgbmV4dCBldmVudCB0byBiZSByZWFkCkBAIC0yMDE3LDYgKzIwNDEsNyBAQAogCiAJcmV0dXJuIGV2ZW50OwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfY29uc3VtZSk7CiAKIC8qKgogICogcmluZ19idWZmZXJfcmVhZF9zdGFydCAtIHN0YXJ0IGEgbm9uIGNvbnN1bWluZyByZWFkIG9mIHRoZSBidWZmZXIKQEAgLTIwNTksNiArMjA4NCw3IEBACiAKIAlyZXR1cm4gaXRlcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlYWRfc3RhcnQpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX2ZpbmlzaCAtIGZpbmlzaCByZWFkaW5nIHRoZSBpdGVyYXRvciBvZiB0aGUgYnVmZmVyCkBAIC0yMDc1LDYgKzIxMDEsNyBAQAogCWF0b21pY19kZWMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CiAJa2ZyZWUoaXRlcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWFkX2ZpbmlzaCk7CiAKIC8qKgogICogcmluZ19idWZmZXJfcmVhZCAtIHJlYWQgdGhlIG5leHQgaXRlbSBpbiB0aGUgcmluZyBidWZmZXIgYnkgdGhlIGl0ZXJhdG9yCkBAIC0yMTAxLDYgKzIxMjgsNyBAQAogCiAJcmV0dXJuIGV2ZW50OwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVhZCk7CiAKIC8qKgogICogcmluZ19idWZmZXJfc2l6ZSAtIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIgKGluIGJ5dGVzKQpAQCAtMjExMCw2ICsyMTM4LDcgQEAKIHsKIAlyZXR1cm4gQlVGX1BBR0VfU0laRSAqIGJ1ZmZlci0+cGFnZXM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9zaXplKTsKIAogc3RhdGljIHZvaWQKIHJiX3Jlc2V0X2NwdShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKQEAgLTIxNTYsNiArMjE4NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVzZXRfY3B1KTsKIAogLyoqCiAgKiByaW5nX2J1ZmZlcl9yZXNldCAtIHJlc2V0IGEgcmluZyBidWZmZXIKQEAgLTIxNjgsNiArMjE5OCw3IEBACiAJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKIAkJcmluZ19idWZmZXJfcmVzZXRfY3B1KGJ1ZmZlciwgY3B1KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3Jlc2V0KTsKIAogLyoqCiAgKiByaW5kX2J1ZmZlcl9lbXB0eSAtIGlzIHRoZSByaW5nIGJ1ZmZlciBlbXB0eT8KQEAgLTIxODYsNiArMjIxNyw3IEBACiAJfQogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW1wdHkpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX2VtcHR5X2NwdSAtIGlzIGEgY3B1IGJ1ZmZlciBvZiBhIHJpbmcgYnVmZmVyIGVtcHR5PwpAQCAtMjIwMiw2ICsyMjM0LDcgQEAKIAljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CiAJcmV0dXJuIHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX3N3YXBfY3B1IC0gc3dhcCBhIENQVSBidWZmZXIgYmV0d2VlbiB0d28gcmluZyBidWZmZXJzCkBAIC0yMjUwLDYgKzIyODMsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9zd2FwX2NwdSk7CiAKIHN0YXRpYyB2b2lkIHJiX3JlbW92ZV9lbnRyaWVzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAogCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCBmNGJiMzgwLi40MTg1ZDUyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CkBAIC0xMzEwLDcgKzEzMDksNyBAQAogCVRSQUNFX0ZJTEVfQU5OT1RBVEUJPSAyLAogfTsKIAotc3RhdGljIHZvaWQgdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIHRyYWNlX2l0ZXJhdG9yX2luY3JlbWVudChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJLyogRG9uJ3QgYWxsb3cgZnRyYWNlIHRvIHRyYWNlIGludG8gdGhlIHJpbmcgYnVmZmVycyAqLwogCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwpAQCAtMTM4OSw3ICsxMzg4LDcgQEAKIAlpdGVyLT5lbnQgPSBfX2ZpbmRfbmV4dF9lbnRyeShpdGVyLCAmaXRlci0+Y3B1LCAmaXRlci0+dHMpOwogCiAJaWYgKGl0ZXItPmVudCkKLQkJdHJhY2VfaXRlcmF0b3JfaW5jcmVtZW50KGl0ZXIsIGl0ZXItPmNwdSk7CisJCXRyYWNlX2l0ZXJhdG9yX2luY3JlbWVudChpdGVyKTsKIAogCXJldHVybiBpdGVyLT5lbnQgPyBpdGVyIDogTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCmluZGV4IDAxYmVjZjEuLmE1Nzc5YmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwpAQCAtMjAyLDcgKzIwMiw2IEBACiAKIAlocnRpbWVyX2luaXQoaHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKIAlocnRpbWVyLT5mdW5jdGlvbiA9IHN0YWNrX3RyYWNlX3RpbWVyX2ZuOwotCWhydGltZXItPmNiX21vZGUgPSBIUlRJTUVSX0NCX0lSUVNBRkVfUEVSQ1BVOwogCiAJaHJ0aW1lcl9zdGFydChocnRpbWVyLCBuc190b19rdGltZShzYW1wbGVfcGVyaW9kKSwgSFJUSU1FUl9NT0RFX1JFTCk7CiB9CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGIwZjIzOWUuLjJlNzU0NzggMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0yNTIsNiArMjUyLDE0IEBACiAJICB0aW1lciByb3V0aW5lcyB0byB0cmFjayB0aGUgbGlmZSB0aW1lIG9mIHRpbWVyIG9iamVjdHMgYW5kCiAJICB2YWxpZGF0ZSB0aGUgdGltZXIgb3BlcmF0aW9ucy4KIAorY29uZmlnIERFQlVHX09CSkVDVFNfRU5BQkxFX0RFRkFVTFQKKwlpbnQgImRlYnVnX29iamVjdHMgYm9vdHVwIGRlZmF1bHQgdmFsdWUgKDAtMSkiCisgICAgICAgIHJhbmdlIDAgMQorICAgICAgICBkZWZhdWx0ICIxIgorICAgICAgICBkZXBlbmRzIG9uIERFQlVHX09CSkVDVFMKKyAgICAgICAgaGVscAorICAgICAgICAgIERlYnVnIG9iamVjdHMgYm9vdCBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZQorCiBjb25maWcgREVCVUdfU0xBQgogCWJvb2wgIkRlYnVnIHNsYWIgbWVtb3J5IGFsbG9jYXRpb25zIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNMQUIKQEAgLTU0NSw2ICs1NTMsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIERFQlVHX05PVElGSUVSUworCWJvb2wgIkRlYnVnIG5vdGlmaWVyIGNhbGwgY2hhaW5zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gdHVybiBvbiBzYW5pdHkgY2hlY2tpbmcgZm9yIG5vdGlmaWVyIGNhbGwgY2hhaW5zLgorCSAgVGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3Iga2VybmVsIGRldmVsb3BlcnMgdG8gbWFrZSBzdXJlIHRoYXQKKwkgIG1vZHVsZXMgcHJvcGVybHkgdW5yZWdpc3RlciB0aGVtc2VsdmVzIGZyb20gbm90aWZpZXIgY2hhaW5zLgorCSAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgY2hlYXAgY2hlY2sgYnV0IGlmIHlvdSBjYXJlIGFib3V0IG1heGltdW0KKwkgIHBlcmZvcm1hbmNlLCBzYXkgTi4KKwogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBcCkBAIC02MTksNiArNjM3LDE5IEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCitjb25maWcgUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorCWJvb2wgIkNoZWNrIGZvciBzdGFsbGVkIENQVXMgZGVsYXlpbmcgUkNVIGdyYWNlIHBlcmlvZHMiCisJZGVwZW5kcyBvbiBDTEFTU0lDX1JDVSB8fCBUUkVFX1JDVQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGluZm9ybWF0aW9uIG9uIHdoaWNoCisJICBDUFVzIGFyZSBkZWxheWluZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsIGJ1dCBvbmx5IHdoZW4KKwkgIHRoZSBncmFjZSBwZXJpb2QgZXh0ZW5kcyBmb3IgZXhjZXNzaXZlIHRpbWUgcGVyaW9kcy4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgUkNVIHRvIHBlcmZvcm0gc3VjaCBjaGVja3MuCisKKwkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorCiBjb25maWcgS1BST0JFU19TQU5JVFlfVEVTVAogCWJvb2wgIktwcm9iZXMgc2FuaXR5IHRlc3RzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC02OTksNiArNzMwLDcgQEAKIGNvbmZpZyBGQUlMU0xBQgogCWJvb2wgIkZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBrbWFsbG9jIgogCWRlcGVuZHMgb24gRkFVTFRfSU5KRUNUSU9OCisJZGVwZW5kcyBvbiBTTEFCIHx8IFNMVUIKIAloZWxwCiAJICBQcm92aWRlIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBrbWFsbG9jLgogCmRpZmYgLS1naXQgYS9saWIvZGVidWdvYmplY3RzLmMgYi9saWIvZGVidWdvYmplY3RzLmMKaW5kZXggZTNhYjM3NC4uNWQ5OWJlMSAxMDA2NDQKLS0tIGEvbGliL2RlYnVnb2JqZWN0cy5jCisrKyBiL2xpYi9kZWJ1Z29iamVjdHMuYwpAQCAtNDUsNyArNDUsOSBAQAogc3RhdGljIGludAkJCWRlYnVnX29iamVjdHNfbWF4Y2hhaW4gX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQlkZWJ1Z19vYmplY3RzX2ZpeHVwcyBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludAkJCWRlYnVnX29iamVjdHNfd2FybmluZ3MgX19yZWFkX21vc3RseTsKLXN0YXRpYyBpbnQJCQlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQJCQlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgX19yZWFkX21vc3RseQorCQkJCT0gQ09ORklHX0RFQlVHX09CSkVDVFNfRU5BQkxFX0RFRkFVTFQ7CisKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfb2JqX2Rlc2NyCSpkZXNjcl90ZXN0ICBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfb2JqZWN0X2RlYnVnKGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IDVmNmM2MjkuLmZhMmRjNGUgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtMjEsOSArMjEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3dpb3RsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMzYsMjIgKzM5LDYgQEAKICNkZWZpbmUgT0ZGU0VUKHZhbCxhbGlnbikgKCh1bnNpZ25lZCBsb25nKQlcCiAJICAgICAgICAgICAgICAgICAgICggKHZhbCkgJiAoIChhbGlnbikgLSAxKSkpCiAKLSNkZWZpbmUgU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykJKHNnX3ZpcnQoKHNnKSkpCi0jZGVmaW5lIFNHX0VOVF9QSFlTX0FERFJFU1Moc2cpCXZpcnRfdG9fYnVzKFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpKQotCi0vKgotICogTWF4aW11bSBhbGxvd2FibGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgc2xhYnMgdG8gbWFwLAotICogbXVzdCBiZSBhIHBvd2VyIG9mIDIuICBXaGF0IGlzIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSA/Ci0gKiBUaGUgY29tcGxleGl0eSBvZiB7bWFwLHVubWFwfV9zaW5nbGUgaXMgbGluZWFybHkgZGVwZW5kZW50IG9uIHRoaXMgdmFsdWUuCi0gKi8KLSNkZWZpbmUgSU9fVExCX1NFR1NJWkUJMTI4Ci0KLS8qCi0gKiBsb2cgb2YgdGhlIHNpemUgb2YgZWFjaCBJTyBUTEIgc2xhYi4gIFRoZSBudW1iZXIgb2Ygc2xhYnMgaXMgY29tbWFuZCBsaW5lCi0gKiBjb250cm9sbGFibGUuCi0gKi8KLSNkZWZpbmUgSU9fVExCX1NISUZUIDExCi0KICNkZWZpbmUgU0xBQlNfUEVSX1BBR0UgKDEgPDwgKFBBR0VfU0hJRlQgLSBJT19UTEJfU0hJRlQpKQogCiAvKgpAQCAtMTAyLDcgKzg5LDEwIEBACiAgKiBXZSBuZWVkIHRvIHNhdmUgYXdheSB0aGUgb3JpZ2luYWwgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGEgbWFwcGVkIGVudHJ5CiAgKiBmb3IgdGhlIHN5bmMgb3BlcmF0aW9ucy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgKippb190bGJfb3JpZ19hZGRyOworc3RhdGljIHN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkciB7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IG9mZnNldDsKK30gKmlvX3RsYl9vcmlnX2FkZHI7CiAKIC8qCiAgKiBQcm90ZWN0IHRoZSBhYm92ZSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlIG1hcCBhbmQgdW5tYXAgY2FsbHMKQEAgLTEyNiw2ICsxMTYsNzIgQEAKIF9fc2V0dXAoInN3aW90bGI9Iiwgc2V0dXBfaW9fdGxiX25wYWdlcyk7CiAvKiBtYWtlIGlvX3RsYl9vdmVyZmxvdyB0dW5hYmxlIHRvbz8gKi8KIAordm9pZCAqIF9fd2VhayBzd2lvdGxiX2FsbG9jX2Jvb3Qoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgbnNsYWJzKQoreworCXJldHVybiBhbGxvY19ib290bWVtX2xvd19wYWdlcyhzaXplKTsKK30KKwordm9pZCAqIF9fd2VhayBzd2lvdGxiX2FsbG9jKHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBsb25nIG5zbGFicykKK3sKKwlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9ETUEgfCBfX0dGUF9OT1dBUk4sIG9yZGVyKTsKK30KKworZG1hX2FkZHJfdCBfX3dlYWsgc3dpb3RsYl9waHlzX3RvX2J1cyhwaHlzX2FkZHJfdCBwYWRkcikKK3sKKwlyZXR1cm4gcGFkZHI7Cit9CisKK3BoeXNfYWRkcl90IF9fd2VhayBzd2lvdGxiX2J1c190b19waHlzKGRtYV9hZGRyX3QgYmFkZHIpCit7CisJcmV0dXJuIGJhZGRyOworfQorCitzdGF0aWMgZG1hX2FkZHJfdCBzd2lvdGxiX3ZpcnRfdG9fYnVzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCit7CisJcmV0dXJuIHN3aW90bGJfcGh5c190b19idXModmlydF90b19waHlzKGFkZHJlc3MpKTsKK30KKworc3RhdGljIHZvaWQgKnN3aW90bGJfYnVzX3RvX3ZpcnQoZG1hX2FkZHJfdCBhZGRyZXNzKQoreworCXJldHVybiBwaHlzX3RvX3ZpcnQoc3dpb3RsYl9idXNfdG9fcGh5cyhhZGRyZXNzKSk7Cit9CisKK2ludCBfX3dlYWsgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGRtYV9hZGRyX3Qgc3dpb3RsYl9zZ190b19idXMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlyZXR1cm4gc3dpb3RsYl9waHlzX3RvX2J1cyhwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHN3aW90bGJfcHJpbnRfaW5mbyh1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCXBoeXNfYWRkcl90IHBzdGFydCwgcGVuZDsKKwlkbWFfYWRkcl90IGJzdGFydCwgYmVuZDsKKworCXBzdGFydCA9IHZpcnRfdG9fcGh5cyhpb190bGJfc3RhcnQpOworCXBlbmQgPSB2aXJ0X3RvX3BoeXMoaW9fdGxiX2VuZCk7CisKKwlic3RhcnQgPSBzd2lvdGxiX3BoeXNfdG9fYnVzKHBzdGFydCk7CisJYmVuZCA9IHN3aW90bGJfcGh5c190b19idXMocGVuZCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJQbGFjaW5nICVsdU1CIHNvZnR3YXJlIElPIFRMQiBiZXR3ZWVuICVwIC0gJXBcbiIsCisJICAgICAgIGJ5dGVzID4+IDIwLCBpb190bGJfc3RhcnQsIGlvX3RsYl9lbmQpOworCWlmIChwc3RhcnQgIT0gYnN0YXJ0IHx8IHBlbmQgIT0gYmVuZCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic29mdHdhcmUgSU8gVExCIGF0IHBoeXMgJSNsbHggLSAlI2xseCIKKwkJICAgICAgICIgYnVzICUjbGx4IC0gJSNsbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGVuZCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnN0YXJ0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZW5kKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gInNvZnR3YXJlIElPIFRMQiBhdCBwaHlzICUjbGx4IC0gJSNsbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGVuZCk7Cit9CisKIC8qCiAgKiBTdGF0aWNhbGx5IHJlc2VydmUgYm91bmNlIGJ1ZmZlciBzcGFjZSBhbmQgaW5pdGlhbGl6ZSBib3VuY2UgYnVmZmVyIGRhdGEKICAqIHN0cnVjdHVyZXMgZm9yIHRoZSBzb2Z0d2FyZSBJTyBUTEIgdXNlZCB0byBpbXBsZW1lbnQgdGhlIERNQSBBUEkuCkBAIC0xNDUsNyArMjAxLDcgQEAKIAkvKgogCSAqIEdldCBJTyBUTEIgbWVtb3J5IGZyb20gdGhlIGxvdyBwYWdlcwogCSAqLwotCWlvX3RsYl9zdGFydCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKGJ5dGVzKTsKKwlpb190bGJfc3RhcnQgPSBzd2lvdGxiX2FsbG9jX2Jvb3QoYnl0ZXMsIGlvX3RsYl9uc2xhYnMpOwogCWlmICghaW9fdGxiX3N0YXJ0KQogCQlwYW5pYygiQ2Fubm90IGFsbG9jYXRlIFNXSU9UTEIgYnVmZmVyIik7CiAJaW9fdGxiX2VuZCA9IGlvX3RsYl9zdGFydCArIGJ5dGVzOwpAQCAtMTU5LDcgKzIxNSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGlvX3RsYl9uc2xhYnM7IGkrKykKICAJCWlvX3RsYl9saXN0W2ldID0gSU9fVExCX1NFR1NJWkUgLSBPRkZTRVQoaSwgSU9fVExCX1NFR1NJWkUpOwogCWlvX3RsYl9pbmRleCA9IDA7Ci0JaW9fdGxiX29yaWdfYWRkciA9IGFsbG9jX2Jvb3RtZW0oaW9fdGxiX25zbGFicyAqIHNpemVvZihjaGFyICopKTsKKwlpb190bGJfb3JpZ19hZGRyID0gYWxsb2NfYm9vdG1lbShpb190bGJfbnNsYWJzICogc2l6ZW9mKHN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkcikpOwogCiAJLyoKIAkgKiBHZXQgdGhlIG92ZXJmbG93IGVtZXJnZW5jeSBidWZmZXIKQEAgLTE2OCw4ICsyMjQsNyBAQAogCWlmICghaW9fdGxiX292ZXJmbG93X2J1ZmZlcikKIAkJcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBTV0lPVExCIG92ZXJmbG93IGJ1ZmZlciFcbiIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUGxhY2luZyBzb2Z0d2FyZSBJTyBUTEIgYmV0d2VlbiAweCVseCAtIDB4JWx4XG4iLAotCSAgICAgICB2aXJ0X3RvX2J1cyhpb190bGJfc3RhcnQpLCB2aXJ0X3RvX2J1cyhpb190bGJfZW5kKSk7CisJc3dpb3RsYl9wcmludF9pbmZvKGJ5dGVzKTsKIH0KIAogdm9pZCBfX2luaXQKQEAgLTIwMiw4ICsyNTcsNyBAQAogCWJ5dGVzID0gaW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CiAKIAl3aGlsZSAoKFNMQUJTX1BFUl9QQUdFIDw8IG9yZGVyKSA+IElPX1RMQl9NSU5fU0xBQlMpIHsKLQkJaW9fdGxiX3N0YXJ0ID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9ETUEgfCBfX0dGUF9OT1dBUk4sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcik7CisJCWlvX3RsYl9zdGFydCA9IHN3aW90bGJfYWxsb2Mob3JkZXIsIGlvX3RsYl9uc2xhYnMpOwogCQlpZiAoaW9fdGxiX3N0YXJ0KQogCQkJYnJlYWs7CiAJCW9yZGVyLS07CkBAIC0yMzUsMTIgKzI4OSwxMiBAQAogIAkJaW9fdGxiX2xpc3RbaV0gPSBJT19UTEJfU0VHU0laRSAtIE9GRlNFVChpLCBJT19UTEJfU0VHU0laRSk7CiAJaW9fdGxiX2luZGV4ID0gMDsKIAotCWlvX3RsYl9vcmlnX2FkZHIgPSAodW5zaWduZWQgY2hhciAqKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X29yZGVyKGlvX3RsYl9uc2xhYnMgKiBzaXplb2YoY2hhciAqKSkpOworCWlvX3RsYl9vcmlnX2FkZHIgPSAoc3RydWN0IHN3aW90bGJfcGh5c19hZGRyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9vcmRlcihpb190bGJfbnNsYWJzICogc2l6ZW9mKHN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkcikpKTsKIAlpZiAoIWlvX3RsYl9vcmlnX2FkZHIpCiAJCWdvdG8gY2xlYW51cDM7CiAKLQltZW1zZXQoaW9fdGxiX29yaWdfYWRkciwgMCwgaW9fdGxiX25zbGFicyAqIHNpemVvZihjaGFyICopKTsKKwltZW1zZXQoaW9fdGxiX29yaWdfYWRkciwgMCwgaW9fdGxiX25zbGFicyAqIHNpemVvZihzdHJ1Y3Qgc3dpb3RsYl9waHlzX2FkZHIpKTsKIAogCS8qCiAJICogR2V0IHRoZSBvdmVyZmxvdyBlbWVyZ2VuY3kgYnVmZmVyCkBAIC0yNTAsOSArMzA0LDcgQEAKIAlpZiAoIWlvX3RsYl9vdmVyZmxvd19idWZmZXIpCiAJCWdvdG8gY2xlYW51cDQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJQbGFjaW5nICVsdU1CIHNvZnR3YXJlIElPIFRMQiBiZXR3ZWVuIDB4JWx4IC0gIgotCSAgICAgICAiMHglbHhcbiIsIGJ5dGVzID4+IDIwLAotCSAgICAgICB2aXJ0X3RvX2J1cyhpb190bGJfc3RhcnQpLCB2aXJ0X3RvX2J1cyhpb190bGJfZW5kKSk7CisJc3dpb3RsYl9wcmludF9pbmZvKGJ5dGVzKTsKIAogCXJldHVybiAwOwogCkBAIC0yNzksMTYgKzMzMSw2OSBAQAogCXJldHVybiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9nZXRfbWFzayhod2RldiksIGFkZHIsIHNpemUpOwogfQogCitzdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIHN3aW90bGJfZm9yY2UgfHwgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcocHRyLCBzaXplKTsKK30KKwogc3RhdGljIGludCBpc19zd2lvdGxiX2J1ZmZlcihjaGFyICphZGRyKQogewogCXJldHVybiBhZGRyID49IGlvX3RsYl9zdGFydCAmJiBhZGRyIDwgaW9fdGxiX2VuZDsKIH0KIAorc3RhdGljIHN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkciBzd2lvdGxiX2J1c190b19waHlzX2FkZHIoY2hhciAqZG1hX2FkZHIpCit7CisJaW50IGluZGV4ID0gKGRtYV9hZGRyIC0gaW9fdGxiX3N0YXJ0KSA+PiBJT19UTEJfU0hJRlQ7CisJc3RydWN0IHN3aW90bGJfcGh5c19hZGRyIGJ1ZmZlciA9IGlvX3RsYl9vcmlnX2FkZHJbaW5kZXhdOworCWJ1ZmZlci5vZmZzZXQgKz0gKGxvbmcpZG1hX2FkZHIgJiAoKDEgPDwgSU9fVExCX1NISUZUKSAtIDEpOworCWJ1ZmZlci5wYWdlICs9IGJ1ZmZlci5vZmZzZXQgPj4gUEFHRV9TSElGVDsKKwlidWZmZXIub2Zmc2V0ICY9IFBBR0VfU0laRSAtIDE7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQKK19fc3luY19zaW5nbGUoc3RydWN0IHN3aW90bGJfcGh5c19hZGRyIGJ1ZmZlciwgY2hhciAqZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyKQoreworCWlmIChQYWdlSGlnaE1lbShidWZmZXIucGFnZSkpIHsKKwkJc2l6ZV90IGxlbiwgYnl0ZXM7CisJCWNoYXIgKmRldiwgKmhvc3QsICprbXA7CisKKwkJbGVuID0gc2l6ZTsKKwkJd2hpbGUgKGxlbiAhPSAwKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlieXRlcyA9IGxlbjsKKwkJCWlmICgoYnl0ZXMgKyBidWZmZXIub2Zmc2V0KSA+IFBBR0VfU0laRSkKKwkJCQlieXRlcyA9IFBBR0VfU0laRSAtIGJ1ZmZlci5vZmZzZXQ7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IC8qIHByb3RlY3RzIEtNX0JPVU5DRV9SRUFEICovCisJCQlrbXAgID0ga21hcF9hdG9taWMoYnVmZmVyLnBhZ2UsIEtNX0JPVU5DRV9SRUFEKTsKKwkJCWRldiAgPSBkbWFfYWRkciArIHNpemUgLSBsZW47CisJCQlob3N0ID0ga21wICsgYnVmZmVyLm9mZnNldDsKKwkJCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQkJCW1lbWNweShob3N0LCBkZXYsIGJ5dGVzKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoZGV2LCBob3N0LCBieXRlcyk7CisJCQlrdW5tYXBfYXRvbWljKGttcCwgS01fQk9VTkNFX1JFQUQpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJbGVuIC09IGJ5dGVzOworCQkJYnVmZmVyLnBhZ2UrKzsKKwkJCWJ1ZmZlci5vZmZzZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJdm9pZCAqdiA9IHBhZ2VfYWRkcmVzcyhidWZmZXIucGFnZSkgKyBidWZmZXIub2Zmc2V0OworCisJCWlmIChkaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJCW1lbWNweShkbWFfYWRkciwgdiwgc2l6ZSk7CisJCWVsc2UKKwkJCW1lbWNweSh2LCBkbWFfYWRkciwgc2l6ZSk7CisJfQorfQorCiAvKgogICogQWxsb2NhdGVzIGJvdW5jZSBidWZmZXIgYW5kIHJldHVybnMgaXRzIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuCiAgKi8KIHN0YXRpYyB2b2lkICoKLW1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBkaXIpCittYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc3dpb3RsYl9waHlzX2FkZHIgYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNoYXIgKmRtYV9hZGRyOwpAQCAtMjk4LDExICs0MDMsMTYgQEAKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXRfc2xvdHM7CiAJdW5zaWduZWQgbG9uZyBtYXhfc2xvdHM7CisJc3RydWN0IHN3aW90bGJfcGh5c19hZGRyIHNsb3RfYnVmOwogCiAJbWFzayA9IGRtYV9nZXRfc2VnX2JvdW5kYXJ5KGh3ZGV2KTsKLQlzdGFydF9kbWFfYWRkciA9IHZpcnRfdG9fYnVzKGlvX3RsYl9zdGFydCkgJiBtYXNrOworCXN0YXJ0X2RtYV9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhpb190bGJfc3RhcnQpICYgbWFzazsKIAogCW9mZnNldF9zbG90cyA9IEFMSUdOKHN0YXJ0X2RtYV9hZGRyLCAxIDw8IElPX1RMQl9TSElGVCkgPj4gSU9fVExCX1NISUZUOworCisJLyoKKyAJICogQ2FyZWZ1bGx5IGhhbmRsZSBpbnRlZ2VyIG92ZXJmbG93IHdoaWNoIGNhbiBvY2N1ciB3aGVuIG1hc2sgPT0gfjBVTC4KKyAJICovCiAJbWF4X3Nsb3RzID0gbWFzayArIDEKIAkJICAgID8gQUxJR04obWFzayArIDEsIDEgPDwgSU9fVExCX1NISUZUKSA+PiBJT19UTEJfU0hJRlQKIAkJICAgIDogMVVMIDw8IChCSVRTX1BFUl9MT05HIC0gSU9fVExCX1NISUZUKTsKQEAgLTM3OCwxMCArNDg4LDE1IEBACiAJICogVGhpcyBpcyBuZWVkZWQgd2hlbiB3ZSBzeW5jIHRoZSBtZW1vcnkuICBUaGVuIHdlIHN5bmMgdGhlIGJ1ZmZlciBpZgogCSAqIG5lZWRlZC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnNsb3RzOyBpKyspCi0JCWlvX3RsYl9vcmlnX2FkZHJbaW5kZXgraV0gPSBidWZmZXIgKyAoaSA8PCBJT19UTEJfU0hJRlQpOworCXNsb3RfYnVmID0gYnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCBuc2xvdHM7IGkrKykgeworCQlzbG90X2J1Zi5wYWdlICs9IHNsb3RfYnVmLm9mZnNldCA+PiBQQUdFX1NISUZUOworCQlzbG90X2J1Zi5vZmZzZXQgJj0gUEFHRV9TSVpFIC0gMTsKKwkJaW9fdGxiX29yaWdfYWRkcltpbmRleCtpXSA9IHNsb3RfYnVmOworCQlzbG90X2J1Zi5vZmZzZXQgKz0gMSA8PCBJT19UTEJfU0hJRlQ7CisJfQogCWlmIChkaXIgPT0gRE1BX1RPX0RFVklDRSB8fCBkaXIgPT0gRE1BX0JJRElSRUNUSU9OQUwpCi0JCW1lbWNweShkbWFfYWRkciwgYnVmZmVyLCBzaXplKTsKKwkJX19zeW5jX3NpbmdsZShidWZmZXIsIGRtYV9hZGRyLCBzaXplLCBETUFfVE9fREVWSUNFKTsKIAogCXJldHVybiBkbWFfYWRkcjsKIH0KQEAgLTM5NSwxNyArNTEwLDE3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgY291bnQsIG5zbG90cyA9IEFMSUdOKHNpemUsIDEgPDwgSU9fVExCX1NISUZUKSA+PiBJT19UTEJfU0hJRlQ7CiAJaW50IGluZGV4ID0gKGRtYV9hZGRyIC0gaW9fdGxiX3N0YXJ0KSA+PiBJT19UTEJfU0hJRlQ7Ci0JY2hhciAqYnVmZmVyID0gaW9fdGxiX29yaWdfYWRkcltpbmRleF07CisJc3RydWN0IHN3aW90bGJfcGh5c19hZGRyIGJ1ZmZlciA9IHN3aW90bGJfYnVzX3RvX3BoeXNfYWRkcihkbWFfYWRkcik7CiAKIAkvKgogCSAqIEZpcnN0LCBzeW5jIHRoZSBtZW1vcnkgYmVmb3JlIHVubWFwcGluZyB0aGUgZW50cnkKIAkgKi8KLQlpZiAoYnVmZmVyICYmICgoZGlyID09IERNQV9GUk9NX0RFVklDRSkgfHwgKGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkpKQorCWlmICgoZGlyID09IERNQV9GUk9NX0RFVklDRSkgfHwgKGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkpCiAJCS8qCiAJCSAqIGJvdW5jZS4uLiBjb3B5IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgYnVmZmVyICogYW5kCiAJCSAqIGRlbGV0ZSB0aGUgYm91bmNlIGJ1ZmZlci4KIAkJICovCi0JCW1lbWNweShidWZmZXIsIGRtYV9hZGRyLCBzaXplKTsKKwkJX19zeW5jX3NpbmdsZShidWZmZXIsIGRtYV9hZGRyLCBzaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJLyoKIAkgKiBSZXR1cm4gdGhlIGJ1ZmZlciB0byB0aGUgZnJlZSBsaXN0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKQEAgLTQzNywyMSArNTUyLDE4IEBACiBzeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgY2hhciAqZG1hX2FkZHIsIHNpemVfdCBzaXplLAogCSAgICBpbnQgZGlyLCBpbnQgdGFyZ2V0KQogewotCWludCBpbmRleCA9IChkbWFfYWRkciAtIGlvX3RsYl9zdGFydCkgPj4gSU9fVExCX1NISUZUOwotCWNoYXIgKmJ1ZmZlciA9IGlvX3RsYl9vcmlnX2FkZHJbaW5kZXhdOwotCi0JYnVmZmVyICs9ICgodW5zaWduZWQgbG9uZylkbWFfYWRkciAmICgoMSA8PCBJT19UTEJfU0hJRlQpIC0gMSkpOworCXN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkciBidWZmZXIgPSBzd2lvdGxiX2J1c190b19waHlzX2FkZHIoZG1hX2FkZHIpOwogCiAJc3dpdGNoICh0YXJnZXQpIHsKIAljYXNlIFNZTkNfRk9SX0NQVToKIAkJaWYgKGxpa2VseShkaXIgPT0gRE1BX0ZST01fREVWSUNFIHx8IGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkpCi0JCQltZW1jcHkoYnVmZmVyLCBkbWFfYWRkciwgc2l6ZSk7CisJCQlfX3N5bmNfc2luZ2xlKGJ1ZmZlciwgZG1hX2FkZHIsIHNpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCWVsc2UKIAkJCUJVR19PTihkaXIgIT0gRE1BX1RPX0RFVklDRSk7CiAJCWJyZWFrOwogCWNhc2UgU1lOQ19GT1JfREVWSUNFOgogCQlpZiAobGlrZWx5KGRpciA9PSBETUFfVE9fREVWSUNFIHx8IGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkpCi0JCQltZW1jcHkoZG1hX2FkZHIsIGJ1ZmZlciwgc2l6ZSk7CisJCQlfX3N5bmNfc2luZ2xlKGJ1ZmZlciwgZG1hX2FkZHIsIHNpemUsIERNQV9UT19ERVZJQ0UpOwogCQllbHNlCiAJCQlCVUdfT04oZGlyICE9IERNQV9GUk9NX0RFVklDRSk7CiAJCWJyZWFrOwpAQCAtNDczLDcgKzU4NSw3IEBACiAJCWRtYV9tYXNrID0gaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrOwogCiAJcmV0ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCBvcmRlcik7Ci0JaWYgKHJldCAmJiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9tYXNrLCB2aXJ0X3RvX2J1cyhyZXQpLCBzaXplKSkgeworCWlmIChyZXQgJiYgIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShkbWFfbWFzaywgc3dpb3RsYl92aXJ0X3RvX2J1cyhyZXQpLCBzaXplKSkgewogCQkvKgogCQkgKiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBpc24ndCByZWFjaGFibGUgYnkgdGhlIGRldmljZS4KIAkJICogRmFsbCBiYWNrIG9uIHN3aW90bGJfbWFwX3NpbmdsZSgpLgpAQCAtNDg4LDEzICs2MDAsMTYgQEAKIAkJICogc3dpb3RsYl9tYXBfc2luZ2xlKCksIHdoaWNoIHdpbGwgZ3JhYiBtZW1vcnkgZnJvbQogCQkgKiB0aGUgbG93ZXN0IGF2YWlsYWJsZSBhZGRyZXNzIHJhbmdlLgogCQkgKi8KLQkJcmV0ID0gbWFwX3NpbmdsZShod2RldiwgTlVMTCwgc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKwkJc3RydWN0IHN3aW90bGJfcGh5c19hZGRyIGJ1ZmZlcjsKKwkJYnVmZmVyLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoTlVMTCk7CisJCWJ1ZmZlci5vZmZzZXQgPSAwOworCQlyZXQgPSBtYXBfc2luZ2xlKGh3ZGV2LCBidWZmZXIsIHNpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JZGV2X2FkZHIgPSB2aXJ0X3RvX2J1cyhyZXQpOworCWRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhyZXQpOwogCiAJLyogQ29uZmlybSBhZGRyZXNzIGNhbiBiZSBETUEnZCBieSBkZXZpY2UgKi8KIAlpZiAoIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShkbWFfbWFzaywgZGV2X2FkZHIsIHNpemUpKSB7CkBAIC01NTQsOCArNjY5LDkgQEAKIHN3aW90bGJfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJCSBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlkbWFfYWRkcl90IGRldl9hZGRyID0gdmlydF90b19idXMocHRyKTsKKwlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhwdHIpOwogCXZvaWQgKm1hcDsKKwlzdHJ1Y3Qgc3dpb3RsYl9waHlzX2FkZHIgYnVmZmVyOwogCiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJLyoKQEAgLTU2MywxOSArNjc5LDIyIEBACiAJICogd2UgY2FuIHNhZmVseSByZXR1cm4gdGhlIGRldmljZSBhZGRyIGFuZCBub3Qgd29ycnkgYWJvdXQgYm91bmNlCiAJICogYnVmZmVyaW5nIGl0LgogCSAqLwotCWlmICghYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSkgJiYgIXN3aW90bGJfZm9yY2UpCisJaWYgKCFhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzaXplKSAmJgorCSAgICAhcmFuZ2VfbmVlZHNfbWFwcGluZyhwdHIsIHNpemUpKQogCQlyZXR1cm4gZGV2X2FkZHI7CiAKIAkvKgogCSAqIE9oIHdlbGwsIGhhdmUgdG8gYWxsb2NhdGUgYW5kIG1hcCBhIGJvdW5jZSBidWZmZXIuCiAJICovCi0JbWFwID0gbWFwX3NpbmdsZShod2RldiwgcHRyLCBzaXplLCBkaXIpOworCWJ1ZmZlci5wYWdlICAgPSB2aXJ0X3RvX3BhZ2UocHRyKTsKKwlidWZmZXIub2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpcHRyICYgflBBR0VfTUFTSzsKKwltYXAgPSBtYXBfc2luZ2xlKGh3ZGV2LCBidWZmZXIsIHNpemUsIGRpcik7CiAJaWYgKCFtYXApIHsKIAkJc3dpb3RsYl9mdWxsKGh3ZGV2LCBzaXplLCBkaXIsIDEpOwogCQltYXAgPSBpb190bGJfb3ZlcmZsb3dfYnVmZmVyOwogCX0KIAotCWRldl9hZGRyID0gdmlydF90b19idXMobWFwKTsKKwlkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMobWFwKTsKIAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQpAQCAtNjA1LDcgKzcyNCw3IEBACiBzd2lvdGxiX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKIAkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQljaGFyICpkbWFfYWRkciA9IGJ1c190b192aXJ0KGRldl9hZGRyKTsKKwljaGFyICpkbWFfYWRkciA9IHN3aW90bGJfYnVzX3RvX3ZpcnQoZGV2X2FkZHIpOwogCiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJaWYgKGlzX3N3aW90bGJfYnVmZmVyKGRtYV9hZGRyKSkKQEAgLTYzNSw3ICs3NTQsNyBAQAogc3dpb3RsYl9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKIAkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyLCBpbnQgdGFyZ2V0KQogewotCWNoYXIgKmRtYV9hZGRyID0gYnVzX3RvX3ZpcnQoZGV2X2FkZHIpOworCWNoYXIgKmRtYV9hZGRyID0gc3dpb3RsYl9idXNfdG9fdmlydChkZXZfYWRkcik7CiAKIAlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAlpZiAoaXNfc3dpb3RsYl9idWZmZXIoZG1hX2FkZHIpKQpAQCAtNjY2LDcgKzc4NSw3IEBACiAJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKIAkJCSAgaW50IGRpciwgaW50IHRhcmdldCkKIHsKLQljaGFyICpkbWFfYWRkciA9IGJ1c190b192aXJ0KGRldl9hZGRyKSArIG9mZnNldDsKKwljaGFyICpkbWFfYWRkciA9IHN3aW90bGJfYnVzX3RvX3ZpcnQoZGV2X2FkZHIpICsgb2Zmc2V0OwogCiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJaWYgKGlzX3N3aW90bGJfYnVmZmVyKGRtYV9hZGRyKSkKQEAgLTcxNCwxOCArODMzLDIwIEBACiAJCSAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl2b2lkICphZGRyOworCXN0cnVjdCBzd2lvdGxiX3BoeXNfYWRkciBidWZmZXI7CiAJZG1hX2FkZHJfdCBkZXZfYWRkcjsKIAlpbnQgaTsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCWFkZHIgPSBTR19FTlRfVklSVF9BRERSRVNTKHNnKTsKLQkJZGV2X2FkZHIgPSB2aXJ0X3RvX2J1cyhhZGRyKTsKLQkJaWYgKHN3aW90bGJfZm9yY2UgfHwKKwkJZGV2X2FkZHIgPSBzd2lvdGxiX3NnX3RvX2J1cyhzZyk7CisJCWlmIChyYW5nZV9uZWVkc19tYXBwaW5nKHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoKSB8fAogCQkgICAgYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2ctPmxlbmd0aCkpIHsKLQkJCXZvaWQgKm1hcCA9IG1hcF9zaW5nbGUoaHdkZXYsIGFkZHIsIHNnLT5sZW5ndGgsIGRpcik7CisJCQl2b2lkICptYXA7CisJCQlidWZmZXIucGFnZSAgID0gc2dfcGFnZShzZyk7CisJCQlidWZmZXIub2Zmc2V0ID0gc2ctPm9mZnNldDsKKwkJCW1hcCA9IG1hcF9zaW5nbGUoaHdkZXYsIGJ1ZmZlciwgc2ctPmxlbmd0aCwgZGlyKTsKIAkJCWlmICghbWFwKSB7CiAJCQkJLyogRG9uJ3QgcGFuaWMgaGVyZSwgd2UgZXhwZWN0IG1hcF9zZyB1c2VycwogCQkJCSAgIHRvIGRvIHByb3BlciBlcnJvciBoYW5kbGluZy4gKi8KQEAgLTczNSw3ICs4NTYsNyBAQAogCQkJCXNnbFswXS5kbWFfbGVuZ3RoID0gMDsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCXNnLT5kbWFfYWRkcmVzcyA9IHZpcnRfdG9fYnVzKG1hcCk7CisJCQlzZy0+ZG1hX2FkZHJlc3MgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKG1hcCk7CiAJCX0gZWxzZQogCQkJc2ctPmRtYV9hZGRyZXNzID0gZGV2X2FkZHI7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKQEAgLTc2NSwxMSArODg2LDExIEBACiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpIHsKLQkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBTR19FTlRfUEhZU19BRERSRVNTKHNnKSkKLQkJCXVubWFwX3NpbmdsZShod2RldiwgYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKKwkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBzd2lvdGxiX3NnX3RvX2J1cyhzZykpCisJCQl1bm1hcF9zaW5nbGUoaHdkZXYsIHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKIAkJCQkgICAgIHNnLT5kbWFfbGVuZ3RoLCBkaXIpOwogCQllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQotCQkJZG1hX21hcmtfY2xlYW4oU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyksIHNnLT5kbWFfbGVuZ3RoKTsKKwkJCWRtYV9tYXJrX2NsZWFuKHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwgc2ctPmRtYV9sZW5ndGgpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woc3dpb3RsYl91bm1hcF9zZ19hdHRycyk7CkBAIC03OTgsMTEgKzkxOSwxMSBAQAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gU0dfRU5UX1BIWVNfQUREUkVTUyhzZykpCi0JCQlzeW5jX3NpbmdsZShod2RldiwgYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKKwkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBzd2lvdGxiX3NnX3RvX2J1cyhzZykpCisJCQlzeW5jX3NpbmdsZShod2Rldiwgc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLAogCQkJCSAgICBzZy0+ZG1hX2xlbmd0aCwgZGlyLCB0YXJnZXQpOwogCQllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQotCQkJZG1hX21hcmtfY2xlYW4oU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyksIHNnLT5kbWFfbGVuZ3RoKTsKKwkJCWRtYV9tYXJrX2NsZWFuKHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwgc2ctPmRtYV9sZW5ndGgpOwogCX0KIH0KIApAQCAtODIzLDcgKzk0NCw3IEBACiBpbnQKIHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7Ci0JcmV0dXJuIChkbWFfYWRkciA9PSB2aXJ0X3RvX2J1cyhpb190bGJfb3ZlcmZsb3dfYnVmZmVyKSk7CisJcmV0dXJuIChkbWFfYWRkciA9PSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGlvX3RsYl9vdmVyZmxvd19idWZmZXIpKTsKIH0KIAogLyoKQEAgLTgzNSw3ICs5NTYsNyBAQAogaW50CiBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKQogewotCXJldHVybiB2aXJ0X3RvX2J1cyhpb190bGJfZW5kIC0gMSkgPD0gbWFzazsKKwlyZXR1cm4gc3dpb3RsYl92aXJ0X3RvX2J1cyhpb190bGJfZW5kIC0gMSkgPD0gbWFzazsKIH0KIAogRVhQT1JUX1NZTUJPTChzd2lvdGxiX21hcF9zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBjMDZiNDVhLi41MWMyNzcwIDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogb2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm8KIG9iai0kKENPTkZJR19TTEFCKSArPSBzbGFiLm8KIG9iai0kKENPTkZJR19TTFVCKSArPSBzbHViLm8KK29iai0kKENPTkZJR19GQUlMU0xBQikgKz0gZmFpbHNsYWIubwogb2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnlfaG90cGx1Zy5vCiBvYmotJChDT05GSUdfRlNfWElQKSArPSBmaWxlbWFwX3hpcC5vCiBvYmotJChDT05GSUdfTUlHUkFUSU9OKSArPSBtaWdyYXRlLm8KZGlmZiAtLWdpdCBhL21tL2JvdW5jZS5jIGIvbW0vYm91bmNlLmMKaW5kZXggYmYwY2Y3Yy4uZTU5MDI3MiAxMDA2NDQKLS0tIGEvbW0vYm91bmNlLmMKKysrIGIvbW0vYm91bmNlLmMKQEAgLTE5OCw4ICsxOTgsMTMgQEAKIAkJLyoKIAkJICogaXJrLCBib3VuY2UgaXQKIAkJICovCi0JCWlmICghYmlvKQotCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCAoKmJpb19vcmlnKS0+YmlfdmNudCk7CisJCWlmICghYmlvKSB7CisJCQl1bnNpZ25lZCBpbnQgY250ID0gKCpiaW9fb3JpZyktPmJpX3ZjbnQ7CisKKwkJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgY250KTsKKwkJCW1lbXNldChiaW8tPmJpX2lvX3ZlYywgMCwgY250ICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSk7CisJCX0KKwkJCQogCiAJCXRvID0gYmlvLT5iaV9pb192ZWMgKyBpOwogCmRpZmYgLS1naXQgYS9tbS9mYWlsc2xhYi5jIGIvbW0vZmFpbHNsYWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZlYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vZmFpbHNsYWIuYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBmYXVsdF9hdHRyIGF0dHI7CisJdTMyIGlnbm9yZV9nZnBfd2FpdDsKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCisJc3RydWN0IGRlbnRyeSAqaWdub3JlX2dmcF93YWl0X2ZpbGU7CisjZW5kaWYKK30gZmFpbHNsYWIgPSB7CisJLmF0dHIgPSBGQVVMVF9BVFRSX0lOSVRJQUxJWkVSLAorCS5pZ25vcmVfZ2ZwX3dhaXQgPSAxLAorfTsKKworYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKQoreworCWlmIChnZnBmbGFncyAmIF9fR0ZQX05PRkFJTCkKKwkJcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChmYWlsc2xhYi5pZ25vcmVfZ2ZwX3dhaXQgJiYgKGdmcGZsYWdzICYgX19HRlBfV0FJVCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBzaG91bGRfZmFpbCgmZmFpbHNsYWIuYXR0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2ZhaWxzbGFiKGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc2V0dXBfZmF1bHRfYXR0cigmZmFpbHNsYWIuYXR0ciwgc3RyKTsKK30KK19fc2V0dXAoImZhaWxzbGFiPSIsIHNldHVwX2ZhaWxzbGFiKTsKKworI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMKKworc3RhdGljIGludCBfX2luaXQgZmFpbHNsYWJfZGVidWdmc19pbml0KHZvaWQpCit7CisJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCBlcnI7CisKKwllcnIgPSBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIsICJmYWlsc2xhYiIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZGlyID0gZmFpbHNsYWIuYXR0ci5kZW50cmllcy5kaXI7CisKKwlmYWlsc2xhYi5pZ25vcmVfZ2ZwX3dhaXRfZmlsZSA9CisJCWRlYnVnZnNfY3JlYXRlX2Jvb2woImlnbm9yZS1nZnAtd2FpdCIsIG1vZGUsIGRpciwKKwkJCQkgICAgICAmZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0KTsKKworCWlmICghZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZGVidWdmc19yZW1vdmUoZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpOworCQljbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2xhdGVfaW5pdGNhbGwoZmFpbHNsYWJfZGVidWdmc19pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZjAxYjdlZS4uMGEyMDEwYSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTMwNzUsMyArMzA3NSwxOCBAQAogCX0KIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogfQorCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK3ZvaWQgbWlnaHRfZmF1bHQodm9pZCkKK3sKKwltaWdodF9zbGVlcCgpOworCS8qCisJICogaXQgd291bGQgYmUgbmljZXIgb25seSB0byBhbm5vdGF0ZSBwYXRocyB3aGljaCBhcmUgbm90IHVuZGVyCisJICogcGFnZWZhdWx0X2Rpc2FibGUsIGhvd2V2ZXIgdGhhdCByZXF1aXJlcyBhIGxhcmdlciBhdWRpdCBhbmQKKwkgKiBwcm92aWRpbmcgaGVscGVycyBsaWtlIGdldF91c2VyX2F0b21pYy4KKwkgKi8KKwlpZiAoIWluX2F0b21pYygpICYmIGN1cnJlbnQtPm1tKQorCQltaWdodF9sb2NrX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MKG1pZ2h0X2ZhdWx0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDA5MTg3NTEuLmY5N2U1NjQgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTIxMjMsNiArMjEyMyw4IEBACiAgKgogICogQG5hbWUgbXVzdCBiZSB2YWxpZCB1bnRpbCB0aGUgY2FjaGUgaXMgZGVzdHJveWVkLiBUaGlzIGltcGxpZXMgdGhhdAogICogdGhlIG1vZHVsZSBjYWxsaW5nIHRoaXMgaGFzIHRvIGRlc3Ryb3kgdGhlIGNhY2hlIGJlZm9yZSBnZXR0aW5nIHVubG9hZGVkLgorICogTm90ZSB0aGF0IGttZW1fY2FjaGVfbmFtZSgpIGlzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSBwb2ludGVyLAorICogdGhlcmVmb3JlIGFwcGxpY2F0aW9ucyBtdXN0IG1hbmFnZSBpdCB0aGVtc2VsdmVzLgogICoKICAqIFRoZSBmbGFncyBhcmUKICAqCkBAIC0yNjA5LDcgKzI2MTEsNyBAQAogCWlmIChPRkZfU0xBQihjYWNoZXApKSB7CiAJCS8qIFNsYWIgbWFuYWdlbWVudCBvYmogaXMgb2ZmLXNsYWIuICovCiAJCXNsYWJwID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlcC0+c2xhYnBfY2FjaGUsCi0JCQkJCSAgICAgIGxvY2FsX2ZsYWdzICYgfkdGUF9USElTTk9ERSwgbm9kZWlkKTsKKwkJCQkJICAgICAgbG9jYWxfZmxhZ3MsIG5vZGVpZCk7CiAJCWlmICghc2xhYnApCiAJCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgewpAQCAtMjk5Nyw3ICsyOTk5LDcgQEAKIAkJICogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgb2JqZWN0IGF2YWlsYWJsZSBmb3IKIAkJICogYWxsb2NhdGlvbi4KIAkJICovCi0JCUJVR19PTihzbGFicC0+aW51c2UgPCAwIHx8IHNsYWJwLT5pbnVzZSA+PSBjYWNoZXAtPm51bSk7CisJCUJVR19PTihzbGFicC0+aW51c2UgPj0gY2FjaGVwLT5udW0pOwogCiAJCXdoaWxlIChzbGFicC0+aW51c2UgPCBjYWNoZXAtPm51bSAmJiBiYXRjaGNvdW50LS0pIHsKIAkJCVNUQVRTX0lOQ19BTExPQ0VEKGNhY2hlcCk7CkBAIC0zMTA2LDc5ICszMTA4LDE0IEBACiAjZGVmaW5lIGNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYWZ0ZXIoYSxiLG9ianAsZCkgKG9ianApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQUlMU0xBQgotCi1zdGF0aWMgc3RydWN0IGZhaWxzbGFiX2F0dHIgewotCi0Jc3RydWN0IGZhdWx0X2F0dHIgYXR0cjsKLQotCXUzMiBpZ25vcmVfZ2ZwX3dhaXQ7Ci0jaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUwotCXN0cnVjdCBkZW50cnkgKmlnbm9yZV9nZnBfd2FpdF9maWxlOwotI2VuZGlmCi0KLX0gZmFpbHNsYWIgPSB7Ci0JLmF0dHIgPSBGQVVMVF9BVFRSX0lOSVRJQUxJWkVSLAotCS5pZ25vcmVfZ2ZwX3dhaXQgPSAxLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZmFpbHNsYWIoY2hhciAqc3RyKQotewotCXJldHVybiBzZXR1cF9mYXVsdF9hdHRyKCZmYWlsc2xhYi5hdHRyLCBzdHIpOwotfQotX19zZXR1cCgiZmFpbHNsYWI9Iiwgc2V0dXBfZmFpbHNsYWIpOwotCi1zdGF0aWMgaW50IHNob3VsZF9mYWlsc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKK3N0YXRpYyBib29sIHNsYWJfc2hvdWxkX2ZhaWxzbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQogewogCWlmIChjYWNoZXAgPT0gJmNhY2hlX2NhY2hlKQotCQlyZXR1cm4gMDsKLQlpZiAoZmxhZ3MgJiBfX0dGUF9OT0ZBSUwpCi0JCXJldHVybiAwOwotCWlmIChmYWlsc2xhYi5pZ25vcmVfZ2ZwX3dhaXQgJiYgKGZsYWdzICYgX19HRlBfV0FJVCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gc2hvdWxkX2ZhaWwoJmZhaWxzbGFiLmF0dHIsIG9ial9zaXplKGNhY2hlcCkpOworCXJldHVybiBzaG91bGRfZmFpbHNsYWIob2JqX3NpemUoY2FjaGVwKSwgZmxhZ3MpOwogfQogCi0jaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUwotCi1zdGF0aWMgaW50IF9faW5pdCBmYWlsc2xhYl9kZWJ1Z2ZzKHZvaWQpCi17Ci0JbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7Ci0Jc3RydWN0IGRlbnRyeSAqZGlyOwotCWludCBlcnI7Ci0KLQllcnIgPSBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIsICJmYWlsc2xhYiIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZGlyID0gZmFpbHNsYWIuYXR0ci5kZW50cmllcy5kaXI7Ci0KLQlmYWlsc2xhYi5pZ25vcmVfZ2ZwX3dhaXRfZmlsZSA9Ci0JCWRlYnVnZnNfY3JlYXRlX2Jvb2woImlnbm9yZS1nZnAtd2FpdCIsIG1vZGUsIGRpciwKLQkJCQkgICAgICAmZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0KTsKLQotCWlmICghZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZGVidWdmc19yZW1vdmUoZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpOwotCQljbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLWxhdGVfaW5pdGNhbGwoZmFpbHNsYWJfZGVidWdmcyk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTICovCi0KLSNlbHNlIC8qIENPTkZJR19GQUlMU0xBQiAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzaG91bGRfZmFpbHNsYWIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfRkFJTFNMQUIgKi8KLQogc3RhdGljIGlubGluZSB2b2lkICpfX19fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqb2JqcDsKQEAgLTMzODEsNyArMzMxOCw3IEBACiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKnB0cjsKIAotCWlmIChzaG91bGRfZmFpbHNsYWIoY2FjaGVwLCBmbGFncykpCisJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYmVmb3JlKGNhY2hlcCwgZmxhZ3MpOwpAQCAtMzQ1Nyw3ICszMzk0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNhdmVfZmxhZ3M7CiAJdm9pZCAqb2JqcDsKIAotCWlmIChzaG91bGRfZmFpbHNsYWIoY2FjaGVwLCBmbGFncykpCisJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIAogCWNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYmVmb3JlKGNhY2hlcCwgZmxhZ3MpOwpAQCAtMzY4Niw5ICszNjIzLDkgQEAKIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vZGUpOwogCiB2b2lkICpfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLAotCQlpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQorCQlpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7Ci0JcmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlLCBjYWxsZXIpOworCXJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSwgKHZvaWQgKiljYWxsZXIpOwogfQogRVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIpOwogI2Vsc2UKQEAgLTM3MzAsOSArMzY2Nyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvYyk7CiAKLXZvaWQgKl9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB2b2lkICpjYWxsZXIpCit2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7Ci0JcmV0dXJuIF9fZG9fa21hbGxvYyhzaXplLCBmbGFncywgY2FsbGVyKTsKKwlyZXR1cm4gX19kb19rbWFsbG9jKHNpemUsIGZsYWdzLCAodm9pZCAqKWNhbGxlcik7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvY190cmFja19jYWxsZXIpOwogCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYTJjZDQ3ZC4uNmNiN2FkMSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAKIC8qCiAgKiBMb2NrIG9yZGVyOgpAQCAtMTUzLDYgKzE1NCwxMCBAQAogI2RlZmluZSBBUkNIX1NMQUJfTUlOQUxJR04gX19hbGlnbm9mX18odW5zaWduZWQgbG9uZyBsb25nKQogI2VuZGlmCiAKKyNkZWZpbmUgT09fU0hJRlQJMTYKKyNkZWZpbmUgT09fTUFTSwkJKCgxIDw8IE9PX1NISUZUKSAtIDEpCisjZGVmaW5lIE1BWF9PQkpTX1BFUl9QQUdFCTY1NTM1IC8qIHNpbmNlIHBhZ2Uub2JqZWN0cyBpcyB1MTYgKi8KKwogLyogSW50ZXJuYWwgU0xVQiBmbGFncyAqLwogI2RlZmluZSBfX09CSkVDVF9QT0lTT04JCTB4ODAwMDAwMDAgLyogUG9pc29uIG9iamVjdCAqLwogI2RlZmluZSBfX1NZU0ZTX0FERF9ERUZFUlJFRAkweDQwMDAwMDAwIC8qIE5vdCB5ZXQgdmlzaWJsZSB2aWEgc3lzZnMgKi8KQEAgLTE3OCw3ICsxODMsNyBAQAogICogVHJhY2tpbmcgdXNlciBvZiBhIHNsYWIuCiAgKi8KIHN0cnVjdCB0cmFjayB7Ci0Jdm9pZCAqYWRkcjsJCS8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGFkZHI7CS8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi8KIAlpbnQgY3B1OwkJLyogV2FzIHJ1bm5pbmcgb24gY3B1ICovCiAJaW50IHBpZDsJCS8qIFBpZCBjb250ZXh0ICovCiAJdW5zaWduZWQgbG9uZyB3aGVuOwkvKiBXaGVuIGRpZCB0aGUgb3BlcmF0aW9uIG9jY3VyICovCkBAIC0yOTAsNyArMjk1LDcgQEAKIAkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9vcmRlcl9vYmplY3RzIHggPSB7Ci0JCShvcmRlciA8PCAxNikgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAvIHNpemUKKwkJKG9yZGVyIDw8IE9PX1NISUZUKSArIChQQUdFX1NJWkUgPDwgb3JkZXIpIC8gc2l6ZQogCX07CiAKIAlyZXR1cm4geDsKQEAgLTI5OCwxMiArMzAzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IG9vX29yZGVyKHN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgeCkKIHsKLQlyZXR1cm4geC54ID4+IDE2OworCXJldHVybiB4LnggPj4gT09fU0hJRlQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9vX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGVfb3JkZXJfb2JqZWN0cyB4KQogewotCXJldHVybiB4LnggJiAoKDEgPDwgMTYpIC0gMSk7CisJcmV0dXJuIHgueCAmIE9PX01BU0s7CiB9CiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMzY3LDcgKzM3Miw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LAotCQkJCWVudW0gdHJhY2tfaXRlbSBhbGxvYywgdm9pZCAqYWRkcikKKwkJCWVudW0gdHJhY2tfaXRlbSBhbGxvYywgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCB0cmFjayAqcDsKIApAQCAtMzkxLDggKzM5Niw4IEBACiAJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpKQogCQlyZXR1cm47CiAKLQlzZXRfdHJhY2socywgb2JqZWN0LCBUUkFDS19GUkVFLCBOVUxMKTsKLQlzZXRfdHJhY2socywgb2JqZWN0LCBUUkFDS19BTExPQywgTlVMTCk7CisJc2V0X3RyYWNrKHMsIG9iamVjdCwgVFJBQ0tfRlJFRSwgMFVMKTsKKwlzZXRfdHJhY2socywgb2JqZWN0LCBUUkFDS19BTExPQywgMFVMKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0KQpAQCAtNDAxLDcgKzQwNiw3IEBACiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0VSUiAiSU5GTzogJXMgaW4gJXBTIGFnZT0lbHUgY3B1PSV1IHBpZD0lZFxuIiwKLQkJcywgdC0+YWRkciwgamlmZmllcyAtIHQtPndoZW4sIHQtPmNwdSwgdC0+cGlkKTsKKwkJcywgKHZvaWQgKil0LT5hZGRyLCBqaWZmaWVzIC0gdC0+d2hlbiwgdC0+Y3B1LCB0LT5waWQpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF90cmFja2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KQpAQCAtNjkyLDcgKzY5Nyw3IEBACiAJaWYgKCFjaGVja192YWxpZF9wb2ludGVyKHMsIHBhZ2UsIGdldF9mcmVlcG9pbnRlcihzLCBwKSkpIHsKIAkJb2JqZWN0X2VycihzLCBwYWdlLCBwLCAiRnJlZXBvaW50ZXIgY29ycnVwdCIpOwogCQkvKgotCQkgKiBObyBjaG9pY2UgYnV0IHRvIHphcCBpdCBhbmQgdGh1cyBsb29zZSB0aGUgcmVtYWluZGVyCisJCSAqIE5vIGNob2ljZSBidXQgdG8gemFwIGl0IGFuZCB0aHVzIGxvc2UgdGhlIHJlbWFpbmRlcgogCQkgKiBvZiB0aGUgZnJlZSBvYmplY3RzIGluIHRoaXMgc2xhYi4gTWF5IGNhdXNlCiAJCSAqIGFub3RoZXIgZXJyb3IgYmVjYXVzZSB0aGUgb2JqZWN0IGNvdW50IGlzIG5vdyB3cm9uZy4KIAkJICovCkBAIC03NjQsOCArNzY5LDggQEAKIAl9CiAKIAltYXhfb2JqZWN0cyA9IChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpIC8gcy0+c2l6ZTsKLQlpZiAobWF4X29iamVjdHMgPiA2NTUzNSkKLQkJbWF4X29iamVjdHMgPSA2NTUzNTsKKwlpZiAobWF4X29iamVjdHMgPiBNQVhfT0JKU19QRVJfUEFHRSkKKwkJbWF4X29iamVjdHMgPSBNQVhfT0JKU19QRVJfUEFHRTsKIAogCWlmIChwYWdlLT5vYmplY3RzICE9IG1heF9vYmplY3RzKSB7CiAJCXNsYWJfZXJyKHMsIHBhZ2UsICJXcm9uZyBudW1iZXIgb2Ygb2JqZWN0cy4gRm91bmQgJWQgYnV0ICIKQEAgLTg2Niw3ICs4NzEsNyBAQAogfQogCiBzdGF0aWMgaW50IGFsbG9jX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkJdm9pZCAqb2JqZWN0LCB2b2lkICphZGRyKQorCQkJCQl2b2lkICpvYmplY3QsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoIWNoZWNrX3NsYWIocywgcGFnZSkpCiAJCWdvdG8gYmFkOwpAQCAtOTA2LDcgKzkxMSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZnJlZV9kZWJ1Z19wcm9jZXNzaW5nKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJCXZvaWQgKm9iamVjdCwgdm9pZCAqYWRkcikKKwkJCQkJdm9pZCAqb2JqZWN0LCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKCFjaGVja19zbGFiKHMsIHBhZ2UpKQogCQlnb3RvIGZhaWw7CkBAIC0xMDI5LDEwICsxMDM0LDEwIEBACiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KSB7fQogCiBzdGF0aWMgaW5saW5lIGludCBhbGxvY19kZWJ1Z19wcm9jZXNzaW5nKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsIHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH0KKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LCB1bnNpZ25lZCBsb25nIGFkZHIpIHsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBpbnQgZnJlZV9kZWJ1Z19wcm9jZXNzaW5nKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsIHZvaWQgKmFkZHIpIHsgcmV0dXJuIDA7IH0KKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LCB1bnNpZ25lZCBsb25nIGFkZHIpIHsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBpbnQgc2xhYl9wYWRfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQogCQkJeyByZXR1cm4gMTsgfQpAQCAtMTQ5OSw4ICsxNTA0LDggQEAKICAqIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc2xhYi4gVGhpcyBpcyB0aGUgc2xvd2VzdCBwYXRoIHNpbmNlIGl0IGludm9sdmVzCiAgKiBhIGNhbGwgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCB0aGUgc2V0dXAgb2YgYSBuZXcgc2xhYi4KICAqLwotc3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCB2b2lkICphZGRyLCBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCitzdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjKQogewogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IHBhZ2UgKm5ldzsKQEAgLTE1ODQsMTMgKzE1ODksMTggQEAKICAqIE90aGVyd2lzZSB3ZSBjYW4gc2ltcGx5IHBpY2sgdGhlIG5leHQgb2JqZWN0IGZyb20gdGhlIGxvY2tsZXNzIGZyZWUgbGlzdC4KICAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpzbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCQlnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsIHZvaWQgKmFkZHIpCisJCWdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG9ianNpemU7CiAKKwltaWdodF9zbGVlcF9pZihnZnBmbGFncyAmIF9fR0ZQX1dBSVQpOworCisJaWYgKHNob3VsZF9mYWlsc2xhYihzLT5vYmpzaXplLCBnZnBmbGFncykpCisJCXJldHVybiBOVUxMOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWMgPSBnZXRfY3B1X3NsYWIocywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlvYmpzaXplID0gYy0+b2Jqc2l6ZTsKQEAgLTE2MTMsMTQgKzE2MjMsMTQgQEAKIAogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7Ci0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgX1JFVF9JUF8pOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSkKIHsKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgX1JFVF9JUF8pOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vZGUpOwogI2VuZGlmCkBAIC0xNjM0LDcgKzE2NDQsNyBAQAogICogaGFuZGxpbmcgcmVxdWlyZWQgdGhlbiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgogICovCiBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJdm9pZCAqeCwgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCkKKwkJCXZvaWQgKngsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAl2b2lkICpwcmlvcjsKIAl2b2lkICoqb2JqZWN0ID0gKHZvaWQgKil4OwpAQCAtMTcwNCw3ICsxNzE0LDcgQEAKICAqIHdpdGggYWxsIHNvcnRzIG9mIHNwZWNpYWwgcHJvY2Vzc2luZy4KICAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICp4LCB2b2lkICphZGRyKQorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKngsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAl2b2lkICoqb2JqZWN0ID0gKHZvaWQgKil4OwogCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKQEAgLTE3MzEsMTEgKzE3NDEsMTEgQEAKIAogCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZSh4KTsKIAotCXNsYWJfZnJlZShzLCBwYWdlLCB4LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXNsYWJfZnJlZShzLCBwYWdlLCB4LCBfUkVUX0lQXyk7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7CiAKLS8qIEZpZ3VyZSBvdXQgb24gd2hpY2ggc2xhYiBvYmplY3QgdGhlIG9iamVjdCByZXNpZGVzICovCisvKiBGaWd1cmUgb3V0IG9uIHdoaWNoIHNsYWIgcGFnZSB0aGUgb2JqZWN0IHJlc2lkZXMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X29iamVjdF9wYWdlKGNvbnN0IHZvaWQgKngpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZSh4KTsKQEAgLTE4MDcsOCArMTgxNyw4IEBACiAJaW50IHJlbTsKIAlpbnQgbWluX29yZGVyID0gc2x1Yl9taW5fb3JkZXI7CiAKLQlpZiAoKFBBR0VfU0laRSA8PCBtaW5fb3JkZXIpIC8gc2l6ZSA+IDY1NTM1KQotCQlyZXR1cm4gZ2V0X29yZGVyKHNpemUgKiA2NTUzNSkgLSAxOworCWlmICgoUEFHRV9TSVpFIDw8IG1pbl9vcmRlcikgLyBzaXplID4gTUFYX09CSlNfUEVSX1BBR0UpCisJCXJldHVybiBnZXRfb3JkZXIoc2l6ZSAqIE1BWF9PQkpTX1BFUl9QQUdFKSAtIDE7CiAKIAlmb3IgKG9yZGVyID0gbWF4KG1pbl9vcmRlciwKIAkJCQlmbHMobWluX29iamVjdHMgKiBzaXplIC0gMSkgLSBQQUdFX1NISUZUKTsKQEAgLTIwNzMsOCArMjA4Myw3IEBACiAgKiB3aGVuIGFsbG9jYXRpbmcgZm9yIHRoZSBrbWFsbG9jX25vZGVfY2FjaGUuIFRoaXMgaXMgdXNlZCBmb3IgYm9vdHN0cmFwcGluZwogICogbWVtb3J5IG9uIGEgZnJlc2ggbm9kZSB0aGF0IGhhcyBubyBzbGFiIHN0cnVjdHVyZXMgeWV0LgogICovCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKGdmcF90IGdmcGZsYWdzLAotCQkJCQkJCSAgIGludCBub2RlKQorc3RhdGljIHZvaWQgZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuOwpAQCAtMjExMiw3ICsyMTIxLDYgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYWRkX3BhcnRpYWwobiwgcGFnZSwgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBuOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2ttZW1fY2FjaGVfbm9kZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCkBAIC0yMTQ0LDggKzIxNTIsNyBAQAogCQkJbiA9ICZzLT5sb2NhbF9ub2RlOwogCQllbHNlIHsKIAkJCWlmIChzbGFiX3N0YXRlID09IERPV04pIHsKLQkJCQluID0gZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKGdmcGZsYWdzLAotCQkJCQkJCQlub2RlKTsKKwkJCQllYXJseV9rbWVtX2NhY2hlX25vZGVfYWxsb2MoZ2ZwZmxhZ3MsIG5vZGUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJbiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWFsbG9jX2NhY2hlcywKQEAgLTI2NTksNyArMjY2Niw3IEBACiAJaWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIocykpKQogCQlyZXR1cm4gczsKIAotCXJldHVybiBzbGFiX2FsbG9jKHMsIGZsYWdzLCAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jKTsKIApAQCAtMjY4Nyw3ICsyNjk0LDcgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0dXJuIHNsYWJfYWxsb2MocywgZmxhZ3MsIG5vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZmxhZ3MsIG5vZGUsIF9SRVRfSVBfKTsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vZGUpOwogI2VuZGlmCkBAIC0yNzQ0LDcgKzI3NTEsNyBAQAogCQlwdXRfcGFnZShwYWdlKTsKIAkJcmV0dXJuOwogCX0KLQlzbGFiX2ZyZWUocGFnZS0+c2xhYiwgcGFnZSwgb2JqZWN0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXNsYWJfZnJlZShwYWdlLT5zbGFiLCBwYWdlLCBvYmplY3QsIF9SRVRfSVBfKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCkBAIC0zMTIzLDggKzMxMzAsMTIgQEAKIAkJcy0+aW51c2UgPSBtYXhfdChpbnQsIHMtPmludXNlLCBBTElHTihzaXplLCBzaXplb2Yodm9pZCAqKSkpOwogCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAotCQlpZiAoc3lzZnNfc2xhYl9hbGlhcyhzLCBuYW1lKSkKKwkJaWYgKHN5c2ZzX3NsYWJfYWxpYXMocywgbmFtZSkpIHsKKwkJCWRvd25fd3JpdGUoJnNsdWJfbG9jayk7CisJCQlzLT5yZWZjb3VudC0tOworCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCQlnb3RvIGVycjsKKwkJfQogCQlyZXR1cm4gczsKIAl9CiAKQEAgLTMxMzQsOCArMzE0NSwxMyBAQAogCQkJCXNpemUsIGFsaWduLCBmbGFncywgY3RvcikpIHsKIAkJCWxpc3RfYWRkKCZzLT5saXN0LCAmc2xhYl9jYWNoZXMpOwogCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7Ci0JCQlpZiAoc3lzZnNfc2xhYl9hZGQocykpCisJCQlpZiAoc3lzZnNfc2xhYl9hZGQocykpIHsKKwkJCQlkb3duX3dyaXRlKCZzbHViX2xvY2spOworCQkJCWxpc3RfZGVsKCZzLT5saXN0KTsKKwkJCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKKwkJCQlrZnJlZShzKTsKIAkJCQlnb3RvIGVycjsKKwkJCX0KIAkJCXJldHVybiBzOwogCQl9CiAJCWtmcmVlKHMpOwpAQCAtMzIwMiw3ICszMjE4LDcgQEAKIAogI2VuZGlmCiAKLXZvaWQgKl9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzLCB2b2lkICpjYWxsZXIpCit2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAKQEAgLTMyMTgsNyArMzIzNCw3IEBACiB9CiAKIHZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsCi0JCQkJCWludCBub2RlLCB2b2lkICpjYWxsZXIpCisJCQkJCWludCBub2RlLCB1bnNpZ25lZCBsb25nIGNhbGxlcikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIApAQCAtMzQyOSw3ICszNDQ1LDcgQEAKIAogc3RydWN0IGxvY2F0aW9uIHsKIAl1bnNpZ25lZCBsb25nIGNvdW50OwotCXZvaWQgKmFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCWxvbmcgbG9uZyBzdW1fdGltZTsKIAlsb25nIG1pbl90aW1lOwogCWxvbmcgbWF4X3RpbWU7CkBAIC0zNDc3LDcgKzM0OTMsNyBAQAogewogCWxvbmcgc3RhcnQsIGVuZCwgcG9zOwogCXN0cnVjdCBsb2NhdGlvbiAqbDsKLQl2b2lkICpjYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNhZGRyOwogCXVuc2lnbmVkIGxvbmcgYWdlID0gamlmZmllcyAtIHRyYWNrLT53aGVuOwogCiAJc3RhcnQgPSAtMTsKQEAgLTQzNDUsNyArNDM2MSw3IEBACiAKIC8qCiAgKiBOZWVkIHRvIGJ1ZmZlciBhbGlhc2VzIGR1cmluZyBib290dXAgdW50aWwgc3lzZnMgYmVjb21lcwotICogYXZhaWxhYmxlIGxlc3Qgd2UgbG9vc2UgdGhhdCBpbmZvcm1hdGlvbi4KKyAqIGF2YWlsYWJsZSBsZXN0IHdlIGxvc2UgdGhhdCBpbmZvcm1hdGlvbi4KICAqLwogc3RydWN0IHNhdmVkX2FsaWFzIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNDQ2NDI0MC4uMDljNjZhNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTUwNjYsMTMgKzUwNjYsMTQgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBkZWZhdWx0X2RldmljZV9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAqbmV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCS8qCiAJICogUHVzaCBhbGwgbWlncmF0YWJsZSBvZiB0aGUgbmV0d29yayBkZXZpY2VzIGJhY2sgdG8gdGhlCiAJICogaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZQogCSAqLwogCXJ0bmxfbG9jaygpOwotCWZvcl9lYWNoX25ldGRldl9zYWZlKG5ldCwgZGV2LCBuZXh0KSB7CityZXN0YXJ0OgorCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewogCQlpbnQgZXJyOwogCQljaGFyIGZiX25hbWVbSUZOQU1TSVpdOwogCkBAIC01MDgzLDcgKzUwODQsNyBAQAogCQkvKiBEZWxldGUgdmlydHVhbCBkZXZpY2VzICovCiAJCWlmIChkZXYtPnJ0bmxfbGlua19vcHMgJiYgZGV2LT5ydG5sX2xpbmtfb3BzLT5kZWxsaW5rKSB7CiAJCQlkZXYtPnJ0bmxfbGlua19vcHMtPmRlbGxpbmsoZGV2KTsKLQkJCWNvbnRpbnVlOworCQkJZ290byByZXN0YXJ0OwogCQl9CiAKIAkJLyogUHVzaCByZW1haW5nIG5ldHdvcmsgZGV2aWNlcyB0byBpbml0X25ldCAqLwpAQCAtNTA5NCw2ICs1MDk1LDcgQEAKIAkJCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBlcnIpOwogCQkJQlVHKCk7CiAJCX0KKwkJZ290byByZXN0YXJ0OwogCX0KIAlydG5sX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCA5YzM3MTdhLi5mNjZjNThkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjQxNCw3ICsyNDE0LDcgQEAKIAlpZiAoKnBvcyA9PSAwKQogCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwogCi0JZm9yIChjcHUgPSAqcG9zLTE7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KSB7CisJZm9yIChjcHUgPSAqcG9zLTE7IGNwdSA8IG5yX2NwdV9pZHM7ICsrY3B1KSB7CiAJCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpCiAJCQljb250aW51ZTsKIAkJKnBvcyA9IGNwdSsxOwpAQCAtMjQyOSw3ICsyNDI5LDcgQEAKIAlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHBkZS0+ZGF0YTsKIAlpbnQgY3B1OwogCi0JZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCWZvciAoY3B1ID0gKnBvczsgY3B1IDwgbnJfY3B1X2lkczsgKytjcHUpIHsKIAkJaWYgKCFjcHVfcG9zc2libGUoY3B1KSkKIAkJCWNvbnRpbnVlOwogCQkqcG9zID0gY3B1KzE7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCBkNWMyYmFjLi4xNzQ3Y2NhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTk2NCw3ICs5NjQsNiBAQAogCXN0YXRlID0gc2stPnNrX3N0YXRlOwogCXNvY2tfaG9sZChzayk7CiAJc29ja19vcnBoYW4oc2spOwotCXBlcmNwdV9jb3VudGVyX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKIAogCS8qCiAJICogSXQgaXMgdGhlIGxhc3QgcmVsZWFzZV9zb2NrIGluIGl0cyBsaWZlLiBJdCB3aWxsIHJlbW92ZSBiYWNrbG9nLgpAQCAtOTc4LDYgKzk3Nyw4IEBACiAJYmhfbG9ja19zb2NrKHNrKTsKIAlXQVJOX09OKHNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCisJcGVyY3B1X2NvdW50ZXJfaW5jKHNrLT5za19wcm90LT5vcnBoYW5fY291bnQpOworCiAJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGEgc29mdGlycSBvciBiYWNrbG9nPyAqLwogCWlmIChzdGF0ZSAhPSBEQ0NQX0NMT1NFRCAmJiBzay0+c2tfc3RhdGUgPT0gRENDUF9DTE9TRUQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggYzdjZGExYy4uZjI2YWIzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC02MzMsOCArNjMzLDYgQEAKIAogCQlhY2NfcmVxID0gcmVxLT5kbF9uZXh0OwogCi0JCXBlcmNwdV9jb3VudGVyX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKLQogCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCWJoX2xvY2tfc29jayhjaGlsZCk7CiAJCVdBUk5fT04oc29ja19vd25lZF9ieV91c2VyKGNoaWxkKSk7CkBAIC02NDQsNiArNjQyLDggQEAKIAogCQlzb2NrX29ycGhhbihjaGlsZCk7CiAKKwkJcGVyY3B1X2NvdW50ZXJfaW5jKHNrLT5za19wcm90LT5vcnBoYW5fY291bnQpOworCiAJCWluZXRfY3NrX2Rlc3Ryb3lfc29jayhjaGlsZCk7CiAKIAkJYmhfdW5sb2NrX3NvY2soY2hpbGQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwppbmRleCAzMTNlYmYwLi42YmE1YzU1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJaWYgKCpwb3MgPT0gMCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAotCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBucl9jcHVfaWRzOyArK2NwdSkgewogCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQogCQkJY29udGludWU7CiAJCSpwb3MgPSBjcHUrMTsKQEAgLTMwNiw3ICszMDYsNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCWludCBjcHU7CiAKLQlmb3IgKGNwdSA9ICpwb3M7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KSB7CisJZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBucl9jcHVfaWRzOyArK2NwdSkgewogCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQogCQkJY29udGludWU7CiAJCSpwb3MgPSBjcHUrMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCA2MTQ5NThiLi5lYjYyZTU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KICNpbmNsdWRlIDxuZXQvdWRwbGl0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JvdHRvbV9oYWxmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtNTAsMTMgKzUxLDE3IEBACiBzdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcS0+cHJpdmF0ZTsKKwlpbnQgb3JwaGFucywgc29ja2V0czsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KSwKKwlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAorCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJc29ja2V0X3NlcV9zaG93KHNlcSk7CiAJc2VxX3ByaW50ZihzZXEsICJUQ1A6IGludXNlICVkIG9ycGhhbiAlZCB0dyAlZCBhbGxvYyAlZCBtZW0gJWRcbiIsCi0JCSAgIHNvY2tfcHJvdF9pbnVzZV9nZXQobmV0LCAmdGNwX3Byb3QpLAotCQkgICAoaW50KXBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX29ycGhhbl9jb3VudCksCi0JCSAgIHRjcF9kZWF0aF9yb3cudHdfY291bnQsCi0JCSAgIChpbnQpcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAorCQkgICBzb2NrX3Byb3RfaW51c2VfZ2V0KG5ldCwgJnRjcF9wcm90KSwgb3JwaGFucywKKwkJICAgdGNwX2RlYXRoX3Jvdy50d19jb3VudCwgc29ja2V0cywKIAkJICAgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSk7CiAJc2VxX3ByaW50ZihzZXEsICJVRFA6IGludXNlICVkIG1lbSAlZFxuIiwKIAkJICAgc29ja19wcm90X2ludXNlX2dldChuZXQsICZ1ZHBfcHJvdCksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA3N2JmYmE5Li45N2Y3MTE1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCWlmICgqcG9zID09IDApCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAKLQlmb3IgKGNwdSA9ICpwb3MtMTsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpIHsKKwlmb3IgKGNwdSA9ICpwb3MtMTsgY3B1IDwgbnJfY3B1X2lkczsgKytjcHUpIHsKIAkJaWYgKCFjcHVfcG9zc2libGUoY3B1KSkKIAkJCWNvbnRpbnVlOwogCQkqcG9zID0gY3B1KzE7CkBAIC00NDIsNyArNDQyLDcgQEAKIHsKIAlpbnQgY3B1OwogCi0JZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCWZvciAoY3B1ID0gKnBvczsgY3B1IDwgbnJfY3B1X2lkczsgKytjcHUpIHsKIAkJaWYgKCFjcHVfcG9zc2libGUoY3B1KSkKIAkJCWNvbnRpbnVlOwogCQkqcG9zID0gY3B1KzE7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFmM2Q1MjkuLmYyOGFjZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xODM2LDcgKzE4MzYsNiBAQAogCXN0YXRlID0gc2stPnNrX3N0YXRlOwogCXNvY2tfaG9sZChzayk7CiAJc29ja19vcnBoYW4oc2spOwotCXBlcmNwdV9jb3VudGVyX2luYyhzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KTsKIAogCS8qIEl0IGlzIHRoZSBsYXN0IHJlbGVhc2Vfc29jayBpbiBpdHMgbGlmZS4gSXQgd2lsbCByZW1vdmUgYmFja2xvZy4gKi8KIAlyZWxlYXNlX3NvY2soc2spOwpAQCAtMTg0OSw2ICsxODQ4LDggQEAKIAliaF9sb2NrX3NvY2soc2spOwogCVdBUk5fT04oc29ja19vd25lZF9ieV91c2VyKHNrKSk7CiAKKwlwZXJjcHVfY291bnRlcl9pbmMoc2stPnNrX3Byb3QtPm9ycGhhbl9jb3VudCk7CisKIAkvKiBIYXZlIHdlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgYnkgYSBzb2Z0aXJxIG9yIGJhY2tsb2c/ICovCiAJaWYgKHN0YXRlICE9IFRDUF9DTE9TRSAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDEwMTcyNDguLjlkODM5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNTEsNiArNTEsNyBAQAogICovCiAKIAorI2luY2x1ZGUgPGxpbnV4L2JvdHRvbV9oYWxmLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTc5Nyw3ICsxNzk4LDkgQEAKIAlzay0+c2tfc25kYnVmID0gc3lzY3RsX3RjcF93bWVtWzFdOwogCXNrLT5za19yY3ZidWYgPSBzeXNjdGxfdGNwX3JtZW1bMV07CiAKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJcGVyY3B1X2NvdW50ZXJfaW5jKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpOworCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA4NzAyYjA2Li5lOGI4MzM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYm90dG9tX2hhbGYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xODMwLDcgKzE4MzEsOSBAQAogCXNrLT5za19zbmRidWYgPSBzeXNjdGxfdGNwX3dtZW1bMV07CiAJc2stPnNrX3JjdmJ1ZiA9IHN5c2N0bF90Y3Bfcm1lbVsxXTsKIAorCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlwZXJjcHVfY291bnRlcl9pbmMoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CisJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCmluZGV4IDkzOTRmNTMuLjNlYjVlMjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJLyogTm8gY2FjaGUgZW50cnkgb3IgaXQgaXMgaW52YWxpZCwgdGltZSB0byBzY2hlZHVsZSAqLwogCWRlc3QgPSBfX2lwX3ZzX2xibGNfc2NoZWR1bGUoc3ZjKTsKIAlpZiAoIWRlc3QpIHsKLQkJSVBfVlNfREJHKDEsICJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcbiIpOworCQlJUF9WU19FUlJfUkwoIkxCTEM6IG5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYwppbmRleCA5MmRjNzZhLi5jMDRjZTU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYwpAQCAtNjkwLDcgKzY5MCw3IEBACiAJCS8qIFRoZSBjYWNoZSBlbnRyeSBpcyBpbnZhbGlkLCB0aW1lIHRvIHNjaGVkdWxlICovCiAJCWRlc3QgPSBfX2lwX3ZzX2xibGNyX3NjaGVkdWxlKHN2Yyk7CiAJCWlmICghZGVzdCkgewotCQkJSVBfVlNfREJHKDEsICJubyBkZXN0aW5hdGlvbiBhdmFpbGFibGVcbiIpOworCQkJSVBfVlNfRVJSX1JMKCJMQkxDUjogbm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXG4iKTsKIAkJCXJlYWRfdW5sb2NrKCZzdmMtPnNjaGVkX2xvY2spOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKaW5kZXggNTE5MTJjYS4uZDBkYWRjOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKQEAgLTY2LDExICs2NiwxNSBAQAogCQl9CiAJfQogCi0JaWYgKGxlYXN0KQotCUlQX1ZTX0RCR19CVUYoNiwgIkxDOiBzZXJ2ZXIgJXM6JXUgYWN0aXZlY29ubnMgJWQgaW5hY3Rjb25ucyAlZFxuIiwKLQkJICAgICAgSVBfVlNfREJHX0FERFIoc3ZjLT5hZiwgJmxlYXN0LT5hZGRyKSwgbnRvaHMobGVhc3QtPnBvcnQpLAotCQkgICAgICBhdG9taWNfcmVhZCgmbGVhc3QtPmFjdGl2ZWNvbm5zKSwKLQkJICAgICAgYXRvbWljX3JlYWQoJmxlYXN0LT5pbmFjdGNvbm5zKSk7CisJaWYgKCFsZWFzdCkKKwkJSVBfVlNfRVJSX1JMKCJMQzogbm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXG4iKTsKKwllbHNlCisJCUlQX1ZTX0RCR19CVUYoNiwgIkxDOiBzZXJ2ZXIgJXM6JXUgYWN0aXZlY29ubnMgJWQgIgorCQkJICAgICAgImluYWN0Y29ubnMgJWRcbiIsCisJCQkgICAgICBJUF9WU19EQkdfQUREUihzdmMtPmFmLCAmbGVhc3QtPmFkZHIpLAorCQkJICAgICAgbnRvaHMobGVhc3QtPnBvcnQpLAorCQkJICAgICAgYXRvbWljX3JlYWQoJmxlYXN0LT5hY3RpdmVjb25ucyksCisJCQkgICAgICBhdG9taWNfcmVhZCgmbGVhc3QtPmluYWN0Y29ubnMpKTsKIAogCXJldHVybiBsZWFzdDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggNjc1OGFkMi4uNjk0OTUyZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTk1LDggKzk1LDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoIWxlYXN0KQorCWlmICghbGVhc3QpIHsKKwkJSVBfVlNfRVJSX1JMKCJOUTogbm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CisJfQogCiAgIG91dDoKIAlJUF9WU19EQkdfQlVGKDYsICJOUTogc2VydmVyICVzOiV1ICIKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19yci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMKaW5kZXggOGZiNTFjMS4uMmQxNmFiNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAkJcSA9IHEtPm5leHQ7CiAJfSB3aGlsZSAocSAhPSBwKTsKIAl3cml0ZV91bmxvY2soJnN2Yy0+c2NoZWRfbG9jayk7CisJSVBfVlNfRVJSX1JMKCJSUjogbm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXG4iKTsKIAlyZXR1cm4gTlVMTDsKIAogICBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKaW5kZXggNjkxYTZhMC4uMjBlNDY1NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwpAQCAtODQsNiArODQsNyBAQAogCQkJZ290byBuZXh0c3RhZ2U7CiAJCX0KIAl9CisJSVBfVlNfRVJSX1JMKCJTRUQ6IG5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZVxuIik7CiAJcmV0dXJuIE5VTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwppbmRleCAwZTUzOTU1Li43NTcwOWViIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJICAgIHx8ICEoZGVzdC0+ZmxhZ3MgJiBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFKQogCSAgICB8fCBhdG9taWNfcmVhZCgmZGVzdC0+d2VpZ2h0KSA8PSAwCiAJICAgIHx8IGlzX292ZXJsb2FkZWQoZGVzdCkpIHsKKwkJSVBfVlNfRVJSX1JMKCJTSDogbm8gZGVzdGluYXRpb24gYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKaW5kZXggNTdiNDUyYi4uOGU5NDI1NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwpAQCAtNzIsNiArNzIsNyBAQAogCQkJZ290byBuZXh0c3RhZ2U7CiAJCX0KIAl9CisJSVBfVlNfRVJSX1JMKCJXTEM6IG5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZVxuIik7CiAJcmV0dXJuIE5VTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCmluZGV4IDJmNjE4ZGMuLmY3ZDc0ZWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKQEAgLTE1NSw2ICsxNTUsOCBAQAogCiAJCQlpZiAobWFyay0+Y2wgPT0gbWFyay0+Y2wtPm5leHQpIHsKIAkJCQkvKiBubyBkZXN0IGVudHJ5ICovCisJCQkJSVBfVlNfRVJSX1JMKCJXUlI6IG5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZTogIgorCQkJCQkgICAgICJubyBkZXN0aW5hdGlvbnMgcHJlc2VudFxuIik7CiAJCQkJZGVzdCA9IE5VTEw7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0xNjgsOCArMTcwLDggQEAKIAkJCQkgKi8KIAkJCQlpZiAobWFyay0+Y3cgPT0gMCkgewogCQkJCQltYXJrLT5jbCA9ICZzdmMtPmRlc3RpbmF0aW9uczsKLQkJCQkJSVBfVlNfRVJSX1JMKCJpcF92c193cnJfc2NoZWR1bGUoKTogIgotCQkJCQkJICAgIm5vIGF2YWlsYWJsZSBzZXJ2ZXJzXG4iKTsKKwkJCQkJSVBfVlNfRVJSX1JMKCJXUlI6IG5vIGRlc3RpbmF0aW9uICIKKwkJCQkJCSAgICAgImF2YWlsYWJsZVxuIik7CiAJCQkJCWRlc3QgPSBOVUxMOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CkBAIC0xOTEsNiArMTkzLDggQEAKIAkJCS8qIGJhY2sgdG8gdGhlIHN0YXJ0LCBhbmQgbm8gZGVzdCBpcyBmb3VuZC4KIAkJCSAgIEl0IGlzIG9ubHkgcG9zc2libGUgd2hlbiBhbGwgZGVzdHMgYXJlIE9WRVJMT0FERUQgKi8KIAkJCWRlc3QgPSBOVUxMOworCQkJSVBfVlNfRVJSX1JMKCJXUlI6IG5vIGRlc3RpbmF0aW9uIGF2YWlsYWJsZTogIgorCQkJCSAgICAgImFsbCBkZXN0aW5hdGlvbnMgYXJlIG92ZXJsb2FkZWRcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggZjM3YjliNy4uNGRhNTRiMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJaWYgKCpwb3MgPT0gMCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAotCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBucl9jcHVfaWRzOyArK2NwdSkgewogCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQogCQkJY29udGludWU7CiAJCSpwb3MgPSBjcHUgKyAxOwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJaW50IGNwdTsKIAotCWZvciAoY3B1ID0gKnBvczsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpIHsKKwlmb3IgKGNwdSA9ICpwb3M7IGNwdSA8IG5yX2NwdV9pZHM7ICsrY3B1KSB7CiAJCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpCiAJCQljb250aW51ZTsKIAkJKnBvcyA9IGNwdSArIDE7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvS2NvbmZpZyBiL25ldC9zY2hlZC9LY29uZmlnCmluZGV4IDRmN2VmMGQuLjkyOTIxOGE0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtMzM1LDkgKzMzNSw2IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmFzZWQgb24gdGhlIGNvbnRyb2wKIAkgIGNncm91cCBvZiB0aGVpciBwcm9jZXNzLgogCi0JICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Nncm91cC4KLQogY29uZmlnIE5FVF9FTUFUQ0gKIAlib29sICJFeHRlbmRlZCBNYXRjaGVzIgogCXNlbGVjdCBORVRfQ0xTCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jIGIvbmV0L3NjaGVkL2Nsc19jZ3JvdXAuYwppbmRleCAwZDY4YjE5Li45MWEzZGI0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Nncm91cC5jCisrKyBiL25ldC9zY2hlZC9jbHNfY2dyb3VwLmMKQEAgLTI0LDEwICsyNCwxNiBAQAogCXUzMiBjbGFzc2lkOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwX2Nsc19zdGF0ZSAqbmV0X2Nsc19zdGF0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwX2Nsc19zdGF0ZSAqY2dycF9jbHNfc3RhdGUoc3RydWN0IGNncm91cCAqY2dycCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBjZ3JvdXBfY2xzX3N0YXRlICopCi0JCWNncm91cF9zdWJzeXNfc3RhdGUoY2dycCwgbmV0X2Nsc19zdWJzeXNfaWQpOworCXJldHVybiBjb250YWluZXJfb2YoY2dyb3VwX3N1YnN5c19zdGF0ZShjZ3JwLCBuZXRfY2xzX3N1YnN5c19pZCksCisJCQkgICAgc3RydWN0IGNncm91cF9jbHNfc3RhdGUsIGNzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cF9jbHNfc3RhdGUgKnRhc2tfY2xzX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHAsIG5ldF9jbHNfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgY2dyb3VwX2Nsc19zdGF0ZSwgY3NzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjZ3JwX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCkBAIC0zOSwxOSArNDUsMTkgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoY2dycC0+cGFyZW50KQotCQljcy0+Y2xhc3NpZCA9IG5ldF9jbHNfc3RhdGUoY2dycC0+cGFyZW50KS0+Y2xhc3NpZDsKKwkJY3MtPmNsYXNzaWQgPSBjZ3JwX2Nsc19zdGF0ZShjZ3JwLT5wYXJlbnQpLT5jbGFzc2lkOwogCiAJcmV0dXJuICZjcy0+Y3NzOwogfQogCiBzdGF0aWMgdm9pZCBjZ3JwX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogewotCWtmcmVlKHNzKTsKKwlrZnJlZShjZ3JwX2Nsc19zdGF0ZShjZ3JwKSk7CiB9CiAKIHN0YXRpYyB1NjQgcmVhZF9jbGFzc2lkKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdCkKIHsKLQlyZXR1cm4gbmV0X2Nsc19zdGF0ZShjZ3JwKS0+Y2xhc3NpZDsKKwlyZXR1cm4gY2dycF9jbHNfc3RhdGUoY2dycCktPmNsYXNzaWQ7CiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfY2xhc3NpZChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsIHU2NCB2YWx1ZSkKQEAgLTU5LDcgKzY1LDcgQEAKIAlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dycCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbmV0X2Nsc19zdGF0ZShjZ3JwKS0+Y2xhc3NpZCA9ICh1MzIpIHZhbHVlOworCWNncnBfY2xzX3N0YXRlKGNncnApLT5jbGFzc2lkID0gKHUzMikgdmFsdWU7CiAKIAljZ3JvdXBfdW5sb2NrKCk7CiAKQEAgLTExNSw4ICsxMjEsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY3MgPSAoc3RydWN0IGNncm91cF9jbHNfc3RhdGUgKikgdGFza19zdWJzeXNfc3RhdGUoY3VycmVudCwKLQkJCQkJCQkgICBuZXRfY2xzX3N1YnN5c19pZCk7CisJY3MgPSB0YXNrX2Nsc19zdGF0ZShjdXJyZW50KTsKIAlpZiAoY3MtPmNsYXNzaWQgJiYgdGNmX2VtX3RyZWVfbWF0Y2goc2tiLCAmaGVhZC0+ZW1hdGNoZXMsIE5VTEwpKSB7CiAJCXJlcy0+Y2xhc3NpZCA9IGNzLT5jbGFzc2lkOwogCQlyZXMtPmNsYXNzID0gMDsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcHJvYy5jIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKaW5kZXggMjg0ZWFlZi4uYTJhZGI1MSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wcm9jLmMKKysrIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKQEAgLTQ0LDI3ICs0NCwxNCBAQAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZm9sZF9maWVsZCh2b2lkICptaWJbXSwgaW50IG9mZnQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzID0gMDsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLSAgICAgICAgICAgICAgICByZXMgKz0gKigoKHVuc2lnbmVkIGxvbmcgKilwZXJfY3B1X3B0cihtaWJbMF0sIGkpKSArIG9mZnQpOwotICAgICAgICAgICAgICAgIHJlcyArPSAqKCgodW5zaWduZWQgbG9uZyAqKXBlcl9jcHVfcHRyKG1pYlsxXSwgaSkpICsgb2ZmdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIGludCB4ZnJtX3N0YXRpc3RpY3Nfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxLT5wcml2YXRlOwogCWludCBpOwogCWZvciAoaT0wOyB4ZnJtX21pYl9saXN0W2ldLm5hbWU7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIlLTI0c1x0JWx1XG4iLCB4ZnJtX21pYl9saXN0W2ldLm5hbWUsCi0JCQkgICBmb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcywKLQkJCQkgICAgICB4ZnJtX21pYl9saXN0W2ldLmVudHJ5KSk7CisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzLAorCQkJCQkgICB4ZnJtX21pYl9saXN0W2ldLmVudHJ5KSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDdjNzJiYWEuLjY2ODg3NjUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtODM4LDExICs4MzgsMTEgQEAKIHsKIAlrZXlfcmVmX3QgZGtyZWY7CiAKKwkqX2Rlc3Rfa2V5cmluZyA9IE5VTEw7CisKIAkvKiBqdXN0IHJldHVybiBhIE5VTEwgcG9pbnRlciBpZiB3ZSB3ZXJlbid0IGFza2VkIHRvIG1ha2UgYSBsaW5rICovCi0JaWYgKHJpbmdpZCA9PSAwKSB7Ci0JCSpfZGVzdF9rZXlyaW5nID0gTlVMTDsKKwlpZiAocmluZ2lkID09IDApCiAJCXJldHVybiAwOwotCX0KIAogCS8qIGlmIGEgc3BlY2lmaWMga2V5cmluZyBpcyBub21pbmF0ZWQgYnkgSUQsIHRoZW4gdXNlIHRoYXQgKi8KIAlpZiAocmluZ2lkID4gMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDM0YzFkOTQuLmVmNjUzOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCBjMjYzNWJlLi44NWNmNTkxIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtcGNtLmggYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS5oCmluZGV4IDVjNGE0ZDMuLjY1Zjg2YjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtcGNtLmgKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1wY20uaApAQCAtOSw3ICs5LDcgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiBzdHJ1Y3QgcHhhMnh4X3J1bnRpbWVfZGF0YSB7CiAJaW50IGRtYV9jaDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHJ0aW1lci5jIGIvc291bmQvY29yZS9ocnRpbWVyLmMKaW5kZXggYzFkMjg1OS4uMzRjN2Q0OCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9ocnRpbWVyLmMKKysrIGIvc291bmQvY29yZS9ocnRpbWVyLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaHJ0aW1lcl9pbml0KCZzdGltZS0+aHJ0LCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCXN0aW1lLT50aW1lciA9IHQ7Ci0Jc3RpbWUtPmhydC5jYl9tb2RlID0gSFJUSU1FUl9DQl9JUlFTQUZFX1VOTE9DS0VEOwogCXN0aW1lLT5ocnQuZnVuY3Rpb24gPSBzbmRfaHJ0aW1lcl9jYWxsYmFjazsKIAl0LT5wcml2YXRlX2RhdGEgPSBzdGltZTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCmluZGV4IDJhMDJmNzAuLmE0MDQ5ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYwpAQCAtOTYsNyArOTYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWhydGltZXJfaW5pdCgmcGNzcF9jaGlwLnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCXBjc3BfY2hpcC50aW1lci5jYl9tb2RlID0gSFJUSU1FUl9DQl9JUlFTQUZFX1VOTE9DS0VEOwogCXBjc3BfY2hpcC50aW1lci5mdW5jdGlvbiA9IHBjc3BfZG9fdGltZXI7CiAKIAljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKaW5kZXggYzEzYTE3OC4uNTQ5YjRlYiAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYworKysgYi9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICoKLSAqLyAgICAgIAorICovCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtODksNyArODksNyBAQAogewogCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopZGF0YTsKLQkKKwogCXN3aXRjaChjbWQpIHsKIAkJY2FzZSBWSURJT0NHQ0FQOgogCQl7CkBAIC0xMTAsOSArMTEwLDkgQEAKIAkJY2FzZSBWSURJT0NHVFVORVI6CiAJCXsKIAkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSE9MCkgCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIGFyZyxzaXplb2YodikpIT0wKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHYudHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLyAKKwkJCWlmICh2LnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXYucmFuZ2Vsb3cgPSAoODcqMTYwMDApOwogCQkJdi5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKQEAgLTE0NCwyNCArMTQ0LDI0IEBACiAJCQlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgVklESU9DR0FVRElPOgotCQl7CQorCQl7CiAJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKIAkJCW1lbXNldCgmdiwgMCwgc2l6ZW9mKHYpKTsKIAkJCXN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOwogCQkJaWYoY29weV90b191c2VyKGFyZywmdiwgc2l6ZW9mKHYpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwkJCQorCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NTQVVESU86CiAJCXsKIAkJCXN0cnVjdCB2aWRlb19hdWRpbyB2OwotCQkJaWYoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkgCi0JCQkJcmV0dXJuIC1FRkFVTFQ7CQorCQkJaWYoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWlmICh0ZWEtPm9wcy0+bXV0ZSkKIAkJCQl0ZWEtPm9wcy0+bXV0ZSh0ZWEsCiAJCQkJCSAgICAgICAodi5mbGFncyAmCiAJCQkJCQlWSURFT19BVURJT19NVVRFKSA/IDEgOiAwKTsKLQkJCWlmKHYuYXVkaW8pIAorCQkJaWYodi5hdWRpbykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yNDAsMTEgKzI0MCwxMSBAQAogewogCXJldHVybiAwOwogfQotICAgICAgICAKKwogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfdGVhNTc1eF9tb2R1bGVfZXhpdCh2b2lkKQogewogfQotICAgICAgICAKKwogbW9kdWxlX2luaXQoYWxzYV90ZWE1NzV4X21vZHVsZV9pbml0KQogbW9kdWxlX2V4aXQoYWxzYV90ZWE1NzV4X21vZHVsZV9leGl0KQogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jIGIvc291bmQvb3NzL3dhdmVhcnRpc3QuYwppbmRleCBjNDc4NDJmLi4yYzYzYmI5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jCisrKyBiL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMKQEAgLTE0ODMsMTYgKzE0ODMsMTQgQEAKICNkZWZpbmUgVk5DX0hBTkRTRVRfREVURUNUCTB4NDAKICNkZWZpbmUgVk5DX0RJU0FCTEVfQVVUT1NXSVRDSAkweDgwCiAKLWV4dGVybiBzcGlubG9ja190IGdwaW9fbG9jazsKLQogc3RhdGljIGlubGluZSB2b2lkCiB2bmNfbXV0ZV9zcGtyKHdhdm5jX2luZm8gKmRldmMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQljcGxkX21vZGlmeShDUExEX1VOTVVURSwgZGV2Yy0+c3Brcl9tdXRlX3N0YXRlID8gMCA6IENQTERfVU5NVVRFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbndfZ3Bpb19sb2NrLCBmbGFncyk7CisJbndfY3BsZF9tb2RpZnkoQ1BMRF9VTk1VVEUsIGRldmMtPnNwa3JfbXV0ZV9zdGF0ZSA/IDAgOiBDUExEX1VOTVVURSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbndfZ3Bpb19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKaW5kZXggNzgwZGI2Ny4uODEyYzJiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogCiAjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgogI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCmluZGV4IDFiZmNlNDAuLjU4MjJkMmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+Cg==